home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / a / dirlabel.lbr / DIRLABEL.AZM / DIRLABEL.ASM
Encoding:
Assembly Source File  |  1993-10-26  |  10.4 KB  |  472 lines

  1. ; 6/25/82---THIS PROGRAM, WHICH WAS ADAPTED FROM
  2. ;           THE FMAP(CATALOG) PROGRAM, WILL LIST
  3. ;           YOUR FILE DIRECTORY ON A LABEL SIZED
  4. ;           OUTPUT.  IT WAS WRITTEN USING AN EPSON
  5. ;           MX-100.  I DON'T KNOW WHETHER OR NOT IT
  6. ;           WILL WORK WITH MX-80 BUT TRY IT.  IT USES
  7. ;           EPSON CONTROL CODES SO WOULD PROBABLY HAVE
  8. ;           TO BE MODIFIED FOR OTHER PRINTERS.
  9. ;
  10. ;    ANY SUGGESTIONS OR COMMENTS SHOULD BE FORWARDED
  11. ;    TO:     DENNIS MC FERRAN
  12. ;        1038 POLK LANE
  13. ;        SAN JOSE, CA  95117
  14. ;        (408-296-6021)
  15. ;
  16. ;
  17. ;    TO USE--------
  18. ;    1)  PLACE DISC WITH THIS PROGRAM ON IT IN DRIVE B
  19. ;    2)  TURN ON YOUR PRINTER.
  20. ;    3)  PLACE DISC THAT YOU WOULD LIKE TO LABEL IN DRIVE A:
  21. ;    4)  GET INTO CPM (IF YOU'RE NOT THERE ALREADY).
  22. ;    5)  TYPE   B:DIRLABEL
  23. ;    6)  PLACE ANOTHER DISC IN DRIVE A AND REPEAT 
  24. ;        AS MANY TIMES AS YOU WOULD LIKE.
  25. ;
  26. ;  8/82  Revised by Jim Woolley, FOG Disk Librarian
  27. ;        4 files/line, " | " between files, unidirectional print
  28. ;     (unidir. print = esc,U,1 may only work with Graftrax)
  29. ;
  30. ;  9/82  Revised by Dennis McFerran, FOG, to look for disk 
  31. ;     number on USER 15.  This was you can ERA *.* without
  32. ;     effecting the disk number.  Also if there is room on
  33. ;     the label, the program will now print SPACE LEFT on   
  34. ;     the disk and the DATE that you labelled the disk.
  35. ;     
  36. ;*********EQUATE TABLE - BDOS***********************
  37. ;                           *
  38. RDCHR    EQU    1    ;READ CHAR FROM CONSOLE    *
  39. WRCHR    EQU    5    ;WRITE CHR TO PRINTER      *
  40. PRINT    EQU    9    ;PRINT CONSOLE BUFF       *    
  41. RDCON    EQU    10    ;READ CONS BUFFER          *
  42. CONST    EQU    11    ;CHECK CONS STAT       *
  43. FSRCHF    EQU    17    ;   "    "           *
  44. FSRCHN    EQU    18    ;   "    "           *
  45. FCB    EQU    5CH     ;FILE CONTROL BLOCK        *
  46. BDOS    EQU    5    ;                   *
  47. TPATOP  EQU    0C700H-1;TOP OF TRANSIENT PROG AREA*
  48. DATEBUFF EQU    TPATOP-16;BEGINNING OF DATE BUFFER *
  49. ;                           *
  50. ;**********EPSON MX-100 PRINTER CODES***************    
  51. ESCAPE    EQU    27    ;                          *
  52. SPACING EQU     65    ;LINE SPACING            *
  53. CONDON    EQU    15    ;CONDENSED PRINTING ON       *
  54. CONDOFF    EQU    18    ;CONDENSED PRINTING OFF       *
  55. UNIDIR  EQU     'U'     ;UNIDIRECTIONAL PRINT       *
  56. FORLEN  EQU    67    ;SETS FORM LENGTH       *
  57. FORMFEED EQU    12    ;FORM FEED           *
  58. CR    EQU    13    ;CARRIAGE RETURN       *    
  59. LF    EQU    10    ;LINE FEED               *
  60. ;***************************************************
  61. ;
  62.     ORG    100H
  63. START    LXI    H,0     ;SAVE THE OLD STACK
  64.     DAD    SP    ;H=STACK
  65.     SHLD    STACK    ;SAVE IT
  66.     LXI    SP,STACK ;GET NEW STACK
  67. ;RESET SYSTEM
  68.     MVI    C,13
  69.     CALL    BDOS
  70. ;SAVE FILE WRITE REQUEST CHAR
  71.     LDA    FCB+17
  72.     STA    FILESW
  73. ;DATE REQUEST
  74.     MVI    A,'$'
  75.     STA    DATEBUFF+10
  76.     MVI    A,8     
  77.     STA    DATEBUFF  
  78. DTE     LDA    DATEBUFF+8
  79.     CPI    '8'
  80.     JZ    OKDATE 
  81.     LXI    D,DATEREQ
  82.     MVI     C,PRINT 
  83.     CALL    BDOS
  84.     MVI    C,RDCON
  85.     LXI    D,DATEBUFF  
  86.     CALL    BDOS
  87.     JMP     DTE
  88.   
  89. ;NO FCB SPECIFIED?
  90. MKBLANK    MVI    A,' '
  91.     STA    DATEBUFF+2
  92.     RET
  93. OKDATE    LDA     DATEBUFF+2
  94.     CPI    '0'
  95.     CZ    MKBLANK
  96.     LXI    H,FCB+1
  97.     MOV    A,M
  98.     CPI    ' '
  99.     JNZ    GOTFCB
  100. ;NO FCB - MAKE FCB ALL '?'
  101.     MVI    B,11    ;FN+FT COUNT
  102. QLOOP    MVI    M,'?'    ;STORE '?' IN FCB
  103.     INX    H
  104.     DCR      B
  105.     JNZ    QLOOP
  106.  
  107.  
  108. ;LOOK UP THE FCB IN THE DIRECTORY
  109. GOTFCB    MVI    C,FSRCHF ;GET 'SEARCH FIRST' FNC
  110.     LXI    D,FCB
  111.     CALL    BDOS    ;READ FIRST
  112.     INR    A    ;WERE THERE ANY?
  113.     STA    TEMP    ;SAVE
  114.     CNZ     SOME     ;GOT SOME - PRT TITLE, CONT
  115. GOTFCB1 MVI    E,15
  116.     MVI    C,32
  117.     CALL    BDOS
  118.     MVI    C,FSRCHF ;GET 'SEARCH FIRST' FNC
  119.     LXI    D,FCB
  120.     CALL    BDOS    ;READ FIRST
  121.     INR    A    ;WERE THERE ANY?
  122.     STA    TEMP    ;SAVE
  123.     CNZ     SOME1    ;GOT SOME - PRT TITLE, CONT
  124.     LXI    D,NONMSG
  125.     MVI    C,9
  126.     CALL    BDOS
  127.     JMP    EXIT1
  128. SOME1    CALL    SOME
  129.     MVI    E,00
  130.     MVI    C,32
  131.     CALL    BDOS
  132.     JMP    PRTTL 
  133. ;READ MORE DIRECTORY ENTRIES
  134. MOREDIR    MVI    C,FSRCHN ;SEARCH NEXT
  135.     LXI    D,FCB
  136.     CALL    BDOS    ;READ DIR ENTRY
  137.     INR    A    ;CHECK FOR END (0FFH)
  138.     RZ     ;GOTFCB1    ;NO MORE - SORT & PRINT
  139. ;POINT TO DIRECTORY ENTRY 
  140. SOME    DCR    A    ;UNDO PREV 'INR A'
  141.     ANI    3    ;MAKE MODULUS 4
  142.     ADD    A    ;MULTIPLY...
  143.     ADD    A    ;..BY 32 BECAUSE
  144.     ADD    A    ;..EACH DIRECTORY
  145.     ADD    A    ;..ENTRY IS 32
  146.     ADD    A    ;..BYTES LONG
  147.     LXI    H,81H    ;POINT TO BUFFER
  148.             ;(SKIP TO FN/FT)
  149.     ADD    L    ;POINT TO ENTRY
  150.     MOV    L,A    ;SAVE (CAN'T CARRY TO H)
  151. ;MOVE ENTRY TO TABLE
  152.     XCHG        ;ENTRY TO DE
  153.     LHLD    NEXTT    ;NEXT TABLE ENTRY TO HL
  154.     MVI    B,31    ;ENTRY LENGTH
  155. TMOVE    LDAX    D    ;GET ENTRY CHAR
  156.     MOV    M,A    ;STORE IN TABLE
  157.     INX    D
  158.     INX    H
  159.     DCR    B    ;MORE?
  160.     JNZ    TMOVE
  161.     SHLD    NEXTT    ;SAVE UPDATED TABLE ADDR
  162.     LDA    COUNT    ;GET PREV COUNT
  163.     INR    A
  164.     STA    COUNT
  165.     JMP    MOREDIR
  166. ;PRINT TITLE
  167. PRTTL    LXI    H,TTL
  168.     CALL    WRCON
  169.  
  170.  
  171.  
  172. ;SORT AND PRINT
  173. SPRINT    LDA    COUNT    ;INIT THE ORDER TABLE
  174.     LXI    H,ORDER
  175.     LXI    D,TABLE
  176.     LXI    B,31    ;ENTRY LENGTH
  177. BLDORD    MOV    M,E    ;SAVE LO ORD ADDR
  178.     INX    H
  179.     MOV    M,D    ;SAVE HI ORD ADDR
  180.     INX    H
  181.     XCHG        ;TABLE ADDR TO HL
  182.     DAD    B    ;POINT TO NEXT ENTRY
  183.     XCHG
  184.     DCR    A     ;MORE?
  185.     JNZ    BLDORD    ;..YES
  186.     LDA    COUNT    ;GET COUNT
  187.     STA    FILCOUNT;SAVE AS # TO PRINT
  188.     STA    SCOUNT    ;SAVE AS # TO SORT
  189.     DCR    A    ;ONLY 1 ENTRY?
  190.     JZ    DONE    ;..YES, SO SKIP SORT
  191. SORT    XRA    A    ;GET A ZERO
  192.     STA    SWITCH    ;SHOW NONE SWITCHED
  193.     LDA    SCOUNT    ;GET COUNT
  194.     DCR    A    ;USE 1 LESS
  195.     STA    TEMP    ;SAVE # TO COMPARE
  196.     STA    SCOUNT    ;SAVE HIGHEST ENTRY
  197.     JZ    DONE    ;EXIT IF NO MORE
  198.     LXI    H,ORDER ;POINT TO ORDER TABLE
  199. SORTLP    CALL    COMPR    ;COMPARE 2 ENTRIES
  200.     CM    SWAP    ;SWAP IF NOT IN ORDER
  201.     INX    H    ;BUMP ORDER
  202.     INX    H    ;..TABLE POINTER
  203.     LDA    TEMP    ;GET COUNT
  204.     DCR    A
  205.     STA    TEMP
  206.     JNZ    SORTLP    ;CONTINUE
  207. ;ONE PASS OF SORT DONE
  208.     LDA    SWITCH    ;ANY SWAPS DONE?
  209.     ORA    A
  210.     JNZ    SORT
  211. ;SORT IS ALL DONE - PRINT ENTRIES
  212. DONE    LXI    H,ORDER
  213.     SHLD    NEXTT
  214.     MVI    A,4   
  215.     STA    PRCOUNT
  216. ;PRINT AN ENTRY
  217. ENTRY    MVI    C,CONST    ;CK STATUS OF KB
  218.     CALL    BDOS    ;ANY KEY PRESSED?
  219.     DCR    A
  220.     JZ    ABORT    ;YES, ABORT
  221.     LHLD    NEXTT    ;GET ORDER TABLE POINTER
  222.     MOV    E,M    ;GET LO ADDR
  223.     INX    H
  224.     MOV    D,M    ;GET HI ADDR
  225.     INX    H
  226.     SHLD    NEXTT    ;SAVE UPDATED TABLE POINTER
  227.     XCHG        ;TABLE ENTRY TO HL
  228.     MVI    B,8    ;FILE NAME LENGTH
  229.     CALL    TYPEIT    ;TYPE FILENAME
  230.     MVI    A,'.'
  231.     CALL    TYPE  
  232.     MVI    B,3    ;GET THE FILETYPE
  233.     CALL    TYPEIT
  234.     INX    H    ;SKIP EXTENT
  235.     INX    H    ;SKIP
  236.     INX    H    ;UNUSED
  237.     MOV    A,M    ;GET REC COUNT
  238.     DCR    A    ;FUDGE
  239.     RAR        ;DIVIDE
  240.     RAR        ;..BY 8
  241.     RAR
  242.     ANI    1FH    ;DELETE GARBAGE
  243.     INR    A    ;MAKE RELATIVE TO 1, NOT 0
  244.     MVI     B,16    ;SAVE AS MAX # EXTENTS
  245.     MOV    A,M    ;RELOAD RECORD COUNT
  246.     INX    H    ;SKIP RECORD COUNT
  247. EXTLP    MOV    A,M    ;GET EXTENT BYTE
  248.     ORA    A    ;EMPTY?
  249.     JZ    ENDEXT    ;..YES
  250.         PUSH    PSW
  251.      LDA    EXTCOUNT
  252.     INR    A
  253.     DAA
  254.     INR    A
  255.     DAA
  256.     STA    EXTCOUNT
  257.     POP    PSW
  258.     INX    H    ;POINT TO NEXT CHR
  259.     DCR    B    ;MORE IN EXTENT?
  260.     JZ    ENDEXT 
  261.     MVI    A,0
  262.     CMP    M
  263.     JNZ    EXTLP    ;YES
  264.         
  265. ENDEXT    MVI    B,16
  266.     LDA    NFILE    ;GET # FILES
  267.     INR    A    ;BUMP
  268.     DAA        ;MAKE DECIMAL
  269.     STA    NFILE    ;SAVE IT BACK
  270.     LDA     PRCOUNT
  271.     DCR    A
  272.     STA    PRCOUNT
  273.     CPI    0   
  274.     JZ       CLCR
  275.     LXI    H,SPACES
  276.       CALL    WRCON
  277.     JMP    CLCRPLUS
  278. CLCR    CALL    CR1        ;END, TYPE C/R
  279.     MVI    A,4      
  280.     STA    PRCOUNT
  281. ;SEE IF MORE ENTRIES
  282. CLCRPLUS      LDA    COUNT
  283.     DCR    A
  284.     STA    COUNT
  285.     JNZ    ENTRY    ;YES, MORE
  286.     JMP    EXIT
  287. ;TYPE CHAR IN A
  288. TYPE    PUSH    B
  289.     PUSH    D
  290.     PUSH    H
  291.     MOV    E,A
  292.     MVI    C,WRCHR
  293.     CALL    BDOS
  294.     POP    H
  295.     POP     D
  296.     POP    B
  297.     RET
  298. WRCON    MVI    A,24H  
  299.     CMP    M
  300.     RZ 
  301.     MOV    A,M
  302.     PUSH    H
  303.     CALL    TYPE
  304.     POP    H
  305.     INX    H
  306.     JMP    WRCON
  307. TYPEIT    MOV    A,M
  308.     CALL    TYPE
  309.     INX    H
  310.     DCR    B
  311.     JNZ    TYPEIT
  312.     RET
  313. SPACE    MVI    A,' '
  314.     JMP    TYPE
  315. CR1    MVI    E,13    ;PRINT
  316.     MVI    C,5    ;C/R
  317.     CALL    BDOS
  318.     MVI    E,10    ;LF
  319.     MVI    C,5
  320.     JMP    BDOS
  321. TEMP    DS    1    ;SAVE DIR ENTRY
  322. ;ERROR EXIT
  323. ERXIT    POP    D    ;GET MSG
  324.     MVI    C,PRINT
  325.     JMP    CALLB    ;PRINT MSG, EXIT
  326. ;ABORT - READ CHAR ENTERED
  327. ABORT    MVI    C,RDCHR
  328. CALLB    CALL    BDOS    ;DELETE THE CHAR
  329. ;FALL INTO EXIT
  330. ;EXIT - ALL DONE , RESTORE STACK
  331. EXIT    LDA    FILCOUNT    
  332.     CPI     25        ;DID IT PRINT MORE THAN SIX LINES
  333.     JNC     EXIT1        ;IF SO DON'T PRINT SPACE MESSAGE
  334.     CPI    24        ;DID IF PRINT 6 FULL LINES
  335.     JZ    NOCRLF        ;IF SO DON'T DO EXTRA CR/LF
  336.     CPI     21         ;DID IT PRINT MORE THAN FIVE LINES
  337.     JNC    NOCRLF2        ;IF SO DON'T DO EXTRA CR/LF
  338.     CPI    20
  339.     JZ    NOCRLF2
  340.     CPI    16
  341.     JZ    NOCRLF2
  342.     CPI    12
  343.     JZ    NOCRLF2
  344.     CPI    8    
  345.     JZ    NOCRLF2
  346.     CPI    4
  347.     JZ    NOCRLF2
  348.     MVI    A,CR
  349.     CALL    TYPE
  350.     MVI    A,LF
  351.     CALL    TYPE
  352. NOCRLF2 MVI    A,CR
  353.     CALL    TYPE
  354.     MVI    A,LF
  355.     CALL    TYPE
  356. NOCRLF  LXI    H,EXTMSG
  357.     CALL    WRCON 
  358.     LDA     EXTCOUNT
  359.     MOV    B,A
  360.     MVI    A,92H
  361.     SUB    B
  362.     DAA
  363.     CALL    XO
  364.     MVI    A,'K'
  365.     CALL    TYPE
  366.     LXI    H,LABDAT
  367.     CALL    WRCON
  368.     LXI    H,DATEBUFF+2
  369.     CALL    WRCON
  370. EXIT1
  371.      MVI    E,00
  372.     MVI    C,32
  373.     CALL    BDOS
  374.  
  375.         LXI    H,RESPRINT
  376.     CALL     WRCON
  377.     LHLD    STACK    ;GET OLD STACK
  378.     SPHL        ;MOVE TO STACK
  379.     RET        ;..AND RETURN
  380. RESPRINT     DB    FORMFEED,CONDOFF,ESCAPE,SPACING,12
  381.         DB    ESCAPE,FORLEN,66                ;EPSON CODES
  382.         DB    ESCAPE,UNIDIR,0,'$'            ;TO RESTORE PRINTER TO NORMAL
  383. ;COMPARE ROUTINE FOR SORT
  384.  
  385. COMPR    PUSH    H    ;SAVE TABLE ADDR
  386.     MOV    E,M    ;LOAD LO
  387.     INX    H
  388.     MOV    D,M    ;LOAD HI
  389.     INX    H
  390.     MOV    C,M
  391.     INX    H
  392.     MOV    B,M
  393. ;BC, DE NOW POINT TO ENTRIES TO BE COMPARED
  394.     XCHG
  395. CMPLP    LDAX    B
  396.     CMP    M
  397.     INX    H
  398.     INX    B
  399.     JZ    CMPLP
  400.     POP    H
  401.     RET        ;COND CODE TELLS ALL
  402. ;SWAP ENTRIES IN THE ORDER TABLE
  403. SWAP    MVI    A,1
  404.     STA    SWITCH    ;SHOW A SWAP WAS MADE
  405.     MOV    C,M
  406.     INX    H
  407.     PUSH    H    ;SAVE TABLE ADDR+1
  408.     MOV    B,M
  409.     INX    H
  410.     MOV    E,M
  411.     MOV    M,C
  412.     INX    H
  413.     MOV    D,M
  414.     MOV    M,B
  415.     POP    H
  416.     MOV    M,D
  417.     DCX    H    ;BACK POINTER TO CORRECT LOC'N
  418.     MOV    M,E
  419.     RET
  420. ;HEX OUTPUT 
  421. XO    PUSH    PSW    ;SAVE CHAR
  422.     RAR
  423.     RAR
  424.     RAR
  425.     RAR
  426.     CALL    NIBBL    ;PRINT LEFT NIBBLE
  427.     POP    PSW    ;GET VALUE BACK
  428. NIBBL    ANI    0FH    ;ISOLATE NIBBLE
  429.     CPI    10    ;NUMBER?
  430.     JC    XNUM    ;YES
  431.     ADI    7    ;FUDGE ALPHA HEX
  432. XNUM    ADI    '0'    ;MAKE PRINTABLE
  433.     JMP    TYPE
  434.     DS    30    ;STACK AREA
  435. STACK    DS    2    ;SAVE OLD STACK HERE
  436. NFILE    DB    0    ;NUMBER OF FILES PRINTED
  437. ;
  438.  
  439. NEXTT    DW    TABLE    ;NEXT TABLE ENTRY
  440. EXTCOUNT DB    02
  441. EXTMSG    DB      'Space Left on Disk = $'
  442. COUNT    DB    0    ;ENTRY COUNT
  443. SCOUNT    DB    0    ;# TO SORT
  444. PRCOUNT DB    0    ;COUNTER FOR ITEMS ON LINE
  445. FILCOUNT DB     0
  446. SPACES    DB    ' | $'
  447. DATEREQ DB    'Please enter today''s date as mm/dd/yy---->$'
  448. NONMSG    DB    CR,LF,'++This program is  looking for a  file with the name'
  449.     DB    CR,LF,' -disknam.###(disk number) in USER 15.  This becomes'
  450.     db      CR,LF,' the disc reference and will remain on the disc even'
  451.     db    CR,LF,' if you ERA *.*.'     
  452.     db    CR,LF,LF,'Please save your disk number now as follows:'
  453.     db    CR,LF,'             A> USER 15'
  454.     db    CR,LF,'             A> SAVE 0 -disknam.### '
  455.     db    CR,LF,'            this dash--^ is mandatory'
  456.     db    CR,LF,'             A> USER 0',CR,LF,'$'
  457. TTL     DB      ESCAPE,FORLEN,0,1           ;SET PAGE LENGTH AT 1".            
  458.     DB    ESCAPE,SPACING,8            ;SET LINE SIZE TO 8/72"            
  459.     DB    ESCAPE,UNIDIR,1            ;SET UNIDIRECTIONAL PRINT.
  460.     DB    CONDON,'$'            ;SET CONDENSED PRINT.
  461. LABDAT  DB    '             Label Date--$'
  462. SWITCH    DB    0    ;SWAP SWITCH FOR SORT
  463. FILESW    DS    1    ;'F' IF WRITING FILE
  464. BUFAD    DW    80H    ;OUTPUT ADDR
  465. MYFCB    DB    0,'NAMES   SUB',0
  466.     DS    19
  467.     DB    0
  468. ORDER    DS    128    ;ORDER TABLE
  469. TABLE    EQU    $    ;READ ENTRIES IN HERE
  470.     END    100H
  471.      
  472.