home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 5.3 KB | 151 lines |
- 10 ' AIRALPHA.BAS NAVPROGseven Aprt/Fac Sort 22-Jan-82 Rev 01/22/86
- 20 ' Version F.03.02 for the IBM PC
- 30 ' (c) Copyright 1982 Alan Bose
- 40 ' 1224 Allison Lane
- 50 ' Schaumburg, IL 60194
- 60 '
- 70 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr.
- 75 ' HP-150 modifications (c) 1984 by Alan Bose
- 76 ' PC-DOS modifications (c) 1985 by Bruce Carson
- 80 '
- 90 CLEAR:DEFINT I-J:ON ERROR GOTO 1430
- 92 PROGDISK$="A:":DATADISK$="B:"
- 94 OPEN "I",1,"NAVDISCS.DAT"
- 96 INPUT #1,PROGDISK$,DATADISK$:CLOSE
- 100 BL$=CHR$(7):E$=CHR$(27)
- 110 CL$=CHR$(13)+CHR$(10)
- 140 HD$="A I R P O R T / F A C I L I T Y S O R T I N G"
- 145 CLS:PRINT
- 150 PRINT TAB(44-LEN(HD$)/2)HD$;CL$
- 160 PRINT:PRINT TAB(15);"1 - Identifier"
- 170 PRINT:PRINT TAB(15);"2 - State/Identifier"
- 180 PRINT:PRINT TAB(15);"3 - State/City"
- 190 PRINT:PRINT TAB(15);"4 - State/Facility/Ident"
- 200 PRINT:PRINT TAB(15);"5 - As filed (no sort)"
- 210 PRINT:PRINT:PRINT TAB(20);"Select sort criteria <MENU> ";
- 220 C$=INPUT$(1):C=VAL(C$)
- 230 IF C$=CHR$(13) THEN CLS:RUN PROGDISK$+"NAVMENU"
- 240 IF C<1 OR C>5 THEN PRINT CHR$(7);:GOTO 220
- 245 WIDTH 80
- 250 CLS:PRINT "Standby one";:MX=32767:MN=0
- 260 OPEN "R",2,DATADISK$+"AIRPORTS.RND",255:GOSUB 1410:MD=MD*5:PRINT"..."
- 270 DIM ID$(MD+1),ST$(MD+1),REF(MD+1)
- 280 'build indices for ident, city, state, facilities and location on file
- 285 WIDTH 80
- 290 FOR J=1 TO MD:REC=((J-1)\5)+1:SS=(J-1) MOD 5
- 300 IF LOC(2)<>REC THEN GET #2,REC
- 310 FIELD #2,SS*50 AS DU$,5 AS ID$,2 AS FAC$,4 AS DU$,20 AS A$,2 AS D1$,4 AS M1$,2 AS D$,4 AS M$
- 320 ID$(J)=ID$:IF ASC(ID$)=0 THEN ID$(J)=SPACE$(5)
- 330 IF ID$(J)="" THEN ID$(J)=SPACE$(5)
- 340 REF(J)=J-1:I2=INSTR(A$,", ")+2:IF I2=2 THEN I2=INSTR(A$,",")+1
- 350 X$=MID$(A$,I2,2)
- 360 '
- 370 D6=CVI(D1$):M6=CVS(M1$):D5=CVI(D$):M5=CVS(M$):M1=M6/60:P2=D6+M1:M=M5/60
- 380 P1=D5+M:IF J=1 THEN N=P2:NI$=ID$:N$=A$:SO=P2:SI$=ID$:S$=A$:E=P1:EI$=ID$:EJ$=A$:W=P1:WI$=ID$:W$=A$
- 390 IF P2>N THEN N=P2:NI$=ID$:N$=A$
- 400 IF P2<SO AND P2<>0 THEN SO=P2:SI$=ID$:S$=A$
- 410 IF P1<E AND P2<>0 THEN E=P1:EI$=ID$:EJ$=A$
- 420 IF P1>W THEN W=P1:WI$=ID$:W$=A$
- 430 '
- 440 ON C GOTO 480,460,470,450,500
- 450 X$=X$+LEFT$(FAC$,2):GOTO 490
- 460 GOTO 490
- 470 X$=X$+LEFT$(A$,I2):GOTO 490
- 480 X$=LEFT$(ID$,1)
- 490 GOSUB 1030:ST$(J)=X$
- 500 NEXT J
- 510 IF C=5 THEN 610
- 520 CLS:PRINT "sorting..."
- 530 M=MD
- 540 M=INT(M/2):IF M=0 THEN 610
- 550 J1=1:K1=MD-M
- 560 I1=J1
- 570 L1=I1+M:IF ST$(I1)+ID$(I1)<ST$(L1)+ID$(L1) THEN 600
- 580 SWAP ST$(I1),ST$(L1):SWAP ID$(I1),ID$(L1):SWAP REF(I1),REF(L1)
- 590 I1=I1-M:IF I1>=1 THEN 570
- 600 J1=J1+1:IF J1>K1 THEN 540 ELSE 560
- 610 ' Printout Airport/Facility Listing
- 620 CLS: PRINT"Output: Enter <P> for printer, <S> for screen ";
- 630 X$=INPUT$(1):GOSUB 1030:PRINT:IF X$="P" THEN PRINT :GOSUB 1070:GOTO 1080
- 635 IF X$=CHR$(13) THEN CLS:RUN PROGDISK$+"NAVMENU"
- 640 IF X$="S" THEN LS=0 ELSE PRINT BL$:GOTO 620
- 650 CLS
- 670 PRINT "Sort criteria: ";
- 680 ON C GOTO 690,700,710,720,730
- 690 PRINT "Identifier";:GOTO 740
- 700 PRINT "State/Identifier";:GOTO 740
- 710 PRINT "State/City";:GOTO 740
- 720 PRINT "State/Facilities/Identifier";:GOTO 740
- 730 PRINT "As filed (no sort)";
- 740 PRINT TAB(56)TM$" "D5$:PRINT:FOR J=1 TO MD
- 750 IF ID$(J)=SPACE$(5) THEN S=S+1:GOTO 970
- 760 REC=(REF(J)\5)+1:SS=REF(J) MOD 5:IF LREC<>REC THEN LREC=REC:GET#2,REC
- 770 FIELD #2,SS*50 AS DU$,5 AS ID$,2 AS FAC$,4 AS FR$,20 AS NM$,2 AS D1$,4 AS M1$,2 AS D$,4 AS M$,4 AS V$,1 AS V1$,2 AS EL$
- 780 IF C=5 AND J=1 THEN 810
- 790 IF C=5 OR LEFT$(ST$(J-1),2)=LEFT$(ST$(J),2) THEN 840
- 800 PRINT CL$CL$TAB(30)"****** "LEFT$(ST$(J),2);" ******"CL$
- 810 IF C=5 THEN PRINT "Ref";
- 820 PRINT TAB(5)"Ident Fac Freq"TAB(32)"Name"TAB(47)"Lat";
- 830 PRINT TAB(56)"Long"TAB(65)"Var"TAB(71)"Elev"CL$
- 840 IF C=5 THEN PRINT USING"###";J-1; ELSE PRINT USING"###";J-S;
- 850 PRINT TAB(5);ID$;TAB(11);FAC$;TAB(15);
- 860 F5=CVS(FR$):IF F5=0 THEN 910
- 870 IF F5>136 THEN PRINT USING"####";F5;:GOTO 910
- 880 IF F5*10\1=F5*10/1 THEN PRINT USING"####.#";F5;:GOTO 910
- 890 IF F5*100\1=F5*100/1 THEN PRINT USING"####.##";F5;:GOTO 910
- 900 PRINT USING"###.###";F5;
- 910 PRINT TAB(23);NM$;:D6=CVI(D1$):PRINT TAB(45);USING"##";D6;
- 920 M6=CVS(M1$):PRINT TAB(48);USING"##.#";M6;
- 930 D5=CVI(D$):PRINT TAB(54);USING"###";D5;
- 940 M5=CVS(M$):PRINT TAB(58);USING"##.#";M5;
- 950 V5=CVS(V$):PRINT TAB(63);USING"###.#";V5;:PRINT V1$;
- 960 E5=CVI(EL$):PRINT TAB(69);USING"#####";E5
- 970 NEXT J
- 980 PRINT:PRINT:PRINT "Farthest North: "NI$" "N$
- 990 PRINT "Farthest South: "SI$" "S$:PRINT "Farthest East: "EI$" "EJ$
- 1000 PRINT "Farthest West: "WI$" "W$
- 1010 CLOSE:PRINT:PRINT "Press <RETURN> to continue...";
- 1020 LINE INPUT A$:CLOSE:CLS:RUN PROGDISK$+"NAVMENU"
- 1030 'map lc
- 1040 FOR L=1 TO LEN(X$):U$=MID$(X$,L,1)
- 1050 IF ASC(U$)>96 AND ASC(U$)<123 THEN MID$(X$,L,1)=CHR$(ASC(U$)-32)
- 1060 NEXT L:RETURN
- 1070 PRINT"Please align paper, then press <RETURN>";:LINE INPUT X$:RETURN
- 1080 LPRINT "Sort criteria: ";
- 1090 ON C GOTO 1100,1110,1120,1130,1140
- 1100 LPRINT "Identifier";:GOTO 1150
- 1110 LPRINT "State/Identifier";:GOTO 1150
- 1120 LPRINT "State/City";:GOTO 1150
- 1130 LPRINT "State/Facilities/Identifier";:GOTO 1150
- 1140 LPRINT "As filed (no sort)";
- 1150 LPRINT TAB(56)TM$" "D5$;:LPRINT:FOR J=1 TO MD
- 1160 IF ID$(J)=SPACE$(5) THEN S=S+1:GOTO 1370
- 1170 REC=(REF(J)\5)+1:SS=REF(J) MOD 5:IF LREC<>REC THEN LREC=REC:GET#2,REC
- 1180 FIELD #2,SS*50 AS DU$,5 AS ID$,2 AS FAC$,4 AS FR$,20 AS NM$,2 AS D1$,4 AS M1$,2 AS D$,4 AS M$,4 AS V$,1 AS V1$,2 AS EL$
- 1190 IF C=5 AND J=1 THEN 1220
- 1200 IF C=5 OR LEFT$(ST$(J-1),2)=LEFT$(ST$(J),2) THEN 1250
- 1210 LPRINT CL$CL$TAB(30)"****** "LEFT$(ST$(J),2);" ******"CL$
- 1220 IF C=5 THEN LPRINT "Ref";
- 1230 LPRINT TAB(5)"Ident Fac Freq"TAB(32)"Name"TAB(47)"Lat";
- 1240 LPRINT TAB(56)"Long"TAB(65)"Var"TAB(71)"Elev"CL$
- 1250 IF C=5 THEN LPRINT USING"###";J-1; ELSE LPRINT USING"###";J-S;
- 1260 LPRINT TAB(5)ID$TAB(11)FAC$TAB(15);:F5=CVS(FR$):IF F5=0 THEN 1310
- 1270 IF F5>136 THEN LPRINT USING"####";F5;:GOTO 1310
- 1280 IF F5*10\1=F5*10/1 THEN LPRINT USING"####.#";F5;:GOTO 1310
- 1290 IF F5*100\1=F5*100/1 THEN LPRINT USING"####.##";F5;:GOTO 1310
- 1300 LPRINT USING"###.###";F5;
- 1310 LPRINT TAB(23);NM$;:D6=CVI(D1$):LPRINT TAB(45);USING"##";D6;
- 1320 M6=CVS(M1$):LPRINT TAB(48);USING"##.#";M6;
- 1330 D5=CVI(D$):LPRINT TAB(54);USING"###";D5;
- 1340 M5=CVS(M$):LPRINT TAB(58);USING"##.#";M5;
- 1350 V5=CVS(V$):LPRINT TAB(63);USING"###.#";V5;:LPRINT V1$;
- 1360 E5=CVI(EL$):LPRINT TAB(69);USING"#####";E5
- 1370 NEXT J
- 1380 LPRINT:LPRINT:LPRINT "Farthest North: "NI$" "N$
- 1390 LPRINT "Farthest South: "SI$" "S$:LPRINT"Farthest East: "EI$" "EJ$
- 1400 LPRINT "Farthest West: "WI$" "W$:LPRINT CHR$(12):GOTO 1010
- 1410 MD=(MX+MN)\2:GET #2,MD:IF EOF(2) THEN MX=MD ELSE MN=MD
- 1420 IF MX>MN+1 THEN 1410 ELSE MD=MN:RETURN
- 1430 IF ERR=53 AND ERL=94 THEN CLOSE:RESUME 100
- 1440 ON ERROR GOTO 0
-