home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / DOSUT-09.ZIP / COPRNT.ASM < prev    next >
Assembly Source File  |  1984-11-01  |  4KB  |  184 lines

  1.     TITLE    COPRNT    - Diskette Contents List - Print Cover Sheet
  2.     SUBTTL    Version    1.1 - June 1984
  3.     PAGE    81,132
  4. ;
  5. CODE    SEGMENT    BYTE PUBLIC 'CODE'
  6.     ASSUME    CS:CODE,DS:CODE
  7. ;
  8.     EXTRN    PNTR:WORD,STKCNT:WORD,TITLX:BYTE,RESTR:BYTE
  9. ;
  10.     EXTRN    CONVRT:NEAR
  11. ;
  12.     PUBLIC    PSX
  13. PSX    DB    0            ;Pass counter
  14. DBUF    DB    8 DUP (0)        ;Work buffer for file size
  15. DBLK    DB    '  ',0            ;Double    blank between columns
  16. LFTB    DB    '|  ',0            ;Left border
  17. RGTB    DB    '  |'            ;Right border (includes    CRLF)
  18. CRLF    DB    13,10,0
  19. DRCT    DB    '  <DIR>',0
  20. BCNT    DB    0            ;Body line counter
  21. ;
  22.     PUBLIC    PRINT
  23. PRINT    PROC    NEAR
  24.     INC    PSX            ;Count numbers of prints
  25.     MOV    BCNT,33            ;Set body line counter
  26.     MOV    AX,STKCNT        ;Load entry count
  27.     MOV    DH,4            ;Divide    by number of columns
  28.     DIV    DH
  29.     OR    AH,AH
  30.     JZ    SETCNT            ;Evenly    divisable
  31.     INC    AL            ;Ragged    edge
  32.     CBW
  33. SETCNT:    PUSH    AX            ;Entries per column count
  34.     CMP    AX,33
  35.     JBE    NORM            ;See if    too big    for standard
  36.     TEST    PSX,1            ;See if    a page restore needed
  37.     JNZ    NORES
  38.     CALL    DORES            ;Do it
  39. NORES:    MOV    PSX,0
  40. NORM:    CALL    DOBRDR            ;Do upper border
  41.     CALL    DOBLNE            ;  and a blank line
  42.     CALL    DOLFTM            ;Do left margin
  43.     MOV    DX,OFFSET TITLX
  44.     CALL    DOPRT            ;Output    the title line
  45.     CALL    DORGTM            ;Do right margin
  46.     CALL    DOBLNE            ;  and another blank line
  47.     POP    CX
  48.     JCXZ    EMPTY
  49.     MOV    BP,CX
  50.     SHL    BP,1            ;BP contains offset/column in ptr list
  51.     MOV    SI,OFFSET PNTR        ;Point to start    of ptr list
  52. OTLP:    CALL    DOLFTM            ;Do a left margin
  53.     MOV    DL,4            ;Set inner loop    count to columns
  54.     XOR    BX,BX            ;Clear column offset reg
  55. INLP:    CALL    PRTENT            ;Print stack entry
  56.     ADD    BX,BP            ;Step to next column entry
  57.     DEC    DL
  58.     JNZ    INLP            ;End of    inner loop
  59.     CALL    DORGTM            ;Do a right margin
  60.     ADD    SI,2            ;Step to next ptr
  61.     DEC    BCNT            ;Decrement body    line count
  62.     LOOP    OTLP            ;End of    outer loop
  63. EMPTY:    MOV    CL,BCNT            ;Load remaining    body lines
  64.     CMP    CL,0
  65.     JL    NOFILL            ;Over full
  66.     XOR    CH,CH
  67.     JCXZ    NOFILL            ;All used
  68. FILL:    CALL    DOBLNE            ;Fill out body lines
  69.     LOOP    FILL
  70. NOFILL:    CALL    DOBRDR            ;Do bottom border
  71. DORES:    MOV    DX,OFFSET RESTR
  72.     CALL    DOPRT            ;Restore page
  73.     RET
  74. PRINT    ENDP
  75. ;
  76.     PUBLIC    DOPRT
  77. DOPRT    PROC    NEAR            ;This subroutine simply    prints
  78.     PUSH    DX            ;the string pointed to by the
  79.     PUSH    SI            ;DX reg    on entry.  The string
  80.     MOV    SI,DX            ;is terminated by a nul    byte.
  81.     MOV    AH,5
  82. DPLP:    MOV    DL,BYTE    PTR [SI]
  83.     OR    DL,DL
  84.     JZ    PRTEND
  85.     INT    21H
  86.     INC    SI
  87.     JMP    DPLP
  88. PRTEND:    POP    SI
  89.     POP    DX
  90.     RET
  91. DOPRT    ENDP
  92. ;
  93. PRTENT    PROC    NEAR            ;Print one stack entry
  94.     PUSH    CX
  95.     PUSH    DX
  96.     MOV    CX,12
  97.     MOV    DI,WORD    PTR [SI+BX]    ;DI points to stack entry
  98.     OR    DI,DI            ;If entry is zero, blank space
  99.     JZ    BLNK1
  100.     MOV    AH,5
  101. PELP:    MOV    DL,BYTE    PTR [DI]    ;Print to the end of the
  102.     OR    DL,DL            ;  name/type entry
  103.     JZ    BLNK2            ;  blanking remainder of 12
  104.     INT    21H            ;  character field
  105.     INC    DI
  106.     LOOP    PELP
  107. BACK:    INC    DI
  108.     MOV    AX,WORD    PTR [DI]    ;Load file size
  109.     MOV    DX,WORD    PTR [DI+2]
  110.     INC    DX
  111.     JNZ    NODIR
  112.     MOV    DX,OFFSET DRCT
  113.     CALL    DOPRT
  114.     JMP    SHORT GONE
  115. NODIR:    DEC    DX
  116.     PUSH    SI
  117.     MOV    DI,OFFSET DBUF
  118.     CALL    CONVRT            ;Convert size to ASCII decimal
  119.     POP    SI
  120.     MOV    DX,OFFSET DBUF
  121.     CALL    DOPRT            ;Print size
  122. GONE:    POP    DX
  123.     PUSH    DX            ;Reload    entry value
  124.     DEC    DL
  125.     JZ    PUNT            ;If last column    don't space over
  126.     MOV    DX,OFFSET DBLK
  127.     CALL    DOPRT            ;Two blanks between columns
  128. PUNT:    POP    DX
  129.     POP    CX
  130.     RET
  131. BLNK1:    MOV    CX,19            ;No entry, so blank entire column
  132.     CALL    CLER
  133.     JMP    GONE
  134. BLNK2:    CALL    CLER            ;Blanks    remainder of name/type field
  135.     JMP    BACK
  136. PRTENT    ENDP
  137. ;
  138. DOBLNE    PROC    NEAR
  139.     PUSH    CX
  140.     CALL    DOLFTM            ;Output    a bordered blank line
  141.     MOV    CX,82
  142.     CALL    CLER
  143.     CALL    DORGTM
  144.     POP    CX
  145.     RET
  146. DOBLNE    ENDP
  147. ;
  148. DOBRDR    PROC    NEAR
  149.     MOV    CX,88
  150.     MOV    DL,'-'
  151.     CALL    DLFIL            ;Output    a top or bottom    border
  152.     MOV    DX,OFFSET CRLF
  153.     CALL    DOPRT
  154.     RET
  155. DOBRDR    ENDP
  156. ;
  157. DOLFTM    PROC    NEAR            ;Outputs "|  "
  158.     PUSH    DX
  159.     MOV    DX,OFFSET LFTB
  160.     CALL    DOPRT
  161.     POP    DX
  162.     RET
  163. DOLFTM    ENDP
  164. ;
  165. DORGTM    PROC    NEAR            ;Outputs "  |CRLF"
  166.     PUSH    DX
  167.     MOV    DX,OFFSET RGTB
  168.     CALL    DOPRT
  169.     POP    DX
  170.     RET
  171. DORGTM    ENDP
  172. ;
  173. CLER    PROC    NEAR            ;Outputs CX blanks to the printer.
  174.     MOV    DL,' '
  175. DLFIL:    MOV    AH,5            ;Outputs DL character CX times
  176. CLRLP:    INT    21H
  177.     LOOP    CLRLP
  178.     RET
  179. CLER    ENDP
  180. ;
  181. CODE    ENDS
  182. ;
  183.     END
  184.