Listing of file='CONTOR.BAS;01' on disk='vmedia/chip_64-sector.ccvf'
0 GOTO 1000 10 REM 20 REM ***************************************************** 30 REM 40 REM CONTOUR MAP PLOTTING PROGRAM 50 REM VERSION 9.82 60 REM 70 REM BY STEVE PERRIGO 80 REM 916 - 20TH AVE W. 90 REM KIRKLAND, WASHINGTON 98009 100 REM 110 REM FOR USE WITH AN MX-80 PRINTER WITH GRAFTRAX. 120 REM PRINTER CONTROL CODES ARE IDENTIFIED WITH REM'S 130 REM 140 REM TO FIND ALL OUTPUT RELATED COMMANDS SEARCH THIS 150 REM PROGRAM FOR THE STRING --> *+/ 160 REM 170 REM 180 REM ***************************************************** 190 REM 200 REM COMMONLY USED SUBROUTINES ARE PLACED AT THE BEGINNING 210 REM 220 REM 270 REM 280 REM BUILD CHARACTER STRINGS 290 REM 300 IF N> PC(1,2)THEN N$= CHR$ (PC(1,3)):RETURN 310 IF N< PC(U,1)THEN N$= CHR$ (PC(U,3)):RETURN 320 FOR T= 1TO U 330 IF N< = PC(T,1)AND N> = PC(T,2)THEN N$= CHR$ (PC(T,3)):T= U 340 NEXT T 350 RETURN 370 REM 380 REM PRINTOUT MAP STRINGS 390 REM 400 IF Y/ 10= INT (Y/ 10)GOTO 430 410 P$= " "+ "#"+ MID$ (P$,2,101)+ "#" 420 PRINT P$:PLOT 27,60:RETURN 430 P$= "-#"+ MID$ (P$,2,101)+ "#-" 440 P$= " "+ N$(Y/ 10)+ P$+ N$(Y/ 10) 450 GOTO 420 570 REM 580 REM ROUTINE FOR YES/NO INTERROGATIONS 590 REM 600 POKE 33278,0 610 IF PEEK (33278)= 0GOTO 610 620 IF PEEK (33278)= 89THEN PRINT "ES":Q$= "Y":RETURN 630 IF PEEK (33278)= 78THEN PRINT "O":Q$= "N":RETURN 640 PLOT 26,32,26:GOTO 600 950 REM 960 REM 970 REM ************ PROGRAM STARTS HERE *************** 980 REM 1000 CLEAR 1000 1010 GOSUB 50000 1020 DIM N$(20),D(3,100),P(25,10),V(10,200),PC(10,3) 1030 PLOT 12 1040 PRINT "WOULD YOU LIKE THE VERTICAL DIMENSION TO BE 50, 100 OR 200? "; 1050 POKE 33278,0 1060 IF PEEK (33278)= 0GOTO 1060 1070 VD= PEEK (33278)- 48 1080 IF VD= 5OR VD= 1OR VD= 2THEN PRINT "0";:GOTO 1100 1090 GOTO 1030 1100 IF VD< 4THEN VD= VD* 10:PRINT "0" 1110 PRINT 1120 PRINT :INPUT "PLOT TITLE: ";TT$ 1130 IF LEN (TT$)> 40THEN PRINT "TOO LONG - 40 CHARACTERS MAXIMUM!":GOTO 1120 1140 IF LEN (TT$)= 0GOTO 1190 1145 T= 0:Y= 22 1150 FOR X= 1TO LEN (TT$) 1160 T= T+ 1:IF T> 10THEN :Y= Y+ 1:T= 1 1170 P(Y,T)= ASC (MID$ (TT$,X,1)) 1180 NEXT X 1190 PRINT :PRINT "WOULD YOU LIKE TO:" 1200 PRINT :PRINT " INPUT DATA FROM THE KEYBOARD? " 1210 PRINT :PRINT " LOAD AN ARRAY OF RAW OR REDUCED DATA FROM DISC? " 1220 PRINT :PRINT " READ TEST DATA FROM THE PROGRAM?":PRINT :PRINT 1230 POKE 33278,0 1240 IF PEEK (33278)= 0GOTO 1240 1250 IF PEEK (33278)= 76GOTO 3000 1260 IF PEEK (33278)= 73GOTO 2000 1270 IF PEEK (33278)< > 82THEN PLOT 26,32,26:GOTO 1230 1470 REM 1480 REM READ TEST DATA FOR DEMO MAP 1490 REM 1500 PRINT "EADING":ND= 4:VD= 5 1510 FOR X= 1TO ND 1520 READ D(1,X),D(2,X),D(3,X) 1530 NEXT X 1540 DATA 0,0,0,100,0,10,0,50,5,100,50,15 1550 GOTO 4000 1970 REM 1980 REM INPUT DATA POINTS 1990 REM 2000 PLOT 12,27,11 2010 PRINT :INPUT "ENTER NUMBER OF DATA POINTS (AT LEAST 5): ";ND:IF ND< 5GOTO 2000 2020 PRINT :PRINT :PRINT "NOW ENTER THE GRID VALUES ON A 100 X ";10* VD;" GRID" 2030 PRINT "AND THE CORRESPONDING VALUE TO BE MAPPED AS X,Y,Z." 2040 PRINT :PRINT :PRINT 2050 FOR I= 1TO ND 2060 PRINT "FOR POINT ";I;" ":INPUT "X,Y,Z ";D(1,I),D(2,I),D(3,I) 2070 NEXT I 2080 PLOT 12:PRINT "DATA SUMMARY:" 2090 PRINT " X Y Z" 2100 PRINT 2110 T= 0 2120 FOR I= 1TO ND 2130 T= T+ 1:IF T= 25THEN T= 0:PRINT :INPUT "PRESS RETURN TO CONTINUE...";Q$:PRINT :PRINT TAB( 19);"X Y Z":PRINT 2140 PRINT TAB( 4);I;TAB( 18);D(1,I);TAB( 25);D(2,I);TAB( 32);D(3,I) 2150 NEXT I 2160 PRINT :PRINT "WOULD YOU LIKE TO MAKE ANY CHANGES? ";:GOSUB 600 2170 IF Q$= "N"GOTO 2210 2180 INPUT "DATA POINT? ";I 2190 INPUT "X,Y,Z? ";D(1,I),D(2,I),D(3,I) 2200 GOTO 2080 2210 PRINT :PRINT "DO YOU WANT TO ASSIGN A CONSTANT VALUE TO THE PERIMETER":PRINT "NODAL POINTS? ";:GOSUB 600 2220 IF Q$= "N"GOTO 2500 2230 PRINT :INPUT "WHAT VALUE? ";T 2240 PLOT 12 2250 ND= ND+ 20+ 2* VD 2260 FOR X= 0TO 10 2270 FOR Y= 0TO VDSTEP VD 2280 P(X,Y)= T 2290 NEXT Y 2300 NEXT X 2310 FOR Y= 0TO VD 2320 FOR X= 0TO 10STEP 10 2330 P(X,Y)= T 2340 NEXT X 2350 NEXT Y 2360 GOTO 2500 2500 PRINT :PRINT "WOULD YOU LIKE TO SAVE THIS DATA ARRAY ON DISC? ";:GOSUB 600 2510 IF Q$= "N"GOTO 4000 2520 D(0,1)= ND 2530 D(0,0)= VD 2540 PRINT :INPUT "ENTER A ONE TO SIX LETTER NAME FOR THE ARRAY --> ";N$ 2550 IF LEN (N$)> 6THEN PRINT :PRINT "TOO LONG!":GOTO 2540 2560 SAVE "D.ARY" 2570 PLOT 27,4:PRINT "REN D.ARY;01 TO ";N$;".RAW;01":PLOT 27,27 2580 GOTO 4000 2970 REM 2980 REM LOAD DATA FROM THE DISC 2990 REM 3000 PLOT 12 3010 PRINT "THERE ARE TWO TYPES OF DATA ARRAYS STORED ON THE DISC." 3020 PRINT :PRINT "THEY ARE: RAW DATA AND REDUCED DATA ARRAYS." 3030 PRINT :PRINT :PRINT "WOULD YOU LIKE TO ACCESS A REDUCED DATA ARRAY? ";:GOSUB 600 3040 IF Q$= "N"GOTO 3500 3050 PLOT 12:PRINT :PRINT "VIEW THE DIRECTORY:":PRINT 3060 PLOT 27,4:PRINT "DIR":PLOT 27,27:PRINT 3070 PRINT "REDUCED DATA ARRAYS ARE STORED BY THE PROGRAM TYPE .RED" 3080 PRINT :INPUT "ENTER THE NAME OF THE .REDUCED ARRAY TO BE LOADED --> ";A$ 3090 IF A$= ""OR A$= "0"THEN PLOT 12:GOTO 1190 3100 PLOT 27,4:PRINT "REN ";A$;".RED;01 TO P.ARY;01":PLOT 27,27 3110 LOAD "P.ARY;01" 3120 PLOT 27,4:PRINT "REN P.ARY;01 TO ";A$;".RED;01":PLOT 27,27 3130 F= 1:ND= P(21,3):VD= P(21,0):TY= P(21,1) 3140 TT$= "" 3150 FOR Y= 22TO 25 3160 FOR X= 1TO 10 3170 IF P(Y,X)= 0THEN X= 10:Y= 25:GOTO 3190 3180 TT$= TT$+ CHR$ (P(Y,X)) 3190 NEXT X 3200 NEXT Y 3210 PRINT :PRINT "";A$;".RED IS A REDUCED DATA SET CONSISTING OF:" 3220 PRINT 3230 PRINT " - AN ARRAY OF ";VD* 10;" ELEMENTS" 3240 PRINT " - DERIVED FROM ";ND;" DATA POINTS" 3250 PRINT " - FINAL MAP SIZE WILL BE 100 X ";VD* 10 3260 PRINT " - REDUCED BY METHOD NUMBER ";TY 3270 PRINT " - PLOT TITLE: ";TT$ 3280 PRINT 3290 GOTO 8530 3500 PLOT 12:PRINT :PRINT "VIEW THE DIRECTORY:":PRINT 3510 PLOT 27,4:PRINT "DIR":PLOT 27,27:PRINT 3520 PRINT "RAW DATA ARRAYS ARE STORED BY THE PROGRAM TYPE .RAW" 3530 PRINT :INPUT "ENTER THE NAME OF THE .RAW ARRAY TO BE LOADED --> ";A$ 3540 IF A$= ""OR A$= "0"THEN PLOT 12:GOTO 1190 3550 PLOT 27,4:PRINT "REN ";A$;".RAW;01 TO D.ARY;01":PLOT 27,27 3560 LOAD "D.ARY;01" 3570 PLOT 27,4:PRINT "REN D.ARY;01 TO ";A$;".RAW;01":PLOT 27,27 3580 VD= D(0,0):ND= D(0,1) 3590 PRINT :PRINT "";A$;".RAW IS:" 3600 PRINT 3610 PRINT " - DERIVED FROM ";ND;" DATA POINTS" 3620 PRINT " - FINAL MAP SIZE WILL BE 100 X ";VD* 10 3630 PRINT :PRINT "WOULD YOU LIKE TO REVIEW OR CHANGE THIS DATA SET? ";:GOSUB 600 3640 IF Q$= "Y"GOTO 2080 3970 REM 3980 REM CHOOSE METHOD TO CALCULATE GRID ARRAY 3990 REM 4000 PLOT 12 4010 PRINT "CHOOSE THE EXTRAPOLATION METHOD PREFERRED:":PRINT 4020 PRINT " 1. PLANE INTERCEPT METHOD" 4030 PRINT " 2. 3 NEAREST POINT WEIGHTED AVERAGE METHOD (3 POINTS)" 4040 PRINT " 3. 5 NEAREST POINT WEIGHTED AVERAGE METHOD (5 POINTS)" 4050 PRINT " 4. COMPOSITE OF THE FIRST TWO METHODS (1:1)" 4060 PRINT " 5. COMPOSITE OF THE FIRST TWO METHODS (1:2)" 4070 PRINT " 6. COMPOSITE OF THE FIRST TWO METHODS (1:3)" 4080 PRINT 4090 PRINT "CHOOSE ONE (1-6) --> "; 4100 POKE 33278,0 4110 IF PEEK (33278)= 0GOTO 4110 4120 TY= PEEK (33278)- 48 4130 IF TY< 1OR TY> 6THEN PLOT 26,32,26:GOTO 4100 4140 PLOT 12 4150 ON TYGOTO 5000,6000,7000,7500,7500,7500 5000 REM 5010 REM CALCULATE GRID ARRAY 5020 REM 5030 A1= 100000:A2= A1:A3= A1:A4= A1 5040 PLOT 12:PRINT "CALCULATING GRID ARRAY - DO NOT DISTURB":PLOT 3,64,0 5050 OUT 8,255:OUT 8,0:REM DISABLE INTERRUPTS 5060 FOR X= 0TO 10 5070 FOR Y= VDTO 0STEP - 1 5080 FOR DT= 1TO ND 5090 IF X* 10= D(1,DT)AND Y* 10= D(2,DT)THEN FL= 1:P(X,Y)= D(3,DT):DT= ND:GOTO 5150 5100 D= SQR ((X* 10- D(1,DT))* (X* 10- D(1,DT))+ (Y* 10- D(2,DT))* (Y* 10- D(2,DT))) 5110 IF D< A1THEN A4= A3:A3= A2:A2= A1:A1= D:B4= B3:B3= B2:B2= B1:B1= DT:GOTO 5150 5120 IF D< A2THEN A4= A3:A3= A2:A2= D:B4= B3:B3= B2:B2= DT:GOTO 5150 5130 IF D< A3THEN A4= A3:A3= D:B4= B3:B3= DT:GOTO 5150 5140 IF D< A4THEN A4= D:B4= DT 5150 NEXT DT 5160 IF FL= 1THEN FL= 0:GOTO 5280 5170 X1= D(1,B1):X2= D(1,B2):X3= D(1,B3) 5180 Y1= D(2,B1):Y2= D(2,B2):Y3= D(2,B3) 5190 Z1= D(3,B1):Z2= D(3,B2):Z3= D(3,B3) 5200 X4= X* 10:Y4= Y* 10 5210 NX= (Y2- Y1)* (Z3- Z1)- (Z2- Z1)* (Y3- Y1) 5220 NY= (Z2- Z1)* (X3- X1)- (X2- X1)* (Z3- Z1) 5230 NZ= (X2- X1)* (Y3- Y1)- (Y2- Y1)* (X3- X1) 5240 IF NZ= 0THEN X3= D(1,B4):Y3= D(2,B4):Z3= D(3,B4):GOTO 5210 5250 IF NZ= 0THEN P(X,Y)= (Z1/ A1+ Z2/ A2+ Z3/ A3+ Z4/ A4)/ (1/ A1+ 1/ A2+ 1/ A3+ 1/ A4):GOTO 5280 5260 Z4= (NX* (X1- X4)+ NY* (Y1- Y4)+ NZ* Z1)/ NZ 5270 P(X,Y)= Z4 5280 A1= 100000:A2= A1:A3= A1:A4= A1 5290 NEXT Y 5300 NEXT X 5310 GOTO 8000 6000 REM 6010 REM CALCULATE GRID ARRAY 6020 REM 6030 A1= 100000:A2= A1:A3= A1:A4= A1:A5= A1 6040 PLOT 12:PRINT "CALCULATING GRID ARRAY - DO NOT DISTURB":PLOT 3,64,0 6050 OUT 8,255:OUT 8,0:REM DISABLE INTERRUPTS 6060 FOR X= 0TO 10 6070 FOR Y= VDTO 0STEP - 1 6080 FOR DT= 1TO ND 6090 IF X* 10= D(1,DT)AND Y* 10= D(2,DT)THEN FL= 1:P(X,Y)= D(3,DT):DT= ND:GOTO 6160 6100 D= SQR ((X* 10- D(1,DT))* (X* 10- D(1,DT))+ (Y* 10- D(2,DT))* (Y* 10- D(2,DT))) 6110 IF D< A1THEN A5= A4:A4= A3:A3= A2:A2= A1:A1= D:B5= B4:B4= B3:B3= B2:B2= B1:B1= DT:GOTO 6160 6120 IF D< A2THEN A5= A4:A4= A3:A3= A2:A2= D:B5= B4:B4= B3:B3= B2:B2= DT:GOTO 6160 6130 IF D< A3THEN A5= A4:A4= A3:A3= D:B5= B4:B4= B3:B3= DT:GOTO 6160 6140 IF D< A4THEN A5= A4:A4= D:B5= B4:B4= DT 6150 IF D< A5THEN A5= D:B5= DT 6160 NEXT DT 6170 IF FL= 1THEN FL= 0:GOTO 6190 6180 P(X,Y)= (D(3,B1)/ A1+ D(3,B2)/ A2+ D(3,B3)/ A3+ D(3,B4)/ A4+ D(3,B5)/ A5)/ (1/ A1+ 1/ A2+ 1/ A3+ 1/ A4+ 1/ A5) 6190 A1= 100000:A2= A1:A3= A1:A4= A1:A5= A1 6200 NEXT Y 6210 NEXT X 6220 GOTO 8000 7000 REM 7010 REM CALCULATE GRID ARRAY 7020 REM 7030 A1= 100000:A2= A1:A3= A1:A4= A1:A5= A1 7040 PLOT 12:PRINT "CALCULATING GRID ARRAY - DO NOT DISTURB":PLOT 3,64,0 7050 OUT 8,255:OUT 8,0:REM DISABLE INTERRUPTS 7060 FOR X= 0TO 10 7070 FOR Y= VDTO 0STEP - 1 7080 FOR DT= 1TO ND 7090 IF X* 10= D(1,DT)AND Y* 10= D(2,DT)THEN FL= 1:P(X,Y)= D(3,DT):DT= ND:GOTO 7160 7100 D= SQR ((X* 10- D(1,DT))* (X* 10- D(1,DT))+ (Y* 10- D(2,DT))* (Y* 10- D(2,DT))) 7110 IF D< A1THEN A5= A4:A4= A3:A3= A2:A2= A1:A1= D:B5= B4:B4= B3:B3= B2:B2= B1:B1= DT:GOTO 7160 7120 IF D< A2THEN A5= A4:A4= A3:A3= A2:A2= D:B5= B4:B4= B3:B3= B2:B2= DT:GOTO 7160 7130 IF D< A3THEN A5= A4:A4= A3:A3= D:B5= B4:B4= B3:B3= DT:GOTO 7160 7140 IF D< A4THEN A5= A4:A4= D:B5= B4:B4= DT 7150 IF D< A5THEN A5= D:B5= DT 7160 NEXT DT 7170 IF FL= 1THEN FL= 0:GOTO 7190 7180 P(X,Y)= (D(3,B1)/ A1+ D(3,B2)/ A2+ D(3,B3)/ A3)/ (1/ A1+ 1/ A2+ 1/ A3) 7190 A1= 100000:A2= A1:A3= A1:A4= A1:A5= A1 7200 NEXT Y 7210 NEXT X 7220 GOTO 8000 7500 REM 7510 REM CALCULATE GRID ARRAY 7520 REM 7530 A1= 100000:A2= A1:A3= A1:A4= A1 7540 PLOT 12:PRINT "CALCULATING GRID ARRAY - DO NOT DISTURB":PLOT 3,64,0 7550 OUT 8,255:OUT 8,0:REM DISABLE INTERRUPTS 7560 FOR X= 0TO 10 7570 FOR Y= VDTO 0STEP - 1 7580 FOR DT= 1TO ND 7590 IF X* 10= D(1,DT)AND Y* 10= D(2,DT)THEN FL= 1:P(X,Y)= D(3,DT):DT= ND:GOTO 7650 7600 D= SQR ((X* 10- D(1,DT))* (X* 10- D(1,DT))+ (Y* 10- D(2,DT))* (Y* 10- D(2,DT))) 7610 IF D< A1THEN A4= A3:A3= A2:A2= A1:A1= D:B4= B3:B3= B2:B2= B1:B1= DT:GOTO 7650 7620 IF D< A2THEN A4= A3:A3= A2:A2= D:B4= B3:B3= B2:B2= DT:GOTO 7650 7630 IF D< A3THEN A4= A3:A3= D:B4= B3:B3= DT:GOTO 7650 7640 IF D< A4THEN A4= D:B4= DT 7650 NEXT DT 7660 IF FL= 1THEN FL= 0:GOTO 7790 7670 X1= D(1,B1):X2= D(1,B2):X3= D(1,B3) 7680 Y1= D(2,B1):Y2= D(2,B2):Y3= D(2,B3) 7690 Z1= D(3,B1):Z2= D(3,B2):Z3= D(3,B3) 7700 X4= X* 10:Y4= Y* 10 7710 NX= (Y2- Y1)* (Z3- Z1)- (Z2- Z1)* (Y3- Y1) 7720 NY= (Z2- Z1)* (X3- X1)- (X2- X1)* (Z3- Z1) 7730 NZ= (X2- X1)* (Y3- Y1)- (Y2- Y1)* (X3- X1) 7740 IF NZ= 0AND FL= 0THEN X3= D(1,B4):Y3= D(2,B4):Z3= D(3,B4):FL= 1:GOTO 7670 7750 IF NZ= 0THEN P(X,Y)= (Z1/ A1+ Z2/ A2+ Z3/ A3+ Z4/ A4)/ (1/ A1+ 1/ A2+ 1/ A3+ 1/ A4):GOTO 7790 7760 Z4= (NX* (X1- X4)+ NY* (Y1- Y4)+ NZ* Z1)/ NZ 7770 Z5= (D(3,B1)/ A1+ D(3,B2)/ A2+ D(3,B3)/ A3)/ (1/ A1+ 1/ A2+ 1/ A3) 7780 P(X,Y)= (Z4+ Z5* (TY- 3))/ (TY- 2) 7790 FL= 0:A1= 100000:A2= A1:A3= A1:A4= A1 7800 NEXT Y 7810 NEXT X 8000 OUT 8,255:REM REENABLE INTERRUPTS 8010 PRINT :PRINT "SAVE ARRAY TO DISC? ";:GOSUB 600 8020 IF Q$= "N"GOTO 8530 8030 P(21,3)= ND 8040 P(21,0)= VD 8050 P(21,1)= TY 8060 PRINT :INPUT "ENTER A ONE TO SIX LETTER NAME FOR THE ARRAY --> ";N$ 8070 IF LEN (N$)> 6THEN PRINT :PRINT "TOO LONG!":GOTO 8060 8080 SAVE "P.ARY" 8090 PLOT 27,4:PRINT "REN P.ARY;01 TO ";N$;".RED;01":PLOT 27,27 8500 REM 8510 REM REVIEW CALCULATED GRID AND DATA 8520 REM 8530 PRINT :PRINT "WOULD YOU LIKE A PRINTOUT OF THE ARRAY VALUES? ";:GOSUB 600 8540 IF Q$= "N"GOTO 8720 8550 PRINT :INPUT "TURN ON PRINTER AND PRESS RETURN";Q$ 8560 PLOT 27,13:REM *+/ SEND OUTPUT TO PRINTER 8570 PLOT 27,80:REM *+/ SET CONDENSED CHARACTER MODE 8580 POKE 33289,132:REM *+/ SET 132 CHARACTERS PER LINE 8590 PRINT SPC( (72- LEN (TT$))/ 2);"GRID NODE VALUES FOR ";TT$;". DATA REDUCED BY METHOD NUMBER";TY:PRINT :PRINT :PRINT 8600 PRINT TAB( 6);"0 10 20 30 40 50 60 70 80 90 100" 8610 PRINT TAB( 6);"- -- -- -- -- -- -- -- -- -- ---" 8620 FOR Y= VDTO 0STEP - 1 8630 FOR X= - 1TO 10 8640 IF X= - 1THEN PRINT 10* Y;TAB( 3);":";:GOTO 8660 8650 PRINT TAB( X* 11+ 5);P(X,Y); 8660 NEXT X 8670 PRINT :PRINT :PRINT 8680 NEXT Y 8690 PLOT 27,81,12:REM *+/ COMPRESSED CHRS OFF & FORMFEED 8700 POKE 33265,0:REM *+/ OUTPUT TO SCREEN 8710 POKE 33289,64:REM *+/ LINE LENGTH TO 64 8720 IF F= 1THEN F= 0:GOTO 10000 8730 PRINT :PRINT "WOULD YOU LIKE TO RECALCULATE USING ANOTHER METHOD? ";:GOSUB 600 8740 IF Q$= "N"THEN ND= 0:GOTO 10000 8750 PRINT :PRINT "WOULD YOU LIKE TO CHANGE THE PLOT TITLE? ";:GOSUB 600 8760 IF Q$= "N"GOTO 4000 8770 PRINT :INPUT "PLOT TITLE: ";TT$ 8780 IF LEN (TT$)> 40THEN PRINT "TOO LONG - 40 CHARACTERS MAXIMUM!":GOTO 8770 8790 GOTO 4000 9000 PRINT :PRINT "WOULD YOU LIKE A SUMMARY PRINTOUT OF DATA POINTS? ";:GOSUB 600 9010 IF Q$= "N"GOTO 10000 9020 PLOT 27,13:REM *+/ OUTPUT TO PRINTER 9030 PRINT "SUMMARY OF DATA FOR ";TT$:PRINT 9040 PRINT :PRINT " X Y Z" 9050 PRINT " - - -" 9060 FOR X= 1TO ND 9070 PRINT TAB( 1);D(1,X);TAB( 9);D(2,X);TAB( 18)D(3,X) 9080 NEXT X 9090 PLOT 12 9100 POKE 33265,0:REM *+/ OUTPUT TO SCREEN 9110 POKE 33289,64:REM *+/ LINE LENGTH TO 64 9970 REM 9980 REM SET UP SCALING VALUES 9990 REM 10000 PRINT :PLOT 12 10010 PRINT "WOULD YOU LIKE TO CHANGE THE PLOT TITLE? ";:GOSUB 600 10020 IF Q$= "N"GOTO 10050 10030 PRINT :INPUT "PLOT TITLE: ";TT$ 10040 IF LEN (TT$)> 40THEN PRINT "TOO LONG - 40 CHARACTERS MAXIMUM!":GOTO 10030 10050 L= 10000:H= 0 10060 FOR Y= VDTO 0STEP - 1 10070 FOR X= 0TO 10 10080 IF P(X,Y)< LTHEN L= P(X,Y) 10090 IF P(X,Y)> HTHEN H= P(X,Y) 10100 NEXT X 10110 NEXT Y 10120 PRINT :PRINT "THE HIGHEST GRID VALUE IS ";H:PRINT :PRINT "THE LOWEST GRID VALUE IS ";L:PRINT 10130 INPUT "NUMBER OF SCALER DIVISIONS? (1-10)";U:IF U> 10GOTO 10000 10140 PRINT :INPUT "HIGHEST VALUE TO BE PLOTTED? ";HV 10150 PRINT :INPUT "LOWEST VALUE TO BE PLOTTED? ";LV 10160 PRINT :INPUT "WHAT ARE THE UNITS USED? ";UV$ 10170 PRINT :PRINT "TYPE IN A QUALIFIER TO FURTHER DESCRIBE THE UNITS IF NEEDED:" 10180 INPUT "--> ";UC$ 10190 PRINT :PRINT "WOULD YOU LIKE EQUAL DIVISIONS OR SELECT DIVISIONS?"; 10200 POKE 33278,0 10210 IF PEEK (33278)= 0GOTO 10210 10220 IF PEEK (33278)= 83GOTO 10250 10230 IF PEEK (33278)= 69GOTO 10500 10240 PLOT 12:GOTO 10190 10250 PLOT 12 10260 PRINT :PRINT "DIVIDING";LV;" TO";HV;" INTO";U;" DIVISIONS":PRINT 10270 PRINT "DIVISION LOW HIGH" 10280 FOR X= 1TO U 10290 PLOT 3,3,X* 2+ 3:PRINT X 10300 PLOT 3,15,X* 2+ 3:PRINT "--- TO ---" 10310 NEXT X 10320 PLOT 3,27,5:PRINT " ":PLOT 3,27,5:PRINT HV 10330 PLOT 3,15,U* 2+ 3:PRINT " ":PLOT 3,15,U* 2+ 3:PRINT LV 10340 FOR X= 1TO U- 1 10350 PLOT 3,16,X* 2+ 3:PRINT "?" 10360 PLOT 3,6,28:PRINT " " 10370 PLOT 3,6,28:INPUT "WHAT IS THIS VALUE? ";PC(X,2) 10380 PLOT 3,15,X* 2+ 3:PRINT " ":PLOT 3,15,X* 2+ 3:PRINT PC(X,2) 10390 PLOT 3,27,(X+ 1)* 2+ 3:PRINT " ":PLOT 3,27,(X+ 1)* 2+ 3:PRINT PC(X,2) 10400 NEXT X 10410 PC(1,1)= HV:PC(U,2)= LV 10420 FOR X= 2TO U 10430 PC(X,1)= PC(X- 1,2) 10440 IF PC(X,1)> = PC(X- 1,1)THEN Z= 15 10450 NEXT X 10460 IF Z= 15THEN Z= 0:PLOT 12:PRINT "DECENDING ORDER PLEASE!!!":PRINT :GOTO 10270 10470 PLOT 3,6,28:PRINT "ARE ALL VALUES CORRECT? ";:GOSUB 600 10480 IF Q$= "N"GOTO 10000 10490 GOTO 10540 10500 PLOT 12:FOR T= 1TO U 10510 PC(T,1)= HV- ((HV- LV)/ U)* (T- 1) 10520 PC(T,2)= HV- ((HV- LV)/ U)* T 10530 NEXT T 10540 REM PRINT CHARACTER ARRAY 10550 REM SCALING ROUTINE 10560 PLOT 12,6,7:RESTORE 10930 10570 FOR X= 1TO 8 10580 FOR Y= 0TO 10 10590 IF Y> 0THEN READ Z 10600 PLOT 3,5* X+ 20,2* Y+ 6 10610 IF Y= 0THEN PLOT 6,1:Z= X+ 48 10620 PRINT CHR$ (Z):PLOT 6,7 10630 NEXT Y 10640 NEXT X 10650 FOR X= UTO 1STEP - 1 10660 PLOT 6,3,3,0,2* (U- X)+ 8:PRINT PC(X,2) 10670 PLOT 3,10,2* (U- X)+ 8:PRINT "TO" 10680 PLOT 3,14,2* (U- X)+ 8:PRINT PC(X,1) 10690 NEXT X 10700 IF U= 10GOTO 10740 10710 FOR X= U+ 1TO 10 10720 PLOT 3,25,2* X+ 6:PRINT " " 10730 NEXT X 10740 PLOT 3,33,3:PRINT "CHARACTER SET OPTIONS" 10750 PLOT 3,0,30:PRINT "CHOOSE SET (1-8) OR RESTART THE SCALING ROUTINE AGAIN-> "; 10760 POKE 33278,0 10770 IF PEEK (33278)= 0GOTO 10770 10780 IF PEEK (33278)= 82GOTO 10000 10790 T= PEEK (33278)- 48 10800 IF T< 1OR T> 8THEN PLOT 26,32,26:GOTO 10760 10810 PLOT 12:ON TGOTO 10830,10840,10850,10860,10870,10880,10890 10820 RESTORE 11000:GOTO 10900 10830 RESTORE 10930:GOTO 10900 10840 RESTORE 10940:GOTO 10900 10850 RESTORE 10950:GOTO 10900 10860 RESTORE 10960:GOTO 10900 10870 RESTORE 10970:GOTO 10900 10880 RESTORE 10980:GOTO 10900 10890 RESTORE 10990 10900 FOR T= UTO 1STEP - 1 10910 READ PC(T,3) 10920 NEXT T 10930 DATA 48,49,50,51,52,53,54,55,56,57 10940 DATA 65,66,67,68,69,70,71,72,73,74 10950 DATA 32,34,47,94,61,43,88,37,42,64 10960 DATA 32,88,79,32,88,79,32,88,79,32 10970 DATA 47,45,92,32,47,45,92,32,47,45 10980 DATA 32,47,94,61,42,33,43,64,88,58 10990 DATA 32,64,33,42,47,36,61,43,34,79 11000 DATA 64,61,42,94,43,33,36,47,88,32 14970 REM 14980 REM PRINT TITLE AND SCALE ON PRINTER 14990 REM 15000 L$= "":FOR I= 1TO 80:L$= L$+ CHR$ (223):NEXT I 15010 PRINT :PLOT 12:INPUT "TURN ON PRINTER AND PRESS RETURN";Q$ 15020 OUT 8,0:PLOT 12:PRINT "PRINTING - DO NOT DISTURB":PLOT 3,64,0 15030 PLOT 27,13:REM *+/ OUTPUT TO PRINTER 15040 PRINT :POKE 33289,80:REM *+/ SET 80 CHARACTERS PER LINE 15050 PLOT 27,69,27,83:REM *+/ SET EMPHASIZED & EXPANDED CHR 15060 PRINT SPC( (40- LEN (TT$))/ 2);TT$ 15070 PRINT :PRINT 15080 PLOT 27,0:REM *+/ SET LINE SPACING TO 8 PER INCH 15090 PLOT 27,70,27,84:REM *+/ CANCEL EMPHASIZED & EXPANDED CHR 15100 PRINT L$:PRINT 15110 PLOT 27,69:REM *+/ SET EMPHASIZED PRINTING MODE 15120 PRINT TAB( 8);"RANGE";TAB( 35)" SYMBOL":PRINT 15130 PLOT 27,70:REM *+/ TURN OFF EMPHASIZED PRINT MODE 15140 FOR T= 1TO U 15150 IF T= 1THEN PRINT "GREATER THAN";TAB( 15);PC(T,2);TAB( 26);UV$;TAB( 38);CHR$ (PC(T,3)):GOTO 15180 15160 IF T= UTHEN PRINT "LESS THAN";TAB( 15);PC(T,1);TAB( 26);UV$;TAB( 38);CHR$ (PC(T,3)):GOTO 15180 15170 PRINT PC(T,2);TAB( 10)"TO";TAB( 15);PC(T,1);TAB( 26);UV$;TAB( 38);CHR$ (PC(T,3)) 15180 NEXT T 15190 IF LEN (UC$)> 1THEN PRINT :PRINT UC$ 15200 PRINT :PRINT L$:PRINT :PRINT 21000 FOR Y= 0TO VD 21010 FOR X= 0TO 10 21020 V(X,Y* 10)= P(X,Y) 21030 NEXT X 21040 NEXT Y 22000 POKE 33289,132:REM *+/ SET 132 CHARACTERS PER LINE 22010 PLOT 27,65,8:REM *+/ SET LINE SPACING TO 8/72 INCH 22020 PLOT 27,80:REM *+/ SET COMPRESSED CHARACTER PRINT 22030 P$= " " 22040 GOSUB 31070:GOSUB 30000 22050 REM 22060 FOR X= 0TO 10 22070 FOR Y= 0TO VD* 10- 10STEP 10 22080 YD= V(X,Y+ 10)- V(X,Y) 22090 FOR I= 1TO 9 22100 V(X,Y+ I)= V(X,Y)+ YD/ 10* I 22110 NEXT I 22120 NEXT Y 22130 NEXT X 22140 REM 22150 REM FILL OUT ARRAY VALUES 22160 FOR Y= VD* 10TO 0STEP - 2 22170 FOR X= 0TO 10 22180 N= V(X,Y) 22190 GOSUB 300 22200 P$= LEFT$ (P$,X* 10+ 1)+ N$+ RIGHT$ (P$,103- X* 10- 2) 22210 NEXT X 25000 REM BUILD STRINGS 25010 FOR X= 0TO 90STEP 10 25020 XD= V(X/ 10+ 1,Y)- V(X/ 10,Y) 25030 FOR I= 1TO 9 25040 N= V(X/ 10,Y)+ XD/ 10* I 25050 GOSUB 300 25060 P$= LEFT$ (P$,X+ I+ 1)+ N$+ RIGHT$ (P$,103- X- I- 2) 25070 NEXT I 25080 NEXT X 25090 GOSUB 400 25100 NEXT Y 25110 GOSUB 31000 25120 OUT 8,255:REM REENABLE INTERRUPTS 25130 PLOT 27,81:REM *+/ CANCEL COMPRESSED CHR. MODE 25140 PLOT 27,0:REM *+/ SET 8 LINES PER INCH 25150 PRINT :PRINT L$ 25160 PLOT 7,12:REM *+/ BELL AND FORM FEED 25170 POKE 33265,0:POKE 33289,64:REM *+/ OUTPUT TO SCREEN AT 64 CHARACTERS PER LINE 25180 PLOT 12:PRINT "PRINTOUT IS COMPLETE":PRINT 25190 PRINT "TURN OFF PRINTER AND ADVANCE PAPER TO TOP OF FORM." 25200 PRINT :PRINT "WOULD YOU LIKE TO MAKE ANOTHER PRINTOUT? ";:GOSUB 600 25210 IF Q$= "N"THEN PLOT 12:END 25220 PRINT :PRINT "DO YOU WANT TO REDUCE THE SAME DATA? ";:GOSUB 600 25230 IF Q$= "N"THEN RUN 25240 PRINT :INPUT "NEW PLOT TITLE: ";TT$ 25250 IF LEN (TT$)> 40THEN PRINT "TOO LONG - 40 CHARACTERS MAXIMUM!":PRINT :GOTO 25240 25260 GOTO 4000 30000 REM ROUTINE TO DRAW TOP OF SCALE 30010 T$= " 0 10 20 30 40 50 60 70 80 90 100" 30020 PRINT T$:PRINT " ";:PLOT 208,212 30030 FOR I= 1TO 100 30040 IF INT (I/ 10)= I/ 10THEN PLOT 212:GOTO 30060 30050 PLOT 208 30060 NEXT I 30070 PLOT 208,13,10,27,60,27,65,8:RETURN 31000 REM ROUTINE TO DRAW BOTTOM OF SCALE 31010 PRINT " ";:PLOT 163,167 31020 FOR I= 1TO 100 31030 IF INT (I/ 10)= I/ 10THEN PLOT 167:GOTO 31050 31040 PLOT 163 31050 NEXT I 31060 PLOT 163:PRINT :PRINT T$:RETURN 31070 REM ROUTINE TO BUILD STRINGS FOR SIDES 31080 RESTORE 31120 31090 FOR I= 0TO VD 31100 READ N$(I) 31110 NEXT I 31120 DATA " 0 "," 10 "," 20 "," 30 "," 40 "," 50 "," 60 "," 70 "," 80 "," 90 "," 100 " 31130 DATA " 110 "," 120 "," 130 "," 140 "," 150 "," 160 "," 170 "," 180 "," 190 "," 200 " 31140 RETURN 50000 A1= 0:A2= 0:A3= 0:A4= 0:A5= 0:B1= 0:B2= 0:B3= 0:B4= 0:B5= 0 50010 D= 0:DT= 0:F= 0:FL= 0:H= 0:HV= 0:I= 0 50020 L= 0:LV= 0:N= 0:ND= 0:NX= 0:NY= 0:NZ= 0:T= 0:TY= 0:U= 0:VD= 0 50030 X= 0:X1= 0:X2= 0:X3= 0:X4= 0:XD= 0:Y= 0:Y1= 0:Y2= 0:Y3= 0 50040 Y4= 0:YD= 0:Z= 0:Z1= 0:Z2= 0:Z3= 0:Z4= 0:Z5= 0 50050 L$= "":N$= "":P$= "":Q$= "":A$= "":T$= "":TT$= "" 50060 UC$= "":UV$= "" 50070 RETURN