View Full Version : API Hilfe
Hi,
ich muss für alle user den "local Path name" und "Supp. groups" ausgeben. Da ich keine Erfahrung mit API's habe, speziell mit Offsets wie sie hier im QSYRUSRI-API gefordert sind, bräuchte ich einen Tip wie man so etwas in RPG III/IV löst. Hat vielleicht jemand eine Idee oder ein kleines Beispiel? Die Beispiele aus dem API-Handbuch behandeln das ja leider nicht (oder ich habs nicht geschnallt).
Danke schon mal.
Sven Schneider
23-05-03, 15:40
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 :
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.]
Vielen Dank Sven, ich werde gleich mal mein Glück versuchen.
Willi
Hi Sven,
alles paletti es hat funktioniert.
Danke!!