home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib26b.dsk / PRICE.EDITOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  11KB  |  261 lines

  1. 1  REM **********************
  2. 2  REM *    PRICE.EDITOR    *
  3. 3  REM * BY GERHALD HANSEL  *
  4. 4  REM * COPYRIGHT (C) 1985 *
  5. 5  REM * BY MICROSPARC, INC *
  6. 6  REM * CONCORD, MA  01742 *
  7. 7  REM **********************
  8. 100  POKE 33,40: ONERR  GOTO 2510
  9. 110  DIM U$(120,7)
  10. 120  HOME : VTAB 2: HTAB 13: PRINT "NIBBLE INVESTOR"
  11. 130  HTAB 12: PRINT "PRICE FILE EDITOR"
  12. 140  HTAB 12: PRINT "BY GERHALD HANSEL": PRINT 
  13. 150  PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC. **": PRINT 
  14. 160  VTAB 12
  15. 170  PRINT "THIS PROGRAM ALLOWS YOU TO EDIT"
  16. 180  PRINT "THE PRICE FILES CREATED BY THE INVESTOR.": PRINT 
  17. 190  PRINT "THE INVESTOR IS A STOCK INVESTMENT"
  18. 200  PRINT "PROGRAM PRINTED IN NIBBLE MAGAZINE"
  19. 210  PRINT "VOLUME #4, ISSUE #2 AND"
  20. 220  PRINT "NIBBLE EXPRESS VOLUME IV.": PRINT 
  21. 230  GOSUB 310
  22. 240  HOME : CLEAR :D$ =  CHR$(4): REM       CTRL-D  
  23. 250  PRINT "CHOOSE ONE OF THE FOLLOWING:": PRINT : PRINT "1. SORT PRICE FILE BY DATE": PRINT : PRINT "2. DELETE DUPLICATES": PRINT "   (DATA MUST BE SORTED FIRST.)": PRINT 
  24. 260  PRINT "3. LIST ALL ENTRIES": PRINT : PRINT "4. ENTER DATA": PRINT 
  25. 270  PRINT "5. DELETE ONE RECORD": PRINT "   (FILE SHOULD BE LISTED AND": PRINT "   EXAMINED FIRST.)": PRINT : PRINT "6. CHANGE NUMBER OF RECORDS": PRINT : PRINT "7. QUIT PROGRAM"
  26. 280  GET A$: PRINT :A =  VAL(A$): IF A <1  OR A >7  THEN 240
  27. 290  HOME :X =  FRE(0)
  28. 300  ON A GOTO 560,930,1270,1580,2000,2330,2500
  29. 310  HTAB 7: INPUT "PRESS <RETURN> TO CONTINUE.";A$: RETURN 
  30. 320  PRINT "R# HI    LOW    CLOSE    VOLUME  M/ D/YR": RETURN 
  31. 330  REM  FILE NAME INPUT
  32. 340  HOME : PRINT "IF YOU NEED THE CATALOG, TYPE ? <RETURN>"
  33. 350  INPUT "FILE NAME ";NA$: IF NA$ = ""  THEN 340
  34. 360  IF NA$ = "?"  THEN  PRINT D$;"CATALOG": GOSUB 310: GOTO 340
  35. 370 NL =  ASC(NA$): IF NL > = 65  AND NL < = 90  OR NL > = 193  AND NL < = 218  THEN 390
  36. 380  PRINT "FILE NAME MUST BEGIN WITH A LETTER": PRINT : GOSUB 310: GOTO 340
  37. 390  PRINT D$;"VERIFY";NA$
  38. 400  RETURN 
  39. 410  REM  INPUT RECORD 0
  40. 420  PRINT D$;"OPEN";NA$;",L50  
  41. 430  PRINT D$;"READ ";NA$;",R0"
  42. 440  INPUT U$:R =  VAL(U$): RETURN 
  43. 450  PRINT : PRINT "THERE ARE "R" RECORDS IN FILE "NA$".": PRINT : RETURN 
  44. 460  REM  INPUT RECORDS
  45. 470  FOR W = 1 TO R
  46. 480  PRINT D$;"READ";NA$;",R";W
  47. 490  FOR F = 1 TO 7: INPUT V$(F)
  48. 500  NEXT 
  49. 510  NEXT W
  50. 520  PRINT D$;"CLOSE"
  51. 530  RETURN 
  52. 540  REM  FILE SORT ROUTINE 
  53. 550  REM   READ PRICE FILE DATA
  54. 560  GOSUB 340: GOSUB 420: GOSUB 450: DIM U$(120,7)
  55. 570  FOR W = 1 TO R
  56. 580  PRINT D$;"READ";NA$",R";W
  57. 590  FOR F = 1 TO 7: INPUT U$(W,F)
  58. 600  NEXT : NEXT W
  59. 610  PRINT D$;"CLOSE": PRINT 
  60. 620  REM  COMPARES DATES FOR SEQUENTIAL ORDER
  61. 630  FOR W = 1 TO R -1: PRINT ".";
  62. 640  IF  VAL(U$(W +1,7)) < VAL(U$(W,7))  THEN 700: REM YEAR
  63. 650  IF  VAL(U$(W +1,7)) > VAL(U$(W,7))  THEN 770: REM YEAR
  64. 660  IF  VAL(U$(W +1,5)) < VAL(U$(W,5))  THEN 700: REM MONTH
  65. 670  IF  VAL(U$(W +1,5)) > VAL(U$(W,5))  THEN 770: REM MONTH
  66. 680  IF  VAL(U$(W +1,6)) < VAL(U$(W,6))  THEN 700: REM DAY
  67. 690  GOTO 770
  68. 700  REM  SWAP ROUTINE
  69. 710  PRINT "SWAP MADE":SW = 1:SX = 1: REM  SWAP FLAGS
  70. 720  FOR F = 1 TO 7
  71. 730 T$(F) = U$(W,F)
  72. 740 U$(W,F) = U$(W +1,F)
  73. 750 U$(W +1,F) = T$(F)
  74. 760  NEXT F
  75. 770  NEXT W
  76. 780  IF SW = 1  THEN SW = 0: GOTO 630
  77. 790  IF SX = 0  THEN 900
  78. 800  REM  STORES RECORDS
  79. 810  PRINT : PRINT R;" RECORDS"
  80. 820  PRINT D$;"OPEN";NA$;",L50"
  81. 830  PRINT D$;"WRITE";NA$;",R0
  82. 840  FOR W = 1 TO R
  83. 850  PRINT D$;"WRITE";NA$;",R";W
  84. 860  FOR F = 1 TO 7
  85. 870  PRINT U$(W,F)
  86. 880  NEXT F: NEXT W
  87. 890  PRINT D$;"CLOSE";NA$
  88. 900  PRINT "SORTING COMPLETE": GOSUB 310: GOTO 240
  89. 910  REM    DELETE ROUTINE  
  90. 920  REM   READ PRICE FILE DATA
  91. 930  GOSUB 340:DE = 0:SW = 0:SX = 0: DIM U$(120,7)
  92. 940  GOSUB 420: GOSUB 450:
  93. 950  FOR W = 1 TO R
  94. 960  PRINT D$;"READ";NA$;",R";W
  95. 970  FOR F = 1 TO 7: INPUT U$(W,F)
  96. 980  NEXT F: NEXT W
  97. 990  PRINT D$;"CLOSE": PRINT 
  98. 1000  REM   COMPARES DATES FOR DUPLICATES
  99. 1010  FOR W = 1 TO R -1: PRINT ".";
  100. 1020  IF  VAL(U$(W,7)) < > VAL(U$(W +1,7))  THEN 1120: REM  YEAR
  101. 1030  IF  VAL(U$(W,5)) < > VAL(U$(W +1,5))  THEN 1120: REM  MONTH
  102. 1040  IF  VAL(U$(W,6)) < > VAL(U$(W +1,6))  THEN 1120: REM DAY
  103. 1050  REM DELETES RECORD AND MOVES OTHERS FORWARD ONE RECORD
  104. 1060  FOR X = W TO R -1
  105. 1070  FOR F = 1 TO 7
  106. 1080 U$(X,F) = U$(X +1,F)
  107. 1090  NEXT F: NEXT X
  108. 1100 DE = DE +1:R = R -1:W = R
  109. 1110  PRINT "ONE RECORD DELETED":SW = 1:SX = 1: REM  DELETION FLAG  
  110. 1120  NEXT W
  111. 1130  IF SX = 0  THEN  PRINT "NO DUPLICATE RECORDS": GOSUB 310: GOTO 240
  112. 1140  IF SW = 1  THEN SW = 0: GOTO 1010
  113. 1150  REM  STORES RECORDS
  114. 1160  PRINT : PRINT "STORING ";R;" RECORDS": PRINT : PRINT "NUMBER OF DUPLICATE RECORDS DELETED = "DE: PRINT 
  115. 1170  PRINT D$;"OPEN";NA$;",L50"
  116. 1180  PRINT D$;"WRITE";NA$;",R0
  117. 1190 U$ =  STR$(R): PRINT U$
  118. 1200  FOR W = 1 TO R
  119. 1210  PRINT D$;"WRITE";NA$;",R";W
  120. 1220  FOR F = 1 TO 7
  121. 1230  PRINT U$(W,F)
  122. 1240  NEXT F: NEXT W
  123. 1250  PRINT D$;"CLOSE";NA$: GOTO 240
  124. 1260  REM FILE LIST ROUTINE
  125. 1270  GOSUB 340
  126. 1280  PRINT "DO YOU WANT TO USE THE PRINTER? (Y/N)? ": GET A$: PRINT : IF A$ = "Y"  THEN  PRINT D$;"PR#1":PF = 1: GOTO 1300
  127. 1290 PF = 0: REM  PRINTER FLAG
  128. 1300  GOSUB 420: GOSUB 450: GOSUB 320
  129. 1310  DIM W$(120,7)
  130. 1320  FOR W = 1 TO R
  131. 1330  PRINT D$;"READ";NA$;",R";W
  132. 1340  FOR F = 1 TO 7: INPUT V$(F):W$(W,F) = V$(F)
  133. 1350  NEXT : NEXT W
  134. 1360  PRINT D$;"CLOSE"
  135. 1370  FOR W = 1 TO R: FOR F = 1 TO 7
  136. 1380 U$(F) = W$(W,F)
  137. 1390  NEXT 
  138. 1400  FOR F = 1 TO 3
  139. 1410  IF  LEN(U$(F)) <7  THEN U$(F) = U$(F) +" ": GOTO 1410
  140. 1420  NEXT F
  141. 1430  REM  FORMATS LISTING
  142. 1440 U$(4) = U$(4) +" "
  143. 1450  IF  LEN(U$(4)) <8  THEN U$(4) = " " +U$(4): GOTO 1450
  144. 1460  IF  LEN(U$(5)) <2  THEN U$(5) = " " +U$(5)
  145. 1470  IF  LEN(U$(6)) <2  THEN U$(6) = " " +U$(6)
  146. 1480 U$(5) = U$(5) +" ":U$(6) = U$(6) +" "
  147. 1490 W$ =  STR$(W) +" "
  148. 1500  IF  LEN(W$) <3  THEN W$ = " " +W$
  149. 1510 LINE = LINE +1
  150. 1520  PRINT W$;: FOR F = 1 TO 7: PRINT U$(F);: NEXT F: IF PF  THEN  PRINT 
  151. 1530  IF LINE = 20  AND PF = 0  AND W <R  THEN LINE = 0: GOSUB 310: HOME : GOSUB 320
  152. 1540  NEXT W
  153. 1550  IF PF = 0  THEN  GOSUB 310
  154. 1560 LINE = 0:PF = 0: PRINT D$;"PR#0": GOTO 240
  155. 1570  REM  FILE INPUT
  156. 1580  PRINT "ARE YOU STARTING A NEW FILE (Y/N)": GET A$: PRINT : IF A$ = "Y"  THEN  PRINT "FILES MUST BE STARTED USING THE INVESTOR PROGRAM.": GOSUB 310: GOTO 240
  157. 1590  GOSUB 340: GOSUB 420: GOSUB 450
  158. 1600  PRINT D$;"CLOSE"NA$
  159. 1610  GOSUB 310
  160. 1620  FOR F = 1 TO 7
  161. 1630  READ B$(F)
  162. 1640  NEXT F
  163. 1650  HOME : PRINT : PRINT "INPUT  DATA FOR RECORD # "R +1: PRINT 
  164. 1660  REM  INPUTS RECORD DATA
  165. 1670  PRINT : PRINT "IF YOU DO NOT WANT TO ENTER DATA,": PRINT : PRINT "TYPE E)ND FOR VOLUME.": PRINT 
  166. 1680  PRINT B$(4),: INPUT U$(4):U$(4) = U$(4) +"00"
  167. 1690 A$ =  LEFT$(U$(4),1): IF A$ = "E"  THEN R$ =  STR$(R): GOTO 1930
  168. 1700  FOR F = 1 TO 3
  169. 1710  PRINT B$(F),
  170. 1720  INPUT U$(F)
  171. 1730  NEXT F
  172. 1740  FOR F = 5 TO 7
  173. 1750  PRINT B$(F),
  174. 1760  INPUT U$(F)
  175. 1770  NEXT F
  176. 1780  PRINT "IF DATA IS CORRECT, PRESS RETURN.": PRINT : PRINT "TO RE-ENTER DATA, PRESS ANY OTHER KEY.": GET A$: PRINT : IF A$ =  CHR$(13)  THEN 1800
  177. 1790  VTAB 9: GOTO 1680
  178. 1800 R = R +1:R$ =  STR$(R)
  179. 1810  REM  STORES RECORD DATA
  180. 1820  PRINT D$;"OPEN";NA$;",L50"
  181. 1830  PRINT D$;"WRITE";NA$;",R";R
  182. 1840  FOR F = 1 TO 7
  183. 1850  PRINT U$(F)
  184. 1860  NEXT F
  185. 1870  PRINT D$;"CLOSE"NA$
  186. 1880  HOME : VTAB 10
  187. 1890  PRINT "MORE DATA PRESS <RETURN>": PRINT 
  188. 1900  PRINT "FINISHED PRESS <SPACE BAR>"
  189. 1910  GET A$: PRINT : IF A$ < > CHR$(13)  THEN 1950
  190. 1920  GOTO 1650
  191. 1930  REM  STORES NUMBER OF RECORDS
  192. 1940  PRINT D$;"OPEN";NA$;",L50"
  193. 1950  PRINT D$;"WRITE";NA$;",R";0
  194. 1960  PRINT R$
  195. 1970  PRINT D$;"CLOSE";NA$: RESTORE : GOTO 240
  196. 1980  DATA  HIGH,LOW,CLOSE,VOLUME,MONTH,DAY,YEAR  
  197. 1990  REM  DELETE ONE RECORD
  198. 2000  GOSUB 340: DIM U$(120,7)
  199. 2010  GOSUB 420: GOSUB 450
  200. 2020  PRINT D$;"CLOSE";NA$
  201. 2030  PRINT "WHICH RECORD# DO YOU WANT TO DELETE?": PRINT : PRINT "IF YOU DO NOT WANT TO DELETE ANY RECORD,": PRINT "PRESS <RETURN>."
  202. 2040  INPUT A$:A =  VAL(A$)
  203. 2050  IF A$ = ""  THEN 240
  204. 2060  IF A <1  THEN  HOME : GOTO 2030
  205. 2070  IF A >R  THEN  PRINT "THERE ARE ONLY "R" RECORDS IN": PRINT : PRINT "THE "NA$" FILE.": PRINT : GOSUB 310: GOTO 2030
  206. 2080  IF A = R  THEN 2200
  207. 2090  PRINT D$;"OPEN";NA$;",L50"
  208. 2100  FOR W = A TO R
  209. 2110  PRINT D$;"READ";NA$;",R";W
  210. 2120  FOR F = 1 TO 7: INPUT U$(W,F)
  211. 2130  NEXT F: NEXT W
  212. 2140  PRINT D$;"CLOSE"
  213. 2150  REM DELETES RECORD AND MOVES OTHERS FORWARD ONE RECORD  
  214. 2160  FOR W = A TO R -1
  215. 2170  FOR F = 1 TO 7
  216. 2180 U$(W,F) = U$(W +1,F)
  217. 2190  NEXT F: NEXT W
  218. 2200  REM  STORE RECORDS ON DISK
  219. 2210 U$ =  STR$(R -1)
  220. 2220  PRINT D$;"OPEN";NA$;",L50"
  221. 2230  PRINT D$;"WRITE";NA$;",R0 
  222. 2240  PRINT U$: IF A = R  THEN 2300
  223. 2250  FOR W = A TO R -1
  224. 2260  PRINT D$;"WRITE";NA$;",R";W
  225. 2270  FOR F = 1 TO 7
  226. 2280  PRINT U$(W,F)
  227. 2290  NEXT F: NEXT W
  228. 2300  PRINT D$;"CLOSE";NA$:
  229. 2310  PRINT "THERE ARE NOW "R -1" RECORDS IN": PRINT : PRINT "THE "NA$" FILE.": PRINT : GOSUB 310: GOTO 240
  230. 2320  REM  CHANGES NUMBER OF RECORDS
  231. 2330  GOSUB 340
  232. 2340  HOME : VTAB (4): PRINT "THIS SECTION ALLOWS YOU TO CHANGE THE": PRINT : PRINT "NUMBER OF RECORDS IN RECORD 0 OF": PRINT : PRINT "THE FILE "NA$".": PRINT 
  233. 2350  ONERR  GOTO 2370
  234. 2360  GOSUB 310: HOME :RZ = 0: GOSUB 420:RZ = R:R = 200:: GOSUB 470
  235. 2370  PRINT D$;"CLOSE": ONERR  GOTO 2510
  236. 2380  IF RZ < >0  THEN  PRINT "RECORD 0 IS CORRECT; THEREFORE,": PRINT : PRINT "THERE IS NO NEED TO CHANGE RECORD 0": PRINT : GOSUB 310: GOTO 240
  237. 2390  PRINT "THERE ARE "W -1" RECORDS IN": PRINT : PRINT "FILE "NA$".": PRINT 
  238. 2400  PRINT "RECORD 0 OF FILE "NA$: PRINT : PRINT "SHOWS THAT THERE ARE": PRINT 
  239. 2410  PRINT RZ" RECORDS IN THE FILE.": PRINT 
  240. 2420  PRINT "RECORD 0 WILL BE REWRITTEN WITH THE": PRINT 
  241. 2430  PRINT "CORRECT NUMBER OF FILES.": PRINT : GOSUB 310
  242. 2440  REM    STORES NUMBER OF RECORDS   
  243. 2450 R$ =  STR$(W -1)
  244. 2460  PRINT D$;"OPEN";NA$;",L50"
  245. 2470  PRINT D$;"WRITE";NA$;",R0"
  246. 2480  PRINT R$
  247. 2490  PRINT D$;"CLOSE";NA$: GOTO 240
  248. 2500  HOME : END 
  249. 2510  PRINT D$;"CLOSE";NA$
  250. 2520  IF  PEEK(222) = 4  THEN  VTAB 21: PRINT "DISK WRITE PROTECTED:GOTO10020   
  251. 2530  IF  PEEK(222) = 5  THEN  VTAB 21: PRINT "END OF DATA FOR FILE:GOTO10020
  252. 2540  IF  PEEK(222) = 6  THEN  VTAB 21: PRINT "NO FILE BY THAT NAME": GOTO 2620
  253. 2550  IF  PEEK(222) = 8  THEN  VTAB 21: PRINT "DISK I/O ERROR": GOTO 2620
  254. 2560  IF  PEEK(222) = 9  THEN  VTAB 21: PRINT "DISK FULL.. SET UP A NEW DISK": GOTO 2620
  255. 2570  IF  PEEK(222) = 10  THEN  VTAB 21: PRINT "FILE LOCKED": GOTO 2620
  256. 2580  IF  PEEK(222) = 13  THEN  VTAB 21: PRINT "FILE TYPE MISMATCH": GOTO 2620
  257. 2590  IF  PEEK(222) = 107  THEN  VTAB 21: PRINT "BAD SUBSCRIPT": GOTO 2620
  258. 2600  IF  PEEK(222) = 120  THEN  VTAB 21: PRINT "REDIMENSIONED ARRAY": GOTO 2620
  259. 2610  VTAB 21: PRINT "ERROR#"; PEEK(222);" HAS OCCURRED IN LINE "; PEEK(218) + PEEK(219) *256".": PRINT "CHECK APPLE MANUAL ERROR CODES (DOS & APPLESOFT)": GOTO 2620
  260. 2620  CALL  -868: INPUT "PRESS <RETURN> FOR MENU";A$
  261. 2630  GOTO 240