Compucolor.org – Virtual Media

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