home *** CD-ROM | disk | FTP | other *** search
- ; CLNRES10.ASM
- ;
- ; Cleans 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 with 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:
- ;
- ; CLNRES filename (newname)
- ;
- ; CLNRES 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
- START: 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 cleanup 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
- ;
- ; Calling this routine returns the next character in the file or a EOF
- ; at the end of the file.
- ;
- 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
- ;
- ; Calling this routine with a character in the A register will load it
- ; into the write file. All disk operations 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,'CLNRES Utility, Version 1.0'
- DB CR,LF,'Cleans Resource File'
- DB CR,LF,'$'
- NOSMSG: DB CR,LF,'No Source File$'
- FULMSG: DB CR,LF,'Disk Full$'
- NOSPMS: DB CR,LF,'No Directory Space$'
- BADCMS: DB CR,LF,'Cannot Close File$'
- DONEMS: DB 'CLNRES 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
- Wp