In BASIC
![]()
10 CLS
20 KEY OFF
30 SCREEN 9
40 COLOR 11, 12
50 PRINT " Ballistics":PRINT
60 PRINT " by Mike Williams"
70 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT " Press any key to start"
80 FOR J=1 TO 200 STEP 30
90 CIRCLE (320, 175), J
100 NEXT J
110 WHILE INKEY$ = ""
120 WEND
130 REM *** THIS PROGRAM HAS SEVERAL MODULES,EACH DEALING WITH A SEPARATE
140 REM *** SUBJECT ... COPYRIGHT MICHAEL WILLIAMS ... DECEMBER 1993
150 GOTO 170
160 COLOR TEX%, BAK%
170 CLS: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT
180 PRINT " Ballistics , Recoil and Loading Data"
190 PRINT: PRINT " A Program for their evaluation"
200 PRINT: PRINT " By Michael Williams ... Ver 1 ... Dec 1993": PRINT:
210 PRINT " Enter ... (B)allistics"
220 PRINT " (R)ecoil"
230 PRINT " (L)oading Data"
240 PRINT " (S)et Colours"
250 PRINT " (E)xit": PRINT
260 INPUT " Enter your choice ",D$
270 IF D$ = "B" THEN GOTO 330
280 IF D$ = "R" THEN GOTO 3570
290 IF D$ = "L" THEN GOTO 4370
300 IF D$ = "S" THEN GOTO 4430
310 IF D$ = "E" THEN SYSTEM
320 IF D$<>"B" AND R$<>"R" AND L$<>"L" AND D$<>"S" AND D$<> "E" THEN GOTO 170
330 CLS: PRINT TAB(22);"*** Trajectories for G1 Bullets ***":PRINT
340 REM ** WRITTEN ORIGINALLY BY WILLIAM C DAVIS IN 1984
350 PRINT TAB(19);"Modified for UK use by Mike Williams 1993": PRINT
360 PRINT TAB(17);"This program offers a choice between Imperial": PRINT
370 PRINT TAB(21);" and Metric units for range distance": PRINT: PRINT
380 PRINT " What atmospheric / altitude conditions do you want to use ?": PRINT
390 PRINT " 1 = Standard ICAO (59 Deg-F at sea level)": PRINT
400 PRINT " 2 = Another temperature and / or altitude": PRINT
410 INPUT " ";QA
420 IF QA<>1 AND QA<>2 THEN GOTO 330
430 IF QA=2 THEN GOSUB 3470 ELSE RO=1: AL=0: TF=59: A=1
440 INPUT " Height of sight above bore centre (in inches) .. ";H
450 INPUT " Cartridge identification ....................... ";C$
460 INPUT " Bullet weight in (grains) ...................... ";G
470 INPUT " Ballistic Coefficient (C1) ..................... ";C1
480 REM ** IN THE LINE BELOW THE TERM VA=V/A IS AN ADJUSTMENT FOR SONIC VELOCITY
490 INPUT " Muzzle velocity (in feet per second) ........... ";V: VA=V/A: REM ** ADJUST FOR MACH RATIO
500 X=0: GOSUB 590: REM ** INITIALISE RANGE , FIND DATA FOR MUZZLE VELOCITY
510 PRINT " What is your choice ?"
520 PRINT " 1 = Range table"
530 INPUT " 2 = Bullet path from sight line ";QB
540 IF QB <> 1 AND QB <> 2 THEN PRINT " Try again": GOTO 510
550 IF QB = 1 THEN GOTO 780
560 IF QB = 2 THEN GOTO 1550
570 PRINT
580 GOTO 510
590 REM ** FIND SVA TVA SUA TRAJECTORY ELEMENTS
600 GOSUB 2740: REM ** FIND COEFFICIENTS FOR V/A
610 SVA=AAS+BS*(VA-VBA)+CS*(VA-VBA)^2
620 TVA=AT+BT*(VA-VBA)+CT*(VA-VBA)^2
630 SUA=SVA+RO*X/C1
640 GOSUB 2990: REM ** FIND COEFFICIENT FOR SUA
650 UA=VBA+(-BS-SQR(BS^2-4*CS*(AAS-SUA)))/(2*CS): U=UA*A
660 EN=U^2*G/450400!: REM ** BULLET ENERGY CALCULATION
670 F=14.0069+6.59285*((U/V)-.65)-1.94051*((U/V)-.65)^2
680 TUA=AT+BT*(UA-VBA)+CT*(UA-VBA)^2
690 T=(C1/(RO*A))*(TUA-TVA)
700 D=12*F*T^2: REM ** DROP
710 YM=48.6*T^2: REM ** MAXIMUM ORDINATE
720 HM=YM-.4*H: REM ** MAX HEIGHT ABOVE SIGHT LINE
730 DF=176*(T-X/V): REM ** WIND DEFLETION FOR 10 MPH CROSS-COMPONENT
740 MM=2*(EN/U): REM ** MOMENTUM IN LB-SEC
750 IF X=0 THEN E=0 ELSE E=(D+H)/(X/300): REM ** ELEVATION MOA
760 RETURN
770 REM ** RANGE TABLE
780 INPUT " Choose range distance measurements ... 1=Yards ... 2=Metres ";QM
790 IF QM <> 1 AND QM <> 2 THEN PRINT " Try again ": GOTO 780
800 IF QM=2 THEN INPUT " First range for the table (Metres) ";FM: FX=3.2808*FM
810 IF QM=2 THEN INPUT " Last range for the table (Metres) ";LM: LX=3.2808*LM
820 IF QM=2 THEN INPUT " Range increment (Metres) ";IM: IX=3.2808*IM
830 IF QM=2 AND IM >(LM-FM) THEN PRINT " Try again !! ": GOTO 800
840 IF QM=2 THEN GOTO 910
850 INPUT " First range for the table (Yards) ";FR: FX=3*FR
860 INPUT " Last range for the table (Yards) ";LR: LX=3*LR
870 INPUT " Range increment (Yards) ";IR: IX=3*IR
880 IF IR >(LR-FR) THEN PRINT " Try again !!! ": GOTO 850
890 PRINT : PRINT " One moment please ... computing table "
900 Z=INT((LR-FR)/IR): REM ** DIMENSION FOR ARRAY
910 IF QM=2 THEN Z=INT((LM-FM)/IM+5): REM ** DIMENSION FOR ARRAY
920 DIM X(Z): DIM E(Z): DIM V(Z): DIM U(Z): DIM SV(Z): DIM SU(Z): DIM TV(Z): DIM TU(Z): DIM EN(Z): DIM F(Z): DIM T(Z): DIM D(Z): DIM YM(Z): DIM HM(Z): DIM DF(Z) : DIM MM(Z): REM ** DIMENSION ARRAYS FOR RANGE TABLE
930 X=FX: N=0: REM ** INITIALISE X AND N
940 GOSUB 590: REM ** FIND DATA FOR Nth RANGE
950 X(N)=X: V(N)=V: U(N)=U: EN(N)=EN: T(N)=T: D(N)=D: YM(N)=YM: HM(N)=HM: DF(N)=DF: MM(N)=MM: E(N)=E: REM ** SAVE VALUES THIS PASS
960 IF X(N)=0 THEN YM(N)=0: HM(N)=-H
970 N=N+1: X=FX+N*IX: REM ** INCREMENT N AND X
980 IF X>(LX+1) THEN GOTO 1000: REM ** BREAKOUT CONDITION
990 GOTO 940: REM ** NEXT LOOP
1000 NF=N: REM ** END VALUE ON COUNTER
1010 CLS
1020 IF QA=1 THEN PRINT " Cartridge... ";C$;TAB(48);"Standard ICAO ": GOTO 1050
1030 PRINT " Cartridge identification ";C$
1040 PRINT " Altitude (Ft)........... ";AL;TAB(47);" Temperature (Deg F)..... ";TF
1050 PRINT " Bullet weight (Grns).... ";G;TAB(47);" Sight above bore (in)... ";H
1060 PRINT " Muzzle velocity (fps)... ";V;TAB(47);" Ballistic Co. (C1)...... ";C1:PRINT
1070 PRINT " Range";TAB(9);"Remain";TAB(17);"Remain";TAB(25);"Mom-";TAB(33);"Bullet";TAB(41);"Elev-";TAB(49);"Time of";TAB(57);"Max.";TAB(65);"Max.";TAB(73);"10 mph"
1080 PRINT " in";TAB(9);"veloc.";TAB(17);"energy";TAB(25);"entum";TAB(33);"drop";TAB(41);"ation";TAB(49);"flight";TAB(57);"ord";TAB(65);"high";TAB(73);"wind"
1090 IF QM=1 THEN PRINT " Yards";
1100 IF QM=2 THEN PRINT " Metres";
1110 PRINT TAB(9);"fps";TAB(17);"ft-lbs";TAB(25);"lb-sec";TAB(33);"inches";TAB(41);"moa";TAB(49);"in sec";TAB(57);"inches";TAB(65);"inches";TAB(73);"inches"
1120 FOR N=0 TO (NF-1)
1130 IF QM=1 THEN PRINT USING"####";X(N)/3;
1140 IF QM=2 THEN PRINT USING"####";X(N)/3.28084;
1150 PRINT TAB(9);:PRINT USING"####";U(N);
1160 PRINT TAB(17);:PRINT USING"####";EN(N);
1170 PRINT TAB(25);:PRINT USING"#.##";MM(N);
1180 PRINT TAB(33);:PRINT USING"###.#";D(N);
1190 PRINT TAB(41);:PRINT USING"##.#";E(N);
1200 PRINT TAB(49);:PRINT USING"#.###";T(N);
1210 PRINT TAB(57);:PRINT USING"###.#";YM(N);
1220 PRINT TAB(65);:PRINT USING"###.#";HM(N);
1230 PRINT TAB(72);:PRINT USING"###.##";DF(N)
1240 NEXT N
1250 PRINT
1260 INPUT " Print table (1=Yes 2=No) ";QP
1270 IF QP <> 1 THEN CLS: GOTO 2490
1280 ON ERROR GOTO 4270
1290 IF QA=1 THEN LPRINT "Cartridge............... ";C$;TAB(48);"Standard ICAO": GOTO 1320
1300 LPRINT "Cartridge .............. ";C$
1310 LPRINT "Altitude (Ft)... ";AL;TAB(47);" Temperature (Deg F)... ";TF
1320 LPRINT "Bullet weight (Grns).... ";G;TAB(47);" Sight above bore (in)... ";H
1330 LPRINT "Muzzle velocity (fps)... ";V;TAB(47);" Ballistic Co. (C1)...... ";C1:PRINT
1340 LPRINT
1350 LPRINT "Range";TAB(8);"Remain";TAB(16);"Remain";TAB(24);"Mom-";TAB(32);"Drop";TAB(40);"Elev-";TAB(48);"Time of";TAB(56);"Max.";TAB(64);"Max.";TAB(72);"10 mph"
1360 LPRINT " in";TAB(8);"veloc.";TAB(16);"energy";TAB(24);"entum";TAB(32);" in";TAB(40);"ation";TAB(48);"flight";TAB(56);"ord";TAB(64);"high";TAB(72);"wind"
1370 IF QM=1 THEN LPRINT "Yards";
1380 IF QM=2 THEN LPRINT "Metres";
1390 LPRINT TAB(8);"fps";TAB(16);"ft-lbs";TAB(24);"lb-sec";TAB(32);"inches";TAB(40);"moa";TAB(48);"in sec";TAB(56);"inches";TAB(64);"inches";TAB(72);"inches"
1400 FOR N=0 TO (NF-1)
1410 LPRINT
1420 IF QM=1 THEN LPRINT USING"####";X(N)/3;
1430 IF QM=2 THEN LPRINT USING"####";X(N)/3.28084;
1440 LPRINT TAB(8);:LPRINT USING"####";U(N);
1450 LPRINT TAB(16);:LPRINT USING"####";EN(N);
1460 LPRINT TAB(24);:LPRINT USING"#.##";MM(N);
1470 LPRINT TAB(32);:LPRINT USING"###.#";D(N);
1480 LPRINT TAB(40);:LPRINT USING"##.#";E(N);
1490 LPRINT TAB(48);:LPRINT USING"#.###";T(N);
1500 LPRINT TAB(56);:LPRINT USING"###.#";YM(N);
1510 LPRINT TAB(64);:LPRINT USING"###.#";HM(N);
1520 LPRINT TAB(72);:LPRINT USING"###.##";DF(N)
1530 NEXT N
1540 LPRINT: CLS: GOTO 2490
1550 REM ** ROUTINE FOR BULLET PATH FROM SIGHT LINE **
1560 INPUT " Choose... (1=Yards or 2=Metres) ";QM
1570 IF QM<>1 AND QM<>2 THEN PRINT "Try again": GOTO 1560
1580 IF QM=1 THEN INPUT " Your sight-in range (Yards) ";ZR: ZX=3*ZR
1590 IF QM=2 THEN INPUT " Your sight-in range (Metres) ";ZM: ZX=3.2808*ZM
1600 X=ZX: GOSUB 590: REM ** GET DATA FOR ZEROING RANGE
1610 ZE=E: REM ** TAG ZEROING ELEVATION
1620 PRINT " Choose... "
1630 PRINT " 1=Impact at one range "
1640 INPUT " 2=Tabular data ";QG
1650 IF QG=2 THEN GOTO 1950
1660 IF QM=1 THEN INPUT " What range (Yards) ";NR: NX=3*NR
1670 IF QM=2 THEN INPUT " What range (Metres) ";NM: NX=3.2808*NM
1680 X=NX: GOSUB 590
1690 NE=E: DE=NE-ZE
1700 IF QM=1 THEN DI=-DE*(NX/300): REM ** DIF INCHES AT YARDS RANGE
1710 IF QM=2 THEN DI=-DE*(NX/328.084): REM ** DIF INCHES AT METRIC RANGE
1720 PRINT: PRINT
1730 IF QM=1 THEN PRINT " Sight-in range (Yards)... ";TAB(30);ZR: PRINT
1740 IF QM=2 THEN PRINT " Sight-in range (Metres)... ";TAB(30);ZM: PRINT
1750 IF QM=1 THEN PRINT " Other range (Yards)... ";TAB(30);NR: PRINT
1760 IF QM=2 THEN PRINT " Other range (Metres)... ";TAB(30);NM: PRINT
1770 PRINT " Point of impact (inches)... ";TAB(30);: PRINT USING"###.#";DI:PRINT
1780 PRINT " Sight adjustment (moa)... ";TAB(30);: PRINT USING"###.#";DE: PRINT
1790 PRINT
1800 INPUT "Print this (1=Yes 2=No) ";QC
1810 IF QC<>1 THEN GOTO 1870
1820 IF QM=1 THEN LPRINT " Sight-in range (Yards) ";ZR;TAB(30);"Other range (Yards) ";NR: LPRINT
1830 IF QM=2 THEN LPRINT " Sight-in range (Metres) ";ZM;TAB(30);"Other range (Metres) ";NM: LPRINT
1840 LPRINT " Impact point (inches)... ";:LPRINT USING"###.#";DI;
1850 LPRINT TAB(30);"Sight adjust (moa)... ";:LPRINT USING"###.#";DE
1860 LPRINT
1870 PRINT: PRINT " What next ? "
1880 PRINT " 1=Another range "
1890 PRINT " 2=New sight-in range "
1900 INPUT " 3=More choices ";QH
1910 IF QH=1 THEN GOTO 1660
1920 IF QH=2 THEN GOTO 1560
1930 IF QH=3 THEN CLS: GOTO 510
1940 IF QH <> 1 AND QH <> 2 AND QH <> 3 THEN PRINT " Try again ": GOTO 1870
1950 REM ** BULLET-PATH TABLE **
1960 IF QM=1 THEN INPUT " First range for table (Yards) ";FR: FX=3*FR
1970 IF QM=2 THEN INPUT " First range for table (Metres) ";FM: FX=3.2808*FM
1980 IF QM=1 THEN INPUT " Last range for table (Yards) ";LR: LX=3*LR
1990 IF QM=2 THEN INPUT " Last range for table (Metres) ";LM: LX=3.2808*LM
2000 IF QM=1 THEN INPUT " Range increment (Yards) ";IR: IX=3*IR
2010 IF QM=2 THEN INPUT " Range increment (Metres) ";IM: IX=3.2808*IM
2020 PRINT: PRINT " One moment please ... computing table"
2030 IF QM=1 THEN Z=INT((LR-FR)/IR): REM ** DIM FOR ARRAY IN YARDS
2040 IF QM=2 THEN Z=INT((LM-FM+1)/IM): REM ** DIM FOR ARRAY IN METRES
2050 DIM X(Z):DIM U(Z):DIM E(Z):DIM EN(Z):DIM DE (Z):DIM DI(Z): REM ** DIM ARRAYS FOR BULLET PATH TABLE
2060 X=FX: N=0: REM ** INITIALISE
2070 GOSUB 590: REM ** DATA FOR Nth RANGE
2080 X(N)=X: U(N)=U: E(N)=E: EN(N)=EN: REM ** SAVE VALUES
2090 DE(N)=E-ZE: DI(N)=-(DE(N)*(X/3)/100): REM ** SAVE ELEVATION DIF,IMPACT DIF
2100 IF X(N)=0 THEN DE (N)=0: DI(N)=-H
2110 N=N+1: X=FX+N*IX: REM ** INCREMENT COUNTER,RANGE
2120 IF X>(LX+1) THEN GOTO 2140: REM ** BREAKOUT
2130 GOTO 2070: REM ** NEXT LOOP
2140 NF=N
2150 CLS
2160 PRINT " Range";TAB(10);"Veloc.";TAB(20);"Impact";TAB(30);"Adjust"
2170 IF QM=1 THEN PRINT " Yards";TAB(10);"fps";TAB(20);"inches";TAB(30);"moa"
2180 IF QM=2 THEN PRINT " Metres";TAB(10);"fps";TAB(20);"inches";TAB(30);"moa"
2190 FOR N=0 TO (NF-1)
2200 IF QM=1 THEN PRINT USING"####";X(N)/3;
2210 IF QM=2 THEN PRINT USING"####";X(N)/3.28084;
2220 PRINT TAB(10);: PRINT USING"####";U(N);
2230 PRINT TAB(20);: PRINT USING"###.#";DI(N);
2240 PRINT TAB(30);: PRINT USING"###.#";DE(N)
2250 NEXT N
2260 INPUT " Print this (1=Yes 2=No) ";QC
2270 IF QC<>1 THEN GOTO 2640
2280 ON ERROR GOTO 4270
2290 LPRINT " Cartridge... ";C$
2300 IF QA=1 AND QM=1 THEN LPRINT TAB(23);"Standard ICAO";TAB(43);"Sight-in range (Yards)... ";ZR: GOTO 2340
2310 IF QA=1 AND QM=2 THEN LPRINT TAB(23);"Standard ICAO";TAB(43);"Sight-in range (Metres)... ";ZM: GOTO 2340
2320 IF QM=1 THEN LPRINT " Altitude (ft)... ";AL;TAB(23);"Temperature (deg-f)... ";TF;TAB(48);"Sight-in range (Yards)... ";ZR
2330 IF QM=2 THEN LPRINT " Altitude (ft)... ";AL;TAB(23);"Temperature (deg-f)... ";TF;TAB(48);"Sight-in range (Metres)... ";ZM
2340 LPRINT " Bullet weight (grs)... ";G;TAB(48);"Sight above bore (in)... ";H
2350 LPRINT " Muzzle velocity (fps)... ";V;TAB(48);"Ballistic coefficient (C1)... ";C1
2360 LPRINT
2370 LPRINT " Range";TAB(10);"Velocity";TAB(20);"Energy";TAB(30);"Impact";TAB(40);"Adjust"
2380 IF QM=1 THEN LPRINT "Yards";TAB(10);"fps";TAB(20);"ft-lbs";TAB(30);"inches";TAB(40);"moa"
2390 IF QM=2 THEN LPRINT "Metres";TAB(10);"fps";TAB(20);"ft-lbs";TAB(30);"inches";TAB(40);"moa"
2400 FOR N=0 TO (NF-1)
2410 IF QM=1 THEN LPRINT USING"####";X(N)/3;
2420 IF QM=2 THEN LPRINT USING"####";X(N)/3.28084;
2430 LPRINT TAB(10);: LPRINT USING"####";U(N);
2440 LPRINT TAB(20);: LPRINT USING"####";EN(N);
2450 LPRINT TAB(30);: LPRINT USING"###.#";DI(N);
2460 LPRINT TAB(40);: LPRINT USING"###.#";DE(N)
2470 NEXT N
2480 CLS: GOTO 2640: REM ** MENU AND ERASE ARRAYS FOR REDIM BULLET-PATH TABLES
2490 REM ** PROGRAM CHOICES **
2500 PRINT
2510 PRINT " What next ..........................."
2520 PRINT
2530 PRINT " 1=More data , same cartridge and load"
2540 PRINT " 2=Same cartridge and bullet , new velocity"
2550 PRINT " 3=Same cartridge , new bullet"
2560 PRINT " 4=New cartridge"
2570 INPUT " 5=Return to start ";QN
2580 ERASE X,E,V,U,SV,SU,TV,TU,EN,F,T,D,YM,HM,DF,MM: REM ** ERASE ARRAYS TO ALLOW REDIMENSIONING OF VARIABLES IN RANGE TABLE
2590 IF QN=1 GOTO 510
2600 IF QN=2 THEN GOTO 490
2610 IF QN=3 THEN GOTO 460
2620 IF QN=4 THEN GOTO 450
2630 IF QN=5 THEN GOTO 170
2640 PRINT " What next ?": PRINT TAB(5);"1=More data , same cartridge & load": PRINT TAB(5);"2=Same cartridge & bullet , new velocity": PRINT TAB(5);"3=Same cartridge , new bullet": PRINT TAB(5);"4=New cartridge"
2650 PRINT TAB(5);"5=Return to start of program"
2660 INPUT QN
2670 IF QN<>1 AND QN<>2 AND QN<>3 AND QN<>4 AND QN<>5 THEN PRINT " Try again": GOTO 2640
2680 ERASE X,U,E,EN,DE,DI: REM ** ERASE ARRAYS FOR REDIMENSIONING VARIABLES IN BULLET-PATH TABLE
2690 IF QN=1 THEN GOTO 510
2700 IF QN=2 THEN GOTO 490
2710 IF QN=3 THEN GOTO 460
2720 IF QN=4 THEN GOTO 450
2730 IF QN=5 THEN GOTO 170
2740 REM ** FIND COEFFICIENTS FOR S AND T EQUATIONS **
2750 IF V<300 OR V>4500 THEN PRINT " Velocity is out of range of program."
2760 IF V<300 OR V>4500 THEN PRINT: PRINT " use tables or select a velocity between 300 & 4500 fps"
2770 IF VA>=300 AND VA<400 THEN GOTO 3250
2780 IF VA>=400 AND VA<500 THEN GOTO 3260
2790 IF VA>=500 AND VA<600 THEN GOTO 3270
2800 IF VA>=600 AND VA<700 THEN GOTO 3280
2810 IF VA>=700 AND VA<800 THEN GOTO 3290
2820 IF VA>=800 AND VA<900 THEN GOTO 3300
2830 IF VA>=900 AND VA<1000 THEN GOTO 3310
2840 IF VA>=1000 AND VA<1050 THEN GOTO 3320
2850 IF VA>=1050 AND VA<1075 THEN GOTO 3330
2860 IF VA>=1075 AND VA<1100 THEN GOTO 3340
2870 IF VA>=1100 AND VA<1110 THEN GOTO 3350
2880 IF VA>=1110 AND VA<1120 THEN GOTO 3360
2890 IF VA>=1120 AND VA<1130 THEN GOTO 3370
2900 IF VA>=1130 AND VA<1150 THEN GOTO 3380
2910 IF VA>=1150 AND VA<1250 THEN GOTO 3390
2920 IF VA>=1250 AND VA<1500 THEN GOTO 3400
2930 IF VA>=1500 AND VA<2000 THEN GOTO 3410
2940 IF VA>=2000 AND VA<2500 THEN GOTO 3420
2950 IF VA>=2500 AND VA<3000 THEN GOTO 3430
2960 IF VA>=3000 AND VA<3500 THEN GOTO 3440
2970 IF VA>=3500 AND VA<4000 THEN GOTO 3450
2980 IF VA>=4000 AND VA<=4500 THEN GOTO 3460
2990 REM ** FIND COEFFICIENTS FOR SUA **
3000 IF SUA>43041! THEN PRINT " Remaining velocity is out of range of program."
3010 REM IF SUA>43041! THEN PRINT: PRINT " USE TABLES OR CHOOSE HIGHER MUZZLE VELOCITY OR SHORTER RANGE."
3020 IF SUA<=43041! AND SUA>36664.2 THEN GOTO 3250
3030 IF SUA<=36664.2 AND SUA>31488.6 THEN GOTO 3260
3040 IF SUA<=31488.6 AND SUA>27124.6 THEN GOTO 3270
3050 IF SUA<=27124.6 AND SUA>23415.1 THEN GOTO 3280
3060 IF SUA<=23415.1 AND SUA>20325.5 THEN GOTO 3290
3070 IF SUA<=20325.5 AND SUA>17879.9 THEN GOTO 3300
3080 IF SUA<=17879.9 AND SUA>16095.6 THEN GOTO 3310
3090 IF SUA<=16095.6 AND SUA>15433.3 THEN GOTO 3320
3100 IF SUA<=15433.3 AND SUA>15150.3 THEN GOTO 3330
3110 IF SUA<=15150.3 AND SUA>14894.3 THEN GOTO 3340
3120 IF SUA<=14894.3 AND SUA>14798.5 THEN GOTO 3350
3130 IF SUA<=14798.5 AND SUA>14706.2 THEN GOTO 3360
3140 IF SUA<=14706.2 AND SUA>14616.9 THEN GOTO 3370
3150 IF SUA<=14616.9 AND SUA>14447! THEN GOTO 3380
3160 IF SUA<=14447! AND SUA>13720.5 THEN GOTO 3390
3170 IF SUA<=13720.5 AND SUA>12330.3 THEN GOTO 3400
3180 IF SUA<=12330.3 AND SUA>10168.1 THEN GOTO 3410
3190 IF SUA<=10168.1 AND SUA>8332.83 THEN GOTO 3420
3200 IF SUA<=8332.83 AND SUA>6699.05 THEN GOTO 3430
3210 IF SUA<=6699.05 AND SUA>5245.45 THEN GOTO 3440
3220 IF SUA<=5245.45 AND SUA>3958.11 THEN GOTO 3450
3230 IF SUA<=3958.11 AND SUA>2812.29 THEN GOTO 3460
3240 REM ** SUBROUTINES FOR SPACE,TIME FUNCTIONS **
3250 VBA=350:AAS=39663!:BS=-63.768:CS=.0758391:AT=49.669:BT=-.1845:CT=4.82396E-04:RETURN
3260 VBA=450:AAS=33958.1:BS=-51.756:CS=.0473157:AT=35.269:BT=-.115879:CT=2.34824E-04:RETURN
3270 VBA=550:AAS=29218.7:BS=-43.64:CS=.035161:AT=25.7322:BT=-.079629:CT=1.36695E-04:RETURN
3280 VBA=650:AAS=25192:BS=-37.095:CS=.0311391:AT=18.9904:BT=-.057305:CT=9.20586E-05:RETURN
3290 VBA=750:AAS=21792:BS=-30.896:CS=.0313196:AT=14.1144:BT=-.041349:CT=6.9381E-05:RETURN
3300 VBA=850:AAS=19020.1:BS=-24.4588:CS=.0330303:AT=10.6366:BT=-.0288527:CT=5.58719E-05:RETURN
3310 VBA=950:AAS=16906.5:BS=-17.8388:CS=.0325134:AT=8.27886:BT=-.01884:CT=4.41677E-05:RETURN
3320 VBA=1025:AAS=15747.2:BS=-13.2423:CS=.0276581:AT=7.10211:BT=-.0129298:CT=3.32035E-05:RETURN
3330 VBA=1062.5:AAS=15288.1:BS=-11.3183:CS=.023346:AT=6.66207:BT=-.0106524:CT=2.68757E-05:RETURN
3340 VBA=1087.5:AAS=15019.2:BS=-10.2383:CS=.0199585:AT=6.41183:BT=-9.41688E-03:CT=2.2611E-05:RETURN
3350 VBA=1105:AAS=14846:BS=-9.58136:CS=.0164795:AT=6.25378:BT=-8.66849E-03:CT=2.0396E-05:RETURN
3360 VBA=1115:AAS=14751.9:BS=-9.231361:CS=.0165939:AT=6.16907:BT=-8.28396E-03:CT=1.83284E-05:RETURN
3370 VBA=1125:AAS=14661.2:BS=-8.930021:CS=.0147629:AT=6.08802:BT=-7.93184E-03:CT=1.70991E-05:RETURN
3380 VBA=1140:AAS=14530.6:BS=-8.482001:CS=.0116909:AT=5.97274:BT=-7.45342E-03:CT=1.50953E-05:RETURN
3390 VBA=1200:AAS=14062.5:BS=-7.2568:CS=8.50001E-03:AT=5.57228:BT=-.006058:CT=9.6174E-06:RETURN
3400 VBA=1375:AAS=12977.5:BS=-5.5464:CS=3.06207E-03:AT=4.72557:BT=-4.05656E-03:CT=3.72586E-06:RETURN
3410 VBA=1750:AAS=11189.1:BS=-4.31589:CS=9.60342E-04:AT=3.56969:BT=-2.49074E-03:CT=1.27366E-06:RETURN
3420 VBA=2250:AAS=9222.059:BS=-3.66916:CS=4.5401E-04:AT=2.57801:BT=-1.63915E-03:CT=5.68494E-07:RETURN
3430 VBA=2750:AAS=7492.73:BS=-3.26733:CS=3.71407E-04:AT=1.88267:BT=-.0011924:CT=3.52828E-07:RETURN
3440 VBA=3250:AAS=5950.45:BS=-2.90704:CS=3.48885E-04:AT=1.36656:BT=-8.97071E-04:CT=2.45908E-07:RETURN
3450 VBA=3750:AAS=4582.38:BS=-2.57414:CS=3.10524E-04:AT=.974457:BT=-6.880031E-04:CT=1.74925E-07:RETURN
3460 VBA=4250:AAS=3369.09:BS=-2.29123:CS=2.57709E-04:AT=.670381:BT=-5.40083E-04:CT=1.24357E-07:RETURN
3470 REM ** SUBROUTINE FOR NON-STANDARD METRO **
3480 INPUT " Enter altitude at gun (feet) ";AL
3490 INPUT " Enter temperature (deg-F) ";TF
3500 RH=0: REM ** STANDARD ICAO RELATIVE HUMIDITY
3510 A=SQR((459.67+TF)/518.67): REM ** MACH RATIO
3520 TAC=.002039*AL*(TF-59): REM ** TEMPERATURE CORRECTION FOR ALTITUDE
3530 ALTC=AL+TAC: REM ** ALTITUDE ADJUSTED FOR TEMPERATURE
3540 BP=29.92/EXP(ALTC/27180): REM ** PRESSURE AT ALTITUDE AND TEMPERATURE
3550 RO=1.1357*BP/(29.92+.065092*TF)-(.065077*RH*EXP(.03288*TF-2.6538)/(459.67+TF)): REM ** RELATIVE ATMOSPHERIC DENSITY RATIO
3560 RETURN
3570 REM *** THIS IS THE START OF THE RECOIL CALCULATION MODULE ***
3580 CLS:PRINT:PRINT TAB(25)"*** Recoil calculations ***":PRINT:PRINT:PRINT
3590 PRINT TAB(13)"Adapted from William C Davis by Mike Williams 1993":PRINT ""
3600 PRINT:PRINT:PRINT:PRINT
3610 PRINT:PRINT TAB(13)"To carry out recoil calculations press .... C"
3620 PRINT:PRINT TAB(13)"To return to begining...................... R"
3630 PRINT
3640 PRINT TAB(57):INPUT A$
3650 IF A$ = "C" THEN CLS: GOTO 3690
3660 IF A$ = "R" THEN GOTO 130
3670 GOTO 3570
3680 REM **** INPUT AND MODIFIED FOR UK USE ... 16 NOVEMBER 1993... VERSION 1.0
3690 PRINT:PRINT:INPUT " Type of ammunition... 1=bulleted 2=shotshell ";Q2:PRINT
3700 IF Q2<>1 AND Q2<>2 THEN PRINT "Try again":GOTO 3690
3710 INPUT " Cartridge identification ";C$:PRINT ""
3720 INPUT " Type of powder... 1=smokeless 2=blackpowder ";Q1:PRINT ""
3730 IF Q1<>1 AND Q1<>2 THEN PRINT "Try again":GOTO 3720
3740 IF Q2=1 THEN GOTO 3870
3750 CLS: PRINT
3760 INPUT " Weight of shot in Ounces ";CO:CG=437.5*CO:PRINT ""
3770 PRINT " Weight of wad in Grains ? ":PRINT ""
3780 PRINT " Use actual weight of wad if known , otherwise as below":PRINT
3790 PRINT " approximate weights of fibre wads are as follows:--"
3800 PRINT " 12 Bore -- 40 Grains"
3810 PRINT " 16 Bore -- 30 Grains"
3820 PRINT " 20 Bore -- 25 Grains"
3830 PRINT
3840 INPUT " Enter your value ",WW:PRINT ""
3850 WB=CG+WW: REM WEIGHT OF SHOT AND WADS
3860 GOTO 3880
3870 INPUT " Bullet weight in Grains ............... ";WB
3880 INPUT " Charge weight in Grains ............... ";WC
3890 INPUT " Muzzle velocity in Feet per Second .... ";VB
3900 INPUT " Weight of gun in Pounds ............... ";WG
3910 IF Q1=1 THEN VC=4000
3920 IF Q1=2 THEN VC=2000
3930 I=(WB*VB+WC*VC)/225400!:VG=32.17405*I/WG:EG=WG*VG^2/54.4:CLS
3940 PRINT TAB(35)"*** Recoil data ***":PRINT
3950 IF Q1=2 THEN PRINT TAB(20)"Blackpowder":PRINT "":GOTO 3970
3960 PRINT TAB(20)"Smokeless powder":PRINT ""
3970 PRINT TAB(20);C$:PRINT ""
3980 IF Q2=2 THEN PRINT " Shot weight in Ounces ...........";TAB(35);CO
3990 IF Q2=2 THEN PRINT " Wad weight in Grains ............";TAB(35);WW:GOTO 4010
4000 PRINT " Bullet weight in Grains .........";TAB(35);WB
4010 PRINT " Charge weight in Grains .........";TAB(35);WC
4020 PRINT " Muzzle velocity in ft/sec .......";TAB(35);VB
4030 PRINT " Gun weight in Pounds ............";TAB(35);WG
4040 PRINT " Recoil impulse in lb/sec ........";TAB(35);:PRINT USING "###.##";I
4050 PRINT " Free-recoil velocity in ft/sec ..";TAB(35);:PRINT USING "###.##";VG
4060 PRINT " Free recoil energy in ft/lbs ....";TAB(35);:PRINT USING "###.##";EG:PRINT ""
4070 INPUT " Do you want to print this data... 1=Yes 2=No ";Q3: PRINT
4080 IF Q3=1 THEN GOSUB 4120
4090 INPUT " What do you want to do now ... 1=calculate recoil OR 2=return to start ";Q4
4100 IF Q4=1 THEN CLS: GOTO 3690
4110 IF Q4=2 THEN GOTO 170
4120 ON ERROR GOTO 4270: LPRINT TAB(6);"*** Recoil data ***": LPRINT" "
4130 IF Q1=2 THEN LPRINT TAB(11)"Blackpowder": LPRINT" ": GOTO 4150
4140 LPRINT TAB(8)"Smokless powder": LPRINT" "
4150 LPRINT C$
4160 IF Q2=2 THEN LPRINT "Shot weight in Ounces ........ ";TAB(35);CO
4170 IF Q2=2 THEN LPRINT "Wad weight in Grains ......... ";TAB(35);WW: GOTO 4190
4180 LPRINT "Bullet weight in Grains .........";TAB(35);WB
4190 LPRINT "Charge weight in Grains .........";TAB(35);WC
4200 LPRINT "Muzzle velocity in ft/sec .......";TAB(35);VB
4210 LPRINT "Gun weight in Pounds ............";TAB(35);WG
4220 LPRINT "Recoil impulse in lb/sec ........";TAB(35);:LPRINT USING "###.##";I
4230 LPRINT "Free-recoil velocity in ft/sec ..";TAB(35);:LPRINT USING "###.##";VG
4240 LPRINT "Free-recoil energy in ft/lbs ....";TAB(35);:LPRINT USING "###.##";EG
4250 LPRINT:LPRINT:LPRINT
4260 RETURN
4270 CLS
4280 PRINT:PRINT:PRINT:PRINT:PRINT
4290 PRINT TAB(12) "The printer is either not switched on or not connected"
4300 PRINT:PRINT:PRINT
4310 PRINT TAB(12) "To continue please make sure that the printer is ready"
4320 PRINT:PRINT:PRINT
4330 PRINT " Enter (C) to Continue"
4340 INPUT " (E) to Exit ";P$
4350 IF P$="C" THEN RESUME
4360 IF P$="E" THEN SYSTEM
4370 CLS
4380 PRINT: PRINT " THIS MODULE IS NOT YET PRESENT"
4390 INPUT " (E) TO EXIT OR (R) TO RESUME FROM THE BEGINING ";LO$
4400 IF LO$="E" THEN SYSTEM
4410 IF LO$="R" THEN GOTO 130
4420 GOTO 4370
4430 CLS
4440 PRINT:PRINT:PRINT
4450 PRINT " CHOOSE TEXT COLOUR ...... 0 = BLACK"
4460 PRINT " 1 = BLUE"
4470 PRINT " 2 = GREEN"
4480 PRINT " 3 = CYAN"
4490 PRINT " 4 = RED"
4500 PRINT " 5 = MAGENTA"
4510 PRINT " 6 = BROWN"
4520 PRINT " 7 = WHITE"
4530 PRINT " 8 = GRAY"
4540 PRINT " 9 = LIGHT BLUE"
4550 PRINT " 10 = LIGHT GREEN"
4560 PRINT " 11 = LIGHT CYAN"
4570 PRINT " 12 = LIGHT RED"
4580 PRINT " 13 = LIGHT MAGENTA"
4590 PRINT " 14 = YELLOW"
4600 PRINT " 15 = BRIGHT WHITE"
4610 PRINT:INPUT " ENTER YOUR CHOICE ....... ";TEX%
4620 CLS
4630 PRINT:PRINT:PRINT
4640 PRINT " CHOOSE BACKGROUND COLOUR 0 = BLACK"
4650 PRINT " 1 = BLUE"
4660 PRINT " 2 = GREEN"
4670 PRINT " 3 = CYAN"
4680 PRINT " 4 = RED"
4690 PRINT " 5 = MAGENTA"
4700 PRINT " 6 = BROWN"
4710 PRINT " 7 = WHITE"
4720 PRINT " 8 = GRAY"
4730 PRINT " 9 = LIGHT BLUE"
4740 PRINT " 10 = LIGHT GREEN"
4750 PRINT " 11 = LIGHT CYAN"
4760 PRINT " 12 = LIGHT RED"
4770 PRINT " 13 = LIGHT MAGENTA"
4780 PRINT " 14 = YELLOW"
4790 PRINT " 15 = BRIGHT WHITE"
4800 PRINT:INPUT " ENTER YOUR CHOICE ....... ";BAK%
4810 GOTO 160
![]()
Revised 07-May-2010.