X7$ ?BOOT-U-No boot on volume ߋtvI I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I SRT11A DECRT11A X & 8ontyw c( !c  c    c! c !   !   !   !  `F=Y .B  -.  .B(         7     H  J   H H        v Ju A     J  JA  FAF A ?      !           ! C     H    X  4 0A o    I^H t  w X 4 !  z v y x u A                     v 2 X z o t  O u i x y         p(  AA@D  ADA` !  x y u A F 0  %'pX*'&p*'Apy'w:[py'R~vIpIq Ԁpy''0y'%0%^ X*^W9g&<Q   ^ O  4 ? u  C  & ; C [ (     !   F         D W t  ( @(& !  ?            (  S H S` T V` N R.k X o   D  ,MZ               ,$lo%  kt 4^ mn J _           H    !        t     @       (   H    * H    U @     &PS 5F ( ?  FKZs v??R` _  ^  @@   P QA ]  Q P  H*   A  L    * r , Y Y [12~ 5~ OP`   ( ( H h H `     (  [?8;1h[?8l        SL   H     L Y H ,   H   ,RX    W X  H   f8P+Z Y    H   !   Y  H      H( HXY   A8 bgA    L H ,(    H       H     fL       L   H0 R RH!  L  H     Y      FB B..BC C CCC.=CC?DD DD 'DD7;EE E E)/EFF Af  ABCDMPQRSlmnpqrstuvwxyO[12345?6@ABCDS8>9T~&1273456ABCD' *; 5 . L S    + H H   @ !  H  (    %          acYe %C C FLY.FOR - FLIGHT SIMULATOR FOR REGIS TERMINALS C (DOUBLE PRECISION VERSION) C C RT-11 FORTRAN IV CONVERSION BY C C ROB ZAHORA DIGITAL EQUIPMENT CORPORATION C C REVISION 3/05/88 C C C THIS PROGRAM IS A MODIFICATION OF THE VAX/VMS FORTRAN 77 PROGRAM C FLYING.FOR BY PATRICK N. SMITS (REV. 10/29/85). C C C THE FOLLOWING MODIFICATIONS TO THE ORIGIONAL PROGRAM HAVE BEEN C MADE - C C C 1. SUBROUTINES, COMMON AREAS AND VARIABLES HAVE BEEN RENAMED TO C BE 6 OR LESS CHARACTERS LONG WITH NO UNDERSCORES. VARIABLES C NAMED SIMILAR TO FORTRAN IV KEY WORDS HAVE BEEN RENAMED. A C LISTING OF THE CHANGES IS PRESENTED LATER. C C 2. IMPLICIT INTEGER*4 STATEMENTS HAVE BEEN REPLACED BY EXPLICIT C LISTING OF INTEGER VARIABLES C C 3. MADE INTEGER*4 VARIABLES INTEGER*2 C C 4. MADE PLANXM,PLANYM REAL*4 C C 5. USED RT-11 SYSTEM SUBROUTINES INSTEAD OF VAX/VMS CALLS C C ITTINR - GET CHARACTER FROM KEYBOARD C SECNDS - GET SECONDS PAST MIDNIGHT C RAN - GENERATE RANDOM NUMBER C C C 6. VAX/VMS SPECIFIC STATEMENTS HAVE BEEN COMMENTED OUT WITH "CVAX" C C 7. CHANGED VARIOUS FORTRAN ITEMS AS FOLLOWS - C C FROM TO C -------------- ---------------- C WRITE(* WRITE(7 C READ(* READ(5 C C CHARACTER*x BYTE(x) 2-DIMENSIONAL ARRAYS ADDED AS C NEEDED WITH INDEXING WHEN CALLED. C CHANGED FORMAT STATEMENTS AS NEEDED. C C LOG DLOG C COSD DCOS(PI/180 * C SIND DSIN(PI/180 * C ATAND 180/PI * DATAN( C ATAN DATAN C SIN DSIN C COS DCOS C ABS DABS C INT IDINT C **.5 DSQRT C C BLANK LINES LINES STARTING WITH C C C C 8. REDID RANDOM NUMBER GENERATION C C 9. ADDED SOME DBLE() IN FRONT OF SOME RAN() C C 10. ADDED xx.0D0 TO SOME FIXED CONSTANTS IN .EQ. .LE. .GE. STATEMENTS C C 11. USED 2 SECOND DISPLAY OF MESSAGES INSTEAD OF 4 SECOND DISPLAYS C C 12. IN SUBROUTINE SCRDIS, REPLACED DO LOOPS WITH REAL VARIABLES C WITH ONES WITH INTEGER VARIABLES (Z =) C C 13. PRECALCULATED COMMONLY USED FACTORS (SEE FACTn, IFACTn, RADDEG) C AND TOOK CONSTANT CALCULATIONS OUT OF DO LOOPS, MADE REAL C CONSTANTS INTEGERS IN REAL TO INTEGER CALCULATIONS. USED C MULTIPLICATION BY A CONSTANT INSTEAD OF DIVISION BY A CONSTANT C TO INCREASE EXECUTION SPEED. C C 14. RENUMBERED STATEMENT NUMBERS C C 15. USED SCREEN FOR VT125 (767 HORIZONTAL PIXELS INSTEAD OF 798) C C C THE FOLLOWING IMPROVEMENTS HAVE BEEN MADE - C C 1. IN THE ORIGIONAL VERSION, THE INSTRUMENT DISPLAYS WERE ALL FIRST C CLEARED AND THEN REWRITTEN. THIS CAUSED THE DISPLAYS TO FLICKER C ANNOYINGLY. CODE WAS ADDED TO UPDATE EACH INSTRUMENT ONLY WHEN C A CHANGE HAD OCCURED. COMMON AREA /INSTRO/ AND ASSOCIATED C VARIABLES WERE ADDED TO DO THIS. C C 2. INSTEAD OF EXITING THE PROGRAM AFTER A CRASH, THE PROGRAM C NOW GOES TO A NEW RUNWAY. VARIABLE RESTART HAS BEEN ADDED TO C FLAG THIS OPERATION. USE THE "." AT ANY TIME TO EXIT THE PROGRAM. C C 3. TO ALLOW FOR AN OPTIMUM RT-11 OVERLAY STRUCTURE, THE CODE FOR C GETTING THE PILOTS EXPERIENCE HAS BEEN MOVED FORM SUBROUTINE C GETKEY TO SUBROUTINE SCRDIS. THE "3" VALUE FOR THE SET ARGUMENT C FOR GETKEY HAS BEEN CHANGED TO "2". C C C********************************************************************** C C SUBROUTINES HAVE BEEN RENAMED AS FOLLOWS - C C C Plane_Calculate_Position CALPOS C Plane_Get_Key(Set,Val) GETKEY C Plane_Instruments_Display (Control) INSTRU C Plane_Landing_Check LANDCK C Plane_Runway_Display(Control) RUNWAY C Plane_Select_Airport SAIRPT C Plane_Set_Color(Set,M_L,C_H,C_L,C_S) SCOLOR C Plane_Screens_Display(Screen) SCRDIS C Plane_Takeoff_Position TAKOFF C C C********************************************************************** C C COMMON AREAS HAVE BEEN RENAMED AS FOLLOWS - C C /Atitude_Parameters/ ATTPAR C /Flight_Controls/ FLIGHT C /Instrument_Parameters/ INSTRP C /Landing_Test/ LAND C /Plane_Location/ PLANE C /Pilot_Experience/ PILOT C /Runway_Parameters/ RNWAYP C C C********************************************************************** C C VARIABLES WITH MORE THAN 6 CHARACTERS OR CONTAINING UNDERSCORES C HAVE BEEN RENAMED ACCORDING TO THE FOLLOWING TABLE - C C C AIRPORT_DISTANCE ADIST C AIRPORT_DISTANCE1 ADIST1 C AIRPORT_DISTANCE2 ADIST2 C AIRPORT_HEADING AHEAD C AIR_SPEED AIRSPD C ALTITUDE ALTITD C ALT_SIZE ALTSIZ C ASCII_TO_FROM ASCITF C A_A AA C A_D AD C C BEST_CLIMB_RATE BCLIMB C BRAKES_APPLIED BRAKEA C BRAKES_OFF BRAKOF C BRAKES_ON BRAKON C C CANOPY_LEFT_HALF_X CANLX C CANOPY_LEFT_HALF_Y CANLY C CENTER_LINE_X1 CLINX1 C CENTER_LINE_X2 CLINX2 C CENTER_LINE_Y1 CLINY1 C CENTER_LINE_Y2 CLINY2 C CHANNEL CHANNL C CLIMB_FACTOR CLMBFT C CLIMB_RATE CLMBRT C CLOSE CLOSEV C COLOR_HUE COLORH C COLOR_LIGHTNESS COLORL C COLOR_SATURATION COLORS C COMPASS COMPAS C COMPASS_LETTER COMPSL C COMPUTE_AIR_SPEED CMPTAS C CONTROL CONTRL C CONTROL_X CTRLX C CONTROL_Y CTRLY C C_H CH C C_L CL C C_S CS C C DASH_X DASHX C DASH_Y DASHY C DISTANCE DIST C C EXPERIENCE EXPER C C FLAP_POSITION FLAPP C FUSLAGE_LEFT_HALF_X FUSLX C FUSLAGE_LEFT_HALF_Y FUSLY C C GAMMA_2 GAMMA2 C GAMMA_3 GAMMA3 C GEAR_DOWN GEARDN C GEAR_POSITION GEARPS C GEAR_UP GEARUP C C HORIZON HORIZ C C INT_ALT INTALT C C KEY_PROCESS_COUNT KPROCT C C LANDING_FLAG LANDFL C LANDING_GEAR LANDGR C C MONO_LIGHTNESS MONOLT C M_L ML C C OLD_BRAKES OLDBRK C OLD_FLAPS OLDFLP C OLD_GEAR OLDGR C ON_LINE ONLINE C OPEN OPENV C OPEN_CLOSE OPENCL C C PATTERN PATERN C PLANE_X PLANEX C PLANE_X_MILES PLANXM C PLANE_Y PLANEY C PLANE_Y_MILES PLANYM C PROP_X PROPX C PROP_Y PROPY C C RESULTS RESULT C RUNWAY_ANGLE_X RNWYAX C RUNWAY_ANGLE_Y RNWYAY C RUNWAY_DISPLAY_FLAG RNWYDF C RUNWAY_HEADING RNWAYH C RUNWAY_LENGTH RNWAYL C RUNWAY_X RNWAYX C RUNWAY_Y RNWAYY C R_S RS C C SIGN_BIT SIGNBT C SPEED_MULT SPEEDM C SPREAD_1 SPRED1 C SPREAD_2 SPRED2 C STALL_SPEED STALL C C TAIL_X TAILX C TAIL_Y TAILY C TERMINAL_MODE TERMIN C TO_FROM TOFROM C TURN_RATE TURNRT C C V_MAX VMAX C C WING1_X WING1X C WING1_Y WING1Y C WING2_X WING2X C WING2_Y WING2Y C WING3_X WING3X C WING3_Y WING3Y C C Z_ALTITUDE ZALTIT C C********************************************************************** C C Mainline for the Airplane Program (VAX/VMS - FORTRAN 77) C C This program is a flight simulator which runs on a VAX C Computer and generates ReGIS as the graphics protocol. C C C ============================================================== C | Programmer ----> Patrick N. Smits ............... (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================== C C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C +++++++++++++ Compiling and linking instructions +++++++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C ++++++++ Extract this MAIL message to a file named : +++++++++ C ++++++++ FLYING.FOR (and edit out the MAIL header) +++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C Important : This file has been sent by NMAIL. NMAIL appends C the file with a header and a trailer. You MUST edit out these C lines that appear at the beginning and end of this message! C C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C +++++++++++ Compile it --> Type : FORTRAN FLYING +++++++++++ C +++++++++++ Link it --> Type : LINK FLYING +++++++++++ C +++++++++++ RUN it --> Type : RUN FLYING +++++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C C ############################################################## C ############# Define the Appropriate Variables ############### C ############################################################## C INTEGER*2 CONTRL,SCREEN,VAL INTEGER*2 ASX1,ASY1,RPMX1,RPMY1,RCX1,RCY1,CX1,CY1 !/INSTRP/ INTEGER*2 AX1,AY1,AX2,AY2,HLX1,HLY1,HRX1,HRY1 !/INSTRP/ INTEGER*2 OASX1,OASY1,ORPMX1,ORPMY1,ORCX1,ORCY1 !/INSTRO/ INTEGER*2 OCX1,OCY1 !/INSTRO/ INTEGER*2 OAX1,OAY1,OAX2,OAY2,OAX3,OAY3 !/INSTRO/ INTEGER*2 OHLX1,OHLY1,OHRX1,OHRY1 !/INSTRO/ C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 EXPER !/PILOT/ INTEGER*2 LANDFL !/LAND/ C Byte ESC C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 SPEEDM Real*8 PLANEX,PLANEY,ADIST,RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT1 C Common /INSTRP/ ASX1,ASY1, + RPMX1,RPMY1,RCX1,RCY1,CX1,CY1,AX1,AY1, + AX2,AY2,HLX1,HLY1,HRX1,HRY1 C Common /INSTRO/ OASX1,OASY1, + ORPMX1,ORPMY1,ORCX1,ORCY1,OCX1,OCY1,OAX1,OAY1, + OAX2,OAY2,OAX3,OAY3,OHLX1,OHLY1,OHRX1,OHRY1 C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /PILOT/ EXPER,SPEEDM C Common /LAND/ LANDFL C DATA OASX1,OASY1/120,406/ DATA ORPMX1,ORPMY1/230,406/ DATA ORCX1,ORCY1/340,406/ DATA OCX1,OCY1/450,406/ DATA OAX1,OAY1,OAX2,OAY2/670,406,670,406/ DATA OAX3,OAY3/670,406/ DATA OHLX1,OHLY1,OHRX1,OHRY1/670,406,670,406/ C Data ESC /27/ C Data Flaps /0/ Data OLDFLP /1/ C Data LANDGR /0/ Data OLDGR /1/ C Data Brakes /0/ Data OLDBRK /0/ C Data OPENCL /0/ C Data LANDFL /0/ C DATA FACT1 /0.000189393939D0/ ! /5280. C C Pilot experience ranges from : C 1 - Beginner C 2 - Solo C 3 - Private IFR C 4 - Private VFR C 5 - Instructor C C C Set the Runway_Display_Flag to off...(Not on Screen)....... RNWYDF = 0 C C Runway toggle for macrograph display....................... C By using a macrograph the screen is updated slightly faster C because the runway coordinates are passed only once and used C to display (draw) the runway and then complement (erase) the C runway. Toggle = 1 C C Set Initial Instrument parameters.......................... AIRSPD = 0.0D0 RPM = 0.0D0 HORIZ = 0.0D0 CLMBRT = 0.0D0 TURNRT = 0.0D0 ALTITD = 0.0D0 COMPAS = 000 C C C Allocate and Initialize the terminal driver................. Call GETKEY(1,Val) C C Draw Screen 1 ............. Introduction to Flight Simulator Screen = 1 Call SCRDIS(Screen) C C Draw Screen 2 ............. Draw cockpit view on the ground. Screen = 2 Call SCRDIS(Screen) C C Clear any macrographs that might be loaded in the terminal.. WRITE(7,5) 5 Format(1X,'@.') C C Ready to go... Select an random airport..................... Call SAIRPT C C Position the airplane in the takeoff position............... Call TAKOFF C C Calculate and Display the new Instrument parameters......... Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the Runway at it's current location... CONTRL = 1 Call RUNWAY(CONTRL) C C Pause for 2 seconds......................................... WRITE(7,10) 10 Format(1X,'S(T120)') C C C ************************************************************ C Initial Takeoff sequence (Down the Runway and into the blue) C ************************************************************ C C Calculate and Display the new Instrument parameters......... 15 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the Runway at it's current location... CONTRL = 1 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C C Check if it is time to go to Phase 2........................ If(ADIST*FACT1 .GT. 3.) Goto 30 C Goto 15 C C ************************************************************ C Climb out and locate the destination for landing............ C ************************************************************ C C Generate a landing location for the Airport................. 20 Call SAIRPT C C Calculate and Display the new Instrument parameters......... 25 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C If(ADIST*FACT1 .LE. 10.0D0) Goto 30 If(ADIST*FACT1 .GT. 100.0D0) Goto 20 C Goto 25 C C ************************************************************ C Display Airport for landing once distance is < 10 miles..... C This is the alignment pattern for Beginner,Solo, Private VFR C ************************************************************ C C C Calculate and Display the new Instrument parameters......... 30 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the runway for landing................ CONTRL = 3 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C If(ADIST*FACT1 .LE. 3.0D0) Goto 35 If(ADIST*FACT1 .GT. 10.0D0) Goto 20 C Goto 30 C C C ************************************************************ C This is the landing sequence - Similar to takeoff........... C ************************************************************ C 35 Continue C C Calculate and Display the new Instrument parameters......... 40 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Display the Runway at it's current location................. CONTRL = 1 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C C Check if it is time to display runway orientation........... If(ADIST*FACT1 .GT. 3.) Goto 30 C Goto 40 C C End of the main line ....................................... END C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Select Airport C C This subroutine randomly selects a position for the Airplane C with respect the airport being at (0,0), a runway heading, & C a runway length............................................. C Subroutine SAIRPT C INTEGER*2 ISEED,JSEED REAL*4 SEED,X INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 PLANEX,PLANEY,ADIST,RNWAYL REAL*8 RADDEG C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C C DATA RADDEG /57.2957795D0/ ! 180/PI C C C Start out with a random seed form, (using time)...... CVAX 100 Seed = IABS(For$SECNDS(Start)) CVAX If(Float(Seed/2) .EQ. Float(Seed)/2.) Seed = Seed-1 C 5 SEED = SECNDS(0.0) !RT-11 SYSTEM SUBROUTINE 10 IF (SEED.LT.32767.) GO TO 15 SEED = SEED - 32767. GO TO 10 15 ISEED = IFIX(SEED) JSEED = 0 C C Randomly select a distance from the Airport.......... 20 PLANEX = (DBLE(RAN(ISeed,JSEED))-.5) * 50. PLANEY = (DBLE(RAN(ISeed,JSEED))-.5) * 50. If(DABS(PLANEX) .LT. 5) Goto 20 If(DABS(PLANEY) .LT. 5) Goto 20 C Now convert miles to feet fo all future calculations. PLANEX = PLANEX * 5280. PLANEY = PLANEY * 5280. C C Randomly select a length for the Runway (in Feet).... 25 RNWAYL = DBLE(RAN(ISeed,JSEED))*3000. + 4000. C C Calculate the angle spread for runway width & height. Beta = IDINT( DATAN(2000./RNWAYL)*RADDEG) C C Randomly Select an orientation for the Airstrip...... RNWAYH = INT(RAN(ISeed,JSEED)*36.) * 10 C Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Set Color C C This routine sets the screen's colors to a selected set.. C Subroutine SCOLOR(Set,ML,CH,CL,CS) C C INTEGER*2 CH,CL,CS,ML,SET C C C Set the specific mono/color map............... 5 WRITE(7,10) Set,ML,CH,CL,CS 10 Format(1X, 1 'S(M',I1,'(L',I3,')(AH',I3,'L',I3,'S',I3,'))') Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> SCRDIS C C This subroutine displays the various graphic display screens. C Subroutine SCRDIS(Screen) C INTEGER*2 COLORH,COLORL,COLORS,I,J,MONOLT,SCREEN,SET,VAL INTEGER*2 X1,X2,Y1,Y2 INTEGER*2 EXPER !/PILOT/ C BYTE Ans BYTE Yes(2),COMPSL(4) C Byte ESC Byte Quote C BYTE Gon(2) BYTE Goff C Integer*2 XF,YF INTEGER IZ !RT-11 C Real FUSLX(44),FUSLY(44) Real TAILX(5),TAILY(5) Real CANLX(28),CANLY(28) Real WING1X(9),WING1Y(9),WING2X(9),WING2Y(9) Real WING3X(7),WING3Y(7),CTRLX(4),CTRLY(4) Real PROPX(21),PROPY(21),DASHX(5),DASHY(5) Real SCX,SCY C Real*8 Z,SPEEDM C Common /PILOT/ EXPER,SPEEDM C Data ESC /27/ Data Quote /39/ Data Yes /'Y','y'/ Data COMPSL /'N','E','S','W'/ C DATA Gon /'P','p'/ DATA Goff /'\'/ DATA SCX /30.5/ DATA SCY /30.5/ DATA XF /100/ DATA YF /220/ C C DATA FUSLX / + 0.00,0.10,0.30,0.60,0.90,1.00,2.00,3.00,4.00,5.00, + 5.90,6.00,6.20,7.00,7.70,8.00,9.00,10.0,17.0,17.0, + 16.9,16.8,16.6,16.5,16.3,16.2,16.0,15.5,15.0,14.0, + 13.0,12.0,11.0,6.00,5.00,3.00,2.00,1.00,0.50,0.40, + 0.30,0.20,0.10,0.00/ C DATA FUSLY / + 5.50,5.40,5.30,5.20,5.10,5.05,4.78,4.55,4.35,4.20, + 4.00,4.02,3.90,3.58,3.30,3.15,2.90,2.75,2.75,3.75, + 3.75,3.80,3.90,4.00,4.20,4.30,4.75,5.30,5.60,5.80, + 5.90,5.95,6.00,6.00,5.95,5.90,5.80,5.75,5.70,5.65, + 5.62,5.60,5.58,5.50/ C DATA TAILX / 11.5,13.8,15.2,17.0,16.5/ DATA TAILY / 2.75,1.70,0.00,0.00,2.75/ C C DATA CANLX / + 6.30,6.60,7.00,9.30,9.90,10.3,10.4,10.5,10.6,10.7, + 10.7,11.0,11.0,10.9,10.8,10.7,10.6,10.5,10.4,10.0, + 9.50,9.00,7.50,7.00,6.50,6.30,6.10,5.90/ DATA CANLY / + 3.90,3.95,4.00,4.00,3.90,3.70,3.60,3.50,3.30,3.00, + 2.75,2.75,3.00,3.40,3.60,3.70,3.80,3.92,4.00,4.15, + 4.20,4.25,4.25,4.22,4.18,4.15,4.10,4.00/ C C DATA DASHX / 6.60,7.10,7.90,8.00,8.00/ C DATA DASHY / 3.95,3.90,3.65,3.70,4.00/ C DATA CTRLX / 16.9,15.9,15.3,16.55/ C DATA CTRLY / 0.50,0.50,2.50,2.50/ C DATA PROPX / + 17.05,17.05,17.10,17.10,17.15,17.30,17.35,17.25,17.50,17.80, + 18.00,17.80,17.50,17.25,17.35,17.30,17.15,17.10,17.10,17.05, + 17.05/ C DATA PROPY / + 03.25,02.75,02.75,01.40,00.75,00.75,01.40,02.80,02.90,03.10, + 03.25,03.40,03.60,03.70,05.10,05.75,05.75,05.10,03.75,03.75, + 03.25/ C DATA WING1X / + 14.75,14.80,14.90,17.30,18.00,17.30,14.90,14.80,14.75/ C DATA WING1Y / + 05.25,05.22,05.20,05.20,05.25,05.30,05.30,05.28,05.25/ C DATA WING2X / + 16.70,15.70,14.60,14.20,14.00,14.20,14.60,15.70,16.70/ C DATA WING2Y / + 05.20,05.10,05.10,05.15,05.25,05.35,05.40,05.40,05.30/ C DATA WING3X / + 14.60,07.00,04.10,04.00,04.10,07.00,14.60/ C DATA WING3Y / + 05.10,05.35,05.40,05.45,05.50,05.50,05.40/ C C C C *********************************************************** C Determine which screen is to be displayed.................. Goto (5,405), Screen C *********************************************************** C 5 Write(7,10) ESC,ESC,Gon 10 Format(1X,A1,'[2J',A1,2A1,'S[0,0]W(I1,R,S0)T(S1,I0)') C C Select the initial colors for the Graphic "planes"......... Set = 0 MONOLT = 0 COLORH = 0 COLORL = 0 COLORS = 0 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 1 MONOLT = 33 COLORH = 120 COLORL = 57 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 2 MONOLT = 66 COLORH = 000 COLORL = 57 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 3 MONOLT = 99 COLORH = 000 COLORL = 100 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) C C Erase the Graphic Screen............................... WRITE(7,15) 15 Format(1X,'S(E)W(I3)') C DO 20 I=1,44 IF (I.EQ.1) WRITE(7,25) + INT(FUSLX(I)*SCX)+XF, + INT(FUSLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(FUSLX(I)*SCX)+XF, + INT(FUSLY(I)*SCY)+YF 20 Continue 25 Format('+','P[',I5,',',I5,']') 30 Format('+','V[',I5,',',I5,']') C DO 35 I=1,28 IF (I.EQ.1) WRITE(7,25) + INT(CANLX(I)*SCX)+XF, + INT(CANLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(CANLX(I)*SCX)+XF, + INT(CANLY(I)*SCY)+YF CANLX(I)=8.0-CANLX(I)+8.0 35 Continue C C DO 40 I=1,5 IF (I.EQ.1) WRITE(7,25) + INT(TAILX(I)*SCX)+XF, + INT(TAILY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(TAILX(I)*SCX)+XF, + INT(TAILY(I)*SCY)+YF 40 Continue C C DO 45 I=1,9 IF (I.EQ.1) WRITE(7,25) + INT(WING1X(I)*SCX)+XF, + INT(WING1Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING1X(I)*SCX)+XF, + INT(WING1Y(I)*SCY)+YF 45 Continue C DO 50 I=1,9 IF (I.EQ.1) WRITE(7,25) + INT(WING2X(I)*SCX)+XF, + INT(WING2Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING2X(I)*SCX)+XF, + INT(WING2Y(I)*SCY)+YF 50 Continue C DO 55 I=1,7 IF (I.EQ.1) WRITE(7,25) + INT(WING3X(I)*SCX)+XF, + INT(WING3Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING3X(I)*SCX)+XF, + INT(WING3Y(I)*SCY)+YF 55 Continue C DO 60 I=1,5 IF (I.EQ.1) WRITE(7,25) + INT(DASHX(I)*SCX)+XF, + INT(DASHY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(DASHX(I)*SCX)+XF, + INT(DASHY(I)*SCY)+YF DASHX(I)=8.0-DASHX(I)+8.0 60 Continue C DO 65 I=1,21 IF (I.EQ.1) WRITE(7,25) + INT(PROPX(I)*SCX)+XF, + INT(PROPY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(PROPX(I)*SCX)+XF, + INT(PROPY(I)*SCY)+YF PROPX(I)=8.0-PROPX(I)+8.0 65 Continue C DO 70 I=1,4 IF (I.EQ.1) WRITE(7,25) + INT(CTRLX(I)*SCX)+XF, + INT(CTRLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(CTRLX(I)*SCX)+XF, + INT(CTRLY(I)*SCY)+YF 70 Continue C WRITE(7,75) 75 Format(1X,'P[250,352]W(I1)', + 'T(S1)"Digital Equipment Corporation 1985"') C WRITE(7,80) 80 Format(1X, + 'P[170,10]W(I1)T(S4)"Welcome to"') WRITE(7,85) Quote 85 Format(1X, + 'P[170,80]W(I3)T(S5)"Smitty',A1,'s"') WRITE(7,90) 90 Format(1X, + 'P[120,160]W(I2)T(S4)"Flight School"') C WRITE(7,95) 95 Format + (1X,'P[50,440]W(I2)T(S1)"Programmer : Patrick N. Smits"'/ + 1X,'P[50,460]W(I2)T(S1)"RT-11 Conv. : Rob Zahora, 1988"') WRITE(7,100) 100 Format(1X, + 'P[480,440]W(I2)T(S1)"Push Return to continue ? "',$) Read(5,105) Ans 105 Format(A) C WRITE(7,110) 110 Format(1X,'S(E)P[100,10]W(I1)T(S3)"Select Pilot Rating"') WRITE(7,115) 115 Format(1X,'P[200,60]W(I2)T(S2)"1 - Beginner"') WRITE(7,120) 120 Format(1X,'P[200,90]W(I2)T(S2)"2 - Solo"') WRITE(7,125) 125 Format(1X,'P[200,120]W(I2)T(S2)"3 - Private VFR"') WRITE(7,130) 130 Format(1X,'P[200,150]W(I2)T(S2)"4 - Private IFR"') WRITE(7,135) 135 Format(1X,'P[200,180]W(I2)T(S2)"5 - Instructor"') WRITE(7,140) 140 Format(1X,'P[170,250]W(I3)T(S3)"Selection ? "') C C EXPER = 0 C C Get the Pilot's rating................................... C C ------------------------------------------------------------ C This is for getting the pilot's experience.................. C 145 Char = 00 CVAX status = Sys$QIOW (, CVAX 1 %VAL(CHANNL),%VAL(IO$_READVBLK+IO$M_NOECHO+IO$M_TIMED), CVAX 2 IOSB, , , %REF(Char), %VAL(1), %VAL(0), , , ) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) C 150 CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.LT.0) GO TO 150 !WAIT FOR INPUT C C Determine which key has been pressed and set parameters...... Goto (155,160,165,170,175,180), Char-47 C C Key = 0 155 Val = 0 GO TO 185 C C Key = 1 160 Val = 1 GO TO 185 C C Key = 2 165 Val = 2 GO TO 185 C C Key = 3 170 Val = 3 GO TO 185 C C Key = 4 175 Val = 4 GO TO 185 C C Key = 5 180 Val = 5 C 185 CONTINUE C If(Val.EQ.1) EXPER = 1 If(Val.EQ.1) SPEEDM = 1.0 If(Val.EQ.2) EXPER = 2 If(Val.EQ.2) SPEEDM = 1.5 If(Val.EQ.3) EXPER = 3 If(Val.EQ.3) SPEEDM = 2.0 If(Val.EQ.4) EXPER = 4 If(Val.EQ.4) SPEEDM = 2.0 If(Val.EQ.5) EXPER = 5 If(Val.EQ.5) SPEEDM = 2.5 If(EXPER.EQ.0) Goto 145 C WRITE(7,190) EXPER 190 Format(1X,'T"',I1,'"') C WRITE(7,195) 195 Format(1X,'P[100,420]T(S2)"Would you like help (Y/N) ? "',$) Read(5,200) Ans 200 Format(A) If(Ans.EQ.Yes(1) .OR. Ans.EQ.Yes(2)) Goto 205 Goto 395 205 WRITE(7,210) 210 Format(1X,'S(E)W(I3)P[200,50]V(B)[+400][,+400][-400](E)') WRITE(7,215) 215 Format + (1X,'P[300,50]V[,+320]P[400,50]V[,+400]P[500,50]V[,+400]') WRITE(7,220) 220 Format( + 1X,'P[200,130]V[+400]P[200,210]V[+400]P[200,290]V[+400]') WRITE(7,225) 225 Format(1X,'P[200,370]V[+300]W(I2)') WRITE(7,230) 230 Format(1X, + 'P[210,55]T(S2)"PF1"P[+45]T"PF2"P[+45]T"PF3"P[+45]T"PF4"') WRITE(7,235) 235 Format(1X, + 'P[210,135]T(S2)" 7 "P[+45]T" 8 "P[+45]T" 9 "P[+45]T" - "') WRITE(7,240) 240 Format(1X, + 'P[210,215]T(S2)" 4 "P[+45]T" 5 "P[+45]T" 6 "P[+45]T" , "') WRITE(7,245) 245 Format(1X, + 'P[210,295]T(S2)" 1 "P[+45]T" 2 "P[+45]T" 3 "P[+45]T"Enter"') WRITE(7,250) 250 Format(1X, + 'P[210,375]T(S2)" 0 "P[+145]T" . "') C WRITE(7,255) 255 Format(1X,'W(I1)', + 'P[230,85]T(S1)"Not"P[+72]T"Not"P[+72]T"Not"P[+72]T"Not"') WRITE(7,260) 260 Format(1X, + 'P[230,105]T(S1)"Used"P[+62]T"Used"P[+62]T"Used"P[+62]T"Used"') WRITE(7,265) 265 Format(1X, + 'P[230,165]T(S1)"Gear"P[+60]T', + '"Nose"P[+60]T"Flaps"P[+60]T"RPMs"') WRITE(7,270) 270 Format(1X, + 'P[230,185]T(S1)" Up "P[+60]T', + '"Down"P[+60]T" Up "P[+60]T" Up "') WRITE(7,275) 275 Format(1X, + 'P[230,245]T(S1)"Turn"P[+60]T', + '"Not "P[+60]T"Turn "P[+60]T"RPMs"') WRITE(7,280) 280 Format(1X, + 'P[230,265]T(S1)"Left"P[+60]T', + '"Used"P[+60]T"Right"P[+60]T"Down"') WRITE(7,285) 285 Format(1X, + 'P[230,325]T(S1)"Gear"P[+60]T"Nose"P[+60]T"Flaps"P[+65]T"Not"') WRITE(7,290) 290 Format(1X, + 'P[230,345]T(S1)"Down"P[+60]T', + '" Up "P[+60]T"Down "P[+60]T"Used"') WRITE(7,295) 295 Format(1X, + 'P[230,405]T(S1)"Apply Brakes"P[+80]T"Exit"') WRITE(7,300) 300 Format(1X, + 'P[230,425]T(S1)"Momentarily "P[+80]T"Game"') C WRITE(7,305) 305 Format(1X, + 'P[250,460]W(I2)T(S1)"Push Return to continue ? "',$) Read(5,310) Ans 310 Format(A) C WRITE(7,315) 315 Format(1X, + 'S(E)P[100,10]W(I3)T(S2)"General Flight Information"') WRITE(7,320) 320 Format(1X,'P[100,70]W(I1)', + 'T(S1)"Apply up to 40 Degrees of Flaps for Lift"') WRITE(7,325) 325 Format(1X,'P[100,90]W(I1)', + 'T(S1)"Increase engine RPM to maximum for Take Off"') WRITE(7,330) 330 Format(1X,'P[100,110]', + 'T(S1)"Pull back on stick (Key 2) to rotate airplane"') WRITE(7,335) 335 Format(1X,'P[100,140]', + 'T(S1)"For touch and goes stay within 10 miles of Airport"') WRITE(7,340) 340 Format(1X,'P[100,160]', + 'T(S1)"For a new airport fly out of the 10 mile radius"') WRITE(7,345) 345 Format(1X,'P[100,190]W(I3)', + 'T(S1)"Beginner, Solo, and Private VFR"') WRITE(7,350) 350 Format(1X,'P[100,210]W(I1)', + 'T(S1)"have runway alignment displayed"') WRITE(7,355) 355 Format(1X,'P[100,240]W(I3)', + 'T(S1)"Private IFR and Instructor ratings"') WRITE(7,360) 360 Format(1X,'P[100,260]W(I1)', + 'T(S1)"Well, Good luck in the bad weather"') WRITE(7,365) 365 Format(1X,'P[100,320]W(I2)', + 'T(S1)"RPM and Climb register in x100"') WRITE(7,370) 370 Format(1X,'P[100,340]W(I2)', + 'T(S1)"Altimeter display x100, x1000, x10000"') WRITE(7,375) 375 Format(1X,'P[100,360]W(I2)', + 'T(S1)"Respective pointer Long Medium Short"') C WRITE(7,380) 380 Format(1X,'P[100,400]W(I3)', + 'T(S1)"Note : RW indicates runway to be used for landing"') WRITE(7,385) 385 Format(1X,'P[100,425]W(I1)', + 'T(S1)"Multiply RW x 10 for heading (ie. RW 29 ---> 290"') WRITE(7,390) 390 Format(1X,'W(I1)T(S0)"0"T(S1)') C WRITE(7,305) Read(5,310) Ans C C 395 WRITE(7,400) ESC,Goff 400 Format(1X,'T(S1)',A1,A1) C Return C C C *********************************************************** C C C Draw cockpit view on the ground... 405 WRITE(7,410) ESC,Gon 410 Format(1X,A1,2A1,'S(E)') WRITE(7,415) CVAX375 Format(1X,'W(I3,R)P[0,348]V(B)[+798][,+130][-798](E)') !VT240? 415 Format(1X,'W(I3,R)P[0,348]V(B)[+767][,+130][-767](E)') !VT125 WRITE(7,420) CVAX380 Format(1X,'P[0,348]V(S)[,-326][+798][,+326](E)') !VT240? 420 Format(1X,'P[0,348]V(S)[,-326][+767][,+326](E)') !VT125 C C Draw Instruments WRITE(7,425) 425 Format(1X,'W(I2,V)', + 'P[120,406]C[+50]P[+110]C[+50]P[+110]C[+50]', + 'P[+110]C[+50]P[+110]C[+50]P[+110]C[+50]') C WRITE(7,430) 430 Format(1X, + 'W(I2)P[105,460]T"MPH"P[+80]T"RPM"P[+70]T"Climb"', + 'P[+60]T"Compass"P[+50]T"Horizon"P[+40]T"Altimeter"') C WRITE(7,435) 435 Format(1X,'W(I1)T(S0)') C Air Speed gauge ! J = 0 CVAX Do 254 Z = 3.1415927 , -3.0 , -2.*3.1415927/10. Do 455 IZ = 0,9 Z = 0.62831853*(5 - IZ) !3.1415927 - IZ*3.1415927/5. X1 = IDINT(DSIN(Z)*35.) + 120 Y1 = IDINT(DCOS(Z)*42.) + 405 If(J.LT.10) WRITE(7,440) X1-5,Y1,J 440 Format(1X,'P[',I3,',',I3,']T"',I1,'"') If(J.GE.10 .AND. J.LT.100) WRITE(7,445) X1-5,Y1,J 445 Format(1X,'P[',I3,',',I3,']T"',I2,'"') If(J.GE.100) WRITE(7,450) X1-12,Y1,J 450 Format(1X,'P[',I3,',',I3,']T"',I3,'"') 455 J=J+25 C C RPM gauge ! J = 0 CVAX Do 262 Z = 0. , 3.1416 , 3.1415927/5. Do 470 IZ = 0,5 Z = IZ*0.62831853 !3.1415927/5. X1 = IDINT(DSIN(Z)*35.) + 230 Y1 = IDINT(DCOS(Z)*40.) + 405 If(J.LT.10) WRITE(7,460) X1-5,Y1,J 460 Format(1X,'P[',I3,',',I3,']T"',I1,'"') If(J.GE.10) WRITE(7,465) X1-5,Y1,J 465 Format(1X,'P[',I3,',',I3,']T"',I2,'"') 470 J=J+5 C C Rate Of Climb gauge ! J = 0 CVAX Do 271 Z = 3.1415927/2. , 3./2.*3.0 , 2.*3.1415927/20. Do 480 IZ = 0,9 Z = 0.314159265*(5 + IZ) !3.1415927/2. + IZ*2.*3.1415927/20. X1 = IDINT(DSIN(Z)*40.) + 340 Y1 = IDINT(DCOS(Z)*40.) + 405 Y2 = -Y1 + 810 !-IDINT(DCOS(Z)*40.) + 405 WRITE(7,475) X1-5,Y1,J If(J.EQ.0) Goto 480 WRITE(7,475) X1-5,Y2,J 475 Format(1X,'P[',I3,',',I3,']T"',I1,'"') 480 J=J+1 C C Compass gauge ! J = 1 CVAX Do 282 Z = 3.1415927 , -3.0 , -2.*3.1415927/4. Do 490 IZ = 0,3 Z = 1.570796327*(2 - IZ) !3.1415927 - IZ*2.*3.1415927/4. X1 = IDINT(DSIN(Z)*42.) + 450 Y1 = IDINT(DCOS(Z)*42.) + 405 WRITE(7,485) X1-5,Y1,COMPSL(J) 485 Format(1X,'P[',I3,',',I3,']T"',A1,'"') 490 J=J+1 C CVAX Do 283 Z = 3.1415927 , -3.0 , -2.*3.1415927/18. Do 495 IZ = 0,17 Z = 0.34906585*(9 - IZ) !3.1415927 - IZ*2.*3.1415927/18. X1 = IDINT(DSIN(Z)*35.) + 450 Y1 = IDINT(DCOS(Z)*35.) + 408 X2 = IDINT(DSIN(Z)*25.) + 450 Y2 = IDINT(DCOS(Z)*25.) + 408 495 WRITE(7,500) X1,Y1,X2,Y2 500 Format(1X,'P[',I3,',',I3,']V[',I3,',',I3,']') C C C Artificial Horizon gauge ! WRITE(7,505) 505 Format(1X,'P[510,406]V[+15]P[610,406]V[-15]') C C Altimeter gauge ! J = 0 CVAX Do 291 Z = 3.1415927 , -3.0 , -2.*3.1415927/10. Do 515 IZ = 0,9 Z = 0.62831853*(5 - IZ) !3.1415927 - IZ*2.*3.1415927/10. X1 = IDINT(DSIN(Z)*42.) + 670 Y1 = IDINT(DCOS(Z)*42.) + 405 WRITE(7,510) X1-5,Y1,J 510 Format(1X,'P[',I3,',',I3,']T"',I1,'"') 515 J=J+1 C WRITE(7,520) 520 Format(1X,'W(I3,C)') C WRITE(7,525) ESC,ESC,ESC,ESC 525 Format(1X,A1,'\', CVAX + A1,'[3;2H','Gear ', + A1,'[3;5H','Gear ', + A1,'[3;67H','Flaps',A1,'P1p',$) C C Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Calculate Position C C This subroutine guides the Pilot by displaying the airplanes C current position with respect to the airport he is at or the C airport he will be landing at (ie. directions to the airport). C C Subroutine CALPOS C INTEGER*2 FROM,I,TO INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 EXPER !/PILOT/ C Byte ESC C BYTE ASCITF(4,2) C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 SIGNBT Real*8 Z,PLANEX,PLANEY,ADIST,SPEEDM Real*8 RNWAYL Real*4 PLANXM,PLANYM Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT1,FACT2,RADDEG C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PILOT/ EXPER,SPEEDM C Data ESC /27/ Data From /1/ Data To /2/ Data ASCITF /'F','r','o','m',' ','T','o',' '/ C DATA FACT1 /0.000189393939D0/ ! /5280. DATA RADDEG /57.2957795D0/ ! 180/PI C C Calculate new Position and heading to airport........ C Z = Float(COMPAS)*0.017453292 + 3.1415927 C !0.017453292= /360. * (2.*3.1415927) FACT2 = AIRSPD*SPEEDM PLANEX = PLANEX - DSIN(Z)*FACT2 PLANEY = PLANEY - DCOS(Z)*FACT2 ADIST = DSQRT(PLANEX**2 + PLANEY**2) If(PLANEX.EQ.0.0D0) PLANEX = 0.1 SIGNBT = 1.0 If(PLANEY.LT.0.0D0) SIGNBT = -1.0 If(PLANEX.GT.0.0D0) AHEAD = + 270 - IDINT(DATAN(PLANEY/PLANEX)*RADDEG + .5*SIGNBT) If(PLANEX.LT.0.0D0) AHEAD = + 090 - IDINT(DATAN(PLANEY/PLANEX)*RADDEG - .5*SIGNBT) C C ******************************************************** C ********** Field of view from the Cockpit ************** C ******************************************************** C Determine if the plane is flying To or From the Airport. C Determine if the Runway can be seen from the cockpit.... C C First , Set Compass angle to 0 degrees for viewing and C then normalize Airport Heading to determine if Airport C is within the viewing area of 180 degree arc (w/cockpit) C Alpha is the normalized angle variance of the Airport C Heading with respect to the current Compass heading..... C TOFROM = From Alpha = AHEAD - COMPAS If(Alpha.LT.000) Alpha = Alpha + 360 If(Alpha.GE.360) Alpha = Alpha - 360 If(Alpha.GE.270) TOFROM = To If(Alpha.LE.090) TOFROM = To C C C Display the airplanes new position relative to the airport. PLANXM = SNGL(PLANEX*FACT1) PLANYM = SNGL(PLANEY*FACT1) C If(ALTITD.LE.20.0D0 .AND. ADIST.LE.RNWAYL .AND. + TOFROM.EQ.To) Goto 50 C C This display is for long distance directional information.... If(PLANYM.GT.0.0D0 .AND. PLANYM.GE.1.0D0) WRITE(7,5) + ESC,ESC,INT(PLANYM) If(PLANYM.GT.0.0D0 .AND. PLANYM.LT.1.0D0) WRITE(7,10) + ESC,ESC,PLANYM C If(PLANYM.LT.0.0D0 .AND. ABS(PLANYM).GE.1.0D0) WRITE(7,15) + ESC,ESC,INT(ABS(PLANYM)) If(PLANYM.LT.0.0D0 .AND. ABS(PLANYM).LT.1.0D0) WRITE(7,20) + ESC,ESC,ABS(PLANYM) C If(PLANXM.GT.0.0D0 .AND. PLANXM.GE.1.0D0) WRITE(7,25) + INT(PLANXM) If(PLANXM.GT.0.0D0 .AND. PLANXM.LT.1.0D0) WRITE(7,30) + PLANXM C If(PLANXM.LT.0.0D0 .AND. ABS(PLANXM).GE.1.0D0) WRITE(7,35) + INT(ABS(PLANXM)) If(PLANXM.LT.0.0D0 .AND. ABS(PLANXM).LT.1.0D0) WRITE(7,40) + ABS(PLANXM) C 5 Format(1X,A1,'\',A1,'[1;4H', I7 ,1X,'N ',$) 10 Format(1X,A1,'\',A1,'[1;4H',F7.2,1X,'N ',$) 15 Format(1X,A1,'\',A1,'[1;4H', I7 ,1X,'S ',$) 20 Format(1X,A1,'\',A1,'[1;4H',F7.2,1X,'S ',$) 25 Format('+', I7 ,1X,'E of Airport ',$) 30 Format('+',F7.2,1X,'E of Airport ',$) 35 Format('+', I7 ,1X,'W of Airport ',$) 40 Format('+',F7.2,1X,'W of Airport ',$) C WRITE(7,45) IDINT(ADIST*FACT1),(ASCITF(I,TOFROM),I=1,4), + AHEAD,IDINT(RNWAYH*0.1) 45 Format('+', + I4,1X,'Miles ',4A1,' Airport ',I3,1X,'Heading',1X,'RW',1X,I2) C Goto 65 C C This display is for short distance directional information.... 50 WRITE(7,55) ESC,ESC,IDINT(RNWAYL),IDINT(ADIST), + IDINT(RNWAYL-ADIST) C C 55 Format(1X,A1,'\',A1,'[1;4H','Runway Length',I5,2X,'Left',I5, + 2X,'Used',I5,$) C WRITE(7,60) (ASCITF(I,TOFROM),I=1,4), + AHEAD,IDINT(RNWAYH*0.1) 60 Format('+', + 2X,4A1,' Airport ',I3,1X,'Heading',1X,'RW',1X,I2) C Goto 65 C 65 WRITE(7,70) ESC 70 Format(1X,A1,'P1p') Return End C C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C C This subroutine allocates the terminal driver and gets one C key from the terminal buffer at a time. The input section C of this routine will process up to four keys per call ( or C until the input buffer is empty.) C C Subroutine GETKEY(Set,Val) C INTEGER*2 BRAKOF,BRAKON,CHAR,GEARDN,GEARUP,KPROCT INTEGER*2 SET,VAL INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 LANDFL !/LAND/ C CVAX Include '($IODEF)' CVAX Include '($TTDEF)' C BYTE Device(3) Byte ESC Integer*2 TERMIN(2) C Real*8 CMPTAS,STALL Real*8 BCLIMB,CLMBFT,VMAX,Drag Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /LAND/ LANDFL C Data Device /'T','T',':'/ C Data GEARDN,GEARUP/0,1/ C Data BRAKOF,BRAKON /0,1/ C Data ESC /27/ C STALL = 60. C VMAX = 250. C Goto (5,10), Set C C Get the terminal's channel number for the QIO. CVAX 100 Call Sys$Assign (Device,CHANNL,,) C 5 CALL IPOKE("44,"10000 .OR. IPEEK("44)) !RT-11 CONSOL SPECIAL MODE CALL IPOKE("44,"100 .OR. IPEEK("44)) !RT-11 FB,XM CONTINUE IF NO CHAR C C Get the terminal's current mode of operation. CVAX status = Sys$QIOW (,%VAL(CHANNL), %VAL(IO$_SENSEMODE), CVAX 1 IOSB,,,%REF(TERMIN(1)),%VAL(8),,,,) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) C C Set the Host Sync flag in the terminal characteristics word. CVAX TERMIN(2) = IOR (TERMIN(2),TT$M_HOSTSYNC) C C Temporarily set the terminal to host sync mode to eliminate C any overrun which may occur because of the lack of XON-XOFF. CVAX status = Sys$QIOW (,%VAL(CHANNL),%VAL(IO$_SETMODE),IOSB,,, CVAX 1 %REF(TERMIN(1)),%VAL(8),,,,) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) Return C C ------------------------------------------------------------ C C Get the key just input..... 10 KPROCT = 0 15 Char = 00 CVAX status = Sys$QIOW (, CVAX 1 %VAL(CHANNL),%VAL(IO$_READVBLK+IO$M_NOECHO+IO$M_TIMED), CVAX 2 IOSB, , , %REF(Char), %VAL(1), %VAL(0), , , ) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.LT.0) GO TO 90 C C Determine which key has been pressed and set parameters...... Goto (20,25,30,35,40,45,50,55,60,65), Char-47 Goto (70,75,80), Char-43 C Goto 90 C C Key = 0 20 Val = 0 Brakes = BRAKON Goto 90 C C Key = 1 25 Val = 1 LANDGR = GEARDN Goto 85 C C Key = 2 30 Val = 2 HORIZ = HORIZ+1. Goto 85 C C Key = 3 35 Val = 3 Flaps = Flaps + 1 If(Flaps.GT.4) Flaps = 4 Goto 85 C C Key = 4 40 Val = 4 TURNRT = TURNRT-1. Goto 85 C C Key = 5 45 Val = 5 Goto 90 C C Key = 6 50 Val = 6 TURNRT = TURNRT+1. Goto 85 C C Key = 7 55 Val = 7 LANDGR = GEARUP Goto 85 C C Key = 8 60 Val = 8 HORIZ = HORIZ-1. Goto 85 C C Key = 9 65 Val = 9 Flaps = Flaps - 1 If(Flaps.LT.0) Flaps = 0 Goto 85 C C Key = , 70 Val = 44 If(RPM.LE.0.0D0) Goto 90 RPM = RPM - 2. Goto 90 C C Key = - 75 Val = 45 If(RPM.GE.24.0D0) Goto 90 RPM = RPM + 2. Goto 90 C C Key = . C Exit the program. 80 Goto 100 C C Check limits of the values ! 85 If(TURNRT .GT. 10.) TURNRT = 10. If(TURNRT .LT. -10.) TURNRT = -10. If(HORIZ .GT. 9.) HORIZ = 9. If(HORIZ .LT. -9.) HORIZ = -9. Goto 90 C C C ********** Calculate new atitude and speed parameters ********* C C +++++++++++++++++++++ Air Speed +++++++++++++++++++ 90 Drag = AIRSPD*1.0 If(LANDGR.EQ.0) Drag = Drag + AIRSPD*0.6 Drag = Drag + AIRSPD*Float(Flaps)*0.2 If(ALTITD.GT.0.) Drag = Drag + DABS(TURNRT*10.) CMPTAS = RPM**2 - Drag - HORIZ*60. AIRSPD = AIRSPD + (CMPTAS - AIRSPD)*0.040 !0.04 = /25. If( AIRSPD .GT. 240. ) AIRSPD = 240. If( AIRSPD .LT. 000. ) AIRSPD = 000. C C +++++++++++++++++++++ Climb Rate Correction ++++++++++++++++++++ C +++++++++++++++++++++ Aircraft has Stalled ++++++++++++++++++++ C STALL = STALL - Float(Flaps*2) If( (AIRSPD+CMPTAS)*0.5 .LT. STALL + .AND. ALTITD.GT.0.) HORIZ=HORIZ-1 C C +++++++++++++++++++++ Altitude ++++++++++++++++++++ BCLIMB = VMAX*0.5 CLMBFT = 100./(DABS(BCLIMB-AIRSPD)+100.) CLMBRT = HORIZ*CLMBFT * Float(Flaps+1)*0.4 ALTITD = ALTITD + CLMBRT If(ALTITD.LE.0.0D0) Call LANDCK If(ALTITD.LT.0.0D0) ALTITD = 0.0D0 If(ALTITD.EQ.0.0D0) HORIZ = 0. If(ALTITD.GT.0.0D0) LANDFL = 1 C C +++++++++++++++++++++ Compass ++++++++++++++++++++ COMPAS = COMPAS + IDINT(TURNRT) If(COMPAS .GT. 359) COMPAS = 0 If(COMPAS .LT. 000) COMPAS = 360 C C +++++++++++++++ Airspeed Correction (Brakes On) ++++++++++++++++ If(Brakes.EQ.BRAKOF) Goto 95 AIRSPD = AIRSPD*0.9 If(AIRSPD.LT.10.) AIRSPD = 0.0 C 95 If(Char.EQ.0) Return KPROCT = KPROCT + 1 If(KPROCT.GT.4) Return Goto 15 C C Exit the plane program. 100 WRITE(7,105) 105 Format(1X, + 'S(M1(L25)(AH000L50S50))', + 'S(M2(L50)(AH120L50S50))', + 'S(M3(L75)(AH240L50S50))') WRITE(7,110) ESC,ESC,ESC 110 Format(1X,'S(E)',A1,'\',A1,'[1;1H',A1,'[2J') Call Exit C End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> INSTRU C C This subroutine updates the instruments on the graphic display. C Subroutine INSTRU C INTEGER*2 AX3,AY3,BRAKOF,I,INTALT INTEGER*2 ASX1,ASY1,RPMX1,RPMY1,RCX1,RCY1,CX1,CY1 !/INSTRP/ INTEGER*2 AX1,AY1,AX2,AY2,HLX1,HLY1,HRX1,HRY1 !/INSTRP/ INTEGER*2 OASX1,OASY1,ORPMX1,ORPMY1,ORCX1,ORCY1 !/INSTRO/ INTEGER*2 OCX1,OCY1 !/INSTRO/ INTEGER*2 OAX1,OAY1,OAX2,OAY2,OAX3,OAY3 !/INSTRO/ INTEGER*2 OHLX1,OHLY1,OHRX1,OHRY1 !/INSTRO/ C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ C Byte ESC C BYTE FLAPP(4,5),GEARPS(4,2) BYTE BRAKEA(6,2) C Real*8 Z,ZALTIT Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT3 C Common /INSTRP/ ASX1,ASY1, + RPMX1,RPMY1,RCX1,RCY1,CX1,CY1,AX1,AY1, + AX2,AY2,HLX1,HLY1,HRX1,HRY1 C Common /INSTRO/ OASX1,OASY1, + ORPMX1,ORPMY1,ORCX1,ORCY1,OCX1,OCY1,OAX1,OAY1, + OAX2,OAY2,OAX3,OAY3,OHLX1,OHLY1,OHRX1,OHRY1 C C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C C Data ESC /27/ C Data GEARPS /'D','o','w','n',' ','U','p',' '/ C Data FLAPP /' ',' ','U','p', 1 ' ','1','0','%', 1 ' ','2','0','%', 1 ' ','3','0','%', 1 ' ','4','0','%'/ C Data BRAKEA /6*' ','B','r','a','k','e','s'/ C Data BRAKOF /0/ C DATA FACT3/6.2831853D0/ ! 2.*3.1415927 C C C Calculate the new Instrument parameters ! C C Update Air Speed gauge ! 5 Z = AIRSPD*0.025132741 + 3.1415927 C !0.025132741 = /250. * 2.*3.1415927 ASX1 = IDINT(DSIN(FACT3-Z)*30.) + 120 ASY1 = IDINT(DCOS(FACT3-Z)*30.) + 406 C C Update Engine RPM gauge ! Z = RPM*0.12566371 !0.12566371 = /25. * 3.1415927 RPMX1 = IDINT(DSIN(Z)*30.) + 230 RPMY1 = IDINT(DCOS(Z)*30.) + 406 C C Update Rate Of Climb gauge ! Z = DABS(CLMBRT)*0.31415927 + 1.570796327 C !0.31415927 = /10. * 3.1415927 C !1.570796327 = 3.1415927/2. RCX1 = IDINT(DSIN(Z)*30.) + 340 If(CLMBRT.GE.0.0D0) RCY1 = IDINT(DCOS(Z)*30.) + 406 If(CLMBRT.LT.0.0D0) RCY1 = -IDINT(DCOS(Z)*30.) + 406 C C Update Compass gauge ! Z = Float(360-COMPAS) + 180. CX1 = IDINT(DSIN(Z*3.14159272/180.) *25.) + 450 CY1 = IDINT(DCOS(Z*3.14159272/180.) *25.) + 406 C C Update the Artificial Horizon ! HLX1 = 530 HRX1 = 590 HLY1 = 406 - IDINT(HORIZ*2. + TURNRT) HRY1 = 406 - IDINT(HORIZ*2. - TURNRT) C INTALT = IDINT(ALTITD) ZALTIT = ALTITD - Float((INTALT/100)*100) Z = ZALTIT/100. * 2.*3.1415927 + 3.1415927 AX1 = IDINT(DSIN(2.*3.1415927-Z)*30.) + 670 AY1 = IDINT(DCOS(2.*3.1415927-Z)*30.) + 406 C ZALTIT = ALTITD - Float((INTALT/1000)*1000) Z = ZALTIT/1000. * 2.*3.1415927 + 3.1415927 AX2 = IDINT(DSIN(2.*3.1415927-Z)*20.) + 670 AY2 = IDINT(DCOS(2.*3.1415927-Z)*20.) + 406 C ZALTIT = ALTITD - Float((INTALT/10000)*10000) Z = ZALTIT/10000. * 2.*3.1415927 + 3.1415927 AX3 = IDINT(DSIN(2.*3.1415927-Z)*10.) + 670 AY3 = IDINT(DCOS(2.*3.1415927-Z)*10.) + 406 C C C Display the new Instrument parameters ! 10 IF (OASX1.EQ.ASX1 .AND. OASY1.EQ.ASY1) GO TO 15 WRITE(7,55) OASX1,OASY1 WRITE(7,55) ASX1,ASY1 OASX1 = ASX1 OASY1 = ASY1 C 15 IF (ORPMX1.EQ.RPMX1 .AND. ORPMY1.EQ.RPMY1) GO TO 20 WRITE(7,60) ORPMX1,ORPMY1 WRITE(7,60) RPMX1,RPMY1 ORPMX1 = RPMX1 ORPMY1 = RPMY1 C 20 IF (ORCX1.EQ.RCX1 .AND. ORCY1.EQ.RCY1) GO TO 25 WRITE(7,65) ORCX1,ORCY1 WRITE(7,65) RCX1,RCY1 ORCX1 = RCX1 ORCY1 = RCY1 C 25 IF (OCX1.EQ.CX1 .AND. OCY1.EQ.CY1) GO TO 30 WRITE(7,70) OCX1,OCY1 WRITE(7,70) CX1,CY1 OCX1 = CX1 OCY1 = CY1 C 30 IF (OAX1.EQ.AX1 .AND. OAY1.EQ.AY1) GO TO 35 WRITE(7,75) OAX1,OAY1 WRITE(7,75) AX1,AY1 OAX1 = AX1 OAY1 = AY1 C 35 IF (OAX2.EQ.AX2 .AND. OAY2.EQ.AY2) GO TO 40 WRITE(7,75) OAX2,OAY2 WRITE(7,75) AX2,AY2 OAX2 = AX2 OAY2 = AY2 C 40 IF (OAX3.EQ.AX3 .AND. OAY3.EQ.AY3) GO TO 45 WRITE(7,75) OAX3,OAY3 WRITE(7,75) AX3,AY3 OAX3 = AX3 OAY3 = AY3 C 45 IF (OHLX1.EQ.HLX1 .AND. OHLY1.EQ.HLY1 .AND. 1 OHRX1.EQ.HRX1 .AND. OHRY1.EQ.HRY1) GO TO 50 WRITE(7,80) OHLX1,OHLY1,OHRX1,OHRY1 WRITE(7,80) HLX1,HLY1,HRX1,HRY1 OHLX1 = HLX1 OHLY1 = HLY1 OHRX1 = HRX1 OHRY1 = HRY1 50 CONTINUE C 55 Format(1X,'P[120,406]V[',I3,',',I3,']') 60 Format(1X,'P[230,406]V[',I3,',',I3,']') 65 Format(1X,'P[340,406]V[',I3,',',I3,']') 70 Format(1X,'P[450,406]V[',I3,',',I3,']') 75 Format(1X,'P[670,406]V[',I3,',',I3,']') 80 Format(1X,'P[',I3,',',I3,']V[',I3,',',I3,']') C If(LANDGR .NE. OLDGR) WRITE(7,85) + ESC,ESC,(GEARPS(I,LANDGR+1),I=1,4),ESC CVAX45 Format(1X,A1,'\',A1,'[3;7H',4A1,A1,'P1p') 85 Format(1X,A1,'\',A1,'[3;10H',4A1,A1,'P1p') OLDGR = LANDGR C If(Flaps .NE. OLDFLP) WRITE(7,90) + ESC,ESC,(FLAPP(I,Flaps+1),I=1,4),ESC 90 Format(1X,A1,'\',A1,'[3;72H',4A1,A1,'P1p') OLDFLP = Flaps C If(Brakes.NE.OLDBRK) WRITE(7,95) + ESC,ESC,(BRAKEA(I,Brakes+1),I=1,6),ESC 95 Format(1X,A1,'\',A1,'[3;37H',6A1,A1,'P1p') OLDBRK = Brakes Brakes = BRAKOF C C These two lines may be commented out if a digital compass heading is C not desired. It makes the approach more interesting (as in difficult) C if the digital compass is not displayed on the screen................ WRITE(7,100) ESC,ESC,COMPAS,ESC 100 Format(1X,A1,'\',A1,'[23;44H',I3,A1,'P1p') C 105 Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C C This is a check for a successful landing or a possible crash. C If this routine is called the altitude is less than or equal C to zero feet. C C Subroutine LANDCK C INTEGER*2 CLOSEV,FROM,GEARDN,GEARUP,I,OPENV,CONTRL INTEGER*2 TO,TOTAL INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 LANDFL !/LAND/ C Byte ESC C Integer*2 RNWAYX(4),RNWAYY(4),RESULT(10) C Real*8 PLANEX,PLANEY,ADIST,RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /LAND/ LANDFL C Data GEARDN,GEARUP /0,1/ C Data OPENV,CLOSEV /0,1/ C Data From,To /1,2/ C Data ESC /27/ C Do 5 I = 1,10 5 RESULT(I) = 0 C C Check for landing or crash.................................. C Off Course (+ or -10 degree from runway heading) or Short of C the runway.................................................. If(OPENCL .EQ. CLOSEV) RESULT(1) = 1 If(LANDGR .EQ. GEARUP) RESULT(4) = 1 If(TOFROM .EQ. From .AND. + ADIST .LT.500.0) RESULT(6) = 1 If(LANDFL.NE.1) Goto 10 If(CLMBRT .LT. -3.0) RESULT(2) = 1 If(AIRSPD .GT. 100.0) RESULT(3) = 1 If(ADIST .GT. RNWAYL) RESULT(5) = 1 C 10 Total = 0 Do 15 I = 1,6 15 If(RESULT(I) .EQ. 1) Total = Total + 1 C If(Total .GT. 0) Goto 30 C A successful landing (congradulate the pilot) AIRSPD =0.0 If(LANDFL.NE.1) Return If(AIRSPD .GT. 0.0) Return C WRITE(7,20) 20 Format(1X,'P[250,50]W(C)T(S3)"Nice Landing"S(T120)') WRITE(7,25) 25 Format(1X,'P[250,50]T(S3)"Nice Landing"T(S1)') LANDFL = 0 C C Reset the airplane at the end of the runway................. Call TAKOFF Return C C Looks like a crash.......................................... 30 Call INSTRU WRITE(7,35) If(RESULT(5) .EQ. 1) RESULT(1) = 0 If(RESULT(6) .EQ. 1) RESULT(5) = 0 C If(RESULT(1) .EQ. 1) WRITE(7,40) If(RESULT(2) .EQ. 1) WRITE(7,45) If(RESULT(3) .EQ. 1) WRITE(7,50) If(RESULT(4) .EQ. 1) WRITE(7,55) If(RESULT(5) .EQ. 1) WRITE(7,60) If(RESULT(6) .EQ. 1) WRITE(7,65) C WRITE(7,35) If(RESULT(1) .EQ. 1) WRITE(7,40) If(RESULT(2) .EQ. 1) WRITE(7,45) If(RESULT(3) .EQ. 1) WRITE(7,50) If(RESULT(4) .EQ. 1) WRITE(7,55) If(RESULT(5) .EQ. 1) WRITE(7,60) If(RESULT(6) .EQ. 1) WRITE(7,65) C 35 Format(1X,'P[200,50]W(C)T(S3)"Crash Landing"S(T120)') 40 Format(1X,'P[120,+40]T"You missed the runway"S(T120)') 45 Format(1X,'P[120,+40]T"Descent rate too steep"S(T120)') 50 Format(1X,'P[120,+40]T"Air Speed is too high"S(T120)') 55 Format(1X,'P[120,+40]T"Landing Gear is up"S(T120)') 60 Format(1X,'P[120,+40]T"Hit short of runway"S(T120)') 65 Format(1X,'P[120,+40]T"Ran out of runway"S(T120)') C C C RESET INITIAL CONTIDITONS C AIRSPD = 0.0D0 RPM = 0.0D0 HORIZ = 0.0D0 CLMBRT = 0.0D0 TURNRT = 0.0D0 ALTITD = 0.0D0 COMPAS = 000 C LANDGR = 0 OLDGR = 1 Flaps = 0 OLDFLP = 1 Brakes = 0 OLDBRK = 0 C LANDFL = 0 C C Reset the airplane at the end of the runway................. Call TAKOFF CALL INSTRU CALL CALPOS CONTRL = 1 CALL RUNWAY(CONTRL) C C CLEAR ANY CHARACTERS IN KEYBOARD BUFFER C 70 CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.GE.0) GO TO 70 Return End C C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> RUNWAY C C This subroutine displays the new runway location for takeoff, C approach, and landing. C Subroutine RUNWAY(CONTRL) C INTEGER*2 ACX1,ACX1L,ACX1R,ACX2,ACY1,ACY1L,ACY1R,ACY2 INTEGER*2 CLINX1,CLINX2,CLINY1,CLINY2,CLOSEV,CONTRL INTEGER*2 CX1,CY1,CY2,DELTA,GAMMA2,GAMMA3,I,ONLINE,OPENV INTEGER*2 PATERN,THETA,TO INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 EXPER !/PILOT/ C BYTE MAC(2) C Integer*2 RNWAYX(4),RNWAYY(4) INTEGER*2 IFACT1,IFACT2 C Real*8 Z,Z1,Z2,Z3,Z4,RNWAYL,ALTSIZ,SPEEDM Real*8 DIST,PLANEX,PLANEY,ADIST,AD,AA,RS Real*8 SPRED1,SPRED2,ADIST1,ADIST2 Real*8 RNWYAX(4),RNWYAY(4) Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 RADDEG REAL*8 FACT1,FACT9,FACT10,FACT11,FACT12,FACT13,FACT14 C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PILOT/ EXPER,SPEEDM C C Data MAC /'A','B'/ Data To /2/ Data OPENV,CLOSEV /0,1/ C DATA RADDEG /57.2957795D0/ ! 180/PI DATA FACT1 /0.017453292D0/ ! /360. * (2.*3.1415927) C C Goto (5,85,95), CONTRL Return C C *********************************************************** C ******** This calculates the next Runway position ********* C *********************************************************** C C Check if the runway can be seen from the cockpit........... 5 If(TOFROM.EQ.To) Goto 10 C No display ----> Clear last Runway displayed if required... Goto 85 C 10 ADIST1 = ADIST - RNWAYL ADIST2 = ADIST If(ADIST1 .LE. 0.0D0) ADIST1 = 1.0 If(ADIST2 .LE. 0.0D0) ADIST2 = 1.0 C C Calculate the angle spread at runway ends...................... C Spread ranges from 1.0 to about .01 (Yields a length factor).. SPRED1 = DATAN( 1500./(ADIST1+1000.) ) !1.5/((ADIST1+1000.)/1000.) ) SPRED2 = DATAN( 1500./(ADIST2+1000.) ) !1.5/((ADIST2+1000.)/1000.) ) GAMMA2 = IDINT( DATAN(100./ADIST2)*RADDEG) GAMMA3 = IDINT( DATAN( 10./(ALTITD+10.))*RADDEG) C !( 1.0/((ALTITD+10.)/10.))*RADDEG) C Theta = AHEAD - RNWAYH + 180 If(Theta.LT.000) Theta = Theta + 360 If(Theta.GE.360) Theta = Theta - 360 If(Theta.GE.360) Theta = Theta - 360 C ONLINE = 1 Delta = AHEAD - RNWAYH If(Delta.LT.000) Delta = Delta + 360 If(Delta.GE.360) Delta = Delta - 360 If(Delta.GE.350) Goto 15 If(Delta.LE.010) Goto 15 GAMMA2 = 0 GAMMA3 = 0 SPRED2 = SPRED1 ONLINE = 0 15 Continue C If(GAMMA2+Beta.GT.90) GAMMA2 = 90 - Beta IFACT1 = GAMMA2 + BETA If(IFACT1+GAMMA3 .GT. 90) GAMMA3 = 90-IFACT1 C C Apply an altitude ajustment to runway for landing perspective.. ALTSIZ = DAtan(15./(ALTITD+10.)) !(1.5/((ALTITD+10.)/10.)) C C FACT11 = FLOAT(THETA + IFACT1 + 180 + GAMMA3)*FACT1 FACT12 = FLOAT(THETA - IFACT1 + 360)*FACT1 FACT13 = FLOAT(THETA + IFACT1)*FACT1 FACT14 = FLOAT(THETA - IFACT1 + 180 - GAMMA3)*FACT1 C RNWYAX(1) = DSIN(FACT11) RNWYAX(2) = DSIN(FACT12) RNWYAX(3) = DSIN(FACT13) RNWYAX(4) = DSIN(FACT14) C FACT9 = SPRED1*ALTSIZ*400. FACT10 = SPRED2*ALTSIZ*400. C RNWAYX(1) = IDINT(RNWYAX(1)*FACT9 ) RNWAYX(2) = IDINT(RNWYAX(2)*FACT10) RNWAYX(3) = IDINT(RNWYAX(3)*FACT10) RNWAYX(4) = IDINT(RNWYAX(4)*FACT9 ) C RNWYAY(1) = DCOS(FACT11) RNWYAY(2) = DCOS(FACT12) RNWYAY(3) = DCOS(FACT13) RNWYAY(4) = DCOS(FACT14) C FACT9 = FACT9 *0.4325 !SPRED1*ALTSIZ*173. FACT10 = FACT10*0.4325 !SPRED2*ALTSIZ*173. C RNWAYY(1) = IDINT(RNWYAY(1)*FACT9 ) RNWAYY(2) = IDINT(RNWYAY(2)*FACT10) RNWAYY(3) = IDINT(RNWYAY(3)*FACT10) RNWAYY(4) = IDINT(RNWYAY(4)*FACT9 ) C C Now apply the Runway's relative position to the Airplane.. Z = Float(Alpha)*FACT1 !/360. * 2.*3.1415927 CX1 = IDINT(DSIN(Z + 3.1415927) * 350.) CY1 = IDINT(DCOS(Z) * ADIST1*0.02840909) C ! 0.02840909 = /(5280.*2.) * 300. CY2 = INT(Float(RNWAYY(1)+RNWAYY(4)) * 0.5) C IFACT1 = 400 - CX1 IFACT2 = 346 - IABS(CY1) - IABS(CY2) C Do 20 I = 1,4 RNWAYX(I) = RNWAYX(I) + IFACT1 RNWAYY(I) = RNWAYY(I) + IFACT2 20 Continue C C C Clip the X Axis if the runway goes off screen (VT240...) Do 25 I = 1,4 If(RNWAYX(I).LT.1) RNWAYX(I) = 1 If(RNWAYX(I).GT.799) RNWAYX(I) = 799 C C This may be commented out for Y Axis but I do use it..... If(RNWAYY(I).LT.40) RNWAYY(I) = 40 If(RNWAYY(I).GT.346) RNWAYY(I) = 346 25 Continue C C C This draws the Runway outline...(For Takeoff)............ If(EXPER.LT.4) Goto 30 If(ALTITD.GT.50.) Goto 80 If(ADIST1.GT.5280.) Goto 80 30 Toggle=Toggle+1 If(Toggle.GT.2) Toggle=1 C C Determine if Runway is open or close at start point...... OPENCL = CLOSEV If( + ADIST-RNWAYL.LE.0.0D0 .AND. ONLINE.EQ.1) + OPENCL = OPENV C C C Draw the Runway with an open end......................... If(OPENCL.EQ.OPENV) WRITE(7,40) + MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) C C Draw the Runway with a closed end........................ If(OPENCL.EQ.CLOSEV) WRITE(7,45) + MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) C C Select a line pattern for the center line................ PATERN = 4 If(ALTITD.LE.70.0D0) PATERN = 5 If(ALTITD.LE.60.0D0) PATERN = 6 If(ALTITD.LE.50.0D0) PATERN = 7 If(ALTITD.LE.40.0D0) PATERN = 8 If(ALTITD.LE.30.0D0) PATERN = 9 If(ALTITD.LE.20.0D0) PATERN = 3 If(ALTITD.LE.10.0D0) PATERN = 2 C C This Draws the Center line... CLINX1 = (RNWAYX(1) + RNWAYX(4))/2 CLINX2 = (RNWAYX(2) + RNWAYX(3))/2 CLINY1 = (RNWAYY(1) + RNWAYY(4))/2 CLINY2 = (RNWAYY(2) + RNWAYY(3))/2 C WRITE(7,50) CLINX2,CLINY2 WRITE(7,55) PATERN WRITE(7,60) CLINX1,CLINY1 WRITE(7,55) 1 ! 1 = PATERN-PATERN+1 WRITE(7,65) If(Toggle.EQ.2) Goto 35 WRITE(7,70) MAC(Toggle) WRITE(7,70) MAC(Toggle+1) Goto 75 35 WRITE(7,70) MAC(Toggle) WRITE(7,70) MAC(Toggle-1) Goto 75 C 40 Format(1X,'P[0,500]', + '@:',A1,' W(I3)P[',I4,',',I4,']', + 'V(S)',3('[',I4,',',I4,']'),'(E)',$) 45 Format(1X,'P[0,500]', + '@:',A1,' W(I3)P[',I4,',',I4,']', + 'V(B)',3('[',I4,',',I4,']'),'(E)',$) 50 Format('+', + 'P[',I4,',',I4,']',$) 55 Format('+','W(P',I1,')',$) 60 Format('+', + 'V[',I4,',',I4,']',$) 65 Format('+', + ' @;') 70 Format(1X,'@',A1) C C Set the runway display flag to on....................... 75 RNWYDF = 1 80 Return C C This erases the last runway position displayed.......... 85 If(RNWYDF.EQ.0) Return WRITE(7,70) MAC(Toggle) WRITE(7,90) 90 Format(1X,'@.') RNWYDF = 0 Toggle = 1 Return C C C ************************************************************ C ************ Field of view from the Cockpit **************** C ************************************************************ C C Determine if the Runway can be seen from the cockpit........ C 95 If(TOFROM.EQ.To) Goto 100 C No display ----> Clear last Runway displayed if required.... Goto 85 C C Calculate the Runway's Orientation from the cockpit point of C view and Relative Size for display on screen for Approach... C C First , Set Runway_Heading angle to 0 degrees for viewing and C then normalize Airport Heading to determine if Airport C is within the viewing area of 180 degree arc (w/cockpit) C 100 Theta = AHEAD - RNWAYH If(Theta.LT.000) Theta = Theta + 360 If(Theta.GE.360) Theta = Theta - 360 C C Second, calculate the runway's width based on altitude by the C use of an angle I shall call Beta............................ Beta = IDINT( (3000./(ALTITD+10.)**2)) + 5 C C Apply an offset to distance to eliminate ZERO divide......... AD = (ADIST*0.0001893939394 + 9.)*0.1 AA = DLOG( ((ALTITD+100.) /10.) )*0.434782608 C RS = AD * AA C IFACT1 = BETA + THETA IFACT2 = BETA - THETA Z1 = Float(180+IFACT1)*FACT1 + 3.1415927 Z2 = Float(360-IFACT2)*FACT1 + 3.1415927 Z3 = Float( IFACT1)*FACT1 + 3.1415927 Z4 = Float(180-IFACT2)*FACT1 + 3.1415927 C FACT9 = 100./RS RNWAYX(1) = IDINT(DSIN(Z1) * FACT9) + 400 RNWAYX(2) = IDINT(DSIN(Z2) * FACT9) + 400 RNWAYX(3) = IDINT(DSIN(Z3) * FACT9) + 400 RNWAYX(4) = IDINT(DSIN(Z4) * FACT9) + 400 C RNWAYY(1) = IDINT(DCOS(Z1) * FACT9) + 173 RNWAYY(2) = IDINT(DCOS(Z2) * FACT9) + 173 RNWAYY(3) = IDINT(DCOS(Z3) * FACT9) + 173 RNWAYY(4) = IDINT(DCOS(Z4) * FACT9) + 173 C C Do the same for the landing direction indicator.......... Z1 = Float( Theta)*FACT1 + 3.1415927 Z2 = Float(180+Theta)*FACT1 + 3.1415927 C FACT9 = 75./RS FACT10 = 90./RS ACX1 = IDINT(DSIN(Z1) * FACT9 ) + 400 ACY1 = IDINT(DCOS(Z1) * FACT10) + 173 ACX2 = IDINT(DSIN(Z2) * FACT9 ) + 400 ACY2 = IDINT(DCOS(Z2) * FACT10) + 173 C FACT9 = 50./RS FACT10 = 70./RS FACT11 = Z1 + 0.5708 FACT12 = Z1 - 0.5708 ACX1R = IDINT((DSIN(FACT11)) * FACT9 ) + 400 ACY1R = IDINT((DCOS(FACT11)) * FACT10) + 173 ACX1L = IDINT((DSIN(FACT12)) * FACT9 ) + 400 ACY1L = IDINT((DCOS(FACT12)) * FACT10) + 173 C C C Now apply the Runway's relative position to the Airplane.. C <<< This turns out to be an offset in the X and Y axis >>> Z = Float(Alpha)*FACT1 + 3.1415927 CX1 = IDINT(DSIN(Z) * 350.) CY1 = IDINT(DCOS(Z) * ADIST*.0011363636 ) ! .0011363636 = /5280.*6. C Do 105 I = 1,4 RNWAYX(I) = RNWAYX(I) - CX1 RNWAYY(I) = RNWAYY(I) - IABS(CY1) 105 Continue C ACX1 = ACX1 - CX1 ACY1 = ACY1 - IABS(CY1) ACX2 = ACX2 - CX1 ACY2 = ACY2 - IABS(CY1) C ACX1R = ACX1R - CX1 ACY1R = ACY1R - IABS(CY1) ACX1L = ACX1L - CX1 ACY1L = ACY1L - IABS(CY1) C C This draws the Runway outline...(For Landing Approach)..... If(EXPER.GE.4) Goto 130 Toggle=Toggle+1 If(Toggle.GT.2) Toggle=1 WRITE(7,110) MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) 110 Format(1X,'P[0,500]', + '@:',A1,' P[',I4,',',I4,']', + 'V(B)',3('[',I4,',',I4,']'),'(E)',$) C WRITE(7,115) ACX2,ACY2,ACX1,ACY1,ACX1R,ACY1R,ACX1L,ACY1L 115 Format('+','P[',I3,',',I3,']V[',I3,',',I3,']V(B)', + 2('[',I3,',',I3,']'),'(E)',$) WRITE(7,65) If(Toggle.EQ.2) Goto 120 WRITE(7,70) MAC(Toggle+1) WRITE(7,70) MAC(Toggle) Goto 125 120 WRITE(7,70) MAC(Toggle-1) WRITE(7,70) MAC(Toggle) Goto 125 C 125 RNWYDF = 1 130 Return C End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Takeoff Position C C This subroutine positions the airplane at the end of the C runway. The airplane is then ready for takeoff.......... C C Subroutine TAKOFF C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 Z,PLANEX,PLANEY,ADIST Real*8 RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT9 C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C C C Calculate new Position and heading to airport........ Z = Float(RNWAYH)*0.017453292 + 3.1415927 FACT9 = RNWAYL*0.995 PLANEX = DSIN(Z) * FACT9 PLANEY = DCOS(Z) * FACT9 C COMPAS = RNWAYH C Return End The Buffer, Volume 6, 9 January 1986 ReGIS Software V1.1 PATRICK N. SMITS, COG/TECHNICAL SUPPORT GROUP, PKO2/S44, 223-5911 ReGIS FLIGHT SIMULATOR - PART 1 OF A 3 PART ARTICLE Because of the overwhelming number of requests for the Shuttle program which appeared in Small Buffer, Volume 789, 13 June 1985, I have decided to produce another (and possibly my last) ReGIS example/demonstration program. The latest is called "Smitty's Flight School." The program is a flight simulator designed to run on a VAX/VMS host, using the VT240/VT241 terminal. The program is written in FORTRAN-77 and consists of a main line and nine subroutines. It illustrates a variety of ReGIS programming techniques. I hope this will be useful as a learning tool and possibly for VT240/ReGIS demonstrations. If you would like a copy of the source code, send a request on the engineering network to VAXWRK::SMITS; I will send you a copy via electronic MAIL. Compiling and linking instructions are included in the source code (main line). When running the program, you may want to set the terminal's margin bell to "No Margin Bell" (Keyboard Set-Up) and "No Auto Wrap" (Display Set-Up). Also, you may want to set the VMS terminal driver to No Wrap by typing Set Term/No Wrap at the DCL prompt. The source code is commented, but in the following paragraphs, I will point out some of the major features incorporated into this program. The main line consists of a series of logical tests and subroutine calls. The only ReGIS it generates is to clear any previous macrograph and to perform a 2-second terminal wait. Subroutine: Plane_Calculate_Position This routine determines the airplane's position relative to the airport. The airport is always located at (0,0) in the Cartesian coordinate system. The vector component's direction to the airport (Airport_Heading) is determined by the arctangent of the slope of the airplane's position with respect to the origin. This heading is rounded to the nearest integer degree, based on the quadrant the airplane is positioned in at the time of the calculation. Testing for Plane_Y positive or negative sets the Sign_Bit variable in conjunction with the Plane_X positive or negative test, which determines the quadrant the airplane is in and then if rounding "more positive" or "more negative" is desired. The vector component's length (Airport_Distance) is the standard distance calculation simplified for the airport's position being at (0,0). The alpha variable represents the delta angle between the airport heading and the compass heading normalized to the CRT display (up being north or 0 degrees). The view from the cockpit is defined as a 180-degree arc (plus or minus 90 degrees) from the compass heading. Thus, by using angle alpha, the To_From flag is set (i.e., OMNI instrumentation), and the runway is determined to be in or out of the field of view, although not necessarily visible. Subroutine: Plane_Get_Key This subroutine sets up the terminal driver and gets a single keystroke using a queue input output (QIO). It directs the pilots commands to the airplane's altitude and airspeed parameters and requests that a check is made in case the altitude drops to 0. A feature of this routine is that it can process up to four pilot inputs per call. This helps give a more responsive "feel" to flying the airplane. Subroutine: Plane_Instruments_Display This routine displays the current instrument settings along with several aircraft surfaces (for example, flags, landing gear, and brakes). To minimize display overhead time, the later parameters are updated only if modified. Subroutine: Plane_Landing_Check This routine determines if a successful landing or a crash has occurred. If the pilot has crashed the airplane, some fundamental reason(s) for the crash will be displayed on the screen, and the routine will exit to the command language. To minimize processor overhead, this routine is only called if the altitude is less than or equal to zero. A successful landing requires the pilot to reach zero altitude: on heading + or - 10 degrees, the gear is down, the airspeed is less than 100 mph, the sink rate (negative climb rate) is not more than 300 fpm (3 on display), and the airplane stops short of the far end of the runway (use the brakes). Subroutine: Plane_Runway_Display This routine is the most complex of all the subroutines. It has two functions--to display the runway for takeoff/landing and to display the alignment runway for beginner, solo, and private (visual flight rules (VFR)) pilots. The alignment runway is not displayed for private instrument flight rules (IFR) or instructor ratings. Also the runway itself is not visible to IFR or instructor pilots until they are less than 1 mile away from the closest end of the runway, and then only if they are at an altitude of less than 500 feet. Here is a brief description of the math used to calculate the runway's end points. Initially, a check is made to determine if the airport is visible. Testing true, two airport distances are used. The first is the distance to the closest end of the runway (Airport_Distance1), and the second is the distance to the far end, point (0,0), of the runway (Airport_Distance2). Variables Spread_1 and Spread_2 yield angles in radians based on the distances to the two ends of the runway. These are used as multipliers to display an illusion of distance by increasing the length and width of the runway. Gamma_2 is an angle specified in degrees. It is used as an angle (rather than a multiplier) to define, in part, the width/length of the runway based on the distance the airplane is from the origin. Gamma_3 and Alt_Size provide the influence the airplane's altitude has on the runway's size. Gamma_3 provides an altitude correction of the apparent width of the closest end of the runway. Alt_Size provides for an overall ajustment to the size of the runway, based on altitude, and is applied to all runway coordinates. The angle theta (in degrees) defines the orientation of the runway with respect to the instantaneous airport heading or, more simply put, the orientation of the runway at the origin when normalized to the display screen from the vector generated when viewing the runway from the cockpit. The angle delta defines the approach angle to the airport with respect to the runway heading. A limit of plus or minus 10 degrees is acceptable, which is quite generous. If delta fails to be within a 20-degree range, the approach is considered to be unacceptable, and the runway is displayed as a rectangle by voiding the effect of Gamma_2, Gamma_3, and Spread_2. The angle beta is derived in the Plane_Select_Airport routine. It is based on the random runway length generated. As the runway length increases, beta decreases, which, in turn, decreases the apparent width of the runway at its far end. The desired result is to project a longer runway. The above calculated parameters are then applied to a series of equations which determine the runway's end points in the appropriately scaled coordinate system, uncorrected for the airplane's screen viewing position. Note that the sine and cosine normally applied to Y and X, respectively, have been reversed to rotate the actual display by 90 degrees. The runway's relative position on the screen is determined by the angle alpha (previously explained). Relative position is defined as the left/right and up/down location with respect to screen address (400,346). Variable CY2 is a second correction to the Y screen position of the runway, which ensures the runway remains "above" the instrument panel. The need for this correction arises because the origin (0,0) is located at the far end of the runway. The nearest end of the runway is set to "closed" by default. This yields a runway which is visible in its entirety. To give the illusion of passing over the nearest end of the runway, a test is made to check if the airplane is on an acceptable approach heading (variable On_Line) and has passed over the end of the runway with respect to distance. If true, the end of the runway "opens" to give the illusion of passing over the end of the runway. At this point, the display header information changes to reflect the runway length, amount of runway used, and the amount of runway left. Finally, a test is made to select a line pattern for the runway's center line based on altitude. The second function of this routine is to display the alignment runway for VFR pilots. The alignment runway guides the pilot to the correct approach heading. The arrow which appears in the middle of the runway indicates the landing direction, which is 180 degrees from the downwind direction. Therefore, the arrow points into the wind. For those who are not familiar with flying, airplanes normally land on a runway which yields the best "directly into" or least crosswind heading. The math for this section of code is similar to the runway calculations. Subroutine: Plane_Select_Airport This routine randomly selects a distance from an airport, positions the airplane in the appropriate quadrant, generates a runway length of 4000 to 7000 feet, calculates the beta angle, and selects the runway heading. Subroutine: Plane_Set_Color This routine sets a monolightness and a color using the high-level scanner (HLS) specifiers. It loads the settings into the color map specified by the variable set. Subroutine: Plane_Screen_Display This routine displays the introduction screen, gets the pilot experience, and displays the Help screens upon request. It also displays the view of the cockpit. Subroutine: Plane_Takeoff_Position This routine places the airplane at the end of the runway in a takeoff position. Note that the distance multiplier is .995 percent of the actual runway length--room for taxi-strip turnaround, runway alignment (and, of course, math precision rounding errors). Explanation of Figures 1 through 24 Figure 1 shows the introductory screen for the flight simulator. Figure 2 illustrates how the program requests a pilot rating selection. Beginner, solo and private VFR, if selected, show the alignment runway. This makes the landing approach much easier; it helps align the airplane with the runway. The major difference between these three is the speed at which the airplane travels per screen update. Private IFR and instructor ratings do not show the alignment runway; and, on final approach, the runway in not displayed at an altitude greater than 500 feet or from a distance of more than 1 mile from the closest end of the airport's runway. This screen also requests Help, if needed. Figures 3 and 4 are displayed if Help is selected. Figure 5 shows the airplane in the takeoff position. After this screen is drawn, a 2-second pause is performed before the program continues. Figure 6 illustrates the flaps set to 20 degrees, the engine RPM increased to 2500, and up-stick pressure (Key 2) applied. Note the horizon position. Figure 7 shows the airplane climbing out, still on a heading of 130. Figure 8 shows the airplane at 1400 feet, flaps off, a zero climb rate, and beginning a left-hand pattern. The landing gear has also been retracted to its "up" position. Airspeed indicates 240 mph which is maximum velocity. Figures 9 and 10 illustrate the downwind leg of this practice landing. Note that the airplane is at pattern height, which is 1400 feet. The airport is always at sea level. Figures 11 and 12 show the flaps at 20 degrees and the beginning of the descent stage (throttling back the engine). Figure 13 shows the airplane entering the base leg of the approach at 5 miles out and leveled off. Note the horizon and climb instruments. Figure 14 illustrates the use of the alignment runway. From the displayed orientation of the runway, you can determine that the airplane is too far to the west (in this case, right) and a heading ajustment must be made by navigating the airplane slightly east (in this case, left) to align it with the end of the runway. Figure 15 shows the landing gear in the "down" position and the airplane almost aligned with the runway. Figure 16 shows the airplane "on" approach heading (To Airport 130) with respect to runway 13, which has a 130 degrees orientation. Figures 17 and 18 illustrate the engine throttled back to 1500 RPM with 10 degrees of flap, giving the airplane a descent rate of about 50 fpm. Figure 19 shows the airplane passing over the end of the runway at an altitude of 100 feet, with an airspeed of 80 mph. Figure 20 shows the airplane at an altitude of 30 feet, with an airspeed of 75 mph, and a descent rate of 115 fpm. Figure 21 shows the airplane at the moment of flare out, with the engine speed decreasing. Figure 22 shows touchdown and rollout. It is time to apply the brakes to bring the airplane to a stop, which will result in a successful landing as illustrated in Figure 23. Figure 23 shows the successful landing. At this point, the airplane will be reset to the takeoff position. Figure 24 shows what happens after a crash--the screen colors are reset, the screen is cleared, and the program exits. C C Mainline for the Airplane Program (VAX/VMS - FORTRAN 77) C C This program is a flight simulator which runs on a VAX C Computer and generates ReGIS as the graphics protocol. C C C ============================================================== C | Programmer ----> Patrick N. Smits ............... (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ==============================================================  ]FBa&fe@BJ%@& fEA  w "]"m"+l_ '_ (_  (_  ._  4_  @_  .Q||| 1164 122316 131 10514157553=6120212223?63242526-4527312829$36,44 32!33"34%37&38'39(40)41#3530*42.46+43149/47048@64A65B66C673514522500e* &\e* e*6 6  e*&\\e* e*&\   & & & &e* 6\   & & & &Pe* &\ CD @%:  L w 97 =  W@@ @Z7Z Z@7\@wTdP@ PBCD EfIA!h@!h?0j@ k,@׳BTe5>愾 >Fl.&ź+ k>''+$IriL?̨̔몿@   & & & &e* V@f\   & & & &e* &\ =7~ =  @'AA @  2 PB P 7&@!hA!h-ÍJ7,kt4yNq(:5;oS%]-1@!h& &&\&\&\e*&\& &&\&\&\ze*6\  & &Ve*&\&pf\ \&huj d "&  W=f&  (' 5   5&   r   &! +7^RE&L&E" &P!ۃe" stsuvxF3l3 # s ! ( 5 #"e!ePe"Pj3h3|3z  U $ V & l  fW b  u"\]?Err 59 USR not locked?Err 62 FORTRAN start fail(L6E@ p  Ep    f&AE@ lB`)  rrwʊ@ҋg f ^J R X΋ z+ d+ E wfFR z|  ] ? DW=W?o A @ @)O 鈇& e:   낃 (   3 E`E& N U%@" w< ?Err 60 stack overflowed ABCDEFGHIJKLMNOPQRSTUVWXYZ$. 0123456789fromin routine "" line ?Err (PC=U\N E\N MEP\ ' ' \\%&&Af&  e\f& 35w6ȋwR -`Y5  /5,4( 54- Z l ptj p&朢d 8 l 3 &   5@a3 s 5@55& &e& w @ @ 3@3 r3 p3!  #p   3 3?& & & & <e*e,& & & && & & && & & && & & &  CR$ $$ "` \ `C \ f B % % e@ ( B`  ` A@^   A ^”E eBCIE `-    D E A@D D e0bb %- ҕ* V \\PH\PPCE& & & &\& P   \e&&&&\\f&\& P\&5@5&E! !5 m5 ҕ   mU  @ 3@œ r@E rdt&6e:3 Dt~ t~3 r3 p3 X 3\ %c m@ ы@ e"     , ;3  ,FF3 F V  {` `3 VTl ,FFBFF R w  3oAsk D g  >  V[ `X DTB ;  J  @ B   D \$w V- D  ׬RDD D3 V3  43 F  `P B3 \ `@  TEx H3I \sJ (sL% sN DL׬I( R%RNN @ 3`"  ,    : JœH @ & %NR W w n  %D C& & EF    w *¥Ef  w DR%% $J J N ꇁ   Е `CBД w SD @` @Fz&&\\f&\J\\  `\ `\e\e\e\e\e\e\g\g\g\\%\%\%\%\%\'\'\'\ 6 U   U t`5 &\\&\\\\&\\\&\\\& \ \ \\\\ \ \& \ \ \& \ \ \& \v e3d & \35 5  XD&& &\ \&\\\ \\ \\? \\ >& & e:  STMT \\\\\\\\\& \\֋\܋\\ȋ\f&̋vTT 5 Eť1 ť+ť$    Tť0 H̋  <̋s  Ş@{s @ s ツ̋% L4 m 54 w*. %tw&4 4-45@E4   &vC j5EUe  & 4-/ . ^& &v    E5@ߋ*3 p5Up3 rwf&$  J"Kv v&f&  D\ +p f3! ,f$ f nH5$ 舄STOP --  %t&& fAP  t\ %t \\ \ \ \ & eN t RD \RD ^ t& e ,v,x\& e\&&&ew&e\&&$$$$ """"  7 !-n"l"H""H*"H<"H4"HD"HL"2"!! j!! Z!! Z!!tx= R  r b!! z!!txE r b!! z!! jv"!@A L M RN r b!! jv"!"! B S!C ,U 6V r b!! z!! jv"!"!@A ]! B ,_ `a r b!! z!! jv"!@A h f&f&  e `e& e  XeBv! N"Q$B(< U& 8 u @ 3 & @  PA &eW! r!'& f@! ! & et6 w w w ' B   ` ׮PU ׮P׮P!U, U1 0 55  5 55 U U& @&&=¥6 &$5 , &@ #& 5ff@ & 5 EE 爄 Mxdxd z :!&@.&S(T120) F: bexT& &\ \\\<& &\<\<\\@A3 e*&@A& & @A& & @A& & C P \& &\& & \  \&s55 T2$3 T   84 m E% w% C ˇɕ s  v U Eȋ #`5w \\&\\\  & eN t  RDZ0%~&$3R3~3D3Ze &S3`D Z~^\& ewj& e&&\&2& 05 <  @ C   @&5& fD "  5 @ A @ B  ` ֊ EU   w DA    @@wU%ff  f   N  5 bC l    eA H A  @  f)&% z&f& eDf&& B '7 |*? 2? &tM j#tM6? F'"6?tM ('tMpMrMrMpM 6&|M|M&@HCr"rMpM 6&MM&@HCz"r" ,A Z'z" ,A Z'vr"Fr"vz"Fz"rMpM 6&MM>?XzFd">Ed"MM hMMM "rMpM 6&VCMM x "7 F?r?N?tMMMMMx7 t?2M(83RM|?tQQTMM$x5RRRRRRRRRR (R!RxR9RdRRRRRR (RBRR9RdRRRRRR (RcRRdRdRRRRRR (RM?txO R2%MQ2%\NQPl R *RM?tQPQ,R,R DQ0R0RQPQ2R2R DQ6R6RxRl R *RM?tQPQ8R8R DQR>R DQBRBRxT@Q@Q R,,*W R2%4OQ2%OQXl R +RM?tQPQDRDR DQHRHRQPQJRJR DQNRNRxZl R ,RM?tQPQPRPR DQTRTRQPQVRVR DQZRZRx\#B&QBQ]@Q@Q R0+ R2% OQ2% OQ_l R ,RM?tQPQ\R\R DQ`R`RQPQbRbR DQfRfRxal R -RM?tQPQhRhR DQlRlRQPQnRnR DQrRrRxc@Q@Q RF, R2%PQ2%8PQel R -RM?tQPQtRtR DQxRxRQPQzRzR DQ~R~Rxgl R .RM?tQPQRR DQRRQPQRR DQRRxi@Q@Q R H- R2%\PQ2%PQkl R .RM?tQPQRR DQRRQPQRR DQRRxml R /RM?tQPQRR DQRRQPQRR DQRRxo@Q@Q R J. R2%PQ2%PQql R /RM?tQPQRR DQRRQPQRR DQRRxsl R 0RM?tQPQRR DQRRQPQRR DQRRxu@Q@Q RL/ R2%QQ2%QQwl R 0RM?tQPQRR DQRRQPQRR DQRRxyl R 1RM?tQPQRR DQRRQPQRR DQRRx{#B&QBQ|@Q@Q RN0 R2%PQ2%PQQ~l R 1RM?tQPQRR DQRRQPQRR DQRRxl R 42RM?tQPQRR DQRRQPQRR DQRRx#B&QBQ@Q@Q Rd1 R2%PR2%PRl R 2RM?tQPRRR DQRRQPRRR DQRRxl R J3RM?tQPRRR DQRRQPRRR DQSSx@R@R Rz2RM?txRM @txRM0@tQxRMT@txRM{@txRM@txPMA4$RxRM!AtxRMQAtxRMvAtxRMAtxRMAtxRMAtxRMBtx"#(R  (R(R \4(RS>SR Rx R `<VRMLtSR RxX R R ; RR[\R L^M R R (C@S@S 8R R  (CHSHS 8RRMLtRPSXPSPSR RMx` R R|<Rb \R LbM R R  CRSRS 8R R   CZSZS 8R R BbSbS 8R R  BjSjS 8RgRMLtRRRRx R,=iRMLtxk RRm\R LVM R R (CrSrS 8R R  (CzSzS 8RRMMtRSXSSR Rxr R R :>RMMtxuRM!MtQQQQxwvsfMG;F;FGwjMM&S(M(L)(AHLS)) Jw{M&[2JS[0,0]W(I1,R,S0)T(S1,I0)&S(E)W(I3)+P[,]+V[,]&P[250,352]W(I1)(T(S1)"Digital Equipment Corporation 1985"&P[170,10]W(I1)T(S4)"Welcome to"&P[170,80]W(I3)T(S5)"Smittys"&"P[120,160]W(I2)T(S4)"Flight School"&2P[50,440]W(I2)T(S1)"Programmer : Patrick N. Smits"&2P[50,460]W(I2)T(S1)"RT-11 Conv. : Rob Zahora, 1988"&/P[480,440]W(I2)T(S1)"Push Return to continue ? " *&+S(E)P[100,10]W(I1)T(S3)"Select Pilot Rating"& P[200,60]W(I2)T(S2)"1 - Beginner"&P[200,90]W(I2)T(S2)"2 - Solo"&$P[200,120]W(I2)T(S2)"3 - Private VFR"&$P[200,150]W(I2)T(S2)"4 - Private IFR"&#P[200,180]W(I2)T(S2)"5 - Instructor"&!P[170,250]W(I3)T(S3)"Selection ? "&T""&,P[100,420]T(S2)"Would you like help (Y/N) ? " *&+S(E)W(I3)P[200,50]V(B)[+400][,+400][-400](E)&2P[300,50]V[,+320]P[400,50]V[,+400]P[500,50]V[,+400]&2P[200,130]V[+400]P[200,210]V[+400]P[200,290]V[+400]&P[200,370]V[+300]W(I2)&6P[210,55]T(S2)"PF1"P[+45]T"PF2"P[+45]T"PF3"P[+45]T"PF4"&7P[210,135]T(S2)" 7 "P[+45]T" 8 "P[+45]T" 9 "P[+45]T" - "&7P[210,215]T(S2)" 4 "P[+45]T" 5 "P[+45]T" 6 "P[+45]T" , "&9P[210,295]T(S2)" 1 "P[+45]T" 2 "P[+45]T" 3 "P[+45]T"Enter"& P[210,375]T(S2)" 0 "P[+145]T" . "&W(I1)6P[230,85]T(S1)"Not"P[+72]T"Not"P[+72]T"Not"P[+72]T"Not"&;P[230,105]T(S1)"Used"P[+62]T"Used"P[+62]T"Used"P[+62]T"Used"&P[230,165]T(S1)"Gear"P[+60]T "Nose"P[+60]T"Flaps"P[+60]T"RPMs"&P[230,185]T(S1)" Up "P[+60]T "Down"P[+60]T" Up "P[+60]T" Up "&P[230,245]T(S1)"Turn"P[+60]T "Not "P[+60]T"Turn "P[+60]T"RPMs"&P[230,265]T(S1)"Left"P[+60]T "Used"P[+60]T"Right"P[+60]T"Down"&;P[230,325]T(S1)"Gear"P[+60]T"Nose"P[+60]T"Flaps"P[+65]T"Not"&P[230,345]T(S1)"Down"P[+60]T " Up "P[+60]T"Down "P[+60]T"Used"&)P[230,405]T(S1)"Apply Brakes"P[+80]T"Exit"&)P[230,425]T(S1)"Momentarily "P[+80]T"Game"&/P[250,460]W(I2)T(S1)"Push Return to continue ? " *&2S(E)P[100,10]W(I3)T(S2)"General Flight Information"& P[100,70]W(I1)3T(S1)"Apply up to 40 Degrees of Flaps for Lift"& P[100,90]W(I1)3T(S1)"Increase engine RPM to maximum for Take Off"& P[100,110]3T(S1)"Pull back on stick (Key 2) to rotate airplane"& P[100,140]8T(S1)"For touch and goes stay within 10 miles of Airport"& P[100,160]8T(S1)"For a new airport fly out of the 10 mile radius"&P[100,190]W(I3)%T(S1)"Beginner, Solo, and Private VFR"&P[100,210]W(I1)%T(S1)"have runway alignment displayed"&P[100,240]W(I3)(T(S1)"Private IFR and Instructor ratings"&P[100,260]W(I1)(T(S1)"Well, Good luck in the bad weather"&P[100,320]W(I2)$T(S1)"RPM and Climb register in x100"&P[100,340]W(I2)1T(S1)"Altimeter display x100, x1000, x10000"&P[100,360]W(I2)0T(S1)"Respective pointer Long Medium Short"&P[100,400]W(I3)7T(S1)"Note : RW indicates runway to be used for landing"&P[100,425]W(I1)6T(S1)"Multiply RW x 10 for heading (ie. RW 29 ---> 290"&W(I1)T(S0)"0"T(S1)&T(S1)&S(E)&(W(I3,R)P[0,348]V(B)[+767][,+130][-767](E)&"P[0,348]V(S)[,-326][+767][,+326](E)&W(I2,V))P[120,406]C[+50]P[+110]C[+50]P[+110]C[+50]&P[+110]C[+50]P[+110]C[+50]P[+110]C[+50]&.W(I2)P[105,460]T"MPH"P[+80]T"RPM"P[+70]T"Climb"1P[+60]T"Compass"P[+50]T"Horizon"P[+40]T"Altimeter"& W(I1)T(S0)&P[,]T""&P[,]T""&P[,]T""&P[,]T""&P[,]T""&P[,]T""&P[,]T""&P[,]V[,]&P[510,406]V[+15]P[610,406]V[-15]&P[,]T""&W(I3,C)&\[3;5HGear [3;67HFlapsP1p  @|٠?|@?¸eC.=OYyNESWPp>̙?@f@ff@A@AAAAAAffAAffBB BBBB33BffB̄BBffBBxBpB`BPB@B0BAA@AA@@?̙?L?>AA̩AAffA33AAAA33AffAAףyAeASA33IA9A0A0ApApAsA33yAAAffAAAA33AA̾AffAAAffA̹AAAffA̳A ׳A33A\A8B\BsB33BB0A@0AAA33ABBff$B&Bff(B)B+B33+B330B0B.Bff,B+B33)B(B&Bff BBBAAAAA33AyA|ÀAAyAlAfAff`ASA33@A0A0A@AYAfAfflAsA33zAHAĂAffAAA= A„ÃA33AlBlBnBffBffBBffnBfflBlBAA= AffAffAAAAAB{B33iBcB33`BcB33iB{B33BAffA33A33ĄAA33A̬A̩AiBAA33AA33AiBA33A33A̮AffAAȦB33~BfftB̄Bff@@ A ABffBffB̈B̉B33BffB̊BBBffBBffBBB̊BffB33B̈B̈BffBffPA0A0A@33@@@@@333A339AFAffPAYAfAfflẠA33AAA33pApAPAA33A33ABB|AyAiAlÀA'\BBd &f$&  h % % U@     < .`D A @ 耎     e $    e &f  ”E   CPQCQBm     v   &   5@%PeE T  <5eN N (E D A @  eb" b"    D A @ &f&f eD A @ eA @ e@ e&f&f    C r &@r&@r(&DsPA r C wA `t E ED &f& @ &   6&C     D  6c6#m       # 6 ඌ cmd ` ҕ- 9 ` RE@ e0Ґ (   ) eC Hҕ %% ҕ0ҕ. ҕ0 Ґ+-  Ґʕ/ e:rC e e ҕ*  'BPBA  &    1@rz5@3e-?v9?uοMc?kA`5?I2f?(*@ A/rz?[7r(D  e@ & & f @ A&    &&& r \A@EA  \w:@  &e\ b\b\b\b\&%\ "\"\"\"\&\ \\\\DD A @   @ @H7 Q2" LRRXv"""Xvr"X X:r"vz"X  X:z"vr"r"vz"z"lXX Z'"r" L)'Rr"!Z@|Xz" h)Z|X$r" )vz"r"XX rXv|X@lXX D"&r" *vz"r"XX rXv|X@:XZX D"(fX"""d2""" .*@h",l"h D*Xh".l" Z*hX"0l"Z p*hX"2vr"jXXX (Xvz"jXXX (XL"Bh"d"hz p"hXjz  -6X"YpY@rz  +RQtdXdXX XXx8X"YpY@|z  `+RQtdXdXXx:X|X '@rz  +RQtdXdXX 'XX XXx<X|X '@|z  ,RQtdXdXX 'XXx>X" Yp Y@rz  b,RQtX XXx@X"(Yp(Y@|z  ,RRtXxBX|X '@rz  ,R)RtX 'XX XXxDX|X '@|z  >-R?RtX 'XXxNRVRtv"jXXX XXzXt"DzXWX zXp-"" LRXX XXxP ~.QRRtdXdXd" XX" XXvd""YY YYxSRRtzXt"DzXWX zX2."" LR Y Y YYxU ~.VRRtdXxX7 SZpCRYZzDjY0Y."/vS (v zYzYvS (vS (@v |Y|YvS (HYFY FYFY d1FYP/ /////0*0H0`0~0FYP+000 d1"2YBY" d1%2YY" 1;2Yv<"&@<" 1> 2Y$"" 0"B 1C,2Y*" d1Fv*"&A*" d1H-2Y*"B d1Kv*"XA*" d1M 3ND" B 1Z BD"PD" ª 01Z D"R<"B F1ZB<"T<"ª \1Z<"V d1Wv""@rY" 1v""SNrYrYZ" ""SNrYrYL" 1vD" B~Y~Y ,NrYrY]v*"*"rYv<"pC:JYvJY""SN""""""pD 2ZpD""a"" 22H""c"YL"YvRYY :RYvJYN""@RY|L"pz  2v<"&@<"fvjY@ZYvZY""Y>CY ,XCbYvbY<""YYY S4"vL"N4"L"L" 3 $=lL" 3HL"nL" &3H<"pL" 83"rD" 42"l2"g ^32"u2" r3h2"wp"@Y 3yv""S"""" B 3H""|FY 3~HYlHY 3 */tS StxtSWStDYDYDYx '7 lSv""TNTYvYY"ZYY BYY 8x!Z  BYY 8!v*"TYY BYY 8!Y  BYY 8!4" ,TNTYY BZZ 8T!4" x5Y  BZZ 8!%4" 5Y  BZZ .8!'hZd2"ZZ 4DYvYT4D"Z Z Z B(Z(Z 8!Z  B0Z0Z 8!!N!v<"N<"ND"8Z8Z D!v<"N<"D"@Z@Z D!L" YY'dxdHZvL"HZ :YvYCnlTNTYTVAY"ZJZJZ BRZRZ 8!Z  BZZZZ 8!Y'xbZvL"bZ :YvYzEnlTNTYTVA"ZY"ZdZdZ BlZlZ 8!Z  BtZtZ 8!Y''x'|ZvL"|Z :YvYTnlTNTYvZY"Z~Z~Z  BZZ 8YZ   BZZ 8Y;p!!jp"!jz  9=TSt!"xTSt!!x!!!"Ap"!jp"!jz  b9CTSt""xTSt!!x!"!"Gp"!jp"!jz  9ITSt""xTSt!!x!"!"Mp "!jp "!jz  &:OTTt " "xTTt!!x! "! "Sp"!jp"!jz  :UTTt""xTTt!!x!"!"Yp"!jp"!jz  :[TTt""xTTt!!x!"!"_p"Yjp"Yjz  L;aTTt""xTTtYYxY"Y"ep"!jp"!jz p"!jz p "!jz  ;gT4Tt""" "xT4Tt!!!!x!"!"!"! "tp"" 6<TMTtYYYt"DYY Y<Yxw""p"" <TgTtYYYt"DYY Yh<Yx{""p"" <TTtYYYt"DYY Y<Yx""Y"TTtYY2"Yx7 hUZZZZ@Z Z <=pp"Z d=Zp"Z x=Zp"Zj"D|z  =Zl" = 4"@ =Z"""C =Z$"d" =Z&ZZZZ(R(Z >Z@Z Z=*Z >,l" <>."" L>0VUtx2V3Utx4" 7 rVXUtxlZ >Z;lZ >Z=lZ >VUtx?lZ >VUtxAlZ ?VUtxClZ .?V VtxElZ J?V8VtxGlZ f?VdVtxIVXUtxlZ ?VUtxLlZ ?VUtxNlZ ?VUtxPlZ ?V VtxRlZ @V8VtxTlZ @VdVtx]H""H*"H<"H4"HD"HL"2""""""""  r bZZ zp  ZZ @s7 ڒVZ@IJp":[ @! I"v"d"['"[[ $AZ@[&[ 8AZ@[(vWv[XzE,\,\ [vWv[XzE4\4\ [>C[<\<\ @[D\D\ |[> BvL"X BL\L\ @[T\T\ ~["\"8[[ B@h[/l[h BXh[1l[h 4BXh[3["z[d"z[z[ \B@hz[7lz[h rBXhz[9lz[^ B;lz[ B=|[~['[[[B|[D"TZ BZ|[d"|[D|[[L"[~[D[TZ BZ~[d[~[G>pBvL"X B\\\\ [[D[p]8D~[d\d\ H[ \[\[r]8hf\f\ H[\p] H[\Dr]\~[h\h\ H[$\ \ Z\ [\  [$\ [v[[D[v[[D\v[Zj\j\ T"v\[r\r\ V"v\ [z\z\ X"v[[\\ Z" \  [\  "[\  *[$\  2[v[W[v\W\v[[\\ \"v\"[\\ ^"v\*[\\ `"v[2[\\ b"" H[[v[NX\\ D\\ t[[  [X\\ v[\"\Lb"\\ V@\\ x[[dt[[Zv[ (Dx[ (D[[R"P[Z"R[g([P[([R[i@P[@R[ [&F[R"T[Z"V[kR(T[ ~FT[mR(T[ FT[oR(V[( F(V[qR(V[Z FZV[s@T[@V[ [jFl" GvL"HC Ix[F Izl"ll" Gl"}>[p"v"d"hl[jz  JG<[p"pp"<[ GWVtl"ZT"\"V"^"X"`"Z"b"xpp">[ GWVtl"ZT"\"V"^"X"`"Z"b"x[L"C H[L"pC &H[L"HC C[[[ [\\ 8T"[ [\\ 8V"[ [\\ 8X"[ [\\ 8Z"[  [\\ 8\"[  []] 8^"[  []] 8`"[  []] 8b"[ H[NX[[]@]] H[NX[>C[[>C[\[ [ ] ] 8\[[  \(](] 8d[[ [0]0] 8b[[  \8]8] 8j[>HC[[>C[\v[N0X \v[0X\ \ [@]@] 8`[ \  \H]H] 8h[\ [P]P] 8^[\  \X]X] 8f[" H[NX[[ D`]`] t[[  "8Xh]h] v[[R"X[Z"Z[j(t[X[Z[v[ (DZ[@X[@Z[ [&Odt[\[d[v[ (Dd[dt[b[j[v[ (Dj[dt[`[h[v[ (Dh[dt[^[f[v[ (Df[l" Ql"ll" Pl"WWWtl"ZT"\"V"^"X"`"Z"b"xWWtb[j[\[d[`[h[^[f[xWCWtxll" PWKWtl"ZxWKWtl"Zx QWKWtl"ZxWKWtl"Zx Qn"7 ^@X " LHXLXt]vd"TX|]t] |]r"t]  |]z""2"kf\X&\[1;4H&N &\[1;4H&N &\[1;4H&S &\[1;4H&S +& E of Airport +& E of Airport +& W of Airport +& W of Airport +&Miles  Airport &Heading&RW&&\[1;4H Runway LengthLeftUsed + Airport &Heading&RW&&P1p =5IA>>,E0Y&S(M1(L25)(AH000L50S50))S(M2(L50)(AH120L50S50))S(M3(L75)(AH240L50S50))&S(E)\[1;1H[2J $@L?#> ?f@ff@L?#> ?f@ff:Y& P[120,406]V[,]& P[230,406]V[,]& P[340,406]V[,]& P[450,406]V[,]& P[670,406]V[,]&P[,]V[,]&\[3;10HP1p&\[3;72HP1p&\[3;37HP1p&\[23;44HP1p =.IA??|@G@=.IA??|@G@6KZ&&P[250,50]W(C)T(S3)"Nice Landing"S(T120)& P[250,50]T(S3)"Nice Landing"T(S1)&'P[200,50]W(C)T(S3)"Crash Landing"S(T120)&(P[120,+40]T"You missed the runway"S(T120)&)P[120,+40]T"Descent rate too steep"S(T120)&(P[120,+40]T"Air Speed is too high"S(T120)&'P[120,+40]T"Landing Gear is up"S(T120)&'P[120,+40]T"Hit short of runway"S(T120)&'P[120,+40]T"Ran out of runway"S(T120)sZ&P[0,500]@: W(I3)P[,]V(S)[,](E) &P[0,500]@: W(I3)P[,]V(B)[,](E) +P[,] +W(P) +V[,] + @;&@&@.&P[0,500]@: P[,]V(B)[,](E) +P[,]V[,]V(B)[,](E)  E?pIA=.;FF: >?ӛ@; E?pIA=.;FF: >?ӛ@; 3}^t]=5IA~@R~@RFrom To F: beeC.=OTT: Up 10% 20% 30% 40%Down Up BrakesAFABeC.=O=4file : SNDBOX::DUA1:[ZAHORA.FLY]README.TXT rev : 3/07/88 FLY.FOR is an RT-11 FORTRAN IV flight simulator for ReGIS terminals (VT125s, etc.). It is a modification of FLYING.FOR, a VAX/VMS FORTRAN 77 program by Patrick N. Smits (rev. 10/29/85). The program was origionally written to demonstrate ReGIS programming techniques. The following files are available in SNDBOX::DUA1:[ZAHORA.FLY] - FLY.FOR;1 134 7-MAR-1988 17:27 - FORTRAN IV source code F.FOR;1 30 7-MAR-1988 17:30 - source code divided for overlay structure F1.FOR;1 39 7-MAR-1988 17:36 F2.FOR;1 67 7-MAR-1988 17:37 FLY.COM;1 2 7-MAR-1988 17:31 - command file to compile and link program with overlays FLYEIS.SAV;1 91 7-MAR-1988 17:32 - EIS/FPU version requires 15400 words to run FLYTHR.SAV;1 73 7-MAR-1988 17:34 - version with no hardware dependency requires 12000 words to run FLYING.FOR;1 117 7-MAR-1988 17:23 - origional VAX/VMS FORTRAN 77 program FLYING.DOC;1 30 7-MAR-1988 17:26 - documentation for the origional program README.TXT;4 3 7-MAR-1988 17:xx - this file C C FLY.FOR - FLIGHT SIMULATOR FOR REGIS TERMINALS C (DOUBLE PRECISION VERSION) C C RT-11 FORTRAN IV CONVERSION BY C C ROB ZAHORA DIGITAL EQUIPMENT CORPORATION C C REVISION 3/05/88 C C C THIS PROGRAM IS A MODIFICATION OF THE VAX/VMS FORTRAN 77 PROGRAM C FLYING.FOR BY PATRICK N. SMITS (REV. 10/29/85). C C C THE FOLLOWING MODIFICATIONS TO THE ORIGIONAL PROGRAM HAVE BEEN C MADE - C C C 1. SUBROUTINES, COMMON AREAS AND VARIABLES HAVE BEEN RENAMED TO C BE 6 OR LESS CHARACTERS LONG WITH NO UNDERSCORES. VARIABLES C NAMED SIMILAR TO FORTRAN IV KEY WORDS HAVE BEEN RENAMED. A C LISTING OF THE CHANGES IS PRESENTED LATER. C C 2. IMPLICIT INTEGER*4 STATEMENTS HAVE BEEN REPLACED BY EXPLICIT C LISTING OF INTEGER VARIABLES C C 3. MADE INTEGER*4 VARIABLES INTEGER*2 C C 4. MADE PLANXM,PLANYM REAL*4 C C 5. USED RT-11 SYSTEM SUBROUTINES INSTEAD OF VAX/VMS CALLS C C ITTINR - GET CHARACTER FROM KEYBOARD C SECNDS - GET SECONDS PAST MIDNIGHT C RAN - GENERATE RANDOM NUMBER C C C 6. VAX/VMS SPECIFIC STATEMENTS HAVE BEEN COMMENTED OUT WITH "CVAX" C C 7. CHANGED VARIOUS FORTRAN ITEMS AS FOLLOWS - C C FROM TO C -------------- ---------------- C WRITE(* WRITE(7 C READ(* READ(5 C C CHARACTER*x BYTE(x) 2-DIMENSIONAL ARRAYS ADDED AS C NEEDED WITH INDEXING WHEN CALLED. C CHANGED FORMAT STATEMENTS AS NEEDED. C C LOG DLOG C COSD DCOS(PI/180 * C SIND DSIN(PI/180 * C ATAND 180/PI * DATAN( C ATAN DATAN C SIN DSIN C COS DCOS C ABS DABS C INT IDINT C **.5 DSQRT C C BLANK LINES LINES STARTING WITH C C C C 8. REDID RANDOM NUMBER GENERATION C C 9. ADDED SOME DBLE() IN FRONT OF SOME RAN() C C 10. ADDED xx.0D0 TO SOME FIXED CONSTANTS IN .EQ. .LE. .GE. STATEMENTS C C 11. USED 2 SECOND DISPLAY OF MESSAGES INSTEAD OF 4 SECOND DISPLAYS C C 12. IN SUBROUTINE SCRDIS, REPLACED DO LOOPS WITH REAL VARIABLES C WITH ONES WITH INTEGER VARIABLES (Z =) C C 13. PRECALCULATED COMMONLY USED FACTORS (SEE FACTn, IFACTn, RADDEG) C AND TOOK CONSTANT CALCULATIONS OUT OF DO LOOPS, MADE REAL C CONSTANTS INTEGERS IN REAL TO INTEGER CALCULATIONS. USED C MULTIPLICATION BY A CONSTANT INSTEAD OF DIVISION BY A CONSTANT C TO INCREASE EXECUTION SPEED. C C 14. RENUMBERED STATEMENT NUMBERS C C 15. USED SCREEN FOR VT125 (767 HORIZONTAL PIXELS INSTEAD OF 798) C C C THE FOLLOWING IMPROVEMENTS HAVE BEEN MADE - C C 1. IN THE ORIGIONAL VERSION, THE INSTRUMENT DISPLAYS WERE ALL FIRST C CLEARED AND THEN REWRITTEN. THIS CAUSED THE DISPLAYS TO FLICKER C ANNOYINGLY. CODE WAS ADDED TO UPDATE EACH INSTRUMENT ONLY WHEN C A CHANGE HAD OCCURED. COMMON AREA /INSTRO/ AND ASSOCIATED C VARIABLES WERE ADDED TO DO THIS. C C 2. INSTEAD OF EXITING THE PROGRAM AFTER A CRASH, THE PROGRAM C NOW GOES TO A NEW RUNWAY. VARIABLE RESTART HAS BEEN ADDED TO C FLAG THIS OPERATION. USE THE "." AT ANY TIME TO EXIT THE PROGRAM. C C 3. TO ALLOW FOR AN OPTIMUM RT-11 OVERLAY STRUCTURE, THE CODE FOR C GETTING THE PILOTS EXPERIENCE HAS BEEN MOVED FORM SUBROUTINE C GETKEY TO SUBROUTINE SCRDIS. THE "3" VALUE FOR THE SET ARGUMENT C FOR GETKEY HAS BEEN CHANGED TO "2". C C C********************************************************************** C C SUBROUTINES HAVE BEEN RENAMED AS FOLLOWS - C C C Plane_Calculate_Position CALPOS C Plane_Get_Key(Set,Val) GETKEY C Plane_Instruments_Display (Control) INSTRU C Plane_Landing_Check LANDCK C Plane_Runway_Display(Control) RUNWAY C Plane_Select_Airport SAIRPT C Plane_Set_Color(Set,M_L,C_H,C_L,C_S) SCOLOR C Plane_Screens_Display(Screen) SCRDIS C Plane_Takeoff_Position TAKOFF C C C********************************************************************** C C COMMON AREAS HAVE BEEN RENAMED AS FOLLOWS - C C /Atitude_Parameters/ ATTPAR C /Flight_Controls/ FLIGHT C /Instrument_Parameters/ INSTRP C /Landing_Test/ LAND C /Plane_Location/ PLANE C /Pilot_Experience/ PILOT C /Runway_Parameters/ RNWAYP C C C********************************************************************** C C VARIABLES WITH MORE THAN 6 CHARACTERS OR CONTAINING UNDERSCORES C HAVE BEEN RENAMED ACCORDING TO THE FOLLOWING TABLE - C C C AIRPORT_DISTANCE ADIST C AIRPORT_DISTANCE1 ADIST1 C AIRPORT_DISTANCE2 ADIST2 C AIRPORT_HEADING AHEAD C AIR_SPEED AIRSPD C ALTITUDE ALTITD C ALT_SIZE ALTSIZ C ASCII_TO_FROM ASCITF C A_A AA C A_D AD C C BEST_CLIMB_RATE BCLIMB C BRAKES_APPLIED BRAKEA C BRAKES_OFF BRAKOF C BRAKES_ON BRAKON C C CANOPY_LEFT_HALF_X CANLX C CANOPY_LEFT_HALF_Y CANLY C CENTER_LINE_X1 CLINX1 C CENTER_LINE_X2 CLINX2 C CENTER_LINE_Y1 CLINY1 C CENTER_LINE_Y2 CLINY2 C CHANNEL CHANNL C CLIMB_FACTOR CLMBFT C CLIMB_RATE CLMBRT C CLOSE CLOSEV C COLOR_HUE COLORH C COLOR_LIGHTNESS COLORL C COLOR_SATURATION COLORS C COMPASS COMPAS C COMPASS_LETTER COMPSL C COMPUTE_AIR_SPEED CMPTAS C CONTROL CONTRL C CONTROL_X CTRLX C CONTROL_Y CTRLY C C_H CH C C_L CL C C_S CS C C DASH_X DASHX C DASH_Y DASHY C DISTANCE DIST C C EXPERIENCE EXPER C C FLAP_POSITION FLAPP C FUSLAGE_LEFT_HALF_X FUSLX C FUSLAGE_LEFT_HALF_Y FUSLY C C GAMMA_2 GAMMA2 C GAMMA_3 GAMMA3 C GEAR_DOWN GEARDN C GEAR_POSITION GEARPS C GEAR_UP GEARUP C C HORIZON HORIZ C C INT_ALT INTALT C C KEY_PROCESS_COUNT KPROCT C C LANDING_FLAG LANDFL C LANDING_GEAR LANDGR C C MONO_LIGHTNESS MONOLT C M_L ML C C OLD_BRAKES OLDBRK C OLD_FLAPS OLDFLP C OLD_GEAR OLDGR C ON_LINE ONLINE C OPEN OPENV C OPEN_CLOSE OPENCL C C PATTERN PATERN C PLANE_X PLANEX C PLANE_X_MILES PLANXM C PLANE_Y PLANEY C PLANE_Y_MILES PLANYM C PROP_X PROPX C PROP_Y PROPY C C RESULTS RESULT C RUNWAY_ANGLE_X RNWYAX C RUNWAY_ANGLE_Y RNWYAY C RUNWAY_DISPLAY_FLAG RNWYDF C RUNWAY_HEADING RNWAYH C RUNWAY_LENGTH RNWAYL C RUNWAY_X RNWAYX C RUNWAY_Y RNWAYY C R_S RS C C SIGN_BIT SIGNBT C SPEED_MULT SPEEDM C SPREAD_1 SPRED1 C SPREAD_2 SPRED2 C STALL_SPEED STALL C C TAIL_X TAILX C TAIL_Y TAILY C TERMINAL_MODE TERMIN C TO_FROM TOFROM C TURN_RATE TURNRT C C V_MAX VMAX C C WING1_X WING1X C WING1_Y WING1Y C WING2_X WING2X C WING2_Y WING2Y C WING3_X WING3X C WING3_Y WING3Y C C Z_ALTITUDE ZALTIT C C********************************************************************** C C Mainline for the Airplane Program (VAX/VMS - FORTRAN 77) C C This program is a flight simulator which runs on a VAX C Computer and generates ReGIS as the graphics protocol. C C C ============================================================== C | Programmer ----> Patrick N. Smits ............... (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================== C C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C +++++++++++++ Compiling and linking instructions +++++++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C ++++++++ Extract this MAIL message to a file named : +++++++++ C ++++++++ FLYING.FOR (and edit out the MAIL header) +++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C Important : This file has been sent by NMAIL. NMAIL appends C the file with a header and a trailer. You MUST edit out these C lines that appear at the beginning and end of this message! C C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C +++++++++++ Compile it --> Type : FORTRAN FLYING +++++++++++ C +++++++++++ Link it --> Type : LINK FLYING +++++++++++ C +++++++++++ RUN it --> Type : RUN FLYING +++++++++++ C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C C ############################################################## C ############# Define the Appropriate Variables ############### C ############################################################## C INTEGER*2 CONTRL,SCREEN,VAL INTEGER*2 ASX1,ASY1,RPMX1,RPMY1,RCX1,RCY1,CX1,CY1 !/INSTRP/ INTEGER*2 AX1,AY1,AX2,AY2,HLX1,HLY1,HRX1,HRY1 !/INSTRP/ INTEGER*2 OASX1,OASY1,ORPMX1,ORPMY1,ORCX1,ORCY1 !/INSTRO/ INTEGER*2 OCX1,OCY1 !/INSTRO/ INTEGER*2 OAX1,OAY1,OAX2,OAY2,OAX3,OAY3 !/INSTRO/ INTEGER*2 OHLX1,OHLY1,OHRX1,OHRY1 !/INSTRO/ C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 EXPER !/PILOT/ INTEGER*2 LANDFL !/LAND/ C Byte ESC C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 SPEEDM Real*8 PLANEX,PLANEY,ADIST,RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT1 C Common /INSTRP/ ASX1,ASY1, + RPMX1,RPMY1,RCX1,RCY1,CX1,CY1,AX1,AY1, + AX2,AY2,HLX1,HLY1,HRX1,HRY1 C Common /INSTRO/ OASX1,OASY1, + ORPMX1,ORPMY1,ORCX1,ORCY1,OCX1,OCY1,OAX1,OAY1, + OAX2,OAY2,OAX3,OAY3,OHLX1,OHLY1,OHRX1,OHRY1 C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /PILOT/ EXPER,SPEEDM C Common /LAND/ LANDFL C DATA OASX1,OASY1/120,406/ DATA ORPMX1,ORPMY1/230,406/ DATA ORCX1,ORCY1/340,406/ DATA OCX1,OCY1/450,406/ DATA OAX1,OAY1,OAX2,OAY2/670,406,670,406/ DATA OAX3,OAY3/670,406/ DATA OHLX1,OHLY1,OHRX1,OHRY1/670,406,670,406/ C Data ESC /27/ C Data Flaps /0/ Data OLDFLP /1/ C Data LANDGR /0/ Data OLDGR /1/ C Data Brakes /0/ Data OLDBRK /0/ C Data OPENCL /0/ C Data LANDFL /0/ C DATA FACT1 /0.000189393939D0/ ! /5280. C C Pilot experience ranges from : C 1 - Beginner C 2 - Solo C 3 - Private IFR C 4 - Private VFR C 5 - Instructor C C C Set the Runway_Display_Flag to off...(Not on Screen)....... RNWYDF = 0 C C Runway toggle for macrograph display....................... C By using a macrograph the screen is updated slightly faster C because the runway coordinates are passed only once and used C to display (draw) the runway and then complement (erase) the C runway. Toggle = 1 C C Set Initial Instrument parameters.......................... AIRSPD = 0.0D0 RPM = 0.0D0 HORIZ = 0.0D0 CLMBRT = 0.0D0 TURNRT = 0.0D0 ALTITD = 0.0D0 COMPAS = 000 C C C Allocate and Initialize the terminal driver................. Call GETKEY(1,Val) C C Draw Screen 1 ............. Introduction to Flight Simulator Screen = 1 Call SCRDIS(Screen) C C Draw Screen 2 ............. Draw cockpit view on the ground. Screen = 2 Call SCRDIS(Screen) C C Clear any macrographs that might be loaded in the terminal.. WRITE(7,5) 5 Format(1X,'@.') C C Ready to go... Select an random airport..................... Call SAIRPT C C Position the airplane in the takeoff position............... Call TAKOFF C C Calculate and Display the new Instrument parameters......... Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the Runway at it's current location... CONTRL = 1 Call RUNWAY(CONTRL) C C Pause for 2 seconds......................................... WRITE(7,10) 10 Format(1X,'S(T120)') C C C ************************************************************ C Initial Takeoff sequence (Down the Runway and into the blue) C ************************************************************ C C Calculate and Display the new Instrument parameters......... 15 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the Runway at it's current location... CONTRL = 1 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C C Check if it is time to go to Phase 2........................ If(ADIST*FACT1 .GT. 3.) Goto 30 C Goto 15 C C ************************************************************ C Climb out and locate the destination for landing............ C ************************************************************ C C Generate a landing location for the Airport................. 20 Call SAIRPT C C Calculate and Display the new Instrument parameters......... 25 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C If(ADIST*FACT1 .LE. 10.0D0) Goto 30 If(ADIST*FACT1 .GT. 100.0D0) Goto 20 C Goto 25 C C ************************************************************ C Display Airport for landing once distance is < 10 miles..... C This is the alignment pattern for Beginner,Solo, Private VFR C ************************************************************ C C C Calculate and Display the new Instrument parameters......... 30 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Calculate and Display the runway for landing................ CONTRL = 3 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C If(ADIST*FACT1 .LE. 3.0D0) Goto 35 If(ADIST*FACT1 .GT. 10.0D0) Goto 20 C Goto 30 C C C ************************************************************ C This is the landing sequence - Similar to takeoff........... C ************************************************************ C 35 Continue C C Calculate and Display the new Instrument parameters......... 40 Call INSTRU C C Calculate and Display the Airplanes new position............ Call CALPOS C C Display the Runway at it's current location................. CONTRL = 1 Call RUNWAY(CONTRL) C C Get the Pilot's next move for flight control................ Call GETKEY(2,Val) C C Check if it is time to display runway orientation........... If(ADIST*FACT1 .GT. 3.) Goto 30 C Goto 40 C C End of the main line ....................................... END C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Calculate Position C C This subroutine guides the Pilot by displaying the airplanes C current position with respect to the airport he is at or the C airport he will be landing at (ie. directions to the airport). C C Subroutine CALPOS C INTEGER*2 FROM,I,TO INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 EXPER !/PILOT/ C Byte ESC C BYTE ASCITF(4,2) C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 SIGNBT Real*8 Z,PLANEX,PLANEY,ADIST,SPEEDM Real*8 RNWAYL Real*4 PLANXM,PLANYM Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT1,FACT2,RADDEG C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PILOT/ EXPER,SPEEDM C Data ESC /27/ Data From /1/ Data To /2/ Data ASCITF /'F','r','o','m',' ','T','o',' '/ C DATA FACT1 /0.000189393939D0/ ! /5280. DATA RADDEG /57.2957795D0/ ! 180/PI C C Calculate new Position and heading to airport........ C Z = Float(COMPAS)*0.017453292 + 3.1415927 C !0.017453292= /360. * (2.*3.1415927) FACT2 = AIRSPD*SPEEDM PLANEX = PLANEX - DSIN(Z)*FACT2 PLANEY = PLANEY - DCOS(Z)*FACT2 ADIST = DSQRT(PLANEX**2 + PLANEY**2) If(PLANEX.EQ.0.0D0) PLANEX = 0.1 SIGNBT = 1.0 If(PLANEY.LT.0.0D0) SIGNBT = -1.0 If(PLANEX.GT.0.0D0) AHEAD = + 270 - IDINT(DATAN(PLANEY/PLANEX)*RADDEG + .5*SIGNBT) If(PLANEX.LT.0.0D0) AHEAD = + 090 - IDINT(DATAN(PLANEY/PLANEX)*RADDEG - .5*SIGNBT) C C ******************************************************** C ********** Field of view from the Cockpit ************** C ******************************************************** C Determine if the plane is flying To or From the Airport. C Determine if the Runway can be seen from the cockpit.... C C First , Set Compass angle to 0 degrees for viewing and C then normalize Airport Heading to determine if Airport C is within the viewing area of 180 degree arc (w/cockpit) C Alpha is the normalized angle variance of the Airport C Heading with respect to the current Compass heading..... C TOFROM = From Alpha = AHEAD - COMPAS If(Alpha.LT.000) Alpha = Alpha + 360 If(Alpha.GE.360) Alpha = Alpha - 360 If(Alpha.GE.270) TOFROM = To If(Alpha.LE.090) TOFROM = To C C C Display the airplanes new position relative to the airport. PLANXM = SNGL(PLANEX*FACT1) PLANYM = SNGL(PLANEY*FACT1) C If(ALTITD.LE.20.0D0 .AND. ADIST.LE.RNWAYL .AND. + TOFROM.EQ.To) Goto 50 C C This display is for long distance directional information.... If(PLANYM.GT.0.0D0 .AND. PLANYM.GE.1.0D0) WRITE(7,5) + ESC,ESC,INT(PLANYM) If(PLANYM.GT.0.0D0 .AND. PLANYM.LT.1.0D0) WRITE(7,10) + ESC,ESC,PLANYM C If(PLANYM.LT.0.0D0 .AND. ABS(PLANYM).GE.1.0D0) WRITE(7,15) + ESC,ESC,INT(ABS(PLANYM)) If(PLANYM.LT.0.0D0 .AND. ABS(PLANYM).LT.1.0D0) WRITE(7,20) + ESC,ESC,ABS(PLANYM) C If(PLANXM.GT.0.0D0 .AND. PLANXM.GE.1.0D0) WRITE(7,25) + INT(PLANXM) If(PLANXM.GT.0.0D0 .AND. PLANXM.LT.1.0D0) WRITE(7,30) + PLANXM C If(PLANXM.LT.0.0D0 .AND. ABS(PLANXM).GE.1.0D0) WRITE(7,35) + INT(ABS(PLANXM)) If(PLANXM.LT.0.0D0 .AND. ABS(PLANXM).LT.1.0D0) WRITE(7,40) + ABS(PLANXM) C 5 Format(1X,A1,'\',A1,'[1;4H', I7 ,1X,'N ',$) 10 Format(1X,A1,'\',A1,'[1;4H',F7.2,1X,'N ',$) 15 Format(1X,A1,'\',A1,'[1;4H', I7 ,1X,'S ',$) 20 Format(1X,A1,'\',A1,'[1;4H',F7.2,1X,'S ',$) 25 Format('+', I7 ,1X,'E of Airport ',$) 30 Format('+',F7.2,1X,'E of Airport ',$) 35 Format('+', I7 ,1X,'W of Airport ',$) 40 Format('+',F7.2,1X,'W of Airport ',$) C WRITE(7,45) IDINT(ADIST*FACT1),(ASCITF(I,TOFROM),I=1,4), + AHEAD,IDINT(RNWAYH*0.1) 45 Format('+', + I4,1X,'Miles ',4A1,' Airport ',I3,1X,'Heading',1X,'RW',1X,I2) C Goto 65 C C This display is for short distance directional information.... 50 WRITE(7,55) ESC,ESC,IDINT(RNWAYL),IDINT(ADIST), + IDINT(RNWAYL-ADIST) C C 55 Format(1X,A1,'\',A1,'[1;4H','Runway Length',I5,2X,'Left',I5, + 2X,'Used',I5,$) C WRITE(7,60) (ASCITF(I,TOFROM),I=1,4), + AHEAD,IDINT(RNWAYH*0.1) 60 Format('+', + 2X,4A1,' Airport ',I3,1X,'Heading',1X,'RW',1X,I2) C Goto 65 C 65 WRITE(7,70) ESC 70 Format(1X,A1,'P1p') Return End C C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C C This subroutine allocates the terminal driver and gets one C key from the terminal buffer at a time. The input section C of this routine will process up to four keys per call ( or C until the input buffer is empty.) C C Subroutine GETKEY(Set,Val) C INTEGER*2 BRAKOF,BRAKON,CHAR,GEARDN,GEARUP,KPROCT INTEGER*2 SET,VAL INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 LANDFL !/LAND/ C CVAX Include '($IODEF)' CVAX Include '($TTDEF)' C BYTE Device(3) Byte ESC Integer*2 TERMIN(2) C Real*8 CMPTAS,STALL Real*8 BCLIMB,CLMBFT,VMAX,Drag Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /LAND/ LANDFL C Data Device /'T','T',':'/ C Data GEARDN,GEARUP/0,1/ C Data BRAKOF,BRAKON /0,1/ C Data ESC /27/ C STALL = 60. C VMAX = 250. C Goto (5,10), Set C C Get the terminal's channel number for the QIO. CVAX 100 Call Sys$Assign (Device,CHANNL,,) C 5 CALL IPOKE("44,"10000 .OR. IPEEK("44)) !RT-11 CONSOL SPECIAL MODE CALL IPOKE("44,"100 .OR. IPEEK("44)) !RT-11 FB,XM CONTINUE IF NO CHAR C C Get the terminal's current mode of operation. CVAX status = Sys$QIOW (,%VAL(CHANNL), %VAL(IO$_SENSEMODE), CVAX 1 IOSB,,,%REF(TERMIN(1)),%VAL(8),,,,) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) C C Set the Host Sync flag in the terminal characteristics word. CVAX TERMIN(2) = IOR (TERMIN(2),TT$M_HOSTSYNC) C C Temporarily set the terminal to host sync mode to eliminate C any overrun which may occur because of the lack of XON-XOFF. CVAX status = Sys$QIOW (,%VAL(CHANNL),%VAL(IO$_SETMODE),IOSB,,, CVAX 1 %REF(TERMIN(1)),%VAL(8),,,,) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) Return C C ------------------------------------------------------------ C C Get the key just input..... 10 KPROCT = 0 15 Char = 00 CVAX status = Sys$QIOW (, CVAX 1 %VAL(CHANNL),%VAL(IO$_READVBLK+IO$M_NOECHO+IO$M_TIMED), CVAX 2 IOSB, , , %REF(Char), %VAL(1), %VAL(0), , , ) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.LT.0) GO TO 90 C C Determine which key has been pressed and set parameters...... Goto (20,25,30,35,40,45,50,55,60,65), Char-47 Goto (70,75,80), Char-43 C Goto 90 C C Key = 0 20 Val = 0 Brakes = BRAKON Goto 90 C C Key = 1 25 Val = 1 LANDGR = GEARDN Goto 85 C C Key = 2 30 Val = 2 HORIZ = HORIZ+1. Goto 85 C C Key = 3 35 Val = 3 Flaps = Flaps + 1 If(Flaps.GT.4) Flaps = 4 Goto 85 C C Key = 4 40 Val = 4 TURNRT = TURNRT-1. Goto 85 C C Key = 5 45 Val = 5 Goto 90 C C Key = 6 50 Val = 6 TURNRT = TURNRT+1. Goto 85 C C Key = 7 55 Val = 7 LANDGR = GEARUP Goto 85 C C Key = 8 60 Val = 8 HORIZ = HORIZ-1. Goto 85 C C Key = 9 65 Val = 9 Flaps = Flaps - 1 If(Flaps.LT.0) Flaps = 0 Goto 85 C C Key = , 70 Val = 44 If(RPM.LE.0.0D0) Goto 90 RPM = RPM - 2. Goto 90 C C Key = - 75 Val = 45 If(RPM.GE.24.0D0) Goto 90 RPM = RPM + 2. Goto 90 C C Key = . C Exit the program. 80 Goto 100 C C Check limits of the values ! 85 If(TURNRT .GT. 10.) TURNRT = 10. If(TURNRT .LT. -10.) TURNRT = -10. If(HORIZ .GT. 9.) HORIZ = 9. If(HORIZ .LT. -9.) HORIZ = -9. Goto 90 C C C ********** Calculate new atitude and speed parameters ********* C C +++++++++++++++++++++ Air Speed +++++++++++++++++++ 90 Drag = AIRSPD*1.0 If(LANDGR.EQ.0) Drag = Drag + AIRSPD*0.6 Drag = Drag + AIRSPD*Float(Flaps)*0.2 If(ALTITD.GT.0.) Drag = Drag + DABS(TURNRT*10.) CMPTAS = RPM**2 - Drag - HORIZ*60. AIRSPD = AIRSPD + (CMPTAS - AIRSPD)*0.040 !0.04 = /25. If( AIRSPD .GT. 240. ) AIRSPD = 240. If( AIRSPD .LT. 000. ) AIRSPD = 000. C C +++++++++++++++++++++ Climb Rate Correction ++++++++++++++++++++ C +++++++++++++++++++++ Aircraft has Stalled ++++++++++++++++++++ C STALL = STALL - Float(Flaps*2) If( (AIRSPD+CMPTAS)*0.5 .LT. STALL + .AND. ALTITD.GT.0.) HORIZ=HORIZ-1 C C +++++++++++++++++++++ Altitude ++++++++++++++++++++ BCLIMB = VMAX*0.5 CLMBFT = 100./(DABS(BCLIMB-AIRSPD)+100.) CLMBRT = HORIZ*CLMBFT * Float(Flaps+1)*0.4 ALTITD = ALTITD + CLMBRT If(ALTITD.LE.0.0D0) Call LANDCK If(ALTITD.LT.0.0D0) ALTITD = 0.0D0 If(ALTITD.EQ.0.0D0) HORIZ = 0. If(ALTITD.GT.0.0D0) LANDFL = 1 C C +++++++++++++++++++++ Compass ++++++++++++++++++++ COMPAS = COMPAS + IDINT(TURNRT) If(COMPAS .GT. 359) COMPAS = 0 If(COMPAS .LT. 000) COMPAS = 360 C C +++++++++++++++ Airspeed Correction (Brakes On) ++++++++++++++++ If(Brakes.EQ.BRAKOF) Goto 95 AIRSPD = AIRSPD*0.9 If(AIRSPD.LT.10.) AIRSPD = 0.0 C 95 If(Char.EQ.0) Return KPROCT = KPROCT + 1 If(KPROCT.GT.4) Return Goto 15 C C Exit the plane program. 100 WRITE(7,105) 105 Format(1X, + 'S(M1(L25)(AH000L50S50))', + 'S(M2(L50)(AH120L50S50))', + 'S(M3(L75)(AH240L50S50))') WRITE(7,110) ESC,ESC,ESC 110 Format(1X,'S(E)',A1,'\',A1,'[1;1H',A1,'[2J') Call Exit C End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> INSTRU C C This subroutine updates the instruments on the graphic display. C Subroutine INSTRU C INTEGER*2 AX3,AY3,BRAKOF,I,INTALT INTEGER*2 ASX1,ASY1,RPMX1,RPMY1,RCX1,RCY1,CX1,CY1 !/INSTRP/ INTEGER*2 AX1,AY1,AX2,AY2,HLX1,HLY1,HRX1,HRY1 !/INSTRP/ INTEGER*2 OASX1,OASY1,ORPMX1,ORPMY1,ORCX1,ORCY1 !/INSTRO/ INTEGER*2 OCX1,OCY1 !/INSTRO/ INTEGER*2 OAX1,OAY1,OAX2,OAY2,OAX3,OAY3 !/INSTRO/ INTEGER*2 OHLX1,OHLY1,OHRX1,OHRY1 !/INSTRO/ C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ C Byte ESC C BYTE FLAPP(4,5),GEARPS(4,2) BYTE BRAKEA(6,2) C Real*8 Z,ZALTIT Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT3 C Common /INSTRP/ ASX1,ASY1, + RPMX1,RPMY1,RCX1,RCY1,CX1,CY1,AX1,AY1, + AX2,AY2,HLX1,HLY1,HRX1,HRY1 C Common /INSTRO/ OASX1,OASY1, + ORPMX1,ORPMY1,ORCX1,ORCY1,OCX1,OCY1,OAX1,OAY1, + OAX2,OAY2,OAX3,OAY3,OHLX1,OHLY1,OHRX1,OHRY1 C C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C C Data ESC /27/ C Data GEARPS /'D','o','w','n',' ','U','p',' '/ C Data FLAPP /' ',' ','U','p', 1 ' ','1','0','%', 1 ' ','2','0','%', 1 ' ','3','0','%', 1 ' ','4','0','%'/ C Data BRAKEA /6*' ','B','r','a','k','e','s'/ C Data BRAKOF /0/ C DATA FACT3/6.2831853D0/ ! 2.*3.1415927 C C C Calculate the new Instrument parameters ! C C Update Air Speed gauge ! 5 Z = AIRSPD*0.025132741 + 3.1415927 C !0.025132741 = /250. * 2.*3.1415927 ASX1 = IDINT(DSIN(FACT3-Z)*30.) + 120 ASY1 = IDINT(DCOS(FACT3-Z)*30.) + 406 C C Update Engine RPM gauge ! Z = RPM*0.12566371 !0.12566371 = /25. * 3.1415927 RPMX1 = IDINT(DSIN(Z)*30.) + 230 RPMY1 = IDINT(DCOS(Z)*30.) + 406 C C Update Rate Of Climb gauge ! Z = DABS(CLMBRT)*0.31415927 + 1.570796327 C !0.31415927 = /10. * 3.1415927 C !1.570796327 = 3.1415927/2. RCX1 = IDINT(DSIN(Z)*30.) + 340 If(CLMBRT.GE.0.0D0) RCY1 = IDINT(DCOS(Z)*30.) + 406 If(CLMBRT.LT.0.0D0) RCY1 = -IDINT(DCOS(Z)*30.) + 406 C C Update Compass gauge ! Z = Float(360-COMPAS) + 180. CX1 = IDINT(DSIN(Z*3.14159272/180.) *25.) + 450 CY1 = IDINT(DCOS(Z*3.14159272/180.) *25.) + 406 C C Update the Artificial Horizon ! HLX1 = 530 HRX1 = 590 HLY1 = 406 - IDINT(HORIZ*2. + TURNRT) HRY1 = 406 - IDINT(HORIZ*2. - TURNRT) C INTALT = IDINT(ALTITD) ZALTIT = ALTITD - Float((INTALT/100)*100) Z = ZALTIT/100. * 2.*3.1415927 + 3.1415927 AX1 = IDINT(DSIN(2.*3.1415927-Z)*30.) + 670 AY1 = IDINT(DCOS(2.*3.1415927-Z)*30.) + 406 C ZALTIT = ALTITD - Float((INTALT/1000)*1000) Z = ZALTIT/1000. * 2.*3.1415927 + 3.1415927 AX2 = IDINT(DSIN(2.*3.1415927-Z)*20.) + 670 AY2 = IDINT(DCOS(2.*3.1415927-Z)*20.) + 406 C ZALTIT = ALTITD - Float((INTALT/10000)*10000) Z = ZALTIT/10000. * 2.*3.1415927 + 3.1415927 AX3 = IDINT(DSIN(2.*3.1415927-Z)*10.) + 670 AY3 = IDINT(DCOS(2.*3.1415927-Z)*10.) + 406 C C C Display the new Instrument parameters ! 10 IF (OASX1.EQ.ASX1 .AND. OASY1.EQ.ASY1) GO TO 15 WRITE(7,55) OASX1,OASY1 WRITE(7,55) ASX1,ASY1 OASX1 = ASX1 OASY1 = ASY1 C 15 IF (ORPMX1.EQ.RPMX1 .AND. ORPMY1.EQ.RPMY1) GO TO 20 WRITE(7,60) ORPMX1,ORPMY1 WRITE(7,60) RPMX1,RPMY1 ORPMX1 = RPMX1 ORPMY1 = RPMY1 C 20 IF (ORCX1.EQ.RCX1 .AND. ORCY1.EQ.RCY1) GO TO 25 WRITE(7,65) ORCX1,ORCY1 WRITE(7,65) RCX1,RCY1 ORCX1 = RCX1 ORCY1 = RCY1 C 25 IF (OCX1.EQ.CX1 .AND. OCY1.EQ.CY1) GO TO 30 WRITE(7,70) OCX1,OCY1 WRITE(7,70) CX1,CY1 OCX1 = CX1 OCY1 = CY1 C 30 IF (OAX1.EQ.AX1 .AND. OAY1.EQ.AY1) GO TO 35 WRITE(7,75) OAX1,OAY1 WRITE(7,75) AX1,AY1 OAX1 = AX1 OAY1 = AY1 C 35 IF (OAX2.EQ.AX2 .AND. OAY2.EQ.AY2) GO TO 40 WRITE(7,75) OAX2,OAY2 WRITE(7,75) AX2,AY2 OAX2 = AX2 OAY2 = AY2 C 40 IF (OAX3.EQ.AX3 .AND. OAY3.EQ.AY3) GO TO 45 WRITE(7,75) OAX3,OAY3 WRITE(7,75) AX3,AY3 OAX3 = AX3 OAY3 = AY3 C 45 IF (OHLX1.EQ.HLX1 .AND. OHLY1.EQ.HLY1 .AND. 1 OHRX1.EQ.HRX1 .AND. OHRY1.EQ.HRY1) GO TO 50 WRITE(7,80) OHLX1,OHLY1,OHRX1,OHRY1 WRITE(7,80) HLX1,HLY1,HRX1,HRY1 OHLX1 = HLX1 OHLY1 = HLY1 OHRX1 = HRX1 OHRY1 = HRY1 50 CONTINUE C 55 Format(1X,'P[120,406]V[',I3,',',I3,']') 60 Format(1X,'P[230,406]V[',I3,',',I3,']') 65 Format(1X,'P[340,406]V[',I3,',',I3,']') 70 Format(1X,'P[450,406]V[',I3,',',I3,']') 75 Format(1X,'P[670,406]V[',I3,',',I3,']') 80 Format(1X,'P[',I3,',',I3,']V[',I3,',',I3,']') C If(LANDGR .NE. OLDGR) WRITE(7,85) + ESC,ESC,(GEARPS(I,LANDGR+1),I=1,4),ESC CVAX45 Format(1X,A1,'\',A1,'[3;7H',4A1,A1,'P1p') 85 Format(1X,A1,'\',A1,'[3;10H',4A1,A1,'P1p') OLDGR = LANDGR C If(Flaps .NE. OLDFLP) WRITE(7,90) + ESC,ESC,(FLAPP(I,Flaps+1),I=1,4),ESC 90 Format(1X,A1,'\',A1,'[3;72H',4A1,A1,'P1p') OLDFLP = Flaps C If(Brakes.NE.OLDBRK) WRITE(7,95) + ESC,ESC,(BRAKEA(I,Brakes+1),I=1,6),ESC 95 Format(1X,A1,'\',A1,'[3;37H',6A1,A1,'P1p') OLDBRK = Brakes Brakes = BRAKOF C C These two lines may be commented out if a digital compass heading is C not desired. It makes the approach more interesting (as in difficult) C if the digital compass is not displayed on the screen................ WRITE(7,100) ESC,ESC,COMPAS,ESC 100 Format(1X,A1,'\',A1,'[23;44H',I3,A1,'P1p') C 105 Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C C This is a check for a successful landing or a possible crash. C If this routine is called the altitude is less than or equal C to zero feet. C C Subroutine LANDCK C INTEGER*2 CLOSEV,FROM,GEARDN,GEARUP,I,OPENV,CONTRL INTEGER*2 TO,TOTAL INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 LANDGR,OLDGR,FLAPS,OLDFLP,BRAKES,OLDBRK !/FLIGHT/ INTEGER*2 LANDFL !/LAND/ C Byte ESC C Integer*2 RNWAYX(4),RNWAYY(4),RESULT(10) C Real*8 PLANEX,PLANEY,ADIST,RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /FLIGHT/ LANDGR,OLDGR, + Flaps,OLDFLP,Brakes,OLDBRK C Common /LAND/ LANDFL C Data GEARDN,GEARUP /0,1/ C Data OPENV,CLOSEV /0,1/ C Data From,To /1,2/ C Data ESC /27/ C Do 5 I = 1,10 5 RESULT(I) = 0 C C Check for landing or crash.................................. C Off Course (+ or -10 degree from runway heading) or Short of C the runway.................................................. If(OPENCL .EQ. CLOSEV) RESULT(1) = 1 If(LANDGR .EQ. GEARUP) RESULT(4) = 1 If(TOFROM .EQ. From .AND. + ADIST .LT.500.0) RESULT(6) = 1 If(LANDFL.NE.1) Goto 10 If(CLMBRT .LT. -3.0) RESULT(2) = 1 If(AIRSPD .GT. 100.0) RESULT(3) = 1 If(ADIST .GT. RNWAYL) RESULT(5) = 1 C 10 Total = 0 Do 15 I = 1,6 15 If(RESULT(I) .EQ. 1) Total = Total + 1 C If(Total .GT. 0) Goto 30 C A successful landing (congradulate the pilot) AIRSPD =0.0 If(LANDFL.NE.1) Return If(AIRSPD .GT. 0.0) Return C WRITE(7,20) 20 Format(1X,'P[250,50]W(C)T(S3)"Nice Landing"S(T120)') WRITE(7,25) 25 Format(1X,'P[250,50]T(S3)"Nice Landing"T(S1)') LANDFL = 0 C C Reset the airplane at the end of the runway................. Call TAKOFF Return C C Looks like a crash.......................................... 30 Call INSTRU WRITE(7,35) If(RESULT(5) .EQ. 1) RESULT(1) = 0 If(RESULT(6) .EQ. 1) RESULT(5) = 0 C If(RESULT(1) .EQ. 1) WRITE(7,40) If(RESULT(2) .EQ. 1) WRITE(7,45) If(RESULT(3) .EQ. 1) WRITE(7,50) If(RESULT(4) .EQ. 1) WRITE(7,55) If(RESULT(5) .EQ. 1) WRITE(7,60) If(RESULT(6) .EQ. 1) WRITE(7,65) C WRITE(7,35) If(RESULT(1) .EQ. 1) WRITE(7,40) If(RESULT(2) .EQ. 1) WRITE(7,45) If(RESULT(3) .EQ. 1) WRITE(7,50) If(RESULT(4) .EQ. 1) WRITE(7,55) If(RESULT(5) .EQ. 1) WRITE(7,60) If(RESULT(6) .EQ. 1) WRITE(7,65) C 35 Format(1X,'P[200,50]W(C)T(S3)"Crash Landing"S(T120)') 40 Format(1X,'P[120,+40]T"You missed the runway"S(T120)') 45 Format(1X,'P[120,+40]T"Descent rate too steep"S(T120)') 50 Format(1X,'P[120,+40]T"Air Speed is too high"S(T120)') 55 Format(1X,'P[120,+40]T"Landing Gear is up"S(T120)') 60 Format(1X,'P[120,+40]T"Hit short of runway"S(T120)') 65 Format(1X,'P[120,+40]T"Ran out of runway"S(T120)') C C C RESET INITIAL CONTIDITONS C AIRSPD = 0.0D0 RPM = 0.0D0 HORIZ = 0.0D0 CLMBRT = 0.0D0 TURNRT = 0.0D0 ALTITD = 0.0D0 COMPAS = 000 C LANDGR = 0 OLDGR = 1 Flaps = 0 OLDFLP = 1 Brakes = 0 OLDBRK = 0 C LANDFL = 0 C C Reset the airplane at the end of the runway................. Call TAKOFF CALL INSTRU CALL CALPOS CONTRL = 1 CALL RUNWAY(CONTRL) C C CLEAR ANY CHARACTERS IN KEYBOARD BUFFER C 70 CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.GE.0) GO TO 70 Return End C C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> RUNWAY C C This subroutine displays the new runway location for takeoff, C approach, and landing. C Subroutine RUNWAY(CONTRL) C INTEGER*2 ACX1,ACX1L,ACX1R,ACX2,ACY1,ACY1L,ACY1R,ACY2 INTEGER*2 CLINX1,CLINX2,CLINY1,CLINY2,CLOSEV,CONTRL INTEGER*2 CX1,CY1,CY2,DELTA,GAMMA2,GAMMA3,I,ONLINE,OPENV INTEGER*2 PATERN,THETA,TO INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ INTEGER*2 EXPER !/PILOT/ C BYTE MAC(2) C Integer*2 RNWAYX(4),RNWAYY(4) INTEGER*2 IFACT1,IFACT2 C Real*8 Z,Z1,Z2,Z3,Z4,RNWAYL,ALTSIZ,SPEEDM Real*8 DIST,PLANEX,PLANEY,ADIST,AD,AA,RS Real*8 SPRED1,SPRED2,ADIST1,ADIST2 Real*8 RNWYAX(4),RNWYAY(4) Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 RADDEG REAL*8 FACT1,FACT9,FACT10,FACT11,FACT12,FACT13,FACT14 C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C Common /PILOT/ EXPER,SPEEDM C C Data MAC /'A','B'/ Data To /2/ Data OPENV,CLOSEV /0,1/ C DATA RADDEG /57.2957795D0/ ! 180/PI DATA FACT1 /0.017453292D0/ ! /360. * (2.*3.1415927) C C Goto (5,85,95), CONTRL Return C C *********************************************************** C ******** This calculates the next Runway position ********* C *********************************************************** C C Check if the runway can be seen from the cockpit........... 5 If(TOFROM.EQ.To) Goto 10 C No display ----> Clear last Runway displayed if required... Goto 85 C 10 ADIST1 = ADIST - RNWAYL ADIST2 = ADIST If(ADIST1 .LE. 0.0D0) ADIST1 = 1.0 If(ADIST2 .LE. 0.0D0) ADIST2 = 1.0 C C Calculate the angle spread at runway ends...................... C Spread ranges from 1.0 to about .01 (Yields a length factor).. SPRED1 = DATAN( 1500./(ADIST1+1000.) ) !1.5/((ADIST1+1000.)/1000.) ) SPRED2 = DATAN( 1500./(ADIST2+1000.) ) !1.5/((ADIST2+1000.)/1000.) ) GAMMA2 = IDINT( DATAN(100./ADIST2)*RADDEG) GAMMA3 = IDINT( DATAN( 10./(ALTITD+10.))*RADDEG) C !( 1.0/((ALTITD+10.)/10.))*RADDEG) C Theta = AHEAD - RNWAYH + 180 If(Theta.LT.000) Theta = Theta + 360 If(Theta.GE.360) Theta = Theta - 360 If(Theta.GE.360) Theta = Theta - 360 C ONLINE = 1 Delta = AHEAD - RNWAYH If(Delta.LT.000) Delta = Delta + 360 If(Delta.GE.360) Delta = Delta - 360 If(Delta.GE.350) Goto 15 If(Delta.LE.010) Goto 15 GAMMA2 = 0 GAMMA3 = 0 SPRED2 = SPRED1 ONLINE = 0 15 Continue C If(GAMMA2+Beta.GT.90) GAMMA2 = 90 - Beta IFACT1 = GAMMA2 + BETA If(IFACT1+GAMMA3 .GT. 90) GAMMA3 = 90-IFACT1 C C Apply an altitude ajustment to runway for landing perspective.. ALTSIZ = DAtan(15./(ALTITD+10.)) !(1.5/((ALTITD+10.)/10.)) C C FACT11 = FLOAT(THETA + IFACT1 + 180 + GAMMA3)*FACT1 FACT12 = FLOAT(THETA - IFACT1 + 360)*FACT1 FACT13 = FLOAT(THETA + IFACT1)*FACT1 FACT14 = FLOAT(THETA - IFACT1 + 180 - GAMMA3)*FACT1 C RNWYAX(1) = DSIN(FACT11) RNWYAX(2) = DSIN(FACT12) RNWYAX(3) = DSIN(FACT13) RNWYAX(4) = DSIN(FACT14) C FACT9 = SPRED1*ALTSIZ*400. FACT10 = SPRED2*ALTSIZ*400. C RNWAYX(1) = IDINT(RNWYAX(1)*FACT9 ) RNWAYX(2) = IDINT(RNWYAX(2)*FACT10) RNWAYX(3) = IDINT(RNWYAX(3)*FACT10) RNWAYX(4) = IDINT(RNWYAX(4)*FACT9 ) C RNWYAY(1) = DCOS(FACT11) RNWYAY(2) = DCOS(FACT12) RNWYAY(3) = DCOS(FACT13) RNWYAY(4) = DCOS(FACT14) C FACT9 = FACT9 *0.4325 !SPRED1*ALTSIZ*173. FACT10 = FACT10*0.4325 !SPRED2*ALTSIZ*173. C RNWAYY(1) = IDINT(RNWYAY(1)*FACT9 ) RNWAYY(2) = IDINT(RNWYAY(2)*FACT10) RNWAYY(3) = IDINT(RNWYAY(3)*FACT10) RNWAYY(4) = IDINT(RNWYAY(4)*FACT9 ) C C Now apply the Runway's relative position to the Airplane.. Z = Float(Alpha)*FACT1 !/360. * 2.*3.1415927 CX1 = IDINT(DSIN(Z + 3.1415927) * 350.) CY1 = IDINT(DCOS(Z) * ADIST1*0.02840909) C ! 0.02840909 = /(5280.*2.) * 300. CY2 = INT(Float(RNWAYY(1)+RNWAYY(4)) * 0.5) C IFACT1 = 400 - CX1 IFACT2 = 346 - IABS(CY1) - IABS(CY2) C Do 20 I = 1,4 RNWAYX(I) = RNWAYX(I) + IFACT1 RNWAYY(I) = RNWAYY(I) + IFACT2 20 Continue C C C Clip the X Axis if the runway goes off screen (VT240...) Do 25 I = 1,4 If(RNWAYX(I).LT.1) RNWAYX(I) = 1 If(RNWAYX(I).GT.799) RNWAYX(I) = 799 C C This may be commented out for Y Axis but I do use it..... If(RNWAYY(I).LT.40) RNWAYY(I) = 40 If(RNWAYY(I).GT.346) RNWAYY(I) = 346 25 Continue C C C This draws the Runway outline...(For Takeoff)............ If(EXPER.LT.4) Goto 30 If(ALTITD.GT.50.) Goto 80 If(ADIST1.GT.5280.) Goto 80 30 Toggle=Toggle+1 If(Toggle.GT.2) Toggle=1 C C Determine if Runway is open or close at start point...... OPENCL = CLOSEV If( + ADIST-RNWAYL.LE.0.0D0 .AND. ONLINE.EQ.1) + OPENCL = OPENV C C C Draw the Runway with an open end......................... If(OPENCL.EQ.OPENV) WRITE(7,40) + MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) C C Draw the Runway with a closed end........................ If(OPENCL.EQ.CLOSEV) WRITE(7,45) + MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) C C Select a line pattern for the center line................ PATERN = 4 If(ALTITD.LE.70.0D0) PATERN = 5 If(ALTITD.LE.60.0D0) PATERN = 6 If(ALTITD.LE.50.0D0) PATERN = 7 If(ALTITD.LE.40.0D0) PATERN = 8 If(ALTITD.LE.30.0D0) PATERN = 9 If(ALTITD.LE.20.0D0) PATERN = 3 If(ALTITD.LE.10.0D0) PATERN = 2 C C This Draws the Center line... CLINX1 = (RNWAYX(1) + RNWAYX(4))/2 CLINX2 = (RNWAYX(2) + RNWAYX(3))/2 CLINY1 = (RNWAYY(1) + RNWAYY(4))/2 CLINY2 = (RNWAYY(2) + RNWAYY(3))/2 C WRITE(7,50) CLINX2,CLINY2 WRITE(7,55) PATERN WRITE(7,60) CLINX1,CLINY1 WRITE(7,55) 1 ! 1 = PATERN-PATERN+1 WRITE(7,65) If(Toggle.EQ.2) Goto 35 WRITE(7,70) MAC(Toggle) WRITE(7,70) MAC(Toggle+1) Goto 75 35 WRITE(7,70) MAC(Toggle) WRITE(7,70) MAC(Toggle-1) Goto 75 C 40 Format(1X,'P[0,500]', + '@:',A1,' W(I3)P[',I4,',',I4,']', + 'V(S)',3('[',I4,',',I4,']'),'(E)',$) 45 Format(1X,'P[0,500]', + '@:',A1,' W(I3)P[',I4,',',I4,']', + 'V(B)',3('[',I4,',',I4,']'),'(E)',$) 50 Format('+', + 'P[',I4,',',I4,']',$) 55 Format('+','W(P',I1,')',$) 60 Format('+', + 'V[',I4,',',I4,']',$) 65 Format('+', + ' @;') 70 Format(1X,'@',A1) C C Set the runway display flag to on....................... 75 RNWYDF = 1 80 Return C C This erases the last runway position displayed.......... 85 If(RNWYDF.EQ.0) Return WRITE(7,70) MAC(Toggle) WRITE(7,90) 90 Format(1X,'@.') RNWYDF = 0 Toggle = 1 Return C C C ************************************************************ C ************ Field of view from the Cockpit **************** C ************************************************************ C C Determine if the Runway can be seen from the cockpit........ C 95 If(TOFROM.EQ.To) Goto 100 C No display ----> Clear last Runway displayed if required.... Goto 85 C C Calculate the Runway's Orientation from the cockpit point of C view and Relative Size for display on screen for Approach... C C First , Set Runway_Heading angle to 0 degrees for viewing and C then normalize Airport Heading to determine if Airport C is within the viewing area of 180 degree arc (w/cockpit) C 100 Theta = AHEAD - RNWAYH If(Theta.LT.000) Theta = Theta + 360 If(Theta.GE.360) Theta = Theta - 360 C C Second, calculate the runway's width based on altitude by the C use of an angle I shall call Beta............................ Beta = IDINT( (3000./(ALTITD+10.)**2)) + 5 C C Apply an offset to distance to eliminate ZERO divide......... AD = (ADIST*0.0001893939394 + 9.)*0.1 AA = DLOG( ((ALTITD+100.) /10.) )*0.434782608 C RS = AD * AA C IFACT1 = BETA + THETA IFACT2 = BETA - THETA Z1 = Float(180+IFACT1)*FACT1 + 3.1415927 Z2 = Float(360-IFACT2)*FACT1 + 3.1415927 Z3 = Float( IFACT1)*FACT1 + 3.1415927 Z4 = Float(180-IFACT2)*FACT1 + 3.1415927 C FACT9 = 100./RS RNWAYX(1) = IDINT(DSIN(Z1) * FACT9) + 400 RNWAYX(2) = IDINT(DSIN(Z2) * FACT9) + 400 RNWAYX(3) = IDINT(DSIN(Z3) * FACT9) + 400 RNWAYX(4) = IDINT(DSIN(Z4) * FACT9) + 400 C RNWAYY(1) = IDINT(DCOS(Z1) * FACT9) + 173 RNWAYY(2) = IDINT(DCOS(Z2) * FACT9) + 173 RNWAYY(3) = IDINT(DCOS(Z3) * FACT9) + 173 RNWAYY(4) = IDINT(DCOS(Z4) * FACT9) + 173 C C Do the same for the landing direction indicator.......... Z1 = Float( Theta)*FACT1 + 3.1415927 Z2 = Float(180+Theta)*FACT1 + 3.1415927 C FACT9 = 75./RS FACT10 = 90./RS ACX1 = IDINT(DSIN(Z1) * FACT9 ) + 400 ACY1 = IDINT(DCOS(Z1) * FACT10) + 173 ACX2 = IDINT(DSIN(Z2) * FACT9 ) + 400 ACY2 = IDINT(DCOS(Z2) * FACT10) + 173 C FACT9 = 50./RS FACT10 = 70./RS FACT11 = Z1 + 0.5708 FACT12 = Z1 - 0.5708 ACX1R = IDINT((DSIN(FACT11)) * FACT9 ) + 400 ACY1R = IDINT((DCOS(FACT11)) * FACT10) + 173 ACX1L = IDINT((DSIN(FACT12)) * FACT9 ) + 400 ACY1L = IDINT((DCOS(FACT12)) * FACT10) + 173 C C C Now apply the Runway's relative position to the Airplane.. C <<< This turns out to be an offset in the X and Y axis >>> Z = Float(Alpha)*FACT1 + 3.1415927 CX1 = IDINT(DSIN(Z) * 350.) CY1 = IDINT(DCOS(Z) * ADIST*.0011363636 ) ! .0011363636 = /5280.*6. C Do 105 I = 1,4 RNWAYX(I) = RNWAYX(I) - CX1 RNWAYY(I) = RNWAYY(I) - IABS(CY1) 105 Continue C ACX1 = ACX1 - CX1 ACY1 = ACY1 - IABS(CY1) ACX2 = ACX2 - CX1 ACY2 = ACY2 - IABS(CY1) C ACX1R = ACX1R - CX1 ACY1R = ACY1R - IABS(CY1) ACX1L = ACX1L - CX1 ACY1L = ACY1L - IABS(CY1) C C This draws the Runway outline...(For Landing Approach)..... If(EXPER.GE.4) Goto 130 Toggle=Toggle+1 If(Toggle.GT.2) Toggle=1 WRITE(7,110) MAC(Toggle), + RNWAYX(1),RNWAYY(1),RNWAYX(2),RNWAYY(2), + RNWAYX(3),RNWAYY(3),RNWAYX(4),RNWAYY(4) 110 Format(1X,'P[0,500]', + '@:',A1,' P[',I4,',',I4,']', + 'V(B)',3('[',I4,',',I4,']'),'(E)',$) C WRITE(7,115) ACX2,ACY2,ACX1,ACY1,ACX1R,ACY1R,ACX1L,ACY1L 115 Format('+','P[',I3,',',I3,']V[',I3,',',I3,']V(B)', + 2('[',I3,',',I3,']'),'(E)',$) WRITE(7,65) If(Toggle.EQ.2) Goto 120 WRITE(7,70) MAC(Toggle+1) WRITE(7,70) MAC(Toggle) Goto 125 120 WRITE(7,70) MAC(Toggle-1) WRITE(7,70) MAC(Toggle) Goto 125 C 125 RNWYDF = 1 130 Return C End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Select Airport C C This subroutine randomly selects a position for the Airplane C with respect the airport being at (0,0), a runway heading, & C a runway length............................................. C Subroutine SAIRPT C INTEGER*2 ISEED,JSEED REAL*4 SEED,X INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 PLANEX,PLANEY,ADIST,RNWAYL REAL*8 RADDEG C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C C DATA RADDEG /57.2957795D0/ ! 180/PI C C C Start out with a random seed form, (using time)...... CVAX 100 Seed = IABS(For$SECNDS(Start)) CVAX If(Float(Seed/2) .EQ. Float(Seed)/2.) Seed = Seed-1 C 5 SEED = SECNDS(0.0) !RT-11 SYSTEM SUBROUTINE 10 IF (SEED.LT.32767.) GO TO 15 SEED = SEED - 32767. GO TO 10 15 ISEED = IFIX(SEED) JSEED = 0 C C Randomly select a distance from the Airport.......... 20 PLANEX = (DBLE(RAN(ISeed,JSEED))-.5) * 50. PLANEY = (DBLE(RAN(ISeed,JSEED))-.5) * 50. If(DABS(PLANEX) .LT. 5) Goto 20 If(DABS(PLANEY) .LT. 5) Goto 20 C Now convert miles to feet fo all future calculations. PLANEX = PLANEX * 5280. PLANEY = PLANEY * 5280. C C Randomly select a length for the Runway (in Feet).... 25 RNWAYL = DBLE(RAN(ISeed,JSEED))*3000. + 4000. C C Calculate the angle spread for runway width & height. Beta = IDINT( DATAN(2000./RNWAYL)*RADDEG) C C Randomly Select an orientation for the Airstrip...... RNWAYH = INT(RAN(ISeed,JSEED)*36.) * 10 C Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Set Color C C This routine sets the screen's colors to a selected set.. C Subroutine SCOLOR(Set,ML,CH,CL,CS) C C INTEGER*2 CH,CL,CS,ML,SET C C C Set the specific mono/color map............... 5 WRITE(7,10) Set,ML,CH,CL,CS 10 Format(1X, 1 'S(M',I1,'(L',I3,')(AH',I3,'L',I3,'S',I3,'))') Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> SCRDIS C C This subroutine displays the various graphic display screens. C Subroutine SCRDIS(Screen) C INTEGER*2 COLORH,COLORL,COLORS,I,J,MONOLT,SCREEN,SET,VAL INTEGER*2 X1,X2,Y1,Y2 INTEGER*2 EXPER !/PILOT/ C BYTE Ans BYTE Yes(2),COMPSL(4) C Byte ESC Byte Quote C BYTE Gon(2) BYTE Goff C Integer*2 XF,YF INTEGER IZ !RT-11 C Real FUSLX(44),FUSLY(44) Real TAILX(5),TAILY(5) Real CANLX(28),CANLY(28) Real WING1X(9),WING1Y(9),WING2X(9),WING2Y(9) Real WING3X(7),WING3Y(7),CTRLX(4),CTRLY(4) Real PROPX(21),PROPY(21),DASHX(5),DASHY(5) Real SCX,SCY C Real*8 Z,SPEEDM C Common /PILOT/ EXPER,SPEEDM C Data ESC /27/ Data Quote /39/ Data Yes /'Y','y'/ Data COMPSL /'N','E','S','W'/ C DATA Gon /'P','p'/ DATA Goff /'\'/ DATA SCX /30.5/ DATA SCY /30.5/ DATA XF /100/ DATA YF /220/ C C DATA FUSLX / + 0.00,0.10,0.30,0.60,0.90,1.00,2.00,3.00,4.00,5.00, + 5.90,6.00,6.20,7.00,7.70,8.00,9.00,10.0,17.0,17.0, + 16.9,16.8,16.6,16.5,16.3,16.2,16.0,15.5,15.0,14.0, + 13.0,12.0,11.0,6.00,5.00,3.00,2.00,1.00,0.50,0.40, + 0.30,0.20,0.10,0.00/ C DATA FUSLY / + 5.50,5.40,5.30,5.20,5.10,5.05,4.78,4.55,4.35,4.20, + 4.00,4.02,3.90,3.58,3.30,3.15,2.90,2.75,2.75,3.75, + 3.75,3.80,3.90,4.00,4.20,4.30,4.75,5.30,5.60,5.80, + 5.90,5.95,6.00,6.00,5.95,5.90,5.80,5.75,5.70,5.65, + 5.62,5.60,5.58,5.50/ C DATA TAILX / 11.5,13.8,15.2,17.0,16.5/ DATA TAILY / 2.75,1.70,0.00,0.00,2.75/ C C DATA CANLX / + 6.30,6.60,7.00,9.30,9.90,10.3,10.4,10.5,10.6,10.7, + 10.7,11.0,11.0,10.9,10.8,10.7,10.6,10.5,10.4,10.0, + 9.50,9.00,7.50,7.00,6.50,6.30,6.10,5.90/ DATA CANLY / + 3.90,3.95,4.00,4.00,3.90,3.70,3.60,3.50,3.30,3.00, + 2.75,2.75,3.00,3.40,3.60,3.70,3.80,3.92,4.00,4.15, + 4.20,4.25,4.25,4.22,4.18,4.15,4.10,4.00/ C C DATA DASHX / 6.60,7.10,7.90,8.00,8.00/ C DATA DASHY / 3.95,3.90,3.65,3.70,4.00/ C DATA CTRLX / 16.9,15.9,15.3,16.55/ C DATA CTRLY / 0.50,0.50,2.50,2.50/ C DATA PROPX / + 17.05,17.05,17.10,17.10,17.15,17.30,17.35,17.25,17.50,17.80, + 18.00,17.80,17.50,17.25,17.35,17.30,17.15,17.10,17.10,17.05, + 17.05/ C DATA PROPY / + 03.25,02.75,02.75,01.40,00.75,00.75,01.40,02.80,02.90,03.10, + 03.25,03.40,03.60,03.70,05.10,05.75,05.75,05.10,03.75,03.75, + 03.25/ C DATA WING1X / + 14.75,14.80,14.90,17.30,18.00,17.30,14.90,14.80,14.75/ C DATA WING1Y / + 05.25,05.22,05.20,05.20,05.25,05.30,05.30,05.28,05.25/ C DATA WING2X / + 16.70,15.70,14.60,14.20,14.00,14.20,14.60,15.70,16.70/ C DATA WING2Y / + 05.20,05.10,05.10,05.15,05.25,05.35,05.40,05.40,05.30/ C DATA WING3X / + 14.60,07.00,04.10,04.00,04.10,07.00,14.60/ C DATA WING3Y / + 05.10,05.35,05.40,05.45,05.50,05.50,05.40/ C C C C *********************************************************** C Determine which screen is to be displayed.................. Goto (5,405), Screen C *********************************************************** C 5 Write(7,10) ESC,ESC,Gon 10 Format(1X,A1,'[2J',A1,2A1,'S[0,0]W(I1,R,S0)T(S1,I0)') C C Select the initial colors for the Graphic "planes"......... Set = 0 MONOLT = 0 COLORH = 0 COLORL = 0 COLORS = 0 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 1 MONOLT = 33 COLORH = 120 COLORL = 57 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 2 MONOLT = 66 COLORH = 000 COLORL = 57 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) Set = 3 MONOLT = 99 COLORH = 000 COLORL = 100 COLORS = 100 Call SCOLOR(Set,MONOLT, + COLORH,COLORL,COLORS) C C Erase the Graphic Screen............................... WRITE(7,15) 15 Format(1X,'S(E)W(I3)') C DO 20 I=1,44 IF (I.EQ.1) WRITE(7,25) + INT(FUSLX(I)*SCX)+XF, + INT(FUSLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(FUSLX(I)*SCX)+XF, + INT(FUSLY(I)*SCY)+YF 20 Continue 25 Format('+','P[',I5,',',I5,']') 30 Format('+','V[',I5,',',I5,']') C DO 35 I=1,28 IF (I.EQ.1) WRITE(7,25) + INT(CANLX(I)*SCX)+XF, + INT(CANLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(CANLX(I)*SCX)+XF, + INT(CANLY(I)*SCY)+YF CANLX(I)=8.0-CANLX(I)+8.0 35 Continue C C DO 40 I=1,5 IF (I.EQ.1) WRITE(7,25) + INT(TAILX(I)*SCX)+XF, + INT(TAILY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(TAILX(I)*SCX)+XF, + INT(TAILY(I)*SCY)+YF 40 Continue C C DO 45 I=1,9 IF (I.EQ.1) WRITE(7,25) + INT(WING1X(I)*SCX)+XF, + INT(WING1Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING1X(I)*SCX)+XF, + INT(WING1Y(I)*SCY)+YF 45 Continue C DO 50 I=1,9 IF (I.EQ.1) WRITE(7,25) + INT(WING2X(I)*SCX)+XF, + INT(WING2Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING2X(I)*SCX)+XF, + INT(WING2Y(I)*SCY)+YF 50 Continue C DO 55 I=1,7 IF (I.EQ.1) WRITE(7,25) + INT(WING3X(I)*SCX)+XF, + INT(WING3Y(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(WING3X(I)*SCX)+XF, + INT(WING3Y(I)*SCY)+YF 55 Continue C DO 60 I=1,5 IF (I.EQ.1) WRITE(7,25) + INT(DASHX(I)*SCX)+XF, + INT(DASHY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(DASHX(I)*SCX)+XF, + INT(DASHY(I)*SCY)+YF DASHX(I)=8.0-DASHX(I)+8.0 60 Continue C DO 65 I=1,21 IF (I.EQ.1) WRITE(7,25) + INT(PROPX(I)*SCX)+XF, + INT(PROPY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(PROPX(I)*SCX)+XF, + INT(PROPY(I)*SCY)+YF PROPX(I)=8.0-PROPX(I)+8.0 65 Continue C DO 70 I=1,4 IF (I.EQ.1) WRITE(7,25) + INT(CTRLX(I)*SCX)+XF, + INT(CTRLY(I)*SCY)+YF IF (I.NE.1) WRITE(7,30) + INT(CTRLX(I)*SCX)+XF, + INT(CTRLY(I)*SCY)+YF 70 Continue C WRITE(7,75) 75 Format(1X,'P[250,352]W(I1)', + 'T(S1)"Digital Equipment Corporation 1985"') C WRITE(7,80) 80 Format(1X, + 'P[170,10]W(I1)T(S4)"Welcome to"') WRITE(7,85) Quote 85 Format(1X, + 'P[170,80]W(I3)T(S5)"Smitty',A1,'s"') WRITE(7,90) 90 Format(1X, + 'P[120,160]W(I2)T(S4)"Flight School"') C WRITE(7,95) 95 Format + (1X,'P[50,440]W(I2)T(S1)"Programmer : Patrick N. Smits"'/ + 1X,'P[50,460]W(I2)T(S1)"RT-11 Conv. : Rob Zahora, 1988"') WRITE(7,100) 100 Format(1X, + 'P[480,440]W(I2)T(S1)"Push Return to continue ? "',$) Read(5,105) Ans 105 Format(A) C WRITE(7,110) 110 Format(1X,'S(E)P[100,10]W(I1)T(S3)"Select Pilot Rating"') WRITE(7,115) 115 Format(1X,'P[200,60]W(I2)T(S2)"1 - Beginner"') WRITE(7,120) 120 Format(1X,'P[200,90]W(I2)T(S2)"2 - Solo"') WRITE(7,125) 125 Format(1X,'P[200,120]W(I2)T(S2)"3 - Private VFR"') WRITE(7,130) 130 Format(1X,'P[200,150]W(I2)T(S2)"4 - Private IFR"') WRITE(7,135) 135 Format(1X,'P[200,180]W(I2)T(S2)"5 - Instructor"') WRITE(7,140) 140 Format(1X,'P[170,250]W(I3)T(S3)"Selection ? "') C C EXPER = 0 C C Get the Pilot's rating................................... C C ------------------------------------------------------------ C This is for getting the pilot's experience.................. C 145 Char = 00 CVAX status = Sys$QIOW (, CVAX 1 %VAL(CHANNL),%VAL(IO$_READVBLK+IO$M_NOECHO+IO$M_TIMED), CVAX 2 IOSB, , , %REF(Char), %VAL(1), %VAL(0), , , ) CVAX If(.not. status) Call SYS$EXIT(%VAL(status)) C 150 CHAR = ITTINR() !RT-11 SYSTEM CALL IF (CHAR.LT.0) GO TO 150 !WAIT FOR INPUT C C Determine which key has been pressed and set parameters...... Goto (155,160,165,170,175,180), Char-47 C C Key = 0 155 Val = 0 GO TO 185 C C Key = 1 160 Val = 1 GO TO 185 C C Key = 2 165 Val = 2 GO TO 185 C C Key = 3 170 Val = 3 GO TO 185 C C Key = 4 175 Val = 4 GO TO 185 C C Key = 5 180 Val = 5 C 185 CONTINUE C If(Val.EQ.1) EXPER = 1 If(Val.EQ.1) SPEEDM = 1.0 If(Val.EQ.2) EXPER = 2 If(Val.EQ.2) SPEEDM = 1.5 If(Val.EQ.3) EXPER = 3 If(Val.EQ.3) SPEEDM = 2.0 If(Val.EQ.4) EXPER = 4 If(Val.EQ.4) SPEEDM = 2.0 If(Val.EQ.5) EXPER = 5 If(Val.EQ.5) SPEEDM = 2.5 If(EXPER.EQ.0) Goto 145 C WRITE(7,190) EXPER 190 Format(1X,'T"',I1,'"') C WRITE(7,195) 195 Format(1X,'P[100,420]T(S2)"Would you like help (Y/N) ? "',$) Read(5,200) Ans 200 Format(A) If(Ans.EQ.Yes(1) .OR. Ans.EQ.Yes(2)) Goto 205 Goto 395 205 WRITE(7,210) 210 Format(1X,'S(E)W(I3)P[200,50]V(B)[+400][,+400][-400](E)') WRITE(7,215) 215 Format + (1X,'P[300,50]V[,+320]P[400,50]V[,+400]P[500,50]V[,+400]') WRITE(7,220) 220 Format( + 1X,'P[200,130]V[+400]P[200,210]V[+400]P[200,290]V[+400]') WRITE(7,225) 225 Format(1X,'P[200,370]V[+300]W(I2)') WRITE(7,230) 230 Format(1X, + 'P[210,55]T(S2)"PF1"P[+45]T"PF2"P[+45]T"PF3"P[+45]T"PF4"') WRITE(7,235) 235 Format(1X, + 'P[210,135]T(S2)" 7 "P[+45]T" 8 "P[+45]T" 9 "P[+45]T" - "') WRITE(7,240) 240 Format(1X, + 'P[210,215]T(S2)" 4 "P[+45]T" 5 "P[+45]T" 6 "P[+45]T" , "') WRITE(7,245) 245 Format(1X, + 'P[210,295]T(S2)" 1 "P[+45]T" 2 "P[+45]T" 3 "P[+45]T"Enter"') WRITE(7,250) 250 Format(1X, + 'P[210,375]T(S2)" 0 "P[+145]T" . "') C WRITE(7,255) 255 Format(1X,'W(I1)', + 'P[230,85]T(S1)"Not"P[+72]T"Not"P[+72]T"Not"P[+72]T"Not"') WRITE(7,260) 260 Format(1X, + 'P[230,105]T(S1)"Used"P[+62]T"Used"P[+62]T"Used"P[+62]T"Used"') WRITE(7,265) 265 Format(1X, + 'P[230,165]T(S1)"Gear"P[+60]T', + '"Nose"P[+60]T"Flaps"P[+60]T"RPMs"') WRITE(7,270) 270 Format(1X, + 'P[230,185]T(S1)" Up "P[+60]T', + '"Down"P[+60]T" Up "P[+60]T" Up "') WRITE(7,275) 275 Format(1X, + 'P[230,245]T(S1)"Turn"P[+60]T', + '"Not "P[+60]T"Turn "P[+60]T"RPMs"') WRITE(7,280) 280 Format(1X, + 'P[230,265]T(S1)"Left"P[+60]T', + '"Used"P[+60]T"Right"P[+60]T"Down"') WRITE(7,285) 285 Format(1X, + 'P[230,325]T(S1)"Gear"P[+60]T"Nose"P[+60]T"Flaps"P[+65]T"Not"') WRITE(7,290) 290 Format(1X, + 'P[230,345]T(S1)"Down"P[+60]T', + '" Up "P[+60]T"Down "P[+60]T"Used"') WRITE(7,295) 295 Format(1X, + 'P[230,405]T(S1)"Apply Brakes"P[+80]T"Exit"') WRITE(7,300) 300 Format(1X, + 'P[230,425]T(S1)"Momentarily "P[+80]T"Game"') C WRITE(7,305) 305 Format(1X, + 'P[250,460]W(I2)T(S1)"Push Return to continue ? "',$) Read(5,310) Ans 310 Format(A) C WRITE(7,315) 315 Format(1X, + 'S(E)P[100,10]W(I3)T(S2)"General Flight Information"') WRITE(7,320) 320 Format(1X,'P[100,70]W(I1)', + 'T(S1)"Apply up to 40 Degrees of Flaps for Lift"') WRITE(7,325) 325 Format(1X,'P[100,90]W(I1)', + 'T(S1)"Increase engine RPM to maximum for Take Off"') WRITE(7,330) 330 Format(1X,'P[100,110]', + 'T(S1)"Pull back on stick (Key 2) to rotate airplane"') WRITE(7,335) 335 Format(1X,'P[100,140]', + 'T(S1)"For touch and goes stay within 10 miles of Airport"') WRITE(7,340) 340 Format(1X,'P[100,160]', + 'T(S1)"For a new airport fly out of the 10 mile radius"') WRITE(7,345) 345 Format(1X,'P[100,190]W(I3)', + 'T(S1)"Beginner, Solo, and Private VFR"') WRITE(7,350) 350 Format(1X,'P[100,210]W(I1)', + 'T(S1)"have runway alignment displayed"') WRITE(7,355) 355 Format(1X,'P[100,240]W(I3)', + 'T(S1)"Private IFR and Instructor ratings"') WRITE(7,360) 360 Format(1X,'P[100,260]W(I1)', + 'T(S1)"Well, Good luck in the bad weather"') WRITE(7,365) 365 Format(1X,'P[100,320]W(I2)', + 'T(S1)"RPM and Climb register in x100"') WRITE(7,370) 370 Format(1X,'P[100,340]W(I2)', + 'T(S1)"Altimeter display x100, x1000, x10000"') WRITE(7,375) 375 Format(1X,'P[100,360]W(I2)', + 'T(S1)"Respective pointer Long Medium Short"') C WRITE(7,380) 380 Format(1X,'P[100,400]W(I3)', + 'T(S1)"Note : RW indicates runway to be used for landing"') WRITE(7,385) 385 Format(1X,'P[100,425]W(I1)', + 'T(S1)"Multiply RW x 10 for heading (ie. RW 29 ---> 290"') WRITE(7,390) 390 Format(1X,'W(I1)T(S0)"0"T(S1)') C WRITE(7,305) Read(5,310) Ans C C 395 WRITE(7,400) ESC,Goff 400 Format(1X,'T(S1)',A1,A1) C Return C C C *********************************************************** C C C Draw cockpit view on the ground... 405 WRITE(7,410) ESC,Gon 410 Format(1X,A1,2A1,'S(E)') WRITE(7,415) CVAX375 Format(1X,'W(I3,R)P[0,348]V(B)[+798][,+130][-798](E)') !VT240? 415 Format(1X,'W(I3,R)P[0,348]V(B)[+767][,+130][-767](E)') !VT125 WRITE(7,420) CVAX380 Format(1X,'P[0,348]V(S)[,-326][+798][,+326](E)') !VT240? 420 Format(1X,'P[0,348]V(S)[,-326][+767][,+326](E)') !VT125 C C Draw Instruments WRITE(7,425) 425 Format(1X,'W(I2,V)', + 'P[120,406]C[+50]P[+110]C[+50]P[+110]C[+50]', + 'P[+110]C[+50]P[+110]C[+50]P[+110]C[+50]') C WRITE(7,430) 430 Format(1X, + 'W(I2)P[105,460]T"MPH"P[+80]T"RPM"P[+70]T"Climb"', + 'P[+60]T"Compass"P[+50]T"Horizon"P[+40]T"Altimeter"') C WRITE(7,435) 435 Format(1X,'W(I1)T(S0)') C Air Speed gauge ! J = 0 CVAX Do 254 Z = 3.1415927 , -3.0 , -2.*3.1415927/10. Do 455 IZ = 0,9 Z = 0.62831853*(5 - IZ) !3.1415927 - IZ*3.1415927/5. X1 = IDINT(DSIN(Z)*35.) + 120 Y1 = IDINT(DCOS(Z)*42.) + 405 If(J.LT.10) WRITE(7,440) X1-5,Y1,J 440 Format(1X,'P[',I3,',',I3,']T"',I1,'"') If(J.GE.10 .AND. J.LT.100) WRITE(7,445) X1-5,Y1,J 445 Format(1X,'P[',I3,',',I3,']T"',I2,'"') If(J.GE.100) WRITE(7,450) X1-12,Y1,J 450 Format(1X,'P[',I3,',',I3,']T"',I3,'"') 455 J=J+25 C C RPM gauge ! J = 0 CVAX Do 262 Z = 0. , 3.1416 , 3.1415927/5. Do 470 IZ = 0,5 Z = IZ*0.62831853 !3.1415927/5. X1 = IDINT(DSIN(Z)*35.) + 230 Y1 = IDINT(DCOS(Z)*40.) + 405 If(J.LT.10) WRITE(7,460) X1-5,Y1,J 460 Format(1X,'P[',I3,',',I3,']T"',I1,'"') If(J.GE.10) WRITE(7,465) X1-5,Y1,J 465 Format(1X,'P[',I3,',',I3,']T"',I2,'"') 470 J=J+5 C C Rate Of Climb gauge ! J = 0 CVAX Do 271 Z = 3.1415927/2. , 3./2.*3.0 , 2.*3.1415927/20. Do 480 IZ = 0,9 Z = 0.314159265*(5 + IZ) !3.1415927/2. + IZ*2.*3.1415927/20. X1 = IDINT(DSIN(Z)*40.) + 340 Y1 = IDINT(DCOS(Z)*40.) + 405 Y2 = -Y1 + 810 !-IDINT(DCOS(Z)*40.) + 405 WRITE(7,475) X1-5,Y1,J If(J.EQ.0) Goto 480 WRITE(7,475) X1-5,Y2,J 475 Format(1X,'P[',I3,',',I3,']T"',I1,'"') 480 J=J+1 C C Compass gauge ! J = 1 CVAX Do 282 Z = 3.1415927 , -3.0 , -2.*3.1415927/4. Do 490 IZ = 0,3 Z = 1.570796327*(2 - IZ) !3.1415927 - IZ*2.*3.1415927/4. X1 = IDINT(DSIN(Z)*42.) + 450 Y1 = IDINT(DCOS(Z)*42.) + 405 WRITE(7,485) X1-5,Y1,COMPSL(J) 485 Format(1X,'P[',I3,',',I3,']T"',A1,'"') 490 J=J+1 C CVAX Do 283 Z = 3.1415927 , -3.0 , -2.*3.1415927/18. Do 495 IZ = 0,17 Z = 0.34906585*(9 - IZ) !3.1415927 - IZ*2.*3.1415927/18. X1 = IDINT(DSIN(Z)*35.) + 450 Y1 = IDINT(DCOS(Z)*35.) + 408 X2 = IDINT(DSIN(Z)*25.) + 450 Y2 = IDINT(DCOS(Z)*25.) + 408 495 WRITE(7,500) X1,Y1,X2,Y2 500 Format(1X,'P[',I3,',',I3,']V[',I3,',',I3,']') C C C Artificial Horizon gauge ! WRITE(7,505) 505 Format(1X,'P[510,406]V[+15]P[610,406]V[-15]') C C Altimeter gauge ! J = 0 CVAX Do 291 Z = 3.1415927 , -3.0 , -2.*3.1415927/10. Do 515 IZ = 0,9 Z = 0.62831853*(5 - IZ) !3.1415927 - IZ*2.*3.1415927/10. X1 = IDINT(DSIN(Z)*42.) + 670 Y1 = IDINT(DCOS(Z)*42.) + 405 WRITE(7,510) X1-5,Y1,J 510 Format(1X,'P[',I3,',',I3,']T"',I1,'"') 515 J=J+1 C WRITE(7,520) 520 Format(1X,'W(I3,C)') C WRITE(7,525) ESC,ESC,ESC,ESC 525 Format(1X,A1,'\', + A1,'[3;5H','Gear ', + A1,'[3;67H','Flaps',A1,'P1p',$) C C Return End C C ============================================================ C | Programmer ----> Patrick N. Smits ............. (Smitty) | C | | C | Programming Language : Fortran 77 | C | CPU Hardware : VAX Operating System : VMS | C | | C | Version 1.0 Last Revision : October 29,1985 | C ============================================================ C C Subroutine ----> Plane Takeoff Position C C This subroutine positions the airplane at the end of the C runway. The airplane is then ready for takeoff.......... C C Subroutine TAKOFF C INTEGER*2 COMPAS !/ATTPAR/ INTEGER*2 TOGGLE,RNWYDF,OPENCL !/RNWAYP/ INTEGER*2 TOFROM,ALPHA,RNWAYH,AHEAD,BETA !/PLANE/ C Integer*2 RNWAYX(4),RNWAYY(4) C Real*8 Z,PLANEX,PLANEY,ADIST Real*8 RNWAYL Real*8 AIRSPD,RPM,CLMBRT,HORIZ,TURNRT,ALTITD REAL*8 FACT9 C Common /ATTPAR/ AIRSPD,RPM, + COMPAS,CLMBRT,HORIZ,TURNRT,ALTITD C Common /PLANE/ PLANEX,PLANEY,TOFROM,Alpha, + ADIST,RNWAYH,AHEAD,Beta C Common /RNWAYP/ RNWAYX,RNWAYY, + RNWAYL,Toggle,RNWYDF,OPENCL C C C Calculate new Position and heading to airport........ Z = Float(RNWAYH)*0.017453292 + 3.1415927 FACT9 = RNWAYL*0.995 PLANEX = DSIN(Z) * FACT9 PLANEY = DCOS(Z) * FACT9 C COMPAS = RNWAYH C Return End ! ! FLY.COM - FILE TO COMPILE AND LINK FLY.FOR ! ! ! R. ZAHORA REV. 3/05/88 ! ! ! FORLIB.OBJ IS ASSUMED TO BE IN SYSLIB.OBJ. ! ! FILE F CONTAINS MAIN PROGRAM ! ! FILE F1 CONTAINS SUBROUTINES SAIRPT,SCOLOR,SCRDIS ! ! FILE F2 CONTAINS SUBROUTINES CALPOS,GETKEY,INSTRU,LANDCK,RUNWAY,TAKOFF ! ! ! ! ! A. COMPILE FOR THREADED CODE (NO HARDWARE) ! FORT/CODE:THR F,F1,F2 ! ! ! B. COMPILE FOR INLINE CODE (USE EIS CODE AND FPU HARDWARE) ! !FORT/CODE:EIS F,F1,F2 ! ! ! C. LINK WITH OVERLAYS AND SHORT FORTRAN ERROR MESSAGES ! LINK/MAP:DK:/PROMPT/INCLUDE F F1/O:1 F2/O:1// $SHORT ^C . :hH`((`@z((.=t(G(`(z(a8}.```za(}=t#S'P;.HHsHGHG&`((hG(hM`(h,@8@cG7 tA,@8 a8}a8}' :l  a(},a(}7.: :$t :d2r8 eHX"i'- te` 6Kq:,xTa(}5 i'-     r8 O 6KL a(}3F: bea8}&@.&S(T120) <a(} +a8} .N@S}@F;@S@S}@Z.Tq@@,E@Jw{@S5@ .G9@!@vs@3}^@:@.kf@s@S۪@T۪@@. @Q@Dū@e@Ѫ@a8} G ,a(}"G-.NS} r8  F;S r8 :.F;S} t :d F; S} t :d3 .F;S} t :d F; S} t :d,.F;S} t :d" F; S} t :d*8.F;S} t :d F; Tq a(}nD.Tq a8} ,EF;S&R( a(}F;Tq a(} ^.Jw{F;S5 a(}F;Tql{( a(} Jw{ F;Tqx=1. a8}Tq a8} G9 !N^.vs F; 3}^F;N.: F; kfF;?.S a(} F; Tq a(} 56(sF;Tq a8} TqE. a8}G9! N:J.F; kf F;S a(} ] .F;Tq a(}  sF;w(Tq a(}Tq a8} '(,EF;S۪ eHX T۪)@AL. a(}  jNQMN2.N vsN: &.F; kf F;Tq a(}r4.Tq a8} ,EF;S۪B* eHXT۪ a(} Dū a(}L BSC*e j NѪ a(} ^UV, N QNtrn.:F; kfF;S5td( a(} F;Tq a(}  [(sF;Tq a(} TqM( a8} ,E F;S۪7E* eHXT۪ a(} Dū a(}@A] B*e  NѪ a(}_`a, N QjNN.: F; kfF;.S a(} F; Tq a(} 5(sF;Tq a(} Tq( a8} ,E F;S۪7@A[, eHXT۪ a(}  jhlNQ u.vshH`((`@z(().=t(G(`(z(a8}.```za(}=t#S'P;G(vsh,8;@bG7 ,8; a8}a8}'vs  a(},a(}7eHX"r8 e eC.=Oa8}a(} -a8}G;F;F.N@Tq@@w3X@S@_.ժ@t@zժ@F;@Q@y.S۪@.@Sū@S}@p@.f@ z;@T;@Sū@S;@3.*v@S@@S۪@T۪@.;@S;@l۪@<p@8Z@.S@S@T;@Sū@:@S@T;@\q@a8}G za(}6eG .NTq a8} w3XS * a(}N ժ a(} a8} ",t6N zժ a8} a(}0*F;Q NS۪ a(}>..Sū a(}  F; S} a(} J.NTq a(}  Tq a(} sZ*pS a(} S۪ a(}'d@HC,f z; T;Sū eHXF;5tr(Tq a(} Tq a(}  Oj*pS a(} S۪ a(}@HC,f z; T;Sū eHXF;-Ah.S; eHX *vSH"*tJN S; eHXZA0**vS tJNF1.S۪ eHXT; Sū eHXF;"F.S۪ eHXT; Sū eHXN?(Tq a(} Tq a(}  O*pS a(} S۪ a(}zF(.fT۪ a8} ;Sū r8  E.F;S; l۪ r8 Sū a(}".Tq a(}" <pST۪(* a(}Sū a(}* Tq a(}*2.8Z S eHX F;Tq@* a(} Tq a(}  pOLCF.ST; Sū a(}2Tq a(}2Z ~.: S T;Sū eHX jF;\q.GwjMhH`((`@z((.=t(G(`(z(a8}.```za(}=t#S'P;G(GwjMh ,8;@bG7 ,8; a8}a8}'GwjMr  a(},a(}7a8},&S(M(L)(AHLS)) ia(} -8@Ea8}, ,.N@Tq@G9@S۪@y@!@\q@a8}.G :a(} G.NTq a8}, Tq a8}G9.S۪ a(}y S۪ a(}ya .S۪ a(}y S۪ a(}yY,,S۪ a(}y ! N\q.Jw{hH`((`@z((.=t(G(`(z(a8}.```za(}=t#S'P;G(Jw{h(,8;@bG7 ,8; a8}a8}'Jw{  a(},a(}7te`  *' YyNESWPp , ,\g ..BBd   . >̙?@f@ff@A@AAA.0AAAffAAffBB BBP.VBB33BffB̄BBffBBxBpB.|`BPB@B0BAA@AA@.@?̙?L?>AA̩AA.ffA33AAAA33AffAAףyA.eASA33IA9A0A0ApApAsA33yA.AAffAAAA33AA̾AffW.:AAAffA̹AAAffA̳A ׳A.`33A\A8B\BsB33BB0A@.0AAA33ABBff$B&B|.ff(B)B+B33+B330B0B.Bff,B+B33.)B(B&Bff BBBAAAAD.A33AyA|ÀAAyAlAfAff7.`ASA33@A0A0A@AYAfAfflAsA.D33zAHAĂAffAAA= A„AvjA33A .A33A33ABB|AyAiAlÀAC ( :.:B33~BfftB̄Bff@@ A ABffBS.`ffB̈B̉B33BffB̊BBBffB.BffBBB̊BffB33B̈B̈BffB.ffPA0A0A@33@@@@@333A339A.FAffPAYAfAfflẠA33AAA33pAXpAPA ru.rlBlBnBffBffBBffnBfflBlBA.A= AffAffAAAAAB.{B33iBcB33`BcB33iB{B33BAffA.33A33ĄAA33A̬A̩AiBAW. A33AA33AiBA33A33A̮AffA0AA@ :a8}.&[2JS[0,0]W(I1,R,S0)T(S1,I05..)&S(E)W(I3)+P[,]+V[V.T,]&P[250,352]W(I1)(T(S1)"Digit=.zal Equipment Corporation 1985"&P[17.0,10]W(I1)T(S4)"Welcome to"&P[170,8).0]W(I3)T(S5)"Smittys"&"P[120,160L.]W(I2)T(S4)"Flight School"&2P[50,440<.]W(I2)T(S1)"Programmer : Patrick N. S].8mits"&2P[50,460]W(I2)T(S1)"RT-11 Con.^v. : Rob Zahora, 1988"&/P[480,440]W(.I2)T(S1)"Push Return to continue ? " .*&+S(E)P[100,10]W(I1)T(S3)"Select P.ilot Rating"& P[200,60]W(I2)T(S2)"1 .- Beginner"&P[200,90]W(I2)T(S2)"2 -;. Solo"&$P[200,120]W(I2)T(S2)"3 - PriP.Bvate VFR"&$P[200,150]W(I2)T(S2)"4 - P.hPrivate IFR"&#P[200,180]W(I2)T(S2)"5v. - Instructor"&!P[170,250]W(I3)T(S3)."Selection ? "&T""&,P[100,420].T(S2)"Would you like help (Y/N) ? " *n.&+S(E)W(I3)P[200,50]V(B)[+400][,+40&.&0][-400](E)&2P[300,50]V[,+320]P[400,|.L50]V[,+400]P[500,50]V[,+400]&2P[200,8.r130]V[+400]P[200,210]V[+400]P[200,290].V[+400]&P[200,370]V[+300]W(I2)&6P.[210,55]T(S2)"PF1"P[+45]T"PF2"P[+45]T".PF3"P[+45]T"PF4"&7P[210,135]T(S2)" 7.  "P[+45]T" 8 "P[+45]T" 9 "P[+45]T" - ".0&7P[210,215]T(S2)" 4 "P[+45]T" 5 "P[.V+45]T" 6 "P[+45]T" , "&9P[210,295]T(.|S2)" 1 "P[+45]T" 2 "P[+45]T" 3 "P[+45].T"Enter"& P[210,375]T(S2)" 0 "P[+145.]T" . "&W(I1)6P[230,85]T(S1)"Not"P.[+72]T"Not"P[+72]T"Not"P[+72]T"Not"&3.;P[230,105]T(S1)"Used"P[+62]T"Used"P[+.:62]T"Used"P[+62]T"Used"&P[230,165]T?.`(S1)"Gear"P[+60]T "Nose"P[+60]T"FlapsH."P[+60]T"RPMs"&P[230,185]T(S1)" Up ."P[+60]T "Down"P[+60]T" Up "P[+60]T". Up "&P[230,245]T(S1)"Turn"P[+60]T. "Not "P[+60]T"Turn "P[+60]T"RPMs"&.P[230,265]T(S1)"Left"P[+60]T "Used"P[!.D+60]T"Right"P[+60]T"Down"&;P[230,325,.j]T(S1)"Gear"P[+60]T"Nose"P[+60]T"FlapsJ."P[+65]T"Not"&P[230,345]T(S1)"Down"`.P[+60]T " Up "P[+60]T"Down "P[+60]T"U.sed"&)P[230,405]T(S1)"Apply Brakes"P.[+80]T"Exit"&)P[230,425]T(S1)"Moment6.(arily "P[+80]T"Game"&/P[250,460]W(I27.N)T(S1)"Push Return to continue ? " *`.t&2S(E)P[100,10]W(I3)T(S2)"General FlH.ight Information"& P[100,70]W(I1)3To.(S1)"Apply up to 40 Degrees of Fl8.aps for Lift"& P[100,90]W(I1)3T(S1)D. "Increase engine RPM to maximum for .2Take Off"& P[100,110]3T(S1)"Pull ba.Xck on stick (Key 2) to rotate airplane[.~"& P[100,140]8T(S1)"For touch and g.oes stay within 10 miles of Airport"&H. P[100,160]8T(S1)"For a new airpo+.rt fly out of the 10 mile radius"&P}. [100,190]W(I3)%T(S1)"Beginner, Solo, .< and Private VFR"&P[100,210]W(I1)%T.b (S1)"have runway alignment displayed". &P[100,240]W(I3)(T(S1)"Private IFR . and Instructor ratings"&P[100,260]W. (I1)(T(S1)"Well, Good luck in the bad>. weather"&P[100,320]W(I2)$T(S1)"RP. M and Climb register in x100"&P[100".F ,340]W(I2)1T(S1)"Altimeter display .l x100, x1000, x10000"&P[100,360]=. W(I2)0T(S1)"Respective pointer Long . Medium Short"&P[100,400]W(I3). 7T(S1)"Note : RW indicates runway to b. e used for landing"&P[100,425]W(I1).* 6T(S1)"Multiply RW x 10 for heading (.P ie. RW 29 ---> 290"&W(I1)T(S0)"0"T(L.v S1)&T(S1)&S(E)&(W(I3,. R)P[0,348]V(B)[+767][,+130][-767](E)&K. "P[0,348]V(S)[,-326][+767][,+326](E). &W(I2,V))P[120,406]C[+50]P[+110]C[++. 50]P[+110]C[+50]&P[+110]C[+50]P[+110].4 C[+50]P[+110]C[+50]&.W(I2)P[105,460]4.Z T"MPH"P[+80]T"RPM"P[+70]T"Climb"1P[+6. 0]T"Compass"P[+50]T"Horizon"P[+40]T"Alt. timeter"& W(I1)T(S0)&P[,]T. ""&P[,]T""&P[,. ]T""&P[,]T""&P[. ,]T""&P[,]T""&.> P[,]T""&P[,]V[,.d ]&P[510,406]V[+15]P[610,406]V[-1m, 5]&P[,]T""&W(I3,C) a(}:8@Ea8} l  @|٠?|@?¸.N@SS@@@Tq@G9@.|@4}@!@S}@F;@.@GwjM@S@S5@v5@=.Sū@Ѫ@@S۪@TS@7.Sū@:@S@۪@y@F.Y @5@Y@S;@zS@L.;@Sȫ@B9@S}@t;:@.@Ȫ@t@z;@.@X.Q@S5@Ȫ@S;@ժ@.K@:@@\q@z۪@x.T۪@f@Sū@W@S@.T;@8Z@;@v@ @.Sժ@z5@L@L@t@B.S۪@X@z;@Iū@8Ȫ@vժ@(@a8} G Ja(}G23s.NSS a(} @ N.Tq a8} Tq a8} G9Tq&. a(}*|Tq a(}* |Tq25. a8} Tq a(} 4} !N@.S} a(}jF; S} a(}hF;/L.S} a(}^F; S} a(}`F;CX.S} a(}bF; Tq a(}bTqd* a(}`Tq a(}^ Tq a(}hns.Tq a(}j GwjMF;S|!x. a(}jF;S5 a(}hF;S59d. a(}^F;S5 a(}`F;S5N( a(}bF;Tq a(}b TqD* a(}`Tq a(}^ Tq a(}h-.Tq a(}j GwjMF;S5B. a(}jF;S5 a(}hF;S}t9dy. a(}^F;S5 a(}`F;S5 ( a(}bF;Tq a(}b Tq* a(}`Tq a(}^ Tq a(}h.Tq a(}j GwjMF;S5c. a(}jF;S5 a(}hF;S}tdd . a(}^F;S5 a(}`F;S5 ( a(}bF;Tq a(}b Tq** a(}`Tq a(}^ Tq a(}h4.Tq a(}j GwjMF;Tq4BOT. a8} Tq a8}0 G9 !N P(S a(}dv5 a(}Sū\* a(}:v5 a(} Sū a(}<hP**NѪ a(}dF;]xo.Tq a8} Tq a8}= G9S۪Ee* a(}.TS a(}: Sū a(}6V.Tq a(} :S۪/M* a(}6Sū a(} Tq a(}A.yS۪ a(}2 TS a(}<Sū4* a(}Tq a(} :).S۪ a(}8 Sū a(}TqR. a(}y! NѪ a(}dm *Y 8F; Tq a8} Tq( a8}LG9S۪ a(}. TSa* a(}:Sū a(} Tq a(}y.: S ۪ a(}6SūD( a(}Tq a(} y S۪* a(}2TS a(}< Sū a(}.Tq a(} :S۪** a(}8Sū a(} Tq a(}d4TP,y!N 5 a(}:5F,W, a(}<Y a(}d hNSV* a(}dv5 a(} Sū a(}>bX'.v5 a(} Sū a(}@NѪrq, a(}d  F;Tq a8} f.Tq a8}=G9 S۪ a(}.TS-\* a(}>Sū a(} Tq a(}]M.: S ۪ a(}6SūDD( a(}Tq a(} y S۪:* a(}2TS a(}@ Sū a(}+.Tq a(} :S۪"* a(}8Sū a(} Tq a(}LZ,y!N Ѫ a(}dY ,<F;Tq a8}  Tq a8}Lo.G9S۪ a(}. TS a(}>Sū* a(}Tq a(} :q.S۪ a(}6 Sū a(}Tq( a(}yS۪ a(}2 TS* a(}@Sū a(} Tq a(}7$.: S ۪ a(}8SūB2\U. a(}Tq a(} y !N0@BB.S;zS a(}> ;Sȫ a(}>P]*.N5 a(}>5 a(}@Ybb, a(}dl F; S a(}dv5`rr* a(}fSū a(}B v5 a(}z~_.Sū a(}DN Ѫ a(}dW,F;Tq a8}  Tq a8}=K.G9S۪ a(}. TS a(}BSū>* a(}Tq a(} :Y3.S۪ a(}6 Sū a(}Tq)( a(}yS۪ a(}2 TS* a(}DSū a(} Tq a(}.: S ۪ a(}8SūBa. a(}Tq a(} y !N*Ѫ a(}d Y  RF;Tq( a8} Tq a8}L G9 S۪y* a(}.TS a(}B Sū a(}.Tq a(} :S۪* a(}6Sū a(} Tq a(}(.yS۪ a(}2 TS a(}DSū4* a(}Tq a(} :5@.S۪ a(}8 Sū a(}TqLc-. a(}y! N5 a(}B\{,5 a(}D Y a(}dF;lw(S a(}dv5 a(}nSūdxk* a(}Fv5 a(} Sū a(}He*NѪ a(}dF;>P.Tq a8} Tq a8}= G9S۪EF* a(}.TS a(}F Sū a(}7.Tq a(} :S۪.* a(}6Sū a(} Tq a(}".yS۪ a(}2 TS a(}HSū}* a(}Tq a(} : .S۪ a(}8 Sū a(}Tqg. a(}y! NѪ a(}d%*Y TF; Tq a8} Tq( a8}LG9S۪ a(}. TSa * a(}FSū a(} Tq a(}.: S ۪ a(}6SūD$( a(}Tq a(} y S۪e.* a(}2TS a(}H Sū a(}8.Tq a(} :S۪F* a(}8Sū a(} Tq a(}Pi,y!N 5 a(}F5b v, a(}HY a(}d F;Sqpr* a(}dv5 a(} Sū a(}JV|k.v5 a(} Sū a(}LNѪT, a(}d  F;Tq a8} I.Tq a8}=G9 S۪ a(}.TS-?* a(}JSū a(} Tq a(}0.: S ۪ a(}6SūD'( a(}Tq a(} y S۪M* a(}2TS a(}L Sū a(}.Tq a(} :S۪* a(}8Sū a(} Tq a(}m,y!N Ѫ a(}dY ,VF;Tq a8}  Tq a8}LR.G9S۪ a(}. TS a(}JSū* a(}Tq a(} :.S۪ a(}6 Sū a(}Tq*( a(}yS۪ a(}2 TSF4* a(}LSū a(} Tq a(}>.: S ۪ a(}8SūBLo%. a(}Tq a(} y !NZ~(5 a(}J 5 a(}LYh l, a(}d F; S a(}dv5Cxi* a(}Sū a(}N v5 a(}Yq.Sū a(}PN Ѫ a(}dN,F;Tq a8}  Tq a8}=B.G9S۪ a(}. TS a(}NSū5* a(}Tq a(} :*.S۪ a(}6 Sū a(}Tq ( a(}yS۪ a(}2 TS9* a(}PSū a(} Tq a(}}.: S ۪ a(}8SūBs. a(}Tq a(} y !N*Ѫ a(}d Y  XF;Tq( a8} Tq a8}L G9 S۪y * a(}.TS a(}N Sū a(} .Tq a(}  :S۪$* a(}6Sū a(} Tq a(}..yS۪ a(}2 TS a(}PSūu:* a(}Tq a(} :F.S۪ a(}8 Sū a(}Tq{Ru. a(}y! N5 a(}Nbp,5 a(}P Y a(}dF;rn(S a(}dv5 a(}Sū~b* a(}Rv5 a(} Sū a(}Tw*NѪ a(}dF;5G.Tq a8} Tq a8}= G9S۪E=* a(}.TS a(}R Sū a(}..Tq a(} :S۪%* a(}6Sū a(} Tq a(}h.yS۪ a(}2 TS a(}TSūq * a(}Tq a(} :.S۪ a(}8 Sū a(} Tqoyw. a(} y! NѪ a(}d*Y ZF; Tq a8} Tq( a8}LG9S۪ a(}. TSa* a(}RSū a(}" Tq a(}"?.: S ۪ a(}6SūD*( a(}&Tq a(}& y S۪4* a(}2TS a(}T Sū a(}(u>.Tq a(}( :S۪L* a(}8Sū a(}, Tq a(},BV{B,y!N S;zS a(}RfB|.;Sȫ a(}R N5 a(}Rx[,5 a(}T Y a(}dF;W(S a(}dv5 a(}VSū{K* a(}Vv5 a(} Sū a(}Xa~*NѪ a(}d F;0.Tq a8} Tq a8}= G9S۪E&* a(}.TS a(}V Sū a(}.q.Tq a(}. :S۪* a(}6Sū a(}2 Tq a(}28.yS۪ a(}2 TS a(}XSūm* a(}4Tq a(}4 :[.S۪ a(}8 Sū a(}8TqW X. a(}8y! NѪ a(}d *Y p F; Tq a8} Tq ( a8}LG9S۪ a(}. TSa( * a(}VSū a(}: Tq a(}: 2 .: S ۪ a(}6SūD@ ( a(}>Tq a(}> y S۪J * a(}2TS a(}X Sū a(}@YT .Tq a(}@ :S۪tb * a(}8Sū a(}D Tq a(}Dl B,y!N S;zS a(}V| B.;Sȫ a(}V N5 a(}V 4,5 a(}X Y a(}dF; @(S a(}dv5 a(}6Sū 4* a(}Zv5 a(}F Sū a(}\ *NѪ a(}d F; .Tq a8} Tq a8}= G9S۪E * a(}.TS a(}Z Sū a(}FU .Tq a(}F :S۪n * a(}6Sū a(}J Tq a(}J .yS۪ a(}2 TS a(}\Sūi * a(}LTq a(}L :+ .S۪ a(}8 Sū a(}PTq? :. a(}Py! NѪ a(}d( *Y  F; Tq a8} Tqh4 ( a8}LG9S۪ a(}. TSa> * a(}ZSū a(}R Tq a(}RH .: S ۪ a(}6SūDV ( a(}VTq a(}V y S۪s` * a(}2TS a(}\ Sū a(}X=j q.Tq a(}X :S۪\x h* a(}8Sū a(}\ Tq a(}\ ,y!N 5 a(}Z5 D, a(}\Y a(}d F;Tq? . a8} Tq a8}[ G9 !N ..Tq a8} Tq a8} G9!2 .NTq a8}  Tq a8}G9v ,Tq a(}+| ! NTq r. a8} Tq a8} G9 !N\ .Tq a8} Tq a8} G9! V.NTq a8}  Tq a8}uG9 E.!N Tq a8} Tq a8}F 5,B9Tq a(}v | !N .Tq a8} Tq a8} G9!( .NTq a8}  Tq a8}G9T6 .!N Tq a8} Tq a8}D ,G9!N Tq a8} TqR . a8}#G9! NTq a8} ` ,Tq a8}LG9 ! NTqHn . a8} Tq a8}u G9 !N| a.Tq a8} Tq a8} G9!, .NS} te` NS} a(}h ,N t;:SSū  5, a(}F;Ȫ a(} t  ,G9!N Tq a8} Tq .. a8}G9! NTq a8} @ ,Tq a8}1G9 ! NTqa . a8} Tq a8}m G9 !N .Tq a8} Tq a8} G9! .NTq a8}  Tq a8}G9^ .!N Tq a8} Tq a8},G9!N Tq a8} Tq(. a8}RG9! NTq a8} 6,Tq a8}G9 ! NTqD. a8} Tq a8} G9 !N_R.Tq a8} Tq a8} G9!^.NTq a8}  Tq a8}^G9lu.!N Tq a8} Tq a8}Kze,G9!N Tq a8} TqU. a8}G9! NTq a8} QE,Tq a8}G9 ! NTq5. a8} Tq a8}= G9 !N(.Tq a8} Tq a8}r B9TqY. a(}v|! NTq a8} R,Tq a8}uG9 ! NTq. a8} Tq a8} G9 !N.Tq a8} Tq a8} G9!.NTq a8}  Tq a8}<G9 .!N Tq a8} Tq a8}g ,G9!N Tq a8} Tq . a8}G9! NTq a8} g,,Tq a8} G9 ! NTq{:. a8} Tq a8}M  G9 !NH.Tq a8} Tq a8}  G9!:To.NTq a8}  Tq a8} G9cb_.!N Tq a8} Tq a8} pO,G9!N Tq a8} Tq~?. a8}> G9! NTq a8} /,Tq a8} G9 ! NTq. a8} Tq a8}  G9 !Ng1.Tq a8} Tq a8}  G9!.NTq a8}  Tq a8}d G9!.!N Tq a8} Tq a8}= ,G9!F; Tq a8} Tq. a8}rB9Tq a(}v |!s#.NTq a8}  Tq a8}z G9.Tq a(}*| Tq a(},|%&,!N \q NTq a8} .Tq a8} G9 Tq a(}*|.Tq a8} Tq a(} 4}!*(.NTq a8}  Tq a8} G98*s.!N Tq a8} Tq a8} #F,c,G9!N Tq a8} TqT.S. a8} G9! NTq a8} Eb0C,Tq a8}H G9 ! NTqBp23. a8} Tq a8}  G9 !N~4#.S} a(}fF; S} a(}xNPE.S;z۪ a(}x T۪ a8} <>.fSū a(}z F; Tq a(}z C.W S T;Sū a(}^x.Tq a(}^ 8ZS;.Sū a(}nF; Tq a(}z?(C.vST; Sū a(}fTq[. a(}f 8Z S;SūV , a(}rF;Ѫ a(}f ,.F;Tq a8}  Tq a8} G9F *Sժ a(}n a(}n z5 a(}n:.Tq a(}ny Tq a(}ry$:v,Tq a(}fy ! NѪ2 d3. a(}fL Ѫ a(}fLtxB*Y t F; Tq a8} N(Tq a8} G9 Sժ a(}nEXz* a(}pz5 a(}p Tq a(}puds.yTq a(}r y Tq a(}fp=d,y!N Ѫ a(}ftW,F;Tq a8}  Tq a8} H ?(G9Sժ a(}n a(}r z5A( a(}rTq a(}r y Tq5. a(}ryTq a(}f y!@ ,N5 a(}fY a(}x.F;S} a(}f F; S} a(}x#C.NS۪ a(}x T۪ a8} .fSū a(}z F; Tq a(}z C.W S T;Sū a(}t.Tq a(}t 8ZS;.Sū a(}nF; Tq a(}z? C].vST; Sū a(}|Tq". a(}| 8Z S;Sū@2 , a(}rF;Ѫ a(}f l]@.F;Tq a8}  Tq a8} G9L*Sժ a(}n a(} z5 a(}X~.Tq a(}y Tq a(}rydI&,Tq a(}fy ! NѪr X, a(}ft  F;Tq a8} !X(Tq a8} G9 Sժ a(}nG* a(}z5 a(} Tq a(}3@.yTq a(}r y Tq a(}fL,y!N 5 a(}fY, a(}x F; S} a(}fF;]O.S} a(}xN S;۪ a(}x.T۪ a8}  f Sū a(}z.F;Tq a(}z WS C.T;Sū a(} Tq a(}4T.8ZS; Sū a(}nF; Ce.Tq a(}z vST;(Sū a(}Tq a(}  $.8ZS; Sū a(}rF;2*t.S۪ a(}rX ;Sū a(}t@.F;Tq a8}  Tq a8}& G9L.S۪ a(}nz; Iū a(}SūZ}( a(}Tq a(} y Tq8dq. a(}ryTq a(}f y!pV *F;Ȫ a(}f Y  NW~W.Tq a8} Tq a8}&  G9TqK. a(}yTq a(}t yTqX. a(}fy! N8Ȫ a(}f &,Y a(}x  F;S a(}f[,F;S} a(}x NS;z۪. a(}xT۪ a8}  fSū( a(}zF;Tq a(}z (C.WST; Sū a(}Tq%. a(} 8Z S;Sū"( a(}nF;Tq a(}z (Cc.vST; Sū a(}Tq'. a(} 8Z S;Sū"( a(}rF;Tq a8}  Tq,* a8}; G9Sժ a(}n a(}6.z5 a(} Tq a(}yTqD* a(}ryvժ a(}f a(}DN`#,|!N 8Ȫ a(}fYs\b, a(}x F; S} a(}xNl ].S;z۪ a(}x T۪ a8} 0zZ.fSū a(}z F; Tq a(}z C.W S T;Sū a(}Lv.Tq a(} 8ZS;K+.Sū a(}nF; Tq a(}z? C.vST; Sū a(}Tqt. a(} 8Z S;Sū( a(}rF;Tq a(}z B.WST; Sū a(}Tq . a(} 8Z S;Sū( a(}pF;Tq a(}z B.vST; Sū a(}Tq. a(} 8Z S;Sū&gE( a(}tN Tq a8} Tq2. a8}P G9Tq a(}n yTq>. a(}ryTq a(}p yTqJv, a(}ty! Y a(}xhXi.NTq a8}  Tq a8}i G9fk,!N S} a(}fF;S}Stm. a(}xN S;z۪ a(}x8O.T۪ a8} f Sū a(}zF;8(C.Tq a(}z WST;2(Sū a(}Tq a(} .8ZS; Sū a(}nF;(C.Tq a(}z vST;(Sū a(}Tq a(} e.8ZS; Sū a(}rF;.Tq a8} Tq a8}  G9Sժ* a(}n a(}z5 a(}Tq. a(}yTq a(}r yTqrU. a(}fy! N8Ȫ a(}f ,Y a(}x v F;Tq a8} $u6,Tq a8} G9 ! N(2*F;(F; ( F;\q"L PNbSENN &`GI<%) E P`N SN RS@N! TRf&S  fE  N@ r"4}m  E MN EA EL O` O  E =&D `E =&D `x =&RT``EP P`@E   EfD=&DN   Sf=&EEf=&`f=&N N V` P``RN N! TREf&S  fE &E^  iE  E P``E`ESSff&S  fE &MNCTO&E   E  @E  E R E  iE  E P``E`ESSff&S  fE &MNCTO&E   E  @E  E R E(D )!@ ! TRCL `E   E(D )!^@ ! TRCL ` Nn4  @   T90J"88 E P``E`ES VV`S`N! [EN! TR<f S SfS``EM@VN` N@<f&S  fE  &AN&E8 4@E  S NlA S`Bn &T``L`SD   N`A`I@A U`6 RC S N ! TRE VC@| ! SV``EMD!@EE MN ! .D` A LD`N  S`SfN 4<X]m !m ! TTC! fE-@  `N ! S S`! N! TREf&S  fE &AN&E  E}D^  4   88  888 @E   EfD=&DN   Sf=&EEf=&` 4 $--E  ! 42 m ! Of E fE-@  RO E `NC(` 9)  wZw8 S M1p g48m ! Ff fE-@  S=&S`f2 )S`NSf2 ` )R NSE =! T90JGE  S  GLD`N T`M`E kE  MN ID kE  T`E!@ ! TR } kE  N  `O@ &! N`CL @&AN&E E OSf  ! La N   EE m E m fAffMNCTO! N`m f=& f=& f=& VEf=& f=& f=& Ef=& f=& f=& Ef=& f=&MNBENNEE  INSL.kEm ! S`f Em ! S`f fE-@ f=&NRS MNCTON NEf=&R(ff=&ET fTf =&NL `! `@f=&C MOTLYfX  ! D@ @  f&b Aa ib r @ b r i b p ) @ EP P``RN Sff&S  % 8CN j34{Eu6um ! U ! T fE-@ u| E P``  &Sff&Sf &M& &Ef&S  fE &AN&E  4 $--E  !  =&f=&A M@5! ` 1& ` %W[_cgkos w {                  n n @ n n n n @ VN& D@ & D@ 6& ` '62! ` m ! Ff fE-@  S=&S`f2 )S`NSf2 ` )R NSE =! ! N N VDLRC E m4Cf=&N  U  : =& =&T =&TU Em ! fE! M`fE-@  RM`MN TN`TfS`NN`E N ! TRf S  ! TRS`L TPf&S  fE &AN&E  4E  m ! RI fO! N`m r fr  p   10 P P``RN Sff&S  fE &AN&E f S  &MRl&Rl0n  % 8CN j34{Eu6um ! U ! T fE-@ u| E P``  &Sff&Sfm ! RI fO! N`m r fr  p   10 r ^  1  Aa ^&fTmfIj r vp {r ` T`n K&&&&4j=&C SN! NN nEPk OU . N N N V``E `EMn =&f& D@ & D@ 6& ` '62! ` \}yu q m i e a]p q s . @ u r 0 x 0 0 0 0 8 0 0 v0 y  @E  * p lZ8!lZG  ]V @E  * p lZ8!lZG  ]VNbg  Y` &, jj~  m  S M5.[" m  Y`` 2 [4NA,] 5  *   F   MR`R@ ` 2$!$x  /` 7xx G!x  ?xx e!` ` `x ` ` Nf Y` .  .,  .  ., n , 1 n 1 n , n @ %%%%%%%% % % % % %%% # ' $ # ' $ @ g p  q s u r 0 x 0  0  0  0 8 0  0 v0 y H Y`p q , 1 u , 30 , 1 , 10,  0 0 0 8 0 0 v0 1r0 @                 BBAPBE  3 E  3 VNSMN D ` Y S` ``EL Vn  R`G RB O`R`D` l! TR PE G RS N! I^  ^        E   ATR K`E   ATR K`NEIN? =&N L   XRG`H =&N L  RG` NMNP P``R! TRf&S  fE  N@   ` 4 E   K`C `EIVD =&LATRAE   K`C `EIVD =&LATRAMN ARDTH =&RG`SCIP P``R! TRf&S  fE  N@   ` 4   7 +/3   =  7 +/3   =ff P``A N NSff S  ! TRSM`DTNEf&S  fE &DT&E  {w 4p<Em !  fR! N`m E P`` CMN ff P``A N NSff S  ! TRSM`DTNEf&S  fE &DT&E  {w 4p<Em !  fR! N`m E P`` CMN Sff S  ! TRM``RS@f&S`f``RE P`` CMN Sff S  ! TRM``RS@f&S`f``RS`` CMN Ef&S  fE &DT&E   4E P``A N NSfE S SfNEEm &ffm@ O   Y& t  &S &I Ym m m m m m m m m m m m m m m -m m m m @   f?   &&f  fN! R@  f! E  fV! E?  fO  f    ?  @   ^ @  A  ^v<> &&f A  & &&f A  & & &f &TA  `  &f@ &&f&A &&f &&f S &&f&fN! R@  S &&f@  &fff &fffS  &&f&&fO fO S B # &&f  c   &&f@# &f&c &f&  &&f# c  #c@ ^ @ 5 u   &&f5 &u ^v<>  5   5 u   &&5 u  J Y `NTOLCNO &   E   <> Em L  )      ^      &  `E P``A N NSfE S SfNER`N MNEf&S  fE  E   4|nEE &RE & CMN  S`A` XD5 LNMRCR ! TRN  F  `NTOE&&S&SR &Dl&PD  &f&fTR&&` L  N@ &&ff`SM`DTN nt Ex`4zf  m  A R&fff @m &&f& O`S  m Y GN NYDE X O`N m Y GN NYDE X O`N S m  GN NR G @DE X OP`N   O`S   AN  TAS`EN  O`S   m j m j O`@jD`E E` NEG@N   AASlN  O`S    &&fm  NERNNM@D O`E S`TA Mn SP O`RS`GI & O`S  &&fT@m n Nm n N` nsDNA n&O`A`NV^` MN. O`R` S  NNNn  s  && ARm   SRLRT &O@DN R T  N R PN. O`S  &&fT@m Em L  )      ^      &  `t &z" (!#$%m&'(S)*&+q&,'-'./01 234 5 6 7!8#9":";$<$=%>%?'@(A&B*C*D&E'F)G)H+I+F  `Nm a  RA ` aaD A  N.&T`Aa`DGn  &&f@&&ffm@ &&fflN`N M@DNE R`SXM z6 /2&Or z  PT`N  EC NE  & O`S   Am \m \ OR  S@\D LST L `NO` N N  S&AN&E  &&fm  O`MDO`.&NN S EN R TTO  &&fM@N E O`S   ARm g NT NMN I S SSmDN I tmzg  RSntm TOL T O`S   Am  NT ` &&fff I SN ID EPMn RM`N S N@m  N& ```CFCGn&SD   N N`MN S  SR    `MNT E  R M  &&f@ m  &&f ^{T X.& X O` AD   E` RATTMD   E` RATTMNT@   LRm   `LT^{D `  SX N T NRA X LD`N`SSD  X.& X O` RTRTR SS`E Am am m     SmrD  Nn& E O` ZlFN@S  BTO N  r MNm  RSS X E`DN `NR Nn&FRS `N Nl`CE  Nn B O`S  &&fT@m l m l  R RNlwD X  N^ARAw}ND   N   `w R &)  &fffRGX  m  R X O`DLTSLC TT ` @ P O`S   A &ffn&SNOS &ffn&SNOSFS@ Mnm  O``DO` RS`N S (R) (CR) ` (N Si & R O`S  &&fT@m W N`A`RCTWD&Nm  NT ` &&fff I SN ID EPMn RM`N S N@  G@m   SS@DNX, `IE.&F O`S  &&fT@SD&&f TXSD&&f TX NSlLRN&fE.m  O`` Y& A RDN&fff&` ` C A `NNTSG R&TR   NOA  &&f  PX     `  YN RR m     `D C`X O`RSD   VR`F` &T Y& S  C`X RSDN@. &&f &m  RN DSn&S SS@ O`S  &&fT@  Y `` LRCRORC`Sn&BSB m  &N&N@DO`BNlRC N&&`B`PR  &f@RC(0a(B O`S  &&fT@m n nm W N`A`RCTWD&N`E TR `L N`NR  &f&m  N`A`RCTD&N`E TR `L N` R`   &f&`(NE R&&ff O`S  &&fT@&f-@ &f-@ &f, SA  @DERC TA Mn&N  TT` RTGN S``N  & `& O`S  &&fT@m   `RC`@DVOS N` N``   SFN m   `RC`@DVOS N` N``   SFN N`N ( E&& &&f  n  &&f&m  P` RD`RR&` SD O`S  &&fT@`m  UTANO  NDTMlC S& &f&fnL@ `  FND&n&F  N`  G NNl S   &m  N NS`` MN O`S  &&fT@D``GmN A N  TASRX D``GmN A N  TASRX  &TN R&&f` N `AEDGS  m  RSS X EDN `R S @ RSSDN&N &TN@RN O`S  &&fT@N NRO XMTOAEOAm n nO`  F D`R`NANA `&G` S@X    m  ` ` D A  N.&T`` X N  F&f &fff RP O`S  &&fT@T T   & m U RMN&SU_D  _UU R m  R&f X.&SD D   O`S` N Y `` L RC S  VRE O`S  &&fT@m m   SXDERD W BCDX  S&fff&@ APRB R N  D `P IKNNSGAN TR   N`N S` Nn O`S  &&fT@m  m   Nn&@D m   GmN A D  m   RG DROR X  SCR F S SDR`` Y` Y S`S O`S m  &&f&`` `N NRO XMTOAEOAm  O`D E` EG`N C^ L&&&f&.&`NN &&f O`S  &&fT@@Em L `R LD ROR D`m L `R LD ROR D` m  C S RC&FDCPS `N ROO`N&,&&fl&&flN N Y `CFE  N O```E `BZ O`S m  O`S AN &S SD N Y `` L RCRORE.&FLC &&,LC ED %%$$   %"%$!$   4  fg C/n   /  o  < 9 D k 1    @  m  `RCTR&O@D   m  L RC``D`NX        ALTS` `LTD`S &&f & O`S m   Nn&@D m  CSR .m@ NP^X R NPPD Y<> m  NXD  Y ` S` SCR F S SDR``` Y S`S O`Sm  m  m  &&f&`` ` R X O`ODN   NSn&N ``` C`O@ ` &&f&n&&fT@E`  @ NMN,NTR   m  NXDN  Y &&@  &&X m  NXDN  Y &&@  &&X  Dm  S ` `EDB Y  Y ` S` RO ` YO`S &ff ` D` N Y O`S m  ^P m  ^PRTR&^DANNO`OR&TN RN @ &N `A S N  YN`S&&,&f,&f&f&fl LC ALC  O`S Am OT X N T OYDEZD Y `DX m OT X N T OYDEZD Y `DX E.OY PTLm N DED LC% R  A O@S` N Y `` L RC S&FLC  O`SCSRm  m  m  m  ( @ ( f ( @ ( f&fnR`ENOS &&f@   ^v&R`  m `  `  m `  DR^ ` @ ^ ` D Sm  m  R`ENOS <>  &R ATOR `RC Nn O`Sm  SR m  SR DVOS N` N``  m  N^D`E `N TO  N`T `C,TD`,T Y`  C N`N   &&f   B KNC` O`S&&fT@( @ TX( ( @ TX( TX]pDs( @ VX( XVX]pDs^v&R A SR N@MN, A  N`N NTO O`Sm lvclv}Dm qvRcqv}D m lvclv}Dm qvRcqv}D O`S   AMN`BR QA M TNR@ E,PN `EE.  RS FT`  ` & m \`` &  ` & m \`` &  \`L` & @ ^`^ `& f&fn^`LR`ENOS<>&R6L3cmail protocol B B B B B B B B B B (  "RYaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMU`R23456***BOOK MARK******BOOK MARK***ppapyokAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAADAAAAAAAAADAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKM544A-TE 5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPI    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA    nV@ T V@ TEE T M@Vo2SPARES  nV@ T V@ TEE T M@Vo RTIES TO THE PURCHASING DECISION RE CUSTOMER SERVICE IDENTIFY KEY COMPONENTS OF CUSTOMER SERVICE (MR) ESTABLISH RELATIVE IMPORTANCE OF SERVICE COMPONENTS AND TRADE-OFFS TO CUSTOMER (MR) IDENTIFY DEC'S POSITION ON KEY SERVICE COMPONENTS RELATIVE TO COMPETITION (MR) SEGMENT MARKET BY SERVICE REQUIREMENTS : UNIQUE CUSTOMER SERVICE REQUIREMENTS IN PRODUCT FAMILIES, CHANNELS, SEGMENTS WHAT ARE THE APPROPRIATE LEVELS OF SERIVE REQUIRED BY SECTOR ? WHAT DOES IT COST TO PROVIDE REQUIRED LEVEL OF SERVICE TO EACH SECTOR ? DESIGN THE CUSTOMER SERVICE PACKAGE ESTABLISH CUSTOMER SERVICE MGT AND CONTROL PROCEDURES * OUTPUT FROM THE SURVEY DEFIN TIME" INVENTORIES * DRIVE TO CLOSER, MORE DIRECT LINKAGES WITH MANUFACTURING * WORK CLOSELY WITH THE ACCESSORIES AND SUPPLIES PROJECT AND ALL STOCKED PRODUCT MANAGERS * EVALUATION OF SERVICE REQUIREMENTS RECOGNISE THE PERCEPTIONS OF THE PAIDENTIFY LOWEST COST NETWORK THAT MEETS MARKETING AND CUSTOMER REQUIREMENTS COMPONENTS OF THE DISTRIBUTION SYSTEM TIE TO THE SPECIFICS OF THE MARKETING MISSION AND OVERALL DISTRIBUTION STRATEGY INVENTORY STRATEGY (TO INCLUDE SERVICE LEVEL POLICY, REPLENISHMENT STRATEGY, DIFFERENTIAL DEPLOYMENT, STOCK TURNS AND LOCATION) WAREHOUSING STRATEGY ( INTERIM DEPENDENT LOCATIONS, WAREHOUSE DESIGN AND LAYOUT AND MATERIALS HANDLING METHODS) TRANSPORT STRATEGY (EXTENT AND QUALIFICATION OF THIRD PARTY, LOSS OF DIRECITION OF DISTRIBUTION MISSIONS (DISTRIBUTION MISSION IS DESCRIBED AS "A SET OF GOALS TO BE ACHIEVED BY THE BUSINESS WITHIN A SPECIFIC PRODUCT/MARKET CONTEXT") SOME POSSIBLE EXAMPLES OF MISSIONS : TO SERVE DEC'S INSTALLED CUSTOMER BASE WITH A 95% DELIVERY WITHIN 5 DAYS AT LOWEST COSTS FOR NON DEC-UNIQUE SUPPLIES PRODUCTS TO OFFER 90% DELIVERY WITHIN 5 DAYS FOR DEC UNIQUE SUPPLIES PRODUCTS TO OFFER 95% DELIVERY IN 24 HOURS OF MACHINE DEPENDABLE PRODUCTS TO OFFER 80% AVAILABILITY WITHIN 5 DAYS ON FURNITURE PRODUCTS. TO OFFER 95% AVAILABILITY WITHIN 10 DAYS ON ADDONS * DEVELOP DISTRIBUTION SYSTEM TO MEET THE BUSINESS NEED ANALYSE DISTRIBUTION SYSTEM AND I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I T CONTROL AND DETRIMENT TO CUSTOMER SERVICE, QUALITY ASSURANCE, ACCOUNTABILITY) CUSTOMER COMMUNICATIONS STRATEGY ( ORDER CYCLE TIME POLICY, DIFFERENTIAL CUSTOMER RESPONSE TIMES, DAMAGES, CLAIMS, RETURNS STRATEGY AND ORDER STATUS REPORTING), LOSS OF DIRECI I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I  (JT 6B rxs <<% O   X & 8o (V6pq <<% O   X & 88VI I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I AAAAAAAAAAAAAAAAAAAf u At  p * 5 ? AAAAAAAAAAAAAAAAAA A ]AAAAAAAAAAAAAAAAAAAp  tp [ s hAAAAAAAA 5 _AAAAAAAAAAAAAAAAAAA_AA]g  b  3 ] AAt > f  3 AAk|  ) m/  AAn / 5 n ) < ]AAAA (UV6uv <<% O   X & 8ony8VRU  s sb m df ) m f ] f qA )  D_oQ ]_o f $ u   t D 7 d4 3 6 A  f > ]_o ~ n  p ~  ]_o  p n  ]] f . A s 5 $ - ]  j / ~ $ A D_o~ ~ $ | ]8 (Ty6z{ <<% O   X & 8ont8TRU 9 & t% T1  A b  A A 3 xA g & f% T?? ( HV6 "B |}~<<M <   dexpand for chris ndrorp MENTS dexpand S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SDRU R  ]j  V[  d &AAp A_AAAAAAAAAAAAA A_AAAAAAAAAAAAAAAAAA ~ A3 t g3 | b j /  | ~s  4 A f t Ai 5 ( i & d f  A 1  |6 q j ~ I u b t A   j v j bm q3 j /  ' d1  i 0 j  i " n jt p/d. b q s b j 3 j / j  b Aj o5 u j $ p & uf j 3 j / I3 b q3 j / p 0 z uf ' p b uj qz AA j  A p v& t A   p p 3 d1 i g3 b q p & fd A f p n A p  1 / & u i 3 ~3 | ~uf d A |s % A  A s 5 c%* b M q b j / b o 5 j /  #*  0f " O )& uf p  p i |3 tb m o5 bq z u   ) A p ) A 0  & m / 8 p uf q j   pi ub  ) p v z c4q j p ) A 0  5 f b  p |6 q j As 6 ) m t6 6 q j ~ f RU 8 88HV8888888888888888888888888888888 ! RU AAAAAAAAAAAAAAAAf q ?AAAAAA - 4 A 6  * / b3  0  ' uf e - 4 p |" f s /  -O Ai C4 m ~p " f A RRA7 o |>A- f  b A0 * 4 b u o j 3 j / s   p e b  C1 v 5 ~ | |> 3 p j / If f j * b C  v j AA A j f A p | 5  11 4  | |6 q j AAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAA|> v AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAA1 f A / AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAA5m AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA o5 u & n3 i us I d1  ' b $ A 3 e * q f A Ab p 6 ) j 3 j / AA p  p |j * b A m t A s  4 Ap 6 b bm d1  i vp % > A 3 vp j " j / ub A 4 m  p " A 3 r b j / io5 s f A bd/ s A O *j f p % c4 m b A 6 ) j 3 j / ns  p  v 5  i b v e 1 p m  A f p n O A% n o " j s j uf b$ ' uj    e ~& u  s p   f Ap 4 p j / j A 3 v b & |6 q j ~bs A ' uf  u p i j 3 j / | A g i v 5 0 A |6 q j i |j * b A &  A " A 3 s & ub A x A s % s % A p xj ) uf j 3 j / e - 4 f j b f O % ~3 t o j & c m  f5 1 f A 3 pi *& A f ' jt q t p b f s u  bs A ' e - 4 '  A  f i |3 ? 5 *i 5 j b pi q * /  ' uj  " M |6 q j  o5 u p Aj 5 z p j 5 z A66 f ) " A b b b2 A . |j * b A  s % t vj j  t A b b u 0 s  6 t i 6 |> b f  ) A p nc  b j / p i 6 |> b f  &p |~  3 |  | 5 j j i q i s &  4 m  # j " j / tb f A & )  uj  " A A p e - 4 6 ) e"A j $ p 6  f c4 m  %* b A s p p uf |  3 ~A v uf f d3 1 / f P 3 e 6 4 A*m c 5 5 z o/ / f O " u i b ' ORAAAAAAAAAAAAAAAAAA|" f s /  -A AAAAAAAAAAAAAAAAAAAAAAAAAA 1 j z6  5  s $  A j $ * t p b s  t AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~ f x A g6 ' v . |j * b A | 8 . |~ )  #m | > 3 . | u A . 5 | % | x t g . 5  2 n . |> p 4 A"u0p 6 f 1 f x A  j g $ ub A x *m o5 b j A 1xAA|~   (HV6B  <<M <   CHRIS RANDALL CAMTECH LETTER ENTS CHRISd S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SD888HV8888888888888888888888888888888 ! RU & /qn AAAAAAAAAAAAAAAAAAAAAAA |  RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA j z |  > f  & s /  - AAAAAAAAAAAAAAAAAAAAAAAAAARA7 o |>- f %| 1n  i u u p dA & z Ai j p d/ ub A &x A p  |" ~/ SA + W| 3 uf q p & p  i x *m o A i p g6 p  p d. m 6 1 j /  e 6 4 Ap & ) 6 e uj  A t * A &no A p  6 j $ * /  i ue~ f q m &o A p n A |" ~ | j z |  A. 5  . & | |  A4f  " |  A.f  . & '* j j |  A4 . & A i -* 5  . & 5 z f p  &x A m0 * g3 j | j z |  M ~ $ b j / |> / s - j 3 j / A&~ *  ) & p 0 A  |~ & 4 b |  v d/ s - j 3 j / A.) $j  |~ A 36 u  30 f f ' p 0  j  f 5 f f ' |~ v 5 | j |> f 4 3" m |> f ' s t j i ' M | z *  ' s A b b A$ j b5 s $ |~ & 4 b   v |~ $ b j / A*f   A 3 |  A "s 7  |> ~ & 4  1$ |  A $ A 1$ |  A ) j A$5 . > & A( A p q & d p A| 3 j / p s *  1% A uf g e A7 A 0" " j / |> b A0" " j / |> b  2~ f  |n A. 5 b | 8x A 0  A p g A bC-4 |> / s - | 5  *i uf |   . & 6 A i   j g b    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> / P O .$s A AAAAAAAAAAAAAAAAA%* b A & f A $|~ e $ p &  &x A 0 s e t p AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> & |>   |> & d/ s t p A-* 5  0" " j / > b |~ t |> |~ & 4  | : |> |~ & 4 A3b |> &  A4 %6  b  |~ / 4 j 4  v f A  / %$ p 6 b3 b p q j | p 4  5  |> 0 A s f jA z6 d6 e d. m i p i A v uf p v s p p w  q4 *  :  g z j * b A n A 0 m AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> s | b m . b  &* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$ % A - A$ | f 5 4 |~ e  x f AAp p  o " AAAAAAAAAAAAAAAAA bw & g c  . d p & A>3 4 x A &  A 4 |> 6 % p f p e j & p AA  s ( b xb A   p c - | 4AA0 & n A jA e 1 AAA f u  qb & g3 g4 b p * t p p i s % O OA i e / 4 j ~ A3 t g3 | b j /  | ~s  4 A f t Ai 5 ( i & d f  A 1  |6 q j ~ I u b t A   j v j bm q3 j /  ' d1  i 0 j  i " n jt p/d. b q s b j 3 j / j  b Aj o5 u j $ p & uf j 3 j / I3 b q3 j / p 0 z uf ' p b uj qz AA j  A p v& t A   p p 3 d1 i g3 b q p & fd A f p n A p  1 / & u i 3 ~3 | ~uf d A |s % A  A s 5 c%* b M q b j / b o 5 j /  #*  0f " O )& uf p  p i |3 tb m o5 bq z u   ) A p ) A 0  & m / 8 p uf q j   pi ub  ) p v z c4q j p ) A 0  5 f b  p |6 q j As 6 ) m t6 6 q j ~ f  o5 u & n3 i us I d1  ' b $ A 3 e * q f A Ab p 6 ) j 3 j / AA p  p |j * b A m t A s  4 Ap 6 b bm d1  i vp % > A 3 vp j " j / ub A 4 m  p " A 3 r b j / io5 s f A bd/ s A O *j f p % c4 m b A 6 ) j 3 j / ns  p  v 5  i b v e 1 p m  A f p n O A% n o "q t p b f s u  bs A ' e - 4 '  A  f i |3 ? 5 *i 5 j b pi q * /  ' uj  " M |6 q j  o5 u p Aj 5 z p j 5 z A66 f ) " A b b b2 A . |j * b A  s % t vj j  t A b b u 0 s  6 t i 6 |> b f  ) A p nc  b j / p i 6 |> b f  &p |~  3 |  | 5 j j i q i s &  4 m  # j " j / tb f A & )  uj  " A A p e - 4 6 ) e"A j $ p 6  f c4 m  %* b A s p p uf |  3 ~A v uf f d3 1 / f P 3 e 6 4 A*m c 5 5 z o/ / f O " u i b ' ORAAAAAAAAAAAAAAAAAA|" f s /  -A AAAAAAAAAAAAAAAAAAAAAAAAAA|6 q j AAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAA|> v AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAA1 f A / AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAA5m AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|~   j s j uf b$ ' uj    e ~& u  s p   f Ap 4 p j / j A 3 v b & |6 q j ~bs A ' uf  u p i j 3 j / | A g i v 5 0 A |6 q j i |j * b A &  A " A 3 s & ub A x A s % s % A p xj ) uf j 3 j / e - 4 f j b f O % ~3 t o j & c m  f5 1 f A 3 pi *& A f ' jt RU & /qn AAAAAAAAAAAAAAAAAAAAAAA |  RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA j z |  > f  & s /  - AAAAAAAAAAAAAAAAAAAAAAAAAARA7 o |>- f %| 1n  i u u p dA & z Ai j p d/ ub A &x A p  |" ~/ SA + W| 3 uf q p & p 1 j z6  5  s $  A j $ * t p b s  t AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~ f x A g6 ' v . |j * b A | 8 . |~ )  #m | > 3 . | u A . 5 | % | x t g . 5  2 n . |> p 4 A"u0p 6 f 1 f x A  j g $ ub A x *m o5 b j A 1x  i x *m o A i p g6 p  p d. m 6 1 j /  e 6 4 Ap & ) 6 e uj  A t * A &no A p  6 j $ * /  i ue~ f q m &o A p n A |" ~ | j z |  A. 5  . & | |  A4f  " |  A.f  . & '* j j |  A4 . & A i -* 5  . & 5 z f p  &x A m0 * g  j g b    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> / P O .$s A AAAAAAAAAAAAAAAAA%* b A & f A $|~ e $ p &  &x A 0 s e t p AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> & |>   |> & d/ s t p A-* 5  0" " j / > b |~ t |> |~ & 4  | : |> |~ & 4 A3b |> &  A4 %6  b  |~ / 4 j 4  v f A  / %$ p 6 b3 b p q j | p 4  5  |> 0 A s f jA z6 d6 e d. m i p i A v uf p v s p p w  q4 *  :  g z j * b A n A 0 m AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> s | b m . b  &* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$ % A - A$ | f 5 4 |~ e  3 j | j z |  M ~ $ b j / |> / s - j 3 j / A&~ *  ) & p 0 A  |~ & 4 b |  v d/ s - j 3 j / A.) $j  |~ A 36 u  30 f f ' p 0  j  f 5 f f ' |~ v 5 | j |> f 4 3" m |> f ' s t j i ' M | z *  ' s A b b A$ j b5 s $ |~ & 4 b   v |~ $ b j / A*f   A 3 |  A "s 7  |> ~ & 4  1$ |  A $ A 1$ |  A ) j A$5 . > & A( A p q & d p A| 3 j / p s *  1% A uf g e A7 A 0" " j / |> b A0" " j / |> b  2~ f  |n A. 5 b | 8x A 0  A p g A bC-4 |> / s - | 5  *i uf |   . & 6 A i RU (> b   |  b$  p |f 1  ~*m c bo u ' l A A i / z q m )4 "  b c 3 f A i s p f 1  ~ . l i Af & b lv j O  g3 o/ - f p " & x A ci * p * /  s $ -  " l  *m c j $ j p & g3 uf q 0 f  A  8 pi *& jA &  & p i & 6 z q & v  t >  (HV6$B  <<M <   memo to me's: AMTECH LETTER memod S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SD888HV8888888888888888888888888888888888HV8888888888888888888888888888888 RU R  &AAAAAAAAKjhjubmAAAAAAAAAKAAAAAAAAAAAAAAAAAA?AAAAAAAAAAoufspggjdfAA ? ?AAAAAAAAAAAAAAAAAA?AAAAAAAAAAAAAAAAAA?AAAAAAAAAAAAAAAAAA?AAAAAAAAAAAAAAAAAAAA Ae& R5|~ | 3 A AAAARU &AAAAAAAAAAAAAAx0 m cj 5 dv A AAA6 AAAAAAAAAAAA - p  " t b z * ? ?AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA( g A AAAAAA j g  AAA5 f AAAp b  AAAAAA0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA& 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 AAAf AAA AAA  (HV 6 "B  <<M <   FMD memo to Peter Reindrorp FMDd S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SD ( UHV 6  <<M <   NOV CSSE GROUP MTG MINUTES NOVd S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SD888HV8888888888888888888888888888888 AAAAAA' A> i |~ %  AAAAAAAAAAAAAAAAAAAAf u d4 AAAAAAAAAAAAAAAAAAAA$ [Af 1     AAAAAAAAAAAAAAAAAAAAAA A U$ |> |~ & AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4 [ | H ? S X  X e p uf u ' tb x j $4   | j A*~ b    j z | xp e A b d1  ' |4  H |~  A f 1 f j 3  p uf e s j 5 s   b3 A0  p |~  * ) f !op  8 b uf e t p j  p uj  3 6 A ) p o5 i 0 j |> z6 qf  i 3 i  b f u i ' e5 j / |~ A & A |~  * 5  < AAAAAAAh AAA-$  AAA & @ & e 7 AAAAAAs hAA& A p e AAAAAAA ) A b AAWAAAAs hAA& A p e & 3 & h AAAAAs hAA& A p e p n f AAARAAAAs hAA& A p e  t > i AAAAA (UV 6LB   JOB DESCRIPTION ME. + MEASUREMENTS JOBd S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SDRU AAAAAAAAAAA h n o  R dR q & A~ | /AAAAA+o |b AAAAA3) A % AAAAA.& |~ 7 AAAAA~ -& AAAAA~ / .m AAAAA, 1 Ag3 btp u AAAAA, A 5e "& AA, ) | 0  %dR dR Rl m  A 4 | , 4s- i o k# b h AAAAp ' i8 |4 & &4 & ~ A p | & f |> bt  AA m  A ) 4 4s 3 t x -  i 6A > 0 A j & u & b&  ) p i 4 A b, j i x6 e m 1 u 0 p  i AA b AAAAAAAAAAAAAAAAAAAAAAAAAAAAf & A1  AA> i p j A 1  | ouz &x6 e c A j (~p c f 3 " & A 6 3 6 A A / uf t AA* f p i " A$ |> ? AA0 s A $4 ~"  |T %J~0 A q 3  A p f  AA u f %   i1 z |f 1  s $  AA" uf it p 4 | , |~  l A  b f AAAAAAAAAAAAAAAAAAAAAAAAAAAAf & Aj i 5  p 1 f . g3 |  AAAAAAAAAAAAAAAAAAAAAAAAAAAAf & * b A $ 5  % b |~ & | b i |4 & ~v A j Hp |  A/ "    AA A p |> p 4 b p j t & ts   A AA p  t g3 uf q v 5 AAAAAAAAAAAAAAA/  , g 6 5 . t &  f A> f  i 3 t |> b f n  j  p uf |~ v 5 AA% p n A 5p i $5 . |> &  t p i s % H  AA A8 uf |   j z |~ / 5 j / |~ A 1b p888V8888888888888888888888888888888  !  ! RU AAAAAAAAAAAAAAAA f $ u ?AAAAAAAAAAAAAAA?4 j  ? ? 3 j / t I c bm j v * tb f p  j /   b  p i 1% A % p n A 5j i 3  $4 * 4 | A p f i o " n  j z g v   f * /   b " p 0  " q v 5  A&6  i t * A m  g3 b  f t Ap 6  u  A 5 f 6 q 3 j ff  & 4 p n   s % A  qb & xf i s % A j v & A p uf  e  3 m 0  uf p $4  0 / bq 5 |> . s % t s 5  c5 A b " b t' x  5 p 1 / * j j Ij / x3 A b , tb f Ax  bn  ' uf |~ v 5 |~ 1 |~ e  A i  p U RW U AAs + M u  & p p p n i s % A j f b n   AA i n4 A 0 5 f j n AAAAAAAAAAAAAAAAAAAAAAA1 v 5 e  A v p d4 A  uf | |~ v 5  /j " j / g3 j 3 j / u $5 . AA4 |> f  i *b 5 b |> b f d/ b    AAi f 5  A%6  A  d&  ' gv b AA6 ( t s  AAAAAAAAAAAAAAAAAAAA t b j j / tf 4 A  s % A m  p g j A i 1% A % p n A : - AAA A m  A $5 . |> &  j j p$ p j AAAAAAA e  p q v 5 d& A d4 f j  o5 c n A>  d 3 j p ' |> p 4 u i b AAs % O A8  - 4 *i |~ ( j 4 u f f 1  s AAA 6 ub A s 1  f t p 1  b tp , xf s % A AA  * AAAAAAAAAAAAAAAAAAAAAAAAAAAA4b  qb & bA ? A & |~ o |~ $ b j / p  ' n t Af A ' e A A AAf 3  j  s 4n t b q t n4 b b f us 6 ) d3 A j j I.n AAAeM ~ A3  A 6 ( t j  p e / 4 j 4 AAAAAAAAAAAAAAAAAAAAAAA% / 4 j 4 b j m  g4 A~ 1  $ ~ b xj ) j u uf | A *m b j / AA1I. f 1A f p t b|  & |~ * |~ p " A  AA  . |~ v 5 |  |  n  A 5 f $5 . |> &  AAg 5 b w n%  f ) |~ &  1  11 4 u AA q   4 f  b bq O AAAAAAAAAAAAAAAAAA$b#q v 5   s c 3 b ? OA~  A ) b & A & | e |> p s- q j AAf ) " A * 5 & ci / ) & 4 p b | e q 0 j AA / 4  0 f A n A /f  b $  s # f b AAb &  j / u 0 O A.s 1 4 f * / t- u s % A AA  j z b 0 j  s # f AAAAAAAAAAAAAAAA8f & 4 f0 '0 5 A j   s& A A 4q v 5  p tp A s # f A j o  s t j & AA & nu nc A  A b &  0 j b5 A 4AA0  6 : b  > bq j " j z AAAAAAAAAAA4 N 5 b5 p d3 5 A q p & e 0 v j /  p q v 5 AA b  P 3 s j z q  < AAAAAAAAAAAAAAAA) o " b   f ) u    s % t u 1 5 q  jf  " j u  t & AAf 3 I s A fd b u d3 5 j / As < AA > 4g3 b$ | g0 m  AAAAAAAAAAAp 5 j A j A , b z *  3 q4 A b q AAAAAAAAAAAAAAAAAAAAAAAAAAAA  , n0 x A 5 f d5 . > &  3 6 t u 0 w s # f p s 7 AA j z j   6 ) b p * 5 < Ip 4 M s fd As  AAd6 f * / b r j z u o e$ b j / I < A > AAAd JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  , A> f  i d5 . > &  | qb f jA j f AA s % A ) n v p i q v 5 d & < AAAAAAAAAAAAAAAAAAAAAAAAAAA & 4 M s  ?OA / i z s 3 A ' q 3  *i q v 5  j tf As * j /  AA t fd s % p j AAAAAAAAAAAA m  p  & bA ) A  / u A> . m dA p  ) A A " m  A b f A p z6 1 AAq v 5 <  | b 5 j / ?~ v 5 ~ b u< b 5 p >3   u o 0 j e$ t m A 6 |   ' qp  " m g3 " q 6 t fd n Ns z x j x  b p & O AAAANnx ) xf g3 u0p e< , - & W U RU ~ p A / 8 f h  ' q 5 n A f ) b s j z  b   *  f ) b d/ & u < p A 1  M  o b c  f b  ' uf > p t g 5  A f & p i e* b A & A * bi A f 3 p  f b  ' q5 j p j  e q   *i q v 5 < ~ f A b " b 0 0 " l - & A0 bx 1 s p s % t A f * z up & b4 $ f A *i ub t * j z u f f 5 gj AAs $ & b i f * z u A  s $ & < ? f ' b5 If * * / n  b j v f Mt * / s J >3 4 v h h b n&  b p e j f z AA z f * * /   cn &  A / e 4c  _! )_? NAAi b 5 p g8 > bj z u f j ?5 . ? 5 AAA  j ) r j z qb b f  i 4 m   " A AAA6 M us 6 ) 6 A i & j p s % O A~ n3 j A / |  4 b j z us 6 ) o 5 j b AAu  i b f j i '~ * |~ p " A A i 44AA  11 4 AA) b 5 p $4 >" f ? Af  0 % t & g 5 AAA" b j z g3 uf q v 5  AAA%)_! _? u e 3 j / j o5 j f A p c 0 f f tb f p i p * j / AA i u A bh f u i & A 0 u q AAAAAAAAAAAAAAAAAAKAAAA? (UHV 6B  <<M <   rx02 memo TION ME. + MEASUREMENTS rx02d S`S`a TnN`T@`T@8 5  &f&f @E  M`SDVC`DE M`SDf b5  ' uf  < v , A t U RW U A p bq z t1 j 5  f q f  d. m t j / < AA~ 6  A 0 j  , t Abf u 0 v  A s A 0 f A f 5 A p qb A f 3  0 f As + A # 5 s  A AA p t AA p f5  b , u As j b t p/t) Af u f b q & 4 ARU > z |~ / 4 j  .j  c tj q p 3QA> ' ,  i ' A i j m/ & s  " A .j  6 A : 5 d6 e z6 d/ ub A   *m  p tj A / | Ss z6 0 j / |  A f A i A / 8 ub A  x j u ) & u 3Q uf i ) & dc v A  p f O 3" RU f~s % _ %  * / qb ~ |~ / f _ 4 " bq j " j / g3 e A d/ s - g3 u0  j ? x 8 :  4? A   n 3  b | < >   d i f5 w- i e qR b f " TqS b f  i % `td b f  %  % Tc AA 3  1 ~6 q " _ % t ~s (  %$ * / p &  A t A1' ) t u " |1 ?   8 ~6 q 3 A 888HV88888888888888888888888888888885 f o w * / p 3A b s 5 j  i u5 _q v 5  ~ qb ~ |~ / f _ / ' | ~  # 9 Av p s A ' 44x ~ b 5 _-~s % .) A .$ z gb n   i f5 w- 8 qQ b f i  qS b f i % td b f  %  c AA 3  t d  q 3 ~ f A A b  A ) 8 / | t At x A 4    g3 " uj  j 5 u *  0 v j / s # f 1+ A im b 6 5  q 5 AA i 3 A -  m 8  i 1 3 1$  |~ A tj m o5 p &m ? 4   A $ f f | ~ #Af , | t ~ q ' | ~b  6  | A  p * 5  v  s 5 j  ?s  p _ _q v 5  ~ qb ~ |~ / f _ / ' | ~  '0 ~v p s  A ' | d / ~x 8 :  )? A   n 3  b | < >   d i ? A _ -~i e qR b f i  qT b f % %  g4 b f  A_g t 6 q " _ # f q 3 s # f #s RA j n t o A " A $~6 q 3 A m  " ' A 4  A f u f x A 1  b e u 4   / | t ~ 6 _1+ A im b 6 5  f q 5 AA f o5 p  j 0    5 f A : 5  o5 n f O > p m  b u x u  6 _# g 4 ' j /  p t p |o  ~ w 6 s O oun/ / j p o 5 f |8 ~ f 0 5 t j / . ?  v |o  ~5 f : s 5 j  i u5 S_q v 5  ~ m  1f % e  A b f s f f b f  i b f b f s f i8 uf  j / q j " j / ? x 8 :  )? A   n 3  b | < >   d i f5 w- i e qR b f " TqS b f s i % td b f  %  % Tc AA 3  1 ~6 q " _ # f q 3 s # f 1 j 3 j / o5 p &m ? 4  s z j b m v t I55 * f i p c 3  Af   f * / j )  A 7 t 4 ' qA g3 j j  &m ~6  ve  3- ~p m( j 4 g3 j %b f  4 b f   AA 3  1 ~6 q " _ # s (  1% A f n j A |~ b & R| |~ 5 |~ b   p |~ 5 |  s # f j4   A 1' ) A p | 4t ~ s |~ b & u s 5 j  i u5 _q v 5  s A "    qb ~ |~ / f _ $ t A) A " 0 b f Rf AA " 5  ) j s A  x 8 :  )? A   n 3  |> o gb n   i f5 w-  Q b f  i  ?i  qT b f td b f  4 b f c AA 3  t d  q 3  &A &*  1+ A 1q  ~ v 5 e 1 j  *i 6 A 1% A . & j4  ~ 5 x A d/ j vA p uf f p 1 | ub M j  A 5 M v |4  bd p A3 t. 6 5 .  ub i s +   A b5  b" g3 |~ b &  A oun/  ~1  q A 3A b |~ b & u i i i u5 s % _ #~ qb ~ |~ / f _ #/ j c9 x A f * / Zp A , m  tp t Ru ?  2 p 4| | A / 5 p 4|  |M ~- 5 ? u "  | c / bm s8  i44x ~ b 5 _-~s % 1f 8 b gb n   i f5 w- 8 qQ b f & u 1 3 |~ -  A $ f f | ~m A)  &m  3 bq ' | ~b ?  A 3- ~p m( j 4 g3 q & 4  i i s  p _ _q v 5  ?  * /  b ~ |~ / f _ . f m  g3 | f  n  44x ~ b 5 _-~s % gb n 6 b  f5 w- i e qR b f i  qT b f % %  g4 b f  A_g t 6 q " _ q 3 s # f 1 o  g3 w qt i p c * / j4   A $ f f qb 3* n tf ~s 5 j  i u5 _q v 5  |  3 <  * / qb ~ |~ / f _ "j / p *7~ v 5 |  % p 3  7~  7  0 7i448 ~ b 5 _.~s % &* ,u   & 'A n d i f5 w-  Q b f . VqR b f " VqS b f 4N VqT b f / Vtd f A   fu f A p d| v 5 oun/ ~ 5 qb o | 3 p tp ) & p b d 3  & A | A A 3 t |> b f e u s + A ) & 0 t n j u 0 f f |~ b & Qs 5 j  i u5 X_q v 5  A " ~ qb ~ |~ / f _ / p i *  1 j /  *~A *A 1 j /  *m bt  b f |~ j " j / u p    ' n3 i p db q | ? 44j A   n 3  |> o gb n   i f5 w-  Q b f   1i   i  > i % ~ % %  % Vg4 b f N4N Vc AAg t ' ~6 q " _ # s (  /s % A j " j / A1u ~ |~ b & u q   6 _4 j z s   5  j *7t ~ A $5 . t & qb q A p * 5  v t i qR b f 4N VqS b f i % td b f  4 b f >  A_g t ' ~6 q " _ # s (  q   6 _oun/ ~ ( j 4 qb  |~ * q p " M d. m 1 & m i i s  p _ _q v 5  / q & c0  s + t w * / m  1f % e   & qb  6 5 . q 5  A/ s , q 5 1+ t b |b 4 u A1 44: ?  A   n 3  .$ z A1f 8 b    /"~6 b  f5 w- i e qR b f i  qT b f % %  g4 b f  A_g t ' ~6 q " _ #~s (  #4 ) >3 & A & 6 x A ' > v u " p & d f f A A j 5 f A " O |  p qb i  l,  n j q   6 _oun/  - p  p #4 ) A> & s  1j j t A- p  / |p & | b i i s  p _ s % _ "5 j$ ~ m  1f % e ~ s |  f x 8 :  4~ b 5 _)~s % &* ,u   d i f5 w- qQ b f N+ VqR b f +N VqS b f N'WqT b f N" Wtd b f  %  2P W~ A_g t 6 q " _ # s (  7 $~' | A A A 5  M |e A  j  / d/ *i |4 & v"    6 _1+ A A p |RU  i j ) A ' uf | |~ b j f & g b p  * f u $ 5 f & ?AAAAAAAAAAAAA4 |>0 x  ??< s % j / R ? jx A uf q p & p i f4 u s A - f b  ' uf d/ & u p  f & j i /55  O A8x A 0 uf s- ' s b |> s j q A & u " c5 A v 5 j p f & j i s  p _ _uf s p i j / | 3 M b uf v)   i  ' uf s / p ( ~ f pe t * tf p j A |~ bn 4 A &  j & j j v j /   b A5 ' p " 3 " jt b, - & p 6 O A)& uf f b *  &  p c p i v ub i 5  ' i Ai 6 ) f q f p 5 " f e At |~ V|> b z uf xp f  * tf m A f & g b bt  jA b  / t. 5 f f 5  ' |> s j u )  0e u b c(  0  p |b 3) t / s b b  p e *i Hi A f 5 p v  p > % j ' H | i 0A 55  A f & j b f A *i ci s 1 f t Ai 6 ) |~  4e A f & b uf u *   x A #i )  bqj d j / j i jA b f  p uf o j / p f / s b *i s A p b@1 j O A5 s 1 f t d b z df A j v s b A i A 5 j  xm & A p uf n3  b A " m u 0 3  b j b A j / s b A* o f A p Hv b" p uf |~ 3 A ). jA b A   ~ f e ' |> % xg3 s b i ub " 3 A5xj ) xp p i b " ' o v f 4 uf i xs u I"4 V|~ 4 VA| b A* | WMXA|~  QA|~ j  f * p (A " f)  ' |~ x A p g3 * | A ) / g3 g3 * uf q A " * z b A x|~ o p e 0 I*T|~  TYJ|~ v  7 A & A  5 c i H, b d/ s 1 p |> % I1VA*A| A p *i uf q A i |> % dd  - 3 bo i I1VA+ A& TS5 g3 uf u p i j / j v 5 f A uf w A j 5 p 5  f A ) A v  p i gf | J Af 1 f u , I*A  i A * u f g i  I)& A3f & Ai 3 xbl f p i s s 1 f t c jA " 0 u m b p & qA uf  " & p i s 1 f t b i f 1 f s A . fjf ) o A j v  b " & b i & p  v s b ' up & j - O A*uf fz db u  ' | .  1 t 4 u & df uf tb f p m  A (A i fj5  *i uf o nH#A " ' z6 5  4 b z6  f A f M z6 b tb vA 3A  A  & g g3 uf ep (H  3M f j  ) f 6  h x A s f H | . SA% p uf c btb f p  m uf i i uf j  g3 bu b" . jA f ' tj A A i t A ' h  q 3 i uf n5 +) i u  o uf |j 5 g3 bv j c & uf |> e |~ b b uf | Af   f mA ' uf q i  uf tz f p i - A 0 | +o uf dA p  b qj 6 b  j v  j j * b j / p i 0 p i )z > j A A i , p ' xj ) i uf i A |  J|  A " m u  f & t u b p p +o 4b u * / i |~ n s  u f p A . t A * b &m b g jt fq b j /  |  A"i 6 ) | )  " m e i j / p / A" m  i j / u s z g3 uf  b& Ai s j " A 6 x 3 * xj f  ' j A f &  i c( A &x A s  i 0 A A s j & p f & j i /55  O 5f o A f &  b uf | |~ b j & b b5 / uf qA ' uf q 0 ) 0 A " u j j x A (H  j j j " w  A*bq u bo " 5 ub A j z bqA ' uf t j / q & 4 |~ v  i g3  b j q z j i  ' s j / | f z b uf d.  ' f |~ - 4 bA 1 4 A 1f j j  & / A &  - i 6 A ' uj  j 5  s j |~ f p |>p (A b A & | i d/ f uAf i x $  i f H b b, xb A i iu p A1f m M H3f b c u A|5  A*pi x3 t |~ jf A f & b i 0 A 1 / & u   ' h u  i x df z e 3 j j 5 3 d/ f uAi 1 A s A ' p ~ 3 H  b  ' uf u t I. RA-  i x  b 4  u( f &d i8 d3 p f h u o i  f  j A p "  (H  3  s f A | |> s O ) t i s b o " c & p i  ' s j / x 0 u 6 & 0 jm s  3 s 0  Ai j i 1 p ' t j / u p A i  ' s j / j  5 s 0 f & Ai ' '  j / be  v u  & A s 7 b A 6 u | |~ f 0 5 ~ tA i s b b cj . A0 A f u i uf g3 *  4 p * A i * p i |~ - 4 | t Ri 1 j kf 4 A<>b A 5 |  p  " H |u p A 1 e&  A 1  f & j j  0 s p i " o p A i s b " b p i  f & | M uf kf  j /  c q b A p u j  8 j b uf b * q 0 g Ip  i. *i 6 A p i f i 3 6 ( A  f A j v f |t uf  5 ub A f xcj & A 6  j  *m /  p db j  j z f | b i j & 4 s m  ' xf uf bj z u f d. g b   ' q s j ub A g3 * 4 b h A ' o m ) A t j / ~ f uj fb f p i g3 s b 5  . uf w  v p (A ) A5 4 m 1 u t v | .  Ai |> % e / 5 f  ) p g3 v ub A $ 5 e A xj f x & tj m t |~ j  h & | A uj  p  6 A ' m7 |> A i p u u 5  f & x j |~ v  i & '  b *i uf i i tp A A e n p bg ' k . A 3 f * z e u f * g3 t j / |> %  t u  i j j " w  A 0 s b " t bm7  1 / & u (H  7 ) m7 A4jA ub A | .  jA j p (H  i |~ A "&  i '  6 j b j t &  uf m7  1 / & u p  p f &  b b 6 ( f A 7 j & b  & 4 f 5 p " w  A5j p t j / d A s 1 z c s 1  x p u f & u  m  . 5  v uf q & 4 |~ v  &g A +o uf |j 5 dj g3 s b  . uf q m xp s  i , p ' |> % | A e 6 u u / 8 p xb A f uf s b " m g3 c+o e g i f & ub A f  p g3 * 4 b o m A*x6 e t i uf s b " m g3 c+6  f c p ) 5 xt u i df A | ) ub A x b p j i j ) A ' uf d.  , p | A [A5 q b p  b jA 0 A & Af A p uf g A " m g3 s b s |> % 4n : ~ j  b u s b " m g3 A   b A b p (1 q j c5 A ~ b |~ O A4 "t SMTRb S A 0 A & ub A uf | |~ b s b t A / z b  & 4  1 / & p i * u (H  3  A 0 b i 0 b z s o A *i f m ' uf t |>  f & j A 5 b f 5 p s 1   " w  A j A b p i $ 5  b p fq A$w n uf q* f z xj f u  p s )i f p % b i t f j p i "" u t |~ 0f A x 0 A 5 A |> s M x 5 b bA f & A6 m j f jA v p xp f m7 AA 0 jA p uf mH | ) $2 3 ub A f & H 5 d/ j z c &M b o b)  0 f j / t p b &m f i 0 p m j *n u c f q A p t uf s b 0 *  x A " w  s  b . f q f p * A * 4 xj ) m x j A)  f & g3 uf  j d/ & x A f & s j tf *  * b gv  A1  i f & s A ' uf dv A | i gA p uj  b u d 3 | A8 |~ A 5 5  i &f *  m  dj e ' m u I&A [Abu p A f & j A 1 z A A A d6 e c 6 ub A f  f $  bm 5  ' s o  A0uf pi iM t. 0 A A j & u  & u0 g j 5 5 x i x  g3 p f & p j O A5uf " w  & g j & n A j f  ' bm j e 1 b s b * z l A b & x A i |> A i 6 ) t q  b  d/ f & u i 7 tf   ' e$ s 5f p * ' s b uf s  ' h j j  $j , b f( * v  x u 0 x I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I   b * |  ub A f & c  A 3 e&  A   f & 5s b  j j / s p p fu A s . u  3 j sf * p (A  ub A i * p A - j` A*uf mf u j i xz s b t  0 A t z I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I cRι>T΀Z/Z!a⹀x?Z!>7??T.G &@ .Dh>O஻xywu{ˀLDbt bn&7 4 stDJ0{:w8t9 &7K.!D w wDJ;;Vo{rYpY/.f/VorYrrVoYX8Ȃ0b1fVhʬɢXXkɠ/XؾXkoǢÏYh/ƢCCcÀr)Y?E(@P.b/h/DʀF.D.o`"bikʋ 0/00tkpY!(pY(PP&qTYp(\Cpi(\cDcb!DYC!.D/YCMDbNisYp(\Opi(\PTfqYpY!(OC=b!O=!.C/=COjt: & tp 3PX.n: &:C" n: & 7J wJTYpȏ3P"n: & t恬TYkhC8t)C!.n3C"P&+ &C& w w w wCJ灀 bCl w w w wCJYˀPC&C|YP"ClC~|YP" l ?ā!. P&TXY & & & &ӛ & & & &3P"TTY΀N2HR,T C c Ct(&Z&Ju`& s tvR/M4Nb5=f4c5&M=&4!.56&M!.N<&qOPTfpۚ(/C&CÁDQA/DQQݩYTVo{r)YJCzwÞCzi?mp{4 :  C6 6 D6CR, TCDJR T΀OPbhC&CÁZ'(YkPCpi \ Ū\ /ǮخCACخC/YC ZhCz/D.G&0tDw8t)::t:|4!.OoZO!OO&w3/u9 &P!C8t) CtuSZCziOcPnwieu@tdR,O4T,dRPT,CbDi!9s"C&;0C;'C/7HD9D" bDC&8t) CtƁTqiY}@p Y׹(Y"P\ & Á(npY 6  vspY(/\(nnO(n)P⦞0n;R[C ??OO   OO20@X  v  `O@ uT_ I(G $   ]         ]             ~ BNUsVf"Yk@ff"CbYCf"kC&/YCSYkVo{/YrYVWUTQJI&h_HH/_H.//gV./n3'⨺]HH/-(j}BPH/PTiPTfˣPn߀TYk%/PTfg/.ffl"CbYCU&YfmC&/YCJYk6b!Oȋ6O&OOhT/'(o-njP(f-TubZnÚ .ǒQA:3P/ȢTjTPd:Ks@O4D.G & i09 cC b;;c772&2!.3CbH88b&C F99&9P":k0!C/YC YkD&C"o 8EJ@ |˵0&~\ ~iRMNK1!.0/11DDoClDD4(C/DDCCHC&gC'H' _ff"fk"HVhr)o{YXCz鍠DD|Y ؎YCnzEE|)H" _bDlE 'EDD>/&pY(@/ɢ}+ngbIjfڼjCz)漚RsiTvH/j cdɀcɋ!"#$%&'()*+,-.;<123456789:#kk{i臹몪H3P&XX : bD c s s s Dt:C" n c s s s Vo{r)YR?T,R?@"TΈ 7b C DlD 'CJ/pTYkpR,W'"H/ nڮfԛ :&8⒑bf . ,|.b!. /க+b(,+&!./Љ%j$Y慼0&1&VrYVHh^`/dO'Vh!7H*P⳱y,/e)Y2YH &C CtC 'CDDC&C .KKKbVTCp /ŮخCACخC/YվC}Z螗BrA AcEBbDhE 'e)aĄtX & 7 DDJnLhJ}LkY ҈w8t:˳O&P&O&P&w˛tO6CPd6ŸO(/w8tĒ:|&˳Nt)þKκbb gJG&(*潾'N]κi9<< & && Á |J 07L/(Z('fЩ1пTәYK QQk|H &C&g CtYVo{r)Yǹllolh࠰&( )*& l+/+91/,,1ϩ7( 'Z('f-(/-iϼT)⢠Cz1ϼ9I)I)C&t)CþHH@/}!),i i(,n+k,iA/kս*ֽ*н*ѽ*Խ*ӽ*E&|E & & HC& (?CŁY:EOUYgUciG^bEd8EJļ8~\C~i\D&~CO&DP&qDDbh:J(/SD"D/gDgU_D&DÁJk]`/.'//g}+/{UCC/=!O⠠*<="!O⠠yZ&'M?&<@&>樀CO"Owiq SUOE4b!dOiEO&4!OPjP3"OPF8t):|P/4O'd)^#{tתPD&D3C&9D &9 &P!C8t) Ct恬YYh|)&HHC&gC'Y}ZX/ʢZ&NZ"b]/ǩȩ?D.G.CnC &NDGECdCC6@ .DiE7C >txw-]/ubuDbDTG n A&D"BBb@Di{a3;0301c/Z?13n<^=] ;[\@>=#'|29=&#='#@## 0>P^QSU * _1  a"#$%&'()*+,-./:12345678Q^,QS_^~{{{{>o߽oo/oO/ooW̔Β*ߴOp؃ׂցՀnߟiPc:ОϔΜkf8x4<6420“1̿0˿3ʿ2ȿйwxqffffffffffflffffffffffff++#+! #+++++++DCBApnMqrstuvlwxymPQRSrstuvw xy̰~0 2~2}r)k]pÁƉǁ Ǧ|wxD"Cb& ? EJC >D~\ ~i\ &~E E E~ ~C~i oC8n!.E(/!@E" ѐg/Ѭ֬gقʀ^EOfw8t9 &7!F 'FJOEJOTfwY *y&ph!>=!.O/O!<=H/@@>"@!>Z@bݚ4O"?(fxTPhY S_3P"2P&PP9bP:&媺Cb bDbEEbE Dt&"/JH"Cb!,Cz),Cz)Elw n bCn DbD 'CE~K K nhp(\(/\! niYʜ! ! k!hgI&~\&~ t9þIAg_H/ܚӡlhן+!>ײr>&(E!.> E/$|%? %]ZW /UcYW/&'1ϡ<[(=B[K"ckX)F"V(ÉV8[V3ÉύS;BS3ÉϛS;BS/ ZW/Ǯ ̵̹ 123456 XYB /4u ߊrl'eiwmqwx{/c]Ma.@?""""@؂"e"f""""""R""""ң",("""{/"""""~?{{{o`  pcO ) p1@1&"011++,(1-1& 0&+(d'+i1ހT~ CCbC' .( k(Y&"k TfJKf! 'H6|f#Hi7~ySH\2]&fG?krH|ilH|imHbh| Hbh| kSmbUgQRf%g$vMcbNf޴pY(OCF\ & &>F\ & &&>dt 6 7' 6 7'Jcb ' b{??`Pb.Yk.Yk)CbzÆ͆dž꜓|wpyY((YfN C3<[./3ϴP@/O@N@/M@L@/6l'3Y4Q(F&/ծ/Ů1ÉjcY):+/:I&"*É"<<[)>[)"0۸z"<+É9?"TJ"cXV/H&,ÉϲH/D"&:@T/[)>[)>> [>[ AX)V)i>/&/Ů&Hb&0b&6 .J&ZVVWk/ 1Éϐ`W Wkǀ/.3Ϻ%<͎ͮ)ÉH7B&aY)(`//W(/((/`DWԱ?" cYbh/`&62Éϛ[)Z%"@'`^~,  H?Sl/
II>xHI0I0"A]A"B$$B"AA"AA" ~~ ~~~""""""II*@@@!""AAA"c~<~6I|| @@ "AAAAAAAAAA"""AAAAAA""SETUP USER SELECTIONS MENU Screen Width 80 132 Cursor Style Block Underline Cursor Visibility Visible Invisible Scrolling Fast Slow Screen Mode Normal Reverse Keyboard keyclick ON OFF Terminal Mode VT100 VT52 Baud Rates Printer 3006001200240048009600 Communications 3006001200240048009600 ======================================================================KBDBRD `~`1!1qQQaAAzZZ2@2wWWsSSxXX<><3#3eEEdDDcCC4$4rRRfFFvVV 5%5tTTgGGbBB6^6yYYhHHnNN7&7uUUjJJ mMM 8*8iII kKK ,,,9(9oOOlLL ...0)0pPP;:;/?/=+=]}]\|\-_-[{['"'[ Communications 3006001200240048009600 ======================================================================@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@UCGRAM~@&))F$"BB=F((DBA0H"B<p  p@,QJ4H(2LDD@@H0"AA"B"b(DBGD" 8DB<~$$$II>8D$x@> 0H8"AII6<B<CBB"$!^*I  I*========= Press : '->' to Advance, '<-' to Backup, 'Select' to fix new selection 'Do' to fix new selections and leave Selections Menu 'Return' to use new selections and leave Selections Menu 'Remove' to load new System Disk Are you sure ? Press 'Do' to confirm Insert new System Disk and press 'Do' Any other key will return to User Selections Menu 3456 VWB /4z ߅HLTFLG PROGRAM HALT DETECTED STATUS  PROGRAM COUNTER  USER AC  USER MQ  STACK POINTER 1  STACK POINTER 2  Press "DO" to continue from the HALT and "Setup" to enter Setup DUS mit Taste 'BETRIEBSMODUS' 001200240048009600 ======================================================================@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 0H 88    @@  @@ @@~~ ~~ ~~0H