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 / DISASM / COMPRESS.AQM / COMPRESS.ASM
Assembly Source File  |  2000-06-30  |  6KB  |  378 lines

  1. ;    COPMRESS.ASM
  2. ;
  3. ;    COMPRESS A FILE FRESHLY CREATED BY RESOURCE OR MSOURCE
  4. ;
  5. ;    REMOVES COMMENTS FROM THE END OF A LINE WHICH IS ONLY
  6. ;    A HEX ADDRESS AND WHEN A LABEL LINE IS ENCOUNTERED
  7. ;    AND THE LINE CONTAINS ONLY A COMMENT AND NO OPCODE IT
  8. ;    APPENDS THE NEXT LINE IN THE FILE ONE TAB AFTER THE
  9. ;    LABEL.
  10. ;
  11. ;    LABEL:        ;1234H
  12. ;        LXI    H,L0234    ;0234H
  13. ;  BECOMES
  14. ;
  15. ;    LABEL:    LXI    H,L0234    ;
  16. ;
  17. ;    LINES WITH COMMENTS ONLY ARE NOT AFFECTED.
  18. ;
  19. ;    ANY LINES WHICH HAVE BEEN EDITED AND APPEAR AS:
  20. ;
  21. ;    LABEL:    OPCODE    OPERAND    ;COMMENT
  22. ;
  23. ;    WILL ONLY HAVE THE COMMENT REMOVED.
  24. ;
  25. ;    TO USE THE PROGRAM TYPE:
  26. ;
  27. ;    A.COMPRESS FILENAME (NEWNAME)
  28. ;
  29. ;    COMPRESS LOOKS FOR AN .ASM FILE AND CREATES A .$$$ FILE.
  30. ;
  31. ;    PLEASE ADVISE ON ANY PROBLEMS:    J.A.PREST
  32. ;                      18704 GLASTONBURY RD
  33. ;                      DETROIT, MI. 48219
  34. ;                      313-538-1204
  35. ;    2,26,80        J.A.P
  36. ;
  37. CPM:    EQU    0
  38. BDOS:    EQU    5
  39. FCB:    EQU    5CH
  40. FCB2:    EQU    6CH
  41. TBUFF:    EQU    80H
  42. PRNSTR:    EQU    9
  43. OPEN:    EQU    0FH
  44. CLOSE:    EQU    10H
  45. DELETE:    EQU    13H
  46. READ:    EQU    14H
  47. WRITE:    EQU    15H
  48. CREATE:    EQU    16H
  49. SETBFR:    EQU    1AH
  50. CR:    EQU    0DH
  51. LF:    EQU    0AH
  52. EOF:    EQU    1AH
  53. BFRLEN:    EQU    2000H
  54. ;
  55.     ORG    100H
  56. COMPRS:    LXI    SP,STACK+20    ;
  57.     MVI    C,PRNSTR
  58.     LXI    D,SIGNON    ;
  59.     CALL    BDOS    ;
  60.     LXI    H,FCB    ;
  61.     LXI    D,REAFCB    ;
  62.     MVI    C,9
  63.     CALL    MOVE    ;
  64. ;
  65. ;    INITIALIZE
  66. ;
  67.     XRA    A
  68.     STA    READEX    ;
  69.     STA    READRC    ;
  70.     LXI    H,BFRLEN
  71.     SHLD    RBFLEN    ;
  72.     SHLD    REAPTR    ;
  73.     MVI    C,OPEN
  74.     LXI    D,REAFCB    ;
  75.     CALL    BDOS    ;
  76.     INR    A
  77.     JNZ    COMP02    ;
  78.     MVI    C,PRNSTR
  79.     LXI    D,NOSMSG    ;
  80.     CALL    BDOS    ;
  81.     JMP    CPM
  82. COMP02:    LDA    FCB2+1
  83.     LXI    H,FCB
  84.     CPI    ' '
  85.     JZ    COMP04
  86.     LXI    H,FCB2    ;
  87. COMP04:    LXI    D,WRIFCB    ;
  88.     MVI    C,9
  89.     CALL    MOVE    ;
  90.     XRA    A
  91.     STA    WRITEX    ;
  92.     STA    WRITRC    ;
  93.     LXI    H,BFRLEN
  94.     SHLD    WBFLEN    ;
  95.     LXI    H,0
  96.     SHLD    WRIPTR    ;
  97.     MVI    C,DELETE
  98.     LXI    D,WRIFCB    ;
  99.     CALL    BDOS    ;
  100.     MVI    C,CREATE
  101.     LXI    D,WRIFCB    ;
  102.     CALL    BDOS    ;
  103.     INR    A
  104.     JNZ    WORKLP    ;
  105.     MVI    C,PRNSTR
  106.     LXI    D,NOSPMS    ;
  107.     CALL    BDOS    ;
  108.     JMP    CPM
  109. ;
  110. ;    MAIN WORK LOOP.   BRINGS EACH LINE INTO INTERMEDIATE
  111. ;    BUFFER AND TESTS IT FOR THE PROPER COMPRESSION FEATURE.
  112. ;
  113. WORKLP:    LXI    H,INTBFR-1
  114.     CALL    LODI02
  115.     XRA    A
  116.     STA    COMSW
  117.     LXI    H,INTBFR-1
  118. WORK02:    INX    H
  119.     MOV    A,M
  120.     CPI    ';'
  121.     JNZ    WORK03
  122.     STA    COMSW
  123.     JMP    SNDIBF
  124. WORK03:    CPI    ' '+1
  125.     JNC    WORK02
  126.     DCX    H
  127.     SHLD    IBFPTR
  128.     INX    H
  129. WORK04:    MOV    A,M
  130.     INX    H
  131.     CPI    LF
  132.     JZ    WORK06
  133.     CPI    ' '+1
  134.     JC    WORK04
  135.     CPI    ';'
  136. WORK06:    CZ    LODIBF
  137. SNDIBF:    LXI    H,SW
  138.     MVI    M,0FFH
  139.     SHLD    IBFPTR
  140. SIBF02:    LXI    H,SW
  141.     MOV    A,M
  142.     CMA
  143.     MOV    M,A
  144. SIBF04:    LHLD    IBFPTR
  145.     INX    H
  146.     SHLD    IBFPTR
  147.     MOV    A,M
  148. SIBF06:    CALL    PUT
  149.     CPI    LF
  150.     JZ    WORKLP
  151.     CPI    27H
  152.     JZ    SIBF02
  153.     CPI    ';'
  154.     JNZ    SIBF04
  155.     LDA    SW
  156.     ORA    A
  157.     JNZ    SIBF04
  158.     LDA    COMSW
  159.     ORA    A
  160.     JNZ    SIBF04
  161.     MVI    A,CR
  162.     CALL    PUT
  163.     MVI    A,LF
  164.     JMP    SIBF06
  165. ;
  166. LODI02:    SHLD    IBFPTR
  167. LODIBF:    CALL    GET
  168.     LHLD    IBFPTR
  169.     INX    H
  170.     SHLD    IBFPTR
  171.     MOV    M,A
  172.     CPI    LF
  173.     JNZ    LODIBF
  174.     RET
  175. ;
  176. ;    DONE WITH THE READS SO SEND THE REST OF
  177. ;    THE LINE TO THE WRITE BUFFER AND FILL THE
  178. ;    SECTOR OUT WITH EOF'S.  THEN CLOSE THE FILE.
  179. ;
  180. DONE:    LHLD    WRIPTR    ;
  181.     MOV    A,L
  182.     ANI    7FH
  183.     JNZ    DONE2    ;
  184.     SHLD    WBFLEN    ;
  185. DONE2:    MVI    A,EOF
  186.     PUSH    PSW
  187.     CALL    PUT    ;
  188.     POP    PSW
  189.     JNZ    DONE    ;
  190.     MVI    C,CLOSE
  191.     LXI    D,WRIFCB    ;
  192.     CALL    BDOS    ;
  193.     INR    A
  194.     JNZ    DONE4    ;
  195.     MVI    C,PRNSTR
  196.     LXI    D,BADCMS    ;
  197.     CALL    BDOS    ;
  198.     JMP    CPM
  199. DONE4:    LXI    D,DONEMS
  200.     MVI    C,PRNSTR
  201.     CALL    BDOS
  202.     JMP    CPM
  203. ;
  204. ;    GET A BYTE OF DATA FROM THE INPUT FILE
  205. ;
  206. GET:    CALL    SEQREA    ;
  207.     CPI    EOF
  208.     RNZ
  209.     JMP    DONE    ;
  210. ;
  211. ;    MOVE MEMORY (HL) TO (DE) FOR LENGTH (C)
  212. ;
  213. MOVE:    MOV    A,M
  214.     STAX    D
  215.     INX    H
  216.     INX    D
  217.     DCR    C
  218.     JNZ    MOVE    ;
  219.     RET
  220. ;
  221. ;    SEQUENTIAL READ ROUTINE FROM SEQIO.LIB
  222. ;    CALLING THIS ROUTINE RETURNS THE NEXT
  223. ;    CHARACTER IN THE FILE OR A 1AH AT THE END
  224. ;    OF THE FILE. ALL DISK OPERATIONS ARE AUTOMATIC.
  225. ;
  226. SEQREA:    LHLD    RBFLEN    ;
  227.     XCHG
  228.     LHLD    REAPTR    ;
  229.     MOV    A,L
  230.     SUB    E
  231.     MOV    A,H
  232.     SBB    D
  233.     JC    READ08    ;
  234.     LXI    H,0
  235.     SHLD    REAPTR    ;
  236. READ02:    XCHG
  237.     LHLD    RBFLEN    ;
  238.     MOV    A,E
  239.     SUB    L
  240.     MOV    A,D
  241.     SBB    H
  242.     JNC    READ06    ;
  243.     LHLD    RBFLOC    ;
  244.     DAD    D
  245.     XCHG
  246.     MVI    C,SETBFR
  247.     CALL    BDOS    ;
  248.     LXI    D,REAFCB    ;
  249.     MVI    C,READ
  250.     CALL    BDOS    ;
  251.     ORA    A
  252.     JNZ    READ04    ;
  253.     LXI    D,80H
  254.     LHLD    REAPTR    ;
  255.     DAD    D
  256.     SHLD    REAPTR    ;
  257.     JMP    READ02    ;
  258. ;
  259. READ04:    LHLD    REAPTR    ;
  260.     SHLD    RBFLEN    ;
  261. READ06:    LXI    D,TBUFF
  262.     MVI    C,SETBFR
  263.     CALL    BDOS    ;
  264.     LXI    H,0
  265.     SHLD    REAPTR    ;
  266. READ08:    XCHG
  267.     LHLD    RBFLOC    ;
  268.     DAD    D
  269.     XCHG
  270.     LHLD    RBFLEN    ;
  271.     MOV    A,L
  272.     ORA    H
  273.     MVI    A,EOF
  274.     RZ
  275.     LDAX    D
  276.     LHLD    REAPTR    ;
  277.     INX    H
  278.     SHLD    REAPTR    ;
  279.     RET
  280. ;
  281. ;    SEQUENTIAL WRITE ROUTING FROM SEQIO.LIB
  282. ;    CALLING THIS ROUTINE WITH A CHARACTER IN
  283. ;    THE A REGISTER WILL LOAD IT INTO THE
  284. ;    WRITE FILE. ALL DISK OPERATION EXCEPT
  285. ;    CLOSE IS AUTOMATIC.  WHEN WRIPTR=WBFLEN
  286. ;    THE BUFFER IS SENT TO THE DISK.
  287. ;
  288. PUT:    PUSH    PSW
  289.     LHLD    WBFLEN    ;
  290.     XCHG
  291.     LHLD    WRIPTR    ;
  292.     MOV    A,L
  293.     SUB    E
  294.     MOV    A,H
  295.     SBB    D
  296.     JC    PUT08    ;
  297.     LXI    H,0
  298.     SHLD    WRIPTR    ;
  299. PUT02:    XCHG
  300.     LHLD    WBFLEN    ;
  301.     MOV    A,E
  302.     SUB    L
  303.     MOV    A,D
  304.     SBB    H
  305.     JNC    PUT06    ;
  306.     LHLD    WBFLOC    ;
  307.     DAD    D
  308.     XCHG
  309.     MVI    C,SETBFR
  310.     CALL    BDOS    ;
  311.     LXI    D,WRIFCB    ;
  312.     MVI    C,WRITE
  313.     CALL    BDOS    ;
  314.     ORA    A
  315.     JNZ    PUT04    ;
  316.     LXI    D,80H
  317.     LHLD    WRIPTR    ;
  318.     DAD    D
  319.     SHLD    WRIPTR    ;
  320.     JMP    PUT02    ;
  321. ;
  322. PUT04:    MVI    C,PRNSTR
  323.     LXI    D,FULMSG    ;
  324.     CALL    BDOS    ;
  325.     POP    PSW
  326.     JMP    CPM
  327. ;
  328. PUT06:    LXI    D,TBUFF
  329.     MVI    C,SETBFR
  330.     CALL    BDOS    ;
  331.     LXI    H,0
  332.     SHLD    WRIPTR    ;
  333. PUT08:    XCHG
  334.     LHLD    WBFLOC    ;
  335.     DAD    D
  336.     XCHG
  337.     POP    PSW
  338.     STAX    D
  339.     LHLD    WRIPTR    ;
  340.     INX    H
  341.     SHLD    WRIPTR    ;
  342.     RET
  343. ;
  344. SIGNON:    DB    CR,LF,'COMPRESSION PROGRAM, VER 1.0'
  345.     DB    CR,LF,'COMPRESSES RESOURCE FILE'
  346.     DB    CR,LF,'$'
  347. NOSMSG:    DB    CR,LF,'NO SOURCE FILE$'
  348. FULMSG:    DB    CR,LF,'DISK FULL: DEST$'
  349. NOSPMS:    DB    CR,LF,'NO DIR SPACE: DEST$'
  350. BADCMS:    DB    CR,LF,'CANNOT CLOSE DEST$'
  351. DONEMS:    DB    'COMPRESSION COMPLETE$'
  352. ;
  353. ;    READ BUFFER FILE CONTROL BLOCK AND VARIABLES
  354. ;
  355. REAFCB:    DB    0,'        ASM'
  356. READEX:    DW    0,0,0,0,0,0,0,0,0,0
  357. READRC:    DB    0
  358. RBFLOC:    DW    READBF
  359. RBFLEN:    DW    BFRLEN
  360. REAPTR:    DW    0
  361. ;
  362. ;    WRITE BUFFER FILE CONTROL BLOCK AND VARIABLES
  363. ;
  364. WRIFCB:    DB    0,'        $$$'
  365. WRITEX:    DW    0,0,0,0,0,0,0,0,0,0
  366. WRITRC:    DB    0
  367. WBFLOC:    DW    WRITBF
  368. WBFLEN:    DW    BFRLEN
  369. WRIPTR:    DW    0
  370. IBFPTR:    DS    2
  371. COMSW:    DS    1
  372. SW:    DS    1
  373. INTBFR:    DS    100H
  374. STACK:    DS    20
  375. READBF:    DS    BFRLEN
  376. WRITBF:    DS    BFRLEN
  377.     END
  378.