home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / steel24.zip / REMARKS4.BAS < prev    next >
BASIC Source File  |  1980-01-01  |  28KB  |  557 lines

  1. 40000 REM * NEW INPUT
  2. 40002 ABORTFLG = 0 / INITIALIZE ABORT FLAG TO 0
  3. 40008 IF REALFLG(A) = 2 THEN GOSUB 60200 / IF THERE ARE REALTIME TRANSFERS GOTO OPEN REALTIME FILE SUBROUTINE
  4. 40010 GOSUB 13000 / CLEAR SCREEN
  5. 40015 IF DATAIN = 1 GOTO 40500 / IF INPUT DESCRIPTION IS ALREADY IN SKIP INPUTTING THE DATA
  6. 40017 GOSUB 40020 / GOSUB THE INPUT DATA ROUTINE
  7. 40018 GOTO 40500 / SKIP OVER THE INPUT DATA ROUTINE
  8. 40020 REM  READ INPUT DATA 
  9. 40021 GOSUB 49000 / SET GLOBAL FLAGS TO 0 
  10. 40022 GOSUB 10900 / PUT PROGRAM DATA DISK IN DRIVE PROMPT
  11. 40025 A$ = STR$(A) / CONVERT THE FILE NUMBER TO A STRING
  12. 40027 A$ = MID$(A$,2) / GET RID OF THE LEADING SPACE
  13. 40030 N$ = "IPUTD"+A$ / FILE NAME = "IPUTD" PLUS FILE NUMBER
  14. 40040 OPEN "I",#2,N$ / OPEN INPUT DATA FILE
  15. 40050 INPUT #2,NREC(A) / INPUT NUMBER OF FIELDS IN THIS FILE
  16. 40060 FOR N3= 1 TO NREC(A) / FOR EACH FIELD IN THE FILE
  17. 40062 N = N3 
  18. 40070 INPUT #2,IOPT(N) / GET THE INPUT OPTION NUMBER
  19. 40080 ON IOPT(N) GOTO 40090,40120,40150,40210,40240,40270,40430,40370,40370,40430,40430,40430,40210 / ON THE INPUT OPTION GOTO
  20. 40085 GOTO 40450 / CUSTOM INPUT OPTIONS FALL THROUGH THE ABOVE GOTO 
  21. 40090 REM OPERATOR ENTRY*
  22. 40100 INPUT #2,PROMPT$(N) / INPUT THE PROMPT
  23. 40110 GOTO 40450
  24. 40120 REM GET FROM ANOTHER FILE*
  25. 40130 INPUT #2,IFN(N),IFLD(N),IRNFLD(N) / INPUT DATA FROM THIS FILE, FROM THIS FIELD, RECORD NUMBER EQUALS THE VALUE OF THIS FIELD IN THE SOURCE FILE
  26. 40132 GFLG(IFN(N)) = 1 / SET GLOBAL FLAG TO YES 
  27. 40134 GFLG(IFLD(N)) = 1 / SET GLOBAL FLAG TO YES
  28. 40136 GFLG(IRNFLD(N)) = 1 / SET GLOBAL FLAG TO YES
  29. 40140 GOTO 40450
  30. 40150 REM ADD PREVIOUS FIELDS*
  31. 40160 INPUT #2,NOS(N) / INPUT THE NUMBER OF FIELDS TO ADD
  32. 40170 FOR T = 1 TO NOS(N) / FOR EACH FIELD TO ADD
  33. 40180 INPUT #2,ADDFLD(N,T) / ADD THIS FIELD
  34. 40185 GFLG(ADDFLD(N,T)) = 1 / SET GLOBAL FLAG TO YES
  35. 40190 NEXT T / END LOOP READING FIELDS TO ADD
  36. 40200 GOTO 40450
  37. 40210 REM SUBTRACT PREVIOUS FIELDS* / ALSO USED FOR DIVIDE 2 FIELDS
  38. 40220 INPUT #2, SUBX(N),SUBY(N) / INPUT THE FIELD NUMBERS TO SUBTRACT
  39. 40222 GFLG(SUBX(N)) = 1 / SET GLOBAL FLAG TO YES
  40. 40224 GFLG(SUBY(N)) = 1 / SET GLOBAL FLAG TO YES
  41. 40230 GOTO 40450
  42. 40240 REM MULTIPLY FIELDS*
  43. 40250 INPUT #2, MULX(N),MULY(N) / INPUT THE FIELDS TO MULTIPLY
  44. 40252 GFLG(MULX(N)) = 1 / SET GLOBAL FLAG TO YES
  45. 40254 GFLG(MULY(N)) = 1 / SET GLOBAL FLAG TO YES
  46. 40260 GOTO 40450
  47. 40270 REM GET FROM A TABLE* / COMPUTE USING TAX TABLE OPTION
  48. 40280 INPUT #2,TX(1,N),TX(2,N),TX(3,N),TX(4,N),TX(5,N),TX(6,N) / INPUT DATA FOR COMPUTING TAXES
  49. 40282 GFLG(TX(2,N)) = 1 / SET GLOBAL FLAG TO YES
  50. 40283 GFLG(TX(4,N)) = 1 / SET GLOBAL FLAG TO YES
  51. 40284 GFLG(TX(5,N)) = 1 / SET GLOBAL FLAG TO YES
  52. 40285 GFLG(TX(6,N)) = 1 / SET GLOBAL FLAG TO YES
  53. 40290 TTBL = 5 / SET TAX TABLE FLAG TO YES
  54. 40310 GOTO 40450
  55. 40370 REM MAXIMUM* / ALSO USED FOR MINIMUM
  56. 40380 INPUT #2,NOS(N) / INPUT THE NUMBER OF ITEMS YOU WANT TO COMPARE
  57. 40390 FOR T = 1 TO NOS(N) / FOR ALL FIELDS TO COMPARE
  58. 40400 INPUT #2,MAXMIN(N,T) / INPUT THE FIELD TO COMPARE
  59. 40405 GFLG(MAXMIN(N,T)) = 1 / SET GLOBAL FLAG TO 1
  60. 40410 NEXT T 
  61. 40420 GOTO 40450
  62. 40430 REM CONSTANT*
  63. 40440 INPUT #2,KC(N),CFLD(N) / INPUT THE CONSTANT AND THE FIELD OPERATED ON BY THE CONSTANT
  64. 40445 GFLG(CFLD(N)) = 1 / SET GLOBAL FLAG TO YES
  65. 40450 NEXT N3   
  66. 40460 CLOSE #2 
  67. 40470 DATAIN = 1 / SET INPUT DATA IN FLAG TO YES
  68. 40480 RETURN
  69. 40500 REM OPEN SECOND FILE*
  70. 40505 IF TWOOPEN = 1 THEN 40637 / IF SECOND FILE TO INPUT DATA FROM IS ALREADY OPEN THEN SKIP THIS SECTION
  71. 40507 TWOOPEN = 1 / SET SECOND FILE OPEN FLAG TO YES
  72. 40510 FOR T = 1 TO NREC(A) / FOR EACH FIELD IN THE FILE
  73. 40520 IF IOPT(T) = 2 GOTO 40600 / IF INPUT OPTION IS GET DATA FROM ANOTHER FILE THEN OPEN THE SECOND FILE SUBROUTINE
  74. 40530 NEXT T 
  75. 40540 GOTO 40640
  76. 40600 B = IFN(T) / B, THE SECOND FILE EQUALS THE NUMBER OF THE FILE TO GET DATA FROM
  77. 40602 AHLD = A / HOLD THE VALUE OF THE FIRST FILE
  78. 40604 A = B 
  79. 40610 PRINT F$(B), " SECOND FILE FOR CUSTOM INPUT "
  80. 40620 GOSUB 2300 / GET DISK DRIVE THE FILE IS ON SUBROUTINE
  81. 40625 A = AHLD / RETURN THE VALUE OF AHLD
  82. 40630 GOSUB 2550 / OPEN THE SECOND FILE
  83. 40635 GOSUB 7950 / GET THE MAXIMUM RECORD NUMBER OF THE SECOND FILE
  84. 40637 IF TAXIN = 1 THEN 41000 / IF TAX TABLES ARE ALREADY IN MEMORY THEN SKIP THIS SECTION
  85. 40638 TAXIN = 1 / SET TAX TABLE IN MEMORY FLAG TO YES
  86. 40640 FOR T = 1 TO NREC(A)
  87. 40650 IF IOPT(T) = 6 GOTO 40800 / IF FILE COMPUTES TAX TABLE DATA THEN READ THE TAXSCH FILE
  88. 40660 NEXT T
  89. 40670 GOTO 41000 / SKIP READING THE TAX TABLES
  90. 40800 GOSUB 45000 / GOTO THE SUBROUTINE THAT READS THE TAX TABLES
  91. 41000 REM CUSTOM INPUT ROUTINE*  
  92. 41010 GOSUB 13000 / CLEAR SCREEN
  93. 41012 OFFSET = 0 / INITIALIZE OFFSET TO 0
  94. 41014 IF REALFLG(A) = 2 AND RN <= MRN THEN GOSUB 61300 / IF THERE ARE REALTIME TRANSFERS AND YOU ARE OVERWRITING A RECORD THEN CORRECT REALTIME TRANSFER FILE
  95. 41015 PRINT "*****************  FILE NAME :";F$(A);"  ";"RECORD NUMBER :";RN;" ****************"
  96. 41030 IF CSCR = 1 THEN GOSUB 30000 /IF USING A CUSTOM SCREEN PRINT OVERLAYS
  97. 41080 LI = 25 / LINE EQUALS 25
  98. 41082 GOSUB 13100 / LOCATE SUBROUTINE
  99. 41085 PRINT "[ = SAME AS LAST RECORD , < BACK UP , > ABORT THIS RECORD , ^ EQUALLAST OVER 1]"; / PRINTS MESSAGE AT LINE 25
  100. 41087 GOTO 41130 / SKIP THE FOLLOWING SUBROUTINE
  101. 41092 LI = 20 / LINE EQUALS 25
  102. 41093 GOSUB 13100 / LOCATE SUBRUTINE
  103. 41094 PRINT "                                                                              "   / CLEAR LINES 20 TO 24
  104. 41095 PRINT "                                                                              "
  105. 41096 PRINT "                                                                              "
  106. 41097 PRINT "                                                                              "
  107. 41100 PRINT "                                                                             "; 
  108. 41110 LI = 20 / LINE EQUALS 20
  109. 41115 GOSUB 13100 / LOCATE SUBROUTINE
  110. 41120 PRINT "ON FIELD NUMBER : ";N;" FIELD NAME : ";FLDN$(A,N);" : " / PRINT FIELD NUMBER AND FIELD NAME
  111. 41125 RETURN
  112. 41130 N = 1  / INITIALIZE N, THE FIELD NUMBER TO 1
  113. 41133 WHILE N <= NREC(A) / WHILE THE FIELD NUMBER IS LESS THEN OR EQUAL TO THE MAXIMUM FIELD NUMBER
  114. 41135 REFLG = 0 / INITIALIZE RESTART FLAG TO NO
  115. 41137 IF N < 1 THEN N = 1 / FIELD NUMBER CAN'T BE LESS THEN 1
  116. 41140 ON IOPT(N) GOSUB 41200,41400,41600,41800,42000,42200,42600,42800,43000,43200,43400,43600,41800,53000,54000,55000,56000,57000,58000,59000 / ON INPUT OPTION GOTO
  117. 41150 GOSUB 43800 / GOSUB THE PRINT FIELD ON SCREEN, AND SET FILE BUFFER SUBROUTINE
  118. 41155 N = N + 1 / INCREMENT THE FIELD NUMBER
  119. 41160 WEND / CONTINUE WITH THE LOOP FOR ALL FIELDS
  120. 41165 GOTO 44910
  121. 41170 REM * BACK UP FIELDS UNTIL IOPT = 1 / BACK UP UNTILL THERE IS AN OPERATOR ENTRY
  122. 41175 N = N - 1 / DECREMENT THE FILE NUMBER
  123. 41180 IF N < 1 THEN 41133 / CAN'T DECREMENT PAST ONE
  124. 41185 IF IOPT(N) <> 1 THEN 41175 / IF INPUT OPTION IS NOT AN OPERATOR ENTRY THEN DECREMENT AGAIN
  125. 41190 GOTO 41133 / CONTINUE ENTERING FIELDS
  126. 41200 REM *  OPERATOR ENTRY
  127. 41202 NE = 1 / SET NEW ENTRY FLAG TO YES
  128. 41205 GOSUB 41092 / CLEAR THE LINES
  129. 41210 PRINT PROMPT$(N) / PRINT THE PROMPT
  130. 41215 REFLG = 0 / INITIALIZE RESTART FLAG TO 0
  131. 41220 IF FTY(A,N) = 1 GOTO 41300 / IF A STRING THEN GOTO 41300
  132. 41230 ON FTY(A,N) GOSUB 15000,14100,14200,14300,14300  / ON THE FIELD TYPE GOTO THE INPUT SUBROUTINE FOR THAT FIELD TYPE
  133. 41234 IF REFLG = 1 THEN GOTO 41170 / IF RESTART FLAG EQUALS YES THEN RESTART DATA ENTRY
  134. 41235 IF ABORTFLG = 1 GOTO 7000  / IF ABORT FLAG EQUALS YES THEN GOTO 7000
  135. 41236 IF MFLG(A) = 2 AND FTY(A,N) <> 1 THEN GOSUB 29200 / IF LIMITS FLAG IS YES AND THE FIELD IS NOT A STRING THEN CHECK THE LIMITS
  136. 41237 T2 = KEYLIST(A,N) / KEYLIST NUMBER
  137. 41238 T3 = MAXK(T2) / MAXIMUM FOR THE LIST
  138. 41239 REM  IF KY(A,N) = 2 AND (DT# < 1 OR DT# > T3) GOTO 41230
  139. 41240 I# = DT# / SET I# TO THE VALUE ENTERED IN THE SUBROUTINE
  140. 41245 NE = 0 / RESET NEW ENTRY FLAG TO NO
  141. 41250 RETURN     
  142. 41298 REFLG = 0 / RESET RESTART FLAG TO NO
  143. 41300 Q = N / FIELD NUMBER ALSO EQUALS Q
  144. 41302 GOSUB 15000 / INPUT STRING SUBROUTINE
  145. 41303 IF ABORTFLG = 1 GOTO 7000 / IF ABORT FLAG EQUALS YES THEN ABORT
  146. 41304 I$ = A$ / SET I$ TO THE VALUE RETURNED FROM THE STRING INPUT SUBROUTINE
  147. 41306 NE = 0 / RESET NEW ENTRY FLAG TO NO
  148. 41308 IF REFLG = 1 GOTO 41170 / IF RESTART FLAG THEN RESTART DATA ENTRY
  149. 41310 RETURN    
  150. 41400 REM GET FROM ANOTHER FILE*
  151. 41402 FLD = IFLD(N) / GET DATA FROM THIS FIELD
  152. 41404 T = IRNFLD(N) / RECORD NUBER OF THE FIELD TO GET DATA FROM
  153. 41406 RN2= X(T) / RECORD NUMBER OF FILE 2 EQUALS THE VALUE OF THIS SOURCE FIELD
  154. 41407 IF RN2 > MRNS THEN GOTO 48000 / IF RECORD NUMBER OF THE SECOND FILE IS GREATER THEN MAXIMUM RECORD NUMBER THEN GOTO 48000
  155. 41408 GET #2,RN2 / GET THE RECORD FROM THE SECOND FILE
  156. 41409 B = IFN(N) / B IS THE FILE NUMBER OF THE SECOND OPENED FIELD
  157. 41420 ON FTY(B,FLD) GOTO 41422,41460,41500,41550,41550 / ON THE FIELD TYPE OF THE FIELD IN THE SECOND FILE GOTO
  158. 41422 I$ = Y$(FLD) / SET I$ TO THE VALUE OF THE FIELD
  159. 41430 RETURN      
  160. 41460 Y$ = Y$(FLD) 
  161. 41465 I% = CVI(Y$) / CONVERT FIELD TO A NUMBER
  162. 41467 I# = I%
  163. 41470 RETURN     
  164. 41500 I! = CVS(Y$(FLD)) / CONVERT FIELD TO A NUMBER
  165. 41505 I# = I!
  166. 41510 RETURN     
  167. 41550 I# = CVD(Y$(FLD)) / CONVERT FIELD TO A NUMBER
  168. 41560 GOTO 43800
  169. 41600 REM ADD PREVIOUS FIELDS*
  170. 41605 I# = 0 / INITIALIZE TO 0
  171. 41610 FOR T = 1 TO NOS(N) / FOR ALL THE FIELDS TO  ADD
  172. 41620 T2 = ADDFLD(N,T) / T2 IS THE FIELD TO  ADD
  173. 41630 I# = I# + X(T2) / ADD THE VALUE TO THE FIELD TO THE PREVIOUS SUM
  174. 41640 NEXT T / END LOOP OF FIELDS TO ADD
  175. 41650 RETURN    
  176. 41800 REM SUBTRACT FIELDS
  177. 41810 T1 = SUBX(N) / T1 IS FIELD TO SUBTRACT FROM OR DIVIDE INTO
  178. 41820 T2 = SUBY(N) / T2 IS FIELD TO SUBTRACT OR DIVIDE BY 
  179. 41830 IF IOPT(N) = 4 THEN I# = X(T1) - X(T2) ELSE I# = X(T1)/X(T2) / EITHER SUBTRACT OR DIVIDE DEPENDING ON THE INPUT OPTION
  180. 41840 RETURN    
  181. 42000 REM MULTIPLY FIELDS
  182. 42010 T1 = MULX(N) / FIRST FIELD TO MULTIPLY
  183. 42020 T2 = MULY(N) / SECOND FIELD TO MULTIPLY
  184. 42030 I# = X(T1) * X(T2) / MULTIPLY FIELDS
  185. 42040 RETURN     
  186. 42200 REM GET FROM A TABLE
  187. 42210 ON TX(1,N) GOSUB 42400,42450 / IF TAX TABLE IS CONSTANT GOSUB 42400, IF TAX TABLE VARIES GOSUB 42450
  188. 42220 ON TX(3,N) GOSUB 42500,42550 / IF PAY PERIOD CONSTANT GOSUB 42500 IF PAY PERIOD VARIES GOSUB 42550
  189. 42230 Y = TX(5,N) / MARRIED SINGLE FIELD EQUALS THIS FIELD
  190. 42240 MSS = X(Y) / MARRIED SINGLE FIELD
  191. 42250 Y = TX(6,N) / PAY EQUALS THIS FIELD
  192. 42260 PAY# = X(Y) / PAY
  193. 42270 GOSUB 45500 / COMPUTE TAX SUBROUTINE
  194. 42272 I# = TTAX# / SET I# TO TTAX# RETURNED FROM COMPUTE TAX SUBROUTINE
  195. 42290 RETURN     
  196. 42400 FSS = TX(2,N) / FEDERAL STATE TAX TABLE NUMBER CONSTANT 
  197. 42410 RETURN
  198. 42450 Y = TX(2,N)
  199. 42460 FSS = X(Y) /FEDERAL STATE TAX TABLE NUMBER EQUALS THE VALUE OF THIS FIELD
  200. 42470 RETURN
  201. 42500 PPS = TX(4,N) / PAY PERIOD CONSTANT 
  202. 42510 RETURN
  203. 42550 Y = TX(4,N)
  204. 42560 PPS = X(Y) / PAY PERIOD EQUALS THIS FIELD
  205. 42570 RETURN
  206. 42600 REM CONSTANT
  207. 42610 I# = KC(N) / FILED EQUALS A CONSTANT
  208. 42620 RETURN    
  209. 42800 REM MAXIMUM
  210. 42802 T2 = MAXMIN(N,1) / T2 IS THE FIRST FIELD TO COMPARE
  211. 42804 I# = X(T2) / INITIALIZE MAXIMUM VALUE TO THE VALUE OF THE FIRST FIELD TO COMPARE
  212. 42810 FOR T = 2 TO NOS(N) / FOR THE REST OF THE FIELDS TO COMPARE
  213. 42820 T2 = MAXMIN(N,T) / NEXT FIELD TO COMPARE
  214. 42830 IF X(T2) > I# THEN I# = X(T2) / IF THE VALUE OF THIS FIELD IS GREATER THEN THE MAXIMUM LET THE MAXIMUM EQUAL THE FIELD
  215. 42840 NEXT T
  216. 42850 RETURN        
  217. 43000 REM MINIMUM*
  218. 43002 T2 = MAXMIN(N,1) / FIRST FIELD TO COMPARE
  219. 43004 I# = X(T2) / INITIALIZE MINIMUM TO THE VALUE OF THE FIRST FIELD
  220. 43010 FOR T = 2 TO NOS(N) / FOR THE REST OF THE FIELDS TO COMPARE
  221. 43020 T2 = MAXMIN(N,T) / NEXT FIELD TO COMPARE 
  222. 43030 IF X(T2) < I#  THEN I# = X(T2) / IF THE VALUE OF THE FIELD IS LESS THEN THE MINIMUM THEN LET THE MINIMUM EQUAL THE VALUE OF THIS FIELD
  223. 43040 NEXT T 
  224. 43050 RETURN       
  225. 43200 REM MULTIPLY BY A CONSTANT*
  226. 43210 T = CFLD(N) / T IS THE FIELD TO MULTIPLY THE CONSTANT BY
  227. 43220 I# = KC(N) * X(T) / MULTIPLY THE CONSTANT BY THE VALUE OF FIELD T
  228. 43230 RETURN    
  229. 43400 REM ADD A CONSTANT*
  230. 43410 T = CFLD(N) /  T IS THE FIELD TO ADD THE CONSTANT TO
  231. 43420 I# = KC(N) + X(T) / ADD THE CONSTANT AND THE FIELD
  232. 43430 RETURN    
  233. 43600 REM SUBTRACT A CONSTANT
  234. 43610 T = CFLD(N) / T IS THE FIELD TO SUBTRACT THE CONSTANT FROM
  235. 43620 I# = X(T) - KC(N) / SUBTRACT THE CONSTANT FROM THE VALUE OF FIELD T
  236. 43630 RETURN     
  237. 43800 REM LSET
  238. 43810 ON FTY(A,N) GOTO 43900,44000,44100,44200,44200 / ON FIELD TYPE GOTO
  239. 43900 REM STRING*
  240. 43910 LSET X$(N) = I$ / PUT STRINGS IN THE FILE BUFFER
  241. 43920 CK$(N) = I$ / HOLD THE STING AS CK$(FIELD NUMBER)
  242. 43990 GOTO 44500
  243. 44000 REM INTEGER *           
  244. 44020 LSET X$(N) = MKI$(I#) / PUT INTERGERS IN FILE BUFFER
  245. 44030 GOTO 44500
  246. 44100 REM SINGLE PRECISION* 
  247. 44110 I! = I#
  248. 44120 LSET X$(N) = MKS$(I#) / PUT SINGLE PRECISION NUMBERS IN FILE BUFFER
  249. 44130 GOTO 44500
  250. 44200 REM DOUBLE PRECISION*
  251. 44210 LSET X$(N) = MKD$(I#) / PUT DOUBLE PRECISON NUMBERS IN FILE BUFFER
  252. 44500 IF CSCR = 1 THEN GOSUB 31000 / IF USING A CUSTOM SCREEN THEN PRINT THE FIELD ON THE SCREEN USING THE 31000 SUBROUTINE
  253. 44501 IF CSCR = 1 THEN GOTO 44900 / IF USING A CUSTOM SCREEN THEN SKIP THE FOLLOWING SECTION
  254. 44502 IF N < 19 THEN HT = N + 1 / IF THE FIELD NUMBER IS LESS THEN 19 THEN THE LINE NUMBER IS THE FIELD NUMBER PLUS ONE
  255. 44503 IF N >= 19 THEN HT = N MOD 18 + 2 / IF THE FIELD NUMBER IS EQUAL OR GREATER THEN 19 THEN THE LINE NUMBER IS N MOD 18 + 2
  256. 44504 LI = HT / LINE NUMBER
  257. 44505 GOSUB 13100 / LOCATE SUBROUTINE
  258. 44506 IF N <18 GOTO 44510 / IF FIELD NUMBER LESS THEN 18 SKIP THE NEXT 2 LINES
  259. 44507 PRINT "                                                                              "; / CLEAR LINE
  260. 44508 GOSUB 13100 / LOCATE
  261. 44510 PRINT N;TAB(5) FLDN$(A,N); / PRINT THE FIELD NUMBER AND THE FIELD NAME
  262. 44515 IF KEYLIST(A,N) > 0 GOTO 44800 / IF THERE IS A KEYLIST GOTO 44800
  263. 44520 IF FTY(A,N) = 1 GOTO 44600 / IF FIELD IS A STRING GOTO 44600
  264. 44525 IF FTY(A,N) = 5 GOTO 44700 / IF FIELD IS A DOLLAR AND CENTS AMOUNT GOTO
  265. 44530 PRINT TAB(25) I# / PRINT THE VALUE OF THE FIELD
  266. 44535 X(N) = I# / HOLD THE VALUE OF THE FIELD AS X(FIELD NUMBER)
  267. 44540 GOTO 44900
  268. 44600 PRINT TAB(26) I$ / PRINT STRING FIELDS
  269. 44610 GOTO 44900
  270. 44700 PRINT TAB(26);
  271. 44710 PRINT USING "**$########.##";I# / PRINT DOLLAR AND CENTS AMOUNTS
  272. 44715 X(N) = I# / HOLD THE VALUE OF THIS FIELD AS X(N)
  273. 44720 GOTO 44900
  274. 44800 REM KEYLIST
  275. 44810 T1 = KEYLIST(A,N) / THE LIST NUMBER
  276. 44820 W$ = L$(T1,I#) / THE KEYLIST TO PRINT
  277. 44830 PRINT TAB(25) I#;
  278. 44835 X(N) = I# / HOLD THE NUMBER AS X(FIELD)
  279. 44840 PRINT TAB(30) "key  ";W$ / PRINT THE KEYLIST
  280. 44900 RETURN 
  281. 44910 PUT #1,RN / PUT THE FILE BUFFER ON THE DISK
  282. 44912 IF REALFLG(A) = 2 THEN GOSUB 60300 / IF THERE ARE REALTIME TRANSFERS THEN UPDATE THE REALTIME TRANSFER FILE
  283. 44913 IF REALFLG(A) = 2 AND RN <= MRN THEN GOSUB 61400 / IF THERE ARE REALTIME TRANSFERS AND YOU ARE OVERWRITING A OLD FILE THEN CORRECT REALTIME FILE
  284. 44915 IF RN > MRN THEN MRN = RN / IF RECORD NUMBER EXCEEDS THE MAXIMUM RECORD NUMBER THEN LET THE MAXIMUM RECORD EQUAL THE RECORD NUMBER
  285. 44920 LI = 20 / LINE NUMBER 20
  286. 44925 GOSUB 13100 / LOCATE SUBROUTINE 
  287. 44930 PRINT "***********************  OPTIONS :  ************************                  "
  288. 44940 PRINT "   1 - ENTER NEXT RECORD          3 - CORRECT THIS RECORD                     "
  289. 44950 PRINT "   2 - ENTER ANOTHER RECORD       4 - ENTER A SUBRECORD                       "
  290. 44960 PRINT "***************  0 - RETURN TO FILE OPTIONS   **************                  "
  291. 44962 SPRT = 5 / SURPRESS PRINTING AFTER OPTION IS ENTERED
  292. 44965 GOSUB 14000 / INPUT INTEGER LESS THEN 100 SUBROUTINE
  293. 44967 IF DT# <0 OR DT# >4 GOTO 44920 / IF OUT OF RANGE REENTER
  294. 44970 TH = DT# / TH EQUALS THE VALUE RETURNED FROM THE INPUT SUBROUTINE
  295. 44975 IF TH = 2 THEN RETURN / ENTER ANOTHER RECORD 
  296. 44980 IF TH = 0 THEN GOTO 3010 / BACK TO FILE OPTIONS
  297. 44985 IF TH = 3 THEN GOSUB 9000 / CORRECT A RECORD SUBROUTINE
  298. 44987 IF TH = 3 THEN GOTO 44920 / AFTER CORRECTION GET ANOTHER OPTION
  299. 44988 IF TH = 4 AND RPT <> 2 THEN 44996 / IF REQUEST FOR ENTER A SUBRECORD AND SUBRECORDS ARE NOT SET UP ON THE FILE GOTO 44996
  300. 44989 IF TH = 4 THEN GOTO 52000 / ENTER A SUBRECORD OPTION
  301. 44990 RN = RN + 1 / INCREMENT RECORD NUMBER
  302. 44995 GOTO 41000 / ENTER NEXT RECORD
  303. 44996 LI = 24 / LINE 24
  304. 44997 GOSUB 13100 / LOCATE SUBROUTINE
  305. 44998 PRINT TAB(10) "SUBRECORDS ARE NOT SET UP ON THIS FILE";
  306. 44999 GOTO 44920 / ASK FOR ANOTHER OPTION
  307. 45000 REM 
  308. 45001 IF HDISK = 2 THEN GOTO 45010 / IF HARD DISK OPTION THEN SKIP THE PROMPT
  309. 45002 GOSUB 13000 / CLEAR SCREEN
  310. 45004 PRINT "      PUT THE FLOPPY DISK WITH THE TAX SCHEDULE ON IT IN"
  311. 45005 PRINT "                IN THE DEFAULT DISK DRIVE "
  312. 45006 PRINT ""
  313. 45007 PRINT "         ****  THEN PRESS ANY KEY TO CONTINUE  ****   "
  314. 45008 IF INKEY$ = "" THEN GOTO 45008 / LOOP UNTILL ANY KEY IS PRESSED
  315. 45010 OPEN "R",#3,"TAXSCH",82 / OPEN THE TAX SCHEDULE FILE
  316. 45015 FIELD #3,40 AS D$,2 AS FD$,2 AS PP$,2 AS MS$,8 AS MIN$,8 AS MAX$,8 AS TX$,4 AS PCT$,8 AS OVR$ / FIELD THE TAX SCHEDULE FILE
  317. 45018 GOSUB 7900 / GET THE MAXIMUM RECORD NUMBER OF THE FILE
  318. 45020 FOR T7 = 1 TO 1000 / START LOOP READING RECORDS
  319. 45040 IF T7 > MRN2 GOTO 45160 / IF END OF FILE JUMP OUT OF THE LOOP
  320. 45050 GET #3,T7 / GET THE RECORD NUMBER
  321. 45070 FS(T7) = CVI(FD$) / CONVERT FEDERAL STATE NUMBER
  322. 45080 PP(T7) = CVI(PP$) / CONVERT PAY PERIOD NUMBER
  323. 45090 MS(T7) = CVI(MS$) / CONVERT MARRIED SINGLE NUMBER
  324. 45100 MIND#(T7) = CVD(MIN$) / CONVERT MINIMUM PAY FOR RATE
  325. 45110 MAXD#(T7) = CVD(MAX$) / CONVERT MAXIMUM PAY FOR RATE
  326. 45120 TAX#(T7) = CVD(TX$) / CONVERT BASE TAX
  327. 45130 PCT!(T7) = CVS(PCT$) / CONVERT PECENT OVER 
  328. 45140 OVR#(T7) = CVD(OVR$) / CONVERT OVER THIS PAY
  329. 45150 NEXT T7 / END LOOP READING TAX RECORDS
  330. 45160 REM
  331. 45170 GOTO 45200
  332. 45200 REM
  333. 45210 TMAX = T7 - 1 / MAXIMUM TAX RECORD NUMBER
  334. 45215 CLOSE #3 / CLOSE TAX SCHEDULE FILE
  335. 45218 TTBL = 5 / FLAG, TAX TABLE IN MEMORY
  336. 45220 RETURN
  337. 45230 REM
  338. 45240 REM
  339. 45250 REM
  340. 45260 REM
  341. 45270 REM
  342. 45500 REM
  343. 45510 FOR T7 = 1 TO TMAX / START LOOP READING ALL TAX RECORDS FROM MEMORY
  344. 45520 IF FS(T7) = FSS THEN GOTO 45530 ELSE GOTO 45610 / IF FEDERAL STATE NUMBERS MATCH THEN CHECK NEXT FIELD ELSE RECORD DOES NOT MATCH
  345. 45530 IF PP(T7) = PPS THEN GOTO 45540 ELSE GOTO 45610 / IF PAY PERIODS MATCH THEN CHECK NEXT FIELD ELSE RECORD DOES NOT MATCH
  346. 45540 IF MS(T7) = MSS THEN GOTO 45550 ELSE GOTO 45610 / IF MARRIED SINGLE NUMBER MATCH THEN CHECK NEXT FIELD ELSE RECORD DOES NOT MATCH
  347. 45550 IF PAY# < MIND#(T7) GOTO 45610 / IF PAY IS LESS THEN MINIMUM FOR THIS TAX BRACKET THEN RECORD DOES NOT MATCH
  348. 45560 IF PAY# > MAXD#(T7) GOTO 45610 / IF PAY IS GREATER THEN THE MAXIMUM FOR THIS TAX BRACKET THEN RECORD DOES NOT MATCH
  349. 45570 PAYEX# = PAY# - OVR#(T7) / PAY OVER BASE TAX RATE
  350. 45580 TXE# = PAYEX# * PCT!(T7) / 100    / TAX ON PAY OVER BASE TAX RATE
  351. 45590 TTAX# = TAX#(T7) + TXE# / TOTAL TAX 
  352. 45600 GOTO 45680 
  353. 45610 NEXT T7 / CHECK NEXT RECORD
  354. 45620 PRINT "++++++  PROPER TAX TABLE NOT FOUND  ++++++" / IF TAX TABLE NOT FOUND THIS IS SHOWN ON THE SCREEN
  355. 45630 PRINT "CHECK : FEDERAL OR STATE NUMBER ";FSS
  356. 45640 PRINT "        PAY PERIOD NUMBER       ";PPS
  357. 45650 PRINT "        MARRIED/SINGLE NUMBER   ";MSS
  358. 45660 PRINT "        PAY                     ";PAY
  359. 45670 PRINT "*****  PRESS ANY KEY TO CONTINUE  ******"
  360. 45672 IF INKEY$ = "" GOTO 45672 / STAY HERE UNTILL A KEY IS PRESSED
  361. 45674 GOTO 3010 / BACK TO FILE OPTIONS
  362. 45680 REM RETURNS TTAX*
  363. 45690 RETURN 
  364. 46000 REM CROSS CHECK FIELD
  365. 46010 IF DATAIN >< 1 THEN GOSUB 40020 / IF INPUT OPTIONS ARE NOT IN MEMORY THEN GET THEM
  366. 46020 REM
  367. 46030 REM
  368. 46100 GET #1,RN / GET THE RECORD FROM THE DISK
  369. 46130 FOR N2= 1 TO NREC(A) / FOR ALL FIELDS IN THE RECORD
  370. 46133 N = N2
  371. 46135 REM
  372. 46140 ON IOPT(N) GOSUB 46200,46200,41600,41800,42000,46200,42600,42800,43000,43200,43400,43600,41800,53000,54000,55000,56000,57000,58000,59000 / ON INPUT OPTION GOSUB 
  373. 46145 IF CALFLG = 5 THEN 46160 / IF USING THE RECALCULATION OPTION THEN SKIP THE NEXT LINE
  374. 46150 GOSUB 43800
  375. 46160 NEXT N2 / END OF LOOP ON FIELDS
  376. 46162 PUT #1,RN / PUT THE RECORD ON DISK
  377. 46165 RETURN    
  378. 46200 ON FTY(A,N) GOTO 46220,46300,46400,46500,46500 / ON FIELD TYPE GOTO. THIS IS A DUMMY RECALCULATION FOR GET FROM ANOTHER FILE OPTION AND COMPUTE USING TAX TABLE OPTION 
  379. 46220 I$ = X$(N) / EQUAL TO OLD VALUE
  380. 46230 RETURN
  381. 46300 I% = CVI(X$(N)) / EQUAL TO OLD VALUE
  382. 46310 I# = I%
  383. 46320 RETURN
  384. 46400 I! = CVS(X$(N)) / EQUAL TO OLD VALUE
  385. 46410 I# = I!
  386. 46420 RETURN
  387. 46500 I# = CVD(X$(N)) / EQUAL TO OLD VALUE
  388. 46510 RETURN
  389. 47000 REM
  390. 47050 CALFLG = 5 / USING THE RECALCULATION OPTION FLAG
  391. 47100 GOSUB 13000 / CLEAR SCREEN
  392. 47110 PRINT "*******  RECALCULATE THE FIELDS IN A FILE OPTION  *******"
  393. 47120 PRINT ""
  394. 47130 PRINT "         Use only if you know what you are doing "
  395. 47140 PRINT ""
  396. 47150 PRINT "MINIMUM RECORD NUMBER : 1   MAXIMUM RECORD NUMBER : ";MRN
  397. 47160 PRINT ""
  398. 47190 PRINT "***********  DO YOU WANT TO USE THIS OPTION  ************"
  399. 47200 PRINT "          1 - NO, RETURN TO FILE OPTION"
  400. 47300 PRINT "          2 - YES, I WANT TO USE THIS OPTION "
  401. 47310 PRINT "*********  Enter the number then Press Return  **********"
  402. 47320 GOSUB 14000 / INPUT INTEGER LESS THEN 100 SUBROUTINE
  403. 47330 IF DT# < 1 OR DT# > 2 THEN 47320 / IF OUT OF RANGE THEN REENTER
  404. 47340 IF DT# = 1 THEN 3010 / BACK TO FILE OPTIONS
  405. 47400 FOR RN = 1 TO MRN / FOR ALL RECORDS
  406. 47430 GOSUB 46000 / RECALCULATE THEN
  407. 47450 NEXT RN
  408. 47470 GOTO 3010 / BACK TO FILE OPTIONS
  409. 48000 REM
  410. 48100 REM / TRIED TO GET TO LARGE A RECORD FROM THE FILE OPTIONS
  411. 48110 PRINT " ++++++  ERROR   +++++++"
  412. 48120 PRINT "RECORD NUMBER  ";RN2;" IN FILE ";F$(B);" DOES NOT EXIST"
  413. 48140 PRINT "YOU PROBABLY ENTERED FIELD ";IRNFLD(N);" WRONG"
  414. 48160 PRINT "*********  PRESS ANY KEY TO CONTINUE  ********"
  415. 48170 IF INKEY$ = "" GOTO 48170
  416. 48180 GOTO 40000 / START NEW ENTRY OVER AGAIN
  417. 49000 REM * SET GFLG TO ZERO  / IF A GLOBAL FLAG DOES NOT EQUAL 0 THEN IT IS USED IN THE CALCULATION OF ANOTHER FIELD
  418. 49100 FOR T = 1 TO 28 / SETS GLOBAL FLAGS TO 0 FOR ALL FIELDS
  419. 49110 GFLG(T) = 0
  420. 49120 NEXT T
  421. 49130 RETURN
  422. 50000 REM INTRO
  423. 50010 GOSUB 13000 / CLEAR SCREEN
  424. 50100 PRINT "                  M A I N     P R O G R A M    3.0   "
  425. 50105 PRINT ""
  426. 50110 PRINT "         Copyright 1984 by Potomac Pacific Engineering Inc."
  427. 50120 PRINT ""
  428. 50130 PRINT "This program is licensed FREE to all users with some restrictions "
  429. 50140 PRINT "YOU MUST READ THE LICENSE CONDITIONS PROIR TO USING THIS PROGRAM"
  430. 50165 PRINT "        See the manual for more information on the license."
  431. 50167 PRINT ""
  432. 50950 PRINT "*****************  PRESS ANY KEY TO CONTINUE  ******************";
  433. 50960 IF INKEY$ = "" GOTO 50960 / LOOP UNTILL ANY KEY IS PRESSED
  434. 50970 RETURN
  435. 51000 REM *******  DONE
  436. 51100 CLOSE
  437. 51105 GOSUB 13000 / CLEAR SCREEN
  438. 51110 PRINT " -BYE, Have a nice Day
  439. 51120 END  / EXITS PROGRAM 
  440. 52000 REM *  SUB RECORD INPUT
  441. 52010 LI = 1 / LINE ONE
  442. 52020 GOSUB 13100 / LOCATE SUBROUTINE
  443. 52030 PRINT TAB(60) "ON SUBRECORD ";(RN+1) 
  444. 52100 OFFSET = OFFSET + 1 / INCREMENT OFFSET FOR EACH SUBRECORD
  445. 52110 RN = RN + 1 / INCREMENT RECORD NUMBER
  446. 52115 IF REALFLG(A) = 2 AND RN <= MRN THEN GOSUB 61300 / IF THERE ARE REALTIME TRANSFERS AND YOU ARE OVER WRITING A RECORD THEN CORRECT REALTIME TARGET FILE
  447. 52120 T2 = LSTE + 1 / FIRST REPEATING FIELD IS T2
  448. 52130 FOR N = T2 TO NREC(A) / FOR ALL RECORD NUMBERS
  449. 52135 REFLG = 0 / RESTART FLAG SET TO NO
  450. 52140 ON IOPT(N) GOSUB 41200,41400,41600,41800,42000,42200,42600,42800,43000,43200,43400,43600,41800,53000,54000,55000,56000,57000,58000,59000 / ON INPUT OPTION GOTO
  451. 52150 GOSUB 43800 / PRINT ON SCREEN 
  452. 52160 NEXT N  / END LOOP ON FIELDS
  453. 52165 GOTO 44910 / PUT DATA ON DISK AND GET NEXT OPTION
  454. 53000 REM  SPACE FOR CUSTOM INPUT OPTION # 14
  455. 53990 RETURN
  456. 54000 REM  SPACE FOR CUSTOM INPUT OPTION # 15
  457. 54990 RETURN
  458. 55000 REM SPACE FOR CUSTOM INPUT OPTION # 16
  459. 55990 RETURN
  460. 56000 REM SPACE FOR CUSTOM INPUT OPTION # 17
  461. 56990 RETURN
  462. 57000 REM SPACE FOR CUSTOM INPUT OPTION # 18
  463. 57990 RETURN
  464. 58000 REM SPACE FOR CUSTOM INPUT OPTION # 19
  465. 58990 RETURN
  466. 59000 REM SPACE FOR CUSTOM INPUT OPTION # 20
  467. 59990 RETURN
  468. 60000 REM *READ REALTIME OPTIONS
  469. 60010 OPEN "I",#1,"REALTIME" / OPEN REALTIME FILE
  470. 60020 FOR T = 1 TO MAXF
  471. 60030 INPUT #1,REALFLG(T) / FOR EACH FILE READ THE REALTIME OPTION
  472. 60040 NEXT T
  473. 60050 CLOSE #1
  474. 60060 RETURN
  475. 60070 REM * READ REALTIME DATA
  476. 60080 A$ = STR$(A) / CONVERT FILE NUMBER TO A STRING
  477. 60090 A$ = MID$(A$,2) / GET RID OF LEADING SPACE
  478. 60100 A$ = "REAL" + A$ / CONCATE "REAL" AND THE FILE NUMBER
  479. 60110 OPEN "I",#3,A$ / OPEN THE REALTIME DATA FILE FOR THIS FILE
  480. 60120 INPUT #3,TFILE,FLD1,FLD2,TFLD1,TFLD2,TFLD3,TFLD4,ADSUB1,ADSUB2,ADSUB3,ADSUB4,TGTRN / INPUT THE REALTIME DATA
  481. 60130 CLOSE #3 
  482. 60140 RETURN
  483. 60200 REM * OPEN REALTIME FILE
  484. 60202 IF ROPEN = 5 THEN RETURN / IF THE REALTIME TARGET FILE IS ALREADY OPEN THEN RETURN
  485. 60205 GOSUB 13000 / CLEAR SCREEN
  486. 60210 AHLD = A / HOLD A
  487. 60220 A = TFILE
  488. 60230 C = TFILE
  489. 60235 PRINT F$(C);"   FILE FOR REALTIME TRANSFER "
  490. 60240 GOSUB 2300 / GET THE DISK DRIVE THE REALTIME FILE IS ON
  491. 60245 C = TFILE
  492. 60250 GOSUB 2580 / OPEN AS FILE 3 
  493. 60260 A = AHLD
  494. 60265 ROPEN = 5 / SET OPEN FLAG TO YES
  495. 60270 RETURN
  496. 60300 REM * PUT DATA ON REALTIME FILE
  497. 60310 IF REALFLG(A) >< 2 THEN RETURN / IF REALTIME TRANSFERS NOT SPECIFIED THEN RETURN
  498. 60330 REM *** CONTINUE
  499. 60340 IF ROPEN < 5 THEN GOSUB 60200 / IF REATIME TARGET FILE IS NOT OPEN THEN OPEN
  500. 60400 T3 = X(TGTRN) / THE TARGET RECORD NUMBER
  501. 60410 GET #3,T3 / GET THE TARGET RECORD NUMBER
  502. 60415 IF CTK = 5 THEN 60600 / IF CORRECT FLAG THEN 60600
  503. 60420 T1# = CVD(Z$(TFLD1)) / THE TARGEST FILE INITIAL VALUE
  504. 60430 T2# = X(FLD1) / THE VALUE TO ADD TO THE TARGET FILE
  505. 60440 IF ADSUB1 = 2 THEN T2# = -1 * T2# / IF SUBTRACT OPTION THEN CHANGE TO A NEGITIVE
  506. 60450 LSET Z$(TFLD1) = MKD$(T1# + T2#) / ADD AND PUT RESULT IN FILE BUFFER
  507. 60460 IF TFLD2 = 0 THEN 60600 / IF NO SECOND TRANSFER 
  508. 60520 T1# = CVD(Z$(TFLD2)) / VALUE OF TARGET FIELD
  509. 60540 IF ADSUB2 = 2 THEN T2# = -1 * T2# / IF SUBTRACT OPTION THEN MAKE NEGITIVE
  510. 60550 LSET Z$(TFLD2) = MKD$(T1# + T2#) / ADD AND PUT SUM IF FILE BUFFER
  511. 60600 REM * SECOND TRANSFER
  512. 60605 IF CTK = 4 THEN 60900 / IF DO NOT CORRECT THIS TRANSFER FLAG
  513. 60610 IF FLD2 = 0 THEN 60900 / IF NO SECOND TRANSFER
  514. 60620 T1# = CVD(Z$(TFLD3)) / INITIAL VALUE OF TRANSFER FIELD
  515. 60630 T2# = X(FLD2) / SOURCE FIELD
  516. 60640 IF ADSUB3 = 2 THEN T2# = -1 * T2# / IF SUBTRACT OPTION THEN MAKE NEGITIVE
  517. 60650 LSET Z$(TFLD3) = MKD$(T1# + T2#) / ADD AND PUT SUM IF FILE BUFFER
  518. 60660 IF TFLD4 = 0 THEN 60900 / IF NO SECOND TRANSFER
  519. 60720 T1# = CVD(Z$(TFLD4)) / INITIAL VALUE OF TARGER FIELD
  520. 60740 IF ADSUB4 = 2 THEN T2# = -1 * T2# / IF SUBTRACT OPTION THEN MAKE NEGITIVE
  521. 60750 LSET Z$(TFLD4) = MKD$(T1# + T2#) / ADD PUT SUM IN FILE BUFFER
  522. 60900 PUT #3,T3 / PUT TARGET RECORD ON DISK
  523. 60920 CTK = 1 / RESET CORRECT FLAG TO NO
  524. 60980 RETURN
  525. 61000 REM *  CORECT DATA ON REALTIME FILE
  526. 61050 CTK = 4 / SET CORRECT FLAG 
  527. 61060 XHLD1 = X(N) / HOLD X
  528. 61100 X(N) = I# - X(N) / DIFFERENCE BETWEEN OLD VALUE AND CORRECTION
  529. 61120 GOSUB 60300 / UPDATE REALTIME FILE
  530. 61130 X(N) = XHLD1 / RETURN VALUE OF X
  531. 61140 RETURN
  532. 61200 XHLD1 = X(N) / HOLD X
  533. 61205 X(N) = I# - X(N) / DIFFERENCE BETWEEN OLD VALUE AND CORRECTION
  534. 61215 CTK = 5 / SET CORRECT FLAG
  535. 61220 GOSUB 60300 / UPDATE REALTIME FILE
  536. 61230 X(N) = XHLD1 / RETURN VALUE OF X
  537. 61240 RETURN
  538. 61300 REM * CORRECT REALTIME FILE FOR OVERWRITE
  539. 61330 GET #1,RN / GET OLD RECORD
  540. 61340 X1# = CVD(X$(FLD1)) / TRANSFERED FIELD 1
  541. 61350 X2# = CVD(X$(FLD2)) / TRANSFERED FIELD 2
  542. 61355 X3# = CVI(X$(TGTRN)) / OLD TARGET RECORD NUMBER
  543. 61360 RETURN
  544. 61400 REM ***
  545. 61410 XHLD1 = X(FLD1) / HOLD
  546. 61420 XHLD2 = X(FLD2) / HOLD
  547. 61425 XHLD3 = X(TGTRN) / HOLD
  548. 61430 X(FLD1) = -X1# / NEGITIVE OLD VALUE
  549. 61440 X(FLD2) = -X2# / NEGITIVE OLD VALUE
  550. 61445 X(TGTRN) = X3# / OLD TARGER FIELD
  551. 61450 GOSUB 60300 / CORRECT OLD TARGER FIELD 
  552. 61460 X(FLD1) = XHLD1 / REPLACE HELD VALUE
  553. 61470 X(FLD2) = XHLD2 / REPLACE HELD VALUE
  554. 61475 X(TGTRN) = XHLD3 / REPLACE HELD VALUE
  555. 61480 RETURN
  556. 1 / REPLACE HELD VALUE
  557. 614