home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib09.dsk / GO.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  132 lines

  1. 1  REM  **********************
  2. 2  REM  *        GO          *
  3. 3  REM  *   BY CHRIS GLENN   *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 20 T$ = "GO - DEMONSTRATION"
  9. 30  GOTO 280
  10. 40  REM  INPUT
  11. 50 C = H:I$ = "": FOR X = H TO H +L:C$(X) = "":T$(X) = "": NEXT 
  12. 60  IF C = H -I  THEN C = H
  13. 70  HTAB C
  14. 80  GET C$(C): IF C$(H) = R$  THEN  HTAB I: CALL  -868: INVERSE : POP : GOTO 740
  15. 90  IF C$(C) = C$  THEN C$(C) = "": GOTO 70
  16. 100  IF C$(C) = F$  AND T$(C) > = A$  THEN 120
  17. 110  IF C$(H) <A$  OR C$(H) >Z$  THEN 70
  18. 120  IF C$(C) = R$  THEN  CALL  -868: GOTO 190
  19. 130  IF C$(C) = B$  THEN T$(C -I) = C$(C -I):C = C -I: GOTO 60
  20. 140  IF C = H +L +I  THEN  PRINT BL$;: GOTO 80
  21. 150  IF C$(C) = F$  AND T$(C) = ""  THEN T$(C) = S$
  22. 160  IF C$(C) = F$  THEN C$(C) = T$(C):C = C +I: GOTO 60
  23. 170  IF  ASC(C$(C)) <32  THEN 60
  24. 180  VTAB V: HTAB C: PRINT C$(C);:C = C +I: GOTO 60
  25. 190  FOR X = C -I TO H  STEP  -I: IF  ASC(C$(X)) +Z < >B  THEN C = X: GOTO 210
  26. 200  NEXT 
  27. 210  FOR X = H TO C:I$ = I$ + CHR$( ASC(C$(X)) +Z): NEXT : RETURN 
  28. 220  REM  VARIABLES (NOTE: B3$ = 3 BLANKS, B40$ = 40 BLANKS)
  29. 230 C = 0:F0 = 40:F1 = 41:F2 = 256:I = 1:P = 3:Q = 4:R = 5:B = 160:Y = 62:H = 8:L = 29:F = 7:Z = 128
  30. 240 A$ = "A":Z$ = "Z":B3$ = "   ":B40$ = "                                        "
  31. 250  DEF  FN S(R) =  PEEK(C + PEEK(F0) + PEEK(F1) *F2): DEF  FN T(C) =  INT((F1 - LEN(T$))/2 +.5)
  32. 260 D$ =  CHR$(4):R$ =  CHR$(13):F$ =  CHR$(21):B$ =  CHR$(8):S$ =  CHR$(32):C$ =  CHR$(44):BL$ =  CHR$(7): RETURN 
  33. 270  REM  SETUP
  34. 280  POKE 768,32: POKE 769,12: POKE 770,253: POKE 771,201: POKE 772,141: POKE 773,208: POKE 774,3: POKE 775,76
  35. 290  POKE 776,44: POKE 777,174: POKE 778,76: POKE 779,60: POKE 780,174: POKE 781,0: POKE 44602,0: POKE 44603,3
  36. 300  POKE 44452,20: POKE 44605,19: DIM A$(22,6),C$(38),T$(38): ONERR  GOTO 1060
  37. 310  GOSUB 230: PRINT D$"NOMON C,I,O": TEXT : HOME 
  38. 320  INVERSE : PRINT B40$;: VTAB I: HTAB I: PRINT "<RETURN>=THIS SCREEN  <SPACE>=MORE FILES";: POKE 34,2
  39. 330  HOME : NORMAL : PRINT R$: VTAB I: PRINT D$"CATALOG":V =  PEEK(37) -2: VTAB 24: PRINT  CHR$(10)
  40. 340  VTAB I: HTAB I: INVERSE : PRINT B40$;: VTAB I: HTAB  FN T(C): PRINT T$
  41. 350  VTAB P: FOR X = P TO V: HTAB Q: FOR C = P TO R:A$(X,C) =  CHR$( FN S(R)): NEXT : PRINT : NEXT 
  42. 360  VTAB P: FOR X = P TO V: HTAB Q: NORMAL : PRINT B3$;: HTAB R: INVERSE : PRINT  CHR$(X +Y): NEXT :LL = X +61:V = X +I
  43. 370  REM  FILE NAME/TYPE
  44. 380  VTAB V: HTAB H: CALL  -868: POKE  -16368,0: INVERSE :N$ = "":E = 39
  45. 390  HTAB H: PRINT "FILE CHOICE?  (OR #=SPACE X=END) ";: VTAB V: HTAB R: GET X$: IF X$ = R$  THEN 310
  46. 400  IF X$ = "X"  THEN  HTAB H: CALL  -868: PRINT "END";: POKE 44602,12: POKE 44603,253: POKE 44452,22: POKE 44605,21: GOTO 640
  47. 410  IF X$ = "#"  THEN 660
  48. 420  IF X$ <A$  OR  ASC(X$) >LL  THEN 390
  49. 430 LV =  ASC(X$) -Y: VTAB LV: HTAB I:S =  PEEK(F0) + PEEK(F1) *F2
  50. 440 T =  PEEK(S +I): IF T < >193  AND T < >194  AND T < >201  AND T < >212  THEN  VTAB V: GOTO 390
  51. 450  FOR X = E TO F  STEP  -I: IF  PEEK(S +X) < >B  THEN E = X: GOTO 470
  52. 460  NEXT 
  53. 470  FOR X = F TO E:N$ = N$ + CHR$( PEEK(S +X)): NEXT : VTAB LV: HTAB H: PRINT N$: VTAB V: HTAB H: CALL  -868
  54. 480  REM  COMMAND
  55. 490  HTAB H: IF T = 212  THEN  PRINT "EXEC";: GOTO 510
  56. 500  PRINT "RUN  LOAD";
  57. 510  PRINT "  TEND";: IF T = 194  THEN  PRINT "  ADDRESS";
  58. 520  PRINT "  SIZE";
  59. 530  VTAB V: HTAB R: GET X$: IF X$ = R$  THEN  VTAB LV: HTAB H: NORMAL : PRINT N$: GOTO 380
  60. 540  IF X$ = A$  AND T = 194  THEN  HTAB I: CALL  -868: PRINT BL$;: GOTO 1140
  61. 550  IF X$ = "S"  THEN 710
  62. 560  IF X$ = "T"  THEN 740
  63. 570  IF X$ = "E"  AND T < >212  OR X$ < >"E"  AND T = 212  THEN 530
  64. 580  IF X$ = "E"  THEN O$ = "EXEC": GOTO 620
  65. 590  IF X$ = "R"  THEN O$ = "RUN": GOTO 620
  66. 600  IF X$ < >"L"  THEN 530
  67. 610 O$ = "LOAD"
  68. 620  POKE  -16298,0: POKE 44452,22: POKE 44605,21: POKE 44602,12: POKE 44603,253: IF T = 194  THEN BI$ = "B"
  69. 630  HTAB H: CALL  -868: PRINT BI$O$: PRINT D$BI$O$N$;
  70. 640  POKE  -16298,0: POKE 34,0: NORMAL : VTAB V -(X$ = "X"  OR T = 193  OR T = 201): END 
  71. 650  REM  DISK SPACE
  72. 660  HTAB H: CALL  -868: PRINT "DISK SPACE:";
  73. 670  RESTORE : FOR X = 896 TO 960: READ A: POKE X,A: NEXT : POKE 905,149: POKE 938,149
  74. 680 J =  PEEK(43626) *16:K =  PEEK(43624): POKE 897,J: POKE 898,K: POKE 911,J: POKE 912,K: CALL 919
  75. 690 FR =  PEEK(917) + PEEK(918) *F2:US = 496 -FR: PRINT " USED="US"  FREE="FR;: HTAB R: GET X$: GOTO 310
  76. 700  REM  SIZE
  77. 710  HTAB H: CALL  -868: PRINT "SIZE: ";: FOR X = P TO R: PRINT A$(LV,X);: NEXT : PRINT " SECTORS";
  78. 720  HTAB R: GET X$: CALL  -868: GOTO 490
  79. 730  REM  FILE TENDING
  80. 740  VTAB V: HTAB I: CALL  -868: IF  PEEK(S) = 106  THEN  POKE S,170
  81. 750  HTAB H: PRINT "LOCK UNLOCK RENAME DELETE VERIFY";: HTAB R: GET X$: IF X$ = R$  THEN  CALL  -868: HTAB H: GOTO 490
  82. 760  IF X$ = "L"  THEN 840
  83. 770  IF X$ = "U"  THEN 870
  84. 780  IF X$ = "R"  THEN 900
  85. 790  IF X$ = "D"  THEN 990
  86. 800  IF X$ < >"V"  THEN 750
  87. 810  REM  VERIFY
  88. 820  CALL  -868: HTAB H: PRINT "VERIFY": PRINT D$"VERIFY"N$: GOTO 740
  89. 830  REM  LOCK
  90. 840  IF  PEEK(S) = 170  THEN 750
  91. 850  CALL  -868: HTAB H: PRINT "LOCK": PRINT D$"LOCK"N$: POKE S,170: GOTO 740
  92. 860  REM  UNLOCK
  93. 870  IF  PEEK(S) = 160  THEN 750
  94. 880  CALL  -868: HTAB H: PRINT "UNLOCK": PRINT D$"UNLOCK"N$: POKE S,160: GOTO 740
  95. 890  REM  RENAME
  96. 900  IF  PEEK(S) = 170  THEN  POKE S,106
  97. 910  HTAB I: CALL  -868: PRINT "RENAME";: NORMAL : PRINT "=";: GOSUB 50: INVERSE : IF I$ = N$  THEN 740
  98. 920  HTAB I: PRINT BL$"OK?";: NORMAL : PRINT "    ";: INVERSE 
  99. 930  HTAB R: GET X$: IF X$ = "N"  OR X$ = R$  THEN 740
  100. 940  IF X$ < >"Y"  THEN 930
  101. 950  HTAB I: PRINT "RENAME";: NORMAL : PRINT "=": IF  PEEK(S) = 106  THEN UN = I: PRINT D$"UNLOCK"N$
  102. 960  PRINT D$"RENAME"N$C$I$: IF UN  THEN UN = 0: PRINT D$"LOCK"I$
  103. 970 N$ = I$: VTAB LV: HTAB H: CALL  -868: INVERSE : PRINT N$: GOTO 740
  104. 980  REM  DELETE
  105. 990  HTAB I: CALL  -868: PRINT "OK?";: NORMAL : PRINT "    ";: INVERSE : PRINT BL$"DELETE";
  106. 1000  IF  PEEK(S) = 170  THEN  POKE S,106: PRINT " LOCKED FILE"BL$;
  107. 1010  HTAB R: GET X$: IF X$ = "N"  OR X$ = R$  THEN 740
  108. 1020  IF X$ < >"Y"  THEN 1010
  109. 1030  HTAB I: NORMAL : PRINT "    ": IF  PEEK(S) = 106  THEN  PRINT D$"UNLOCK"N$
  110. 1040  PRINT D$"DELETE"N$: GOTO 310
  111. 1050  REM  ERRORS
  112. 1060  POKE 768,104: POKE 769,168: POKE 770,104: POKE 771,166: POKE 772,223: POKE 773,154: POKE 774,72
  113. 1070  POKE 775,152: POKE 776,72: POKE 777,96: CALL 768: POKE 216,0: VTAB V: HTAB I: CALL  -868
  114. 1080 ER =  PEEK(222): VTAB V: HTAB H: INVERSE : PRINT BL$"ERROR "ER;: IF ER = 1  THEN  PRINT " - LANGUAGE NOT AVAILABLE";
  115. 1090  IF ER = 6  THEN  PRINT " - FILE NOT FOUND";
  116. 1100  IF ER = 8  AND X$ = "V"  THEN  PRINT " - UNABLE TO VERIFY";: GOTO 1120
  117. 1110  IF ER = 8  THEN  PRINT " - I/O";
  118. 1120  HTAB RL: GET X$: RUN 
  119. 1130  REM  ADDRESS/LENGTH
  120. 1140  HTAB I: PRINT "OK?";: NORMAL : PRINT "    ";: INVERSE : PRINT "ADDRESS/LENGTH  (BOOT IF FAILS)";: HTAB R: GET X$
  121. 1150  IF X$ = "N"  OR X$ = R$  THEN  HTAB 1: CALL  -868: GOTO 490
  122. 1160  IF X$ < >"Y"  THEN 1140
  123. 1170  ONERR  GOTO 1220
  124. 1180  HTAB 1: NORMAL : PRINT "   ": INVERSE : PRINT D$"BLOAD"N$
  125. 1190  LOMEM:  PEEK(115) + PEEK(116) *256 -2000:H = 5216 + PEEK(115) + PEEK(116) *256
  126. 1200 A =  PEEK(43634) + PEEK(43635) *256:L =  PEEK(H) + PEEK(H +1) *256
  127. 1210  VTAB  PEEK(37): HTAB 8: CALL  -868: PRINT "BLOAD ADDRESS="A"  LENGTH="L;
  128. 1220  HTAB 5: GET X$: CALL  -868: HTAB 8: PRINT "REQUIRED BOOT - PLEASE WAIT"
  129. 1230  NORMAL : VTAB  PEEK(37) -1: PRINT  CHR$(4)"PR#6"
  130. 1240  DATA  1,96,1,0,17,0,145,3,0,149,0,0,1,0,0,96,1,0,1,239,216,0,0,169,3,160,128,32,217,3,162,0,142,149,3,142
  131. 1250  DATA  150,3,160,56,185,0,149,162,8,10,144,8,238,149,3,208,3,238,150,3,202,208,242,200,192,196,144,232,96
  132. 1260  REM  BY CHRIS GLENN