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 | 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