ChipMaster's bwBASIC This also includes history going back to v2.10. *WARN* some binary files might have been corrupted by CRLF.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

215 lines
8.8 KiB

  1. 1 CLS:PRINT "THIS PROGRAM IS A SIMPLE STOCK PORTFOLIO PROGRAM. IT WILL
  2. 2 PRINT " PERMIT THE USER TO STORE DATA ABOUT HIS PORTFOLIO OF SECURIT-
  3. 3 PRINT "IES AS WELL AS GIVE A PROFIT ANALYSIS OF THE PORTFOLIO.
  4. 4 PRINT "FOR EACH SECURITY WE STORE STOCK TICKER CODE,COMPANY NAME
  5. 5 PRINT "DATE OF PURCHASE, # UNITS PURCHASED, PURCHASE PR/UNIT,
  6. 6 PRINT "PRESENT PR/UNIT, YEARLY DIVIDENDS/UNIT.
  7. 7 PRINT :PRINT " THE ANALYSIS COMPUTES SUCH ELEMENTS AS PORTFOLIO AT COST.
  8. 8 PRINT "PRESENT VALUE OF PORTFOLIO, PRESENT YIELD, ETC.
  9. 9 PRINT :INPUT "PRESS ENTER TO BEGIN";Z9$
  10. 19 CLEAR 1000
  11. 20 DEFDBL B,V
  12. 30 DIM A$(70,4),B(70,8)
  13. 35 DIM AT$(70,4),BT(70,8)
  14. 40 GOSUB 9000
  15. 100 CLS:INPUT "ARE DISK DRIVES ATTACHED(Y/N)";ZD$
  16. 110 IF ZD$<>"Y" AND ZD$<>"N" THEN GOSUB 10000:GOTO 100
  17. 500 CLS:PRINT " MAIN MENU":PRINT
  18. 505 PRINT " 0.QUIT
  19. 510 PRINT " 1.ADD TO FILE OR BEGIN NEW FILE
  20. 520 PRINT " 2.READ FILE IN FROM TAPE
  21. 530 PRINT " 3.WRITE FILE OUT ONTO TAPE
  22. 540 PRINT " 4.READ FILE IN FROM DISK
  23. 550 PRINT " 5.WRITE FILE OUT ONTO DISK
  24. 560 PRINT " 6.EDIT FILE
  25. 570 PRINT " 7.LIST FILE AND PROFIT ANALYSIS
  26. 580 PRINT " 8.ROUTINE ACTUALLY DELETING RECORD FROM FILE
  27. 600 INPUT "ENTER YOUR CHOICE";Z9
  28. 605 IF Z9 = 0 THEN END
  29. 610 ON Z9 GOSUB 1000,2000,2100,2200,2300,3000,5000,7000
  30. 620 GOTO 500
  31. 1000 REM ADD TO OR START FILE ALREADY IN MEMORY
  32. 1010 CLS: IF NI=0 THEN PRINT "NEW FILE":GOSUB 10100
  33. 1015 J=NI+1
  34. 1020 GOSUB 6000:REM INPUT 1 RECORD
  35. 1030 CLS:PRINT F$(2):PRINT F$(3):GOSUB 6100:REM PRINT OUT 1 RECORD
  36. 1040 GOSUB 10200:IF Z9$="N" THEN GOTO 1020
  37. 1050 IF Z9$="A" THEN RETURN
  38. 1060 NI=NI+1:REM NEW RECORD ON FILE
  39. 1070 GOSUB 10400:REM MORE?
  40. 1080 IF Z9$="Y" THEN GOTO 1000
  41. 1090 RETURN
  42. 2000 REM READ IN FILE FROM TAPE
  43. 2010 CLS:PRINT "PUT DATA TAPE IN TAPE DRIVE":GOSUB 10100
  44. 2015 ' IF ZD$="Y" THEN CMD"T"
  45. 2020 INPUT #-1,NI
  46. 2030 FOR J=1 TO NI:INPUT #-1,A$(J,1),A$(J,2),A$(J,3),B(J,1),B(J,2),B(J,3),B(J,4):NEXT
  47. 2040 RETURN
  48. 2100 REM WRITE OUT FILE ONTO TAPE
  49. 2110 PRINT "PUT DATA TAPE IN TAPE DRIVE":GOSUB 10100
  50. 2115 ' IF ZD$="Y" THEN CMD"T"
  51. 2130 WRITE #-1,NI
  52. 2140 FOR J=1 TO NI:WRITE #-1,A$(J,1),A$(J,2),A$(J,3),B(J,1),B(J,2),B(J,3),B(J,4):NEXT
  53. 2150 RETURN
  54. 2200 REM READ IN FILE FROM DISK
  55. 2210 CLS:PRINT "PUT DATA DISK IN DISK DRIVE":GOSUB 10100
  56. 2220 ON ERROR GOTO 2290
  57. 2230 OPEN "I",1,"PORTFOLIO"
  58. 2240 INPUT # 1,NI
  59. 2250 FOR J=1 TO NI:INPUT # 1,A$(J,1),A$(J,2),A$(J,3),B(J,1),B(J,2),B(J,3),B(J,4):NEXT
  60. 2260 CLOSE # 1
  61. 2270 RETURN
  62. 2290 PRINT "FILE DOES NOT EXIST":GOSUB 10100:RETURN
  63. 2300 REM WRITE FILE OUT TO DISK
  64. 2310 PRINT :PRINT "PUT DATA DISK IN DISK DRIVE":GOSUB 10100
  65. 2320 OPEN "O",1,"PORTFOLIO"
  66. 2330 WRITE # 1,NI
  67. 2340 FOR J=1 TO NI
  68. 2350 WRITE # 1,A$(J,1),A$(J,2),A$(J,3),B(J,1),B(J,2),B(J,3),B(J,4)
  69. 2360 NEXT J
  70. 2370 CLOSE # 1
  71. 2380 RETURN
  72. 3000 REM EDIT FILE
  73. 3010 CLS:PRINT " ";F$(2):PRINT " ";F$(3)
  74. 3020 FOR J=1 TO NI
  75. 3030 PRINT USING "## ";J;
  76. 3040 GOSUB 6100
  77. 3050 IF J/12=INT(J/12) THEN GOSUB 4000
  78. 3060 NEXT J
  79. 3062 J=J-1
  80. 3065 IF J/12=INT(J/12) THEN GOTO 3080
  81. 3070 GOSUB 4000
  82. 3080 RETURN
  83. 4000 REM EDIT SUBROUTINE
  84. 4010 K=J
  85. 4020 PRINT
  86. 4025 J=0
  87. 4028 PRINT "CHANGE STOCK TICKER CODE TO ZZZZ FOR DELETING"
  88. 4030 INPUT "ENTER # OF ITEM YOU WISH TO EDIT,0 IF NONE";J
  89. 4035 IF J=0 THEN J=K:RETURN
  90. 4040 CLS:PRINT " ";F$(2):PRINT " ";F$(3):PRINT
  91. 4050 PRINT " ";:GOSUB 6100
  92. 4060 PRINT :GOSUB 6000
  93. 4070 CLS:PRINT " ";F$(2):PRINT " ";F$(3)
  94. 4080 FOR J=INT(K/12)*12+1 TO K:PRINT USING "## ";J;:GOSUB 6100:NEXT
  95. 4090 GOTO 4020
  96. 5000 REM LIST FILE WITH ANALYSIS
  97. 5005 INPUT "IS A LINE PRINTER TO BE USED(Y/N)";Z2$:IF Z2$<>"Y" AND Z2$<>"N" THEN GOSUB 10000:GOTO 5005
  98. 5010 CLS:PRINT " LIST MENU":PRINT
  99. 5020 PRINT "1. COMPLETE LIST AS ON FILE
  100. 5030 PRINT "2. LIST WITH PAPER PROFIT, YIELD & PORTFOLIO VALUE
  101. 5050 PRINT "3. END LIST PROGRAM
  102. 5060 PRINT :INPUT "ENTER APPROPRIATE CHOICE";Z9
  103. 5065 IF Z9=3 THEN RETURN
  104. 5070 ON Z9 GOSUB 5200,5300
  105. 5080 GOTO 5010
  106. 5100 RETURN
  107. 5200 REM COMPLETE LIST
  108. 5205 CLS:IF Z2$="Y" THEN PRINT "PUT PAPER INTO PRINTER":GOSUB 10100
  109. 5210 PRINT F$(2):PRINT F$(3):IF Z2$="Y" THEN LPRINT F$(2):LPRINT F$(3)
  110. 5220 FOR J = 1 TO NI
  111. 5230 GOSUB 6100:GOSUB 6300:REM 1 RECORD PRINTED
  112. 5240 IF J/12 = INT(J/12) THEN PRINT :GOSUB 10100:CLS:PRINT F$(2):PRINT F$(3)
  113. 5250 NEXT J
  114. 5260 PRINT :GOSUB 10100
  115. 5270 RETURN
  116. 5300 REM PORTFOLIO ANALYSIS
  117. 5310 V(1)=0:V(2)=0:V(3)=0:V(4)=0
  118. 5315 CLS:PRINT @ 398,"******* COMPUTING *******"
  119. 5320 FOR J=1 TO NI
  120. 5330 V(1)=V(1)+B(J,1)*B(J,2):REM PORTFOLIO AT COST
  121. 5340 V(2)=V(2)+B(J,1)*B(J,3):REM PORTFOLIO VALUE NOW
  122. 5350 V(3)=V(3)+B(J,1)*B(J,4):REM TOTAL DIVIDENDS
  123. 5360 B(J,5)=B(J,4)/B(J,3)*100:REM PRESENT YIELD
  124. 5370 B(J,6)=B(J,3)/B(J,2)*100-100:REM % PROFIT
  125. 5380 B(J,7)=B(J,1)*B(J,3):REM PRESENT VALUE
  126. 5390 NEXT J
  127. 5400 CLS:PRINT F$(5):PRINT F$(6):IF Z2$="Y" THEN LPRINT F$(5):LPRINT F$(6)
  128. 5410 FOR J=1 TO NI
  129. 5420 PRINT USING F$(7);A$(J,1),A$(J,3),B(J,2),B(J,3),B(J,5),B(J,7),B(J,6)
  130. 5430 IF Z2$="Y" THEN LPRINT USING F$(7);A$(J,1),A$(J,3),B(J,2),B(J,3),B(J,5),B(J,7),B(J,6)
  131. 5440 IF J/12=INT(J/12) THEN GOSUB 10100:CLS:PRINT F$(5):PRINT F$(6)
  132. 5450 NEXT J
  133. 5460 PRINT :GOSUB 10100
  134. 5470 PRINT
  135. 5480 PRINT USING "PORTFOLIO VALUE AT COST : $$#####.##";V(1)
  136. 5485 PRINT USING "PRESENT PORTFOLIO VALUE : $$#####.##";V(2)
  137. 5487 PRINT USING "DOLLAR PAPER PROFIT : $$#####.##";V(2)-V(1)
  138. 5490 PRINT USING "TOTAL DIVIDENDS PER YEAR: $$#####.##";V(3)
  139. 5495 PRINT USING "DIVIDEND YIELD : ####.##";V(3)/V(2)
  140. 5500 IF Z2$<>"Y" THEN GOTO 5550
  141. 5510 LPRINT USING "PORTFOLIO VALUE AT COST : $$#####.##";V(1)
  142. 5515 LPRINT USING "PRESENT PORTFOLIO VALUE : $$#####.##";V(2)
  143. 5517 LPRINT USING "DOLLAR PAPER PROFIT : $$#####.##";V(2)-V(1)
  144. 5520 LPRINT USING "TOTAL DIVIDENDS PER YEAR: $$#####.##";V(3)
  145. 5525 LPRINT USING "DIVIDEND YIELD : ###.##";V(3)/V(2)
  146. 5530 LPRINT :LPRINT
  147. 5550 PRINT :GOSUB 10100:RETURN
  148. 6000 REM SBR FOR INPUTTING DATA ON 1 PURCHASE
  149. 6005 F$(1)="% %"
  150. 6010 PRINT USING F$(1);A$(J,1),:INPUT "STOCK TICKER CODE";A$(J,1)
  151. 6020 PRINT USING F$(1);A$(J,2),:INPUT "COMPANY NAME ";A$(J,2)
  152. 6030 PRINT USING F$(1);A$(J,3),:INPUT "DATE OF PURCHASE ";A$(J,3)
  153. 6035 F$(1)=" ######.## "
  154. 6040 PRINT USING F$(1);B(J,1),:INPUT "# UNITS PURCHASED";B(J,1)
  155. 6050 PRINT USING F$(1);B(J,2),:INPUT "PURCHASE PR/UNIT ";B(J,2)
  156. 6060 PRINT USING F$(1);B(J,3),:INPUT "PRESENT PR/UNIT ";B(J,3)
  157. 6070 PRINT USING F$(1);B(J,4),:INPUT "YEARLY DIV/UNIT ";B(J,4)
  158. 6099 RETURN
  159. 6100 REM PRINT 1 LINE OF PORTFOLIO
  160. 6110 PRINT USING F$(4);A$(J,1),A$(J,2),A$(J,3),B(J,2),B(J,3),B(J,4),B(J,1)
  161. 6120 RETURN
  162. 6300 REM PRINT 1 LINE OF PORTFOLIO ON PRINTER
  163. 6310 IF Z2$<>"Y" THEN RETURN
  164. 6320 LPRINT USING F$(4);A$(J,1),A$(J,2),A$(J,3),B(J,2),B(J,3),B(J,4),B(J,1)
  165. 6330 RETURN
  166. 7000 REM DELETE SBR COMPUTATION
  167. 7005 K=1:REM K=NO. OF RECORDS NOT DELETED
  168. 7010 FOR J=1 TO NI
  169. 7020 IF A$(J,1)="ZZZZ" THEN GOTO 7090
  170. 7030 REM DO NOT DELETE RECORD
  171. 7040 FOR J6=1 TO 4:AT$(K,J6)=A$(J,J6):NEXT
  172. 7050 FOR J6=1 TO 7:BT(K,J6)=B(J,J6):NEXT
  173. 7060 K=K+1:GOTO 7090
  174. 7090 NEXT J
  175. 7100 K=K-1:NI=K
  176. 7110 FOR J=1 TO NI
  177. 7120 FOR J6=1 TO 4:A$(J,J6)=AT$(J,J6):NEXT
  178. 7130 FOR J6=1 TO 7:B(J,J6)=BT(J,J6):NEXT
  179. 7140 NEXT J
  180. 7150 RETURN
  181. 9000 REM FORMATTING VARIABLES
  182. 9020 F$(2)="TK CORP. NAME DATE PURCH. PRESENT YEARLY NO."
  183. 9025 F$(3)="CODE PURCH PR/UNIT PR/UNIT DIV/UNIT UNITS"
  184. 9030 F$(4)="% % % % % % ####.## ####.## ####.## #####"
  185. 9040 F$(5)=" TK DATE PURCH. PRES. YIELD PRESENT % PROFIT"
  186. 9050 F$(6)="CODE PURCH. PR/UNIT PR/UNIT % VALUE"
  187. 9060 F$(7)="% % % % ####.## ####.## ###.## ######.## ####.## "
  188. 9099 RETURN
  189. 10000 REM INPUT ERROR SBR
  190. 10010 PRINT "INPUT ERROR! TRY AGAIN!":FOR Z9=1 TO 300:NEXT Z9
  191. 10020 RETURN
  192. 10100 INPUT "PRESS ENTER TO CONTINUE";Z9:RETURN
  193. 10200 REM Y,N,A SBR
  194. 10205 Z9$=" "
  195. 10210 INPUT "ENTER Y IF OK,N IF ERROR,A TO ABORT";Z9$
  196. 10220 IF Z9$<>"Y" AND Z9$<>"N" AND Z9$<>"A" THEN GOSUB 10000:GOTO 10205
  197. 10230 RETURN
  198. 10300 REM Y,N SBR
  199. 10305 Z9$=" "
  200. 10310 INPUT "ENTER Y IF OK, N IF ERROR";Z9$
  201. 10320 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000:GOTO 10305
  202. 10330 RETURN
  203. 10400 REM MORE ENTRY? SBR
  204. 10405 Z9$=" "
  205. 10410 INPUT "DO YOU DESIRE MORE ENTRIES(Y/N)";Z9$
  206. 10420 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000:GOTO 10405
  207. 10430 RETURN
  208. 10500 REM ONLY Y/N SBR
  209. 10510 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000
  210. 10520 RETURN
  211. 11000 REM ELIMINATES TRAILING BLANKS OF VARIABLE Z8$
  212. 11010 IF RIGHT$(Z8$,1)=" " THEN Z8$=LEFT$(Z8$,LEN(Z8$)-1):GOTO 11010
  213. 11020 RETURN