home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol018 / cat2.asm < prev    next >
Assembly Source File  |  1984-04-29  |  5KB  |  314 lines

  1. ;V2.0
  2. ;CAT.ASM - PERFORMS DIR FUNCTION ON MAST.CAT
  3. ;11/??/77 WRITTEN BY WARD CHRISTENSEN
  4. ;01/07/78 MODIFY FOR NON-BASIC MASTER CAT
  5. ;01/08/78 MODIFY TO SKIP IGNORE FILENAMES
  6. ; 01/12/81 WDE MODIFY FOR USER NRS
  7. ;TO EXECUTE:
  8. ;    CAT FILENAME.FILETYPE DISKNAME.DISKTYPE
  9. ;COMMAND MAY BE FOLLOWED BY COMMENTS (TITLE)
  10. ;MAST.CAT M-U-S-T HAVE IGNORE FILENAMES FIRST
  11. ;EG:    (NAME.TYPE
  12. ;    NAME.TYPE
  13. ;    LASTNAME.TYPE)
  14.     ORG    100H
  15.     CALL    START
  16.     DB    'CAT.COM 01/12/81'
  17.     DB    0DH,0AH,'$'
  18. ;PRINT ID MESSAGE
  19. START    POP    D
  20.     MVI    C,PRINT
  21.     CALL    BDOS
  22. ;INIT LOCAL STACK
  23.     LXI    H,0
  24.     DAD    SP
  25.     SHLD    STACK
  26.     LXI    SP,STACK
  27. ;SAVE THE NAMES
  28.     LXI    D,FCB+1
  29.     LXI    H,FNAME
  30.     MVI    B,8
  31.     CALL    MOVER
  32.     MVI    B,3
  33.     CALL    MOVER
  34.     LXI    D,FCB+17 ;DISK NAME
  35.     LXI    H,DNAME
  36.     MVI    B,8
  37.     CALL    MOVER
  38.     MVI    B,3
  39.     CALL    MOVER
  40. ;MOVE 'MAST.CAT' TO FCB
  41.     LXI    D,FCBNAME
  42.     LXI    H,FCB+1
  43.     MVI    B,8+3+1
  44.     CALL    MOVE
  45. ;SAVE THE COMMAND LINE AS THE TITLE
  46. ;ALLOWS 'CAT *.* *.* MM/DD/YY' TYPE TITLE
  47. ;FOR HARD COPY LISTINGS
  48.     LXI    D,80H
  49.     LXI    H,TTL0+6
  50.     LDAX    D    ;GET LENGTH
  51.     ORA    A    ;NO OPERANDS ON CAT?
  52.     JZ    NOOP
  53.     INX    D
  54.     MOV    B,A    ;SET FOR MOVE
  55.     CALL    MOVE
  56. NOOP    MVI    M,'$'    ;END OF TITLE
  57. ;OPEN MAST.CAT
  58.     LXI    D,FCB
  59.     MVI    C,OPEN
  60.     CALL    BDOS
  61.     INR    A
  62.     JNZ    SKPIGN    ;SKIP THE 'TO BE IGNORED' NAMES
  63. ;OPEN FAILED
  64.     CALL    ERXIT
  65.     DB    '++UNABLE TO OPEN MAST.CAT$'
  66. ;EXIT PRINTING MSG ON TOP OF STACK
  67. ERXIT    POP    D    ;GET ERR MSG
  68.     MVI    C,PRINT
  69.     CALL    BDOS
  70. ;RESTORE STACK, EXIT
  71. EXIT    LHLD    STACK
  72.     SPHL
  73.     RET
  74. ;
  75. ;SKIP THE IGNORE FILENAMES AT THE HEAD OF MAST.CAT
  76. ;
  77. SKPIGN    CALL    RDCHR
  78.     CPI    ')'    ;END OF IGNORE?
  79.     JNZ    SKPIGN
  80.     CALL    RDCHR    ;GET CR
  81.     CALL    RDCHR    ;GET LF
  82.     JMP    NEWPG1
  83. ;
  84. NEWPG    MVI    A,'L'-40H ;FORMS FEED
  85.     CALL    TYPE    ;EJECT
  86. ;PRINT TITLE
  87. NEWPG1    LXI    D,TTL0
  88.     MVI    C,PRINT
  89.     CALL    BDOS
  90.     CALL    CRLF
  91.     CALL    CRLF
  92.     LXI    D,TTL
  93.     MVI    C,PRINT
  94.     CALL    BDOS
  95.     CALL    CRLF
  96. ;RESET LINECOUNT
  97.     MVI    A,5
  98.     STA    LINECT
  99. ;MATCH A LINE, PRINT IF IT MATCHES
  100. ;EXIT IF KEY PRESSED
  101. LOOP    MVI    C,KSTAT
  102.     CALL    BDOS
  103.     DCR    A
  104.     JZ    EXIT
  105. ;MATCH FILENAME
  106.     LXI    D,BUFF    ;WHERE TO STORE NAME READ
  107.     LXI    H,FNAME
  108.     MVI    B,8
  109.     CALL    MATCH
  110.     JC    SKIP    ;NAME/TYPE DIDN'T MATCH
  111.     INX    D    ;ALLOW FOR '.'
  112. ;MATCH FILETYPE
  113.     MVI    B,3    ;TYPE
  114.     CALL    MATCH
  115.     JC    SKIP
  116. ;SKIP PAST COMMA
  117. ;MATCH DISK'S FILENAME
  118.     LXI    D,BUFF+15
  119.     LXI    H,DNAME
  120.     MVI    B,8
  121.     CALL    MATCH
  122.     JC    SKIP
  123.     INX    D    ;ALLOW FOR '.'
  124. ;MATCH DISK'S FILETYPE (NUMBER)
  125.     MVI    B,3
  126.     CALL    MATCH    ;TYPE
  127.     JC    SKIP
  128.     INX    D    ;ALLOW FOR ';'
  129. UNG    CALL    RDCHR
  130.     CPI    ';'
  131.     JZ    UNG
  132.     STAX    D
  133. ;
  134. ;
  135. ;GOT MATCHING NAME
  136. ;
  137. FNIN    LXI    H,BUFF
  138. ;PRINT MESSAGE UP TO BINARY 0
  139. PRBUF    MOV    A,M
  140.     ORA    A    ;END OF BUFF?
  141.     JZ    EOBUF
  142.     CALL    TYPE
  143.     INX    H
  144.     JMP    PRBUF
  145. EOBUF    LDA    ENTRY
  146.     INR    A
  147.     ANI    1
  148.     STA    ENTRY
  149.     JNZ    SKIP
  150.     CALL    CRLF
  151.     LDA    LINECT
  152.     INR    A
  153.     STA    LINECT
  154.     CPI    58
  155.     JC    SKIP
  156.     CALL    SKIPLF
  157.     JMP    NEWPG
  158. ;
  159. SKIP    CALL    SKIPLF
  160.     JMP    LOOP
  161. ;SKIP TO END OF LINE (L/F)
  162. SKIPLF    CALL    RDCHR
  163.     CPI    0AH    ;SKIP TO END
  164.     JNZ    SKIPLF    ;OF LINE
  165.     RET
  166. ;
  167. ;MATCH ENTRY BY READING CHARS
  168. ;STORE IN BUFFER POINTED TO BY DE
  169. ;MATCH NAME POINTED TO BY HL
  170. ;
  171. MATCH    CALL    RDCHR
  172.     STAX    D
  173.     CMP    M
  174.     JNZ    MAT50    ;CHECK '?'
  175. MAT25    INX    D
  176.     INX    H
  177.     DCR    B    ;MORE?
  178.     JNZ    MATCH
  179. MAT40    CALL    RDCHR    ;EAT TERMINATOR
  180.     ORA    A    ;CARRY OFF, SHOWS OK
  181.     RET
  182. ;
  183. MAT50    CPI    '.'    ;END OF NAME?
  184.     JZ    MAT100
  185.     CPI    ','    ;END OF NAME?
  186.     JZ    MAT100
  187.     CPI    ';'    ;END OF TYPE?
  188.     JZ    MAT100
  189.     MOV    A,M    ;MATCHING '?'
  190.     CPI    '?'
  191.     JZ    MAT25    ;ACCEPT IT
  192. MAT75    MVI    A,' '    ;PAD
  193.     STAX    D
  194.     INX    D
  195.     INX    H
  196.     DCR    B
  197.     JNZ    MAT75
  198.     STC        ;SHOW BAD
  199.     RET
  200. MAT100    MOV    A,M
  201.     CPI    '?'
  202.     JZ    MAT200
  203.     CPI    ' '
  204.     JNZ    MAT75
  205. MAT200    MVI    A,' '
  206.     STAX    D
  207.     INX    D
  208.     INX    H
  209.     DCR    B
  210.     JNZ    MAT100
  211.     ORA    A    ;MATCH
  212.     RET
  213. ;
  214. ;READ CHAR FROM DISK
  215. ;
  216. RDCHR    PUSH    B
  217.     PUSH    D
  218.     PUSH    H
  219.     LHLD    BUFAD
  220.     MOV    A,H    ;TIME TO READ?
  221.     DCR    A
  222.     JNZ    NOREAD
  223.     LXI    D,FCB
  224.     MVI    C,READ
  225.     CALL    BDOS
  226.     ORA    A
  227.     JZ    RDOK
  228.     CALL    ERXIT
  229.     DB    '++READ ERROR OR EARLY EOF$'
  230. RDOK    LXI    H,80H
  231. NOREAD    MOV    A,M    ;GET CHAR
  232.     INX    H
  233.     SHLD    BUFAD
  234.     POP    H
  235.     POP    D
  236.     POP    B
  237.     CPI    'Z'-40H    ;EOF?
  238.     JZ    EOF
  239.     RET
  240. ;
  241. CRLF    MVI    A,0DH
  242.     CALL    TYPE
  243.     MVI    A,0AH
  244. ;
  245. TYPE    PUSH    B
  246.     PUSH    D
  247.     PUSH    H
  248.     MOV    E,A
  249.     MVI    C,WRCON
  250.     CALL    BDOS
  251.     POP    H
  252.     POP    D
  253.     POP    B
  254.     RET
  255. ;
  256. ;MOVER - MOVE CHARS FROM (DE) TO (HL), LENGTH IN (B)
  257. ;    IF FIRST CHAR = ' ', MOVE ALL '?'
  258. ;
  259. MOVER    LDAX    D
  260.     CPI    ' '
  261.     JZ    QUEST
  262. ;
  263. ;MOVE CHARS FROM (DE) TO (HL) FOR LENGTH IN (B)
  264. ;
  265. MOVE    LDAX    D    ;GET A CHAR
  266.     MOV    M,A
  267.     INX    D
  268.     INX    H
  269.     DCR    B
  270.     JNZ    MOVE
  271.     RET
  272. ;
  273. ;PAD FILENAME OR TYPE WITH ALL '?'
  274. ;
  275. QUEST    MVI    M,'?'
  276.     INX    H
  277.     INX    D
  278.     DCR    B
  279.     JNZ    QUEST
  280.     RET
  281. ;
  282. EOF    CALL    ERXIT
  283.     DB    0DH,0AH,'L'-40H,'$'
  284.     DS    50    ;STACK
  285. STACK    DW    0
  286. FNAME    DS    8
  287. FTYPE    DS    3
  288. DNAME    DS    8
  289. DTYPE    DS    3
  290. FCBNAME    DB    'MAST    CAT',0 ;0 = EXTENT #
  291. ENTRY    DB    0    ;0/1 = LEFT, RIGHT
  292. BUFAD    DW    100H    ;BUFFER PONTER
  293. TTL    DB    '  NAME           DISK       U   '
  294.     DB    '  NAME           DISK       U'
  295.     DB    0DH,0AH,'$'
  296. BUFF    DB    '............   ............ .   ',0
  297. LINECT    DB    0
  298. TTL0    DB    'FILES:'
  299. ;        (COMMAND TITLE MOVED HERE)
  300. ; * * * * * * * * * * * * * * * * * * * * * * * *
  301. ;                        *
  302. ;BDOS/CBIOS EQUATES (VERSION 5)            *
  303. ;(WITH UNREFERENCED EQUATES EDITED OUT)        *
  304. ;                        *
  305. WRCON    EQU    2    ;            *
  306. PRINT    EQU    9    ;            *
  307. KSTAT    EQU    11    ;1=KEY PRESSED        *
  308. OPEN    EQU    15    ;0FFH=NOT FOUND        *
  309. READ    EQU    20    ;0=OK, 1=EOF        *
  310. BDOS    EQU    5    ;            *
  311. FCB    EQU    5CH     ;            *
  312. ; * * * * * * * * * * * * * * * * * * * * * * * *
  313.     END
  314.