home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib36a.dsk / MAY.1989 / GET.SET.INFO.bas next >
BASIC Source File  |  2023-02-26  |  11KB  |  347 lines

  1. 10  REM  **********************
  2. 20  REM  *    GET.SET.INFO    *
  3. 30  REM  *   by  Bill Tudor   *
  4. 40  REM  * Copyright (c) 1989 *
  5. 50  REM  * by MicroSPARC, Inc *
  6. 60  REM  * Concord, MA  01742 *
  7. 70  REM  **********************
  8. 80 :
  9. 90  ONERR  GOTO 2790
  10. 100  DIM B%(7),M$(5)
  11. 110  FOR I = 0 TO 10: READ B: POKE 768 +I,B: NEXT 
  12. 120  FOR I = 1 TO 5: READ M$(I): NEXT 
  13. 130 :
  14. 140  REM ====================
  15. 150  REM  Setup the Screen:
  16. 160  REM ====================
  17. 170 :
  18. 180  PRINT  CHR$(21): HOME 
  19. 190  PRINT "       GET_SET_INFO by Bill Tudor": PRINT "    COPYRIGHT(C) 1989 MICROSPARC,INC": REM  7 AND 4 SPACES
  20. 200  FOR I = 1 TO 40: PRINT "_";: NEXT 
  21. 210  VTAB 22: HTAB 1: FOR I = 1 TO 40: PRINT "_";: NEXT 
  22. 220  POKE 34,3: POKE 35,21: REM  -Set text screen
  23. 230 :
  24. 240  REM ==================
  25. 250  REM    Main Menu
  26. 260  REM ==================
  27. 270 :
  28. 280  PRINT  CHR$(4);"PREFIX": INPUT PF$
  29. 290  PRINT  CHR$(4);"PREFIX";PF$
  30. 300  HOME : PRINT : PRINT "Prefix:";PF$: PRINT 
  31. 310  PRINT "        1. Enter Filename": REM  8 SPACES
  32. 320  PRINT "        2. Catalog disk"
  33. 330  PRINT "        3. New Slot & Drive"
  34. 340  PRINT "        4. Enter new Prefix"
  35. 350  PRINT "        5. Quit Program"
  36. 360  PRINT : PRINT "      Enter Selection:< >": REM  6 SPACES
  37. 370  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  38. 380  PRINT "Enter value above or Esacpe to EXIT";: POKE 35,21
  39. 390  VTAB 13: HTAB 24: GET Q$
  40. 400  IF Q$ =  CHR$(27)  THEN Q$ = "5"
  41. 410  IF Q$ <"1"  OR Q$ >"5"  THEN  PRINT  CHR$(7);: GOTO 390
  42. 420  PRINT Q$:Q =  VAL(Q$): VTAB 6 +Q: HTAB 8: PRINT ">";
  43. 430  ON Q GOTO 650,820,490,950,740: PRINT  CHR$(7);: GOTO 390
  44. 440 :
  45. 450  REM ==================
  46. 460  REM  New Slot & Drive:
  47. 470  REM ==================
  48. 480 :
  49. 490  VTAB 15: HTAB 5: PRINT "Slot(1-7):";: CALL  -868
  50. 500  GET SL$
  51. 510  IF SL$ =  CHR$(27)  THEN 300
  52. 520  IF SL$ <"1"  OR SL$ >"7"  THEN  PRINT  CHR$(7);: GOTO 500
  53. 530  PRINT SL$;: VTAB 15: HTAB 20: PRINT "Drive(1-2)?";
  54. 540  GET DR$
  55. 550  IF DR$ =  CHR$(27)  THEN 490
  56. 560  IF DR$ <"1"  OR DR$ >"2"  THEN  PRINT  CHR$(7);: GOTO 540
  57. 570  PRINT DR$;
  58. 580  PRINT  CHR$(4);"PREFIX,S";SL$;",D";DR$
  59. 590  GOTO 280
  60. 600 :
  61. 610  REM ==================
  62. 620  REM  Get the Filename:
  63. 630  REM ==================
  64. 640 :
  65. 650 PN$ = ""
  66. 660  GOSUB 3150
  67. 670  IF PN$ = ""  THEN 300
  68. 680  GOTO 1050
  69. 690 :
  70. 700  REM =============
  71. 710  REM  Quit Program:
  72. 720  REM =============
  73. 730 :
  74. 740  POKE 35,24: VTAB 24: HTAB 1: CALL  -868: PRINT "Quit?(Y/N)";
  75. 750  GET Q$: IF Q$ < >"Y"  AND Q$ < >"y"  THEN  POKE 35,21: GOTO 300
  76. 760  POKE 34,0: HOME : END 
  77. 770 :
  78. 780  REM =============
  79. 790  REM  Catalog Disk:
  80. 800  REM =============
  81. 810 :
  82. 820  HOME 
  83. 830  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  84. 840  PRINT "Use <control-S> to pause listing";
  85. 850  POKE 35,21: VTAB 3
  86. 860  PRINT  CHR$(4);"CAT"
  87. 870  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  88. 880  PRINT "Press RETURN to continue ";: POKE 35,21
  89. 890  GET Q$: GOTO 300
  90. 900 :
  91. 910  REM ==================
  92. 920  REM  Get Prefix:
  93. 930  REM ==================
  94. 940 :
  95. 950 PN$ = ""
  96. 960  GOSUB 3150
  97. 970  IF PN$ = ""  THEN 300
  98. 980 PF$ = PN$
  99. 990  GOTO 290
  100. 1000 :
  101. 1010  REM ==============
  102. 1020  REM  Get File Info:
  103. 1030  REM ==============
  104. 1040 :
  105. 1050  PRINT  CHR$(4);"VERIFY";PN$
  106. 1060  HOME : PRINT 
  107. 1070  PRINT "File:";PN$
  108. 1080  VTAB 5: HTAB 1
  109. 1090 T =  PEEK(48824): REM -File type
  110. 1100  PRINT "File Type  :";T
  111. 1110  PRINT "Aux. Type  :"; PEEK(48825) +256 * PEEK(48826);
  112. 1120  IF T = 6  THEN  PRINT " (Load Address)";
  113. 1130  IF T = 4  THEN  PRINT " (Record size)";
  114. 1140  IF  PEEK(48827) = 15  THEN  PRINT " (Total Blocks)";
  115. 1150  PRINT 
  116. 1160 B =  PEEK(48823): REM -Access Byte
  117. 1170  PRINT "File Access:";B;
  118. 1180  GOSUB 3040
  119. 1190  IF B%(0) = 1  AND B%(1) = 1  AND B%(6) = 1  AND B%(7) = 1  THEN 1210
  120. 1200  PRINT ",locked";: GOTO 1220
  121. 1210  PRINT ",UNlocked";
  122. 1220  IF B%(5) = 1  THEN  PRINT ",Bckp needed": GOTO 1240
  123. 1230  PRINT ",NO Bckp needed"
  124. 1240  PRINT "Blocks Used:"; PEEK(48828) +256 * PEEK(48829)
  125. 1250 H$ =  STR$( PEEK(48833)): IF  LEN(H$) = 1  THEN H$ = "0" +H$
  126. 1260 M$ =  STR$( PEEK(48832)): IF  LEN(M$) = 1  THEN M$ = "0" +M$
  127. 1270 B =  PEEK(48830): GOSUB 3040
  128. 1280 MM = B%(5) +2 *B%(6) +4 *B%(7)
  129. 1290 YY =  PEEK(48831)
  130. 1300  IF  INT(YY/2) < >YY/2  THEN MM = MM +8
  131. 1310 YY =  INT(YY/2)
  132. 1320 DD = B%(0) +2 *B%(1) +4 *B%(2) +8 *B%(3) +16 *B%(4)
  133. 1330  PRINT "Mod. Date  :";MM;"/";DD;"/";YY
  134. 1340  PRINT "Mod. Time  :";H$;":";M$
  135. 1350 :
  136. 1360  REM ================
  137. 1370  REM  Provide Options:
  138. 1380  REM ================
  139. 1390 :
  140. 1400  VTAB 11: HTAB 1: CALL  -958: PRINT "        -----------------------": REM  8 SPACES, 23 DASHES
  141. 1410  PRINT "        Select Option to Change": REM  8 SPACES
  142. 1420 S = 1: VTAB 14: CALL  -958
  143. 1430  IF  PEEK(48827) = 15  THEN S = 5
  144. 1440  VTAB 14: FOR I = 1 TO 5
  145. 1450  IF S = I  THEN  INVERSE : HTAB 11: PRINT M$(I): NORMAL : GOTO 1470
  146. 1460  HTAB 11: PRINT M$(I)
  147. 1470  NEXT 
  148. 1480  POKE 35,24: VTAB 24: HTAB 1: CALL  -958
  149. 1490  PRINT "Type # or use arrows then press Return ";: POKE 35,21
  150. 1500  IF  PEEK(48827) < >15  THEN 1550
  151. 1510  VTAB 21: HTAB 8: PRINT "<Cannot change VOLUME data>";
  152. 1520  PRINT  CHR$(7);: GET Q$
  153. 1530  IF Q$ < > CHR$(13)  AND Q$ < > CHR$(27)  THEN 1520
  154. 1540  GOTO 300
  155. 1550  POKE 49168,0: GET Q$
  156. 1560  IF Q$ >"0"  AND Q$ <"6"  THEN S =  VAL(Q$): GOTO 1440
  157. 1570  IF Q$ < > CHR$(13)  THEN 1600
  158. 1580  POKE 35,24: VTAB 24: HTAB 1: CALL  -868: POKE 35,21
  159. 1590  ON S GOTO 1720,1890,2000,2250,300
  160. 1600  IF Q$ =  CHR$(11)  OR Q$ =  CHR$(8)  THEN S = S -1: GOTO 1640
  161. 1610  IF Q$ =  CHR$(10)  OR Q$ =  CHR$(21)  THEN S = S +1: GOTO 1650
  162. 1620  IF Q$ =  CHR$(27)  THEN 300
  163. 1630  PRINT  CHR$(7);: GOTO 1550
  164. 1640  IF S = 0  THEN S = 5
  165. 1650  IF S >5  THEN S = 1
  166. 1660  GOTO 1440
  167. 1670 :
  168. 1680  REM ==============
  169. 1690  REM  New File Type:
  170. 1700  REM ==============
  171. 1710 :
  172. 1720  VTAB 12: CALL  -958
  173. 1730  PRINT 
  174. 1740  PRINT "Code Type Code Type Code Type Code Type"
  175. 1750  PRINT "   0  NON   15  DIR  239  PAS  252  BAS"
  176. 1760  PRINT "   1  BAD   25  ADB  240  CMD  253  VAR"
  177. 1770  PRINT "   4  TXT   26  AWP  250  INT  254  REL"
  178. 1780  PRINT "   6  BIN   27  ASP  251  IVR  255  SYS"
  179. 1790 P$ = "Enter File Type (0-255):":X = 3: GOSUB 3340
  180. 1800  IF X$ = ""  THEN 1400
  181. 1810 T =  VAL(X$): IF T <0  OR T >255  THEN 2710
  182. 1820  POKE 48824,T
  183. 1830  GOTO 2570
  184. 1840 :
  185. 1850  REM =============
  186. 1860  REM  New Aux_Type:
  187. 1870  REM =============
  188. 1880 :
  189. 1890 P$ = "Enter Aux Type (0-65535):":X = 5: GOSUB 3340
  190. 1900  IF X$ = ""  THEN 1420
  191. 1910 AX =  VAL(X$)
  192. 1920  IF AX <0  OR AX >65535  THEN 2710
  193. 1930 X =  INT(AX/256): POKE 48826,X: POKE 48825,AX -256 *X
  194. 1940  GOTO 2570
  195. 1950 :
  196. 1960  REM ================
  197. 1970  REM  New Access byte:
  198. 1980  REM ================
  199. 1990 :
  200. 2000  VTAB 12: HTAB 1: CALL  -958
  201. 2010  PRINT 
  202. 2020  PRINT "      Code   Locked  Needs Backup": REM  6,3,2,1 SPACES
  203. 2030  PRINT "        1       Y         N": REM  8,7,9 SPACES
  204. 2040  PRINT "       33       Y         Y": REM  7,7,9 SPACES
  205. 2050  PRINT "      195       N         N": REM  6,7,9 SPACES
  206. 2060  PRINT "      227       N         Y": REM  6,7,9 SPACES
  207. 2070 P$ = "Enter Access Code (0-255):":X = 3: GOSUB 3340
  208. 2080  IF X$ = ""  THEN 1400
  209. 2090 AC =  VAL(X$)
  210. 2100  IF AC <0  OR AC >255  THEN 2710
  211. 2110 X =  INT(AC/4):B = 0
  212. 2120  FOR I = 1 TO 3
  213. 2130 X1 =  INT(X/2)
  214. 2140  IF X1 < >X/2  THEN B = 1
  215. 2150 X = X1: NEXT 
  216. 2160  IF B  THEN 2710
  217. 2170  POKE 48823,AC:AC =  INT(AC/32)
  218. 2180  IF AC/2 =  INT(AC/2)  THEN  POKE 49045,32
  219. 2190  GOTO 2570
  220. 2200 :
  221. 2210  REM ==============
  222. 2220  REM  New Date/Time:
  223. 2230  REM ==============
  224. 2240 :
  225. 2250 P$ = "Enter DAY (1-31):":X = 2: GOSUB 3340
  226. 2260  IF X$ = ""  THEN 1420
  227. 2270 DD =  VAL(X$)
  228. 2280  IF DD <1  OR DD >31  THEN 2710
  229. 2290 :
  230. 2300 P$ = "Enter MONTH (1-12):":X = 2: GOSUB 3340
  231. 2310  IF X$ = ""  THEN 1420
  232. 2320 MM =  VAL(X$)
  233. 2330  IF MM <1  OR MM >12  THEN 2710
  234. 2340 :
  235. 2350 P$ = "Enter YEAR (0-99):":X = 2: GOSUB 3340
  236. 2360  IF X$ = ""  THEN 1420
  237. 2370 YY =  VAL(X$)
  238. 2380  IF YY <0  OR YY >99  THEN 2710
  239. 2390 :
  240. 2400 P$ = "Enter HOUR (0-23):":X = 2: GOSUB 3340
  241. 2410  IF X$ = ""  THEN 1420
  242. 2420 HR =  VAL(X$)
  243. 2430  IF HR <0  OR HR >23  THEN 2710
  244. 2440 :
  245. 2450 P$ = "Enter MIN. (0-59):":X = 2: GOSUB 3340
  246. 2460  IF X$ = ""  THEN 1420
  247. 2470 MN =  VAL(X$)
  248. 2480  IF MN <0  OR MN >59  THEN 2710
  249. 2490  POKE 48832,MN: POKE 48833,HR
  250. 2500 YY = YY *2: IF MM >7  THEN MM = MM -8:YY = YY +1
  251. 2510  POKE 48831,YY: POKE 48830,MM *32 +DD
  252. 2520 :
  253. 2530  REM =====================
  254. 2540  REM  ProDOS SET_INFO Call:
  255. 2550  REM =====================
  256. 2560 :
  257. 2570  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  258. 2580  PRINT "Press Return to change; Escape to Exit";
  259. 2590  POKE 49168,0: GET Q$: IF Q$ < > CHR$(13)  THEN 1400
  260. 2600  VTAB 24: HTAB 1: CALL  -868: PRINT "Changing file...";
  261. 2610  POKE 48820,7: CALL 768
  262. 2620  HTAB 1: CALL  -868: PRINT "Done! ";
  263. 2630  PRINT "Press Return to continue";
  264. 2640  GET Q$
  265. 2650  POKE 35,21: GOTO 1050
  266. 2660 :
  267. 2670  REM ===============
  268. 2680  REM  Invalid Option:
  269. 2690  REM ===============
  270. 2700 :
  271. 2710  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  272. 2720  PRINT  CHR$(7);"INVALID ENTRY; Press Return";
  273. 2730  GET Q$: POKE 35,21: GOTO 1400
  274. 2740 :
  275. 2750  REM ==============
  276. 2760  REM  Error Handler:
  277. 2770  REM ==============
  278. 2780 :
  279. 2790 EC =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256
  280. 2800  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  281. 2810  PRINT  CHR$(7);
  282. 2820  IF EC = 16  OR EC = 255  THEN  PRINT "Syntax Error";: GOTO 2860
  283. 2830  IF EC = 6  THEN  PRINT "File/Path not found";: GOTO 2860
  284. 2840  IF EC = 8  OR EC = 3  THEN  PRINT "I/O Error";: GOTO 2860
  285. 2850  PRINT "Error in line ";EL;",code ";EC;
  286. 2860  PRINT "; Press Return";: GET Q$
  287. 2870  CALL  -3288: POKE 35,21: GOTO 300
  288. 2880 :
  289. 2890  REM ===================
  290. 2900  REM  Set_Info/Menu Data:
  291. 2910  REM ===================
  292. 2920 :
  293. 2930  DATA  169,195,32,112,190,144,3,76,9,190,96
  294. 2940  DATA   " 1. NEW FILE TYPE "
  295. 2950  DATA   " 2. NEW AUX TYPE "
  296. 2960  DATA   " 3. NEW ACCESS CODE "
  297. 2970  DATA   " 4. NEW MOD. DATE/TIME "
  298. 2980  DATA   " 5. BACK TO MAIN MENU "
  299. 2990 :
  300. 3000  REM ==================
  301. 3010  REM  Form Bit Array
  302. 3020  REM ==================
  303. 3030 :
  304. 3040  FOR I = 0 TO 7
  305. 3050  IF B/2 =  INT(B/2)  THEN B%(I) = 0: GOTO 3070
  306. 3060 B%(I) = 1
  307. 3070 B =  INT(B/2)
  308. 3080  NEXT 
  309. 3090  RETURN 
  310. 3100 :
  311. 3110  REM ==================
  312. 3120  REM  Input a Pathname:
  313. 3130  REM ==================
  314. 3140 :
  315. 3150  VTAB 16: HTAB 1: PRINT "Path:";PN$;: CALL  -958
  316. 3160  GET Q$
  317. 3170  IF Q$ =  CHR$(27)  THEN PN$ = "": RETURN 
  318. 3180  IF Q$ =  CHR$(13)  THEN  RETURN 
  319. 3190  IF Q$ =  CHR$(8)  OR Q$ =  CHR$(127)  THEN 3260
  320. 3200  IF Q$ <"["  AND Q$ >"@"  THEN 3240
  321. 3210  IF Q$ <":"  AND Q$ >"-"  THEN 3240
  322. 3220  IF Q$ >"`"  AND Q$ <"{"  THEN Q$ =  CHR$( ASC(Q$) -32): GOTO 3240
  323. 3230  PRINT  CHR$(7);: GOTO 3160
  324. 3240  IF  LEN(PN$) > = 64  THEN 3230
  325. 3250 PN$ = PN$ +Q$: GOTO 3150
  326. 3260  IF PN$ = ""  THEN 3230
  327. 3270  IF  LEN(PN$) = 1  THEN PN$ = "": GOTO 3150
  328. 3280 PN$ =  LEFT$(PN$, LEN(PN$) -1): GOTO 3150
  329. 3290 :
  330. 3300  REM ==================
  331. 3310  REM  Get a Value:
  332. 3320  REM ==================
  333. 3330 :
  334. 3340  POKE 35,24: VTAB 24: HTAB 1: CALL  -868
  335. 3350  PRINT "Press Escape to Exit ";: POKE 35,21
  336. 3360 X$ = ""
  337. 3370  VTAB 20: HTAB 1: PRINT P$;X$;: CALL  -868
  338. 3380  GET Q$
  339. 3390  IF Q$ =  CHR$(27)  THEN X$ = "": RETURN 
  340. 3400  IF Q$ =  CHR$(13)  THEN  RETURN 
  341. 3410  IF Q$ =  CHR$(127)  OR Q$ =  CHR$(8)  THEN 3450
  342. 3420  IF Q$ <"0"  OR Q$ >"9"  THEN 3440
  343. 3430  IF  LEN(X$) <X  THEN X$ = X$ +Q$: GOTO 3370
  344. 3440  PRINT  CHR$(7);: GOTO 3380
  345. 3450  IF  LEN(X$) = 1  THEN 3360
  346. 3460  IF X$ = ""  THEN 3440
  347. 3470 X$ =  LEFT$(X$, LEN(X$) -1): GOTO 3370