9 REM FILES, HP 36645B, 6/74 10 FILES *,*,* 11 ASSIGN "SWAP",3,Z9 12 IF Z9=0 THEN 20 13 PRINT LIN(1);"WORK FILE IN USE, ENTER NAME OF 2 RECORD WORK FILE"; 14 INPUT A$ 15 ASSIGN A$,3,Z9 16 IF Z9=0 THEN 20 17 GOTO 13 20 DIM A$[72],B$[72],D$[6],C$[6],E$[72],F$[72],G$[72],H$[72],I$[72] 21 PRINT LIN(1)"instructions "; 22 INPUT A$ 23 IF A$[1,1]="N" THEN 150 30 PRINT "1)...CREATE A FILE" 40 PRINT "2)...SORT A FILE" 50 PRINT "3)...LIST A FILE" 60 PRINT "4)...COPY A FILE" 70 PRINT "5)...X-PUNCH A FILE" 80 PRINT "6)...LIST THE FILE FORMAT" 90 PRINT "7)...UPDATE A RECORD IN A FILE" 100 PRINT "8)...ADD A FIELD TO A RECORD" 110 PRINT "9)...DELETE A FIELD FROM A RECORD" 120 PRINT "10)..CHANGE FROM A RANDOM FILE TO A SERIAL FILE" 130 PRINT "11)..CHANGE FROM A SERIAL FILE TO A RANDOM FILE" 140 PRINT "12)..END THE PROGRAM" 150 PRINT LIN(1)"ENTER THE NUMBER OF THE ROUTINE TO BE RUN" 160 PRINT LIN(1)"YOUR CHOICE"; 170 ASSIGN "*",1,A 180 ASSIGN "*",2,A 190 INPUT A 210 GOTO A OF 240,1510,3430,3680,3990,4200,5360,7140,7160,7180,7440,220 211 GOTO 160 220 STOP 230 REM** FILE BUILD SUBROUTINE ** 240 A$="" 250 GOSUB 4880 260 DIM M[5] 270 A2=A3=0 280 MAT M=ZER 290 PRINT LIN(1)"RECORD FORMAT = "; 300 INPUT B$ 310 FOR X=1 TO LEN(B$) 320 IF B$[X,X]="$" THEN 700 330 IF B$[X,X]="#" THEN 700 340 IF B$[X,X]="C" THEN 370 350 PRINT LIN(1);B$[X,X];" IS AN INVALID FORMAT CHARACTER" 360 GOTO 270 370 X=X+1 380 IF X <= LEN(B$) THEN 410 390 PRINT LIN(1)"LAST CHARACTER IN FORMAT WORD MUST NOT BE 'C'" 400 GOTO 270 410 IF B$[X,X]="$" THEN 530 420 IF B$[X,X]="#" THEN 440 430 GOTO 350 440 A2=A2+1 450 IF A2<6 THEN 480 460 PRINT LIN(1)"ONLY 5 NUMBER CONSTANTS ALLOWED" 470 GOTO 270 480 PRINT 490 PRINT USING 500;A2 500 IMAGE#,"# CONSTANT ",D," = " 510 INPUT M[A2] 520 GOTO 700 530 A3=A3+1 540 IF A3<6 THEN 570 550 PRINT LIN(1)"ONLY 5 STRING CONSTANTS ALLOWED" 560 GOTO 270 570 PRINT 580 PRINT USING 590;A3 590 IMAGE#,"$ CONSTANT ",D," = " 600 GOTO A3 OF 610,630,650,670,690 610 INPUT E$ 620 GOTO 700 630 INPUT F$ 640 GOTO 700 650 INPUT G$ 660 GOTO 700 670 INPUT H$ 680 GOTO 700 690 INPUT I$ 700 NEXT X 710 IF END #2 THEN 1400 720 FOR Z=1 TO 10000 730 READ #2,Z 740 A2=A3=A4=A5=0 750 PRINT LIN(1)"** RECORD "; 760 PRINT USING 770;Z 770 IMAGE#,3D," ?" 780 D$="" 790 ENTER 255,S,D$ 800 IF S=-256 THEN 790 810 PRINT 820 IF D$='92 THEN 1430 830 C=0 840 FOR X=1 TO LEN(B$) 850 IF B$[X,X]="$" THEN 1210 860 IF B$[X,X]="#" THEN 1300 870 X=X+1 880 IF B$[X,X]="$" THEN 940 890 A2=A2+1 900 C=C+2 910 IF C>256 THEN 1420 920 PRINT #2;M[A2] 930 GOTO 1370 940 A3=A3+1 950 GOTO A3 OF 960,1010,1060,1110,1160 960 D=LEN(E$) 970 GOSUB 1450 980 IF C>256 THEN 1420 990 PRINT #2;E$ 1000 GOTO 1370 1010 D=LEN(F$) 1020 GOSUB 1450 1030 IF C>256 THEN 1420 1040 PRINT #2;F$ 1050 GOTO 1370 1060 D=LEN(G$) 1070 GOSUB 1450 1080 IF C>256 THEN 1420 1090 PRINT #2;G$ 1100 GOTO 1370 1110 D=LEN(H$) 1120 GOSUB 1450 1130 IF C>256 THEN 1420 1140 PRINT #2;H$ 1150 GOTO 1370 1160 D=LEN(I$) 1170 GOSUB 1450 1180 IF C>256 THEN 1420 1190 PRINT #2;I$ 1200 GOTO 1370 1210 A4=A4+1 1220 PRINT USING 1230;A4 1230 IMAGE#,"$ ",DD," = " 1240 INPUT A$ 1250 D=LEN(A$) 1260 GOSUB 1450 1270 IF C>256 THEN 1420 1280 PRINT #2;A$ 1290 GOTO 1370 1300 A5=A5+1 1310 PRINT USING 1320;A5 1320 IMAGE#,"# ",DD," = " 1330 INPUT A 1340 C=C+2 1350 IF C>256 THEN 1420 1360 PRINT #2;A 1370 NEXT X 1380 NEXT Z 1390 GOTO 150 1400 PRINT LIN(1)"OUTPUT FILE IS FULL" 1410 GOTO 150 1420 PRINT LIN(1)"MORE THAN 256 WORDS OF STORAGE ARE REQUIRED FOR THIS RECORD" 1430 PRINT #2,Z; END 1440 GOTO 150 1450 IF D/2=INT(D/2) THEN 1480 1460 C=C+(1+((D+1)/2)) 1470 GOTO 1490 1480 C=C+(1+(D/2)) 1490 RETURN 1500 REM ** FILE SORT SUBROUTINE ** 1510 GOSUB 4670 1520 GOSUB 4880 1530 GOSUB 5120 1540 A1=A2=0 1550 PRINT LIN(1)"SORT ON FIELD #"; 1560 INPUT F 1570 IF F<1 THEN 1550 1580 PRINT 1590 PRINT USING 1600;F 1600 IMAGE#,"IS FIELD #",DD," A CHARACTER STRING" 1610 INPUT A$ 1620 IF A$[1,1]="N" THEN 1670 1630 PRINT LIN(1)"ENTER THE CHARACTER STRING STARTING AND ENDING CHARACTER POSITIONS" 1640 PRINT "OR ENTER 0,0 TO USE THE ENTIRE STRING"; 1650 INPUT A1,A2 1660 IF A1>A2 OR (A1=0 AND A2#0) THEN 1790 1670 PRINT LIN(1)"ASCENDING OR DESCENDING SEQUENCE (0 OR 1)"; 1680 INPUT G 1690 IF G<0 OR G>1 THEN 1670 1700 IF END #2 THEN 1750 1710 IF END #1 THEN 3390 1720 PRINT #2,1; END 1730 Z=1 1740 GOTO 1870 1750 PRINT LIN(1)"SORT OUTPUT FILE TOO SMALL" 1760 PRINT LIN(1)"LAST RECORD PROCESSED ="; 1770 PRINT USING "XDDD";R 1780 GOTO 150 1790 PRINT LIN(1)"STARTING CHARACTER POSITION IS LARGER THAN ENDING OR 0" 1800 GOTO 1630 1810 PRINT 1820 PRINT USING 1830;LEN(A$) 1830 IMAGE"THE STRING BEING SORTED ON IS ONLY ",DD," CHARACTERS LONG, THE" 1840 PRINT "SPECIFIED STARTING CHARACTER POSITION IS BEYOND THE" 1850 PRINT "LIMITS OF THE STRING" 1860 GOTO 150 1870 FOR R=L1 TO L2 1880 READ #1,R 1890 IF TYP(-1)=3 THEN 3390 1900 FOR F1=1 TO F 1910 GOTO TYP(-1) OF 1920,1950,1990,1990 1920 READ #1;A 1930 C=1 1940 GOTO 1970 1950 READ #1;A$ 1960 C=2 1970 NEXT F1 1980 GOTO 2030 1990 PRINT 2000 PRINT USING 2010;F1 2010 IMAGE"SORT INPUT FILE HAS ONLY ";,3D," FIELDS PER RECORD " 2020 GOTO 150 2030 Z1=0 2040 Z2=Z 2050 Z3=INT(((Z2-Z1)/2)+Z1) 2060 IF Z3>0 THEN 2080 2070 Z3=1 2080 READ #2,Z3 2090 FOR F1=1 TO F 2100 GOTO TYP(-2) OF 2110,2140,2690 2110 READ #2;B 2120 D=1 2130 GOTO 2160 2140 READ #2;B$ 2150 D=2 2160 NEXT F1 2170 IF D=C THEN 2200 2180 PRINT LIN(1)"ALL RECORDS IN SORT INPUT FILE ARE NOT THE SAME FORMAT" 2190 GOTO 150 2200 GOTO G+1 OF 2210,2460 2210 GOTO D OF 2220,2280 2220 IF B>A THEN 2260 2230 Z1=Z3 2240 IF Z2-Z1=1 THEN 2690 2250 GOTO 2050 2260 Z2=Z3 2270 GOTO 2240 2280 IF A1#0 THEN 2330 2290 A3=B3=1 2300 A4=LEN(A$) 2310 B4=LEN(B$) 2320 GOTO 2440 2330 IF A1>LEN(A$) OR A1>LEN(B$) THEN 1810 2340 A3=B3=A1 2350 IF A2>LEN(A$) AND A2>LEN(B$) THEN 2300 2360 IF A2>LEN(A$) THEN 2400 2370 IF A2>LEN(B$) THEN 2430 2380 A4=B4=A2 2390 GOTO 2440 2400 A4=LEN(A$) 2410 B4=A2 2420 GOTO 2440 2430 A4=B4=A2 2440 IF B$[B3,B4]>A$[A3,A4] THEN 2260 2450 GOTO 2230 2460 GOTO D OF 2470,2490 2470 IF B>A THEN 2230 2480 GOTO 2260 2490 IF A1#0 THEN 2550 2500 A3=B3=1 2510 A4=LEN(A$) 2520 B4=LEN(B$) 2540 GOTO 2670 2550 IF A1>LEN(A$) OR A1>LEN(B$) THEN 1810 2560 A3=B3=A1 2570 IF A2>LEN(A$) AND A2>LEN(B$) THEN 2510 2580 IF A2>LEN(A$) THEN 2620 2590 IF A2>LEN(B$) THEN 2650 2600 A4=B4=A2 2610 GOTO 2670 2620 A4=LEN(A$) 2630 B4=A2 2640 GOTO 2670 2650 A4=A2 2660 GOTO 2520 2670 IF B$[B3,B4]>A$[A3,A4] THEN 2230 2680 GOTO 2260 2690 X1=2 2700 X2=Z2 2710 X3=3 2720 X4=1 2730 GOSUB 3270 2740 IF X5=1 THEN 3050 2750 X1=1 2760 X2=R 2770 X3=2 2780 X4=Z2 2790 GOSUB 3270 2800 Z2=Z2+1 2810 X1=2 2820 X2=Z2 2830 X3=3 2840 X4=2 2850 GOSUB 3270 2860 IF X5=1 THEN 3110 2870 X1=3 2880 X2=1 2890 X3=2 2900 X4=Z2 2910 GOSUB 3270 2920 Z2=Z2+1 2930 X1=2 2940 X2=Z2 2950 X3=3 2960 X4=1 2970 GOSUB 3270 2980 IF X5=1 THEN 3170 2990 X1=3 3000 X2=2 3010 X3=2 3020 X4=Z2 3030 GOSUB 3270 3040 GOTO 2800 3050 X1=1 3060 X2=R 3070 X3=2 3080 X4=Z2 3090 GOSUB 3270 3100 GOTO 3220 3110 X1=3 3120 X2=1 3130 X3=2 3140 X4=Z2 3150 GOSUB 3270 3160 GOTO 3220 3170 X1=3 3180 X2=2 3190 X3=2 3200 X4=Z2 3210 GOSUB 3270 3220 Z=Z+1 3230 PRINT #2,Z; END 3240 NEXT R 3250 R=R-1 3260 GOTO 3390 3270 X5=0 3280 READ #X1,X2 3290 READ #X3,X4 3300 GOTO TYP(-X1) OF 3310,3340,3370,3380 3310 READ #X1;A 3320 PRINT #X3;A 3330 GOTO 3300 3340 READ #X1;A$ 3350 PRINT #X3;A$ 3360 GOTO 3300 3370 X5=1 3380 RETURN 3390 PRINT 3400 PRINT USING 3410;R-L1 3410 IMAGE3D," RECORDS SORTED " 3420 GOTO 150 3430 REM** FILE LIST SUBROUTINE ** 3440 GOSUB 4670 3450 GOSUB 5120 3460 PRINT LIN(1)"*** LINE PRINTER?"; 3470 ENTER 255,A,B 3480 IF A=-256 THEN 3470 3490 PRINT 3500 FOR X=L1 TO L2 3510 PRINT 3520 PRINT USING 3530;X 3530 IMAGE"*** RECORD ",3D 3540 READ #1,X 3550 GOTO TYP(-1) OF 3560,3590,3650,3620 3560 READ #1;A 3570 PRINT "#";A 3580 GOTO 3550 3590 READ #1;A$ 3600 PRINT A$ 3610 GOTO 3550 3620 PRINT "EOR" 3630 NEXT X 3640 GOTO 3660 3650 PRINT "EOF" 3660 PRINT 3670 GOTO 150 3680 REM** COPY FILE SUBROUTINE ** 3690 GOSUB 4670 3700 GOSUB 4880 3710 GOSUB 5120 3720 GOSUB 5250 3730 L4=L3 3740 FOR X=L1 TO L2 3750 IF END #2 THEN 3950 3760 READ #1,X 3770 READ #2,L3 3780 L4=L4+1 3790 GOTO TYP(-1) OF 3800,3830,3890,3860 3800 READ #1;A 3810 PRINT #2;A 3820 GOTO 3790 3830 READ #1;A$ 3840 PRINT #2;A$ 3850 GOTO 3790 3860 L3=L3+1 3870 NEXT X 3880 X=X-1 3890 IF END #2 THEN 3910 3900 PRINT #2,L3+(L4-L3); END 3910 PRINT USING 3920;1+(X-L1) 3920 IMAGE3D," RECORDS TRANSFERED" 3930 PRINT 3940 GOTO 150 3950 PRINT LIN(1)"FILE BEING WRITTEN IS TOO SMALL."; 3960 PRINT USING 3970;X-L1 3970 IMAGE" ONLY ",3D," RECORDS TRANSFERED" 3980 GOTO 150 3990 REM** X-PUNCH FILE SUBROUTINE ** 4000 GOSUB 4670 4010 GOSUB 5120 4020 IF END #1 THEN 4160 4030 PRINT LIN(1)"YOU HAVE 10 SECONDS TO MAKE THE TAPE PUNCH READY" 4040 ENTER 10,A,B 4050 FOR X=L1 TO L2 4060 READ #1,X 4070 GOTO TYP(-1) OF 4080,4110,4160,4140 4080 READ #1;A 4090 PRINT A;"" 4100 GOTO 4070 4110 READ #1;A$ 4120 PRINT A$;"" 4130 GOTO 4070 4140 NEXT X 4150 X=X-1 4160 PRINT 4170 PRINT USING 4180;1+(X-L1) 4180 IMAGE3D," RECORDS PUNCHED" 4190 GOTO 150 4200 REM** FIND THE LAST RECORD SUBROUTINE ** 4210 GOSUB 4670 4220 D=R=F=0 4230 A$="DATAEND OF RECORDEND OF FILE" 4240 B$="TO" 4250 IF END #1 THEN 4630 4260 FOR X=1 TO 10000 4270 READ #1,X 4280 GOTO TYP(-1) OF 4290,4290,4330,4370 4290 IF D THEN 4400 4300 GOSUB 4410 4310 D=X 4320 GOTO 4400 4330 IF F THEN 4400 4340 GOSUB 4410 4350 F=X 4360 GOTO 4400 4370 IF R THEN 4400 4380 GOSUB 4410 4390 R=X 4400 NEXT X 4410 IF R THEN 4510 4420 IF F THEN 4570 4430 IF D THEN 4450 4440 GOTO 4620 4450 IF D=X-1 THEN 4480 4460 PRINT USING "3DX,AAX,3DX,4A";D,B$,X-1,A$[1,4] 4470 GOTO 4490 4480 PRINT USING "7X3DX,4A";X-1,A$[1,4] 4490 D=0 4500 GOTO 4620 4510 IF R=X-1 THEN 4540 4520 PRINT USING "3DX,AAX,3DX,13A";R,B$,X-1,A$[5,17] 4530 GOTO 4550 4540 PRINT USING "7X3DX,13A";X-1,A$[5,17] 4550 R=0 4560 GOTO 4620 4570 IF F=X-1 THEN 4600 4580 PRINT USING "3DX,AAX,3DX,11A";F,B$,X-1,A$[18,28] 4590 GOTO 4610 4600 PRINT USING "7X3D,X11A";X-1,A$[18,28] 4610 F=0 4620 RETURN 4630 GOSUB 4410 4640 PRINT USING 4650;X-1 4650 IMAGE7X3DX,"PHYSICAL END OF FILE" 4660 GOTO 150 4670 REM** ASSIGN INPUT FILE SUBROUTINE ** 4680 PRINT LIN(1)"INPUT FILE NAME "; 4690 INPUT A$ 4700 IF LEN(A$)<7 THEN 4730 4710 PRINT LIN(1)"ONLY 6 CHARACTERS ALLOWED" 4720 GOTO 4680 4730 PRINT LIN(1)"FILE USE A MASK"; 4740 INPUT B$ 4750 IF B$="Y" THEN 4800 4760 ASSIGN A$,1,A 4770 IF A<1 THEN 4870 4780 PRINT LIN(1)"FILE '";A$;"' IS UNAVAILABLE. TRY AGAIN." 4790 GOTO 4680 4800 PRINT LIN(1)"WHAT IS THE MASK "; 4810 INPUT B$ 4820 IF LEN(B$)<7 THEN 4850 4830 PRINT LIN(1)"ONLY 6 CHARACTERS ALLOWED" 4840 GOTO 4800 4850 ASSIGN A$,1,A,B$ 4860 GOTO 4770 4870 RETURN 4880 REM** ASSIGN OUTPUT FILE SUBROUTINE ** 4890 PRINT LIN(1)"OUTPUT FILE NAME "; 4900 INPUT C$ 4910 IF LEN(C$)<7 THEN 4940 4920 PRINT LIN(1)"ONLY 6 CHARACTERS ALLOWED" 4930 GOTO 4890 4940 IF C$#A$ THEN 4970 4950 PRINT LIN(1)"INPUT AND OUTPUT CANNOT BE THE SAME FILE" 4960 GOTO 4890 4970 PRINT LIN(1)"FILE USE A MASK"; 4980 INPUT D$ 4990 IF D$[1,1]="Y" THEN 5040 5000 ASSIGN C$,2,A 5010 IF A<1 THEN 5110 5020 PRINT LIN(1)"OUTPUT FILE NOT AVAILABLE FOR WRITING" 5030 GOTO 4890 5040 PRINT LIN(1)"WHAT IS THE MASK "; 5050 INPUT D$ 5060 IF LEN(D$)<7 THEN 5090 5070 PRINT LIN(1)"ONLY 6 CHARACTERS ALLOWED" 5080 GOTO 5040 5090 ASSIGN C$,2,A,D$ 5100 GOTO 5010 5110 RETURN 5120 REM ** INPUT FILE UPPER AND LOWER LIMITS SUBROUTINE ** 5130 PRINT LIN(1)"INPUT FILE STARTING AND ENDING RECORD #"; 5140 INPUT L1,L2 5150 IF L1<1 THEN 5130 5160 IF L2 >= L1 THEN 5190 5170 PRINT LIN(1)"UPPER LIMIT LESS THAN LOWER LIMIT" 5180 GOTO 5130 5190 IF END #1 THEN 5220 5200 READ #1,L1 5210 GOTO TYP(-1) OF 5240,5240,5220,5240 5220 PRINT LIN(1)"LOWER LIMIT IS LARGER THAN THE FILE" 5230 GOTO 5130 5240 RETURN 5250 REM ** ASSIGN OUTPUT STARTING RECORD 5260 PRINT LIN(1)"OUTPUT FILE STARTING RECORD #"; 5270 L8=0 5280 INPUT L3 5290 IF L3<1 THEN 5260 5300 IF END #2 THEN 5330 5310 READ #2,L3 5320 GOTO 5350 5330 PRINT LIN(1)"STARTING RECORD LARGER THAN OUTPUT FILE" 5340 GOTO 5260 5350 RETURN 5360 REM ** UPDATE A RECORD SUBROUTINE 5370 Q=Y=1 5380 GOSUB 4880 5390 W=0 5400 IF Q=1 THEN 5500 5410 PRINT LIN(1)"STARTING AND ENDING RECORD #"; 5420 INPUT L1,L2 5430 IF Q=1 AND L1=0 THEN 150 5440 IF END #2 THEN 5470 5450 READ #2,L1 5460 GOTO 5490 5470 PRINT LIN(1)"STARTING RECORD BEYOND THE FILE LIMITS" 5480 GOTO 5410 5490 GOTO Q OF 5500,5770,5790 5500 PRINT LIN(1)"ENTER RECORD #, FIELD #, NUMBER (0) OR STRING (1)"; 5510 GOTO Y OF 5520,5540 5520 Y=2 5530 PRINT "(ENTER 0,0,0 TO END THE UPDATE ROUTINE)"; 5540 INPUT L1,F,T 5550 IF L1=0 THEN 150 5560 IF END #2 THEN 5590 5570 READ #2,L1 5580 GOTO 5630 5590 PRINT 5600 PRINT USING 5610;L1 5610 IMAGE"RECORD #",3D," IS BEYOND THE FILE LIMITS" 5620 GOTO 5500 5630 L2=L1 5640 GOSUB 5720 5650 GOSUB 5670 5660 GOTO 6010 5670 IF T=0 OR T=1 THEN 5710 5680 PRINT LIN(1)"ENTER 0 FOR A NUMBER OR 1 FOR A STRING"; 5690 INPUT T 5700 GOTO 5670 5710 RETURN 5720 IF F>0 THEN 5760 5730 PRINT LIN(1)"FIELD # MUST BE GREATER THAN 0, RE-ENTER"; 5740 INPUT F 5750 GOTO 5720 5760 RETURN 5770 PRINT LIN(1)"ADD FIELD #"; 5780 GOTO 5800 5790 PRINT LIN(1)"DELETE FIELD #"; 5800 INPUT F 5810 GOSUB 5720 5820 IF Q=1 AND F=0 THEN 5410 5830 IF Q#3 THEN 5860 5840 T=0 5850 GOTO 6010 5860 PRINT LIN(1)"NUMBER OR STRING (0 OR 1)"; 5870 INPUT T 5880 GOSUB 5670 5890 IF Q#2 THEN 6010 5900 PRINT LIN(1)"DO YOU WANT TO USE A CONSTANT VALUE"; 5910 INPUT A$ 5920 IF A$[1,1]="N" THEN 6010 5930 IF A$[1,1]#"Y" THEN 5900 5940 W=1 5950 GOTO T+1 OF 5960,5990 5960 PRINT LIN(1)"ENTER THE NUMERIC CONSTANT"; 5970 INPUT W1 5980 GOTO 6010 5990 PRINT LIN(1)"ENTER THE STRING CONSTANT"; 6000 INPUT I$ 6010 IF END #2 THEN 6040 6020 R1=1 6030 GOTO 6070 6040 PRINT LIN(1)"LAST RECORD IN FILE UPDATED" 6050 IF Q=1 THEN 5500 6060 GOTO 150 6070 FOR R=L1 TO L2 6080 F2=0 6090 Q1=0 6100 READ #2,R 6110 READ #3,1 6120 GOTO TYP(-2) OF 6130,6170,6210,6220 6130 READ #2;A 6140 PRINT #3;A 6150 F2=F2+1 6160 GOTO 6120 6170 READ #2;A$ 6180 PRINT #3;A$ 6190 F2=F2+1 6200 GOTO 6120 6210 R1=0 6220 F1=0 6230 IF Q#2 THEN 6260 6240 IF F2+1 >= F THEN 6360 6250 GOTO 6280 6260 IF F2 >= F THEN 6360 6270 IF F2=0 AND TYP(-2)=3 THEN 6040 6280 PRINT LIN(1)"NOT ENOUGH FIELDS FOR THE REQUESTED "; 6290 GOTO Q OF 6300,6320,6340 6300 PRINT "UPDATE" 6310 GOTO 5500 6320 PRINT "ADD" 6330 GOTO 6350 6340 PRINT "DELETE" 6350 GOTO 150 6360 L=0 6370 READ #2,R 6380 READ #3,1 6390 GOTO TYP(-3) OF 6400,6920,7030,7030 6400 F1=F1+1 6410 IF F1#F THEN 6430 6420 GOTO T+1 OF 6480,6700 6430 L=L+2 6440 IF L>256 THEN 7120 6450 READ #3;A 6460 PRINT #2;A 6470 GOTO 6390 6480 GOTO Q OF 6490,6520,6600 6490 PRINT 6500 PRINT USING 6580;R,F 6510 GOTO 6600 6520 IF W=0 THEN 6550 6530 A=W1 6540 GOTO 6670 6550 PRINT 6560 PRINT USING 6590;R,F 6570 GOTO 6660 6580 IMAGE#,"R #",DDD,", F #",DD,", NEW NUMBER VALUE =" 6590 IMAGE#,"R #",DDD,", F #",DD,",ADD NUMBER VALUE =" 6600 GOTO TYP(-3) OF 6610,6640 6610 READ #3;A 6620 IF Q=3 THEN 6390 6630 GOTO 6660 6640 READ #3;A$ 6650 IF Q=3 THEN 6390 6660 INPUT A 6670 L=L+2 6680 IF L>256 THEN 7120 6690 GOTO 6460 6700 GOTO Q OF 6780,6710 6710 IF W=0 THEN 6740 6720 A$=I$ 6730 GOTO 6860 6740 PRINT 6750 PRINT USING 6760;R,F 6760 IMAGE#,"R #",DDD,", F #",DD,", ADD STRING VALUE =" 6770 GOTO 6850 6780 PRINT 6790 PRINT USING 6800;R,F 6800 IMAGE#,"R #",DDD,", F #",DD,", NEW STRING VALUE =" 6810 GOTO TYP(-3) OF 6820,6840 6820 READ #3;A 6830 GOTO 6850 6840 READ #3;A$ 6850 INPUT A$ 6860 IF LEN(A$)/2#INT(LEN(A$)/2) THEN 6890 6870 L=L+(LEN(A$)/2) 6880 GOTO 6900 6890 L=L+((LEN(A$)+1)/2) 6900 IF L>256 THEN 7120 6910 GOTO 7010 6920 F1=F1+1 6930 IF F1#F THEN 6950 6940 GOTO T+1 OF 6480,6700 6950 READ #3;A$ 6960 IF LEN(A$)/2#INT(LEN(A$)/2) THEN 6990 6970 L=L+(LEN(A$)/2) 6980 GOTO 7000 6990 L=L+((LEN(A$)+1)/2) 7000 IF L>256 THEN 7120 7010 PRINT #2;A$ 7020 GOTO 6390 7030 IF Q1=1 THEN 7060 7040 Q1=1 7050 IF Q=2 AND F1+1=F THEN 6420 7060 GOTO R1+1 OF 7070,7080 7070 R=L2+1 7080 NEXT R 7090 IF Q=1 AND R1=0 THEN 6040 7100 IF Q=1 THEN 5500 7110 GOTO R1+1 OF 6040,150 7120 PRINT LIN(1)"TOO MANY CHARACTERS FOR THIS RECORD" 7130 GOTO 150 7140 Q=2 7150 GOTO 5380 7160 Q=3 7170 GOTO 5380 7180 REM ** RANDOM TO SERIAL CONVERSION SUBROUTINE ** 7190 GOSUB 4670 7200 GOSUB 4880 7210 GOSUB 5120 7220 GOSUB 5250 7230 READ #2,L3 7240 IF END #2 THEN 7260 7250 GOTO 7290 7260 PRINT USING 7270;1+(X-L1) 7270 IMAGE"OUTPUT FILE TOO SMALL, ONLY ",DDD," RECORDS CONVERTED" 7280 GOTO 150 7290 FOR X=L1 TO L2 7300 READ #1,X 7310 GOTO TYP(-1) OF 7320,7350,7400,7380 7320 READ #1;A 7330 PRINT #2;A, END 7340 GOTO 7310 7350 READ #1;A$ 7360 PRINT #2;A$, END 7370 GOTO 7310 7380 NEXT X 7390 X=X-1 7400 PRINT 7410 PRINT USING 7420;1+(X-L1) 7420 IMAGE3D," RECORDS CONVERTED FROM RANDOM TO SERIAL FORMAT" 7430 GOTO 150 7440 REM ** SERIAL TO RANDOM CONVERSION SUB ROUTINE ** 7450 GOSUB 4670 7460 GOSUB 4880 7470 PRINT LIN(1)"INPUT FILE STARTING RECORD #"; 7480 INPUT L1 7490 IF END #1 THEN 7520 7500 READ #1,L1 7510 GOTO 7540 7520 PRINT LIN(1)"STARTING RECORD BEYOND FILE LIMITS" 7530 GOTO 7470 7540 GOSUB 5250 7550 IF END #2 THEN 7570 7560 GOTO 7610 7570 PRINT 7580 PRINT USING 7590;X-L3 7590 IMAGE"OUTPUT FILE TOO SMALL, ONLY ",DDD," RECORDS CREATED" 7600 GOTO 150 7610 PRINT LIN(1)"HOW MANY FIELDS IN ONE LOGICAL RECORD "; 7620 INPUT F 7630 FOR X=L3 TO 1.E+07 7640 L=F1=0 7650 READ #2,X 7660 GOTO TYP(-1) OF 7670,7740,7870,7841 7670 F1=F1+1 7680 L=L+2 7690 IF L>256 THEN 7930 7700 READ #1;A 7710 PRINT #2;A 7720 IF F1=F THEN 7850 7730 GOTO 7660 7740 READ #1;A$ 7750 F1=F1+1 7760 IF LEN(A$)/2=INT(LEN(A$)/2) THEN 7800 7770 L=L+((LEN(A$)+1)/2) 7780 IF L>256 THEN 7930 7790 GOTO 7820 7800 L=L+(LEN(A$)/2) 7810 GOTO 7780 7820 PRINT #2;A$ 7830 IF F1=F THEN 7850 7840 GOTO 7660 7841 L1=L1+1 7842 READ #1,L1 7843 GOTO 7660 7850 NEXT X 7860 X=X-1 7870 IF END #2 THEN 7890 7880 PRINT #2; END 7890 PRINT 7900 PRINT USING 7910;1+(X-L3) 7910 IMAGEDDD," RECORDS CREATED" 7920 GOTO 150 7930 PRINT LIN(1)"TOO MANY CHARACTERS FOR ONE RECORD" 7940 GOTO 7890 7950 END