home *** CD-ROM | disk | FTP | other *** search
- ; COPMRESS.ASM
- ;
- ; COMPRESS A FILE FRESHLY CREATED BY RESOURCE OR MSOURCE
- ;
- ; REMOVES COMMENTS FROM THE END OF A LINE WHICH IS ONLY
- ; A HEX ADDRESS AND WHEN A LABEL LINE IS ENCOUNTERED
- ; AND THE LINE CONTAINS ONLY A COMMENT AND NO OPCODE IT
- ; APPENDS THE NEXT LINE IN THE FILE ONE TAB AFTER THE
- ; LABEL.
- ;
- ; LABEL: ;1234H
- ; LXI H,L0234 ;0234H
- ; BECOMES
- ;
- ; LABEL: LXI H,L0234 ;
- ;
- ; LINES WITH COMMENTS ONLY ARE NOT AFFECTED.
- ;
- ; ANY LINES WHICH HAVE BEEN EDITED AND APPEAR AS:
- ;
- ; LABEL: OPCODE OPERAND ;COMMENT
- ;
- ; WILL ONLY HAVE THE COMMENT REMOVED.
- ;
- ; TO USE THE PROGRAM TYPE:
- ;
- ; A.COMPRESS FILENAME (NEWNAME)
- ;
- ; COMPRESS LOOKS FOR AN .ASM FILE AND CREATES A .$$$ FILE.
- ;
- ; PLEASE ADVISE ON ANY PROBLEMS: J.A.PREST
- ; 18704 GLASTONBURY RD
- ; DETROIT, MI. 48219
- ; 313-538-1204
- ; 2,26,80 J.A.P
- ;
- CPM: EQU 0
- BDOS: EQU 5
- FCB: EQU 5CH
- FCB2: EQU 6CH
- TBUFF: EQU 80H
- PRNSTR: EQU 9
- OPEN: EQU 0FH
- CLOSE: EQU 10H
- DELETE: EQU 13H
- READ: EQU 14H
- WRITE: EQU 15H
- CREATE: EQU 16H
- SETBFR: EQU 1AH
- CR: EQU 0DH
- LF: EQU 0AH
- EOF: EQU 1AH
- BFRLEN: EQU 2000H
- ;
- ORG 100H
- COMPRS: LXI SP,STACK+20 ;
- MVI C,PRNSTR
- LXI D,SIGNON ;
- CALL BDOS ;
- LXI H,FCB ;
- LXI D,REAFCB ;
- MVI C,9
- CALL MOVE ;
- ;
- ; INITIALIZE
- ;
- XRA A
- STA READEX ;
- STA READRC ;
- LXI H,BFRLEN
- SHLD RBFLEN ;
- SHLD REAPTR ;
- MVI C,OPEN
- LXI D,REAFCB ;
- CALL BDOS ;
- INR A
- JNZ COMP02 ;
- MVI C,PRNSTR
- LXI D,NOSMSG ;
- CALL BDOS ;
- JMP CPM
- COMP02: LDA FCB2+1
- LXI H,FCB
- CPI ' '
- JZ COMP04
- LXI H,FCB2 ;
- COMP04: LXI D,WRIFCB ;
- MVI C,9
- CALL MOVE ;
- XRA A
- STA WRITEX ;
- STA WRITRC ;
- LXI H,BFRLEN
- SHLD WBFLEN ;
- LXI H,0
- SHLD WRIPTR ;
- MVI C,DELETE
- LXI D,WRIFCB ;
- CALL BDOS ;
- MVI C,CREATE
- LXI D,WRIFCB ;
- CALL BDOS ;
- INR A
- JNZ WORKLP ;
- MVI C,PRNSTR
- LXI D,NOSPMS ;
- CALL BDOS ;
- JMP CPM
- ;
- ; MAIN WORK LOOP. BRINGS EACH LINE INTO INTERMEDIATE
- ; BUFFER AND TESTS IT FOR THE PROPER COMPRESSION FEATURE.
- ;
- WORKLP: LXI H,INTBFR-1
- CALL LODI02
- XRA A
- STA COMSW
- LXI H,INTBFR-1
- WORK02: INX H
- MOV A,M
- CPI ';'
- JNZ WORK03
- STA COMSW
- JMP SNDIBF
- WORK03: CPI ' '+1
- JNC WORK02
- DCX H
- SHLD IBFPTR
- INX H
- WORK04: MOV A,M
- INX H
- CPI LF
- JZ WORK06
- CPI ' '+1
- JC WORK04
- CPI ';'
- WORK06: CZ LODIBF
- SNDIBF: LXI H,SW
- MVI M,0FFH
- SHLD IBFPTR
- SIBF02: LXI H,SW
- MOV A,M
- CMA
- MOV M,A
- SIBF04: LHLD IBFPTR
- INX H
- SHLD IBFPTR
- MOV A,M
- SIBF06: CALL PUT
- CPI LF
- JZ WORKLP
- CPI 27H
- JZ SIBF02
- CPI ';'
- JNZ SIBF04
- LDA SW
- ORA A
- JNZ SIBF04
- LDA COMSW
- ORA A
- JNZ SIBF04
- MVI A,CR
- CALL PUT
- MVI A,LF
- JMP SIBF06
- ;
- LODI02: SHLD IBFPTR
- LODIBF: CALL GET
- LHLD IBFPTR
- INX H
- SHLD IBFPTR
- MOV M,A
- CPI LF
- JNZ LODIBF
- RET
- ;
- ; DONE WITH THE READS SO SEND THE REST OF
- ; THE LINE TO THE WRITE BUFFER AND FILL THE
- ; SECTOR OUT WITH EOF'S. THEN CLOSE THE FILE.
- ;
- DONE: LHLD WRIPTR ;
- MOV A,L
- ANI 7FH
- JNZ DONE2 ;
- SHLD WBFLEN ;
- DONE2: MVI A,EOF
- PUSH PSW
- CALL PUT ;
- POP PSW
- JNZ DONE ;
- MVI C,CLOSE
- LXI D,WRIFCB ;
- CALL BDOS ;
- INR A
- JNZ DONE4 ;
- MVI C,PRNSTR
- LXI D,BADCMS ;
- CALL BDOS ;
- JMP CPM
- DONE4: LXI D,DONEMS
- MVI C,PRNSTR
- CALL BDOS
- JMP CPM
- ;
- ; GET A BYTE OF DATA FROM THE INPUT FILE
- ;
- GET: CALL SEQREA ;
- CPI EOF
- RNZ
- JMP DONE ;
- ;
- ; MOVE MEMORY (HL) TO (DE) FOR LENGTH (C)
- ;
- MOVE: MOV A,M
- STAX D
- INX H
- INX D
- DCR C
- JNZ MOVE ;
- RET
- ;
- ; SEQUENTIAL READ ROUTINE FROM SEQIO.LIB
- ; CALLING THIS ROUTINE RETURNS THE NEXT
- ; CHARACTER IN THE FILE OR A 1AH AT THE END
- ; OF THE FILE. ALL DISK OPERATIONS ARE AUTOMATIC.
- ;
- SEQREA: LHLD RBFLEN ;
- XCHG
- LHLD REAPTR ;
- MOV A,L
- SUB E
- MOV A,H
- SBB D
- JC READ08 ;
- LXI H,0
- SHLD REAPTR ;
- READ02: XCHG
- LHLD RBFLEN ;
- MOV A,E
- SUB L
- MOV A,D
- SBB H
- JNC READ06 ;
- LHLD RBFLOC ;
- DAD D
- XCHG
- MVI C,SETBFR
- CALL BDOS ;
- LXI D,REAFCB ;
- MVI C,READ
- CALL BDOS ;
- ORA A
- JNZ READ04 ;
- LXI D,80H
- LHLD REAPTR ;
- DAD D
- SHLD REAPTR ;
- JMP READ02 ;
- ;
- READ04: LHLD REAPTR ;
- SHLD RBFLEN ;
- READ06: LXI D,TBUFF
- MVI C,SETBFR
- CALL BDOS ;
- LXI H,0
- SHLD REAPTR ;
- READ08: XCHG
- LHLD RBFLOC ;
- DAD D
- XCHG
- LHLD RBFLEN ;
- MOV A,L
- ORA H
- MVI A,EOF
- RZ
- LDAX D
- LHLD REAPTR ;
- INX H
- SHLD REAPTR ;
- RET
- ;
- ; SEQUENTIAL WRITE ROUTING FROM SEQIO.LIB
- ; CALLING THIS ROUTINE WITH A CHARACTER IN
- ; THE A REGISTER WILL LOAD IT INTO THE
- ; WRITE FILE. ALL DISK OPERATION EXCEPT
- ; CLOSE IS AUTOMATIC. WHEN WRIPTR=WBFLEN
- ; THE BUFFER IS SENT TO THE DISK.
- ;
- PUT: PUSH PSW
- LHLD WBFLEN ;
- XCHG
- LHLD WRIPTR ;
- MOV A,L
- SUB E
- MOV A,H
- SBB D
- JC PUT08 ;
- LXI H,0
- SHLD WRIPTR ;
- PUT02: XCHG
- LHLD WBFLEN ;
- MOV A,E
- SUB L
- MOV A,D
- SBB H
- JNC PUT06 ;
- LHLD WBFLOC ;
- DAD D
- XCHG
- MVI C,SETBFR
- CALL BDOS ;
- LXI D,WRIFCB ;
- MVI C,WRITE
- CALL BDOS ;
- ORA A
- JNZ PUT04 ;
- LXI D,80H
- LHLD WRIPTR ;
- DAD D
- SHLD WRIPTR ;
- JMP PUT02 ;
- ;
- PUT04: MVI C,PRNSTR
- LXI D,FULMSG ;
- CALL BDOS ;
- POP PSW
- JMP CPM
- ;
- PUT06: LXI D,TBUFF
- MVI C,SETBFR
- CALL BDOS ;
- LXI H,0
- SHLD WRIPTR ;
- PUT08: XCHG
- LHLD WBFLOC ;
- DAD D
- XCHG
- POP PSW
- STAX D
- LHLD WRIPTR ;
- INX H
- SHLD WRIPTR ;
- RET
- ;
- SIGNON: DB CR,LF,'COMPRESSION PROGRAM, VER 1.0'
- DB CR,LF,'COMPRESSES RESOURCE FILE'
- DB CR,LF,'$'
- NOSMSG: DB CR,LF,'NO SOURCE FILE$'
- FULMSG: DB CR,LF,'DISK FULL: DEST$'
- NOSPMS: DB CR,LF,'NO DIR SPACE: DEST$'
- BADCMS: DB CR,LF,'CANNOT CLOSE DEST$'
- DONEMS: DB 'COMPRESSION COMPLETE$'
- ;
- ; READ BUFFER FILE CONTROL BLOCK AND VARIABLES
- ;
- REAFCB: DB 0,' ASM'
- READEX: DW 0,0,0,0,0,0,0,0,0,0
- READRC: DB 0
- RBFLOC: DW READBF
- RBFLEN: DW BFRLEN
- REAPTR: DW 0
- ;
- ; WRITE BUFFER FILE CONTROL BLOCK AND VARIABLES
- ;
- WRIFCB: DB 0,' $$$'
- WRITEX: DW 0,0,0,0,0,0,0,0,0,0
- WRITRC: DB 0
- WBFLOC: DW WRITBF
- WBFLEN: DW BFRLEN
- WRIPTR: DW 0
- IBFPTR: DS 2
- COMSW: DS 1
- SW: DS 1
- INTBFR: DS 100H
- STACK: DS 20
- READBF: DS BFRLEN
- WRITBF: DS BFRLEN
- END