home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol017 / newqcat.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  4.3 KB  |  305 lines

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