home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / catlog / dsklabl1.lbr / DSKLABL1.AQM / DSKLABL1.ASM
Assembly Source File  |  1987-02-14  |  16KB  |  878 lines

  1. ; The following software is copyrighted 10/20/83 by:
  2. ;   Dennis McFerran
  3. ;   1038 Polk Lane
  4. ;   San Jose, CA  95117
  5. ;   Tel-408-296-6021
  6. ;     Comments and suggestions welcome.
  7. ;
  8. ;
  9. ;Program name: DSKLABL 
  10. ;Version     : 1
  11. ;Purpose     : Prepare a printed "Avery" type label
  12. ;              to identify the various files on a
  13. ;              disk.  
  14. ;Equipment   : Written for the Osborne 01, either     
  15. ;              Single or Double Density and the Epson
  16. ;              Printer 
  17. ;
  18. ;Output      : The program produces a label with a 
  19. ;              heading that shows: 
  20. ;        a) The date produced
  21. ;        b) Whether the disk is single or double
  22. ;            density
  23. ;         c) The amount of Free Space on the disk
  24. ;        d) The "Name" of the disk (i.e. -UTILITY.U01)
  25. ;        e) The "Page" number of the label relative
  26. ;                to that particular disk
  27. ;
  28. ;Instructions:
  29. ;           1.  Place this program on a disk in
  30. ;              Drive A.  It makes some sense to 
  31. ;               include it on the same disk that you
  32. ;               use for cataloging your files (NCAT
  33. ;               or whatever).  If you don't catalog
  34. ;        I suggest that you check out the 
  35. ;        possiblities in our library.
  36. ;
  37. ;        2.  Put the continuous form labels in 
  38. ;        your printer.
  39. ;
  40. ;        3.  Mount the disk to be labeled in 
  41. ;               drive B.
  42. ;
  43. ;        4.  Type  dsklabl1 b:  <CR>
  44. ;
  45. ;           5.  The first time in each labelling session 
  46. ;               the program will ask you for the date.  It
  47. ;         is stored so that it will be remembered
  48. ;        from disk to disk unless depredd the RESET
  49. ;        button.
  50. ;
  51. ;           6.  The disk will whir for a second and then,
  52. ;               assuming you have turned on your print,
  53. ;        will produce a label(s) that you may affix
  54. ;        to the disk.
  55. ;        
  56. ;           7.  Repeat step 4 for each disk that you want 
  57. ;            to label.
  58. ;
  59. ;Remarks:  This is the first version of a nearly complete 
  60. ;  rewrite of my old DIRLABLE program and solves many problems
  61. ;  that were inherent in that code.
  62. ;  This program now (I hope) calculates the Free Space on the
  63. ;  disk properly, allows the user to easily change the number
  64. ;  of columns and lines of information to fit any size of 
  65. ;  label that you want to use, identifies the "name" of the 
  66. ;  disk on each "Page" of labels that it creates for the disk.
  67. ;
  68. ;
  69. ;===The following will determine the number of columns
  70. ;     and lines that will appear on your label.  The 
  71. ;     current values of 4 and 7 will fit on a standard
  72. ;     3.5" by 15/16" label.
  73. LINEMAX  EQU    4       ;For 4 across labeling
  74. LINES    EQU    7       ;For 6 lines of listing per label
  75. ;
  76. ;**********EPSON MX-100 PRINTER CODES***************    
  77. ;===These codes must be changed for other printers *
  78. ;                           *
  79. ESCAPE      EQU    27    ;                          *
  80. SPACING   EQU   65    ;LINE SPACING            *
  81. CONDON      EQU    15    ;CONDENSED PRINTING ON       *
  82. CONDOFF      EQU    18    ;CONDENSED PRINTING OFF       *
  83. UNIDIR    EQU   'U'     ;UNIDIRECTIONAL PRINT       *
  84. FORLEN    EQU    67    ;SETS FORM LENGTH       *
  85. FORMFEED  EQU    12    ;FORM FEED           *
  86. CR      EQU    13    ;CARRIAGE RETURN       *    
  87. LF        EQU    10    ;LINE FEED               *
  88. ;***************************************************
  89. ;
  90. ;
  91. ;
  92.            ORG    100h
  93.  
  94. ;***************************************************
  95. ;STARTUP OPERATIONS
  96.  
  97. STARTUP LXI    H,0             ;SAVE THE OLD STACK
  98.     DAD    SP        ;H=STACK
  99.     SHLD    STACK        ;SAVE IT
  100.     LXI    SP,STACK    ;GET NEW STACK
  101. ;RESET SYSTEM
  102. reset   MVI    C,13
  103.     CALL    BDOS
  104. ;SAVE FILE WRITE REQUEST CHAR
  105.     LDA    FCB+17
  106.         STA    FILESW
  107.         LXI    H,FCB+1
  108. ;MAKE FCB ALL '?'
  109.        MVI    B,11    ;FN+FT COUNT
  110. QLOOP    MVI    M,'?'    ;STORE '?' IN FCB
  111.     INX    H
  112.     DCR      B
  113.     JNZ    QLOOP
  114.  
  115.  
  116. ;***************************************************
  117.  
  118. HEADER:
  119.         call    getspace
  120.     call    setdate
  121.     call    getdisk
  122.     call    initptr   
  123.     call    findfiles
  124.     call    sorter
  125.     call    printit
  126.  
  127.     jmp    0000
  128.  
  129.  
  130. SETDATE:
  131.     lxi    h,datebuff    
  132.     mov    a,m
  133.     cpi    1h        ;is month 1-12
  134.     jm    getdate
  135.     cpi    13h
  136.     jnc    getdate
  137.     inx    h
  138.     mov    a,m
  139.     cpi    1h        ;is day 1-31
  140.     jm    getdate
  141.     cpi    32h
  142.     jnc    getdate
  143.     inx    h
  144.     mov    a,m
  145.     cpi    80h        ;is year 80-89
  146.     jm    getdate
  147.     cpi    90h
  148.     jnc    getdate
  149.                             ;if so date is ok as is
  150. MONTH
  151.         lxi     h,0010h
  152.     mov    a,m
  153.       cpi    10h
  154.         jc      lessten
  155.     mvi    a,'1'
  156.     sta    datstor
  157.     mov    a,m
  158.     sui    10h
  159. lessten adi    30h
  160.     sta    datstor+1
  161. DAY
  162.     inx    h
  163.     mov    a,m
  164.         cpi    30h
  165.     jc    lessthrty
  166.     mvi    a,'3'
  167.     sta    datstor+3
  168.         mov    a,m
  169.      sui    30h
  170.     jmp     getyear
  171. lessthrty
  172.     mov    a,m
  173.      cpi    20h
  174.     jc    lesstwnty
  175.     mvi    a,'2'
  176.     sta    datstor+3
  177.     mov    a,m
  178.     sui    20h
  179.     jmp     getyear
  180. lesstwnty
  181.     mov    a,m 
  182.     cpi    10h
  183.     jc    getyear 
  184.     mvi    a,'1'
  185.     sta    datstor+3
  186.     mov    a,m
  187.      sui    10h
  188. getyear
  189.     adi    30h
  190.     sta    datstor+4
  191.         inx    h
  192.     mov     a,m
  193.     sui    80h
  194.     adi    30h
  195.     sta    datstor+7
  196.         ret
  197.  
  198. GETDATE:
  199.         MVI    A,'$'
  200.     STA    TEMPBUFF+10
  201.     MVI    A,8     
  202.     STA    TEMPBUFF  
  203.     LXI    D,DATEREQ
  204.     MVI     C,PRINT 
  205.     CALL    BDOS
  206.     MVI    C,RDCON
  207.     LXI    D,TEMPBUFF  
  208.     CALL    BDOS
  209.  
  210.     lxi    d,datebuff
  211.     lxi    h,tempbuff  
  212.         call    convert
  213.     call    convert
  214.         call    convert
  215.     jmp     SETDATE
  216. convert inx    h
  217.     inx    h
  218.     mov    a,m
  219.      sui    30h
  220.     mov     b,a
  221.     add    a
  222.     daa
  223.     add    a
  224.      daa
  225.     add    b
  226.     daa
  227.     add    a
  228.         daa
  229.     mov    c,a
  230.     inx    h
  231.     mov    a,m 
  232.     sui    30h
  233.     add    c    
  234.     daa
  235.     stax    d
  236.     inx    d
  237.     ret    
  238.  
  239. GETDISK:
  240.     MVI    E,15
  241.     MVI    C,32
  242.     CALL    BDOS
  243.     LXI    d,fcb  
  244.     MVI    a,'-'
  245.     STA     fcb+1
  246.     MVI     C,17
  247.         CALL    FINDFILE 
  248.     JP    Foundit
  249.     MVI    E,00    
  250.     MVI    C,32
  251.     CALL    BDOS
  252.     LXI    d,fcb  
  253.     MVI    C,17
  254.     CALL    FINDFILE 
  255.     JM      Noname
  256.     JMP    Foundit 
  257.  
  258.        ;===error routine
  259. diskreq  db  1ah,'Input disk name (max 7 filename,3 extension)',cr,lf
  260.          db  '(ie UTILITY.001) ===> '
  261. nameform db  1bh,29h,'-------.---',1bh,28h,'$'
  262. consbuff db  11,00,'           '
  263. noname  lxi    d,diskreq
  264.     mvi     c,print
  265.      call    bdos
  266.     mvi    b,11
  267.     mvi    c,02
  268.     mvi    e,08
  269. backmor push    d
  270.     push    b
  271.         call    bdos
  272.     pop     b
  273.     dcr    b
  274.     pop    d
  275.     jnz    backmor 
  276.     lxi    d,consbuff
  277.     mvi    c,10
  278.     call    bdos
  279.     mvi    c,32
  280.     mvi    e,15
  281.     call    bdos
  282.     
  283.     lxi    d,fcb+1
  284.     lxi    h,consbuff+2
  285.     mvi    a,'-'
  286.     stax    d
  287.     inx    d
  288.     mvi    b,7 
  289.     call    movmor
  290.     mvi    b,3
  291.     inx    h
  292.     call    movmor
  293.     mvi    c,22 
  294.     lxi    d,fcb
  295.     call    bdos
  296.     mvi    c,32
  297.     mvi    e,00
  298.     call    bdos
  299. restart
  300.     lhld    01
  301.     mvi    l,00 
  302.     mov     a,h
  303.     sui    16h
  304.     mov    h,a
  305.     shld    ccp
  306.     lxi    d,refile
  307.     lxi    b,10
  308.     lhld    ccp    
  309.     mvi    l,07
  310.     call    again
  311.     lhld     ccp
  312.     mvi    l,88h
  313.     mvi    a,08h
  314.     mov    m,a
  315.     lhld     ccp
  316.     mvi    l,89h
  317.     mov    a,h
  318.     mov     m,a
  319.     lhld    ccp
  320.     pchl
  321. again    ldax    d
  322.     mov    m,a
  323.     inx    h
  324.     inx    d
  325.     dcx    b
  326.     mov    a,b
  327.     ora    c
  328.     jnz    again    
  329.     ret
  330.  
  331. ccp    ds    2
  332. refile db  10,'DDLABEL B:',0,0,0,0,0,0,0
  333. movmor  mov     a,m
  334.     cpi    'A'  
  335.     jc    okasis   
  336.     cpi    'a'-1
  337.     jc    okasis
  338.     sui    20h
  339.     
  340. okasis    stax    d
  341.     inx    h
  342.     inx    d
  343.     dcr    b
  344.     jnz    movmor
  345.     ret
  346.  
  347.  
  348. FINDFILE  
  349.     CALL    BDOS
  350.     ORA     A
  351.     RM
  352.     ANI    3    ;make mod 4
  353.     ADD     A    ;mult 
  354.     ADD    A    ;  by
  355.     ADD    A    ;   32
  356.     ADD    A    ;     for 
  357.     ADD    A    ;        offset
  358.     LXI    H,81h
  359.         ADD     L       ;Point to entry
  360.     MOV     L,A    ;h-l now addresses filename
  361.     mvi     a,0
  362.     adi     1h
  363.     RET
  364.  
  365. Foundit    push    h
  366.         MVI    E,00
  367.     MVI    C,32
  368.     CALL    BDOS
  369.     POP     h
  370.         lxi    d,DISKSTOR
  371.     MVI    b,8
  372.     CALL    Morstor
  373.     mvi    a,'.'
  374.     stax    d
  375.     inx    d
  376.     mvi    b,3
  377.     jmp     Morstor       ;jump and return
  378.  
  379. MORSTOR    MOV    a,m
  380.     cpi    ' '
  381.         jz      skipsp  
  382.     stax    d
  383.            inx    d
  384. skipsp  inx     h
  385.     dcr    b
  386.     jnz    morstor
  387.     Ret
  388.  
  389.  
  390.  
  391. GETSPACE: 
  392.         lda     005ch
  393.     sta    l389
  394.     push    psw
  395. ;call    ddorsd
  396.     pop    psw
  397.     mvi     c,19h
  398.     call    0005
  399.     sta    l388
  400.     lda    l389 
  401.     ora    a
  402.     jz    l21f
  403.     dcr        a
  404.     sta    l388
  405. l21f    lda     l388
  406.     mvi    c,0eh
  407.     mov    e,a
  408.     call    0005
  409.     mvi    c,1fh
  410.     call    0005
  411.     shld    l38a
  412.  
  413.     MOV    A,M    ;IF ITS 28 ITS DD
  414.             ;IF ITS 14 ITS SD
  415.     CPI    20H
  416.     jc      single
  417. DOUBLE  LXI    H,EXTVAL 
  418.     MVI    M,1  
  419.     lxi    h,DENSITY
  420.         Mvi    m,'D'
  421.     inx    h
  422.     Mvi    m,'b'
  423.     inx    h
  424.     Mvi    m,'l'
  425. single 
  426.     lhld    l38a
  427.     lxi    d,0005
  428.     dad    d
  429.     mov    e,m
  430.     inx     h
  431.     mov    d,m
  432.     xchg
  433.     inx    h
  434.     shld    l38c
  435.     lhld    l38a 
  436.     inx    h
  437.     inx    h
  438.     mov    a,m
  439.     sui    02
  440.         sta    l380
  441.     lxi    h,0200h 
  442. l277    dad    h
  443.     dcr    a
  444.     lhld    l38c
  445.     push    h 
  446.         lda    l388
  447.     mov    e,a
  448.     mvi    c,0eh    ;select disk
  449.     call     0005
  450.     mvi    c,1bh
  451.     call    0005
  452.     pop    d
  453.     dcx    h
  454.     
  455. l2a9    mvi    c,30h
  456. l2ae    inx     h
  457.     
  458.     mov    a,m 
  459.     mvi    b,08h
  460. l2b2    rlc
  461.     jc      past
  462.     push    h
  463.     lhld     l381
  464.     inx    h
  465.     shld    l381   
  466.     pop    h
  467. past    dcx    d
  468.     push    psw
  469.     mov    a,d
  470.     ora    e
  471.     jz    l2cc
  472.     pop    psw
  473.     dcr    c
  474.     jz    l2a9
  475.     dcr    b
  476.     jz    l2ae
  477.     jmp    l2b2
  478. l2cc    pop    psw
  479.     mvi    c,1dh
  480.     call    0005
  481.     lda    l388
  482.     lxi    d,0001
  483.     ora    a
  484.     mov    c,a
  485. l2e0    jz    l2ed
  486.     mov    a,e
  487.     rlc
  488.     mov     e,a
  489.     mov    a,d
  490.     rlc
  491.     mov    d,a
  492.     dcr    c
  493.     jmp    l2e0
  494. l2ed    mov     a,e
  495.     ana     l
  496.     mov    l,a
  497.     mov    a,d
  498.     ana    h
  499.     ora    l
  500.     jz    l2fb
  501.     mvi    a,4fh
  502.  
  503. l2fb    lda    l388
  504.     adi    41h
  505.     lda     l380
  506. l31b    lhld    l381    
  507.         dcr    a
  508.     jz    l323
  509.     dad    h
  510.     jmp    l31b
  511. l323
  512.     lda    extval
  513.     cpi    1  
  514.     jz    dbld
  515.     dad    h
  516. dbld    call    l183
  517.     call    l13f
  518.     db      '$'
  519.     mvi     a,'k'
  520.     lhld    storaddr
  521.         mov    m,a
  522.     ret 
  523.      
  524. l183    push    b
  525.     push    d
  526.     push    h
  527.     lxi    b,0fff6h
  528.     lxi    d,0ffffh
  529. l18c    dad    b
  530.     inx    d
  531.     jc    l18c    
  532.     lxi    b,000ah
  533.     dad    b
  534.     xchg
  535.     mov    a,h
  536.     ora    l
  537.     cnz    l183
  538.     mov    a,e
  539.     adi    30h
  540.  
  541.     push    h    
  542.     lhld    storaddr
  543.     mov     m,a
  544.     inx    h
  545.     shld    storaddr
  546.     pop     h
  547.     pop    h
  548.     pop    d
  549.     pop     b
  550.     ret
  551.     
  552. l13f      xthl
  553. l140    mov    a,m 
  554.     inx    h
  555.     cpi    24h
  556.     jz    l14d
  557.     call    l14f
  558.     jmp    l140 
  559. l14d    xthl
  560.     ret
  561. l14f    push    h
  562.     push    d
  563.     push    b
  564.     push    psw
  565.     mvi    c,02
  566.     ani    7fh
  567.     mov    e,a
  568.     pop    psw
  569.     pop    b
  570.     pop    d
  571.     pop    h
  572.     ret    
  573.  
  574. EJECT:
  575.     mvi    e,12
  576.     mvi    c,wrchr
  577.     call    bdos
  578. PRINTHEAD:
  579.     lda    pagestor
  580.     inr    a
  581.     sta    pagestor
  582.         lxi    h,datstor
  583.     call    wrcon
  584.     ret
  585.  
  586.  
  587. ;Initialize printer
  588. INITPTR LXI    H,TTL    ;printer initialization
  589.     Call    wrcon
  590.      Jmp     Printhead
  591.  
  592.  
  593. ;FIND FILES; SORT; and PRINT      
  594. FINDFILES:
  595.     mvi    a,'?'
  596.     lxi    h,005dh
  597.     mov    m,a   
  598.           MVI    C,FSRCHF ;GET 'SEARCH FIRST' FNC
  599.     LXI    D,FCB
  600.     CALL    BDOS    ;READ FIRST
  601.     INR    A    ;WERE THERE ANY?
  602.     STA    TEMP    ;SAVE
  603.     JZ      EXIT1   ;GOT SOME - PRT TITLE, CONT
  604.      CALL    SOME
  605.     MVI    E,00
  606.     MVI    C,32
  607.     CALL    BDOS
  608.     RET
  609. ;READ MORE DIRECTORY ENTRIES
  610. MOREDIR    MVI    C,FSRCHN ;SEARCH NEXT
  611.     LXI    D,FCB
  612.     CALL    BDOS    ;READ DIR ENTRY
  613.     INR    A    ;CHECK FOR END (0FFH)
  614.     RZ     ;GOTFCB1    ;NO MORE - SORT & PRINT
  615. ;POINT TO DIRECTORY ENTRY 
  616. SOME    DCR    A    ;UNDO PREV 'INR A'
  617.     ANI    3    ;MAKE MODULUS 4
  618.     ADD    A    ;MULTIPLY...
  619.     ADD    A    ;..BY 32 BECAUSE
  620.     ADD    A    ;..EACH DIRECTORY
  621.     ADD    A    ;..ENTRY IS 32
  622.     ADD    A    ;..BYTES LONG
  623.     LXI    H,81H    ;POINT TO BUFFER
  624.             ;(SKIP TO FN/FT)
  625.     ADD    L    ;POINT TO ENTRY
  626.     MOV    L,A    ;SAVE (CAN'T CARRY TO H)
  627. ;MOVE ENTRY TO TABLE
  628.     XCHG        ;ENTRY TO DE
  629.     LHLD    NEXTT    ;NEXT TABLE ENTRY TO HL
  630.     MVI    B,31    ;ENTRY LENGTH
  631. TMOVE    LDAX    D    ;GET ENTRY CHAR
  632.     MOV    M,A    ;STORE IN TABLE
  633.     INX    D
  634.     INX    H
  635.     DCR    B    ;MORE?
  636.     JNZ    TMOVE
  637.     SHLD    NEXTT    ;SAVE UPDATED TABLE ADDR
  638.     LDA    COUNT    ;GET PREV COUNT
  639.     INR    A
  640.     STA    COUNT
  641.     JMP    MOREDIR
  642. ;SORT AND PRINT
  643. sorter    LDA    COUNT    ;INIT THE ORDER TABLE
  644.     LXI    H,ORDER
  645.     LXI    D,TABLE
  646.     LXI    B,31    ;ENTRY LENGTH
  647. BLDORD    MOV    M,E    ;SAVE LO ORD ADDR
  648.     INX    H
  649.     MOV    M,D    ;SAVE HI ORD ADDR
  650.     INX    H
  651.     XCHG        ;TABLE ADDR TO HL
  652.     DAD    B    ;POINT TO NEXT ENTRY
  653.     XCHG
  654.     DCR    A     ;MORE?
  655.     JNZ    BLDORD    ;..YES
  656.     LDA    COUNT    ;GET COUNT
  657.     STA    FILCOUNT;SAVE AS # TO PRINT
  658.     STA    SCOUNT    ;SAVE AS # TO SORT
  659.     DCR    A    ;ONLY 1 ENTRY?
  660.     JZ    Printit ;.YES, SO SKIP SORT
  661. SORT    XRA    A    ;GET A ZERO
  662.     STA    SWITCH    ;SHOW NONE SWITCHED
  663.     LDA    SCOUNT    ;GET COUNT
  664.     DCR    A    ;USE 1 LESS
  665.     STA    TEMP    ;SAVE # TO COMPARE
  666.     STA    SCOUNT    ;SAVE HIGHEST ENTRY
  667.     JZ    Printit    ;EXIT IF NO MORE
  668.     LXI    H,ORDER ;POINT TO ORDER TABLE
  669. SORTLP    CALL    COMPR    ;COMPARE 2 ENTRIES
  670.     CM    SWAP    ;SWAP IF NOT IN ORDER
  671.     INX    H    ;BUMP ORDER
  672.     INX    H    ;..TABLE POINTER
  673.     LDA    TEMP    ;GET COUNT
  674.     DCR    A
  675.     STA    TEMP
  676.     JNZ    SORTLP    ;CONTINUE
  677. ;ONE PASS OF SORT DONE
  678.     LDA    SWITCH    ;ANY SWAPS DONE?
  679.     ORA    A
  680.     JNZ    SORT
  681. ;SORT IS ALL DONE - PRINT ENTRIES
  682.     RET
  683.  
  684. printit LXI    H,ORDER
  685.     SHLD    NEXTT
  686.     MVI     A,labelmax  ;entries on one label
  687.     STA    LabCount
  688.         MVI    A,linemax   ;entries on one line
  689.     STA    PrCount
  690. ;PRINT AN ENTRY
  691. ENTRY    MVI    C,CONST    ;CK STATUS OF KB
  692.     CALL    BDOS    ;ANY KEY PRESSED?
  693.     DCR    A
  694.     JZ    ABORT    ;YES, ABORT
  695.     LHLD    NEXTT    ;GET ORDER TABLE POINTER
  696.     MOV    E,M    ;GET LO ADDR
  697.     INX    H
  698.     MOV    D,M    ;GET HI ADDR
  699.     INX    H
  700.     SHLD    NEXTT    ;SAVE UPDATED TABLE POINTER
  701.     XCHG        ;TABLE ENTRY TO HL
  702.     MVI    B,8    ;FILE NAME LENGTH
  703.     CALL    TYPEIT    ;TYPE FILENAME
  704.     MVI    A,'.'
  705.     CALL    TYPE  
  706.     MVI    B,3    ;GET THE FILETYPE
  707.     CALL    TYPEIT
  708.         lda    filcount
  709.     dcr    a
  710.     sta    filcount
  711.     jz    exit1
  712.     LDA     PRCOUNT
  713.     DCR    A
  714.     STA    PRCOUNT
  715.     CPI    0   
  716.     JNZ       NOTEND
  717.     MVI    A,linemax 
  718.     STA     PRCOUNT
  719.     call    crlf
  720.         jmp     newline
  721. notend  lxi    h,fence
  722.     call    wrcon
  723. newline LDA     LabCount
  724.     dcr    a
  725.     STA     LabCount
  726.     JNZ     ENTRY
  727.         MVI     a,labelmax 
  728.     STA     LABCOUNT
  729.         CALL    eject
  730.     JMP     ENTRY
  731. CRLF    MVI    E,cr    ;PRINT
  732.     MVI    C,wrchr ;C/R
  733.     CALL    BDOS
  734.     MVI    E,lf    ;LF
  735.     MVI    C,wrchr
  736.     JMP    BDOS
  737. TEMP    DS    1    ;SAVE DIR ENTRY
  738.  
  739. ;ABORT - READ CHAR ENTERED
  740. ABORT    MVI    C,RDCHR
  741. CALLB    CALL    BDOS    ;DELETE THE CHAR
  742. ;FALL INTO EXIT
  743. EXIT1
  744.      MVI    E,00
  745.     MVI    C,32
  746.     CALL    BDOS
  747.  
  748.         LXI    H,RESPRINT
  749.     CALL     WRCON
  750.     LHLD    STACK    ;GET OLD STACK
  751.     SPHL        ;MOVE TO STACK
  752.     RET        ;..AND RETURN
  753.  
  754. ;COMPARE ROUTINE FOR SORT
  755.  
  756. COMPR    PUSH    H    ;SAVE TABLE ADDR
  757.     MOV    E,M    ;LOAD LO
  758.     INX    H
  759.     MOV    D,M    ;LOAD HI
  760.     INX    H
  761.     MOV    C,M
  762.     INX    H
  763.     MOV    B,M
  764. ;BC, DE NOW POINT TO ENTRIES TO BE COMPARED
  765.     XCHG
  766. CMPLP    LDAX    B
  767.     CMP    M
  768.     INX    H
  769.     INX    B
  770.     JZ    CMPLP
  771.     POP    H
  772.     RET        ;COND CODE TELLS ALL
  773. ;SWAP ENTRIES IN THE ORDER TABLE
  774. SWAP    MVI    A,1
  775.     STA    SWITCH    ;SHOW A SWAP WAS MADE
  776.     MOV    C,M
  777.     INX    H
  778.     PUSH    H    ;SAVE TABLE ADDR+1
  779.     MOV    B,M
  780.     INX    H
  781.     MOV    E,M
  782.     MOV    M,C
  783.     INX    H
  784.     MOV    D,M
  785.     MOV    M,B
  786.     POP    H
  787.     MOV    M,D
  788.     DCX    H    ;BACK POINTER TO CORRECT LOC'N
  789.     MOV    M,E
  790.     RET
  791.  
  792. ;TYPE CHAR IN A
  793. TYPE    PUSH    B
  794.     PUSH    D
  795.     PUSH    H
  796.     MOV    E,A
  797.     MVI    C,WRCHR
  798.     CALL    BDOS
  799.     POP    H
  800.     POP     D
  801.     POP    B
  802.     RET
  803. WRCON    MVI    A,24H  
  804.     CMP    M
  805.     RZ 
  806.     MOV    A,M
  807.     PUSH    H
  808.     CALL    TYPE
  809.     POP    H
  810.     INX    H
  811.     JMP    WRCON
  812. TYPEIT    MOV    A,M
  813.     CALL    TYPE
  814.     INX    H
  815.     DCR    B
  816.     JNZ    TYPEIT
  817.     RET
  818.  
  819.  
  820. ;*******************************************************
  821.         ds    30        ;Stack area
  822. STACK   ds    2                 ;Save old stack here
  823. FILESW  ds    1            ;'F' if writing file
  824. EXTVAL   DB      2        ;DENSITY SETTINGS
  825.  
  826. ;**************************************************
  827. l388     db   00 
  828. l389     db   00 
  829. l38a     db   00,00
  830. l38c     db   00,00
  831. l38e     db   00,00
  832. l380     db   00 
  833. l381     db   00,00
  834. storaddr dw   spacstor
  835. DATSTOR      db     '  /  /8   '
  836. DENSITY         db      'SngDen  Free Space='
  837. SPACSTOR    db     00,00,00      
  838.         db    '   '
  839. DISKSTOR    db      '                 Page '
  840. PAGESTOR    db    '0',cr,lf,'$'
  841. DATEREQ     DB    'Please enter today''s date as mm/dd/yy---->$'
  842. FCB              EQU    005CH        ;file control block    
  843. BDOS        EQU     0005H           ;BDOS CALL LOCATION 
  844. DATEBUFF    EQU    0010H
  845. PRINT         EQU    9    ;PRINT CONSOLE BUFF            
  846. RDCON        EQU    10    ;READ CONS BUFFER           
  847. WRCHR            EQU     5
  848. RDCHR        EQU    1    ;READ CHAR FROM CONSOLE    *
  849. CONST        EQU    11    ;CHECK CONS STAT       *
  850. FSRCHF        EQU    17    ;Find first directory entry
  851. FSRCHN        EQU    18    ;Find next directory entry
  852. LABELMAX     EQU     LINEMAX*LINES        
  853. TEMPBUFF    DS    10
  854. RESPRINT     DB    FORMFEED,CONDOFF,ESCAPE,SPACING,12
  855.         DB    ESCAPE,FORLEN,66                ;EPSON CODES
  856.         DB    ESCAPE,UNIDIR,0,'$'            ;TO RESTORE PRINTER TO NORMAL
  857. TTL     DB      ESCAPE,FORLEN,0,1           ;SET PAGE LENGTH AT 1".            
  858.     DB    ESCAPE,SPACING,8            ;SET LINE SIZE TO 8/72"            
  859.     DB    ESCAPE,UNIDIR,1            ;SET UNIDIRECTIONAL PRINT.
  860.     DB    CONDON,'$'            ;SET CONDENSED PRINT.
  861. LABCOUNT  db     0
  862. SETPRNTR  DB      ESCAPE,FORLEN,0,1           ;SET PAGE LENGTH AT 1".            
  863.           DB    ESCAPE,UNIDIR,1            ;SET UNIDIRECTIONAL PRINT.
  864.       DB    CONDON,'$'            ;SET CONDENSED PRINT.
  865. NEXTT      DW    TABLE    ;NEXT TABLE ENTRY
  866. EXTCOUNT  DB    02
  867. COUNT      DB    0    ;ENTRY COUNT
  868. COUNT1    db      0
  869. SCOUNT    DB    0    ;# TO SORT
  870. PRCOUNT   DB    0    ;COUNTER FOR ITEMS ON LINE
  871. FILCOUNT  DB     0
  872. FENCE     DB    ' | $'
  873. SWITCH      DB    0    ;SWAP SWITCH FOR SORT
  874. ORDER      DS    128    ;ORDER TABLE
  875. TABLE      EQU    $    ;READ ENTRIES IN HERE
  876.       END    100H
  877.      
  878.