serveur.exe port& client.exe machine port&où
serveur.exe
et client.exe
sont les mêmes exécutables/module type ST = sig type t val to_string : t -> string val from_string : string -> t end ;; module G = struct type t = {x:float; y:float} let to_string (x:t) = Marshal.to_string x [Marshal.Closures] let from_string s = ((Marshal.from_string s 0) : t) end;; module F (P:ST) = struct module L = P end;; module H = F (G);; # let u = {G.x = 3.14; G.y = 88.9};; val u : G.t = {G.x=3.14; G.y=88.9} # let s = H.L.to_string u;; val s : string = "\132\149\166\190\000\000\000\018\000\000\000\001\000\000\... " # let v = H.L.from_string s;; val v : H.L.t = {G.x=3.14; G.y=88.9}Il est demandé d'écrire :
Instructions
code nom arité (taille en octets) arguments action 00 Color 1 (4) couleur RGBA change la couleur courante 01 MoveTo 2 (2×2) A, O change le point courant 02 Dot 0 (0) – dessine un point au point courant 03 LineTo 2 (2×2) A, O dessine une ligne jusqu'au point donné 04 Rect 4 (4×2) A, O, L, H dessine un rectangle 05 FRect 4 (4×2) A, O, L, H dessine un rectangle plein 06 Square 3 (3×2) A, O, C dessine un carré 07 FSquare 3 (3×2) A, O, C dessine un carré plein 08 Ellipse 4 (4×2) A, O, RA, RO dessine une ellipse 09 FEllipse 4 (4×2) A, O, RA, RO dessine une ellipse pleine 0A Circle 3 (3×2) A, O, R dessine un cercle 0B FCircle 3 (3×2) A, O, R dessine un disque 0C Poly 1+n (1+2×n×2) T, n × (A, O) dessine un polygone 0D FPoly 1+n (1+2×n×2) T, n × (A, O) dessine un polygone plein 0E Rec 0 (0) – enregistre une macro 0F Store 2 (1+n) T, N stoppe et nomme la macro courante 10 Load 2 (1+n) T, N charge une macro 11 LineWidth 1 (1) L change la largeur des lignes 12 Clear 0 – efface la zone de dessin 13 Dummy 0 – ne fait rien
Légende
A abscisse (horizontal) O ordonnée (vertical) RGBA red, green, blue, alpha : 4×8=32 bits L largeur H hauteur C (longueur du) côté R rayon T taille - 1 (en nombre d'octets) N nom (limité à 256 caractères) RA radius abscisse RO radius ordonnée macro séquence d'instructions Remarques
- Les nombres sont des entiers non signés (positifs).
- L'unité de mesure graphique est le pixel.
- Les nombres sont en représentation décimale, sauf pour la colonne code où ils sont en hexadécimal.
- L'arité est le nombre d'arguments.
- Le canal alpha (composante pour la transparence des couleurs) est ignoré sauf pour ceux qui veulent aller plus loin.
- La taille par défaut pour la fenêtre est 800×600.
- Le point de coordonnées (0, 0) est en bas à gauche.
Figure 1: Instructions de l'afficheur graphique
Le code
en représentation assembleur : Color(00000000); FSquare(0000,0000,01FF); Color(FF000000); MoveTo(0000,0000); LineTo(01FF,01FF); MoveTo(0000,01FF); LineTo(01FF,0000); ou en représentation hexadécimale :
0000000000070000000001FF00 FF00000001000000000301FF01 FF01000001FF0301FF0000
dessine un carré noir plein de côté 511 pixels avec ses diagonales en rouge.
Figure 2: Exemple de code
Instructions
code nom arité (taille en octets) arguments action 00 Mouse 2 (2×2) A, O Transmet un clic 01 Keyb 2 (1+n) T, K Transmet un caractère
Légende
A abscisse (horizontal) O ordonnée (vertical) T taille du caractère K caractère entré au clavier Remarques
- La taille des caractères dépend de l'encodage utilisé. Par exemple, en UTF-8, la taille est variable (un ou plusieurs octets) ; en iso-8859-1 ou en ascii, elle est fixée à 8 bits (1 octet).
Figure 3: Transmission des événements
Ce document a été traduit de LATEX par HEVEA