810 WHILE NOT EOF(1) '====== process all cases in fxoutput file
820 LINE INPUT #1,TEXT.LINE$:BYTES.TO.PROCESS=LEN(TEXT.LINE$):TOTAL.BYTES.READ#=TOTAL.BYTES.READ#+BYTES.TO.PROCESS
825 prev.eol$=eol$:IF BYTES.TO.PROCESS=MAX.LINE.INPUT.LENGTH THEN EOL$="" ELSE EOL$=CRLF$
827 IF INCLUDE.CRLF$="NONE" THEN PRINT #2,TEXT.LINE$;:PRINT "=== Record";RECORD.READ#+1#;"read, total bytes written:";TOTAL.BYTES.READ#;:LOCATE ,1:GOTO 900
828 IF BYTES.TO.PROCESS=0 and (prev.eol$=crlf$ or part.bytes.written#>0) THEN 880 '------ process empty lines and lines with lengths of integer multiples of 255 correctly
830 WHILE FIXED.RECORD.LENGTH#-PART.BYTES.WRITTEN#<=BYTES.TO.PROCESS:RECORD.WRITTEN#=RECORD.WRITTEN#+1#
835 PRINT #2,LEFT$(TEXT.LINE$,FIXED.RECORD.LENGTH#-PART.BYTES.WRITTEN#);CRLF$;:IF FIXED.RECORD.LENGTH#-PART.BYTES.WRITTEN#<BYTES.TO.PROCESS THEN TEXT.LINE$=MID$(TEXT.LINE$,FIXED.RECORD.LENGTH#-PART.BYTES.WRITTEN#+1#) ELSE TEXT.LINE$=""
860 BYTES.WRITTEN#=0:PART.BYTES.WRITTEN#=0:WEND:IF BYTES.TO.PROCESS=0 THEN 900 '''else if bytes.to.process<0 then beep:print "*** bytes.to.process =";bytes.to.process;"pROGRAM ERROR, ABORT ***":stop '====== for debugging purposes
880 IF (INCLUDE.CRLF$="NOSYNC" OR INCLUDE.CRLF$="YESYNC") AND EOL$=CRLF$ THEN PRINT #2,CRLF$;:RECORD.WRITTEN#=RECORD.WRITTEN#+1#:GOSUB 12000:BYTES.WRITTEN#=0:if include.crlf$="YESYNC" then part.bytes.written#=0
890 IF INCLUDE.CRLF$="NOSYNC" OR INCLUDE.CRLF$="NO" OR (INCLUDE.CRLF$="YESYNC" AND EOL$="") THEN PART.BYTES.WRITTEN#=PART.BYTES.WRITTEN#+BYTES.TO.PROCESS
900 RECORD.READ#=RECORD.READ#-(EOL$=CRLF$):WEND '====== increase record.read counter by one if EOL encountered
910 IF INCLUDE.CRLF$="NO" AND PART.BYTES.WRITTEN#>0 THEN PRINT #2,CRLF$;:RECORD.WRITTEN#=RECORD.WRITTEN#+1#:RECORD.READ#=RECORD.READ#-1:GOSUB 12000:BYTES.WRITTEN#=0
990 CLOSE:PRINT:PRINT "=== End of program ===":KEY ON:END
10000 REM ********** Remove leading and trailing spaces from file name *********
10010 WHILE LEFT$(D.PATH.FILENAME.EXT$,1)=" ":D.PATH.FILENAME.EXT$=MID$(D.PATH.FILENAME.EXT$,2):WEND
10020 WHILE RIGHT$(D.PATH.FILENAME.EXT$,1)=" ":D.PATH.FILENAME.EXT$=LEFT$(D.PATH.FILENAME.EXT$,LEN(D.PATH.FILENAME.EXT$)-1):WEND
10030 RETURN
11000 REM ********** check drv:path\file names ********** (result in CHECK.RESULT$)
11010 GOSUB 10000:CHECK.RESULT$="OK"
11020 U=INSTR(D.PATH.FILENAME.EXT$,":"):IF U=1 OR U>2 THEN CHECK.RESULT$="*** ILLEGALLY PLACED ':' ***":RETURN
11030 D$="":IF U=2 THEN W=ASC(LEFT$(D.PATH.FILENAME.EXT$,1)):IF W>96 AND W<123 THEN W=W-32:D$=CHR$(W)+":" ELSE IF W>64 AND W<91 THEN D$=CHR$(W)+":" ELSE CHECK.RESULT$="*** ILLEGAL DRIVE NAME ***":RETURN
11040 PATH$="":PATH.FILENAME.EXT$=MID$(D.PATH.FILENAME.EXT$,U+1):U=INSTR(PATH.FILENAME.EXT$,"\"):IF U=1 THEN PATH$="\":PATH.FILENAME.EXT$=MID$(PATH.FILENAME.EXT$,2)
11050 U=INSTR(PATH.FILENAME.EXT$,"\"):IF U=0 THEN FILENAME.EXT$=PATH.FILENAME.EXT$:WILDCARD$="YES":GOSUB 11110:WILDCARD$="NO":IF CHECK.RESULT$<>"OK" THEN RETURN ELSE D.PATH.FILENAME.EXT$=D$+PATH$+FILENAME.EXT$:D.PATH.FILENAME$=D$+PATH$+FILENAME$:RETURN
11060 PATHNAME.EXT$=LEFT$(PATH.FILENAME.EXT$,U-1):IF PATHNAME.EXT$<>"." AND PATHNAME.EXT$<>".." THEN FILENAME.EXT$=PATHNAME.EXT$:GOSUB 11110:IF CHECK.RESULT$<>"OK" THEN RETURN ELSE PATHNAME.EXT$=FILENAME.EXT$
11070 PATH$=PATH$+PATHNAME.EXT$+"\":PATH.FILENAME.EXT$=MID$(PATH.FILENAME.EXT$,U+1):GOTO 11050 '====== repeat check for every subdirectory name
11110 REM ********** check file names ********** (result in CHECK.RESULT$)
11120 CHECK.RESULT$="OK":IF LEN(FILENAME.EXT$)=0 THEN CHECK.RESULT$="*** ZERO LENGTH PATH/FILENAME ***":RETURN
11125 CHECK.RESULT$="OK":IF LEN(FILENAME.EXT$)>12 THEN CHECK.RESULT$="*** TOO LONG PATH/FILENAME ***":RETURN
11130 V=INSTR(FILENAME.EXT$,"."):IF V=0 AND LEN(FILENAME.EXT$)>8 THEN CHECK.RESULT$="*** PATH/FILENAME TOO LONG ***":RETURN
11133 IF V=0 THEN EXPL.PERIOD$="NO" ELSE EXPL.PERIOD$="YES"
11140 IF V>0 AND INSTR(V+1,FILENAME.EXT$,".")>0 THEN CHECK.RESULT$="*** TOO MANY PERIODS IN PATH/FILENAME ***":RETURN
11150 IF V>9 OR V=1 THEN CHECK.RESULT$="*** ILLEGALLY PLACED '.' IN PATH/FILENAME ***":RETURN
11160 IF V>0 AND (LEN(FILENAME.EXT$)-V)>3 THEN CHECK.RESULT$="*** TOO LONG EXTENSION IN PATH/FILENAME ***":RETURN
11170 IF INSTR(FILENAME.EXT$,"\")>0 THEN CHECK.RESULT$="*** ILLEGAL '\' IN PATH/FILENAME ***":RETURN
11180 IF INSTR(FILENAME.EXT$,"+")>0 THEN CHECK.RESULT$="*** ILLEGAL '+' IN PATH/FILENAME ***":RETURN
11190 IF INSTR(FILENAME.EXT$,"=")>0 THEN CHECK.RESULT$="*** ILLEGAL '=' IN PATH/FILENAME ***":RETURN
11200 IF INSTR(FILENAME.EXT$,"[")>0 THEN CHECK.RESULT$="*** ILLEGAL '[' IN PATH/FILENAME ***":RETURN
11210 IF INSTR(FILENAME.EXT$,"]")>0 THEN CHECK.RESULT$="*** ILLEGAL ']' IN PATH/FILENAME ***":RETURN
11220 IF INSTR(FILENAME.EXT$,":")>0 THEN CHECK.RESULT$="*** ILLEGAL ':' IN PATH/FILENAME ***":RETURN
11230 IF INSTR(FILENAME.EXT$,";")>0 THEN CHECK.RESULT$="*** ILLEGAL ';' IN PATH/FILENAME ***":RETURN
11240 IF INSTR(FILENAME.EXT$,CHR$(34))>0 THEN CHECK.RESULT$="*** ILLEGAL '"+CHR$(34)+"' IN PATH/FILENAME ***":RETURN
11250 IF INSTR(FILENAME.EXT$,"/")>0 THEN CHECK.RESULT$="*** ILLEGAL '/' IN PATH/FILENAME ***":RETURN
11260 IF INSTR(FILENAME.EXT$,",")>0 THEN CHECK.RESULT$="*** ILLEGAL ',' IN PATH/FILENAME ***":RETURN
11270 IF INSTR(FILENAME.EXT$,"|")>0 THEN CHECK.RESULT$="*** ILLEGAL '|' IN PATH/FILENAME ***":RETURN
11280 IF INSTR(FILENAME.EXT$,"<")>0 THEN CHECK.RESULT$="*** ILLEGAL '<' IN PATH/FILENAME ***":RETURN
11290 IF INSTR(FILENAME.EXT$,">")>0 THEN CHECK.RESULT$="*** ILLEGAL '>' IN PATH/FILENAME ***":RETURN
11292 IF INSTR(FILENAME.EXT$,"*")>0 AND WILDCARD$="NO" THEN CHECK.RESULT$="*** ILLEGAL '*' IN PATH/FILENAME ***":RETURN
11294 IF INSTR(FILENAME.EXT$,"?")>0 AND WILDCARD$="NO" THEN CHECK.RESULT$="*** ILLEGAL '?' IN PATH/FILENAME ***":RETURN
11300 FOR W = 1 TO LEN(FILENAME.EXT$):V = ASC(MID$(FILENAME.EXT$,W,1)):IF V > 96 AND V < 123 THEN V=V-32:MID$(FILENAME.EXT$,W,1)=CHR$(V) '====== change lower case to upper case
11310 IF V <= 32 THEN CHECK.RESULT$="*** ILLEGAL SPACE OR CONTROL CHARACTER IN PATH/FILENAME ***":W = LEN(FILENAME.EXT$)