home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib23a.dsk / FEBRUARY.1985 / PAGE.EDITOR.bas next >
BASIC Source File  |  2023-02-26  |  10KB  |  211 lines

  1. 1  REM  **********************
  2. 2  REM  *     PAGE.EDITOR    *
  3. 3  REM  * BY BRUCE E. HOWELL *
  4. 4  REM  * COPYRIGHT (C) 1985 *
  5. 5  REM  * BY MICROSPARC, INC *
  6. 7  REM  **********************
  7. 10  HOME : VTAB 5: POKE 32,7: PRINT : PRINT "************************"
  8. 20  PRINT "*                      *"
  9. 30  PRINT "*  NIBBLE PAGE EDITOR  *"
  10. 40  PRINT "*      WRITTEN BY      *"
  11. 50  PRINT "* BRUCE E. HOWELL, DDS *"
  12. 60  PRINT "*                      *"
  13. 70  PRINT "************************"
  14. 80  PRINT "*                      *"
  15. 90  PRINT "*  COPYRIGHT (C) 1985  *"
  16. 100  PRINT "* BY MICROSPARC,  INC. *"
  17. 110  PRINT "*  CONCORD, MA  01742  *"
  18. 120  PRINT "*                      *"
  19. 130  PRINT "************************"
  20. 140  HIMEM: 28928: POKE 32,0: PRINT : VTAB 22: PRINT "PRESS ANY KEY TO CONTINUE: ";: GET A$: PRINT : GOTO 1950
  21. 150  VTAB (V): HTAB (H): GET I$:I =  ASC(I$): IF I >31  THEN 180
  22. 160  ON I GOTO 220,250,270,290,350,370,720,740,770,810,840,870,890,920,950,970,1000,1030,1090,1220,1250,1280,1370,1390,1430,1450
  23. 170  CALL 64484: GOTO 150
  24. 180  IF V = 24  AND H = 40  THEN I =  PEEK(2038): HTAB (39): PRINT I$;: POKE 2039, PEEK(2038): POKE 2038,I: GOTO 200
  25. 190  PRINT I$;
  26. 200 H = H +1: IF H >40  THEN H = 1:V = V +1: IF V >24  THEN V = 1
  27. 210  GOTO 150
  28. 220  REM  A=UP
  29. 230 V = V -1: IF V <1  THEN V = 24
  30. 240  GOTO 150
  31. 250  REM  B=BOTTOM
  32. 260 H = 1:V = 24: GOTO 150
  33. 270  REM  C=CLEAR
  34. 280  GOSUB 1930: GOTO 150
  35. 290  REM  D=DELETE CURRENT PAGE
  36. 300  IF MP = 1  THEN  CALL 64484: GOTO 150
  37. 310  GOSUB 1480: HOME : VTAB (10): PRINT "DELETE THIS PAGE, REALLY (Y/N)?";: GET I$: PRINT I$: GOSUB 1520: IF I$ < >"Y"  THEN 150
  38. 320 I = CP -1:MP = MP -1: IF I = 0  THEN I = 1
  39. 330  IF CP = 1 +MP  THEN CP = I: GOSUB 1520: GOTO 150
  40. 340 CP = CP +1: GOSUB 1520:CP = CP -1: GOSUB 1480:CP = CP +1: GOTO 330
  41. 350  REM  E=<FUTURE USE>??
  42. 360  GOTO 170
  43. 370  REM  F=FILES
  44. 380  GOSUB 1480: HOME : VTAB (3): PRINT "FILES ACCES OPTIONS": PRINT 
  45. 390  PRINT "1 LOAD PAGE EDITOR FILE": PRINT "2 SAVE PAGE EDITOR FILE": PRINT "3 DELETE PAGE EDITOR FILE": PRINT "4 SORT PAGE EDITOR FILE NAMES": PRINT "5 RETURN TO ENTRY SCREEN": PRINT : PRINT "OPTION?";: GET I$: PRINT I$
  46. 400 I =  VAL(I$): IF I <1  OR I >4  THEN  GOSUB 1520: GOTO 150
  47. 410  ON I GOTO 420,500,600,670
  48. 420  REM  LOAD FILE
  49. 430 F = 1: GOSUB 1630:I =  VAL(I$): IF I <1  OR I >N  THEN  PRINT "YOU MUST ENTER A VALID NUMBER": FOR I = 1 TO 1000: NEXT : GOSUB 1520: GOTO 150
  50. 440  ONERR  GOTO 470
  51. 450  PRINT D$;"BLOAD"; MID$ (N$(I),2, LEN(N$(I)));".PE"
  52. 460  POKE 216,0:MP =  VAL(N$(I)):CP = 1: GOSUB 1520: GOTO 150
  53. 470  POKE 216,0: IF  PEEK(222) < >6  THEN  PRINT "ERROR NUMBER "; PEEK(222): PRINT "PLEASE CONSULT YOUR MANUAL": FOR I = 1 TO 2000: NEXT : GOSUB 1520: GOTO 150
  54. 480  PRINT "THAT NAME IS NOT ON THIS DISK": PRINT "SHOULD I DELETE THAT ENTRY (Y/N)?";: GET I$: PRINT I$: IF I$ < >"Y"  THEN  GOSUB 1520: GOTO 150
  55. 490  FOR II = I TO N -1:N$(I) = N$(I +1): NEXT :N = N -1: GOSUB 1580: GOSUB 1520: GOTO 150
  56. 500  REM  SAVE PAGE EDITOR FILE
  57. 510 F = 0: GOSUB 1630:I =  VAL(I$): IF I < >0  THEN I$ =  MID$ (N$(I),2, LEN(N$(I)))
  58. 520  FOR X = 1 TO N: IF I$ < > MID$ (N$(X),2, LEN(N$(X)))  THEN  NEXT :N = N +1:X = N
  59. 530 N$(X) =  STR$(MP) +I$:X = N
  60. 540  ONERR  GOTO 570
  61. 550  PRINT D$;"BSAVE";I$;".PE,A$7600,L";1024 *MP: GOSUB 1580
  62. 560  GOSUB 1520: GOTO 150
  63. 570  POKE 216,0: PRINT : PRINT : IF  PEEK(222) = 11  THEN  PRINT "ILLEGAL FILE NAME": GOTO 590
  64. 580  PRINT "ERROR NUMBER "; PEEK(222): PRINT "PLEASE CONSULT YOUR MANUAL"
  65. 590 N = N -1: FOR I = 1 TO 2000: NEXT : GOTO 560
  66. 600  REM  DELETE FILE
  67. 610 F = 1: GOSUB 1630:I =  VAL(I$): IF I <1  OR I >N  THEN  PRINT "YOU MUST ENTER A VALID NUMBER": FOR I = 1 TO 1000: NEXT : GOSUB 1520: GOTO 150
  68. 620  ONERR  GOTO 650
  69. 630  PRINT D$;"DELETE"; MID$ (N$(I),2, LEN(N$(I)));".PE": GOSUB 1580
  70. 640  POKE 216,0: FOR II = I TO N -1:N$(I) = N$(I +1): NEXT :N = N -1: GOSUB 1520: GOTO 150
  71. 650  POKE 216,0: IF  PEEK(222) < >6  THEN  PRINT "ERROR NUMBER "; PEEK(222): PRINT "PLEASE CONSULT YOUR MANUAL": FOR I = 1 TO 2000: NEXT : GOSUB 1520: GOTO 150
  72. 660  GOTO 640
  73. 670  REM  SORT PAGE EDITOR NAMES
  74. 680  FOR I = 1 TO N:SL = I: FOR II = I TO N
  75. 690  IF  MID$ (N$(SL),2, LEN(N$(SL))) > MID$ (N$(II),2, LEN(N$(II)))  THEN SL = II
  76. 700  NEXT :H$ = N$(SL):N$(SL) = N$(I):N$(I) = H$: NEXT 
  77. 710  GOSUB 1580: GOSUB 1520: GOTO 150
  78. 720  REM  G=<FUTURE USE>
  79. 730  GOTO 170
  80. 740  REM  H=MOVE LEFT (LEFT ARROW)
  81. 750 H = H -1: IF H <1  THEN H = 40
  82. 760  GOTO 150
  83. 770  REM  I=INSERT NEW PAGE
  84. 780  IF MP = 8  THEN  CALL 64484: GOTO 150
  85. 790  GOSUB 1480:II = CP: FOR I = MP TO II  STEP  -1:CP = I: GOSUB 1520:CP = I +1: GOSUB 1480: NEXT 
  86. 800 MP = MP +1:CP = II: GOSUB 1930: GOTO 150
  87. 810  REM  J=BACKWARD PAGE
  88. 820  GOSUB 1480:CP = CP -1: IF CP <1  THEN CP = MP
  89. 830  GOSUB 1520: GOTO 150
  90. 840  REM  K=FORWARD PAGE
  91. 850  GOSUB 1480:CP = CP +1: IF CP >MP  THEN CP = 1
  92. 860  GOSUB 1520: GOTO 150
  93. 870  REM  L=<FUTURE USE>
  94. 880  GOTO 170
  95. 890  REM  M=RETURN
  96. 900 H = 1:V = V +1: IF V >24  THEN V = 1
  97. 910  GOTO 150
  98. 920  REM  N=NEW
  99. 930  GOSUB 1480: HOME : VTAB (4): PRINT "NEW, REALLY (Y/N)?";: GET I$: PRINT I$: IF I$ < >"Y"  THEN  GOSUB 1520: GOTO 150
  100. 940 MP = 1:CP = 1:VV = 0:H = 1:V = 1: GOSUB 1930: GOTO 150
  101. 950  REM  O=ORIGIN
  102. 960 H = 1:V = 1: GOTO 150
  103. 970  REM  P=PAGE
  104. 980  IF MP = 8  THEN  CALL 64484: GOTO 150
  105. 990  GOSUB 1480:MP = MP +1:CP = MP: GOSUB 1930: GOTO 150
  106. 1000  REM  Q=QUIT
  107. 1010  GOSUB 1480: HOME : VTAB (4): PRINT "QUIT, REALLY (Y/N)?";: GET I$: PRINT I$: IF I$ < >"Y"  THEN  GOSUB 1520: GOTO 150
  108. 1020  GOSUB 1580: END 
  109. 1030  REM  R=RESET HORIZ. TABS
  110. 1040  GOSUB 1480: HOME : VTAB (4): PRINT "HORIZONTAL TABULATIONS": VTAB (8): FOR I = 1 TO 9: PRINT "T";I;" = "; RIGHT$("0" + STR$(T(I)),2): NEXT : VTAB (21): HTAB (1): PRINT "ENTER NEW VALUE OR 'RETURN'"
  111. 1050  VTAB (8): FOR I = 1 TO 9: HTAB (6): GET IW$: IF  ASC(IW$) = 13  THEN 1070
  112. 1060  PRINT IW$;: GET I2$:T(I) =  VAL(IW$ +I2$): IF T(I) <1  OR T(I) >40  THEN T(I) = 1
  113. 1070  HTAB (6): PRINT  RIGHT$("0" + STR$(T(I)),2): NEXT 
  114. 1080  GOSUB 1520: GOTO 150
  115. 1090  REM  S=SCREEN DUMP
  116. 1100  GOSUB 1480: VTAB (1): PRINT : PRINT D$;"PR#1":I = 1
  117. 1110  FOR IW = 1024 TO 1104  STEP 40
  118. 1120  FOR I2 = IW TO IW +896  STEP 128
  119. 1130  VTAB (I):I = I +1: FOR I3 = I2 TO I2 +39:C =  PEEK(I3)
  120. 1140  IF C >127  THEN 1190
  121. 1150  IF C >95  THEN C = C +64: GOTO 1190
  122. 1160  IF C >63  THEN C = C +128: GOTO 1190
  123. 1170  IF C >31  THEN C = C +128: GOTO 1190
  124. 1180 C = C +192
  125. 1190  PRINT  CHR$(C);
  126. 1200  NEXT : PRINT : NEXT : NEXT 
  127. 1210  PRINT D$;"PR#0": GOSUB 1520: GOTO 150
  128. 1220  REM  T=HORIZ. TAB
  129. 1230  GET I$: IF I$ <"1"  OR I$ >"9"  THEN  CALL 64484: GOTO 150
  130. 1240 H = T( VAL(I$)): GOTO 150
  131. 1250  REM  U=MOVE RIGHT (RIGHT ARROW)
  132. 1260 H = H +1: IF H >40  THEN H = 1
  133. 1270  GOTO 150
  134. 1280  REM  V=VIDEO
  135. 1290 VV = VV +1: IF VV >2  THEN VV = 0
  136. 1300  GOSUB 1310: GOTO 150
  137. 1310  ON VV +1 GOTO 1320,1330,1340
  138. 1320  NORMAL : GOTO 1350
  139. 1330  INVERSE : GOTO 1350
  140. 1340  FLASH 
  141. 1350 VF =  PEEK(1062): IF VF = 160  OR VF = 96  OR VF = 32  THEN  VTAB 1: HTAB 39: PRINT " ";
  142. 1360  RETURN 
  143. 1370  REM  W=WHAT?
  144. 1380  GOSUB 1480: GOSUB 1760: GOSUB 1520: GOTO 150
  145. 1390  REM  X=EXCHANGE CP WITH CP+1
  146. 1400 I = CP:CP = 0: GOSUB 1480:CP = I +1: IF CP >MP  THEN CP = 1
  147. 1410  GOSUB 1520:CP = I: GOSUB 1480:CP = 0: GOSUB 1520:CP = I +1: IF CP >MP  THEN CP = 1
  148. 1420  GOSUB 1480:CP = I: GOSUB 1520: GOTO 150
  149. 1430  REM  Y=<FUTURE USE>
  150. 1440  GOTO 170
  151. 1450  REM  Z=MOVE DOWN
  152. 1460 V = V +1: IF V >24  THEN V = 1
  153. 1470  GOTO 150
  154. 1480  REM  STORE CURRENT PAGE
  155. 1490 T1 =  PEEK(50):T2 =  PEEK(243): NORMAL 
  156. 1500 IW = 4 *(CP -1) +118:I2 = 4 *(CP -1) +121
  157. 1510  POKE 60,0: POKE 61,4: POKE 62,255: POKE 63,7: POKE 64,255: POKE 65,I2: POKE 66,0: POKE 67,IW: CALL 768: RETURN 
  158. 1520  REM  RESTORE CURRENT PAGE
  159. 1530  POKE 50,T1: POKE 243,T2
  160. 1540 IW = 4 *(CP -1) +118:I2 = 4 *(CP -1) +121
  161. 1550  POKE 60,0: POKE 61,IW: POKE 62,255: POKE 63,I2: POKE 64,255: POKE 65,7: POKE 66,0: POKE 67,4: CALL 768
  162. 1560  IF  PEEK(1058) = 208  AND  PEEK(1060) = 199  AND  PEEK(1062) = 160  THEN  POKE 1063,176 +CP
  163. 1570  RETURN 
  164. 1580  REM  SAVE INDEX
  165. 1590  PRINT D$;"OPEN INDEX.PE"
  166. 1600  PRINT D$;"WRITE INDEX.PE"
  167. 1610  PRINT N: FOR I = 1 TO N: PRINT N$(I): NEXT 
  168. 1620  PRINT D$;"CLOSE": RETURN 
  169. 1630  REM  PICK DISK NAME
  170. 1640  HOME : IF N = 0  AND F = 1  THEN  VTAB (10): PRINT "NO NAMES PRESENT": FOR I = 1 TO 1000: NEXT : GOSUB 1520: POP : GOTO 150
  171. 1650  IF N < >0  THEN 1680
  172. 1660  VTAB (20): PRINT "ENTER NAME TO STORE";: INPUT I$: IF I$ = ""  THEN  GOSUB 1520: POP : GOTO 150
  173. 1670  RETURN 
  174. 1680 I$ = "": FOR I = 1 TO N: PRINT  RIGHT$("  " + STR$(I),3) +"   " + MID$ (N$(I),2, LEN(N$(I))): IF  INT(I/20) = I/20  THEN  GOSUB 1720
  175. 1690  NEXT : IF I$ = ""  THEN  GOSUB 1720
  176. 1700  IF I$ = ""  THEN  GOSUB 1520: POP : GOTO 150
  177. 1710  RETURN 
  178. 1720  PRINT : PRINT "ENTER THE NUMBER ";: IF F = 0  THEN  PRINT "OR NAME ";
  179. 1730  PRINT "YOU WANT": PRINT "OR 'RETURN' ONLY";: INPUT I$: IF I$ < >""  THEN I = N
  180. 1740  IF  VAL(I$) <0  OR  VAL(I$) >N  THEN  PRINT "ENTER A NUMBER BETWEEN 1 AND ";N: GOTO 1720
  181. 1750  RETURN 
  182. 1760  REM  HELP
  183. 1770  GOSUB 1480: HOME : VTAB (3): PRINT "NIBBLE PAGE EDITOR CONTROL KEYS": PRINT 
  184. 1780  PRINT "A=MOVE CURSOR UP   N=NEW"
  185. 1790  PRINT "B=CURSOR BOTTOM    O=CURSOR TO ORIGIN"
  186. 1800  PRINT "C=CLEAR PAGE       P=CREATE NEW PAGE"
  187. 1810  PRINT "D=DELETE PAGE      Q=QUIT"
  188. 1820  PRINT "E=<FUTURE USE>     R=RESET HORIZ. TABS"
  189. 1830  PRINT "F=FILES ACCESS     S=SCREEN DUMP"
  190. 1840  PRINT "G=<FUTURE USE>     T=HORIZ. TAB (1-9)"
  191. 1850  PRINT "H=CURSOR LEFT      U=CURSOR RIGHT"
  192. 1860  PRINT "I=INSERT A PAGE    V=VIDEO SWITCH"
  193. 1870  PRINT "J=PREVIOUS PAGE    W=WHAT? (THIS LIST)"
  194. 1880  PRINT "K=NEXT PAGE        X=EXCHANGE PAGES"
  195. 1890  PRINT "L=<FUTURE USE>     Y=<FUTURE USE>"
  196. 1900  PRINT "M=RETURN           Z=CURSOR DOWN"
  197. 1910  PRINT : PRINT "HORIZONTAL TABULATIONS": PRINT : FOR I = 1 TO 5: PRINT "T";I;"= "; RIGHT$("0" + STR$(T(I)),2);" ";: NEXT : PRINT : FOR I = 6 TO 9: PRINT "T";I;"= "; RIGHT$("0" + STR$(T(I)),2);" ";: NEXT 
  198. 1920  PRINT : PRINT : PRINT "PRESS ANY KEY?";: GET I$: PRINT I$: HOME : RETURN 
  199. 1930  REM  HOME AND DO PAGE
  200. 1940  HOME : HTAB (35): NORMAL : PRINT "PAGE ";CP: GOSUB 1310: RETURN 
  201. 1950  REM  INIT ALL
  202. 1960 V = 1:H = 1:CP = 1:MP = 1:D$ =  CHR$(4): DIM N$(100)
  203. 1970  FOR I = 1 TO 8:T(I) = I *5: NEXT :T(9) = 1
  204. 1980  ONERR  GOTO 2020
  205. 1990  PRINT D$;"OPEN INDEX.PE"
  206. 2000  PRINT D$;"READ INDEX.PE"
  207. 2010  INPUT N: FOR I = 1 TO N: INPUT N$(I): NEXT 
  208. 2020  PRINT D$;"CLOSE": POKE 216,0
  209. 2030  POKE 768,160: POKE 769,0: POKE 770,76: POKE 771,44: POKE 772,254: REM  SET UP MOVE WITH SHORT MACHINE CODE
  210. 2040  GOSUB 1760: GOSUB 1930
  211. 2050  GOTO 150