10 REM ** GRAPHER FOR THRUST CURVE FILES ** 20 REM ** LARRY CURCIO, AUGUST 1989 ** 30 REM ============================================================== 40 DEFDBL Z: REM ** REMOVE IF NOT SUPPORTED BY YOUR SYSTEM ** 50 KEY OFF: REM FOR IBM PC AND CLONES. REMOVE FOR OTHER SYSTEMS 60 NITER = 2500: REM ** NUMBER OF ITERATIONS: ADJUST TO TASTE ** 65 REALBIG = 50000: PCTRULE = .02 70 DIM F(NITER), T(NITER), zz 80 PI = 3.14159265358979#: TWOPI = PI + PI: HALFPI = PI / 2! 90 SCRNWDTH = 80: REM ** CHARACTER WIDTH OF SCREEN ** 100 CLS : INPUT "ENTER INPUT FILE NAME ", F$ 110 OPEN "I", 1, F$ 111 DMAXF = 0: MINY = 9999: MAXX = DMAXF: MINX = 9999 120 ZIMP = 0 125 INPUT #1, AAA$: INPUT #1, AAA$ 128 FOR I = 1 TO NITER 129 IF EOF(1) <> 0 THEN 160 130 INPUT #1, F(I), T(I), AAA$ 135 IF F(I) > DMAXF THEN DMAXF = F(I): MAXI = I 136 IF T(I) > TTOT THEN TTOT = T(I) 137 IF F(I) < MINY THEN MINY = F(Y) 138 IF T(I) < MINX THEN MINX = T(I) 150 NEXT I 160 CLOSE #1: REM USE EQUIVALENT ON YOUR SYSTEM ** 162 PRINT : INPUT "GRAPHICS FILE NAME: ", F0$ 170 NITER2 = I - 1 320 PNTR = 1: TIMEFACT = T(2) - T(1): T(0) = 0 330 FOR I = PNTR TO NITER2: ZIMP = ZIMP + F(I) * (T(I) - T(I - 1)): NEXT I 4000 REM ===================================================================== 4020 REM ** PLOT ROUTINE: PC-DEPENDENT ** 4060 YSIZE = 200: XSIZE = 640: MAXY = YSIZE - 1: MAXX = XSIZE - 1 4070 XSCALE = TTOT - MINX: YSCALE = DMAXF: AIMP = ZIMP 4340 FOR II = 1 TO REALBIG 4360 CLS : PRINT : PRINT 4361 PRINT " *** "; T$; " ***": PRINT 4362 PRINT " MAX THRUST="; DMAXF; " AT T="; T(MAXI) - MINX; " SECONDS": PRINT 4365 PRINT " SUSTAINING THRUST="; F(MAXI + 2 * (NITER2 - MAXI) / 3): PRINT 4367 PRINT " TOTAL IMPULSE="; AIMP 4370 PRINT : PRINT : PRINT 4380 PRINT " MAX X="; TTOT - MINX; " MAX Y="; DMAXF: PRINT : PRINT 4400 PRINT " XSCALE="; XSCALE; " YSCALE="; YSCALE: PRINT : PRINT 4420 PRINT " ENTER NEW XSCALE OR PRESS RETURN TO ACCEPT"; : INPUT GGG: PRINT 4440 IF GGG <> 0 THEN XSCALE = GGG 4460 PRINT " ENTER NEW YSCALE OR PRESS RETURN TO ACCEPT"; : INPUT GGG 4480 IF GGG <> 0 THEN YSCALE = GGG 4500 GOSUB 4780 4510 Z$ = "SAVE A FILE" 4520 GOSUB 5100 4530 IF YESNO = 1 THEN GOSUB 6000 4540 Z$ = "REPLOT" 4550 GOSUB 5100 4560 IF YESNO = 0 THEN 9999 4620 NEXT II 4760 RETURN 4780 SCREEN 0: SCREEN 2: REM ** SWITCH TO GRAPHICS WITH FAILSAFE CLEAR ** 4800 LINE (0, 0)-(0, MAXY): LINE -(MAXX, MAXY): REM ** DRAW AXES ** 4820 X9 = 0: Y9 = 0 4840 REM ** MAKE 10 TIC MARKS ON EACH AXIS ** 4860 FOR I = 1 TO 10 4880 PRESET (0, (MAXY - Y9)): PRESET (X9, (MAXY - 0)) 4900 X9 = X9 + XSIZE / 10: Y9 = Y9 + YSIZE / 10 4920 NEXT I 4940 PSET (0, MAXY - (MAXY * F(0)) / YSCALE) 4960 FOR I = PNTR TO NITER2 4980 X = T(I) - MINX: Y = F(I): REM ** DRAW LINE FROM LAST POINT TO THIS POINT ** 5000 LINE -(MAXX * X / XSCALE, MAXY - (MAXY * Y) / YSCALE) 5020 NEXT I 5040 A$ = INKEY$: IF A$ = "" THEN 5040: REM ** HOLD GRAPH UNTIL KEY PRESSED ** 5042 IF ((A$ = "p" OR A$ = "P") AND F0$ <> "") THEN GOSUB 6100 5079 SCREEN 0: REM ** FLIP BACK TO TEXT SCREEN ** 5080 RETURN 5100 YESNO = 1 5105 FOR JJ = 1 TO REALBIG 5110 PRINT Z$; : INPUT A$ 5120 IF A$ = "y" OR A$ = "Y" THEN 5160 5130 IF A$ = "n" OR A$ = "N" THEN 5150 5140 NEXT JJ 5150 YESNO = 0 5160 PRINT : PRINT 5170 RETURN 6000 REM *** SAVE A FILE ROUTINE *** 6010 INPUT "GIMME A FILE NAME"; F$ 6020 OPEN "O", 1, F$ 6030 PRINT #1, T$ 6040 PRINT #1, "FOR REAL" 6050 FOR I = PNTR TO NITER2 6060 PRINT #1, F(I), T(I) - MINX 6070 NEXT I 6080 CLOSE #1 6090 RETURN 6100 REM ** BSAVE ROUTINE ** 6110 DEF SEG = &HB800 6200 BSAVE F0$, 0, 16392 6210 REM DEF SEG : SYSTEM 6220 RETURN 9999 DEF SEG : SYSTEM: END