home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib12.dsk / INVESTOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  29KB  |  496 lines

  1. 1  REM  ***************************
  2. 2  REM  *      INVESTOR           *
  3. 3  REM  *   BY ALEXANDER LAIRD    *
  4. 4  REM  *   COPYRIGHT (C) 1983    *
  5. 5  REM  *   BY MICROSPARC INC.    *
  6. 6  REM  *   CONCORD,  MA 01742    *
  7. 7  REM  *   ALL RIGHTS RESERVED   *
  8. 8  REM  ***************************
  9. 10 D$ =  CHR$(4)
  10. 20  PRINT D$;"MAXFILES1"
  11. 30  ONERR  GOTO 880
  12. 32  PRINT D$;"VERIFY INVEST"
  13. 34  ONERR  GOTO 900
  14. 40  PRINT D$;"VERIFYSALES"
  15. 50  GOTO 4050
  16. 60  REM  < MISC SUBROUTINES >
  17. 70 Z =  INT(Z *100 +.05)/100:Z = Z *100:Z$ =  STR$(Z):ZZ$ =  RIGHT$(Z$,2): IF  ABS(Z) > = 100  THEN ZQ$ =  LEFT$(Z$, LEN(Z$) -2):X$ = ZQ$ +"." +ZZ$: RETURN 
  18. 75  IF  ABS(Z) <10  THEN ZZ$ = "0" + RIGHT$(ZZ$,1)
  19. 80 ZQ$ = "0":X$ = ZQ$ +"." +ZZ$: IF Z <0  THEN ZQ$ = "-" +ZQ$:X$ = "-" +X$
  20. 85  RETURN 
  21. 90 CST =  VAL(N$(I,3)) * VAL(N$(I,4)):CST =  INT(CST + VAL(N$(I,13))):XC$ =  STR$(CST): IF SE = 1  THEN  RETURN 
  22. 100 VL =  INT( VAL(N$(I,3)) * VAL(CP$(I,3))):XV$ =  STR$(VL): IF SE = 2  THEN  RETURN 
  23. 110 GL =  INT(VL -CST):XG$ =  STR$(GL): IF SE = 3  THEN  RETURN 
  24. 115 XP$ = "0": IF CST = 0  THEN  RETURN 
  25. 120 PCT =  INT((VL/CST) *100) -100:XP$ =  STR$(PCT)
  26. 130  RETURN 
  27. 140  PRINT  LEFT$(N$(I,1),5);: POKE 36,6: PRINT N$(I,2);: REM  NAME & LOT #
  28. 150  POKE 36,13 - LEN(N$(I,3)): PRINT N$(I,3);: RETURN : REM  QTY
  29. 160  FOR F = 1 TO 39: PRINT "=";: NEXT F: PRINT : RETURN 
  30. 170  FOR F = 1 TO 80: PRINT "=";: NEXT F: PRINT : RETURN 
  31. 180  PRINT  LEFT$(N$(I,1),6);: POKE 36,7: PRINT N$(I,2);: POKE 36,14 - LEN(N$(I,3)): PRINT N$(I,3);: POKE 36,21 -( LEN(N$(I,5)) + LEN(N$(I,6)) + LEN(N$(I,7))): PRINT N$(I,5);"/";N$(I,6);"/";N$(I,7);:CS =  VAL(N$(I,3)) * VAL(N$(I,4))
  32. 190 CS =  INT(CS *100 +.05)/100:X$ =  STR$(CS):Z = CS: GOSUB 70: POKE 36,33 - LEN(X$): PRINT X$;: RETURN 
  33. 200 AA = 365:M1 =  VAL(N$(I,5)):D1 =  VAL(N$(I,6)):Y1 =  VAL(N$(I,7)): IF Y1 = 87  THEN AA = 183: REM  12 VS 6 MO
  34. 210 M2 =  VAL(CP$(I,5)):D2 =  VAL(CP$(I,6)):Y2 =  VAL(CP$(I,7))
  35. 220 M3 =  VAL(N$(I,9)):D3 =  VAL(N$(I,10)):Y3 =  VAL(N$(I,11))
  36. 230 BD =  INT(M1 *30) +D1 + INT((Y1 -(Y1 -1)) *365): REM  DAY COUNT FOR BUY DATE
  37. 240 CD =  INT(M2 *30) +D2 + INT((Y2 -(Y1 -1)) *365): REM  DAY COUNT FOR CUR DATE
  38. 250 SD =  INT(M3 *30) +D3 + INT((Y3 -(Y1 -1)) *365): REM  DAY COUNT FOR SELL DATE
  39. 255  IF (M1 *30 +D1 +Y1 *365) >(6 *30 +25 +84 *365)  THEN BD = BD -182
  40. 260  RETURN 
  41. 270 X$ =  STR$(TC): POKE 36,20 - LEN(X$): PRINT X$;
  42. 280 X$ =  STR$(TV): POKE 36,27 - LEN(X$): PRINT X$;
  43. 290 X$ =  STR$(TG): POKE 36,33 - LEN(X$): PRINT X$;
  44. 300  RETURN 
  45. 310  POKE 36,39 - LEN(X$): PRINT X$: RETURN 
  46. 320  VTAB 24: INPUT "PRESS RETURN FOR MENU";XX$: HOME : TEXT : RETURN 
  47. 330  PRINT D$;"CATALOG": INPUT "PRESS RETURN TO CONTINUE ";XX$: RETURN 
  48. 340  PRINT "NAME";: POKE 36,7: PRINT "#";: POKE 36,11: PRINT "QTY";: POKE 36,15: PRINT "BUY DATE";: POKE 36,27: PRINT "$ COST";: RETURN 
  49. 350 Z = GN: GOSUB 70: POKE 36,70 - LEN(X$): PRINT X$;: IF SW = 1  THEN TG = TG + VAL(X$)
  50. 360  IF SW = 1  AND SL$ = "S"  THEN SH = SH +GN
  51. 370  IF SW = 1  AND SL$ = "L"  THEN LG = LG +GN
  52. 380  POKE 36,72: PRINT SL$;
  53. 385  IF CS = 0  THEN  PRINT : RETURN 
  54. 390 PC = (GN/CS) *100:Z = PC: GOSUB 70: POKE 36,80 - LEN(X$): PRINT X$: RETURN 
  55. 400  PRINT "** ENTER NEW DATA OR PRESS **": PRINT "** RETURN TO ACCEPT AS IS. **"
  56. 410  PRINT "<< MONTH= 1-12   DAY= 1-31 >>": RETURN 
  57. 420  PRINT :: PRINT "INVST NAME ... C)ATALOG ... <RTN> MENU": RETURN 
  58. 430  REM  < READ MASTER FILE >
  59. 440  PRINT D$;"OPEN";FI$;",L150"
  60. 450  IF SI$ = "1"  THEN 490: REM  READ SINGLE REC
  61. 460  PRINT D$;"READ";FI$;",R0"
  62. 470  INPUT R: IF R = 0  OR SK$ = "1"  THEN 540
  63. 480  FOR I = J TO R
  64. 490  PRINT D$;"READ";FI$;",R";I
  65. 500  FOR F = 1 TO K: INPUT N$(I,F): NEXT F
  66. 510  IF S$ = "D"  AND ((NA$ < >N$(I,1))  OR (NA$ = N$(I,1)  AND LO$ < >N$(I,2)))  THEN  GOSUB 940
  67. 515  IF S$ = "D"  AND R = 1  THEN Q = 0: GOSUB 970
  68. 520  IF SI$ = "1"  THEN 540
  69. 530  NEXT I
  70. 540  PRINT D$;"CLOSE";FI$: RETURN 
  71. 550  REM  < READ PRICE FILE >
  72. 560  PRINT D$;"VERIFY";NA$
  73. 570  PRINT D$;"OPEN ";NA$;",L50"
  74. 580  IF SI$ = "1"  THEN 630: REM  SINGLE REC
  75. 590  PRINT D$;"READ ";NA$;",R0"
  76. 600  INPUT R: IF R = 0  OR N1 = 1  THEN 700
  77. 610  IF QI$ = "1"  THEN W = R: GOTO 630: REM  READ LAST REC
  78. 620  FOR W = J TO R: IF S$ = "G"  THEN N = N +1
  79. 630  PRINT D$;"READ ";NA$;",R";W
  80. 640  FOR F = 1 TO K: INPUT U$(F)
  81. 650  IF S$ = "G"  THEN H$(N,F) = U$(F)
  82. 660  IF S$ = "R"  THEN CP$(I,F) = U$(F)
  83. 670  NEXT F
  84. 680  IF SI$ = "1"  OR QI$ = "1"  THEN 700
  85. 690  NEXT W
  86. 700  PRINT D$;"CLOSE ";NA$: RETURN 
  87. 710  PRINT D$;"OPEN ";NA$;",L50"
  88. 720  PRINT D$;"WRITE ";NA$;",R";RE
  89. 730  FOR F = 1 TO 7: PRINT U$(F): NEXT F
  90. 740  IF SI$ = ""  THEN 770
  91. 750  PRINT D$;"WRITE ";NA$;",R0"
  92. 760  PRINT RE
  93. 770  PRINT D$;"CLOSE ";NA$
  94. 780  RETURN 
  95. 790  REM  < WRITE MASTER FILE >
  96. 800  PRINT D$;"OPEN";FI$;",L150"
  97. 810  PRINT D$;"WRITE";FI$;",R";R
  98. 820  FOR F = 1 TO K: PRINT A$(F): NEXT F
  99. 830  IF S$ = "E"  OR S$ = "S"  THEN 870
  100. 840  PRINT D$;"WRITE";FI$;",R0"
  101. 850  PRINT R
  102. 860  IF S$ = "D"  THEN  RETURN 
  103. 870  PRINT D$;"CLOSE";FI$: RETURN 
  104. 880  POKE 216,0
  105. 890  PRINT D$;"OPEN INVEST,L150": PRINT D$;"WRITE INVEST,R0": PRINT 0: PRINT D$;"CLOSE INVEST"
  106. 895  GOTO 34
  107. 900  POKE 216,0
  108. 905  PRINT D$;"OPEN SALES,L150": PRINT D$;"WRITE SALES,R0"
  109. 910  PRINT 0
  110. 920  PRINT D$;"CLOSE SALES"
  111. 930  GOTO 4050
  112. 940 Q = Q +1
  113. 945  IF S$ = "D"  AND R = 1  THEN Q = 0: GOTO 970
  114. 950  PRINT D$;"WRITE";FI$;",R";Q
  115. 960  FOR F = 1 TO K: PRINT N$(I,F): NEXT F
  116. 970  PRINT D$;"WRITE";FI$;",R0"
  117. 980  PRINT Q
  118. 990  RETURN 
  119. 1000  REM  < NEW RECORD >
  120. 1010 J = 1:K = 2: GOSUB 440: FOR I = 1 TO R: FOR F = 1 TO 2:E$(I,F) = N$(I,F): NEXT F,I:K = 0
  121. 1020  IF R = 20  THEN  HOME : PRINT "MAXIMUM 20 RECORDS PER 'INVEST' FILE.": PRINT "'QUIT' THE PROGRAM AND RENAME 'INVEST'": PRINT "TO ANOTHER NAME.  THEN YOU CAN INITIAL-": PRINT "IZE ANOTHER 'INVEST' FILE.": GOTO 320
  122. 1030  IF SW = 1  THEN  RETURN 
  123. 1040 R = R +1
  124. 1050  HOME : VTAB 6: INVERSE : PRINT "ENTER NEW INVESTMENT RECORD": NORMAL : PRINT : PRINT "ENTER THE NAME OF THE INVESTMENT.": PRINT "IF OTHER PURCHASES HAVE BEEN MADE"
  125. 1060  PRINT "BE SURE TO ENTER THE NAME AS SHOWN": PRINT "FOR OTHER PURCHASES.": PRINT : GOSUB 420: INPUT "ENTER:";A$(1):A$(2) = "1": IF A$(1) = ""  THEN  RETURN 
  126. 1065  IF  LEN(A$(1)) >20  THEN  PRINT "KEEP NAME TO LESS THAN 20 CHARACTERS": FOR F = 1 TO 1000: NEXT F: GOTO 1050
  127. 1070  IF A$(1) = "C"  THEN  GOSUB 330: GOTO 1050
  128. 1080  FOR I = 1 TO R: IF E$(I,1) = A$(1)  THEN  PRINT "PREV. PURCH.: ";E$(I,1);" ->";E$(I,2):HIT = 1:A$(2) =  STR$( VAL(E$(I,2)) +1): REM  BUMP SEQ #
  129. 1090  NEXT I: PRINT : PRINT "THIS PURCHASE WILL BE:": PRINT A$(1);"  ->";A$(2): PRINT 
  130. 1100  INPUT "PRESS RETURN TO CONTINUE";XX$
  131. 1110  HOME : VTAB 6: INVERSE : PRINT "ADD NEW INVESTMENT": NORMAL : PRINT : GOSUB 410: IF HIT = 1  THEN HIT = 0: PRINT : PRINT "NEW PURCH. SEQ# IS THE LAST SEQ# +1":
  132. 1120  VTAB 11: FOR F = 1 TO 7: PRINT LL$(F): NEXT F: FOR F = 13 TO 14: PRINT LL$(F): NEXT F
  133. 1130  VTAB 11: HTAB 13: PRINT A$(1)
  134. 1140  VTAB 12: HTAB 13: PRINT A$(2)
  135. 1150  VTAB 13: FOR F = 3 TO 7: HTAB 13: INPUT "";A$(F): NEXT 
  136. 1160  FOR F = 13 TO 14: HTAB 13: INPUT "";A$(F): NEXT F
  137. 1170  VTAB 22: INPUT "RETURN= ACCEPT...  'R'= RE-ENTER ";XX$
  138. 1180  IF XX$ < >""  THEN 1150
  139. 1190  FOR F = 8 TO 11:A$(F) = "": NEXT F
  140. 1200 FI$ = "INVEST":K = 14: GOSUB 800
  141. 1210  IF  VAL(A$(2)) >1  THEN 1260: REM  SKIP INITIALIZING A PRICE FILE IS ONE ALREADY EXISTS
  142. 1220  PRINT D$;"OPEN ";A$(1);",L50"
  143. 1230  PRINT D$;"WRITE ";A$(1);",R0"
  144. 1240  PRINT 0: REM  # RECS
  145. 1250  PRINT D$;"CLOSE ";A$(1)
  146. 1260  RETURN 
  147. 1270  REM  < EDIT RECORDS >
  148. 1280  HOME : VTAB 6: INVERSE 
  149. 1290  IF S$ = "E"  THEN  PRINT "EDIT RECORDS ": GOTO 1310
  150. 1300  IF S$ = "S"  THEN  PRINT "SELL INVESTMENT"
  151. 1310  NORMAL : GOSUB 420: INPUT "ENTER:";NA$: IF NA$ = ""  THEN  RETURN 
  152. 1320  IF NA$ = "C"  THEN  GOSUB 330: GOTO 1280
  153. 1330  IF S$ = "S"  THEN ED$ = "M": GOTO 1360
  154. 1340  VTAB 12: PRINT : PRINT "SELECT THE FILE TO EDIT: ": PRINT : PRINT "M)ASTER FILE": PRINT "P)RICE FILE": PRINT "S)ALES FILE": PRINT : INPUT "ENTER SELECTION :";ED$: IF ED$ < >"S"  AND ED$ < >"M"  AND ED$ < >"P"  THEN 1340
  155. 1350  IF ED$ = "P"  THEN 1380
  156. 1360  IF ED$ = "M"  THEN  PRINT : PRINT "ENTER PURCH SEQ#": INPUT " (DEFAULT=1)    :";XX$:PS$ = XX$: IF XX$ = ""  THEN PS$ = "1"
  157. 1370  GOTO 1510
  158. 1380 N1 = 1: GOSUB 560:N1 = 0
  159. 1390  HOME : PRINT "THERE ARE ";R;" RECORDS IN THE FILE": PRINT : INPUT "ENTER THE RECORD # TO EDIT: ";RE
  160. 1400 SI$ = "1":W = RE:K = 7: GOSUB 560:SI$ = ""
  161. 1405  IF  VAL(U$(4)) = 0 GOTO 1420
  162. 1410 U$(4) =  LEFT$(U$(4), LEN(U$(4)) -2): REM  CONV TO 100'S
  163. 1420  HOME : INVERSE : PRINT "EDIT RECORD ";NA$;" #";RE: NORMAL : GOSUB 400
  164. 1430  VTAB 6: FOR F = 1 TO 7: PRINT LD$(F): NEXT F
  165. 1440  VTAB 6: FOR F = 1 TO 7: HTAB 10: PRINT U$(F): NEXT F
  166. 1450  VTAB 6: FOR F = 1 TO 7: HTAB 10: INPUT "";F$: IF F$ < >""  THEN U$(F) = F$
  167. 1460  VTAB F +5: HTAB 10: PRINT U$(F): HTAB 13: NEXT F
  168. 1470  VTAB 22: HTAB 3: INPUT "RETURN=ACCEPT ...'R'= RE-ENTER ";XX$: IF XX$ < >""  THEN 1420
  169. 1480 U$(4) = U$(4) +"00"
  170. 1490 RE = W: GOSUB 710
  171. 1500  RETURN 
  172. 1510 FI$ = "INVEST": IF ED$ = "S"  THEN FI$ = "SALES":J = 1:K = 15: GOSUB 440: HOME : PRINT "SALES FILE RECORDS": FOR I = 1 TO R: PRINT I;")"; LEFT$(N$(I,1),6);: POKE 36,10: PRINT N$(I,9);"/";N$(I,10);"/";N$(I,11): NEXT I: GOTO 1550
  173. 1520 J = 1:K = 2: GOSUB 440
  174. 1530  FOR I = 1 TO R: IF N$(I,1) = NA$  AND N$(I,2) = PS$  THEN MR = I: REM  HIT
  175. 1540  NEXT I: GOTO 1560
  176. 1550  VTAB 22: INPUT "ENTER RECORD # TO EDIT ";MR$:MR =  VAL(MR$): IF MR <1  OR MR >R  THEN 1550
  177. 1560 SI$ = "1":I = MR:K = 14: IF FI$ = "SALES"  THEN K = 15
  178. 1565  GOSUB 440:SI$ = "": HOME : INVERSE : PRINT "EDIT/SELL RECORD ";N$(I,1);" #";N$(I,2): NORMAL : GOSUB 400
  179. 1570  VTAB 6: FOR F = 1 TO K: PRINT LL$(F): NEXT F
  180. 1575  IF S$ = "S"  THEN  VTAB 21: PRINT "SELL COMM"
  181. 1580  VTAB 6: FOR F = 1 TO K: HTAB 13: PRINT N$(I,F): NEXT F
  182. 1590  IF S$ = "E"  THEN 1630: REM  EDIT
  183. 1600  VTAB 13: FOR F = 8 TO 12: HTAB 13: INPUT "";F$: IF F$ < >""  THEN N$(I,F) = F$
  184. 1610  VTAB F +5: HTAB 13: PRINT N$(I,F): HTAB 13: NEXT F
  185. 1615  IF S$ = "S"  THEN  VTAB 21: HTAB 13: INPUT "";SA$: REM  SELL COMM
  186. 1620  GOTO 1650
  187. 1630  VTAB 6: FOR F = 1 TO K: HTAB 13: INPUT "";F$: IF F$ < >""  THEN N$(I,F) = F$
  188. 1640  VTAB F +5: HTAB 13: PRINT N$(I,F): HTAB 13: NEXT F
  189. 1650  VTAB 22: HTAB 3: INPUT "RETURN=ACCEPT ...'R'=RE-ENTER";XX$: IF XX$ < >""  THEN 1560
  190. 1660  IF S$ = "S"  THEN S1 =  VAL(N$(I,3)):S2 =  VAL(N$(I,12)):ST =  INT(S1 -S2):N$(I,3) =  STR$(ST):PC = S2/S1:PC =  INT(PC *100 +.5)/100:BC =  VAL(N$(I,13))
  191. 1665  IF S$ = "S"  THEN NB = BC -(BC *PC):NB =  INT(NB *100 +.05)/100:N$(I,13) =  STR$(NB):SB = BC -NB
  192. 1670  FOR F = 1 TO K:A$(F) = N$(I,F): NEXT F:R = I: GOSUB 800: IF S$ = "S"  THEN SK$ = "1":FI$ = "SALES": GOSUB 440:SK$ = "":S$ = "":R = R +1:K = 15:A$(13) =  STR$(SB):A$(15) = SA$: GOSUB 800:S$ = "S": REM UPDATEINVEST&SALESFILES
  193. 1680  RETURN 
  194. 1690  REM  < UPDATE MARKET PRICES >
  195. 1700  HOME : VTAB 6: INVERSE : PRINT "ENTER CURRENT HI/LOW/CLOSE MARKET": NORMAL 
  196. 1710  GOSUB 420: INPUT "ENTER:";NA$: IF NA$ = ""  THEN  RETURN 
  197. 1720  IF NA$ = "C"  THEN  GOSUB 330: GOTO 1700
  198. 1730 N1 = 1: GOSUB 560:N1 = 0
  199. 1740  VTAB 11: PRINT "NAME      : ";NA$: PRINT "HIGH      : ": PRINT "LOW       : ": PRINT "CLOSE     : ": PRINT "VOL (100S): ": PRINT "MO (1-12) : ": PRINT "DAY (1-31): ": PRINT "YEAR      : "
  200. 1750  VTAB 12: FOR F = 1 TO 7: HTAB 13: INPUT "";U$(F): NEXT F
  201. 1760  IF  VAL(U$(5)) = 0  OR  VAL(U$(5)) >12  OR  VAL(U$(6)) = 0  OR  VAL(U$(6)) >31  THEN  VTAB 19: PRINT "INVALID DATE...PLEASE REENTER RECORD":ER$ = "R"
  202. 1770  VTAB 20: INPUT "RETURN= ACCEPT...  'R'= RE-ENTER ";XX$: IF ER$ < >""  THEN ER$ = "":XX$ = "R"
  203. 1780  IF XX$ < >""  THEN  VTAB 19: CALL  -868: GOTO 1740
  204. 1790 U$(4) = U$(4) +"00": REM  CONVERT TO 1000'S
  205. 1800 RE = R +1:SI$ = "1": GOSUB 710:SI$ = ""
  206. 1810  RETURN 
  207. 1820  REM  < SUMMARY PORTFOLIO >
  208. 1830  HOME : VTAB 10: HTAB 8: INVERSE : PRINT "PORTFOLIO SUMMARY": NORMAL 
  209. 1840  VTAB 13: HTAB 8: PRINT "PRINT ON:": PRINT : HTAB 8: PRINT "S)CREEN": HTAB 8: PRINT "P)RINTER": PRINT : HTAB 8: PRINT "<RETURN> FOR MENU": PRINT : HTAB 8: INPUT "ENTER SELECTION ";XX$: IF XX$ = ""  THEN  RETURN 
  210. 1850  IF XX$ < >"P"  AND XX$ < >"S"  THEN 1840
  211. 1860  IF XX$ = "P"  THEN  PRINT D$;"PR#1": PRINT "PORTFOLIO SUMMARY"
  212. 1870  HOME : PRINT "** PORTFOLIO SUMMARY **": PRINT "NAME";: POKE 36,8: PRINT "B/S";: POKE 36,12: PRINT "LOT#";: POKE 36,17: PRINT "SHRS";: POKE 36,23: PRINT "PRICE";: POKE 36,31: PRINT "BUY DATE"
  213. 1880  GOSUB 160
  214. 1890  IF XX$ = "P"  THEN  PRINT D$;"PR#0"
  215. 1900 J = 1:K = 8:FI$ = "INVEST": GOSUB 440: REM  READ RECS
  216. 1910  IF XX$ = "S"  THEN 1930
  217. 1920  PRINT D$;"PR#1"
  218. 1930  FOR I = 1 TO R:BS$ = "B": IF  VAL(N$(I,8)) >0  THEN BS$ = "S"
  219. 1935  IF N$(I,1) = ""  THEN  VTAB 22: PRINT "NO RECORDS IN PORTFOLIO":I = R +1: GOTO 1960
  220. 1940  PRINT  LEFT$(N$(I,1),6);: POKE 36,9: PRINT BS$;: POKE 36,14: PRINT N$(I,2);: POKE 36,21 - LEN(N$(I,3)): PRINT N$(I,3);:Z =  VAL(N$(I,4)): GOSUB 70: POKE 36,29 - LEN(X$): PRINT X$;
  221. 1950 X$ = N$(I,5) +"/" +N$(I,6) +"/" +N$(I,7): POKE 36,39 - LEN(X$): PRINT X$
  222. 1960  NEXT I
  223. 1970  IF XX$ < >"P"  THEN 1990
  224. 1980  PRINT D$;"PR#0"
  225. 1990  GOTO 320
  226. 2000  REM  << GRAPHICS >>
  227. 2010  HOME : VTAB 6: INVERSE : PRINT "** NIBBLE INVESTOR GRAPHICS **": NORMAL 
  228. 2020  PRINT : PRINT "THIS OPTION DISPLAYS:": HTAB 10: PRINT "* HI/LOW/CLOSE PRICE": HTAB 10: PRINT "* MOVING AVERAGE OF PRICE": HTAB 10: PRINT "* SALES VOLUME"
  229. 2030  HTAB 10: PRINT "* AVERAGE SALES VOLUME": HTAB 10: PRINT "* HI PRICE FOR THE PERIOD": HTAB 10: PRINT "* LO PRICE FOR THE PERIOD": HTAB 10: PRINT "* HI VOLUME FOR THE PERIOD": HTAB 10: PRINT "* LO VOLUME FOR THE PERIOD"
  230. 2040  GOSUB 420: INPUT "ENTER:";NA$: IF NA$ = ""  THEN  RETURN 
  231. 2050  IF NA$ = "C"  THEN  GOSUB 330: GOTO 2010
  232. 2060  HOME : INVERSE : PRINT "READING FILE ";NA$: NORMAL 
  233. 2070 N1 = 1: GOSUB 560:N1 = 0
  234. 2075  IF R = 0  THEN  PRINT "NO MARKET PRICES HAVE BEEN ENTERED": PRINT "TO GRAPH YET. USE U)PDATE MARKET PRICES": PRINT "OPTION TO ENTER DATA": PRINT : INPUT "PRESS RETURN FOR MAIN MENU ";XX$: RETURN 
  235. 2080 J = 1: IF R >51  THEN J = R -51: REM  MOST RECENT 52 RECS
  236. 2090 N = 0
  237. 2100 K = 7: GOSUB 560: REM  READ
  238. 2110 HP =  VAL(H$(1,1)):LP =  VAL(H$(1,2)):HV =  VAL(H$(1,4)):LV = HV
  239. 2120  REM  < FIND HI/LO PRICE AND HI VOLUME >
  240. 2130  FOR X = 1 TO N:HI =  VAL(H$(X,1)):HL =  VAL(H$(X,2)):VO =  VAL(H$(X,4))
  241. 2140  IF HI >HP  THEN HP = HI: REM  HIGHEST PRICE
  242. 2150  IF HL <LP  THEN LP = HL: REM  LOWEST PRICE
  243. 2160  IF VO <LV  THEN LV = VO: REM  LOWEST VOL
  244. 2170  IF VO >HV  THEN HV = VO: REM  HIGHEST VOL
  245. 2180 LO =  INT(((LP/10) -1) *10): IF LO <1  THEN LO = 0: REM  LOW INDEX SCALING  11->0 21->10 31->20 ETC.
  246. 2190 LX =  INT(LP):LO$ =  STR$(LX): IF  LEN(LO$) = 1  THEN LI = 0:LG = 0
  247. 2200  IF  LEN(LO$) = 2  THEN LI =  VAL( LEFT$(LO$,1)): REM  LOW 10-99
  248. 2210  IF  LEN(LO$) = 3  THEN LI =  VAL( LEFT$(LO$,2)): REM  LOW PRICE 100-199
  249. 2220  NEXT X
  250. 2221 P = 1:HX =  INT(HP/10):LX =  INT(LP/10):IX = HX -LX +1
  251. 2225  IF IX > = 5  THEN A2 = 2:IX = 6: GOTO 2227
  252. 2226 A2 =  INT(12/IX): REM  THIS ESTABLISHES SCALING FACTOR
  253. 2227 A1 = A2 *10:A3 = IX
  254. 2228  IF A2 = 2  THEN P = A1
  255. 2230 PV = 2: REM  TWO DOTS/POINT
  256. 2240  HGR : HCOLOR= 3: ROT= 1: SCALE= 1: HPLOT 18,1 TO 18,159:P = 0: FOR F = 1 TO 120  STEP 20: HPLOT 19,F TO 20,F: NEXT F: FOR F = 1 TO 120  STEP 2: HPLOT 19,F: NEXT F
  257. 2250 PP = 0: FOR F = LG +A3 TO LG  STEP  -1: IF F >0  THEN  DRAW F AT 5,P -PP:PP = 4:P = P +A1
  258. 2255  NEXT F: HPLOT 15,120 TO 279,120:G = A2
  259. 2260  DRAW 26 AT 195,105: DRAW 27 AT 240,106
  260. 2270  FOR F = 19 TO 172  STEP 15: HPLOT F,119: NEXT F
  261. 2280  DRAW 21 AT 49,113: DRAW 22 AT 79,113: DRAW 23 AT 109,113: DRAW 24 AT 139,113: DRAW 25 AT 169,113: REM  10-50
  262. 2290 MT = 0
  263. 2300  HPLOT 40,125 TO 279,125
  264. 2310  DRAW 32 AT 22,122: DRAW 28 AT 30,122: REM  PR S
  265. 2320  FOR F = 120 TO 150  STEP 10: HPLOT 19,F: NEXT F: HPLOT 1,159 TO 275,159
  266. 2330  DRAW 28 AT 5,128: REM  S
  267. 2340  DRAW 29 AT 5,134: REM  A
  268. 2350  DRAW 30 AT 5,140: REM  L
  269. 2360  DRAW 31 AT 5,146: REM  E
  270. 2370  DRAW 28 AT 5,152: REM  S
  271. 2380 Q = 22:VI =  INT(HV/30): IF VI <1  THEN VI = 1
  272. 2390  FOR X = 1 TO N
  273. 2400 OA = NA:MT = MT + VAL(H$(X,3)):NA =  INT(MT/X):AP = MT/X:AP =  INT(AP *100 +.05)/100: REM OLD/NEWMOVINGAVERAGE
  274. 2410 VA = VA + VAL(H$(X,4)): REM  CUM' VOLUME
  275. 2420  IF X <13  THEN 2440: REM  SKIP 13 WEEK M.A. FOR LESS THAN 13 WEEKS
  276. 2430 OB = NB:NB = 0:MU = 0:AQ = 0: FOR H = X -12 TO X:MU = MU + VAL(H$(H,3)): NEXT H:NB =  INT(MU/13):AQ = MU/13:AQ =  INT(AQ *100 +.05)/100
  277. 2440 A =  INT(121 -(G *( VAL(H$(X,1)) -LI))): REM  HIGH
  278. 2450 B =  INT(121 -(G *( VAL(H$(X,2)) -LI))): REM  LO
  279. 2460 C =  INT(121 -(G *( VAL(H$(X,3)) -LI))): REM  CLOSE
  280. 2470 V =  INT(159 -( VAL(H$(X,4))/VI)): REM  VOLUME
  281. 2480 NA =  INT(121 -(G *(AP -LI))): REM  MOVING AVERAGE
  282. 2490 NB =  INT(121 -(G *(AQ -LI))): REM  13 WEEK MOVING AVG
  283. 2500  IF X >2  AND NA >2  THEN  HPLOT Q -3,OA TO Q,NA: REM  MVG AVG
  284. 2510  HCOLOR= 1: IF X < = 13  THEN 2560
  285. 2520  IF NB >5  THEN  HPLOT Q -3,OB TO Q,NB: REM  13WK MVG AVG
  286. 2530  HCOLOR= 3
  287. 2540 PS =  INT((NB/NA) *100): IF PS >100  THEN PS =  INT((PS -100)/10) +1: HPLOT Q,125 TO Q,125 +PS: GOTO 2560: REM  NEGATIVE PRICE MOMENTUM
  288. 2550  IF PS < = 100  THEN PS =  INT((100 -PS)/10) +1: HPLOT Q,125 TO Q,125 -PS: REM  POSITIVE PRICE MOMENTUM
  289. 2560  HCOLOR= 3
  290. 2570  IF A <0  OR B <0  THEN 2590
  291. 2580  HPLOT Q,A TO Q,B: HPLOT Q +1,C
  292. 2590  HPLOT Q,V TO Q,159
  293. 2600 Q = Q +3: NEXT X
  294. 2610 VA =  INT(VA/N): REM  AVG VOL.
  295. 2620 V =  INT(159 -(VA/VI)): HPLOT 22,V TO Q -3,V: DRAW 36 AT Q +5,V: REM  AVG VOL
  296. 2630  IF NA >3  THEN  DRAW 34 AT Q +5,NA -3: DRAW 33 AT Q +13,NA -3: REM  MVG AVG
  297. 2640 X = NB -NA: IF X > -5  AND X < = 0  THEN NB = NB -6
  298. 2650  IF X >0  AND X <5  THEN NB = NB +6
  299. 2660  IF NB >3  AND N >13  THEN  DRAW 35 AT Q +5,NB -3: DRAW 33 AT Q +13,NB -3
  300. 2670  VTAB 21: PRINT "NAME: "; LEFT$(NA$,10);: POKE 36,18: PRINT "PRC-H/L: ";HP;"/";LP
  301. 2680  VTAB 22: PRINT H$(1,5);"/";H$(1,6);"/";H$(1,7);"-";H$(N,5);"/";H$(N,6);"/";H$(N,7);
  302. 2690  POKE 36,18: PRINT "VOL-H/L: "; INT(HV/1000);"K/"; INT(LV/1000);"K"
  303. 2700  VTAB 23: PRINT "AVG PRICE:";AP;: POKE 36,18: PRINT "AVG VOL: "; INT(VA/1000);"K"
  304. 2710  GOTO 320
  305. 2720  REM  < REPORT OPTIONS >
  306. 2730  HOME : INVERSE : PRINT "** INVESTOR REPORT OPTIONS **": NORMAL 
  307. 2740  PRINT : PRINT "1= CURRENT MARKET GAIN/LOSS (S/P)": PRINT "2= YIELD ANALYSIS           (S/P)": PRINT "3= GAIN/LOSS ON SALES       (S/P)": PRINT "4= MASTER MARKET GAIN/LOSS  (PTR)": PRINT "5= MASTER SALES  GAIN/LOSS  (PTR)"
  308. 2750  PRINT : PRINT "OPTIONS 1-3 ALLOW SCREEN OR PRINTER.": PRINT "OPTIONS 4-5 ALLOW PRINTER ONLY."
  309. 2760  VTAB 12: PRINT "REPORT OPTION  (1-5)": INPUT "OR <RETURN> FOR MENU: ";RP$:RP =  VAL(RP$): IF RP = 0  THEN  RETURN 
  310. 2770  IF RP <1  OR RP >5  THEN 2760
  311. 2780  IF RP = 4  OR RP = 5  THEN 2800
  312. 2790  VTAB 15: INPUT "S)CREEN OR P)RINTER : ";SP$: IF SP$ < >"S"  AND SP$ < >"P"  THEN 2790
  313. 2800  VTAB 17: PRINT "INDIV' INVESTMT NAME": INPUT "OR <RETURN> FOR ALL : ";NI$:FI$ = "INVEST": IF RP = 3  OR RP = 5  THEN FI$ = "SALES"
  314. 2810  IF NI$ = ""  THEN 2890: REM  SKIP NAME SELECT
  315. 2820 SW = 1: GOSUB 1000:SW = 0: REM  GET NAMES
  316. 2825 K = 14: IF FI$ = "SALES"  THEN K = 15
  317. 2830 A = 0: FOR I = 1 TO R: IF NI$ = E$(I,1)  THEN A = A +1:SI$ = "1": GOSUB 440:SI$ = "": FOR F = 1 TO K:N$(A,F) = N$(I,F): NEXT F: REM  READ RECORD
  318. 2840  NEXT I
  319. 2850  IF A = 0  THEN  PRINT : PRINT NI$;" IS NOT ON FILE": GOTO 320
  320. 2860  GOTO 2930
  321. 2870  PRINT D$;"PR#1"
  322. 2880  PRINT  CHR$(9);"80N"
  323. 2890  REM  READ ALL RECORDS
  324. 2900 J = 1:K = 14:FI$ = "INVEST": IF RP = 3  OR RP = 5  THEN FI$ = "SALES":K = 15
  325. 2910  GOSUB 440:A = R
  326. 2915  IF FI$ = "SALES"  AND R = 0  THEN  PRINT : PRINT "NO SALES HAVE YET BEEN MADE": GOTO 320
  327. 2920  FOR I = 1 TO R: FOR F = 1 TO 2:E$(I,F) = N$(I,F): NEXT F,I
  328. 2930  REM  < READ CURR PRICES >
  329. 2940  FOR I = 1 TO A: IF RP = 3  OR RP = 5  THEN N$(I,3) = N$(I,12): REM  SELL QTY FOR REPORTING
  330. 2950 NA$ = N$(I,1):K = 7:QI$ = "1": GOSUB 560:QI$ = ""
  331. 2960  NEXT I
  332. 2970  IF RP <4  THEN 3020
  333. 2980  PRINT D$;"PR#1"
  334. 2990  PRINT  CHR$(9);"80N"
  335. 3000  IF RP = 4  THEN 3700
  336. 3010  IF RP = 5  THEN 3830
  337. 3020  REM  < SCREEN REPORTS >
  338. 3030  HOME : IF SP$ < >"P"  THEN 3050
  339. 3040  PRINT D$;"PR#1": PRINT 
  340. 3050  PRINT RH$(RP)
  341. 3060  PRINT "NAME";: POKE 36,6: PRINT "#";: POKE 36,10: PRINT "QTY";
  342. 3070  ON RP GOTO 3080,3250,3470
  343. 3080  REM  < GAIN/LOSS REPORT >
  344. 3090  POKE 36,15: PRINT "$COST";: POKE 36,23: PRINT "$MKT";: POKE 36,29: PRINT "GN/LS";: POKE 36,35: PRINT "%G/L"
  345. 3100  GOSUB 160
  346. 3110  FOR I = 1 TO A: IF  VAL(N$(I,3)) = 0  THEN 3180: REM  SKIP 0 HELD
  347. 3120  GOSUB 140
  348. 3130  GOSUB 90:X$ = XC$: POKE 36,20 - LEN(X$): PRINT X$;:TC = TC +CST: REM  COST
  349. 3140 X$ = XV$: POKE 36,27 - LEN(X$): PRINT X$;:TV = TV +VL: REM  MARKET VALUE
  350. 3150 X$ = XG$: POKE 36,33 - LEN(X$): PRINT X$;:TG = TG +GL: REM  GAIN/LOSS
  351. 3160 X$ = XP$: POKE 36,39 - LEN(X$): PRINT X$
  352. 3170  IF I = 20  AND SP$ < >"P"  THEN  INPUT "PRESS RETURN TO CONTINUE ";XX$
  353. 3180  NEXT I
  354. 3190  GOSUB 160
  355. 3200  GOSUB 270
  356. 3205  IF TC = 0  THEN X$ = "0": GOTO 3220
  357. 3210 X$ =  STR$( INT((TG/TC) *100))
  358. 3220  GOSUB 310
  359. 3230  IF SP$ = "P"  THEN  PRINT D$;"PR#0"
  360. 3240  GOTO 320
  361. 3250  REM  < YIELD REPORT >
  362. 3260  POKE 36,15: PRINT "$COST";: POKE 36,22: PRINT "DV/SH";: POKE 36,29: PRINT "$DIV'";: POKE 36,35: PRINT "%YLD"
  363. 3270  FOR F = 1 TO 39: PRINT "=";: NEXT F: PRINT 
  364. 3280  FOR I = 1 TO A: IF  VAL(N$(I,3)) = 0  THEN 3370
  365. 3290  GOSUB 140: REM  PRINT COMMON INFO
  366. 3300  GOSUB 90:X$ = XC$: POKE 36,20 - LEN(X$): PRINT X$;:TC = TC +CST: REM  COST
  367. 3310 X$ = N$(I,14): POKE 36,26 - LEN(X$): PRINT X$;: REM  DIV
  368. 3320 DV =  INT( VAL(X$) * VAL(N$(I,3))):X$ =  STR$(DV): POKE 36,32 - LEN(X$): PRINT X$;:TD = TD +DV: REM  DIVIDED AMT
  369. 3325  IF CST = 0  THEN X$ = "0": GOTO 3340
  370. 3330 YL =  INT(((DV/CST) +.0005) *1000):X$ =  STR$(YL)
  371. 3340  IF  LEN(X$) = 1  THEN X$ = "." +X$: GOTO 3360
  372. 3350 X$ =  LEFT$(X$, LEN(X$) -1) +"." + RIGHT$(X$,1): REM  DECIMAL IN STRING
  373. 3360  GOSUB 310
  374. 3370  NEXT I
  375. 3380  GOSUB 160
  376. 3390 X$ =  STR$(TC): POKE 36,20 - LEN(X$): PRINT X$;
  377. 3400 X$ =  STR$(TD): POKE 36,32 - LEN(X$): PRINT X$;
  378. 3405  IF TC = 0  THEN X$ = "0": GOTO 3420
  379. 3410 X =  INT(((TD/TC) +.0005) *1000):X$ =  STR$(X)
  380. 3420  IF  LEN(X$) = 1  THEN X$ = "." +X$: GOTO 3440
  381. 3430 X$ =  LEFT$(X$, LEN(X$) -1) +"." + RIGHT$(X$,1): REM  DECIMAL IN STRING
  382. 3440  POKE 36,39 - LEN(X$): PRINT X$
  383. 3450  IF SP$ = "P"  THEN  PRINT D$;"PR#0"
  384. 3460  GOTO 320
  385. 3470  REM  < PROFIT ON SALES >
  386. 3480  POKE 36,15: PRINT "$COST";: POKE 36,22: PRINT "$SALE";: POKE 36,29: PRINT "GN/LS";: POKE 36,35: PRINT "%G/L"
  387. 3490  GOSUB 160
  388. 3500  FOR I = 1 TO A
  389. 3510  IF  VAL(N$(I,12)) = 0  THEN 3610
  390. 3520  GOSUB 140: REM  PRINT COMMON INFO
  391. 3530  GOSUB 90:X$ = XC$: POKE 36,20 - LEN(X$): PRINT X$;:TC = TC +CST: REM  COST
  392. 3540 X$ = N$(I,8)
  393. 3550 SA =  VAL(X$) * VAL(N$(I,3)):SA =  INT(SA - VAL(N$(I,15))):X$ =  STR$(SA): POKE 36,27 - LEN(X$): PRINT X$;:TV = TV +SA: REM  SALES AMT
  394. 3560 GN =  INT(SA -CST):X$ =  STR$(GN): POKE 36,33 - LEN(X$): PRINT X$;:TG = TG +GN: REM  PRINT GAIN ON SALE
  395. 3565  IF CST = 0  THEN X$ = "0": GOTO 3580
  396. 3570 GP =  INT(((GN/CST) +.0005) *1000):X$ =  STR$(GP)
  397. 3580  IF  LEN(X$) = 1  THEN X$ = "." +X$: GOTO 3600
  398. 3590 X$ =  LEFT$(X$, LEN(X$) -1) +"." + RIGHT$(X$,1): REM  DECIMAL IN STRING
  399. 3600  POKE 36,39 - LEN(X$): PRINT X$
  400. 3610  NEXT I
  401. 3620  GOSUB 160
  402. 3630  GOSUB 270
  403. 3635  IF TC = 0  THEN X$ = "0": GOTO 3650
  404. 3640 GP =  INT(((TG/TC) +.0005) *1000):X$ =  STR$(GP)
  405. 3650  IF  LEN(X$) = 1  THEN X$ = "." +X$: GOTO 3670
  406. 3660 X$ =  LEFT$(X$, LEN(X$) -1) +"." + RIGHT$(X$,1): REM  DECIMAL IN STRING
  407. 3670  GOSUB 310
  408. 3680  IF SP$ = "P"  THEN  PRINT D$;"PR#0"
  409. 3690  GOTO 320
  410. 3700  REM  < MASTER MARKET VALUE >
  411. 3710  PRINT "** MASTER ";RH$(1)
  412. 3715  PRINT "(COMMISSIONS ADD TO COST)"
  413. 3720  GOSUB 340: POKE 36,34: PRINT "CUR PR";: POKE 36,42: PRINT "CUR VALUE";: POKE 36,53: PRINT "DLT";: POKE 36,57: PRINT "B/S";
  414. 3730  POKE 36,61: PRINT "GAIN/LOSS";: POKE 36,71: PRINT "S/L";: POKE 36,75: PRINT "% G/L"
  415. 3740  GOSUB 170
  416. 3750  FOR I = 1 TO A: IF  VAL(N$(I,3)) = 0  THEN 3825
  417. 3760  GOSUB 180:TC = TC +CS: REM  PRINT COMMON DATA
  418. 3770 Z =  VAL(CP$(I,3)): GOSUB 70: POKE 36,40 - LEN(X$): PRINT X$;
  419. 3780 Z =  VAL(CP$(I,3)) * VAL(N$(I,3)):CV = Z: GOSUB 70: POKE 36,51 - LEN(X$): PRINT X$;:TV = TV + VAL(X$)
  420. 3790  GOSUB 200:SL$ = "L":DL =  INT(AA -(CD -BD)): IF DL >0  THEN X$ =  STR$(DL): POKE 36,56 - LEN(X$): PRINT X$;:SL$ = "S"
  421. 3800 BS$ = "B": IF  VAL(N$(I,8)) >0  THEN BS$ = "S"
  422. 3810  POKE 36,58: PRINT BS$;
  423. 3820 GN = CV -CS: GOSUB 350
  424. 3822  PRINT " COMM";:Z =  VAL(N$(I,13)):GN = GN -Z:TC = TC +Z: GOSUB 70:X$ = "+" +X$: POKE 36,33 - LEN(X$): PRINT X$;:SW = 1: GOSUB 350:SW = 0: PRINT " "
  425. 3825  NEXT I: GOTO 3970
  426. 3830  REM  YIELD REPORT
  427. 3840  PRINT "** MASTER ";RH$(3)
  428. 3845  PRINT "(COMMISSIONS ADD TO COST AND SUBTRACT FROM SELL VALUE)"
  429. 3850  GOSUB 340: POKE 36,34: PRINT "SEL PR";: POKE 36,42: PRINT "SEL VALUE";: POKE 36,52: PRINT "SEL DATE";
  430. 3860  POKE 36,61: PRINT "GAIN/LOSS";: POKE 36,71: PRINT "S/L";: POKE 36,75: PRINT "% G/L"
  431. 3870  GOSUB 170
  432. 3880  FOR I = 1 TO A: IF  VAL(N$(I,12)) = 0  THEN 3960
  433. 3890  IF  VAL(N$(I,12)) = 0  THEN 3960
  434. 3900  GOSUB 180:TC = TC +CS
  435. 3910 Z =  VAL(N$(I,8)): GOSUB 70: POKE 36,40 - LEN(X$): PRINT X$;
  436. 3920 Z =  VAL(N$(I,3)) * VAL(N$(I,8)):SV = Z: GOSUB 70: POKE 36,51 - LEN(X$): PRINT X$;:TV = TV +SV
  437. 3930  GOSUB 200:SL$ = "L":DL =  INT(AA -(SD -BD)): IF DL >0  THEN SL$ = "S"
  438. 3940  POKE 36,58 -( LEN(N$(I,9)) + LEN(N$(I,10)) + LEN(N$(I,11))): PRINT N$(I,9);"/";N$(I,10);"/";N$(I,11);
  439. 3950 GN = SV -CS: GOSUB 350: PRINT " COMM";:Z =  VAL(N$(I,13)):GN = GN -Z:TC = TC +Z
  440. 3955  GOSUB 70:X$ = "+" +X$: POKE 36,33 - LEN(X$): PRINT X$;:Z =  VAL(N$(I,15)):GN = GN -Z:TV = TV -Z: GOSUB 70:X$ = "-" +X$: POKE 36,51 - LEN(X$): PRINT X$;:SW = 1: GOSUB 350:SW = 0: PRINT " "
  441. 3960  NEXT I
  442. 3970  REM  TOTALS
  443. 3980  GOSUB 170:Z = TC: GOSUB 70: POKE 36,33 - LEN(X$): PRINT X$;:Z = TV: GOSUB 70: POKE 36,51 - LEN(X$): PRINT X$;:Z = TG: GOSUB 70: POKE 36,70 - LEN(X$): PRINT X$;
  444. 3985  IF TC = 0  THEN  PRINT :X$ = "0": GOTO 4000
  445. 3990 PC = (TG/TC) *100:Z = PC: GOSUB 70: POKE 36,80 - LEN(X$): PRINT X$
  446. 4000  PRINT : PRINT "SHORT TERM GAIN/LOSS: ";:Z = SH: GOSUB 70: POKE 36,33 - LEN(X$): PRINT X$
  447. 4010  PRINT "LONG  TERM GAIN/LOSS: ";:Z = LG: GOSUB 70: POKE 36,33 - LEN(X$): PRINT X$
  448. 4020  PRINT  CHR$(9);"40N"
  449. 4030  PRINT D$;"PR#0"
  450. 4040  GOTO 320
  451. 4050  REM  << MAIN MENU >>
  452. 4060  CLEAR 
  453. 4070  TEXT 
  454. 4080 D$ =  CHR$(4)
  455. 4090  REM  PRINT D$;"NOMONI,O,C"
  456. 4100  DIM A$(15),LL$(15)
  457. 4110  DIM RH$(4)
  458. 4120  FOR F = 1 TO 15: READ LL$(F): NEXT F
  459. 4130  FOR F = 1 TO 7: READ LD$(F): NEXT F
  460. 4140  FOR F = 1 TO 3: READ RH$(F): NEXT 
  461. 4150  ONERR  GOTO 4350
  462. 4160  HOME : VTAB 4: HTAB 8: INVERSE : PRINT "** THE NIBBLE INVESTOR **": NORMAL : PRINT : HTAB 8: PRINT "**    BY ALEX LAIRD    **": VTAB 21: HTAB 8: PRINT "**  COPYRIGHT (C) 1983 **": HTAB 8: PRINT "**  BY MICRO-SPARC INC **": PRINT 
  463. 4170  VTAB 9: HTAB 9: PRINT "A)DD A NEW INVESTMENT": HTAB 9: PRINT "U)PDATE MARKET PRICES": HTAB 9: PRINT "E)DIT AN INVESTMENT": HTAB 9: PRINT "P)ORTFOLIO INDEX"
  464. 4180  HTAB 9: PRINT "S)ELL AN INVESTMENT": HTAB 9: PRINT "D)ELETE A RECORD": HTAB 9: PRINT "G)RAPHIC CHARTING": HTAB 9: PRINT "R)EPORT OPTIONS": HTAB 9: PRINT "Q)UIT"
  465. 4190  PRINT : HTAB 9: INVERSE : INPUT "ENTER SELECTION ";S$: NORMAL 
  466. 4200  IF S$ < >"D"  AND S$ < >"A"  AND S$ < >"S"  AND S$ < >"E"  AND S$ < >"U"  AND S$ < >"P"  AND S$ < >"G"  AND S$ < >"R"  AND S$ < >"Q"  THEN 4160
  467. 4210  IF S$ = "G"  THEN  DIM H$(53,7)
  468. 4220  IF S$ < >"G"  THEN  DIM N$(20,15),CP$(20,7),E$(20,2)
  469. 4230  IF S$ = "A"  THEN FI$ = "INVEST": GOSUB 1000: GOTO 4060
  470. 4240  IF S$ = "S"  THEN  GOSUB 1270: GOTO 4060
  471. 4250  IF S$ = "E"  THEN  GOSUB 1270: GOTO 4060
  472. 4260  IF S$ = "U"  THEN  GOSUB 1690: GOTO 4060
  473. 4270  IF S$ = "P"  THEN  GOSUB 1820: GOTO 4060
  474. 4280  IF S$ = "G"  THEN  GOSUB 2000: GOTO 4060
  475. 4290  IF S$ = "R"  THEN  GOSUB 2720: GOTO 4060
  476. 4300  IF S$ = "D"  THEN  GOSUB 4430: GOTO 4060
  477. 4310  IF S$ = "Q"  THEN  HOME : VTAB 10: HTAB 10: PRINT " END OF JOB": END 
  478. 4320  DATA  "NAME    ","PURCH SEQ.","NO SHARES","PURCH PRICE","PURCH MO","PURCH DAY","PURCH YR","SELL PRICE","SELL MO","SELL DAY","SELL YR","QTY SOLD","PURCH COMM","DIVIDEND","SELL COMM"
  479. 4330  DATA  "HIGH","LOW","CLOSE","VOL 100S","MONTH","DAY","YEAR"
  480. 4340  DATA  "** CURRENT MARKET GAIN/LOSS **","** YIELD ANALYSIS **","** GAIN/LOSS ON SALES **"
  481. 4350  POKE 216,0
  482. 4360  PRINT D$;"CLOSE"
  483. 4370  IF  PEEK(222) = 5  THEN  VTAB 21: PRINT "NO DATA FOR THAT FILE": GOTO 4410
  484. 4380  IF  PEEK(222) = 6  THEN  VTAB 21: PRINT "NO FILE BY THAT NAME.": GOTO 4410
  485. 4390  IF  PEEK(222) = 9  THEN  VTAB 21: PRINT "DISK FULL.. SET UP A NEW DISK": GOTO 4410
  486. 4400  VTAB 21: PRINT "ERROR #"; PEEK(222);" HAS OCCURRED IN LINE "; PEEK(218) + PEEK(219) *256;".": PRINT "CHECK PAGE 136 OF YOUR APPLESOFT": PRINT "MANUAL FOR ERROR CODE."
  487. 4410  VTAB 23: CALL  -868: INPUT "PRESS <RETURN> FOR MENU";XX$
  488. 4420  GOTO 4060
  489. 4430  REM  < DELETE INVESTOR RECORD >
  490. 4440 Q = 0: HOME : INVERSE : PRINT "DELETE RECORDS": NORMAL : VTAB 6: PRINT "DELETING A RECORD PURGES IT FROM THE": PRINT "FILE AND COMPRESSES THE REMAINDER OF": PRINT "THE FILE."
  491. 4450  PRINT : PRINT "USE THE SAME NAME USED FOR": PRINT "REFERRING TO THE INVESTMENT IN": PRINT "PREVIOUS RUNS.": PRINT : PRINT "DELETE FROM:": PRINT "  M)ASTER FILE": PRINT "  S)ALES FILE": INPUT "SELECTION:";DL$
  492. 4460  PRINT : PRINT "ENTER THE NAME OR <RETURN> FOR MENU": INPUT "NAME:";NA$: IF NA$ = ""  THEN  RETURN 
  493. 4470  PRINT : PRINT "ENTER THE LOT# OR <RETURN> TO DEFAULT": PRINT "TO LOT#1.": INPUT "LOT#:";XX$:LO$ = XX$: IF XX$ = ""  THEN LO$ = "1"
  494. 4480  HOME : VTAB 10: INVERSE : PRINT "PROCESSING": NORMAL :FI$ = "INVEST":J = 1:K = 14: IF DL$ = "S"  THEN FI$ = "SALES":K = 15
  495. 4490  GOSUB 440: REM  READ/WRITE FILE
  496. 4500  PRINT "RECORD ";NA$;" LOT#";LO$;" IS DELETED": GOTO 320