Also :
die supp.Grp bekommst du einfacher mit RTVUSRPRF. Das USRHOME ist etwas schwieriger, da dies im Unicode (UCS-2)abgelegt ist.
Das heißt, daß API QSYRUSRI reicht nicht.
Mit dem API CDRCVRT kannst du den String in z.B. die Job CCSID umwandeln.
Hier ein kleines CL-Programm :
Code:
RTVUSRHOME: PGM PARM(&USRPRF &HOMEDIRN)
DCL VAR(&USRPRF) TYPE(*CHAR) LEN(10) /**/
DCL VAR(&RCV) TYPE(*CHAR) LEN(9999) /**/
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&ERR) TYPE(*CHAR) LEN(100) /**/
DCL VAR(&FORMAT) TYPE(*CHAR) LEN(8) +
VALUE('USRI0300') /**/
DCL VAR(&OFSHOME) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&OFSHOMED) TYPE(*DEC) LEN(9) /**/
DCL VAR(&HOMEDIR) TYPE(*CHAR) LEN(512) /*IN UCS*2*/
DCL VAR(&CCSID) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&LOHOME) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&ST1) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&L1) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&CCSIDN) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&CCSIDNN) TYPE(*DEC) LEN(5 0) /**/
DCL VAR(&ST2) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&GCCASN) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&L2) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&HOMEDIRN) TYPE(*CHAR) LEN(256) /*IN EBCDIC*/
DCL VAR(&L3) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&L4) TYPE(*CHAR) LEN(4) /**/
CHGVAR VAR(%BIN(&RCVLEN)) VALUE(9999)
IF COND(&USRPRF = '*CURRENT ') THEN(RTVJOBA +
CURUSER(&USRPRF) DFTCCSID(&CCSIDNN))
/* RETRIEVE USER INFORMATION (QSYRUSRI) API */
CALL PGM(QSYRUSRI) PARM(&RCV &RCVLEN &FORMAT +
&USRPRF &ERR)
CHGVAR VAR(&OFSHOME) VALUE(%SST(&RCV 601 4))
CHGVAR VAR(&OFSHOMED) VALUE(%BIN(&OFSHOME)) /* OFFSET TO HOMEDIR-BLOCK */
CHGVAR VAR(&OFSHOMED) VALUE(&OFSHOMED + 1)
CHGVAR VAR(&CCSID) VALUE(%SST(&RCV &OFSHOMED 4)) /* CCSID OF HOMEDIR IS 61952 UCS-2 */
CHGVAR VAR(&OFSHOMED) VALUE(&OFSHOMED +4+2+3+3+4)
CHGVAR VAR(&LOHOME) VALUE(%SST(&RCV &OFSHOMED 4)) /* NUMBER OF BYTES HOMEDIR UCS*2 */
CHGVAR VAR(&OFSHOMED) VALUE(&OFSHOMED +4+2+10)
CHGVAR VAR(&HOMEDIR) VALUE(%SST(&RCV &OFSHOMED 512)) /* HOMEDIR IN UCS*2 */
CHGVAR VAR(%BIN(&ST1)) VALUE(0)
CHGVAR VAR(&L1) VALUE(&LOHOME) /* NUMBER OF BYTES INPUT STRING */
RTVJOBA DFTCCSID(&CCSIDNN) /* CONVERT IN DFT JOB CCSID */
CHGVAR VAR(%BIN(&CCSIDN)) VALUE(&CCSIDNN)
CHGVAR VAR(%BIN(&ST2)) VALUE(2) /* 2 = SPACE PADDED, SO L2 = L3 */
CHGVAR VAR(%BIN(&GCCASN)) VALUE(0)
CHGVAR VAR(%BIN(&L2)) VALUE(256) /* ALLOCATED OUTPUT LENGTH IN BYTES */
/* CONVERT A GRAPHIC CHARACTER STRING (CDRCVRT) API */
CALL PGM(CDRCVRT) PARM(&CCSID &ST1 &HOMEDIR &L1 +
&CCSIDN &ST2 &GCCASN &L2 &HOMEDIRN &L3 +
&L4 &ERR)
/* SNDPGMMSG MSG(&HOMEDIRN) */
ENDPGM
Viel Spaß
Sven
[Dieser Beitrag wurde von Sven Schneider am 23. Mai 2003 editiert.]
Bookmarks