home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib29a.dsk
/
OCTOBER.1986
/
AW.PLOT.bas
next >
Wrap
BASIC Source File
|
2023-02-26
|
8KB
|
120 lines
1 REM *************************
2 REM * AW.PLOT *
3 REM * BY WERNER KUBELKA *
4 REM * COPYRIGHT (C) 1986 *
5 REM * BY MICROSPARC, INC. *
6 REM * CONCORD, MA 01742 *
7 REM *************************
10 REM
20 CLEAR : LOMEM: 16384: DIM A(3,36):LD = 0: ONERR GOTO 750
30 REM ------------------------------
40 REM : MENU
50 REM ------------------------------
60 TEXT : HOME : NORMAL : PRINT CHR$(4);"PR#3"
70 PRINT
80 POKE 32,12: IF NOT G THEN G = 1
90 VTAB 7: PRINT "APPLEWORKS PLOT": PRINT "BY WERNER KUBELKA": PRINT "COPYRIGHT 1986 BY MICROSPARC, INC.": PRINT : POKE 33,32
100 PRINT "<1> ";: IF G = 1 THEN INVERSE
110 PRINT " LOAD FILES (DIF) ": PRINT : NORMAL :
120 PRINT "<2> ";: IF G = 2 THEN INVERSE
130 PRINT " PLOT ON SCREEN ": PRINT : NORMAL
140 PRINT "<3> ";: IF G = 3 THEN INVERSE
150 PRINT " PRINT HARD COPY ": PRINT : NORMAL
160 PRINT "<4> ";: IF G = 4 THEN INVERSE
170 PRINT " PRINT TO DISK (ASCII) ": PRINT : NORMAL
180 PRINT "<5> ";: IF G = 5 THEN INVERSE
190 PRINT " QUIT ": PRINT : NORMAL
200 TEXT : VTAB 21: HTAB 12: PRINT "TYPE NUMBER, OR USE ARROW KEYS, THEN PRESS <RETURN>"
210 WAIT -16384,128: POKE -16368,0:GP = PEEK( -16384)
220 IF GP = 13 THEN PRINT CHR$(13): GOTO 270
230 IF GP = 10 OR GP = 21 THEN G = G +1 -5 *(G = 5): GOTO 70
240 IF GP = 11 OR GP = 8 THEN G = G -1 +5 *(G = 1): GOTO 70
250 G1 = G:G = GP -48: IF G <1 OR G >5 THEN G = G1: GOTO 70
260 GOTO 70
270 IF LD = 0 AND (G = 2 OR G = 3 OR G = 4) THEN GOTO 1130
280 HOME : TEXT : ON G GOTO 340,630,890,1080,290: GOTO 70
290 VTAB 12: PRINT "ARE YOU SURE (Y/N)?";: POKE -16368,0: GET G$: POKE -16368,0: IF G$ < >"Y" AND G$ < > CHR$(121) THEN HOME :G = 1: GOTO 70
300 HOME : END
310 REM ------------------------------
320 REM : LOAD FILES
330 REM ------------------------------
340 HOME : VTAB 12: PRINT "DRIVE 1 OR 2? ";: POKE -16368,0: GET CH$: POKE -16368,0: PRINT : IF CH$ < >"1" AND CH$ < >"2" THEN 340
350 PRINT CHR$(4),"CAT,D"; VAL(CH$): PRINT : PRINT : PRINT : PRINT : PRINT : VTAB 20: CALL -958
360 FOR A = 1 TO 3: FOR K = 1 TO 36:A(A,K) = 0: NEXT K,A:AR = 2:N = 12
370 VTAB 24: PRINT "USE ARROW KEYS TO CHANGE OR <RETURN> TO ACCEPT."
380 VTAB 22: HTAB 2: CALL -868: PRINT "NUMBER OF FILES (MAX = 3): ";: INVERSE : PRINT " "AR;: NORMAL : POKE -16368,0: WAIT -16384,128:B = PEEK( -16384) -128: POKE -16368,0: IF B = 27 GOTO 60
390 B$ = CHR$(B):C = VAL(B$):AX = AR: IF B = 13 THEN PRINT CHR$(8); CHR$(8);" ";AR;: GOTO 420
400 AR = AR +((C >AR) +(B = 21)) *(AR <3) -((C <AR AND C >0) +(B = 8)) *(AR >1): IF AR < >AX GOTO 380
410 PRINT CHR$(7): GOTO 380
420 VTAB 22: POKE 1403,40: CALL -868: PRINT "NUMBER OF POINTS(MAX =36): ";: INVERSE : PRINT " "N;: NORMAL : POKE -16368,0: POKE -16368,0: WAIT -16384,128:B = PEEK( -16384) -128: POKE -16368,0: IF B = 27 GOTO 60
430 B$ = CHR$(B):NX = N: IF B = 13 THEN PRINT CHR$(8); CHR$(8); CHR$(8);" "N" ": GOTO 460
440 N = N +6 *((B = 21) *(N <36) -(B = 8) *(N >6)): IF N < >NX GOTO 420
450 PRINT CHR$(7): GOTO 420
460 S = 280/N: HTAB 1: VTAB 23: CALL -958: FOR A = 1 TO AR
470 VTAB 23: HTAB 1: CALL -868: PRINT "FILE ("A") ";: INPUT "";F$(A): IF F$(A) = "" THEN 60
480 PRINT ;: NEXT A
490 VTAB 24: PRINT "APPROPRIATE SCALE FOR EACH? (Y/N) ";: POKE -16368,0: GET B$: POKE -16368,0: PRINT B$;:FM = (B$ = "Y") +(B$ = CHR$(121))
500 POKE 1403,40: PRINT "OK? (Y/N) ";: POKE -16368,0: GET B$: POKE -16368,0: IF B$ = "N" OR B$ = CHR$(110) THEN G = 1: GOTO 60
510 HOME : VTAB 15: HTAB 15: PRINT "LOADING FILES..."
520 FOR A = 1 TO AR: PRINT CHR$(4);"VERIFY"F$(A): PRINT CHR$(4);"OPEN"F$(A): PRINT CHR$(4);"READ"F$(A):LD = 1
530 INPUT Z$: IF Z$ < >"BOT" GOTO 530
540 REM ------------------------------
550 REM : READ FILES
560 REM ------------------------------
570 IF FM THEN MAX = 0
580 FOR K = 0 TO N -1: INPUT X$,Y$,Z$:A(A,K) = VAL(Y$): IF A(A,K) >MAX THEN MAX = A(A,K)
590 NEXT K:G$ = " ":M(A) = 160/MAX: PRINT : PRINT CHR$(4);"CLOSE"F$(A): NEXT A:G = 2: GOTO 60
600 REM ------------------------------
610 REM : PLOT
620 REM ------------------------------
630 HGR : HCOLOR= 3: HPLOT 2,39: HPLOT 2,79: HPLOT 2,119: HPLOT 0,0 TO 0,159
640 FOR A = 1 TO AR: FOR K = 0 TO N -1:Y = 160 -A(A,K) *M(A):X = K *S
650 IF Y >158 THEN 680
660 IF A(A,K -(K >0)) = 0 THEN HPLOT X,Y: GOTO 680
670 HPLOT TO X,Y:XF = X:YF = Y
680 NEXT K: FOR L = 1 TO A:XL = XF +2 *L: HPLOT XL,YF +5 TO XL,YF +10: NEXT L
690 HPLOT 279,159 TO 0,159: NEXT A
700 FOR K = 0 TO N -1 STEP 1 +(N >24): VTAB 21: POKE 1403,(K *S +4)/3.5 +1: PRINT K: NEXT
710 FOR A = 1 TO AR: PRINT " FILE ("A"): ";: PRINT F$(A); SPC( 3);: NEXT A: VTAB 23: CALL -958: PRINT : PRINT "PRESS <RETURN> FOR MENU: ";: POKE -16368,0: GET G$: POKE -16368,0:G = 3: GOTO 60
720 REM ------------------------------
730 REM : ERROR HANDLING
740 REM ------------------------------
750 ER = PEEK(218) +256 * PEEK(219):EC = PEEK(222)
760 IF EC = 5 THEN K = N: GOTO 590
770 IF ER <410 THEN RESUME
780 CALL -3288: IF ER = 410 GOTO 420
790 IF ER >600 GOTO 830
800 IF EC <14 THEN PRINT : PRINT CHR$(4);"CLOSE"F$(A)
810 LD = 0: VTAB 23: CALL -958: PRINT " FILE ERROR, TRY AGAIN (Y/N)?";: POKE -16368,0: GET G$: POKE -16368,0: IF G$ = "Y" OR G$ = CHR$(121) THEN PRINT : GOTO 340
820 G = 1: GOTO 60
830 IF ER = 570 THEN K = N -1: NEXT K: GOTO 590
840 IF ER = 660 GOTO 680
850 PRINT : PRINT CHR$(4);"CLOSE": PRINT : PRINT CHR$(4);"PR#0": PRINT " ERROR LINE "ER" CODE "EC: PRINT " PRESS <RETURN> TO CONTINUE";:G = 1: POKE -16368,0: GET Q$: POKE -16368,0: PRINT : GOTO 60
860 REM ------------------------------
870 REM : PRINT HARD COPY
880 REM -------------------------------
890 HOME : VTAB 10: HTAB 15: PRINT "PRINTING HARD COPY...": PRINT : HTAB 15: PRINT "PRESS <ESC> FOR MENU"
900 FL = 0: PRINT : PRINT CHR$(4);"PR#1": PRINT CHR$(9)"0N"
910 P$(1) = "+":P$(2) = "^":P$(3) = "*":SP = INT(60/N +.5) -1:H = 20: FOR A = 1 TO AR:MP(A) = M(A) *H/160: NEXT A
920 FOR L = 0 TO H -1: IF L/5 - INT(L/5) = 0 THEN PRINT " -";: GOTO 940: REM TWO SPACES
930 PRINT " "; CHR$(124);: REM 2 SPACE
940 FOR K = 0 TO N -1: FOR J = 1 TO AR: IF ABS( INT(A(J,K) *MP(J) +.5) -H +L) <1 THEN PRINT P$(J);:J = AR: NEXT J: GOTO 970
950 NEXT J
960 PRINT " ";
970 PRINT SPC( SP);
980 NEXT K: PRINT
990 IF NOT FL AND PEEK( -16384) >128 THEN L = H -1: NEXT L: POKE -16368,0: GOTO 1040
1000 NEXT L
1010 PRINT SPC( 2);: FOR K = 1 TO N *(SP +1): PRINT "-";: NEXT K: PRINT :ST = 1 +(N >20)
1020 PRINT SPC( 3);: FOR K = 1 TO N STEP ST: PRINT K; SPC( (SP +1) *ST -1 -(K >9));: NEXT K: PRINT
1030 PRINT SPC( 2);: FOR A = 1 TO AR: PRINT " FILE "A" ("P$(A)") "F$(A); SPC( 3);: NEXT A: IF FL THEN RETURN
1040 PRINT : PRINT CHR$(4);"PR#0":G = 3: GOTO 60
1050 REM ------------------------------
1060 REM : PRINT TO DISK
1070 REM ------------------------------
1080 NAME$ = ""
1090 VTAB 22: POKE 1403,0: INPUT "NAME OF FILE ";N$: IF N$ = "" THEN GOTO 60
1100 VTAB 23: POKE 1403,0: PRINT "OK? (Y/N) ";: POKE -16368,0: POKE -16368,0: WAIT -16384,128:B = PEEK( -16384) -128: POKE -16368,0: IF B = 27 OR B = 110 OR B = 78 THEN GOTO 60
1110 FL = 1: HOME : VTAB 15: HTAB 15: PRINT "PRINTING TO DISK....": PRINT : HTAB 15: PRINT "ESTIMATED TIME 80 SECONDS"
1120 PRINT : PRINT CHR$(4);"OPEN"N$: PRINT : PRINT CHR$(4);"WRITE"N$: GOSUB 910: PRINT : PRINT CHR$(4);"CLOSE"N$:G = 1: GOTO 60
1130 VTAB 20: CALL -958: VTAB 21: HTAB 12: PRINT CHR$(7);"YOU MUST FIRST LOAD A FILE": PRINT : HTAB 12: PRINT "PRESS <RETURN> TO CONTINUE ";: POKE -16368,0: GET CH$: POKE -16368,0: PRINT :G = 1: GOTO 60