22FL ... SEG USEREXCP,860,FILESTORE 22^= # 23DW # THIS SEGMENT HOLDS EXCEPTION PATHS FROM USEROPEN AND OTHER 23YG # SEGMENTS. 24D6 # 24XQ SEGENTRY K1USEREXCP,X1 257J ... SEGENTRY K2USEREXCP,X2 25?F ... SEGENTRY K3USEREXCP,X3 25CB # 25X2 # THE X1 ENTRY CHECKS TO SEE IF THE CURRENT JOB MAY ACCESS A 26BL # USER-FROZEN FILE OR DIRECTORY. IT SETS A SUITABLE REPLY(OK,FROZEN, 26W= # OR NOFPRIV) AND EXITS UP+1 IF ACCESS ALLOWED, UP IF NOT ALLOWED. 27*W # 27TG PRIVFR 8HFREEZE [FOR CHEKPRIV MACROS 28*6 X1 28G# ... LDN 7 0 [SHOW X1 ENTRY 28MG ...X1X2COMMON 28SQ BRUSEN NOJOB [J IF NOT IN USER CONTEXT. 29#B FJOCA 3,2 [X3->JOB BLOCK 29S2 SPRIVJUMP JSSTART,3,UPPLUS1OK[ SYS STARTED JOB ALLOWED THRU 2=3S ... SPRIVJUMP JSISSUE,3,UPPLUS1OK [ LIKE WISE SYS ISSUED JOBS 2=?L NOJOB 2=HD ... BNZ 7 X2B [RETURN TO X2 COE IF X2 ENTRY 2=R= HUNT 3,FILE,ADJUNCTS [TEST IF USER HAS GIVEN 'FROZEN' 2?=W [QUALIFIER AND HAS FREEZE PRIV. 2?QG ... BNG 3 NOTOK1 [J IF NO QUALIFIERS 2#=6 JBC NOTOK1,3,BAFROZEN [J IF NOT FROZEN QUALIFIER 2#PQ CHEKPRIV 0,PRIVFR,NOTOK2 [J IF DOES NOT HAVE PRIV. 2*9B UPPLUS1OK 2*P2 ANSOK2 2B8L UPPLUS 1 2BN= NOTOK1 2C7W SETREP2 FROZEN [FILE FROZEN 2CMG UP UP 2D76 NOTOK2 2DLQ SETREP2 NOFPRIV [UNPRIVILEGED USE OF FROZEN QUAL 2F6B BRN UP 2FL2 # 2G5L # 2G6X ...# THE X2 ENTRY DOES THE SAME AS THE X1 ENTRY EXCEPT THAT A FILE ADJUNCT 2G88 ...# BLOCK IS NOT REQUIRED BEFORE WE CHECK FOR THE FREEZE PRIVILEGE 2G9F ...# 2G=Q ...X2 2G#3 ... LDN 7 1 [SHOW X2 ENTRY 2G*# ... BRN X1X2COMMON [OBEY X1 + X2 COMMON CODE 2GBK ...X2B [X2 ONLY CODE 2GCW ... CHEKPRIV 0,PRIVFR,NOTOK1 [J IF DOES NOT HAVE PRIV 2GF7 ... BRN UPPLUS1OK [OTHERWISE OK 2GGD ...# 2GHP ...# 2GH^ ...# THE X3 ENTRY IS CALLED BY USEROPEN WHEN A USER ATTEMPTS TO ACCESS A 2GJ9 ...# DIRECTORY (OTHER THAN FOR ERASING). IT CHECKS WHETHER THE USER IS 2GJF ...# ONE OF THOSE NOMINATED BY THE RESTORE TIME MACRO 'READIR' TO HAVE 2GJP ...# UNTRAPPED ACCESS TO ALL DIRECTORIES, AND ADDS IN THE 'UNTRAP'SUBMODE 2GJ^ ...# IF HE IS. 2GK9 ...# IT ALSO CHECKS THAT EITHER 2GKF ...# 1) THE OPERATION IS ALLOWED ON DIRECTORIES (SUBMODE 'DIRONLY' OR 2GKP ...# 'TERMDIR' SET). 2GK^ ...# OR 2) THE USER POSSESSES 'ASSIDIR' PRIVILEGE. 2GL9 ...# 2GLF ...PRIV 8HASSIDIR [USED BY CHEKPRIV 2GLP ...USERTABLE [TABLE OF 'READIR' TYPE USERS 2GL^ ... SEGENTRY K55USEREXCP 2GM9 ... 12HMANAGER 2GMF ... SEGENTRY K53USEREXCP 2GMP ...#GAP 45 2GM^ ...# 2GN9 ...X3 2GNF ... TESTMODE 5,XDIR,,FREEZE [CAN'T FREEZE DIRS 2GNP ... TESTMODE AWORK1(2),XDIR,,SAVEFREEZE 2GN^ ... TESTMAIN 5,XDIR,,EXECUTE [DIRS CANNOT BE LOADED OR EXECUTED 2GP9 ...# 2GPF ...# WE GET A POINTER TO THE USERNAME AND CHECK TO SEE IF HE IS IN 2GPP ...# THE READIR LIST. 2GP^ ...# 2GQ9 ... BRUSEN NOJOB2 [J IF NO JOB BLOCK 2GQF ... FJOCA 2,FX2 [X2->JOB BLOCK 2GQP ... BRN TUSER 2GQ^ ...NOJOB2 [IF THERE IS NO JOB BLOCK WE GET A 2GR9 ... [POINTER SUCH THAT JUSER(2) IS THE 2GRF ... [SAME AS CPREFIX(FX2). 2GRP ... ADN 2 CPREFIX-JUSER 2GR^ ...# 2GS9 ...TUSER 2GSF ... SEGENTRY K54USEREXCP 2GSP ... LDN 4 K53USEREXCP-K55USEREXCP/3 [NO OF ENTRIES IN THE TABLE 2GS^ ...TESTUSER 2GT9 ... TESTNAMX 3,USERTABLE(1),JUSER(2),NOTHIM [J IF NOT USER 2GTF ... ADDMODE 5,UNTRAP [ADD IN MODE 2GTP ... BRN USEROK [AND JUMP OUT OF LOOP 2GT^ ...NOTHIM 2GW9 ... ADN 1 3 [UPDATE POINTER TABLE 2GWF ... BCT 4 TESTUSER [LOOP IF MORE ENTRIES IN TABLE 2GWP ...USEROK 2GW^ ... LDX 1 FX1 [RESTORE OVERWRITTEN X1+2 2GX9 ... LDX 2 FX2 2GXF ...# 2GXP ...# NEXT WE CHECK THAT EITHER A DIRECTORY SUBMODE WAS GIVEN OR THE 2GX^ ...# USER HAS THE PRIVILEGE. 2GY9 ... TESTMODE 5,YDIROK,,DIRONLY,TERMDIR[J IF DIR SUBMODE 2GYF ... CHEKPRIV 0,PRIV,XDIR [OTHERWISE MUST HAVE PRIVILEGE 2GYP ...# 2GY^ ...# IF ALL IS WELL WE PUT THE (POSSIBLE AUGMENTED) MODE WORD INTO 2G^9 ...# ACOMMUNE1 FOR THE CALLING CODE AND EXIT UPPLUS 1 2G^F ...# 2G^P ...YDIROK 2G^^ ... STO 5 ACOMMUNE1(2) 2H29 ... UPPLUS 1 2H2F ...# 2H2P ...# THE ERROR EXIT GOES UP. 2H2^ ...# 2H39 ...XDIR UP 2H3F ...# 2H3P ... MENDAREA 20,K99USEREXCP 2H4W # 2HJG #END ^^^^ ...172244150001