1 COM F$[7],R1,R2,E,T,S,O,P,G$[7],N,A[10],B[10] 10 FILES *,*,* 20 DIM A$[72],B$[72] 30 PRINT "ARE YOU AN EXPERT WITH THIS PROGRAM"; 40 INPUT A$ 50 IF A$[1,1]="Y" THEN 90 60 IF A$[1,1]="N" THEN 110 70 PRINT "TYPE YES OR NO." 80 GOTO 30 90 Q=1 100 GOTO 120 110 Q=2 120 PRINT 130 GOTO Q OF 140,160 140 PRINT "FILENAME"; 150 GOTO 170 160 PRINT "WHAT FILE DO YOU WANT TO SORT"; 170 INPUT A$ 180 IF LEN(A$)>7 THEN 220 190 F$=A$ 200 ASSIGN F$,1,A 210 IF A#3 THEN 240 220 PRINT "THIS FILE IS EITHER MISSING OR UNAVAILABLE TO THIS PROGRAM." 230 GOTO 130 240 PRINT 250 GOTO Q OF 260,280 260 PRINT "ALL RECORDS"; 270 GOTO 290 280 PRINT "DO YOU WANT TO SORT ON ALL RECORDS"; 290 INPUT A$ 300 IF A$[1,1]="Y" THEN 340 310 IF A$[1,1]="N" THEN 390 320 PRINT "TYPE YES OR NO." 330 GOTO 250 340 F1=1 350 GOSUB 4000 360 R1=1 370 R2=I1 380 GOTO 590 390 GOTO Q OF 400,420 400 PRINT " START"; 410 GOTO 430 420 PRINT " ON WHAT RECORD DO YOU WANT TO START THE SORT"; 430 INPUT R 440 GOSUB 5000 450 IF F=1 THEN 390 460 R1=R 470 GOTO Q OF 480,500 480 PRINT " END"; 490 GOTO 510 500 PRINT " ON WHAT RECORD DO YOU WANT TO END THE SORT"; 510 INPUT R 520 GOSUB 5000 530 IF F=1 THEN 470 540 IF R >= R1 THEN 580 550 PRINT " YOUR SORT MUST END ON A RECORD AT LEAST AS LARGE" 560 PRINT " AS THE STARTING RECORD." 570 GOTO 470 580 R2=R 590 PRINT 600 GOTO Q OF 610,630 610 PRINT "ELEMENT"; 620 GOTO 640 630 PRINT "ON WHICH ELEMENT OF EACH RECORD DO YOU WANT TO SORT"; 640 INPUT E 650 IF E>0 AND E=INT(E) THEN 680 660 PRINT "TYPE A POSITIVE INTEGER." 670 GOTO 600 680 PRINT 690 GOTO Q OF 700,720 700 PRINT "N OR S"; 710 GOTO 730 720 PRINT "IS THIS ELEMENT A NUMBER OR A STRING IN EACH RECORD OF THE FILE"; 730 INPUT A$ 740 IF A$[1,1]="N" THEN 780 750 IF A$[1,1]="S" THEN 800 760 PRINT "TYPE NUMBER OR STRING." 770 GOTO 690 780 T=1 790 GOTO 810 800 T=2 810 PRINT 820 GOTO Q OF 830,850 830 PRINT "A OR D"; 840 GOTO 860 850 PRINT "DO YOU WANT THE SORT IN ASCENDING OR DESCENDING ORDER"; 860 INPUT A$ 870 IF A$[1,1]="A" THEN 910 880 IF A$[1,1]="D" THEN 930 890 PRINT "TYPE ASCENDING OR DESCENDING." 900 GOTO 820 910 S=1 920 GOTO 940 930 S=2 940 PRINT 950 GOTO Q OF 960,980 960 PRINT "1-5"; 970 GOTO 1070 980 PRINT "SPECIFY YOUR OUTPUT:" 990 PRINT 1000 PRINT " 1 = SORTED ITEM" 1010 PRINT " 2 = RECORD NUMBER" 1020 PRINT " 3 = SORTED ITEM AND RECORD NUMBER" 1030 PRINT " 4 = FULL RECORD CONTENTS" 1040 PRINT " 5 = FORMATTED OUTPUT" 1050 PRINT 1060 PRINT "OUTPUT DESIRED (1-5)"; 1070 INPUT O 1080 IF O>0 AND O<6 AND O=INT(O) THEN 1110 1090 PRINT "TYPE 1, 2, 3, 4, OR 5." 1100 GOTO 1060 1110 IF O#5 THEN 1390 1120 P=1 1130 N=0 1140 N1=-1 1150 GOTO Q OF 1200,1160 1160 PRINT "TYPE THE LIST OF ITEMS YOU WANT PRINTED," 1170 PRINT "EACH FOLLOWED BY THE COLUMN YOU WANT IT TO BEGIN IN." 1180 PRINT "TO END THE LIST, TYPE '0,0'." 1190 PRINT 1200 GOTO Q OF 1210,1230 1210 PRINT "I,C"; 1220 GOTO 1240 1230 PRINT "ITEM NUMBER, COLUMN"; 1240 INPUT I,C 1250 IF I=0 AND C=0 THEN 1760 1260 IF I>0 AND I=INT(I) AND C>0 AND C=INT(C) THEN 1290 1270 PRINT "THE ITEM NUMBER AND COLUMN MUST BOTH BE POSITIVE INTEGERS." 1280 GOTO 1200 1290 IF C>N1+1 THEN 1320 1300 PRINT "THIS COLUMN HEADING MUST BE AT LEAST"N1+2 1310 GOTO 1200 1320 IF C <= 72 THEN 1350 1330 PRINT "MAXIMUM COLUMN HEADING IS 72." 1340 GOTO 1200 1350 N=N+1 1360 A[N]=I 1370 B[N]=N1=C 1380 IF N#10 THEN 1200 1390 PRINT 1400 GOTO Q OF 1410,1430 1410 PRINT "T OR F"; 1420 GOTO 1440 1430 PRINT "DO YOU WANT THE SORT PRINTED ON YOUR TERMINAL, OR ON A FILE"; 1440 INPUT A$ 1450 IF A$[1,1]="T" THEN 1490 1460 IF A$[1,1]="F" THEN 1510 1470 PRINT "TYPE TERMINAL OR FILE." 1480 GOTO 1400 1490 P=1 1500 GOTO 1760 1510 P=2 1520 PRINT 1530 PRINT "FILENAME"; 1540 INPUT A$ 1550 IF LEN(A$)>7 THEN 1630 1560 G$=A$ 1570 ASSIGN G$,2,A 1580 IF G$#F$ THEN 1610 1590 PRINT "THE OUTPUT FILE MUST BE DIFFERENT FROM THE FILE TO BE SORTED." 1600 GOTO 1530 1610 ASSIGN G$,2,A 1620 IF A=0 THEN 1650 1630 PRINT "THIS FILE IS EITHER MISSING OR UNAVAILABLE FOR YOUR EXCLUSIVE USE." 1640 GOTO 1530 1650 F1=2 1660 GOSUB 4000 1670 PRINT #2,1 1680 GOTO 0 OF 1690,1690,1710,1730 1690 IF I1*128>R2-R1+1 THEN 1760 1700 GOTO 1740 1710 IF I1*64>R2-R1+1 THEN 1760 1720 GOTO 1740 1730 IF I1>R2-R1+1 THEN 1760 1740 PRINT "FILE "G$" IS TOO SMALL TO HOLD THE ENTIRE OUTPUT." 1750 GOTO 1530 1760 CHAIN "IRV1",30 4000 IF END #F1 THEN 4070 4010 I1=1 4020 I2=32768. 4030 I3=INT((I1+I2)/2) 4040 READ #F1,I3 4050 I1=I3 4060 GOTO 4080 4070 I2=I3 4080 IF I2-I1>1 THEN 4030 4090 RETURN 5000 IF R>0 AND R=INT(R) THEN 5040 5010 PRINT " TYPE A POSITIVE INTEGER." 5020 F=1 5030 RETURN 5040 IF END #1 THEN 5080 5050 READ #1,R 5060 F=0 5070 RETURN 5080 PRINT " FILE "F$" DOES NOT HAVE THAT MANY RECORDS." 5090 F=1 5100 RETURN 9999 END