Nouveautés syntaxique du CL en version 5.40

BoTTom |    Changer de couleur
 
 Nouveautés syntaxique du CL en V5R40.
 ------------------------------------
 
 Nouveaux types de variables et nouvelles options de déclaration
 
  Après les types *INT et *UINT en V5R30, le type *PTR (pointeur) est
   maintenant admis.
 
  DCL VAR(&pointeur) TYPE(*PTR)
 
  ce qui permet ensuite, la déclaration d'une variable basée sur ce pointeur
 
  DCL VAR(&Data) TYPE(???) STG(*BASED) BASPTR(&pointeur)
 
  un pointeur peut être renseigné :
 
   1/ par copie d'un pointeur
 
   2/ par récupération de l'adresse d'une variable avec %ADDRESS() ou %ADDR
 
           CHGVAR &pointeur %ADDRESS(&autreData)


|    Changer de couleur
 
   3/ en incrémentation, décrémentation avec la fonction %OFFSET() ou %OFS
 
       CHGVAR %OFFSET(&pointeur) VALUE(%OFFSET(&pointeur) + 1)
 
  Enfin une variable peut pointer directement sur une autre (comme une DS)
   évitant ainsi les %SST() dans le code.
 
  DCL VAR(&Data) TYPE(*CHAR) LEN(256)
  DCL VAR(&portion) TYPE(*CHAR) LEN(10) +
       STG(*DEFINED) DEFVAR(&Data 11)
 
       &portion recouvrant les Octets 11 à 20 de &Data
 
 
Exemple avec un pgm associé à la commande STRWCH
 
 le but de jeu est de détecter les profils désactivés à cause d'un nombre
  trop élevé de tentatives d'ouverture de session infructueuses.
 
 le message CPF1393 est alors envoyé à QHST
 


|    Changer de couleur
 la commande STRWCH SSNID(HST_1393)  WCHPGM(AF4test/HTS_1393)
                                     WCHMSG(CPF1393) WCHMSGQ(*HSTLOG)
  lance l'espion
 
 voici la partie déclaration du CL
 
 PGM PARM(&TYPE &SESSION &ERREUR &DATA)
  DCL  &TYPE    *CHAR   10
  DCL  &SESSION *CHAR   10
  DCL  &ERREUR  *CHAR   10
  DCL  &DATA    *CHAR 1000
 
  DCL  &MSG     *CHAR    7   STG(*DEFINED) DEFVAR(&Data 5)
 
 
  DCL  &MSGF    *CHAR   10   STG(*DEFINED) DEFVAR(&Data 391)
  DCL  &MSGFL   *CHAR   10   STG(*DEFINED) DEFVAR(&Data 401)
  DCL  &MDTAOFS *INT     4   STG(*DEFINED) DEFVAR(&Data 441)
 
  DCL  &PTR     *PTR
  DCL  &MSGDTA  *CHAR   80   STG(*BASED)   BASPTR(&ptr)
 


|    Changer de couleur
 
  CHGVAR &PTR         VALUE(%ADDR(&DATA))
  CHGVAR %OFS(&PTR)   VALUE(%OFS(&PTR) + &MDTAOFS)
 
  CHGVAR &ERREUR      VALUE('          ')
 
  SNDUSRMSG           MSGID(&MSG) MSGF(&MSGFL/&MSGF)  MSGDTA(&MSGDTA)
                      MSGTYPE(*INFO)  TOUSR(CM) /* CM en copie */
    MONMSG CPF0000 EXEC(CHGVAR &ERREUR '*ERROR')
 
  ENDPGM
 
 
 Pour finir, le CL implémente maintenant la notion de sous programme
 
  définition d'un sous programme     SUBR / ENDSUBR
 
  les sous programmes doivent être placés en FIN de pgm
  ils ne doivent pas être imbriqués
  ils peuvent bien sûr s'appeller les uns les autres dans la limite
   indiquée par la nouvelle commande DLCPRCOPT (dft = 99)
 


|    Changer de couleur
 exemple de source CL avec des sous programmes 
 
 PGM
   DCL
   DCL
 
     .../...
 
     CALLSUBR SUBR(TEST)
 
 
 /* fin logique du pgm */
SUBR SUBR(TEST)
 
 .../...
ENDSUBR
 
le sous programme peut retourner une valeur numérique ENDSUBR RTNVAL(&rt)
 
 cette valeur est alors récupérée lors de l'appel par CALLSUBR ..RTNVAL(&R)
  (&R doit être une variable de type *INT de lg 4).
 





©AF400