;NULLKILL ; A program to filter nulls from text files. ; USAGE: FILTER d:fn.ext d:fn.ext ; Will copy first to second, filtering as it goes. ; Sunday Feb 6 1983 2145 ; VERSION 1.0 ORG 100H ; COPY FILE 1 TO FILE 2, eliminate ; all NULL CHARACTERS ; MACLIB SEQIO ;SEQUENTIAL IO LIB MACLIB MACRO ;to include the print routine BOOT EQU 0000H ;SYSTEM REBOOT UCASE EQU 5FH ;UPPER CASE BITS DELETE EQU 7FH ; DELETE CHARACTER SUPERCR EQU 8DH ;SUPERCR or 8th bit set carriage return SPACE EQU 20H ; SPACE is 20H or 32 decimal SUPERSPACE EQU 0A0H ; SPACE +7F +1 PERIOD EQU 2EH ; PERIOD CHARACTER SUPERPERIOD EQU 0AEH ; 2E + 7F + 1 QUESTION EQU 3FH ; QUESTION MARK NULL equ 00000000b ; null characters ; ; LXI SP,STACK ; ; *********************************************** PRINT <'Program filters NULL characters.',cr,lf> PRINT <'Usually useful on TEXT files.',cr,lf> PRINT ; ; ************************************************* ; DEFINE SOURCE FILE: ; INFILE = INPUT FILE ; SOURCE = INTERNAL NAME ; (NUL) = DEFAULT DISK ; 1 = FIRST DEFAULT NAME ; (NUL) = FIRST DEFAULT TYPE ; 2000 = BUFFER SIZE FILE INFILE,SOURCE,,1,,2000 ; ; ************************************************* ; DEFINE DESTINATION FILE: ; OUTFILE = OUTPUT FILE ; DEST = INTERNAL NAME ; (NUL) = DEFAULT DISK ; 2 = SECOND DEFAULT NAME ; (NUL) = SECOND DEFAULT TYPE ; 2000 = BUFFER SIZE FILE OUTFILE,DEST,,2,,2000 ; ; ************************************* ; ; READ SOURCE FILE, TRANSLATE, WRITE DESTINATION CYCLE: GET SOURCE CYCLE1: CPI EOF ;END OF FILE? JZ ENDCOPY ;SKIP TO END IF SO ; CPI NULL ; is it a null? JZ WASNULL ; if null, ignore it ; ; PUT CON ; if you want it to print to the console, remove ; the semicolon from above line. PUT DEST ; Output the character JMP CYCLE ; get another ; ; WASNULL: PRINT <'.'> ; OUTPUT A DOT TO SHOW NULL GONE JMP CYCLE ; ; NOCONV: ;DOES NOTHING AT THE MOMENT ; PUT CON ;WRITE TO CONSOLE PUT DEST ;AND TO DESTINATION FILE LDA LNCNT ; GET THE LINECOUNTER INR A ;INCREMENT LINECOUNTER STA LNCNT ;STORE LINECOUNTER JMP CYCLE ;GO GET ANOTHER CHARACTER ; ; ENDCOPY: ; MVI A,1AH ; GET A CONTROL Z ; PUT CON ; OUTPUT THE CONTROL Z ; PUT DEST ; PROBABLY NOT NEEDED SINCE FINIS DOES IT TOO FINIS DEST ;END OF OUTPUT JMP BOOT ;BACK TO CCP ; SPCNT: DB 0 ;INITIALIZE SPACECOUNTER LNCNT: DB 0 ;INITIALIZE LINECOUNTER DS 32 ;16 LEVEL STACK STACK: BUFFERS: MEMSIZE EQU BUFFERS+@NXTB ;PROGRAM SIZE END