unzipclp
PGM PARM(&ZIPFILE &FILE &ADDPATH &REPLACE +
&PASSWORD)
DCL VAR(&ZIPFILE) TYPE(*CHAR) LEN(128)
DCL VAR(&FILE) TYPE(*CHAR) LEN(128)
DCL VAR(&ADDPATH) TYPE(*CHAR) LEN(4)
DCL VAR(&REPLACE) TYPE(*CHAR) LEN(7)
DCL VAR(&PASSWORD) TYPE(*CHAR) LEN(32)
DCL VAR(&CMDSTR) TYPE(*CHAR) LEN(3000) +
VALUE('CALL PGM(MINIUNZ400) PARM(')
DCL VAR(&Q) TYPE(*CHAR) LEN(1) VALUE('''')
DCL VAR(&ERR) TYPE(*CHAR) LEN(7)
DCL VAR(&ERR_DEC) TYPE(*DEC) LEN(10)
/* QtmhGetEnv parameters */
DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(100) /* output */
DCL VAR(&RCVLEN_B) TYPE(*CHAR) LEN(4) +
VALUE(X'00000064') /* input */
DCL VAR(&RSPLEN_B) TYPE(*CHAR) LEN(4) /* output */
DCL VAR(&RSPLEN) TYPE(*DEC) LEN(3)
DCL VAR(&REQVAR) TYPE(*CHAR) LEN(20) +
VALUE(MINIUNZ_RTNCDE) /* input */
DCL VAR(&REQLEN_B) TYPE(*CHAR) LEN(4) +
VALUE(X'0000000E') /* input */
DCL VAR(&QUSEC) TYPE(*CHAR) LEN(16) +
VALUE(X'00100000000000000000000000000000') +
/* input/output */
/* QUSEC structure */
DCL VAR(&QUSBAVL_B) TYPE(*CHAR) LEN(4) /* output */
DCL VAR(&QUSBAVL) TYPE(*DEC) LEN(3)
/* Construct command string to pass QCMDEXC */
NEXT: IF COND(&ADDPATH = '*YES') THEN(CHGVAR +
VAR(&CMDSTR) VALUE(&CMDSTR |< &Q || '-x' || &Q))
ELSE CMD(CHGVAR VAR(&CMDSTR) VALUE(&CMDSTR |< &Q +
|| '-e' || &Q))
IF COND(&REPLACE = '*YES') THEN(CHGVAR +
VAR(&CMDSTR) VALUE(&CMDSTR |> &Q || '-o' +
|| &Q))
IF COND(&PASSWORD *NE ' ') THEN(CHGVAR +
VAR(&CMDSTR) VALUE(&CMDSTR |> &Q || '-p' +
|| &Q || ' ' || &Q |< &PASSWORD |< &Q))
IF COND(&FILE *NE '*ALL') THEN(CHGVAR +
VAR(&CMDSTR) VALUE(&CMDSTR |> &Q |< +
&ZIPFILE |< &Q || ' ' || &Q |< &FILE |< +
&Q |< ')'))
ELSE CMD(CHGVAR VAR(&CMDSTR) VALUE(&CMDSTR |> &Q +
|< &ZIPFILE |< &Q || ')'))
/* Call miniunz via QCMDEXC */
/* SNDPGMMSG MSG(&CMDSTR) */
CALL PGM(QCMDEXC) PARM(&CMDSTR 300)
MONMSG MSGID(CPF0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('Command +
failed. QCMDEXC returned unexpected +
error.') MSGTYPE(*ESCAPE)
GOTO CMDLBL(EXIT)
ENDDO
/* Get environment variable */
CALLPRC PRC('QtmhGetEnv') PARM(&RCVVAR &RCVLEN_B +
&RSPLEN_B &REQVAR &REQLEN_B &QUSEC)
CHGVAR VAR(&QUSBAVL_B) VALUE(%SST(&QUSEC 5 4))
CHGVAR VAR(&QUSBAVL) VALUE(%BIN(&QUSBAVL_B))
IF COND(&QUSBAVL > 0) THEN(DO)
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA('QtmhGetEnv returned ' || +
%SST(&QUSEC 9 7) |< '.') MSGTYPE(*ESCAPE)
GOTO CMDLBL(EXIT)
ENDDO
CHGVAR VAR(&RSPLEN) VALUE(%BIN(&RSPLEN_B))
IF COND(&RSPLEN < 1) THEN(DO)
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA('QtmhGetEnv returned invalid +
length (smaller than 1).') MSGTYPE(*ESCAPE)
GOTO CMDLBL(EXIT)
ENDDO
/* Examine environment variable (exit status of mnizip) */
CHGVAR VAR(&ERR) VALUE(%SST(&RCVVAR 1 &RSPLEN))
CHGVAR VAR(&ERR_DEC) VALUE(&ERR)
IF COND(&ERR_DEC = 0) THEN(SNDPGMMSG +
MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Command completed'))
ELSE CMD(SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA('Command failed. See low-level +
message for detail.') MSGTYPE(*ESCAPE))
EXIT: ENDPGM