In REXX:
ascb = storage(224,4) /* psaaold */
asxb = storage(d2x(c2d(ascb) + 108),4) /* ascbasxb */
/*___racf___*/
acee = storage(d2x(c2d(asxb) + 200),4) /* acee */
unam = storage(d2x(c2d(acee) + 100),4) /* aceeunam */
user_name = strip(storage(d2x(c2d(unam) + 1),20))
In PL/I, from a running job:
dcl p1 ptr init (ptrvalue(16)) static;
dcl 1 s1 based(p1),
2 p2 ptr;
dcl 1 s2 based(p2),
2 p3 ptr;
dcl 1 s3 based(p3),
2 * ptr,
2 tcb_ptr ptr;
dcl 1 tcb based(tcb_ptr),
2 *(3) ptr,
2 tiot_ptr ptr,
2 *(41) ptr,
2 jscb_ptr ptr;
dcl 1 tiot based(tiot_ptr),
2 jobname char (8),
2 stepname char (8);
dcl 1 jscb based(jscb_ptr),
2 *(65) ptr,
2 jscbjct ptr,
2 *(13) ptr,
2 jscbssib ptr;
dcl 1 jct based(jscbjct),
2 *(5) ptr,
2 * char,
2 jctjstat bit (8),
2 * char (2),
2 jctjname char (8), /* job name */
2 *(4) ptr,
2 jctsdkad char (3), /* sva of first sct */
2 * char,
2 jctjctx char (3), /* sva of jctx */
2 * char,
2 jctactad char (3), /* sva of first act */
2 * char,
2 *(26) ptr,
2 * char,
2 jmrjmrjd fixed dec(5,3), /* job start date (julian) */
2 *(2) ptr,
2 jctuser char (7), /* job user id */
2 * char,
2 jctacode char (4); /* job abend code */