
|
PGM PARM(&COD &LIB &SIZRT &TYP)
DCL &COD *CHAR 1
DCL &LIB *CHAR 10
DCL &SIZRT *DEC 15 0
DCL &TYP *CHAR 7
DCL &WTYP *CHAR 10
DCL &TAILLE *DEC 15 0
DCL &MULT *DEC (15 0)
DCL &TOTAL *DEC (15 0)
DCL &TOTALC *CHAR 15
DCL &TOTALCL *CHAR 19
DCL &OBJLIB *CHAR 20 VALUE('*ALL')
DCL &RETOUR *CHAR 585
DCL &POS *CHAR 4
DCL &LG *CHAR 4
DCL &LGUS *DEC (15 0)
DCL &DEBUT *DEC (15 0)
DCL &NOMBRE *DEC (15 0)
DCL &COMPTEUR *DEC (15 0)
DCL &UNITE *CHAR 10
DCL &POSEDT *DEC (2 0)
DCL &LGEDT *DEC (2 0)
/* VARIABLES UTILISEES PAR LA GESTION DE MESSGAES */
DCL &ERRORSW *LGL /* SWITCH */
DCL &MSGID *CHAR LEN(7) /* ID MSG */
DCL &MSGDTA *CHAR LEN(100) /* DATA */
DCL &MSGF *CHAR LEN(10) /* FICHIER */
DCL &MSGFLIB *CHAR LEN(10) /* BIBLI */
 
MONMSG MSGID(CPF0000) EXEC(GOTO ERREUR)
/* CREATION DU USER SPACE */
CRTUSRSPC USRSPC(QTEMP/LIBSIZ)
CHGVAR %SST(&OBJLIB 11 10) &LIB
/* REMPLISSAGE AVEC LISTE DES OBJETS */
CHGVAR &TYP &TYP /* TEST PARAM RENSEIGNÉ */
MONMSG MCH0000 EXEC(DO) /* (CDE ANCIENNE VERSION) */
CHGVAR &WTYP '*ALL'
GOTO LISTE
ENDDO
IF (&TYP ^= ' ') CHGVAR &WTYP &TYP
ELSE CHGVAR &WTYP '*ALL'
LISTE: CALL QUSLOBJ PARM('LIBSIZ QTEMP ' +
'OBJL0700' +
&OBJLIB +
|
&WTYP)
/* EXTRACTIONS NOMBRE D'OBETS ET INFOS GENERALES */
CHGVAR %BIN(&POS) 125
CHGVAR %BIN(&LG) 16
CALL QUSRTVUS PARM('LIBSIZ QTEMP ' +
&POS &LG &RETOUR)
CHGVAR &NOMBRE %BIN(&RETOUR 9 4)
IF (&NOMBRE > 0) THEN(DO)
CHGVAR &LGUS %BIN(&RETOUR 13 4)
CHGVAR &DEBUT %BIN(&RETOUR 1 4)
CHGVAR &DEBUT (&DEBUT + 1)
CHGVAR %BIN(&LG) 585
/* BOUCLE LECTURE D'UN OBJET */
BCL:
CHGVAR %BIN(&POS) &DEBUT
CALL QUSRTVUS PARM('LIBSIZ QTEMP ' +
&POS &LG &RETOUR)
/* CALCUL DE LA TAILLE DE CET OBJET ET CUMUL */
CHGVAR &TAILLE %BIN(&RETOUR 577 4)
CHGVAR &MULT %BIN(&RETOUR 581 4) /* 1 OU 1024 */
CHGVAR &TAILLE (&TAILLE * &MULT)
CHGVAR &TOTAL (&TOTAL + &TAILLE)
/* SI'IL RESTE DES OBJETS(SUIVANT "NOMBRE" , BOUCLE */
CHGVAR &COMPTEUR (&COMPTEUR + 1)
IF (&COMPTEUR < &NOMBRE) THEN(DO)
CHGVAR &DEBUT (&DEBUT + &LGUS)
GOTO BCL
ENDDO
 
ENDDO
IF (&COD = 'R') THEN(CHGVAR &SIZRT &TOTAL)
ELSE DO
/* TOTAL EN KO SI > À 1024 OCTETS */
IF (&TOTAL > 1024) THEN(DO)
CHGVAR &TOTAL (&TOTAL / 1024)
CHGVAR &UNITE 'Ko'
ENDDO
ELSE CHGVAR &UNITE 'Octets'
CHGVAR &TOTALC &TOTAL
/* MISE EN FORME */
CHGVAR &POSEDT 1
IF (%SST(&TOTALC 1 3) ^= '000') +
CHGVAR %SST(&TOTALCL 1 4) (%SST(&TOTALC 1 3) *CAT '.')
ELSE CHGVAR &POSEDT 5
|
IF (%SST(&TOTALC 4 3) ^= '000') +
CHGVAR %SST(&TOTALCL 5 4) (%SST(&TOTALC 4 3) *CAT '.')
ELSE CHGVAR &POSEDT 9
IF (%SST(&TOTALC 7 3) ^= '000') +
CHGVAR %SST(&TOTALCL 9 4) (%SST(&TOTALC 7 3) *CAT '.')
ELSE CHGVAR &POSEDT 13
IF (%SST(&TOTALC 10 3) ^= '000') +
CHGVAR %SST(&TOTALCL 13 4) (%SST(&TOTALC 10 3) *CAT '.')
ELSE CHGVAR &POSEDT 17
CHGVAR %SST(&TOTALCL 17 3) %SST(&TOTALC 13 3)
 
CHGVAR &LGEDT (20 - &POSEDT)
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('La +
taille de la bibliothèque ' *CAT &LIB +
*BCAT 'est de :' *BCAT %SST(&TOTALCL +
&POSEDT &LGEDT) *BCAT &UNITE) MSGTYPE(*COMP)
ENDDO
RETURN
/*----------------------------------------*/
ERREUR: /* GESTION DES ERREURS */
/*----------------------------------------*/
IF &ERRORSW SNDPGMMSG MSGID(CPF9899) +
MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* 2EME FOIS*/
/* ARRET PGM*/
CHGVAR &ERRORSW '1' /* MISE EN PLACE DU SWTICH */
 
/* RENVOI DES MESSAGES DE TYPE *DIAG SI FIN ANORMALE */
DIAGMSG: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
IF (&MSGID *EQ ' ') GOTO EXCPMSG
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO DIAGMSG /* BOUCLE SUR MESSAGES *DIAG */
 
/* RENVOI DU MESSAGE D'ERREUR */
EXCPMSG: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
ENDPGM
|