350 'DETERMINE SCREEN SIZE AND SET THE SCROLL PARAMETERS
360 A=CSRLIN:PRINT STRING$(60," ");:IF A=CSRLIN THEN CMAX=80 ELSE CMAX=40
370 CLS
380 'READ THE INITIALIZATION PARAMETERS
390 QBEL=0:RCNT=1:LPTR$="LPT1:"
400 ON ERROR GOTO 510
410 OPEN "PARMS.RTY" FOR INPUT AS #1
420 WHILE NOT EOF(1)
430 INPUT#1,P$:P$=LEFT$(P$,4)
440 FOR PL=1 TO LEN(P$)
450 P=ASC(MID$(P$,PL,1)):IF (P>&H60) AND (P<&H7B) THEN MID$(P$,PL,1)=CHR$(P-&H20)
460 NEXT PL
470 IF P$="LPT2" THEN LPTR$="LPT2:":GOTO 500
480 IF P$="LPT3" THEN LPTR$="LPT3:":GOTO 500
490 IF P$="QB" THEN QBEL=-1
500 WEND
510 CLOSE #1
520 REM $PAGE
530 'INITIALIZE PROGRAM VARIABLES
540 ON ERROR GOTO 0
550 INPUT "ENTER NAME OF FILE TO PROCESS";PF$
560 IF PF$="" THEN 550
570 OPEN PF$ FOR INPUT AS #2
580 INPUT "WOULD YOU LIKE TO SAVE THE RESULTS";P$
590 P$=LEFT$(P$,1):IF P$="Y" OR P$="y" THEN GOSUB 870
600 INPUT "DO YOU WANT TO PRINT THE FILE";P$
610 P$=LEFT$(P$,1):IF P$="Y" OR P$="y" THEN PRNTR=-1 ELSE PRNTR=0
620 CLS
630 WIDTH LPTR$,255
640 OPEN LPTR$ AS #1
650 'THIS IS THE MAIN PROGRAM LOOP
660 IF UNCOMP THEN GOSUB 1000:GOTO 690
670 IF EOF(2) THEN 700
680 TCH$=INPUT$(1,#2):GOSUB 1000
690 GOTO 660
700 CLOSE:END
710 'GET THE NEXT RECEIVED CHARACTER AND DISPLAY IT
720 B$=CHR$(BAU):IF BAU > 31 OR BAU=7 OR BAU=10 OR BAU=13 THEN 740 ELSE 850
730 'B$ CONTAINS THE ASCII CHARACTER
740 IF PRNTR THEN IF BAU<>7 THEN PRINT#1,B$;
750 CURIN=ASC(B$)
760 IF NOT COMP THEN 800
770 IF BFILE THEN IF CURIN=LASTIN THEN RCNT=RCNT+1:GOTO 800 ELSE IF LASTIN<>10 AND LASTIN<>13 THEN IF RCNT=1 THEN PRINT#3,CMP$;:GOTO 790 ELSE IF RCNT=2 THEN PRINT#3,CMP$;CMP$;:GOTO 790
780 IF BFILE THEN IF LASTIN<>10 AND LASTIN<>13 THEN IF RCNT=26 THEN PRINT#3,CMP$;CHR$(255);CHR$(25);CMP$; ELSE PRINT#3,CHR$(255);CHR$(RCNT);CMP$;
790 IF BFILE THEN CMP$=B$:RCNT=1
800 IF BFILE THEN IF CURIN=13 AND (LASTIN=10 OR LASTIN=13) THEN PRINT#3,
810 IF BFILE THEN IF CURIN=10 OR CURIN=13 THEN PRINT#3,CHR$(CURIN+10); ELSE IF LASTIN=10 OR LASTIN=13 THEN PRINT#3,
820 IF BFILE AND NOT COMP AND CURIN<>10 AND CURIN<>13 THEN PRINT#3,B$;
830 LASTIN = CURIN
840 GOSUB 950:'PUT CHARACTER ON SCREEN
850 RETURN
860 'SEND RECEIVED CHARACTERS TO SPECIFIED FILE
870 BFILE=0
880 INPUT "ENTER NAME OF NEW FILE";BF$
890 IF BF$="" THEN 930
900 OPEN BF$ FOR APPEND AS #3
910 BFILE=-1:INPUT "DO YOU WANT COMPRESSION (Y/N) ";P$
920 P$=LEFT$(P$,1):IF P$="Y" OR P$="y" THEN COMP=-1 ELSE COMP=0
930 RETURN
940 'PUT RECEIVED CHARACTER ON SCREEN
950 RCH=ASC(B$):IF RCH=13 THEN LOCATE CSRLIN,1,0:RETURN
960 PRINT B$;
970 RETURN
980 REM $PAGE
990 'PUT CHAR TO SEND ON SCREEN
1000 TCH=ASC(TCH$):IF UNCOMP THEN TCNT=TCNT-1:TCH=UTCH:TCH$=UTCH$:IF TCNT=0 THEN UNCOMP=0:GOTO 1060 ELSE GOTO 1060
1010 IF UCNT THEN UCNT=0:UNCOMP=-1:UTCH=TCH:IF TCH=13 THEN UTCH$=CHR$(23):RETURN ELSE UTCH$=TCH$:RETURN
1020 IF USTRT THEN USTRT=0:UCNT=-1:TCNT=TCH:RETURN
1030 IF CRLF THEN CRLF=0:IF TCH=10 THEN LTCH=10:RETURN
1040 IF QBL THEN QBL=0:IF TCH=7 THEN LTCH=7:RETURN
1050 IF TCH=255 THEN USTRT=-1:RETURN
1060 IF TCH=13 OR TCH=10 THEN IF LTCH=20 OR LTCH=23 THEN RETURN ELSE TCH$=CHR$(TCH+10)
1070 IF TCH=20 OR TCH=23 THEN BAU=TCH-10 ELSE BAU=TCH
1080 GOSUB 720
1090 LTCH=TCH
1100 IF TCH=13 THEN TCH=10:CRLF=-1:GOTO 1070
1110 IF QBEL AND TCH=39 THEN TCH=7:QBL=-1:GOTO 1070