Table of Contents

DMSDSK Source

References

Source Listing

DMSDSK.ASSEMBLE.txt
  1. DSK TITLE 'DMSDSK (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00003000
  4. * 00004000
  5. * 00005000
  6. * 00006000
  7. * 00007000
  8. * MODULE NAME: 00008000
  9. * 00009000
  10. * DMSDSK (DISK) 00010000
  11. * 00011000
  12. * FUNCTION: 00012000
  13. * 00013000
  14. * TO DUMP A DISK FILE TO CARDS, OR TO LOAD FILES FROM 00014000
  15. * CARDS TO DISK. 00015000
  16. * 00016000
  17. * ATTRIBUTES: 00017000
  18. * 00018000
  19. * TRANSIENT (WITH SYSTEM OPTION); SERIALLY REUSABLE. 00019000
  20. * 00020000
  21. * ENTRY POINTS: 00021000
  22. * 00022000
  23. * DMSDSK - SEE FUNCTION DESCRIPTION 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS: 00025000
  26. * 00026000
  27. * DISK: 00027000
  28. * GPR1 - A(PLIST) 00028000
  29. * PLIST - CL8'DISK ' 00029000
  30. * CL8'LOAD ' OPERATION 00030000
  31. * XL8'FF' 00031000
  32. * 00032000
  33. * OR CL8'DISK ' 00033000
  34. * CL8'DUMP ' OPERATION 00034000
  35. * CL8' ' FILENAME 00035000
  36. * CL8' ' FILETYPE 00036000
  37. * CL8' ' FILEMODE 00037000
  38. * XL8'FF....FF' FENCE 00038000
  39. * 00039000
  40. * EXIT CONDITIONS: 00040000
  41. * 00041000
  42. * NORMAL - 00042000
  43. * GPR15 = 0 : THE DISK DUMP OR LOAD COMPLETED NORMALLY 00043000
  44. * 00044000
  45. * ERROR - 00045000
  46. * GPR15 = XX: ERROR CODE 00046000
  47. * 28 FILE NOT FOUND 00047000
  48. * 24 INVALID FUNCTION 00048000
  49. * 24 NO FUNCTION SPECIFIED 00049000
  50. * 24 INCOMPLETE FILEID 00050000
  51. * 20 INVALID '*' IN FILEID 00051000
  52. * 8 READER EMPTY OR NOT READY 00052000
  53. * 24 INVALID PARAMETER 00053000
  54. * 32 END CARD MISSING IN INPUT DECK 00054000
  55. * 32 INVALID CARD IN INPUT DECK 00055000
  56. * 36 SPECIFIED DISK IS READ/ONLY 00056000
  57. * 36 DISK MODE NOT ACCESSED 00056500
  58. * 100 ALL I/O ERRORS 00057000
  59. * 00058000
  60. * CALLS TO OTHER ROUTINES: 00059000
  61. * 00060000
  62. *| DMSCIO - READ/PUNCH CARDS 00061000
  63. *| DMSCPF - CLOSE READER/PUNCH 00062000
  64. *| DMSCWR - WRITE LINE TO TERMINAL WITH AUTO, CARRIAGE RET 00063000
  65. *| DMSERS - ERASE A GIVEN FILE FROM USER DISK 00064000
  66. *| DMSFNS - CLOSE A GIVEN FILE; SCRATCH ENTRY FROM ADT 00065000
  67. *| DMSALG - HALT EXECUTION DURING RUNNING PROGRAM 00066000
  68. *| DMSBRD - READ A DISK RECORD 00067000
  69. *| DMSSTT - VERIFY EXISTENCE OF GIVEN FILE ; LOCATE COPY 00068000
  70. *| OF FST ENTRY 00069000
  71. *| DMSAUD - RESERVE SPACE ON DISK FOR NEW COPY OF UFD 00070000
  72. *| DMSBWR - WRITE A DISK RECORD 00071000
  73. * 00072000
  74. * EXTERNAL REFERENCES: 00073000
  75. * 00074000
  76. * ADT - ACTIVE DISK TABLE 00075000
  77. * FSTB - FILE STATUS TABLE BLOCK 00076000
  78. * FVS - FIXED VARIABLE STORAGE: V-CONS FOR CMS ROUTINES 00077000
  79. * 00078000
  80. * TABLES/WORKAREAS: 00079000
  81. * 00080000
  82. * SEE EXTERNAL REFERENCES 00081000
  83. * 00082000
  84. * REGISTER USAGE: 00083000
  85. * 00084000
  86. * GPR1 - A(PLIST) FOR SVC CALLS 00085000
  87. * GPR2 - MODULE ADDRESSABILITY 00086000
  88. * GPR13 - A (FVS) 00087000
  89. * GPR14 - RETURN 00088000
  90. * GPR15 - ERROR CODE RETURN 00089000
  91. * 00090000
  92. * NOTES: 00090100
  93. * DISK MUST BE GENMOD'D WITH THE SYSTEM OPTION, E.G.: 00090200
  94. * LOAD DMSDSK (ORIGIN TRANS 00090300
  95. * GENMOD DISK (SYSTEM 00090400
  96. * 00090500
  97. * OPERATION: 00091000
  98. * 00092000
  99. * THE OPERATION OF DISK DEPENDS ON WHETHER THE CALLING 00093000
  100. * PROGRAM SPECIFIES DUMP OR LOAD. 00094000
  101. * 00095000
  102. * DUMP: DISK COPIES THE FILE DESIGNATION FROM THE 00096000
  103. * PARAMETER LIST INTO BYTES 58 - 76 OF AN 89-BYTE 00097000
  104. * BUFFER. (THE FIRST FOUR BYTES OF THE BUFFER CONTAIN 00098000
  105. * AN IDENTIFIER CONSISTING OF AN INTERNAL 00099000
  106. * REPRESENTATION OF A 12-2-9 PUNCH AND THE CHARACTERS 00100000
  107. * 'CMS'.) THEN DISK TEMPORARILY CHANGES THE 00101000
  108. * CHARACTERISTICS OF THE FILE IN THE 40-BYTE FST ENTRY 00102000
  109. * TO MAKE IT APPEAR AS A FILE OF 800-BYTE FIXED-LENGTH 00103000
  110. * RECORDS. (THE CORRECT FST ENTRY IS RESTORED WHEN THE 00104000
  111. * FILE HAS BEEN DUMPED, OF COURSE.) DISK MOVES THE 00105000
  112. * INITIAL VALUE FOR SEQUENCING 00106000
  113. * (001) INTO BYTES 77-80 OF THE BUFFER. DISK NEXT 00107000
  114. * CALLS THE DMSBRD FUNCTION 00108000
  115. * PROGRAM TO READ THE FIRST 50 BYTES OF THE TEMPORARY 00109000
  116. * COPY INTO 00110000
  117. * BYTES 6-55 OF THE BUFFER AND THEN THE DMSCIO FUNCTION 00111000
  118. * PROGRAM TO PUNCH 00112000
  119. * THE CONTENTS OF THE BUFFER. HAVING PUNCHED THE FIRST 00113000
  120. * CARD, DISK INCREMENTS THE SEQUENCE NUMBER (BYTES 00114000
  121. * 77-80 OF THE OUTPUT BUFFER) AND OVERLAYS BYTES 6-55 00115000
  122. * OF THE BUFFER WITH THE NEXT 50 BYTES OF THE FILE 00116000
  123. * BY CALLING DMSBRD. IT THEN PUNCHES THE CONTENTS OF 00117000
  124. * THE 00118000
  125. * BUFFER. DISK REPEATS THIS PROCESS FOR EACH 00119000
  126. * SUBSEQUENT 50 BYTES OF DATA IN THE TEMPORARY DISK 00120000
  127. * FILE. WHEN THE END-OF-FILE IS ENCOUNTERED, DISK 00121000
  128. * GENERATES AN END CARD (ONE WITH N IN COLUMN 5) AND 00122000
  129. * PUNCHES IT, 00123000
  130. *| CALLS THE CP CLOSE COMMAND TO CLOSE PUNCH 00124000
  131. * OPERATIONS, RESTORES 00125000
  132. * THE FST ENTRY TO ITS CORRECT VALUE, AND RETURNS TO 00126000
  133. * THE CALLER. 00127000
  134. * 00128000
  135. * LOAD: DISK CALLS THE DMSERS COMMAND PROGRAM TO ERASE 00129000
  136. * THE TEMPORARY FILE 00130000
  137. *| 'DISK CMSUT1' CREATED DURING A PREVIOUS LOAD OPERATION. 00131000
  138. * NEXT, IT CALLS THE 00132000
  139. * DMSCIO FUNCTION PROGRAM TO READ THE FIRST CARD. (IF 00133000
  140. * THIS CARD WAS 00134000
  141. * PRODUCED BY THE DUMP PORTION OF DISK, IT WILL CONTAIN 00135000
  142. * AN IDENTIFIER IN COLUMNS 1-4.) DISK THEN CHECKS THE 00136000
  143. * IDENTIFIER IN THE CARD. IF INVALID, IT ISSUES A 00137000
  144. * MESSAGE TO THE EFFECT THAT THERE IS AN ILLEGAL CARD 00138000
  145. * IN THE DISK 00139000
  146. *| LOAD DECK, CALLS THE CP CLOSE COMMAND TO CLOSE 00140000
  147. * CARD READER OPERATIONS (WITH THE 'HOLD' OPTION) 00141000
  148. *| AND RETURNS TO THE CALLING PROGRAM. 00142000
  149. * IF THE IDENTIFIER IS VALID, DISK DETERMINES WHETHER 00143000
  150. * THE CARD IS AN END CARD (THAT IS, ONE WITH N IN THE 00144000
  151. * FIFTH BYTE). IF IT IS NOT, DISK MOVES THE FILE DATA 00145000
  152. * PORTION OF THE CARD (50 BYTES IN COLUMNS 6-55) INTO 00146000
  153. * THE NEXT AVAILABLE LOCATION IN AN 800-BYTE OUTPUT 00147000
  154. * BUFFER. DISK THEN READS THE NEXT CARD, WHICH IT 00148000
  155. * PROCESSES SIMILARLY. WHEN THE ENTIRE 800-BYTE OUTPUT 00149000
  156. * BUFFER HAS BEEN FILLED WITH DATA FROM THE 00150000
  157. * INPUT CARDS, DISK CALLS THE DMSBWR FUNCTION PROGRAM 00151000
  158. * TO WRITE THE CONTENTS OF 00152000
  159. * THE BUFFER INTO A FILE DESIGNATED AS DISK CMSUT1. 00153000
  160. * DISK REPEATS THE PROCESS OF FILLING THE OUTPUT BUFFER 00154000
  161. * AND WRITING ITS CONTENTS INTO THE DISK FILE UNTIL THE 00155000
  162. * END CARD IS READ. 00156000
  163. * 00157000
  164. * WHEN THE END CARD IS READ, DISK CALLS THE DMSFNS 00158000
  165. * COMMAND PROGRAM 00159000
  166. * TO CLOSE THE TEMPORARY FILE CREATED FROM THE FILE IN 00160000
  167. * THE CARD DECK. 00161000
  168. * IT THEN CALLS THE DMSERS COMMAND PROGRAM TO ERASE THE 00162000
  169. * FILE (IF ANY) THAT HAS THE SAME 00163000
  170. * DESIGNATION AS THE CARD FILE JUST CONVERTED TO A DISK 00164000
  171. * FILE. NEXT, DISK CALLS 00165000
  172. *| THE DMSLFSP FUNCTION TO LOCATE THE FILE STATUS 00166000
  173. * TABLE FOR THE 00167000
  174. * DISK FILE. (THIS FILE IS AGAIN DISK CMSUT1. 00168000
  175. * SUBSEQUENTLY, DISK MOVES THE DESIGNATION FOR THE CARD 00169000
  176. * FILE FROM THE END CARD INTO THE CORRESPONDING 00170000
  177. * LOCATIONS IN THE FILE STATUS TABLE. THIS COMPLETES 00171000
  178. * THE CONVERSION OF THE FIRST CARD FILE IN THE CARD 00172000
  179. * READER TO A DISK FILE, AND DISK 00173000
  180. * CALLS THE DMSCWR FUNCTION PROGRAM TO TYPE A MESSAGE 00174000
  181. * AT THE TERMINAL TO THE 00175000
  182. * EFFECT THAT THE FILE HAS BEEN LOADED. DISK PROCESSES 00176000
  183. * TEH NEXT FILE IN THE CARD READER IN A SIMILAR MANNER. 00177000
  184. * 00178000
  185. * WHEN AN END-OF-FILE ON THE CARD READER IS 00179000
  186. * ENCOUNTERED, DISK CALLS 00180000
  187. *| THE CP CLOSE COMMAND TO CLOSE CARD READER 00181000
  188. * OPERATIONS AND RETURNS 00182000
  189. * TO THE CALLING PROGRAM. 00183000
  190. * 00184000
  191. * NOTES: DMSAUD IS CALLED AT THE APPROPRIATE TIME WHEN 00185000
  192. * DISK LOAD IS 00186000
  193. * BEING EXECUTED, TO UPDATE THE DIRECTORY FOR THE FILE 00187000
  194. * BEING LOADED. 00188000
  195. * 00189000
  196. * DISK IS A FEASIBLE WAY TO TRANSFER VARIABLE-LENGTH 00190000
  197. * FILES, SUCH AS MODULE'S OR SCRIPT FILES, BETWEEN ONE 00191000
  198. * USER AND ANOTHER. 00192000
  199. * 00193000
  200. * DISK DUMP CAN DUMP FILES FROM ANY DISK. DISK LOAD 00194000
  201. * LOADS FILES ONTO THE A-DISK. THE MODE NUMBER OF THE 00195000
  202. * FILE IS RETAINED. 00196000
  203. * 00197000
  204. *. 00198000
  205. EJECT 00199000
  206. EJECT 00200000
  207. DMSDSK START X'E000' MUST BE TRANSIENT-DISK-RESIDENT 00201000
  208. USING *,BASE 00202000
  209. LR BASE,15 SET BASE 00203000
  210. LR CMSRET,14 SAVE CMS RETURN ADDRESS 00204000
  211. * NOTE: ALREADY HAS NUCLEUS PROTECT KEY 00205000
  212. USING NUCON,R0 00206000
  213. MVI DSKFLAG,0 CLEAR DEFAULT FILEID FLAG 00207000
  214. L R13,AFVS 'FVS' INFO 00208000
  215. USING FVSECT,R13 ... 00209000
  216. LA R6,EXIT2 SET R6 'SWITCH' 00210000
  217. LA R1,8(,R1) POINT TO FUNCTION 00211000
  218. CLC 0(8,1),=CL8'DUMP' IS IT 'DUMP' MODE 00212000
  219. BE DKDUMP YES, GO TO DUMP 00213000
  220. CLC 0(8,1),=CL8'LOAD' IS IT 'LOAD' MODE 00214000
  221. BE DKLOAD YES, GO TO LOAD 00215000
  222. CLI 0(R1),X'FF' ANY FUNCTION SPECIFIED? 00216000
  223. BE ERR47E NO, ERROR 00217000
  224. B ERR14E YES, BUT IT'S A BAD ONE. 00218000
  225. EJECT 00219000
  226. ********************************************************************** 00220000
  227. * 00221000
  228. * 'DISK DUMP' 00222000
  229. * 00223000
  230. * NOTE: DUMPS FROM ANY SPECIFIED DISK 00224000
  231. * 00225000
  232. ********************************************************************** 00226000
  233. * 00227000
  234. DKDUMP EQU * 00228000
  235. OI DSKFLAG,DUMP 00229000
  236. LA R1,8(,R1) POINT TO FILEID 00230000
  237. CLI 0(1),X'FF' FILENAME GIVEN? 00231000
  238. BE ERR54E NO 00232000
  239. LR R7,R1 SAVE FILEID PTR 00233000
  240. CLI 0(R1),C'*' '*' IS ILLEGAL 00234000
  241. BE ERR62E 00235000
  242. LA R1,8(,R1) POINT TO FILETYPE 00236000
  243. CLI 0(1),X'FF' FILETYPE? 00237000
  244. BE ERR54E NO 00238000
  245. CLI 0(R1),C'*' '*' IS BAD FOR FILETYPE TOO 00239000
  246. BE ERR62E 00240000
  247. MVC STLIST+8(16),0(R7) MOVE NAME AND TYPE 00241000
  248. MVC STMODE(2),ADISK DEFAULT TO A-DISK 00242000
  249. LA R1,8(,R1) POINT TO FILEMODE 00243000
  250. CLI 0(1),X'FF' MODE? 00244000
  251. BE DK1 NO 00245000
  252. CLI 8(R1),X'FF' ANY GARBAGE AFTER MODE? 00246000
  253. BNE ERR70E YES. 00247000
  254. MVC STMODE(2),0(R1) USE MODE FROM USER 00248000
  255. DK1 LA R1,STLIST CALL 00249000
  256. L R15,ASTATE STATE @V305066 00250000
  257. BALR R14,R15 ... @V305066 00250500
  258. BNZ STERROR ERROR EXIT @V305066 00251000
  259. MVC RMODE(1),FVSFSTM USE STATEFST MODE-LETTER FOR RDBUF 00252000
  260. LA R6,EXIT1 SET R6 'SWITCH' TO RESTORE FST-ENTRY 00253000
  261. L R1,STATER1 GET ADDRESS OF ACTUAL FST-ENTRY 00254000
  262. MVC SAVFST40(40),0(R1) SAVE IT FOR LATER RESTORING 00255000
  263. USING FSTSECT,R1 REFERENCE THE FST-ENTRY ... 00256000
  264. MVC RNAME(16),FSTN FILL IN NAME & TYPE, 00257000
  265. MVC FNAME(16),FSTN EVERYTHING ALSO 00258000
  266. MVC FNAME+17(1),FSTM+1 GET MODE NUMBER FROM FST 00259000
  267. MVC FNAME+16(1),RMODE GET LETTER FROM STATE FST 00260000
  268. MVC FSTSAVE(20),20(R1) SAVE CRUCIAL 'OLD' FST INFO, 00261000
  269. * 00262000
  270. * FUDGE FST-ENTRY SO THAT FILE LOOKS LIKE 800-BYTE FIXED RECORDS 00263000
  271. * (WE'LL RESTORE IT LATER, OF COURSE) 00264000
  272. * 00265000
  273. OI UFDBUSY,WRBIT PREVENT 'KX' WHILE FST-ENTRY IS FUDGED JS 00266000
  274. LA R7,DK4 SET R7 FOR VARIABLE FILES 00267000
  275. LH R0,FSTDBC NO. OF 800-BYTE ITEMS INTO R0 00268000
  276. SR R14,R14 CLEAR 'REMAINDER' FLAG @VA04989 00268100
  277. CLI FSTFV,C'V' IS IT VARIABLE ? 00269000
  278. BE LDNBLKS YES, BYPASS THE FUDGING @VA06143 00270000
  279. LH R15,FSTIC IF FIXED, GET NO. OF ITEMS, 00271000
  280. N R15,F65535 NO NEGATIVE NUMBERS FROM 'LH' PLEASE 00272000
  281. M R14,FSTIL R15 (SIC) TIMES ITEM-SIZE GIVES TOTAL BYTES 00273000
  282. D R14,F800 DIVIDE BY 800 00274000
  283. LR R0,R15 PUT NO. OF BLKS TO READ IN R0 @VA05914 00274100
  284. LDNBLKS EQU * @VA06143 00274400
  285. LR R9,R0 GET NO. 800-BYTE BLOCKS @VA07139 00274700
  286. LTR R14,R14 COULD CONCEIVABLY COME OUT EVEN 00275000
  287. BZ MVIF FORGET IT IF YES 00276000
  288. LA R9,1(,R9) ADD SHORT BLOCK TO COUNT @VA06143 00277000
  289. LA R15,49(,R14) REMAINDER PLUS 49 INTO R15, 00278000
  290. SR R14,R14 AND DIVIDE BY 50 00279000
  291. D R14,FIFTY TO GET NO. OF 50-BYTE CHUNKS LEFT OVER JS 00280000
  292. LR R8,R15 PLACE THIS IN R8 FOR LATER 00281000
  293. LA R7,DK3A SET R7 'SWITCH' FOR DK3A INSTEAD. 00282000
  294. MVIF MVI FSTFV,C'F' SET F/V FLAG TO F, 00283000
  295. MVC FSTIL,F800 FORCE ITEM LENGTH OF 800 BYTES, 00284000
  296. STH R9,FSTIC SET ITEM COUNT=NO.PHYS BLOKS@VA04989 00285300
  297. MVC SEQNO,=CL4'0001' INITIALIZE SEQUENCING INFORMATION 00286000
  298. MVC PSEQNO,=PL2'1' ... 00287000
  299. MVI DATAOUT-1,C' ' CLEAR 'N' FLAG 00288000
  300. SR R9,R9 @VA04989 00288100
  301. STH R9,RBLOKNO INIT DISK READ BLOK NUMBER @VA04989 00288150
  302. LTR R0,R0 MAKE SURE 'QUOTIENT' NOT ZERO 00289000
  303. BZ DK3A IF IT IS, READ JUST 'REMAINDER' 00290000
  304. DK2 LA COUNT,16 16 50-BYTE CHUNKS PER 800-BYTE BUFFER JS 00291000
  305. DK2A LA POINTR,BUFFER START AT BEGINNING OF BUFFER 00292000
  306. DSKREAD EQU * @VA04989 00292100
  307. LH R9,RBLOKNO GET CURRENT BLOK NUMBER @VA04989 00292150
  308. LA R9,1(,R9) AND UPDATE IT... @VA04989 00292200
  309. STH R9,RBLOKNO ... @VA04989 00292250
  310. LA R1,READDSK READ AN 800-BYTE 00293000
  311. L R15,ARDBUF READ AN 800-BYTE @V305066 00294000
  312. BALR R14,R15 ... @V305066 00294100
  313. BNZ EOFCHK ... @V305066 00294200
  314. CLI AVAIL(R1),NOITEM WAS DATA BLOCK NULL? @VA04989 00294250
  315. BE DSKREAD IF SO, FORGET THIS BLOCK @VA04989 00294300
  316. STCM R9,3,BLOKNOUT STORE BLOK NUMBER IN CARD @VA04989 00294350
  317. DK3 MVC DATAOUT(50),0(POINTR) MOVE 50 BYTES TO CARD BUFFER, 00296000
  318. LA 1,PUNCH PUNCH CARD 00297000
  319. SVC X'CA' ... 00298000
  320. DC AL4(ERR118S) PUNCH ERROR 00299000
  321. AP PSEQNO,=PL2'1' UPDATE SEQ. NO. 00300000
  322. UNPK SEQNO(4),PSEQNO(2) ... 00301000
  323. OI SEQNO+3,X'F0' ... 00302000
  324. LA POINTR,50(,POINTR) ADVANCE TO NEXT 50-BYTE CHUNK, 00303000
  325. BCT COUNT,DK3 ITERATE THRU 800-BYTE BLOCK 00304000
  326. BCT R0,DK2 ITERATE LARGER LOOP PER NO. OF ITEMS. JS 00305000
  327. BR R7 WE'RE ALL DONE IF NO. ITEMS EXHAUSTED. JS 00306000
  328. DK3A LA R7,DK4 IF ANY LEFT, FORCE QUITTING THE NEXT TIME 00307000
  329. LA R0,1 ONE 800-BYTE RECORD TO GO 00308000
  330. LR COUNT,R8 REMAINDER INTO 'COUNT' INSTEAD OF 16, JS 00309000
  331. B DK2A AND GO 'FINISH UP'... 00310000
  332. DROP R1 00311000
  333. * 00312000
  334. EOFCHK C 15,=F'12' TEST FOR EOF 00313000
  335. BNE ERR104S NOT EOF, MUST BE ERROR 00314000
  336. DK4 MVC DATAOUT(50),FSTSAVE NOW OUTPUT THE FST INFO 00315000
  337. MVI DATAOUT-1,C'N' INDICATE END CARD 00316000
  338. LA 1,PUNCH PUNCH CARD 00317000
  339. SVC X'CA' ... 00318000
  340. DC AL4(ERR118S) ... 00319000
  341. B ERRETN RETURN 00320000
  342. SPACE 3 00321000
  343. * ERROR FROM 'STATE' CALL... 00322000
  344. * 00323000
  345. STERROR CH R15,=H'28' 00324000
  346. BE ERR2E FILE NOT FOUND 00325000
  347. CH R15,RET36 DISK MODE ACCESSED? @VA06214 00325300
  348. BER CMSRET NO, RETURN TO CMS @VA06214 00325600
  349. LR R0,R15 00326000
  350. B RESTERR SYNTAX OR DISK ERROR 00327000
  351. ERR2E EQU * 00328000
  352. DMSERR NUM=2,LET=E,SUB=(CHAR8A,STNAME),TEXT='FILE ''..........*00329000
  353. ..........'' NOT FOUND' 00330000
  354. LA R0,28 RETURN CODE = 28 00331000
  355. B RESTERR 00332000
  356. EJECT 00333000
  357. ********************************************************************** 00334000
  358. * 00335000
  359. * 'DISK LOAD' 00336000
  360. * 00337000
  361. * DATE/TIME IS THAT OF NEW LOADED FILE 00338000
  362. * (NOT THE OLD ONE ON CARDS) 00339000
  363. * 00340000
  364. ********************************************************************** 00341000
  365. * 00342000
  366. DKLOAD EQU * 00343000
  367. TM BATFLAGS,BATRUN BATCH MONITOR RUNNING? V0742 00343100
  368. BZ NOTBAT @VM03203 00343200
  369. OI BATFLAG2,BATDCMS TELL BATCH WHO'S CALLING @VM03203 00343300
  370. LA R5,8 @VA10475 00343400
  371. SR R1,R5 POINT AT COMMAND @VA10475 00343500
  372. LR R14,CMSRET SO BATCH RETURNS TO CMS @VM03203 00343600
  373. L R15,ABATABND ENTER BATCH AT 'ABEND' POINT@VM03203 00343700
  374. BR R15 AND DON'T COME BACK.... @VM03203 00343800
  375. NOTBAT EQU * @VM03203 00343900
  376. MVC WRTMODE(2),ADISK INITIAL. TO A-DISK FOR WRITES 00344000
  377. CLI 8(R1),X'FF' END OF LINE? 00345000
  378. BNE ERR70E IF NOT, ERROR 00346000
  379. ERAST LA R1,WRTDSK ERASE OLD TEMP FILE 00347000
  380. L R15,AERASE ERASE @V305066 00348000
  381. BALR R14,R15 ... @V305066 00349000
  382. CH R15,RET36 IS DISK R/O OR NOT ACCESSED? @VA06214 00349300
  383. BNE NOTHREAD NEITHER, CONTINUE @VA06214 00349600
  384. L R9,IADT GET ADDRESS OF ADT @VA06214 00349900
  385. USING ADTSECT,R9 @VA06214 00350200
  386. CLC ADTID,BLANKS IS THERE AN 'A' DISK? @VA06214 00350500
  387. DROP R9 @VA06214 00350800
  388. BER CMSRET NO,DISK NOT ACCESSED,RTN TO CMS @VA06214 00351100
  389. B ERR37E YES, PRINT R/O MESSAGE @VA06214 00351400
  390. NOTHREAD MVI EOFFLG,X'F0' SIGNAL NOTHING READ YET @VA06214 00351700
  391. * 00353000
  392. * LOOP TO READ FROM CARDS AND WRITE ON DISK ONE OR MORE FILES... 00354000
  393. DKLOP3 LA COUNT,16 16 CARDS/800 BYTE BUFFER 00355000
  394. LA POINTR,BUFFER INITIALIZE 800 BYTE BUFFER 00356000
  395. XC BUFFER(200),BUFFER CLEAR 800-BYTE BUFFER BEFORE FILLING 00357000
  396. MVC BUFFER+200(200),BUFFER ... 00358000
  397. MVC BUFFER+400(200),BUFFER ... 00359000
  398. MVC BUFFER+600(200),BUFFER ... 00360000
  399. DKLOP2 LA 1,READ READ A CARD 00361000
  400. SVC X'CA' ... 00362000
  401. DC AL4(CRDEOF) TEST FOR EOF 00363000
  402. MVI EOFFLG,X'00' EOF ERROR IF ENCOUNTERED NOW 00364000
  403. CLC CARDIN(4),CARDOUT TEST FOR 12-2-9 CMS IN COL.1-4 00365000
  404. BNE ERR78E ILLEGAL CARD 00366000
  405. CLI BLOKNIN,BLANK 'OLD' DISK DUMP FORMAT? @VA04989 00366100
  406. * SINCE X'40'= D'16384', IT CANNOT BE VALID BLOK NUMBER @VA04989 00366150
  407. BE *+10 IF SO, SKIP NSI... @VA04989 00366200
  408. MVC WBLOKNO(2),BLOKNIN GET BLOK NUM FROM INPUT CARD@VA04989 00366250
  409. CLI CARDIN+4,C'N' TEST FOR END CARD 00367000
  410. BE DKLEND END CARD READ 00368000
  411. MVC 0(50,POINTR),DATAIN STORE IN 800 BYTE BUFFER 00369000
  412. LA POINTR,50(0,POINTR) INCREMENT BUFFER POINTER 00370000
  413. BCT COUNT,DKLOP2 FILL THE ENTIRE 800 BYTE BUFFER 00371000
  414. LA R1,WRTDSK WRITE CARDS ON A-DISK 00372000
  415. L R15,AWRBUF ... @V305066 00373000
  416. BALR R14,R15 ... @V305066 00374000
  417. BNZ WRTERR ... @V305066 00375000
  418. B DKLOP3 RE-INITIALIZE BUFFER 00376000
  419. * 00377000
  420. * 00378000
  421. DKLEND LA R1,WRTDSK FINISH WORK FILE 00379000
  422. C POINTR,ABUFFER ARE WE AT VERY BEGINNING OF BLOCK ? 00380000
  423. BE DKLFIN BE IF YES, NO PARTIAL OUTPUT THERE. 00381000
  424. L R15,AWRBUF IF NOT, CALL 'WRBUF' TO OUTPUT 00382000
  425. BALR R14,R15 PARTIALLY-FILLED BLOCK 00383000
  426. BNZ WRTERR (HOPEFULLY NO ERROR) 00384000
  427. DKLFIN L R15,AFINIS NOW CLOSE WORK FILE VIA FINIS 00385000
  428. BALR R14,R15 ... 00386000
  429. BNZ WRTERR BAD NEWS IF ERROR WRITING 00387000
  430. MVC FNAME(18),FNAMIN YES, USE IT'S OWN FILEID... 00388000
  431. ERASIT MVC ERASE+8(16),FNAME ERASE OLD FILE IF IT EXISTS 00389000
  432. LA 1,ERASE ... 00390000
  433. L R15,AERASE ERASE @V305066 00391000
  434. BALR R14,R15 ... @V305066 00391500
  435. OI UFDBUSY,UPBIT PREVENT 'KX' UNTIL 'UPDISK' IS FINISHED.. 00393000
  436. L R15,VCFSTLKP CALL FSTLKP TO FIND WHERE @VM03093 00394100
  437. LA R1,WRTDSK FINISHED WORK-FILE IS 00395000
  438. BALR 14,15 ... 00396000
  439. LH R15,28(R1) SAVE 1ST CHAIN-LINK ADDRESS TEMPORARILY, 00397000
  440. MVC 20(18,R1),DATAIN RESET BOTTOM OF FST EXCEPT FOR YEAR, 00398000
  441. MVC 0(16,R1),FNAME RESET FST NAME AND TYPE 00399000
  442. CLI FNAME+17,C'Y' WAS FST MODE 'SY' ? 00400000
  443. BE RSCHN BE IF YES (LEAVE MODE A1) 00401000
  444. MVC 24(2,R1),FNAME+16 RESET MODE 00402000
  445. RSCHN STH R15,28(R1) RESTORE 1ST CHAIN-LINK-ADDRESS IN FST JS 00403000
  446. MVC FILOAD(8),FNAME PLACE NAME, 00404000
  447. MVC FILOAD1(8),FNAME+8 TYPE, AND 00405000
  448. MVC FILOAD2(2),FNAME+16 MODE FOR TYPING 00406000
  449. L R15,AUPDISK UPDATE DIRECTORY (R0 INTACT FROM FSTLKP) 00407000
  450. BALR R14,R15 ... (R1 OK ALSO) 00408000
  451. LR R9,R0 V(ADT) INTO R9 (FOR LATER) 00409000
  452. USING FSTSECT,R1 (BRIEFLY) 00410000
  453. LM R0,R1,FSTT REAL FILETYPE INTO R0-R1, 00411000
  454. DROP R1 00412000
  455. L R15,ATYPSRCH CHECK REAL FILETYPE 00413000
  456. BALR R14,R15 VIA "TYPSRCH" 00414000
  457. USING ADTSECT,R9 (BRIEFLY) 00415000
  458. O R15,ADTFTYP-3 "OR" IN THE POSSIBLE BIT 00416000
  459. ST R15,ADTFTYP-3 FOR THE REAL FILETYPE. 00417000
  460. DROP R9 00418000
  461. LA R1,TYPE TYPE 'FILENAME FILETYPE FILEMODE' 00419000
  462. SVC X'CA' MESSAGE 00420000
  463. MVI EOFFLG,X'FF' EOF DEFINITELY OK IF ENCOUNTERED NOW 00421000
  464. B DKLOP3 00422000
  465. * 00423000
  466. * 00424000
  467. CRDEOF BCT 15,RDRERR IF GPR15 = 1, EOF, OTHERWISE READER ERROR 00425000
  468. TM EOFFLG,X'FF' IS THIS A LEGAL PLACE FOR EOD ? 00426000
  469. BZ ERR77E ERROR IF FLAG = '00' 00427000
  470. BO ERRETN AND RETURN 00428000
  471. REMPTY DMSERR NUM=205,LET=W,TEXT='READER EMPTY OR NOT READY' 00429000
  472. LA R0,8 RETURN CODE = 8 00430000
  473. B RESTERR AND FINISH UP. 00431000
  474. EJECT 00432000
  475. ********************************************************************** 00433000
  476. * 00434000
  477. * ERROR ROUTINES 00435000
  478. * 00436000
  479. ********************************************************************** 00437000
  480. DS 0F 00438000
  481. ERR14E LR R0,R1 USE R0 FOR FUNCTION PTR 00439000
  482. DMSERR NUM=14,LET=E,SUB=(CHARA,(R0)),TEXT='INVALID FUNCTION ''*00440000
  483. ........''' 00441000
  484. LA R0,24 SET ERROR CODE = 24 00442000
  485. B RESTERR RETURN 00443000
  486. SPACE 2 00444000
  487. WRTERR CH R15,=H'12' WAS IT READ/ONLY DISK ? 00445000
  488. BNE ERR105S NOPE, SOME OTHER BEAUTY... 00446000
  489. SPACE 2 00447000
  490. ERR37E DMSERR NUM=37,LET=E,SUB=(CHARA,WRTMODE),TEXT='DISK ''..'' IS R*00448000
  491. EAD/ONLY' 00449000
  492. LA R15,36 RETURN CODE = 36 00450000
  493. B ERRETNA 00451000
  494. SPACE 2 00452000
  495. ERR47E EQU * 00453000
  496. DMSERR NUM=47,LET=E,TEXT='NO FUNCTION SPECIFIED' 00454000
  497. LA R0,24 SET ERROR CODE = 24 00455000
  498. B RESTERR RETURN 00456000
  499. SPACE 2 00457000
  500. ERR54E EQU * 00458000
  501. DMSERR NUM=54,LET=E,TEXT='INCOMPLETE FILEID SPECIFIED' 00459000
  502. LA R0,24 SET ERROR CODE = 24 00460000
  503. B RESTERR RETURN 00461000
  504. RDRERR BCT R15,ERR124S FATAL IF R15 NOT= 2 00462000
  505. CLI EOFFLG,X'F0' IF R15 WAS 2, IS FLAG STILL X'F0' ? 00463000
  506. BE REMPTY DEFINITELY READER EMPTY IF YES 00464000
  507. XR R15,R15 WE DID READ A FILE, SO '2' MEANS 00465000
  508. B ERRETN THE RDR IS NOW EMPTY AGAIN... 00466000
  509. ERR124S DMSERR NUM=124,LET=S,TEXT='ERROR READING CARD FILE' 00467000
  510. LA 15,100 SET ERROR CODE = 100 00468000
  511. B ERRETNA 00469000
  512. SPACE 00470000
  513. ERR62E EQU * 00471000
  514. DMSERR NUM=62,LET=E,TEXT='INVALID ''*'' IN FILEID' 00472100
  515. LA R0,20 RETURN CODE = 20 00473000
  516. B RESTERR 00474000
  517. SPACE 2 00475000
  518. ERR70E LA R0,8(,R1) 00476000
  519. DMSERR NUM=70,LET=E,SUB=(CHARA,(R0)),TEXT='INVALID PARAMETER '*00477000
  520. '........''' 00478000
  521. LA R0,24 SET ERROR CODE = 24 00479000
  522. B RESTERR RETURN 00480000
  523. ERR77E EQU * 00481000
  524. DMSERR NUM=77,LET=E,TEXT='END CARD MISSING FROM INPUT DECK' 00482000
  525. LA 15,32 SET ERROR CODE = 32 00483000
  526. B ERRETN 00484000
  527. ERR78E DMSERR NUM=78,LET=E,TEXT='INVALID CARD IN INPUT DECK' 00485000
  528. LA R15,32 RETURN CODE = 32 00486000
  529. B ERRETNA 00487000
  530. ERR104S EQU * V0314 00487100
  531. LR R7,R15 SAVE RETURN CODE FOR MSG V0314 00487200
  532. SPACE 2 00488000
  533. DMSERR NUM=104,LET=S,SUB=(DEC,(R7),CHAR8A,RNAME),TEXT='ERROR '+00489000
  534. '..'' READING FILE ''....................'' FROM DISK',R+00489100
  535. ENT=NO V0314 00489200
  536. LA R15,100 RETURN CODE = 100 00491000
  537. B ERRETN 00492000
  538. SPACE 2 00493000
  539. ERR105S LR R7,R15 USE R7 FOR WRITE ERROR 00494000
  540. DMSERR NUM=105,LET=S,SUB=(DEC,(R7),CHAR8A,WRTID),TEXT='ERROR '*00495000
  541. '..'' WRITING FILE ''....................'' ON DISK', *00496000
  542. RENT=NO 00497000
  543. LA R15,100 RETURN CODE = 100 00498000
  544. B ERRETNA 00499000
  545. SPACE 2 00500000
  546. ERR118S DMSERR NUM=118,LET=S,TEXT='ERROR PUNCHING FILE' 00501000
  547. LA R15,100 RETURN CODE = 100 00502000
  548. B ERRETN 00503000
  549. SPACE 2 00504000
  550. EJECT 00505000
  551. * FINISH UP & RETURN TO CALLER (R15 NOW HOLDS ERROR-CODE) 00506000
  552. ERRETNA OI DSKFLAG,RDRHOLD KEEP THE RDR FILE 00507000
  553. SPACE 00508000
  554. ERRETN LR R0,R15 SAVE ERROR-CODE, 00509000
  555. TM DSKFLAG,DUMP WERE WE DISK DUMPING? @VA05212 00510000
  556. BZR R6 NO; BRANCH TO EXIT1 OR EXIT2 @VA05212 00510500
  557. LA R1,STLIST YES; USE STATE'S PLIST FOR FINIS @VA05212 00511000
  558. L R15,AFINIS AND CLOSE THE DUMPED FILE @VA05212 00511500
  559. BALR R14,R15 @VA05212 00512000
  560. BR R6 CONTINUE OR BRANCH TO 'EXIT2' ... 00513000
  561. EXIT1 LA R1,STLIST FIND WHERE FILE WE DUMPED IS 00514000
  562. L R15,ASTATE STATE @V305066 00515000
  563. BALR R14,R15 ... @V305066 00515500
  564. BNZ EXIT2 ERROR EXIT @V305066 00516000
  565. L R1,STATER1 R1 TELLS WHERE IT IS, 00517000
  566. MVC 0(40,R1),SAVFST40 RESTORE FST-ENTRY WE FUDGED UP 00518000
  567. EXIT2 TM DSKFLAG,DUMP HAVE WE DISK DUMPED? 00519000
  568. BO CLOSPUN YES, CLOSE THE PUNCH... 00520000
  569. TM DSKFLAG,RDRHOLD HOLD THE RDR FILE? 00521000
  570. BNZ HOLD YES. 00522000
  571. MVC CLDEV(8),RDRDEV NO, CLOSE THE RDR NORMALLY 00523000
  572. MVC CLDEV+8(8),FENCE 00524000
  573. B CLOSRDR 00525000
  574. HOLD MVC CLDEV(16),RDRDEV 'HOLD' THE ACTIVE RDR FILE 00526000
  575. MVC CLDEVF(EIGHT),FENCE PUT THE FENCE UP @VA05931 00526500
  576. CLOSRDR EQU * 00527000
  577. LA 1,CLOSE CLOSE READER 00528000
  578. SVC X'CA' ... 00529000
  579. B RESTERR GO TO RESTORE ERR CODE 00530000
  580. CLOSPUN MVC CLDEV(8),PUNDEV SUB PUNCH DEVICE NAME 00531000
  581. MVC CLDEVN,NAME SPECIFY 'NAME' @VA05931 00531700
  582. MVC CLDEVF,FNAME SET FN FT @VA05931 00532300
  583. LA R1,CLOSE CLOSE THE PUNCH 00533000
  584. SVC X'CA' ... 00534000
  585. RESTERR LR R14,CMSRET RESTORE RETURN-REG 00535000
  586. KXCHK WRBIT 00536000
  587. LTR R15,R0 RESTORE ERROR-CODE & CHECK IT 00538000
  588. BCR 8,R14 EXIT FORTHWITH IF RETURN-CODE = 0. 00539000
  589. LA R1,WRTDSK ERASE WORK FILE IF WE HAD AN ERROR, 00540000
  590. SVC X'CA' (MAY STILL BE THERE) 00541000
  591. DC AL4(*+4) ... 00542000
  592. LTR R15,R0 NOW RESTORE ERROR-CODE 00543000
  593. BR R14 AND EXIT TO CALLER. 00544000
  594. EJECT 00545000
  595. ********************************************************************** 00546000
  596. * 00547000
  597. * CMS PARAMETER LISTS 00548000
  598. * 00549000
  599. ********************************************************************** 00550000
  600. * 00551000
  601. DS 0D 00552000
  602. READDSK DC CL8'RDBUF' 00553000
  603. RNAME DC CL8'FILENAME' (FILLED IN) 00554000
  604. DC CL8'FILETYPE' (FILLED IN) 00555000
  605. RMODE DC CL2' ' MODE-LETTER (LEAVE NUMBER BLANK) 00556000
  606. RBLOKNO DC H'0' PHYSICAL BLOK NUMBER @VA04989 00557100
  607. ABUFFER DC A(BUFFER) 00558000
  608. DC F'800' 800 BYTES AT A CLIP 00559000
  609. DC CL2'F' 00560000
  610. DC H'1' 00561000
  611. DC F'0' 00562000
  612. AVAIL EQU 37 BYTE AFTER F/V FOR DATA AVAI@VA04989 00562100
  613. NOITEM EQU X'00' MEANS DATA BLOCK NULL (HOLE)@VA04989 00562150
  614. * 00563000
  615. DS 0D 00564000
  616. WRTDSK DC CL8'ERASE' WORK FILE TO ERASE, WRBUF, & FINIS... JS 00565000
  617. WRTID DC CL8'DISK' 00566000
  618. DC CL8'CMSUT1' 00567000
  619. WRTMODE DC CL2'A1' 00568000
  620. WBLOKNO DC H'0' PHYSICAL BLOK NUMBER @VA04989 00569100
  621. DC A(BUFFER) 00570000
  622. DC F'800' 00571000
  623. DC CL2'F' 00572000
  624. DC H'1' 00573000
  625. DC F'0' 00574000
  626. * 00575000
  627. DS 0D 00576000
  628. ERASE DC CL8'ERASE' TO ERASE OLD FILE (IF ANY) 00577000
  629. DC CL16' ' (NAME & TYPE FILLED IN) 00578000
  630. DC CL2'A ' A-DISK 00579000
  631. * 00580000
  632. DS 0D 00581000
  633. PUNCH DC CL8'CARDPH' 00582000
  634. DC A(CARDOUT) 00583000
  635. DS 0D 00584000
  636. READ DC CL8'CARDRD' 00585000
  637. DC A(CARDIN) 00586000
  638. DC F'0' 00587000
  639. * 00588000
  640. DS 0D 00589000
  641. TYPE DC CL8'TYPLIN' 00590000
  642. DC AL1(1) 00591000
  643. DC AL3(FILOAD) 00592000
  644. DC C'B' 00593000
  645. DC AL3(FILOAD4) 00594000
  646. * 00595000
  647. CLOSE DC CL8'CP' 00596000
  648. DC CL8'CLOSE' 00597000
  649. CLDEV DC CL8'RDR' 00598000
  650. CLDEVN DC CL8' ' 'NAME' IF CLOSING PUNCH @VA05931 00598700
  651. CLDEVF DC CL16' ' FN FT IF CLOSING PUNCH @VA05931 00599300
  652. FENCE DC 8X'FF' 00600000
  653. PUNDEV DC CL8'PUN' 00601000
  654. RDRDEV DC CL8'RDR' 00602000
  655. DC CL8'HOLD' 00603000
  656. NAME DC CL8'NAME' @VA05931 00603300
  657. EIGHT EQU 8 @VA05931 00603600
  658. * 00604000
  659. DS 0F 00605000
  660. STLIST DC CL8'STATE' 00606000
  661. STNAME DC CL16' ' 00607000
  662. STMODE DS CL2' ' MODE (FILLED IN) 00608000
  663. BLNK2 DC CL2' ' (PURPOSELY BLANK) 00609000
  664. DC F'0' BECOMES A(STATEFST) 00610000
  665. EJECT 00611000
  666. ********************************************************************** 00612000
  667. * 00613000
  668. * 'CMS' DISK DUMP CARD FORMAT 00614000
  669. * 00615000
  670. ********************************************************************** 00616000
  671. DS 0D 00617000
  672. CARDOUT DC X'02' 00618000
  673. DC C'CMS ' 00619000
  674. DATAOUT DS CL50 DATA 00620000
  675. BLOKNOUT DC CL2' ' PHYSICAL BLOK NUMBER @VA04989 00621100
  676. FNAME DC CL19' ' FILE NAME, TYPE, MODE 00622000
  677. SEQNO DC C'0001' SEQ. NUMBER 00623000
  678. DS 0D 00624000
  679. CARDIN DS CL5 "12-2-9 CMS" 00625000
  680. DATAIN DS CL50 DATA 00626000
  681. BLOKNIN DS CL2 PHYSICAL BLOK NUMBER @VA04989 00627100
  682. FNAMIN DS CL19 FILE NAME,TYPE,MODE 00628000
  683. SEQIN DS CL4 00629000
  684. EJECT 00630000
  685. ********************************************************************** 00631000
  686. * 00632000
  687. * STORAGE AND DEFINITIONS 00633000
  688. * 00634000
  689. ********************************************************************** 00635000
  690. * 00636000
  691. * DEFINITIONS 00637000
  692. * 00638000
  693. REGEQU 00639000
  694. BASE EQU R2 00640000
  695. CMSRET EQU R3 00641000
  696. COUNT EQU R4 00642000
  697. POINTR EQU R5 00643000
  698. BLANK EQU X'40' @VA04989 00643100
  699. RET36 DC H'36' @VA06214 00643300
  700. BLANKS DC CL6' ' @VA06214 00643600
  701. * 00644000
  702. * STORAGE 00645000
  703. * 00646000
  704. DS 0F 00647000
  705. FIFTY DC F'50' 00648000
  706. SAVFST40 DS 10F 40-BYTE ENTRY SAVED HERE FOR RESTORING JS 00649000
  707. FSTSAVE DC CL50' ' (SAME LENGTH AS 'DATAOUT) 00650000
  708. PSEQNO DS CL2 00651000
  709. EOFFLG DS CL1 00652000
  710. DSKFLAG DC X'00' 00653000
  711. DEFALL EQU X'80' DISK 'LOAD' FIRST PHYSICAL RDR FILE 00654000
  712. RDRHOLD EQU X'40' HOLD RDR FILE IN CASE OF ERROR 00655000
  713. DUMP EQU X'08' DISK 'DUMP' CALLED 00656000
  714. ADISK DC CL2'A1' 00657000
  715. * 00658000
  716. FILOAD DC CL9' ' NAME 00659000
  717. FILOAD1 DC CL9' ' TYPE 00660000
  718. FILOAD2 DC CL3' ' MODE 00661000
  719. * 'LOADED' OMITTED TO SAVE TYPING TIME 00662000
  720. FILOAD4 EQU *-FILOAD (LENGTH FOR TYPLIN) 00663000
  721. * 00664000
  722. * EXTERNS 00665000
  723. * 00666000
  724. * 00667000
  725. LTORG 00668000
  726. * 00669000
  727. BUFFER DS 0D BEGINNING OF 800-BYTE DISK-BUFFER... 00670000
  728. * 00671000
  729. EJECT @VA05212 00671500
  730. NUCON 00672000
  731. EJECT 00673000
  732. FVS 00674000
  733. AFT 00675000
  734. ADT 00676000
  735. EJECT 00677000
  736. FSTB 00678000
  737. END 00679000