{--------------------------------------------------------------} {---------------------- GRAPHE.LIB ----------------------------} {--------------------------------------------------------------} Un programme utilisant cette bibliothèque sur IBM PC doit commencer par (en supposant que le fichier G640x350.EGA, G720x348.HER, G320x200.CGA ou G640x200.CGA correspondant au matériel utilisé a été recopié sous le nom GRAPHE.SYS): {* utilise Math.Lib, Graphe.Lib *} (*$i Math.Lib*) (*$i Graphe.sys*) (*$i Graphe.Lib*) Un programme utilisant cette bibliothèque sur Macintosh doit commencer par : {* utilise Math.Lib, Graphe.Lib *} {$S+} uses {$S Mac} MemTypes, QuickDraw, OSIntf, ToolIntf, Sane, {$S Math} Math_Lib, {$S Graph} Graphe_Lib; {$S} et dans les deux cas appeler la procédure InitMath. {--------------------------------------------------------------} { On considère un repère absolu permettant de repérer des } { points par des coordonnées réelles (x,y), la partie du plan } { délimitée par une fenêtre graphique étant visualisée sur un } { écran ou une table traçante: } { } { ^ } { Y | } { | } { YMax |........-------------------------------- } { | | | } { | | | } { | | | } { | | | } { y |........|..............+ (x,y) | } { | | . | } { | | . | } { YMin |........-------------------------------- } { | . . . } { 0| . . . } { ---------|---------------------------------------------> X } { |0 XMin x XMax } { } { Les tracés se font à l'aide d'un crayon (dans le cas d'une } { table traçante) ou d'un faisceau électronique (dans le cas } { d'un écran) dont la position est appelée "curseur". Le } { curseur peut être déplacé sans conséquences en dehors de la } { fenêtre graphique, les tracés se faisant uniquement à } { l'intérieur de cette fenêtre. } {--------------------------------------------------------------------------} {--- Utilisation au premier niveau ----------------------------------------} {--------------------------------------------------------------------------} procedure InitGraphique; { Procédure d'initialisation du mode graphique qui doit être } { appelée avant d'utiliser les procédures et fonctions } { ci-dessous. Après } { passage en mode graphique, la fenêtre graphique est ouverte avec des } { coordonnées absolues qui, par défaut, sont celles de l'écran. Le } { curseur est initialement en bas à gauche de la fenêtre graphique, } { au point de coordonnées XMin=0 et YMin=0. } procedure ModeTexte; { Fait passer la fenêtre texte au premier plan (pour utiliser readln, } { write, writeln et Pause). } procedure ModeGraphique; { Fait passer la fenêtre graphique au premier plan (pour utiliser } { les types, procédures et fonctions définies dans cette bibliothèque). } procedure Fenetre(XMin,XMax,YMin,YMax:real); { Procédure de définition des coordonnées de la fenêtre graphique. } { (XMin, YMin) sont les coordonnées absolues du coin inférieur gauche } { et (XMax, YMax) sont les coordonnées absolues du coin supérieur droit } { de la fenêtre. Si (XMax-XMin) et (YMax-YMin) ne sont pas dans les } { mêmes proportions avec la largeur et la hauteur de l'écran alors la } { fenêtre graphique est projetée sur tout l'écran avec des facteurs } { d'échelle différents pour les deux axes. Le curseur est initialement } { en bas à gauche de la fenêtre graphique au point de coordonnées Xmin } { et Ymin. } procedure IsoFenetre(XMin,XMax,YMin:real); procedure IsoFenetreX(XMin,XMax,YMin:real); { Procédure de définition des coordonnées de la fenêtre graphique. } { (XMin, YMin) sont les coordonnées absolues du coin inférieur gauche } { et (XMax, YMax) sont les coordonnées absolues du coin supérieur droit } { de la fenêtre, YMax étant calculé de sorte que la fenêtre graphique } { soit projetée sur tout l'écran avec le même facteur d'échelle pour } { les deux axes. Le curseur est initialement en bas à gauche de la } { fenêtre graphique au point de coordonnées Xmin et Ymin. } procedure IsoFenetreY(XMin,YMin,YMax:real); { Procédure de définition des coordonnées de la fenêtre graphique. } { (XMin, YMin) sont les coordonnées absolues du coin inférieur gauche } { et (XMax, YMax) sont les coordonnées absolues du coin supérieur droit } { de la fenêtre, XMax étant calculé de sorte que la fenêtre graphique } { soit projetée sur tout l'écran avec le même facteur d'échelle pour } { les deux axes. Le curseur est initialement en bas à gauche de la } { la fenêtre graphique. } procedure X_Axe(XOrg,YOrg,GradX:real); { Trace l'axe des X passant par le point de coordonnées absolues } { (XOrg, YOrg) en le graduant tous les GradX (sauf si GradX est trop } { petit). Les valeurs Xmin et Xmax sont inscrites aux extrémités de } { l'axe. La position du curseur reste inchangée. } procedure Y_Axe(XOrg,YOrg,GradY:real); { Procédure identique à X_Axe concernant l'axe des y. } procedure Deplace(X,Y:real); { Déplace le curseur au point de coordonnées absolues (X,Y) (sans rien } { tracer). Les déplacements en dehors de la fenêtre graphique sont sans } { conséquence et restent non signalés. } procedure Trace(X,Y:real); { Trace un segment de droite du curseur au point de coordonnées } { absolues (X, Y) et déplace le curseur en (X,Y). Les tracés en dehors } { de la fenêtre graphique sont sans conséquences et restent non } { signalés. } procedure Point(X,Y:real); { Trace un point (.) au point de coordonnées absolues (X,Y) et déplace } { le curseur en (X,Y). Les tracés en dehors de la fenêtre graphique } { sont sans conséquence et restent non signalés. } procedure Croix(X,Y:real); { Trace une croix (+) au point de coordonnées absolues (X,Y) et déplace } { le curseur en (X,Y). Les tracés en dehors de la fenêtre graphique } { sont sans conséquence et restent non signalés. } procedure Rond(X,Y:real); { Trace un rond (o) au point de coordonnées absolues (X,Y) et déplace } { le curseur en (X,Y). Les tracés en dehors de la fenêtre graphique } { sont sans conséquence et restent non signalés. } procedure Efface; { Efface complètement le contenu de la fenêtre graphique. } procedure Pause; { Marque une pause jusqu'à ce qu'une touche du clavier soit enfoncée (à } { utiliser en mode texte). } procedure PauseGraphique; { Marque une pause jusqu'à ce qu'une touche du clavier soit enfoncée (à } { utiliser en mode graphique). } {--------------------------------------------------------------------------} {--- Utilisation du deuxième niveau ---------------------------------------} {--------------------------------------------------------------------------} function LargeurEcran:real; function HauteurEcran:real; { Donnent les dimensions absolues de la fenêtre graphique qui sont } { celles de l'écran si aucune des procédures Fenetre, IsoFenetre, } { IsoFenetreX ou IsoFenetreY n'a été appelée.                        } function X_Curseur:real; function Y_Curseur:real; { Donnent les coordonnées absolues du curseur. } procedure Ecris(S:string); { Ecrit la chaîne de caractères S à partir de la position courante du } { curseur et déplace le curseur à la fin de la chaîne. } function Espacement:real; function Interligne:real; { Valeur d'un espace horizontal et d'un interligne en coordonnées } { absolues. } type GrafixColor = (Blanc, Noir, Bleu, Violet, Vert, Rouge, Indigo, Jaune, Inverse); { Sur un écran noir et blanc, toutes les couleurs (sauf Blanc) } { apparaissent en Noir. } procedure Fond(Color:GrafixColor); { Remplit l'écran de la couleur Color, 'Inverse' n'étant pas autorisé. } procedure Couleur(Color:GrafixColor); { Définit la couleur du stylo. Si la couleur est 'Inverse', les tracés } { se font en noir sur fond blanc et blanc sur fond noir. } function ErreurGraphique:integer; { Retourne la valeur de l'indicateur d'erreur et le remet à zéro s'il } { désigne une erreur s'étant produite dans la bibliothèque Graphe.Lib } { ou sinon retourne 0 sans changer la valeur de cet indicateur } { d'erreur. } { Codes d'erreur retournés : } { InitGraphique:100, Fenetre:101, IsoFenetre:102, IsoFenetreX:103, } { IsoFenetreY:104, Deplace:105, Trace:106, Point:107, Croix:108, } { Rond:109, X_Axe:110, Y_Axe:111, Ecris:112, Pause:113, } { PauseGraphique:114, Efface:115, X_Curseur:116, Y_Curseur:117, } { LargeurEcran:118, HauteurEcran:119, Espacement:120, Interligne:121 } { Fond:122, Couleur:123, ModeGraphique:124, ModeTexte:125 } {--------------------------------------------------------------------------}