home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 351-375 / apd358 / amos_source / bookbase.amos / bookbase.amosSourceCode < prev    next >
AMOS Source Code  |  1991-10-06  |  12KB  |  442 lines

  1. '
  2. ' BookBase : Written by Kevin E.A. Hall of Irrelevant Software   
  3. '              (If it's not irrelevant, we're not interested)
  4. '
  5. Set Buffer 60
  6. Screen Open 1,320,256,32,Lowres
  7. Unpack 5 To 1
  8. VARS:
  9. Dim NAME$(301),BOOK$(301),PUB$(301),PRICE$(301),SPC(1),FOUND(100)
  10. TIMES=1 : REC=1 : TST=0 : ALT=0
  11. Z=0 : NZ=1 : PAGE=0 : TFU=0 : NEED=0
  12. Curs Off : Paper 25 : Pen 0
  13. Wait Vbl : Limit Mouse 
  14. Reserve Zone 5
  15. Set Zone 1,8,26 To 308,69
  16. Set Zone 2,8,78 To 308,122
  17. Set Zone 3,8,128 To 308,170
  18. Set Zone 4,115,177 To 200,220
  19. ZNES:
  20. Set Zone 5,137,230 To 180,252
  21. MENUS:
  22. ALT=0
  23. MUZ:
  24. Pen 0
  25. Menu$(1)=" Options "
  26. Menu$(1,1)=" Load   " : Menu$(1,2)=" Save   " : Menu$(1,3)=" New    "
  27. Menu$(1,4)=" Print  " : Menu$(1,5)=" Quit   " : Menu$(1,6)=" About  "
  28. Menu$(2)=" Records "
  29. Menu$(2,1)=" First    " : Menu$(2,2)=" Last     " : Menu$(2,3)=" Previous "
  30. Menu$(2,4)=" Next     " : Menu$(2,5)=" Delete   " : Menu$(2,6)=" Alter    "
  31. Menu$(2,7)=" Goto     " : Menu$(2,8)=" List     "
  32. Menu$(3)=" Search " : Menu$(3,1)=" Author " : Menu$(3,2)=" Title  "
  33. WHA:
  34. On Menu Goto MENU1,MENU2,MENU3
  35. On Menu On 
  36. If REC=301
  37.   NAME$(REC)="" : BOOK$(REC)="" : PUB$(REC)="" : PRICE$(REC)=""
  38.   Dec REC
  39. Else 
  40. End If 
  41. LOP=1
  42. Pen 0 : X=Mouse Zone : Y=Mouse Click
  43. Curs Off : Clear Key 
  44. If X<>0 and Y=1
  45.    Pen 21 : Locate 7,1
  46.    Print " Adding Record Number.";TIMES;"  "
  47.    Gosub Int(X)
  48. Else 
  49. End If 
  50. If ALT>0
  51.    Locate 7,1 : Pen 21
  52.    Print "Altering Record Number.";TIMES;"  "
  53. Else 
  54. End If 
  55. Gosub BUTTON
  56. F$=Inkey$
  57. If Asc(F$)=29 Then Goto MENU2OPT3
  58. If Asc(F$)=28 Then Goto MENU2OPT4
  59. If NZ=0 Then Z=0
  60. If Z>0 and Z<8 Then Gosub Int(Z)
  61. If Y<>1 and ALT=0 and NEED=0 Then Menu On 
  62. Goto MUZ
  63. 1 Paste Bob 6,27,2
  64. X=3 : Z=1 : Y=7 : TLE$="Author:" : GT=34
  65. Gosub DISP
  66. Paste Bob 6,27,1 : NAME$(TIMES)=B$
  67. Return 
  68. 2 Paste Bob 6,77,2
  69. X=3 : Z=2 : Y=13 : TLE$="Title of Book:" : GT=34
  70. Gosub DISP
  71. Paste Bob 6,76,1 : BOOK$(TIMES)=B$
  72. Return 
  73. 3 Paste Bob 6,126,2
  74. X=3 : Z=3 : Y=19 : TLE$="Publisher:" : GT=34
  75. Gosub DISP
  76. Paste Bob 6,126,1 : PUB$(TIMES)=B$
  77. Return 
  78. 4 Paste Bob 115,177,8
  79. X=16 : Z=4 : Y=26 : TLE$="Price:" : GT=8
  80. Gosub DISP
  81. Paste Bob 115,177,7 : PRICE$(TIMES)=B$
  82. Return 
  83. 5 If Len(NAME$(301))>0 Then Return 
  84. If REC=300 Then Reset Zone 5
  85. If TIMES=301 Then Return 
  86. If Len(NAME$(TIMES))=0 or Len(BOOK$(TIMES))=0 Then Goto NEEDMORE
  87. NEED=0
  88. Paste Bob 137,230,6 : Wait 10
  89. Paste Bob 137,230,5
  90. If ALT>0 Then TIMES=ALT-1
  91. Inc TIMES : TST=1 : Inc REC : ALT=0 : Z=1 : NZ=1
  92. If TIMES=301 Then Goto FULL
  93. WIFFLE:
  94. Paste Bob 6,28,1 : Paste Bob 6,77,1
  95. Paste Bob 6,127,1 : Paste Bob 115,177,7
  96. BUTTON:
  97. Locate 7,1 : Pen 21
  98. If ALT=0 Then Print " Display of Record No.";REC;"  "
  99. Pen 29
  100. Locate 3,5 : Print "Author:"
  101. Locate 3,11 : Print "Title of Book:" : Locate 3,17 : Print "Publisher:"
  102. Locate 16,24 : Print "Price:"
  103. Pen 5
  104. Locate 3,7 : Print NAME$(REC)
  105. Locate 3,13 : Print BOOK$(REC)
  106. Locate 3,19 : Print PUB$(REC)
  107. Locate 16,26 : Print PRICE$(REC)
  108. Return 
  109. MENU1:
  110.   If Choice(2)=1 Then Goto MENU1OPT1
  111.   If Choice(2)=2 Then Goto MENU1OPT2
  112.   If Choice(2)=3 Then Goto MENU1OPT3
  113.   If Choice(2)=4 Then Goto MENU1OPT4
  114.   If Choice(2)=5 Then Goto MENU1OPT5
  115.   If Choice(2)=6 Then Goto MENU1OPT6
  116. MENU2:
  117.   If Choice(2)=1 Then Goto MENU2OPT1
  118.   If Choice(2)=2 Then Goto MENU2OPT2
  119.   If Choice(2)=3 Then Goto MENU2OPT3
  120.   If Choice(2)=4 Then Goto MENU2OPT4
  121.   If Choice(2)=5 Then Goto MENU2OPT5
  122.   If Choice(2)=6 Then Goto MENU2OPT6
  123.   If Choice(2)=7 Then Goto MENU2OPT7
  124.   If Choice(2)=8 Then Goto MENU2OPT8
  125. MENU3:
  126.   If Choice(2)=1 Then Goto MENU3OPT1
  127.   If Choice(2)=2 Then Goto MENU3OPT2
  128. MENU1OPT1:
  129. FLE$=Fsel$("*.DAT","","Load Data File")
  130. If FLE$="" Then Goto MENUS
  131. If Not Exist(FLE$+".bookbase") Then Goto WRONG
  132. If Not Exist(FLE$) Then Goto NOFOUND
  133. Open In 1,FLE$ : Input #1,TIMES,REC,TST
  134. For N=1 To TIMES-1
  135. Input #1,NAME$(N),BOOK$(N),PUB$(N),PRICE$(N)
  136. Next N
  137. Close 1
  138. If TIMES=301 Then Reset Zone 5 : TFU=0 : REC=TIMES-1
  139. Gosub WIFFLE : Goto MENUS
  140. MENU1OPT2:
  141. FLE$=Fsel$("*.DAT","","Save Data File")
  142. If FLE$="" and TIMES>300 Then TFU=0 : Goto FINI
  143. If FLE$="" Then Goto MENUS
  144. FLE2$=FLE$+".bookbase"
  145. Open Out 1,FLE2$
  146. Print #1,"Dummy File - Do NOT delete"
  147. Close 1
  148. If Instr(FLE$,".")=0 Then FLE$=FLE$+".DAT"
  149. Open Out 1,FLE$ : Print #1,TIMES;",";REC;",";TST
  150. For N=1 To TIMES-1
  151. Print #1,NAME$(N);",";BOOK$(N);",";PUB$(N);",";PRICE$(N)
  152. Next N
  153. Close 1
  154. If TIMES=301 Then TFU=0 : Goto FINI
  155. Gosub WIFFLE : Goto MENUS
  156. MENU1OPT3:
  157. Gosub RUSURE
  158. For N=0 To 301
  159. NAME$(N)="" : BOOK$(N)="" : PUB$(N)="" : PRICE$(N)="" : Next N
  160. Paste Bob 6,28,1 : Paste Bob 6,77,1
  161. Paste Bob 6,126,1 : 
  162. Paste Bob 115,177,7
  163. TIMES=1 : TST=0 : REC=1 : K=Free : Goto ZNES
  164. MENU1OPT4:
  165. Gosub NORECS
  166. For M=1 To TIMES Step 2
  167. LTH=Len(NAME$(M)) : Lprint NAME$(M); : Gosub PRSPC : Lprint NAME$(M+1)
  168. LTH=Len(BOOK$(M)) : Lprint BOOK$(M); : Gosub PRSPC : Lprint BOOK$(M+1)
  169. LTH=Len(PUB$(M)) : Lprint PUB$(M); : Gosub PRSPC : Lprint PUB$(M+1)
  170. LTH=Len(PRICE$(M)) : Lprint PRICE$(M); : Gosub PRSPC : Lprint PRICE$(M+1)
  171. Lprint : Lprint 
  172. Next M
  173. Goto MENUS
  174. PRSPC:
  175. For Z=LTH To 40 : Lprint " "; : Next Z : Return 
  176. MENU1OPT5:
  177. TFU=1
  178. Gosub RUSURE
  179. Screen Close 1
  180. End 
  181. MENU1OPT6:
  182. Wind Save 
  183. Wind Open 1,16,48,32,10,16 : Border 1,0,0 : Paper 22 : Curs Off : Clw 
  184. Print : Pen 10 : Print "        Book-Base V1.1 " : Pen 8 : 
  185. Print : Print "  Written by Kevin E.A. Hall"
  186. Print "    of Irrelevant Software" : Print : 
  187. Pen 2 : Print "   Press left mouse button"
  188. Do 
  189. If Mouse Key=1 Then Wind Close : Goto MENUS Else Loop 
  190. MENU2OPT1:
  191. Gosub NORECS : REC=1 : Gosub WIFFLE : Goto MENUS
  192. MENU2OPT2:
  193. Gosub NORECS : REC=(TIMES-1) : Gosub WIFFLE : Goto MENUS
  194. MENU2OPT3:
  195. Gosub NORECS : If REC>1 Then Dec REC
  196. Gosub WIFFLE : Goto MENUS
  197. MENU2OPT4:
  198. Gosub NORECS : If REC+1<=TIMES-1 Then Inc REC
  199. Gosub WIFFLE : Goto MENUS
  200. MENU2OPT5:
  201. If REC=301 Then Return 
  202. TFU=1
  203. Gosub NORECS
  204. Gosub RUSURE : 
  205. DEL=REC
  206. For N=DEL To TIMES-1
  207. NAME$(N)=NAME$(N+1) : BOOK$(N)=BOOK$(N+1)
  208. PUB$(N)=PUB$(N+1) : PRICE$(N)=PRICE$(N+1)
  209. Next N
  210. K=Free
  211. Dec TIMES
  212. If TIMES=300 Then Gosub WIFFLE : Goto ZNES
  213. If TIMES=1 Then TST=0 : REC=TIMES : Gosub WIFFLE
  214. Goto MENUS
  215. MENU2OPT6:
  216. If REC>=301 Then Return 
  217. If REC<301 Then Set Zone 5,137,230 To 180,252
  218. NZ=0
  219. Menu Off 
  220. Gosub NORECS
  221. ALT=TIMES
  222. Gosub WIFFLE : TIMES=REC : Goto WHA
  223. DISP:
  224. Locate 7,1 : Pen 21 : Print " Adding Record Number.";TIMES;" "
  225. If ALT=0 Then If REC<TIMES Then REC=TIMES
  226. Locate X,Y-2 : Print TLE$
  227. Locate X,Y : Pen 29 : Print "_" : Pen 21
  228. B$=""
  229. MAIN:
  230. T$=Inkey$ : T=Asc(T$)
  231. If T=8 and LOP>1
  232.    A$=Left$(B$,Len(B$)-1)
  233.    Locate X,Y : Print A$;
  234.    Pen 29 : Print "_ " : Pen 21
  235.    B$=A$ : Dec LOP
  236. Else 
  237. End If 
  238. If Mouse Zone=0 Then Z=0 : Return 
  239. If LOP>GT or T=13 Then Inc Z : LOP=1 : Return 
  240. If T>31 and T<255
  241.    B$=B$+T$ : 
  242.    Locate X,Y : Print B$; : 
  243.    Pen 29 : Print "_"; : Pen 21 : 
  244.    Inc LOP
  245. Else 
  246. End If 
  247. Goto MAIN
  248. MENU2OPT7:
  249. SEL=1
  250. Gosub NORECS
  251. Wind Save : Wind Open 1,2,2,35,11,1 : Curs Off 
  252. Paper 0 : Pen 26 : Border 1,0,2 : Clw 
  253. Print "   Current existing records:"; : Pen 5 : Print TIMES-1 : Pen 26
  254. Print "   Press Left mouse button to" : Print "   increase selection. Right"
  255. Print "     button to decrease it." : Print 
  256. Print "  Hit any key to accept number"
  257. Menu Off 
  258. Do 
  259. If SEL>TIMES-1 Then SEL=TIMES-1
  260. If SEL<1 Then SEL=1
  261. Locate 5,7 : Pen 26 : Print "Selected Record - "; : Pen 5 : Print SEL;" "
  262. T=Mouse Click
  263. If T=2 Then Dec SEL
  264. If T=1 Then Inc SEL
  265. T$=Inkey$
  266. If T$<>""
  267.    REC=SEL
  268.    Wind Close 
  269.    Menu On 
  270.    Gosub WIFFLE
  271.    Goto MENUS
  272. Else 
  273. End If 
  274. Loop 
  275. MENU2OPT8:
  276. PAGE=0
  277. PGE=1 : PGES=0
  278. For D=1 To TIMES-1 Step 5 : PGES=PGES+1 : Next D
  279. If TIMES-1<=5 Then PAGE=1
  280. FRM=1 : LAS=5
  281. Gosub NORECS
  282. Screen Open 2,640,512,8,Hires : Paper 0 : Cls 
  283. Wind Open 1,0,0,79,31,1 : Curs Off : Paper 0 : Clw : Border 0,0,7
  284. Title Top "Full record list (Press ESC to quit)"
  285. LOPZ:
  286. Clear Key 
  287. If PGE<1 Then PGE=1
  288. Clw : Locate 62,0 : Pen 6 : Print "Page";PGE;" Of";PGES : Locate 0,2
  289. If LAS>=TIMES Then LAS=TIMES-1
  290. For N=FRM To LAS
  291. SPC(0)=34-Len(NAME$(N))+1 : SPC(1)=34-Len(PUB$(N))+1
  292. Pen 1 : Print "  Author";Space$(28);" Title"
  293. Pen 2 : Print "  ";NAME$(N);Space$(SPC(0));BOOK$(N) : Pen 1
  294. Print "  Publisher";Space$(25);" Price" : Pen 2
  295. Print "  ";PUB$(N);Space$(SPC(1));PRICE$(N) : Print 
  296. Next N : Pen 6 : Locate 1,27
  297. If LAS>=TIMES-1 Then Goto EOB
  298. Print "     Left button to move on a page, right button to move back a page"
  299. Do 
  300. Y=Mouse Click
  301. T$=Inkey$ : If Asc(T$)=27 Then Goto ESC
  302. If Y=1 Then Goto PAGEON
  303. If Y=2 Then Goto PAGEBACK
  304. Loop 
  305. PAGEON:
  306. FRM=LAS+1 : LAS=LAS+5
  307. Inc PGE
  308. Goto LOPZ
  309. EOB:
  310. Pen 6 : Locate 1,27
  311. Print "   End of BookBase: Left button to exit, right button to go back a page"
  312. Do 
  313. Y=Mouse Click
  314. T$=Inkey$ : If Asc(T$)=27 Then Goto ESC
  315. If Y=1 Then Goto ESC
  316. If Y=2 and PAGE=0 Then Goto PAGEBACK
  317. Loop 
  318. ESC:
  319. Wind Close : Screen Close 2
  320. Goto MENUS
  321. PAGEBACK:
  322. FRM=FRM-5 : If FRM<1 Then FRM=1
  323. LAS=FRM+4 : Dec PGE
  324. Goto LOPZ
  325. MENU3OPT1:
  326. Gosub NORECS : D=0 : FOU=0 : NM$="Author" : Gosub SEARCH
  327. Title Top "Author Search"
  328. For N=1 To TIMES
  329. If Upper$(NAME$(N))=Upper$(NAM$)
  330.     REC=N
  331.     FOUND(D)=N : Inc D
  332.     Pen 3 : Print " Record";N,
  333.     Pen 4 : Inc FOU
  334.     Inc CLO
  335. Else 
  336. End If 
  337. If CLO=3 Then CLO=0 : Print 
  338. Next N : Print : Print : Pen 1 : Print " Records matched ";FOU
  339. Pen 24 : Print : Print " Press left mouse button" : Goto HANGONAMO
  340. MENU3OPT2:
  341. Gosub NORECS : FOU=0 : D=0 : NM$="Title" : Gosub SEARCH
  342. Title Top "Book Title Search"
  343. For N=1 To TIMES : 
  344. If Upper$(BOOK$(N))=Upper$(NAM$)
  345.      REC=N
  346.      FOUND(D)=N : Inc D
  347.      Pen 3 : Print " Record";N,
  348.      Pen 4 : Inc FOU
  349.      Inc CLO
  350. Else 
  351. End If 
  352. If CLO=3 Then CLO=0 : Print 
  353. Next N : Print : Print : Pen 1 : Print " Records matched ";FOU
  354. Pen 24 : Print : Print " Press left mouse button"
  355. HANGONAMO:
  356. Repeat 
  357. Until Mouse Click=1
  358. Wind Close 
  359. If FOU=0 Then Goto MENUS
  360. For B=0 To D-1 : REC=FOUND(B)
  361. Gosub WIFFLE
  362. Do 
  363. M=Mouse Click
  364. If M=0 Then Loop 
  365. If M=2 Then Goto MENUS
  366. Next B
  367. Goto MENUS
  368. NORECS:
  369. If TST>0 Then Return 
  370. Wind Save : Wind Open 1,16,16,32,6,1 : Curs Off 
  371. Paper 0 : Pen 7 : Border 1,0,5 : Clw 
  372. Print "    No records in memory." : Print 
  373. Pen 2 : Print " Press the left mouse button"
  374. Do 
  375. If Mouse Click=1 Then Wind Close : Goto MENUS
  376. Loop 
  377. NOFOUND:
  378. Wind Save : Wind Open 1,16,16,25,5,1 : Curs Off 
  379. Paper 0 : Pen 5 : Border 1,0,2 : Clw 
  380. Print "    File not found" : Print " Press a mouse button"
  381. Do 
  382. T=Mouse Click
  383. If T<>0 Then Wind Close : Goto MENUS
  384. Loop 
  385. RUSURE:
  386. If REC>301 and TFU=0 Then Return 
  387. Menu Off 
  388. Wind Save : Wind Open 1,5,20,23,7,1 : Curs Off 
  389. Paper 0 : Pen 2 : Border 1,0,9 : Clw 
  390. Print "   Are you sure?" : Print : Pen 12 : Print " Left button  - Yes"
  391. Print " Right button - No"
  392. Do 
  393. T=Mouse Click
  394. If T=2 Then Wind Close : Menu On : Goto MENUS
  395. If T=1 Then Wind Close : Return 
  396. Loop 
  397. SEARCH:
  398. Wind Save : Wind Open 1,0,5,36,6,1 : Curs Off 
  399. Paper 0 : Pen 8 : Border 1,0,7
  400. FIND:
  401. Clw : Print NM$;" to search for?" : Print : Pen 10 : Input "";NAM$
  402. If NAM$="" Then Goto FIND
  403. Wind Size 38,25 : Curs Off : Clw : Print 
  404. Print "    Matched records found in : "
  405. CLO=0
  406. Return 
  407. Do 
  408. T=Mouse Click
  409. If T=2 Then Wind Close : Menu On : Goto MENUS
  410. If T=1 Then Wind Close : Return 
  411. Loop 
  412. FULL:
  413. Wind Save : Wind Open 1,5,20,23,6,1 : Curs Off 
  414. Paper 0 : Pen 13 : Border 1,0,9 : Clw 
  415. Print "   DataBase Full" : Print : Pen 12 : Print " Press mouse button"
  416. Do 
  417. T=Mouse Click
  418. If T<>0 Then Wind Close : Goto MENU1OPT2
  419. Loop 
  420. FINI:
  421. Wind Save : Wind Open 1,5,10,25,7,1 : Curs Off 
  422. Paper 0 : Pen 11 : Border 1,0,10 : Clw 
  423. Print "  Restart Program?" : Print 
  424. Pen 12 : Print " Press mouse button"
  425. Do 
  426. T=Mouse Click
  427. If T<>0 Then Wind Close : Goto MENU1OPT3
  428. Loop 
  429. NEEDMORE:
  430. Wind Save : Wind Open 1,5,10,20,6,1 : Curs Off 
  431. Paper 0 : Pen 19 : Border 1,0,1 : Clw 
  432. Print : Print " Need More Input " : Wait 40 : Wind Close 
  433. Z=1 : NEED=1
  434. Goto MUZ
  435. WRONG:
  436. Wind Save : Wind Open 1,16,16,25,5,1 : Curs Off 
  437. Paper 0 : Pen 2 : Border 1,0,5 : Clw 
  438. Print " Incorrect File Type!" : Pen 27 : Print " Press a mouse button"
  439. Do 
  440. T=Mouse Click
  441. If T<>0 Then Wind Close : Goto MENUS
  442. Loop