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

  1. ;
  2. ;        CONSOLE.A86
  3. ;
  4. DBIOS        EQU    50    ;Access BIOS through BDOS
  5. DCONSTAT    EQU    2    ;BIOS console status
  6. DCONIN        EQU    3    ;BIOS console input
  7. DCONOUT        EQU    4    ;BIOS console out
  8. DLIST        EQU    5    ;BIOS list out
  9. DLISTST        EQU    15    ;BIOS list status
  10. ;    
  11. ;Console I/O routines for MODEM9.xx.
  12. ;
  13. SHOW:
  14.     CMP    AL,LF
  15.     JZ    CTYPE
  16.     CMP    AL,CR
  17.     JZ    CTYPE
  18.     CMP    AL,9
  19.     JZ    CTYPE
  20.     CMP    AL,' '
  21.     JC    SHOWHEX
  22.     CMP    AL,7FH
  23.     JC    CTYPE
  24. SHOWHEX:
  25.     PUSH    AX
  26.     MOV    AL,'('
  27.     CALL    CTYPE
  28.     POP    AX
  29.     CALL    HEXO
  30.     MOV    AL,')'
  31.     JMP    CTYPE
  32. ;
  33. CTYPE:
  34.     PUSH    CX
  35.     PUSH    DX
  36.     PUSH    BX
  37.     MOV    DL,AL
  38.     MOV    CL,WRCON
  39.     INT    224
  40.     POP    BX
  41.     POP    DX
  42.     POP    CX
  43.     RET
  44. ;
  45. CRLF:
  46.     PUSH    AX
  47.     MOV    AL,CR
  48.     CALL    TIPE
  49.     MOV    AL,LF
  50.     CALL    TIPE
  51.     POP    AX
  52.     RET
  53. ;
  54. TIPE:
  55.     PUSH    SI
  56.     PUSH    CX
  57.     PUSH    DX
  58.     PUSH    BX
  59. ;    AND    AL,07FH
  60.     MOV    Byte Ptr TBLOCK1,AL    
  61.     MOV    CL,DBIOS
  62.     MOV    DX,Offset TIPEBLOCK
  63.     INT    224
  64.     POP    BX
  65.     POP    DX
  66.     POP    CX
  67.     POP    SI
  68.     RET
  69. ;
  70. TIPEBLOCK    DB    DCONOUT
  71. TBLOCK1        DW    0
  72.         DW    0    
  73. ;
  74. STAT:
  75.     PUSH    CX
  76.     PUSH    DX
  77.     PUSH    BX
  78.     MOV    CL,DBIOS
  79.     MOV    DX,Offset STATBLOCK
  80.     INT    224
  81.     POP    BX
  82.     POP    DX
  83.     POP    CX
  84.     OR    AL,AL
  85.     RET
  86. ;
  87. STATBLOCK:
  88.     DB    DCONSTAT
  89.     DW    0
  90.     DW    0
  91. ;
  92. KEYIN:
  93.     PUSH    CX
  94.     PUSH    DX
  95.     PUSH    BX
  96. KEYIN1:
  97.     MOV    CL,DBIOS
  98.     MOV    DX,Offset KEYBLOCK
  99.     INT    224
  100.     POP    BX
  101.     POP    DX
  102.     POP    CX
  103.     RET
  104. ;
  105. KEYBLOCK:
  106.     DB    DCONIN
  107.     DW    0
  108.     DW    0
  109. ;
  110. LISTER:
  111.     PUSH    CX
  112.     PUSH    DX
  113.     PUSH    BX
  114.     MOV    CH,0        ; MJM 9.01.05
  115.     MOV    LBLOCK1,CX    ; MJM 9.01.05
  116.     MOV    DX,Offset LSTBLOCK
  117.     MOV    CL,DBIOS
  118.     INT    224
  119.     POP    BX
  120.     POP    DX
  121.     POP    CX
  122.     RET
  123. ;
  124. LSTBLOCK    DB    DLIST
  125. LBLOCK1        DW    0
  126.         DW    0
  127. ;
  128. LSTSTAT:
  129.     PUSH    CX
  130.     PUSH    DX
  131.     PUSH    BX
  132.     MOV    DX, OFFSET LSTSTATBLOCK
  133.     MOV    CL,DBIOS
  134.     INT    224
  135.     POP    BX
  136.     POP    DX
  137.     POP    CX
  138.     OR    AL,AL
  139.     RET
  140.  
  141. LSTSTATBLOCK:
  142.     DB    DLISTST
  143.     DW    0
  144.     DW    0
  145. ;
  146. ;
  147. UCASE:
  148.     CMP    AL,61H        ;CHANGES LOWER CASE CHARACTER..
  149.     JC    UCASERET    ;..IN 'AL' REG TO UPPER CASE.
  150.     CMP    AL,7BH
  151.     JNC    UCASERET
  152.     AND    AL,5FH
  153. UCASERET:
  154.     RET
  155. ;
  156. DECOUT:
  157.     PUSH    AX
  158.     PUSH    CX
  159.     PUSH    DX
  160.     PUSH    BX
  161.     MOV    CX, -10
  162.     MOV    DX, -1
  163. DECOU2:
  164.     ADD    BX,CX
  165.     INC    DX
  166.     JC    DECOU2
  167.     MOV    CX,OFFSET 10
  168.     ADD    BX,CX
  169.     XCHG    BX,DX
  170.     MOV    AL,BH
  171.     OR    AL,BL
  172.     JZ    DECOU3
  173.     CALL    DECOUT
  174. DECOU3:
  175.     MOV    AL,DL
  176.     ADD    AL,'0'
  177.     CALL    CTYPE
  178.     POP    BX
  179.     POP    DX
  180.     POP    CX
  181.     POP    AX
  182.     RET
  183. ;
  184. ;---->    DHXOUT: - DOUBLE PRECISION HEX OUTPUT ROUTINE.
  185. ;
  186. DHXOUT:
  187.     PUSH    BX
  188.     PUSH    AX
  189.     MOV    AL,BH        ;GET MS BYTE
  190.     CALL    HEXO        ;OUTPUT HIGH ORDER BYTE
  191.     MOV    AL,BL        ;GET LS BYTE
  192.     CALL    HEXO        ;OUTPUT LOW ORDER BYTE
  193.     POP    AX
  194.     POP    BX
  195.     RET
  196. ;
  197. HEXO:
  198.     PUSH    AX
  199.     RCR    AL,1
  200.     RCR    AL,1
  201.     RCR    AL,1
  202.     RCR    AL,1
  203.     CALL    NIBBL
  204.     POP    AX
  205. NIBBL:
  206.     AND    AL,0FH
  207.     CMP    AL,10
  208.     JC    ISNUM
  209.     ADD    AL,7
  210. ISNUM:
  211.     ADD    AL,'0'
  212.     JMP    TIPE
  213. ;
  214. SHFTYPE:
  215.     PUSH    AX
  216.     CALL    ILPRT
  217.     DB    'ctrl-',0
  218.     POP    AX
  219.     ADD    AL,40H
  220.     CALL    TIPE
  221. ;
  222. ;WRITE A STRING OF CHARACTERS
  223. ;
  224. ILPRT:
  225.     POP    SI
  226. ILPLP:
  227.     LODS    BYTE PTR [SI]
  228.     OR    AL,AL
  229.     JZ    ILPRET
  230.     CALL    TIPE
  231.     JMPS    ILPLP
  232. ILPRET:
  233.     PUSH    SI
  234.     RET
  235. ;
  236. ;WRITE A STRING OF CHARACTERS EXCEPT IN QUIET MODE
  237. ;
  238. ILPRTQ:
  239.     POP    SI
  240. ILPLPQ:
  241.     LODS    BYTE PTR [SI]
  242.     OR    AL,AL
  243.     JZ    ILPRETQ
  244.     TEST    QFLG,0FFH
  245.     JZ    ILPLPQ1
  246.     CALL    TIPE
  247. ILPLPQ1:
  248.     JMPS    ILPLPQ
  249. ILPRETQ:
  250.     PUSH    SI
  251.     RET
  252. ;
  253.  
  254. ;
  255. ;Duplicates 'read buffer' routine same as CP/M function 10,
  256. ;but does not use CTL-C (reason for the routine).  Does
  257. ;allow controls U, R, E and H (backspace).  Outputs bell if
  258. ;the input is greater than the buffer.
  259. ;
  260. INBUFF:
  261.     LAHF
  262.     XCHG    AL,AH
  263.     PUSH    AX
  264.     XCHG    AL,AH
  265.     PUSH    BX
  266.     PUSH    CX
  267.     PUSH    DX            ;'DX' REGISTERS MUST BE PUSHED LAST
  268. ISTART:
  269.     CALL    CLEAR            ;CLEAR THE BUFFER AREA
  270.     POP    DX            ;GET ADDRESS OF BUFFER ON RETRIES
  271.     PUSH    DX            ;RESTORE STACK
  272.     XOR    AL,AL
  273.     LAHF                ;ADDRESS COUNT FIELD
  274.     INC    DX
  275.     SAHF
  276.     MOV    SI,DX            ;INITIALIZE WITH A ZERO IN COUNT BYTE
  277.     MOV    [SI],AL
  278.     LAHF
  279.     INC    DX
  280.     SAHF
  281.     XCHG    BX,DX            ;ADDRESS FIRST BUFFER BYTE WITH 'BX'
  282. INBUFA:
  283.     CALL    CONIN
  284.     CMP    AL,CR            ;IS IT A RETURN?
  285.     JNZ    INBUFA_1    
  286.     JMP    INBUFR            ;IF SO, THEN RETURN
  287. INBUFA_1:
  288.     CMP    AL,7FH            ;IS IT A DELETE?
  289.     JZ    DELETE
  290.     CMP    AL,8            ;CTL-H WILL BACKSPACE..
  291.     JZ    DELETE            ;..OVER DELETED CHAR.
  292.     CMP    AL,'U'-40H        ;IS IT A CTL-U
  293.     JNZ    INBUFA_2    
  294.     JMP    INBUFO            ;OUTPUT # CR-LF AND START OVER
  295. INBUFA_2:
  296.     CMP    AL,'R'-40H        ;CTL-R RETYPES LINE
  297.     JNZ    INBUFA_3    
  298.     JMP    RETYPE
  299. INBUFA_3:
  300.     CMP    AL,'E'-40H
  301.     JNZ    INBUFA_4    
  302.     JMP    CRLF
  303. INBUFA_4:
  304.     CMP    AL,' '            ;NO CONTROL CHARACTERS OTHER..
  305.     JB    INBUFA            ;..THAN ABOVE ALLOWED.
  306.     MOV    CH,AL            ;SAVE INPUTTED CHARACTER
  307.     XCHG    BX,DX            ;SAVE 'BX' IN 'DX'
  308.     POP    BX            ;GET ADDRESS OF BUFFER IN 'BX'
  309.     PUSH    BX            ;RESTORE STACK
  310.     INC    BX            ;ADDRESS COUNT BYTE
  311.     INC    Byte Ptr [BX]        ;INCREASE COUNT BYTE
  312.     DEC    BX            ;ADDRESS MAXIMUM
  313.     MOV    AL,Byte Ptr [BX]    ;PUT MAXIMUM IN 'AL'
  314.     INC    BX            ;ADDRESS COUNT
  315.     CMP    AL,Byte Ptr [BX]    ;COMPARE COUNT TO MAXIMUM
  316.     JNB    INBUFA_5    
  317.     JMP    ALERT            ;IF MAXIMUM, RING BELL AND WAIT FOR CR
  318. INBUFA_5:
  319.     XCHG    BX,DX            ;RESTORE BUFFER POINTER TO 'BX'
  320.     MOV    Byte Ptr [BX],CH    ;PUT INPUTTED CHARACTER IN BUFFER
  321.     MOV    AL,CH            ;OUTPUT IT
  322.     CALL    TIPE
  323.     LAHF                ;BUMP POINTER
  324.     INC    BX
  325.     SAHF
  326.     JMPS    INBUFA            ;GET NEXT CHARACTER
  327. ;
  328. DELETE:
  329.     XCHG    BX,DX            ;SAVE BUFFER POINTER IN 'DX'
  330.     POP    BX            ;ADDRESS BEGINNING OF BUFFER
  331.     PUSH    BX            ;RESTORE STACK
  332.     INC    BX            ;ADDRESS COUNT FIELD
  333.     MOV    CH,AL            ;SAVE DELETE CHAR - 7FH OR 08H
  334.     MOV    AL,Byte Ptr [BX]
  335.     SUB    AL,1            ;DECREASE COUNT
  336.     MOV    Byte Ptr [BX],AL
  337.     JB    NODEL            ;DON'T DELETE PAST BEGINING OF BUFFER.
  338.     XCHG    BX,DX            ;RESTORE BUFFER POINTER TO 'BX'
  339.     DEC    BX            ;POINT TO LAST BYTE INPUTTED
  340.     MOV    AL,CH            ;GET BACK EITHER 7FH OR 08H
  341.     MOV    CH,Byte Ptr [BX]    ;GET CHARACTER BEING DELETED
  342.     MOV    Byte Ptr [BX],' '    ;RESTORE BLANK
  343.     CMP    AL,8
  344.     JZ    BKSPC
  345.     CMP    AL,7FH
  346.     JZ    BKSPC0
  347.     JMP    INBUFA            ;GET NEXT CHARACTER
  348. ;
  349. NODEL:
  350.     INC    Byte Ptr [BX]        ;DON'T LEAVE COUNT NEGATIVE
  351.     XCHG    BX,DX            ;RESTORE POINTER TO 'BX'
  352.     JMP    INBUFA
  353. ;
  354. BKSPC0:
  355.     MOV    AL,08H
  356. BKSPC:
  357.     CALL    TIPE            ;TRUE ERASE IF 08H
  358.     MOV    AL,' '
  359.     CALL    TIPE
  360.     MOV    AL,8
  361.     CALL    TIPE
  362.     JMP    INBUFA
  363. ;
  364. INBUFO:
  365.     MOV    AL,'#'
  366.     CALL    TIPE
  367.     CALL    CRLF
  368.     JMP    ISTART
  369. ;
  370. RETYPE:
  371.     POP    DX
  372.     PUSH    DX
  373.     LAHF                ;POINT TO CURRENT NUMBER..
  374.     INC    DX
  375.     SAHF
  376.     MOV    SI,DX            ;..OF CHARACTERS.
  377.     MOV    AL,[SI]
  378.     MOV    CH,AL
  379.     MOV    AL,'#'
  380.     CALL    TIPE
  381.     CALL    CRLF
  382.     MOV    AL,CH            ;TEST IF ZERO INPUT
  383.     OR    AL,AL
  384.     JNZ    CTLRLP    
  385.     JMP    INBUFA
  386. CTLRLP:
  387.     LAHF
  388.     INC    DX
  389.     SAHF
  390.     MOV    SI,DX
  391.     MOV    AL,[SI]
  392.     CALL    TIPE
  393.     DEC    CH
  394.     JNZ    CTLRLP
  395.     JMP    INBUFA
  396. ;    
  397. ALERT:
  398.     MOV    AL,7
  399.     CALL    TIPE
  400.     DEC    Byte Ptr [BX]
  401.     XCHG    BX,DX
  402.     JMP    INBUFA
  403. ;
  404. PCRLF:
  405.     CALL    CRLF
  406.     JMP    INBUFA
  407. ;
  408. INBUFR:
  409.     CALL    CRLF
  410.     POP    DX
  411.     POP    CX
  412.     POP    BX
  413.     POP    AX
  414.     XCHG    AL,AH
  415.     SAHF
  416.     RET
  417. ;
  418. CLEAR:
  419.     POP    DX            ;ACCOUNTS FOR CALL
  420.     POP    BX            ;ADDRESS BUFFER IN 'BX'
  421.     PUSH    BX            ;RESTORE..
  422.     PUSH    DX            ;..STACK
  423.     MOV    CH,Byte Ptr [BX]    ;SAVE MAXIMUM IN 'CH'
  424.     LAHF                ;POINT TO FIRST..
  425.     INC    BX
  426.     SAHF
  427.     LAHF                ;..BUFFER BYTE.
  428.     INC    BX
  429.     SAHF
  430.     MOV    AL,' '
  431. CLEARL:
  432.     MOV    Byte Ptr [BX],AL
  433.     LAHF
  434.     INC    BX
  435.     SAHF
  436.     DEC    CH
  437.     JNZ    CLEARL
  438.     RET
  439. ;
  440. CONIN:
  441.     CALL    KEYIN
  442.     CMP    AL,61H            ;CHANGE TO UPPER..
  443.     JB    NOUCASE            ;..CASE SINCE CP/M..
  444.     CMP    AL,7BH            ;..DOES THE SAME.
  445.     JNB    NOUCASE
  446.     AND    AL,5FH
  447. NOUCASE:
  448.     RET
  449. ;
  450. ;Parses a CP/M buffer into format same as CP/M command line.
  451. ;
  452. ;Loads a command line addressed by 'DX' registers (max # characters in
  453. ;line in 'DX', number of characters in the line in 'DX'+1, line starts
  454. ;in 'DX'+2) into FCB addressed by 'BX' registers.  The FCB should be at
  455. ;least 33 bytes in length.  The command line buffer must have a maximum
  456. ;length of at least one more than the greatest number of characters
  457. ;that will be needed.
  458. ;
  459. CPMLINE:
  460.     PUSH    AX
  461.     PUSH    CX
  462.     PUSH    DX
  463.     PUSH    BX
  464.     CALL    CINIT        ;FILLS FCBS WITH BLANKS AND NULLS
  465.     XCHG    BX,DX        ;GET START OF COMMAND LINE IN 'BX'
  466.     INC    BX        ;ADDRESS # BYTES IN CMD LINE
  467.     MOV    DL,BYTE PTR [BX] ;LOAD 'DX' PAIR WITH # BYTES
  468.     MOV    DH,0
  469.     INC    BX
  470.     ADD    BX,DX        ;POINT TO BYTE AFTER LAST CHAR..
  471.     MOV    BYTE PTR [BX],CR ;..IN CMD LINE AND STORE DELIMITER
  472.     POP    BX        ;RESTORE 'BX' AND 'DX'
  473.     POP    DX
  474.     PUSH    DX
  475.     PUSH    BX
  476.     INC    DX        ;ADDRESS START OF COMMAND
  477.     INC    DX
  478.     CALL    DRIVE
  479. NAME1:
  480.     MOV    CL,8        ;TRANSFER FIRST FILENAME TO FCB
  481.     CALL    TRANS
  482.     CMP    AL,CR
  483.     JZ    CDONE
  484.     CMP    AL,' '        ;IF SPACE, THEN START OF..
  485.     JZ    NAME2        ;..SECOND FILENAME.
  486. TYPE1:
  487.     POP    BX        ;FILETYPE MUST BE AFTER..
  488.     PUSH    BX        ;..EIGHTH BYTE OF NAME
  489.     MOV    CX, 9
  490.     ADD    BX,CX
  491.     MOV    CL,3        ;TRANSFER TYPE OF FIRST FILE
  492.     CALL    TRANS
  493.     CMP    AL,CR
  494.     JZ    CDONE
  495. NAME2:
  496.     XCHG    BX,DX
  497.     MOV    AL,BYTE PTR [BX]    ;EAT MULTIPLE SPACES..
  498.     XCHG    BX,DX
  499.     CMP    AL,' '        ;..BETWEEN NAMES
  500.     JNZ    NAME2C
  501.     INC    DX
  502.     JMP    NAME2
  503. NAME2C:
  504.     POP    BX        ;SECOND NAME STARTS IN 16TH BYTE
  505.     PUSH    BX        ;POINT 'BX' TO THIS BYTE
  506.     MOV    CX, 16
  507.     ADD    BX,CX
  508.     CALL    DRIVE
  509.     MOV    CL,8
  510.     CALL    TRANS
  511.     CMP    AL,CR
  512.     JZ    CDONE
  513. TYPE2:
  514.     POP    BX        ;SECOND TYPE STARTS IN 25TH BYTE.
  515.     PUSH    BX
  516.     MOV    CX,OFFSET 25
  517.     ADD    BX,CX
  518.     MOV    CL,3
  519.     CALL    TRANS
  520. CDONE:
  521.     POP    BX
  522.     PUSH    BX
  523.     INC    BX        ;POINT TO 1ST CHAR OF 1ST NAME IN FCB
  524.     CALL    CSCAN        ;CHECK FOR * (AMBIGUOUS NAMES).
  525.     POP    BX
  526.     PUSH    BX
  527.     MOV    CX,OFFSET 17    ;POINT TO 1ST CHAR OF 2ND NAME IN FCB.
  528.     ADD    BX,CX
  529.     CALL    CSCAN
  530.     POP    BX
  531.     POP    DX
  532.     POP    CX
  533.     POP    AX
  534.     RET
  535. ;
  536. CINIT:
  537.     PUSH    BX        ;INITIALIZES FCB WITH 1 NULL (FOR 1ST DRIVE),..
  538.     PUSH    CX        ;..11 BLANKS, 4 NULLS, 1 NULL (FOR 2ND DRIVE)..
  539.     MOV    BYTE PTR [BX],0    ;..11 BLANKS, AND 4 NULLS
  540.     INC    BX
  541.     MOV    CH,11
  542.     MOV    AL,' '
  543.     CALL    INITFILL
  544.     MOV    CH,5
  545.     MOV    AL,0
  546.     CALL    INITFILL
  547.     MOV    CH,11
  548.     MOV    AL,' '
  549.     CALL    INITFILL
  550.     MOV    CH,4
  551.     MOV    AL,0
  552.     CALL    INITFILL
  553.     POP    CX
  554.     POP    BX
  555.     RET
  556. ;
  557. INITFILL:
  558.     MOV    BYTE PTR [BX],AL
  559.     INC    BX
  560.     DEC    CH
  561.     JNZ    INITFILL
  562.     RET
  563. ;
  564. DRIVE:
  565.     INC    DX        ;CHECK 2ND BYTE OF FILENAME. IF IT..
  566.     XCHG    BX,DX
  567.     MOV    AL,BYTE PTR [BX]    ;..IS A ":", THEN DRIVE WAS SPECIFIED
  568.     XCHG    BX,DX
  569.     DEC    DX
  570.     CMP    AL,':'
  571.     JNZ    DEFDR        ;ELSE ZERO FOR DEFAULT DRIVE ('INIT' PUT ZERO)
  572.     XCHG    BX,DX
  573.     MOV    AL,BYTE PTR [BX]
  574.     XCHG    BX,DX
  575.     AND    AL,5FH
  576.     SUB    AL,40H        ;CALCULATE DRIVE (A=1, B=2,...)..
  577.     MOV    BYTE PTR [BX],AL    ;..AND PLACE IT IN FCB
  578.     INC    DX        ;ADDRESS FIRST BYTE OF..
  579.     INC    DX        ;..IN CMD LINE..
  580. DEFDR:
  581.     INC    BX        ;..AND NAME FIELD IN FCB
  582. DEFDRRET:
  583.     RET
  584. ;
  585. TRANS:
  586.     XCHG    BX,DX
  587.     MOV    AL,BYTE PTR [BX]
  588.     XCHG    BX,DX        ;TRANSFER FROM CMD LINE TO FCB..
  589.     INC    DX        ;..UP TO NUMBER OF CHARS SPECIFIED..
  590.     CMP    AL,CR        ;..BY 'CL' REG. KEEP SCANNING FIELD..
  591.     JZ    DEFDRRET    ;..WITHOUT TRANSFER UNTIL A DELIMITING..
  592.     CMP    AL,'.'        ;..FIELD CHAR SUCH AS '.', BLANK, OR..
  593.     JZ    DEFDRRET    ;..C/R (FOR END OF CMD LINE)
  594.     CMP    AL,' '
  595.     JZ    DEFDRRET
  596.     DEC    CL
  597.     JB    TRANS        ;ONCE 'CL' REG IS LESS THAN '0' KEEP READING
  598.     MOV    BYTE PTR [BX],AL    ;..CMD LINE BUT DO NOT TRANSFER TO FCB
  599.     INC    BX
  600.     JMP    TRANS
  601. ;
  602. CSCAN:
  603.     MOV    CH,8        ;SCAN FILE NAME ADDRESSED BY 'BX'
  604. TSTNAM:
  605.     MOV    AL,BYTE PTR [BX]
  606.     CMP    AL,'*'        ;IF '*' FOUND, FILL IN REST OF FIELD..
  607.     JZ    FILL1        ;..WITH '?' FOR AMBIGUOUS NAME
  608.     INC    BX
  609.     DEC    CH
  610.     JNZ    TSTNAM
  611.     JMP    TSTTYP
  612. ;
  613. FILL1:
  614.     CALL    FILL
  615. TSTTYP:
  616.     MOV    CH,3        ;SCAN AND FILL TYPE FIELD FOR NAME..
  617. TSTTYPL:
  618.     MOV    AL,BYTE PTR [BX]    ;..SPECIFIED ABOVE
  619.     CMP    AL,'*'
  620.     JZ    FILL2
  621.     INC    BX
  622.     DEC    CH
  623.     JZ    FILL2RET
  624.     JMP    TSTTYPL
  625. ;
  626. FILL2:
  627.     CALL    FILL
  628. FILL2RET:
  629.     RET
  630. ;
  631. FILL:
  632.     MOV    BYTE PTR [BX],'?'    ;ROUTINE TRANSFERS '?'
  633.     INC    BX
  634.     DEC    CH
  635.     JNZ    FILL
  636.     RET
  637. ;
  638. ;
  639. ;In-line compare.  Compares string addressed by 'DX' pair to string af-
  640. ;the call (ends with '0').  Return with carry set means strings not the
  641. ;same.  All registers (except 'AL') are unaffected.
  642. ;
  643. ILCOMP:
  644.     POP    SI        ; POINT 'SI' TO 1ST CHARACTER
  645.     PUSH    BX
  646.     MOV    BX,SI
  647.     PUSH    DX
  648. ILCOMPL:
  649.     MOV    AL,BYTE PTR [BX] ; 'BX' POINTS TO IN-LINE STRING
  650.     OR    AL,AL        ;END OF STRING IF ZERO
  651.     JZ    SAME
  652.     XCHG    BX,DX
  653.     MOV    AL,BYTE PTR [BX]
  654.     XCHG    BX,DX
  655.     CMP    AL,BYTE PTR [BX]
  656.     JNZ    NOTSAME
  657.     INC    BX
  658.     INC    DX
  659.     JMP    ILCOMPL
  660. ;
  661. NOTSAME:
  662.     MOV    AL,0        ;IF NOT SAME, FINISH THRU..
  663. NSLP:
  664.     INC    BX        ;..STRING SO RETURN WILL..
  665.     CMP    AL,BYTE PTR [BX]    ;..GO TO INSTRUCTION AFTER..
  666.     JNZ    NSLP        ;..STRING AND NOT REMAINDER OF STRING
  667.     STC
  668. SAME:
  669.     POP    DX
  670.     INC    BX        ;AVOIDS A NOP INSTRUCTION..
  671.     MOV    SI,BX        ;..WHEN RETURNING
  672.     POP    BX
  673.     PUSH    SI
  674.     RET
  675. ;
  676.