10 ' AIRROUTE.BAS NAVPROGseven Route Program 22-Jan-82 Rev 2/10/83 20 ' 30 ' (c) Copyright 1982 Alan Bose 40 ' President, Taildragger Flyers 50 ' Ross Field, Benton Harbor, MI 60 ' 70 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr. 80 ' 90 CLEAR:WIDTH 255:ON ERROR GOTO 1080:DEFINT I-J 100 BL$=CHR$(7):E$=CHR$(27):ER$=E$+"E":PG$=E$+"p":QG$=E$+"q":G$=E$+"F" 110 NG$=E$+"G":Y$=E$+"Y":L$=E$+"l":J$=E$+"j":K$=E$+"k":J1$=E$+"J" 120 DEF FNC$(C1,C2)=Y$+CHR$(C1+31)+CHR$(C2+31) 130 PRINT FNC$(25,1)ER$E$"H"ER$"Standby one";:MX=32767:MN=0 140 ' 150 OPEN "R",1,"B:AIRPORTS.RND",255:GOSUB 1110:PRINT"..." 160 OPEN "R",2,"B:AIRINDEX.RND",255:MD=(MD*5)-1:DIM ID$(MD):FOR J=0 TO MD 170 REC=(J\51)+1:SS=J MOD 51:IF LOC(2)<>REC THEN GET#2,REC 180 FIELD #2,SS*5 AS DU$,5 AS ID$:ID$(J)=ID$:NEXT J:CLOSE#2:IM=MD 190 ' 200 PRINT ER$FNC$(1,25)"NAVPROGseven Route Preparation" 210 PRINT FNC$(13,19)"Enter number of checkpoints (10 max.) "J$; 220 PRINT STRING$(2,95)K$;:LINE INPUT N$:N=VAL(N$) 230 IF N$="" THEN CLOSE:RUN"MENU" 240 IF N<2 OR N>10 THEN PRINT BL$"2 to 10 checkpoints only":GOTO 210 250 'data box 260 PRINT FNC$(2,1)J1$:PRINT G$FNC$(3,6)"f"; 270 FOR J=7 TO 74:PRINT "a";:NEXT J:PRINT "c":PRINT FNC$(4+N,6)"e"; 280 FOR J=7 TO 74:PRINT "a";:NEXT J:PRINT "d" 290 PRINT FNC$(3,12)"s"FNC$(3,15)"s"FNC$(3,23)"s"FNC$(3,44)"s"; 300 PRINT FNC$(3,52)"s"FNC$(3,61)"s"FNC$(3,69)"s" 310 PRINT FNC$(4+N,12)"u"FNC$(4+N,15)"u"FNC$(4+N,23)"u"; 320 PRINT FNC$(4+N,44)"u"FNC$(4+N,52)"u"FNC$(4+N,61)"u"FNC$(4+N,69)"u" 330 FOR I=1 TO N:PRINT FNC$(3+I,6)"`"FNC$(3+I,12)"`"FNC$(3+I,15)"`"; 340 PRINT FNC$(3+I,23)"`"FNC$(3+I,44)"`"FNC$(3+I,52)"`"; 350 PRINT FNC$(3+I,61)"`"FNC$(3+I,69)"`"FNC$(3+I,75)"`";:NEXT I 360 PRINT NG$:PRINT FNC$(2,7)"Ident Fac Freq"FNC$(2,32)"Name" 370 PRINT FNC$(2,47)"Lat"FNC$(2,55)"Long"FNC$(2,64)"Var"FNC$(2,70)"Elev" 380 ' 390 FOR I=1 TO N 400 PRINT FNC$(N+6,1)"Enter checkpoint"I" "J$; 410 PRINT STRING$(5,95)K$;:LINE INPUT X$:IF X$="" THEN 200 420 IF LEN(X$)>5 THEN PRINT BL$"5 characters maximum":GOTO 400 430 IF LEN(X$)<2 THEN PRINT BL$"2 characters minimium":GOTO 400 440 GOSUB 1040:P$=X$+SPACE$(5-LEN(X$)) 450 'search index for match & get 460 RO=I+4 470 FD=0 480 FOR J=0 TO IM:IF ID$(J)<>P$ THEN 530 490 IF FD=1 THEN RO=N+8:GET #1,REC:PRINT FNC$(N+8,1)J1$:GOSUB 610:RO=N+9:FD=2 500 PI=J 510 IF FD>1 THEN REC=(J\5)+1:SS=J MOD 5:GET#1,REC:GOSUB 610:FD=FD+1:RO=RO+1 520 IF FD=0 THEN FD=1:REC=(J\5)+1:SS=J MOD 5:GET#1,REC 530 NEXT J 540 IF FD<>0 THEN 560 550 PRINT BL$"Can't find "P$:PRINT"Return to menu and input data?":GOTO 400 560 IF FD=1 THEN 600 570 PRINT FNC$(RO+1,1)"Enter number of your choice <"PI"> "J$; 580 PRINT STRING$(3,95)K$;:LINE INPUT X$:IF X$="" THEN 600 590 PI=VAL(X$):REC=(PI\5)+1:SS=PI MOD 5:GET#1,REC 600 PRINT FNC$(N+6,1)J1$:RO=I+3:FD=0:GOSUB 610:NEXT I:GOTO 800 610 'decode & display 620 REF(I)=PI 630 FIELD #1,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$ 640 F5=CVS(FR$):D6=CVI(D1$):M6=CVS(M1$):D5=CVI(D$):M5=CVS(M$):V5=CVS(V$) 650 E5=CVI(EL$):I$(I)=ID$:FC$(I)=FAC$:FR(I)=F5:P$(I)=NM$ 660 M1=M6/60:P2(I)=D6+M1:M=M5/60:P1(I)=D5+M:V(I)=V5:V$(I)=V1$:EL(I)=E5 670 PRINT FNC$(RO,1);:IF FD=0 THEN PRINT I; ELSE PRINT PI; 680 PRINT FNC$(RO,7)ID$FNC$(RO,13)FAC$;FNC$(RO,16); 690 IF F5=0 THEN PRINT SPC(7);:GOTO 740 700 IF F5>136 THEN PRINT USING"####";F5;:GOTO 740 710 IF F5*10\1=F5*10/1 THEN PRINT USING"####.#";F5;:GOTO 740 720 IF F5*100\1=F5*100/1 THEN PRINT USING"####.##";F5;:GOTO 740 730 PRINT USING"###.###";F5; 740 PRINT FNC$(RO,24);NM$;FNC$(RO,45);USING"##";D6; 750 PRINT FNC$(RO,48);USING"##.#";M6; 760 PRINT FNC$(RO,53);USING"###";D5; 770 PRINT FNC$(RO,57);USING"##.#";ABS(M5); 780 PRINT FNC$(RO,62);USING"###.#";V5; 790 PRINT FNC$(RO,68);V1$;FNC$(RO,70);USING"#####";E5:RETURN 800 ' 810 PRINT FNC$(N+6,1)J1$"Route of flight correct? (Y or N) "; 820 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y" 830 GOSUB 1040:IF X$<>"N" AND X$<>"Y" THEN PRINT BL$:GOTO 810 840 IF X$="N" THEN 210 ELSE CLOSE 850 PRINT FNC$(N+6,1)J1$; 860 PRINT"Save route of flight for future use? (Y or N) "; 870 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y" 880 GOSUB 1040:IF X$<>"N" AND X$<>"Y" THEN PRINT BL$:GOTO 850 890 IF X$<>"N" THEN GOSUB 930 900 F$="B:FLIGHT.SEQ":GOSUB 1030 910 PRINT FNC$(N+6,1)J1$"Standby one...":RUN"NAVPROG7" 920 ' 930 OPEN"I",1,"B:ROUTINGS.DAT" 940 PRINT FNC$(N+6,1)J1$"Standby one..." 950 RF$=LEFT$(I$(1),3)+"."+LEFT$(I$(N),3):INPUT#1,RN:DIM RT$(RN+1) 960 FOR J=1 TO RN:LINE INPUT #1,RT$(J):IF RT$(J)=RF$ THEN DR=1 970 NEXT J:CLOSE 980 RT$(RN+1)=RF$:IF ASC(RF$)<65 OR ASC(RF$)>90 THEN RF$="X"+RF$ 990 F$="B:"+RF$:GOSUB 1030:IF DR=1 THEN RETURN 1000 OPEN"O",1,"B:ROUTINGS.DAT":PRINT#1,RN+1:FOR J=1 TO RN+1:PRINT#1,RT$(J) 1010 NEXT J:CLOSE:RETURN 1020 ' 1030 OPEN"O",1,F$:FOR J=1 TO N:PRINT#1,I$(J):PRINT#1,REF(J):NEXT J:CLOSE:RETURN 1040 'map lc 1050 FOR L=1 TO LEN(X$):U$=MID$(X$,L,1) 1060 IF ASC(U$)>96 AND ASC(U$)<123 THEN MID$(X$,L,1)=CHR$(ASC(U$)-32) 1070 NEXT L:RETURN 1080 'error trap 1090 IF ERR=53 AND ERL=930 THEN RESUME 980 1100 ON ERROR GOTO 0 1110 MD=(MX+MN)\2:GET #1,MD:IF EOF(1) THEN MX=MD ELSE MN=MD 1120 IF MX>MN+1 THEN 1110 ELSE MD=MN:RETURN