Le langage de contrôle accepte depuis la 2.2 de travailler avec des données BINAIRES. Il n'est pas possible de déclarer une variables binaire, mais il est possible de la manipuler avec la fonction %BIN. %BIN(&var pos lg) ^ ^ ! ! ! !-- position fonctionne comme dans %SST ! lg doit être 2 ou 4 ! ! si position/lg non indiqué la variable doit être ! *CHAR (2 ou 4) variable de type caractère S'il y a des décimales elles seront tronquées. Si la valeur est négative ==> complément vrai Si le récepteur est trop petit ==> MCH1210 |
Exemples : DCL VAR(&N) TYPE(*DEC) LEN(3 0) DCL VAR(&B) TYPE(*CHAR) LEN(2) VALUE(X'000A') CHGVAR VAR(&N) VALUE(%BIN(&B)) /* N = 10 */ CHGVAR VAR(%BIN(&B)) VALUE(15) /* B = X'000F' */ PGM PARM(&LISTE) /* GESTION DE PARAMETRES */ /* EN LISTE SIMPLE - MAX(3) */ DCL VAR(&LISTE) TYPE(*CHAR) LEN(32) DCL VAR(&ELEM) TYPE(*CHAR) LEN(10) DCL VAR(&CNT) TYPE(*DEC) LEN(1 0) DCL VAR(&DEP) TYPE(*DEC) LEN(2 0) VALUE(-7) IF (%BIN(&LISTE 1 2) > 0) THEN(DO) SUIVANT: CHGVAR &CNT (&CNT + 1) CHGVAR &DEP (&DEP + 10) CHGVAR &ELEM %SST(&LISTE &DEP 10) /* TRAITEMENT DE CETTE VALEUR */ IF (&CNT < %BIN(&LISTE 1 2)) THEN(GOTO SUIVANT) ENDDO ENDPGM |
La version 5.3 apporte de nombreuses avancées pour le langage CL. - le support direct des variables binaires (plus besoin de %BIN) - le support de fichiers multiples (il est enfin possible de lire un fichier BD et d'afficher un DSPF dans le même programme) - l'arrivée de nombreuses commandes de structuration DOWHILE,DOUNTIL,DOFOR. + variables binaires DCL VAR(&CPT) TYPE(*INT) il existe aussi le format *UINT (binaire non signé) la longueur est de 2 octets ou 4 octets la transformation de binaire en décimal ou caractère est possible avec CHGVAR |
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) |
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 |