home *** CD-ROM | disk | FTP | other *** search
- 1 REM $$$ FORMAT $$$ B.RATOFF 8/22/77
- REM A SIMPLE TEXT PROCESSING PROGRAM
- GOSUB 900
- GOSUB 730
- 50 NL=1
- 60 LO$=""
- 70 REM GET NEXT STRING AND CHECK FOR END OF DATA FLAG (..)
- READ#1;LI$
- IF END#1 THEN 800
- IF LEN(LI$)=0 THEN GOSUB 1200 : GOTO 70
- IF LEFT$(LI$,2)<>"QQ" THEN 77
- IF LEN(LO$)>0 THEN GOSUB 1200
- IF LEFT$(LI$,3)="QQJ" THEN JU$=MID$(LI$,4,1) : GOTO 70
- IF LEFT$(LI$,3)="QQF" THEN FI$=MID$(LI$,4,1) : GOTO 70
- IF LI$="QQP" THEN GOSUB 700 : NL=1 : LO$="" : GOTO 70
- IF LEFT$(LI$,3)="QQS" THEN GOSUB 1000 : GOTO 70
- IF LI$="QQC" THEN GOSUB 1100 : GOTO 70
- 77 GOSUB 400
- IF FI$="N" THEN LO$=LI$ : GOSUB 1200 : GOTO 70
- SC=1 : EC=LEN(LI$)
- 80 REM ANY WORDS LEFT IN STRING?
- IF SC>EC THEN 70
- 150 REM GET NEXT WORD. NULL STRING IN W$ MEANS READ SOME MORE
- GOSUB 300
- IF W$="" THEN 70
- 160 REM WILL THIS WORD FIT ON THE CURRENT LINE?
- IF LEN(LO$)+LEN(W$)>PW-1 THEN 200
- REM IT FITS, SO ADD IT, INCL A SPACE IF NOT THE FIRST WORD
- IF LEN(LO$)>0 THEN LO$=LO$+" "
- LO$=LO$+W$
- GOTO 80
- 200 REM COME HERE WITH A FULL LINE TO JUSTIFY AND PRINT IT
- GOSUB 500
- 210 REM CALL THE BREAK ROUTINE
- GOSUB 1200 : GOTO 160
- 300 REM ROUTINE TO MOVE NEXT WORD FROM LI$ TO W$
- REM RETURNS THE NULL STRING IN W$ IF LI$ IS USED UP
- W$="" : EW=SC
- 310 IF MID$(LI$,SC,1)<>" " THEN 350
- SC=SC+1 : EW=SC
- IF SC<=EC THEN GOTO 310 ELSE RETURN
- 350 EW=EW+1
- 360 IF EW>EC THEN 380
- IF MID$(LI$,EW,1)<>" " THEN 350
- 380 W$=MID$(LI$,SC,EW-SC) : SC=EW : RETURN
- 400 REM ROUTINE TO CONVERT ALPHAS NOT PRECEDED BY "^" TO LC
- LT$=""
- FOR J=1 TO LEN(LI$)
- LC$=MID$(LI$,J,1)
- IF LC$<"A" OR LC$="\" THEN LT$=LT$+LC$ : GOTO 470
- IF LC$<>"^" THEN 460
- LT$=LT$+CHR$(ASC(MID$(LI$,J+1,1)) AND NOT 32) : J=J+1 : GOTO 470
- 460 LT$=LT$+CHR$(ASC(LC$) OR 32)
- 470 NEXT J
- LI$=LT$
- RETURN
- 500 REM ROUTINE TO JUSTIFY A LINE BY WIDENING WORD SPACING
- IF JU$="N" THEN RETURN
- IF LEN(LO$)>=PW OR LEN(LO$)<2 THEN 570
- REM SCAN LINE FROM RIGHT TO LEFT (IT LOOKS BETTER)
- FOR J=LEN(LO$) TO 2 STEP -1
- REM ADD SPACE AT EACH WORD BOUNDARY;
- IF MID$(LO$,J,1)<>" " OR MID$(LO$,J+1,1)=" " THEN 550
- LO$=LEFT$(LO$,J)+MID$(LO$,J,255)
- REM QUIT AS SOON AS LINE IS CORRECT LENGTH (PW)
- IF LEN(LO$)>=PW THEN J=2
- 550 NEXT J
- REM MAKE ANOTHER PASS IF IT'S STILL TOO SHORT
- 560 GOTO 500
- 570 RETURN
- 600 REM ROUTINE TO CONVERT SPECIAL SYMBOLS:
- IF LEN(LO$)=0 THEN RETURN
- LT$=""
- FOR J=1 TO LEN(LO$)
- LC$=MID$(LO$,J,1)
- IF LC$="\" THEN LT$=LT$+" " : GOTO 610
- LT$=LT$+LC$
- 610 NEXT J
- LO$=LT$
- RETURN
- 700 REM ROUTINE FOR END OF PAGE
- IF NL+((PS-PP)/2)+1 > PS THEN 730
- FOR I=NL+((PS-PP)/2)+1 TO PS:PRINT:NEXT I
- REM IF PAUSE, RING BELL AND WAIT FOR 1 CHAR. FROM KEYBOARD
- 730 IF PU$="Y" THEN PRINT CHR$(7):OUT 255,0:GOSUB 750
- IF PS-PP>1 THEN FOR QQ=1 TO (PS-PP)/2:PRINT:NEXT QQ
- 740 RETURN
- 750 REM WAIT FOR A CHARACTER ON CONSOLE "T"
- IF (INP(0) AND 1)=1 THEN 750
- QQ=INP(1)
- RETURN
- 800 REM ROUTINE TO HANDLE LAST PAGE
- GOSUB 600
- PRINT LO$
- GOSUB 700
- GOTO 999999
- 900 REM ROUTINE TO REQUEST AND CHECK PARAMETERS
- INPUT "INPUT FILENAME";IFILE$
- FILE IFILE$
- INPUT "TOTAL LINES PER PAGE";PS
- 910 INPUT "PRINT LINES PER PAGE";PP
- IF PP>PS THEN PRINT "INVALID":GOTO 910
- 930 INPUT "PAUSE AFTER EA. PAGE";PU$
- PU$=LEFT$(PU$,1)
- IF PU$<>"Y" AND PU$<>"N" THEN PRINT "INVALID":GOTO 930
- INPUT "CHARACTERS PER LINE ";PW
- RETURN
- 1000 REM THIS ROUTINE HANDLES THE "QQS" (SKIP LINES) COMMAND
- QQS=VAL(MID$(LI$,4,255))
- IF QQS < 1 THEN RETURN
- IF QQS + NL > PP THEN GOSUB 700 : NL=1 : RETURN
- NL=NL+QQS
- FOR QQQ=1 TO QQS : PRINT : NEXT QQQ
- RETURN
- 1100 REM THIS ROUTINE CENTERS THE NEXT LINE ON THE PAGE
- READ#1;LI$ : GOSUB 400
- QQC=INT((PW-LEN(LI$))/2)
- LO$=LI$ : GOSUB 600
- PRINT TAB(QQC);LO$
- GOSUB 1250
- RETURN
- 1200 REM LINE BREAK ROUTINE
- GOSUB 600 : PRINT LO$
- 1250 NL=NL+1 : OUT 255,(NOT NL) AND 255
- IF NL>PP THEN NL=PP : GOSUB 700 : NL=1
- LO$=""
- RETURN
- 999999 END
-