INCLUDE "Const.oph" INCLUDE "System.oxh" PROC Main: LOCAL ret2% LOCAL fNameIn$(255) LOCAL fNameOut$(255) LOCAL fNameBak$(255) LOCAL outputSameFileP% LOCAL bytes& REM dialogue for the input file dINIT "NUL eliminate - input file" dFILE fNameIn$, "Input File,Folder,Disk", 16+256+512 dCHECKBOX outputSameFileP%, "Output to Same file name" dBUTTONS "Cancel",-27,"OK",13 IF DIALOG = 0 RETURN ENDIF if outputSameFileP% <> 0 fNameOut$ = fNameIn$ + ".$$$" ELSE fNameOut$ = fNameIn$ REM dialogue for the output file dINIT "NUL eliminate - output file" dFILE fNameOut$, "Output File,Folder,Disk", 1+8+256+512 dBUTTONS "Cancel",-27,"OK",13 IF DIALOG = 0 RETURN ENDIF ENDIF BUSY "Proessing",2 bytes& = NulEliminate&:( fNameIn$, fNameOut$ ) BUSY OFF IF bytes& < 0 RETURN ENDIF IF outputSameFileP% <> 0 BUSY "Making backup file", 2 fNameBak$ = fNameIn$+".BAK" TRAP DELETE fNameBak$ RENAME fNameIn$, fNameBak$ RENAME fNameOut$, fNameIn$ BUSY OFF ENDIF REM dialogue for end dINIT "NUL eliminate - done" dTEXT "", NUM$( bytes&, 12 )+"bytes writen to" IF outputSameFileP% = 0 dTEXT "", fNameOut$ ELSE dTEXT "", fNameIn$ dTEXT "", "(Backup file is created)" ENDIF dBUTTONS "OK",13 DIALOG ENDP PROC Nuleliminate&:( fNameIn$, fNameOut$ ) LOCAL handleIn%, handleOut% LOCAL textIn$(255), textOut$(255) LOCAL adrIn&, adrOut& LOCAL pIn&, pOut& LOCAL retIn%, retOut% LOCAL ret2% LOCAL bytesProcessed& LOCAL c% LOCAL lenOut% ret2% = IOOPEN( handleIn%, fNameIn$, $0400 ) : REM open & share IF ret2% < 0 ALERT( "Error in opening input file.", fNameIn$, "QUIT" ) RETURN -1 ENDIF ret2% = IOOPEN( handleOut%, fNameOut$, $0002 ) : REM replace or create IF ret2% < 0 ALERT( "Error in opening Output file.", fNameOut$, "QUIT" ) RETURN -1 ENDIF adrIn& = ADDR( textIn$ ) + 1 adrOut& = ADDR( textOut$ ) + 1 WHILE 1 retIn%=IOREAD( handleIn%, adrIn&, 255 ) IF retIn% = -36 BREAK : REM EOF ELSEIF retIn% < 0 ALERT( "Error in Reading", "", "QUIT" ) RETURN -1 : REM Error ELSEIF retIn% = 0 : REM no items CONTINUE ENDIF POKEB ( adrIn& - 1 ), retIn% pIn& = adrIn& pOut& = adrOut& WHILE pIn& < ( adrIn& + retIn% ) c% = PEEKB( pIn& ) pIn& = pIn& + 1 IF c% <> 0 POKEB pOut&, c% pOut& = pOut& + 1 ENDIF ENDWH lenOut% = pOut& - adrOut& IF lenOut% > 0 retOut%=IOWRITE( handleOut%, adrOut&, lenOut% ) IF retOut% < 0 ALERT( "Error in Writing", "", "QUIT" ) RETURN -2 : REM Error ENDIF ENDIF bytesProcessed& = bytesProcessed& + retIn% print "Processed ";bytesProcessed&;" bytes" ENDWH IOCLOSE( handleIn% ) IOCLOSE( handleOut% ) RETURN bytesProcessed& ENDP