home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib24a.dsk / MAY.1985 / PAGE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  136 lines

  1. 10  REM  ************************
  2. 20  REM  *        PAGE          *
  3. 30  REM  *  BY  D.A. KRATHWOHL  *
  4. 40  REM  *  COPYRIGHT (C) 1985  *
  5. 50  REM  *  BY MICROSPARC, INC  *
  6. 60  REM  *  CONCORD, MA. 01742  *
  7. 70  REM  ************************
  8. 80  LOMEM: 17000: ONERR  GOTO 1220
  9. 90  GOSUB 1170
  10. 100 MV =  PEEK( -16384): IF DI >1995  THEN 1270
  11. 110  IF MV >127  AND CF >0  THEN  XDRAW 1 AT X,Y:CF = 0: GOTO 160
  12. 120  IF MV >127  THEN 160
  13. 130  IF CU = 0  THEN  XDRAW 1 AT X,Y:CF = CF +1: IF CF > = 2  THEN CF = 0
  14. 140 CU = CU +1: IF CU >10  THEN CU = 0
  15. 150  GOTO 100
  16. 160  POKE  -16368,0: XDRAW 1 AT XT,YT: IF CL = 0  THEN  XDRAW 1 AT 140,96:CL = 1
  17. 170  IF MV >176  AND MV <186  THEN FA =  VAL( CHR$(MV -128))
  18. 180  IF MV = 136  THEN X = X -FA: IF X <0  THEN  PRINT  CHR$(7):X = X +FA
  19. 190  IF MV = 149  THEN X = X +FA: IF X >279  THEN  PRINT  CHR$(7):X = X -FA
  20. 200  IF MV = 193  OR MV = 139  THEN Y = Y -FA: IF Y <0  THEN  PRINT  CHR$(7):Y = Y +FA
  21. 210  IF MV = 218  OR MV = 138  THEN Y = Y +FA: IF Y >191  THEN  PRINT  CHR$(7):Y = Y -FA
  22. 220  IF Y >160  AND YB = 0  THEN YB = 1: PRINT  CHR$(7)
  23. 230  IF Y <161  AND YB = 1  THEN YB = 0: PRINT  CHR$(7)
  24. 240  IF MV = 211  THEN  GOSUB 350: REM  S
  25. 250  IF MV = 197  THEN  GOSUB 400: REM  E
  26. 260  IF MV = 210  THEN  GOSUB 640: REM  R
  27. 270  IF MV = 200  THEN  GOSUB 720: REM  H
  28. 280  IF MV = 195  THEN  GOSUB 510: REM  C
  29. 290  IF MV = 160  THEN  GOSUB 370: REM  SPC
  30. 300  IF MV = 208  THEN  GOSUB 700: REM  P
  31. 310  IF MV = 155  THEN 810: REM  ESC
  32. 320  XDRAW 1 AT X,Y:XT = X:YT = Y: GOTO 100
  33. 330  REM  END OF CURSOR LOOP
  34. 340  REM  START PT
  35. 350 DI = DI +1:DA(DI) =  -1:DI = DI +1:DA(DI) = X:DI = DI +1:DA(DI) = Y: HPLOT X,Y:XL = X:YL = Y:SF = 1: RETURN 
  36. 360  REM  * CONNECT MID POINT *
  37. 370  IF SF = 0  THEN  PRINT  CHR$(7): GOSUB 1280: RETURN 
  38. 380 DI = DI +1:DA(DI) = X:DI = DI +1:DA(DI) = Y: HPLOT XL,YL TO X,Y:XL = X:YL = Y: RETURN 
  39. 390  REM  ERASE PT
  40. 400  IF SF = 0  THEN  PRINT  CHR$(7): GOSUB 1280: RETURN 
  41. 410  IF DI < = 5  THEN X = DA(DI -1):Y = DA(DI):SF = 0:DI = 2: HCOLOR= 0: HPLOT X,Y: HCOLOR= HU: RETURN 
  42. 420  IF DA(DI -2) > -1  THEN 480
  43. 430  HCOLOR= 0: HPLOT DA(DI -1),DA(DI): HCOLOR= HU:X = DA(DI -4):Y = DA(DI -3):XL = X:YL = Y:DI = DI -3
  44. 440  IF DA(DI -1) =  -2  THEN  PRINT  CHR$(7): HOME : POKE  -16301,0: VTAB 21: HTAB 9: PRINT " YOU HAVE ERASED A COLOR ": HTAB 9: PRINT " CHANGE. COLOR IS NOW  ";: GOSUB 460: GOSUB 1300: POKE  -16302,0:X = DA(DI -3):Y = DA(DI -2):XL = X:YL = Y:DI = DI -2: RETURN 
  45. 450  RETURN 
  46. 460  FOR I = DI -2 TO I  STEP  -1: IF DA(I) =  -2  THEN HU = DA(I +1): PRINT HU: HCOLOR= HU: RETURN 
  47. 470  NEXT I: RETURN 
  48. 480  HCOLOR= 0: HPLOT DA(DI -3),DA(DI -2) TO DA(DI -1),DA(DI): HCOLOR= HU:X = DA(DI -3):Y = DA(DI -2):XL = X:YL = Y: IF DA(DI -4) =  -1  THEN  HPLOT DA(DI -3),DA(DI -2)
  49. 490 DI = DI -2: RETURN 
  50. 500  REM  COLOR
  51. 510  PRINT : VTAB 21: CALL  -958: POKE  -16301,0
  52. 520  PRINT "COLOR OPTIONS:": POKE 33,9: POKE 32,18: VTAB 21: PRINT "0 BLACK": PRINT "1 GREEN": PRINT "2 VIOLET": PRINT "3 WHITE";: POKE 32,31: VTAB 20: PRINT : PRINT "4 BLACK2": PRINT "5 ORANGE": PRINT "6 BLUE": PRINT "7 WHITE2";: POKE 33,40: POKE 32,0
  53. 530  IF HU = 0  OR HU = 4  THEN  VTAB 21
  54. 540  IF HU = 1  OR HU = 5  THEN  VTAB 22
  55. 550  IF HU = 2  OR HU = 6  THEN  VTAB 23
  56. 560  IF HU = 3  OR HU = 7  THEN  VTAB 24
  57. 570  IF HU > -1  AND HU <4  THEN  HTAB 19: GOTO 590
  58. 580  HTAB 32
  59. 590  INVERSE : PRINT HU;: NORMAL 
  60. 600  HTAB 1: VTAB 24: PRINT "CHOICE:";: GET K$: IF K$ < > CHR$(13)  AND ( ASC(K$) <48  OR  ASC(K$) >55)  THEN 600
  61. 610  IF K$ =  CHR$(13)  OR HU =  VAL(K$)  THEN  POKE  -16302,0: RETURN 
  62. 620 DI = DI +1:DA(DI) =  -2:SF = 0:HU =  VAL(K$): HCOLOR= HU:DI = DI +1:DA(DI) = HU: POKE  -16302,0: RETURN 
  63. 630  REM  RE-DRAW
  64. 640  FOR I = 1 TO DI
  65. 650  IF DA(I) =  -1  THEN  HPLOT DA(I +1),DA(I +2):I = I +2: NEXT I
  66. 660  IF DA(I) =  -2  THEN  HCOLOR= DA(I +1):I = I +1: NEXT I
  67. 670  IF I <DI  THEN  HPLOT  TO DA(I),DA(I +1):I = I +1: NEXT I
  68. 680  RETURN 
  69. 690  REM  COORDS
  70. 700  HOME : POKE  -16301,0: VTAB 22: HTAB 12: PRINT "X:";X;: HTAB 27: PRINT "Y:";Y: GOSUB 1300: POKE  -16302,0: RETURN 
  71. 710  REM  HELP
  72. 720  POKE  -16301,0: POKE  -16298,0: TEXT : HOME : VTAB 2: INVERSE : PRINT " KEY"; SPC( 14);"FUNCTION"; SPC( 14): NORMAL 
  73. 730  POKE 32,2: PRINT : PRINT : PRINT "->": PRINT : PRINT "<-": PRINT : PRINT "A": PRINT : PRINT "Z": PRINT : PRINT "1...9": PRINT : PRINT "<ESC>"
  74. 740  POKE 32,10: VTAB 4: PRINT : PRINT "MOVE CURSOR RIGHT": PRINT : PRINT "MOVE CURSOR LEFT": PRINT : PRINT "MOVE CURSOR UP": PRINT : PRINT "MOVE CURSOR DOWN": PRINT : PRINT "SET NUMBER OF DOTS PER MOVE": PRINT : PRINT "MENU OPTIONS": POKE 32,0
  75. 750  GOSUB 1300: POKE 34,2: HOME 
  76. 760  POKE 32,2: VTAB 4: PRINT : PRINT "S": PRINT : PRINT "<SPC>": PRINT : PRINT "C": PRINT : PRINT "E": PRINT : PRINT "R": PRINT : PRINT "P": PRINT : PRINT "H"
  77. 770  POKE 32,10: VTAB 4: PRINT : PRINT "START A LINE": PRINT : PRINT "CONNECT TWO POINTS": PRINT : PRINT "CHANGE COLORS": PRINT : PRINT "ERASE A LINE OF POINT": PRINT : PRINT "RE-DRAW (FILLS ERASURE GAPS)": PRINT : PRINT "READ PRESENT COORDINATES": PRINT 
  78. 780  PRINT "REQUEST HELP": POKE 32,0: POKE 34,0
  79. 790  GOSUB 1300: PRINT : HOME : GR : POKE  -16302,0: POKE  -16297,0: RETURN 
  80. 800  REM  CONT MENU
  81. 810  TEXT : HOME : HTAB 16: INVERSE : PRINT " OPTIONS ": NORMAL : VTAB 5: PRINT " <1> WRITE A FILE OF PROGRAM LINES": PRINT "     (TEXT FILE TO BE 'EXEC'ED)": PRINT : PRINT " <2> SAVE THE SCREEN DISPLAY": PRINT "     (BINARY FILE TO BE 'BLOAD'ED)": PRINT 
  82. 820  PRINT " <3> CONTINUE WORK ON CURRENT DISPLAY": PRINT : PRINT " <4> ERASE DISPLAY AND START OVER": PRINT : PRINT " <5> LOAD BACKGROUND PICTURE (THE SCREEN     MUST BE CLEAR AND THE PICTURE MUST      BE IN A BINARY FILE)": PRINT : PRINT " <6> QUIT"
  83. 830  VTAB 22: HTAB 20: GET K$:K =  VAL(K$): IF K <1  OR K >6  THEN 810
  84. 840  ON K GOTO 950,950,860,880,910,1010
  85. 850  REM  CONT WORK
  86. 860  HOME : GR : POKE  -16297,0: POKE  -16302,0: GOTO 320
  87. 870  REM  ERASE/RE-START
  88. 880  HOME : VTAB 12: HTAB 15: INPUT "ERASE? (Y/N)";K$: IF  LEFT$(K$,1) = "Y"  THEN  CLEAR : GOTO 90
  89. 890  GOTO 810
  90. 900  REM  BACKGROUND
  91. 910  IF DI >5  THEN  HOME : PRINT  CHR$(7): VTAB 12: PRINT "ERASE THE SCREEN BEFORE LOADING A BACK- GROUND PICTURE.": POKE  -16368,0: GOSUB 1300: GOTO 810
  92. 920  HOME : VTAB 12: INPUT "DO YOU WANT TO SEE A DISK CATALOG? ";K$: IF  LEFT$(K$,1) = "Y"  THEN  PRINT D$"CATALOG": PRINT 
  93. 930  GOSUB 1350: HGR : POKE  -16302,0: PRINT D$"BLOAD";N$: GOTO 320
  94. 940  REM  B FILE
  95. 950  TEXT : HOME : IF DI <5  THEN  PRINT  CHR$(7): VTAB 12: HTAB 7: PRINT "THERE IS NOTHING TO SAVE.": POKE  -16368,0: GOSUB 1300: GOTO 810
  96. 960  IF K = 1  THEN 1040
  97. 970  HTAB 11: INVERSE : PRINT " SAVE SCREEN DISPLAY ": NORMAL 
  98. 980  GOSUB 1340: HOME : VTAB 12: HTAB 13: FLASH : PRINT " SAVING FILE ": NORMAL : PRINT D$"BSAVE ";N$;",A$2000,L$2000"
  99. 990  GOTO 810
  100. 1000  REM  QUIT
  101. 1010  HOME : VTAB 12: HTAB 15: INPUT "EXIT? (Y/N)";K$: IF  LEFT$(K$,1) = "Y"  THEN  HOME : END 
  102. 1020  GOTO 810
  103. 1030  REM  TXT FILE
  104. 1040  HTAB 5: INVERSE : PRINT " WRITE A FILE OF PROGRAM LINES ": NORMAL 
  105. 1050  GOSUB 1340: PRINT 
  106. 1060  PRINT : PRINT "FIRST LINE NUMBER:";: INPUT "";LN$:LN =  VAL(LN$): IF LN <1  OR LN >60000  THEN  INVERSE : PRINT "YOUR NUMBER MUST BE BETWEEN 1 AND 60000": NORMAL : PRINT : GOTO 1060
  107. 1070  HOME : VTAB 12: HTAB 10: FLASH : PRINT " WRITING TEXT FILE ": NORMAL : PRINT D$"OPEN "N$: PRINT D$"CLOSE": PRINT D$"DELETE "N$: PRINT D$"OPEN "N$: PRINT D$"WRITE "N$:FL = 0:LC = 0: FOR I = 1 TO DI
  108. 1080  IF DA(I) =  -1  THEN  PRINT LN +FL;"HPLOT ";DA(I +1);",";DA(I +2):FL = FL +1:I = I +2: NEXT I: GOTO 1140
  109. 1090  IF DA(I) =  -2  THEN  PRINT LN +FL;"HCOLOR=";DA(I +1):FL = FL +1:I = I +1: NEXT I: GOTO 1140
  110. 1100  PRINT LN +FL;"HPLOT";
  111. 1110  PRINT " TO ";DA(I);",";DA(I +1);:I = I +1:LC = LC +1: IF DA(I +1) >0  AND LC <10  AND I <DI  THEN I = I +1: GOTO 1110
  112. 1120  IF LC >0  THEN LC = 0: PRINT  CHR$(13):FL = FL +1
  113. 1130  NEXT I
  114. 1140  PRINT D$"CLOSE "N$: GOTO 810
  115. 1150  HOME : END 
  116. 1160  REM  INIT
  117. 1170  POKE 232,0: POKE 233,3: FOR I = 0 TO 5: READ ML: POKE 768 +I,ML: NEXT I: DATA  1,0,4,0,4,0,45:YT = 96:XT = 140:X = 140:Y = 96: DIM DA(2000):D$ =  CHR$(4)
  118. 1180  TEXT : HOME : VTAB 6: INVERSE : POKE 32,15: PRINT : PRINT "P": PRINT "A": PRINT "G": PRINT "E": NORMAL : POKE 32,16: VTAB 6: PRINT : PRINT "ROGRAMMER'S": PRINT "ID FOR": PRINT "RAPHICS": PRINT "NTRY": POKE 32,0: PRINT 
  119. 1190  HTAB 12: PRINT "BY DAVID KRATHWOHL": PRINT : PRINT : PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC. **": GOSUB 1300
  120. 1200  HOME : VTAB 10: PRINT "PLEASE CHOOSE YOUR STARTING COLOR:":HU = 3: GOSUB 510: IF K$ =  CHR$(13)  THEN K$ = "3": GOSUB 620
  121. 1210  HGR : POKE  -16302,0: SCALE= 1: HCOLOR= HU:FA = 1: RETURN 
  122. 1220  REM  ERR TRAPS
  123. 1230  PRINT D$"CLOSE": TEXT : HOME : VTAB 12: PRINT  CHR$(7);:NE =  PEEK(222):LE =  PEEK(218) + PEEK(219) *256: IF NE >0  AND NE <22  THEN 1260
  124. 1240  PRINT "   **ERROR #";NE;" IN LINE #";LE
  125. 1250  PRINT : PRINT "     PRESS ANY KEY TO RETURN TO MENU": PRINT : HTAB 20: GET K$: PRINT : GOTO 810
  126. 1260  PRINT "   DISK ERROR #";NE: PRINT : PRINT : GOTO 1250
  127. 1270  TEXT : HOME : VTAB 12: PRINT "YOU ARE OUT OF SPACE.  SAVE THIS PICTUREAND START AGAIN.": POKE  -16368,0: GOSUB 1300: GOTO 810
  128. 1280  HOME : POKE  -16301,0: VTAB 22: HTAB 8: INVERSE : PRINT " PRESS <S> TO START A LINE ": NORMAL : FOR H = 1 TO 2000: NEXT : POKE  -16302,0: RETURN 
  129. 1290  REM  PRESS KEY
  130. 1300  VTAB 24: PRINT "       <PRESS ANY KEY TO CONTINUE>    ";
  131. 1310 K =  PEEK( -16384): IF K <127  THEN 1310
  132. 1320  POKE  -16368,0: RETURN 
  133. 1330  REM  FILE NAME
  134. 1340  VTAB 6
  135. 1350  INPUT "FILE NAME:";N$: IF  VAL(N$) < >0  OR  LEN(N$) >15  OR N$ = ""  THEN  PRINT  CHR$(7): GOTO 1340
  136. 1360  RETURN