LOG TITLE 'DMKLOG (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF SOURCE 00002000
*. 00003000
* MODULE NAME - 00004000
* 00005000
* DMKLOG - LOGON A USER (OR THE OPERATOR) 00006000
* 00007000
* FUNCTION - 00008000
* 00009000
* TO PERFORM ALL FUNCTIONS NECESSARY TO 00010000
* TO LOGON A USER (OR THE OPERATOR). 00011000
* 00012000
* COMMAND LINE FORMAT - 00013000
* 00014000
* +-------+-------------------------------------------+ 00015000
* | | | 00016000
* | LOGON | USERID <PASSWORD> <MASK> <NOIPL> | 00017000
* | - | - - | 00018000
* +-------+-------------------------------------------+ 00019000
* 00020000
* ATTRIBUTES - 00021000
* 00022000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00023000
* 00024000
* ENTRY POINTS - 00025000
* 00026000
* DMKLOGON - LOGON A USER 00027000
* DMKLOGOP - LOGON THE OPERATOR 00028000
* 00029000
* ENTRY CONDITIONS - 00030000
* 00031000
* GPR 9 = ADDRESS OF COMMAND BUFFER (FOR DMKLOGON ONLY) 00032000
* GPR 11 = ADDRESS OF USER'S VMBLOK 00033000
* GPR 12 = ADDRESS OF DMKLOGON OR DMKLOGOP 00034000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00035000
* 00036000
* EXIT CONDITIONS - 00037000
* 00038000
* UPON A SUCCESSFUL LOGON OR RECONNECT, ALL APPROPRIATE 00039000
* TABLES HAVE BEEN CREATED, FILLED IN, AND/OR REVISED; 00040000
* AND ALL APPROPRIATE FLAGS HAVE BEEN SET AS NECESSARY. 00041000
* 00042000
* CC = 0 IF LOGON OR RECONNECT WAS SUCCESSFUL (AND GPR 2 = 0). 00043000
* CC = 2 IF LOGON FAILED (AND GPR 2 HOLDS ERROR CODE). 00044000
* 00045000
* GPR 2 = 0 IF LOGON OR RECONNECT SUCCEEDED. 00046000
* GPR 2 HOLDS ERROR-CODE (SEE ERROR MESSAGES) IF LOGON FAILED. 00047000
EJECT 00048000
* CALLS TO OTHER ROUTINES - 00049000
* 00050000
* DMKACON - ESTABLISH ACCOUNTING INFORMATION 00051000
* DMKBLDRT - BUILD REAL SEGMENT, PAGE, AND SWAP TABLES 00052000
* DMKBLDVM - BUILD A VMBLOK 00053000
* DMKCFGII - INITIATE AUTOMATIC IPL OF USER-DESIGNATED SYSTEM 00054000
* DMKCQRFI - SEND MESSAGE TO USER FOR SPOOL FILES IF ANY 00055000
* DMKCVTBD - CONVERT FROM BINARY TO PRINTABLE DECIMAL 00056000
* DMKCVTBH - CONVERT FROM BINARY TO PRINTABLE HEX 00057000
* DMKCVTDT - OBTAIN DATE-TIME 00058000
* DMKEPSWD - ENTER PASSWORD 00059000
* DMKFREE - OBTAIN FREE STORAGE 00060000
* DMKFRERC - ACQUIRE FREE STORAGE & IF STORAGE CANNOT 00061000
* BE OBTAINED, RETURN WITH CC=1 00062000
* DMKFRET - RETURN UNUSED VMBLOK TO FREE STORAGE 00063000
* DMKJRLLO - JOURNAL DATA ON INVALID PASSWORDS 00064000
* DMKQCNWT - SEND MESSAGE TO USER TERMINAL 00065000
* DMKSCNAU - FIND VMBLOK OF ACTIVE USER 00066000
* DMKSCNFD - GET NEXT FIELD FROM COMMAND LINE 00067000
* DMKSCNRD - TO CONVERT TERMINAL DEVICE ADDRESS TO CCU FORM 00068000
* DMKSCNRU - TO FIND REAL RDEVBLOK FOR A DEDICATED DEVICE 00069000
* DMKSCNVD - TO FIND VIRTUAL ADDRESS FROM VDEVBLOK 00070000
* DMKSCNVU - FIND VIRTUAL DEVICE BLOCKS 00071000
* DMKSCNVN - GET NAME OF VIRTUAL DEVICE 00072000
* DMKSTKCP STACK CPEXBLOK FOR AUTOLOGGED USER 00073000
* DMKUDRFU - FIND USER IN CP DIRECTORY 00074000
* DMKUDRRD - USER DIRECTORY READ 00075000
* DMKUDRRV - RELEASE VIRTUAL PAGES USED BY DMKUDR ROUTINES 00076000
* DMKSCHRT - TO RESET A CLOCK COMPARATOR TRQBLOK 00077000
* DMKVDSAT - ATTACH A VIRTUAL DEVICE 00078000
* DMKVDSDF - DEFINE A VIRTUAL DEVICE 00079000
* DMKLNKSB - CHECK & ESTABLISH LINK TO GIVEN MINIDISK 00080000
* DMKERMSG - TO CONSTRUCT & SEND ERROR MESSAGES TO USER 00081000
* DMKQCNSY - SYNCHRONIZE CONSOLE ACTIVITY 00082000
* DMKSCHDL - MAKE AN AUTOLOGGED USER RUNNABLE 00083000
* DMKUSOFF - FORCE OFF AN ILL FATED AUTOLOGGED USER 00084000
* DMKLOHRC - SPLIT FROM THIS ROUTINE. RECONNECT DISC USER 00085000
* 00085500
* EXTERNAL REFERENCES - 00086000
* 00087000
* DMKSYSNM - NUMBER OF ACTIVE USERS 00088000
* DMKSYSMA - MAXIMUM NUMBER OF USERS ALLOWED ON SYSTEM 00089000
* DMKSYSOP - OPERATOR'S VMBLOK 00090000
* DMKSCHCP - INTERRUPT RETURN ADDRESS FOR CPU TIMER INTERRUPT 00091000
* DMKTMRCK - INTERRUPT RETURN ADDRESS FOR CLOCK COMPARATOR 00092000
* DMKSCH80 - INTERRUPT RETURN ADDRESS FOR REAL TIMER 00093000
* DMKSYSTI - TIME ZONE IDENTIFIER 00094000
* DMKSYSJR - JPSCBLOK (JOURNALING CONTROL BLOCK) 00095000
* 00096000
* TABLES / WORK AREAS - 00097000
* 00098000
* NONE 00099000
EJECT 00100000
* REGISTER USAGE - 00101000
* 00102000
* GPR 2 = ADDRESS OF "UDEV" BLOCKS AND OTHER USE 00103000
* GPR 8 = ADDRESS OF TERMINAL RDEVBLOK, AND OTHER USE 00104000
* GPR 9 = ADDRESS OF 'LOGON' COMMAND, THEN FREE STORAGE ADDRESS 00105000
* GPR 11 = ADDRESS OF USER'S VMBLOK 00106000
* GPR 12 = BASE REGISTER 00107000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00108000
* 00109000
* GPRS 0-1, 3-7, 10, AND 14-15 ARE WORK REGISTERS 00110000
* 00111000
* NOTES - 00112000
* 00113000
* 'PASSWORD' DENOTES THE ACTUAL USER PASSWORD. 00114000
* 00115000
* (USE OF THIS OPTION IS NOT RECOMMENDED 00116000
* UNLESS PASSWORD SECURITY IS IRRELEVANT) 00117000
* 00118000
* 'MASK' IN COMMAND LINE DENOTES THAT THE TERMINAL DOES NOT HAVE 00119000
* A PRINT-INHIBIT FEATURE, AND THAT MASKING CHARACTERS 00120000
* ARE TO BE TYPED WHENEVER A PASSWORD IS REQUESTED. 00121000
* 00122000
* 'NOIPL' SIGNALS THAT NO AUTOMATIC IPL OF A NAMED SYSTEM 00123000
* IS DESIRED WHEN THE LOGON PROCESS IS COMPLETE. 00124000
* 00125000
* IF ANY OF THESE OPTIONS IS MORE THAN 8 BYTES IN LENGTH, OR 00126000
* IS GIVEN TWICE, AN ERROR 3 IS RETURNED (WITH ERROR MESSAGE). 00127000
* IF AN OPTION IS NEITHER 'M' TO 'MASK' NOR 'N' TO 'NOIPL', 00128000
* IT IS ASSUMED TO BE A USER PASSWORD AND IS CHECKED - ERROR 50 00129000
* BEING RETURNED (WITH ERROR MESSAGE) IF INCORRECT. 00130000
* 00131000
* SEE STEP 13 IN "OPERATION" REGARDING THE SYSTEM LOG MESSAGE. 00132000
* 00133000
* OPERATION - 00134000
* 00135000
* 1. FOR THE DMKLOGOP ENTRY (FOR AUTOMATICALLY LOGGING IN THE 00136000
* AUTOLOG USERS, AND THE 00137000
* OPERATOR), SEVERAL OF THE FOLLOWING STEPS, IN GENERAL THOSE 00138000
* REQUIRING A COMMAND LINE OR HUMAN ACTION, ARE EITHER OMITTED 00139000
* OR ARE REPLACED BY A TRIVIAL EQUIVALENT (FOR EXAMPLE OBTAINING 00140000
* THE USERID FROM A FIXED LOCATION, FOR THE OPERATOR, INSTEAD OF 00141000
* PICKING IT UP FROM THE COMMAND LINE). THESE OMITTED OR 00142000
* REVISED STEPS ARE MARKED WITH AN ASTERISK PRECEDING THE STEP 00143000
* NUMBER (FOR EXAMPLE STEPS 2, 3, 4, & 6). 00144000
* 00145000
* FOR THE DMKLOGON ENTRY, TO LOGON A USER, ALL OF THE LOGIC 00146000
* STEPS, AS GIVEN BELOW, APPLY. 00147000
* 00148000
* * 2. CHECKS TO SEE IF THE MAXIMUM ALLOWABLE NUMBER OF USERS ON 00149000
* THE SYSTEM HAS BEEN EXCEEDED; IF YES, EXITS IMMEDIATELY TO 00150000
* CALLER WITH AN ERROR MESSAGE & ERROR CODE 51. 00151000
* 00152000
* * 3. CALLS DMKSCNFD TO OBTAIN USERID FROM COMMAND LINE. 00153000
* (ERROR IF USERID IS MISSING OR MORE THAN 8 CHARACTERS.) 00154000
EJECT 00155000
* * 4. DMKSCNFD IS THEN CALLED UP TO THREE MORE TIMES TO SEE IF 00156000
* 'MASK', 'NOIPL', AND/OR A PASSWORD IS PRESENT ON THE COMMAND 00157000
* LINE. IF 'MASK' IS PRESENT, THE TERMINAL REAL DEVICE BLOCK 00158000
* IS FLAGGED TO INDICATE NO PRINT INHIBIT FEATURE ON THE 00159000
* TERMINAL. IF 'NOIPL' IS PRESENT, A FLAGBIT IS SET TO SUPPRESS 00160000
* AN AUTOMATIC IPL OF A NAMED SYSTEM WHEN LOGON IS COMPLETED. 00161000
* IF A PASSWORD IS PRESENT, IT IS USED FOR COMPARING WITH THE 00162000
* USER DIRECTORY BLOCK PASSWORD, INSTEAD OF CALLING DMKEPSWD. 00163000
* 00164000
* 5. NOW DMKUDRFU IS CALLED TO FIND THE USERID IN THE CP 00165000
* DIRECTORY. IF NOT FOUND, EXITS IMMEDIATELY WITH AN ERROR 00166000
* MESSAGE AND ERROR CODE 53. IF SUCCESSFUL, REMEMBERS THE 00167000
* USER DIRECTORY BLOCK INFORMATION FOR SUBSEQUENT CALLS TO 00168000
* DMKUDRRD, AND FOR OTHER USE. 00169000
* 00170000
* * 6. IF THE PASSWORD WAS PROVIDED IN THE COMMAND LINE, CHECKS 00171000
* IT AGAINST THAT IN THE USER DIRECTORY BLOCK (FROM STEP 5). IF 00172000
* NOT, CALLS DMKEPSWD TO OBTAIN AND CHECK THE PASSWORD. IF THE 00173000
* PASSWORD WAS INCORRECT, EXITS IMMEDIATELY WITH ERROR MESSAGE 00174000
* AND ERROR CODE 50. IF A COND. CODE 3 FROM DMKEPSWD INDICATES 00175000
* THE PASSWORD WAS NEVER ENTERED AT ALL (DUE TO A "TIMEOUT", 00176000
* PERMANENT TERMINAL ERROR, OR THE USER SIMPLY TURNED OFF 00177000
* HIS TERMINAL), THEN NO ERROR MESSAGE IS GIVEN. 00178000
* 00179000
* 7. NOW CALLS DMKSCNAU TO SEE IF THE USER TO BE LOGGED ON IS 00180000
* ALREADY AN ACTIVE USER. IF NOT, PROCEED DIRECTLY TO STEP 10. 00181000
* 00182000
* 8. IF YES, CHECKS TO SEE IF THE USER IS RUNNING DISCONNECTED. 00183000
* IF NOT, AN ERROR MESSAGE IS GIVEN INDICATING THAT THE USER IS 00184000
* LOGGED ON AT ANOTHER DEVICE, AND AN EXIT IS MADE WITH 00185000
* ERROR CODE 54. 00186000
* 00187000
* 9. IF THE USER WAS RUNNING DISCONNECTED, THE FOLLOWING STEPS 00188000
* ARE TAKEN TO RECONNECT HIM: 00189000
* 00190000
* A. THE VMBLOK BELONGING TO THE DISCONNECTED USER IS 00191000
* REVISED TO USE THE TERMINAL REAL DEVICE BLOCK POINTED 00192000
* TO BY THE "CURRENT" GPR 11, AND OTHER REVISIONS MADE AS 00193000
* AS NEEDED. THEN THE VMBLOK POINTED TO BY GPR 11 IS 00194000
* RELEASED FROM THE SYSTEM, AND THE OTHER VMBLOK IS USED 00195000
* HEREAFTER. 00196000
* 00197000
* B. NEXT, THE EQUIVALENT OF STEPS 12-14 (BELOW) ARE 00198000
* PERFORMED FOR ACCOUNTING, THE LOG MESSAGE, AND THE 00199000
* TYPEOUT OF THE NUMBER OF SPOOLED FILES (IF ANY). 00200000
* 00201000
* C. THEN A MESSAGE IS SENT TO THE USER (VIA A CALL TO 00202000
* DMKLOH) THAT HE HAS BEEN RECONNECTED, AND TO THE 00203000
* OPERATOR THAT THE GIVEN USER HAS BEEN RECONNECTED. 00204000
* 00205000
* D. ANY ADDITIONAL RESETTING OF FLAG BITS AS 00206000
* NEEDED IS DONE (FOR EXAMPLE, RESETTING THE DISCONNECT 00207000
* FLAG-BIT). 00208000
* 00209000
* E. FINALLY, IN MOST CASES, NORMAL RETURN IS MADE TO 00210000
* THE CALLER. (THE CALLER WOULD THEN INVOKE 'BEGIN' IF HE 00211000
* WISHED TO CONTINUE HIS PROGRAM WHERE IT LEFT OFF.) 00212000
* 00213000
* F. THE ONE CASE IN WHICH RETURN IS NOT NORMAL IS 00214000
* IF A CONSOLE FUNCTION WAS BEING EXECUTED WHEN RECONNECT 00215000
* STARTED. IN THIS CASE, RETURN IS TO *+12 IN DMKCFM SO 00216000
* THAT STATUS BITS WILL NOT BE CHANGED. 00217000
* 00218000
* 10. IF THE USER WAS NOT ACTIVE (FROM STEP 8), THEN THE LOGON 00219000
* PROCESS CAN CONTINUE. THE USERID IN THE VMBLOK IS NOW CHANGED 00220000
* FROM ITS VALUE OF 'LOGONXXX' TO THE CORRECT USERID, AND A FLAG 00221000
* IS SET INDICATING HE IS THE LOGON PROCESS. (THIS INHIBITS 00222000
* OTHERS FROM LINKING TO HIS DISKS WHILE HE IS IN THE FOLLOWING 00223000
* STEPS OF LINKING TO THEM.) DMKFREE IS NOW CALLED FOR SPACE 00224000
* FOR THE USER MACHINE BLOCK AND USER DEVICE BLOCKS. DMKUDRRD 00225000
* IS THEN CALLED TO OBTAIN THE USER MACHINE BLOCK. APPROPRIATE 00226000
* INFORMATION (E.G. CORE SIZE) IS STORED IN THE VMBLOK, AND IN 00227000
* THE TERMINAL REAL DEVICE BLOCK (FOR EXAMPLE, THE LINE 00228000
* AND CHARACTER DELETE SYSMBOLS (AND LINE END CHARACTERS, EXCEPT 00229000
* FOR AUTOLOG USERS WITH NO REAL DEVICE BLOCK)¬ 00230000
* AFFINITY PROCESSING TRIES TO SET AFFINITY IF THE SYSTEM @V4075A0 00231000
* IS IN AP MODE AND THE REQUESTED PROCESSOR IS AVAILABLE. @V4075A0 00232000
* IF PROCESSOR ADDRESS IS NOT AVAILABLE, WE ISSUE MSG 188. @V4075A0 00233000
* IT IS AVAILABLE BUT WE ARE IN UP MODE, WE ISSUE MSG 189. @V4075A0 00234000
* NEITHER CASE PREVENTS THE USER FROM LOGON. @V4075A0 00235000
* AT THIS TIME THE USER MACHINE BLOCK IS TESTED TO SEE IF THE 00236000
* USER WISHES TO OCCUPY THE VIRTUAL = REAL REGION. IF HE DOES, 00237000
* THE CPSTATUS SWITCH IN DMKPSA IS TESTED TO SEE IF THE REGION 00238000
* IS AVAILABLE, AND THE USER'S VIRTUAL MEMORY SIZE IS COMPARED 00239000
* TO THE REAL SPACE THAT IS AVAILABLE. IF BOTH TESTS SUCCEED, 00240000
* THE LOGON PROCESS CONTINUES AND GPR2 IS SET TO INDICATE TO 00241000
* DMKBLDRT THAT SPECIAL HANDLING FOR THE VIRTUAL MEMORY CONTROL 00242000
* TABLES IS REQUIRED. IF EITHER TEST FAILS, THE LOGON PROCESS 00243000
* IS TERMINATED. 00244000
* DMKBLDRT IS CALLED TO BUILD THE SEGMENT TABLES 00245000
* (WHICH ARE A FUNCTION OF CORE SIZE). IF THE USER'S VIRTUAL 00246000
* MACHINE HAS THE CAPABILITY TO RUN IN EXTENDED MODE, 00247000
* THEN A VMBLOK-EXTENSION (ECBLOK) IS OBTAINED FROM FREE 00248000
* STORAGE, INITIALIZED, AND ITS ADDRESS STORED IN THE VMBLOK. 00249000
* A TABLE OF VIRTUAL DEVICE BLOCKS IS THEN 00250000
* OBTAINED FROM FREE STORAGE (DMKFRERC) AS A FUNC. OF THE 00251000
* "DEVICE COUNT" IN THE USER MACHINE BLOCK (AND THE VIRTUAL 00252000
* ADDRESSES ARE SET TO THEIR 'NULL' VALUE OF X'FFFF'). 00253000
* IF THE STORAGE CANNOT BE OBTAINED, A CHECK WILL BE MADE 00254000
* TO SEE IF MORE THAN 512 DOULBE WORDS HAD BEEN REQUESTED. 00255000
* IF NOT, ERROR MSG DMKLOG131E WILL BE ISSUED. IF MORE 00256000
* MORE THAN 512 DOUBLEWORDS HAD BEEN REQUESTED AND COULD NOT 00257000
* BE SATISFIED, THE REQUEST WILL BE RE-ISSUED THIS TIME 00258000
* ASKING FOR 512 DOUBLEWORDS SO THAT IF A SMALLER AMOUNT OF 00259000
* STORAGE WAS AVAILABLE, THE USER WOULD BE ABLE TO LOGON WITH 00260000
* SOME OF HIS VIRTUAL CONFIGURATION. IF THIS SECOND REQUEST 00261000
* FAILS, DMKLOG131E WILL BE ISSUED. IF THE SECOND REQUEST 00262000
* COMPLETES SUCCESSFULLY, LOGON PROCESSING WILL CONTINUE TO 00263000
* ATTACH/LINK/DEFINE VIRTUAL DEVICES UNTIL STORAGE IS NO 00264000
* LONGER AVAILABLE TO ACCOMMODATE THE VIRTUAL BLOCKS. 00265000
* WHEN THIS HAPPENS, ONE OF THE FOLLOWING TWO MESSAGES WILL 00266000
* APPEAR DEPENDING ON THE CONDITION ENCOUNTERED (DMKLOG095E 00267000
* OR DMKLNK119E). 00268000
* VIRTUAL CHANNEL AND CONTROL UNIT TABLES ARE NOW OBTAINED 00269000
* FROM FREE STORAGE - A SMALL NUMBER OF BLOCKS FOR EACH 00270000
* TABLE - NAMELY TWO CHANNEL BLOCKS AND THREE CONTROL UNIT 00271000
* BLOCKS (CORRESPONDING TO A TYPICAL MINIMUM VIRTUAL MACHINE). 00272000
* 00273000
* 11. NOW DMKUDRRD IS CALLED REPEATEDLY TO OBTAIN THE 00274000
* NECESSARY INFORMATION FOR INITIALIZING THE VIRTUAL BLOCKS 00275000
* FOR ALL OF THE DEVICES PERTAINING TO THE USER. FOR EACH 00276000
* DEVICE FOUND, IT IS PROCESSED AS FOLLOWS, UNTIL ALL 00277000
* THE USER DEVICES ARE EXHAUSTED: 00278000
* 00279000
* A. IF THE DEVICE IS A NON-DEDICATED DASD DEVICE, 00280000
* THEN DMKLNKSB IS CALLED TO ESTABLISH A LINK TO THE 00281000
* SPECIFIED DEVICE. ANY RESPONSES OR ERROR MESSAGES 00282000
* WHICH MAY OCCUR IN THIS PROCESS ARE INITIATED BY THE 00283000
* DMKLNKSB ROUTINE. 00284000
* 00285000
* B. FOR SOME DEVICES, FOR EXAMPLE A T-DISK, DMKVDSDF IS 00286000
* CALLED TO 'DEFINE' THE DEVICE; IF THE 'DEFINE' FAILED 00287000
* (FOR EXAMPLE, NO TEMPORARY SPACE AVAILABLE), AN ERROR 00288000
* MESSAGE IS GIVEN, AND PROCEEDS TO THE NEXT DEVICE. 00289000
* 00290000
* C. FOR OTHER DEVICES, FOR EXAMPLE TERMINAL, SPOOLED 00291000
* READER, PRINTER, OR PUNCH, DMKVDSAT OR DMKVDSDF IS 00292000
* CALLED TO SET UP THE APPROPRIATE BLOCKS FOR THAT DEVICE. 00293000
* 11. (CONTINUED): 00294000
* 00295000
* D. FOR DEDICATED DEVICES, DMKVDSAT IS CALLED TO 00296000
* ATTACH THE DEVICE TO THE USER (IF FEASIBLE). AN 00297000
* ERROR MESSAGE IS GIVEN IF THE DEVICE IS UNAVAILABLE. 00298000
* 00299000
* E. WHEN ALL DEVICES HAVE BEEN PROCESSED, DMKUDRRV IS 00300000
* CALLED TO RELEASE THE VIRTUAL CORE USED BY THE DMKUDR 00301000
* ROUTINES. 00302000
* 00303000
* 12. NOW DMKACON IS CALLED TO DO THE ACCOUNTING LOGIC 00304000
* APPROPRIATE TO THE LOGON PROCESS. 00305000
* 00306000
* 13. NOW, DMKLOH IS CALLED. THE DATE/TIME AT WHICH THE SYSTEM 00307000
* LOG MESSAGE (LOGMSG) WAS GENERATED OR MOST RECENTLY REVISED IS 00308000
* THEN TYPED AT THE USER'S TERMINAL, EXCEPT FOR AUTOLOG USERS 00309000
* WITH NO REAL TERMINAL. 00310000
* 00311000
* IF ANY LINES OF THE SYSTEM LOG MESSAGE START WITH AN ASTERISK 00312000
* (INDICATING THEY ARE OF A HIGH PRIORITY), THEY ARE TYPED 00313000
* AT THE USER'S TERMINAL AT THIS POINT. (OTHERWISE, MERELY THE 00314000
* DATE/TIME OF THE LOG MESSAGE IS GIVEN.) 00315000
* 00316000
* THEN, IF ANY FILES EXIST IN HIS READER, PRINTER, 00317000
* OR PUNCH, THIS INFORMATION IS TYPED AT HIS TERMINAL. 00318000
* 00319000
* NEXT, THE 'READY AT ... TIME ... DATE' MESSAGE IS SENT 00320000
* TO THE USER, AND A MESSAGE IS SENT TO THE SYSTEM OPERATOR 00321000
* INDICATING THAT THE USER HAS BEEN LOGGED ON. 00322000
* 00323000
* 14. FINALLY, THE FREE STORAGE USED FOR THE USER MACHINE 00324000
* AND DEVICE BLOCKS IS RETURNED VIA DMKFRET, APPROPRIATE 00325000
* FLAG BITS ARE RESET IN VMBLOK AS NEEDED (E.G. THE BIT 00326000
* INDICATING THE USER WAS IN THE LOGON PROCESS). THEN IF 00327000
* THE USER IS NOT RECONNECTING, AND IF THE VM ASSIST FEATURE 00328000
* IS AVAILABLE, SETUP IS DONE FOR VM ASSIST FOR THE USER (A 00329000
* MICBLOK IS OBTAINED, AND THE MICBLOK AND THE VMMICRO FIELD 00330000
* IN THE VMBLOK ARE INITIALIZED - ALSO, IF THE CP ASSIST FEATURE 00331000
* IS AVAILABLE, FIELDS IN THE MICBLOK AND VMBLOK ARE SET UP). IF 00332000
* NO ERROR OCCURRED, AND IF A NAMED SYSTEM WAS SPECIFIED IN THE 00333000
* USER'S DIRECTORY, AND IF HE DID NOT SPECIFY 'NOIPL' IN THE 00334000
* LOGON COMMAND LINE, THEN THE DMKCFGII ROUTINE IS CALLED 00335000
* TO INITIATE THE DESIRED IPL PROCESS. THEN DMKJRLLO 00336000
* IS CALLED (IF JOURNALING IS ON) TO ACCUMULATE DATA 00337000
* ON THE USE OF INVALID PASSWORDS. FINALLY, RETURN IS 00338000
* MADE TO THE CALLER, WITH THE APPROPRIATE ERROR CODE OF 00339000
* 0, 20, OR 50-54 IN GPR 2. 00340000
EJECT 00341000
* MESSAGES - 00342000
* 00343000
* PROMPTING MESSAGE (FROM DMKEPSWD): 00344000
* 00345000
* 'ENTER PASSWORD:' 00346000
* 00347000
* NORMAL RESPONSES: 00348000
* 00349000
* 'LOGMSG - HH:MM:SS TID WEEKDAY MM/DD/YY' 00350000
* 00351000
* 'LOGON AT HH:MM:SS TID WEEKDAY MM/DD/YY' 00352000
* OR 00353000
* 'RECONNECTED AT HH:MM:SS TID WEEKDAY MM/DD/YY' 00354000
* 00355000
* INFORMATIVE MESSAGE GIVEN IF A DISK HAVING A "MULT" USER ACCESS 00356000
* MODE IS SET TO WRITE AS DESIRED, BUT OTHER USER(S) ARE LINKED 00357000
* TO THE DISK IN READ ONLY STATUS: 00358000
* 00359000
* 'DASD XXX LINKED R/W; R/O BY USERID' 00360000
* OR 00361000
* 'DASD XXX LINKED R/W; R/O BY NNN USERS' 00362000
* @V4075A0 00363000
* DMKLOG188E: SPECIFIED PROCESSOR UNAVAILABLE @V4075A0 00364000
* @V4075A0 00365000
* DMKLOG189I: AFFINITY NOT SET, SYSTEM IN UNI-PROCESSOR MOD@V4075A0 00366000
* 00367000
* ERROR MESSAGES (LOGON NOT ACCOMPLISHED): 00368000
* 00369000
* DMKLOG003E INVALID OPTION - OPTION 00370000
* 00371000
* DMKLOG020E USERID MISSING OR INVALID 00372000
* 00373000
* DMKLOG050E PASSWORD INCORRECT 00374000
* 00375000
* DMKLOG051E MAXIMUM USERS EXCEEDED 00376000
* 00377000
* DMKLOG052E ERROR IN CP DIRECTORY 00378000
* 00379000
* DMKLOG053E USERID NOT IN CP DIRECTORY 00380000
* 00381000
* DMKLOG054E ALREADY LOGGED ON TYPE RADDR 00382000
* 00383000
* DMKLOG059E AUTOLOG FAILED FOR USERID - IPL MISSING 00384000
* - IPL FAILED 00385000
* - ACCOUNTING ERROR 00386000
EJECT 00387000
* OTHER ERROR MESSAGES (LOGON HAS BEEN ACCOMPLISHED): 00388000
* 00389000
* DMKLOG090E DEV VADDR NOT DEFINED; DEV RADDR NOT AVAILABLE 00390000
* VOLSER 00391000
* 00392000
* DMKLOG091E DASD VADDR NOT DEFINED; TEMP SPACE NOT AVAILABLE 00393000
* 00394000
* DMKLOG092E DEV VADDR NOT DEFINED; TYPE VADDR ALREADY DEFINED 00395000
* 00396000
* DMKLOG093E DEV VADDR NOT DEFINED; ERROR IN CP DIRECTORY 00397000
* DMKLOG095E DEV VADDR NOT DEFINED; INSUFFICIENT FREE STORAGE 00398000
* DMKLOG131E INSUFFICIENT FREE STORAGE AVAILABLE FOR LOGON REQUEST 00399000
* 00400000
* NOTE - THE FOLLOWING MESSAGES ARE ISSUED FROM THE DMKLNK MODULE, 00401000
* CALLED VIA THE DMKLNKSB ENTRY POINT TO ESTABLISH A LINK TO 00402000
* A DASD DEVICE IN THE USER'S DIRECTORY: 00403000
* 00404000
* IN THE RESPONSES AND ERROR MESSAGES WHERE "R/W BY NNN USERS" 00405000
* IS NORMALLY SPECIFIED, IF THE "NNN" IS SPECIFICALLY 001, 00406000
* THE USERID OF THE ONE USER IS GIVEN INSTEAD OF "NNN USERS". 00407000
* 00408000
* 00409000
* DMKLNK101W DASD YYY FORCED R/O; R/O BY NNN USERS 00410000
* 00411000
* DMKLNK102W DASD YYY FORCED R/O; R/W BY NNN USERS 00412000
* 00413000
* DMKLNK103W DASD YYY FORCED R/O; R/W BY NNN USERS; R/O BY NNN USERS 00414000
* 00415000
* DMKLNK104E USERID XXX NOT LINKED; R/O BY NNN USERS 00416000
* 00417000
* DMKLNK105E USERID XXX NOT LINKED; R/W BY NNN USERS 00418000
* 00419000
* DMKLNK106E USERID XXX NOT LINKED; R/W BY NNN USERS; R/O BY NNN USERS 00420000
* 00421000
* DMKLNK107E USERID XXX NOT LINKED; NOT IN CP DIRECTORY 00422000
* 00423000
* DMKLNK108E USERID XXX NOT LINKED; VOLID DSKLAB NOT MOUNTED 00424000
* 00425000
* DMKLNK109E USERID XXX NOT LINKED; INVALID LINK DEVICE 00426000
* 00427000
* DMKLNK111E USERID XXX NOT LINKED; NO READ PASSWORD 00428000
* 00429000
* DMKLNK112E USERID XXX NOT LINKED; NO WRITE PASSWORD 00430000
* 00431000
* DMKLNK113E USERID XXX NOT LINKED; NO MULT PASSWORD 00432000
* 00433000
* DMKLNK116E USERID XXX NOT LINKED; CP DIRECTORY IN USE 00434000
* 00435000
* DMKLNK119E USERID XXX NOT LINKED; INSUFFICIENT FREE STORAGE 00436000
* 00437000
* MESSAGES SENT TO SYSTEM OPERATOR: 00438000
* 00439000
* 'TYPE RADDR LOGON AS USERID USERS = NNN' 00440000
* OR 00441000
* 'TYPE RADDR RECONNECT USERID USERS = NNN' 00442000
*. 00443000
EJECT 00444000
COPY OPTIONS 00445000
COPY LOCAL 00446000
SPACE 3 00447000
DMKLOG CSECT 00448000
SPACE 00449000
DC CL8'DMKLOG' PAGEABLE MODULE IDENTIFIER @V200820 00450000
SPACE 00451000
* ENTRY DMKLOGON LOGON A USER 00452000
* ENTRY DMKLOGOP LOGON THE OPERATOR 00453000
EXTRN DMKLOHON DMKLOG EXTENSION @VMD0130 00454000
SPACE 00455000
EXTRN DMKSCH80,DMKSYSTI,DMKBLDEC @V2B4320 00456000
EXTRN DMKSCHDL @V305535 00457000
EXTRN DMKBLDVM @V305535 00458000
EXTRN DMKSTKCP @V408246 00459000
EXTRN DMKSSSL1,DMKSSSL2,DMKSSSL3 @V60B6B8 00460000
EXTRN DMKDSPCH @V60B6B8 00461000
EXTRN DMKSCNVS @VMI2009 00462000
SPACE 00463000
EXTRN DMKSCNAU,DMKSCNFD,DMKSCNRD,DMKSCNVD,DMKSCNRU,DMKSCNVU 00464000
EXTRN DMKSCNVN,DMKCVTBD,DMKCVTBH,DMKCVTDT @VM08870 00465000
EXTRN DMKBLDRT,DMKCFGII,DMKCQRFI,DMKERMSG,DMKEPSWD @V304635 00466000
EXTRN DMKUDRFU,DMKUDRRD,DMKUDRRV,DMKVDSAT,DMKVDSDF @V200820 00467000
EXTRN DMKUDRMD @V407466 00468000
EXTRN DMKLNKSB,DMKSCHRT,DMKACON @V200820 00469000
EXTRN DMKQCNSY @VA01731 00470000
EXTRN DMKCPINT @VA02064 00471000
EXTRN DMKCVTAB @VA04301 00472000
EXTRN DMKFRERC @V407466 00473000
EXTRN DMKSLC @VA07315 00474000
EXTRN DMKSYSJR,DMKJRLLO @V60BBBB 00475000
EXTRN DMKLOHRC RECONNECT DISC USER @VA13723 00475500
SPACE 00476000
USING PSA,R0 FOR ALL ENTRIES 00477000
USING VMBLOK,R11 " 00478000
USING DMKLOG,R12 " 00479000
USING SAVEAREA,R13 " 00480000
EJECT 00481000
DMKLOGON RELOC LOGON A USER 00482000
SR R2,R2 CLEAR SAVEWRK1 FLAG 00483000
ST R2,SAVEWRK1 ... 00484000
LOG00 DS 0H @V305535 00485000
CALL DMKSCNFD PICK UP USERID FROM THE COMMAND LINE 00492000
BNZ ERROR20 ERROR IF USERID MISSING 00493000
CL R0,F8 WAS USERID > 8 BYTES IN LENGTH ? 00494000
BH ERROR20 TUT-TUT. 00495000
LA R2,SAVEWRK2 POINT TO SCRATCH AREA (BIG ENOUGH@V200820 00496000
CALL DMKUDRFU FIND USERID IN CP DIRECTORY 00497000
BNZ ERROR53 ERROR IF NOBODY EVER HEARD OF THIS GUY. 00498000
USING UDIRBLOK,R2 REFERENCE USER DIRECTORY BLOCK FOR NOW 00499000
CLC UDIRPASS(8),=C'NOLOG ' USER ALLOWED TO LOGON@V200820 00500000
BE ERROR53 MAKE BELIEVE NOT THERE @V305535 00501000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG COMMAND? @V60BBBB 00502000
BNO LOG02 BR IF NOT @V60BBBB 00503000
L R3,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00504000
USING JPSCBLOK,R3 TELL ASSEMBLER @V60BBBB 00505000
TM MASKLOG,L'MASKLOG LOGON/AUTOLOG PSWD SUPPRESS? @V60BBBB 00506000
BZ LOG02 BR IF NOT @V60BBBB 00507000
DROP R3 @V60BBBB 00508000
* R10 STILL POINTS AT VMBLOK OF COMMAND ISSUER. @V60BBBB 00509000
TM VMOSTAT-VMBLOK(R10),VMCF CONSOLE FUNCTION? @V60BBBB 00510000
BZ LOG02 BR IF NOT @V60BBBB 00511000
TM VMOSTAT-VMBLOK(R10),VMVIRCF VIRT. CONS. FUNCT? @V60BBBB 00512000
BZ LOG06F ASSUME FURTHER PARMS ARE FOR @V60BBBB 00513000
* FIRST VM READ. @V60BBBB 00514000
TM VMFSTAT-VMBLOK(R10),VMNPWOCL DOES VM WANT PASS- @V60BBBB 00515000
* WORD SUPPRESSION? @V60BBBB 00516000
BO LOG06F BR IF YES - READ PASSWORD @V60BBBB 00517000
EJECT 00518000
LOG02 EQU * SCAN COMMAND LINE FOR OPTIONS @V200820 00519000
CALL DMKSCNFD LOOK FOR ANOTHER FIELD @V200820 00520000
BNZ LOG06 IF NOT, PROCEED WITH THE MAIN BUSINESS. 00521000
LR R15,R0 BYTE-COUNT LESS 1 INTO R15 (FOR 'EX' USE) 00522000
BCTR R15,0 ... 00523000
CL R15,F7 SHOULDN'T BE MORE THAN 7 NOW 00524000
BH ERROR3 INVALID OPTION 00525000
TM SAVEWRK1,AUTOLOG+PSWRDCK ALOGON COMMAND? @V305535 00526000
BO LOG02B YES, MUST BE PASSWORD. @VM03066 00527000
EX R15,CLCMASK IS IT 'MASK' ? 00528000
BE LOG03 TRF IF YES. 00529000
EX R15,CLCNOIPL OR 'NOIPL' ? 00530000
BE LOG04 YES. 00531000
L R3,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00532000
USING JPSCBLOK,R3 TELL ASSEMBLER @V60BBBB 00533000
TM MASKLOG,L'MASKLOG LOGON PASSWORD SUPPRESS? @V60BBBB 00534000
BZ LOG02B BR IF NOT @V60BBBB 00535000
DROP R3 @V60BBBB 00536000
B ERROR67 GO GIVE ERROR MESSAGE @V60BBBB 00537000
LOG02B DS 0H @V305535 00538000
TM SAVEWRK1,PSWRDOK PASSWORD ENTERED BEFORE ?? 00539000
BO ERROR3 YES, NOT VALID AGAIN 00540000
MVC SAVEWRK8(8),BLANKS BLANK-FILL AND 00541000
EX R15,SAVEPASS SAVE THE PASSWORD 00542000
CLC UDIRPASS,SAVEWRK8 CHECK PASSWORD RIGHT NOW (WHY NOT?) 00543000
BNE LOG05 IF WRONG, MAKE HIM ENTER IT @V60BBBB 00544000
* AS USUAL. @V60BBBB 00545000
ST R10,SAVEWRK8 RE-SAVE AUTOLOG CMD VMBLOK ADDR @VM03066 00546000
OI SAVEWRK1,PSWRDOK SIGNAL CORRECT PASSWORD AVAILABLE 00547000
TM SAVEWRK1,AUTOLOG+PSWRDCK IS THIS AUTOLOG CMD? @VM03066 00548000
BO LOG07 YES, CONT. WITH AUTOLOG PROCESS @VM03066 00549000
B LOG02 NO, GO BACK FOR MORE OPERANDS @VM03066 00550000
* 00551000
LOG03 DS 0H OPTION IS 'MASK' - 00552000
TM SAVEWRK1+1,INHIBIT MASK OPTION ENTERED ALREADY @V200820 00553000
BO ERROR3 YES - ALLOW IT ONLY ONCE @V200820 00554000
OI SAVEWRK1+1,INHIBIT 'MASK' WAS ENTERED @V200820 00555000
L R8,VMTERM IF YES, REFERENCE TERMINAL RDEVBLOK 00556000
USING RDEVBLOK,R8 ... 00557000
CLI RDEVTYPC,CLASSPEC LOGON VIA THE 3705 NCP ? @V200820 00558000
BE LOG03A YES - GO FIND THE NICBLOK @V200820 00559000
CLI RDEVTYPC,CLASTERM TERMINAL-CLASS DEVICE ? @V200820 00560000
BNE LOG02 LET MASK BE ENJOYED BY ALL @V60BBBB 00561000
TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE @V2D3931 00562000
BO LOG03A YES, ... @V2D3931 00563000
OI RDEVSTA3,RDEVATSW PREVENT ATTN DURING SWITCH @VA10462 00563500
SWITCH MAKE SURE WE'RE ON THE IO PROC @V4075A0 00564000
NI RDEVSTA3,X'FF'-RDEVATSW ALLOW ATTN AFTER SWITCH @VA10462 00564500
NI RDEVFLAG,255-RDEVPSUP FLAG TERMINAL: NO PRINT-SUPPRESS 00565000
B LOG02 GET NEXT FIELD IF ANY 00566000
LOG03A EQU * CHECK PRINT SUPPRESS FOR 3705 DEV@V200820 00567000
LH R7,VMTRMID 370X NCP RESOURCE REFERENCE @V200820 00568000
N R7,F4095 EXTRACT THE ACTUAL RESOURCE I.D. @V200820 00569000
MH R7,=AL2(NICSIZE*8) CONVERT TO NICLIST INDEX @V200820 00570000
AL R7,RDEVNICL GR7 = ADDRESS OF TERMINAL NICBLOK@V200820 00571000
USING NICBLOK,R7 ... @V200820 00572000
NI NICFLAG,255-NICPSUP TURN OFF PRINT SUPPRESS@V200820 00573000
B LOG02 GO SCAN FOR ANY FURTHER OPTIONS @V200820 00574000
SPACE 2 00575000
LOG04 DS 0H OPTION IS 'NOIPL' - 00576000
TM SAVEWRK1,NOIPL NOIPL GIVEN BEFORE ?? 00577000
BO ERROR3 YES, CANT DO IT AGAIN 00578000
OI SAVEWRK1,NOIPL SET FLAGBIT: NO AUTOMATIC IPL TODAY 00579000
B LOG02 GET NEXT FIELD IF ANY 00580000
LOG05 MVC SAVEWRK6(L'UDIRPASS),SAVEWRK8 SAVE INVALID @V60BBBB 00581000
* PASSWORD FOR USE IF JOURNALING @V60BBBB 00582000
* IS ON. @V60BBBB 00583000
ST R10,SAVEWRK8 RE-SAVE AUTOLOG COMMAND VMBLOK @V60BBBB 00584000
* ADDRESS. @V60BBBB 00585000
SR R1,R1 SET CC=0 FOR ERROR50 @V60BBBB 00586000
B ERROR50 PASSWORD INCORRECT 00587000
SPACE 2 00588000
LOG06 TM SAVEWRK1,PSWRDOK DO WE NEED TO CHECK A PASSWORD ? 00589000
BO LOG07 TRF IF NOT - ALREADY PROVIDED & CORRECT. 00590000
TM SAVEWRK1,AUTOLOG+PSWRDCK ALOGON COMMAND? @V305535 00591000
BZ LOG06A NO, CALL FOR PASSWORD @V305535 00592000
SR R0,R0 SET CC=0 FOR ERROR50 @VM03066 00593000
MVC SAVEWRK6(L'UDIRPASS),BLANKS CLEAR AREA WHERE @V60BBBB 00594000
* INVALID PASSWORD IS SAVED. @V60BBBB 00595000
B ERROR50 BAD PASSWORD ERROR @V305535 00596000
LOG06A DS 0H @V305535 00597000
L R15,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00598000
USING JPSCBLOK,R15 TELL ASSEMBLER @V60BBBB 00599000
TM MASKLOG,L'MASKLOG LOGON PASSWORD SUPPRESSION ON?@V60BBBB 00600000
BZ LOG06F BR IF NOT @V60BBBB 00601000
DROP R15 @V60BBBB 00602000
TM SAVEWRK1+1,INHIBIT WAS 'MASK' REQUESTED? @V60BBBB 00603000
BZ LOG03 MAKE IT LOOK LIKE IT WAS @V60BBBB 00604000
LOG06F DS 0H @V60BBBB 00605000
LR R9,R11 PRIME R9 @V60BBBB 00606000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG COMMAND? @V60BBBB 00607000
BNO LOG06H BR IF NOT @V60BBBB 00608000
L R1,SAVEWRK8 PASS COMMAND ISSUER'S VMBLOK @VMI0045 00609000
BAL R5,SWVM GO SWITCH VMBLOKS @VMI0045 00610000
LOG06H LA R0,4 R0=4 MEANS GIVE 'ENTER PASSWORD' @V60BBBB 00611000
* MESSAGE AND RETURN ANY INVALID @V60BBBB 00612000
* PASSWORD IN R0/R1. @V60BBBB 00613000
LA R1,UDIRPASS R1 POINTS TO THE CORRECT PASSWORD 00614000
CALL DMKEPSWD ASK FOR PASSWORD NOW 00615000
BALR R15,0 GET THE CONDITION CODE @VMI0070 00616000
ST R15,SAVEWRK9 SAVE IT FOR LATER RESTORATION @VMI0070 00617000
BZ LOG06J GO REMEMBER RC 0 @VMI0045 00618000
STM R0,R1,SAVEWRK6 SAVE POSSIBLE INCORRECT PASSWORD @VMI0045 00619000
LA R5,LOG06L SET BRANCH TO ERROR RTN - PWD IS @VMI0070 00620000
* INCORRECT, OR TERMINAL IS NO GOOD. 00621000
B LOG06K GO SEE IF SWITCH IS NEEDED @VMI0045 00622000
SPACE 00623000
LOG06J EQU * @VMI0045 00624000
LA R5,LOG07 SET BRANCH TO PWD OK PROCESSING @VMI0045 00625000
SPACE 00626000
LOG06K EQU * SET UP AND GO SWITCHVM IF NEEDED @VMI0045 00627000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG COMMAND? VMI0045 00628000
BNOR R5 NO - GO TO PROPER ROUTINE @VMI0045 00629000
LR R1,R9 PASS VMBLOK ADDRESS FOR SWITCHVM @VMI0045 00630000
B SWVM GO DO VMBLOK SWITCH @VMI0045 00631000
* BR R5 EXIT EXECUTED BY SWVM SUBROUTINE 00632000
SPACE 1 @VMI0070 00633000
LOG06L DS 0H @VMI0070 00634000
L R15,SAVEWRK9 GET THE CC FROM DMKEPSWD @VMI0070 00635000
SPM R15 RESTORE IT @VMI0070 00636000
B ERROR50 GO PROCESS THE ERROR @VMI0070 00637000
SPACE 00638000
* 00639000
* CONTINUE - USERID WAS FOUND, AND PASSWORD IS CORRECT: 00640000
* 00641000
LOG07 EQU * START BUILDING VIRTUAL MACHINE @V200820 00642000
LA R0,UDBFSIZE*2+2 GET FREE STORAGE FOR TWO UDBFBLOKS 00643000
CALL DMKFREE PLUS 2 EXTRA WORDS FOR USE BY DMKLNKSB 00644000
LR R9,R1 REMEMBER THE ADDRESS IN R9. 00645000
OI SAVEWRK1,R9FRE SIGNAL: RETURN FREE STORAGE AT EXIT. 00646000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG CMD? @VA09172 00646100
BNZ LOG070AA YES, BYPASS FOLLOWING CHECKS @VA09172 00646200
CALL DMKQCNSY FINISH UP ALL CONSOLE REQUESTS @VA09172 00646300
L R8,VMTERM GET TERMINAL RDEVBLOK ADDRESS @VA09172 00646400
LTR R8,R8 TERMINAL STILL THERE? @VA09172 00646500
BZ LOGEXIT NO, ABORT LOGON @VA09172 00646600
LOG070AA DS 0H @VA09172 00646700
LA R0,8 POINT TO 8-BYTE USERID 00647000
LA R1,UDIRUSER ... 00648000
CALL DMKSCNAU SEE IF THIS USERID IS ACTIVE 00649000
BC 4,LOG10 CC 1 = NOT LOGGED ON AT ALL (GOOD) 00650000
BC 1,ERROR54 CC 3 = IN LOGOFF STATE (TREAT AS ACTIVE) 00651000
TM SAVEWRK1,AUTOLOG AUTOLOG COMMAND? @V305535 00652000
BO ERROR54 YES, RETURN ERROR MESSAGE @V305535 00653000
TM VMOSTAT-VMBLOK(R1),VMDISC IF ACTIVE, IS HE DISCONNECTED? 00654000
BZ ERROR54 ERROR IF NOT - REALLY LOGGED IN ELSEWHERE 00655000
TM VMOSTAT-VMBLOK(R1),VMCF ALREADY IN CONSOLE FUNC?@VA02849 00656000
BZ LOG070A NO, CONTINUE NORMALLY @VA02849 00657000
TM VMQSTAT-VMBLOK(R1),VMCFREAD DID HE HAVE READ UP?@VA02849 00658000
BO LOG070A YES, CONTINUE NORMALLY @VA02849 00659000
OI SAVEWRK1,EXECF REMEMBER HE WAS IN C.F. AT ENTRY @VA02849 00660000
LOG070A EQU * @VA02849 00661000
LTR R8,R8 Logon user's term avail?HRC065DK 00661020
BZ LOG070A1 No, skip LDEV checks HRC065DK 00661040
TM RDEVADD,RDEVLDEV Is user trying to HRC065DK 00661060
BZ LOG070A1 logon via LDEV? No... HRC065DK 00661080
PUSH USING HRC065DK 00661100
USING LDEVBLOK,R8 HRC065DK 00661120
C R1,LDEVUSER Is LDEV user trying to HRC065DK 00661140
* connect to LDEV creator?HRC065DK 00661160
BE ERROR66 Yes, this is not allowedHRC065DK 00661180
POP USING LDEVBLOK HRC065DK 00661200
LOG070A1 EQU * HRC065DK 00661220
SPACE 1 00662000
* TAKE NECESSARY STEPS TO RECONNECT A DISCONNECTED USER: 00663000
NI VMSVSTAT,X'FF'-VMLGHOLD RESET HOLD FLAG HRC029DK 00663500
OI SAVEWRK1,RECON FLAG PERFORMING A RECONNECT. 00664000
LR R10,R1 "OLD" VMBLOK ADDRESS INTO R10 00665000
EJECT 00666000
* GET RID OF R11 VMBLOK IN FAVOR OF R10 (DISCONNECTED/OPERATOR) VMBLOK: 00667000
* NOTE - WE KNOW THERE ARE AT LEAST 2 VMBLOKS (R10 & R11) IN THE CHAIN 00668000
LOG07A DS 0H @VA13723 00669000
L R2,SAVEWRK1 LOAD STATUS BITS FOR DMKLOHRC @VA13723 00679000
LR R1,R10 ADDR OF DISCONNECTED VMBLOK @VA13723 00689000
CALL DMKLOHRC GO RECONNECT THE USER @VA13723 00699000
ST R11,SAVER11 PASS RETURNED VMBLOK TO CALLER @VA13723 00709000
B *+4(R1) BRANCH ON RETURN CODE @VA13723 00719000
B LOG50 RC=0, CONTINUE RECONNECT @VA13723 00729000
B LOGEXIT RC=4, TERMINAL GONE, ABORT @VA13723 00739000
B 0(R6) RC=8, OPERATOR IS LOGGING ON @VA13723 00749000
DROP R7,R8 @VA13723 00759000
EJECT 00781000
* USERID IN DIRECTORY, PASSWORD CORRECT, & NOT LOGGED ON ELSEWHERE: 00782000
LOG10 DS 0H @V408246 00783000
TM SAVEWRK1,AUTOLOG AUTO LOGON? @V408246 00784000
BZ B1 NO @V408246 00785000
TM SAVEWRK1,PSWRDCK ALOGON COMMAND? @V408246 00786000
BZ LOG10A NO, MUST BE OPERATOR LOG @V408246 00787000
B1 EQU * @V408246 00788000
L R10,ASYSOP A(OPERATOR VMBLOK) HRC018DK 00788100
CLR R10,R11 SAME AS THIS ONE? HRC018DK 00788200
BE LOG10A YES,ALWAYS ALLOW HIM ON HRC018DK 00788300
L R1,ASYSLC IF NOT, REFERENCE SYSLOCS INFORMATION 00789000
USING SYSLOCS,R1 ... 00790000
LM R14,R15,DMKSYSNM GET NO. USERS & NO. ALLOWED ON 00791000
LTR R15,R15 0 MEANS NO LIMIT 00792000
BZ LOG10A ... 00793000
CLR R14,R15 OTHERWISE, CHECK AGAINST LIMIT 00794000
BNL ERROR51 ERROR IF MAXIMUM USERS EXCEEDED 00795000
DROP R1 00796000
LOG10A MVC VMUSER,UDIRUSER CORRECT USERID TO VMBLOK NOW, COACH. 00797000
MC 4,1 TELL MONITOR ABOUT NEW USER @V4075A0 00798000
USING UDBFBLOK,R9 ACCESS THE UDBFBLOK NOW 00799000
LOG11 MVC UDBFVADD(8),ZEROES CLEAR LAST DBL-WORD FOR UDR ROUTINES 00800000
DROP R9 00801000
LA R1,UDIRDISP POINT TO INFO. FROM PREVIOUS UDRFU CALL 00802000
LR R2,R9 R2 POINTING TO FREE STORAGE BLOCK 00803000
DROP R2 (UDIRBLOK ADDRESSABILITY GONE NOW) 00804000
CALL DMKUDRMD READ IN UMACBLOK @V407466 00805000
BNZ ERROR52 FATAL TROUBLE IF ERROR - CAN'T LOG ON 00806000
USING UMACBLOK,R9 00807000
TM UMACAFF,UMACFFON IS AFFINITY SPECIFIED? @V4075A0 00808000
BZ NOAFF @V4075A0 00809000
CLC UMACAFF,LPUADDR+1 FOR OUR PROCESSOR? @V4075A0 00810000
BNE AFFOTH @V4075A0 00811000
TM APSTAT1,APUOPER ARE WE IN AP MODE? @V4075A0 00812000
BO SETAFF YES, SET AFFINITY @V4075A0 00813000
B LOGMS189 WE HAVE IT, BUT WE'RE IN UP MODE @V4075A0 00814000
AFFOTH TM APSTAT1,APUOPER ANY OTHER PROCESSORS? @V4075A0 00815000
BZ LOGMS188 NOT AP + WE DON'T HAVE IT @V4075A0 00816000
CLC UMACAFF,LPUADDRX+1 IS IT OTHER PROCESSOR ? @V4075A0 00817000
BNE LOGMS188 NO, WE JUST DON'T HAVE IT @V4075A0 00818000
SETAFF MVC VMAFF,UMACAFF AP + WE HAVE IT! @V4075A0 00819000
NOAFF EQU * @V4075A0 00820000
SPACE 1 @V4075A0 00821000
ICM R15,B'0011',=XL2'320A' HRC101DK 00821300
STH R15,VMMORETM SET DEFAULT TIMES FOR CRT HRC101DK 00821600
L R15,UMACLEND THE FOUR TERMINAL CODES INTO R15 00822000
CLI UMACLEND,X'FF' IS LINE-END DEFAULT ? 00823000
BE *+8 IF YES, LEAVE IT. 00824000
STCM R15,B'1000',VMTLEND SET LINE END CHARACTER @V200820 00825000
CLI UMACLDEL,X'FF' IS LINE-DELETE DEFAULT ? 00826000
BE *+8 IF YES, LEAVE IT. 00827000
STCM R15,B'0100',VMTLDEL SET LINE DELETE CHARACT@V200820 00828000
CLI UMACCDEL,X'FF' IS CHARACTER-DELETE DEFAULT ? 00829000
BE *+8 IF YES, LEAVE IT. 00830000
STCM R15,B'0010',VMTCDEL SET CHARACTER DELETE @V200820 00831000
CLI UMACES,X'FF' IS ESCAPE-CHARACTER DEFAULT ? 00832000
BE *+8 IF YES, LEAVE IT. 00833000
STC R15,VMTESCP SET ESCAPE CHARACTER @V200820 00834000
TM VMOSTAT,VMDISC VMBLOK DISCONNECTED? @V408246 00835000
BO LOG11B YES, NO REAL TERMINAL DEVICE @V408246 00836000
* BLOCK 00837000
SPACE 2 00838000
TM UMACCLEV,UMACCLA CLASS A = SYSTEM OPERATOR CLASS ? 00839000
BZ LOG11B TRF IF NOT, PROCEED AS USUAL. 00840000
L R10,ASYSOP IF YES, ACCESS OPERATOR'S VMBLOK, 00841000
CLR R10,R11 SAME AS THE ONE WE ARE HANDLING ? 00842000
BE LOG11A TRF IF YES, PROCEED AS USUAL. 00843000
L R1,VMTERM-VMBLOK(,R10) NO, CHECK OPERATOR'S TERMINAL 00844000
LTR R1,R1 IF IT'S THERE, HE'S ALREADY IN BUSINESS 00845000
BNZ LOG11B TRF IF HE HAS ONE - PROCEED AS USUAL. 00846000
TM VMOSTAT-VMBLOK(R10),VMDISC IS THE OPERATOR DISCONNECT 00847000
BO LOG11B YES -- LEAVE WELL ENOUGH ALONE 00848000
MVC VMUSER-VMBLOK(8,R10),VMUSER MAKE SURE USERID FILLED IN 00849000
MVC VMTLEND-VMBLOK(4,R10),VMTLEND FILL IN TERM CODE @VA01886 00850000
L R7,VMPNT GET PNTR TO NEXT VMBLOK FROM R11 VMBLOK 00851000
ST R10,VMPNT PATCH CHAIN TO INCLUDE OPERATOR'S VMBLOK 00852000
ST R7,VMPNT-VMBLOK(,R10) AND ... 00853000
* USER FROM RECONNECTING 00854400
CALL DMKQCNSY FINISH UP ALL CONSOLE REQUESTS @VA09172 00854500
BAL R6,LOG07A CONTINUE CONNECT PROCESSING @VA13723 00854600
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG CMD? @VA05283 00855000
BNO LOG11A NO--CONTINUE @VA05283 00856000
OI VMOSTAT,VMDISC SHOULD BE DISCONNECTED @VA05283 00857000
LOG11A DS 0H @V305535 00858000
* CONTINUE HANDLING UMACBLOK: 00859000
LOG11B MVC VMCLEVEL(1),UMACCLEV SAVE COMMAND LEVEL, 00860000
MVC VMHRCPRV,UMACCLEV SAVE FOR SET PRIV FUNCTION HRC018DK 00860100
MVC VMUPRIOR(1),UMACPRIR SET USER PRIORITY @V200820 00861000
TM UMACOPT,UMACISAM ISAM CCW CHECKING OPTION ? 00862000
BZ *+8 NOPE. 00863000
OI VMPSTAT,VMISAM YES, SET FLAGBIT IN VMBLOK 00864000
TM UMACOPT,UMACBMX VIRTUAL BLOCK MULTIPLEXER @VA01771 00865000
* CHANNELS 00866000
BZ *+8 NO - @VA01771 00867000
OI VMFSTAT,VMFBMX YES - SET FLAG BIT IN VMBLOK @VA01771 00868000
TM UMACOPT2,UMADLNKN LINK NO PASS OPTION ON ? HRC011DK 00868200
BZ *+8 NO - HRC011DK 00868400
OI VMFSTAT,VMFDLNKN YES,SET FLAG BIT IN VMBLOK HRC011DK 00868600
TM UMACOPT,UMACVROP VIRT=REAL OPTION 00869000
BZ LOG12 NOPE. 00870000
OI VMPSTAT,VMREAL YES, SET FLAGBIT IN VMBLOK 00871000
LOG12 EQU * 00872000
XC VMPERCTL(4),VMPERCTL CLEAR PER BLOCK POINTER PER001 00872100
MVI VMPERFLG,X'00' CLEAR PER FLAGS PER001 00872200
TM UMACOPT,UMACACC IS THE ACCOUNTING OPTION ON ? 00873000
BZ LOG12A NO, GO CHECK FOR EXTENDED MODE 00874000
OI VMPSTAT,VMACCOUN SET THE ACCOUNTING FLAG IN THE VMBLOK 00875000
XC VMACOUNT(4),VMACOUNT CLEAR THE ACCOUNTING BLOCK PTR. 00876000
LOG12A EQU * 00877000
TM UMACOPT,UMACECOP EXTENDED CONTROL MODE OPTION ? 00878000
BZ LOG13 NO, DON'T ALLOCATE ECBLOK 00879000
CALL DMKBLDEC BUILD AND INITIALIZE AN ECBLOK @V2B4320 00880000
B LOG14 CONTINUE 00881000
LOG13 EQU * NOT EC-MODE MACHINE 00882000
LA R1,X'E0' RESET VALUE FOR C-REG 0 00883000
ST R1,VMVCR0 SET IN VMBLOK 00884000
LOG14 MVI VMTLEVEL,VMTON DEFAULT TO: VIRTUAL TIMER RUNNING 00885000
TM UMACOPT,UMACNSVC SVCOFF OPTION? @VM08550 00886000
BO LOG14C YES, BRANCH @VM08550 00887000
OI VMESTAT,VMMICSVC INDICATE VM ASSIST DO SVCS @VM08550 00888000
LOG14C EQU * @VM08550 00889000
TM UMACOPT,UMACRT REAL TIMER OPTION? @VM08550 00890000
BZ LOG15 NOPE. 00891000
MVI VMTLEVEL,VMRON YES, FLAG VIRTUAL REAL TIMER RUNNING 00892000
LA R0,TRQBSIZE GET SIZE OF TRQBLOK 00893000
CALL DMKFREE AND GET ONE 00894000
ST R1,VMTRQBLK FOR THE REAL TIMER 00895000
USING TRQBLOK,R1 00896000
XC TRQBLOK(TRQBSIZE*8),TRQBLOK CLEAR IT 00897000
ST R11,TRQBUSER SET UP USER'S ADDRESS 00898000
MVC TRQBIRA,=A(DMKSCH80) IRA FOR REAL TIMER 00899000
DROP R1 00900000
LOG15 MVC VMACNT,UMACACCT SAVE ACCOUNTING INFORMATION 00901000
MVC VMDIST,UMACDIST SAVE DISTRIBUTION CODE 00902000
LOG15B TM UMACOPT2,UMACCPU CPUID PRESENT IN UMACBLOK? @V407466 00903000
BZ PSACPUID NO, GET CPU SERIAL FROM PSA @V407466 00904000
MVC VMCPUID,UMACPUID MOVE CPUID TO VMBLOK @V407466 00905000
NAMESYS MVC SAVEWRK2(8),UMACIPL SAVE NAME OF SYS TO BE IPL'D@V407466 00906000
CLC SAVEWRK2(8),BLANKS IS IT ALL BLANK ? 00907000
BNE LOG16 NOPE - SOMETHING THERE. 00908000
OI SAVEWRK1,NOIPL FORCE 'NOIPL' IF IT WAS ALL BLANK. 00909000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG COMMAND? @VM03066 00910000
BNO LOG16 NOPE, VANILLA OR SYS OP FROM CPI @VM03066 00911000
LA R0,8+12 LENGTH OF SUBSTITUTABLE DATA @VM03066 00912000
LA R1,MSG059A POINT TO START OF ERRTEXT @VA05368 00913000
MVC MSG059A(8),VMUSER INSERT USERID @VA05368 00914000
LR R2,R9 POINT R2 AT VIRT PAGE FOR UDR @VA08817 00915000
CALL DMKUDRRV GIVE IT BACK @VA08817 00916000
B ERROR59 GO PROCESS THE MESSAGE @VM03066 00917000
PSACPUID MVC VMCPUID,CPUID+1 MOVE CPUID SERIAL FROM PSA @V407466 00918000
TM APSTAT1,PROCIO DID WE GET THE IOP'S CPUID? @V4075A0 00919000
BO NAMESYS YES @V4075A0 00920000
L R1,PREFIXB FIND THE IOP'S PSA @V4075A0 00921000
MVC VMCPUID,CPUID+1-PSA(R1) TO PICK UP ITS CPUID @V4075A0 00922000
B NAMESYS CK FOR 'NAMED SYSTEM' TO BE IPL'D@V407466 00923000
LOG18 C R0,=F'512' MORE THAN 512 DW REQUESTED? @V407466 00924000
BNH ERROR131 NO, ISSUE DMKLOG131E MESSAGE @V407466 00925000
* TRY TO REACQUIRE STORAGE THIS TIME REQUESTING ONLY 1 PAGE 00926000
* OF STORAGE (512 DW.) 00927000
LA R0,CON512 512 DOUBLEWORDS @V407466 00928000
B ACQUIREF GO CALL DMKFRERC @V60B6B8 00929000
LOG16 L R1,UMACCORE PICK UP CORE SIZE 00930000
ST R1,VMSIZE STORE IN VMBLOK 00931000
ST R1,VMSTOR ALSO SAVE HERE @V304635 00932000
SRL R1,12 BEGIN/ENDING STORAGE SIZE @V304635 00933000
BCTR R1,R0 MINUS 1 PAGE @V304635 00934000
LA R2,NEWSEGS+VRALOC BLD PARMS @V408246 00935000
TM VMPSTAT,VMREAL V=R VMBLOK? @V408246 00936000
BZ *+8 NO @V408246 00937000
LA R2,NEWPAGES(,R2) YES, BUILD ALL TABLES @V408246 00938000
CALL DMKBLDRT @V408246 00939000
* MAKE UP A DEVICE TABLE OF DUMMY (UNUSED) DEVICE BLOCKS: 00940000
LH R3,UMACDVCT DEVICE-COUNT INTO R3 (FROM UMACBLOK) 00941000
STH R3,VMDVCNT STORE IN VMBLOK 00942000
L R4,FFS FFFFFFFF INTO R4 00943000
LA R1,VDEVSIZE SIZE OF ONE VDEVBLOK (DBL WORDS) INTO R1 00944000
MR R0,R3 R1 (SIC) TIMES R3 INTO R0-R1 00945000
LR R0,R1 NO. DBL WORDS FOR VDEVBLOK TABLE INTO R0 00946000
ACQUIREF CALL DMKFRERC ACQUIRE STORAGE @V60B6B8 00947000
BNZ LOG18 INSUFFICIENT FREE STORAGE @V407466 00948000
ST R1,VMDVSTRT STORE TABLE ADDRESS IN VMBLOK 00949000
USING VDEVBLOK,R1 00950000
LA R0,VDEVSIZE*8 SIZE OF ONE VDEVBLOK IN BYTES INTO R0 00951000
LOG17 STH R4,VDEVADD SET ADDRESS HALFWORD TO FFFF. 00952000
ALR R1,R0 BUMP R1 TO NEXT BLOCK 00953000
BCT R3,LOG17 ITERATE THRU VDEVBLOKS IN TABLE. 00954000
DROP R1 00955000
* MAKE UP A CONTROL UNIT TABLE OF DUMMY (UNUSED) VCUBLOKS: 00956000
LA R3,3 DEFAULT TO THREE VCUBLOKS 00957000
STH R3,VMCUCNT STORE IN VMBLOK 00958000
LA R0,VCUSIZE*3 GET A TABLE OF THREE VCUBLOKS 00959000
CALL DMKFRERC ACQUIRE FREE STORAGE @V407466 00960000
BNZ ERROR131 NOT OBTAINED, ISSUE DMKLOG131E @V407466 00961000
ST R1,VMCUSTRT STORE TABLE ADDRESS IN VMBLOK 00962000
USING VCUBLOK,R1 00963000
STH R4,VCUADD SET ADDRESS HALFWORDS TO FFFF 00964000
STH R4,VCUADD+(VCUSIZE*8) ... 00965000
STH R4,VCUADD+(VCUSIZE*16) ... 00966000
DROP R1 00967000
* MAKE UP A CHANNEL TABLE OF DUMMY (UNUSED) VCHBLOKS: 00968000
LA R3,2 DEFAULT TO TWO VCHBLOKS 00969000
STH R3,VMCHCNT STORE IN VMBLOK 00970000
LA R0,VCHSIZE*2 GET A TABLE OF TWO VCHBLOKS 00971000
CALL DMKFRERC ACQUIRE FREE STORAGE @V407466 00972000
BNZ ERROR131 NOT OBTAINED, ISSUE DMKLOG131E @V407466 00973000
ST R1,VMCHSTRT STORE TABLE ADDRESS IN VMBLOK 00974000
USING VCHBLOK,R1 00975000
STH R4,VCHADD SET ADDRESS HALFWORDS TO FFFF 00976000
STH R4,VCHADD+(VCHSIZE*8) ... 00977000
DROP R1 00978000
DROP R9 THRU WITH UMACBLOK 00979000
* CONTINUE ... 00980000
EJECT 00981000
USING UDEVBLOK,R9 USE UDEVBLOK FROM NOW ON: 00982000
LA R10,UDBFSIZE*8(,R9) LET R10 POINT TO 'EXTRA' UDBFBLOK 00983000
* (NOTE - R10 AREA ALSO USED FOR FILLED-IN MESSAGES) 00984000
* 00985000
* READ UDEVBLOKS, AND FILL IN ALL NECESSARY INFORMATION: 00986000
* 00987000
LOG20 LA R1,UDEVDISP R1 POINTS TO DISPLACEMENT OF NEXT BLOCK 00988000
LR R2,R9 R2 POINTS TO UDEVBLOK TO BE READ 00989000
CALL DMKUDRRD READ IN NEXT UDEVBLOK 00990000
BNZ LOG49 STOP READING IF "EOF" (CC NOT ZERO) 00991000
OI SAVEWRK1,NONFATAL OK - ANY ERRORS NONFATAL FROM NOW ON 00992000
OI VMSPMFLG,VMLOGON2 INDICATE VDEV GOTTEN ON LOGON @VA13304 00992500
LH R3,UDEVADD VIRTUAL DEVICE ADDRESS INTO R3 00993000
LR R1,R3 VIRTUAL DEVICE INTO R1, 00994000
CALL DMKSCNVU SEE IF WE ALREADY HAVE IT 00995000
BZ ERROR92 SUCCESS FROM DMKSCNVU = REALLY FAILURE 00996000
TM UDEVSTAT,UDEVLONG+UDEVLKDV FULL-SIZE OR LINKED-TO DASD ? 00997000
BNZ LOG26 TRF IF YES (EITHER ONE). 00998000
SPACE 00999000
* INITIALIZE APPROPRIATELY FOR NON-DASD DEVICE: 01000000
* 01001000
TM UDEVSTAT,UDEVDED IS THIS A 'DEDICATED' DEVICE ? 01002000
BO LOG24 YES. 01003000
CLI UDEVTYPC,CLASTERM TERM TYPE ?? 01004000
BNE LOG21 NO, CONT 01005000
CLI UDEVTYPE,TYP1052 IS IT A CONSOLE ?? 01006000
BNE LOG21 NO, CONT 01007000
LH R8,VMVTERM VIRTUAL CONSOLE REFERENCE @V200820 01008000
LTR R8,R8 IS THERE ALREADY A CONSOLE ? @V200820 01009000
BM LOG21 NO -- O.K. TO DEFINE ONE @V200820 01010000
AL R8,VMDVSTRT GET THE VDEVBLOK ADDRESS @V200820 01011000
CALL DMKSCNVD GET VADDR CCU FORM FOR MESSAGE @VA04098 01012000
LOG20A MVC 0(12,R10),ZEROES CLEAR OUT 12 BYTE ERR MSG AREA @VA04098 01013000
CALL DMKCVTBH CONVERT VADDR FROM BINARY TO HEX @VA04098 01014000
STCM R1,7,9(R10) STORE IN ERROR MSG AREA 01015000
LR R1,R3 NOW GET THE "OTHER" VADDR 01016000
CALL DMKCVTBH BINARY TO HEX, AND GO 01017000
B ERROR92J FILL IN REMAINING FIELDS FOR ERROR 92. 01018000
LOG21 DS 0H 01019000
CALL DMKVDSDF DMKVDSDF 'DEFINES' ALL OTHER DEVICES 01020000
BZ LOG20 IF SUCCESSFUL, GO HANDLE NEXT DEVICE. 01021000
* ERROR FROM DMKVDSDF: 01022000
CH R2,=H'32' INSUFFICIENT FREE STORAGE @V407466 01023000
BE ERROR95 YES, MSG DMKLOG095E @V407466 01024000
TM UDEVSTAT,UDEVTDSK WAS IT A T-DISK WE DIDN'T GET ? 01025000
BO ERROR91 YES - ERROR 91. 01026000
B ERROR93 NO - ERROR 93 (ALL OTHERS). 01027000
SPACE 01028000
LOG24 DS 0H ATTACH A DEDICATED DEVICE: 01029000
LH R1,UDEVLINK GET REAL DEV ADDRESS 01030000
XC SAVEWRK9,SAVEWRK9 CLEAR A FLAG FIELD @VA11344 01030500
* 01031000
* TEST THE VARIOUS COMBINATIONS THAT INDICATE THAT 01032000
* MSS ACTIVITY MAY BE REQUIRED. IF SO, CALL THE 01033000
* APPROPRIATE ENTRY POINT IN DMKSSS. 01034000
* 01035000
LTR R1,R1 WAS AN 'RADDR' SPECIFIED @V60B6B8 01039000
BM NORADDR NO, CHECK FOR VOLSER @VA11411 01040010
CLI UDEVVSER,BLANK IS THERE AN 'RADDR' AND 'VOLSER' @V60B6B8 01041000
BE LOGDEV 'RADDR',NO VOLSER @VA10511 01042000
TM UDEVFTR,VIRTUAL VIRTUAL MACHINE WANTS VUA @VA10511 01042500
BO CALLMSSA CALL DMKSSSL1 @VA10511 01043000
B CALLMSSB CALL DMKSSSL2 @VA10511 01043500
NORADDR EQU * NO RADDR GIVEN @VA10511 01044000
TM UDEVFTR,VIRTUAL VIRTUAL MACHINE WANTS VUA @VA10511 01044500
BO ERROR93 DIRECTORY ERROR @VA10511 01045000
CLI UDEVVSER,BLANK IS 'VOLSER' FIELD BLANK? @V60B6B8 01046000
BNE FINDVOL NO, LOOK FOR MOUNTED VOLUME @V60B6B8 01047000
B ERROR93 DIRECTORY ERROR, @V60B6B8 01048000
FINDVOL EQU * TRY TO FIND MOUNTED VOLUME @V60B6B8 01049000
L R5,ARIODV LOAD 1ST RDEVBLOK ADDRESS @VA04098 01050000
L R14,ARIODC LOAD RDEVBLOK COUNT ADDRESS @VM08870 01051000
LH R14,0(,R14) LOAD COUNT OF REAL DEVICE BLOCKS @VM08870 01052000
USING RDEVBLOK,R5 ADDRESS THE RDEVBLOK @VA04098 01053000
VOLSERLP TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR DEDICATED ?@VM08870 01054000
BNZ NXTRBLOK YES - CHECK NEXT @VM08870 01055000
TM RDEVFLAG,RDEVSYS+RDEVOWN SYSTEM OR SYSOWNED ? @VM08870 01056000
BNZ NXTRBLOK YES - CHECK NEXT @VM08870 01057000
CLC RDEVSER,UDEVVSER DO THE SERIAL NUMBERS MATCH ? @VM08870 01058000
BE CHK3330V YES, TO CHECK FOR 3330V @V60B6B8 01059000
NXTRBLOK LA R5,RDEVSIZE*8(,R5) POINT TO NEXT RDEVBLOK @VA04098 01060000
BCT R14,VOLSERLP LOOP IF MORE BLOCKS @VM08870 01061000
B CALLMSSC SEE IF WE CAN MOUNT A 3330V @V60B6B8 01062000
LOGDEV CALL DMKSCNRU FIND REAL DEV BLOK 01063000
BNZ ERROR90 GIVE ERROR MESSAGE IF NOT FOUND. 01064000
LR R5,R8 GET RDEVBLOK ADDR INTO R5 @VA11344 01064100
TM RDEVFTR,VIRTUAL THIS AN MSS VIRTUAL VUA? @VA11344 01064200
BZ CHK3330V NO - THEN DON'T TURN OFF FLAG @VA11344 01064300
L R5,F4 PUT 'TURN OFF MTD-BY-CP FLAG' @VA11344 01064400
ST R5,SAVEWRK9 INDICATOR INTO FLAG FIELD @VA11344 01064500
LR R5,R8 RDEVBLOK ADDR TO R5 @VA04098 01065000
CHK3330V EQU * RDEVBLOK FOUND, IS IT 3330V @V60B6B8 01066000
CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT 3330 @V60B6B8 01067000
BNE CHK05 NO, NO FURTHER TESTING @V60B6B8 01068000
CLI UDEVVSER,BLANK WAS A VOLSER SPECIFIED @V60B6B8 01069000
BNE TSTDED YES @V60B6B8 01070000
TM RDEVFTR,SYSVIRT IS IT SYSVIRT @V60B6B8 01071000
BO ERROR93 YES, ERROR, CAN NOT DEDICATE @V60B6B8 01072000
TM RDEVFTR,VIRTUAL USER VIRTUAL? @V60B6B8 01073000
BZ CHK05 NO, PLAIN 3330 @V60B6B8 01074000
TSTDED EQU * @V60B6B8 01075000
TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE, DEDICATED? @V60B6B8 01076000
BNZ ERROR90 YES, THIS USER CAN'T HAVE @V60B6B8 01077000
B SETVDS GO DO THE ATTACH @V60B6B8 01078000
CHK05 CLC RDEVTYPC(2),=AL1(CLASDASD,TYP2305) IS IT A 2305 @VA04098 01079000
BNE SETVDS NO, GO DIRECTLY TO DMKVDS @VA04098 01080000
TM UDEVADD+1,X'07' IS VIRT ADDR A BASE ADDR? @VA04098 01081000
BNZ ERROR93 NO, SOMEBODY GOOFED IN DIRECTORY @VA04098 01082000
TM RDEVADD+1,X'07' IS REAL ADDR A BASE ADDR? @VA04098 01083000
BNZ ERROR93 NOPE, ALSO DIRECTORY ERROR @VA04098 01084000
LH R1,UDEVADD GET BASE ADDRESS @VA04098 01085000
LA R4,8 LOOP COUNT FOR ALL 8 EXPOSURES @VA04098 01086000
PRESCAN CALL DMKSCNVU CHECK FOR EXISTANCE OF ALL 8 EXPS@VA04098 01087000
BZ LOG20A BAD NEWS, GO SET UP ERROR MSG @VA04098 01088000
NXTADD LA R1,1(R1) INCREMENT TO NEXT EXPOSURE @VA04098 01089000
BCT R4,PRESCAN KEEP LOOKING. @VA04098 01090000
SETVDS DS 0H @VA11344 01091000
CLC SAVEWRK9(4),F4 WE NEED TO TURN OFF 'MTD-BY-CP'? @VA11344 01091100
BNE SETVDS1 NO - THEN DON'T DO IT! @VA11344 01091200
NI RDEVFLAG,X'FF'-RDEVVMNT ELSE TURN IT OFF @VA11344 01091300
SETVDS1 DS 0H @VA11344 01091400
LR R1,R5 BASE RDEVBLOK TO R1 FOR VDS @VA11344 01091500
DROP R5 NO MORE RDEVBLOK @VA04098 01092000
SPACE 01093000
LOGATT CALL DMKVDSAT ATTACH DEVICE 01094000
BNZ NOCHEK NO NEED TO CHECK @VA11558 01095100
TM UDEVFTR,VIRTUAL IS 3330V PARM NEEDED @VA11558 01095175
BNO LOG20 NO @VA11558 01095250
LH R1,UDEVADD GET VIRTUAL DEVICE ADDRESS @VA11558 01095325
CALL DMKSCNVU @VA11558 01095400
OI VDEVFLG2-VDEVBLOK(R8),VDEVVIRT CYL FAULT TO USER@VA11558 01095475
OI RDEVFLAG-RDEVBLOK(R5),RDEV333V DED AS 3330V @VA11558 01095550
B LOG20 GET NEXT DEVICE @VA11558 01095625
NOCHEK EQU * @VA11558 01095700
CH R2,=H'32' INSUFFICIENT FREE STORAGE @V407466 01096000
BE ERROR95 YES, MSG DMKLOG095E @V407466 01097000
B ERROR90 ERROR IF ATTEMPTED ATTACH FAILED. 01098000
SPACE 01099000
* FULL-SIZE BLOCK OR LINKED-TO DEVICE MEANS IT'S A DASD DEVICE: 01100000
* 01101000
LOG26 DS 0H 01102000
LA R7,VMUSER LET R7 POINT TO MY USERID NAME 01103000
IC R5,UDEVMODE PICK UP BYTE CONTAINING THE LINK-MODE 01104000
LA R15,31 SET TO ISOLATE THE LOW-ORDER 5 BITS 01105000
NR R5,R15 GET THE LINK-MODE NO. (0, 4, 8, ETC.) 01106000
LR R2,R3 R2 = R3 = LINK-TO = LINK-AS DEVICE 01107000
TM UDEVSTAT,UDEVLKDV IS THIS AN 'INDIRECT LINK' 01108000
BZ LOG30 IF NOT, ALL INFO IS OK AS IS. 01109000
LH R2,UDEVLINK IF YES, LINK-TO DEVICE INTO R2, 01110000
LA R7,UDEVLKID AND LET R7 POINT TO OWNER'S USERID 01111000
LOG30 MVC 0(UDEVSIZE*8,R10),0(R9) MOVE UDEVBLOK TO ALTERNATE AREA 01112000
DROP R9 01113000
LM R0,R1,0(R7) USERID OF DISK-OWNER INTO R0-R1, 01114000
* LINK-TO DEVICE ALREADY IN R2 01115000
* LINK-AS DEVICE ALREADY IN R3, 01116000
LR R4,R10 UDEVBLOK ADDRESS INTO R4, 01117000
* DESIRED LINK-MODE INDEXER ALREADY IN R5, 01118000
CALL DMKLNKSB CALL "LINK SUBROUTINE" TO DO THE WORK 01119000
B LOG20 NOW GO GET THE NEXT DEVICE (IF ANY). 01120000
EJECT 01121000
* 01122000
* THE FOLLOWING ROUTINES ARE CALLED IF THERE IS A 01123000
* POSSIBILITY THAT MSS ACTIVITY IS REQUIRED. 01124000
* 01125000
* CALLMSSA: THE UDEVBLOK INDICATES THAT THE 'VADDR' 01126000
* IS TO BE A 3330V. CALL DMKSSS TO PROCESS THE 01127000
* OTHER PARAMETERS. IF AN ERROR ON RETURN, 01128000
* ISSUE MSG 090, ELSE GET NEXT DEVICE. 01129000
* 01130000
* CALLMSSB: THE 'RADDR' AND 'VOLSER' WERE BOTH 01131000
* SPECIFIED. THIS HAS TO BE AN MSS REQUEST. 01132000
* CALL DMKSSS. 01133000
* 01134000
* CALLMSSC: THE 'VOLSER' WAS SPECIFIED BUT NO 'RADDR'. 01135000
* THE VOLSER IS NOT MOUNTED. TEST TO SEE IF 01136000
* IT IS AN MSS VOLUME. 01137000
* 01138000
CALLMSSA EQU * DEDICATE A VUA TO USER @V60B6B8 01139000
BAL R4,SAVUDEV SAVE CURRENT UDEVBLOK @V60B6B8 01140000
TM PSAMSS,MSSPRES IS MSS PRESENT IN THIS SYSTEM? @VA09319 01140010
BZ ERROR90 NO,INDICATE DEVICE NOT AVAIL. @VA09319 01140020
CALL DMKSSSL1 PROCESS MSS REQUESTS @V60B6B8 01141000
CHKMSSRC EQU * TEST RETURN CODE FROM DMKSSS @V60B6B8 01142000
LTR R0,R0 WAS IT SUCCESSFUL @V60B6B8 01143000
BNZ MSSMOUNT NO, TEST FOR ERROR OR MOUNT IN @V60B6B8 01144000
* PROCESS 01145000
RDEVRDY EQU * RDEVICE HAS MOUNTED SYSTEM VOL @VMI2018 01146000
LH R1,UDEVLINK-UDEVBLOK(R5) REAL DEVICE ADDR @V60B6B8 01147000
LTR R1,R1 IS THERE AN RADDR @VMI2009 01148000
BNM GETRBLOK YES, GO GET IT @VA11411 01149010
LA R1,UDEVVSER-UDEVBLOK(R5) USER VOL SER @VMI2009 01150000
LA R0,6 VOL SER LENGTH @VMI2009 01151000
CALL DMKSCNVS FIND RBLOK WE ALLOCATED @VMI2009 01152000
LR R8,R1 @VMI2009 01153000
B RBLOKOK AND COMPLETE @VMI2009 01154000
GETRBLOK EQU * FIND RBLOK FOR USER DEVICE @VMI2009 01155000
CALL DMKSCNRU FIND THE RDEVBLOK ALLOCATED @V60B6B8 01156000
RBLOKOK EQU * @VMI2009 01157000
LA R0,UDEVSIZE UDEVBLOK SIZE @V60B6B8 01158000
LR R1,R5 DUMMY UDEVBLOK ADDR @V60B6B8 01159000
CALL DMKFRET FREE THE GOTTEN CORE @V60B6B8 01160000
LR R5,R8 RDEVBLOK ADDR FROM DMKSCNRU @V60B6B8 01161000
B SETVDS AND COMPLETE THE DEDICATE @V60B6B8 01162000
CALLMSSB EQU * TRY TO MOUNT VOLSER ON RUA @V60B6B8 01163000
BAL R4,SAVUDEV SAVE CURRENT UDEVBLOK @V60B6B8 01164000
TM PSAMSS,MSSPRES IS MSS PRESENT IN THIS SYSTEM? @VA09319 01164010
BZ ERROR90 NO,INDICATE DEVICE NOT AVAIL. @VA09319 01164020
CALL DMKSSSL2 PROCESS AN MSS REQUEST @V60B6B8 01165000
B CHKMSSRC AND TEST THE RETURN CODE @V60B6B8 01166000
CALLMSSC EQU * SEE IF VOLSER EXISTS IN MSS @V60B6B8 01167000
BAL R4,SAVUDEV SAVE CURRENT UDEVBLOK @V60B6B8 01168000
TM PSAMSS,MSSPRES IS MSS PRESENT IN THIS SYSTEM? @VA09319 01168010
BZ ERROR90 NO,INDICATE DEVICE NOT AVAIL? @VA09319 01168020
CALL DMKSSSL3 PROCESS MSS REQUESTS @V60B6B8 01169000
B CHKMSSRC AND TEST THE RETURN CODE @V60B6B8 01170000
SAVUDEV EQU * SAVE THE CURRENT UDEVBLOK @V60B6B8 01171000
LA R0,UDEVSIZE SIZE OF A UDEVBLOK @V60B6B8 01172000
CALL DMKFREE GET CORE @V60B6B8 01173000
LR R5,R1 SAVE ADDR IN GPR 5 @V60B6B8 01174000
MVC 0(UDEVSIZE*8,R5),0(R9) SAVE THIS UDEVBLOK @V60B6B8 01175000
BR R4 @V60B6B8 01176000
MSSMOUNT EQU * SEE IF AN MSS MOUNT IN PROCESS @V60B6B8 01177000
* 01178000
* AT THIS POINT, AN MSS OPERATION WAS ATTEMPTED BY 01179000
* DMKSSS. IF THE RETURN CODE FROM DMKSSS IS 4, 01180000
* THEN AN MSS VOLUME MOUNT HAS BEEN ACCEPTED 01181000
* BY THE MSC, BUT THE VOLUME IS NOT YET MOUNTED. 01182000
* SET THE RETURN CODE TO ZERO AND PROCESS THE 01183000
* NEXT DIRECTORY STATEMENT. IF THE RETURN CODE 01184000
* FROM DMKSSS IS NOT ZERO OR FOUR, AN ERROR WAS 01185000
* DETECTED. ISSUE ERROR MSG DMKLOG090E. 01186000
* 01187000
LA R15,RC4 TEST FOR CODE 4 @V60B6B8 01188000
CR R15,R0 DMKSSS RC IN GPR 15 @V60B6B8 01189000
BNE ERROR90 IT IS AN ERROR @V60B6B8 01190000
TM MSSFLAG2-OSVSCOM(R1),MSGPROC IS MOUNT NOW @VA09302 01191000
* COMPLETE 01192000
BZ PCINOW YES, DMKDSB HAS THE PCI @VMI2018 01193000
NI MSSFLAG2-OSVSCOM(R1),X'FF'-MSGPROC @VA09302 01194000
B LOG20 PROCESS NEXT STATEMENT @V60B6B8 01195000
PCINOW EQU * SYSTEM VOLUME NOW MOUNTED @VMI2018 01196000
L R14,=V(DMKSSSMQ) ADDR OF MSSCOM Q @VMI2018 01197000
L R15,0(R14) FIRST MSSCOM IN Q @VMI2018 01198000
CHKNEXT EQU * @VMI2018 01199000
CR R15,R1 IS THIS OUR MSSCOM IN Q @VMI2018 01200000
BE DEQIT YES, REMOVE IT @VMI2018 01201000
LA R14,MSSNEXT-OSVSCOM(R15) NEXT CHAIN PTR @VMI2018 01202000
L R15,MSSNEXT-OSVSCOM(R15) NEXT MSSCOM @VMI2018 01203000
B CHKNEXT AND LOOK FOR OURS @VMI2018 01204000
DEQIT EQU * REMOVE MSSCOM @VMI2018 01205000
MVC 0(4,R14),MSSNEXT-OSVSCOM(R15) RESET CHAIN @VMI2018 01206000
LA R0,MSSSIZE MSSCOM SIZE @VMI2018 01207000
CALL DMKFRET RETURN MSSCOM TO SYSTEM @VMI2018 01208000
B RDEVRDY CONTINUE THE DEDICATE @VMI2018 01209000
EJECT 01210000
LOG49 LR R2,R9 NOW LET R2 POINT TO THE REGULAR UDBFBLOK 01276000
CALL DMKUDRRV "CLOSE" IT. 01277000
SPACE 01278000
LOG50 DS 0H ALL DEVICES HANDLED, NOW FINISH UP: 01279000
TM SAVEWRK1,RECON RECONNECTING? HRC101DK 01279100
BNO RESCNT RESET COUNT HRC101DK 01279200
NI VMMLVL2,X'FF'-VMMHLITE TURN OFF HILIGHT HRC101DK 01279300
B SKIPCNT HRC101DK 01279400
RESCNT DS 0H HRC101DK 01279500
MVI VMPSWDCT,X'00' CLEAR PASSWORD COUNT FOR DMKLNK @V200820 01280000
SKIPCNT DS 0H HRC101DK 01280500
SR R2,R2 CLEAR RETURN REG 01281000
SPACE 01282000
* CALL ACCOUNTING ROUTINE: 01283000
CALL DMKACON CALL THE ACCOUNT ON ROUTINE 01284000
LTR R2,R2 USER ACNTING INDICATE BAD NEWS @VM03066 01285000
BZ LOG51 NOPE, GOOD NEWS, CONTINUE @VM03066 01286000
TM SAVEWRK1,AUTOLOG+PSWRDCK SYSTEM OPER FROM CPI? @VM03066 01287000
BM LOG51 YES, ALWAYS LET HIM ON @VM03066 01288000
BZ FORCEUSR NOPE, NOT AUTOLOG OF ANY FLAVOR @VM03198 01289000
LA R0,8+17 LENGTH OF THE MESSAGE @VM03066 01290000
LA R1,MSG059B POINT TO START OF ERRTEXT @VA05368 01291000
MVC MSG059B(8),VMUSER INSERT USERID @VA05368 01292000
B ERROR59B GO HANDLE THE MESSAGE @VM03198 01293000
SPACE 01294000
* HANDLE SYSTEM LOG MESSAGE: 01295000
* HANDLE MESSAGE RESPOOLED FILES. 01296000
* CONSTRUCT AND SEND READY OR RECONNECT MESSAGE TO USER. 01297000
* CONSTRUCT AND SEND READY OR RECONNECT MESSAGE TO SYSTEM OPERATOR. 01298000
LOG51 DS 0H @VMD0130 01299000
L R2,SAVEWRK1 GET SAVEWRK1 INFORMATION FOR @VMD0130 01300000
* CALL TO DMKLOH 01301000
L R3,SAVEWRK8 GET AUTOLOG CMD ISSUER'S VMBLOK @VMD0139 01302000
* ADDRESS 01303000
L R4,SAVER11 GET CALLER'S VMBLOK FOR DMKLOH @VMD0139 01304000
CALL DMKLOHON CONTINUE LOGON @VMD0130 01305000
LTR R2,R2 SHOULD WE EXIT? @VMD0139 01306000
BNZ LOGEXITR YES, LOG IS FINISHED @VMD0139 01307000
SPACE 01308000
LOG65 DS 0H NOW SET/RESET APPROPRIATE FLAG-BITS: 01309000
NI VMRSTAT,255-VMLOGON TURN OFF THE LOGON BIT 01310000
TM SAVEWRK1,RECON RECONNECTING? @VM08550 01311000
BO RECEXIT YES, EXIT NOW @VA02849 01312000
SPACE 1 01313000
* SET DEFAULT ON BITS IN VMMLEVEL AND VMMLVL2 01314000
OI VMMLVL2,VMMIMSG @VA03338 01315000
MVI VMMLEVEL,VMMSGON+VMWNGON+VMMTEXT+VMMACCON+VMMLINED 01316000
TM VMOSTAT,VMSYSOP IS THE USER SYSTEM OPERATOR? @VA03387 01317000
BZ NOTOPDF NO, DEFAULTS ARE CORRECT @VA03387 01318000
OI VMMLEVEL,VMMCPENV CP TERMINAL MODE @VA03387 01319000
NOTOPDF DS 0H @VA03387 01320000
TM CPSTAT2,CPMICAVL VM ASSIST AVAILABLE? @VM08550 01321000
BO SETUVMA IF YES ON THIS PROCESSOR @V4M0134 01322000
TM APSTAT1,APUOPER NO, IS THERE ANOTHER PROCESSOR@V4M0134 01323000
BZ NOMIC BRANCH IF NOT @VM08550 01324000
L R15,PREFIXB YES, POINT TO OTHER PROC PSA @V4M0134 01325000
TM CPSTAT2-PSA(R15),CPMICAVL DOES IT HAVE VM ASSIST@V4M0134 01326000
BNO NOMIC IF NO PROCESSOR HAS VM ASSIST@V4M0134 01327000
SPACE 1 @V4M0134 01328000
SETUVMA EQU * @V4M0134 01329000
* DO SET UP FOR VM ASSIST 01330000
LA R0,MICSIZE GET STORAGE FOR MICBLOK @VM08550 01331000
CALL DMKFREE @VM08550 01332000
USING MICBLOK,R1 @VM08550 01333000
ST R1,VMMICRO SET ADDRESS OF MICBLOK @VM08550 01334000
XC MICBLOK(MICSIZE*8),MICBLOK CLEAR MICBLOK @V386198 01335000
MVC MICRSEG,VMSEG PUT SEGMENT TABLE PTR IN MICBLOK @VM08550 01336000
LA R15,VMPSW PUT REAL ADDRESS OF VIRT PSW @VM08550 01337000
ST R15,MICVPSW IN MICBLOK @VM08550 01338000
LA R15,TEMPSAVE PUT ADDR OF WORKSPACE FOR ASSIST @VM08550 01339000
ST R15,MICWORK IN MICBLOK @VM08550 01340000
L R15,PREFIXA POINT TO ABSOLUTE PSA @VA14280 01341100
MVC MICEVMA,PSAEVMA-PSA(R15) COPY EVMA CONTROLS @VA14280 01341600
TM VMPSTAT,VMV370R EC MODE? @VM08550 01342000
BZ MIC01 NO, BRANCH @VM08550 01343000
L R15,VMECEXT PUT VIRT C-REG PTR OF EC MACH. @VM08550 01344000
ST R15,MICCREG IN MICBLOK @VM08550 01345000
B MIC02 @VM08550 01346000
MIC01 LA R15,VMVCR0 PUT VIRT C-REG PTR OF BC MACH. @VM08550 01347000
ST R15,MICCREG IN MICBLOK @VM08550 01348000
OI VMMCR6,VMM360 INDICATE V. MACH. MAY USE ONLY @VM08550 01349000
* 360 OPS & 370 NONDAT OPS 01350000
MIC02 TM VMESTAT,VMMICSVC USER WANT ASSIST DO SVCS? @VM08550 01351000
BO MIC03 YES, LEAVE VMMSVC BIT OFF @VM08550 01352000
OI VMMCR6,VMMSVC NO, INDICATE VM ASSIST NOT @VM08550 01353000
* HANDLE SVCS (I.E., SVCS OFF) 01354000
MIC03 OI VMMCR6,VMMFE TURN VM ASSIST ON FOR USER @VM08550 01355000
SPACE 01356000
TM CPSTAT2,CPASTAVL IS CP ASSIST AVAILABLE ? @V386198 01357000
BZ NOMIC NO, ALL SET. @V386198 01358000
OI VMFSTAT,VMFVTMR INDICATE TIMER ASSIST WANTED @V3M4026 01359000
L R15,AVMREAL GET V=R VMBLOK ADDRESS @VA07315 01360000
CR R11,R15 THIS GUY VIRT.=REAL ?? @VA07315 01361000
BNE MICNOVR NOT HIM @VA07315 01362000
L R15,=A(DMKSLC-4096) YES, GET PAGE ZERO ADDRESS @VA07315 01363000
LA R15,80(,R15) GET VIRTUAL TIMER ADDRESS @VA07315 01364000
ST R15,MICVTMR SAVE TIMER ADD. IN MICBLOK+10 @VA07315 01365000
B MICVR AND SKIP NORMAL TIMER INIT. @VA07315 01366000
MICNOVR EQU * HERE TO INIT. NON V=R TIMER @VA07315 01367000
ST R15,MICVTMR PUT IN MICBLOK @V386198 01368000
MICVR EQU * @VA12708 01369100
OI VMMCR6,VMMVTMR VIRT INTERVAL TMR FEAT EN @VA12708 01369200
TM CPSTAT2,CPASTON IS CP ASSIST IN USE ? @V386198 01371000
BZ NOMIC NO, DONE. @V386198 01372000
OI VMMCR6,VMMCPAST SET CP ASSIST ENABLED @V386198 01373000
DROP R1 @V386198 01374000
SPACE 01375000
NOMIC EQU * @VM08550 01376000
TM SAVEWRK1,NOIPL AUTO IPL NEEDED? @V305535 01377000
BO LOGEXIT NO, EXIT @VM03066 01378000
TM SAVEWRK1,AUTOLOG AUTO LOGON? @V408246 01379000
BZ B2 NO, ATTEMP AUTO IPL @V408246 01380000
TM SAVEWRK1,PSWRDCK ALOGON COMMAND? @V408246 01381000
BZ LOGEXIT NO, MUST BE OPERATOR LOG @V408246 01382000
B2 EQU * @V408246 01383000
LA R0,8 LENGTH @VM03066 01384000
LA R1,SAVEWRK2 POINT AT THE DESIRED IPL NO. OR NAME 01385000
LA R15,SAVEWRK2+7 SET TO DELETE TRAILING BLANKS FROM COUNT: 01386000
LOG66 CLI 0(R15),C' ' TRAILING BLANK FOUND ? 01387000
BNE LOG67 NOPE - OK TO CALL IPL-HANDLER NOW. 01388000
BCTR R0,0 YES - DECREMENT BYTE-COUNT 01389000
BCT R15,LOG66 AND KEEP CHECKING. 01390000
* R0 & R1 NOW SET UP AS THEY WOULD BE FROM DMKSCNFD: 01391000
LOG67 SLR R2,R2 CLEAR R2, AND ... 01392000
CALL DMKCFGII CALL INTERNAL ROUTINE TO HANDLE @V304635 01393000
* IT 01394000
LTR R2,R2 SUCCESS ON IPL INITIATION ? 01395000
BZ BUMPRET YES, UPDATE RETN ADDR TO RUN USER@VM03066 01396000
TM SAVEWRK1,AUTOLOG IS THIS AUTOLOG COMMAND? @VM03066 01397000
BZ LOGEXIT NOPE, EXIT FORTHWITH @VM03066 01398000
LA R0,8+11 LENGTH OF THE MESSAGE @VM03066 01399000
LA R1,MSG059C POINT TO START OF ERRTEXT @VA05368 01400000
MVC MSG059C(8),VMUSER INSERT USERID @VA05368 01401000
B ERROR59A GO PROCESS THE MESSAGE @VM03066 01402000
SPACE 01403000
BUMPRET L R1,SAVERETN BUMP RETURN ADDR TO RUN THE USER @VM03066 01404000
LA R1,4(,R1) ... 01405000
ST R1,SAVERETN AND STORE 01406000
SPACE 01407000
LOGEXIT TM SAVEWRK1,R9FRE IS THERE FREE STORAGE TO BE RETURNED ? 01408000
BZ LOGEXTA @V408246 01409000
LA R0,UDBFSIZE*2+2 THE SIZE WE'VE BEEN USING INTO R0, 01410000
LR R1,R9 ADDRESS INTO R1 FROM R9, 01411000
CALL DMKFRET AND GIVE IT BACK (WITH THANKS, OF COURSE) 01412000
LOGEXTA DS 0H @V408246 01413000
C R11,SAVER11 SAME VMBLOK? @V408246 01414000
BE LOGEXTF YES @V60BBBB 01415000
L R1,SAVER11 NO,--SWITCH TIMER AND LOCK @V407593 01416000
* TO CALLERS VMBLOK 01417000
BAL R5,SWVM GO TO SWITCH VMBLOKS @V4M0193 01418000
LOGEXTF L R3,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 01419000
USING JPSCBLOK,R3 TELL ASSEMBLER @V60BBBB 01420000
TM LOGONJRL,L'LOGONJRL LOGON JOURNALING ON? @V60BBBB 01421000
BZ LOGEXITR BR IF NOT @V60BBBB 01422000
LA R5,VMUSER PRIME R5 WITH A(VMUSER) @V60BBBB 01423000
LTR R2,R2 SUCCESSFUL LOGON? @V60BBBB 01424000
BZ CALLJRL1 BR IF YES @V60BBBB 01425000
C R2,=F'50' WAS IT INVALID PASSWORD? @V60BBBB 01426000
BNE LOGEXITR BR IF NOT @V60BBBB 01427000
LA R5,(UDIRUSER-UDIRBLOK)+SAVEWRK2 IF INVALID @V60BBBB 01428000
* PASSWORD, USERID IS HERE. @V60BBBB 01429000
LA R2,SAVEWRK6 POINT AT INVALID PASSWORD @V60BBBB 01430000
DROP R3 @V60BBBB 01431000
CALLJRL1 SLR R4,R4 ASSUME LOGON COMMAND @V60BBBB 01432000
TM SAVEWRK1,AUTOLOG+PSWRDCK LOGGING ON OPERATOR @VA10024 01433100
BNO CALLJRL2 FROM DMKCPI....YES @VA10024 01433200
L R4,SAVEWRK8 GET COMMAND ISSUERS VMBLOK @V60BBBB 01435000
CALLJRL2 CALL DMKJRLLO GO TO JOURNALING MODULE @V60BBBB 01436000
LOGEXITR EXIT REALLY EXIT. 01437000
SPACE 1 01438000
* HERE ON RECONNECT. IF A PREVIOUS CONSOLE FUNC. WAS RUNNING WHEN LOGON 01439000
* WAS ENTERED, RETRN TO *+12 IN CFM SO ANOTHER CONSOLE FUNC CAN'T START 01440000
RECEXIT EQU * @VA02849 01441000
TM VMOSTAT,VMCF IS VMCF FLAG STILL ON? @VA02849 01442000
BZ RECEXT1 NO, PREVIOUS C.F. MUST'VE @VA02849 01443000
* FINISHED 01444000
TM SAVEWRK1,EXECF YES, WAS VMCF ON AT ENTRY? @VA02849 01445000
BZ LOGEXIT NO, NORMAL EXIT @VA02849 01446000
RECEXT1 EQU * HERE IF RECONN IS OVERLAPPING A @VA02849 01447000
* PREVIOUS C.F. 01448000
L R1,SAVERETN GET RETURN ADDRESS @VA02849 01449000
LA R1,12(,R1) RETURN TO *+12 IN DMKCFM @VA02849 01450000
ST R1,SAVERETN SO WE WON'T CHANGE STATUS BITS @VA02849 01451000
B LOGEXIT @VA02849 01452000
SPACE 1 @V4M0148 01453000
SWVM DS 0H @V4M0148 01454000
SWTCHVM SWITCH VMBLOKS @V4M0193 01455000
BR R5 RETURN TO CALLER @V4M0193 01456000
EJECT 01457000
* ENTRY TO AUTOMATICALLY LOGON THE OPERATOR: 01458000
SPACE 01459000
DMKLOGOP RELOC LOGON THE OPERATOR 01460000
SR R9,R9 R9 = 0, 01461000
ST R9,SAVEWRK1 CLEAR SAVEWRK1 WORD 01462000
ST R9,SAVER2 SET TO RETURN R2=0 TO CALLER 01463000
MVI SAVEWRK1,AUTOLOG+PSWRDOK AUTO LOGON WITHOUT @V305535 01464000
* PASSWORD 01465000
LA R1,VMUSER POINT TO USERID IN VMBLOK, 01466000
LA R0,8 8 BYTES, PLEASE 01467000
LA R2,SAVEWRK2 POINT TO WORK AREA FOR DMKUDR @V200820 01468000
CALL DMKUDRFU FIND OPERATOR IN DIRECTORY @V200820 01469000
BNZ ERROR53 OOPS - HE'S NOT THERE @V200820 01470000
B LOG07 GO PROCESS OPERATOR LOGON @V200820 01471000
SPACE 2 01472000
TERMADD EQU * ROUTINE TO BUILD 'TYPE RADDR' INFO @V200820 01473000
LTR R8,R8 IS THERE A TERMINAL RDEVBLOK ? @V200820 01474000
BNP TERMNOD NO -- SETUP DEFAULT TYPE, RADDR @V200820 01475000
USING RDEVBLOK,R8 @V200820 01476000
CLI RDEVTYPC,CLASSPEC IS THIS A 370X NCP TERMINAL @V200820 01477000
BE TERMRID YES - GO FIND 'VMTRMID' @V200820 01478000
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 01479000
BNE *+12 NO, BYPASS TEST FOR BISYNC LINE @V2D3931 01480000
TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE ? @V2D3931 01481000
BO TERMRID YES, ... @V2D3931 01482000
TM RDEVADD,RDEVLDEV Is this an LDEV? HRC065DK 01482100
BO TERMLDEV Yes, special handling HRC065DK 01482200
CALL DMKSCNRD GET 'CCU' ADDRESS FROM RDEVBLOK @V200820 01483000
CALL DMKCVTBH CONVERT TO PRINTABLE EBCDIC @V200820 01484000
ICM R1,B'1000',BLANKS GET A HIGH-ORDER BLANK IN R1@V200820 01485000
L R0,=C'LINE DSC' PUT 'LINE' IN GR0 @V200820 01486000
CLI RDEVTYPC,CLASTERM IS IT REALLY A LINE ? @V200820 01487000
BCR 8,R4 YES - RETURN AS IS @V200820 01488000
L R0,=C'GRAF' MUST BE A LOCAL GRAPHICS TERMINAL@V200820 01489000
BR R4 @V200820 01490000
TERMLDEV EQU * HRC065DK 01490100
LH R1,RDEVADD Get the LDEV address HRC065DK 01490200
N R1,F4095 Keep only the dev num HRC065DK 01490300
CALL DMKCVTBH Make it displayable HRC065DK 01490400
ICM R1,8,=C'L' Insert LDEV identifier HRC065DK 01490500
L R0,=C'GRF ' Use short GRAF name HRC065DK 01490600
BR R4 Return with R0/R1 filledHRC065DK 01490700
TERMRID EQU * SETUP 'DEV XXXX' FOR 370X TERMS @V200820 01491000
LH R1,VMTRMID-VMBLOK(,R1) RESOURCE FIELD @V200820 01492000
CALL DMKCVTBH CONVERT TO PRINTABLE EBCDIC @V200820 01493000
L R0,=C'DEV ' PUT CORRECT TYPE IN GR0 @VM03066 01494000
BR R4 RETURN @VM03066 01495000
TERMNOD LM R0,R1,=C'LINE DSC' DEFAULT FOR DISC MACHINE @VM03066 01496000
BR R4 RETURN @VM03066 01497000
DROP R8 NO MORE RDEVBLOK @VM03066 01498000
EJECT 01499000
DMKLOGB RELOC @V4075A0 01500000
SR R2,R2 CLEAR @V305535 01501000
ST R2,SAVER2 CLEAR RETURN CODE FIELD @V305535 01502000
ST R2,SAVEWRK1 CLEAR PARAMETER FIELD @V305535 01503000
ST R10,SAVEWRK8 SAVE CMD ISSUERS VMBLOK ADDR @VM03066 01504000
MVI SAVEWRK1,AUTOLOG+PSWRDCK SET-UP INITIAL @V305535 01505000
* PARAMETERS 01506000
B LOG00 JOIN LOGON CODE @V305535 01507000
EJECT 01508000
* ERROR RETURNS: 01509000
* 01510000
ERROR3 LA R2,3 INVALID OPTION - OPTN @VA04098 01511000
B ERRJOIN3 CONTINUE, R0 AND R1 ARE SET @VA08667 01512000
SPACE 01513000
ERROR20 LA R2,20 USERID MISSING OR INVALID @VA04098 01514000
B ERRJOIN1 ... @VA04098 01515000
SPACE 1 01516000
ERROR50 LA R2,50 PASSWORD INCORRECT 01517000
ST R2,SAVER2 PASS CODE BACK TO CALLER @V200820 01518000
BC 14,ERRJOIN1 CC ¬= 3 FROM DMKEPSWD - NORMAL @VMI0070 01519000
* ERROR PROCEDURE. @VMI0070 01520000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG? @VMI0070 01521000
BNO ERRJOIN1 CC = 3 FROM DMKEPSWD - TERM ERROR@VMI0070 01522000
LA R0,LEN59D SET LENGTH OF THE MESSAGE @VMI0070 01523000
LA R1,MSG059D SET START OF MESSAGE TEXT @VMI0070 01524000
MVC MSG059D,(UDIRUSER-UDIRBLOK)+SAVEWRK2 PUT USERID @VMI0070 01525000
* INTO MESSAGE. @VMI0070 01526000
B ERROR59B GO HANDLE THE MESSAGE @VMI0070 01527000
SPACE 01528000
ERROR51 LA R2,51 MAXIMUM USERS EXCEEDED 01529000
B ERRJOIN1 GO PROCESS THE ERROR @VM03066 01530000
SPACE 01531000
ERROR52 LA R2,52 ERROR IN CP DIRECTORY (BAD NEWS) 01532000
B ERRJOIN1 GO SEND THE ERROR MESSAGE @VM03066 01533000
SPACE 01534000
ERROR59A MVI SAVER2,OPMSG TELL CALLER TO GIVE MSG TO SYS OP@VM03198 01535000
ERROR59B NI SAVEWRK1,255-NONFATAL THIS IS A FATAL DISEASE @VM03198 01536000
ERROR59 LA R2,59 GET THE ERROR NUMBER @VM03066 01537000
STCM R2,B'0111',SAVER2+1 PASS BACK THE ERROR NUMBER @VM03066 01538000
B ERRJOIN4 CONTINUE PROCESSING THE MSG @VM03066 01539000
SPACE 1 01540000
ERROR67 LA R2,67 PASSWORD ON COMMAND LINE @V60BBBB 01541000
* NOT PERMITTED. @V60BBBB 01542000
B ERRJOIN1 CONTINUE @V60BBBB 01543000
ERRJOIN1 SLR R1,R1 R1 = 0 - NO DATA PASSED TO DMKERMSG 01544000
ERRJOIN3 ST R2,SAVER2 RETURN ERROR CODE TO OUR CALLER 01545000
ERRJOIN4 ICM R0,B'1110',DMKLOG+3 'LOG' IDENTIFIER INTO R0, 01546000
ICM R2,B'1000',=X'80' SIGNAL - RETURN TO LOGON PLEASE 01547000
TM SAVEWRK1,AUTOLOG+PSWRDCK AUTOLOG COMMAND? @VM03066 01548000
BNO ERRJN5 NO @V305535 01549000
LR R6,R0 SAVE REG ACROSS SWITCHVM @V60BB91 01550000
ST R1,SAVEWRK9 SAVE REGS AROUND SWITCHVM CALL @V60BB91 01551000
L R1,SAVEWRK8 SWITCH TO CMD ISSUERS VMBLOK @V407593 01552000
BAL R5,SWVM GO TO SWITCH VMBLOKS @V4M0193 01553000
L R1,SAVEWRK9 RESTORE MSG PARMS @V60BB91 01554000
LR R0,R6 RESTORE MODULE ID IN R0 @V60BB91 01555000
CALL DMKERMSG SEND ERROR MESSAGE @V305535 01556000
L R1,SAVER11 SWITCH TMRS & LOCK TO @V407593 01557000
* AUTOLOGGED VMBLOK 01558000
BAL R5,SWVM GO TO SWITCH VMBLOKS @V4M0193 01559000
TM SAVEWRK1,NONFATAL VIABLE USER YET? @VM03066 01560000
BO LOG20 YES, CONTINUE LOGON PROCESS @VM03066 01561000
B LOGEXIT NOPE, THEN EXIT TO CALLER @VM03198 01562000
SPACE 01563000
ERRJN5 DS 0H @V305535 01564000
CALL DMKERMSG LET ERROR MSG HANDLER DO THE HARD WORK 01565000
TM SAVEWRK1,NONFATAL NON-FATAL ERROR ? 01566000
BO LOG20 IF YES, GO READ IN NEXT DEVICE BLOCK 01567000
CH R2,=H'131' 131E MESSAGE @V407466 01568000
BE FORCEUSR FORCE USER OFF, NO MORE CHANCES @V407466 01569000
IC R14,VMPSWDCT GET CURRENT COUNT @VM03198 01570000
LA R14,1(R14) BUMP BAD LOGON ATTEMPTS BY ONE @VM03198 01571000
STC R14,VMPSWDCT AND SAVE @VM03198 01572000
L R3,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 01573000
USING JPSCBLOK,R3 TELL ASSEMBLER @V60BBBB 01574000
TM LOGONJRL,L'LOGONJRL LOGON JOURNALING ON? @V60BBBB 01575000
BZ NOTJRLNG BR IF NOT @V60BBBB 01576000
CLC VMPSWDCT,JPSLOGDS LIMIT EXCEEDED? @V60BBBB 01577000
BL LOGEXIT NO. LET HIM CONTINUE @V60BBBB 01578000
B FORCEUSR CONTINUE @V60BBBB 01579000
DROP R3 @V60BBBB 01580000
NOTJRLNG DS 0H @V60BBBB 01581000
CLI VMPSWDCT,LOGLIMIT CHECK HOW MANY TIMES HE GOOFED@VM03198 01582000
BNH LOGEXIT IF NOT > LIMIT GIVE HIM 'NOTHER'N@VM03198 01583000
FORCEUSR TM SAVEWRK1,AUTOLOG+PSWRDCK OP BEING LOGGED ON @V407466 01584000
BM USERGONE YES, DON'T TURN ON VMKILL BIT @V407466 01585000
OI VMOSTAT,VMKILL BYE BYE ..FOR NOW @V407466 01586000
OI VMSVSTAT,VMLGFORC INDICATE USER WAS FORCED OFF @VA13026 01586500
SPACE 01587000
USERGONE DS 0H @V305535 01588000
L R1,SAVERETN PICK UP RETURN ADDRESS @V305535 01589000
LA R1,8(,R1) +8 = DON'T POST READ & DON'T RUN 01590000
ST R1,SAVERETN AND STORE IT BACK 01591000
B LOGEXIT AND GO EXIT. 01592000
SPACE 01593000
ERROR53 LA R2,53 USERID NOT IN CP DIRECTORY 01594000
B ERRJOIN3 RETURN ERROR CODE & GIVE MSG @VA08667 01595000
SPACE 01596000
ERROR54 DS 0H ALREADY LOGGED ON LINE XXX 01597000
TM SAVEWRK1,AUTOLOG SPECIAL LOGON CALL? @V305535 01598000
BZ NOTAUTO3 NO @V305535 01599000
C R11,ASYSOP AUTOLOG OF SYSTEM OPERATOR? @V305535 01600000
BE LOG10A YES, PROCEED NORMALLY @V305535 01601000
NOTAUTO3 EQU * NOT AUTOLOG COMMAND @V305535 01602000
LA R2,54 REAL ERROR 54 01603000
L R8,VMTERM-VMBLOK(,R1) ACCESS THE OTHER TERMINAL RDEVBLOK 01604000
BAL R4,TERMADD GET 'TYPE RADDR' FOR OTHER VMBLOK@V200820 01605000
STM R0,R1,SAVEWRK2 SET IN SAVEAREA @V200820 01606000
LA R1,SAVEWRK2 POINT AT IT FOR DMKERMSG @V200820 01607000
LA R0,8 VARIABLE FIELD LENGTH @V200820 01608000
B ERRJOIN3 GO TYPE THE ERROR MESSAGE @VA08667 01609000
ERROR66 EQU * Cant connect to host VM HRC065DK 01609100
LA R2,66 -> message num DMKEMA HRC065DK 01609200
B ERRJOIN1 Go display msg HRC065DK 01609300
SPACE 01610000
ERROR90 EQU * @VA03350 01611000
USING UDEVBLOK,R9 ADDRESSABILITY FOR UDEVBLOK @VA03350 01612000
LA R2,90 MSG DMKLOGO9OE @VA03350 01613000
LR R1,R3 VADDR INTO R1 FOR CONVERT @VA03350 01614000
CALL DMKCVTBH BINARY TO HEX PLEASE 01615000
STCM R1,7,0(R10) STORE (3 BYTES) IN EXTRA SAVE AREA, 01616000
MVI 3(R10),00 BINARY ZERO NEXT (1 BYTE) 01617000
CLI UDEVVSER,X'40' VOLID PRESENT @VA03350 01618000
BE PUTRADDR NO PUT RADDR INTO MSG @VA03350 01619000
MVC 4(6,R10),UDEVVSER PUT VOLSER INTO MSG @VA03350 01620000
LA R0,10 THATS TEN BYTES TOTAL @VA03350 01621000
B GIVEMSG @VA03350 01622000
PUTRADDR LH R1,UDEVLINK RADDR INTO R1 FOR CONVERT @VA03350 01623000
CALL DMKCVTBH CONVERT TO HEX @VA03350 01624000
STCM R1,7,4(R10) AND STORE AGAIN (3 MORE BYTES) 01625000
LA R0,7 THAT'S 7 BYTES TOTAL 01626000
GIVEMSG LR R1,R10 POINT TO MSG INFO AREA @VA03350 01627000
B ERRJOIN4 GO GIVE ERROR MESSAGE & GET NEXT UDEVBLOK 01628000
DROP R9 @VA03350 01629000
ERROR95 LA R2,CON95 DMKLOG095E @V407466 01630000
B ERROR91J PUT VADDR IN MSG PER ERROR91 @V407466 01631000
SPACE 01632000
ERROR91 LA R2,91 DASD VADDR NOT DEFINED; TEMP SPACE NOT AVAILABLE 01633000
ERROR91J LR R1,R3 DEVICE-ADDRESS INTO R1 01634000
CALL DMKCVTBH BINARY TO HEX PLEASE 01635000
ICM R1,B'1000',BLANKS HI ORDER BLANK PLEASE @VA04098 01636000
SLR R0,R0 R0=0 MEANS THE DATA IS IN R1 01637000
B ERRJOIN4 GO GIVE ERROR MESSAGE & GET NEXT UDEVBLOK 01638000
SPACE 01639000
ERROR92 DS 0H DEV VADDR NOT DEFINED; TYPE VADDR ALREADY DEFINED: 01640000
MVC 0(12,R10),ZEROES CLEAR 12 BYTES WORTH OF SAVE AREA 01641000
CALL DMKCVTBH VADDR (STILL IN R1) INTO HEX PLEASE 01642000
STCM R1,7,9(R10) (PLAN AHEAD) 01643000
ERROR92J STCM R1,7,0(R10) STORE (3 BYTES) IN EXTRA SAVE AREA 01644000
* BINARY ZERO NEXT (1 BYTE) 01645000
CALL DMKSCNVN NOW GET DEVICE NAME (R8 IS ALL SET) 01646000
ST R1,4(,R10) AND STORE (4 BYTES) NEXT 01647000
* ANOTHER BINARY ZERO (1 BYTE) 01648000
* AND VADDR AGAIN (3 BYTES) 01649000
LA R0,12 IF I CAN COUNT THAT'S 12 BYTES TOTAL 01650000
LR R1,R10 AND IN OUR EXTRA SAVE AREA 01651000
LA R2,92 THAT WILL BE ERROR 92 PLEASE 01652000
B ERRJOIN4 GO GIVE ERROR MESSAGE & GET NEXT UDEVBLOK 01653000
SPACE 01654000
ERROR93 LA R2,93 DEV VADDR NOT DEFINED; ERROR IN CP DIRECTORY 01655000
B ERROR91J PUT VADDR IN MSG PER ERROR 91. 01656000
SPACE 01657000
ERROR131 LA R2,CON131 MSG NUMBER @V407466 01658000
LA R0,LENGTH5 SUBSTITUTABLE DATA LENGTH @V407466 01659000
LA R1,=CL5'LOGON' SUBSTITUTABLE DATA @V407466 01660000
B ERRJOIN3 COMMON ERRROR PROCESSING @V407466 01661000
EJECT 01662000
LOGMS189 LA R2,189 MSG NUMBER @V4075A0 01663000
ICM R2,B'0100',CHARI IT'S AN INFORMATIONAL MSG @V4075A0 01664000
B COMAFF @V4075A0 01665000
LOGMS188 LA R2,188 MSG NUMBER @V4075A0 01666000
COMAFF SR R1,R1 NO VARIABLE DATA FOR DMKERM @V4075A0 01667000
ICM R0,B'1110',DMKLOG+3 'LOG' ID @V4075A0 01668000
ICM R2,B'1000',HEX80 INDICATE ERM RETURNS TO US @V4075A0 01669000
CALL DMKERMSG @V4075A0 01670000
B NOAFF UNSATISFIED AFFINITY NOT FATAL @V4075A0 01671000
EJECT @V4075A0 01672000
* EXECUTED INSTRUCTIONS: 01673000
SAVEPASS MVC SAVEWRK8(*-*),0(R1) 01674000
CLCMASK CLC CMASK(*-*),0(R1) 01675000
CLCNOIPL CLC CNOIPL(*-*),0(R1) 01676000
* 01677000
CMASK DC C'MASK ' MEANS MASKING CHARACTERS WANTED 01679000
CNOIPL DC C'NOIPL ' MEANS NO AUTOMATIC IPL WANTED 01680000
* @V4075A0 01681000
CHARI DC C'I' @V4075A0 01682000
HEX80 DC X'80' @V4075A0 01683000
MSG059A DC CL8' ' @VA06350 01684000
TEXT59A DC X'00',C'IPL MISSING' @VA06350 01685000
MSG059B DC CL8' ' @VA06350 01686000
TEXT59B DC X'00',C'ACCOUNTING ERROR' @VA06350 01687000
MSG059C DC CL8' ' @VA06350 01688000
TEXT59C DC X'00',C'IPL FAILED' @VA06350 01689000
MSG059D DC CL8' ' @VMI0070 01690000
TEXT59D DC X'00',C'I/O ERROR ON TERMINAL' @VMI0070 01691000
LEN59D EQU *-MSG059D @VMI0070 01692000
SPACE 2 01693000
LTORG 01694000
SPACE 2 01695000
LOGLIMIT EQU 3 LIMIT OF HOW MANY "WRONG PASSWORDS" WE'LL TOLERATE 01696000
EJECT 01697000
EJECT 01698000
PSA 01699000
COPY SAVE 01700000
* FLAG-BITS USED IN SAVEWRK1: 01701000
* 01702000
AUTOLOG EQU X'80' AUTOLOG CMD OR CPI SYS OP LOGON @VM03066 01703000
PSWRDOK EQU X'40' PASSWORD OK - DON'T CALL DMKEPSWD 01704000
NOIPL EQU X'20' NO AUTOMATIC IPL WANTED 01705000
NONFATAL EQU X'10' ERROR(S) NONFATAL - GO READ NEXT UDEVBLOK 01706000
RECON EQU X'08' RECONNECT PERFORMED 01707000
R9FRE EQU X'04' R9 IN USE AS FREE-STORAGE BUFFER 01708000
EXECF EQU X'02' RECONNECTED W/ VMCF STILL ON @VM03066 01709000
PSWRDCK EQU X'01' AUTOLOG CMD - PASSWORD REQUIRED @VM03066 01710000
SPACE 01711000
OSVSCOM MSSCOM @V60B6B8 01712000
BLANK EQU X'40' @V60B6B8 01713000
L48 EQU 48 @V60B6B8 01714000
RC4 EQU 4 @V60B6B8 01715000
L5 EQU 5 @V60B6B8 01716000
* PARAMETER BITS PASSED TO DMKUSOFF 01718000
* 01719000
NOOPMSG EQU X'01' DONT SEND LOGOFF MSG TO SYS OP @VM03066 01720000
SPACE 01721000
* PARAMETER BITS PASSED FROM DMKLOG BACK TO DMKLOGA 01722000
* 01723000
OPMSG EQU X'80' LET USOFF SEND LOGOFF MSG TO OP @VM03066 01724000
* MISCELLANEOUS EQUATES 01725000
CON512 EQU 512 512 DOUBLEWORDS @V407466 01726000
CON131 EQU 131 DMKLOG131E MESSAGE NUMBER @V407466 01727000
CON95 EQU 95 DMKLOG095E @V407466 01728000
LENGTH5 EQU 5 DATA LENGTH MSG 131E @V407466 01729000
EJECT 01730000
COPY EQU 01731000
COPY VMBLOK 01732000
COPY TIMER 01733000
COPY IOBLOKS 01734000
COPY NETWORK @V200820 01735000
COPY UDIRECT 01736000
COPY DEVTYPES 01737000
COPY RBLOKS 01738000
COPY VBLOKS 01739000
SYSLOCS 01740000
COPY MICBLOK 01741000
COPY CONBUF @V305535 01742000
JPSCBLOK @V60BBBB 01743000
END DMKLOG 01744000