10  COM Z,Z1$[11],Z$[99]
20  Z=0
40  Z=1
80  REM *               'ROFF'  TEXT FORMATTER                      *
130  REM ****** MAIN PROGRAM ******
140  GOSUB 620
150  I$="    "
160  I$[4]=UOS$(Z$)
170  GOSUB 7210
180  IF T1$="" THEN 210
190  I$[4]=I$[(J1+1) MIN LEN(I$)]
200  GOTO 230
210  PRINT "SOURCE FILE ";
220  INPUT T1$
230  ASSIGN T1$,1,Z9
240  IF Z9>2 THEN 210
250  GOSUB 7210
260  IF T1$="" THEN 280
270  GOTO 300
280  PRINT "OBJECT FILE ";
290  INPUT T1$
300  ASSIGN T1$,2,Z9
310  IF Z9 <> 0 AND Z9 <> 8 THEN 280
320  IF Z$="" THEN 360
330  P1=(POS(I$,"-N")=0)
340  S2=(POS(I$,"-S") <> 0)
350  GOTO 450
360  PRINT "PRINTOUT Y(ES),S(TOP ON PAGE TOP)";
370  LINPUT A$
380  A$=UOS$(A$)
390  P1=S2=0
400  IF A$[1,1] <> "Y" THEN 430
410  P1=1
420  GOTO 450
430  IF A$[1,1] <> "S" THEN 450
440  P1=S2=1
450  IF  END #1 THEN 530
460  READ #1;I$
470  IF I$[1,1]=C$ THEN 500
480  GOSUB 3950
490  GOTO 450
500  I$[2,3]=UOS$(I$[2,3])
510  GOSUB 1180
520  GOTO 450
530  IF  NOT (L OR L3) THEN 570
540  S=H1
550  GOSUB 5790
560  PRINT #2; END 
570  ASSIGN *,3,Z9
580  PURGE Z9,M$
590  IF Z=0 THEN 610
600  CHAIN "ED"
610  END 
620  REM ***** INITIALIZE VARIABLES *****
630  DIM A$[80],I$[255],O$[255],W$[50],B$[255],S$[255],T1$[255],W1$[255]
640  DIM C1$[255],M$[255],H$[26],H0$[26],H1$[26],J$[26],J1$[26],J0$[26]
650  DIM F$[26],F0$[26],F1$[26],G$[26],G0$[26],G1$[26]
660  DIM P$[255],P0$[26],P1$[80],S1$[255]
670  C$="."
680  FOR Z9=1 TO 51
690  S$[LEN(S$)+1]="     "
700  NEXT Z9
710  C1$="BPBRCEFIFOHEINLSHFPLRMSPTIEHOHEFOFJUNJHYHNM1M2M3M4CCNENXDESI"
720  S1=0
730  N=0
740  Y=1
750  H1=9999
760  F=Y
770  J=Y
780  L1=1
790  I=5
800  R=R1=65
810  T=5
820  C=0
830  U=0
840  H=Y
850  C1=0
860  N1=1
870  L=0
880  P=66
890  M1=2
900  M5=M1
910  M2=2
920  M6=M2
930  M3=2
940  M7=M3
950  M4=2
960  M8=M4
970  M=72
980  B=P-M3-M4
990  O1=0
1000  O2=0
1010  O3=0
1020  M0=0
1030  FILES *,*,*
1040  FOR N9=0 TO 99
1050  A$="0000"
1060  CONVERT N9 TO A$[4]
1070  A$=A$[LEN(A$)-1]
1080  M$="ROFM  "
1090  M$[5]=A$
1100  CREATE Z9,M$,5
1110  IF Z9=0 THEN 1160
1120  IF Z9>1 THEN 1140
1130  NEXT N9
1140  PRINT "CANNOT CREATE MACRO FILE: ";M$
1150  STOP 
1160  ASSIGN M$,3,Z9
1170  RETURN 
1180  REM ***** COMAND - PROCESS COMMANDS *****
1190  C2=POS(C1$,I$[2,3])
1200  IF C2=0 THEN 1260
1210  C2=(C2+1)/2
1220  GOSUB C2 OF 1620,6540,2430,1350,2630,2580,2020,1430,1390,1770
1230  GOSUB C2-10 OF 2160,1550,2300,2680,2800,2740,2860,2520,2550,2920
1240  GOSUB C2-20 OF 2950,2980,3100,3220,3340,3460,3540,3620,3680,1900
1250  RETURN 
1260  READ #3,1
1270  IF  END #3 THEN 1320
1280  FOR M9=0 TO M0-1
1290  READ #3;A$
1300  IF A$[1,2]=I$[2,3] THEN 1330
1310  NEXT M9
1320  RETURN 
1330  GOSUB 3880
1340  RETURN 
1350  REM **** SET FILL MODE ****
1360  GOSUB 6540
1370  F=Y
1380  RETURN 
1390  REM **** SET NO FILL MODE ****
1400  GOSUB 6540
1410  F=N
1420  RETURN 
1430  REM **** SET LINE SPACING ****
1440  GOSUB 6880
1450  GOTO P2+1 OF 1480,1500,1520
1460  L1=N2
1470  GOTO 1530
1480  L1=1
1490  GOTO 1530
1500  L1=L1+N2
1510  GOTO 1530
1520  L1=L1-N2
1530  L1=L1 MAX 1
1540  RETURN 
1550  REM **** PUT A SPACE ON PAGE ****
1560  GOSUB 6880
1570  S=1
1580  IF P2#3 THEN 1600
1590  S=N2
1600  GOSUB 5790
1610  RETURN 
1620  REM **** BEGIN PAGE ****
1630  IF L=0 THEN 1660
1640  S=H1
1650  GOSUB 5790
1660  GOSUB 6880
1670  GOTO P2+1 OF 1700,1720,1740
1680  C1=N2
1690  GOTO 1750
1700  C1=C1+1
1710  GOTO 1750
1720  C1=C1+N2
1730  GOTO 1750
1740  C1=C1-N2
1750  N1=C1
1760  RETURN 
1770  REM **** SET PAGE LENGTH ****
1780  GOSUB 6880
1790  GOTO P2+1 OF 1820,1840,1860
1800  P=N2
1810  GOTO 1870
1820  P=66
1830  GOTO 1870
1840  P=P+N2
1850  GOTO 1870
1860  P=P-N2
1870  P=M1+M2+M3+M4+1 MAX P
1880  B=P-M3-M4
1890  RETURN 
1900  REM **** SET NUMBER OF LINES TO SUPERIMPOSE ****
1910  GOSUB 6880
1920  GOTO P2+1 OF 1950,1970,1990
1930  S1=N2
1940  GOTO 2000
1950  S1=2
1960  GOTO 2000
1970  S1=S1+N2
1980  GOTO 2000
1990  S1=S1-N2
2000  S1=S1 MAX 0
2010  RETURN 
2020  REM **** INDENT ****
2030  GOSUB 6880
2040  GOTO P2+1 OF 2070,2090,2110
2050  I=N2
2060  GOTO 2120
2070  I=5
2080  GOTO 2120
2090  I=I+N2
2100  GOTO 2120
2110  I=I-N2
2120  I=((I MAX 0) MIN (R-1))
2130  IF F=Y AND LEN(O$)>0 THEN 2150
2140  T=I
2150  RETURN 
2160  REM **** SET RIGHT MARGIN ****
2170  GOSUB 6880
2180  GOTO P2+1 OF 2210,2230,2250
2190  R1=N2
2200  GOTO 2260
2210  R=65
2220  GOTO 2260
2230  R1=R1+N2
2240  GOTO 2260
2250  R1=R1-N2
2260  R1=((R1 MAX (T+1)) MIN M)
2270  IF F=Y AND LEN(O$)>0 THEN 2290
2280  R=R1
2290  RETURN 
2300  REM **** SET TEMPORARY INDENT ****
2310  GOSUB 6540
2320  GOSUB 6880
2330  GOTO P2+1 OF 2360,2380,2400
2340  T=N2
2350  GOTO 2410
2360  T=0
2370  GOTO 2410
2380  T=T+N2
2390  GOTO 2410
2400  T=T-N2
2410  T=((T MAX 0) MIN R)
2420  RETURN 
2430  REM **** CENTER N LINES ****
2440  GOSUB 6540
2450  GOSUB 6880
2460  C=1
2470  IF P2=0 THEN 2490
2480  C=N2
2490  C=(C MAX 0)
2500  RETURN 
2510  REM  <<<<UNDERLINE WOULD GO HERE >>>>
2520  REM **** SET JUSTIFY MODE ****
2530  J=Y
2540  RETURN 
2550  REM **** CLEAR JUSTIFY MODE ****
2560  J=N
2570  RETURN 
2580  REM **** HEADER SETUP ****
2590  GOSUB 5500
2600  GOSUB 2700
2610  GOSUB 2820
2620  RETURN 
2630  REM **** FOOTER SETUP ****
2640  GOSUB 5500
2650  GOSUB 2760
2660  GOSUB 2880
2670  RETURN 
2680  REM **** EVEN HEADERS ****
2690  GOSUB 5500
2700  H$=P$
2710  H0$=P0$
2720  H1$=P1$
2730  RETURN 
2740  REM **** EVEN FOOTERS ****
2750  GOSUB 5500
2760  F$=P$
2770  F0$=P0$
2780  F1$=P1$
2790  RETURN 
2800  REM **** ODD HEADERS ****
2810  GOSUB 5500
2820  J$=P$
2830  J0$=P0$
2840  J1$=P1$
2850  RETURN 
2860  REM **** ODD FOOTERS ****
2870  GOSUB 5500
2880  G$=P$
2890  G0$=P0$
2900  G1$=P1$
2910  RETURN 
2920  REM **** SET HYPHENATE FLAG ****
2930  H=Y
2940  RETURN 
2950  REM **** CLEAR HYPHENATE FLAG ****
2960  H=N
2970  RETURN 
2980  REM **** SET TOP MARGIN WITH TITLE SIZE ****
2990  GOSUB 6880
3000  GOTO P2+1 OF 3030,3050,3070
3010  M5=N2
3020  GOTO 3080
3030  M5=2
3040  GOTO 3080
3050  M5=M5+N2
3060  GOTO 3080
3070  M5=M5-N2
3080  M5=(0 MAX (M5 MIN (P-M5-M6-M7-M8-1)))
3090  RETURN 
3100  REM **** SET TOP MARGIN, BELOW TITLE ****
3110  GOSUB 6880
3120  GOTO P2+1 OF 3150,3170,3190
3130  M6=N2
3140  GOTO 3200
3150  M6=2
3160  GOTO 3200
3170  M6=M6+N2
3180  GOTO 3200
3190  M6=M6-N2
3200  M6=(0 MAX (M6 MIN (P-M6-M7-M8-M5-1)))
3210  RETURN 
3220  REM **** SET BOTTOM MARGIN, ABOVE TITLE ****
3230  GOSUB 6880
3240  GOTO P2+1 OF 3270,3290,3310
3250  M7=N2
3260  GOTO 2530
3270  M7=2
3280  GOTO 3320
3290  M7=M7+N2
3300  GOTO 3320
3310  M7=M7-N2
3320  M7=(0 MAX (M7 MIN (P-M5-M6-M7-M8)))
3330  RETURN 
3340  REM **** SET BOTTOM MARGIN, WITH TITLE ****
3350  GOSUB 6880
3360  GOTO P2+1 OF 3390,3410,3430
3370  M8=N2
3380  GOTO 3440
3390  M8=2
3400  GOTO 3440
3410  M8=M8+N2
3420  GOTO 3440
3430  M8=M8-N2
3440  M8=(0 MAX (M8 MIN (P-M5-M6-M7-M8-1)))
3450  RETURN 
3460  REM **** CHANGE COMMAND ID CHARACTER ****
3470  FOR I9=4 TO LEN(I$)
3480  IF I$[I9,I9]=" " THEN 3510
3490  C$=I$[I9,I9]
3500  RETURN 
3510  NEXT I9
3520  C$="."
3530  RETURN 
3540  REM **** IF N LINES CAN'T FIT ON PAGE, BEGIN NEW ONE. ****
3550  GOSUB 6880
3560  IF P2=0 OR N2 <= P-M4-M3-M2-M1-L THEN 3610
3570  S=H1
3580  GOSUB 5790
3590  C1=C1+1
3600  N1=C1
3610  RETURN 
3620  REM **** CHANGE TO NEW INPUT FILE ****
3630  GOSUB 7210
3640  IF T1$="" THEN 3670
3650  ASSIGN T1$,1,Z9
3660  IF Z9>2 THEN 530
3670  RETURN 
3680  REM **** DEFINE MACRO ****
3690  GOSUB 7210
3700  IF T1$ <> "" THEN 3720
3710  RETURN 
3720  READ #3,1
3730  ADVANCE #3;M0,Z9
3740  IF Z9=0 THEN 3780
3750  GOTO 590
3760  PRINT "MACRO ERR"
3770  GOTO 530
3780  PRINT #3;UOS$(T1$)
3790  M0=M0+1
3800  IF  END #1 THEN 3860
3810  READ #1;I$
3820  I$[2,3]=UOS$(I$[2,3])
3830  PRINT #3;I$
3840  M0=M0+1
3850  IF I$[1,1] <> "$" THEN 3810
3860  IF  END #1 THEN 530
3870  RETURN 
3880  REM **** EXECUTE MACRO ****
3890  IF  END #3 THEN 3940
3900  READ #3;I$
3910  IF I$[1,1]="$" THEN 3940
3920  GOSUB 1180
3930  GOTO 3900
3940  RETURN 
3950  REM ***** TEXT - PROCESSES TEXT LINES *****
3960  IF I$="" THEN 3980
3970  IF I$[1,1] <> " " THEN 3990
3980  GOSUB 5930
3990  IF C=0 THEN 4050
4000  GOSUB 7180
4010  B$=I$
4020  GOSUB 4230
4030  C=C-1
4040  RETURN 
4050  IF LEN(I$) THEN 4090
4060  B$=I$
4070  GOSUB 4230
4080  RETURN 
4090  IF F=Y THEN 4170
4100  IF J=N THEN 4140
4110  A$=I$
4120  I$=S$[1,0 MAX (R-T-LEN(I$))]
4130  I$[LEN(I$)+1]=A$
4140  B$=I$
4150  GOSUB 4230
4160  RETURN 
4170  P2=1
4180  GOSUB 6010
4190  IF LEN(W$)=0 THEN 4210
4200  GOSUB 6130
4210  IF P2>0 THEN 4180
4220  RETURN 
4230  REM **** PUT LINE OUT ****
4240  IF  NOT S1 THEN 4340
4250  S1$[LEN(S1$)+1]=S$[1,255-LEN(S1$)]
4260  S1$[T+1]=B$
4270  S1=S1-1
4280  T=I
4290  R=R1
4300  IF S1 THEN 4490
4310  B$=S1$
4320  S1$=""
4330  T=0
4340  IF L>0 AND L <= B THEN 4360
4350  GOSUB 4500
4360  A$=B$
4370  P$=S$[1,T]
4380  P$[LEN(P$)+1]=A$
4390  T=I
4400  R=R1
4410  GOSUB 7130
4420  P$=""
4430  FOR I9=1 TO (L1-1) MIN (B-L)
4440  GOSUB 7130
4450  NEXT I9
4460  L=L+L1
4470  IF L <= B THEN 4490
4480  GOSUB 4780
4490  RETURN 
4500  REM *** PRINT HEADER ***
4510  IF S2=0 THEN 4570
4520  Z9=BRK(0)
4530  FOR I8=1 TO 50000.
4540  IF SYS(3)=1 THEN 4560
4550  NEXT I8
4560  Z9=BRK(1)
4570  C1=N1
4580  N1=N1+1
4590  P3=0
4600  P$=""
4610  IF M1=M5 AND M2=M6 AND M3=M7 AND M4=M8 THEN 4670
4620  M1=M5
4630  M2=M6
4640  M3=M7
4650  M4=M8
4660  B=P-M3-M4
4670  IF M1=0 THEN 4720
4680  FOR I9=1 TO M1-1
4690  GOSUB 7130
4700  NEXT I9
4710  GOSUB 4920
4720  P$=""
4730  FOR I9=1 TO M2
4740  GOSUB 7130
4750  NEXT I9
4760  L=M1+M2+1
4770  RETURN 
4780  REM *** PRINT FOOTER ***
4790  P3=1
4800  P$=""
4810  FOR I9=1 TO M3
4820  GOSUB 7130
4830  NEXT I9
4840  IF M4=0 THEN 4900
4850  GOSUB 4920
4860  P$=""
4870  FOR I9=1 TO M4-1
4880  GOSUB 7130
4890  NEXT I9
4900  L=0
4910  RETURN 
4920  REM ** PUT OUT TITLE **
4930  P$=S$[1,M]
4940  GOSUB P3*2+(C1/2#INT(C1/2))+1 OF 4970,5080,5190,5300
4950  GOSUB 7130
4960  RETURN 
4970  REM EVEN HEADERS
4980  T1$=H$
4990  GOSUB 5410
5000  P$[I+1,I+LEN(T1$)]=T1$
5010  T1$=H0$
5020  GOSUB 5410
5030  P$[INT((R+I-LEN(T1$))/2),INT((R+I+LEN(T1$))/2)]=T1$
5040  T1$=H1$
5050  GOSUB 5410
5060  P$[R-LEN(T1$)+1]=T1$
5070  RETURN 
5080  REM ODD HEADERS
5090  T1$=J$
5100  GOSUB 5410
5110  P$[I+1,I+LEN(T1$)]=T1$
5120  T1$=J0$
5130  GOSUB 5410
5140  P$[INT((R+I-LEN(T1$))/2),INT((R+I+LEN(T1$))/2)]=T1$
5150  T1$=J1$
5160  GOSUB 5410
5170  P$[R-LEN(T1$)+1]=T1$
5180  RETURN 
5190  REM EVEN FOOTERS
5200  T1$=F$
5210  GOSUB 5410
5220  P$[I+1,I+LEN(T1$)]=T1$
5230  T1$=F0$
5240  GOSUB 5410
5250  P$[INT((R+I-LEN(T1$))/2),INT((R+I+LEN(T1$))/2)]=T1$
5260  T1$=F1$
5270  GOSUB 5410
5280  P$[R-LEN(T1$)+1]=T1$
5290  RETURN 
5300  REM ODD FOOTERS
5310  T1$=G$
5320  GOSUB 5410
5330  P$[I+1,I+LEN(T1$)]=T1$
5340  T1$=G0$
5350  GOSUB 5410
5360  P$[INT((R+I-LEN(T1$))/2),INT((R+I+LEN(T1$))/2)]=T1$
5370  T1$=G1$
5380  GOSUB 5410
5390  P$[R-LEN(T1$)+1]=T1$
5400  RETURN 
5410  REM * REPLACE '%' IN T1$ WITH PAGE NUMBER *
5420  T2=POS(T1$,"%")
5430  IF T2=0 THEN 5490
5440  A$=T1$[1,T2-1]
5450  CONVERT C1 TO P1$
5460  A$[LEN(A$)+1]=P1$
5470  A$[LEN(A$)+1]=T1$[T2+1]
5480  T1$=A$
5490  RETURN 
5500  REM *** GET TITLE FROM INPUT BUFFER ***
5510  P$=""
5520  P0$=""
5530  P1$=""
5540  T1=POS(I$," ")
5550  IF T1 <> 0 THEN 5570
5560  RETURN 
5570  FOR I9=T1 TO LEN(I$)
5580  IF I$[I9,I9] <> " " THEN 5610
5590  NEXT I9
5600  RETURN 
5610  T1$=I$[I9,I9]
5620  T1=I9
5630  I$=I$[T1+1]
5640  T1=POS(I$,T1$)
5650  IF T1#0 THEN 5670
5660  RETURN 
5670  P$=I$[1,T1-1]
5680  I$=I$[T1+1]
5690  T1=POS(I$,T1$)
5700  IF T1#0 THEN 5720
5710  RETURN 
5720  P0$=I$[1,T1-1]
5730  I$=I$[T1+1]
5740  T1=POS(I$,T1$)
5750  IF T1#0 THEN 5770
5760  RETURN 
5770  P1$=I$[1,T1-1]
5780  RETURN 
5790  REM **** SPACE N LINES TO PAGE BOTTOM ****
5800  GOSUB 6540
5810  IF L <= B THEN 5830
5820  RETURN 
5830  IF L <> 0 THEN 5850
5840  GOSUB 4500
5850  P$=""
5860  FOR I9=1 TO S MIN (B+1-L)
5870  GOSUB 7130
5880  NEXT I9
5890  L=L+(S MIN (B+1-L))
5900  IF L <= B THEN 5920
5910  GOSUB 4780
5920  RETURN 
5930  REM ** DELETE LEADING BLANKS **
5940  GOSUB 6540
5950  FOR I9=1 TO LEN(I$)
5960  IF I$[I9,I9] <> " " THEN 5980
5970  NEXT I9
5980  T=(I9<LEN(I$))*(T+I9-1)+(I9 >= LEN(I$))*T
5990  I$=I$[I9]
6000  RETURN 
6010  REM **** GETWRD - GET ONE WORD FROM INPUT BUFFER ****
6020  W$=""
6030  FOR I9=P2 TO LEN(I$)
6040  IF I$[I9,I9] <> " " THEN 6080
6050  NEXT I9
6060  P2=0
6070  RETURN 
6080  I$=I$[I9]
6090  T1=POS(I$," ")
6100  W$=I$[1,(T1=0)*LEN(I$)+(T1#0)*(T1-1)]
6110  P2=T1
6120  RETURN 
6130  REM **** PUTWRD : PUT A WORD IN THE OUTPUT BUFFER ****
6140  W1$=""
6150  W=LEN(W$)
6160  L2=LEN(W$)+O1+1
6170  L3=R-T
6180  IF LEN(O$)<3 THEN 6260
6190  IF POS(".:!?",O$[LEN(O$)-1,LEN(O$)-1])=0 THEN 6260
6200  IF W$[1,1]<"A" THEN 6260
6210  IF W$[1,1]>"Z" THEN 6260
6220  W$[2]=W$
6230  W$[1,1]=" "
6240  W=W+1
6250  L2=L2+1
6260  IF O1=0 OR (O2+W <= L3 AND L2 <= M) THEN 6440
6270  IF LEN(W1$)>0 OR H=N THEN 6390
6280  GOSUB 7320
6290  IF W1$="" THEN 6390
6300  IF O2+LEN(W$)+1 <= L3 THEN 6330
6310  W$[LEN(W$)+1]=W1$
6320  GOTO 6390
6330  O$[LEN(O$)+1]=W$
6340  O$[LEN(O$)+1]="-"
6350  O1=O1+LEN(W$)+2
6360  O2=O2+LEN(W$)+2
6370  W$=W1$
6380  GOTO 6150
6390  L2=L2-O1
6400  IF J=N THEN 6430
6410  X=L3-O2+1
6420  GOSUB 6620
6430  GOSUB 6540
6440  O$[LEN(O$)+1]=W$
6450  O1=L2
6460  O$[LEN(O$)+1]=" "
6470  O2=O2+W+1
6480  O3=O3+1
6490  IF O$[1,1]#" " THEN 6530
6500  O2=O2-1
6510  O1=O1-1
6520  O$=O$[2]
6530  RETURN 
6540  REM *** BREAK IN FILLING ***
6550  IF LEN(O$) THEN 6570
6560  RETURN 
6570  B$=O$
6580  GOSUB 4230
6590  O$=""
6600  O1=O2=O3=0
6610  RETURN 
6620  REM *** SPREAD - RIGHT JUSTIFY FILLED TEXT ***
6630  IF X>0 AND O3>1 THEN 6650
6640  RETURN 
6650  D9=0
6660  D9=1-D9
6670  N3=X
6680  N4=O3-1
6690  I9=O1-1
6700  J1=(M-2) MIN (I9+N3)
6710  O$[LEN(O$)+1]=S$[1,X]
6720  IF I9<J1 THEN 6750
6730  O1=O1+X
6740  RETURN 
6750  O$[J1,J1]=O$[I9,I9]
6760  IF O$[I9,I9] <> " " THEN 6850
6770  IF D9#0 THEN 6800
6780  N5=INT((N3-1)/N4+.5)+1
6790  GOTO 6810
6800  N5=INT(N3/N4+.5)
6810  N3=N3-N5
6820  N4=N4-1
6830  J1=J1-N5
6840  O$[J1,J1+N5-1]=S$[1,N5]
6850  I9=I9-1
6860  J1=J1-1
6870  GOTO 6720
6880  REM ** NUMPARM - GET NUERIC PARAMETER **
6890  P2=N2=0
6900  T1=POS(I$," ")
6910  IF T1#0 THEN 6930
6920  RETURN 
6930  FOR I9=T1 TO LEN(I$)
6940  IF I$[I9,I9] <> " " THEN 6970
6950  NEXT I9
6960  RETURN 
6970  P2=3
6980  IF I$[I9,I9] <> "+" THEN 7020
6990  P2=1
7000  I9=I9+1
7010  GOTO 7110
7020  IF I$[I9,I9] <> "-" THEN 7060
7030  P2=2
7040  I9=I9+1
7050  GOTO 7110
7060  IF I$[I9,I9]<"0" THEN 7090
7070  IF I$[I9,I9]>"9" THEN 7090
7080  GOTO 7110
7090  P2=0
7100  RETURN 
7110  CONVERT I$[I9] TO N2
7120  RETURN 
7130  REM ** PUTLN - PRINT A LINE ON SELECTED OUTPUT(S) **
7140  PRINT #2;P$
7150  IF P1=N THEN 7170
7160  PRINT P$
7170  RETURN 
7180  REM *** CENTER A LINE ***
7190  T=(((R+T-LEN(I$))/2) MAX 1)-1
7200  RETURN 
7210  REM ** GET PARAMETER STRING **
7220  T1$=""
7230  FOR I9=4 TO LEN(I$)
7240  IF I$[I9,I9] <> " " THEN 7270
7250  NEXT I9
7260  RETURN 
7270  FOR J1=I9 TO LEN(I$)
7280  IF I$[J1,J1]=" " THEN 7300
7290  NEXT J1
7300  T1$=I$[I9,J1-1]
7310  RETURN 
7320  REM *** HYPHENATE WORD ***
7330  IF LEN(W$) >= 6 THEN 7350
7340  RETURN 
7350  REM FIRST, TEST FOR HYPHEN IN WORD
7360  T1=POS(W$,"-")
7370  IF T1=0 THEN 7410
7380  W1$=W$[T1+1]
7390  W$=W$[1,T1-1]
7400  RETURN 
7410  REM NOW, CHECK FOR SUFFIX
7420  P$=UOS$(W$)
7430  RESTORE 7880
7440  FOR I9=1 TO 69
7450  READ A$
7460  T1=POS(P$,A$)
7470  IF T1=0 THEN 7520
7480  IF T1 <> LEN(W$)-LEN(A$)+1 THEN 7520
7490  W1$=W$[T1]
7500  W$=W$[1,T1-1]
7510  RETURN 
7520  NEXT I9
7530  REM NEXT, CHECK FOR PREFIX
7540  RESTORE 7820
7550  FOR I9=1 TO 48
7560  READ A$
7570  IF POS(P$,A$) <> 1 THEN 7610
7580  W1$=W$[LEN(A$)+1]
7590  W$=W$[1,LEN(A$)]
7600  RETURN 
7610  NEXT I9
7620  REM AND NOW CHECK FOR DOUBLE CONSONANT
7630  FOR I9=1 TO LEN(W$)-3
7640  T1$=P$[I9,I9]
7650  IF T1$ <> P$[I9+1,I9+1] THEN 7700
7660  IF POS("AEIOUY",T1$)#0 THEN 7700
7670  W1$=W$[I9+1]
7680  W$=W$[1,I9]
7690  RETURN 
7700  NEXT I9
7710  REM LASTLY, CHECK FOR VCCV
7720  T1$="AEIOUY"
7730  FOR I9=2 TO LEN(W$)-3
7740  IF POS(T1$,P$[I9,I9])=0 OR POS(T1$,P$[I9+1,I9+1])>0 THEN 7790
7750  IF POS(T1$,P$[I9+2,I9+2])>0 OR POS(T1$,P$[I9+3,I9+3])=0 THEN 7790
7760  W1$=W$[I9+2]
7770  W$=W$[1,I9+1]
7780  RETURN 
7790  NEXT I9
7800  W1$=""
7810  RETURN 
7820  DATA "ABS","AB","AD","ANA","ANTE","ANTI","BENE","BI","BIO","CONTRA"
7830  DATA "DE","DIA","DIS","DYS","EPI","COR","CON","COM","COL","CO"
7840  DATA "EXTRA","EX","FORE","FOR","IL","IM","IN","IR","INTER","INTRO"
7850  DATA "META","MIS","NON"
7860  DATA "OB","PARA","PERI","PER","POST","PRE","RE","SUB","SUPER"
7870  DATA "SYM","SYN","TRANS","UN","WITH"
7880  DATA "ATE","EN","FY","ISE","IZE","ACY","AGE","ANCE","ANCY","ANT"
7890  DATA "AN","ARY","ATE","CY","DOM","EER","EE","ENCE","ENCY","ENT"
7900  DATA "ERY","ESS","ETTE","HOOD","ICE","IER","ISM","IST","ITE","TOR"
7910  DATA "ING","ITY","IVE","MENT","MONY","NESS","ORY","OR","SHIP","STER"
7920  DATA "TION","TUDE","TY","URE","YER"
7930  DATA "ABLE","AL","ARY","ATE","ENT","ESCENT","FUL","IBLE","ICAL"
7940  DATA "IC","ILE","ISH","LESS","LIKE","WAYS"
7950  DATA "LY","ORY","OUS","SOME","ULENT","WISE","ALLY","FOLD","WARD"
7960  END 
