home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 5.0 KB | 140 lines |
- 10 ' AIRROUTE.BAS NAVPROGseven Route Program 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:WIDTH 80:ON ERROR GOTO 1080:DEFINT I-J
- 92 PROGDISK$="A:":DATADISK$="B:"
- 94 OPEN "I",1,"NAVDISCS.DAT"
- 96 INPUT #1,PROGDISK$,DATADISK$:CLOSE
- 98 GOSUB 8000
- 100 BL$=CHR$(7):E$=CHR$(27)
- 110 DIM I$(20),REF(20),FC$(20),FR(20),P$(20),P1(20),P2(20),V(20),V$(20),EL(20)
- 130 CLS:PRINT "Standby one";:MX=32767:MN=0
- 140 '
- 150 OPEN "R",1,DATADISK$+"AIRPORTS.RND",255:GOSUB 1110:PRINT"..."
- 160 OPEN "R",2,DATADISK$+"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 CLS:PRINT TAB(25)"NAVPROGseven Route Preparation"
- 205 N = 20
- 210 'LOCATE 13,16:PRINT "Enter number of checkpoints (20 max.) <MENU> ";
- 220 'PRINT STRING$(2,32);:LOCATE ,POS(0)-2:LINE INPUT N$:N=VAL(N$)
- 230 'IF N$="" THEN CLOSE:RUN"MENU"
- 240 'IF N<2 OR N>20 THEN PRINT:PRINT BL$"Sorry, 2 to 20 checkpoints only.":GOTO 210
- 250 'data box
- 260 LOCATE 2,1:GOSUB 9000
- 360 PRINT NG$:PRINT " Ident Fac Freq";TAB(32)"Name";
- 370 PRINT TAB(47)"Lat";TAB(55)"Long";TAB(64);"Var";TAB(70)"Elev"
- 380 '
- 390 FOR I=1 TO N
- 400 LOCATE I+6,1:IF I = 1 THEN PRINT "Enter Origin Airport ID <MENU> "; ELSE PRINT "Enter checkpoint"I" <End> ";
- 410 PRINT STRING$(5,32);:LOCATE ,POS(0)-5:LINE INPUT X$:IF X$="" THEN 800
- 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=I+8:GET #1,REC:LOCATE I+8,1:PRINT :GOSUB 610:RO=I+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"If correct, return to menu and input data.":GOTO 400
- 560 IF FD=1 THEN 600
- 570 LOCATE RO+1,1:PRINT "Enter number of your choice <"PI"> ";
- 580 PRINT STRING$(3,32);:LOCATE ,POS(0)-3:LINE INPUT X$:IF X$="" THEN 600
- 590 PI=VAL(X$):REC=(PI\5)+1:SS=PI MOD 5:GET#1,REC
- 600 LOCATE I+6,1:GOSUB 9000:RO=I+3:FD=0:GOSUB 610
- 601 IF VR > 0 OR I = 1 THEN 605
- 602 IF INSTR(FAC$,"V") > 0 THEN VR = 1:RTID$ = ID$
- 605 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 LOCATE RO,1:IF FD=0 THEN PRINT I; ELSE PRINT PI;
- 680 PRINT TAB(7);ID$;TAB(13);FAC$;TAB(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 TAB(24);NM$;TAB(45);USING"##";D6;
- 750 PRINT TAB(48);USING"##.#";M6;
- 760 PRINT TAB(53);USING"###";D5;
- 770 PRINT TAB(57);USING"##.#";ABS(M5);
- 780 PRINT TAB(62);USING"###.#";V5;
- 790 PRINT TAB(68);V1$;TAB(70);USING"#####";E5:RETURN
- 800 '
- 805 IF I = 1 AND X$ = "" THEN CLOSE:RUN PROGDISK$+"NAVMENU"
- 806 N = I - 1
- 810 LOCATE N+6,1:GOSUB 9000:PRINT "Route of flight correct? (Y or N) <Y> ";
- 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 LOCATE N+6,1:GOSUB 9000
- 860 PRINT"Save route of flight for future use? (Y or N) <Y> ";
- 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$=DATADISK$+"FLIGHT.SEQ":GOSUB 1030
- 910 LOCATE N+6,1:GOSUB 9000:LOCATE ,1:PRINT "Standby one...":RUN PROGDISK$+"NAVPROG7"
- 920 ' update route file
- 930 LOCATE N+6,1:GOSUB 9000
- 931 PRINT "Enter Route Suffix <";RTID$;"> ";STRING$(3,32);:LOCATE ,POS(0)-3
- 932 LINE INPUT X$:GOSUB 1040:IF X$ <> "" THEN RTID$ = X$
- 933 IF LEN(RTID$)> 3 THEN RTID$ = LEFT$(RTID$,3)
- 935 RTID$ = RTID$ + SPACE$(3-LEN(RTID$))
- 937 RF$=LEFT$(I$(1),3)+LEFT$(I$(N),3)+"."+RTID$
- 940 LOCATE N+6,1:GOSUB 9000:PRINT "Standby one..."
- 950 OPEN "I",1,DATADISK$+"ROUTINGS.DAT":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$=DATADISK$+RF$:GOSUB 1030:IF DR=1 THEN RETURN
- 1000 OPEN"O",1,DATADISK$+"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=950 THEN RESUME 980
- 1095 IF ERR=53 AND ERL=94 THEN CLOSE:RESUME 98
- 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
- 8000 ' install erase-to-end-of-screen subroutine
- 8010 DEF SEG=&H1700
- 8020 FOR ADDR% = 0 TO 19
- 8030 READ CODE%
- 8040 POKE ADDR%,CODE%
- 8050 NEXT
- 8060 CLREOS% = 0
- 8070 RETURN
- 8080 DATA &h55,&h8b,&hec,&h8b,&h76,&h06,&h8b,&h0c
- 8090 DATA &hb8,&h20,&h0a,&hb7,&h00
- 8100 DATA &hcd,&h10
- 8110 DATA &h5d,&hca,&h02,&h00,&h00
- 9000 ' erase to end-of-screen
- 9010 CLINE = CSRLIN 'remember cursor position
- 9020 CROW = POS(0)
- 9030 NUMCHR% = 1919 - ((CLINE - 1)*80 +CROW) 'num chars to write
- 9040 CALL CLREOS%(NUMCHR%) 'erase to end of screen
- 9050 LOCATE CLINE,CROW,1 'restore cursor
- 9060 RETURN
-