home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / ASMUT-03.ZIP / COPRNT.ASM < prev    next >
Assembly Source File  |  1984-02-21  |  4KB  |  176 lines

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