Table of Contents

DMKMSG Source

References

Source Listing

DMKMSG.ASSEMBLE.txt
  1. MSG TITLE 'DMKMSG (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V200820 00002000
  3. *. 00003000
  4. * 00004000
  5. * MODULE NAME - 00005000
  6. * 00006000
  7. * DMKMSG 00007000
  8. * 00008000
  9. * FUNCTION - 00009000
  10. * 00010000
  11. * TRANSMITS MESSAGES TO LOGGED ON USERS FOR THE MSG AND WNG 00011000
  12. * COMMANDS. RECEIVES AND RETRANSMITS LINES FOR THE ECHO COMMAND. 00012000
  13. * 00013000
  14. * 00014000
  15. * ATTRIBUTES - 00015000
  16. * 00016000
  17. * REENTRANT, PAGEABLE, CALLED VIA SVC 00017000
  18. * 00018000
  19. * 00019000
  20. * ENTRY POINTS - 00020000
  21. * 00021000
  22. * DMKMSGMS - ENTRY FOR 'MSG' COMMAND 00022000
  23. * DMKMSGSM - ENTRY FOR 'SMSG' COMMAND 00022500
  24. * DMKMSGWN - ENTRY FOR 'WNG' COMMAND 00023000
  25. * DMKMSGEC - ENTRY FOR THE ECHO COMMAND 00024000
  26. * DMKMSGNH - ENTRY POINT FOR "MSGNOH" COMMAND 00024500
  27. * 00025000
  28. * 00026000
  29. * ENTRY CONDITIONS - 00027000
  30. * 00028000
  31. * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00029000
  32. * GPR11 - ADDRESS OF THE USERS VMBLOK 00030000
  33. * GPR12 - ADDRESS OF THE ENTRY POINT 00031000
  34. * GPR13 - ADDRESS OF THE SAVEAREA 00032000
  35. * 00033000
  36. * 00034000
  37. * EXIT CONDITIONS - 00035000
  38. * 00036000
  39. * NORMAL - 00037000
  40. * GPR2 = 0 00038000
  41. * 00039000
  42. * ERROR - 00040000
  43. * GPR2 = ERROR MESSAGE CODE NUMBER 00041000
  44. * 00042000
  45. * 00043000
  46. * CALLS TO OTHER ROUTINES - 00044000
  47. * 00045000
  48. * DMKSCNFD - LOCATE ARGUMENTS IN THE COMMAND LINE 00046000
  49. * DMKSCNAU - FIND VMBLOK OF USERID SPECIFIED 00047000
  50. * DMKQCNWT - TO OUTPUT MESSAGES TO THE TERMINAL 00048000
  51. * DMKFREE - TO AQUIRE FREE CORE FOR OUTPUT BUFFERS 00049000
  52. * DMKFRET - RETURN OUTPUT BUFFERS TO FREE CORE 00050000
  53. * DMKERMSG - SEND ERROR MESSAGES TO THE TERMINAL. 00051000
  54. * DMKQCNRD - READ FROM TERMINAL. 00052000
  55. * DMKCVTDB - CONVERT A NUMBER FROM DECIMAL TO BINARY 00053000
  56. * DMKCVTBD CONVERT BINARY TO DECIMAL 00053050
  57. * DMKLOKSW - SWITCH TO ANOTHER VMBLOK IF SYSTEM IS AP-MODE 00053100
  58. * DMKLOCKQ - OBTAIN LOCKBLOK TO KEEP RECEIVER FOR ERROR MSG 00053200
  59. * DMKLOCKD - RELEASE LOCKBLOK AFTER ERROR MSG WRITTEN 00053300
  60. * 00054000
  61. * 00055000
  62. * TABLES/WORKAREAS - 00056000
  63. * 00057000
  64. * NONE 00058000
  65. * 00059000
  66. * 00060000
  67. * REGISTER USAGE - 00061000
  68. * 00062000
  69. * GPR0 - ARGUMENT LENGTH (RETURNED BY DMKSCNFD) 00063000
  70. * GPR1 - ADDRESS OF ARGUMENT (RETURNED BY DMKSCNFD) 00064000
  71. * GPR2 - PARAMETERS PASSED TO CALLED ROUTINES 00065000
  72. * GPR3 - INPUT BUFFER POINTER 00066000
  73. * GPR4 - INPUT BUFFER COUNT 00067000
  74. * GPR5 - WORK REGISTER 00068000
  75. * GPR6 - WORK REGISTER 00069000
  76. * GPR7 - BAL REGISTER 00070000
  77. * GPR8 - ADDRESS OF RDEVBLOK 00071000
  78. * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00072000
  79. * GPR10 - ADDRESS OF VMBLOKS 00073000
  80. * GPR11 - ADDRESS OF USERS VMBLOK 00074000
  81. * GPR12 - BASE REGISTER 00075000
  82. * GPR13 - ADDRESS OF SAVEAREA 00076000
  83. * GPR14 - LINKAGE REGISTER 00077000
  84. * GPR15 - LINKAGE REGISTER 00078000
  85. * 00079000
  86. * 00080000
  87. * NOTES - 00081000
  88. * 00082000
  89. * NONE 00083000
  90. * 00084000
  91. * 00085000
  92. * OPERATION - 00086000
  93. * 00087000
  94. * THIS MODULE HANDLES THE 'WNG', 'MSG', 'SMSG', AND 'ECHO' 00088000
  95. * COMMANDS. 00088500
  96. * THESE ARE DESCRIBED IN SEPARATE COMMAND 00089000
  97. * PROLOGUES BELOW. 00090000
  98. * 00091000
  99. * 00092000
  100. * MESSAGES - 00093000
  101. * 00094000
  102. * NONE 00095000
  103. * 00096000
  104. *. 00097000
  105. EJECT 00098000
  106. COPY OPTIONS 00098100
  107. COPY LOCAL OPTIONS 00098200
  108. SPACE 2 00098300
  109. DMKMSG START 00099000
  110. SPACE 00100000
  111. MODID DC CL8'DMKMSG' 00101000
  112. SPACE 00102000
  113. USING PSA,R0 00103000
  114. USING BUFFER,R9 00104000
  115. USING VMBLOK,R11 00105000
  116. USING SAVEAREA,R13 00106000
  117. SPACE 00107000
  118. EXTRN DMKCVTDB 00108000
  119. EXTRN DMKCVTBD @VA09994 00108500
  120. EXTRN DMKQCNRD 00109000
  121. EXTRN DMKCVTDT @V202420 00110000
  122. EXTRN DMKSCNAU 00111000
  123. EXTRN DMKSCNFD 00112000
  124. EXTRN DMKERMSG 00113000
  125. EXTRN DMKVMCFC @V60C2B8 00113500
  126. EXTRN DMKLOCKQ,DMKLOCKD @VA12684 00113750
  127. EJECT 00114000
  128. *. 00115000
  129. * SUBROUTINE NAME - 00116000
  130. * 00117000
  131. * DMKMSGWN 00118000
  132. * 00119000
  133. * FUNCTION - 00120000
  134. * 00121000
  135. * USED TO TRANSMIT HIGH PRIORITY MESSAGES TO A SPECIFIED 00122000
  136. * USER OR ALL USERS CURRENTLY LOGGED ON. 00123000
  137. * 00124000
  138. * COMMAND FORMAT - 00125000
  139. * 00126000
  140. * +-------+---------------------------+ 00127000
  141. * | WNG | USERID MESSAGE TEXT | 00128000
  142. * | W | OPERATOR | 00129000
  143. * | | ALL | 00130000
  144. * +-------+---------------------------+ 00131000
  145. * 00132000
  146. * OPERATION - 00133000
  147. * 1. SET A FLAG TO INDICATE A WNG OPERATION AND THEN GO TO 00134000
  148. * CODE COMMON TO BOTH WNG AND MSG. THIS WILL BE DESCRIBED IN 00135000
  149. * THE PROLOG FOR MSG. 00136000
  150. * 00137000
  151. * RESPONSES - NONE 00138000
  152. * 00139000
  153. * ERROR MESSAGES - 00140000
  154. * DMKMSG020E USERID MISSING OR INVALID 00141000
  155. * DMKMSG045E (USERID) NOT LOGGED ON 00142000
  156. * DMKMSG057W (USERID) NOT RECEIVING; DISCONNECTED 00143000
  157. * DMKMSG057W (USERID) NOT RECEIVING; MSG OFF 00144000
  158. * DMKMSG057W (USERID) NOT RECEIVING; WNG OFF 00145000
  159. *. 00146000
  160. SPACE 2 00147000
  161. DMKMSGWN RELOC , SEND A WARNING TO ONE OR ALL USERS @V200820 00148000
  162. SPACE 00149000
  163. MVI SAVEWRK1,VMWNGON REMEMBER THAT THIS IS A WARNING 00150000
  164. B MSGCOM CONTINUE 00151000
  165. EJECT 00151050
  166. DMKMSGNH RELOC , SEND MESSAGE WITHOUT HEADER @V60C2BE 00151100
  167. SPACE 00151150
  168. * 00151200
  169. * SUBROUTINE NAME - DMKMSGNH 00151250
  170. * 00151300
  171. * FUNCTION: 00151350
  172. * 00151400
  173. * TRANSMIT A MESSAGE TO A SPECIFIED USERID, AS FOR "MSG" 00151450
  174. * EXCEPT THAT THE HEADER PREFIXED TO THE INPUT TEXT 00151500
  175. * BY "MSG" IS NOT SENT. THIS COMMAND SENDS ONLY THE 00151550
  176. * TEXT SUPPLIED BY THE COMMAND INVOKER. 00151600
  177. * 00151650
  178. SPACE 00151700
  179. MVI SAVEWRK1,VMMSGON+VMMTEXT THIS IS A MESSAGE TEXT @V60C2BE 00151750
  180. B MSGCOM JOIN COMMON CODE @V60C2BE 00151800
  181. EJECT 00152000
  182. *. 00152020
  183. * SUBROUTINE NAME - 00152040
  184. * 00152060
  185. * DMKMSGSM 00152080
  186. * 00152100
  187. * FUNCTION - 00152120
  188. * 00152140
  189. * USED TO TRANSMIT A MESSAGE IN MACHINE READABLE FORMAT 00152160
  190. * WITHIN A BUFFER TO ANY USER CURRENTLY LOGGED ON. 00152180
  191. * 00152200
  192. * COMMAND FORMAT - 00152220
  193. * 00152240
  194. * +-------+---------------------------+ 00152260
  195. * | SMSG | USERID MESSAGE TEXT | 00152280
  196. * | SM | | 00152300
  197. * +-------+---------------------------+ 00152320
  198. * 00152340
  199. * OPERATION - 00152360
  200. * 1. SET A FLAG TO INDICATE A SMSG OPERATION AND THEN GO TO 00152380
  201. * CODE COMMON WITHIN DMKMSGMS. 00152400
  202. * 2. FIND USERID TO RECEVIE MESSAGE 00152420
  203. * 3. CHECK FOR SPECIAL MESSAGE TO HIMSELF 00152440
  204. * 4. GET POINTER TO AND LENGTH OF MESSAGE TEXT 00152460
  205. * 5. GET SPACE FOR VMCF PARM LIST AND SENDX BUFFER 00152480
  206. * 6. BUILD VMCF MESSAGE PARM LIST 00152500
  207. * 7. MOVE MESSAGE TEXT INTO SENDX BUFFER 00152520
  208. * 8. CALL DMKVMCFC TO SENDX THE VMCF SPECIAL MESSAGE 00152540
  209. * 9. CHECK FOR ERRORS FROM DMKVMCFC AND RETURN TO CALLER 00152560
  210. * 00152580
  211. * 00152600
  212. * RESPONSES - NONE 00152620
  213. * 00152640
  214. * ERROR MESSAGES - 00152660
  215. * DMKMSG020E USERID MISSING OR INVALID 00152680
  216. * DMKMSG045E (USERID) NOT LOGGED ON 00152700
  217. * DMKMSG057W (USERID) NOT RECEIVING; DISCONNECTED 00152720
  218. * DMKMSG057W (USERID) NOT RECEIVING; SMSG OFF 00152740
  219. * DMKMSG057W (USERID) NOT RECEIVING; NOT AUTHORIZED 00152760
  220. * DMKMSG810E VMCF SPECIAL MESSAGE LIMIT EXCEEDED 00152780
  221. *. 00152800
  222. SPACE 2 00152820
  223. DMKMSGSM RELOC , SEND MESSAGE WITHIN A BUFFER TO 00152840
  224. * ANY SPECIFIED USER 00152860
  225. MVI SAVEWRK1,VMSMSGON REMEMBER THIS IS SPECIAL MSG @V60C2B8 00152880
  226. B MSGCOM CONTINUE @V60C2B8 00152900
  227. EJECT 00152920
  228. *. 00153000
  229. * SUBROUTINE NAME - 00154000
  230. * 00155000
  231. * DMKMSGMS 00156000
  232. * 00157000
  233. * FUNCTION - 00158000
  234. * 00159000
  235. * TRANSMITS MESSAGES TO SPECIFIED USER(S) THAT ARE 00160000
  236. * LOGGED ON THE SYSTEM. 00161000
  237. * 00162000
  238. * COMMAND FORMAT - 00163000
  239. * 00164000
  240. * +-------+--------------------------+ 00165000
  241. * | MSG | USERID MESSAGE TEXT | 00166000
  242. * | M | OPERATOR | 00167000
  243. * | | ALL | 00168000
  244. * +-------+--------------------------+ 00169000
  245. * 00170000
  246. * OPERATION - 00171000
  247. * 00172000
  248. * 1. CALL DMKSCNFD TO LOCATE ARGUMENT. IF NONE IS FOUND, CALL 00173000
  249. * DMKERMSG TO SEND ERROR MESSAGE DMKMSG020E. 00174000
  250. * 2. IF ARGUMENT = 'ALL', GO TO STEP 7. IF IS 'OP', GO TO 00175000
  251. * STEP 6. ELSE CALL DMKSCNAU TO LOCATE THE USERID VMBLOK. 00176000
  252. * IF VMBLOK IS NOT FOUND, CALL DMKERMSG TO SEND ERROR 00177000
  253. * MESSAGE DMKMSG045E. 00178000
  254. * 3. LOAD ENDING VMBLOK ADDRESS. 00179000
  255. * 4. COMPUTE THE BEGINNING AND ENDING ADDRESSES OF THE MESSAGE 00180000
  256. * IN THE COMMAND LINE. CALL DMKFREE TO OBTAIN STORAGE FOR 00181000
  257. * A MESSAGE BUFFER. PUT MESSAGE AND HEADER INTO THE BUFFER. 00182000
  258. * 5. IF THE USER IS NOT RECEIVING OR IS DISCONNECTED, CALL 00183000
  259. * DMKERMSG TO SEND ERROR MESSAGE DMKMSG057W. IF THE USER 00184000
  260. * IS LOGGED ON AND RECEIVING MESSAGES, SET UP FOR MSG OR 00185000
  261. * WNG DEPENDING ON THE COMMAND AND CALL DMKQCNWT TO SEND 00186000
  262. * THE MESSAGE. 00187000
  263. * IF MORE MESSAGES ARE TO BE SENT, GET THE NEXT VMBLOK 00188000
  264. * AND REPEAT THIS STEP. IF FINISHED, GO TO STEP 8. 00189000
  265. * 6. GET OPERATORS VMBLOK AND GO TO STEP 3. 00190000
  266. * 7. IF THE 'ALL' PARAMETER IS NOT LEGAL FOR THIS USER, CALL 00191000
  267. * DMKERMSG TO SEND ERROR MESSAGE DMKMSG003E. IF OK, GO TO 00192000
  268. * STEP 4. 00193000
  269. * 8. CALL DMKFRET TO RETURN THE BUFFER TO STORAGE AND THEN 00194000
  270. * EXIT. 00195000
  271. * 00196000
  272. * RESPONSES - NONE 00197000
  273. * 00198000
  274. * ERROR MESSAGES- 00199000
  275. * DMKMSG003E INVALID OPTION - (OPTION) 00200000
  276. * DMKMSG020E USERID MISSING OR INVALID 00201000
  277. * DMKMSG045E (USERID) NOT LOGGED ON 00202000
  278. * DMKMSG057W (USERID) NOT RECEIVING; DISCONNECTED 00203000
  279. * DMKMSG057W (USERID) NOT RECEIVING; MSG OFF 00204000
  280. * DMKMSG057W (USERID) NOT RECEIVING; WNG OFF 00205000
  281. *. 00206000
  282. EJECT 00207000
  283. DMKMSGMS RELOC , SEND A MESSAGE TO ONE OR ALL USERS @V200820 00208000
  284. XC SAVEWRK1,SAVEWRK1 CLEAR WORK AREA FOR FLAGS HRC101DK 00209190
  285. OI SAVEWRK1,VMMSGON REMEMBER THAT THIS IS A MESSHRC101DK 00209380
  286. OI SAVEWRK1+2,NHILIGHT+NALARM HRC101DK 00209570
  287. SPACE 2 00210000
  288. MSGCOM CALL DMKSCNFD SCAN FOR USER TO RECEIVE THE MESSAGE 00211000
  289. BNZ MSG020 GO SEND ERROR MESSAGE 00212000
  290. STM R0,R1,SAVEWRK8 SAVE LENGTH AND ADDRESS FOR LATER 00213000
  291. LA R0,MSGWASZE SIZE OF WORK AREA IN DW'S @VA12684 00213100
  292. CALL DMKFREE OBTAIN STORAGE FOR WORK AREA @VA12684 00213200
  293. ST R1,SAVEWRK6 HOLD ADDRESS OF WORK AREA @VA12684 00213300
  294. LR R6,R1 ADDRESS OF WORK AREA @VA12684 00213400
  295. USING MSG1,R6 WORK AREA ADDRESSABILITY @VA12684 00213500
  296. XC MSG1,MSG1 CLEAR WORK AREA @VA12684 00213600
  297. DROP R6 @VA12684 00213700
  298. LM R0,R1,SAVEWRK8 RESTORE REGS R0 - R1 @VA12684 00213800
  299. C R0,F2 ARGUMENT TWO CHARACTERS OR MORE ??? 00214000
  300. BL MSGCKAST CAN'T BE OPERATOR OR ALL IF BR. 00215000
  301. LR R2,R0 LENGTH TO GPR2 00216000
  302. BCTR R2,0 MINUS ONE FOR 'EX' 00217000
  303. EX R2,MSGCMPOP IS THIS 'OP' REQUEST ???? 00218000
  304. BE MSGCPO BRANCH IF IT IS 00219000
  305. CLC 0(4,R1),=C'ALL ' IS IT A MESSAGE TO ALL USERS ? 00220000
  306. BE MSGALL BRANCH IF YES 00221000
  307. B MSGUSEID MUST BE USERID 00222000
  308. MSGCKAST EQU * CHECK FOR MESSAGE TO USER HIMSELF@V200820 00223000
  309. SLR R10,R10 SET END TRIGGER @VA07788 00223500
  310. CLI 0(R1),C'*' DO WE HAVE AN ASTERISK ??? 00224000
  311. BNE MSGUSEID NO - FIND RECEIVER'S VMBLOK @V60C2B8 00224400
  312. TM SAVEWRK1,VMSMSGON SPECIAL MESSAGE?? @V60C2B8 00224800
  313. BO PROCLOG YES - SEND SPM TO HIMSELF @V60C2B8 00225200
  314. B MSGFOR SEND REGULAR MSG TO HIMSELF @V60C2B8 00225600
  315. MSGUSEID CALL DMKSCNAU FIND USERID VMBLOK ADDRESS 00226000
  316. BC 4,MSG045 USERID NOT LOGGED ON @VM08681 00227000
  317. BC 2,MSG020 USERID MISSING OR INVALID @VM08681 00228000
  318. TM VMRSTAT-VMBLOK(R1),VMLOGOFF USER LOGGING OFF? @VA09531 00228020
  319. BO MSG045 YES,LOGOFF @VA09531 00228040
  320. TM VMOSTAT-VMBLOK(R1),VMKILL USER KILLED? @VA09531 00228060
  321. BO MSG045 YES,KILLED @VA09531 00228080
  322. SWTCHVM LOCK THIS VMBLOK @V407508 00229100
  323. SLR R10,R10 SET END TRIGGER @VA01513 00232000
  324. PROCLOG TM VMOSTAT,VMKILL HEADED FOR THE CLIFF? @V60C2B8 00233000
  325. BO OPROFF SO INFORM THE SENDER @VA01513 00234000
  326. TM SAVEWRK1,VMSMSGON WAS IT SPECIAL MESSAGE? @V60C2B8 00234010
  327. BNO MSGFOR NO - BRANCH AROUND SPM CODE @V60C2B8 00234020
  328. MVC SAVEWRK4(8),VMUSER SAVE USERID TO RECV SPM @V60C2B8 00234030
  329. CLI VMSPMFLG,VMSPMON IS USER RECEIVING SPM'S? @V60C2B8 00234040
  330. BE PROCSM YES - PROCESS SPM @V60C2B8 00234050
  331. MVI SAVEWRK6,HEXZERO FIELD DELIMITER @V60C2B8 00234060
  332. LA R1,=CL14' SMSG OFF ' NOT RECVING SPM'S @V60C2B8 00234070
  333. BAL R7,MSGSNDE USER NOT RECEIVING SPM MESSAGES @V60C2B8 00234080
  334. B RETURN RETURN TO CALLER @V60C2B8 00234090
  335. PROCSM EQU * PROCESS SPECIAL MESSAGE @V60C2B8 00234100
  336. L R1,ASYSVM GET ADDRESS OF SYSTEM VMBLOK @V60C2B8 00234110
  337. SWTCHVM LOCK SYSTEM VMBLOK @V60C2B8 00234120
  338. LM R3,R4,BUFNXT GET SPM TEXT POINTER AND COUNT @V60C2B8 00234130
  339. BCTR R4,0 -1, BUFNXT POINTS TO A BLANK @VA09275 00234135
  340. LTR R4,R4 IS COUNT ZERO? @V60C2B8 00234140
  341. BNP RETURN YES - RETURN TO CALLER @V60C2B8 00234150
  342. XC BUFCNT,BUFCNT SHOW WE USED THE WHOLE BUFFER @VA09275 00234153
  343. LA R3,1(,R3) POINT TO 1ST CHARACTER OF TEXT @VA09275 00234156
  344. LR R2,R4 SAVE MESSAGE LENGTH FOR LATER USE@V60C2B8 00234160
  345. LA R0,VMCMLEN+7(R4) GET SENDX EXT INT BUF LEN @V60C2B8 00234170
  346. SRL R0,3 CONVERT TO DOUBLE WORDS @V60C2B8 00234180
  347. LR R4,R0 SAVE FOR LATER FRET @V60C2B8 00234190
  348. CALL DMKFREE GO GET SPM BUFFER @V60C2B8 00234200
  349. USING VMCMHDR,R1 00234210
  350. ST R1,SAVEWRK3 SAVE SPM BUFFER ADDRESS @V60C2B8 00234220
  351. MVI VMCMEFLG,HEXZERO ZERO OUT RETURN CODE FIELD @V60C2B8 00234230
  352. LA R0,VMCPSENX SENDX SUBFUNCTION CODE VALUE @V60C2B8 00234240
  353. STCM R0,3,VMCMFUNC FILL IN VMCF SUBFUNCTION CODE @V60C2B8 00234250
  354. LA R0,VMCMLEN(R1) POINT TO START OF MSG TXT @V60C2B8 00234260
  355. ST R0,VMCMVADA STORE BUFFER PTR IN VMCF P-LIST @V60C2B8 00234270
  356. ST R2,VMCMLENA STORE TXT LEN IN P-LIST @V60C2B8 00234280
  357. STCK VMCMUSE CLOCK VALUE - UNIQUE MSGID @V60C2B8 00234290
  358. MVC VMCMMID(4),VMCMUSE+3 UNIQUE SMGID FOR SPM @V60C2B8 00234300
  359. L R15,SAVER11 GET SPM SENDER'S VMBLOK @V60C2B8 00234310
  360. DROP R11 00234320
  361. USING VMBLOK,R15 00234330
  362. MVC VMCMUSE(8),VMUSER SAVE SENDER ID IN LIST @V60C2B8 00234340
  363. DROP R15 00234350
  364. USING VMBLOK,R11 00234360
  365. MVC VMCMUSER(8),SAVEWRK4 USERID TO RECV SPM @V60C2B8 00234370
  366. LR R5,R2 GET MSG TXT LEN @V60C2B8 00234380
  367. BCTR R5,0 SUBTRACT 1 FOR MOVE @V60C2B8 00234390
  368. EX R5,SMSGMVC MOVE SPM TO OUTPUT BUFFER @V60C2B8 00234400
  369. LA R2,VMCMLEN LENGTH OF P-LIST FOR VMCF CALL @V60C2B8 00234410
  370. DROP R1 00234420
  371. L R11,ASYSVM GET ADDRESS OF SYSTEM VMBLOK @V60C2B8 00234430
  372. CALL DMKVMCFC SENDX THE VMCF SPM @V60C2B8 00234440
  373. ST R2,SAVER2 SEND RETURN CODE TO CALLER @V60C2B8 00234450
  374. CH R2,NOTAUTH WAS RECEIVER AUTHORIZED? @V60C2B8 00234460
  375. BNE RETURN YES - RETURN TO CALLER @V60C2B8 00234470
  376. SPACE 00234480
  377. * OTHERWISE TELL SENDER - RECEIVER NOT VMCF AUTHORIZED 00234490
  378. SPACE 00234500
  379. LA R1,=CL14'NOT AUTHORIZED' SETUP MSG057 DATA @V60C2B8 00234510
  380. BAL R7,MSGSNDE USER NOT RECEIVING - NOT AUTHOR @V60C2B8 00234520
  381. B RETURN RETURN TO CALLER @V60C2B8 00234530
  382. MSGFOR BAL R7,MSGFMT GET OUTPUT BUFFER AND FORMAT THE MESSAGE 00235000
  383. MSGNXT BAL R7,MSGSND SEND THE MESSAGE IF THE USER IS RECEIVING 00236000
  384. CL R10,SAVER11 MESSAGE FOR ALL USERS ? @VA01513 00237000
  385. BNE MSGRET NOPE -- RETURN @VA01513 00238000
  386. NEXTVM DS 0H GET THE NEXT VMBLOK @V407508 00239100
  387. LR R1,R11 @VA09531 00239220
  388. L R1,VMPNT-VMBLOK(,R1) GET NEXT VMBLOK ADDRESS @VA09531 00239240
  389. NEXTVM2 DS 0H @VA09531 00239260
  390. CR R10,R1 WAS THAT THE LAST MESSAGE? @V407508 00239300
  391. BE MSGRET YES, RETURN TO THE CALLER @V407508 00239400
  392. TM VMRSTAT-VMBLOK(R1),VMLOGOFF USER LOGGING OFF? @VA09531 00239410
  393. BO NEXTVM3 YES,LOGOFF @VA09531 00239418
  394. TM VMOSTAT-VMBLOK(R1),VMKILL USER KILLED? @VA09531 00239426
  395. BO NEXTVM3 YES,KILLED @VA09531 00239434
  396. B NEXTVM4 SWAP VMBLOK @VA09531 00239442
  397. NEXTVM3 DS 0H @VA09531 00239450
  398. L R1,VMPNT-VMBLOK(,R1) GET NEXT VMBLOK @VA09531 00239458
  399. B NEXTVM2 CONTINUE VALIDITY CHECK @VA09531 00239466
  400. NEXTVM4 DS 0H @VA09531 00239474
  401. SWTCHVM LOCK THIS VMBLOK @V407508 00239500
  402. TM VMRSTAT,VMLOGOFF HEADED FOR THE CLIFF? @VA01513 00244000
  403. BO NEXTVM YES, GET NEXT @VA01513 00245000
  404. TM VMOSTAT,VMKILL MAKE DOUBLE SURE @VA01513 00246000
  405. BZ MSGNXT NOPE, GO SEND MSG @VA01513 00247000
  406. B NEXTVM YUP, TRY SOMEBODY ELSE @VA01513 00248000
  407. MSGRET LR R0,R4 LOAD THE BUFFER SIZE 00249000
  408. L R1,SAVEWRK3 LOAD THE MSG BUFFER ADDRESS @V407508 00249100
  409. CALL DMKFRET RETURN THE OUTPUT BUFFER TO FREE STORA 00250000
  410. RETURN DS 0H RETURN TO CALLER @V407508 00251100
  411. L R1,SAVEWRK6 ADDRESS OF WORK AREA @VA12684 00251110
  412. LTR R1,R1 WAS A WORK AREA OBTAINED ? @VA12684 00251120
  413. BZ MSGEXIT NO, JUST EXIT @VA12684 00251130
  414. LA R0,MSGWASZE SIZE OF WORK AREA @VA12684 00251140
  415. CALL DMKFRET RELEASE WORK AREA STORAGE @VA12684 00251150
  416. MSGEXIT DS 0H @VA12684 00251160
  417. L R1,SAVER11 GET CALLERS VMBLOK ADDRESS @V407508 00251200
  418. SWTCHVM LOCK CALLERS VMBLOK @V407508 00251300
  419. EXIT 00254000
  420. SPACE 3 00255000
  421. MSGCPO DS 0H MSG IS FOR OPERATOR @V407508 00256100
  422. L R1,ASYSOP GET OPERATORS VMBLOK ADDRESS @V407508 00256200
  423. TM VMRSTAT-VMBLOK(R1),VMLOGOFF USER LOGGING OFF? @VA09531 00256220
  424. BO MSG045 YES,LOGOFF @VA09531 00256240
  425. TM VMOSTAT-VMBLOK(R1),VMKILL USER KILLED? @VA09531 00256260
  426. BO MSG045 YES,KILLED @VA09531 00256280
  427. SWTCHVM LOCK OPERATORS VMBLOK @V407508 00256300
  428. L R10,VMPNT GET POINTER TO NEXT VMBLOK 00259000
  429. LTR R10,R10 IS OPERATOR'S VMBLOK IN THE CHAIN ? 00260000
  430. BZ OPROFF OPERATOR NOT ON @VA01513 00261000
  431. TM VMRSTAT,VMLOGOFF DOOMED BY ANY CHANCE? @VA01513 00262000
  432. BO OPROFF YES, NOT REALLY HERE @VA01513 00263000
  433. B PROCLOG GO CHECK IF USER LOGGING OFF @V60C2B8 00264000
  434. OPROFF EQU * @VA01513 00266000
  435. L R1,SAVER11 GET CALLERS VMBLOK ADDRESS @V407508 00267100
  436. SWTCHVM LOCK CALLERS VMBLOK @V407508 00267200
  437. B MSG045 AND GO GIVE ERROR MESSAGE 00269000
  438. SPACE 2 00270000
  439. MSGALL EQU * MESSAGE OR WARNING TO ALL USERS @V200820 00271000
  440. TM VMCLEVEL,VMCLASSA+VMCLASSB ALLOWED TO SAY 'ALL'@V200820 00272000
  441. BZ MSG003 NO -- INVALID OPTION@V200820 00273000
  442. LR R10,R11 STOP WHEN BACK TO SENDER 00274000
  443. OI SAVEWRK1+2,MALLOK ALL OK TO USE HRC101DK 00274300
  444. NI SAVEWRK1+2,255-NALARM OK TO USE HRC101DK 00274600
  445. B MSGFOR CONTINUE 00275000
  446. EJECT 00276000
  447. MSGFMT LM R3,R4,BUFNXT LOAD INPUT BUFFER POINTER AND COUNT 00277000
  448. LTR R4,R4 IS THE COUNT ALREADY ZERO ? 00278000
  449. BNP RETURN YES - RETURN TO CALLER 00279000
  450. LR R2,R3 SAVE STARTING ADDRESS OF MESSAGE 00280000
  451. MSGFMTL EQU * SCAN TO LOGICAL END OF MSG LINE @V200820 00281000
  452. CLI 0(R3),X'1D' SCAN FOR UNDESIRABLE CHARACTER @VA08728 00281200
  453. BNE MSGFMTL1 NO, DO NOT CHANGE @VA08728 00281400
  454. MVI 0(R3),X'40' BLANK IT OUT @VA08728 00281600
  455. MSGFMTL1 EQU * @VA08728 00281800
  456. CLI 0(R3),X'15' LOGICAL LINE END CHARACTER ? @V200820 00282000
  457. BE MSGFMTE YES,COMPUTE THE MESSAGE LENGTH 00283000
  458. LA R3,1(,R3) NO, POINT TO THE NEXT BYTE IN THE BUFFER 00284000
  459. BCT R4,MSGFMTL SUBTRACT ONE FROM COUNT - BRANCH IF MORE 00285000
  460. MSGFMTE STM R3,R4,BUFNXT SAVE UPDATED POINTER AND COUNT 00286000
  461. SR R3,R2 SUBTRACT 1ST CHARACTER ADDRESS FROM LAST 00287000
  462. BZ SETLEN SO SKIP THE SUBTRACT 00288000
  463. BCTR R3,0 DECREMENT LENGTH BY 1 FOR MVC INSTRUCTION 00289000
  464. SETLEN EQU * 00290000
  465. LA R0,L'MSGHDR+L'MSGTRL+8(,R3) ADD HEADER + TRAILER + 8 00291000
  466. SRL R0,3 CONVERT TO NUMBER OF DOUBLE WORDS 00292000
  467. LR R4,R0 SAVE SIZE FOR LATER FRET 00293000
  468. CALL DMKFREE GET A BUFFER FOR THE OUTPUT MESSAGE 00294000
  469. MVC 0(L'MSGHDR,R1),MSGHDR MOVE IN MESSAGE HEADER 00295000
  470. L R15,SAVER11 GET CALLER'S VMBLOK FOR A MOMENT@V202420 00296000
  471. MVC MSGTYP-MSGHDR+9(8,R1),VMUSER-VMBLOK(R15) USERID@V202420 00297000
  472. TM SAVEWRK1,VMWNGON IS THIS A WARNING ? 00298000
  473. BZ MSGFMTM NO,LEAVE 'MSG' IN THE HEADER 00299000
  474. MVC MSGTYP-MSGHDR(3,R1),=C'WNG ' MOVE 'WNG' INTO THE HEADER 00300000
  475. MSGFMTM EX R3,MSGMVC MOVE THE MESSAGE TO THE OUTPUT BUFFER 00301000
  476. LR R2,R1 START OF BUFFER FOR TIME-STAMP @V202420 00302000
  477. SLR R1,R1 NO DATE WANTED @V202420 00303000
  478. CALL DMKCVTDT TIME STAMP THE MESSAGE BUFFER @V202420 00304000
  479. LR R1,R2 BUFFER ADDRESS BACK TO GR1 @V202420 00305000
  480. LA R2,L'MSGHDR+1(R1,R3) POINT TO THE END OF THE MESSAGE 00306000
  481. MVC 0(L'MSGTRL,R2),MSGTRL MOVE IN THE MESSAGE TRAILER 00307000
  482. LA R0,L'MSGHDR+L'MSGTRL+1(,R3) LOAD THE MESSAGE LENGTH 00308000
  483. STM R0,R1,SAVEWRK2 SAVE MSG LENGTH AND ADDRESS @V407508 00308100
  484. IC R5,SAVEWRK1 LOAD THE MESSAGE / WARNING MASK 00309000
  485. L R8,VMTERM GET TERMINAL ADDRESS HRC101DK 00309040
  486. LTR R8,R8 IS THERE ONE? HRC101DK 00309080
  487. BZR R7 NOPE - JUST LEAVE HRC101DK 00309120
  488. USING RDEVBLOK,R8 HRC101DK 00309160
  489. TM RDEVTYPC,CLASTERM TERMINAL TYPE ? HRC101DK 00309200
  490. BZ *+12 NO, MUST BE A GRAF HRC101DK 00309240
  491. TM RDEVTYPE,TYPBSC REMOTE GRAF HRC101DK 00309280
  492. BZ *+8 NO, LEAVE IT HRC101DK 00309320
  493. MVI 8(R1),C' ' REPLACE NEWLINE CHAR HRC101DK 00309360
  494. DROP R8 HRC101DK 00309400
  495. N R5,=A(VMMSGON+VMWNGON) LEAVE ON MSG AND WNG @VA13028 00309510
  496. BR R7 RETURN 00310000
  497. EJECT 00311000
  498. MSGSND EX R5,MSGREC USER RECEIVING MESSAGES ?? @V200930 00312000
  499. BZ MSGSNDN NO, TELL ISSUING USER @V200930 00313000
  500. TM VMOSTAT,VMDISC USER DISCONNECTED ?? @V200930 00314000
  501. BO MSGSNDN YES - GO INFORM THE SENDER @V202420 00315000
  502. * SO MESSAGE WILL BE SPOOLED TO RECEIVERS CONSOLE 00316000
  503. SNDMSG DS 0H @V200930 00317000
  504. LM R0,R1,SAVEWRK2 RESTORE MSG LENGTH AND ADDR @V407508 00317100
  505. L R2,=A(HOLDSCR+NORET+PRIORITY+ALARM) WNG PARMS HRC101DK 00318490
  506. TM SAVEWRK1,VMWNGON IS THIS A WARNING ? 00319000
  507. BO MSGSNDW YES, INTERRUPT THE RECEIVER 00320000
  508. L R2,=A(HOLDSCR+NORET+ALARM) MSG PARMS HRC101DK 00321290
  509. SPACE , HRC101DK 00321580
  510. MSGSNDW EQU * SEND THE USER MESSAGE/WARNING @V202420 00322000
  511. TM SAVEWRK1+2,NHILIGHT WANTS NO MSG HILIGHTING! HRC101DK 00322160
  512. BO MSGNHILI SKIP IT HRC101DK 00322170
  513. O R2,=A(HILIGHT) ELSE, TURN IT ON HRC101DK 00322180
  514. SPACE , HRC101DK 00322190
  515. MSGNHILI EQU * HRC101DK 00322200
  516. STM R0,R1,SAVEWRK2 SAVE LENGTH AND ADDR OF BUFFER @V60C2BE 00322300
  517. TM SAVEWRK1,VMMTEXT MESSAGE TEXT ONLY? @V60C2BE 00322450
  518. BZ NOTNOH NO - BRANCH @V60C2BE 00322600
  519. LA R15,L'MSGHDR+1 LENGTH OF HEADER TO BE SKIPPED @V60C2BE 00322750
  520. AR R1,R15 PAST HDR TEXT @V60C2BE 00322900
  521. LA R15,L'MSGTRL(,R15) DECR LENGTH BY TRAILER HRC017DK 00323000
  522. SR R0,R15 LESS LENGTH OF HDR TEXT @V60C2BE 00323050
  523. LA R2,NORET NO ALARM OR HILIGHT FOR MSGNOH HRC017DK 00323150
  524. NOTNOH EQU * @V60C2BE 00323200
  525. SPACE 00323350
  526. O R2,=A(NOTRESP+NOTIME) SET MSG PARMS HRC101DK 00323590
  527. CALL DMKQCNWT SEND MSG HRC101DK 00323680
  528. LM R0,R1,SAVEWRK2 RESTORE LENGTH & ADDR OF BUFFER @V60C2BE 00323800
  529. BR R7 RETURN 00324000
  530. SPACE 2 00325000
  531. MSGSNDN EQU * SEND MSG= DMKMSG057W @V200820 00326000
  532. MVC SAVEWRK4(8),VMUSER MOVE USERID FOR DMKERMSG @V200820 00328000
  533. MVI SAVEWRK6,X'00' FIELD DELIMITER @V200820 00329000
  534. LA R1,=CL14' DISCONNECTED' MAYBE HE'S DISCONNECTED@V200820 00330000
  535. TM VMOSTAT,VMDISC ?? @V200820 00331000
  536. BO MSGSNDE YES - GO FILL IN VARIABLE DATA @V200820 00332000
  537. LA R1,=CL14' MSG OFF ' MAYBE HE DOESN'T WANT T@V200820 00333000
  538. TM SAVEWRK1,VMMSGON ?? @V200820 00334000
  539. BO MSGSNDE YES - GO FILL IN VARIABLE DATA @V200820 00335000
  540. LA R1,=CL14' WNG OFF ' MUST BE WARNING OFF @V200820 00336000
  541. MSGSNDE EQU * @V200820 00337000
  542. LM R5,R6,SAVEWRK8 SAVE LENGTH OF USERID @VA09531 00337500
  543. MVC SAVEWRK6+1(14),0(R1) MOVE IN MESSAGE TRAILER@V200820 00338000
  544. L R1,SAVER11 GET CALLERS VMBLOK ADDRESS @V407508 00338100
  545. LR R8,R11 REMEMBER CURRENT VMBLOK ADDRESS @V407508 00338200
  546. SWTCHVM LOCK CALLERS VMBLOK @V407508 00338300
  547. LA R1,VMUSER-VMBLOK(,R8) LOCK DISCO USER @VA09531 00338450
  548. CALL DMKLOCK @VA09531 00338600
  549. LA R1,SAVEWRK4 START OF VARIABLE DATA FIELDS @V200820 00339000
  550. LA R0,23 MAXIMUM LENGTH @V60C2B8 00340000
  551. ICM R0,B'1110',MODID+3 MODULE I.D. FOR DMKERM @V200820 00341000
  552. L R2,=X'80E60039' RETURN HERE, MSG= DMKMSG057W@V200820 00342000
  553. CALL DMKERMSG SEND THE MESSAGE 00347000
  554. N R2,XRIGHT16 SAVE ERROR CODE ONLY 00348000
  555. ST R2,SAVER2 RETURN CODE TO CALLER 00349000
  556. LA R1,VMUSER-VMBLOK(,R8) UNLOCK DISCO USER @VA09531 00350110
  557. CALL DMKLOCKD @VA09531 00350120
  558. LR R1,R8 @VA09531 00350130
  559. IC R5,SAVEWRK1 RESTORE MASK @VA09531 00350140
  560. SWTCHVM LOCK THIS VMBLOK @V407508 00350200
  561. TM VMOSTAT,VMDISC MSG DUE TO DISCONNECTED ? @V200820 00354000
  562. BCR 8,R7 NO -- JUST RETURN @V200820 00355000
  563. EX R5,MSGREC ALSO NOT RECEIVING ? @V200820 00356000
  564. BCR 8,R7 YES - RETURN @V200820 00357000
  565. CLI VMSPMFLG,VMSPMON USER RECEIVING SP MSG? @V60C2B8 00357300
  566. BNER R7 NO - RETURN TO SP MSG CODE @V60C2B8 00357600
  567. B SNDMSG SEND MESSAGE ANYWAY @V200930 00358000
  568. EJECT 00359000
  569. *. 00360000
  570. * 00361000
  571. * SUBROUTINE NAME - 00362000
  572. * 00363000
  573. * DMKMSGEC 00364000
  574. * 00365000
  575. * FUNCTION - 00366000
  576. * 00367000
  577. * TEST TERMINAL OPERATION BY RETRANSMITTING ENTERED LINES 00368000
  578. * THE NUMBER OF TIMES SPECIFIED. 00369000
  579. * 00370000
  580. * COMMAND FORMAT - 00371000
  581. * 00372000
  582. * +--------+--------+ 00373000
  583. * | ECHO | <NN> | 00374000
  584. * +--------+--------+ 00375000
  585. * 00376000
  586. * OPERATION - 00377000
  587. * 00378000
  588. * 1. CALL DMKSCNFD TO LOCATE THE NN OPERAND. 00379000
  589. * IF NONE FOUND, ASSUME A VALUE OF 1. 00380000
  590. * IF MORE THAN 2 DIGITS LONG, ASSUME DEFAULT VALUE. 00381000
  591. * 2. IF A VALUE IS ENTERED, CALL DMKCVTDB TO CONVERT THE NUMBER 00382000
  592. * TO BINARY AND SAVE IT IN SAVEWRK1. 00383000
  593. * 3. CALL DMKQCNWT TO OUTPUT MESSAGE -'ECHO ENTERED: TO 00384000
  594. * TERMINATE TYPE END'. 00385000
  595. * 4. CALL DMKQCNWT TO SEND MESSAGE- 'ENTER LINE' AND THEN 00386000
  596. * CALL DMKQCNRD TO READ THE LINE. 00387000
  597. * 5. WHEN READ IS COMPLETE, TEST FOR THE WORD 'END' IN THE 00388000
  598. * BUFFER IF END HAS BEEN ENTERED, EXIT.IF NOT CALL DMKQCNWT 00389000
  599. * TO SEND THE LINE BACK TO THE TERMINAL. CONTINUE DOING THIS 00390000
  600. * THE NUMBER OF TIMES SPECIFIED OR UNTIL THE ATTN KEY IS HIT. 00391000
  601. * 6. WHEN TRANSMITTING IS COMPLETE, GO BACK TO STEP 4. 00392000
  602. * 00393000
  603. * RESPONSES - 00394000
  604. * ECHO ENTERED: TO TERMINATE TEST TYPE END 00395000
  605. * ENTER LINE 00396000
  606. * 00397000
  607. * ERROR MESSAGES - 00398000
  608. * NONE 00399000
  609. * 00400000
  610. *. 00401000
  611. EJECT 00402000
  612. DMKMSGEC RELOC ECHO COMMAND PROCESSOR 00403000
  613. MVC SAVEWRK4(1),VMMLEVEL SAVE LINEDIT BYTE 00404000
  614. NI VMMLEVEL,255-VMMLINED TURN OFF LINE EDIT BIT 00405000
  615. CALL DMKSCNFD LOCATE NN IF ANY 00406000
  616. BNZ NNDEFLT BRANCH IF NONE FOUND 00407000
  617. C R0,F2 COMPARE WITH MAX NO OF CHARS @VA00860 00408000
  618. BH NNDEFLT BRANCH IF EXCESSIVE LENGTH @VA00860 00409000
  619. CALL DMKCVTDB CONVERT NUMBER TO BINARY 00410000
  620. BNZ NNDEFLT USE DEFAULT VALUE IF BAD NUMBER TYPED IN 00411000
  621. LTR R1,R1 WAS ZERO COUNT SPECIFIED ???? 00412000
  622. BZ NNDEFLT DEFAULT TO ONE IS IT WAS 00413000
  623. ST R1,SAVEWRK1 STORE COUNT IN SAVEWRK1 00414000
  624. B SENDHDR GO SEND HEADER LINE 00415000
  625. NNDEFLT L R1,F1 LOAD VALUE OF ONE 00416000
  626. ST R1,SAVEWRK1 STORE IT 00417000
  627. SENDHDR LA R0,17 LOAD LENGTH OF BUFFER 00418000
  628. CALL DMKFREE GET THE BUFFER FROM FREE STORAGE 00419000
  629. LR R8,R1 POINT GPR8 TO BUFFER 00420000
  630. LA R0,41 LOAD MESSAGE LENGTH 00421000
  631. LA R1,ECHOHEAD ADDRESS OF MESSAGE 00422000
  632. L R2,=A(NOTRESP) INDICATE NON-COMMAND MSG @V60C2B8 00422600
  633. CALL DMKQCNWT,PARM=NORET(,R2) SEND HEADER LINE @V60C2B8 00423200
  634. ECHOPROM LA R0,10 LENGTH OF PROMPT 00424000
  635. LA R1,PROMPTER ADDRESS OF PROMPT MESSAGE 00425000
  636. L R2,=A(NOTRESP) INDICATE NON-COMMAND MSG @V60C2B8 00425600
  637. CALL DMKQCNWT,PARM=NORET(,R2) SEND PROMPT @V60C2B8 00426200
  638. LA R0,130 LOAD MAX LINE LENGTH ALLOWING FOR 2 *00427000
  639. BYTE SLOP AREA 00428000
  640. LR R1,R8 POINT TO BUFFER 00429000
  641. CALL DMKQCNRD GO READ LINE WITH NO UPPER CASE OR EDIT 00430000
  642. B *+4(R2) GPR 2 CONTAINS RETURN CODE 00431000
  643. B CKEND RC = 0 00432000
  644. B ECHOPROM RC = 4 --- ATTN --- 00433000
  645. B ECHOPROM RC = 8 --- ATTN --- 00434000
  646. B ECHOEXIT RC = 12 -- POWER OFF -- 00435000
  647. SPACE 00436000
  648. CKEND CL R0,F3 IF THREE CHARACTERS - MIGHT BE 'END' 00437000
  649. BNE NOTEND BYPASS CHECK IF OTHER THAN THREE 00438000
  650. MVC SAVEWRK2(3),0(R1) MOVE WORD TO SAVEWRK AREA 00439000
  651. OC SAVEWRK2(3),BLANKS MAKE CHAR. UPPERCASE 00440000
  652. CLC SAVEWRK2(3),=C'END' WAS END SPECIFIED ? 00441000
  653. BE ECHOEXIT YES - GO EXIT 00442000
  654. NOTEND EQU * 00443000
  655. TM VMOSTAT,VMKILL TEST IF USER TO BE FORCED OFF? @VA11792 00443100
  656. BO ECHOEXIT IF SO, EXIT @VA11792 00443200
  657. L R4,SAVEWRK1 LOAD LINE COUNT 00444000
  658. ECHOWRIT L R2,=A(NOTRESP) INDICATE NON-COMMAND MSG @V60C2B8 00444600
  659. CALL DMKQCNWT ECHO LINE @V60C2B8 00445200
  660. B *+4(R2) GPR 2 CONTAINS RETURN CODE 00446000
  661. BCT R4,ECHOWRIT RC = 0 -- CONTINUE -- 00447000
  662. B ECHOPROM RC = 4 -- ATTN OR LINE CNT = 0 -- 00448000
  663. B ECHOPROM RC = 8 -- ATTN -- 00449000
  664. SPACE 00450000
  665. * IF RETURN CODE EQUAL 12 , EXIT 00451000
  666. SPACE 00452000
  667. ECHOEXIT LA R0,17 LENGTH OF BUFFER 00453000
  668. LR R1,R8 BUFFER ADDRESS 00454000
  669. CALL DMKFRET RETURN BUFFER TO FREE STORAGE 00455000
  670. MVC VMMLEVEL(1),SAVEWRK4 RESTORE LINE EDIT BIT 00456000
  671. B RETURN GO EXIT 00457000
  672. SPACE 00458000
  673. ECHOHEAD DC CL41'ECHO ENTERED ; TO TERMINATE TEST TYPE-END' 00459000
  674. PROMPTER DC CL10'ENTER LINE' 00460000
  675. EJECT 00461000
  676. MSG003 LA R2,3 ERROR CODE 00462000
  677. B CALLERM .... 00463000
  678. SPACE 00464000
  679. MSG020 LA R2,20 ERROR CODE 00465000
  680. B NOVAR .... 00466000
  681. SPACE 00467000
  682. MSG045 LA R2,45 ERROR CODE 00468000
  683. LM R0,R1,SAVEWRK8 RELOAD LENGTH AND ADDRESS OF BAD ARG. 00469000
  684. B CALLERM .... 00470000
  685. SPACE 00471000
  686. MSG810 LA R2,810 ERROR CODE @V60C2B8 00471250
  687. B NOVAR .... @V60C2B8 00471500
  688. SPACE 00471750
  689. NOVAR SLR R1,R1 ZERO PARM REG 00472000
  690. CALLERM ICM R0,14,MODID+3 INSERT MODULE ID 00473000
  691. CALL DMKERMSG SEND ERROR MESSAGE 00474000
  692. * 00475000
  693. * DMKERMSG WILL RETURN DIRECTLY TO DMKCFM -- NOT HERE 00476000
  694. * 00477000
  695. SPACE 3 00478000
  696. MSGMVC MVC L'MSGHDR(0,R1),0(R2) MOVE MESSAGE TO OUTPUT BUFFER 00479000
  697. SMSGMVC MVC VMCMLEN(0,R1),0(R3) SPM TO OUTPUT BUFFER @V60C2B8 00479500
  698. MSGREC TM VMMLEVEL,X'00' IS USER RECEIVING MESSAGES OR WARNINGS 00480000
  699. MSGCMPOP CLC 0(0,R1),=C'OPERATOR ' EXECUTED COMPARE 00481000
  700. SPACE 2 00482000
  701. HEXZERO EQU X'00' CLEAR OUT VMCF PARM LIST FIELDS @V60C2B8 00482200
  702. MSGLIMIT DC H'10' EXCEEDED VMCF MESSAGE LIMIT @V60C2B8 00482400
  703. NOTAUTH DC H'5' RECEIVER NOT VMCF AUTHORIZED @V60C2B8 00482600
  704. SPACE 3 00482800
  705. MSGHDR DS CL29 LENGTH OF MESSAGE HEADER HRC101DK 00483490
  706. ORG MSGHDR 00484000
  707. DC C'HH:MM:SS' MESSAGE TIME STAMP @V202420 00485000
  708. DC X'1540' CR BLANK HRC101DK 00486490
  709. MSGTYP DC CL19'MSG FROM : ' 00487000
  710. MSGTRL DC X'40' BLANK HRC101DK 00488090
  711. EJECT 00489000
  712. LTORG 00490000
  713. EJECT 00491000
  714. COPY EQU 00492000
  715. PSA 00493000
  716. COPY CONBUF 00494000
  717. COPY VMCBLOKS @V60C2B8 00494500
  718. COPY SAVE 00495000
  719. COPY VMBLOK 00496000
  720. END DMKMSG @V200820 00497000