home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31a.dsk / JULY.1987 / PORTFOLIO.bas < prev   
BASIC Source File  |  2023-02-26  |  33KB  |  598 lines

  1. 10  REM  **********************
  2. 20  REM  *     PORTFOLIO      *
  3. 30  REM  *  BY KARL JOHNSON   *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  HOME : VTAB 8: HTAB 15: PRINT "PORTFOLIO": VTAB 10: HTAB 12: PRINT "BY KARL JOHNSON ": VTAB 12: HTAB 3: PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": VTAB 22: HTAB 8: PRINT "PRESS RETURN TO CONTINUE";: GET Z$: PRINT : VTAB 13: HTAB 1: CALL  -958
  9. 90  GOTO 5280
  10. 100  FOR I = 1024 TO 1104  STEP 40: FOR J = 0 TO 896  STEP 128: FOR K = 0 TO 39:A =  PEEK(J +K +I):A = A +(A <32) *192:A = A +(A <64) *128:A = A +(A <96) *64
  11. 110 A = A +(A <128) *64:A = A +(A <160) *64: PRINT  CHR$(A);: NEXT K: PRINT : NEXT J,I: RETURN 
  12. 120  REM  MENU SELECTION
  13. 130  REM 
  14. 140  HOME : PRINT "PORTFOLIO";: IF MA = 0  THEN  PRINT : GOTO 160
  15. 150  HTAB 30: INVERSE : PRINT "ESC";: NORMAL : PRINT " TO"
  16. 160  PRINT MS$(MB,0)" MENU";: IF MA = 0  THEN  PRINT : GOTO 180
  17. 170  HTAB 30: PRINT "PREV. MENU"
  18. 180  FOR X = 1 TO 39: PRINT "=";: NEXT : PRINT 
  19. 190  VTAB 22: INVERSE : PRINT "<-";: NORMAL : PRINT " ";: INVERSE : PRINT "->";: NORMAL : PRINT " TO SELECT";: HTAB 22: INVERSE : PRINT "RETURN";: NORMAL : PRINT " TO EXECUTE"
  20. 200  PRINT "UP OR DOWN ARROW KEYS MAY ALSO BE USED"
  21. 210  VTAB 7: FOR X = 2 TO MC: HTAB 8: PRINT MS$(MB,X): PRINT : NEXT 
  22. 220  VTAB 5: HTAB 8: INVERSE : PRINT MS$(MB,1): NORMAL :MD = 1: POKE  -16368,0
  23. 230 KS =  PEEK( -16384): IF KS <128  THEN  GOTO 230
  24. 240  POKE  -16368,0:KS = KS -128: IF KS = 13  THEN  RETURN 
  25. 250  IF KS = 27  AND MA = 1  THEN MD = 0: RETURN 
  26. 260  IF KS = 10  AND MD <MC  OR KS = 21  AND MD <MC  THEN TEMP = MD:MD = MD +1: GOTO 310
  27. 270  IF KS = 10  AND MD = MC  OR KS = 21  AND MD = MC  THEN TEMP = MD:MD = 1: GOTO 310
  28. 280  IF KS = 11  AND MD >1  OR KS = 8  AND MD >1  THEN TEMP = MD:MD = MD -1: GOTO 310
  29. 290  IF KS = 11  AND MD = 1  OR KS = 8  AND MD = 1  THEN TEMP = MD:MD = MC: GOTO 310
  30. 300  PRINT BL$: GOTO 230
  31. 310  VTAB TEMP *2 +3: CALL  -868: HTAB 8: PRINT MS$(MB,TEMP)
  32. 320  VTAB MD *2 +3: HTAB 8: INVERSE : PRINT MS$(MB,MD): NORMAL : GOTO 230
  33. 330  REM 
  34. 340  REM  SELECT A STOCK
  35. 350  REM 
  36. 360  VTAB 4: CALL  -958: IF NR =  >1  THEN  GOTO 380
  37. 370  PRINT "THERE ARE NO STOCK RECORDS ON FILE": VTAB 10: PRINT "PRESS <RTN> TO PROCEED...";: GET A$: POP : GOTO 1310
  38. 380  HTAB 26: INVERSE : PRINT "ENTER 0 TO ESC": NORMAL : PRINT "WHICH STOCK...?";: HTAB 26: INVERSE : PRINT "TO MASTER MENU": NORMAL : FOR X = 1 TO 39: PRINT "=";: NEXT : PRINT 
  39. 390 Y =  INT(MX/2 +.6): IF Y <10  THEN Y = 10
  40. 400  FOR X = 1 TO Y
  41. 410  IF LS(X) = 1  AND NR =  >X  THEN  PRINT X") " LEFT$(NM$(X), LEN(NM$(X)) -3);: INVERSE : PRINT  RIGHT$(NM$(X),3);: NORMAL : GOTO 440
  42. 420  IF NR =  >X  THEN  PRINT X") "NM$(X);: GOTO 440
  43. 430  GOTO 470
  44. 440  IF LS(X +Y) = 1  AND NR =  >X +Y  THEN  PRINT  TAB( 20)X +Y") " LEFT$(NM$(X +Y), LEN(NM$(X +Y)) -3);: INVERSE : PRINT  RIGHT$(NM$(X +Y),3): NORMAL : GOTO 470
  45. 450  IF NR =  >X +Y  THEN  PRINT  TAB( 20)X +Y") "NM$(X +Y): GOTO 470
  46. 460  PRINT 
  47. 470  NEXT X
  48. 480  VTAB 21: HTAB 1: CALL  -868: INPUT "ENTER NUMBER AND <RTN> ";TEMP$: IF  LEN(TEMP$) <1  THEN  PRINT BL$: GOTO 480
  49. 490  IF  ASC(TEMP$) = 48  THEN  POP : GOTO 1310
  50. 500 B =  INT( VAL(TEMP$) +.1): IF B =  >1  AND B < = NR  THEN  RETURN 
  51. 510  VTAB 23: PRINT "IMPROPER ENTRY -- TRY AGAIN";: PRINT BL$: VTAB 21: CALL  -868: GOTO 480
  52. 520  REM  VALIDITY CHECK
  53. 530  REM         WITH DECIMAL
  54. 540 VC = 0: FOR V = 1 TO  LEN(TEMP$)
  55. 550  IF  MID$ (TEMP$,V,1) <"."  OR  MID$ (TEMP$,V,1) >"9"  THEN VC = 1: RETURN 
  56. 560  NEXT V:TEMP =  VAL(TEMP$): IF TEMP <LO  OR TEMP >HI  THEN VC = 2
  57. 570  RETURN 
  58. 580  REM         --NO DECIMAL
  59. 590 VC = 0: FOR V = 1 TO  LEN(TEMP$)
  60. 600  IF  MID$ (TEMP$,V,1) <"0"  OR  MID$ (TEMP$,V,1) >"9"  THEN VC = 1: RETURN 
  61. 610  NEXT V:TEMP =  VAL(TEMP$): IF TEMP <LO  OR TEMP >HI  THEN VC = 2
  62. 620  RETURN 
  63. 630  VTAB 21: PRINT BL$: INVERSE : PRINT "ENTER NUMERIC DATA ONLY--SUCH AS 24.50": NORMAL : GOTO 660
  64. 640  VTAB 21: CALL  -958: PRINT BL$: INVERSE : PRINT "ENTER WHOLE NUMBERS ONLY": NORMAL : GOTO 660
  65. 650  VTAB 21: CALL  -958: PRINT BL$: INVERSE : PRINT "OUT OF RANGE--MUST BE FROM " INT(LO *100)/100" TO 999": NORMAL 
  66. 660  VTAB 23: PRINT "PLEASE RE-ENTER THE LAST ITEM": RETURN 
  67. 670  REM 
  68. 680  REM  INPUT DATE
  69. 690  REM 
  70. 700 VC = 0: IF  LEN(TEMP$) <4  THEN VC = 1: GOTO 740
  71. 710 MM$ =  LEFT$(TEMP$,2): IF  VAL(MM$) <1  OR  VAL(MM$) >12  THEN VC = 2: GOTO 740
  72. 720 YY$ =  RIGHT$(TEMP$,2): IF  VAL(YY$) <75  OR  VAL(YY$) >99  THEN VC = 2: GOTO 740
  73. 730  RETURN 
  74. 740  VTAB 21: PRINT BL$: PRINT "RE-ENTER DATE IN THIS FORMAT -- 06/85": IF VC = 2  THEN  PRINT "DATE MUST BE BETWEEN 01/75 AND 12/99"
  75. 750  RETURN 
  76. 760  REM 
  77. 770  REM  UPDATE PRICE TRACK
  78. 780  REM 
  79. 790  IF HL(B,10) <100  THEN HL(B,10) = 100
  80. 800 CP =  INT(CP(B)/10 +.5): IF CP <100  THEN  RETURN 
  81. 810  IF CP > INT(HL(B,10) *.96 +.5)  AND CP < INT(HL(B,10) *1.04 +.5)  THEN  GOTO 950
  82. 820  IF HL(B,0) >0  THEN  GOTO 890
  83. 830  IF CP >HL(B,10)  THEN  GOTO 860
  84. 840 HL(B,10) =  INT(HL(B,10) *.96 +.5): IF CP < =  INT(HL(B,10) *.96 +.5)  THEN  GOTO 840
  85. 850  GOTO 950
  86. 860  GOSUB 980
  87. 870 HL(B,10) =  INT(HL(B,10) *1.04 +.5): IF CP =  > INT(HL(B,10) *1.04 +.5)  THEN  GOTO 870
  88. 880 HL(B,0) = 1:HL(B,9) = HL(B,11):HL(B,11) = CP: RETURN 
  89. 890  IF CP <HL(B,10)  THEN  GOTO 920
  90. 900 HL(B,10) =  INT(HL(B,10) *1.04 +.5): IF CP =  > INT(HL(B,10) *1.04 +.5)  THEN  GOTO 900
  91. 910  GOTO 960
  92. 920  GOSUB 980
  93. 930 HL(B,10) =  INT(HL(B,10) *.96 +.5): IF CP < =  INT(HL(B,10) *.96 +.5)  THEN  GOTO 930
  94. 940 HL(B,0) = 0:HL(B,9) = HL(B,11):HL(B,11) = CP: RETURN 
  95. 950  IF HL(B,0) <1  AND CP <HL(B,11)  THEN HL(B,11) = CP: RETURN 
  96. 960  IF HL(B,0) >0  AND CP >HL(B,11)  THEN HL(B,11) = CP
  97. 970  RETURN 
  98. 980  FOR A = 1 TO 9:HL(B,A) = HL(B,A +1): NEXT : RETURN 
  99. 990  REM 
  100. 1000  REM  PRINT PRICE TRACK
  101. 1010  REM 
  102. 1020  IF HL(B,0) = 0  THEN  GOTO 1070
  103. 1030  VTAB 10: HTAB 1:TB = 4: FOR X = 2 TO 10  STEP 2: GOSUB 1110: NEXT X: PRINT 
  104. 1040  PRINT  TAB( 3)"/  >   /  >   /  >   /  >   /"
  105. 1050  PRINT  TAB( 2)"/    > /    > /    > /    > /"
  106. 1060 TB = 1: FOR X = 1 TO 9  STEP 2: GOSUB 1110: NEXT X: PRINT : RETURN 
  107. 1070  VTAB 10: HTAB 1:TB = 1: FOR X = 1 TO 9  STEP 2: GOSUB 1110: NEXT X: PRINT 
  108. 1080  PRINT  TAB( 2)">    / >    / >    / >    / >"
  109. 1090  PRINT  TAB( 3)">  /   >  /   >  /   >  /   >"
  110. 1100 TB = 4: FOR X = 2 TO 10  STEP 2: GOSUB 1110: NEXT X: PRINT : RETURN 
  111. 1110  IF HL(B,X) <1  THEN TB = TB +7: RETURN 
  112. 1120 PR = HL(B,X)/100: GOSUB 1180: IF PR =  >100  THEN PR$ =  MID$ (PR$,2,5): GOTO 1140
  113. 1130 PR$ =  RIGHT$(PR$,5)
  114. 1140  PRINT  TAB( TB)PR$;:TB = TB +7: RETURN 
  115. 1150  REM 
  116. 1160  REM  FORMAT PRICE DISPLAY
  117. 1170  REM 
  118. 1180  IF PR = 0  THEN PR$ = "   0.00"
  119. 1190 SN$ = " ": IF PR <0  THEN SN$ = "-":PR = PR *( -1)
  120. 1200 PS =  INT(PR):PT = PR -PS
  121. 1210 PT =  INT(PT *100 +.5)
  122. 1220  IF PT = 100  THEN PS = PS +1:PT$ = "00": GOTO 1250
  123. 1230  IF PT <10  THEN PT$ = "0" + STR$(PT): GOTO 1250
  124. 1240 PT$ =  STR$(PT)
  125. 1250 PS$ =  STR$(PS):PR$ = SN$ +PS$ +"." +PT$
  126. 1260  IF  LEN(PR$) <7  THEN PR$ = " " +PR$: GOTO 1260
  127. 1270  RETURN 
  128. 1280  REM 
  129. 1290  REM  PROGRAM MENUS
  130. 1300 EF = 2: ONERR  GOTO 5720
  131. 1310 MA = 0:MB = 1:MC = 4: GOSUB 140: REM  -- MASTER
  132. 1320 MB = MD +1:MA = 1: ON MD GOTO 1330,1520,1630,5010
  133. 1330 MC = 2: GOSUB 140: REM  -- TRANSACTIONS
  134. 1340  IF MD = 0  THEN  GOTO 1310
  135. 1350 BS = MD:MB = MD +4: ON MD GOTO 1360,1470
  136. 1360 MC = 2: GOSUB 140: REM  -- BUY STOCK
  137. 1370  IF MD = 0  THEN MB = 2: GOTO 1330
  138. 1380 LS(0) = 0: IF MD = 2  THEN LS(0) = 1
  139. 1390  IF MD = 2  AND NR <1  THEN  HOME : GOSUB 370
  140. 1400 MB = MD +6: ON MD GOTO 1410,1440
  141. 1410 MC = 2: GOSUB 140: REM  --NEW/MORE
  142. 1420  IF MD = 0  THEN MB = BS +4: ON BS GOTO 1360,1470
  143. 1430  GOTO 1690
  144. 1440 MC = 2: GOSUB 140: REM  --ALL/PORTION
  145. 1450  IF MD = 0  THEN MB = BS +4: ON BS GOTO 1360,1470
  146. 1460  GOTO 2470
  147. 1470 MC = 2: GOSUB 140: REM  --SELL STOCK
  148. 1480  IF MD = 0  THEN MB = 2: GOTO 1330
  149. 1490 LS(0) = 0: IF MD = 2  THEN LS(0) = 1
  150. 1500  IF MD = 1  AND NR <1  THEN  HOME : GOSUB 370
  151. 1510 MB =  ABS(MD -9): ON MD GOTO 1440,1410
  152. 1520  IF NR <1  THEN  HOME : GOSUB 370: REM  -- PRICE UPDATES
  153. 1530 MC = 4: GOSUB 140
  154. 1540  IF MD = 0  THEN  GOTO 1310
  155. 1550 MB = 10: IF MD = 4  THEN MB = 9
  156. 1560  ON MD GOTO 1570,3320,3670,1600
  157. 1570 MC = 2: GOSUB 140: REM  --CURRENT PRICES
  158. 1580  IF MD = 0  THEN MB = 3: GOTO 1520
  159. 1590  ON MD GOTO 3010,3040
  160. 1600 MC = 5: GOSUB 140: REM  --STOCK SPLIT
  161. 1610  IF MD = 0  THEN MB = 3: GOTO 1520
  162. 1620  GOTO 3810
  163. 1630 MC = 3: GOSUB 140: REM  --DISPLAY
  164. 1640  IF MD = 0  THEN  GOTO 1310
  165. 1650  ON MD GOTO 4130,4130,4060
  166. 1660  REM 
  167. 1670  REM  BUY A STOCK
  168. 1680  REM 
  169. 1690  HOME : HTAB 14: INVERSE : IF LS(0) = 0  THEN  PRINT "BOUGHT A STOCK": GOTO 1710
  170. 1700  PRINT "SOLD A STOCK SHORT"
  171. 1710  NORMAL : IF MD = 1  THEN  GOTO 1770
  172. 1720  GOSUB 360: VTAB 3: CALL  -958: PRINT NM$(B)
  173. 1730  VTAB 4: IF LS(0) = 0  AND LS(B) = 1  THEN  GOTO 2390
  174. 1740  IF LS(0) = 1  AND LS(B) = 0  THEN  GOTO 2400
  175. 1750  IF NP(B) >3  THEN  GOTO 2410
  176. 1760 NP(B) = NP(B) +1: GOTO 2270
  177. 1770  VTAB 4: IF NR = MX  THEN  GOTO 2420
  178. 1780 NR = NR +1:B = NR:NP(B) = 1:LS(B) = LS(0)
  179. 1790  VTAB 20: PRINT "ESC TO BEGIN AGAIN       <- TO BACK UP": FOR X = 1 TO 6: PRINT  CHR$(95);: NEXT : PRINT "INDICATES MAXIMUM LENGTH": REM  7 SPACES
  180. 1800  VTAB 4: PRINT "ENTER THE FOLLOWING DATA...":HT = 7:NL = 14: IF LS(0) = 1  THEN NL = 11
  181. 1810  VTAB 8:NM$(B) = "": PRINT "NAME: ";: FOR X = 1 TO 11: PRINT  CHR$(95);: NEXT : IF NL = 14  THEN  FOR X = 1 TO 3: PRINT  CHR$(95);: NEXT 
  182. 1820  VTAB 8: HTAB HT: POKE  -16368,0
  183. 1830 KS =  PEEK( -16384): ON KS <128 GOTO 1830:LN =  LEN(NM$(B))
  184. 1840 KS = KS -128: ON KS < >27 GOTO 1850: ON LN = 0 GOTO 1300: VTAB 8: HTAB 1: CALL  -868: GOTO 1800
  185. 1850  ON KS < >13 GOTO 1860: POKE  -16368,0: ON LN >0 GOTO 1920: PRINT BL$: GOTO 1820
  186. 1860  IF KS = 8  AND LN >1  THEN HT = HT -1:NM$(B) =  LEFT$(NM$(B),LN -1): HTAB HT: PRINT  CHR$(95): GOTO 1820
  187. 1870  IF KS = 8  AND LN = 1  THEN HT = HT -1:NM$(B) = "": HTAB HT: PRINT  CHR$(95): GOTO 1820
  188. 1880  IF KS <32  THEN  PRINT BL$: GOTO 1820
  189. 1890  IF LN = NL  THEN  PRINT BL$: GOTO 1820
  190. 1900 A$ =  CHR$(KS): PRINT A$:NM$(B) = NM$(B) +A$:HT = HT +1: IF LN = NL  THEN  PRINT BL$
  191. 1910  GOTO 1820
  192. 1920 F$ = NM$(B): GOSUB 5960: ON NF = 0 GOTO 1790: VTAB 10: CALL  -958:LO = .125:HI = 999: IF LS(0) = 1  THEN NM$(B) = NM$(B) +"(S)"
  193. 1930  VTAB 10: HTAB 1: CALL  -868: INPUT "MOST RECENT PRICE =       $";TEMP$: REM  7 SPACES
  194. 1940  GOSUB 540: IF VC = 0  THEN CP(B) =  INT(TEMP *1020 +.5): VTAB 21: CALL  -958: GOTO 1960
  195. 1950  ON VC GOSUB 630,650: GOTO 1930
  196. 1960  VTAB 12: CALL  -868: INPUT "STOP-LOSS PRICE =         $";TEMP$: REM  9 SPACES
  197. 1970 LO = 0: GOSUB 540: IF VC = 0  THEN SL(B) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 1990
  198. 1980  ON VC GOSUB 630,650: GOTO 1960
  199. 1990  VTAB 14: CALL  -868: IF LS(0) = 0  THEN  INPUT "LOWER HOLD TARGET PRICE = $";TEMP$: GOTO 2010
  200. 2000  INPUT "UPPER HOLD TARGET PRICE = $";TEMP$
  201. 2010 LO = .125: GOSUB 540: IF VC = 0  THEN TRG(B,0) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 2030
  202. 2020  ON VC GOSUB 630,650: GOTO 1990
  203. 2030  VTAB 16: CALL  -868: IF LS(0) = 0  THEN  INPUT "UPPER HOLD TARGET PRICE = $";TEMP$:LO = TRG(B,0)/1000 +.006: GOTO 2050
  204. 2040  INPUT "UPPER BUYBACK TARGET PRICE = $";TEMP$:HI = TRG(B,0)/1000
  205. 2050  GOSUB 540: IF VC = 0  THEN TRG(B,1) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 2070
  206. 2060  ON VC GOSUB 630,650: GOTO 2030
  207. 2070  VTAB 18: CALL  -868: IF LS(0) = 0  THEN  INPUT "UPPER SELL TARGET PRICE = $";TEMP$:LO = TRG(B,1)/1000 +.006: GOTO 2090
  208. 2080  INPUT "LOWER BUYBACK TARGET PRICE = $";TEMP$:HI = TRG(B,1)/1000
  209. 2090  GOSUB 540: IF VC = 0  THEN TRG(B,2) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 2110
  210. 2100  ON VC GOSUB 630,650: GOTO 2070
  211. 2110  VTAB 4: CALL  -958: PRINT "DO YOU WANT TO SET UP A PRICE TRACK? Y/N": GET A$:KS =  ASC(A$)
  212. 2120  IF KS = 89  OR KS = 121  THEN  GOTO 2150
  213. 2130  IF KS = 78  OR KS = 110  THEN TK(B) = 0: GOTO 2270
  214. 2140  PRINT BL$: GET A$:KS =  ASC(A$): GOTO 2120
  215. 2150  VTAB 6: PRINT "ENTER THE LAST 10 HIGH AND LOW PRICES,": PRINT "STARTING WITH THE MOST RECENT AND": PRINT "WORKING BACK":VT = 8
  216. 2160 LO = 0:HI = 999: FOR X = 10 TO 1  STEP  -1
  217. 2170  VTAB 23: INVERSE : PRINT "ESC";: NORMAL : PRINT "APE TO BACK OUT OF PRICE TRACK"
  218. 2180  VTAB VT + ABS(X -11): HTAB 1: CALL  -868: PRINT ">>> $";:TEMP$ = ""
  219. 2190  GET A$: PRINT A$;:KS =  ASC(A$): IF KS = 27  THEN  PRINT : GOTO 2110
  220. 2200  IF KS = 13  THEN  GOTO 2220
  221. 2210 TEMP$ = TEMP$ +A$: GOTO 2190
  222. 2220  GOSUB 540: IF VC = 0  THEN HL(B,X) =  INT(TEMP *100 +.5): VTAB 21: CALL  -958: GOTO 2240
  223. 2230  ON VC GOSUB 630,650: GOTO 2180
  224. 2240  NEXT X:HL(B,11) = HL(B,10): IF HL(B,10) <HL(B,9)  THEN HL(B,0) = 0: GOTO 2260
  225. 2250 HL(B,0) = 1
  226. 2260 TK(B) = 1
  227. 2270  VTAB 4: CALL  -958: PRINT : PRINT "ENTER THE FOLLOWING DATA..."
  228. 2280  VTAB 12: CALL  -868: IF LS(0) = 0  THEN  INPUT "MONTH PURCHASED (MM/YY):     ";TEMP$: GOTO 2300
  229. 2290  INPUT "MONTH SOLD SHORT (MM/YY): ";TEMP$
  230. 2300  GOSUB 700: IF VC >0  THEN  GOTO 2280
  231. 2310 PD$(B,NP(B)) = YY$ +MM$: VTAB 21: CALL  -958
  232. 2320  VTAB 14: CALL  -868: INPUT "ENTER # OF SHARES:           ";TEMP$: REM  11 SPACES
  233. 2330 LO = 0:HI = 10000: GOSUB 590: IF VC = 0  THEN SH%(B,NP(B)) =  INT(TEMP +.5): VTAB 21: CALL  -958: GOTO 2350
  234. 2340  ON VC GOSUB 640,650: GOTO 2320
  235. 2350  VTAB 16: CALL  -868: IF LS(0) = 0  THEN  INPUT "TOTAL PURCHASE COST/SHARE = $";TEMP$: GOTO 2370
  236. 2360  INPUT "NET SALE PRICE/SHARE = $";TEMP$
  237. 2370 LO = .125:HI = 999: GOSUB 540: IF VC = 0  THEN PP(B,NP(B)) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 1310
  238. 2380  ON VC GOSUB 630,650: GOTO 2350
  239. 2390  PRINT "YOU CANNOT BUY MORE SHARES -- THIS": PRINT "RECORD IS SET UP AS STOCK SOLD SHORT": GOTO 2430
  240. 2400  PRINT "YOU CANNOT SELL MORE SHARES SHORT --": PRINT "THIS RECORD IS SET UP AS SHARES BOUGHT": GOTO 2430
  241. 2410  PRINT "YOU ALREADY HAVE 4 TRANSACTIONS ON THIS": PRINT "RECORD -- YOU MUST SET UP ANOTHER RECORD": PRINT "AS A NEW COMPANY": GOTO 2430
  242. 2420  PRINT "YOU HAVE SET UP 20 RECORDS ALREADY --": PRINT "THERE IS NO MORE SPACE IN THIS FILE"
  243. 2430  PRINT : PRINT "PRESS <RTN> TO PROCEED...": GET A$: GOTO 1310
  244. 2440  REM 
  245. 2450  REM  SELL A STOCK
  246. 2460  REM 
  247. 2470  HOME : HTAB 15: INVERSE : IF LS(0) = 0  THEN  PRINT "SOLD A STOCK": GOTO 2490
  248. 2480  PRINT "COVERED A SHORT SALE"
  249. 2490  NORMAL : GOSUB 360: VTAB 2: CALL  -958: PRINT NM$(B)
  250. 2500  VTAB 4: IF LS(0) = 0  AND LS(B) = 1  THEN  GOTO 2970
  251. 2510  IF LS(0) = 1  AND LS(B) = 0  THEN  GOTO 2960
  252. 2520  IF MD = 2  THEN  GOTO 2700
  253. 2530  PRINT "-- ALL SHARES LIQUIDATED --"
  254. 2540  VTAB 12: HTAB 1: PRINT "NOTE -- THIS ACTION WILL DELETE THIS    RECORD FROM MEMORY AND THE DATA FILE"
  255. 2550  PRINT : PRINT "ENTER (Y)ES TO CONFIRM, ANY OTHER KEY   TO CANCEL";: GET A$:KS =  ASC(A$)
  256. 2560  IF KS = 89  OR KS = 121  THEN  GOTO 2580
  257. 2570  VTAB 20: PRINT "ACTION CANCELLED": FOR X = 1 TO 3000: NEXT : GOTO 1310
  258. 2580  IF B = NR  THEN NR = NR -1: GOTO 1310
  259. 2590  VTAB 20: HTAB 10: PRINT "ONE MOMENT"
  260. 2600  FOR X = B TO NR -1
  261. 2610 NM$(X) = NM$(X +1):CP(X) = CP(X +1):SL(X) = SL(X +1):NP(X) = NP(X +1):TK(X) = TK(X +1):LS(X) = LS(X +1)
  262. 2620  IF TK(X) = 0  THEN  GOTO 2640
  263. 2630  FOR Y = 0 TO 11:HL(X,Y) = HL(X +1,Y): NEXT 
  264. 2640  FOR Y = 0 TO 2
  265. 2650 TRG(X,Y) = TRG(X +1,Y)
  266. 2660  NEXT Y: FOR Y = 1 TO NP(X)
  267. 2670 PD$(X,Y) = PD$(X +1,Y):SH%(X,Y) = SH%(X +1,Y):PP(X,Y) = PP(X +1,Y)
  268. 2680  NEXT Y: NEXT X:NR = NR -1
  269. 2690  GOTO 1310
  270. 2700  VTAB 3: PRINT "-- PARTIAL LIQUIDATION --"
  271. 2710  FOR X = 1 TO 39: PRINT "=";: NEXT : PRINT 
  272. 2720  VTAB 6: IF LS(0) = 0  THEN  PRINT  TAB( 15)"WHICH PURCHASE...?": GOTO 2740
  273. 2730  PRINT  TAB( 15)"FROM WHICH SALE...?"
  274. 2740  VTAB 8: FOR Y = 1 TO NP(B)
  275. 2750  PRINT  TAB( 10)Y") " RIGHT$(PD$(B,Y),2)"/" LEFT$(PD$(B,Y),2) SPC( 5)SH%(B,Y)" SHARES"
  276. 2760  PRINT : NEXT Y
  277. 2770  GET TEMP$:LO = 1:HI = NP(B): GOSUB 590: IF VC = 0  THEN Y = TEMP: VTAB 21: CALL  -958: GOTO 2790
  278. 2780  ON VC GOSUB 640,650: GOTO 2770
  279. 2790  VTAB 6: CALL  -958: PRINT  RIGHT$(PD$(B,Y),2)"/" LEFT$(PD$(B,Y),2) SPC( 5)SH%(B,Y)" SHARES"
  280. 2800  VTAB 8: HTAB 1: CALL  -868: IF LS(0) = 0  THEN  PRINT "DID YOU SELL ALL THE SHARES?  Y/N";: GOTO 2820
  281. 2810  PRINT "DID YOU COVER ALL THE SHARES?  Y/N";
  282. 2820  GET A$:KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOTO 2850
  283. 2830  IF KS = 78  OR KS = 110  THEN  GOTO 2900
  284. 2840  PRINT BL$: GOTO 2800
  285. 2850  IF NP(B) <2  THEN  GOTO 2540
  286. 2860  IF Y = NP(B)  THEN NP(B) = NP(B) -1: GOTO 1310
  287. 2870  FOR X = Y TO NP(B) -1
  288. 2880 PD$(B,X) = PD$(B,X +1):SH%(B,X) = SH%(B,X +1):PP(B,X) = PP(B,X +1)
  289. 2890  NEXT X:NP(B) = NP(B) -1: GOTO 1310
  290. 2900  VTAB 12: HTAB 1: CALL  -868: IF LS(0) = 0  THEN  INPUT "HOW MANY SHARES DID YOU SELL?  ";TEMP$: GOTO 2920
  291. 2910  INPUT "HOW MANY SHARES DID YOU BUY BACK? ";TEMP$
  292. 2920 LO = 0:HI = SH%(B,Y): GOSUB 590: IF VC >0  THEN  ON VC GOSUB 640,650: GOTO 2900
  293. 2930 SH%(B,Y) = SH%(B,Y) -TEMP
  294. 2940  IF SH%(B,Y) = 0  THEN  GOTO 2850
  295. 2950  GOTO 1310
  296. 2960  PRINT "YOU CANNOT COVER A SHORT SALE -- THIS   RECORD IS SET UP AS SHARES BOUGHT LONG": GOTO 2430
  297. 2970  PRINT "YOU CANNOT SELL SHARES HERE -- THIS     RECORD IS SET UP AS STOCK SOLD SHORT": GOTO 2430
  298. 2980  REM 
  299. 2990  REM  UPDATE CURRENT PRICES
  300. 3000  REM 
  301. 3010  HOME : IF NR <1  THEN  GOSUB 370
  302. 3020  GOSUB 3100:QF = 0: FOR B = 1 TO NR: GOSUB 3120: IF QF  THEN B = NR
  303. 3030  NEXT B: GOTO 1310
  304. 3040  HOME : PRINT "UPDATE CURRENT PRICE": GOSUB 360
  305. 3050  GOSUB 3100: GOSUB 3120
  306. 3060  VTAB 20: CALL  -958: PRINT "UPDATE PRICES ON ANY OTHER STOCKS?  Y/N";: GET A$
  307. 3070 KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOTO 3040
  308. 3080  IF KS = 78  OR KS = 110  THEN  GOTO 1310
  309. 3090  PRINT BL$: GOTO 3060
  310. 3100  HOME : HTAB 10: INVERSE : PRINT "UPDATE CURRENT PRICES": NORMAL 
  311. 3110  PRINT : PRINT "NEW PRICE -- ENTER PRICE OR SIMPLY <RTN>": RETURN 
  312. 3120  VTAB 8: CALL  -958: PRINT NM$(B)
  313. 3130  PRINT : PRINT  TAB( 10)"FORMER PRICE = $"CP(B)/1000
  314. 3140  IF TK(B) = 0  THEN  GOTO 3230
  315. 3150  VTAB 15: PRINT "PRICE TRACK - TREND WAS ";: IF HL(B,0) = 0  THEN  PRINT "DOWN": GOTO 3170
  316. 3160  PRINT "UP"
  317. 3170  VTAB 22: HTAB 1: PRINT "PRESS RETURN TO CANCEL": VTAB 18: HTAB 1: CALL  -868: IF HL(B,0) = 0  THEN  INPUT "ENTER LOWEST RECENT PRICE -- $";TEMP$: GOTO 3190
  318. 3180  INPUT "ENTER HIGHEST RECENT PRICE -- $";TEMP$
  319. 3190  VTAB 22: HTAB 1: CALL  -868: IF TEMP$ = ""  THEN QF = 1: GOTO 3280
  320. 3200 LO = .125:HI = 999: GOSUB 540: IF VC = 0  THEN CP(B) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3220
  321. 3210  ON VC GOSUB 630,650: GOTO 3170
  322. 3220  GOSUB 790
  323. 3230  VTAB 12: HTAB 1: CALL  -868: HTAB 10: INPUT "NEW PRICE =    $";TEMP$
  324. 3240  IF  LEN(TEMP$) <1  THEN  GOTO 3280
  325. 3250 LO = .125:HI = 999: GOSUB 540: IF VC = 0  THEN CP(B) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3270
  326. 3260  ON VC GOSUB 630,650: GOTO 3230
  327. 3270  IF TK(B) = 1  THEN  GOSUB 790
  328. 3280  RETURN 
  329. 3290  REM 
  330. 3300  REM  UPDATE TARGETS
  331. 3310  REM 
  332. 3320  HOME : HTAB 4: INVERSE : PRINT "UPDATE HOLD AND SELL TARGET PRICES": NORMAL 
  333. 3330  GOSUB 360: VTAB 2: CALL  -958: HTAB 14: PRINT NM$(B): PRINT "--ENTER NEW PRICES OR SIMPLY <RTN>--"
  334. 3340  VTAB 6: PRINT "OLD HOLD RANGE = $"TRG(B,0)/1000" TO "TRG(B,1)/1000:SS = TRG(B,1)
  335. 3350 P1$ = "ENTER NEW LOW PRICE --  $":P2$ = "ENTER NEW HIGH PRICE -- $": IF LS(B) = 1  THEN  GOTO 3370
  336. 3360  VTAB 8: HTAB 5: PRINT P1$: VTAB 10: HTAB 5: PRINT P2$: GOTO 3380
  337. 3370  VTAB 8: HTAB 5: PRINT P2$: VTAB 10: HTAB 5: PRINT P1$
  338. 3380  VTAB 8: HTAB 30: CALL  -868: INPUT "";TEMP$
  339. 3390  IF  LEN(TEMP$) <1  THEN  VTAB 8: HTAB 30: PRINT TRG(B,0)/1000: GOTO 3420
  340. 3400 LO = 0:HI = 999: GOSUB 540: IF VC = 0  THEN TRG(B,0) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3420
  341. 3410  ON VC GOSUB 630,650: GOTO 3380
  342. 3420  VTAB 10: HTAB 30: CALL  -868: INPUT "";TEMP$
  343. 3430  IF  LEN(TEMP$) <1  THEN  VTAB 10: HTAB 30: PRINT TRG(B,1)/1000: GOTO 3470
  344. 3440 LO = TRG(B,0)/1000 +.006:HI = 999: IF LS(B) = 1  THEN LO = 0:HI = TRG(B,0)/1000
  345. 3450  GOSUB 540: IF VC = 0  THEN TRG(B,1) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3470
  346. 3460  ON VC GOSUB 630,650: GOTO 3420
  347. 3470  VTAB 12: FOR X = 1 TO 39: PRINT "=";: NEXT : PRINT 
  348. 3480  IF LS(B) = 1  THEN  GOTO 3520
  349. 3490  VTAB 14: PRINT "OLD SELL RANGE = $"SS/1000" TO "TRG(B,2)/1000
  350. 3500  VTAB 16: HTAB 11: PRINT "NEW LOW PRICE =  $"TRG(B,1)/1000
  351. 3510  VTAB 18: HTAB 5: PRINT P2$: GOTO 3550
  352. 3520  VTAB 14: PRINT "OLD BUYBACK RANGE = $"SS/1000" TO "TRG(B,2)/1000
  353. 3530  VTAB 16: HTAB 11: PRINT "NEW HIGH PRICE = $"TRG(B,1)/1000
  354. 3540  VTAB 18: HTAB 5: PRINT P1$
  355. 3550  VTAB 18: HTAB 30: CALL  -868: INPUT "";TEMP$
  356. 3560  IF  LEN(TEMP$) <1  THEN  VTAB 18: HTAB 30: PRINT TRG(B,2)/1000: GOTO 3600
  357. 3570 LO = TRG(B,1)/1000 +.006:HI = 999: IF LS(B) = 1  THEN LO = 0:HI = TRG(B,1)/1000
  358. 3580  GOSUB 540: IF VC = 0  THEN TRG(B,2) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3600
  359. 3590  ON VC GOSUB 630,650: GOTO 3550
  360. 3600  VTAB 20: HTAB 1: PRINT "ANY OTHERS TO CHANGE?   Y/N";: GET A$
  361. 3610 KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOTO 3320
  362. 3620  IF KS = 78  OR KS = 110  THEN  GOTO 1310
  363. 3630  PRINT BL$: GOTO 3600
  364. 3640  REM 
  365. 3650  REM  STOP-LOSS PRICES
  366. 3660  REM 
  367. 3670  HOME : HTAB 4: INVERSE : PRINT "UPDATE STOP-LOSS PRICES": NORMAL 
  368. 3680  GOSUB 360: VTAB 2: CALL  -958: HTAB 14: PRINT NM$(B): PRINT "--ENTER NEW PRICES OR SIMPLY <RTN>--"
  369. 3690  VTAB 8: PRINT "OLD STOP-LOSS PRICE = $"SL(B)/1000
  370. 3700  VTAB 10: HTAB 1: CALL  -868: INPUT "NEW STOP-LOSS PRICE = $";TEMP$
  371. 3710  IF  LEN(TEMP$) <1  THEN  VTAB 10: HTAB 24: PRINT SL(B)/1000: GOTO 3740
  372. 3720 LO = 0:HI = 999: GOSUB 540: IF VC = 0  THEN SL(B) =  INT(TEMP *1000 +.5): VTAB 21: CALL  -958: GOTO 3740
  373. 3730  ON VC GOSUB 630,650: GOTO 3700
  374. 3740  VTAB 15: HTAB 1: PRINT "ANY OTHERS TO CHANGE?   Y/N";: GET A$
  375. 3750 KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOTO 3670
  376. 3760  IF KS = 78  OR KS = 110  THEN  GOTO 1310
  377. 3770  PRINT BL$: GOTO 3740
  378. 3780  REM 
  379. 3790  REM  STOCK SPLITS
  380. 3800  REM 
  381. 3810  HOME : HTAB 15: INVERSE : PRINT "STOCK SPLIT": NORMAL 
  382. 3820  GOSUB 360: VTAB 4: CALL  -958: HTAB 14: PRINT NM$(B)
  383. 3830  VTAB 6: HTAB 10: PRINT "THE STOCK SPLIT "MS$(9,MD)
  384. 3840  VTAB 8: PRINT  TAB( 10)"...IS THIS CORRECT?   Y/N";
  385. 3850  GET A$:KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOTO 3880
  386. 3860  IF KS = 78  OR KS = 110  THEN MB = 9: GOTO 1600
  387. 3870  PRINT BL$: GOTO 3850
  388. 3880  ON MD GOSUB 3980,3990,4000,4010,4020
  389. 3890 CP(B) =  INT(K *CP(B) +.5):SL(B) =  INT(K *SL(B) +.5)
  390. 3900  FOR X = 0 TO 2
  391. 3910 TRG(B,X) =  INT(K *TRG(B,X) +.5)
  392. 3920  NEXT X: FOR X = 1 TO NP(B)
  393. 3930 SH%(B,X) =  INT(SH%(B,X)/K +.01)
  394. 3940 PP(B,X) =  INT(K *PP(B,X) +.5)
  395. 3950  NEXT X
  396. 3960  IF TK(B) = 1  THEN  FOR X = 1 TO 11:HL(B,X) =  INT(K *HL(B,X) +.5): NEXT 
  397. 3970  GOTO 1310
  398. 3980 K = .5: RETURN 
  399. 3990 K = .666: RETURN 
  400. 4000 K = .75: RETURN 
  401. 4010 K = .8: RETURN 
  402. 4020 K = .833: RETURN 
  403. 4030  REM 
  404. 4040  REM  DISPLAY DATA
  405. 4050  REM 
  406. 4060  HOME : HTAB 14: INVERSE : PRINT "DISPLAY STOCKS": NORMAL 
  407. 4070  VTAB 4: PRINT "THE CURRENT DATE IS " RIGHT$(YM$,2)"/" LEFT$(YM$,2)
  408. 4080  VTAB 5: PRINT  TAB( 5)"...DO YOU WANT TO CHANGE IT?  Y/N"
  409. 4090  GET A$:KS =  ASC(A$): IF KS < >89  AND KS < >121  THEN  GOTO 1630
  410. 4100  VTAB 9: PRINT "ENTER NEW MONTH AND YEAR"
  411. 4110  VTAB 11: HTAB 5: CALL  -868: INPUT "ENTER AS MM/YY  ";TEMP$: GOSUB 700: IF VC = 0  THEN YM$ = YY$ +MM$: GOTO 1630
  412. 4120  GOTO 4110
  413. 4130  HOME : HTAB 14: INVERSE : PRINT "DISPLAY STOCKS": NORMAL : IF NR <1  THEN  VTAB 4: CALL  -958: GOSUB 360
  414. 4140  IF MD = 2  THEN  GOTO 4160
  415. 4150  FOR B = 1 TO NR: GOSUB 4200: NEXT B: GOTO 1310
  416. 4160  VTAB 2: CALL  -958: GOSUB 360: GOSUB 4200
  417. 4170  HOME : PRINT "DO YOU WANT TO SEE ANOTHER?   Y/N ";
  418. 4180  GET A$:KS =  ASC(A$): IF KS < >89  AND KS < >121  THEN  GOTO 1310
  419. 4190  HOME : GOTO 4160
  420. 4200  HOME : HTAB 20 - LEN(NM$(B))/2: INVERSE : PRINT NM$(B);: NORMAL 
  421. 4210  HTAB 34: PRINT  RIGHT$(YM$,2)"/" LEFT$(YM$,2)
  422. 4220  IF LS(B) = 0  THEN  GOTO 4440
  423. 4230  PRINT  TAB( 14)"* SOLD SHORT *"
  424. 4240  VTAB 3: IF CP(B) < = TRG(B,1)  THEN A = A: INVERSE 
  425. 4250 PR = TRG(B,1)/1000: GOSUB 1180:P1$ = PR$:PR = TRG(B,2)/1000: GOSUB 1180:P2$ = PR$
  426. 4260  PRINT "TARGET BUY PRICE" TAB( 20)P1$" TO "P2$: NORMAL 
  427. 4270  VTAB 4: IF CP(B) < = TRG(B,0)  AND CP(B) >TRG(B,1)  THEN A = A: INVERSE 
  428. 4280 PR = TRG(B,0)/1000: GOSUB 1180:P2$ = PR$
  429. 4290  PRINT "TARGET HOLD PRICE" TAB( 20)P2$" TO "P1$: NORMAL 
  430. 4300 PR = CP(B)/1000: GOSUB 1180:P1$ = PR$: IF CP(B) <SL(B)  THEN PR = (SL(B) -CP(B))/1000: GOSUB 1180:P2$ =  RIGHT$(PR$,5)
  431. 4310  VTAB 6: PRINT "CURRENT PRICE="P1$;: IF CP(B) <SL(B)  THEN  PRINT  TAB( 25)P2$" UNDER STOP"
  432. 4320  VTAB 8: HTAB 1: IF CP(B) =  >SL(B)  AND SL(B) >0  THEN A = A: INVERSE 
  433. 4330 PR = SL(B)/1000: GOSUB 1180: IF SL(B) = 0  THEN  GOTO 4360
  434. 4340  PRINT "STOP LOSS PRICE="PR$;
  435. 4350  IF CP(B) =  >SL(B)  THEN  PRINT  TAB( 28)"COVER"
  436. 4360  NORMAL : IF TK(B) = 1  THEN  GOSUB 1020
  437. 4370  VTAB 15: HTAB 1: PRINT "SALE DATE": PRINT "# SHARES": PRINT "UNIT PRICE": PRINT "$ GAIN/LS": PRINT "AVR % / YR"
  438. 4380 A = 13: FOR X = 1 TO NP(B)
  439. 4390  GOSUB 4880
  440. 4400 GL =  INT((PP(B,X) -CP(B)/NG)/1000 *SH%(B,X) +.5)
  441. 4410  GOSUB 4810: IF CP(B) = 0  THEN AGL = 0: GOTO 4630
  442. 4420 AGL =  INT(((PP(B,X)/(CP(B)/NG)) ^(1/NM *12) -1) *100 +.5)
  443. 4430  GOTO 4630
  444. 4440  VTAB 3: IF CP(B) =  >TRG(B,1)  THEN A = A: INVERSE 
  445. 4450 PR = TRG(B,1)/1000: GOSUB 1180:P1$ = PR$:PR = TRG(B,2)/1000: GOSUB 1180:P2$ = PR$
  446. 4460  PRINT "TARGET SELL PRICE" TAB( 20)P1$" TO "P2$: NORMAL 
  447. 4470  VTAB 4: IF CP(B) =  >TRG(B,0)  AND CP(B) <TRG(B,1)  THEN A = A: INVERSE 
  448. 4480 PR = TRG(B,0)/1000: GOSUB 1180:P2$ = PR$
  449. 4490  PRINT "TARGET HOLD PRICE" TAB( 20)P2$" TO "P1$: NORMAL 
  450. 4500 PR = CP(B)/1000: GOSUB 1180:P1$ = PR$: IF CP(B) >SL(B)  THEN PR = (CP(B) -SL(B))/1000: GOSUB 1180:P2$ =  RIGHT$(PR$,5)
  451. 4510  VTAB 6: PRINT "CURRENT PRICE="P1$;: IF CP(B) >SL(B)  AND SL(B) >0  THEN  PRINT  TAB( 25)P2$" OVER STOP"
  452. 4520  VTAB 8: HTAB 1: IF CP(B) < = SL(B)  THEN A = A: INVERSE 
  453. 4530 PR = SL(B)/1000: GOSUB 1180: IF SL(B) = 0  THEN  GOTO 4560
  454. 4540  PRINT "STOP LOSS PRICE="PR$;
  455. 4550  IF CP(B) < = SL(B)  THEN  PRINT  TAB( 28)"SELL"
  456. 4560  NORMAL : IF TK(B) = 1  THEN  GOSUB 1020
  457. 4570  VTAB 15: HTAB 1: PRINT "PUR. DATE": PRINT "# SHARES": PRINT "UNIT PRICE": PRINT "$ GAIN/LS": PRINT "AVR % / YR"
  458. 4580 A = 13: FOR X = 1 TO NP(B)
  459. 4590  GOSUB 4880
  460. 4600 GL =  INT((CP(B) *NG -PP(B,X))/1000 *SH%(B,X) +.5)
  461. 4610  GOSUB 4810: IF PP(B,X) = 0  THEN AGL = 0: GOTO 4630
  462. 4620 AGL =  INT(((CP(B) *NG/PP(B,X)) ^(1/NM *12) -1) *100 +.5)
  463. 4630 AGL$ =  STR$(AGL) +"%"
  464. 4640  IF  LEN(AGL$) <5  THEN AGL$ = " " +AGL$: GOTO 4640
  465. 4650 DT$ =  RIGHT$(PD$(B,X),2) +"/" + LEFT$(PD$(B,X),2)
  466. 4660 SH$ =  STR$(SH%(B,X))
  467. 4670  IF  LEN(SH$) <5  THEN SH$ = " " +SH$: GOTO 4670
  468. 4680  VTAB 15: HTAB A: PRINT DT$
  469. 4690  HTAB A: PRINT SH$
  470. 4700 PR = PP(B,X)/1000: GOSUB 1180:PR$ =  RIGHT$(PR$,6)
  471. 4710  HTAB A -1: PRINT PR$
  472. 4720  HTAB A: PRINT GL$
  473. 4730  HTAB A: PRINT AGL$
  474. 4740 A = A +7: NEXT X
  475. 4750  VTAB 22: HTAB 5: PRINT "<P> TO PRINT     RETURN TO GO ON  ": REM  5 SPACES
  476. 4760  HTAB 5: PRINT "ESCAPE TO LEAVE DISPLAY  ";: GET A$
  477. 4770 KS =  ASC(A$): IF KS = 80  OR KS = 112  THEN  GOSUB 4950
  478. 4780  IF KS = 27  THEN  POP : GOTO 1310
  479. 4790  IF KS = 13  THEN  RETURN 
  480. 4800  PRINT BL$: GOTO 4750
  481. 4810 GL$ = "$" + STR$(GL)
  482. 4820  IF  LEN(GL$) <5  THEN GL$ = " " +GL$: GOTO 4820
  483. 4830 Y1 =  VAL( LEFT$(PD$(B,X),2)):M1 =  VAL( RIGHT$(PD$(B,X),2))
  484. 4840 Y2 =  VAL( LEFT$(YM$,2)):M2 =  VAL( RIGHT$(YM$,2))
  485. 4850  IF M2 <M1  THEN M2 = M2 +12:Y2 = Y2 -1
  486. 4860 NM = M2 -M1 +12 *(Y2 -Y1): IF NM <1  THEN NM = 1
  487. 4870  RETURN 
  488. 4880 TEMP = SH%(B,X) *CP(B)/1000
  489. 4890  IF TEMP <2300  THEN NG = .97: RETURN 
  490. 4900  IF TEMP <3100  THEN NG = .971: RETURN 
  491. 4910  IF TEMP <3900  THEN NG = .972: RETURN 
  492. 4920  IF TEMP <4700  THEN NG = .973: RETURN 
  493. 4930  IF TEMP <5500  THEN NG = .974: RETURN 
  494. 4940 NG = .975: RETURN 
  495. 4950  REM 
  496. 4960  VTAB  PEEK(37) -1: CALL  -958
  497. 4970  PRINT : PRINT D$"PR#"SL: PRINT  CHR$(9)"80N": GOSUB 100: PRINT : PRINT D$"PR#0": RETURN 
  498. 4980  REM 
  499. 4990  REM  QUIT
  500. 5000  REM 
  501. 5010  HOME : PRINT "DO YOU WANT TO SAVE THE CHANGES THAT    WERE MADE IN THIS SESSION?   Y/N"
  502. 5020  GET A$:KS =  ASC(A$): IF KS = 89  OR KS = 121  THEN  GOSUB 5100: GOTO 5050
  503. 5030  IF KS = 78  OR KS = 110  THEN  GOTO 5050
  504. 5040  PRINT BL$: GOTO 5010
  505. 5050  VTAB 10: PRINT "PRESS 'R' TO RETURN TO MASTER MENU"
  506. 5060  PRINT  TAB( 8)"..ANY OTHER KEY TO QUIT"
  507. 5070  GET A$:KS =  ASC(A$): IF KS = 82  OR KS = 114  THEN  GOTO 1310
  508. 5080  VTAB 15: PRINT "THE PROGRAM HAS ENDED"
  509. 5090  END 
  510. 5100  ONERR  GOTO 5720
  511. 5110  VTAB 5: HTAB 12: PRINT "ONE MOMENT PLEASE"
  512. 5120  PRINT D$"OPEN STK.DATA"
  513. 5130  PRINT D$"WRITE STK.DATA"
  514. 5140  PRINT NR: IF NR <1  THEN  GOTO 5230
  515. 5150  FOR X = 1 TO NR
  516. 5160  PRINT NM$(X): PRINT CP(X): PRINT SL(X): PRINT NP(X): PRINT TK(X): PRINT LS(X)
  517. 5170  FOR Y = 0 TO 2: PRINT TRG(X,Y): NEXT 
  518. 5180  IF TK(X) = 0  THEN  GOTO 5200
  519. 5190  FOR Y = 0 TO 11: PRINT HL(X,Y): NEXT 
  520. 5200  FOR Y = 1 TO NP(X)
  521. 5210  PRINT PD$(X,Y): PRINT SH%(X,Y): PRINT PP(X,Y)
  522. 5220  NEXT Y: NEXT X
  523. 5230  PRINT D$"CLOSE STK.DATA": ONERR  GOTO 5750
  524. 5240  RETURN 
  525. 5250  REM 
  526. 5260  REM  OPEN PROGRAM
  527. 5270  REM 
  528. 5280  VTAB 16: HTAB 12: INVERSE : PRINT "ONE MOMENT PLEASE": NORMAL 
  529. 5290 D$ =  CHR$(4):BL$ =  CHR$(7)
  530. 5300 MX = 20:EF = 1:SL = 1
  531. 5310  ONERR  GOTO 5770
  532. 5320  PRINT 
  533. 5330  POKE 6,1: POKE 7,0: POKE 8,23: POKE 9,1: REM  -- SET SCREEN DUMP PARAMETERS
  534. 5340  DIM NM$(MX),PD$(MX,4),MS$(10,5)
  535. 5350  DIM CP(MX),SL(MX),TRG(MX,2),PP(MX,4),NP(MX),HL(MX,11),LS(MX),TK(MX),SH%(MX,4)
  536. 5360  PRINT : PRINT D$"VERIFY STK.DATA"
  537. 5370  ONERR  GOTO 5750
  538. 5380  PRINT : PRINT D$"OPEN STK.DATA"
  539. 5390  PRINT D$"READ STK.DATA"
  540. 5400  INPUT NR: IF NR <1  THEN  GOTO 5490
  541. 5410  FOR X = 1 TO NR
  542. 5420  INPUT NM$(X),CP(X),SL(X),NP(X),TK(X),LS(X)
  543. 5430  FOR Y = 0 TO 2: INPUT TRG(X,Y): NEXT 
  544. 5440  IF TK(X) = 0  THEN  GOTO 5460
  545. 5450  FOR Y = 0 TO 11: INPUT HL(X,Y): NEXT 
  546. 5460  FOR Y = 1 TO NP(X)
  547. 5470  INPUT PD$(X,Y),SH%(X,Y),PP(X,Y)
  548. 5480  NEXT Y: NEXT X
  549. 5490  PRINT D$"CLOSE STK.DATA"
  550. 5500  FOR X = 0 TO 4: READ MS$(1,X): NEXT 
  551. 5510  FOR X = 0 TO 2: READ MS$(2,X): NEXT 
  552. 5520  FOR X = 0 TO 4: READ MS$(3,X): NEXT 
  553. 5530  FOR X = 0 TO 3: READ MS$(4,X): NEXT 
  554. 5540  FOR Y = 5 TO 8: FOR X = 0 TO 2: READ MS$(Y,X): NEXT : NEXT 
  555. 5550  FOR X = 0 TO 5: READ MS$(9,X): NEXT 
  556. 5560  FOR X = 0 TO 2: READ MS$(10,X): NEXT 
  557. 5570 DT$ = "ENTER THE CURRENT MONTH AND YEAR": GOSUB 5580: GOTO 1310
  558. 5580  VTAB 16: HTAB 5: PRINT DT$
  559. 5590  VTAB 18: HTAB 5: CALL  -868: INPUT "ENTER AS  MM/YY  ";TEMP$: GOSUB 700
  560. 5600  IF VC = 0  THEN YM$ = YY$ +MM$: RETURN 
  561. 5610  GOTO 5590
  562. 5620  DATA  MASTER, TRANSACTIONS, PRICE UPDATES, DISPLAY STOCKS, QUIT
  563. 5630  DATA  TRANSACTIONS, BOUGHT STOCK, SOLD STOCK
  564. 5640  DATA  PRICE UPDATES, CURRENT SELLING PRICES, HOLD/SELL TARGETS, STOP-LOSS PRICES, STOCK SPLIT ADJUSTMENTS
  565. 5650  DATA  DISPLAY STOCKS, ALL STOCKS, INDIVIDUAL STOCKS, CHANGE CURRENT DATE
  566. 5660  DATA  BOUGHT STOCK, BOUGHT SHARES LONG, COVERED A SHORT SALE
  567. 5670  DATA  SOLD STOCK, SOLD OWNED STOCK, SOLD STOCK SHORT
  568. 5680  DATA  BGT/SOLD SHORT, A BRAND NEW COMPANY, MORE SHARES OF AN OLD STOCK
  569. 5690  DATA  SOLD/COVER SHORT, ALL OF THE SHARES, ONLY A PORTION OF THE SHARES
  570. 5700  DATA  STOCK SPLIT, 2 FOR 1, 3 FOR 2, 4 FOR 3, 5 FOR 4, 6 FOR 5
  571. 5710  DATA  PRICE UPDATE, ALL STOCKS, INDIVIDUAL STOCKS
  572. 5720  CALL  -3288: POKE 216,0: IF  PEEK(222) = 4  THEN ER$ = "WRITE PROTECTED DISK": GOTO 5810
  573. 5730  IF  PEEK(222) = 9  THEN ER$ = "DISK FULL": GOTO 5810
  574. 5740  GOTO 5780
  575. 5750  CALL  -3288: POKE 216,0: IF  PEEK(222) = 5  AND NR = 0  THEN ER$ = "FILE NOT FOUND": GOTO 5860
  576. 5760  ON  PEEK(222) < >5 GOTO 5790:ER$ = "END OF DATA": GOTO 5830
  577. 5770  IF  PEEK(222) = 6  THEN ER$ = "FILE NOT FOUND": GOTO 5860
  578. 5780  IF  PEEK(222) = 8  THEN ER$ = "I/O ERROR - CHECK DRIVE DOOR": GOTO 5810
  579. 5790  HOME : PRINT "ERROR # " PEEK(222)" FOUND IN LINE " PEEK(219) *256 + PEEK(218)
  580. 5800  PRINT : PRINT "CHECK YOUR MANUAL FOR THIS ERROR CODE": PRINT "THE PROGRAM CANNOT CONTINUE": END 
  581. 5810  HOME : PRINT "DISK ERROR ENCOUNTERED": PRINT : PRINT ER$
  582. 5820  VTAB 15: PRINT "PLEASE CORRECT THE PROBLEM AND": PRINT "PRESS RETURN TO CONTINUE...": GET A$: PRINT : HOME : ON EF GOTO 5370,1300
  583. 5830  HOME : PRINT ER$" ERROR ENCOUNTERED": PRINT "WHEN READING DISK"
  584. 5840  PRINT : PRINT "THE PARTIAL STOCK RECORD WILL BE": PRINT "ELIMINATED"
  585. 5850  PRINT : PRINT "PRESS RETURN TO CONTINUE...": GET A$:NR = X -1: PRINT : PRINT D$"CLOSE STK.DATA": HOME : GOTO 5500
  586. 5860  HOME : PRINT "THE DATA FILE 'STK.DATA' DOES NOT EXIST": PRINT "ON THE DISK -- DO YOU WANT TO": PRINT "SET IT UP?   Y/N"
  587. 5870  GET A$: IF  ASC(A$) = 89  OR  ASC(A$) = 121  THEN  GOTO 5910
  588. 5880  IF  ASC(A$) = 78  OR  ASC(A$) = 110  THEN  GOTO 5900
  589. 5890  PRINT BL$: GOTO 5860
  590. 5900  PRINT : PRINT "THE PROGRAM HAS ENDED": PRINT BL$: END 
  591. 5910  PRINT : PRINT D$"OPEN STK.DATA"
  592. 5920  PRINT D$"WRITE STK.DATA"
  593. 5930 NR = 0: PRINT NR
  594. 5940  PRINT D$"CLOSE STK.DATA"
  595. 5950  HOME : PRINT  TAB( 16)"PORTFOLIO": GOTO 5380
  596. 5960 NF = 1: IF  LEN(F$) >0  THEN  FOR NC = 1 TO  LEN(F$):NA =  ASC( MID$ (F$,NC,1)):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58  AND NC >1))  AND NF = 1: NEXT : IF  LEN(F$) >15  THEN NF = 0
  597. 5970  IF NF = 0  THEN  HTAB 1: VTAB 20: CALL  -958: VTAB 20: PRINT "ILLEGAL NAME--RETURN TO CONTINUE";: GET Z$: PRINT : VTAB 20: HTAB 1: CALL  -958
  598. 5980  RETURN