home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / wstar / simple.ark / TRUNCATE.MAC < prev   
Encoding:
Text File  |  1987-07-06  |  2.5 KB  |  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. ;
  24.     LXI    H,DFCB+16+1    ; No output FCB?
  25.     MOV    A,M
  26.     CPI    ' '
  27.     JZ    THELP
  28. ;
  29.     LXI    D,OTFCB        ; Copy output FCB name
  30.     DCX    H
  31.     MVI    B,12
  32.     CALL    COPY
  33. ;
  34.     LXI    D,DFCB+1    ; No input FCB?
  35.     LDAX    D
  36.     CPI    ' '
  37.     JZ    THELP
  38. ;
  39.     DCX    D        ; Can't open input file?
  40.     XRA    A
  41.     STA    DFCB+12
  42.     MVI    C,15
  43.     CALL    BDOS
  44.     INR    A
  45.     JZ    THELP
  46. ;
  47.     LXI    D,OTFCB        ; Create new output file
  48.     PUSH    D
  49.     MVI    C,19
  50.     CALL    BDOS
  51.     POP    D
  52.     MVI    C,22
  53.     CALL    BDOS
  54.     INR    A
  55.     JZ    TFULL
  56. ;
  57.     LXI    H,DRVREC    ; Starting record within image
  58.     SHLD    DFCB+33
  59.     XRA    A
  60.     STA    DFCB+35
  61. ;
  62.     STA    OTFCB+32    ; Start of output file
  63. ;
  64. T2:    MVI    B,0        ; Read bufferful from input file
  65.     LXI    D,OTBFR
  66. T3:    PUSH    B
  67.     PUSH    D
  68.     MVI    C,26
  69.     CALL    BDOS
  70.     LXI    D,DFCB
  71.     MVI    C,33
  72.     CALL    BDOS
  73.     POP    D
  74.     POP    B
  75.     ORA    A
  76.     JNZ    T4
  77. ;
  78.     LHLD    DFCB+33        ; Next record
  79.     INX    H
  80.     SHLD    DFCB+33
  81.     LXI    H,128
  82.     DAD    D
  83.     XCHG
  84.     INR    B
  85.     MOV    A,B
  86.     CPI    OTSIZE
  87.     JNZ    T3
  88. ;
  89. T4:    INR    B        ; Done?
  90.     DCR    B
  91.     JZ    T6
  92. ;
  93.     LXI    D,OTBFR        ; Write from buffer
  94. T5:    PUSH    B
  95.     PUSH    D
  96.     MVI    C,26
  97.     CALL    BDOS
  98.     LXI    D,OTFCB
  99.     MVI    C,21
  100.     CALL    BDOS
  101.     POP    D
  102.     POP    B
  103.     ORA    A
  104.     JNZ    TFULL
  105. ;
  106.     LXI    H,128        ; Next record
  107.     DAD    D
  108.     XCHG
  109.     DCR    B
  110.     JNZ    T5
  111.     JMP    T2
  112. ;
  113. T6:    LXI    D,DFCB        ; Close files
  114.     MVI    C,16
  115.     CALL    BDOS
  116.     LXI    D,OTFCB
  117.     MVI    C,16
  118.     CALL    BDOS
  119. ;
  120.     LXI    D,TDONMS    ; All done
  121.     JMP    THEL1
  122. ;
  123. TFULL:    LXI    D,TFULMS    ; Disk full
  124.     JMP    THEL1
  125. ;
  126. THELP:    LXI    D,THELMS    ; Display help message
  127. THEL1:    MVI    C,9
  128.     CALL    BDOS
  129. ;
  130. TDONE:    MVI    C,0        ; Done, exit to CP/M
  131.     MOV    E,C
  132.     CALL    BDOS
  133. ;
  134. THELMS:    DB    CR,LF
  135.     DB    'TRUNCATE DRIVER.TMP DRIVER.DRV',CR,LF,LF
  136.     DB    'Where, DRIVER.TMP is the absolute driver image',CR,LF
  137.     DB    '       DRIVER.DRV is the resulting DRV file',CR,LF
  138.     DB    '$'
  139. ;
  140. TFULMS:    DB    'Disk full$'
  141. TDONMS:    DB    'DRV file created$'
  142.  
  143. ;
  144. ; Subroutines
  145. ;
  146. COPY:                ; Copy B bytes from HL to DE
  147.     MOV    A,M
  148.     STAX    D
  149.     INX    H
  150.     INX    D
  151.     DCR    B
  152.     JNZ    COPY
  153.     RET
  154. ;
  155. ; Variable data
  156. ;
  157. OTFCB:    DB    0,'           '    ; Output FCB
  158.     DW    0,0,0,0,0,0,0,0,0,0,0,0
  159. ;
  160. OTBFR:                ; Output buffer follows
  161. OTSIZE    EQU    1024/128    ; Assume 1k available
  162.  
  163.     END
  164.