
|
PGM PARM(&PARAM1 &PARAM &FMT)
 
DCL VAR(&PARAM1) TYPE(*CHAR) LEN(20)
DCL VAR(&PARAM) TYPE(*CHAR) LEN(104)
DCL VAR(&LIST) TYPE(*CHAR) LEN(32)
DCL VAR(&MBR) TYPE(*CHAR) LEN(10)
DCL VAR(&FMT) TYPE(*CHAR) LEN(10)
DCL VAR(&FICH) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&DEB) TYPE(*CHAR) LEN(10)
DCL VAR(&FIN) TYPE(*CHAR) LEN(10)
DCL VAR(&NBLC) TYPE(*CHAR) LEN(2)
DCL VAR(&NBLP) TYPE(*DEC) LEN(2 0)
DCL VAR(&POINT) TYPE(*DEC) LEN(1 0)
DCL VAR(&DEPC) TYPE(*CHAR) LEN(2)
DCL VAR(&DEPP) TYPE(*DEC) LEN(2 0)
DCL VAR(&COMPT) TYPE(*DEC) LEN(1 0) VALUE(1)
DCL VAR(&MSG) TYPE(*CHAR) LEN(100)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(10)
DCL VAR(&NOSYS) TYPE(*CHAR) LEN(4)
DEBUT: CHGVAR VAR(&FICH) VALUE(%SST(&PARAM1 1 10))
CHGVAR VAR(&LIB) VALUE(%SST(&PARAM1 11 10))
IF COND(&LIB *NE '*LIBL ') THEN(DO)
CONTROLE1: CHKOBJ OBJ(&LIB) OBJTYPE(*LIB)
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&MSGDTA) VALUE('bibliothèque ' *CAT &LIB +
*BCAT 'non trouvée')
GOTO CMDLBL(MESSAGE)
ENDDO
ENDDO
CONTROLE2: CHKOBJ OBJ(&LIB/&FICH) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&MSGDTA) VALUE('Fichier ' *CAT &FICH +
*BCAT 'non trouvé')
GOTO CMDLBL(MESSAGE)
ENDDO
CHGVAR VAR(&NBLC) VALUE(%SST(&PARAM 1 2))
CHGVAR VAR(&NBLP) VALUE(%BIN(&NBLC))
IF COND(&NBLP = 0) THEN(GOTO CMDLBL(FIN))
BOUCLE: CHGVAR VAR(&POINT) VALUE((&COMPT * 2) + 1)
CHGVAR VAR(&DEPC) VALUE(%SST(&PARAM &POINT 2))
CHGVAR VAR(&DEPP) VALUE(%BIN(&DEPC))
CHGVAR VAR(&DEPP) VALUE(&DEPP + 1)
CHGVAR VAR(&LIST) VALUE(%SST(&PARAM &DEPP 32))
|
CHGVAR VAR(&MBR) VALUE(%SST(&LIST 3 10))
CHGVAR VAR(&DEB) VALUE(%SST(&LIST 13 10))
CHGVAR VAR(&FIN) VALUE(%SST(&LIST 23 10))
IF COND(&MBR *NE '*FIRST ') THEN(DO)
CONTROLE3: CHKOBJ OBJ(&LIB/&FICH) OBJTYPE(*FILE) MBR(&MBR)
MONMSG MSGID(CPF9815) EXEC(DO)
CHGVAR VAR(&MSGDTA) VALUE('Membre ' *CAT &MBR *BCAT +
'non trouvé')
GOTO MESSAGE
ENDDO
ENDDO
CONTROLE4: IF COND((&DEB *NE '*START ') *AND (&FIN *NE +
'*END ')) THEN(IF COND(&FIN *LT &DEB) +
THEN(GOTO CMDLBL(MESSAGE2)))
CHGVAR VAR(&COMPT) VALUE(&COMPT + 1)
IF COND(&COMPT *LE &NBLP) THEN(GOTO +
CMDLBL(BOUCLE))
RETURN
MESSAGE: SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA(&NOSYS +
*CAT &MSGDTA) MSGTYPE(*DIAG)
GOTO CMDLBL(ARRET)
MESSAGE2: SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA(&NOSYS +
*CAT 'N° Début plus grand que N° fin') +
MSGTYPE(*DIAG)
ARRET: SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
ENDPGM
|