2. Sous-langage de définition des données
2.1 Champs
Toutes les communications avec la machine de réseau se font au moyen de chaînes de bits : ces chaînes de bits, également appelées messages, sont analysées par le HOST récepteur pour reconstruire à l'intérieur de sa mémoire les structures de données dans sa propre mémoire et son propre code.
Les bits sont regroupés en champs significatifs : un champ est un groupe de bits ayant un contenu défini. Il peut contenir :
- un élément de données (champ de données)
- un motif de bits spécifiant des paramètres d'environnement
- un pointeur
- l'identification d'autres champs.
La méthode de description des formats des perles est dérivée de la méthode de description d'un message binaire suggérée dans la RFC #31 :
- chaque champ est déclaré avec son nom et sa longueur en nombre de bits.
- les valeurs fixes couramment utilisées d'un champ qui correspondent à une signification particulière peuvent recevoir des noms.
- les manières légales de concaténer des champs sont introduites par des règles ; lorsque seules certaines valeurs fixes d'un champ sont autorisées, elles peuvent être spécifiées soit par leur valeur, soit par le nom correspondant.
2.2 Perles de données.
Les champs de données (type (a)) sont concaténés pour former des perles de données : une perle est une unité atomique indivisible de données utilisée comme élément de construction de toute structure de données à transmettre entre les HOST et la machine de réseau. Une perle est la plus petite unité de données qui puisse être référencée.
Les manières légales de former une perle par concaténation de plusieurs champs sont indiquées dans une règle de construction. Les perles ont une longueur fixe et une structure non ambiguë. Dans une machine réelle, les perles sont généralement définies comme un nombre entier de registres contigus. Cette contrainte ne s'applique pas ici, bien qu'il puisse s'avérer plus efficace de favoriser les HOST ayant, par exemple, des mots de 32 bits et 4 octets par mot, ce qui est la structure de mot la plus courante sur le réseau ARPA.
Les perles de données peuvent être considérées comme les opérandes du langage dont les champs de type (b) et (c) seraient les opérateurs.
2.3 Champs de contrôle
La manière dont les perles de données sont liées les unes aux autres et l'environnement dans lequel elles opèrent sont spécifiés par des champs de contrôle supplémentaires, qui ne peuvent pas être référencés et qui sont des opérateurs ou des identificateurs portant sur la chaîne de perles qui suit, ou des liaisons entre perles individuelles.
La portée d'un champ de contrôle peut aussi bien être l'ensemble des perles ou des sous-structures d'une structure, s'il est spécifié au niveau de la tête de la structure. Pour être plus précis, deux sortes de structures de perles doivent être définies : les structures homogènes et les structures hétérogènes.
Une structure est définie comme homogène si un type de perle unique et un environnement de paramètres fixe pour l'ensemble de la structure sont tous deux spécifiés à la tête de la structure.
Une structure est définie comme hétérogène si au moins l'une des conditions suivantes est vraie.
-
différents types de perles sont utilisés pour construire la structure
-
l'environnement dans lequel se trouvent les perles de la structure change au sein de la structure.
Cinq champs de contrôle principaux doivent être définis.
- MODIFY
- FLAG
- POINTER
- IDENTIFICATION
- PARAMETER
2.3.1 Champ MODIFY
Le champ MODIFY est un champ d'un bit qui précède chaque perle d'une structure hétérogène : c'est un indicateur positionné lorsqu'il est suivi d'un ou de plusieurs champs de contrôle de type b, d ou e, qui visent à modifier soit l'environnement des perles de données, soit leur type. Ce champ a la valeur :
- 1 : si le type de la perle de données associée et son environnement ne changent pas
- 0 : si l'élément associé est un champ de contrôle ou une séquence de champs de contrôle de type b, d ou e spécifiant un changement de type et/ou d'environnement des perles de données suivantes.
2.3.2 Champ FLAG
Lorsqu'il est positionné, le champ MODIFY est immédiatement suivi d'un champ FLAG de 8 bits indiquant lesquels des champs IDENTIFICATION et des divers champs PARAMETER possibles sont présents ; lorsqu'il est mis à un, chaque bit individuel signifie ce qui suit :
bit number
0 IDENTIFICATION field present
1 first parameter field present
2 second parameter field present
---
6 sixth parameter field present
7 next field is another FLAG field
for some more parameters (in case
more than 6 parameters may be
attached to a bead environment).
2.3.3 Champ POINTER
Le nombre et la nature des pointeurs à associer à chaque perle dépendent de la définition de la structure. Une structure de liste donnée peut nécessiter un pointeur avant. Une structure en anneau peut utiliser un pointeur supplémentaire vers le premier élément. Les liaisons nécessaires entre perles sont définies dans la définition de la structure, après quoi les champs de pointeur nécessaires sont automatiquement ajoutés à chaque perle de données. Une perle est référencée au sein d'une structure par une adresse relative à la tête de la structure. Ainsi, un champ de pointeur de 16 bits devrait amplement suffire à contenir cette adresse.
2.3.4 Champ IDENTIFICATION
Le champ IDENTIFICATION est un champ de 8 bits qui identifie un type de perle parmi la liste des types de perles définis. Les types de perles standard sont numérotés à partir de zéro en montant et les types de perles non standard sont numérotés à partir de 255 en descendant. La numérotation des types non standard est propre à chaque programme serveur ou à un ensemble de programmes serveurs. Les champs IDENTIFICATION suivent un champ MODIFY de valeur 1 chaque fois que le type de perle n'a pas été défini pour toute la structure dans la racine de la structure. Les champs d'identification sont également utilisés au niveau de la tête de la structure pour spécifier le type des éléments identiques (perles ou structures) utilisés au sein de cette structure.
2.3.5 Champ PARAMETER
Le champ PARAMETER donne la liste des paramètres d'environnement dans lesquels se trouve la chaîne de perles de données qui suit. Un champ PARAMETER est propre à un type de perle ; il suit directement le champ MODIFY lorsqu'il n'y a pas d'ambiguïté ou le type des perles de données suivantes.
Exemple : le champ de paramètres de la perle standard BEAMVT contiendra les champs suivants.
- un champ de 2 bits indiquant le type de mouvement généré
00 do not display move the beam
01 display final point point
10 display vector vector
11 unused
-
un champ de 4 bits indiquant l'intensité du faisceau, par un nombre de 0 à 15, 0 signifiant une intensité nulle et 15 l'intensité maximale possible.
-
un champ de 1 bit pour le clignotement
-
0 : désactivé
-
1 : activé
-
un champ de 1 bit pour la sensibilité au crayon optique
-
0 : désactivé
-
1 : activé
2.4 Définition du métalangage
Un métalangage de type rapport COBOL est utilisé dans les exemples en raison de sa lisibilité, aussi bien dans les définitions de perles que dans celles de structures.
Symbol Meaning
+ concatenation
{ } choice
[ ] optional choice
{ } l<=u { } l<=u repetition
1 lower bound on the
number of identical
items; if omitted l
is assumed to be 0.
u upper bound on the
number of identical
items; if omitted u
is assumed to be ∞.
a number alone means: exact
number of repetition.
: label for further use _within the same rule_
= assignment
= > conditional alternative
( ) grouping
' ' indicates a special value given to the following field name
(+) plus
(-) minus
2.5 Perles standard proposées
2.5.1 Perles alphanumériques
Caractère : CHAR
Un caractère est composé d'un champ de huit bits (qui porte le même nom). De nombreux motifs spéciaux, correspondant aux caractères spéciaux couramment utilisés, sont définis ; ils sont indiqués dans la table 2.5.1, ainsi que certains sous-ensembles de CHAR. Le code de caractères de base est déclaré comme ASCII standard
standard EBCDIC
CODE
or by the name
followed by the 128 characters in this code corresponding to
the 128 ASCII characters. If no code declaration is specified,
the ASCII code is assumed by default.
Représentation des nombres
Normalement, le noyau d'un programme reste dans le HOST serveur et le HOST utilisateur ne devrait avoir aucune opération arithmétique à effectuer sur les données. Dans ce cas, il n'est pas nécessaire de décrire les principes mis en jeu dans la conception de l'unité arithmétique d'un HOST. Mais le format des nombres en virgule fixe et en virgule flottante doit être décrit.
-
dans le cas où les HOST utilisateur et serveur ont la même représentation des nombres, par exemple la représentation standard, la transmission des données dans leur représentation des nombres réduit le flux de données entre eux.
-
si le HOST serveur a une représentation des nombres différente de la représentation standard, selon les données transmises, il existe deux possibilités :
-
les données numériques sont échangées sous forme de nombres décimaux dans le code standard
-
les formats en virgule fixe et en virgule flottante sont définis auprès de la machine de réseau et le HOST utilisateur effectue
-
soit un transcodage direct de la représentation binaire du serveur vers la représentation décimale et inversement.
soit un transcodage de la représentation binaire du serveur vers sa propre représentation binaire et inversement.
Comme la plupart des nombres échangés doivent être imprimés en décimal ou sont fournis en entrée décimale, on estime que, lorsqu'il y a incompatibilité entre les représentations binaires des HOST correspondants, les échanges en représentation décimale seraient les plus simples.
Sont ainsi définis :
-
Nombre en représentation décimale, qui n'est pas une perle mais une chaîne de caractères (voir 2.3.1)
-
Nombres en virgule fixe : simple précision FXPNUM1, double précision FXPNUM2
Field definition BYTE 8 SIGN 1
SBYTE 7
FXP NUM1 <-- SIGN + SBYTE + {BYTE}3
FXP NUM2 <-- FXP NUM1 + {BYTE}4
- Nombres en virgule flottante : simple précision FLPNUM1, double précision FLPNUM2
FLP NUM1 <-- SIGN + SBYTE + {BYTE}3
FLP NUM2 <-- FLPNUM1 + {BYTE}4
Ceci n'exprime que la syntaxe du nombre en virgule flottante. La sémantique devrait indiquer : dans FLPNUM1
-
SIGN est le signe du nombre de format {BYTE}3, qui est la mantisse
-
SBYTE est l'exposant, et sa valeur est décalée d'une valeur de 40₁₆ pour garantir des exposants positifs. En fait, FXPNUM1 et FLPNUM1 diffèrent par leur sémantique.
Ces propriétés seront exprimées par une définition de champ spéciale :
EXP <-- SBYTE (+) '40H'SBYTE
MANT <-- SIGN (+) {BYTE}3
et un nombre en virgule flottante est défini comme :
FLP = MANT 2EXP
1. Caractères spéciaux
Transmission Control Characters
SOH
STX
ETX
EOT
ENQ
ACK
DLE
NAK
SYN
ETB
ESC
Printer Control Characters
horizontal tabulation HT + '0X1' CHAR
vertical tabulation VT + '0BX' CHAR
new line NL + '0AX' CHAR
end of message EOM + '08X' CHAR
Teletype Control Characters
Carriage return CR + ''0DX' CHAR
shift out SO + '0EX' CHAR
shift in SI + '0FX' CHAR
BS +
Device Control Characters
DC1
DC2
DC3
DC4
Table 2.3.1
2. Sous-ensembles de caractères
Numeric characters ' 1 '
{ 2 }
NUM + { . } CHAR
{ . }
{ 9 }
' '
Printable characters { NUM
{ ALPH
PRCHAR + { ≡
{
Intermediate characters ' characters '
{ in column } CHAR
ITCHAR + { 2 }
' '
Final Characters
FIN CHAR + CHAR ⊖ ITCHAR
Transmission Control
Characters* ' NUL '
{ . }
TRACHAR + { . } CHAR
{ DEL }
Derra Control Characters Teletype control character
DCCHAR + ' DC1 ' CHAR TYCCHAR { CR
{ DC2 } { SO
{ DC3 } { SI
{ DC4 } { BS
' ' {
Alphabetic characters ' A '
{ . } CHAR
ALPH + { . }
{ Z }
' '
Printer Control
Characters { HT
{ VT
PCCHAR + { NL } CHAR
{ EOM }
{
Table 2.3.1: Special ASCII characters and groups of ASCII
characters.
*see USACII standards
2.5.2 Perles graphiques
Comme proposé dans la RFC #5 par J. Rulifson, l'écran de tout affichage graphique est considéré comme un carré ; les coordonnées des points sont normalisées de -1/2 à +1/2 sur les deux axes. La position du premier point d'une structure est déterminée par la déviation par rapport à l'origine, qui est le point de repos du faisceau ; les points suivants sont déterminés par leurs déviations (AX,AY) par rapport à la dernière position du faisceau.
Ainsi, seuls deux champs de données doivent être définis :
-
DEFLECTION : qui est un champ de 12 bits : la déviation est définie par un nombre compris entre - 1 et +1 avec la précision habituelle du serveur.
-
ANGLE : qui est un champ de 15 bits définissant un angle de 0 à 2Π en radians entre l'axe horizontal et un axe passant par l'origine. Son premier bit indique si l'angle doit être pris dans le sens horaire ou antihoraire.
Les perles de données sont :
MOVE
Selon les paramètres positionnés lorsque cette perle apparaît, MOVE peut spécifier :
-
un mouvement invisible du faisceau ; dans ce cas, l'intensité du faisceau est nulle
-
un nouveau point : dans ce cas, l'intensité du faisceau n'est activée que lorsque le faisceau a atteint le nouveau point.
-
un vecteur : dans ce cas, l'intensité du faisceau est fixée à une certaine valeur non nulle
MOVE + {DEFLECTION}2
Arc de cercle : ARC
Un arc de cercle est défini par son centre, suivi de son point de départ et de l'angle de son axe d'arrivée.
ARC + {DEFLECTION}4 +ANGLE
2.6 Champs de paramètres proposés.
2.6.1 Chaînes de caractères.
Dans les chaînes de caractères, certains des caractères de contrôle sont en réalité des champs de paramètres : ils agissent comme un opérateur sur la chaîne de caractères qui suit, c'est-à-dire :
lower shift
upper shift
new line
escape
. . . .
Mais comme le code et l'usage de ces caractères sont déterminés dans les codes standard, ils ne sont pas inclus dans la définition des paramètres. On peut tirer parti du fait que ces caractères se trouvent dans les deux colonnes de gauche du code standard ASCII ou EBCDIC : ils correspondent aux codes dont les trois premiers bits sont nuls en EBCDIC et les deux premiers bits nuls en ASCII.
2.6.2 Paramètres graphiques
Les champs de paramètres suivants sont définis :
scale SCALE 4
beam intensity INT 4
light pen sensitivity SENS + SWITCH
blinking BLINK + SWITCH
beam BEAM + SWITCH
SWITCH est un champ de 1 bit qui peut prendre les valeurs :
ON <-- '1' SWITCH
OFF <-- '0' SWITCH
Un paramètre de commutation reste à ON tant qu'il n'est pas remis à OFF.
L'intensité du faisceau est exprimée par un nombre de 0 à 1. 0 correspond au noir et 1 à la luminosité maximale que l'affichage peut atteindre. Les nombres intermédiaires spécifient le logarithme relatif de la différence d'intensité. BEAM permet d'allumer ou d'éteindre le BEAM sans modifier le paramètre INT courant.
2.7 Structures
2.7.1 Définition de structure.
La définition de structure consiste principalement à spécifier les relations topologiques entre les perles de données :
-
relations séquentielles ; aucun champ de pointeur n'est nécessaire
-
liaisons au moyen d'un certain nombre de pointeurs.
2.7.2 Type de structure standard.
Deux types de structure standard de base sont retenus
- VECTOR : pour représenter une séquence de perles de données (chaînes, tableaux, tables...)
- PLEX : pour représenter tout type de graphe orienté, arbre, anneau...)
VECTOR (C;N1,...NC) <-- VECTORHDR + VECTORBODY
VECTORBODY <-- (=C+1:{defined bead})Ni + [VECTORBODY]
VECTORHDR <-- 'VECTOR' IDENTIFICATION + C + N1 + N2 + .... + NC
C est le nombre de parties (colonnes) du vecteur, chaque partie ayant NC éléments.
Il est aussi probablement intéressant de définir un vecteur compressé COMPVECTOR dans lequel une séquence d'éléments identiques est transmise sous la forme de 1 élément + une perle spéciale + le nombre d'éléments identiques en séquence.
PLEX (M)
Le premier bit d'un champ de pointeur indique si le pointeur pointe ou non vers un élément terminal. Si tel est le cas, les champs de pointeur avant ne sont pas ajoutés à l'élément de données.
M est le nombre d'éléments de données de la structure.
2.8 Objets
2.8.1 définition d'objet.
Un objet est défini par une règle sémantique comprenant, du côté droit
- un nom pour identifier l'objet
- un ensemble de paramètres de la définition de l'objet.
- des opérandes : le nom des perles utilisées comme éléments de données
du côté gauche
- des opérateurs : des champs de paramètres
- la structure des perles de données.
Par exemple, la définition d'un nouvel objet appelé SQUARE est :
SQUARE <-
(A,L,AΘ) ROT(ANGLE) (VECTOR(1,4) (BEAM'OFF'+
MOVE (A) + BEAM 'ON' + MOVE (0,L) + MOVE (L,0) +
MOVE (0,2L) + MOVE (2L,0))
Où ROT désigne une transformation définie dans le langage de manipulation des données, et VECTOR est défini comme une structure standard.
- L'identificateur de la nouvelle structure est SQUARE
- Le type de structure utilisé est VECTOR, de dimension 1 et à 4 éléments
- Les éléments du VECTOR sont des perles standard MOVE
- Les paramètres sont A, L et A Θ
- Les champs de paramètres BEAM 'OFF' et BEAM 'ON' sont utilisés.
2.8.2 Objets standard alphanumériques.
Chaîne de caractères compressée (COMSTRING)
COMSTRING <-- VECTOR (1) ({ [PCHAR]n + { HT+NUM
{ VT+NUM
{ ESC+CHAR
{ NL
{ EOP
} } )n EOP
Une chaîne de caractères compressée est un nombre quelconque de fois une chaîne d'un nombre quelconque de caractères imprimables suivie de l'un des caractères suivants
-
tabulation horizontale suivie du nombre de blancs correspondants à ajouter
-
tabulation verticale suivie du nombre de lignes à sauter.
-
échappement suivi d'un caractère quelconque
-
nouvelle ligne
-
fin de page
La chaîne compressée se termine par un caractère EOF.
Table de code (CODE)
CODE <-- VECTOR (1;128) {CHAR}128
CODE est le nom de la table de traduction présumée pour un programme donné. Lorsqu'elle est définie par l'utilisateur, celui-ci doit donner, de la colonne 1 à la colonne 8, le motif de 8 bits équivalent au code ASCII correspondant.
Image de carte binaire
B CARD <-- VECTOR (1;120) {CHAR}120
Nombre décimal condensé HNUM champ de 4 bits
' A X ' ' 0 H '
{ C X } { . }
DSIGN { E X } HNUM PNUM <-- { . } HNUM
{ F X } { . }
{ B X } { 9 H }
{ D X }
' '
1<n<31
PDNUM <-- {PNUM} + DSIGN
Nombre décimal (non condensé ou zoné)
1<n<31
DNUM <-- {NUM} + D SIGN+ PNUM