home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG025.ARK / QCAT.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  300 lines

  1. ;QCAT.ASM
  2. ;V0.6
  3. ;6/23/78 QUICK CATALOG ROUTINE
  4. ;
  5. ;DEFINE MOVE MACRO FOR CONVENIENCE
  6. ;
  7. MOVE    MACRO    ?F,?T,?L,?I
  8.     IF    NOT NUL ?F
  9.     LXI    D,?F
  10.     ENDIF
  11.     IF    NOT NUL ?T
  12.     LXI    H,?T
  13.     ENDIF
  14.     IF    NOT NUL ?L
  15.     MVI    B,?L
  16.     ENDIF
  17.     IF    NOT NUL ?I
  18.     LOCAL    H,Z
  19.     CALL    Z
  20. H    DB    ?I
  21. Z    MVI    B,Z-H
  22.     POP    D
  23.     ENDIF
  24.     CALL    MOVER
  25.     ENDM
  26. ;CPM FUNCTION MACRO -
  27. ;    CPM FNC,ADDR
  28. CPM    MACRO    ?F,?A,?T
  29.     PUSH    B
  30.     PUSH    D
  31.     PUSH    H
  32.     IF    NOT NUL ?A
  33.     LXI    D,?A
  34.     ENDIF
  35.     IF    NOT NUL ?T
  36.     MOV    E,A    ;;FOR TYPE
  37.     ENDIF
  38.     MVI    C,?F
  39.     CALL    BDOS
  40.     POP    H
  41.     POP    D
  42.     POP    B
  43.     ENDM
  44. ;
  45.     ORG    100H
  46.     LXI    H,0
  47.     DAD    SP
  48.     SHLD    STACK
  49.     LXI    SP,STACK
  50. ;
  51. ;SAVE THE INPUT DISK NAME, IF THERE IS ONE
  52. ;
  53.     LXI    H,BUFF
  54.     LDA    FCB+1
  55.     CPI    ' '
  56.     JZ    NONAME
  57.     CPI    '-'
  58.     JZ    GOTDASH
  59. BADNAME    CALL    ERXIT
  60.     DB    '++MUST USE DISK NAME WITH ''-'' AS '
  61.     DB    'THE FIRST CHARACTER,',0DH,0AH
  62.     DB    'AND NNN AS THE FILETYPE$'
  63. GOTDASH    LDA    FCB+9
  64.     MOV    A,M
  65.     CPI    ' '
  66.     JZ    BADNAME
  67.     MOVE    FCB+1,BUFF,8
  68.     MOVE    ,,,'.'
  69.     MOVE    FCB+9,,3
  70.     MVI    M,0DH
  71.     INX    H
  72.     MVI    M,0AH
  73.     INX    H
  74.     MVI    A,1
  75.     STA    FCB    ;COUNT THE '-' NAME
  76. NONAME    PUSH    H
  77. CATMSG    CALL    ILPRT
  78.     DB    'LOAD DISK TO BE CATALOGED, '
  79.     DB    'THEN PRESS D: ',0
  80.     CPM    RDCON
  81.     ANI    5FH    ;MAKE UPPER CASE
  82.     CPI    'D'
  83.     JNZ    CATMSG
  84. ;MAKE FCB ALL '?'
  85.     MOVE    ,FCB+1,,'???????????'
  86. ;READ THE DIRECTORY ENTRIES
  87. ;
  88.     POP    H
  89.     MVI    C,SRCHF
  90.     JMP    CALLB
  91. LOOP    MVI    C,SRCHN
  92. CALLB    PUSH    H
  93.     LXI    D,FCB
  94.     CALL    BDOS
  95.     POP    H
  96.     INR    A
  97.     JZ    NOMORE
  98. ;
  99. ;MOVE THE NAME INTO THE BUFFER
  100. ;
  101.     DCR    A    ;GET BACK ORIG VALUE
  102.     ANI    3
  103.     PUSH    H
  104.     MOV    L,A
  105.     MVI    H,0
  106.     DAD    H    ;X32
  107.     DAD    H
  108.     DAD    H
  109.     DAD    H
  110.     DAD    H
  111.     LXI    D,80H
  112.     DAD    D
  113. ;HL NOW POINTS TO ENTRY
  114.     XCHG
  115.     INX    D    ;SKIP FIRST BYTE
  116.     POP    H
  117.     MOVE    ,,8
  118.     MVI    M,'.'
  119.     INX    H
  120.     MOVE    ,,3
  121.     MVI    M,0DH
  122.     INX    H
  123.     MVI    M,0AH
  124.     INX    H
  125. ;INCREMENT FILE COUNT
  126.     LDA    FCT
  127.     INR    A
  128.     STA    FCT
  129.     JMP    LOOP    ;GET NEXT
  130. ;
  131. ;NO MORE ENTRIES
  132. ;
  133. NOMORE    MVI    M,'Z'-40H
  134.     SHLD    ENDADDR    ;SAVE FOR WRITE
  135. NEXTS    LDA    FCT    ;GET FILE COUNT
  136.     DCR    A
  137.     STA    FCT
  138.     JZ    DONE    ;ALL DONE
  139. ;
  140. ;PASS THRU THE BUFF, SORTING IT.
  141. ;
  142.     MOV    C,A    ;SAVE COUNT
  143.     LXI    D,BUFF
  144. COMPR    LXI    H,14
  145.     DAD    D
  146.     PUSH    D
  147.     PUSH    H
  148.     MVI    B,14    ;COMPARE LENGTH
  149. CLCLP    LDAX    D
  150.     CMP    M
  151.     JC    NEXTC
  152.     JNZ    DIFF
  153. SAME    INX    D
  154.     INX    H
  155.     DCR    B
  156.     JNZ    CLCLP
  157. NEXTC    POP    H
  158.     POP    D
  159.     XCHG
  160. NEXTC2    DCR    C    ;MORE?
  161.     JNZ    COMPR    ;CHECK NEXT 2
  162. ;
  163. ;COMPLETED PASS THRU BUFF
  164. ;
  165.     JMP    NEXTS
  166. ;
  167. ;UNEQUAL COMPARE
  168. ;
  169. DIFF    POP    H
  170.     POP    D    ;GET POINTERS
  171. ;SWAP
  172.     MVI    B,14
  173.     PUSH    B
  174. SWAP    MOV    C,M
  175.     LDAX    D
  176.     MOV    M,A
  177.     MOV    A,C
  178.     STAX    D
  179.     INX    D
  180.     INX    H
  181.     DCR    B
  182.     JNZ    SWAP
  183.     POP    B
  184.     JMP    NEXTC2
  185. ;
  186. ;SORT ALL DONE - WRITE 'NAMES.SUB'
  187. ;
  188. DONE    LDA    BUFF
  189.     CPI    '-'
  190.     JZ    NAMEOK
  191.     CALL    ILPRT
  192.     DB    '++MISSING ''-'' NAME ON DISK OR '
  193.     DB    'QCAT COMMAND',0DH,0AH
  194.     DB    'RELOAD CATALOG DISK, PRESS RETURN',0
  195.     CPM    RDCON
  196.     CALL    ERXIT
  197.     DB    '++RUN QCAT, THIS TIME WITH NAME OPERAND$'
  198. NAMEOK    CALL    ILPRT
  199.     DB    'MOUNT CATALOG DISK, PRESS RETURN',0
  200.     CPM    RDCON
  201.     CPM    RESETDK    ;RESET DISK, KILLING R/O STATUS
  202.     CPM    SELDK,0
  203.     MOVE    ,FCB+1,,'NAMES   SUB'
  204.     CPM    ERASE,FCB
  205.     CPM    MAKE,FCB
  206.     INR    A
  207.     JZ    BADMAKE
  208.     LXI    D,BUFF
  209. WRLP    PUSH    D
  210.     CPM    STDMA
  211.     CPM    WRITE,FCB
  212.     ORA    A
  213.     JNZ    WRERR
  214.     POP    D
  215.     LXI    H,80H
  216.     DAD    D
  217.     XCHG
  218.     MOV    A,D
  219.     LDA    ENDADDR+1
  220.     INR    A
  221.     CMP    D
  222.     JNC    WRLP
  223.     CPM    STDMA,80H
  224.     CPM    CLOSE,FCB
  225.     CALL    ERXIT
  226.     DB    '++DONE.  NOW ISSUE COMMAND:',0DH,0AH
  227.     DB    'UCAT$'
  228. WRERR    CALL    ERXIT
  229.     DB    '++WRITE ERROR$'
  230. BADMAKE    CALL    ERXIT
  231.     DB    '++CAN''T MAKE NAMES.SUB$'
  232. ;
  233. ;INLINE PRINT
  234. ;
  235. ILPRT    MVI    A,0DH
  236.     CALL    TYPE
  237.     MVI    A,0AH
  238.     CALL    TYPE
  239.     XTHL
  240. ILPLP    MOV    A,M
  241.     CALL    TYPE
  242.     INX    H
  243.     MOV    A,M
  244.     ORA    A
  245.     JNZ    ILPLP
  246.     INX    H
  247.     XTHL
  248.     RET
  249. ;
  250. ;TYPE CHAR IN A
  251. ;
  252. TYPE    CPM    WRCON,,TYPE
  253.     RET
  254. ;
  255. ;CHAR MOVE ROUTINE, (DE) -> (HL) LEN IN B
  256. ;
  257. MOVER    LDAX    D
  258.     MOV    M,A
  259.     INX    D
  260.     INX    H
  261.     DCR    B
  262.     JNZ    MOVER
  263.     RET
  264. FCT    DB    0    ;FILE COUNT
  265. ENDADDR    DS    2    ;END OF FILE
  266. ;FOLLOWING FROM 'EQU5.LIB'---->
  267.     DS    40H    ;STACK AREA
  268. STACK    DS    2
  269. ;
  270. ;EXIT WITH ERROR MESSAGE
  271. ERXIT    MVI    A,0DH
  272.     CALL    TYPE
  273.     MVI    A,0AH
  274.     CALL    TYPE
  275.     POP    D    ;GET MSG
  276.     MVI    C,PRINT
  277.     CALL    BDOS
  278. ;EXIT, RESTORING STACK AND RETURN
  279. EXIT    LHLD    STACK
  280.     SPHL
  281.     RET        ;TO CCP
  282. BUFF    EQU    $
  283. ;BDOS/CBIOS EQUATES (VERSION 6)    
  284. RDCON    EQU    1
  285. WRCON    EQU    2
  286. PRINT    EQU    9
  287. RESETDK    EQU    13
  288. SELDK    EQU    14
  289. OPEN    EQU    15
  290. CLOSE    EQU    16
  291. SRCHF    EQU    17
  292. SRCHN    EQU    18
  293. ERASE    EQU    19
  294. READ    EQU    20
  295. WRITE    EQU    21
  296. MAKE    EQU    22
  297. STDMA    EQU    26
  298. BDOS    EQU    5
  299. FCB    EQU    5CH 
  300.