home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29a.dsk / OCTOBER.1986 / AW.PLOT.bas next >
BASIC Source File  |  2023-02-26  |  8KB  |  120 lines

  1. 1  REM  *************************
  2. 2  REM  * AW.PLOT               *
  3. 3  REM  * BY WERNER KUBELKA     *
  4. 4  REM  * COPYRIGHT (C) 1986    *
  5. 5  REM  * BY MICROSPARC, INC.   *
  6. 6  REM  * CONCORD, MA  01742    *
  7. 7  REM  *************************
  8. 10  REM 
  9. 20  CLEAR : LOMEM: 16384: DIM A(3,36):LD = 0: ONERR  GOTO 750
  10. 30  REM     ------------------------------
  11. 40  REM   :          MENU
  12. 50  REM     ------------------------------
  13. 60  TEXT : HOME : NORMAL : PRINT  CHR$(4);"PR#3"
  14. 70  PRINT 
  15. 80  POKE 32,12: IF   NOT G  THEN G = 1
  16. 90  VTAB 7: PRINT "APPLEWORKS PLOT": PRINT "BY WERNER KUBELKA": PRINT "COPYRIGHT 1986 BY MICROSPARC, INC.": PRINT : POKE 33,32
  17. 100  PRINT "<1>   ";: IF G = 1  THEN  INVERSE 
  18. 110  PRINT " LOAD FILES (DIF) ": PRINT : NORMAL :
  19. 120  PRINT "<2>   ";: IF G = 2  THEN  INVERSE 
  20. 130  PRINT " PLOT ON SCREEN ": PRINT : NORMAL 
  21. 140  PRINT "<3>   ";: IF G = 3  THEN  INVERSE 
  22. 150  PRINT " PRINT HARD COPY ": PRINT : NORMAL 
  23. 160  PRINT "<4>   ";: IF G = 4  THEN  INVERSE 
  24. 170  PRINT " PRINT TO DISK (ASCII) ": PRINT : NORMAL 
  25. 180  PRINT "<5>   ";: IF G = 5  THEN  INVERSE 
  26. 190  PRINT " QUIT ": PRINT : NORMAL 
  27. 200  TEXT : VTAB 21: HTAB 12: PRINT "TYPE NUMBER, OR USE ARROW KEYS, THEN PRESS <RETURN>"
  28. 210  WAIT  -16384,128: POKE  -16368,0:GP =  PEEK( -16384)
  29. 220  IF GP = 13  THEN  PRINT  CHR$(13): GOTO 270
  30. 230  IF GP = 10  OR GP = 21  THEN G = G +1 -5 *(G = 5): GOTO 70
  31. 240  IF GP = 11  OR GP = 8  THEN G = G -1 +5 *(G = 1): GOTO 70
  32. 250 G1 = G:G = GP -48: IF G <1  OR G >5  THEN G = G1: GOTO 70
  33. 260  GOTO 70
  34. 270  IF LD = 0  AND (G = 2  OR G = 3  OR G = 4)  THEN  GOTO 1130
  35. 280  HOME : TEXT : ON G GOTO 340,630,890,1080,290: GOTO 70
  36. 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
  37. 300  HOME : END 
  38. 310  REM     ------------------------------
  39. 320  REM    :      LOAD FILES
  40. 330  REM     ------------------------------
  41. 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
  42. 350  PRINT  CHR$(4),"CAT,D"; VAL(CH$): PRINT : PRINT : PRINT : PRINT : PRINT : VTAB 20: CALL  -958
  43. 360  FOR A = 1 TO 3: FOR K = 1 TO 36:A(A,K) = 0: NEXT K,A:AR = 2:N = 12
  44. 370  VTAB 24: PRINT "USE ARROW KEYS TO CHANGE OR <RETURN> TO ACCEPT."
  45. 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
  46. 390 B$ =  CHR$(B):C =  VAL(B$):AX = AR: IF B = 13  THEN  PRINT  CHR$(8); CHR$(8);" ";AR;: GOTO 420
  47. 400 AR = AR +((C >AR) +(B = 21)) *(AR <3) -((C <AR  AND C >0) +(B = 8)) *(AR >1): IF AR < >AX GOTO 380
  48. 410  PRINT  CHR$(7): GOTO 380
  49. 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
  50. 430 B$ =  CHR$(B):NX = N: IF B = 13  THEN  PRINT  CHR$(8); CHR$(8); CHR$(8);" "N" ": GOTO 460
  51. 440 N = N +6 *((B = 21) *(N <36) -(B = 8) *(N >6)): IF N < >NX GOTO 420
  52. 450  PRINT  CHR$(7): GOTO 420
  53. 460 S = 280/N: HTAB 1: VTAB 23: CALL  -958: FOR A = 1 TO AR
  54. 470  VTAB 23: HTAB 1: CALL  -868: PRINT "FILE ("A") ";: INPUT "";F$(A): IF F$(A) = ""  THEN 60
  55. 480  PRINT ;: NEXT A
  56. 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))
  57. 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
  58. 510  HOME : VTAB 15: HTAB 15: PRINT "LOADING FILES..."
  59. 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
  60. 530  INPUT Z$: IF Z$ < >"BOT" GOTO 530
  61. 540  REM     ------------------------------
  62. 550  REM    :        READ FILES
  63. 560  REM     ------------------------------
  64. 570  IF FM  THEN MAX = 0
  65. 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)
  66. 590  NEXT K:G$ = " ":M(A) = 160/MAX: PRINT : PRINT  CHR$(4);"CLOSE"F$(A): NEXT A:G = 2: GOTO 60
  67. 600  REM     ------------------------------
  68. 610  REM    :           PLOT
  69. 620  REM     ------------------------------
  70. 630  HGR : HCOLOR= 3: HPLOT 2,39: HPLOT 2,79: HPLOT 2,119: HPLOT 0,0 TO 0,159
  71. 640  FOR A = 1 TO AR: FOR K = 0 TO N -1:Y = 160 -A(A,K) *M(A):X = K *S
  72. 650  IF Y >158  THEN 680
  73. 660  IF A(A,K -(K >0)) = 0  THEN  HPLOT X,Y: GOTO 680
  74. 670  HPLOT  TO X,Y:XF = X:YF = Y
  75. 680  NEXT K: FOR L = 1 TO A:XL = XF +2 *L: HPLOT XL,YF +5 TO XL,YF +10: NEXT L
  76. 690  HPLOT 279,159 TO 0,159: NEXT A
  77. 700  FOR K = 0 TO N -1  STEP 1 +(N >24): VTAB 21: POKE 1403,(K *S +4)/3.5 +1: PRINT K: NEXT 
  78. 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
  79. 720  REM     ------------------------------
  80. 730  REM    :       ERROR HANDLING
  81. 740  REM     ------------------------------
  82. 750 ER =  PEEK(218) +256 * PEEK(219):EC =  PEEK(222)
  83. 760  IF EC = 5  THEN K = N: GOTO 590
  84. 770  IF ER <410  THEN  RESUME 
  85. 780  CALL  -3288: IF ER = 410 GOTO 420
  86. 790  IF ER >600 GOTO 830
  87. 800  IF EC <14  THEN  PRINT : PRINT  CHR$(4);"CLOSE"F$(A)
  88. 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
  89. 820 G = 1: GOTO 60
  90. 830  IF ER = 570  THEN K = N -1: NEXT K: GOTO 590
  91. 840  IF ER = 660 GOTO 680
  92. 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
  93. 860  REM     ------------------------------
  94. 870  REM    :        PRINT HARD COPY
  95. 880  REM     -------------------------------
  96. 890  HOME : VTAB 10: HTAB 15: PRINT "PRINTING HARD COPY...": PRINT : HTAB 15: PRINT "PRESS <ESC> FOR MENU"
  97. 900 FL = 0: PRINT : PRINT  CHR$(4);"PR#1": PRINT  CHR$(9)"0N"
  98. 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
  99. 920  FOR L = 0 TO H -1: IF L/5 - INT(L/5) = 0  THEN  PRINT "  -";: GOTO 940: REM  TWO SPACES
  100. 930  PRINT "  "; CHR$(124);: REM  2 SPACE
  101. 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
  102. 950  NEXT J
  103. 960  PRINT " ";
  104. 970  PRINT  SPC( SP);
  105. 980  NEXT K: PRINT 
  106. 990  IF   NOT FL  AND  PEEK( -16384) >128  THEN L = H -1: NEXT L: POKE  -16368,0: GOTO 1040
  107. 1000  NEXT L
  108. 1010  PRINT  SPC( 2);: FOR K = 1 TO N *(SP +1): PRINT "-";: NEXT K: PRINT :ST = 1 +(N >20)
  109. 1020  PRINT  SPC( 3);: FOR K = 1 TO N  STEP ST: PRINT K; SPC( (SP +1) *ST -1 -(K >9));: NEXT K: PRINT 
  110. 1030  PRINT  SPC( 2);: FOR A = 1 TO AR: PRINT " FILE "A" ("P$(A)") "F$(A); SPC( 3);: NEXT A: IF FL  THEN  RETURN 
  111. 1040  PRINT : PRINT  CHR$(4);"PR#0":G = 3: GOTO 60
  112. 1050  REM     ------------------------------
  113. 1060  REM    :        PRINT TO DISK
  114. 1070  REM     ------------------------------
  115. 1080 NAME$ = ""
  116. 1090  VTAB 22: POKE 1403,0: INPUT "NAME OF FILE ";N$: IF N$ = ""  THEN  GOTO 60
  117. 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
  118. 1110 FL = 1: HOME : VTAB 15: HTAB 15: PRINT "PRINTING TO DISK....": PRINT : HTAB 15: PRINT "ESTIMATED TIME 80 SECONDS"
  119. 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
  120. 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