home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol175 / main.a86 < prev    next >
Encoding:
Text File  |  1984-07-15  |  23.3 KB  |  1,446 lines

  1.  
  2. ;        MAIN.A86
  3. ;
  4. ;Main line routines for MODEM9.xx.
  5. ;
  6. START:
  7.     MOV    AX,SS
  8.     MOV    SAVESS,AX
  9.     MOV    AX,SP
  10.     MOV    SAVESP,AX
  11.     PUSHF
  12.     POP    BX
  13.     MOV    AX,DS
  14.     MOV    SS,AX
  15.     MOV    SP,STACKTOP
  16.     PUSH    BX
  17.     POPF
  18.     CLD
  19.     CALL    INITADR        ;INITIALIZE ADDRESSES
  20.     CALL    VERNUM        ;GIVE CONFIGURATION MESSAGE
  21.     CALL    GETUSR        ;GET USER
  22.     MOV    SAVUSR,AL    ;SAVE FOR EXIT
  23.     MOV    NFILFLG,TRUE
  24.     MOV    SAVEFLG,FALSE
  25.     CALL    PROCOPT        ;PROCESS CONTROL OPTIONS
  26. ;
  27. RESTART:
  28.     MOV    AL,OPTION    ;GET MAIN OPTION
  29.     CMP    AL,' '        ;NO OPTION SPEC'D?
  30.     JZ    MENUJMP        ;TRUE, GO MENU
  31.     CMP    AL,'H'        ;MENU ASKED FOR?
  32.     JZ    MENU2JMP    ;YES, GO MENU2
  33.     CALL    INITMOD
  34.     CALL    MOVEFCB
  35.     CALL    INMODDATP     ;GOBBLE UP GARBAGE..
  36.     CALL    INMODDATP     ;..CHARACTERS ON LINE
  37.     MOV    ECHOFLG,0    ; RESET ECHO FLAG
  38.     MOV    LOCFLG,0    ; RESET LOCAL FLAG
  39.     MOV    AL,OPTION    ;PROCESS MAIN OPTION
  40.     CMP    AL,'E'        ;ECHO MODE?
  41.     JNZ    NOECH        ;JUMP IF NOT
  42.     MOV    ECHOFLG,TRUE    ;SET ECHO TO TRUE
  43.     JMP    DSKSAVE
  44. ;
  45. MENU2JMP:
  46.     JMP    MENU2
  47. ;
  48. NOECH:    CMP    AL,'L'        ;LOCAL ECHO MODE
  49.     JNZ    NOLOC
  50.     MOV    AL,TRUE
  51.     MOV    LOCFLG,AL
  52.     JMP    DSKSAVE
  53.  
  54. NOLOC:
  55.     CMP    AL,'T'        ;TERMINAL MODE?
  56.     JNZ    NOLOC1
  57.     JMP    DSKSAVE        ;YES
  58.  
  59. NOLOC1:
  60.     CMP    AL,'S'        ;SEND A FILE?
  61.     JNZ    NOLOC2
  62.     JMP    SENDFIL        ;YES
  63.  
  64. NOLOC2:
  65.     CMP    AL,'R'        ;RECEIVE A FILE?
  66.     JNZ    NOLOC3
  67.     JMP    RCVFIL        ;YES
  68.  
  69. NOLOC3:
  70.     CALL    NOTVLDMSG    ;SAY NOT A VALID OPTION
  71. MENUJMP:
  72.     JMP    MENU        ;NO VALID OPTION SPEC'D, GO MENU
  73. ;
  74. INITADR:
  75.     JMP    INITMOD        ;RETURN DONE FROM THIS ROUTINE..
  76. ;
  77. ; CHECK OPTIONS, PUT 0 IN APPROPRIATE PLACES IN OPTION TABLE
  78. ; IF OPTION SELECTED
  79. ;
  80. PROCOPT:
  81.     MOV    DX,OFFSET FCB+1
  82.     XCHG    BX,DX
  83.     MOV    AL,BYTE PTR [BX]
  84.     XCHG    BX,DX
  85.     MOV    OPTION,AL
  86. OPTLP:
  87.     INC    DX
  88.     XCHG    BX,DX
  89.     MOV    AL,BYTE PTR [BX]
  90.     XCHG    BX,DX
  91.     CMP    AL,' '
  92.     JZ    ENDOPT
  93.     MOV    BX,OFFSET OPTBL
  94.     MOV    CH,OFFSET OPTBE- OFFSET OPTBL
  95. OPTCK:
  96.     CMP    AL,BYTE PTR [BX]
  97.     JNZ    OPTNO
  98.     CMP    AL,'B'
  99.     JNZ    OPTCK1
  100.     MOV    AL,OPTION
  101.     CMP    AL,'S'
  102.     JZ    OPTCK1
  103.     CMP    AL,'R'
  104.     JNZ    OPTNO1
  105. OPTCK1:
  106.     MOV    BYTE PTR [BX],0
  107.     JMP    OPTLP
  108. ;
  109. OPTNO:
  110.     INC    BX
  111.     DEC    CH
  112.     JNZ    OPTCK
  113. OPTNO1:
  114.     CALL    NOTVLDMSG
  115.     POP    AX        ;PRESERVE STACK
  116.     JMP    MENU
  117. ;
  118. ENDOPT:
  119.     MOV    AL,VSEEFLG
  120.     OR    AL,AL
  121.     JNZ    ENDOPTRT
  122.     MOV    QFLG,AL        ;IF VIEWING SUPPRESS ALL ELSE
  123. ENDOPTRT:
  124.     RET
  125. ;
  126. MOVEFCB:
  127.     MOV    BX,OFFSET FCB+16
  128.     MOV    DX,OFFSET FCB
  129.     MOV    CH,16
  130.     CALL    MOVE
  131.     MOV    BYTE PTR .FCBSNO,0
  132.     MOV    BYTE PTR .FCBEXT,0
  133.     RET
  134. ;
  135. ;
  136. PRTMSG:
  137.     MOV    CL,PRINT
  138.     INT    224
  139.     RET
  140. ;
  141. EXIT:
  142.     MOV    DL,SAVUSR
  143.     CALL    SETUSR
  144.     MOV    DX,OFFSET 80H
  145.     MOV    CL,STDMA
  146.     INT    224
  147.     CALL    CKMODM        ;CATCH ANY GARBAGE CHARACTERS (is this safe?)
  148. COLDBOOT:
  149.     PUSHF            ;Must keep the flags in a register
  150.     POP    BX        ; as the current stack is about to blow
  151.     MOV    AX,SAVESS    ;Restore the original stack segment
  152.     MOV    SS,AX
  153.     MOV    AX,SAVESP    ; and pointer
  154.     MOV    SP,AX
  155.     PUSH    BX
  156.     POPF            ;Restore the flags
  157.     MOV    CX,0        ;Exit is via BDOS call 0
  158.     MOV    DX,0
  159.     INT    224        ;We're off to see the wizard....
  160. ;
  161. ;INITIALIZES CP/M FILE CONTROL BLOCKS AT 5CH AND 6CH
  162. ;
  163. SETFCB:
  164.     MOV    DX,OFFSET CMDBUF
  165.     MOV    BX,OFFSET FCB
  166.     CALL    CPMLINE
  167.     CALL    PROCOPT
  168. CHECKNM:
  169.     MOV    AL,BYTE PTR .FCB+1    ;CHECK ON THE PRIMARY OPTION
  170.     CMP    AL,'E'        ;RETURN IF ECHO OPTION
  171.     JZ    CHECKNMRT
  172.     CMP    AL,'H'        ;RETURN IF HELP OPTION
  173.     JZ    CHECKNMRT
  174.     CMP    AL,'L'        ;RETURN IF LOCAL ECHO OPTION
  175.     JZ    CHECKNMRT
  176.     CMP    AL,'T'
  177.     JNZ    L@103
  178.     JMP    TERMSEL
  179. L@103:
  180.     CMP    AL,'S'
  181.     JNZ    L@104
  182.     JMP    CKFILE
  183. L@104:
  184.     CMP    AL,'R'
  185.     JNZ    BDOPT
  186.     MOV    AL,BATCHFLG     ;IF MULT FILE MODE, THEN..
  187.     OR    AL,AL         ;..RECV OPT DOES NOT NEED..
  188.     JNZ    CKFILE
  189. CHECKNMRT:
  190.     RET
  191. ;
  192. BDOPT:
  193.     CALL    ILPRT
  194.     DB    CR,LF,'++ Bad Option ++',CR,LF,0
  195.     JMP    REENT
  196.  
  197. CKFILE:
  198.     MOV    AL,BYTE PTR .FCB+17    ;IF OPTION THAT NEEDS FILE NAME,..
  199.     CMP    AL,' '        ;..THEN CHECK TO SEE IF NAME..
  200.     JNZ    CHECKNMRT    ;...EXISTS. IF NOT..
  201. REENT:
  202.     CALL    ILPRT        ;..DO EVERYTHING OVER.
  203.     DB    CR,LF,'Re-enter PRIMARY option and file name only: ',BELL,0
  204.     MOV    DX,OFFSET CMDBUF
  205.     CALL    INBUFF
  206.     JMP    SETFCB
  207. ;
  208. TERMSEL:
  209.     CMP    BYTE PTR .FCB+17,' '
  210.     JNZ    SAVAGN
  211.     MOV    SAVEFLG,FALSE
  212.     MOV    NFILFLG,TRUE
  213.     RET
  214. ;
  215. SAVAGN:
  216.     MOV    NFILFLG,FALSE
  217.     RET
  218. ;
  219. ;
  220. ;ADJUSTS LOOP COUNTERS FOR VARIOUS CLOCK SPEEDS
  221. ;
  222. FIXCNT:
  223.     MOV    AL,CLOCK
  224.     CMP    AL,1
  225.     JZ    FIXCNTRT
  226.     PUSH    DX
  227.     PUSH    BX
  228.     POP    DX
  229. CNTMUL:
  230.     ADD    BX,DX
  231.     DEC    AL
  232.     JNZ    CNTMUL
  233.     POP    DX
  234. FIXCNTRT:
  235.     RET
  236. ;
  237. MOVE128:
  238.     MOV    CH,128
  239. MOVE:
  240.     MOV    SI,BX
  241.     PUSH    DS
  242.     POP    ES
  243.     MOV    DI,DX
  244. MOVE001:
  245.     MOVS    BYTE PTR [DI], BYTE PTR [SI]
  246.     DEC    CH
  247.     JNZ    MOVE001
  248.     MOV    BX,SI
  249.     MOV    DX,DI
  250.     RET
  251. ;
  252. MENU0:
  253.     TEST    NFILFLG,0FFH
  254.     JZ    MENU1
  255.     JMP    MENU        ;GO IF NO FILE ACTIVE
  256.  
  257. MENU1:
  258.     CALL    ILPRT        ;ELSE PRINT MESSAGE
  259.     DB    CR,LF,LF
  260.     DB    '** There may be text in the memory buffer **',CR,LF
  261.     DB    '** It will be lost unless NOL or WRT commands are used **'
  262.     DB    CR,LF,BELL,0
  263.     MOV    CH,2        ;2 MORE BELLS
  264. BLOOP:
  265.     MOV    AL,BELRPT    ;GET TIME
  266.     MOV    CL,AL
  267. BCLOOP:
  268.     MOV    BX, 1000    ;ABOUT 0.03 SECONDS
  269.     CALL    FIXCNT
  270. BILOOP:
  271.     MOV    AL,BL
  272.     OR    AL,BH
  273.     DEC    BX
  274.     JNZ    BILOOP
  275.     DEC    CL
  276.     JNZ    BCLOOP
  277.     MOV    AL,BELL
  278.     CALL    TIPE
  279.     DEC    CH
  280.     JNZ    BLOOP
  281. ;
  282. MENU:
  283.     MOV    BX,OFFSET RESTSN  ;RESTORE SECTOR NUMBERS..
  284.     MOV    DX,OFFSET SECTNOB ;..FOR NEW FILE TRANSFER.
  285.     MOV    CH,OFFSET SECTNOE- OFFSET SECTNOB
  286.     CALL    MOVE
  287.     MOV    BX,OFFSET RESTROPT ;RESTORE OPTION TABLE
  288.     MOV    DX,OFFSET OPTBL
  289.     MOV    CH,OFFSET OPTBE- OFFSET OPTBL
  290.     CALL    MOVE
  291.     MOV    AL,0
  292.     MOV    MFFLG1,AL    ;RESET MFACCESS ROUTINE..
  293.     NOT    AL        ;..AND MULTI TRANS IN CASE..
  294.     MOV    FSTFLG,AL    ;..OF ABORT.
  295.     JMP    XPRT
  296. ;
  297. MENU2:
  298.     CALL    CLRTST
  299.     CALL    ILPRT
  300.     DB    '               Single Letter Commands',CR,LF,LF
  301.     DB    ' H  - Display this information',CR,LF
  302.     DB    ' ?  - Display current settings',CR,LF,LF
  303.     DB      ' T  - Terminal mode',CR,LF
  304.     DB      ' E  - Terminal mode with echo',CR,LF
  305.     DB    ' L  - Terminal mode with local echo',CR,LF
  306.     DB    '     For capturing text use T(or E or L) FILENAME.TYP and'
  307.     DB    CR,LF
  308.     DB    '     Start & Stop toggles described on subsequent screen.'
  309.     DB    CR,LF,LF
  310.     DB      ' R  - Receive CP/M file using Christensen Protocol',CR,LF
  311.     DB      ' S  - Send CP/M file using Christensen Protocol',CR,LF
  312.     DB    '     Command is: R(or S) FILENAME.TYP',CR,LF
  313.     DB    '     R and S can use the following subcommands:',CR,LF
  314.     DB    '          B  - Bulk transfer using wildcards (e.g. *.*)',CR,LF
  315.     DB    '          Q  - Quiet mode (no messages to console)',CR,LF
  316.     DB    '          T  - Return to terminal mode after transfer',CR,LF
  317.     DB    '          V  - View bytes transferred on console',CR,LF,LF
  318.     DB    'The single letter commands may also be used on the',CR,LF
  319.     DB    'command line when the program is initially executed.'
  320.     DB    CR,LF,LF,0
  321. ;
  322.     CALL    NXTSCRN
  323. ;
  324.     CALL    ILPRT
  325.     DB    '               Three Letter Commands',CR,LF,LF
  326.     DB      'CPM - Exit from this program to CP/M',CR,LF
  327.     DB      'DIR - List directory and space free (may specify drive)'
  328.     DB    CR,LF
  329.     DB    'ERA - Erase file (may specify drive)',CR,LF
  330.     DB    'LOG - Change default drive/user (specify drive/user)'
  331.     DB    CR,LF
  332.     DB    '      and reset disks.  e.g. LOG A0, LOG B (user unchanged)'
  333.     DB    CR,LF
  334.     DB    'FOP - Display commands for setting terminal mode file',CR,LF
  335.     DB    '      output parameters',CR,LF,0
  336. ;
  337.     TEST    DISCFLG,0FFH
  338.     JZ    NODISC
  339.     CALL    ILPRT
  340.     DB    'DSC - Disconnect the modem from the telephone line',CR,LF,0
  341. ;
  342. NODISC:
  343.     TEST    SETUPTST,0FFH
  344.     JNZ    NOTIME
  345.     CALL    ILPRT
  346.     DB    'TIM - Set S mode time-to-send message',CR,LF,0
  347. ;
  348. NOTIME:
  349.     MOV    AL,TOGGLECRC
  350.     OR    AL,AL
  351.     JZ    NOTOGCRC
  352.     CALL    ILPRT
  353.     DB    'TCC - Toggle Checksum/CRC mode on receive',CR,LF,0
  354. ;
  355. NOTOGCRC:
  356.     TEST    TOGGLEBK,0FFH
  357.     JZ    NOTOGBK
  358.     CALL    ILPRT
  359.     DB    'TBR - Toggle backspace to rub conversion',CR,LF,0
  360. ;
  361. NOTOGBK:
  362.     TEST    TOGGLELOC,0FFH
  363.     JZ    NOTOGLOC
  364.     CALL    ILPRT
  365.     DB    'TLC - Toggle  1) local command immediate',CR,LF
  366.     DB    '              2) local command after ',0
  367.     MOV    AL,EXTCHR
  368.     CALL    SHFTYPE
  369.     DB    CR,LF,0
  370. ;
  371. NOTOGLOC:
  372.     MOV    AL,TOGGLELF
  373.     OR    AL,AL
  374.     JZ    NOTOGLF
  375.     CALL    ILPRT
  376.     DB    'TLF - Toggle send linefeed after carriage return',CR,LF,0
  377. ;
  378. NOTOGLF:
  379.     CALL    ILPRT
  380.     DB    'NUM - List remote systems',CR,LF,0
  381.     MOV    AL,SETUPTST
  382.     OR    AL,AL
  383.     JZ    NOSETUP
  384.     CALL    ILPRT
  385.     DB    'SET - Set communication ports',CR,LF,0
  386. ;
  387. NOSETUP:
  388.     MOV    AL,LF
  389.     CALL    TIPE
  390.     CALL    ILPRT
  391.     DB    '    The following are terminal text buffer commands:'
  392.     DB    CR,LF,0
  393.     CALL    ILPRT
  394.     DB      'DEL - Delete memory buffer and file',CR,LF
  395.     DB      'NOL - Return to terminal mode - no loss of data in buffer'
  396.     DB    CR,LF
  397.     DB      'WRT - Write memory buffer to disk file',CR,LF,LF,0
  398.     CALL    NXTSCRN
  399. ;
  400.     CALL    ILPRT
  401.     DB    '      Local Commands while in Terminal Mode',CR,LF,LF,0
  402.     MOV    AL,EXITCHR
  403.     CALL    SHFTYPE
  404.     DB    '  - Exit to command mode',CR,LF,LF,0
  405.     MOV    AL,TRANLOGON
  406.     OR    AL,AL
  407.     JZ    NOTRANLOG
  408.     MOV    AL,LOGCHR
  409.     CALL    SHFTYPE
  410.     DB    '  - Transmit string',CR,LF
  411.     DB    '     Must be followed by number of string (0-9)',CR,LF
  412.     DB    '     or L to display list of strings',CR,LF,LF,0
  413. ;
  414. NOTRANLOG:
  415.     TEST    LSTTST,0FFH
  416.     JZ    NOLST2
  417.     MOV    AL,LSTCHR
  418.     CALL    SHFTYPE
  419.     DB    '  - Toggle printer',CR,LF,0
  420. ;
  421. NOLST2:
  422.     MOV    AL,LF
  423.     CALL    TIPE
  424.     MOV    AL,SAVECHR
  425.     CALL    SHFTYPE
  426.     DB    '  - Start copy into buffer',CR,LF,0
  427.     MOV    AL,UNSAVECHR
  428.     CALL    SHFTYPE
  429.     DB      '  - Stop copy into buffer',CR,LF
  430.     DB    '     Start & Stop may be toggled as often as desired.',CR,LF
  431.     DB    '     A ":" at start of line indicates buffer is open.',CR,LF
  432.     DB    '     XOFF automatically used to stop input when writing',CR,LF
  433.     DB    '     full buffer to disk, XON sent to resume.',CR,LF,LF,0
  434.     MOV    AL,TRANCHR
  435.     CALL    SHFTYPE
  436.     DB    '  - Transfer ASCII file to remote',CR,LF,LF,0
  437.     MOV    AL,LOCONEXTCHR
  438.     OR    AL,AL
  439.     MOV    AL,EXTCHR
  440.     JNZ    REMDFLT
  441.     CALL    SHFTYPE
  442.     DB    '  - Send local control character to remote',CR,LF,0
  443.     JMP    XPRT
  444. REMDFLT:
  445.     CALL    SHFTYPE
  446.     DB    '  - Next character will be used for local control',CR,LF,0
  447. ;
  448. XPRT:
  449.     CALL    ILPRT
  450.     DB    CR,LF,'Drive ',0
  451.     MOV    CL,CURDSK    ;CURRENT DISK FUNCTION
  452.     INT    224
  453.     ADD    AL,'A'        ;MAKE ASCII
  454.     CALL    TIPE
  455. ;
  456.     CALL    GETUSR        ;GET CURRENT USER NUMBER
  457.     CMP    AL,0
  458.     JZ    SR3B        ;SKIP IF USER 0
  459.     PUSH    AX
  460.     CALL    ILPRT
  461.     DB    ', User ',0
  462.     POP    AX
  463.     MOV    BH,0
  464.     MOV    BL,AL
  465.     CALL    DECOUT        ;REPORT USER
  466. ;
  467. SR3B:
  468.     CALL    CRLF
  469.     TEST    NFILFLG,0FFH
  470.     JNZ    NOBUFMSG
  471.     CALL    GETSPC
  472.     CALL    ILPRT
  473.     DB    ' bytes of buffer free',CR,LF,0
  474. NOBUFMSG:    
  475.     CALL    ILPRT
  476.     DB    'COMMAND (H for Help): ',0
  477. GETCMD:
  478.     MOV    DX,OFFSET CMDBUF    ;ENTER COMMAND
  479.     CALL    INBUFF
  480.     CALL    CRLF
  481.     MOV    DX,OFFSET CMDBUF+2 ;POINT TO COMMAND
  482.     CALL    ILCOMP
  483.     DB    'CPM',0
  484.     JC    GETCMD1
  485.     JMP    EXIT
  486.  
  487. GETCMD1:
  488.     CALL    ILCOMP
  489.     DB    'LOG',0
  490.     JC    GETCMD2
  491.     JMP    LOGNEW
  492.  
  493. GETCMD2:
  494.     CALL    ILCOMP
  495.     DB    'DIR',0
  496.     JC    GETCMD3
  497.     JMP    DIR
  498.  
  499. GETCMD3:
  500.     CALL    ILCOMP
  501.     DB    'ERA',0
  502.     JC    GETCMD4
  503.     JMP    ERASEF
  504.  
  505. GETCMD4:
  506.     CALL    ILCOMP
  507.     DB    'DSC',0
  508.     JC    GETCMD5
  509.     JMP    DISC
  510.  
  511. GETCMD5:
  512.     CALL    ILCOMP
  513.     DB    '?',0
  514.     JC    GETCMD6
  515.     JMP    CURPAR
  516.  
  517. GETCMD6:
  518.     CALL    ILCOMP
  519.     DB    'SPD',0
  520.     JC    GETCMD7
  521.     JMP    SETSPD
  522.  
  523. GETCMD7:
  524.     CALL    ILCOMP
  525.     DB    'FOP',0
  526.     JC    GETCMD8
  527.     JMP    TFOMENU
  528.  
  529. GETCMD8:
  530.     CALL    ILCOMP
  531.     DB    'TIM',0
  532.     JC    GETCMD9
  533.     JMP    SETTIM
  534.  
  535. GETCMD9:
  536.     CALL    ILCOMP
  537.     DB    'TCC',0
  538.     JC    GETCMD10
  539.     JMP    TOGCRC
  540.  
  541. GETCMD10:
  542.     CALL    ILCOMP
  543.     DB    'TBR',0
  544.     JC    GETCMD11
  545.     JMP    TOGBKSP
  546.  
  547. GETCMD11:
  548.     CALL    ILCOMP
  549.     DB    'TLC',0
  550.     JC    GETCMD12
  551.     JMP    TOGLOC
  552.  
  553. GETCMD12:
  554.     CALL    ILCOMP
  555.     DB    'TLF',0
  556.     JC    GETCMD13
  557.     JMP    TOGLF
  558.  
  559. GETCMD13:
  560.     CALL    ILCOMP
  561.     DB    'TSL',0
  562.     JC    GETCMD14
  563.     JMP    TOGSTL
  564.  
  565. GETCMD14:
  566.     CALL    ILCOMP
  567.     DB    'TXF',0
  568.     JC    GETCMD15
  569.     JMP    TOGTXOFF
  570.  
  571. GETCMD15:
  572.     CALL    ILCOMP
  573.     DB    'TXN',0
  574.     JC    GETCMD16
  575.     JMP    TOGTXON
  576.  
  577. GETCMD16:
  578.     CALL    ILCOMP
  579.     DB    'TWE',0
  580.     JC    GETCMD17
  581.     JMP    TOGWECH
  582.  
  583. GETCMD17:
  584.     CALL    ILCOMP
  585.     DB    'TEF',0
  586.     JC    GETCMD18
  587.     JMP    TOGTEOF
  588.  
  589. GETCMD18:
  590.     CALL    ILCOMP
  591.     DB    'NUM',0
  592.     JC    GETCMD19
  593.     JMP    NUMPRN
  594.  
  595. GETCMD19:
  596.     MOV    AL,SETUPTST
  597.     OR    AL,AL
  598.     JZ    NOSETUP2
  599.     CALL    ILCOMP
  600.     DB    'SET',0
  601.     JC    NOSETUP2
  602.     JMP    SETUPENT
  603.  
  604. NOSETUP2:
  605.     CALL    ILCOMP
  606.     DB    'NOL',0
  607.     JC    NXTOPT1        ;CARRY SET = NO MATCH
  608.     MOV    AL,NFILFLG
  609.     OR    AL,AL
  610.     JZ    NOSETUP3
  611.     JMP    NOFILOPN    ;GO TELL OPERATOR IF NO FILE OPEN
  612.  
  613. NOSETUP3:
  614.     CALL    BUFMSG
  615.     MOV    BX,HLSAVE    ;RETURN TO TERMINAL..
  616.     JMP    TERM        ;..MODE WITH SAVE OPTION..
  617.                 ;..IF PREVIOUSLY ENABLED.
  618. ;
  619. NXTOPT1:
  620.     CALL    ILCOMP
  621.     DB    'WRT',0
  622.     JC    NXTOPT2
  623.     JMP    WRTFIL
  624.  
  625. NXTOPT2:
  626.     CALL    ILCOMP
  627.     DB    'DEL',0
  628.     JC    NXTOPT3
  629.     JMP    NEWFILE
  630.  
  631. NXTOPT3:
  632.     PUSH    BX
  633.     MOV    AL,CMDBUF+2
  634.     MOV    BX,OFFSET COMPLIST
  635.     CALL    COMPARE        ;COMPARES LIST POINTED TO BY HL..
  636.     POP    BX        ;..TO CHAR IN A-REG.
  637.     JC    NOTVLD        ;CARRY SET = NO MATCH
  638. DOOPT:
  639.     PUSH    BX        ;LOAD ORIGINAL FCB WITH TRANSFER..
  640.     CALL    SETFCB        ;..CMDS AND GO TO BEGINNING OF..
  641.     POP    BX        ;..PROGRAM. WILL FOLLOW SAME LOGIC..
  642.     JMP    RESTART        ;..AS IF PROGRAM WERE CALLED WITH..
  643.                 ;..CP/M COMMAND LINE.
  644. ;
  645. NOTVLD:
  646.     CALL    NOTVLDMSG
  647.     JMP    XPRT
  648. ;
  649. NOTVLDMSG:
  650.     CALL    ILPRT
  651.     DB    '++ Invalid Command ++',CR,LF,BELL,0
  652.     RET
  653. ;
  654. DIR:
  655.     MOV    CL,CURDSK
  656.     INT    224
  657.     MOV    DISKSAV,AL
  658.     CALL    DIRLST
  659.     MOV    DL,DISKSAV
  660.     MOV    CL,SELDSK
  661.     INT    224
  662.     JMP    XPRT
  663. ;
  664. LOGNEW:
  665.     TEST    NFILFLG,0FFH
  666.     JNZ    LOGNEW1
  667.     JMP    NORESET
  668.  
  669. LOGNEW1:
  670.     MOV    AL,CMDBUF+6
  671.     CMP    AL,' '
  672.     JNZ    SPECIFD
  673.     MOV    CL,CURDSK
  674.     INT    224
  675.     ADD    AL,'A'
  676. SPECIFD:
  677.     SUB    AL,'A'
  678.     MOV    DISKSAV,AL
  679.     CMP    AL,16
  680.     JC    SPECIFD1
  681.     JMP    NOTVLD
  682.  
  683. SPECIFD1:
  684.     MOV    AL,CMDBUF+7    ;GET NEW USER NUMBER
  685.     CMP    AL,' '        ;CHECK FOR SPACE
  686.     JZ    SR7A        ;EXIT IF NO NEW USER NUMBER SPECIFIED
  687.     CALL    NUMCHK        ;CHECK TO SEE IF IT IS A NUMBER
  688.     MOV    CH,AL        ;SAVE
  689.     MOV    AL,CMDBUF+8    ;GET SECOND DIGIT
  690.     CMP    AL,' '
  691.     JZ    SR7B        ;GO IF SPACE
  692.     CALL    NUMCHK
  693.     MOV    CL,AL        ;SAVE
  694.     MOV    AL,CH        ;GET SAVED FIRST DIGIT
  695.     ADD    AL,AL        ; X2
  696.     ADD    AL,AL        ; X4
  697.     ADD    AL,AL        ; X8
  698.     ADD    AL,CH        ; X9
  699.     ADD    AL,CH        ; X10
  700.     ADD    AL,CL
  701.     CMP    AL,16        ;CHECK FOR < 16
  702.     JC    SPECIFD2
  703.     JMP    NOTVLD        ;GO IF NOT
  704.  
  705. SPECIFD2:
  706.     MOV    CH,AL
  707. SR7B:
  708.     PUSH    CX
  709.     CALL    GETUSR
  710.     POP    CX        ;RESTORE SELECTED USER
  711.     CMP    AL,CH        ;AND COMPARE THEM
  712.     JZ    SR7A        ;EXIT IF UNCHANGED
  713.     MOV    DL,CH        ;ELSE SET NEW USER
  714.     CALL    SETUSR
  715. ;
  716. SR7A:
  717.     CALL    ILPRT
  718.     DB    'Insert disk for drive ',0
  719.     MOV    AL,DISKSAV
  720.     ADD    AL,'A'
  721.     CALL    TIPE
  722. NOTCR:
  723.     CALL    ILPRT
  724.     DB    CR,LF,'Hit return when ready',0
  725.     CALL    KEYIN
  726.     CMP    AL,CR
  727.     JNZ    NOTCR
  728.     CALL    CRLF
  729.     MOV    CL,RESET
  730.     INT    224    
  731.     MOV    DL,DISKSAV
  732.     MOV    CL,SELDSK
  733.     INT    224
  734.     JMP    XPRT
  735. ;
  736. GETUSR:
  737.     MOV    DL,0FFH        ;GET CURRENT USER
  738. SETUSR:
  739.     MOV    CL,USER        ;SET-UP FUNCTION CALL
  740.     INT    224        ;NUMBER IN RETURNED IN A
  741.     RET
  742. ;
  743. NORESET:
  744.     CALL    ILPRT
  745.     DB    '++      Terminal mode file open      ++',CR,LF
  746.     DB    '++ Use WRT or DEL before LOG command ++',CR,LF
  747.     DB    CR,LF,LF,BELL,0
  748.     XOR    AL,AL
  749.     JMP    XPRT
  750. ;
  751. ERASEF:
  752.     MOV    DX,OFFSET CMDBUF ;PUT CMD LINE INTO FCB AT HL
  753.     MOV    BX,OFFSET FCB
  754.     CALL    CPMLINE
  755.     CALL    MOVEFCB        ;MOVE FCB+16 TO FCB
  756.     CMP    BYTE PTR .FCB+1,' '
  757.     JNZ     ERASEF1
  758.     JMP    NOTVLD        ;GO IF NO FILE SPECIFIED
  759.  
  760. ERASEF1:
  761.     MOV    DX,OFFSET FCB
  762.     MOV    CL,SRCHF
  763.     INT    224
  764.     INC    AL        ;0 IF FILE NOT FOUND
  765.     JNZ    ERAFILE     ;OK, GO ERASE
  766.     CALL    ILPRT
  767.     DB    '++ File not found ++',CR,LF,BELL,0
  768.     JMP    XPRT
  769. ;
  770. ERAFILE:
  771.     MOV    DX,OFFSET FCB
  772.     MOV    CL,ERASE
  773.     INT    224
  774.     CALL    ILPRT
  775.     DB    'File erased',CR,LF,0
  776.     JMP    XPRT
  777. ;
  778. DISC:
  779.     MOV    AL,DISCFLG
  780.     OR    AL,AL
  781.     JNZ    DISC1
  782.     JMP    NOTVLD
  783.  
  784. DISC1:
  785.     CALL    DISCR
  786.     CALL    ILPRT
  787.     DB    '** Disconnected **',CR,LF,BELL,0
  788.     JMP    XPRT
  789. ;
  790. SETSPD:
  791.     CALL    ILPRT
  792.     DB    'Enter character output delay [0(none) - 9(longest delay)]: ',0
  793.     CALL    NUMGET
  794.     JNC    NOCHG1
  795.     MOV    BYTDLY,AL
  796. NOCHG1:
  797.     CALL    SPDMSG
  798.     CALL    ILPRT
  799.     DB    CR,LF,'Enter additional delay after <CR> [0-9]: ',0
  800.     CALL    NUMGET
  801.     JNC    NOCHG2
  802.     ROL    AL,1        ;X2
  803.     ROL    AL,1        ;X4
  804.     MOV    CRDLY,AL
  805. NOCHG2:
  806.     CALL    CRDLYMSG
  807.     JMP    XPRT
  808. ;
  809. NUMGET:
  810.     MOV    DX,OFFSET CMDBUF
  811.     CALL    INBUFF
  812.     MOV    AL,CMDBUF+2     ;GET NUMBER
  813.     CMP    AL,' '
  814.     JZ    NUMCHKRT
  815. NUMCHK:
  816.     SUB    AL,'0'
  817.     CMP    AL,10
  818.     JC    NUMCHKRT
  819.     POP    AX        ;PRESERVE STACK
  820.     JMP    NOTVLD
  821.  
  822. NUMCHKRT:
  823.     RET
  824. ;
  825. SPDMSG:
  826.     CALL    ILPRT
  827.     DB    'Terminal mode file output delay is 0.',0
  828.     MOV    AL,BYTDLY
  829.     CALL    GIVNUM
  830.     CALL    ILPRT
  831.     DB    ' seconds per character',CR,LF,0
  832.     RET
  833. ;
  834. CRDLYMSG:
  835.     CALL    ILPRT
  836.     DB    'Additional delay after <CR> is 0.',0
  837.     MOV    AL,CRDLY
  838.     CALL    GIVNUM
  839.     CALL    ILPRT
  840.     DB    ' seconds',CR,LF,0
  841.     RET
  842. ;
  843. GIVNUM:
  844.     ADD    AL,AL        ;2X
  845.     CMP    AL,10
  846.     MOV    CH,AL
  847.     JNC    NOZERO
  848.     MOV    AL,'0'
  849.     CALL    TIPE
  850.     MOV    AL,CH
  851. NOZERO:
  852.     PUSH    BX
  853.     MOV    BL,AL
  854.     MOV    BH,0
  855.     CALL    DECOUT
  856.     POP    BX
  857.     RET
  858. ;
  859. SETTIM:
  860.     MOV    AL,SETUPTST
  861.     OR    AL,AL
  862.     JZ    SETTIM1
  863.     JMP    NOTVLD
  864.  
  865. SETTIM1:
  866.     CALL    ILPRT
  867.     DB    'Use 0-7 to give baud rate for S mode time-to-send message,'
  868.     DB    CR,LF
  869.     DB    'where 0=110, 1=300, 2=600, 3=1200, 4=2400',CR,LF
  870.     DB    '5=4800, 6=9600 and 7 = 19200 baud',CR,LF,LF,'Enter value: ',0
  871.     CALL    NUMGET
  872.     CMP    AL,8
  873.     JC    SETTIM1A
  874.     JMP    NOTVLD
  875.  
  876. SETTIM1A:
  877.     MOV    MSPEED,AL
  878.     CALL    SETTIM2
  879.     JMP    XPRT
  880. ;
  881. SETTIM2:
  882.     MOV    AL,SETUPTST
  883.     OR    AL,AL
  884.     JNZ    SETTIM3
  885.     CALL    ILPRT
  886.     DB    'Rate for the S mode time-to-send message is set to ',0
  887.     JMP    SETTIM4
  888.  
  889. SETTIM3:
  890.     CALL    ILPRT
  891.     DB    'Modem speed is ',0
  892. SETTIM4:
  893.     CALL    BAUDPRT
  894.     RET
  895. ;
  896. ;Shows baud rates set for 'time to send' file transfer.
  897. ;
  898. BAUDPRT:
  899.     MOV    BX,OFFSET BAUDSPD
  900.     MOV    DH,0
  901.     MOV    AL,MSPEED    ;GET BAUD RATE CODE
  902.     ADD    AL,AL        ;X2
  903.     MOV    DL,AL
  904.     ADD    BX,DX        ;POINT TO CORRECT RATE
  905.     MOV    AL,BYTE PTR [BX] ; GET FIRST DIGIT
  906.     CALL    TIPE
  907.     INC    BX
  908.     MOV    AL,BYTE PTR [BX] ; GET SECOND DIGIT
  909.     CALL    TIPE
  910.     MOV    AL,MSPEED
  911.     CMP    AL,7
  912.     JC    NOTFAST
  913.     INC    BX
  914.     MOV    AL,Byte Ptr [BX] ;Get third digit
  915.     CALL    TIPE
  916. NOTFAST:
  917.     MOV    AL,MSPEED    ;CHECK FOR GREATER THAN 1000
  918.     CMP    AL,3
  919.     JC    NOTHOU        ;GO IF LESS
  920.     MOV    AL,'0'        ;PRINT EXTRA 0
  921.     CALL    TIPE
  922. NOTHOU:
  923.     CALL    ILPRT
  924.     DB    '0 baud',CR,LF,0
  925.     RET
  926. ;
  927. BAUDSPD    DB    '11','30','60','12','24','48','96','192'
  928. ;
  929. TOGCRC:
  930.     MOV    AL,TOGGLECRC
  931.     OR    AL,AL
  932.     JNZ    TOGCRC1
  933.     JMP    NOTVLD
  934. TOGCRC1:
  935.     MOV    AL,CKSUMDFLT
  936.     NOT    AL
  937.     MOV    CKSUMDFLT,AL
  938.     CALL    TOGCRC2
  939.     JMP    XPRT
  940. ;
  941. TOGCRC2:
  942.     OR    AL,AL
  943.     JNZ    CHEKMSG
  944.     CALL    ILPRT
  945.     DB    'CRC mode set',CR,LF,0
  946.     RET
  947. ;
  948. CHEKMSG:
  949.     CALL    ILPRT
  950.     DB    'Checksum mode set',CR,LF,0
  951.     RET
  952. ;
  953. TOGBKSP:
  954.     MOV    AL,TOGGLEBK
  955.     OR    AL,AL
  956.     JNZ    TEMP8
  957.     JMP    NOTVLD
  958. TEMP8:
  959.     MOV    AL,CONVBKSP
  960.     NOT    AL
  961.     MOV    CONVBKSP,AL
  962.     CALL    TOGBKSP2
  963.     JMP    XPRT
  964. ;
  965. TOGBKSP2:
  966.     TEST    CONVBKSP,0FFH
  967.     JZ    NORUBMSG
  968.     CALL    ILPRT
  969.     DB    'Backspace is rub',CR,LF,0
  970.     RET
  971. ;
  972. NORUBMSG:
  973.     CALL    ILPRT
  974.     DB    'Backspace is backspace',CR,LF,0
  975.     RET
  976. ;
  977. TOGLOC:
  978.     MOV    AL,TOGGLELOC
  979.     OR    AL,AL
  980.     JNZ    TOGLOC1
  981.     JMP    NOTVLD
  982.  
  983. TOGLOC1:
  984.     NOT    LOCONEXTCHR
  985.     CALL    TOGLOC2
  986.     JMP    XPRT
  987. ;
  988. TOGLOC2:
  989.     CALL    ILPRT
  990.     DB    'Use ',0
  991.     MOV    AL,LOCONEXTCHR
  992.     OR    AL,AL
  993.     MOV    AL,EXTCHR
  994.     JZ    LOCMSG
  995.     CALL    SHFTYPE
  996.     DB    ' before local command',CR,LF,0
  997.     RET
  998. ;
  999. LOCMSG:
  1000.     CALL    SHFTYPE
  1001.     DB    ' to send local command to remote',CR,LF,0
  1002.     RET
  1003. ;
  1004. TOGLF:
  1005.     MOV    AL,TOGGLELF
  1006.     OR    AL,AL
  1007.     JNZ    TOGLF1
  1008.     JMP    NOTVLD
  1009.  
  1010. TOGLF1:
  1011.     NOT    ADDLF
  1012.     CALL    TOGLF2
  1013.     JMP    XPRT
  1014. ;
  1015. TOGLF2:
  1016.     CALL    ILPRT
  1017.     DB    'Linefeed ',0
  1018.     MOV    AL,ADDLF
  1019.     OR    AL,AL
  1020.     JNZ    LFMSG
  1021.     CALL    ILPRT
  1022.     DB    'NOT ',0
  1023. LFMSG:
  1024.     CALL    ILPRT
  1025.     DB    'sent after <CR>',CR,LF,0
  1026.     RET
  1027. ;
  1028. TOGSTL:
  1029.     MOV    AL,TOGSLF
  1030.     OR    AL,AL
  1031.     JNZ    TOGSTL1
  1032.     JMP    NOTVLD
  1033.  
  1034. TOGSTL1:
  1035.     NOT    STRLF
  1036.     CALL    TOGSTL2
  1037.     JMP    XPRT
  1038. ;
  1039. TOGSTL2:
  1040.     CALL    ILPRT
  1041.     DB    'Linefeed ',0
  1042.     MOV    AL,STRLF
  1043.     OR    AL,AL
  1044.     JZ    SLFMSG
  1045.     CALL    ILPRT
  1046.     DB    'NOT ',0
  1047. SLFMSG:
  1048.     CALL    ILPRT
  1049.     DB    'sent after <CR> in terminal mode file output',CR,LF,0
  1050.     RET
  1051. ;
  1052. TOGTXOFF:
  1053.     MOV    AL,TOGXOFF
  1054.     OR    AL,AL
  1055.     JNZ    TOGTXOFF1
  1056.     JMP    NOTVLD
  1057.  
  1058. TOGTXOFF1:
  1059.     CALL    ILPRT
  1060.     DB    'Use XOFF testing? (Y/N): ',0
  1061.     CALL    GETANS
  1062.     JC    NOCHG3
  1063.     MOV    XOFFTST,AL
  1064. NOCHG3:
  1065.     CALL    XOFFMSG
  1066.     MOV    AL,XOFFTST
  1067.     OR    AL,AL
  1068.     JNZ    NOCHG3A
  1069.     JMP    XPRT
  1070.  
  1071. NOCHG3A:
  1072.     NOT    AL
  1073.     MOV    XONWAIT,AL
  1074.     MOV    ECHWAIT,AL
  1075.     CALL    THEREF
  1076.     CALL    XONMSG
  1077.     CALL    ECHMSG
  1078.     JMP    XPRT
  1079. ;
  1080. TOGTXON:
  1081.     CALL    ILPRT
  1082.     DB    'Use XON waiting after <CR> (Y/N): ',0
  1083.     CALL    GETANS
  1084.     JC    NOCHG4
  1085.     MOV    XONWAIT,AL
  1086. NOCHG4:
  1087.     CALL    XONMSG
  1088.     MOV    AL,XONWAIT
  1089.     OR    AL,AL
  1090.     JNZ    NOCHG4A
  1091.     JMP    XPRT
  1092.  
  1093. NOCHG4A:
  1094.     NOT    AL
  1095.     MOV    XOFFTST,AL        ;DON'T ALLOW BOTH
  1096.     MOV    ECHWAIT,AL
  1097.     CALL    THEREF
  1098.     CALL    XOFFMSG
  1099.     CALL    ECHMSG
  1100.     JMP    XPRT
  1101. ;
  1102. TOGWECH:
  1103.     CALL    ILPRT
  1104.     DB    'Use echo waiting before transmitting next character (Y/N): ',0
  1105.     CALL    GETANS
  1106.     JC    NOCHG5
  1107.     MOV    ECHWAIT,AL
  1108. NOCHG5:
  1109.     CALL    ECHMSG
  1110.     MOV    AL,ECHWAIT
  1111.     OR    AL,AL
  1112.     JNZ    NOCHG5A
  1113.     JMP    XPRT
  1114.  
  1115. NOCHG5A:
  1116.     NOT    AL
  1117.     MOV    XOFFTST,AL
  1118.     MOV    XONWAIT,AL
  1119.     CALL    THEREF
  1120.     CALL    XOFFMSG
  1121.     CALL    XONMSG
  1122.     JMP    XPRT
  1123. ;
  1124. ECHMSG:    CALL    ILPRT
  1125.     DB    'Waiting for character echo ',0
  1126.     MOV    AL,ECHWAIT
  1127.     OR    AL,AL
  1128.     JNZ    ECHMSG2
  1129.     CALL    ILPRT
  1130.     DB    'NOT ',0
  1131. ECHMSG2:
  1132.     CALL    ILPRT
  1133.     DB    'used in terminal mode file output',CR,LF,0
  1134.     RET
  1135. ;
  1136. GETANS:
  1137.     MOV    DX,OFFSET CMDBUF
  1138.     CALL    INBUFF
  1139.     MOV    AL,CMDBUF+2     ;GET ANSWER
  1140.     CMP    AL,' '
  1141.     CMC
  1142.     JZ    GETANSRT
  1143.     MOV    CH,AL
  1144.     CMP    AL,'N'
  1145.     MOV    AL,FALSE
  1146.     JZ    GETANSRT
  1147.     MOV    AL,CH
  1148.     CMP    AL,'Y'
  1149.     MOV    AL,TRUE
  1150.     JZ    GETANSRT
  1151.     POP    AX        ;PRESERVE STACK
  1152.     JMP    NOTVLD
  1153. GETANSRT:
  1154.     RET
  1155. ;
  1156. THEREF:
  1157.     CALL    ILPRT
  1158.     DB    'Therefore -',CR,LF,0
  1159.     RET
  1160. ;
  1161. XOFFMSG:
  1162.     CALL    ILPRT
  1163.     DB    'XOFF testing ',0
  1164.     MOV    AL,XOFFTST
  1165.     OR    AL,AL
  1166.     JNZ    XOTSTON
  1167.     CALL    ILPRT
  1168.     DB    'NOT ',0
  1169. XOTSTON:
  1170.     CALL    ILPRT
  1171.     DB    'used',0
  1172. XONMSG3:
  1173.     CALL    ILPRT
  1174.     DB    ' in terminal mode file output',CR,LF,0
  1175.     RET
  1176. ;
  1177. XONMSG:
  1178.     CALL    ILPRT
  1179.     DB    'XON ',0
  1180.     MOV    AL,XONWAIT
  1181.     OR    AL,AL
  1182.     JNZ    XONMSG2
  1183.     CALL    ILPRT
  1184.     DB    'NOT ',0
  1185. XONMSG2:
  1186.     CALL    ILPRT
  1187.     DB    'automatically tested after <CR>',0
  1188.     JMP    XONMSG3
  1189. ;
  1190. SETUPENT:
  1191.     MOV    AL,SETUPTST
  1192.     OR    AL,AL
  1193.     JNZ    SETUPENT1
  1194.     JMP    NOTVLD
  1195. SETUPENT1:
  1196.     CALL    SETUPR
  1197.     JMP    XPRT
  1198. ;
  1199. NEWFILE:
  1200.     MOV    AL,NFILFLG
  1201.     OR    AL,AL
  1202.     JNZ    NOFILOPN    
  1203.     MOV    AL,FCB3+1    ;CHECK THAT FILE WAS REQUESTED
  1204.     CMP    AL,' '
  1205.     JZ    NOFILOPN    ;IF NO FILE, DON'T ERASE
  1206.     MOV    DX,OFFSET FCB3
  1207.     MOV    CL,ERASE
  1208.     CALL    BDOSRT
  1209.     MOV    AL,TRUE        ;DO NOT ALLOW TERMINAL..
  1210.     MOV    NFILFLG,AL    ;..SAVE SINCE NO FILE..
  1211.     NOT    AL        ;..SPECIFIED.
  1212.     MOV    SAVEFLG,AL
  1213.     MOV    BX,OFFSET FCB3
  1214.     CALL    INITFCBS
  1215.     MOV    BX,OFFSET BOTTRAM
  1216.     MOV    HLSAVE,BX
  1217.     JMP    XPRT
  1218. ;
  1219. WRTFIL:
  1220.     CMP    NFILFLG,TRUE
  1221.     JZ    NOFILOPN
  1222.     MOV    AL,FCB3+1    ;CHECK THAT FILE WAS REQUESTED
  1223.     CMP    AL,' '
  1224.     JZ    NOFILOPN
  1225.     MOV    BX,HLSAVE
  1226.     CALL    NUMRECS        ;DISK WRITE ROUTINE AS USED IN..
  1227.     CALL    WRTDSK        ;..IN THE INTDSKSV ROUTINE.
  1228.     CALL    CLOSE3
  1229.     MOV    NFILFLG,TRUE
  1230.     MOV    SAVEFLG,FALSE
  1231.     MOV    BX,OFFSET FCB3
  1232.     CALL    INITFCBS     ;BLANK OUT FCB SO WRITTEN FILE CAN'T BE ERASED
  1233.     MOV    BX,OFFSET BOTTRAM
  1234.     MOV    HLSAVE,BX
  1235.     JMP    XPRT
  1236. ;
  1237. NOFILOPN:
  1238.     CALL    ILPRT
  1239.     DB    '++ No File Open ++',CR,LF,BELL,0
  1240.     JMP    XPRT
  1241. ;
  1242. COMPARE:
  1243.     MOV    CH,BYTE PTR [BX]    ;COMPARES A-REG WITH LIST..
  1244. COMPLP:
  1245.     INC    BX        ;..ADDRESSED BY HL. FIRST ELEMENT..
  1246.     CMP    AL,BYTE PTR [BX]    ;..OF LIST MUST BE NUMBER OF ELEMENTS..
  1247.     JZ    VALID        ;..BEING COMPARED. RETURNS WITH..
  1248.     DEC    CH        ;..CARRY SET IF A-REG DOES NOT..
  1249.     JNZ    COMPLP        ;.. CONTAIN AN ELEMENT IN LIST.
  1250.     STC
  1251. VALID:
  1252.     RET
  1253. ;
  1254. NXTSCRN:
  1255.     CALL    ILPRT
  1256.     DB    'HIT any KEY to CONTINUE',0
  1257. NOKEY1:
  1258.     CALL    STAT        ;GET KEYBOARD STATUS
  1259.     JZ    NOKEY1        ;KEEP LOOPING UNTIL KEYPRESS
  1260.     CALL    KEYIN        ;GOBBLE UP KEYPRESS
  1261.     CALL    CLRTST
  1262.     RET
  1263. ;
  1264. CLRTST:
  1265.     TEST    SCRNTEST,0FFH
  1266.     JZ    LOTSALF
  1267.     CALL    CLRSCRN
  1268.     RET
  1269. ;
  1270. LOTSALF:
  1271.     MOV    AL,CR
  1272.     CALL    TIPE
  1273.     MOV    CH,12
  1274.     MOV    AL,LF
  1275. LFLOOP:
  1276.     CALL    TIPE
  1277.     DEC    CH
  1278.     JNZ    LFLOOP
  1279.     RET    
  1280. ;
  1281. CURPAR:
  1282.     CALL    CLRTST
  1283.     CALL    ILPRT
  1284.     DB    '                Current Settings',CR,LF,LF,LF,0
  1285.     MOV    AL,CKSUMDFLT
  1286.     CALL    TOGCRC2
  1287.     MOV    AL,LSTTST
  1288.     OR    AL,AL
  1289.     JZ    NOLST3
  1290.     CALL    LSTMSG
  1291. NOLST3:
  1292.     CALL    DETCAR
  1293.     CALL    SETTIM2
  1294.     CALL    TOGBKSP2
  1295.     CALL    TOGLF2
  1296.     CALL    TOGLOC2
  1297.     CALL    ILPRT
  1298.     DB    'Terminal mode file buffer is ',0
  1299.     TEST    NFILFLG,0FFH
  1300.     JZ    ACTIVE
  1301.     CALL    ILPRT
  1302.     DB    'in',0
  1303. ACTIVE:
  1304.     CALL    ILPRT
  1305.     DB    'active',CR,LF,'Unused portion of buffer is ',0
  1306.     CALL    GETSPC
  1307.     CALL    ILPRT
  1308.     DB    ' bytes',CR,LF,0
  1309.     TEST    SETUPTST,0FFH
  1310.     JZ    NOSETP
  1311.     CALL    GIVEPRM
  1312. NOSETP:
  1313.     CALL    TOGSTL2
  1314.     CALL    TOGTEOF2
  1315.     CALL    XOFFMSG
  1316.     CALL    XONMSG
  1317.     CALL    ECHMSG
  1318.     CALL    SPDMSG
  1319.     CALL    CRDLYMSG
  1320.     CALL    CRLF
  1321.     JMP    XPRT
  1322. ;
  1323. GETSPC:
  1324.     CALL    GETMAX
  1325.     MOV    CH,AL
  1326.     MOV    BX,HLSAVE
  1327.     STC
  1328.     CMC
  1329.     MOV    AL,0
  1330.     SBB    AL,BL
  1331.     MOV    BL,AL
  1332.     MOV    AL,CH
  1333.     SBB    AL,BH
  1334.     MOV    BH,AL
  1335.     CALL    DECOUT
  1336.     RET
  1337. ;
  1338. TFOMENU:
  1339.     CALL    CLRTST
  1340.     CALL    ILPRT
  1341.     DB    '     Commands for Setting Terminal Mode File Output'
  1342.     DB    ' Parameters',CR,LF,LF,LF
  1343.     DB    'SPD - Set speed of file output',CR,LF
  1344.     DB    'TEF - Toggle transmission of end-of-file character',CR,LF,0
  1345.     MOV    AL,TOGSLF
  1346.     OR    AL,AL
  1347.     JZ    NOTOGSLF
  1348.     CALL    ILPRT
  1349.     DB    'TSL - Toggle stripping linefeeds',CR,LF
  1350.     DB    'TWE - Toggle wait for character echo',CR,LF,0
  1351. ;
  1352. NOTOGSLF:
  1353.     TEST    TOGXOFF,0FFH
  1354.     JZ    NOTOGXOFF
  1355.     CALL    ILPRT
  1356.     DB    'TXF - Toggle XOFF testing',CR,LF
  1357.     DB    'TXN - Toggle XON waiting after <CR>',CR,LF,LF,LF,0
  1358. ;
  1359. NOTOGXOFF:
  1360.     JMP    XPRT
  1361. ;    
  1362. TOGTEOF:
  1363.     NOT    EOFSEND
  1364.     CALL    TOGTEOF2
  1365.     JMP    XPRT
  1366. ;
  1367. TOGTEOF2:
  1368.     CALL    ILPRT
  1369.     DB    'End-of-file character ',0
  1370.     TEST    EOFSEND,0FFH
  1371.     JNZ    EOFMSG
  1372.     CALL    ILPRT
  1373.     DB    'NOT ',0
  1374. EOFMSG:
  1375.     CALL    ILPRT
  1376.     DB    'sent in terminal mode file output',CR,LF,0
  1377.     RET
  1378. ;
  1379. ;
  1380. ;THIS ROUTINE DISPLAYS THE PHONE NUMBERS IN THE LIBRARY
  1381. ;
  1382. NUMPRN:
  1383.     PUSH    BX
  1384.     CALL    CLRTST
  1385.     CALL    ILPRT
  1386.     DB    '           Library of Phone Numbers of Remote Systems',0
  1387.     MOV    CL,13       ;NUMBER OF LINES TO MOVE
  1388.     MOV    BX,OFFSET NUMBLIB  ;ADDRESS OF SOURCE MEMORY
  1389.     MOV    DX,OFFSET DBUF     ;ADDRESS OF TARGET MEMORY
  1390.     CALL    NEWLINE    ;START WITH CRLF
  1391.     XCHG    BX,DX
  1392.     MOV    BYTE PTR [BX],AL    ;+LF
  1393.     XCHG    BX,DX
  1394.     INC    DX          ;AND BUMP IT
  1395. NUMPRN1:
  1396.     INC    BX        ;SKIP PMMI DIALING LETTER
  1397.     INC    BX        ;AND EQUAL SIGN
  1398.     MOV    CH,30        ;NUMBER OF BYTES TO MOVE
  1399.     CALL    MOVE        ;MOVE TO BUFFER
  1400.     CALL    SPACES        ;2 ENTRIES + 3 SPACES = 63 CHARACTERS
  1401.     INC    BX
  1402.     INC    BX
  1403.     MOV    CH,30
  1404.     CALL    MOVE
  1405.     CALL    NEWLINE
  1406.     DEC    CL        ;NUMBER OF LINES TO PRINT
  1407.     JZ    NUMPRN2
  1408.     JMP    NUMPRN1
  1409. ;
  1410. NEWLINE:            ;PUTS CR-LF AT MEMORY POINTED BY 'DE'
  1411.     MOV    AL,CR        ;CR
  1412.     XCHG    BX,DX
  1413.     MOV    BYTE PTR [BX],AL
  1414.     MOV    AL,LF        ;LF
  1415.     INC    BX        ;BUMP POINTER
  1416.     MOV    BYTE PTR [BX],AL    ;STORE LF
  1417.     XCHG    BX,DX
  1418.     INC    DX        ;BUMP POINTER
  1419.     RET
  1420. ;
  1421. SPACES:
  1422.     MOV    AL,20H    ;SPACE
  1423.     XCHG    BX,DX
  1424.     MOV    BYTE PTR [BX],AL    ;1
  1425.     INC    BX
  1426.     MOV    BYTE PTR [BX],AL    ;2
  1427.     INC    BX
  1428.     MOV    BYTE PTR [BX],AL    ;3
  1429.     INC    BX
  1430.     XCHG    BX,DX
  1431.     RET
  1432. ;
  1433. NUMPRN2:
  1434.     MOV    AL,'$'
  1435.     XCHG    BX,DX
  1436.     MOV    BYTE PTR [BX],AL
  1437.     XCHG    BX,DX
  1438.     MOV    CL,PRINT
  1439.     MOV    DX,OFFSET DBUF    ;POINT TO TABLE OF NUMBERS TO PRINT
  1440.     INT    224
  1441.     CALL    CRLF
  1442.     CALL    CRLF
  1443.     POP    BX
  1444.     JMP    XPRT
  1445. ;
  1446.