Exemple : utilisation des API en CL V5R40

BoTTom |
             PGM        PARM(&BIB)
 /* ===================================================================== */
 /* BUT : lister les RÉCEPTEURS DE JOURNAUX AFIN DE LES DÉTRUIRE          */
 /*        sauf ceux attachés                                             */
 /* ===================================================================== */
             DCL        VAR(&COMPTEUR) TYPE(*INT)
             DCL        VAR(&QUAL) TYPE(*CHAR) LEN(20) VALUE(*ALL)
             DCL        VAR(&BIB) TYPE(*CHAR) LEN(10)
             DCL        VAR(&pointeur) TYPE(*PTR)
 
             DCL        VAR(&PTRINFOS) TYPE(*PTR)
             DCL        VAR(&DATA) TYPE(*CHAR) STG(*BASED) LEN(16) +
                          BASPTR(&PTRINFOS)
             DCL        VAR(&DEBUT) TYPE(*INT) STG(*DEFINED) +
                          DEFVAR(&DATA)
             DCL        VAR(&NOMBRE) TYPE(*INT) STG(*DEFINED) DEFVAR(&DATA +
                          9)
             DCL        VAR(&TAILLE) TYPE(*INT) STG(*DEFINED) DEFVAR(&DATA 13)
 
             DCL        VAR(&ptrretour) TYPE(*PTR)
             DCL        VAR(&RETOUR) TYPE(*CHAR) STG(*BASED) LEN(30) +
                          BASPTR(&PTRRETOUR)
             DCL        VAR(&OBJ) TYPE(*CHAR) STG(*DEFINED) LEN(10) +
                          DEFVAR(&RETOUR)
             DCL        VAR(&OBJLIB) TYPE(*CHAR) STG(*DEFINED) LEN(10) +
                          DEFVAR(&RETOUR 11)
             DCL        VAR(&OBJTYPE) TYPE(*CHAR) STG(*DEFINED) LEN(10) +
                          DEFVAR(&RETOUR 21)
 
 
 /* VARIABLES UTILISEES PAR LA GESTION DE MESSAGES */
             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)
 
             DLTUSRSPC QTEMP/DLTLIBRCV
              MONMSG     MSGID(CPF2105) EXEC(RCVMSG PGMQ(*SAME) +
                          MSGTYPE(*EXCP))
 
 /* CRÉATION DU USER SPACE */
              CALL       PGM(QUSCRTUS) PARM('DLTLIBRCV QTEMP' /* USRSPC   */ +
                                            '          '      /* ATTRIBUT */ +


|
                                            X'0000FFFF'       /* TAILLE   */ +
                                            X'00'             /* VAL INIT */ +
                                            '*USE'            /* DROITS   */ +
                                            'POUR DLTLIBRCV') /* TEXTE    */
 /* REMPLISSAGE, LISTE DES OBJETS */
             CHGVAR     VAR(%SST(&QUAL 11 10)) VALUE(&BIB)
             CALL QUSLOBJ  PARM('DLTLIBRCV QTEMP'  /* USRSPC   */       +
                                'OBJL0100'         /* FORMAT   */       +
                                &QUAL              /* bib/obj  */       +
                                '*JRNRCV'          /* type     */       +
                               )
 /* positionnement sur début du USer Space */
             CALL       PGM(QUSPTRUS) PARM('DLTLIBRCV QTEMP' &Pointeur)
 /* récupération de &DATA, donc de &DEBUT &TAILLE ET &NOMBRE */
             chgvar     &ptrinfos &pointeur
             CHGVAR     %OFFSET(&ptrinfos) VALUE(%OFFSET(&ptrinfos) + 124)
 
 /* positionnement début de liste (on place &retour DANS le USer Space)*/
             chgvar     &ptrretour &pointeur
             CHGVAR     %OFFSET(&ptrretour) VALUE(%OFFSET(&ptrretour) + +
                          &DEBUT )
 
             DOFOR      VAR(&COMPTEUR) FROM(1) TO(&NOMBRE) BY(1)
 
                DLTJRNRCV  JRNRCV(&OBJLIB/&OBJ)
               MONMSG     MSGID(CPF7022)
 
               if         (&compteur < &nombre) then(do)
                  CHGVAR     %OFFSET(&ptrretour) VALUE(%OFFSET(&ptrretour) +
                               + &TAILLE)
               ENDDO
             ENDDO
 
 /* RENVOI DES MESSAGES DE TYPE *COMP SI FIN NORMALE */
 COMPMSG:
             DLTUSRSPC QTEMP/DLTLIBRCV
             SNDPGMMSG  MSG('Ménage sur les récepteurs de journaux +
                          effectué') TOPGMQ(*PRV (*PGMBDY)) +
                          MSGTYPE(*COMP)
             return
 
                     /* RENVOI DU MESSAGE D'ERREUR RECU  */
 ERREUR:
             RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +


|
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV (*PGMBDY)) +
                          MSGTYPE(*ESCAPE)
             ENDPGM




©AF400