DIM RECORD commande

Syntaxe :

DIM RECORD nomRecord
  DIM declaration1 [,declaration2...]
  [DIM declaration3 [,declaration4...]]
  :
DIM END RECORD identificateurRec

declaration peut avoir l’une des formes suivantes :

identificateur[typeSuffixe][;statExpr]

[longueurMax] identificateur$ [;statExpr]

identificateur AS {typePredefini|typeUtilisateur}[;statExpr]

identificateur.constante [;statExpr]

{% | & | && | &&&}


identificateur est un quelconque identificateur standard de FB^3 qui commence par une lettre et qui contient uniquement des lettres et des chiffres.
typeSuffixe est un suffixe identificateur de type quelconque.
statExpr est une expression statique entière non négative.
longueurMax est un entier littéral ou une constante symbolique entière dans la plage 1 à 255.
typePredefini est l’un des types qui suivent : CHAR, [UNSIGNED] BYTE, [UNSIGNED] WORD, [UNSIGNED] SHORT, [UNSIGNED] INT, UInt16 ,[UNSIGNED] LONG, UInt32, POINT, FIXED, RECT, HANDLE, RGNHANDLE, STR255, STR63, STR31, STR15, DOUBLE, SINGLE.
typeUtilisateur est un nom de type précédemment défini par une commande BEGIN RECORD, ou par une commande #DEFINE.
constante est un entier littéral non négatif ou une constante symbolique; mais, s’il s’agit d’une constante symbolique son caractère de soulignement initial est omis.
identificateurRec est un identificateur qui commence soit par un caractère de soulignement soit par un point.

Révision :

Juillet 2000 (Release 3)

Description :

La commande DIM RECORD indique le début d’un bloc de définition d’un “pseudo-record” (par comparaison avec la définition d’un “vrai record”, qui, lui, est déclarée au moyen d’un bloc BEGIN RECORD…END RECORD). Comme montré dans la description de la syntaxe, le bloc doit contenir des commandes DIM, et doit se terminer par une commande DIM END RECORD. Le bloc de définition d’un “pseudo record” demande au compilateur de générer une nouvelle constante symbolique entière pour chaque identificateur, et pour identificateurRec.

Par exemple, le bloc suivant :

DIM RECORD monRecord
  DIM premierChamp%
  DIM 5 secondChamp$
  DIM troisiemeChamp&
  DIM quatriemeChamp.10
DIM END RECORD .maTailleRecord

est exactement équivalant aux commandes ci-dessous :

_premierChamp = 0
_secondChamp  = 2
_troisiemeChamp = 8
_quatriemeChamp = 12
_maTailleRecord = 22

Pour cette raison, chaque identificateur et identificateurRec, doivent avoir un nom qui diffère de celui de n’importe quelle autre constante symbolique définie ailleurs dans votre programme, et ce nom doit être différent également de celui de n’importe quelle autre constante symbolique prédéfinie par FB^3. Ceci implique aussi qu’aucun nom pour identificateur et pour identificateurRec dans un bloc DIM RECORD ne peut avoir le même que celui d’un identificateur ou d’un identificateurRec d’un autre bloc DIM RECORD.

Après que ces constantes symboliques ont été générées, vous pouvez utiliser la constante identificateurRec pour déclarer une variable de ce type de “pseudo record”. En poursuivant l’exemple ci-dessus, vous pourriez écrire les lignes qui suivent, n’importe où dans votre programme après le bloc DIM RECORD :

DIM unRecord.maTailleRecord

Ceci réserve 22 octets pour la variable “unRecord”, et équivaut exactement à la déclaration suivante :

DIM unRecord.22

Vous pouvez alors imaginer cette zone de 22 octets comme étant divisée en quatre “champs” :

Un entier court sur 2 octets (premierChamp%)
Une chaîne de 6 octets (5 caractères au maximum) (secondChamp$)
Un entier long sur 4 octets (troisiemeChamp&)
Un sous-record de 10 octets (quatriemeChamp)

Remarquez que les quatre premières constantes symboliques générées par le bloc DIM RECORD représentent les valeurs du décalage en octets de ces champs par rapport au début du record. Cela signifie que vous pouvez utiliser la syntaxe du “point imbriqué” avec ces constantes pour accéder aux champs individuellement à l’intérieur du pseudo record.(voir Annexe B: Variables, pour en savoir plus au sujet de la syntaxe du “point imbriqué”. Par exemple :

PRINT unRecord.troisiemeChamp&

Cette instruction demande à FB^3 d’afficher l’entier long qui est localisé 8 octets après le début de unRecord. Notez que, vous pourriez aussi bien écrire l’instruction suivante :

PRINT unRecord.8&

Cependant, l’utilisation des noms de constantes symboliques rend généralement votre code plus facile à lire et à maintenir.

Utilisation des déclarateurs d’alignement (%, &, &&, &&&)

Les déclarateurs d’alignement sont utilisés de la même manière que dans une commande DIM “régulière”. L’utilisation de déclarateur d’alignement provoquera la chose suivante : la constante symbolique générée après la déclaration d’identificateur ou identificateurRec prendra une valeur divisible par 2, 4, 8 ou 16. Par exemple :

DIM RECORD monRec
  DIM abc.9
  DIM n%
  DIM &, xyz%
DIM END RECORD .tailleRec

Le déclarateur “&” oblige la constante _xyz à avoir une valeur qui est divisible par 4. Les constantes sont générées avec les valeurs suivantes :

_abc      = 0
_n        = 9
_xyz      = 12
_tailleRec = 14


Utilisation de la syntaxe point-virgule (;)


La syntaxe point-virgule est utilisée de la même manière que dans une commande DIM “régulière”. L’utilisation d’une déclaration de la forme DIM var1; constante, var2 oblige var1 et var2 à générer des constantes symboliques dont la différence des valeurs est de constante. Par exemple :

DIM RECORD monRec
  DIM 5 leNom$
  DIM leRect;0
  DIM pt1.4
  DIM pt2.4
DIM END RECORD .tailleRec

Ce bloc force la génération des constantes suivantes :

_leNom  = 0
_leRect = 6
_pt1    = 6
_pt2    = 10
_tailleRec = 14


Utilisation du caractère de soulignement avec identificateurRec


Si identificateurRec commence par un caractère de soulignement plutôt que par un point; alors en plus de la génération des nouvelles constantes symboliques, FB^3 réserve aussi un espace de stockage pour une variable unique du type de ce pseudo record (dont le nom est spécifié par le paramètre nomRecord), ainsi qu’une variable pour chacun des champs. De plus, les variables des champs sont allouées dans l’espace de stockage de la variable record. Par exemple, ce bloc :

DIM RECORD monRecord
  DIM premierChamp%
  DIM 5 secondChamp$
  DIM troisiemeChamp&
  DIM quatriemeChamp.10
DIM END RECORD _maTailleRec

est exactement équivalant aux commandes suivantes :

_premierChamp   = 0
_secondChamp    = 2
_troisiemeChamp = 8
_quatriemeChamp = 12
_myRecSize     = 22

DIM monRecord.maTailleRec;0
DIM premierChamp%, 5 secondChamp$
DIM troisiemeChamp&, quatriemeChamp.10

Dans ce cas, tandis que les constantes symboliques ont une portée globale, la portée des variables déclarées dépend de l’endroit où le bloc DIM RECORD apparaît dans votre programme.

Voir Aussi :