ibm:vm370-lib:cp:dmkuso.assemble_src
Table of Contents
DMKUSO Source
References
- Fixes Applied : 23
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC065DK]
Source Listing
- DMKUSO.ASSEMBLE.txt
- USO TITLE 'DMKUSO (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKUSO 00006000
- * 00007000
- * CONTENTS - 00008000
- * 00009000
- * DMKUSOLG - 'LOGOFF' COMMAND 00010000
- * DMKUSOFL - 'FORCE' COMMAND 00011000
- * DMKUSOFF - ROUTINE TO LOGOFF A USER 00012000
- * DMKUSODS - 'DISCONNECT' COMMAND 00013000
- *. 00014000
- EJECT 00015000
- COPY OPTIONS 00016000
- COPY LOCAL 00017000
- SPACE 3 00018000
- DMKUSO CSECT 00019000
- SPACE 00020000
- DC CL8'DMKUSO' PAGEABLE MODULE IDENTIFIER @V200820 00021000
- SPACE 00022000
- EXTRN DMKACOTM,DMKACOFF,DMKVATBC,DMKBLDRL @V200820 00023000
- EXTRN DMKCFPRR,DMKPGSPO,DMKPTRRU,DMKPTRRL @V200820 00024000
- EXTRN DMKCVTBD,DMKCVTBH,DMKCVTDT,DMKERMSG @V200820 00025000
- EXTRN DMKSSSUS,DMKSSSVM @V60B6B8 00025010
- EXTRN DMKSCNFD,DMKSCNAU,DMKSCNRD,DMKSCNRN @V200820 00026000
- EXTRN DMKSCNVD @VA07859 00026500
- EXTRN DMKSCHDL,DMKSCHRT,DMKSYSTI,DMKPTRPW @VA08037 00027200
- EXTRN DMKSCHAU @V408246 00027300
- EXTRN DMKSTKCP,DMKTRCND,DMKPERT @VM08908 00028000
- EXTRN DMKPAGSK @V408246 00028100
- EXTRN DMKSCNVU,DMKVDREL @VA03351 00029000
- EXTRN DMKVMASH @V60BC11 00030000
- EXTRN DMKPTRUL @VA05738 00030100
- EXTRN DMKCPE,DMKCKP @V408246 00030200
- EXTRN DMKPGSPP @V408246 00030400
- SPACE 00031000
- USING PSA,R0 FOR ALL ENTRIES 00032000
- USING VMBLOK,R11 ... 00033000
- USING SAVEAREA,R13 ... 00034000
- * 00035000
- EJECT 00036000
- *. 00037000
- * SUBROUTINE NAME - 00038000
- * 00039000
- * DMKUSOLG - 'LOGOFF' COMMAND 00040000
- * 00041000
- * FUNCTION - 00042000
- * 00043000
- * FOR A USER, TO LOGOFF FROM CP370 WHEN HIS 00044000
- * TERMINAL SESSION IS COMPLETED 00045000
- * 00046000
- * COMMAND LINE FORMAT - 00047000
- * 00048000
- * +--------+---------------------------------------------+ 00049000
- * | LOGOUT | | 00050000
- * | LOGOFF | <HOLD> | 00051000
- * | LOG | | 00052000
- * +--------+---------------------------------------------+ 00053000
- * 00054000
- * SEE "NOTES" BELOW. 00055000
- * 00056000
- * ATTRIBUTES - 00057000
- * 00058000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00059000
- * 00060000
- * ENTRY POINT - 00061000
- * 00062000
- * DMKUSOLG 00063000
- * 00064000
- * ENTRY CONDITIONS - 00065000
- * 00066000
- * GPR 2 = 0 00067000
- * GPR 9 = ADDRESS OF 'LOGOFF' COMMAND 00068000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00069000
- * GPR 12 = ADDRESS OF DMKUSOLG 00070000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00071000
- * 00072000
- * EXIT CONDITIONS - 00073000
- * 00074000
- * RETURNS TO THE CALLER IF AN ERROR IN THE COMMAND LINE 00075000
- * 00076000
- * WHEN A USER HAS LOGGED HIMSELF OFF, RETURNS TO CP370 00077000
- * WITH THE USER DELETED FROM THE RUNNING SYSTEM. 00078000
- * 00079000
- * CALLS TO OTHER ROUTINES - 00080000
- * 00081000
- * DMKSCNFD - TO SCAN COMMAND LINE 00082000
- * DMKERMSG - TO SEND ERROR MESSAGE TO CALLER IF NECESSARY 00083000
- * DMKUSOFF - INVOKED TO DO ACTUAL 'LOGOFF' PROCESS 00084000
- EJECT 00085000
- * EXTERNAL REFERENCES - 00086000
- * 00087000
- * NONE 00088000
- * 00089000
- * TABLES / WORK AREAS - 00090000
- * 00091000
- * NONE 00092000
- * 00093000
- * REGISTER USAGE - 00094000
- * 00095000
- * GPR 9 = ADDRESS OF 'LOGOFF' COMMAND BUFFER 00096000
- * GPR 10 = ADDRESS OF VMBLOK OF USER TO BE LOGGED OFF 00097000
- * GPR 11 = ADDRESS OF CALLER'S / USER'S VMBLOK 00098000
- * GPR 12 = BASE REGISTER 00099000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00100000
- * 00101000
- * OTHER REGISTERS ARE USED FOR WORK REGISTERS 00102000
- * 00103000
- * NOTES - 00104000
- * 00105000
- * 1. 'LOGOUT' MAY ALSO BE USED AS WELL AS 'LOGOFF' 00106000
- * FOR THIS COMMAND, BUT IN ANY EVENT AT LEAST 00107000
- * THREE CHARACTERS ('LOG') MUST BE GIVEN. 00108000
- * 00109000
- * 2. THE 'HOLD' OPTION IS USED TO KEEP A 2701/2702/2703 00110000
- * LINE ENABLED AFTER THE LOGOFF IS COMPLETE. 00111000
- * 00112000
- * OPERATION - 00113000
- * 00114000
- * 1. CALLS DMKSCNFD TO DETERMINE IF AN OPTION IS PRESENT ON THE 00115000
- * COMMAND LINE. IF YES, IT MUST BE 'HOLD' (ERROR IF NOT). 00116000
- * 00117000
- * 2. THEN SETS REGISTERS AND FLAGBITS AS NEEDED, AND 00118000
- * BRANCHES TO THE DMKUSOFF ROUTINE AT STEP 2 TO 00119000
- * ACCOMPLISH THE ACTUAL LOGOFF FROM THE SYSTEM. 00120000
- * 00121000
- * MESSAGES - 00122000
- * 00123000
- * RESPONSES - 00124000
- * 00125000
- * SEE DMKUSOFF ROUTINE FOR THE RESPONSES SENT TO THE USER 00126000
- * AND THE SYSTEM OPERATOR IN THE LOGOFF PROCESS. 00127000
- * 00128000
- * ERROR MESSAGES FOR 'LOGOFF' COMMAND: 00129000
- * 00130000
- * DMKUSO003E INVALID OPTION - XXXX 00131000
- *. 00132000
- EJECT 00133000
- *********************************************************************** 00134000
- * 00135000
- * DMKUSOLG - 'LOGOFF' COMMAND 00136000
- * 00137000
- *********************************************************************** 00138000
- SPACE 00139000
- DMKUSOLG RELOC ENTER 'LOGOFF' COMMAND. 00140000
- TM VMRSTAT,VMLOGOFF IS USER ALREADY IN LOGOFF? @VA01827 00141000
- BO USO99X YES--EXIT @VA04404 00142000
- TM VMRSTAT,VMEXWAIT IS USER IN EXECUTION WAIT ? @VA13025 00142100
- BZ USO06 NO, CONTINUE LOGOFF PROCESS @VA13025 00142200
- BAL R8,USOSUB CHECK CMD LINE @VA13025 00142300
- LR R10,R11 SET UP R10 FOR DELAYED LOGOFF @VA13025 00142400
- OI VMOSTAT,VMKILL DELAY THE LOGOFF UNTIL COMPLETE @VA13025 00142500
- B DELAYOFF GO SET UP TO DELAY THE LOGOFF @VA13025 00142600
- USO06 MVI SAVEWRK1,ELOGOFF SIGNAL: LOGOFF ENTERED. 00143000
- BAL R8,USOSUB AND CALL SUBROUTINE TO CHECK COMMAND LINE 00144000
- * COMMAND LINE WAS OK, PROCEED: 00145000
- USO08 OI VMRSTAT,VMLOGOFF SYNCHRONIZE LOGOFF @VA05705 00145650
- LA R15,8 SAVERETN+8 = DONT READ, DONT RUN @VA04404 00146200
- AL R15,SAVERETN MODIFY RETURN 00147000
- ST R15,SAVERETN AND STORE IT BACK. 00148000
- MC 5,1 TELL MONITOR USER LOGGING OFF @V4M0129 00148110
- LA R0,CPEXSIZE GET STORAGE FOR CPEXBLOK @VA02805 00149000
- CALL DMKFREE @VA02805 00150000
- USING CPEXBLOK,R1 @VA02805 00151000
- STM R0,R15,CPEXR0 SAVE ALL REGS @VA02805 00152000
- LA R3,USOJOIN RETURN TO USOJOIN IN DMKUSOFF... @VA02805 00153000
- ST R3,CPEXADD ...WHEN CPEXBLOK IS UNSTACKED @VA02805 00154000
- CALL DMKSTKCP STACK CPEXBLOK @VA02805 00155000
- GOTO DMKDSPCH CAUSE SYNCRONIZATION OF CPEXBLOKS@VA02805 00156000
- DROP R1 @VA02805 00157000
- EJECT 00158000
- *. 00159000
- * SUBROUTINE NAME - 00160000
- * 00161000
- * DMKUSOFL - 'FORCE' COMMAND 00162000
- * 00163000
- * FUNCTION - 00164000
- * 00165000
- * TO FORCE THE LOGOFF OF A SPECIFIC USER FROM THE SYSTEM 00166000
- * 00167000
- * COMMAND LINE FORMAT - 00168000
- * 00169000
- * +---------+---------------------------------------+ 00170000
- * | | | 00171000
- * | FORCE | USERID | 00172000
- * | | | 00173000
- * +---------+---------------------------------------+ 00174000
- * 00175000
- * SEE "NOTES" BELOW. 00176000
- * 00177000
- * ATTRIBUTES - 00178000
- * 00179000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00180000
- * 00181000
- * ENTRY POINT - 00182000
- * 00183000
- * DMKUSOFL 00184000
- * 00185000
- * ENTRY CONDITIONS - 00186000
- * 00187000
- * GPR 2 = 0 00188000
- * GPR 9 = ADDRESS OF 'FORCE' COMMAND 00189000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00190000
- * GPR 12 = ADDRESS OF DMKUSOFL 00191000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00192000
- * 00193000
- * EXIT CONDITIONS - 00194000
- * 00195000
- * RETURNS TO THE CALLER IF AN ERROR IN THE COMMAND LINE 00196000
- * 00197000
- * RETURNS TO THE CALLER WHEN THE SPECIFIED USER HAS BEEN 00198000
- * LOGGED OFF THE SYSTEM (UNLESS THE CALLER WAS THE USER) 00199000
- * 00200000
- * IF THE CALLER FORCED HIMSELF OFF, RETURNS TO CP370 00201000
- * WITH THE CALLER DELETED FROM THE RUNNING SYSTEM. 00202000
- * 00203000
- * CALLS TO OTHER ROUTINES - 00204000
- * 00205000
- * DMKSCNFD - TO SCAN COMMAND LINE 00206000
- * DMKSCNAU - TO CHECK FOR ACTIVE USER 00207000
- * DMKERMSG - TO SEND ERROR MESSAGE TO CALLER IF NECESSARY 00208000
- EJECT 00209000
- * EXTERNAL REFERENCES - 00210000
- * 00211000
- * DMKSYSOP - SYSTEM OPERATOR'S VMBLOK 00212000
- * 00213000
- * TABLES / WORK AREAS - 00214000
- * 00215000
- * NONE 00216000
- * 00217000
- * REGISTER USAGE - 00218000
- * 00219000
- * GPR 9 = ADDRESS OF 'FORCE' COMMAND BUFFER 00220000
- * GPR 10 = ADDRESS OF VMBLOK OF USER TO BE LOGGED OFF 00221000
- * GPR 11 = ADDRESS OF CALLER'S / USER'S VMBLOK 00222000
- * GPR 12 = BASE REGISTER 00223000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00224000
- * 00225000
- * OTHER REGISTERS ARE USED FOR WORK REGISTERS 00226000
- * 00227000
- * NOTES - 00228000
- * 00229000
- * 1. 'FORCE USERID' IS A PRIVILEGED COMMAND VALID ONLY 00230000
- * FOR A USER WITH PRIVILEGE CLASS A (SYSTEM OPERATOR). 00231000
- * 00232000
- * OPERATION - 00233000
- * 00234000
- * 1. CALLS DMKSCNFD TO OBTAIN THE USERID FROM THE COMMAND LINE. 00235000
- * (ERROR IF MISSING OR > 8 BYTES IN LENGTH.) IF OK, CALLS 00236000
- * DMKSCNAU TO DETERMINE IF THE GIVEN USERID IS CURRENTLY 00237000
- * LOGGED ON THE SYSTEM (ERROR IF NOT). 00238000
- * 00239000
- * 2. CHECKS TO SEE IF THE USERID TO BE LOGGED OFF IS THE 00240000
- * CALLER OF THE FORCE COMMAND (POSSIBLE IF PERHAPS UNLIKELY); 00241000
- * IF YES, HANDLES LIKE A NORMAL 'LOGOFF'. 00242000
- * 00243000
- * 3. SET THE 'VMKILL' FLAG IN VMOSTAT FOR THE FORCED USER. 00244000
- * BUILD A CPEXBLOK TO ENTER DMKDSPCH POINTING TO THE VMBLOK 00245000
- * OF THE FORCED USER, SO THAT DMKDSPCH WILL CALL DMKUSOFF. 00246000
- * 00247000
- * ERROR MESSAGES - 00248000
- * 00249000
- * DMKUSO020E USERID MISSING OR INVALID 00250000
- * DMKUSO045E USERID NOT LOGGED ON 00251000
- * DMKUSO003E INVALID OPTION - XXXX 00252000
- *. 00253000
- EJECT 00254000
- *********************************************************************** 00255000
- * 00256000
- * DMKUSOFL - 'FORCE' COMMAND - FORCE LOGOFF OF A USER 00257000
- * 00258000
- *********************************************************************** 00259000
- SPACE 00260000
- DMKUSOFL RELOC ENTER 'FORCE' COMMAND. 00261000
- MVI SAVEWRK1,EFORCE FLAG 'FORCE' COMMAND ENTERED@V200820 00262000
- CALL DMKSCNFD PICK UP USERID FROM COMMAND LINE @V200820 00263000
- BNZ ERROR20 ERROR IF MISSING. 00264000
- CL R0,F8 CHECK BYTE COUNT 00265000
- BH ERROR20 ERROR IF INVALID (> 8 CHARS) 00266000
- STM R0,R1,SAVEWRK2 REMEMBER R0/R1 (FROM DMKSCNFD) 00267000
- CALL DMKSCNAU SEE IF USERID IS ON THE SYSTEM 00268000
- BC 4+2,ERROR45 CALLING ERROR OR NOT ON. 00269000
- LR R10,R1 REMEMBER VMBLOK ADDR OF FORCEE @VA03806 00270000
- TM VMRSTAT-VMBLOK(R10),VMLOGOFF IN LOGOFF NOW? @VA03806 00271000
- BO ERROR45 YES, BR 00272000
- TM VMOSTAT-VMBLOK(R10),VMKILL MAKE DOUBLE SURE... @VA04404 00272300
- BO ERROR45 DONT DOIT TWICE. @VA04404 00272600
- CLR R10,R11 IS THE CALLER = THE USER (NOT ILLEGAL) 00273000
- BNE FRCUSER NO, THEN GO FORCE THE USER @VA13025 00274000
- TM VMRSTAT,VMEXWAIT IS USER IN EXECUTION WAIT @VA13025 00274100
- BZ USO08 NO, JUST TREAT LIKE NORMAL LOGOFF@VA13025 00274200
- OI VMOSTAT,VMKILL TURN ON KILL BIT @VA13025 00274300
- B DELAYOFF AND GO TO DELAY THE LOGOFF @VA13025 00274400
- FRCUSER DS 0H HERE TO FORCE A USER @VA13025 00274500
- SPACE 00275000
- OI VMOSTAT-VMBLOK(R10),VMKILL LOGOFF THIS USER A@V200820 00276000
- OI VMSVSTAT-VMBLOK(R10),VMLGFORC FORCE @VA13026 00276500
- SPACE 00277000
- DELAYOFF DS 0H DELAY THE FORCE/LOGOFF @VA13025 00277500
- LA R0,CPEXSIZE @V200820 00278000
- CALL DMKFREE GET FREE STORAGE FOR A CPEXBLOK @V200820 00279000
- USING CPEXBLOK,R1 @V200820 00280000
- XC CPEXBLOK(16),CPEXBLOK CLEAR HEADER PORTION @V200820 00281000
- ST R10,CPEXR11 SET GR11 = FORCED USER VMBLOK @V200820 00282000
- L R2,ADSPCH ENTRY TO DMKDSP @VA13026 00283100
- ST R2,CPEXR12 ...SET FOR 'GOTO DMKDSPCH' @V200820 00284000
- ST R2,CPEXADD ... @V200820 00285000
- CALL DMKSTKCP STACK THE CPEXBLOK @V200820 00286000
- SPACE 00287000
- EXIT , RETURN TO DMKCFM @V200820 00288000
- DROP R1 @V200820 00289000
- EJECT 00290000
- *. 00291000
- * SUBROUTINE NAME - 00292000
- * 00293000
- * DMKUSOFF - ROUTINE TO LOGOFF A USER 00294000
- * 00295000
- * FUNCTION - 00296000
- * 00297000
- * TO PERFORM THE APPROPRIATE INTERNAL FUNCTIONS 00298000
- * NECESSARY TO DELETE A USER FROM THE RUNNING SYSTEM. 00299000
- * 00300000
- * ATTRIBUTES - 00301000
- * 00302000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00303000
- * 00304000
- * ENTRY POINT - 00305000
- * 00306000
- * DMKUSOFF 00307000
- * 00308000
- * ENTRY CONDITIONS - 00309000
- * 00310000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00316000
- * GPR 12 = ADDRESS OF DMKUSOFF 00317000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00318000
- * 00319000
- * EXIT CONDITIONS - 00320000
- * 00321000
- * NONE 00322000
- * 00323000
- * CALLS TO OTHER ROUTINES - 00324000
- * 00325000
- * DMKCVTDT - COMPUTE DATE-TIME 00326000
- * DMKACOTM - GET ACCOUNTING TIME 00327000
- * DMKQCNWT - WRITE MESSAGE TO USER & OPERATOR 00328000
- * DMKSCHDL - SCHEDULE RUNNING USER 00329000
- * DMKSCHRT - RESET AN OUTSTANDING CLOCK COMPARATOR REQUEST 00330000
- * DMKPGSPO - RESET PAGES 00331000
- * DMKACOFF - DO FINAL ACCOUNTING 00332000
- * DMKCFPRR - RESET VIRTUAL MACHINE & RELEASE ALL VIRTUAL DEVICES 00333000
- * DMKSCNRN - TO GET DEVICE NAME 00334000
- * DMKFRET - RETURN VMBLOK TO FREE STORAGE 00335000
- * DMKFREE - OBTAIN STORAGE FOR MESSAGES. 00336000
- * DMKVATBC - RELEASE SHADOW TABLES. 00337000
- * DMKBLDRL - RELEASE SEGMENT, PAGE, AND SWAP TABLES. 00338000
- * DMKSCNRD - TO GET TERMINAL DEVICE ADDRESS. 00339000
- * DMKCVTBH - TO CONVERT A BINARY ADDRESS TO HEX. 00340000
- * DMKCVTBD - TO CONVERT A BINARY NUMBER TO DECIMAL. 00341000
- * DMKPERT - TO TERMINATE "PER" TRACING 00342000
- * DMKTRCND - TO TERMINATE "TRACE" TRACING 00343000
- * DMKPGSPP RELEASE PAGES 00343100
- * 00344000
- * EXTERNAL REFERENCES - 00345000
- * 00346000
- * DMKSYSOP - SYSTEM OPERATOR'S VMBLOK 00347000
- * DMKSYSVM - SYSTEM VMBLOK 00348000
- * 00349000
- * TABLES / WORK AREAS - 00350000
- * 00351000
- * VMBLOK 00352000
- * TERMINAL REAL DEVICE BLOCK 00353000
- * 00354000
- * REGISTER USAGE - 00355000
- * 00356000
- * GPR 9 = 0 00358000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00359000
- * GPR 12 = BASE REGISTER 00360000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00361000
- * 00362000
- * GPRS 0-1, 3-8, 10, AND 14-15 ARE WORK REGISTERS. 00363000
- * 00364000
- * NOTES - 00365000
- * 00366000
- * DMKUSOFF CALLED DIRECTLY BY DMKDSPCH IF 00367500
- * NECESSARY TO LOGOFF A USER BECAUSE OF A DROPPED LINE OR 00368000
- * BECAUSE HIS VIRTUAL MACHINE STOPPED RUNNING WHEN IN THE 00369000
- * DISCONNECTED MODE. 00370000
- * 00371000
- * OPERATION - 00372000
- * 00373000
- * 1. SETS R9 = 0 (TO INDICATE NOT INVOKED FROM DMKUSOLG) 00374000
- * 00376000
- * 2. BY CALLING APPROPRIATE SUBROUTINES, COMPUTES NEEDED 00377000
- * INFORMATION FOR MESSAGES SENT TO USER AND SYSTEM OPERATOR, 00378000
- * ACCOUNTING DATA, ETC. WHEN ALL I/O ACTIVITY FOR THE USER 00379000
- * HAS QUIESCED, CALLS ROUTINES TO RELEASE SHADOW SEGMENT AND 00380000
- * PAGE TABLES (IF IN USE), RELEASE ALL PAGES ASSIGNED TO THE 00381000
- * USER, RELEASE VIRTUAL CHANNEL, CONTROL UNIT, AND 00382000
- * DEVICE BLOCKS, AND ASSOCIATED OTHER BLOCKS. FINALLY, 00383000
- * THE USER'S VMBLOK IS DETACHED FROM THE CHAIN AND GIVEN 00384000
- * BACK TO FREE STORAGE, AND EXIT IS MADE TO CP370 WITH THE 00385000
- * USER DELETED FROM THE CHAIN OF USERS ON THE SYSTEM. 00386000
- * IF THE USER WAS OCCUPYING THE VIRTUAL = REAL REGION, THE 00387000
- * MEMORY RELEASE SUBROUTINE (DMKBLDRL) IS CALLED WITH A PARM 00388000
- * OF 1 IN GPR2 TO INDICATE THAT THE REGION IS NOW FREE, AND TO 00389000
- * INDICATE THAT THERE ARE NO SWAPTABLES TO BE RELEASED. 00390000
- EJECT 00391000
- * MESSAGES - 00392000
- * 00393000
- * NORMAL RESPONSES TO USER: 00394000
- * 00395000
- * 'CONNECT= HH:MM:SS VIRTCPU= MMM:SS.00 TOTCPU= MMM:SS.00' 00396000
- * 'LOGOFF AT HH:MM:SS TID WEEKDAY MM/DD/YY' 00397000
- * OQ 00398000
- * 'LOGOFF AT HH:MM:SS TID WEEKDAY MM/DD/YY BY SYSTEM' 00399000
- * 00400000
- * MESSAGES SENT TO SYSTEM OPERATOR: 00401000
- * 00402000
- * 'TYPE RADDR LOGOFF AS USERID USERS = NNN <FORCED>' 00403000
- * OR 00404000
- * 'LINE DSC LOGOFF AS USERID USERS = NNN <FORCED>' 00405000
- * 00406000
- * ERROR MESSAGES - NONE 00407000
- *. 00408000
- EJECT 00409000
- *********************************************************************** 00410000
- * 00411000
- * DMKUSOFF - ROUTINE TO LOGOFF A USER 00412000
- * 00413000
- *********************************************************************** 00414000
- SPACE 00415000
- DMKUSOFF RELOC 00416000
- SR R2,R2 CLEAR REG FOR INSERT OF PARMS @VA13026 00416200
- TM VMSVSTAT,VMLGFORC FORCE? @VA13026 00416280
- BZ NOFORCE @VA13026 00416360
- O R2,=A(FORCE) INDICATE FORCE @VA13026 00416440
- NOFORCE DS 0H @VA13026 00416520
- TM VMSVSTAT,VMLGNMSG NO OPERATOR MESSAGE PARM SET @VA13026 00416600
- BZ NONMSG PARM NOT SET, DON'T SUPPRESS @VA13026 00416680
- O R2,=A(NOOPMSG) SUPPRESS OPERATOR MESSAGE @VA13026 00416760
- NONMSG DS 0H @VA13026 00416840
- STC R2,SAVEWRK1 AND STORE PARM FROM CALLER IN R2 @VA13026 00416920
- N R2,F15 ENSURE USE OF ONLY THE LOW 4 BITS OF R2 00417000
- STC R2,SAVEWRK1 AND STORE PARM FROM CALLER IN R2 00418000
- USOJOIN SR R9,R9 R9=0 MEANS NO FREE STORAGE IN USE FOR MSG 00419000
- ST R9,SAVEWRK4 CLEAR WORK AREA @VA04579 00419500
- LA R0,8 LENGTH OF USERID @VA13441 00420000
- LA R1,VMUSER POINT TO USERID @VA13441 00420100
- CALL DMKSCNAU SEE IF VMBLOK STILL VALID @VA13441 00420200
- BZ LOGOFF STILL THERE - LOG HIM OFF @VA13441 00420300
- BM USO96 ALREADY GONE - EXIT @VA13441 00420400
- LOGOFF DS 0H @VA13441 00420700
- OI VMRSTAT,VMLOGOFF SIGNAL: IN LOGOFF PROCESS @VA13441 00420800
- NI VMOSTAT,VMSYSOP+VMDISC+VMSHR SAVE ONLY THESE FL@V200820 00421000
- LA R0,CPEXSIZE @V408246 00421010
- CALL DMKFREE @V408246 00421060
- USING CPEXBLOK,R1 @V408246 00421110
- STM R0,R15,CPEXR0 @V408246 00421160
- LA R0,USOSCH SCHEDULAR RETURN @V408246 00421210
- ST R0,CPEXADD @V408246 00421260
- CALL DMKSTKCP STACK CPEXBLOK @V408246 00421310
- GOTO DMKDSPCH MAKE SURE LAST IN THE QUEUE @V408246 00421360
- * 00421410
- USOSCH DS 0H @V408246 00421460
- CALL DMKSCHDL REMOVE FROM QUEUE @V408246 00421510
- LA R4,VMDELAY POINT TO TRQBLOK HOLD FIELD @V200820 00422000
- BAL R7,FRETRQB DEQUEUE AND FRET TRQBLOK @V200820 00423000
- TM VMPERFLG,VMPERUSE "PER" TRACING ACTIVE? PER001 00424000
- BZ USO04 NO -- @V200820 00425000
- CALL DMKPERT RESET PER TRACING @V200820 00426000
- USO04 EQU * CHECK FOR VIRTUAL TRACE @V200820 00428000
- CLI VMTRCTL,X'00' TRACING VIA DMKTRC ? @V200820 00429000
- BE USO05 NO -- @V200820 00430000
- CALL DMKTRCND RESET VIRTUAL MACHINE TRACE @V200820 00431000
- USO05 EQU * @V200820 00432000
- L R4,=V(DMKSSSVM) ADDR OF THE DMKMSS VIRT MACH @V60B6B8 00432010
- * NAME 00432020
- LTR R4,R4 IS VCON EQUAL TO ZERO? @VA09319 00432022
- BZ USO05A YES, INDICATES DMKSSS NOT IN SYS @VA09319 00432024
- OC 0(8,R4),0(R4) IS MSS INIT ? @VA13088 00432026
- BZ USO05A BRANCH, INDICATES MSS NOT INIT.@VA13088 00432028
- CLC VMUSER,0(R4) IS HE LOGGING OFF @V60B6B8 00432030
- BNE USO05A NO @V60B6B8 00432040
- CALL DMKSSSUS GO PURGE MSS QUEUES, IF ANY @V60B6B8 00432050
- NI PSAMSS,X'FF'-MSSPRES SET MSS FLAG OFF @V60B6B8 00432060
- USO05A EQU * @V60B6B8 00432070
- TM VMOSTAT,VMDISC IS THIS USER DISCONNECTED ? 00433000
- BZ US009 NO, CONTINUE @VA09408 00434050
- LH R8,VMVTERM YES, MAY BE CONSOLE SPOOLED @VA09408 00434100
- LTR R8,R8 VIRTUAL CONSOLE AVAILABLE? @VA09408 00434150
- BM DISCUSER NO, HE CAN'T HEAR US @VA09408 00434200
- AL R8,VMDVSTRT YES, GET VDEVBLOK POINTER @VA09408 00434250
- USING VDEVBLOK,R8 FOR ADDRESSABILITY @VA09408 00434300
- TM VDEVFLAG,VDEVCSPL CONSOLE SPOOLING ACTIVE? @VA09408 00434350
- BZ DISCUSER NO, GO TELL OPERATOR @VA09408 00434400
- DROP R8 @VA09408 00434450
- US009 EQU * @VA09408 00434500
- TM VMRSTAT,VMLOGON IF THE USER WAS LOGGING ON, 00435000
- BO USO11 DO NOT CALL THE ACCOUTNING ROUTINE 00436000
- CALL DMKACOTM CALL ACCOUNTING ROUTINE FOR CONNECT MSG 00437000
- USO11 LA R0,(LNR5+7)/8 GET ENOUGH FREE STORAGE FOR LONGEST MSG 00438000
- CALL DMKFREE ... 00439000
- LR R9,R1 REMEMBER THE ADDRESS IN R9 00440000
- LA R1,NR2 POINT TO 'LOGOFF AT' MSG 00441000
- LA R2,L'NR2-1 LENGTH - 1 IN R2 00442000
- BAL R3,MSGSUBR FILL IN MSG TO BE SENT TO THE USER 00443000
- SPACE 00444000
- CALL DMKQCNWT SEND MESSAGE, WAIT FOR IT @V200820 00445000
- TM VMOSTAT,VMDISC IS USER DISCONNECTED? @VA09408 00445020
- BO DISCUSER YES, RDEVBLOK ALREADY CLEARED @VA09408 00445040
- L R8,VMTERM GET TERM RDEVBLOK @VA04579 00445100
- ST R8,SAVEWRK4 SAVE IT FOR LATER USE @VA04579 00445200
- SR R15,R15 @VA04579 00445300
- ST R15,VMTERM CLEAR VMTERM @VA04579 00445400
- OI VMOSTAT,VMDISC SIGNAL USER NOW DISCONNECT @VA04579 00445500
- SPACE 1 00445530
- DISCUSER BAL R4,MSGOP GO TELL OPERATOR HE'S GONE @VA05738 00445560
- SPACE 1 00445590
- LA R0,CPEXSIZE WE'LL NEED ONE MORE CPEXBLOK @VA05738 00445620
- CALL DMKFREE ASK FOR THE STORAGE @VA05738 00445650
- USING CPEXBLOK,R1 TELL THE ASSEMBLER ABOUT IT @VA05738 00445680
- STM R0,R15,CPEXR0 SAVE REGS FOR LATER @VA05738 00445710
- LA R3,USOCONT THIS IS WHERE WE'LL CONTINUE @VA05738 00445740
- ST R3,CPEXADD INSERT INTO THE BLOCK @VA05738 00445770
- CALL DMKSTKCP ENSURE THAT EVERYONES DONE WITH @VA05738 00445800
- * THIS USER BEFORE WE PURGE HIM. 00445830
- GOTO DMKDSPCH @VA08501 00445910
- EJECT 00446000
- USOCONT DS 0H CONTINUE AFTER MSG TO USER (IF ANY) HAS BEEN GIVEN: 00447000
- NI VMMLEVEL,255-(VMMSGON+VMWNGON) NO SPOOL MSGS@VM08714 00448000
- OI VMQSTAT,VMINHMIG PREVENT MIGRATION @V408246 00449300
- USO20A TM VMOSTAT,VMSHR WAS USER RUNNING A SHARED SYSTEM @V304735 00454000
- BZ USO21 IF NOT - RESET THE VIRTUAL @V304735 00455000
- * MACHINE 00456000
- CL R11,LASTUSER WAS HE THE CURRENT RUNUSER @V304735 00457000
- BNE USO21 NO - CONTINUE @V304735 00458000
- CALL DMKVMASH CHECK IF ANY SHARED PAGES WERE @V304735 00459000
- * CHANGED 00460000
- SPACE 1 00464000
- USO21 CL R11,LASTUSER WAS USER THE LAST ONE DISPATCHED @V304735 00465000
- BNE *+10 NO - @V304735 00466000
- MVC LASTUSER,ASYSVM OTHERWISE SWITCH TO SYSTEM @V304735 00467000
- * VMBLOK 00468000
- TM VMRSTAT,VMPGWAIT VIRTUAL MACHINE IN PAGE WAIT? @V408246 00468100
- BO USOPRST YES, PRELIMINARY PAGE RESET @V408246 00468200
- ICM R2,B'0011',VMNDCNT ANY OTHER PAGING ACTIVE? @V408246 00468300
- BZ USO21A NO, CONTINUE @V408246 00468400
- USOPRST DS 0H PRELIMINARY RESET OF VIRTUAL @V408246 00468500
- * PAGES 00468600
- CALL DMKPTRPW @VA08037 00468710
- USO21A DS 0H @V408246 00468800
- CALL DMKCFPRR RESET THE VIRTUAL MACHINE @V304735 00469000
- TM VMRSTAT,VMLOGON VIRTUAL MACHINE LOGGING ON ? 00470000
- BNO USO21C NO....BRANCH @VA13304 00471150
- * ERROR WHEN USER LOGGING ON 00471300
- TM VMSPMFLG,VMLOGON2 HAD THE LOGON GOTTEN VEDV ? @VA13304 00471450
- BNO USO22 NO....BRANCH AROUND @VA13304 00471600
- USO21C DS 0H @VA13304 00471750
- SR R2,R2 TELL PAGE OUT TO CLEAR 00472000
- CALL DMKPGSPO AND RESET USERS PAGES 00473000
- * NOTE - ALSO CLEARS AN ADSTOP IF ANY THERE 00474000
- LH R8,VMVTERM CHECK FOR VIRT CONSOLE @VA03351 00475000
- LTR R8,R8 IS THERE A VIRT CONSOLE? @VA03351 00476000
- BM USO22 NO, FORGET IT @VA03351 00477000
- AL R8,VMDVSTRT GET VDEVBLOK ADDRESS @VA03351 00478000
- USING VDEVBLOK,R8 @VA03351 00479000
- CALL DMKSCNVD FIND VCUBLOCK AND VCHBLOCK @VA07859 00481000
- BNZ USO22 FORGET IT @VA03351 00482000
- USING VCHBLOK,R6 @VA03351 00483000
- USING VCUBLOK,R7 @VA03351 00484000
- * WE ARE NOW READY TO GET RID 00485000
- * OF THE VIRTUAL CONS BLOKS 00486000
- CALL DMKVDREL RESET AND RELEASE THE DEVICE @VA03351 00487000
- L R2,FFS X'FFFFFFFF' @VA03351 00488000
- STH R2,VCUDVTBL MARK DEVICE DETACHED @VA03351 00489000
- STH R2,VDEVADD @VA03351 00490000
- DROP R6,R7,R8 ADDRESSABILITY NO LONGER REQD @VA03351 00491000
- USO22 EQU * 00492000
- TM VMQLEVEL,VMAEXP FAVORED PERCENTAGE USER ? 00493000
- BZ USO22N NO -- 00494000
- L R2,=A(DMKSCHAU) GET ADDRESS OF VMBLOK POINTER 00495000
- SLR R0,R0 CLEAR OUT 00496000
- ST R0,0(,R2) VMBLOK POINTER 00497000
- USO22N EQU * 00498000
- TM VMRSTAT,VMLOGON ARE WE LOGGED ON @VM01168 00499000
- BO USOA BR, IF NO - BYPASS ACCOUNTING @VM01168 00500000
- CALL DMKACOFF CALL USER ACCOUNTING @VM01168 00501000
- USOA EQU * @VM01168 00502000
- TM VMPSTAT,VMV370R DO WE HAVE AN EXTENSION BLOCK? 00503000
- BZ USO24 NO 00504000
- CALL DMKVATBC RELEASE ALL SHADOW TABLES, IF ANY 00505000
- L R2,VMECEXT EXTENSION BLOCK ADDRESS 00506000
- USING ECBLOK,R2 00507000
- LA R4,EXTCPTRQ CPU TIMER TRQBLOK @V200820 00508000
- BAL R7,FRETRQS FRET TRQBLOK @V200820 00509000
- LA R4,EXTCCTRQ CLOCK COMPARATOR TRQBLOK @V200820 00510000
- BAL R7,FRETRQB RESET AND FRET THE BLOCK @V200820 00511000
- LR R1,R2 GET BLOK TO FRET 00512000
- DROP R2 ABANDON ADDRESSABILITY 00513000
- LA R0,EXTSIZE AND 00514000
- CALL DMKFRET 'FRET' THE CONTROL BLOCK ITSELF. 00515000
- USO24 L R1,VMSEG POINT TO SEGMENT TABLE 00516000
- LTR R1,R1 WE WOULD NORMALLY HAVE ONE 00517000
- BZ USO27 IF WE DO NOT HAVE ONE DONOT RELEASE IT 00518000
- ICM R0,B'0111',VMSWPMIG+1 PSUEDO MEMORY @V408246 00518010
- BZ USO25 NO @V408246 00518060
- L R1,VMSEG GET STO @V408246 00518110
- L R4,0(,R1) SAVE FIRST STE @VA07591 00518170
- STCM R0,B'0111',1(R1) REPLACE 1ST STE WITH PSUEDO @V408246 00518210
- * MEMORY 00518260
- MVI 0(R1),X'70' SIMULATE LENGTH OF 8 PAGES @V408246 00518310
- SR R1,R1 ADDRESS OF 1ST PAGE TO RELEASE @V408246 00518360
- L R2,=A(X'7000') ADDRESS OF LAST PAGE TO RELEASE @V408246 00518410
- CALL DMKPGSPP DO PARTIAL PAGE RESET ON PSUEDO @V408246 00518460
- * MEM. 00518510
- L R1,VMSEG RELOAD STO @V408246 00518560
- ST R4,0(,R1) RESTORE SAVED STE @VA07591 00518620
- USO25 DS 0H @V408246 00518660
- L R1,VMSIZE STORGE SIZE OF VM @V304635 00519000
- SRL R1,12 RELEASE TOTAL VM TABLES @V304635 00520000
- BCTR R1,R0 MINUS 1 PAGE. @V304635 00521000
- CALL DMKBLDRL,PARM=DELPAGES+DELSEGS GET RIDE OF ALL. @V304635 00522000
- ICM R1,B'0111',VMSWPMIG+1 PSUEDO MEMORY? @V408246 00522100
- BZ USO26 NO @V408246 00522200
- ICM R1,B'1000',=X'70' SIMULATE TABLE LENGTH OF 8 @V408246 00522300
- CALL DMKBLDRL,PARM=PAGTONLY+DELPAGES @V408246 00522400
- USO26 DS 0H @V408246 00522500
- CL R11,RUNUSER DOES RUNUSER POINT TO US @VA02869 00523000
- BNE USO27 NO--GO AHEAD @VA02869 00524000
- L R2,ASYSVM ADDR OF SYSTEM VMBLOK @VA02869 00525000
- ST R2,RUNUSER LET RUNUSER PT TO SYSTEM VMBLOK @VA02869 00526000
- USO27 LM R6,R8,VMCHSTRT POINT TO CHANNEL, CONTROL UNIT DEV BLOKS 00527000
- LA R0,VCHSIZE SIZE OF ONE CHANNEL BLOCK, 00528000
- MH R0,VMCHCNT * NO. OF BLOCKS = NO. DBL-WORDS 00529000
- LTR R1,R6 ADDRESS OF VCHBLOK INTO R1, 00530000
- BZ USO28 IF NOTHING THERE, FORGET THE WHOLE THING. 00531000
- CALL DMKFRET RETURN TABLE OF CHANNEL BLOCKS 00532000
- LA R0,VCUSIZE SIZE OF ONE CONTROL UNIT BLOCK, 00533000
- MH R0,VMCUCNT * NO. OF BLOCKS, 00534000
- LR R1,R7 ADDRESS OF VCUBLOK TABLE, 00535000
- CALL DMKFRET GIVE IT BACK; 00536000
- LA R0,VDEVSIZE DITTO VDEVBLOK TABLE 00537000
- MH R0,VMDVCNT ... 00538000
- LR R1,R8 ... 00539000
- CALL DMKFRET ... 00540000
- USO28 EQU * CHANNEL, CONTROL UNIT, DEVBLOKS GONE ... 00541000
- LA R4,VMTRQBLK TRQBLOK FOR REAL TIMER @V200820 00542000
- BAL R7,FRETRQS FRET THE TRQBLOK IF IT'S THERE @V200820 00543000
- L R1,VMMICRO GET ADDRESS OF MICBLOK @V201537 00544000
- LA R1,0(R1) CLEAR ANY FLAG BITS @V201537 00545000
- LTR R1,R1 IS THERE ONE? IE.,MICRO ASST ON? @V201537 00546000
- BE USO30 BRANCH IF NOT @V201537 00547000
- LA R0,MICSIZE GET MICBLOK SIZE @V201537 00548000
- CALL DMKFRET RELEASE MICBLOK STORAGE @V201537 00549000
- USO30 EQU * @V201537 00550000
- TM VMPSTAT,VMRPAGE RESERVED PAGES ??? 00551000
- BZ USO31 NOPE --- 00552000
- L R1,=A(DMKPTRRL) ADDRESS OF THE PAGE LIMIT COUNT 00553000
- L R2,=A(DMKPTRRU) ADDRESS OF THE VMBLOK POINTER 00554000
- SR R0,R0 . . . 00555000
- ST R0,0(,R1) CLEAR LIMIT 00556000
- ST R0,0(,R2) CLEAR VMBLOK POINTER 00557000
- USO31 L R2,VMPFUNC GET FUNC TABLE @V200730 00558000
- LTR R2,R2 IS THERE ONE ?? @V200730 00559000
- BZ USO80 NO, CONT @V200730 00560000
- SR R0,R0 CLEAR SIZE REG 00561000
- LA R3,24 TABLE ENTRY COUNT HRC029DK 00562490
- USO33 L R1,4(R2) GET ENTRY BUFFER @V200730 00563000
- LTR R1,R1 IS THER A FUNC ?? @V200730 00564000
- BZ USO32 NO, LOOP FOR ALL @V200730 00565000
- IC R0,1(R2) GET BUFFER SIZE @V200730 00566000
- CALL DMKFRET FRET IT @V200730 00567000
- USO32 LA R2,8(R2) POINT TO NEXT ENTRY @V200730 00568000
- BCT R3,USO33 LOOP FOR 12 ENTRIES @V200730 00569000
- L R1,VMPFUNC FUNC TABLE @V200730 00570000
- LA R0,24 SIZE HRC029DK 00571490
- CALL DMKFRET FRET IT @V200730 00572000
- B USO80 CONT @V200730 00573000
- EJECT 00574000
- * NOW SEND MESSAGE TO SYSTEM OPERATOR (AS A RULE): 00575000
- MSGOP L R10,ASYSOP GET THE OPERATOR'S VMBLOK @VA05738 00576100
- CLR R10,R11 IS HE THE ONE LOGGING OFF ? @VA05738 00576200
- BE OPOFF YES, DECREMENT NUMBER OF USERS @VA11749 00576300
- TM VMRSTAT,VMLOGON NOT COMPLETELY LOGGED ON? @VA11389 00576320
- BOR R4 YES, NO MESSAGE TO OPERATOR @VA11389 00576340
- TM SAVEWRK1,NOOPMSG SHOULD WE SKIP THE OP MSG? @VM03066 00579000
- BOR R4 YES, NO MESSAGE.. @VA05738 00580100
- LTR R9,R9 DO WE HAVE ANY FREE STORAGE FOR A MSG ? 00581000
- BNZ USO82 OK - GO. 00582000
- LA R0,(LNR5+7)/8 GET STORAGE FOR LONGEST MSG 00583000
- CALL DMKFREE ... 00584000
- LR R9,R1 REMEMBER WHERE WE GOT IT 00585000
- USO82 MVC 0(LMOP2345,R9),MOP2 MOVE COMPLETE MESSAGE TO STORAGE 00586000
- L R8,SAVEWRK4 SAVED RDEVBLOK PTR @VA04579 00587500
- LTR R8,R8 (HE SHOULD NORMALLY HAVE ONE) 00590000
- BZ USO84 BUT LEAVE WELL ENOUGH ALONE IF NOT 00591000
- CLI RDEVTYPC-RDEVBLOK(R8),CLASTERM A TERMINAL CLASS 00592000
- BNE *+12 NO, CHECK FOR 370X 00593000
- CLI RDEVTYPE-RDEVBLOK(R8),TYPBSC A BISYNC LINE 00594000
- BE USORESID YES, GET RESOURCE ID. 00595000
- LA R1,CLASSPEC*256+TYP3705 CLASS SPECIAL, TYPE 370@V200820 00596000
- CH R1,RDEVTYPC-RDEVBLOK(,R8) WIERD TERMINAL ? @V200820 00597000
- BNE USO83 NO - HANDLE EASILY@V200820 00598000
- USORESID EQU * GET RESOURCE ID. 00599000
- LH R1,VMTRMID TERMINAL IDENTIFICATION @V200820 00600000
- CALL DMKCVTBH CONVERT TO EBCDIC @V200820 00601000
- ST R1,4(0,R9) FOUR-CHARACTER I.D. @V200820 00602000
- MVC 0(4,R9),=C'DEV ' MNEMONIC @V200820 00603000
- B USO84 @V200820 00604000
- * 00604100
- USO83LDF EQU * HRC065DK 00604200
- MVC 0(5,R9),=C'GRF L' Short name if LDEV HRC065DK 00604300
- LH R1,RDEVADD-RDEVBLOK(,R8) Get the LDEV address HRC065DK 00604400
- N R1,F4095 Keep only the dev num HRC065DK 00604500
- CALL DMKCVTBH Make it displayable HRC065DK 00604600
- STCM R1,7,5(R9) Put dev addr in message HRC065DK 00604700
- B USO84 Continue normal process HRC065DK 00604800
- USO83 EQU * @V200820 00605000
- TM RDEVADD-RDEVBLOK(R8),RDEVLDEV Is this an LDEV? HRC065DK 00605100
- BO USO83LDF Yes, special handling HRC065DK 00605200
- CALL DMKSCNRD CONVERT TO CCU FORM, 00606000
- CALL DMKCVTBH AND BINARY TO HEX, 00607000
- STCM R1,7,5(R9) STORE TERMINAL DEVICE ADDRESS IN MSG 00608000
- CALL DMKSCNRN GET DEVICE NAME @V200930 00609000
- STCM R1,15,0(R9) PUT IN MESSAGE @V200930 00610000
- USO84 MVC DMOP3(8,R9),VMUSER STORE USERID IN THE MSG, 00611000
- OPOFF L R3,ASYSLC REFERENCE SYSLOCS INFORMATION @VA11749 00612000
- USING SYSLOCS,R3 ... 00613000
- L R1,DMKSYSNM PICK UP NO. OF USERS, 00614000
- TM VMRSTAT,VMLOGON WAS THIS GUY 'NOT YET LOGGED ON' ? 00616000
- BO USO85 YES 00617000
- BCTR R1,0 LESS ONE (IN THE REGISTER ONLY) 00618000
- ST R1,DMKSYSNM @VA09339 00618050
- DROP R3 @VA09339 00618100
- CLR R10,R11 OPERATOR LOGGING OFF ?? @VA11749 00618200
- BER R4 YES, HE ALREADY KNOWS HE'S GONE @VA11749 00618300
- USO85 CALL DMKCVTBD BINARY TO DECIMAL PLEASE, 00619000
- STCM R1,7,DMOP4(R9) STORE IN MSG 00620000
- LA R0,LMOP234 LENGTH OF MESSAGE, 00621000
- TM SAVEWRK1,FORCE FORCED LOGOFF ? @V200820 00622000
- BZ USO85A NOT THIS TIME. 00623000
- LA R0,LMOP2345 IF YES, USE 'FORCED' INCLUDED IN MSG. 00624000
- USO85A LR R1,R9 ADDRESS OF MESSAGE, 00625000
- CALL DMKQCNWT,PARM=OPERATOR+NORET SEND MESSAGE TO OPERATOR 00626000
- BR R4 RETURN TO MAIN LINE @VA05738 00626100
- SPACE 1 00626200
- USO80 EQU * CONTINUE @VA05738 00626300
- USO86 EQU * CONTINUE ... 00627000
- EJECT 00628000
- AIF (NOT &TRACE(6)).NOTRA1 **AIF** 00629000
- L R1,VMTREXT ANY TREXT BLOCK THERE ? 00630000
- LTR R1,R1 ... 00631000
- BZ USO88 NOPE - NO PROBLEM. 00632000
- LA R0,TREXSIZE YES - GIVE IT BACK 00633000
- CALL DMKFRET ... 00634000
- .NOTRA1 ANOP 00635000
- * NOW DELETE THIS USER FROM THE CHAIN OF USERS: 00636000
- USO88 L R2,ASYSVM LET R2 START FROM THE SYSTEM VMBLOK 00637000
- USO90 L R3,VMPNT-VMBLOK(,R2) LET R3 START WITH THE FIRST USER 00638000
- L R7,VMPNT GET POINTER TO NEXT VMBLOK, 00639000
- CLR R7,R11 DOES USER PERCHANCE POINT TO HIMSELF ? 00640000
- BNE USO92 TRF IF NOT (ONLY HAPPENS IF ONE GUY LEFT) 00641000
- SLR R4,R4 IF HE WAS THE LAST MAN ON EARTH, LET THE 00642000
- B USO92A SYSVM HAVE A VMPNT=0 FOR NO USERS AT ALL 00643000
- USO92 LR R4,R3 REMEMBER PREVIOUS BLOCK, 00644000
- L R3,VMPNT-VMBLOK(,R3) GET PNTR TO NEXT BLOCK, 00645000
- CLR R3,R11 IS IT US ? 00646000
- BE USO92AA YES, PATCH OUT OF CHAIN @V408246 00647100
- C R3,VMPNT-VMBLOK(,R2) COME FULL CIRCLE? @V408246 00647200
- BNE USO92 NO @V408246 00647300
- B USO92B YES, MUST BE ABORTIVE LOGON @V408246 00647400
- USO92AA DS 0H @V408246 00647500
- ST R7,VMPNT-VMBLOK(,R4) PATCH CHAIN TO LEAVE US OUT 00648000
- USO92A ST R4,VMPNT-VMBLOK(,R2) STORE NEW ANCHOR FOR CHAIN IN SYSVM 00649000
- USO92B DS 0H @V408246 00649100
- TM VMRSTAT,VMLOGON WAS THIS GUY 'NOT YET LOGGED ON' ? 00650000
- BO USO93 YES 00651000
- TM VMPSTAT,VMACCOUN IS THE ACCOUNTING OPTION SET ? @VA00881 00658000
- BZ USO93 NO, GO CHECK FOR OPERATOR @VA00881 00659000
- ICM R1,15,VMACOUNT GET THE ADDRESS OF THE @VA00881 00660000
- * ACCOUNTING BLOCK 00661000
- BZ USO93 IF ZERO, GO CHECK FOR OPERATOR @VA00881 00662000
- LA R0,ACCTLENG GET LENGTH OF BLOCK IN @VA00881 00663000
- * DOUBLEWORDS 00664000
- CALL DMKFRET RELEASE THE ACCOUNTING BLOCK @VA00881 00665000
- USO93 EQU * 00666000
- C R11,ASYSOP IS THIS THE OPERATOR'S VMBLOK ? 00667000
- BNE USO94 NOT THIS TIME. 00668000
- SPACE 00669000
- * FOR OPERATOR'S VMBLOK, RESET IT INSTEAD OF RETURNING TO FREE STORAGE: 00670000
- LM R2,R3,VMCOMND REMEMBER LAST COMMAND ('LOGOFF') 00671000
- L R0,VMDFTPNT SAVE DEFER TASK POINTER @V4M0148 00671100
- MVC VMBLOK(8),ZEROES CLEAR ENTIRE VMBLOK 00672000
- MVC VMBLOK+8(256),VMBLOK ... 00673000
- MVC VMBLOK+264(VMBSIZE*8-264),VMBLOK ... 00674000
- MVC VMCHTBL(8),FFS FFFF-FILL THE VM CHANNEL TABLE 00675000
- MVC VMCHTBL+8(24),VMCHTBL ... 00676000
- STM R2,R3,VMCOMND RESTORE THE LAST COMMAND ('LOGOFF') 00677000
- ST R0,VMDFTPNT RESTORE FOR LOGON. @V4M0148 00677100
- MVC VMACNT,BLANKS BLANK OUT THE ACCOUNTING NUMBER 00678000
- MVC VMUSER(8),BLANKS BLANK OUT THE USERID @VM08592 00679000
- MVC VMVTERM(2),FFS NO VIRTUAL CONSOLE DEFINED @VM08592 00680000
- MVI VMOSTAT,VMSYSOP IT'S STILL THE OPERATOR'S VMBLOK 00681000
- MVI VMPSW+1,WAIT SET VMPSW = DISABLED WAIT STATE 00682000
- B USO96 GO STORE NEW R11 AND THEN EXIT. 00683000
- SPACE 00684000
- USO94 L R1,VMDFTPNT LOAD DEFERRED TASK POINTER @V407594 00685000
- LTR R1,R1 IS THERE ONE @V407594 00685100
- BZ USO95 NO @V407594 00685200
- LA R0,CPEXSIZE SIZE OF BLOCK @V407594 00685300
- CALL DMKFRET RETURN TO FREE STORAGE @V407594 00685400
- USO95 LA R4,VMDELAY GET POSSIBLE TRQBLOK POINTER @VA12770 00685502
- BAL R7,FRETRQB RETURN IT IF IT'S THERE @VA12770 00685504
- LR R1,R11 RESTORE VMBLOK POINTER @VA12770 00685506
- C R11,STACKVM IS VMBLOK=STACKVM @VA08126 00685510
- BNE USO95A NO-DONT CLEAR STACKVM @VA08126 00685520
- MVC STACKVM,ZEROES CLEAR OUT STACKVM @VA08126 00685530
- USO95A EQU * @VA08126 00685540
- LA R0,VMBSIZE SIZE IN DBL-WORDS 00686000
- MVI VMUSER-VMBLOK+7(R1),X'00' NULLIFY USERID @VA13441 00686500
- CALL DMKFRET GIVE IT BACK TO FREE STORAGE. 00687000
- * 00688000
- USO96 L R11,ASYSVM IF NOT, POINT R11 TO SYSTEM VMBLOK, AND 00689000
- CHARGE START CHARGE OVERHEAD TO SYSTEM @V407594 00691000
- * 00692000
- USO98 LTR R1,R9 DID WE HAVE A FREE STORAGE BUFFER ? 00693000
- BZ USO99 NOPE - REALLY EXIT. 00694000
- USO98A LA R0,(LNR5+7)/8 THIS WAS THE NO. DBL-WORDS WE USED 00695000
- CALL DMKFRET GIVE IT BACK (WE DIDN'T FORGET) 00696000
- USO99 EQU * ALMOST DONE ... @VA00881 00697000
- CALL DMKUSOFM DO FREE STORAGE CLEAN UP @VA05738 00699100
- TM SAVEWRK1,ELOGOFF+EFORCE FORCE/LOGOFF VIA CFM? @VA08501 00699250
- BZ USO99X NO, NO COMMAND BUFFER TO FRET @VA08501 00699300
- LA R0,BUFSIZE SIZE OF COMMAND BUFFER @VA08501 00699350
- L R1,SAVER9 GET ITS ADDRESS FROM CFM @VA08501 00699400
- CALL DMKFRET THROW IT AWAY @VA08501 00699450
- SVC 16 ELIMINATE RETURN TO CFM @VA08501 00699500
- LTR R13,R13 DID CFM HAVE A CALLER? @VA08501 00699550
- BNZ USO99X YES, RETURN TO HIM @VA08501 00699600
- GOTO DMKDSPCH NO, NEXT BATTER UP, PLEASE @VA08501 00699650
- SPACE 1 00699700
- USO99X DS 0H @VA08501 00699750
- ST R11,SAVER11 PASS SYSTEM'S VMBLOK BACK @VA08501 00699800
- EXIT @VA08501 00699850
- SPACE 2 00701000
- FRETRQB EQU * RESET AND FRET A TRQBLOK @V200820 00702000
- L R1,0(0,R4) POINTER TO THE BLOCK @V200820 00703000
- LTR R1,R1 IS THERE ONE ? @V200820 00704000
- BCR 8,R7 NO -- RETURN @V200820 00705000
- CLC TRQBFPNT-TRQBLOK(4,R1),ZEROES QUEUED ? @V200820 00706000
- BE FRETRQC NO -- @V200820 00707000
- CALL DMKSCHRT RESET TIMER REQUEST BLOCK @V200820 00708000
- B FRETRQC @V200820 00709000
- FRETRQS EQU * RETURN TRQBLOK TO FREE STORAGE @V200820 00710000
- L R1,0(0,R4) PICK UP TRQBLOK ADDRESS @V200820 00711000
- LTR R1,R1 MAKE SURE THERE IS ONE @V200820 00712000
- BCR 8,R7 NOPE - JUST RETURN @V200820 00713000
- FRETRQC EQU * @V200820 00714000
- LA R0,TRQBSIZE SIZE IN DOUBLE-WORDS @V200820 00715000
- CALL DMKFRET RETURN IT TO FREE STORAGE @V200820 00716000
- SLR R0,R0 @V200820 00717000
- ST R0,0(0,R4) CLEAR OUT THE HOLD FIELD @V200820 00718000
- BR R7 RETURN @V200820 00719000
- EJECT 00720000
- *. 00721000
- * SUBROUTINE NAME - 00722000
- * 00723000
- * DMKUSOFM - FREE STORAGE MAINTENANCE SUBROUTINE 00724000
- * 00725000
- * FUNCTION - 00726000
- * 00727000
- * TO "CLEAN UP" THE FREE STORAGE SUBPOOLS AND FREE STORAGE 00728000
- * CHAIN INSOFAR AS PRACTICABLE, BY RETURNING SUBPOOLS 00729000
- * TO THE FREE STORAGE CHAIN, AND BY REMOVING SPOOL FILE 00730000
- * BLOCKS AND ALLOCATION BLOCKS FROM THE DYNAMIC PAGING 00731000
- * AREA (INSOFAR AS FEASIBLE). 00732000
- * 00733000
- * ATTRIBUTES - 00734000
- * 00735000
- * REENTRANT, PAGEABLE 00736000
- * 00737000
- * ENTRY POINTS - 00738000
- * 00739000
- * DMKUSOFM - EXTERNALLY REFERENCED NAME - CALLED VIA SVC 00740000
- * FREMSUBR - INTERNAL CODE - CALLED VIA BALR (FROM DMKUSOFF) 00741000
- * 00742000
- * ENTRY CONDITIONS - 00743000
- * 00744000
- * GPR 12 = ADDRESS OF ENTRY POINT 00745000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00746000
- * 00747000
- * EXIT CONDITIONS - 00748000
- * 00749000
- * ALL GPR'S UNCHANGED 00750000
- * 00751000
- * CALLS TO OTHER ROUTINES - 00752000
- * 00753000
- * DMKFRERS - TO RETURN SUBPOOLS TO THE FREE STORAGE CHAIN 00754000
- * DMKFREE - TO OBTAIN A NEW STORAGE BLOCK 00755000
- * DMKFRET - TO RETURN AN OLD STORAGE BLOCK 00756000
- * 00757000
- * EXTERNAL REFERENCES - 00758000
- * 00759000
- * DMKFRENP = NPAGFREE & NPAGFRET 00760000
- * DMKFRELO (&DMKFREHI) 00761000
- * DMKSLC = END OF V=R AREA (IF GENERATED) 00762000
- * DMKPGTP5 - ANCHOR FOR FIRST ALLOCATION CHAIN 00763000
- * DMKVSPWA - ADDRESS OF 3211 INDEX WORK AREA (IF ANY) 00764000
- * 00765000
- * TABLES / WORK AREAS 00766000
- * 00767000
- * SAVEWRK1 = HOLDS RETURN REGISTER (R14) 00768000
- * SAVEWRK2 = HOLDS "DMKFRELO" 00769000
- * SAVEWRK3 = HOLDS "DMKFREHI" 00770000
- EJECT 00771000
- * REGISTER USAGE - 00772000
- * 00773000
- * GPR 0 - SIZE OF FREE STORAGE BLOCK 00774000
- * GPR 1 - ADDRESS OF FREE STORAGE BLOCK 00775000
- * GPR 4 - DMKFRELO MINUS LENGTH OF BLOCK 00776000
- * GPR 6 - LINKING REGISTER 00777000
- * GPR 12 - ADDRESSABILITY 00778000
- * GPR 13 - ADDRESS OF STANDARD SAVE AREA 00779000
- * GPR 14 - LINK REGISTER TO DMKFREE / DMKFRET 00780000
- * 00781000
- * GPR 11 IS NOT USED 00782000
- * 00783000
- * OTHER REGISTERS = WORK REGISTERS 00784000
- * 00785000
- * NOTES - 00786000
- * 00787000
- * THIS CODE WAS DEBUGGED IN THE CP NUCLEUS WITH STATISTICAL 00788000
- * COUNTERS, WHICH INDICATED THE VARIOUS PATHS WERE SUCCESSFUL. 00789000
- * (THE COUNTERS ARE NOT INCLUDED HEREIN - DMKUSO IS REENTRANT) 00790000
- * 00791000
- * OPERATION - 00792000
- * 00793000
- * 1. INVOKES CODE IN DMKFRE (DMKFRERS ENTRY POINT) 00794000
- * TO RETURN ALL SUBPOOLS TO THE FREE STORAGE CHAIN. 00795000
- * 00796000
- * 2. IF NO FREE STORAGE AREAS ARE PRESENTLY IN USE IN THE 00797000
- * DYNAMIC PAGING AREA, RETURNS FORTHWITH TO CALLER. 00798000
- * 00799000
- * 3. EXAMINES SPOOL FILE BLOCKS FOR READER, PRINTER, AND PUNCH; 00800000
- * IF ANY INACTIVE BLOCK THEREIN IS IN THE DYNAMIC PAGING AREA, 00801000
- * RELOCATES THE DATA TO A NEW FREE STORAGE BLOCK NOT WITHIN THE 00802000
- * DYNAMIC PAGING AREA (IF FEASIBLE), AND PATCHES THE CHAIN. 00803000
- * 00804000
- * 4. PERFORMS SIMILAR LOGIC FOR ALLOCATION BLOCKS. 00805000
- * 00806000
- * 5. PERFORMS SIMILAR LOGIC FOR 3211 INDEX WORK AREA (IF ANY) 00807000
- * 00808000
- * 6. RETURNS TO CALLER. 00809000
- *. 00810000
- EJECT 00811000
- * EXTERNALLY AVAILABLE ENTRY POINT TO TO INVOKE "FREMSUBR": 00812000
- DMKUSOFM RELOC @VA00881 00813000
- BAL R14,FREMSUBR "CALL" THE INTERNAL ROUTINE @VA00881 00814000
- EXIT AND EXIT - THAT'S ALL, FOLKS. @VA00881 00815000
- SPACE 00816000
- EXTRN DMKFRENP "NPAGFREE" & "NPAGFRET" @VA00881 00817000
- EXTRN DMKFREHI BEG. ADDRESS OF FIXED FREE SPACE @V3M4000 00817500
- EXTRN DMKFRELO ADDRESS OF LOWEST PAGEABLE PAGE @V3M4000 00818000
- EXTRN DMKPGTP5 POINT TO FIRST ALLOCATION CHAIN @VA00881 00819000
- EXTRN DMKVSPWA ADDR OF 3211 INDEX WORK AREA @VA00881 00820000
- EXTRN DMKSLC END OF V=R AREA (IF GENERATED) @VA00881 00821000
- EXTRN DMKFRERS RETURNS SUBPOOLS TO FREE STORAGE @VA00881 00822000
- EXTRN DMKLOCKQ,DMKLOCKD SERIALIZE WITH DMKCKS @V304298 00823000
- SPACE 00824000
- * INTERNAL ROUTINE (CALLED VIA R14) TO CLEAN UP FREE STORAGE BLOCKS: 00825000
- FREMSUBR ST R14,SAVEWRK1 ENTER, SAVE RETURN REGISTER @VA00881 00826000
- CALL DMKFRERS RETURN SUBPOOLS TO FREE STORAGE @VA00881 00827000
- * CHAIN 00828000
- L R15,=A(DMKFRENP) REFERENCE NPAGFREE & NPAGFRET @VA00881 00829000
- L R0,0(,R15) NPAGFREE - NPAGFRET = NUMBER OF @VA00881 00830000
- S R0,4(,R15) PAGES IN DYNAMIC PAGING AREA @VA00881 00831000
- BNP FREMREX1 IF NOT > 0, JUST EXIT @V304298 00832000
- LA R1,CKSLOCK SERIALIZE WITH DMKCKS @V304298 00833000
- CALL DMKLOCKQ @V304298 00834000
- L R15,=A(DMKFRELO) REFERENCE DMKFRELO @V3M4000 00834500
- L R4,0(R15) DMKFRELO --> R4 @V3M4000 00835000
- L R15,=A(DMKFREHI) REFERENCE DMKFREHI @V3M4000 00835500
- L R5,0(R15) DMKFREHI --> R5 @V3M4000 00836000
- STM R4,R5,SAVEWRK2 REMEMBER THESE IN SAVEWRK2/3 @VA00881 00837000
- LA R0,SFBSIZE SET TO FIX UP SPOOL FILE BLOCKS @VA00881 00838000
- LA R15,SFBSIZE*8 COMPUTE DMKFRELO - BLOCK LENGTH @VA00881 00839000
- SR R4,R15 ... @VA00881 00840000
- L R7,ARSPRD POINT TO SYSTEM READER FILE CHAIN@VA00881 00841000
- LA R10,FREMRSP5 SET R10 SWITCH FOR SPOOL FILE @VA00881 00842000
- LA R9,FREMR02 AND SET "ERROR-RETURN-VECTOR" @VA00881 00843000
- BAL R6,FREMRSP1 FIX READER SPOOL FILE CHAIN IF @VA00881 00844000
- * NEEDED 00845000
- L R7,ARSPPR POINT TO SYSTEM PRINTER FILE @VA00881 00846000
- * CHAIN 00847000
- BAL R6,FREMRSP2 FIX PRINTER SPOOL FILE CHAIN @VA00881 00848000
- L R7,ARSPPU AND THE SYSTEM PUNCH FILE CHAIN @VA00881 00849000
- BAL R6,FREMRSP2 FIX IT TOO @VA00881 00850000
- FREMR02 LR R1,R3 ADDR. OF "NEW" (UNUSED) SPOOL @VA00881 00851000
- * FILE BLOCK 00852000
- CALL DMKFRET GIVE BACK UNUSED SPOOL FILE BLOCK@VA00881 00853000
- * NOW DO SIMILAR LOGIC FOR PAGING / SPOOLING ALLOCATION BLOCKS: 00854000
- LA R0,RECSIZE NOW SET R0 TO FIX UP ALLOC BLOCKS@VA00881 00855000
- L R4,SAVEWRK2 COMPUTE DMKFRELO MINUS BLOCK @VA00881 00856000
- * LENGTH AGAIN 00857000
- LA R15,RECSIZE*8 ... @VA00881 00858000
- SR R4,R15 ... @VA00881 00859000
- LA R10,FREMRSP6 SET R10 SWITCH FOR "ALLOC" BLOCKS@VA00881 00860000
- LA R9,FREMR08 AND SET "ERROR-RETURN-VECTOR" @VA00881 00861000
- L R5,=A(DMKPGTP5) POINT TO FIRST ALLOCATION CHAIN @VA00881 00862000
- FREMR03 ICM R8,15,0(R5) ... @VA00881 00863000
- BP FREMR04 IF PLUS - GET STARTED. @VA00881 00864000
- LA R5,4(,R5) IF NOT, GET NEXT ONE. @VA00881 00865000
- BZ FREMR03 SHOULD BE ZERO. @VA00881 00866000
- B FREMREX VERY STRANGE IF MINUS. @VA00881 00867000
- USING RDEVBLOK,R8 REFERENCE REAL DEVICE BLOCKS @VA00881 00868000
- FREMR04 LA R7,RDEVPAGE POINT TO FIRST PAGING CHAIN @VA00881 00869000
- BAL R6,FREMRSP1 START FIXING ALLOC BLOCKS @VA00881 00870000
- B FREMR06 JOIN LOOP AT "THE RIGHT PLACE". @VA00881 00871000
- SPACE 00872000
- * LOOP TO "FIX UP" PAGING / SPOOLING ALLOCATION BLOCKS: 00873000
- FREMR05 LA R7,RDEVPAGE POINT TO PAGING CHAIN @VA00881 00874000
- BAL R6,FREMRSP2 FIX UP PAGING CHAIN @VA00881 00875000
- FREMR06 LA R7,RDEVRECS POINT TO SPOOLING CHAIN @VA00881 00876000
- BAL R6,FREMRSP2 FIX UP SPOOLING CHAIN @VA00881 00877000
- L R8,RDEVPNT POINT TO NEXT RDEVBLOK @VA00881 00878000
- CL R8,0(,R5) ARE WE BACK AT THE BEGINNING ? @VA00881 00879000
- BNE FREMR05 ITERATE IF STILL SOME LEFT. @VA00881 00880000
- FREMR07 LA R5,4(,R5) POINT TO "NEXT" ALLOCATION CHAIN @VA00881 00881000
- L R8,0(,R5) ... @VA00881 00882000
- LTR R8,R8 0 = NONE; MINUS = ALL FINISHED. @VA00881 00883000
- BP FREMR05 PLUS = GO TO IT. @VA00881 00884000
- BZ FREMR07 ZERO = GET NEXT ONE. @VA00881 00885000
- DROP R8 MINUS = WE'RE ALL DONE... @VA00881 00886000
- FREMR08 LR R1,R3 WHEN THRU, GET ADDR OF UNUSED @VA00881 00887000
- * ALLOC BLOCK 00888000
- CALL DMKFRET AND GIVE BACK UNUSED BLOCK @VA00881 00889000
- * NOW DO SIMILAR LOGIC FOR 3211 INDEX WORK AREA BUFFER (IF ANY): 00890000
- SLR R2,R2 R2 = 0 @VA00881 00891000
- L R7,=A(DMKVSPWA) ADDR OF 3211 INDEX WORK AREA @VA00881 00892000
- L R1,0(,R7) ADDR OF ACTUAL BUFFER (IF ANY) @VA00881 00893000
- CL R1,SAVEWRK3 AT OR ABOVE DMKFREHI ? @VA00881 00894000
- BNL FREMREX YES - OK - NOTHING TO DO. @VA00881 00895000
- CLR R2,R1 MAYBE NONEXISTENT (ADDR = 0) ? @VA00881 00896000
- BE FREMREX YES - OK - NOTHING TO DO. @VA00881 00897000
- LA R0,184/8 SIZE OF BUFFER (23 DBL WORDS) @VA00881 00898000
- L R4,SAVEWRK2 COMPUTE DMKFRELO MINUS @VA00881 00899000
- LA R15,184 BLOCK LENGTH @VA00881 00900000
- SR R4,R15 ... @VA00881 00901000
- LA R10,FREMRSP8 SET R10 "SWITCH" @VA00881 00902000
- LA R9,FREMR09 AND R9 ERROR-RETURN-VECTOR @VA00881 00903000
- BAL R6,FREMRSP1 CALL MAGIC SUBROUTINE ONCE AGAIN @VA00881 00904000
- FREMR09 LR R1,R3 ADDRESS OF UNUSED BLOCK TO R1 @VA00881 00905000
- FREMR10 CALL DMKFRET GIVE BACK OLD OR NEW BLOCK @VA00881 00906000
- FREMREX LA R1,CKSLOCK UNLOCK US BEFORE WE EXIT @V304298 00907000
- CALL DMKLOCKD @V304298 00908000
- FREMREX1 DS 0H @V408246 00909010
- L R10,=A(DMKPAGSK) AVAILABLE PAGE I/O BLOCKS @V408246 00909060
- PGSKL DS 0H @VA10137 00909139
- ICM R1,B'1111',0(R10) 1ST ON THE CHAIN? @V408246 00909160
- BNP FRMXIT NONE @V408246 00909210
- MVC 0(4,R10),IOBMISC-IOBLOK(R1) UNCHAIN 1ST @V408246 00909260
- LA R0,PAGESIZE BLOCK SIZE @V408246 00909310
- CALL DMKFRET RETURN TO FREE STORAGE POOL @V408246 00909360
- B PGSKL LOOK FOR MORE @V408246 00909410
- FRMXIT DS 0H @V408246 00909460
- L R14,SAVEWRK1 RESTORE R14 = RETURN-REG @V408246 00909510
- BR R14 AND RETURN TO CALLER. @VA00881 00910000
- EJECT 00911000
- * FREMRSP1 (& FREMRSP2) = FIX UP SYSTEM READER, PRINTER, & PUNCH 00912000
- * CHAINS OF SPOOL FILE BLOCKS (IF NEEDED & FEASIBLE) SO NO SPOOL FILE 00913000
- * BLOCKS ARE IN THE DYNAMIC PAGING AREA. 00914000
- * R0 = SIZE IN DOUBLE WORDS OF BLOCK 00915000
- * R4 = DMKFRELO - BLOCK LENGTH 00916000
- * R6 = RETURN-REGISTER 00917000
- * R7 = ANCHOR FOR CHAIN 00918000
- * R9 = "ERROR-RETURN VECTOR" = A(FREMR02) OR A(FREMR08) 00919000
- * R10 = "SWITCH" = A(FREMRSP5) OR A(FREMRSP6) 00920000
- SPACE 00921000
- FREMRSP1 DS 0H GET A "NEW" SPOOL FILE BLOCK SO @VA00881 00922000
- * WE HAVE IT 00923000
- CALL DMKFREE (IN ADVANCE SO WE DON'T LOSE @VA00881 00924000
- * CONTROL) 00925000
- LR R3,R1 REMEMBER ITS ADDRESS IN R3 @VA00881 00926000
- CL R3,SAVEWRK3 IS BLOCK AT OR ABOVE DMKFREHI ? @VA00881 00927000
- BNL FREMRSP2 YES - OK FOR US TO USE IT. @VA00881 00928000
- CLR R3,R4 NO, CHECK AGAINST DMKFRELO @VA00881 00929000
- BCR 2,R9 <BH> IF > DMKFRELO, GIVE IT @VA00881 00930000
- * BACK & GIVE UP. 00931000
- AIF (NOT &VIRREAL).J7 **AIF** 00932000
- CL R3,=A(DMKSLC) BEWARE OF BLOCK IN UNLOCKED V=R @VA00881 00933000
- * AREA 00934000
- BCR 4,R9 <BL> IF < DMKSLC, GIVE IT @VA00881 00935000
- * BACK & GIVE UP. 00936000
- .J7 ANOP NEW BLOCK OK TO USE - NOT IN DYNAMIC PAGING AREA: 00937000
- FREMRSP2 LR R1,R7 START FROM ANCHOR FOR SPOOL @VA00881 00938000
- * FILE CHAIN (OR EQUIVALENT) 00939000
- CL R7,=A(DMKVSPWA) IS THIS 3211 INDEX WORK AREA ? @VA00881 00940000
- BNE FREMRSP3 NOPE - REGULAR CHAIN HANDLING @VA00881 00941000
- L R15,0(,R7) YES - GET ADDRESS OF REAL BUFFER @VA00881 00942000
- ST R2,0(,R15) AND CLEAR 1ST WORD (R2 STILL 0) @VA00881 00943000
- * TO HANDLE ONE AND ONLY ONE BLOCK BELOW 00944000
- FREMRSP3 LR R2,R1 REMEMBER OLD POINTER @VA00881 00945000
- L R1,0(,R1) GET POINTER TO "NEXT" BLOCK @VA00881 00946000
- CL R1,SAVEWRK3 > DMKFREHI ? @VA00881 00947000
- BNL FREMRSP3 YES (OK) - CHECK THE NEXT ONE @VA00881 00948000
- LTR R1,R1 0 = END OF CHAIN ? @VA00881 00949000
- BCR 8,R6 <BZ> YES - EXIT TO MAIN @VA00881 00950000
- * FREMR CODE. 00951000
- CLR R1,R4 < DMKFRELO ? @VA00881 00952000
- AIF (&VIRREAL).J7A **AIF** 00953000
- BNH FREMRSP3 YES (OK) - CHECK THE NEXT ONE @VA00881 00954000
- AGO .J7B 00955000
- .J7A BH FREMRSP4 NOPE - GO RELOCATE IT. 00956000
- CL R1,=A(DMKSLC) BEWARE OF BLOCK IN UNLOCKED V=R @VA00881 00957000
- * AREA 00958000
- BNL FREMRSP3 IF NOT BELOW "DMKSLC" IT'S OK @VA00881 00959000
- * AS IS. 00960000
- .J7B ANOP 00961000
- FREMRSP4 BR R10 "SWITCH" - GO TO FREMRSP5 FOR @VA00881 00962000
- * SPOOL FILE BLOCKS 00963000
- * OR TO FREMRSP6 FOR ALLOC BLOCKS 00964000
- * OR TO FREMRSP8 FOR 3211 INDEX WORK AREA 00965000
- USING SFBLOK,R1 SPOOL FILE BLOCK IN DYNAMIC @VA00881 00966000
- * PAGING AREA: 00967000
- FREMRSP5 TM SFBFLAG,SFBINUSE IS THIS BLOCK ACTIVE ? @VA00881 00968000
- BO FREMRSP3 YES - LEAVE WELL ENOUGH ALONE. @VA00881 00969000
- DROP R1 @VA00881 00970000
- MVC 0(SFBSIZE*8,R3),0(R1) NO - MOVE THE DATA @VA00881 00971000
- B FREMRSP7 AND CONTINUE BELOW. @VA00881 00972000
- FREMRSP6 MVC 0(RECSIZE*8,R3),0(R1) MOVE ALLOCATION BLOCK @VA00881 00973000
- FREMRSP7 ST R3,0(,R2) PATCH THE CHAIN USING THE NEW @VA00881 00974000
- * BLOCK 00975000
- CALL DMKFRET RETURN THE OLD BLOCK @VA00881 00976000
- B FREMRSP1 AND START ALL OVER AGAIN TO BE @VA00881 00977000
- * SAFE. 00978000
- SPACE 00979000
- * OLD BLOCK WAS A 3211 INDEX WORK AREA: 00980000
- FREMRSP8 ST R3,0(,R7) STORE ADDRESS OF NEW BLOCK @VA00881 00981000
- B FREMR10 AND GO FRET THE OLD BLOCK @VA00881 00982000
- * NOTE: NOT NECESSARY TO MOVE ANY DATA. 00983000
- SPACE 2 00984000
- CKSLOCK DC CL8'<SPLCHK>' LOCK FOR DMKCKS @V304298 00985000
- EJECT 00986000
- *. 00987000
- * SUBROUTINE NAME - 00988000
- * 00989000
- * DMKUSODS - 'DISCONNECT' COMMAND 00990000
- * 00991000
- * FUNCTION - 00992000
- * 00993000
- * TO DISCONNECT A USER'S TERMINAL FROM HIS RUNNING VIRTUAL 00994000
- * MACHINE, ALLOWING HIM TO CONTINUE TO RUN IN 'DISCONNECT' MODE. 00995000
- * 00996000
- * COMMAND LINE FORMAT - 00997000
- * 00998000
- * +------------+-----------------------------------------+ 00999000
- * | | | 01000000
- * | DISCONN | <HOLD> | 01001000
- * | ---- | | 01002000
- * +------------+-----------------------------------------+ 01003000
- * 01004000
- * SEE "NOTES" BELOW. 01005000
- * 01006000
- * ATTRIBUTES - 01007000
- * 01008000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 01009000
- * 01010000
- * ENTRY POINT - 01011000
- * 01012000
- * DMKUSODS 01013000
- * 01014000
- * ENTRY CONDITIONS - 01015000
- * 01016000
- * GPR 2 = 0 01017000
- * GPR 9 = ADDRESS OF 'DISCONNECT' COMMAND 01018000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 01019000
- * GPR 12 = ADDRESS OF DMKUSODS 01020000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 01021000
- * 01022000
- * EXIT CONDITIONS - 01023000
- * 01024000
- * RETURNS TO THE CALLER IF AN ERROR IN THE COMMAND LINE 01025000
- * 01026000
- * UPON A SUCCESSFUL DISCONNECT, RETURNS TO CP370 TO 01027000
- * CONTINUE TO RUN THE USER, BUT WITH HIS TERMINAL DISCONNECTED. 01028000
- * 01029000
- * CALLS TO OTHER ROUTINES - 01030000
- * 01031000
- * DMKSCNFD - TO SCAN COMMAND LINE 01032000
- * DMKSCNRD - TO COMPUTE TERMINAL REAL DEVICE ADDRESS IN CCU FORM 01033000
- * DMKCVTDT - TO GET DATE/TIME FOR DISCONNECT MESSAGE 01034000
- * DMKCVTBH - TO GET NEEDED FIELD(S) IN PRINTABLE HEX FORM 01035000
- * DMKCVTBD - TO GET NNN USERS IN PRINTABLE DECIMAL FORM 01036000
- * DMKQCNWT - TO SEND DISCONNECT MSG TO USER & SYSTEM OPERATOR 01037000
- * DMKERMSG - TO SEND ERROR MESSAGE TO CALLER IF NECESSARY 01038000
- * DMKFREE - OBTAIN STORAGE FOR MESSAGES. 01039000
- * DMKFRET - RETURN MESSAGE BUFFER TO FREE STORAGE. 01040000
- EJECT 01041000
- * EXTERNAL REFERENCES - 01042000
- * 01043000
- * DMKSYSVM - SYSTEM VMBLOK 01044000
- * DMKSYSOP - OPERATOR'S VMBLOK 01045000
- * 01046000
- * TABLES / WORK AREAS - 01047000
- * 01048000
- * NONE 01049000
- * 01050000
- * REGISTER USAGE - 01051000
- * 01052000
- * GPR 9 = ADDRESS OF COMMAND BUFFER 01053000
- * GPR 10 = ADDRESS OF VMBLOK OF USER TO BE DISCONNECTED 01054000
- * GPR 11 = ADDRESS OF CALLER'S / USER'S VMBLOK 01055000
- * GPR 12 = BASE REGISTER 01056000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 01057000
- * 01058000
- * GPRS 0-1, 3-8, AND 14-15 ARE WORK REGISTERS. 01059000
- * 01060000
- * NOTES - 01061000
- * 01062000
- * 1. THE 'HOLD' OPTION IS USED TO KEEP A 2701/2702/2703 LINE 01063000
- * ENABLED AFTER THE DISCONNECT HAS BEEN PERFORMED. 01064000
- * 01065000
- * 2. IF THE USER IS NOT YET LOGGED ON, "DISCONN" IS TREATED 01066000
- * EXACTLY THE SAME AS A "LOGOFF" COMMAND. 01067000
- * 01068000
- * OPERATION - 01069000
- * 01070000
- * 1. CHECKS COMMAND LINE FOR PRESENCE OF 'HOLD'. IF PRESENT, 01071000
- * CALLS DMKQCNWT WITH THE 'HOLD' OPTION WHEN SENDING THE 01072000
- * DISCONNECT MESSAGE TO THE USER. IF A FIELD WAS PRESENT 01073000
- * BUT WAS NOT 'HOLD', GIVES ERROR MESSAGE AND RETURN TO 01074000
- * THE CALLER. 01075000
- * 01076000
- * 2. OBTAINS DATE-TIME FROM DMKCVTDT, AND SENDS A FILLED-IN 01077000
- * DISCONNECT MESSAGE TO THE USER VIA DMKQCNWT (WITH 'HOLD' 01078000
- * OPTION IF 'DISCONNECT HOLD' WAS SPECIFIED), THEN TRANSFERS 01079000
- * TO DMKDSPCH. 01080000
- * 01081000
- * 3. UPON COMPLETION OF THE MESSAGE (RETURN FROM DMKDSPCH), 01082000
- * SENDS FILLED-IN MESSAGE TO THE SYSTEM OPERATOR THAT THE 01083000
- * USER HAS BEEN DISCONNECTED. SETS APPROPRIATE BITS IN 01084000
- * USER'S VMBLOK AND TERMINAL DEVICE BLOCKS TO INDICATE THAT 01085000
- * HE IS DISCONNECTED (AND CANNOT RECEIVE ANY MESSAGES 01086000
- * OR WARNINGS), AND EXITS INDICATING THAT THE VIRTUAL MACHINE 01087000
- * CAN BE RUN, BUT THAT A READ SHOULD NOT BE PUT UP TO THE 01088000
- * TERMINAL. 01089000
- EJECT 01090000
- * MESSAGES - 01091000
- * 01092000
- * NORMAL RESPONSES TO USER: 01093000
- * 01094000
- * 'DISCONNECT AT HH:MM:SS TID WEEKDAY MM/DD/YY' 01095000
- * 01096000
- * MESSAGES SENT TO SYSTEM OPERATOR: 01097000
- * 01098000
- * 'LINE XXX DSCONNECT USERID USERS = NNN' 01099000
- * 01100000
- * ERROR MESSAGES (DISCONNECT NOT ACCOMPLISHED): 01101000
- * 01102000
- * DMKUSO003E INVALID OPTION - XXXX 01103000
- *. 01104000
- EJECT 01105000
- *********************************************************************** 01106000
- * 01107000
- * DMKUSODS - 'DISCONNECT' COMMAND 01108000
- * 01109000
- *********************************************************************** 01110000
- SPACE 01111000
- DMKUSODS RELOC 01112000
- TM VMOSTAT,VMDISC IS USER ALREADY DISCONNECTED 01113000
- BO USO99X YES, EXIT WITH HASTE @VA00881 01114000
- TM VMRSTAT,VMLOGON USER NOT YET LOGGED ON ? 01115000
- BO USO06 YES - TREAT SAME AS "LOGOFF". 01116000
- MVI SAVEWRK1,EDISCON SIGNAL: DISCONNECT ENTERED. 01117000
- BAL R8,USOSUB AND CALL SUBROUTINE TO CHECK COMMAND LINE 01118000
- * COMMAND LINE WAS OK, PROCEED: 01119000
- LA R0,(LNR5+7)/8 GET ENOUGH FREE STORAGE FOR LONGEST MSG 01120000
- CALL DMKFREE ... 01121000
- LR R9,R1 ADDRESS INTO R9 PLEASE 01122000
- LA R1,NR1 POINT TO 'DISCONNECT AT' MSG 01123000
- LA R2,L'NR1-1 LENGTH - 1 IN R2 01124000
- BAL R3,MSGSUBR FILL IN MSG TO BE SENT TO THE USER 01125000
- SPACE 01126000
- CALL DMKQCNWT PARMS ARE ALREADY IN GR2 @VM01017 01127000
- * 01128000
- L R15,SAVERETN GET RETURN-ADDRESS, 01129000
- LA R15,4(,R15) +4 = LET VM RUN, DON'T POST READ. 01130000
- ST R15,SAVERETN STORE CORRECTED RETURN-ADDRESS 01131000
- L R8,VMTERM POINT R8 TO TERMINAL RDEVBLOK 01132000
- SR R15,R15 CLEAR 'VMTERM' SLOT IN VMBLOK 01133000
- ST R15,VMTERM ... 01134000
- OI VMOSTAT,VMDISC SIGNAL USER NOW DISCONNECTED 01135000
- LTR R8,R8 DISCONNECTED DURING QCN CALL? @VA02771 01136000
- BZ DISCEXIT NO TERM --DONT SEND OPERATOR MSG @VA02771 01137000
- * SEND MESSAGE TO SYSTEM OPERATOR RE DISCONNECTED USERID: 01138000
- MVC 0(L'MOP1,R9),MOP1 1ST SKELETON TO MSG BUFFER 01139000
- CLI RDEVTYPC-RDEVBLOK(R8),CLASGRAF 3277/3077 @VM08872 01140000
- BNE *+10 NO - @VM08872 01141000
- MVC 0(4,R9),=C'GRAF' CHANGE 'LINE' TO 'GRAF' @VM08872 01142000
- MVC DMOP3(L'MOP3,R9),MOP3 2ND SKELETON TO MSG BUFFER 01143000
- MVC DMOP3(8,R9),VMUSER PUT IN THE USERID 01144000
- CLI RDEVTYPC-RDEVBLOK(R8),CLASTERM A TERMINAL CLASS 01145000
- BNE *+12 NO, CHECK FOR 370X 01146000
- CLI RDEVTYPE-RDEVBLOK(R8),TYPBSC A BISYNC LINE 01147000
- BE USORESD YES, GET RESOURCE ID. 01148000
- LA R1,CLASSPEC*256+TYP3705 3705 DESCRIPTION @V200820 01149000
- CH R1,RDEVTYPC-RDEVBLOK(,R8) TERMINAL ON A 3705@V200820 01150000
- BNE DISCTERM NO - THAT'S SIMPLE@V200820 01151000
- USORESD EQU * GET RESOURCE ID. 01152000
- LH R1,VMTRMID TERMINAL IDENTIFICATION @V200820 01153000
- CALL DMKCVTBH CONVERT TO EBCDIC @V200820 01154000
- ST R1,4(0,R9) SET IN MESSAGE @V200820 01155000
- MVC 0(4,R9),=C'DEV ' MNEMONIC @V200820 01156000
- B DISCMSG GO SEND MESSAGE TO OPERATOR @V200820 01157000
- SPACE 2 01158000
- DISCTERM EQU * @V200820 01159000
- TM RDEVADD-RDEVBLOK(R8),RDEVLDEV Is this an LDEV? HRC065DK 01159100
- BZ DISCNLDF No, its GRAF HRC065DK 01159150
- MVC 0(5,R9),=C'GRF L' Short name if LDEV 01159200
- LH R1,RDEVADD-RDEVBLOK(,R8) Get the LDEV address HRC065DK 01159250
- N R1,F4095 Keep only the dev num HRC065DK 01159300
- CALL DMKCVTBH Make it displayable HRC065DK 01159350
- STCM R1,7,5(R9) Put dev addr in message HRC065DK 01159400
- B DISCMSG Go display msg HRC065DK 01159450
- * 01159500
- DISCNLDF EQU * Here if not LDEV HRC065DK 01159550
- CALL DMKSCNRD GET 'CCU' ADDRESS @V200820 01160000
- CALL DMKCVTBH CONVERT THAT TO EBCDIC @V200820 01161000
- STCM R1,B'0111',5(R9) @V200820 01162000
- DISCMSG EQU * @V200820 01163000
- L R15,ASYSLC REFERENCE SYSLOCS INFO 01164000
- USING SYSLOCS,R15 ... 01165000
- L R1,DMKSYSNM GET NUMBER OF USERS 01166000
- DROP R15 01167000
- CALL DMKCVTBD BINARY TO DECIMAL PLEASE 01168000
- STCM R1,7,DMOP4(R9) AND STORE IN THE MESSAGE 01169000
- LA R0,LMOP234 LENGTH OF MESSAGE 01170000
- LR R1,R9 ADDRESS, AND ... 01171000
- CALL DMKQCNWT,PARM=OPERATOR+NORET SEND MESSAGE TO OPERATOR 01172000
- DISCEXIT LR R1,R9 ADDRESS OF MSG BUFFER 01173000
- LA R0,(LNR5+7)/8 LENGTH OF MESSAGE BLOCK @VA00881 01174000
- CALL DMKFRET GIVE IT BACK @VA00881 01175000
- B USO99X AND GO EXIT WITHOUT FURTHER ADO. @VA00881 01176000
- EJECT 01177000
- * SUBROUTINE TO ANAYLZE THE COMMAND LINE 01178000
- * (CALLED BY 'LOGOFF' AND 'DISCONNECT') 01179000
- * R8 = RETURN-REGISTER 01180000
- * R9 POINTS TO USUAL COMMAND BUFFER 01181000
- * DMKSCNFD USED TO PICK UP ARGUMENTS IN THE USUAL WAY. 01182000
- * 01183000
- USOSUB DS 0H CHECK FOR POSSIBLE 'HOLD' OPTION: 01184000
- CALL DMKSCNFD ANY ADDITIONAL FIELDS AT ALL ? 01185000
- BCR 7,R8 NOPE - PROCEED WITH LOGOUT OR DISCONNECT. 01186000
- LR R15,R0 SAVE BYTE COUNT 01187000
- BCTR R15,0 LESS ONE FOR EXECUTED COMPARE 01188000
- EX R15,CKHOLD IS IT HOLD ?? 01189000
- BNE ERROR3 NOT EVEN CLOSE 01190000
- LA R15,1 MINIMUM ABBREVIATION IS 'HO' 01191000
- EX R15,CKHOLD CHECK FOR AT LEAST THAT .. 01192000
- BNE ERROR3 CLOSE, BUT NO CIGAR 01193000
- OI VMSVSTAT,VMLGHOLD SET FLAG BIT IF IT WAS 'HOLD' @VA13025 01194100
- BR R8 AND EXIT. 01195000
- SPACE 2 01196000
- CKHOLD CLC HOLD(*-*),0(R1) EXECUTED FOR OPTION TEST 01197000
- SPACE 01198000
- HOLD DC CL6'HOLD' VALID OPTION .. 01199000
- EJECT 01200000
- * MSGSUBR = SUBROUTINE TO CONSTRUCT RESPONSE TO BE SENT TO USER: 01201000
- * AT ENTRY: 01202000
- * R1 = ADDRESS OF INITIAL CHUNK OF MESSAGE 01203000
- * R2 = LENGTH (MINUS 1) OF INITIAL CHUNK OF MESSAGE 01204000
- * R3 = RETURN-REGISTER 01205000
- * R9 = ADDRESS OF MESSAGE BUFFER (LNR5 BYTES LONG) 01206000
- * SAVEWRK1 FLAG HAS ADDITIONAL NEEDED INFO 01207000
- * AT EXIT: 01208000
- * R0 = BYTE-COUNT OF FINISHED MESSAGE 01209000
- * R1 = R9 = ADDRESS OF FINISHED MESSAGE 01210000
- * R2 = 'PRIORITY+LOGDROP' OR 'PRIORITY+LOGHOLD' FOR DMKQCNWT 01211000
- * 01212000
- MSGSUBR MVC 0(8,R9),BLANKS BLANK-FILL THE MSG BUFFER 01213000
- MVC 8(LNR5-8,R9),0(R9) ... 01214000
- EX R2,MVCHUNK MOVE THE FIRST CHUNK TO MSG BUFFER 01215000
- LA R2,1(R9,R2) POINT TO WHERE THE TIME WILL GO 01216000
- L R15,=A(DMKSYSTI) GET ADDR OF TIME ZONE IDENTIFIER 01217000
- MVC 9(3,R2),0(R15) MOVE TO THE MESSAGE 01218000
- LA R1,13(,R2) POINT TO WHERE THE WEEKDAY WILL GO 01219000
- L R14,ASYSLC REFERENCE SYSLOCS INFO 01220000
- USING SYSLOCS,R14 ... 01221000
- SLR R15,R15 GET NUMBER OF BYTES (LESS 1) IN WEEKDAY 01222000
- IC R15,DMKSYSDW+1 ... 01223000
- LA R14,DMKSYSDW+2 POINT AT THE WEEKDAY 01224000
- DROP R14 01225000
- EX R15,MVCWKDAY MOVE TO OUR MESSAGE BUFFER 01226000
- LA R1,2(R1,R15) NOW POINT TO WHERE TO PUT THE DATE 01227000
- CALL DMKCVTDT MOVE DATE AND TIME TO THE RIGHT PLACES 01228000
- TM SAVEWRK1,EFORCE+FORCE FORCED LOGOFF ? @V200820 01229000
- BZ MSGSUBR8 NOPE - NOTHING TO ADD. 01230000
- MVC 9(L'NR5,R1),NR5 ADD 'BY SYSTEM' 01231000
- MSGSUBR8 LR R1,R9 R1 = R9 = ADDRESS OF MESSAGE 01232000
- LA R0,LNR5 SET R0 FOR LENGTH OF WORST CASE MESSAGE 01233000
- LA R15,LNR5-1(,R1) POINT TO LAST BYTE OF MESSAGE 01234000
- LA R2,PRIORITY+LOGDROP SET TENTATIVE PARM FOR DMKQCNWT 01235000
- TM VMSVSTAT,VMLGHOLD DID CALLER WANT 'HOLD' ? @VA13025 01236100
- BCR 8,R3 NOPE - GR2 HAS THE RIGHT PAR@V200820 01237000
- LA R2,PRIORITY+LOGHOLD YES - SET HOLD OPTION INSTEAD. 01238000
- BR R3 RETURN @V200820 01239000
- SPACE 01240000
- MVCHUNK MVC 0(*-*,R9),0(R1) TO MOVE INITIAL CHUNK TO MSG BUFFER 01241000
- MVCWKDAY MVC 0(*-*,R1),0(R14) TO MOVE WEEKDAY TO MSG BUFFER 01242000
- EJECT 01243000
- ERROR3 LA R2,3 ERROR 3 = INVALID OPTION 01244000
- B ERRJOIN ... 01245000
- SPACE 01246000
- ERROR20 LA R2,20 ERROR 20 = USERID MISSING OR INVALID 01247000
- SLR R1,R1 NO DATA PASSED TO ERROR HANDLER 01248000
- B ERRJOIN ... 01249000
- SPACE 01250000
- ERROR45 LA R2,45 ERROR 45 = USERID NOT LOGGED ON 01251000
- LM R0,R1,SAVEWRK2 RECOVER R0/R1 (LOST BY CALL TO DMKSCNAU) 01252000
- * 01253000
- ERRJOIN ICM R0,B'1110',DMKUSO+3 IDENTIFIER INTO R0 HIGH 3 BYTES 01254000
- CALL DMKERMSG CALL ERROR MESSAGE HANDLER 01255000
- * 01256000
- * NOTE: DMKERMSG STORES R2 ERROR-CODE FOR 01257000
- * MY CALLER, AND RETURNS TO MY CALLER. 01258000
- SPACE 1 01259000
- LTORG 01260000
- SPACE 2 01261000
- * VARIOUS MESSAGES, RESPONSES, AND SKELETONS FOR SAME: 01262000
- * 01263000
- * NORMAL RESPONSES: 01264000
- *** 'CONNECT= HH:MM:SS VIRTCPU= MMM:SS.00 TOTCPU= MMM:SS.00' 01265000
- NR1 DC C'DISCONNECT AT ' 01266000
- NR2 DC C'LOGOFF AT ' 01267000
- * DS C'HH:MM:SS ' TIME 01268000
- * DS C'TID ' TIME ZONE = 'EST' OR 'EDT' ETC. 01269000
- * DS C'WEEKDAY ' E.G. WEDNESDAY (WORST CASE) 01270000
- * DS C'DD/MM/YY' DATE 01271000
- NR5 DC C'BY SYSTEM' @V200820 01272000
- SPACE 01273000
- * LONGEST POSSIBLE MESSAGE ISSUED BY LOGOFF/FORCE/DISCONNECT: 01274000
- * 'LOGOFF AT HH:MM:SS EST WEDNESDAY MM/DD/YY BY SYSTEM' 01275000
- LNR5 EQU 52 LENGTH OF ABOVE WORST-CASE MSG @V200820 01276000
- SPACE 01277000
- * MESSAGES SENT TO SYSTEM OPERATOR: 01278000
- MOP1 DC C'LINE XXX DSCONNECT ' NOTE: 8-BYTE USERID ADDED. 01279000
- MOP2 DC C'USER DSC LOGOFF AS ' @V200930 01280000
- MOP3 DC C'USERID USERS = ' 01281000
- MOP4 DC C'NNN' 01282000
- LMOP234 EQU *-MOP2 (LENGTH) 01283000
- MOP5 DC C' FORCED' ADDED FOR FORCED LOGOUT CASES 01284000
- LMOP2345 EQU *-MOP2 (LENGTH) 01285000
- DMOP3 EQU MOP3-MOP2 DISP. OF USERID FROM BEGINNING OF MSG 01286000
- DMOP4 EQU MOP4-MOP2 DISP. OF NNN FROM BEGINNING OF MSG 01287000
- EJECT 01288000
- COPY CORE 01289000
- COPY SAVE 01290000
- * FLAG-BITS USED IN SAVEWRK1: 01291000
- * 01292000
- ELOGOFF EQU X'80' LOGOFF ENTRY 01293000
- EDISCON EQU X'40' DISCONNECT ENTRY 01294000
- EFORCE EQU X'20' FORCE ENTRY 01295000
- FORCE EQU X'02' FORCED LOGOFF BY THE SYSTEM @V200820 01297000
- NOOPMSG EQU X'01' SKIP MESSAGE TO OPERATOR @VM03066 01298000
- EJECT 01299000
- COPY EQU 01300000
- COPY VMBLOK 01301000
- COPY TREXT 01302000
- COPY ACCOUNT @VA00881 01303000
- COPY RBLOKS 01304000
- COPY IOBLOKS @V408246 01304100
- IOBLOK DSECT CONTINUE THE DSECT @V408246 01304200
- ORG , LOCATE END OF BLOCK @V408246 01304300
- * ANY CHANGES IN PAGESIZE MUST ALSO BE REFLECTED 01304325
- * IN DMKPAG AND DMKMON 01304375
- * FOLLOWING SIZE MUST CORRESPOND WITH DMKPAG 01304400
- DS 7D SIZE OF PAGE EXTENDED I/O BLOCK @V408246 01304500
- PAGESIZE EQU (*-IOBLOK)/8 SIZE OF EXTENDED BLOCK @V408246 01304600
- COPY SPOOL @VA00881 01305000
- COPY ALLOC @VA00881 01306000
- COPY VBLOKS 01307000
- COPY TIMER 01308000
- COPY DEVTYPES 01309000
- PSA 01310000
- SYSLOCS 01311000
- COPY MICBLOK 01312000
- COPY CONBUF @VA08501 01312100
- END DMKUSO 01313000
ibm/vm370-lib/cp/dmkuso.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator