* INSTALL_DBS CODE SECTION - PROVIDES CHECKING AND INSTALLATION FUNCTIONS
* HEADER AND INITIALISATION
D$       SETSTR   [.LEFT(.FILE,4)]
         INCLUDE  [D$]_QDOS_TRAP_IN
         INCLUDE  [D$]_QDOS_VECT_IN
         INCLUDE  [D$]_QDOS_DATA_IN
         INCLUDE  [D$]_DATA_IN
         INCLUDE  [D$]_INST_IN
         XREF     POST_CHK,INSTALL,I_DRIVE$
         XREF     I_DRIVE
         XDEF     START
*
         SECTION  CODE
*
START
         DC.W     $4AFB
         DC.W     'QDOS  '
         DC.W     '68000   '
         DC.W     WORK.LEN
*
         JMP      INIT(PC)
         NOP
*
         JMP      PRE_FORM(PC)
         NOP
*
         JMP      POST_CHK(PC)
         NOP
*
         JMP      OPTIONS(PC)
         NOP
*
         JMP      CONFIG(PC)
         NOP
*
         JMP      DUMP(PC)
         NOP
*
* TIDY UP PRIOR TO REMOVAL
         MOVEQ    #0,D0             NOTHING REQUIRES DOING
         RTS
*
* DUMP OUT A FIELD
DUMP
         MOVE.L   D3,-(SP)
         MOVE.W   (A1)+,D2          GET THE STRING LENGTH IN D2
         MOVEQ    #-1,D3            INFINITE TIMEOUT
         MOVEQ    #IO.SSTRG,D0      PRINT THE STRING
         TRAP     #3
         MOVE.L   (SP)+,D3
         TST.L    D0
         RTS
*
* INITIALISE THE WORKSPACE
INIT     
         MOVEM.L  D1/D3/A0/A1/A2,WINDOW(A3)  STORE VARIOUS VALUES
         MOVE.W   D2,ERR_INK(A3)
*
         MOVEM.L  A3/A4,-(SP)
         MOVE.W   UT.MTEXT,A4       PRINT OUT THE COPYRIGHT MESSAGE
         MOVE.L   WINDOW(A3),A0
         LEA      MS_COPY(PC),A1
         JSR      (A4)              THE CCR IS RETURNED SET ON D0
         MOVEM.L  (SP)+,A3/A4
         RTS
*
* THE COPYRIGHT MESSAGE
MS_COPY
         DC.W     MS_COPY.-MS_COPY_
                  ;         10        20        30        40        50
MS_COPY_          ;123456789 123456789 123456789 123456789 123456789
         DC.B     'Install QUILL/ARCHIVE/ABACUS printer drivers from',10
         DC.B     'the INSTALL_DBS database.',10
         DC.B     'By D.W.Howells.'
MS_COPY.
         DS.W     0                 ALIGN THE ASSEMBLER ON A WORD BOUNDARY
*
* PRE-FORMAT THE STRING - NOTHING IS REQUIRED HERE
PRE_FORM
         MOVEQ    #0,D1             JUST CONTINUE AS NORMAL
         MOVEQ    #0,D0
         RTS
*
* OPTIONS - ENQUIRE AS TO WHETHER INSTALLATION IS DESIRED
OPTIONS
         MOVE.L   A3,-(SP)
         MOVE.W   UT.MTEXT,A2       PRINT OUT THE OPTIONS MESSAGE
         MOVE.L   WINDOW(A3),A0
         LEA      MS_OPT(PC),A1
         JSR      (A2)              THE CCR IS RETURNED SET ON D0
         MOVE.L   (SP)+,A3
         BNE.S    OPT_RET
*
         MOVEQ    #-1,D3            INFINITE TIMEOUT
OPT_KEY
         MOVEQ    #IO.FBYTE,D0      GET A KEYPRESS
         TRAP     #3
         TST.L    D0
         BNE.S    OPT_RET
         CMPI.B   #27,D1            IF ESC, THEN RETURN
         BEQ.S    OPT_RET
         ANDI.B   #$DF,D1           MAKE UPPERCASE
         CMPI.B   #'H',D1           IF 'H', THEN HELP IS REQUIRED
         BEQ.L    HELP
         CMPI.B   #'I',D1           IF NOT 'I', THEN ASK AGAIN
         BNE.S    OPT_KEY
* DO THE INSTALLATION
         BSR.L    INSTALL
* AND RETURN
OPT_RET
         TST.L    D0
         RTS
*
MS_OPT   DC.W     MS_OPT.-MS_OPT_
MS_OPT_  
                  ;         10        20        30        40        50
                  ;123456789 123456789 123456789 123456789 123456789
         DC.B     'Please press the uppercase letter of the required',10
         DC.B     'option:',10
         DC.B     '  Help  Install  ESCape',10,10
MS_OPT.
         DC.W     0                 MUST END ON A WORD BOUNDARY
*
* CONFIGURE THE INSTALLATION DRIVE NAME
CONFIG
         MOVE.L   A3,-(SP)
         MOVE.W   UT.MTEXT,A2       PRINT OUT THE CONFIGURATION MESSAGE
         MOVE.L   WINDOW(A3),A0
         LEA      MS_CNFG(PC),A1
         JSR      (A2)              THE CCR IS RETURNED SET ON D0
         MOVE.L   (SP)+,A3
         BNE.S    CF_RTS
*
         LEA      I_DRIVE$(PC),A1   POINT TO DRIVE NAME
         MOVE.W   (A1)+,D2          GET STORAGE SPACE SIZE
CF_EDIT
         MOVEQ    #0,D1             READ-TYPE EDIT
         MOVE.L   RT_EDIT(A3),A2    EDIT THE NAME IN SITU
         JSR      (A2)
         BNE.S    CF_RTS
         CMPI.B   #27,D1            LOAD OLD IN IF ESC
         BEQ.S    CF_LOAD
         CMPI.B   #10,D1            RE-EDIT IF NOT LF
         BNE.S    CF_EDIT
*
         BSR.S    CF_DATA
*
         LEA      I_DRIVE$(PC),A1   POINT TO DRIVE NAME
         MOVE.W   (A1)+,D2          GET STORAGE SPACE SIZE
         ADDQ.W   #2,D2             ALSO SAVE THE STRING LENGTH
         MOVEQ    #IO.SSTRG,D0
         TRAP     #3
         TST.L    D0
         BNE.S    CF_RTS
*
         MOVEQ    #FS.FLUSH,D0      FLUSH THE FILE
         TRAP     #3
         BRA.S    CF_RTS
*
CF_LOAD
         BSR.S    CF_DATA
*
         LEA      I_DRIVE$(PC),A1   POINT TO DRIVE NAME
         MOVE.W   (A1)+,D2          GET STORAGE SPACE SIZE
         ADDQ.W   #2,D2             ALSO LOAD THE STRING LENGTH
         MOVEQ    #IO.FSTRG,D0      LOAD THE STRING LENGTH
         TRAP     #3
CF_RTS
         TST.L    D0
         RTS
*
CF_DATA
         MOVE.L   DATABASE(A3),A0
         MOVEQ    #0,D1             WORK OUT FILE POSITION OF DRIVE NAME
         ADD.W    DBH.RPT(A0),D1
         SUB.W    DBH.CODE(A0),D1
         ADDI.L   #I_DRIVE-START,D1
*
         MOVEQ    #-1,D3
         MOVE.L   DB.CHID(A0),A0
         MOVEQ    #FS.POSAB,D0      POSITION THE FILE POINTER
         TRAP     #3
         TST.L    D0
         BNE.S    CFD_ERR
         RTS
*
CFD_ERR
         ADDQ.L   #4,SP             UNSTACK THE 1ST RETURN ADDRESS
         RTS
*
*
MS_CNFG  DC.W     MS_CNFG.-MS_CNFG_
MS_CNFG_
                  ;         10        20        30        40        50
                  ;123456789 123456789 123456789 123456789 123456789
         DC.B     'Please type/edit new installation drive name.',10
         DC.B     'Press ENTER when finished, ESC to exit.',10,10
MS_CNFG.
         DC.W     0                 MUST END ON A WORD BOUNDARY
*
* HELP IS REQUESTED - DISPLAY HELP INFO
HELP
         MOVE.L   A3,-(SP)
         MOVE.W   UT.MTEXT,A2       PRINT OUT THE HELP MESSAGE
         MOVE.L   WINDOW(A3),A0
         LEA      MS_HELP(PC),A1
         JSR      (A2)              THE CCR IS RETURNED SET ON D0
         MOVE.L   (SP)+,A3
         BNE.S    HLP_RTS
*
         MOVEQ    #-1,D3
         MOVEQ    #IO.FBYTE,D0
         TRAP     #3
HLP_RTS
         TST.L    D0
         RTS
*
MS_HELP  DC.W     MS_HELP.-MS_HELP_
MS_HELP_
*                           10        20        30        40        50
*                  123456789 123456789 123456789 123456789 123456789
         DC.B     'Data is installed in the file given by FILENAME$',10
         DC.B     'BAUD rates can be: 9600,4800,2400,1200,600,300,75',10
         DC.B     'PARITY can be: NONE, SPACE, MARK, ODD, EVEN',10
         DC.B     'CONTINUOUS paper can be YES or NO',10
         DC.B     'The WIDTH and PAGE LENGTH have a maximum of 255',10
         DC.B     '',10
         DC.B     'The control strings can have up to 11 items of:',10
         DC.B     'Decimal code: nnn        Hex code: $nn',10
         DC.B     'A character code: ',39,'x or "x',10
         DC.B     'An ASCII control code:',10
         DC.B     '  NUL  SOH  STX  ETX  EOT  ENQ  ACK  BEL',10
         DC.B     '  BS   HT   LF   VT   FF   CR   SO   SI',10
         DC.B     '  DLE  DC1  DC2  DC3  DC4  NAK  SYN  ETB',10
         DC.B     '  CAN  EM   SUB  ESC  FS   GS   RS   US   DEL',10
         DC.B     '',10
         DC.B     'Please press a key'
MS_HELP.
         END
