home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / steel34.zip / SSREMARK.BAS < prev    next >
BASIC Source File  |  1980-01-01  |  33KB  |  810 lines

  1. 3 DEFDBL X / ALL VARIABLES BEGINNING WITH X ARE DOUBLE PRECISION
  2. 4 DEFINT A-W,Y-Z / ALL OTHER VARIABLES ARE INTERGER BY DEFAULT
  3. 5 PRINT FRE(0) / PRINT FREE MEMORY , OPTIONAL
  4. 10 DIM K$(80) / THE CHARACTERS IN THE INPUT SUBROUTINE
  5. 40 DIM XPRT(50),LBL$(50) / THE NUMBERS AND LABEL IN THE BAR CHART
  6. 45 DIM L$(20,20) / THE LINES THAT MAKE UP THE SPREADSHEET
  7. 50 DIM X(500),SCR(500),LIN(500),COL(500),CT(500),TF(500),CF(500),XCST(500),DS(500)  /
  8. 51 REM X is the value of each number SCR is the screen the number is on,LIN is the line the number is on, COL is the column the number is on 
  9. 52 REM CT is the calculation type, TF is the target field, CF is the secondary calculation field, XCST is the constant if any for calculations, DS is the display type
  10. 60 PRINT FRE(0) / PRINT FREE MEMORY
  11. 70 CH = 8 / CH = THE BACKSPACE CHARACTER
  12. 75 PRINT FRE(0)
  13. 80 CKT = 1 / INITIALIZE THE COLUMN COUNT TO 1
  14. 90 CKT = 1
  15. 95 LKT = 1 / INITIALIZE THE LINE COUNT TO 1
  16. 98 SN = 1 / INITIALIZE THE SCREEN TO 1
  17. 100 GOSUB 50000 / PRINT INTRO
  18. 200 GOTO 40000 / ASK FOR FILE NAME OF SPREADSHEET
  19. 500 REM ******* CLS
  20. 510 CLS   / CLEAR SCREEN
  21. 520 RETURN
  22. 600 REM ** LOCATE COLUMN = 1
  23. 610 TB = 1
  24. 650 LOCATE LI,TB / LOCATE THE SPOT ON THE SCREEN
  25. 660 RETURN
  26. 4000 REM INPUT A NUMBER / looks for a number in the spot where the * is
  27. 4100 FOR T = 1 TO MAXN / FOR ALL NUMBERS
  28. 4110 IF SCR(T) = SN AND LIN(T) = LKT THEN 4200 / IF THE SCREEN NUMBER AND LINE NUMBER MATCH THEN 4200
  29. 4120 NEXT T / TRY NEXT NUMBER
  30. 4125 N = 0 / NO NUMBER IN THIS SPOT
  31. 4126 PRINT "                 THERE IS NO NUMBER IN THIS SPOT   TRY AGAIN"
  32. 4127 PRINT "You may put a number here using option 3 or move the * to where a number exists"
  33. 4128 PRINT "                         PRESS ANY KEY TO CONTINUE "
  34. 4129 IF INKEY$ = "" THEN 4129 / STAY HERE UNTILL A KEY IS PRESSED
  35. 4130 RETURN
  36. 4200 IF CKT < (COL(T) - 5) OR CKT > (COL(T) + 5) OR CT(T) = 30 THEN 4120 / IF THE * IS NOT WITHIN 5 SPACES OF THE NUMBER OR THE NUMBER HAS BEEN DELETED THEN RETURN
  37. 4210 N = T /THIS IS THE NUMBER IN THIS SPOT
  38. 4220 RETURN
  39. 5000 REM - FIND TARGET FIELD
  40. 5005 CFFLG = 5
  41. 5010 GOSUB 9000 /CLEAR LINES 20-24
  42. 5020 PRINT "MOVE THE CURSOR TO THE TARGET FIELD THEN PRESS RETURN "
  43. 5060 MFLG = 5
  44. 5070 GOSUB 60000 / ALLOWS YOU TO MOVE THE CURSOR AROUND
  45. 5080 MFLG = 1
  46. 5085 GOSUB 4000 / CHECK TO SEE IF THERE IS A NUMBER IN THIS SPOT
  47. 5090 IF N = 0 THEN 5000 / IF THERE IS NO NUMBER IN THIS SPOT THEN TRY AGAIN
  48. 5100 TF(NH) = N / TARGET FIELD = THE NUMBER IN THIS SPOT
  49. 5110 TFH = N /TARGET FIELD HOLD EQUALS THE NUMBER IN THIS SPOT
  50. 5190 CFFLG = 1
  51. 5200 RETURN
  52. 5500 REM - FIND TARGET FIELD
  53. 5505 CFFLG = 5
  54. 5510 GOSUB 9000 /CLEAR LINES 20-24
  55. 5520 PRINT "MOVE THE CURSOR TO ANOTHER FIELD YOU WANT TO ADD THEN PRESS RETURN"
  56. 5560 MFLG = 5 /TURN MOVE FLAG ON
  57. 5570 GOSUB 60000 /ALLOW YOU TO MOVE THE * AROUND
  58. 5580 MFLG = 1 /TURN MOVE FLAG OFF
  59. 5585 GOSUB 4000 /CHECK TO SEE IF THERE IS A NUMBER HERE
  60. 5590 IF N = 0 THEN 5500 / IF THERE IS NO NUMBER HERE TRY AGAIN
  61. 5600 TF(N) = TFH /TARGERT FIELD OF N EQUALS TARGER FIELD HOLD
  62. 5610 CT(N) = 1 /CALCULATION TYPE IS ADD
  63. 5690 CFFLG = 1
  64. 5700 RETURN
  65. 6000 REM - FIND SECONDARY CALCULATIN FIELD
  66. 6005 SFLG = 5 
  67. 6010 GOSUB 9000 /CLEAR LINES 21-24
  68. 6020 PRINT "MOVE THE CURSOR TO THE SECONDARY CALCULATION FIELD THEN PRESS RETURN"
  69. 6060 MFLG = 5 / TURN MOVE FLAG ON
  70. 6070 GOSUB 60000 /GOTO INPUT SUBROUTINE TO MOVE THE * TO THE CORRECT FIELD
  71. 6080 MFLG = 1
  72. 6085 GOSUB 4000 / CHECK TO SEE IF THERE IS A NUMBER WHERE THE * IS
  73. 6090 IF N = 0 THEN 6000 / IF THERE IS NOT A NUMBER HERE TRY AGAIN
  74. 6100 CF(NH) = N / CALCULATION FIELD EQUALS THIS NUMBER
  75. 6110 CF(N) = NH / THE CALCULATION FIELD OF THE SECONDARY CALCULATION NUMBER EQUALS THE SOURCE FIELD
  76. 6120 TF(N) = TF(NH) / THE TARGET FIELD EQUALS THE TARGET FIELD OF N HOLD
  77. 6130 CT(N) = CT(NH) / THE CALCULATION TYPE OF THE SECONDARY FIELD EQUALS THE CALCULATION TYPE OF THE SOURCE FIELD
  78. 6190 SFLG = 1
  79. 6200 RETURN
  80. 6600 REM - FIND SECONDARY CALCULATIN FIELD
  81. 6605 SFLG = 5
  82. 7000 REM -  GET CONSTANT FOR CALCULATION
  83. 7100 GOSUB 9000 /CLEAR LINES 21-24
  84. 7110 PRINT "ENTER THE CONSTANT "
  85. 7120 GOSUB 60180 /INPUT A DOUBLE PRECISION NUMBER
  86. 7130 XCST(NH) = DT# /CONSTANT EQUALS THE VALUE RETURNED FROM THE SUBROUTINE
  87. 7140 RETURN
  88. 8000 REM ***** FILE NAME ACCEPLABLE TEST ************
  89. 8010 TEST = 1
  90. 8100 FOR Q = 1 TO LEN(A$) / FOR EACH CHARACTER IN A$
  91. 8110 K$(Q) = MID$(A$,Q,1) / K$ IS THE CHARACTER
  92. 8120 C = ASC(K$(Q)) 
  93. 8130 IF C < 48 OR C > 122 THEN TEST = 4 / IF NOT A NUMBER OR LETTER THEN TEST IS NEGITIVE
  94. 8140 IF Q = 1 AND ( C < 65 OR C > 122 ) THEN TEST = 4 /IF THE FIRST CHARACTER IS NOT A LETTER THEN TEST IS NEGITIVE
  95. 8150 NEXT Q /NEXT CHARACTER
  96. 8190 RETURN
  97. 9000 REM CLEAR BOTTOM LINES
  98. 9010 LI = 21
  99. 9015 GOSUB 600 / LOCATE 21ST LINE
  100. 9020 FOR T = 1 TO 4 
  101. 9030 PRINT "                                                                              "; CLEAR LINES 21-24
  102. 9040 NEXT T
  103. 9041 PRINT "      ";
  104. 9042 GOSUB 600
  105. 9050 RETURN
  106. 20000 REM INPUT A NUMBER
  107. 20100 GOSUB 9000 /CLEAR LINES 21-24
  108. 20110 REM FIND NUMBER
  109. 20120 GOSUB 4000 / CHECK IF THERE IS A NUMBER HERE
  110. 20130 IF N = 0 THEN RETURN /IF THERE IS A NUMBER HERE THEN RETURN
  111. 20140 NH= N / NHOLD EQUALS N
  112. 20200 LKT = LIN(T) /LINE COUNT = LINE OF T , T EQUALS N
  113. 20210 CKT = COL(T) /COLUMN COUNT = COLUMN OF T
  114. 20810 GOSUB 60180 /INPUT DOUBLE PRECISION SUBROUTINE
  115. 20815 T = NH /RESET T EQUALS NHOLD
  116. 20820 IF DS(T) = 2 THEN GOSUB 49020 /IF DISPLAY TYPE IS A DOLLAR AND CENTS THEN GOSUB 49020
  117. 20822 T2= LEN(A$) /T2 IS THE LENGTH OF A$
  118. 20823 T$ = "__________" 
  119. 20824 B$ = MID$(T$,T2) /B$ EQUALS A STRING OF UNDERLINES
  120. 20826 A$ = B$ + A$ /ADD UNDERLINES TO THE FRONT OF THE NUMBER
  121. 20828 XC = DT# - X(T) / XC THE CHANGE IN X EQUALS 
  122. 20830 X(T) = DT# /THE VALUE OF THE NUMBER EQUALS THE VALUE RETURNED FROM THE SUBROUTINE
  123. 20835 GOSUB 21130
  124. 20838 T = NH /RESET T TO NHOLD
  125. 20840 IF CT(T) > 0 THEN GOTO 27000 /IF THERE IS A CALCULATION SPECIFIED FOR THIS NUMBER THEN GOTO 27000
  126. 20850 RETURN
  127. 21000 REM input overlay line
  128. 21010 GOSUB 9000 /CLEAR LINES 21-24
  129. 21020 PRINT "ENTER THE STRING "
  130. 21100 MAX = 77 /MAXIMUM LENGTH OF THE STRING
  131. 21120 GOSUB 62030 /INPUT SUBROUTINE FOR STRINGS
  132. 21130 GOSUB 21200 /PUT NEW STRING INTO THE LINE
  133. 21140 LI = LKT 
  134. 21150 GOSUB 600 /LOCATE THE START OF THE LINE AT COLUMN ONE
  135. 21155 PRINT L$(SN,LKT) /PRINT THE LINE ONE THE SCREEN
  136. 21160 LI = LKT /LINE NUMBER EQUALS LINE COUNT
  137. 21170 TB = CKT /TAB EQUALS COLUMN COUNT
  138. 21180 GOSUB 650 /LOCATE
  139. 21185 PRINT "*"  
  140. 21190 RETURN
  141. 21200 IF L$(SN,LKT) = "" THEN L$(SN,LKT) = "                                                                             " / IF THERE IS NO STRING THEN SET EQUAL TO SPACES
  142. 21205 L$ = L$(SN,LKT) /L$ EQUALS THE CURRENT LINE
  143. 21210 B$ = MID$(L$,1,CKT) /B$ EQUALS THE LEFT PART OF THE LINE
  144. 21220 T = LEN(A$) /LENGTH OF NEW STRING TO ADD
  145. 21230 T = CKT + T+1  
  146. 21240 C$ = MID$(L$,T) /RIGHT PART OF THE LINE
  147. 21250 L$ = B$ + A$ + C$ / THE ENTIRE LINE
  148. 21255 L$(SN,LKT) = LEFT$(L$,78) /TRUNCATE EXCESS COLUMNS
  149. 21260 RETURN
  150. 22000 REM ENTER A NEW NUMBER SUBROUTINE
  151. 22010 GOSUB 9000 /CLEAR LINES 21-24
  152. 22020 PRINT " HOW DO YOU WANT THIS NUMBER DISPLAYED "
  153. 22030 PRINT " 1 - Standard   2 - Dollar and cents format 0 - None"
  154. 22040 GOSUB 60000 /INPUT SUBROUTINE
  155. 22050 IF DT# < 0 OR DT# > 2 THEN 22000 /IN OPTION OUT OF RANGE THEN TRY AGAIN
  156. 22055 IF DT# = 0 THEN 31000 /IF NO NUMBER WANTED HERE THEN 31000
  157. 22060 IF DT# = 2 THEN 22500 /IF DOLLAR AND CENTS AMOUNT THEN 22500
  158. 22110 MAXN = MAXN + 1 /INCREMENT MAXIMUM NUMBER
  159. 22120 SCR(MAXN) = SN /THE SCREEN OF NEW NUMBER EQUALS CURRENT SCREEN
  160. 22130 LIN(MAXN) = LKT /THE LINE OF NEW NUMBER EQUALS CURRENT LINE
  161. 22140 COL(MAXN) = CKT /THE COLUMN OF NEW NUMBER EQUALS CURRENT LINE
  162. 22150 A$ = "__________0"
  163. 22200 GOSUB 21130 /PUT __________0 ON THE SCREEN
  164. 22210 GOSUB 9000 /CLEAR LINES 21-24
  165. 22220 PRINT "DO YOU WANT PLACE A NEW NUMBER RIGHT BELOW THIS ONE"
  166. 22230 PRINT "  1 - YES  2 - NO"
  167. 22240 GOSUB 60000 /INPUT SUBROUTINE
  168. 22250 IF DT# < 1 OR DT# > 2 THEN 22210 /IF OPTION OUT OF RANGE THEN TRY AGAIN
  169. 22260 IF DT# = 2 THEN RETURN  /IF OPTION EQUALS 2 THEN RETURN
  170. 22270 LKT = LKT + 1 /LINE COUNT EQUALS LINE COUNT + 1
  171. 22275 GOSUB 22400 /ERASE THE *
  172. 22280 GOTO 22110 /PUT THE NEW NUMBER IN
  173. 22300 RETURN
  174. 22400 REM ERASE *
  175. 22410 LI = LKT - 1 /LINE EQUALS LINE COUNT MINUS ONE
  176. 22420 TB = CKT     /TAB EQUALS COLUMN COUNT
  177. 22430 GOSUB 650    /LOCATE
  178. 22440 PRINT " ";   /OVER PRINT THE *
  179. 22450 RETURN
  180. 22500 REM ENTER A NEW NUMBER SUBROUTINE
  181. 22600 GOSUB 9000  /CLEAR LINES 21-24
  182. 22610 MAXN = MAXN + 1 /INCREMENT MAXIMUM NUMBER
  183. 22615 DS(MAXN) = 2  /DISPLAY TYPE EQUALS 2
  184. 22620 SCR(MAXN) = SN   /SCREEN OF NEW NUMBER EQUALS CURRENT SCREEN
  185. 22630 LIN(MAXN) = LKT  /LINE OF NEW NUMBER EQUALS CURRENT LINE
  186. 22640 COL(MAXN) = CKT  /COLUMN OF NEW NUMBER EQUALS CURRENT NUMBER
  187. 22650 A$ = "$_________0"  
  188. 22700 GOSUB 21130 / PUT $__________0 IN THE LINE
  189. 22710 GOSUB 9000   /CLEAR LINES
  190. 22720 PRINT "DO YOU WANT PLACE A NEW NUMBER RIGHT BELOW THIS ONE"
  191. 22730 PRINT "  1 - YES  2 - NO"
  192. 22740 GOSUB 60000
  193. 22750 IF DT# < 1 OR DT# > 2 THEN 22710 /IF OPTION OUT OF RANGE THEN TRY AGAIN
  194. 22760 IF DT# = 2 THEN RETURN  /IF NO NEW NUMBER RIGHT BELOW THIS NUMBER
  195. 22770 LKT = LKT + 1  /INCREMENT LINE COUNT
  196. 22775 GOSUB 22400  /ERASE *
  197. 22780 GOTO 22610   /PUT NEW NUMBER IN
  198. 22800 RETURN
  199. 23000 REM DEFINE CALCULATION
  200. 23100 GOSUB 9000 /CLEAR LINES 21-24
  201. 23200 REM DEFINE CALCULATION
  202. 23210 IF N = 0 THEN 31000 /IF THERE IS NO NUMBER HERE THEN RETURN
  203. 23215 NH = N   /NHOLD EQUALS N
  204. 23220 PRINT "1.ADD   2.SUB   3.MULT   4.DIVIDE BY   5.DIVIDE INTO   6.MAX   7.MIN   8.ADD K"
  205. 23230 PRINT "9.MULT K    10.N-K   11.K-N   12.N/K   13.K/N    14. to 20. Custom subroutines"
  206. 23240 PRINT "21.ABS  22.ATN  23.COS  24.EXP  25.LOG 26.SIN 27.SQR 28.SQ  29.TAN  30.DELETE"
  207. 23250 PRINT "        Enter the type of calculation you want then press return.   0 for none";
  208. 23260 LI = 24  /LINE NUMBER EQUALS 24
  209. 23270 GOSUB 600  / LOCATE
  210. 23300 GOSUB 60000  /INPUT SUBROUTINE
  211. 23305 IF DT# = 0 THEN 31000  /IF NONE THEN BACK TO OPTIONS
  212. 23310 CT(N) = DT#  /CALCULATION TYPE EQUALS THE VALUE RETURNED FROM THE INPUT SUBROUTINE
  213. 23320 ON DT# GOSUB 24000,24100,24200,24300,24400,24500,24600,24700,24800,24900,25000,25100,25200,25300,25400,25500,25600,25700,25800,25900,24000,24000,24000,24000,24000,24000,24000,24000,24000,52000
  214. 23340 GOTO 31000
  215. 24000 REM - ADD ROUTINE
  216. 24010 GOSUB 5000  /INPUT TARGET FIELD
  217. 24020 GOSUB 9000  /CLEAR LINES 21-24
  218. 24030 PRINT " DO YOU WANT TO ADD ANY MORE NUMBERS TO THIS TARGET FIELD "
  219. 24035 PRINT "   1 - YES  2 - NO "
  220. 24040 GOSUB 60000  /INPUT SUBROUTINE
  221. 24050 IF DT# = 2 THEN RETURN  /IF OPTION 2 THEN RETURN
  222. 24060 GOSUB 5500 /INPUT OTHER FIELDS TO ADD
  223. 24090 GOTO 24020
  224. 24100 REM - SUBTRACT
  225. 24110 GOSUB 5000 /INPUT TARGET FIELD
  226. 24120 RETURN
  227. 24200 REM MULTIPLY
  228. 24210 GOSUB 5000 /INPUT TARGET FILED
  229. 24220 GOSUB 6000 /INPUT SECONDARY CALCULATION FIELD
  230. 24230 RETURN
  231. 24300 REM DIVIDE BY ANOTHER NUMBER
  232. 24310 GOSUB 5000  /INPUT TARGET NUMBER
  233. 24320 GOSUB 6000  /INPUT SECONDARY CALCULATION NUMBER
  234. 24325 CT(N) = 5   /CALCULATION TYPE OF SECONDARY NUMBER EQUALS 5
  235. 24330 RETURN
  236. 24400 REM DIVIDE INTO ANOTHER NUMBER
  237. 24410 GOSUB 5000   /INPUT TARGET NUMBER
  238. 24420 GOSUB 6000   /INPUT SECONDARY CALCULATION NUMBER
  239. 24425 CT(N) = 4    /CALCULATION TYOE OF SECONDARY NUMBER EQUALS 4
  240. 24430 RETURN
  241. 24500 REM MAXIMUM
  242. 24510 GOSUB 5000   /INPUT TARGET NUMBER
  243. 24520 X(N) = -1E+07  /INITIALIZE X TO A LOW NUMBER
  244. 24590 RETURN
  245. 24600 REM MIN
  246. 24610 GOSUB 5000  /INPUT TARGER NUMBER
  247. 24620 X(N) = 999999999#  /INITIALIZE X TO A HIGH NUMBER
  248. 24690 RETURN
  249. 24700 REM ADD TO A CONSTANT
  250. 24710 GOSUB 5000  /INPUT TARGET NUMBER
  251. 24720 GOSUB 7000  /INPUT CONSTANT
  252. 24790 RETURN
  253. 24800 REM MULTIPY BY A CONSTANT
  254. 24810 GOSUB 5000  /INPUT TARGET NUMBER
  255. 24820 GOSUB 7000  /INPUT CONSTANT
  256. 24890 RETURN
  257. 24900 REM SUBTACT FROM A CONSTANT
  258. 24910 GOSUB 5000  /INPUT TARGET NUMBER
  259. 24920 GOSUB 7000  /INPUT CONSTANT
  260. 24990 RETURN
  261. 25000 REM SUBTACT A CONSTANT FROM
  262. 25010 GOSUB 5000  /INPUT TARGER NUMBER
  263. 25020 GOSUB 7000  /INPUT CONSTANT
  264. 25090 RETURN
  265. 25100 REM DIVIDE BY A CONSTANT
  266. 25110 GOSUB 5000  /INPUT TARGET NUMBER
  267. 25120 GOSUB 7000  /INPUT CONSTANT
  268. 25190 RETURN
  269. 25200 REM DIVIDE INTO A CONSTANT
  270. 25210 GOSUB 5000  /INPUT TARGER NUMBER
  271. 25220 GOSUB 7000  /INPUT CONSTANT
  272. 25300 REM CUSTOM 13
  273. 25390 RETURN
  274. 25400 REM CUSTOM 14
  275. 25490 RETURN
  276. 25500 REM CUSTOM 15
  277. 25590 RETURN
  278. 25600 REM CUSTOM 16
  279. 25690 RETURN
  280. 25700 REM CUSTOM 17
  281. 25790 RETURN
  282. 25800 REM CUSTOM 18
  283. 25890 RETURN
  284. 25900 REM CUSTOM 19
  285. 25990 RETURN
  286. 26000 REM ABS
  287. 26010 X = ABS(X)
  288. 26030 RETURN
  289. 26100 REM ATN
  290. 26110 X = ATN(X)
  291. 26130 RETURN
  292. 26200 REM COS
  293. 26210 X = COS(X)
  294. 26230 RETURN
  295. 26300 REM EXP
  296. 26310 X = EXP(X)
  297. 26330 RETURN
  298. 26400 REM LOG 
  299. 26410 X = LOG(X)
  300. 26430 RETURN
  301. 26500 REM SIN  
  302. 26510 X = SIN(X)
  303. 26530 RETURN
  304. 26600 REM SQR
  305. 26610 X = SQR(X)
  306. 26630 RETURN
  307. 26700 REM SQUARED  
  308. 26710 X = X * X 
  309. 26730 RETURN
  310. 26800 REM TAN  
  311. 26810 X = TAN(X)
  312. 26830 RETURN
  313. 26900 REM 
  314. 26910 X = X(T2) + XC 
  315. 26930 RETURN
  316. 27000 REM PERFORM CALCULATIONS
  317. 27050 T2 = TF(T)  /T2 IS THE TARGER FIELD
  318. 27060 XK = XCST(T) /XK IS THE CONSTANT FOR CALCULATION 
  319. 27070 S = CF(T)    /S IS THE SECONDARY CALCULATION FIELD
  320. 27075 XS = X(S)    /XS IS THE VALUE OF THE SECONDARY CALCULATION FIELD
  321. 27080 X = X(T)     /X IS THE VALUE OF THE SOURCE FIELD
  322. 27100 ON CT(T) GOSUB 28000,28100,28200,28300,28400,28500,28600,28700,28800,28900,29000,29100,29200,29300,29400,29500,29600,29700,29800,29900,26000,26100,26200,26300,26400,26500,26600,26700,26800,26900
  323. 27110 X(T2) = X     /SET THE TARGET FIELD TO X
  324. 27120 T$ = STR$(X)  /CONVERT X TO A STRING
  325. 27130 T3 = LEN(T$)  /T3 IS THE LENGTH OF T$
  326. 27140 T1$ = "__________"
  327. 27150 B$ = MID$(T1$,T3)
  328. 27160 A$ = B$ + T$  /A$ EQUALS UNDERLINES PLUS THE NUMBER
  329. 27165 A$ = LEFT$(A$,10)  /A$ EQUALS THE LEFT 10 CHARACTERS OF A$
  330. 27167 DT# = X  
  331. 27168 IF DS(T2) = 2 THEN GOSUB 49020  /IF DOLLAR AND CENTS DISPLAY TYPE THEN
  332. 27170 L = LIN(T2)  /LINE 
  333. 27180 C = COL(T2)  /COLUMN
  334. 27190 S = SCR(T2)  /SCREEN
  335. 27200 IF L$(S,L) = "" THEN L$(S,L) = "                                                                             "
  336. 27205 L$ = L$(S,L) 
  337. 27210 B$ = MID$(L$,1,C)
  338. 27220 T = LEN(A$)
  339. 27230 T = C + T+1
  340. 27240 C$ = MID$(L$,T)
  341. 27250 L$(S,L) = B$ + A$ + C$  /ENTIRE LINE
  342. 27260 IF S = SN THEN GOSUB 27800  /IF THE LINE IS ON THE CURRENT SCREEN THEN PRINT THE LINE
  343. 27300 IF CT(T2) = 0 THEN GOTO 31000  /IF THERE IS NO CALCULATION TYPE THE GOTO OPTIONS
  344. 27310 T = T2  /THE FIELD TO CALCULATE IS THE TARGET FIELD
  345. 27320 GOTO 27000  /CONTINUE WITH CALCULATIONS FOR TARGET FIELD
  346. 27800 REM PRINT CALCULATED LINE ON SCREEN
  347. 27810 LI = L   /LINE NUMBER
  348. 27820 GOSUB 600   /LOCATE
  349. 27830 PRINT L$(SN,L)  /PRINT THE LINE
  350. 27840 LI = LKT   /LINE EQUALS LINE COUNT
  351. 27850 TB = CKT   /TAB EQUALS COLUME COUNT
  352. 27855 GOSUB 650  /LOCATE
  353. 27860 RETURN
  354. 28000 REM ADD TO A FIELD
  355. 28010 X = X(T2) + XC /VALUE OF THE TARGET FIELD PLUS THE CHANGE IN SOURCE FIELD
  356. 28030 RETURN
  357. 28100 REM SUBTRACT 
  358. 28110 X = X(T2) - XC  /VALUE OF THE TARGET FIELD MINUS THE CHANGE IN THE TARGET FIELD
  359. 28130 RETURN
  360. 28200 REM MULT 
  361. 28210 X = X(T)*XS /VALUE OF THE SOURCE FIELD TIMES VALUE OF THE SECONDARY FIELD
  362. 28230 RETURN
  363. 28300 REM DIVIDE BYFIELD
  364. 28305 IF XS = 0 THEN X = 0
  365. 28306 IF XS = 0 THEN RETURN  /DO NOT DIVIDE BY 0
  366. 28310 X = X(T)/XS  
  367. 28330 RETURN
  368. 28400 REM DIVIDE INTO 
  369. 28405 IF X(T) = 0 THEN X = 0
  370. 28406 IF X(T) = 0 THEN RETURN  /DO NOT DIVIDE BY 0
  371. 28410 X = XS/X(T) 
  372. 28430 RETURN
  373. 28500 REM MAX 
  374. 28510 IF X(T) > X(T2) THEN X = X(T) ELSE X =X(T2)  /IF SOURCE FIELD IS GREATER THEN THE TARGET FIELD THEN TARGET FIELD EQUALS THE SOURCE FIELD
  375. 28530 RETURN
  376. 28600 REM MIN 
  377. 28610 IF X(T) < X(T2) THEN X = X(T) ELSE X = X(T2)  /IF SOURCE FIELD IS LESS THEN THE TARGET FIELD THEN TARGET FIELD EQUALS THE SOURVE FIELD
  378. 28630 RETURN
  379. 28700 REM ADD CONSTANT  
  380. 28710 X = X(T) + XK 
  381. 28730 RETURN
  382. 28800 REM MULTIPLY CONSTANT
  383. 28810 X = X(T)* XK
  384. 28830 RETURN
  385. 28900 REM SUBTRACT CONSTANT
  386. 28910 X = X(T)-XK
  387. 28930 RETURN
  388. 29000 REM SUBTRACT FROM CONSTANT
  389. 29010 X = XK - X(T)
  390. 29030 RETURN
  391. 29100 REM DIVIDE BY A CONSTANT
  392. 29110 X = X(T)/XK
  393. 29130 RETURN
  394. 29200 REM DIVIDE INTO A CONSTANT
  395. 29205 IF X(T) = 0 THEN X = 0
  396. 29206 IF X(T) = 0 THEN RETURN  /DO NOT DIVIDE BY 0
  397. 29210 X = XK/X(T)
  398. 29230 RETURN
  399. 29300 REM CUSTOM 14 
  400. 29330 RETURN
  401. 29400 REM CUSTOM 15
  402. 29430 RETURN
  403. 29500 REM CUSTOM 16
  404. 29530 RETURN
  405. 29600 REM CUSTOM 17
  406. 29630 RETURN
  407. 29700 REM CUSTOM 18
  408. 29730 RETURN
  409. 29800 REM CUSTOM 19
  410. 29830 RETURN
  411. 29900 REM CUSTOM 20
  412. 29930 RETURN
  413. 30000 REM START SPREAD SHEET
  414. 30010 GOSUB 500  /CLEAR SCREEN
  415. 30100 REM 
  416. 30200 FOR T = 1 TO 20 
  417. 30210 PRINT L$(SN,T) /PRINT THE SPREADSHEET LINES
  418. 30220 NEXT T
  419. 30300 LI = 1
  420. 30310 GOSUB 600  /LOCATE 
  421. 30320 PRINT "*"  
  422. 30330 LKT = 1  /INITIALIZE LINE COUNT TO 1
  423. 30340 CKT = 1  /INITIALIZE COLUMN COUNT TO 1
  424. 31000 REM ***  MENU
  425. 31010 IF CFFLG = 5 THEN 5000  /IF CALCULATION FLAG
  426. 31030 IF SFLG = 5 THEN 6000   /IS SECONDARY FLAG
  427. 31050 LI = 21   /LINE 21
  428. 31060 GOSUB 600  /LOCATE LINE 21
  429. 31070 PRINT "***    ENTER THE OPTION NUMBER THEN PRESS RETURN ***             ON SCREEN ";SN
  430. 31080 PRINT "0-EXIT  1-INPUT NUMBER  2-INPUT OVERLAY LINE 3-NEW NUMBER 4-DEFINE CALCULATION "  
  431. 31090 PRINT "5-CLEAR      6-SAVE      7-BARCHART     8-PRINT SCREEN     9-PRINT DESCRIPTION "
  432. 31300 LI = 25  / LINE 25
  433. 31310 GOSUB 600 /LOCATE LINE 25
  434. 31320 PRINT "MOVE THE * USING A,Q,S,D,F,G,E,R,X,C              CHANGE SCREENS USING I,J,K,M";
  435. 31330 LI = 24  /LINE 24
  436. 31340 GOSUB 600  /LOCATE
  437. 31490 MFLG = 5   /MOVE FLAG ON
  438. 31500 GOSUB 60000  /INPUT SUBROUTINE
  439. 31505 MFLG = 1     /MOVE FLAG OFF
  440. 31507 IF DT# = 0 THEN 51200  / IF EXIT THE PROGRAM THEN 51200
  441. 31510 ON DT# GOSUB 20000,21000,22000,23000,37000,41000,46000,45000,44000
  442. 31900 GOTO 31000
  443. 32000 REM*** MOVE CURSER AROUND 
  444. 34000 REM TEST FOR MOVE CURSER
  445. 34010 CFLG = 0
  446. 34100 IF C = 65 OR C = 97 THEN CFLG = 1    /A
  447. 34110 IF C = 83 OR C = 115 THEN CFLG = 2   /S
  448. 34120 IF C = 68 OR C = 100 THEN CFLG = 3   /D
  449. 34130 IF C = 70 OR C = 102 THEN CFLG = 4   /F
  450. 34140 IF C = 69 OR C = 101 THEN CFLG = 5   /E
  451. 34150 IF C = 88 OR C = 120 THEN CFLG = 6   /X
  452. 34152 IF C = 82 OR C = 114 THEN CFLG = 7   /R
  453. 34154 IF C = 67 OR C = 99 THEN CFLG = 8    /C
  454. 34156 IF C = 71 OR C = 103 THEN CFLG = 9   /G
  455. 34158 IF C = 81 OR C = 113 THEN CFLG = 10  /Q
  456. 34160 IF C = 73 OR C = 105 THEN CFLG = 11  /I
  457. 34163 IF C = 74 OR C = 106 THEN CFLG = 12  /J
  458. 34165 IF C = 75 OR C = 107 THEN CFLG = 13  /K
  459. 34175 IF C = 77 OR C = 109 THEN CFLG = 14  /L
  460. 34180 IF CFLG > 10 THEN 36000   /IF MOVE SCREEN THEN 36000
  461. 34200 IF CFLG = 0 THEN RETURN   /IF NO MOVEMENT THEN RETURN
  462. 34300 REM OVERPRINT OLD LINE
  463. 34310 TB = CKT  /TAB EQUALS COLUMN COUNT
  464. 34320 LI = LKT  /LINE EQUALS LINE COUNT
  465. 34400 GOSUB 650  /LOCATE
  466. 34410 L$ = L$(SN,LKT)  /THE LINE
  467. 34420 A$ =  MID$(L$,CKT,1)  /THE CHARARACTER IN THE LINE WHERE THE * WAS
  468. 34430 IF A$ = "" THEN PRINT " " ELSE PRINT A$  /PRINT OVER THE *
  469. 34500 ON CFLG GOSUB 35000,35100,35200,35300,35400,35500,35450,35550,35350,35050
  470. 34510 TB = CKT   /TAB EQUALS COLUMN COUNT
  471. 34520 LI = LKT   /LINE EQUALS LINE COUNT
  472. 34530 GOSUB 650  /LOCATE
  473. 34540 PRINT "*"  
  474. 34550 LI = 24    
  475. 34560 TB = 2
  476. 34570 GOSUB 650  /LOCATE
  477. 34580 RETURN
  478. 35000 REM MOVE FIVE LEFT
  479. 35010 CKT = CKT - 5    /SUBTRACT FIVE FROM COLUMN COUNT
  480. 35020 IF CKT < 1 THEN CKT = 1   /CAN't be less then one
  481. 35040 RETURN
  482. 35050 REM MOVE 20 LEFT  
  483. 35060 CKT = CKT - 20    /SUBTRACT TWENTY FROM COLUMN COUNT
  484. 35070 IF CKT < 1 THEN CKT = 1  /CAN't be less then one
  485. 35080 RETURN
  486. 35100 REM ** LEFT ONE SPACE
  487. 35110 CKT = CKT - 1     /SUBTRACT ONE FROM COLUMN COUNT
  488. 35120 IF CKT < 1 THEN CKT = 1  /CAN't be less then one
  489. 35130 RETURN
  490. 35200 REM ** RIGHT ONE SPACE
  491. 35210 CKT = CKT + 1  /ADD ONE TO COLUMN COUNT
  492. 35220 IF CKT > 75 THEN CKT = 75  /CAN't be more then 75
  493. 35230 RETURN
  494. 35300 CKT = CKT + 5   /ADD FIVE TO COLUMN COUNT
  495. 35310 IF CKT > 75 THEN CKT = 75 /CAN't be more then 75
  496. 35320 RETURN
  497. 35350 CKT = CKT + 20  /ADD 20 TO COLUMN COUNT
  498. 35360 IF CKT > 75 THEN CKT = 75  /CAN't be more then 75
  499. 35370 RETURN
  500. 35400 REM ** UP ONE LINE
  501. 35410 LKT = LKT - 1  /SUBTRACT ONE FROM LINE COUNT
  502. 35420 IF LKT < 1 THEN LKT = 1 /CAN't be less then 1
  503. 35430 RETURN
  504. 35450 REM ** UP FOUR LINE
  505. 35460 LKT = LKT - 4  /SUBTRACT 4 FROM LINE COUNT
  506. 35470 IF LKT < 1 THEN LKT = 1 /CAN't be less then one
  507. 35480 RETURN
  508. 35500 REM ** DOWN ONE LINE
  509. 35510 LKT = LKT + 1 /ADD ONE TO LINE COUNT
  510. 35520 IF LKT > 20 THEN LKT = 20 /CAN't be more then 20
  511. 35530 RETURN
  512. 35550 REM ** DOWN FOUR LINE
  513. 35560 LKT = LKT + 4  /ADD FOUR TO LINE COUNT
  514. 35570 IF LKT > 20 THEN LKT = 20  /CAN't be more then 20
  515. 35580 RETURN
  516. 35600 REM SCREEN UP
  517. 35610 SN = SN - 4  /SUBTRACT FOUR FROM SCREEN COUNT
  518. 35620 IF SN < 1 THEN SN = 1 /CAN't be less then 1
  519. 35630 RETURN
  520. 35700 REM SCREEN LEFT
  521. 35710 SN = SN - 1  /SUBTRACT ONE FROM SCREEN COUNT
  522. 35720 IF SN < 1 THEN SN = 1 /CAN't be less then 1
  523. 35730 RETURN
  524. 35800 REM SCREEN RIGHT
  525. 35810 SN = SN + 1  /ADD ONE TO SCREEN COUNT
  526. 35820 IF SN > 20 THEN SN = 20  /CAN't be more then 20
  527. 35830 RETURN
  528. 35900 REM SCREEN DOWN
  529. 35910 SN = SN + 4  /ADD FOUR TO SCREEN COUNT
  530. 35920 IF SN > 20 THEN SN = 20  /CAN't ber more then 20
  531. 35930 RETURN
  532. 36000 REM CHANGE SCREENS
  533. 36100 GOSUB 500  
  534. 36110 CFLG = CFLG - 10  /CHANGE FLAG EQUALS CHANGE FLAG MINUS 10
  535. 36120 ON CFLG GOSUB 35600,35700,35800,35900
  536. 36130 GOTO 30000  /WRITE NEW SCREEN
  537. 37000 REM RECALCULATE
  538. 37010 GOSUB 9000  /CLEAR LINES 21-24
  539. 37020 PRINT "       The Clear option will set all the numeric values to zero "
  540. 37030 PRINT "         YOU WILL LOSE THE VALUES UNLESS YOU HAVE SAVED THEM"
  541. 37040 PRINT "               DO YOU WANT TO CLEAR THE VALUES (Y/N) "
  542. 37050 A$ = INKEY$ 
  543. 37055 IF A$ = "" THEN 37050  /LOOP UNTILL A KEY IS PRESSED
  544. 37060 IF A$ = "Y" OR A$ = "y" THEN 37100 ELSE 31000 
  545. 37100 FOR T2= 1 TO MAXN  /FOR ALL THE NUMBERS
  546. 37105 IF CT(T2) = 30 THEN 37300 /IF NUMBER HAS BEEN DELETED THEN SKIP
  547. 37110 X(T2) = 0 /SET NUMBER TO ZERO
  548. 37120 A$= "__________0"
  549. 37130 IF DS(T2) = 2 THEN A$ = "$_______.00"
  550. 37170 L = LIN(T2)
  551. 37180 C = COL(T2)
  552. 37190 S = SCR(T2)
  553. 37200 IF L$(S,L) = "" THEN L$(S,L) = "                                                                             " 
  554. 37205 L$ = L$(S,L)
  555. 37210 B$ = MID$(L$,1,C) /LEFT PART OF LINE
  556. 37220 T = LEN(A$)
  557. 37230 T = C + T+1
  558. 37240 C$ = MID$(L$,T) /RIGHT PART OF LINE
  559. 37250 L$(S,L) = B$ + A$ + C$  /NEW LINE
  560. 37260 IF S = SN THEN GOSUB 27800  /IF LINE IS ONE THIS SCREEN THEN PRINT IT
  561. 37300 NEXT T2
  562. 37310 GOTO 31000 /BACK TO OPTIONS
  563. 40000 REM 
  564. 40080 PRINT "These are the files on your defalut disk drive :"
  565. 40100 PRINT ""
  566. 40120 FILES    /PRINTS THE FILES ON YOUR DEFAULT DISK DRIVE
  567. 40140 PRINT "If you want to continue with an old spreadsheet enter the name "
  568. 40160 PRINT "If you want to start a new spreadsheet just press return "
  569. 40270 MAX = 8  /MAXIMUM STRING LENGTH
  570. 40280 GOSUB 62030  /INPUT SUBROUTINE
  571. 40282 IF A$ = "" THEN 30000  /IF RETURN WAS PRESSED THEN 30000
  572. 40290 NM$ = A$  /NAME EQUALS A$
  573. 40300 GOTO 43000  /READ THE FILE 
  574. 41000 REM *** START NEW SPREADSHEET
  575. 41100 GOSUB 9000
  576. 41130 PRINT "******  ENTER THE NAME THAT YOU WANT TO SAVE THIS SPREADSHEET UNDER   *******"
  577. 41140 PRINT "             must be eight characters or less, no spaces "
  578. 41160 PRINT "If you do not want to save the spreadheet at this time then just press return"
  579. 41200 MAX = 8 /MAXIMUM LENGTH OF STRING
  580. 41210 GOSUB 62030
  581. 41215 IF A$ = "" THEN 31000  /IF RETURN WAS PRESSED THEN 
  582. 41220 GOSUB 8000  /TEST FOR VALID FILE NAME
  583. 41230 IF TEST = 4 THEN 41000 /IF BAD FILE NAME THEN TRY AGAIN
  584. 41240 NM$ = A$  /NAME EQUALS A$
  585. 42000 REM WRITE SPREADSHEET
  586. 42010 GOSUB 9000
  587. 42020 PRINT " SAVEING YOUR SPREADSHEET ON DISK, PLEASE WAIT"
  588. 42100 OPEN "O",#1,NM$  /OPEN A SEQUENTIAL ACCESS FILE AS #1
  589. 42110 WRITE #1,MAXN    /MAXIMUM NUMBERS
  590. 42120 FOR T = 1 TO MAXN  /FOR ALL NUMBERS
  591. 42130 WRITE #1,X(T),SCR(T),LIN(T),COL(T),CT(T),TF(T),CF(T),XCST(T),DS(T)
  592. 42140 NEXT T
  593. 42200 FOR T = 1 TO 20  /FOR ALL SCREENS
  594. 42210 FOR T2 = 1 TO 20  /FOR ALL LINES
  595. 42220 WRITE #1,L$(T,T2) /WRITE THE LINE
  596. 42230 NEXT T2
  597. 42240 NEXT T
  598. 42245 CLOSE
  599. 42250 GOTO 31000
  600. 43000 REM READ SPREADSHEET
  601. 43040 PRINT ""
  602. 43050 PRINT "READING INFORMATION PLEASE WAIT"
  603. 43100 OPEN "I",#1,NM$  /OPEN SEQUENTIAL ACCESS FILE
  604. 43110 INPUT #1,MAXN    /INPUT MAXIMUM NUMBER
  605. 43120 FOR T = 1 TO MAXN  /FOR ALL NUMBERS
  606. 43130 INPUT #1,X(T),SCR(T),LIN(T),COL(T),CT(T),TF(T),CF(T),XCST(T),DS(T)
  607. 43140 NEXT T
  608. 43200 FOR T = 1 TO 20 /FOR ALL SCREENS
  609. 43210 FOR T2 = 1 TO 20  /FOR ALL LINES
  610. 43220 INPUT #1,L$(T,T2)  /INPUT THE LINE
  611. 43230 NEXT T2
  612. 43240 NEXT T
  613. 43245 CLOSE 
  614. 43250 GOTO 30000
  615. 44000 REM PRINT SPREADSHEET
  616. 44010 GOSUB 9000 /CLEAR LINES 21-24
  617. 44020 PRINT "      Print the spreadsheet description on paper subroutine "
  618. 44030 PRINT "                 Make sure your printer is on "
  619. 44040 PRINT "                 DO YOU WANT THIS OPTION (Y/N) "
  620. 44050 A$ = INKEY$
  621. 44055 IF A$ = "" THEN 44050  /LOOP UNTILL A KEY IS PRESSED
  622. 44060 IF A$ = "Y" OR A$ = "y" THEN 44100 ELSE 31000
  623. 44100 LPRINT "SPREADSHEET NAME ";NM$
  624. 44110 LPRINT "X(T) SCR(T) LIN(T) COL(T) CT(T) TF(T) CF(T) XCST(T);DS(T)"
  625. 44120 FOR T = 1 TO MAXN /FOR ALL NUMBERS
  626. 44130 LPRINT X(T);SCR(T);LIN(T);COL(T);CT(T);TF(T);CF(T);XCST(T);DS(T)
  627. 44140 NEXT T
  628. 44200 FOR T = 1 TO 20  /FOR ALL SCREENS
  629. 44210 FOR T2 = 1 TO 20  /FOR ALL LINES
  630. 44215 IF L$(T,T2) = "" THEN 44230
  631. 44218 LPRINT "SCREEN ";T;" LINE ";T2
  632. 44220 LPRINT L$(T,T2) /PRINT THE LINE
  633. 44230 NEXT T2
  634. 44240 NEXT T
  635. 44250 GOTO 31000
  636. 45000 REM PRINT SCREEN ON PAPER
  637. 45010 GOSUB 9000  /CLEAR LINES 21-24
  638. 45020 PRINT "                      PRINT SCREEN ROUTINE "
  639. 45030 PRINT "                 Make sure your printer is on "
  640. 45040 PRINT "             DO YOU WANT TO PRINT THIS SCREEN (Y/N) "
  641. 45050 A$ = INKEY$
  642. 45055 IF A$ = "" THEN 45050  /LOOP UNTILL A KEY IS PRESSED
  643. 45060 IF A$ = "Y" OR A$ = "y" THEN 45070 ELSE 31000
  644. 45070 GOSUB 9000 /CLEAR LINES 21-24
  645. 45075 PRINT "   DO YOU WANT TO PRINT THE SCREENS TO THE RIGHT ALSO "
  646. 45077 PRINT "       1 - NO print only this screen  2 - Yes "
  647. 45080 GOSUB 60000  /INPUT SUBROUTINE
  648. 45085 IF DT# = 2 THEN 45200  /IF PRINT MORE THEN ONE SCREEN THEN 45200
  649. 45100 FOR T = 1 TO 20 /FOR ALL LINES
  650. 45110 LPRINT L$(SN,T) /PRINT THE LINE ON PAPER
  651. 45120 NEXT T 
  652. 45130 GOTO 31000  /BACK TO OPTIONS
  653. 45200 REM PRINT SECOND SCREEN OVER
  654. 45210 GOSUB 9000 /CLEAR LINES 21-24
  655. 45230 PRINT "   How many columns of the spreadsheet do you want printed? "
  656. 45235 PRINT "Do not exceed the number of colums that your printer can print"
  657. 45240 GOSUB 60060 /INPUT SUBROUTINE
  658. 45250 MAXL = DT# /MAXIMUM COLUMN 
  659. 45255 WIDTH 255 /PRINT BEYOND 80 COLUMNS
  660. 45260 FOR T = 1 TO 20 /FOR LINE NUMBER 1 TO 20
  661. 45265 L$ = L$(SN,T) 
  662. 45270 T2 = SN+1
  663. 45271 L2$ = L$(T2,T)
  664. 45272 T3 = SN + 2
  665. 45273 IF L2$ = "" THEN L2$ = "                                                                           "
  666. 45275 IF L$ = "" THEN L$ = "                                                                             "
  667. 45280 L$ = L$ + L2$ +L$(T3,T) /COMBINE THE LINES FROM 3 SCREENS
  668. 45290 L$ = LEFT$(L$,MAXL) /TAKE THE LEFT CHARACTERS UP TO MAXIMUM COLUMN
  669. 45300 LPRINT L$ /PRINT THE LINE
  670. 45400 NEXT T
  671. 45500 GOTO 31000 /BACK TO OPTIONS
  672. 46000 REM BAR CHART 
  673. 46010 GOSUB 9000 /CLEAR LINES 21-24
  674. 46020 PRINT "                       BAR CHART SUBROUTINE  "
  675. 46030 PRINT "                  MAKE SURE YOUR PRINTER IS ON "
  676. 46040 PRINT "             DO YOU WANT TO PRINT A BAR CHART (Y/N) "
  677. 46050 A$ = INKEY$
  678. 46055 IF A$ = "" THEN 46050  /LOOP UNTILL A KEY IS PRESSED
  679. 46060 IF A$ = "Y" OR A$ = "y" THEN 46070 ELSE 31000 
  680. 46070 XMAX = 0 /INITIALIZE
  681. 46080 NCT = 0  /INITIALIZE
  682. 46100 REM INPUT NUMBERS FOR CHART
  683. 46105 MFLG = 5    /MOVE FLAG EQUALS FIVE
  684. 46110 NCT = NCT + 1  /NUMBER COUNT EQUALS NUMBER COUNT PLUS ONE
  685. 46120 GOSUB 9000  /CLEAR LINES 21-24
  686. 46130 PRINT "         MOVE THE * TO THE ";NCT;" th NUMBER FOR THE BAR CHART"
  687. 46135 PRINT "                         THEN PRESS RETURN "
  688. 46140 GOSUB 60000  /INPUT SUBROUTINE TO ALLOW CURSER MOVEMENT
  689. 46150 GOSUB 4000   /FIND NUMBER IN THIS SPOT
  690. 46160 IF N = 0 THEN 46120  /IF THERE IS NO NUMBER TRY AGAIN
  691. 46165 IF X(N) > XMAX THEN XMAX = X(N)  /IN THE NUMBER IS GREATER THEN THE MAXIMUM NUMBER CHOSEN SO FAR THEN THE MAX EQUALS THE NUMBER
  692. 46170 XPRT(NCT)=X(N)
  693. 46200 GOSUB 9000  /CLEAR LINES 21-24
  694. 46210 PRINT "   MOVE THE CURSER TO THE START OF THE LABEL FOR THIS NUMBER"
  695. 46215 PRINT "                    THEN PRESS RETURN "
  696. 46220 GOSUB 60000
  697. 46230 T1 = CKT 
  698. 46300 GOSUB 9000
  699. 46310 PRINT "   MOVE THE CURSER TO THE END OF THE LABEL FOR THIS NUMBER"
  700. 46315 PRINT "                    THEN PRESS RETURN "
  701. 46320 GOSUB 60000
  702. 46330 T2 = CKT
  703. 46400 T3 = T2 - T1
  704. 46410 L$ = L$(SN,LKT)
  705. 46420 LBL$(NCT) = MID$(L$,T1,T3) /LABEL FOR THIS NUMBER
  706. 46500 GOSUB 9000
  707. 46510 PRINT "     DO YOU WANT ANOTHER NUMBER FOR THIS BAR CHART "
  708. 46520 PRINT "         1 - YES,  ANOTHER NUMBER "
  709. 46525 PRINT "         2 - NO, I HAVE ENTERED ALL THE NUMBERS "
  710. 46530 GOSUB 60000
  711. 46540 IF DT# = 1 THEN 46100 /GET ANOTHER NUMBER
  712. 47000 REM PRINT BAR CHART
  713. 47100 GOSUB 500  /CLEAR SCREEN
  714. 47200 FOR T = 1 TO NCT  /FOR ALL NUMBERS
  715. 47210 PRINT LBL$(T),XPRT(T)  /PRINT THE LABEL THEN THE NUMBER
  716. 47220 T1#= XPRT(T)/XMAX   /RATIO OF THIS NUMBER TO THE MAXIMUM NUMBER
  717. 47225 T1#= T1#*75   
  718. 47230 T2 = INT(T1#)  
  719. 47240 FOR T3 = 1 TO T2
  720. 47250 PRINT "*"; 
  721. 47260 NEXT T3
  722. 47265 PRINT ""
  723. 47270 NEXT T
  724. 47300 PRINT " PRESS ANY KEY TO CONTINUE "
  725. 47310 IF INKEY$ = "" THEN 47310  /STAY HERE UNTILL A KEY IS PRESSED
  726. 47400 PRINT " DO YOU WANT TO PRINT THIS ON PAPER "
  727. 47410 PRINT "  1- YES PRINT 2-NO"
  728. 47420 GOSUB 60000
  729. 47430 IF DT# = 2 THEN 30000
  730. 48000 REM PRINT BAR CHART
  731. 48200 FOR T = 1 TO NCT    /FOR ALL NUMBERS IN BAR CHART
  732. 48210 LPRINT LBL$(T),XPRT(T)  /PRINT LABEL THEN NUMBER
  733. 48220 T1#= XPRT(T)/XMAX       /RATIO OF THIS NUMBER TO THE MAXIMUM
  734. 48225 T1#= T1#*75 
  735. 48230 T2 = INT(T1#)
  736. 48240 FOR T3 = 1 TO T2  
  737. 48250 LPRINT "*";
  738. 48260 NEXT T3
  739. 48265 LPRINT ""
  740. 48270 NEXT T
  741. 48300 GOTO 30000
  742. 49000 REM PUT DOLLAR SIGNS IN
  743. 49010 GOSUB 4000
  744. 49020 XA = DT#
  745. 49100 XA = XA * 100 + .01  /MULTIPLY BY 100 THEN ADD .01 TO AVOID ROUNDING ERRORS       
  746. 49110 XA = INT(XA)  /CONVERT TO INTEGER
  747. 49120 T$ = STR$(XA)  /CONVERT TO STRING
  748. 49130 T$ = "__________" + T$
  749. 49140 T$ = RIGHT$(T$,8)
  750. 49150 A$ = MID$(T$,1,3)  /THOUSANDS
  751. 49160 B$ = MID$(T$,4,3)  /
  752. 49170 C$ = MID$(T$,7,2)  /CENTS
  753. 49180 A$ = "$"+A$+","+B$+"."+C$
  754. 49190 IF XA < 100000! THEN A$ = "$"+"____"+B$+"."+C$
  755. 49800 RETURN
  756. 50000 REM **********  INTRO
  757. 50010 GOSUB 500
  758. 50100 PRINT "                  S P R E A D S H E E T      1.0   "
  759. 50105 PRINT ""
  760. 50110 PRINT "         Copyright 1984 by Potomac Pacific Engineering Inc."
  761. 50120 PRINT ""
  762. 50130 PRINT "This program is licensed FREE to all users with some restrictions"
  763. 50165 PRINT "        See the manual for more information on the license."
  764. 50167 PRINT ""
  765. 50970 RETURN
  766. 51000 REM ***** EXIT TO SYSTEM
  767. 51100 GOSUB 500
  768. 51110 CLOSE
  769. 51120 PRINT " -BYE, Have a nice day"
  770. 51130 END
  771. 51200 REM ** WARNING
  772. 51210 GOSUB 9000
  773. 51220 PRINT "       IF YOU HAVE NOT SAVED YOUR DATA YOU WILL LOSE IT  "
  774. 51230 PRINT "            DO YOU WANT TO EXIT THE PROGRAM (Y/N)"
  775. 51235 A$ = INKEY$
  776. 51240 IF A$ = "" THEN 51235
  777. 51260 IF A$ = "Y" OR A$ = "y" THEN 51000
  778. 51270 GOTO 31000
  779. 52000 REM DELETE NUMBER
  780. 52100 A$ = "           "
  781. 52110 GOSUB 21130
  782. 52120 RETURN
  783. 60000 REM *******  INTEGER LESS THEN 100 CHECK  ********
  784. 60010 MAX = 2
  785. 60020 ACT$ = "1234567890=<>^"
  786. 60030 IF NE = 0 THEN ACT$ = "1234567890"
  787. 60040 PRINT ">__<";
  788. 60050 GOTO 60240
  789. 60060 REM *******  INTEGER *******                        
  790. 60070 MAX = 8
  791. 60080 ACT$ = "1234567890-+,=<>^"
  792. 60090 IF NE = 0 THEN ACT$ = "1234567890-+,"
  793. 60100 PRINT ">________<";
  794. 60110 GOTO 60240
  795. 60120 REM *******  SINGLE PRECISION  *******                        
  796. 60130 MAX = 10
  797. 60140 ACT$ = "1234567890-+,.%$=<>^"
  798. 60150 IF NE = 0 THEN ACT$ = "1234567890+-,.%$"
  799. 60160 PRINT ">__________<";
  800. 60170 GOTO 60240
  801. 60180 REM *******  DOUBLE PRECISION  *******                        
  802. 60190 MAX = 20
  803. 60200 ACT$ = "1234567890-+,.%$=<>^"
  804. 60210 IF NE = 0 THEN ACT$ = "1234567890+-,.%$"
  805. 60220 PRINT ">____________________<";
  806. 60230 GOTO 60240
  807. 60240 REM ********** NUMBER CHECK **********
  808. 60250 REM - see the remarks on the database input subroutine if you want to see how it works
  809. ******* NUMBER CHECK **********
  810. 60250 REM - see the remarks on the database input subroutine if you want to