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.
 
 
 
 
 
 

240 lines
10 KiB

  1. 1 CLS:PRINT TAB(5);"AUTO EXPENSE ANALYSIS":PRINT
  2. 2 PRINT "THIS SIMPLE PROGRAM WILL PERMIT THE INDIVIDUAL TO KEEP A
  3. 3 PRINT "RECORD OF ALL EXPENSES PERTAINING TO THE USE OF AN AUTOMOBILE.
  4. 4 PRINT "FOR EACH EXPENSE THIS PROGRAM STORES THE FOLLOWING:
  5. 5 PRINT "AN EXPENSE TYPE CHOSEN FROM GAS,OIL,MAIN,TOLL,INS,PAYM OR MISC
  6. 6 PRINT "MAIN MEANS MAINTENANCE,INS IS INSURANCE,PAYM IS CAR PAYMENT.
  7. 7 PRINT "IN ADDITION TO TYPE EXPENSE THERE IS DESCRIPTION,DATE,PLACE OF
  8. 8 PRINT "SERVICE,QUANTITY PURCHASED,BILL AMOUNT AND ODOMETER READING.
  9. 9 PRINT "THIS DATA IS STORED IN A FILE IN MEMORY. THIS FILE MAY BE
  10. 10 PRINT "SAVED ON DISKETTE OR CASSETTE AND RECALLED,IT MAY BE EDITED
  11. 11 PRINT "LISTED ON CRT OR PRINTER,ETC. A MILES PER GALLON CALCULATION
  12. 12 PRINT "MAY ALSO BE PERFORMED.
  13. 15 PRINT :INPUT "PRESS ENTER TO BEGIN";Z9$
  14. 50 CLEAR 3000
  15. 60 DIM AA$(70,4),BB(70,3)
  16. 65 DIM AT$(70,4),BT(70,3)
  17. 70 GOSUB 9000
  18. 100 ' CLS:INPUT "ARE DISK DRIVES ATTACHED(Y/N)";ZD$
  19. 110 ' IF ZD$<>"Y" AND ZD$<>"N" THEN GOSUB 10000:GOTO 100
  20. 120 ZD$ = "Y" ' bwBASIC does not support cassette input
  21. 500 CLS:PRINT " MAIN MENU":PRINT
  22. 505 PRINT " 0.QUIT
  23. 510 PRINT " 1.ADD TO FILE OR BEGIN NEW FILE
  24. 520 PRINT " 2.READ FILE IN FROM TAPE
  25. 530 PRINT " 3.WRITE FILE OUT ONTO TAPE
  26. 540 PRINT " 4.READ FILE IN FROM DISK
  27. 550 PRINT " 5.WRITE FILE OUT ONTO DISK
  28. 560 PRINT " 6.EDIT FILE
  29. 570 PRINT " 7.LIST CONTENTS, COMPLETE OR BY TYPE
  30. 580 PRINT " 8.ROUTINE ACTUALLY DELETING RECORD FROM FILE
  31. 590 Z9=0
  32. 600 INPUT "ENTER YOUR CHOICE";Z9
  33. 605 IF Z9 = 0 THEN END
  34. 610 ON Z9 GOSUB 1000,2000,2100,2200,2300,3000,5000,7000
  35. 620 GOTO 500
  36. 1000 REM ADD TO OR START FILE ALREADY IN MEMORY
  37. 1010 CLS: IF NI=0 THEN PRINT "NEW FILE":GOSUB 10100
  38. 1013 IF NI=0 THEN GOSUB 6500:PRINT "INITIAL ENTRY DONE":GOSUB 10100:CLS
  39. 1015 J=NI+1
  40. 1020 GOSUB 6000:REM INPUT 1 RECORD
  41. 1030 CLS:PRINT F$(2):GOSUB 6100:REM PRINT OUT 1 RECORD
  42. 1040 GOSUB 10200:IF Z9$="N" THEN GOTO 1020
  43. 1050 IF Z9$="A" THEN RETURN
  44. 1060 NI=NI+1:REM NEW RECORD ON FILE
  45. 1070 GOSUB 10400:REM MORE?
  46. 1080 IF Z9$="Y" THEN GOTO 1000 : ELSE RETURN
  47. 2000 REM READ IN FILE FROM TAPE
  48. 2010 CLS:PRINT "PUT DATA TAPE IN TAPE DRIVE":GOSUB 10100
  49. 2015 ' IF ZD$="Y" THEN CMD"T"
  50. 2020 INPUT #-1,NI
  51. 2030 FOR J=0 TO NI:INPUT #-1,AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3):NEXT
  52. 2040 RETURN
  53. 2100 REM WRITE OUT FILE ONTO TAPE
  54. 2105 CLS
  55. 2110 PRINT "PUT DATA TAPE IN TAPE DRIVE":GOSUB 10100
  56. 2115 ' IF ZD$="Y" THEN CMD"T"
  57. 2130 WRITE #-1,NI
  58. 2140 FOR J=0 TO NI:WRITE #-1,AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3):NEXT
  59. 2150 RETURN
  60. 2200 REM READ IN FILE FROM DISK
  61. 2210 CLS:PRINT "PUT DATA DISK IN DISK DRIVE":GOSUB 10100
  62. 2220 ON ERROR GOTO 2290
  63. 2225 PRINT :INPUT "ENTER NAME OF FILE TO READ IN";FI$
  64. 2230 OPEN "I",1,FI$
  65. 2240 INPUT # 1,NI
  66. 2250 FOR J=0 TO NI:INPUT # 1,AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3):FOR JJ=1 TO 4:Z8$=AA$(J,JJ):GOSUB 11000:AA$(J,JJ)=Z8$:NEXT JJ:NEXT
  67. 2260 CLOSE # 1
  68. 2270 RETURN
  69. 2290 PRINT "FILE DOES NOT EXIST":GOSUB 10100:RETURN
  70. 2300 REM WRITE FILE OUT TO DISK
  71. 2305 CLS
  72. 2310 PRINT :PRINT "PUT DATA DISK IN DISK DRIVE":GOSUB 10100
  73. 2315 PRINT :PRINT "PRESENT DISK FILE IS ";FI$;" ";:INPUT "NEW FILE ";FI$
  74. 2320 OPEN "O",1,FI$
  75. 2330 WRITE # 1,NI
  76. 2340 FOR J=0 TO NI:WRITE # 1,AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3):NEXT
  77. 2370 CLOSE # 1
  78. 2380 RETURN
  79. 3000 REM EDIT FILE
  80. 3010 CLS:PRINT " ";F$(2)
  81. 3020 FOR J=0 TO NI
  82. 3030 PRINT USING "## ";J;
  83. 3040 GOSUB 6100
  84. 3050 IF J/12=INT(J/12) THEN GOSUB 4000
  85. 3060 NEXT J
  86. 3062 J=J-1
  87. 3065 IF J/12=INT(J/12) THEN GOTO 3080
  88. 3070 GOSUB 4000
  89. 3080 RETURN
  90. 4000 REM EDIT SUBROUTINE
  91. 4010 K=J
  92. 4020 PRINT
  93. 4025 J=0
  94. 4028 PRINT "CHANGE TYPE CODE TO ZZZZ FOR DELETING"
  95. 4030 INPUT "ENTER # OF ITEM YOU WISH TO EDIT,0 IF NONE";J
  96. 4035 IF J=0 THEN J=K:RETURN
  97. 4040 CLS:PRINT " ";F$(2):PRINT
  98. 4050 PRINT " ";:GOSUB 6100
  99. 4060 PRINT :GOSUB 6000
  100. 4070 CLS:PRINT " ";F$(2)
  101. 4080 FOR J=INT(K/12)*12+1 TO K:PRINT USING "## ";J;:GOSUB 6100:NEXT
  102. 4090 GOTO 4020
  103. 5000 REM LIST FILE WITH ANALYSIS
  104. 5005 INPUT "IS A LINE PRINTER TO BE USED(Y/N)";Z2$:IF Z2$<>"Y" AND Z2$<>"N" THEN GOSUB 10000:GOTO 5005
  105. 5010 CLS:PRINT " LIST MENU":PRINT
  106. 5020 PRINT "1. COMPLETE LIST AS ON FILE
  107. 5030 PRINT "2. LIST BY TYPE
  108. 5050 PRINT "3. END LIST PROGRAM
  109. 5060 PRINT :INPUT "ENTER APPROPRIATE CHOICE";Z9
  110. 5065 IF Z9=3 THEN RETURN
  111. 5070 ON Z9 GOSUB 5200,5300
  112. 5080 GOTO 5010
  113. 5100 RETURN
  114. 5200 REM COMPLETE LIST
  115. 5205 CLS:IF Z2$="Y" THEN PRINT "PUT PAPER INTO PRINTER":GOSUB 10100
  116. 5210 PRINT F$(2):IF Z2$="Y" THEN LPRINT TAB(20);"COMPLETE LIST":LPRINT F$(5)
  117. 5215 V(1)=0:V(2)=0:V(3)=0:V(4)=0
  118. 5220 FOR J = 0 TO NI
  119. 5230 GOSUB 6100:GOSUB 6300:REM 1 RECORD PRINTED
  120. 5233 IF AA$(J,1)="GAS" THEN V(1)=V(1)+BB(J,1):GM=J:OD=BB(J,3) ' REM TOTAL GASOLINE
  121. 5236 V(2)=V(2)+BB(J,2):REM TOTAL COST
  122. 5237 V(3)=OD-BB(0,3):REM TOTAL MILEAGE
  123. 5238 V(4)=BB(GM,3)-BB(0,3):REM TOTAL MILEAGE FOR GASOLINE
  124. 5240 IF J/12 = INT(J/12) THEN PRINT :GOSUB 10100:CLS:PRINT F$(2)
  125. 5250 NEXT J
  126. 5260 PRINT :GOSUB 10100
  127. 5262 PRINT USING "TOTAL GASOLINE USED : #####.##";V(1)
  128. 5264 PRINT USING "TOTAL MILEAGE GONE : ######.##";V(3)
  129. 5265 PRINT USING "TOTAL COST OF USE : $$####.##";V(2)
  130. 5266 PRINT USING "MILES/GALLON : ###.##";V(4)/V(1)
  131. 5267 PRINT USING "TOTAL COST/MILE : $$#####.##";V(2)/V(3)
  132. 5268 IF Z2$<>"Y" THEN GOTO 5280
  133. 5271 LPRINT " ":LPRINT " "
  134. 5272 LPRINT USING "TOTAL GASOLINE USED : #####.##";V(1)
  135. 5274 LPRINT USING "TOTAL MILEAGE GONE : ######.##";V(3)
  136. 5275 LPRINT USING "TOTAL COST OF USE : $$####.##";V(2)
  137. 5276 LPRINT USING "MILES/GALLON : ###.##";V(4)/V(1)
  138. 5277 LPRINT USING "TOTAL COST/MILE : $$#####.##";V(2)/V(3)
  139. 5280 PRINT :GOSUB 10100:RETURN
  140. 5300 REM LIST TYPE
  141. 5305 CLS:INPUT "ENTER TYPE DESIRED";RM$
  142. 5310 V(1)=0:V(2)=0:V(3)=0:V(4)=0
  143. 5315 CLS:PRINT @ 398,"******* COMPUTING *******"
  144. 5320 FOR J=0 TO NI
  145. 5325 IF RM$<>AA$(J,1) THEN GOTO 5390
  146. 5330 V(1)=V(1)+BB(J,2):REM TOTAL COST FOR THIS EXPESE TYPE
  147. 5390 NEXT J
  148. 5400 CLS:PRINT F$(2):IF Z2$="Y" THEN LPRINT TAB(20); "LIST OF TYPE ";RM$:LPRINT F$(5)
  149. 5405 JJ=0
  150. 5410 FOR J=0 TO NI
  151. 5415 IF RM$<>AA$(J,1) THEN GOTO 5450
  152. 5417 JJ=JJ+1
  153. 5420 GOSUB 6100
  154. 5430 GOSUB 6300
  155. 5440 IF JJ/12=INT(JJ/12) THEN GOSUB 10100:CLS:PRINT F$(2):PRINT F$(6)
  156. 5450 NEXT J
  157. 5460 PRINT :GOSUB 10100
  158. 5470 PRINT
  159. 5480 PRINT USING "TOTAL COST FOR THIS EXPENSE TYPE : $$#####.##";V(1)
  160. 5500 IF Z2$<>"Y" THEN GOTO 5550
  161. 5505 LPRINT " ":LPRINT " "
  162. 5510 LPRINT USING "TOTAL COST FOR THIS EXPENSE TYPE : $$#####.##";V(1)
  163. 5530 LPRINT :LPRINT
  164. 5550 PRINT :GOSUB 10100:RETURN
  165. 6000 REM SBR FOR INPUTTING DATA ON 1 PURCHASE
  166. 6005 F$(1)="% %"
  167. 6008 PRINT "EXPENSE TYPES: GAS OIL MAIN TOLL INS PAYM MISC":PRINT
  168. 6010 PRINT USING F$(1);AA$(J,1),:INPUT "TYPE EXPENSE ";AA$(J,1)
  169. 6012 A$=AA$(J,1):IF A$<>"GAS" AND A$<>"OIL" AND A$<>"MAIN" AND A$<>"TOLL" AND A$<>"INS" AND A$<>"PAYM" AND A$<>"MISC" AND A$<>"ZZZZ" THEN GOSUB 10000:GOTO 6008
  170. 6015 PRINT USING F$(1);AA$(J,2),:INPUT "EXP. DESCRIPTION ";AA$(J,2)
  171. 6020 PRINT USING F$(1);AA$(J,3),:INPUT "DATE OF EXPENSE ";AA$(J,3)
  172. 6023 PRINT USING F$(1);AA$(J,4),:INPUT "PLACE OF SERVICE ";AA$(J,4)
  173. 6035 F$(1)=" #########.## "
  174. 6040 PRINT USING F$(1);BB(J,1),:INPUT "QUANT. PURCH ";BB(J,1)
  175. 6050 PRINT USING F$(1);BB(J,2),:INPUT "BILL AMOUNT ";BB(J,2)
  176. 6055 PRINT USING F$(1);BB(J,3),:INPUT "ODOMETER READ. ";BB(J,3)
  177. 6099 RETURN
  178. 6100 REM PRINT 1 LINE OF PORTFOLIO
  179. 6110 PRINT USING F$(4);AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3)
  180. 6120 RETURN
  181. 6300 REM PRINT 1 LINE OF PORTFOLIO ON PRINTER
  182. 6310 IF Z2$<>"Y" THEN RETURN
  183. 6320 LPRINT USING F$(7);AA$(J,1),AA$(J,2),AA$(J,3),AA$(J,4),BB(J,1),BB(J,2),BB(J,3)
  184. 6330 RETURN
  185. 6500 REM INITIAL INPUT
  186. 6510 CLS
  187. 6520 PRINT "INITIAL INPUT ENTRY"
  188. 6522 PRINT "MAKE THIS ENTRY WITH A FULL GAS TANK":PRINT
  189. 6530 AA$(0,1)="GAS":AA$(0,2)="INITIAL"
  190. 6540 INPUT "ENTER DATE(MM/DD/YY)";AA$(0,3)
  191. 6550 INPUT "ENTER ODOMETER READING";BB(0,3)
  192. 6560 RETURN
  193. 7000 REM DELETE SBR COMPUTATION
  194. 7005 K=1:REM K=NO. OF RECORDS NOT DELETED
  195. 7010 FOR J=1 TO NI
  196. 7020 IF AA$(J,1)="ZZZZ" THEN GOTO 7090
  197. 7030 REM DO NOT DELETE RECORD
  198. 7040 FOR J6=1 TO 4:AT$(K,J6)=AA$(J,J6):NEXT
  199. 7050 FOR J6=1 TO 3:BT(K,J6)=BB(J,J6):NEXT
  200. 7060 K=K+1:GOTO 7090
  201. 7090 NEXT J
  202. 7100 K=K-1:NI=K
  203. 7110 FOR J=1 TO NI
  204. 7120 FOR J6=1 TO 4:AA$(J,J6)=AT$(J,J6):NEXT
  205. 7130 FOR J6=1 TO 3:BB(J,J6)=BT(J,J6):NEXT
  206. 7140 NEXT J
  207. 7150 RETURN
  208. 9000 REM FORMATTING VARIABLES
  209. 9020 F$(2)="TYPE DESCRIPT DATE PLACE QUANT. $ AMT. ODOMETER"
  210. 9030 F$(4)="% % % % % % % % ####.# ####.## ######.#"
  211. 9040 F$(5)="TYPE DESCRIPTION DATE PLACE QUANTITY $ AMT. ODOMETER"
  212. 9060 F$(7)="% % % % % % % % ####.# $$###.## ######.#"
  213. 9099 RETURN
  214. 10000 REM INPUT ERROR SBR
  215. 10010 PRINT "INPUT ERROR! TRY AGAIN!":FOR Z9=1 TO 300:NEXT Z9
  216. 10020 RETURN
  217. 10100 INPUT "PRESS ENTER TO CONTINUE";Z9:RETURN
  218. 10200 REM Y,N,A SBR
  219. 10205 Z9$=" "
  220. 10210 INPUT "ENTER Y IF OK,N IF ERROR,A TO ABORT";Z9$
  221. 10220 IF Z9$<>"Y" AND Z9$<>"N" AND Z9$<>"A" THEN GOSUB 10000:GOTO 10205
  222. 10230 RETURN
  223. 10300 REM Y,N SBR
  224. 10305 Z9$=" "
  225. 10310 INPUT "ENTER Y IF OK, N IF ERROR";Z9$
  226. 10320 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000:GOTO 10305
  227. 10330 RETURN
  228. 10400 REM MORE ENTRY? SBR
  229. 10405 Z9$=" "
  230. 10410 INPUT "DO YOU DESIRE MORE ENTRIES(Y/N)";Z9$
  231. 10420 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000:GOTO 10405
  232. 10430 RETURN
  233. 10500 REM ONLY Y/N SBR
  234. 10510 IF Z9$<>"Y" AND Z9$<>"N" THEN GOSUB 10000
  235. 10520 RETURN
  236. 11000 REM ELIMINATES TRAILING BLANKS OF VARIABLE Z8$
  237. 11010 IF RIGHT$(Z8$,1)=" " THEN Z8$=LEFT$(Z8$,LEN(Z8$)-1):GOTO 11010
  238. 11020 RETURN