PDA

View Full Version : API Hilfe



wdom
23-05-03, 10:17
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.]

wdom
26-05-03, 06:43
Vielen Dank Sven, ich werde gleich mal mein Glück versuchen.
Willi

wdom
28-05-03, 09:19
Hi Sven,
alles paletti es hat funktioniert.
Danke!!