home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PROGRAMS / WSTAR / SIMPLE.ARK / TRUNCATE.MAC < prev   
Text File  |  1987-07-06  |  3KB  |  163 lines

  1. TITLE    TRUNCATE absolute printer driver image into a DRV file
  2.  
  3. ;
  4. ; Equates
  5. ;
  6. CR    EQU    0DH        ; Special chars
  7. LF    EQU    0AH
  8. ;
  9. BDOS    EQU    0005H        ; BDOS entry point
  10. DFCB    EQU    005CH        ; Default FCB
  11. DRVORG    EQU    8680H        ; Load point for printer driver
  12. DRVREC    EQU    (DRVORG-300H) SHR 7 ; Record corresponding to load point
  13.  
  14. ;
  15. ; Start truncation program
  16. ;
  17.     ASEG
  18.     ORG    100H        ; Start of TPA
  19.     JMP    T1
  20. ;
  21.     DS    128
  22. T1:    LXI    SP,$        ; Top of stack
  23. ;    LXI    H,DFCB+16+1    ; No output FCB?
  24.     MOV    A,M
  25.     CPI    ' '
  26.     JZ    THELP
  27. ;
  28.     LXI    D,OTFCB        ; Copy output FCB name
  29.     DCX    H
  30.     MVI    B,12
  31.     CALL    COPY
  32. ;
  33.     LXI    D,DFCB+1    ; No input FCB?
  34.     LDAX    D
  35.     CPI    ' '
  36.     JZ    THELP
  37. ;
  38.     DCX    D        ; Can't open input file?
  39.     XRA    A
  40.     STA    DFCB+12
  41.     MVI    C,15
  42.     CALL    BDOS
  43.     INR    A
  44.     JZ    THELP
  45. ;
  46.     LXI    D,OTFCB        ; Create new output file
  47.     PUSH    D
  48.     MVI    C,19
  49.     CALL    BDOS
  50.     POP    D
  51.     MVI    C,22
  52.     CALL    BDOS
  53.     INR    A
  54.     JZ    TFULL
  55. ;
  56.     LXI    H,DRVREC    ; Starting record within image
  57.     SHLD    DFCB+33
  58.     XRA    A
  59.     STA    DFCB+35
  60. ;
  61.     STA    OTFCB+32    ; Start of output file
  62. ;
  63. T2:    MVI    B,0        ; Read bufferful from input file
  64.     LXI    D,OTBFR
  65. T3:    PUSH    B
  66.     PUSH    D
  67.     MVI    C,26
  68.     CALL    BDOS
  69.     LXI    D,DFCB
  70.     MVI    C,33
  71.     CALL    BDOS
  72.     POP    D
  73.     POP    B
  74.     ORA    A
  75.     JNZ    T4
  76. ;
  77.     LHLD    DFCB+33        ; Next record
  78.     INX    H
  79.     SHLD    DFCB+33
  80.     LXI    H,128
  81.     DAD    D
  82.     XCHG
  83.     INR    B
  84.     MOV    A,B
  85.     CPI    OTSIZE
  86.     JNZ    T3
  87. ;
  88. T4:    INR    B        ; Done?
  89.     DCR    B
  90.     JZ    T6
  91. ;
  92.     LXI    D,OTBFR        ; Write from buffer
  93. T5:    PUSH    B
  94.     PUSH    D
  95.     MVI    C,26
  96.     CALL    BDOS
  97.     LXI    D,OTFCB
  98.     MVI    C,21
  99.     CALL    BDOS
  100.     POP    D
  101.     POP    B
  102.     ORA    A
  103.     JNZ    TFULL
  104. ;
  105.     LXI    H,128        ; Next record
  106.     DAD    D
  107.     XCHG
  108.     DCR    B
  109.     JNZ    T5
  110.     JMP    T2
  111. ;
  112. T6:    LXI    D,DFCB        ; Close files
  113.     MVI    C,16
  114.     CALL    BDOS
  115.     LXI    D,OTFCB
  116.     MVI    C,16
  117.     CALL    BDOS
  118. ;
  119.     LXI    D,TDONMS    ; All done
  120.     JMP    THEL1
  121. ;
  122. TFULL:    LXI    D,TFULMS    ; Disk full
  123.     JMP    THEL1
  124. ;
  125. THELP:    LXI    D,THELMS    ; Display help message
  126. THEL1:    MVI    C,9
  127.     CALL    BDOS
  128. ;
  129. TDONE:    MVI    C,0        ; Done, exit to CP/M
  130.     MOV    E,C
  131.     CALL    BDOS
  132. ;
  133. THELMS:    DB    CR,LF
  134.     DB    'TRUNCATE DRIVER.TMP DRIVER.DRV',CR,LF,LF
  135.     DB    'Where, DRIVER.TMP is the absolute driver image',CR,LF
  136.     DB    '       DRIVER.DRV is the resulting DRV file',CR,LF
  137.     DB    '$'
  138. ;
  139. TFULMS:    DB    'Disk full$'
  140. TDONMS:    DB    'DRV file created$'
  141.  
  142. ;
  143. ; Subroutines
  144. ;
  145. COPY:                ; Copy B bytes from HL to DE
  146.     MOV    A,M
  147.     STAX    D
  148.     INX    H
  149.     INX    D
  150.     DCR    B
  151.     JNZ    COPY
  152.     RET
  153. ;
  154. ; Variable data
  155. ;
  156. OTFCB:    DB    0,'           '    ; Output FCB
  157.     DW    0,0,0,0,0,0,0,0,0,0,0,0
  158. ;
  159. OTBFR:                ; Output buffer follows
  160. OTSIZE    EQU    1024/128    ; Assume 1k available
  161.  
  162.     END
  163.