Bienvenue sur le wiki de Nuit debout, nous sommes le 3012 mars.




Modification de Villes/Montluçon/sciences/FastGraph

Aller à : navigation, rechercher
Besoin d'aide ? Cliquez ici.

Attention : Vous n’êtes pas connecté. Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous vous connectez ou créez un compte, vos modifications seront attribuées à votre nom d’utilisateur, entre autres avantages.

Cette modification va être défaite. Veuillez vérifier les modifications ci-dessous, puis publier si c’est bien ce que vous voulez faire.
Version actuelle Votre texte
Ligne 3 449 : Ligne 3 449 :
  
  
La routine de fg_polyfill remplit les polygones convexes.  De Fastgraph de
+
  La routine de fg_polyfill remplit les polygones convexes.  De Fastgraph de
 +
 
 
perspective, un polygone est convexe si une ligne horizontale tracée à travers le polygone traverse le bord gauche exactement une fois et le bord droit exactement une fois (à l'exclusion des segments de bord horizontal et de longueur nulle). A noter que cette définition inclut des formes qui ne sont pas convexe dans le sens traditionnel. En outre, tout polygone non convexe peut être décomposée en deux ou plusieurs polygones convexes. Tous les triangles (qui est, les polygones de trois sommets) sont par leur nature convexe.
 
perspective, un polygone est convexe si une ligne horizontale tracée à travers le polygone traverse le bord gauche exactement une fois et le bord droit exactement une fois (à l'exclusion des segments de bord horizontal et de longueur nulle). A noter que cette définition inclut des formes qui ne sont pas convexe dans le sens traditionnel. En outre, tout polygone non convexe peut être décomposée en deux ou plusieurs polygones convexes. Tous les triangles (qui est, les polygones de trois sommets) sont par leur nature convexe.
  
Le polygone convexe rempli est un outil de base de l'ordinateur en trois dimensions
+
  Chapitre 6: Fundamentals graphiques 107
 +
 
 +
 
 +
  Le polygone convexe rempli est un outil de base de l'ordinateur en trois dimensions
 +
 
 
graphique. Une pratique courante consiste à construire une image ou d'un objet à partir de plusieurs polygones adjacents ou de connexion. Ces polygones se chevauchent généralement à un ou plusieurs bords. Par exemple, les coordonnées définissant le bord droit d'un polygone peut également définir le bord gauche d'un autre polygone immédiatement à sa droite. Pour une image globale apparaisse correcte, ses polygones de composants doivent correspondre ensemble correctement. Par défaut, fg_polyfill applique les règles suivantes pour gérer chevaucher les bords du polygone:
 
graphique. Une pratique courante consiste à construire une image ou d'un objet à partir de plusieurs polygones adjacents ou de connexion. Ces polygones se chevauchent généralement à un ou plusieurs bords. Par exemple, les coordonnées définissant le bord droit d'un polygone peut également définir le bord gauche d'un autre polygone immédiatement à sa droite. Pour une image globale apparaisse correcte, ses polygones de composants doivent correspondre ensemble correctement. Par défaut, fg_polyfill applique les règles suivantes pour gérer chevaucher les bords du polygone:
  
* Points situés exactement sur les bords non horizontaux
+
  * Points situés exactement sur les bords non horizontaux
              sont dessinés uniquement si l'intérieur du polygone est
+
              sont dessinés uniquement si l'intérieur du polygone est
 
               directement à droite.
 
               directement à droite.
  
* Points situés exactement sur les bords horizontaux sont
+
  * Points situés exactement sur les bords horizontaux sont
              dessiné que si l'intérieur du polygone est directement
+
              dessiné que si l'intérieur du polygone est directement
 
               en dessous.
 
               en dessous.
  
* Un sommet est établi que si toutes les lignes se terminant à
+
  * Un sommet est établi que si toutes les lignes se terminant à
 
               ce point satisfait les deux conditions ci-dessus.
 
               ce point satisfait les deux conditions ci-dessus.
  
 
Ces trois règles assurent qu'aucun pixel est tiré plus d'une fois lors du remplissage de polygones adjacents. Toutefois, ce comportement peut ne pas être adapté à l'affichage des polygones qui ne sont pas adjacents, parce que certains ou tous les pixels sur les bords droit et inférieur du polygone seront exclus. Si cela est un problème, vous pouvez utiliser fg_polyedge pour forcer fg_polyfill pour inclure tous les pixels de bord. La routine fg_polyedge attend un paramètre entier unique. Si elle est nulle, fg_polyfill comprendra tous les pixels de bord lors de l'élaboration des polygones convexes. Passant toute autre valeur à fg_polyedge restaure le comportement par défaut d'exclure les pixels qui répondent aux critères décrits ci-dessus.
 
Ces trois règles assurent qu'aucun pixel est tiré plus d'une fois lors du remplissage de polygones adjacents. Toutefois, ce comportement peut ne pas être adapté à l'affichage des polygones qui ne sont pas adjacents, parce que certains ou tous les pixels sur les bords droit et inférieur du polygone seront exclus. Si cela est un problème, vous pouvez utiliser fg_polyedge pour forcer fg_polyfill pour inclure tous les pixels de bord. La routine fg_polyedge attend un paramètre entier unique. Si elle est nulle, fg_polyfill comprendra tous les pixels de bord lors de l'élaboration des polygones convexes. Passant toute autre valeur à fg_polyedge restaure le comportement par défaut d'exclure les pixels qui répondent aux critères décrits ci-dessus.
  
La routine finale Fastgraph relatives aux polygones est fg_inside, qui
+
  La routine finale Fastgraph relatives aux polygones est fg_inside, qui
 +
 
 
vérifie si un point spécifié se situe à l'intérieur d'un polygone convexe. Son premier argument est un tableau de vertex dans le même format utilisé par fg_polyline et fg_polyfill. Le second argument est le nombre de sommets du polygone, tandis que les deux derniers arguments spécifient l'espace écran coordonnées x et y du point mis à l'essai. Les fg_inside routine renvoie 1 si le point se trouve à l'intérieur du polygone et 0 sinon. Si le tableau de vertex ne définit pas un polygone convexe, la valeur de retour est indéfinie. Les décalages de fg_polyoff sont appliqués à la fg_inside tableau de vertex, mais pas au point de test.
 
vérifie si un point spécifié se situe à l'intérieur d'un polygone convexe. Son premier argument est un tableau de vertex dans le même format utilisé par fg_polyline et fg_polyfill. Le second argument est le nombre de sommets du polygone, tandis que les deux derniers arguments spécifient l'espace écran coordonnées x et y du point mis à l'essai. Les fg_inside routine renvoie 1 si le point se trouve à l'intérieur du polygone et 0 sinon. Si le tableau de vertex ne définit pas un polygone convexe, la valeur de retour est indéfinie. Les décalages de fg_polyoff sont appliqués à la fg_inside tableau de vertex, mais pas au point de test.
  
  
===Cercles et Ellipses===
+
Cercles et Ellipses
 +
 
 +
  Fastgraph comprend des routines pour le dessin rempli et les cercles non remplis et
  
Fastgraph comprend des routines pour le dessin rempli et les cercles non remplis et
 
 
ellipses. Les deux versions de l'espace de l'écran et de l'espace du monde de ces routines sont disponibles, et chacun d'entre eux observent les limites d'écrêtage.
 
ellipses. Les deux versions de l'espace de l'écran et de l'espace du monde de ces routines sont disponibles, et chacun d'entre eux observent les limites d'écrêtage.
  
La routine de fg_circle dessine un cercle vide dans l'espace de l'écran, centrée
+
  La routine de fg_circle dessine un cercle vide dans l'espace de l'écran, centrée
 +
 
 
à la position du curseur graphique, en utilisant la couleur actuelle. Son seul argument spécifie le rayon du cercle dans horizontales unités de l'espace de l'écran. Une autre routine, fg_circlew, dessine un cercle non rempli où le rayon est mesuré en unités horizontales spatiales mondiales. Les routines analogues pour les cercles de dessin rempli sont fg_circlef et fg_circlefw. Les quatre cercles de dessin routines quittent la position du curseur graphique inchangé. Guide de l'utilisateur 108 Fastgraph
 
à la position du curseur graphique, en utilisant la couleur actuelle. Son seul argument spécifie le rayon du cercle dans horizontales unités de l'espace de l'écran. Une autre routine, fg_circlew, dessine un cercle non rempli où le rayon est mesuré en unités horizontales spatiales mondiales. Les routines analogues pour les cercles de dessin rempli sont fg_circlef et fg_circlefw. Les quatre cercles de dessin routines quittent la position du curseur graphique inchangé. Guide de l'utilisateur 108 Fastgraph
  
La routine de fg_ellipse dessine une ellipse non remplie dans l'espace de l'écran,
+
 
 +
  La routine de fg_ellipse dessine une ellipse non remplie dans l'espace de l'écran,
 +
 
 
centré sur la position du curseur graphique, en utilisant la couleur actuelle. La routine requiert deux arguments qui indiquent respectivement la longueur de ses demi-axes horizontaux et verticaux. En d'autres termes, le premier argument est la distance absolue à partir du centre de l'ellipse à son extrémité horizontale et le second argument est la distance absolue du centre à l'extrémité verticale. Une autre routine, fg_ellipsew, dessine une ellipse non remplie dans l'espace mondial. Les routines analogues pour dessiner des ellipses remplies sont fg_ellipsef et fg_ellipsfw. Les quatre routines de dessin ellipse quittent la position du curseur graphique inchangé.
 
centré sur la position du curseur graphique, en utilisant la couleur actuelle. La routine requiert deux arguments qui indiquent respectivement la longueur de ses demi-axes horizontaux et verticaux. En d'autres termes, le premier argument est la distance absolue à partir du centre de l'ellipse à son extrémité horizontale et le second argument est la distance absolue du centre à l'extrémité verticale. Une autre routine, fg_ellipsew, dessine une ellipse non remplie dans l'espace mondial. Les routines analogues pour dessiner des ellipses remplies sont fg_ellipsef et fg_ellipsfw. Les quatre routines de dessin ellipse quittent la position du curseur graphique inchangé.
  
Exemple 6-9 illustre l'utilisation de la fg_circlew et fg_ellipsew
+
  Exemple 6-9 illustre l'utilisation de la fg_circlew et fg_ellipsew
 +
 
 
routines. Le programme utilise d'abord fg_automode de proposer un mode vidéo de graphiques et utilise ensuite fg_setmode pour sélectionner ce mode vidéo. Il fait alors la couleur 15 la couleur actuelle, qui par défaut est blanc dans tous les modes graphiques couleur et "on" dans les modes les monochromes graphiques. Ensuite, il établit un espace de 200x200 système de coordonnées. Le programme fg_ellipsew utilise ensuite pour dessiner une ellipse et fg_circlew pour dessiner un cercle, à la fois centré au milieu de l'écran (ce qui est à l'origine de notre espace mondial du système de coordonnées). Le cercle a un rayon de 1/16 de la largeur de l'écran (12,5 horizontales unités spatiales du monde), et l'ellipse est inscrite horizontalement à l'intérieur du cercle.
 
routines. Le programme utilise d'abord fg_automode de proposer un mode vidéo de graphiques et utilise ensuite fg_setmode pour sélectionner ce mode vidéo. Il fait alors la couleur 15 la couleur actuelle, qui par défaut est blanc dans tous les modes graphiques couleur et "on" dans les modes les monochromes graphiques. Ensuite, il établit un espace de 200x200 système de coordonnées. Le programme fg_ellipsew utilise ensuite pour dessiner une ellipse et fg_circlew pour dessiner un cercle, à la fois centré au milieu de l'écran (ce qui est à l'origine de notre espace mondial du système de coordonnées). Le cercle a un rayon de 1/16 de la largeur de l'écran (12,5 horizontales unités spatiales du monde), et l'ellipse est inscrite horizontalement à l'intérieur du cercle.
  
Exemple 6-10 illustre l'utilisation de la fg_circle et fg_ellipse
+
  Exemple 6-10 illustre l'utilisation de la fg_circle et fg_ellipse
 +
 
 
routines. Il est fonctionnellement identique à l'exemple 6-9, mais il utilise l'espace de l'écran plutôt que l'espace de coordonnées du monde pour dessiner le cercle et une ellipse. Notez les arguments à fg_circle et fg_ellipse dépendent du maximum de coordonnées x et y du mode vidéo sélectionné. Si l'on ne calcule ces arguments de cette manière, la taille réelle du cercle et une ellipse serait proportionnel à la résolution de pixel du mode vidéo. Aucune telle dépendance existe lorsque vous utilisez l'espace du monde, mais nous payons un prix pour cette fonction dans un peu plus lente vitesse d'exécution.
 
routines. Il est fonctionnellement identique à l'exemple 6-9, mais il utilise l'espace de l'écran plutôt que l'espace de coordonnées du monde pour dessiner le cercle et une ellipse. Notez les arguments à fg_circle et fg_ellipse dépendent du maximum de coordonnées x et y du mode vidéo sélectionné. Si l'on ne calcule ces arguments de cette manière, la taille réelle du cercle et une ellipse serait proportionnel à la résolution de pixel du mode vidéo. Aucune telle dépendance existe lorsque vous utilisez l'espace du monde, mais nous payons un prix pour cette fonction dans un peu plus lente vitesse d'exécution.
  
Ligne 3 523 : Ligne 3 535 :
  
  
===Rectangles solides===
+
Rectangles solides
 +
 
 +
  Fastgraph comprend quatre routines pour dessiner des rectangles solides, deux pour
  
Fastgraph comprend quatre routines pour dessiner des rectangles solides, deux pour
 
 
l'espace de l'écran et deux pour l'espace du monde, avec et sans écrêtage. Aucun de ces routines affectent la position du curseur graphique.
 
l'espace de l'écran et deux pour l'espace du monde, avec et sans écrêtage. Aucun de ces routines affectent la position du curseur graphique.
  
La routine de fg_rect dessine un rectangle solide dans l'espace de l'écran, sans
+
  La routine de fg_rect dessine un rectangle solide dans l'espace de l'écran, sans
 +
 
 
ce qui concerne les limites d'écrêtage, en utilisant la couleur actuelle. Il nécessite quatre arguments entiers qui définissent respectivement le minimum x, x maximale, y minimum, et y coordonnées maximales de l'espace de l'écran du rectangle. Les coordonnées minimales doivent être inférieures ou égales aux coordonnées maximales, ou bien les résultats sont imprévisibles. La routine de fg_clprect est identique en tous points à fg_rect, sauf qu'il respecte les limites d'écrêtage.
 
ce qui concerne les limites d'écrêtage, en utilisant la couleur actuelle. Il nécessite quatre arguments entiers qui définissent respectivement le minimum x, x maximale, y minimum, et y coordonnées maximales de l'espace de l'écran du rectangle. Les coordonnées minimales doivent être inférieures ou égales aux coordonnées maximales, ou bien les résultats sont imprévisibles. La routine de fg_clprect est identique en tous points à fg_rect, sauf qu'il respecte les limites d'écrêtage.
  
Les versions de l'espace mondial des solides routines de dessin de rectangle sont
+
  Les versions de l'espace mondial des solides routines de dessin de rectangle sont
 +
 
 
fg_rectw et fg_clprectw. Comme fg_rect et fg_clprect, ils nécessitent quatre arguments qui définissent les extrémités du rectangle, mais les arguments sont coordonnées spatiales points du monde flottant.
 
fg_rectw et fg_clprectw. Comme fg_rect et fg_clprect, ils nécessitent quatre arguments qui définissent les extrémités du rectangle, mais les arguments sont coordonnées spatiales points du monde flottant.
  
Vous pouvez également utiliser fg_rect en mode texte.  Lorsqu'il est utilisé dans un mode texte, fg_rect
+
  Vous pouvez également utiliser fg_rect en mode texte.  Lorsqu'il est utilisé dans un mode texte, fg_rect
 +
 
 
prévoit que ses quatre arguments pour être exprimés dans l'espace de caractères (qui est, lignes et colonnes) plutôt que l'espace de l'écran. Cela signifie que les quatre arguments spécifient respectivement la colonne minimum, colonne maximale, ligne minimale et ligne maximale du rectangle. Fastgraph construit le rectangle en stockant le solide caractère de bloc (ASCII valeur décimale 219) dans chaque cellule de caractère comprenant rectangle. Le rectangle est dessiné en utilisant l'attribut de caractère en cours, mais parce que le caractère de bloc solide occupe la cellule de caractère entier, le composant de base de l'attribut est essentiellement dépourvue de sens.
 
prévoit que ses quatre arguments pour être exprimés dans l'espace de caractères (qui est, lignes et colonnes) plutôt que l'espace de l'écran. Cela signifie que les quatre arguments spécifient respectivement la colonne minimum, colonne maximale, ligne minimale et ligne maximale du rectangle. Fastgraph construit le rectangle en stockant le solide caractère de bloc (ASCII valeur décimale 219) dans chaque cellule de caractère comprenant rectangle. Le rectangle est dessiné en utilisant l'attribut de caractère en cours, mais parce que le caractère de bloc solide occupe la cellule de caractère entier, le composant de base de l'attribut est essentiellement dépourvue de sens.
  
Exemple 6-11 illustre l'utilisation de fg_rect en tirant 200 aléatoire de taille
+
  Exemple 6-11 illustre l'utilisation de fg_rect en tirant 200 aléatoire de taille
 +
 
 
rectangles aux couleurs aléatoires. Le programme utilise fg_automode premier à proposer un mode vidéo de graphiques, puis utilise la routine de fg_setmode pour sélectionner ce mode vidéo. Ensuite, il détermine la résolution d'écran horizontal et vertical pour le mode vidéo sélectionné, en utilisant fg_getmaxx et fg_getmaxy. La partie principale du programme est une boucle qui génère un rectangle aléatoire dans chaque itération. A l'intérieur de la boucle, la fonction de bibliothèque rand C est utilisé pour générer les extrémités du rectangle. Si nécessaire, le programme échange alors les coordonnées pour rendre minimum les coordonnées inférieures ou égales aux coordonnées maximales. Enfin, il utilise à nouveau rand pour générer un numéro de couleur aléatoire entre 0 et 15, puis dessine le rectangle dans cette couleur. Après avoir dessiné les 200 rectangles, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
 
rectangles aux couleurs aléatoires. Le programme utilise fg_automode premier à proposer un mode vidéo de graphiques, puis utilise la routine de fg_setmode pour sélectionner ce mode vidéo. Ensuite, il détermine la résolution d'écran horizontal et vertical pour le mode vidéo sélectionné, en utilisant fg_getmaxx et fg_getmaxy. La partie principale du programme est une boucle qui génère un rectangle aléatoire dans chaque itération. A l'intérieur de la boucle, la fonction de bibliothèque rand C est utilisé pour générer les extrémités du rectangle. Si nécessaire, le programme échange alors les coordonnées pour rendre minimum les coordonnées inférieures ou égales aux coordonnées maximales. Enfin, il utilise à nouveau rand pour générer un numéro de couleur aléatoire entre 0 et 15, puis dessine le rectangle dans cette couleur. Après avoir dessiné les 200 rectangles, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
  
Ligne 3 544 : Ligne 3 561 :
 
   #include <fastgraf.h>
 
   #include <fastgraf.h>
 
             void main (void);  
 
             void main (void);  
 +
 +
Guide de l'utilisateur 110 Fastgraph
  
  
Ligne 3 582 : Ligne 3 601 :
  
  
===Rectangles carnet===
+
Rectangles carnet
 +
 
 +
  Fastgraph comprend quatre routines pour dessiner des rectangles non remplis.  le
  
Fastgraph comprend quatre routines pour dessiner des rectangles non remplis.  le
 
 
routine fg_box dessine un rectangle vide dans l'espace de l'écran, en ce qui concerne les limites d'écrêtage, en utilisant la couleur actuelle. Les arguments à fg_box sont les mêmes que ceux pour fg_rect. La profondeur des bords du rectangle est un pixel par défaut, mais vous pouvez modifier la profondeur en appelant fg_boxdepth. La routine fg_boxdepth attend deux arguments. Le premier argument est la largeur des côtés gauche et droit du rectangle, tandis que le second est la hauteur de ses faces supérieure et inférieure. Une fois que vous appelez fg_boxdepth, fg_box attire tous les rectangles non remplis en utilisant les valeurs de profondeur spécifiées dans l'appel le plus récent à fg_boxdepth. Les fonctions de fg_getxbox et fg_getybox renvoient respectivement les réglages de profondeur de la boîte horizontale et verticale, tel que défini dans l'appel le plus récent à fg_boxdepth. Contrairement à fg_rect, fg_box n'a aucun effet en mode vidéo de texte. L'analogue de routine de l'espace du monde est fg_boxw.
 
routine fg_box dessine un rectangle vide dans l'espace de l'écran, en ce qui concerne les limites d'écrêtage, en utilisant la couleur actuelle. Les arguments à fg_box sont les mêmes que ceux pour fg_rect. La profondeur des bords du rectangle est un pixel par défaut, mais vous pouvez modifier la profondeur en appelant fg_boxdepth. La routine fg_boxdepth attend deux arguments. Le premier argument est la largeur des côtés gauche et droit du rectangle, tandis que le second est la hauteur de ses faces supérieure et inférieure. Une fois que vous appelez fg_boxdepth, fg_box attire tous les rectangles non remplis en utilisant les valeurs de profondeur spécifiées dans l'appel le plus récent à fg_boxdepth. Les fonctions de fg_getxbox et fg_getybox renvoient respectivement les réglages de profondeur de la boîte horizontale et verticale, tel que défini dans l'appel le plus récent à fg_boxdepth. Contrairement à fg_rect, fg_box n'a aucun effet en mode vidéo de texte. L'analogue de routine de l'espace du monde est fg_boxw.
  
Exemple 6-12 est le même que l'exemple 11.06, mais non rempli à la place tire
+
  Exemple 6-12 est le même que l'exemple 11.06, mais non rempli à la place tire
 +
 
 
rectangles de solides. Le programme utilise fg_box pour dessiner le rectangle et chaque fg_boxdepth pour définir la profondeur de rectangle en trois pixels dans chaque direction.
 
rectangles de solides. Le programme utilise fg_box pour dessiner le rectangle et chaque fg_boxdepth pour définir la profondeur de rectangle en trois pixels dans chaque direction.
 +
 +
  Chapitre 6: Fundamentals graphiques 111
 +
  
 
Notez que vous ne devez pas appeler fg_boxdepth pour chaque rectangle si vous voulez tous avoir la même profondeur.
 
Notez que vous ne devez pas appeler fg_boxdepth pour chaque rectangle si vous voulez tous avoir la même profondeur.
Ligne 3 634 : Ligne 3 658 :
  
  
Les fg_boxx et fg_boxxw routines sont l'espace de l'écran et de l'espace du monde
+
  Les fg_boxx et fg_boxxw routines sont l'espace de l'écran et de l'espace du monde
 +
 
 
versions "exclusives ou" des routines boîte de dessin. Ils simplifient l'affichage des boîtes rubberband (rectangles creux qui se déplacent en réponse à des frappes ou des mouvements de la souris) parce que le dessin d'un objet en mode XOR fait apparaître, mais le dessin à nouveau dans la même position et la même couleur restaure ce qui était sous l'objet à l'origine. Compte tenu de cette propriété utile, voici un aperçu de ce qui est nécessaire pour dessiner une zone de rubberband:
 
versions "exclusives ou" des routines boîte de dessin. Ils simplifient l'affichage des boîtes rubberband (rectangles creux qui se déplacent en réponse à des frappes ou des mouvements de la souris) parce que le dessin d'un objet en mode XOR fait apparaître, mais le dessin à nouveau dans la même position et la même couleur restaure ce qui était sous l'objet à l'origine. Compte tenu de cette propriété utile, voici un aperçu de ce qui est nécessaire pour dessiner une zone de rubberband:
  
 
   1. Dessinez la boîte dans sa position initiale avec
 
   1. Dessinez la boîte dans sa position initiale avec
 
               fg_boxx ou fg_boxxw.  
 
               fg_boxx ou fg_boxxw.  
 +
 +
Guide de l'utilisateur 112 Fastgraph
 +
  
 
   2. Attendez une réponse utilisateur qui signifie boîte
 
   2. Attendez une réponse utilisateur qui signifie boîte
Ligne 3 650 : Ligne 3 678 :
 
               plus nécessaire.
 
               plus nécessaire.
  
Exemple 6-13 montre une simple utilisation de fg_boxx dans le 320x200 MCGA / VGA 256-
+
  Exemple 6-13 montre une simple utilisation de fg_boxx dans le 320x200 MCGA / VGA 256-
 +
 
 
mode couleur (mode 19). Le programme remplit les moitiés gauche et droite de l'écran avec différentes couleurs, puis affiche une boîte XOR qui chevauche chaque moitié. Même si la boîte est dessinée dans la même couleur que la moitié droite, il est encore visible, car le dessin quelque chose dans un mode XOR (sauf dans la couleur 0) garantit qu'il sera visible sur son fond. Après une séquence de touches, le programme redessine la même boîte, ce qui bien sûr restaure ce qui était là en premier lieu.
 
mode couleur (mode 19). Le programme remplit les moitiés gauche et droite de l'écran avec différentes couleurs, puis affiche une boîte XOR qui chevauche chaque moitié. Même si la boîte est dessinée dans la même couleur que la moitié droite, il est encore visible, car le dessin quelque chose dans un mode XOR (sauf dans la couleur 0) garantit qu'il sera visible sur son fond. Après une séquence de touches, le programme redessine la même boîte, ce qui bien sûr restaure ce qui était là en premier lieu.
  
Ligne 3 681 : Ligne 3 710 :
  
  
===Dithered Rectangles===
+
Dithered Rectangles
 +
 
 +
  Procédé selon l'une alternance de pixels de couleurs différentes dans une région de la
  
Procédé selon l'une alternance de pixels de couleurs différentes dans une région de la
 
 
zone d'affichage est appelé tramage. Cette technique est particulièrement utile dans les modes avec peu de couleurs, tels que les modes CGA et Hercules graphiques, parce que vous pouvez simuler des couleurs supplémentaires grâce à des utilisations efficaces de tramage. Fastgraph comprend deux routines pour dessiner des rectangles tramées, l'un pour l'espace de l'écran
 
zone d'affichage est appelé tramage. Cette technique est particulièrement utile dans les modes avec peu de couleurs, tels que les modes CGA et Hercules graphiques, parce que vous pouvez simuler des couleurs supplémentaires grâce à des utilisations efficaces de tramage. Fastgraph comprend deux routines pour dessiner des rectangles tramées, l'un pour l'espace de l'écran
 +
 +
  Chapitre 6: Fundamentals graphiques 113
 +
 +
 
et un pour l'espace mondial. Ni routine observe les limites d'écrêtage, ni n'affectent la position du curseur graphique.
 
et un pour l'espace mondial. Ni routine observe les limites d'écrêtage, ni n'affectent la position du curseur graphique.
  
La routine de fg_drect dessine un rectangle tramé dans l'espace de l'écran.  Comme le
+
  La routine de fg_drect dessine un rectangle tramé dans l'espace de l'écran.  Comme le
 +
 
 
routine fg_rect, fg_drect requiert des arguments quatre entiers qui définissent respectivement le minimum x, maximum x, y minimum, et y coordonnées maximales de l'espace de l'écran du rectangle. Les coordonnées minimales doivent être inférieures ou égales aux coordonnées maximales, ou bien les résultats sont imprévisibles. Cependant, fg_drect nécessite également un cinquième argument qui définit la matrice de tramage, qui à son tour détermine le motif de pixels utilisé pour construire le rectangle tramé. La taille et la forme de la matrice de tramage dépendent du mode vidéo.
 
routine fg_rect, fg_drect requiert des arguments quatre entiers qui définissent respectivement le minimum x, maximum x, y minimum, et y coordonnées maximales de l'espace de l'écran du rectangle. Les coordonnées minimales doivent être inférieures ou égales aux coordonnées maximales, ou bien les résultats sont imprévisibles. Cependant, fg_drect nécessite également un cinquième argument qui définit la matrice de tramage, qui à son tour détermine le motif de pixels utilisé pour construire le rectangle tramé. La taille et la forme de la matrice de tramage dépendent du mode vidéo.
  
La version de l'espace mondial de la routine tramée de dessin rectangle est
+
  La version de l'espace mondial de la routine tramée de dessin rectangle est
 +
 
 
fg_drectw. Comme fg_drect, il nécessite quatre arguments qui définissent les extrémités du rectangle, et un cinquième argument qui définit la matrice de tramage.
 
fg_drectw. Comme fg_drect, il nécessite quatre arguments qui définissent les extrémités du rectangle, et un cinquième argument qui définit la matrice de tramage.
  
Comme mentionné précédemment, la taille et le format de la matrice de tramage sont
+
  Comme mentionné précédemment, la taille et le format de la matrice de tramage sont
 +
 
 
en fonction du mode vidéo. La matrice de tramage est un tableau de quatre octets dans tous les modes vidéo, à l'exception des modes 256 graphiques couleur (modes 19 à 27), où il est un tableau de huit octets. Ce tableau contient un motif de pixels qui fg_drect ou fg_drectw reproduit dans la zone du rectangle. La structure de la matrice de tramage imite étroitement la structure de mémoire vidéo dans chaque mode graphique.
 
en fonction du mode vidéo. La matrice de tramage est un tableau de quatre octets dans tous les modes vidéo, à l'exception des modes 256 graphiques couleur (modes 19 à 27), où il est un tableau de huit octets. Ce tableau contient un motif de pixels qui fg_drect ou fg_drectw reproduit dans la zone du rectangle. La structure de la matrice de tramage imite étroitement la structure de mémoire vidéo dans chaque mode graphique.
  
Le reste de cette section présentera quelques-unes spécifique en mode simple
+
  Le reste de cette section présentera quelques-unes spécifique en mode simple
  
 
Des exemples pour illustrer la structure de la matrice de tramage dans différents modes graphiques. Supposons que nous aimerions produire un «damier» de la lumière bleue et blanche pixels. Autrement dit, dans une ligne donnée d'un rectangle, pixels consécutifs alterne entre ces deux couleurs. En outre, le motif de rangées adjacentes sera décalée de sorte qu'il y aura toujours un pixel blanc au-dessus et au-dessous d'un pixel bleu clair, et vice versa. D'où ce modèle de pixel ressemblerait à quelque chose comme
 
Des exemples pour illustrer la structure de la matrice de tramage dans différents modes graphiques. Supposons que nous aimerions produire un «damier» de la lumière bleue et blanche pixels. Autrement dit, dans une ligne donnée d'un rectangle, pixels consécutifs alterne entre ces deux couleurs. En outre, le motif de rangées adjacentes sera décalée de sorte qu'il y aura toujours un pixel blanc au-dessus et au-dessous d'un pixel bleu clair, et vice versa. D'où ce modèle de pixel ressemblerait à quelque chose comme
Ligne 3 707 : Ligne 3 744 :
 
où chaque B représente un pixel bleu clair, et chaque W représente un pixel blanc. Les exemples suivants décrivent la matrice de tramage qui pourrait être utilisé pour produire un motif de pixels dans chaque mode graphique.
 
où chaque B représente un pixel bleu clair, et chaque W représente un pixel blanc. Les exemples suivants décrivent la matrice de tramage qui pourrait être utilisé pour produire un motif de pixels dans chaque mode graphique.
  
====CGA quatre couleurs Modes graphiques====
+
CGA quatre couleurs Modes graphiques
 +
 
 +
  Les CGA-quatre couleurs graphiques modes (modes 4 et 5) utilisent quatre octets
  
Les CGA-quatre couleurs graphiques modes (modes 4 et 5) utilisent quatre octets
 
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Etant donné que chaque pixel dans ces modes nécessite deux bits de mémoire vidéo, chaque octet de la matrice de tramage contient quatre pixels. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Etant donné que chaque pixel dans ces modes nécessite deux bits de mémoire vidéo, chaque octet de la matrice de tramage contient quatre pixels. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
  
Ligne 3 716 : Ligne 3 754 :
  
 
   [2] wbwb [2] 11 01 11 01
 
   [2] wbwb [2] 11 01 11 01
 +
 +
Guide de l'utilisateur 114 Fastgraph
 +
  
 
   [1] BWBW [1] 01 11 01 11
 
   [1] BWBW [1] 01 11 01 11
Ligne 3 724 : Ligne 3 765 :
 
Parce que ces modes ne proposent pas une couleur bleu clair, nous avons utilisé cyan clair (valeur de couleur 1 dans la palette 1) pour approcher bleu clair. Les pixels B traduisent ainsi la valeur de couleur 1, ou 01 binaire. Blanc est disponible en tant que valeur de couleur 3 dans la palette 1, de sorte que les pixels W traduisent la valeur de couleur 3, ou 11 binaire. Le hexadécimal équivalent de la valeur binaire 11011101 (pour les éléments de tableau [0] et [2]) est DD, et l'équivalent hexadécimal de la valeur binaire 01110111 (pour les éléments de tableau [1] et [3]) est 77. Comme le montre la exemple 6-12, ce sont précisément les valeurs attribuées aux éléments de la matrice de tramage.
 
Parce que ces modes ne proposent pas une couleur bleu clair, nous avons utilisé cyan clair (valeur de couleur 1 dans la palette 1) pour approcher bleu clair. Les pixels B traduisent ainsi la valeur de couleur 1, ou 01 binaire. Blanc est disponible en tant que valeur de couleur 3 dans la palette 1, de sorte que les pixels W traduisent la valeur de couleur 3, ou 11 binaire. Le hexadécimal équivalent de la valeur binaire 11011101 (pour les éléments de tableau [0] et [2]) est DD, et l'équivalent hexadécimal de la valeur binaire 01110111 (pour les éléments de tableau [1] et [3]) est 77. Comme le montre la exemple 6-12, ce sont précisément les valeurs attribuées aux éléments de la matrice de tramage.
  
Exemple 6-14 mode 4 utilise pour afficher 50 pixels par 50 pixels tramée
+
  Exemple 6-14 mode 4 utilise pour afficher 50 pixels par 50 pixels tramée
 +
 
 
rectangle dans le coin supérieur gauche de l'écran. La matrice de tramage représente le motif en damier bleu et blanc discuté dans le paragraphe précédent.
 
rectangle dans le coin supérieur gauche de l'écran. La matrice de tramage représente le motif en damier bleu et blanc discuté dans le paragraphe précédent.
  
Ligne 3 751 : Ligne 3 793 :
  
  
====CGA Two-Color Mode graphique====
+
CGA Two-Color Mode graphique
 +
 
 +
  Le CGA (mode 6) en deux couleurs graphiques utilise un dithering de quatre octets
  
Le CGA (mode 6) en deux couleurs graphiques utilise un dithering de quatre octets
 
 
matrice qui Fastgraph traite comme un tableau à quatre rangées par une colonne, comme dans les autres modes CGA-quatre couleurs. Cependant, chaque pixel dans ce mode ne nécessite qu'un seul bit de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient huit pixels. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
 
matrice qui Fastgraph traite comme un tableau à quatre rangées par une colonne, comme dans les autres modes CGA-quatre couleurs. Cependant, chaque pixel dans ce mode ne nécessite qu'un seul bit de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient huit pixels. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
  
  
 
   [3] BWBWBWBW [3] 1 0 1 0 0 1 0 1
 
   [3] BWBWBWBW [3] 1 0 1 0 0 1 0 1
 +
                                      Chapitre 6: Fundamentals graphiques 115
 +
  
 
   [2] WBWBWBWB [2] 1 0 1 0 1 0 1 0
 
   [2] WBWBWBWB [2] 1 0 1 0 1 0 1 0
Ligne 3 773 : Ligne 3 818 :
  
  
====Tandy / PCjr 16-Color Mode graphique====
+
Tandy / PCjr 16-Color Mode graphique
 +
 
 +
  Le mode 16 couleurs graphique Tandy / PCjr (mode 9) utilise également quatre octets
  
Le mode 16 couleurs graphique Tandy / PCjr (mode 9) utilise également quatre octets
 
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Chaque pixel dans ce mode nécessite quatre bits de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient deux pixels seulement. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Chaque pixel dans ce mode nécessite quatre bits de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient deux pixels seulement. Ainsi, la représentation des pixels de la matrice de tramage apparaîtraient comme illustré sur la gauche; sa traduction en valeurs numériques apparaît à droite.
  
Ligne 3 794 : Ligne 3 840 :
 
                         la matrice [1] = matrice [3] = 0x9F;  
 
                         la matrice [1] = matrice [3] = 0x9F;  
  
====Mode graphique Hercules====
+
Guide de l'utilisateur 116 Fastgraph
 +
 
 +
 
 +
Mode graphique Hercules
 +
 
 +
  La taille et le format de la matrice de tramage dans le mode graphique Hercules
  
La taille et le format de la matrice de tramage dans le mode graphique Hercules
 
 
(Mode 11) sont les mêmes que dans le mode à deux couleurs CGA (mode 6).
 
(Mode 11) sont les mêmes que dans le mode à deux couleurs CGA (mode 6).
  
====Hercules Low-Resolution Mode graphique====
+
Hercules Low-Resolution Mode graphique
 +
 
 +
  La taille et le format de la matrice de tramage dans le bas Hercules
  
La taille et le format de la matrice de tramage dans le bas Hercules
 
 
résolution graphique (mode 12) sont les mêmes que dans les CGA modes de quatre couleurs (modes 4 et 5). En ce qui concerne notre exemple en damier va, nous allons utiliser le noir (valeur de couleur 0) à la place de la lumière bleue, et en gras (valeur de couleur 3) au lieu de blanc. Ainsi, les B pixels se traduisent par 00 binaire, tandis que les pixels W traduisent à 11 binaire. Le hexadécimal équivalent de la valeur binaire 11001100 (pour les éléments de tableau [0] et [2]) est CC, et l'équivalent hexadécimal de la valeur binaire 00110011 (pour les éléments de tableau [1] et [3]) est 33. Ainsi, pour faire exemple 6-14 run en mode 12, nous avons seulement besoin de changer l'argument fg_setmode 4-12 et modifier les valeurs de la matrice de tramage comme montré ici:
 
résolution graphique (mode 12) sont les mêmes que dans les CGA modes de quatre couleurs (modes 4 et 5). En ce qui concerne notre exemple en damier va, nous allons utiliser le noir (valeur de couleur 0) à la place de la lumière bleue, et en gras (valeur de couleur 3) au lieu de blanc. Ainsi, les B pixels se traduisent par 00 binaire, tandis que les pixels W traduisent à 11 binaire. Le hexadécimal équivalent de la valeur binaire 11001100 (pour les éléments de tableau [0] et [2]) est CC, et l'équivalent hexadécimal de la valeur binaire 00110011 (pour les éléments de tableau [1] et [3]) est 33. Ainsi, pour faire exemple 6-14 run en mode 12, nous avons seulement besoin de changer l'argument fg_setmode 4-12 et modifier les valeurs de la matrice de tramage comme montré ici:
  
Ligne 3 809 : Ligne 3 860 :
  
  
====EGA / VGA / SVGA 16 couleurs Modes graphiques====
+
EGA / VGA / SVGA 16 couleurs Modes graphiques
 +
 
 +
  Les modes EGA / VGA / SVGA 16 couleurs graphiques (modes 13 à 18, 28 et
  
Les modes EGA / VGA / SVGA 16 couleurs graphiques (modes 13 à 18, 28 et
 
 
29) utilisent une matrice de tramage de quatre octets qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Contrairement aux autres modes graphiques qui vous permettent de stocker des pixels de plusieurs couleurs dans la matrice de tramage, ces modes traitent la matrice de tramage comme un bitmap pour une couleur spécifique. Étant donné que chaque couleur dans le motif de tramage doit être stocké dans un bitmap séparé (qui est, dans une matrice de tramage séparée), vous devez appeler fg_drect une fois pour chaque couleur. En outre, vous devez utiliser fg_setcolor avant chaque appel à fg_drect pour définir la couleur utilisée avec la matrice de tramage.
 
29) utilisent une matrice de tramage de quatre octets qui Fastgraph traite comme un quatre-ligne par tableau à une colonne. Contrairement aux autres modes graphiques qui vous permettent de stocker des pixels de plusieurs couleurs dans la matrice de tramage, ces modes traitent la matrice de tramage comme un bitmap pour une couleur spécifique. Étant donné que chaque couleur dans le motif de tramage doit être stocké dans un bitmap séparé (qui est, dans une matrice de tramage séparée), vous devez appeler fg_drect une fois pour chaque couleur. En outre, vous devez utiliser fg_setcolor avant chaque appel à fg_drect pour définir la couleur utilisée avec la matrice de tramage.
  
Dans tous les modes graphiques EGA / VGA / SVGA, chaque octet de la matrice de tramage est
+
  Dans tous les modes graphiques EGA / VGA / SVGA, chaque octet de la matrice de tramage est
 +
 
 
un bitmap qui représente huit pixels. En utilisant notre exemple en damier familier, la représentation de pixel de la matrice de tramage apparaîtrait comme indiqué ici:
 
un bitmap qui représente huit pixels. En utilisant notre exemple en damier familier, la représentation de pixel de la matrice de tramage apparaîtrait comme indiqué ici:
  
Ligne 3 828 : Ligne 3 881 :
  
 
Traduire ce modèle à des valeurs numériques est simple. Il suffit de construire une matrice de tramage pour chaque couleur dans le motif (il y a deux couleurs dans cet exemple), où les pixels de la couleur actuelle se traduisent à 1, et d'autres pixels traduisent à 0. Dans notre exemple, la traduction pour les B pixels apparaît ci-dessous sur la gauche, tandis que la traduction pour les pixels W apparaît sur la droite.
 
Traduire ce modèle à des valeurs numériques est simple. Il suffit de construire une matrice de tramage pour chaque couleur dans le motif (il y a deux couleurs dans cet exemple), où les pixels de la couleur actuelle se traduisent à 1, et d'autres pixels traduisent à 0. Dans notre exemple, la traduction pour les B pixels apparaît ci-dessous sur la gauche, tandis que la traduction pour les pixels W apparaît sur la droite.
 +
 +
  Chapitre 6: Notions de base 117 Graphiques
 +
 +
  
 
   [3] 1 0 1 0 1 0 1 0 [3] 1 0 1 0 0 1 0 1
 
   [3] 1 0 1 0 1 0 1 0 [3] 1 0 1 0 0 1 0 1
Ligne 3 840 : Ligne 3 897 :
 
L'équivalent hexadécimal de la valeur binaire 01010101 est de 55, et l'équivalent hexadécimal de la valeur binaire 10101010 est AA. Comme on le voit dans l'exemple 15.06, ce sont précisément les valeurs attribuées aux éléments des matrices de tramage.
 
L'équivalent hexadécimal de la valeur binaire 01010101 est de 55, et l'équivalent hexadécimal de la valeur binaire 10101010 est AA. Comme on le voit dans l'exemple 15.06, ce sont précisément les valeurs attribuées aux éléments des matrices de tramage.
  
Exemple 6-15 mode 13 utilise pour afficher le bleu notre lumière et blanc
+
  Exemple 6-15 mode 13 utilise pour afficher le bleu notre lumière et blanc
 +
 
 
motif damier. Notez que vous devez appeler fg_drect deux fois - une fois pour les pixels bleu clair (valeur de couleur 9), et encore pour les pixels blancs (valeur de couleur 15). Notez également comment fg_setcolor est utilisé avant chaque appel à fg_drect pour définir la couleur des pixels fg_drect affichera.
 
motif damier. Notez que vous devez appeler fg_drect deux fois - une fois pour les pixels bleu clair (valeur de couleur 9), et encore pour les pixels blancs (valeur de couleur 15). Notez également comment fg_setcolor est utilisé avant chaque appel à fg_drect pour définir la couleur des pixels fg_drect affichera.
  
Ligne 3 872 : Ligne 3 930 :
 
                       }
 
                       }
  
====256 Couleur Modes graphiques====
+
Guide de l'utilisateur 118 Fastgraph
 +
 
 +
 
 +
256 Couleur Modes graphiques
 +
 
 +
  Les modes graphiques 256 couleurs (modes 19 à 27) utilisent huit octets
  
Les modes graphiques 256 couleurs (modes 19 à 27) utilisent huit octets
 
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à deux colonnes. Chaque pixel dans ces modes nécessite huit bits de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient qu'un seul pixel. Nous devons donc la matrice de tramage à deux colonnes pour produire un motif de tramage significatif. La représentation de pixel de la matrice de tramage apparaîtrait comme indiqué sur la gauche; sa traduction en valeurs numériques apparaît à droite.
 
tramage matrice qui Fastgraph traite comme un quatre-ligne par tableau à deux colonnes. Chaque pixel dans ces modes nécessite huit bits de mémoire vidéo, de sorte que chaque octet de la matrice de tramage contient qu'un seul pixel. Nous devons donc la matrice de tramage à deux colonnes pour produire un motif de tramage significatif. La représentation de pixel de la matrice de tramage apparaîtrait comme indiqué sur la gauche; sa traduction en valeurs numériques apparaît à droite.
  
Ligne 3 913 : Ligne 3 975 :
  
  
====Discours de clôture====
+
Discours de clôture
  
Il y a deux autres éléments importants relatifs à fg_drect et fg_drectw.
+
  Il y a deux autres éléments importants relatifs à fg_drect et fg_drectw.
  
 
Ces articles appliquent quel que soit le mode graphique vidéo est utilisé.
 
Ces articles appliquent quel que soit le mode graphique vidéo est utilisé.
  
Tout d'abord, la matrice de tramage ne peut pas contenir des valeurs de couleurs virtuelles.  Cette
+
  Tout d'abord, la matrice de tramage ne peut pas contenir des valeurs de couleurs virtuelles.  Cette
 +
 
 
est, les valeurs de couleurs de pixels stockées dans la matrice de tramage doit être entre 0 et la valeur maximale de couleur correspondant au mode vidéo en cours. Si une valeur de couleur est
 
est, les valeurs de couleurs de pixels stockées dans la matrice de tramage doit être entre 0 et la valeur maximale de couleur correspondant au mode vidéo en cours. Si une valeur de couleur est
 +
 +
  Chapitre 6: Fundamentals graphiques 119
 +
 +
 
redéfini en utilisant fg_defcolor, Fastgraph ignore toujours la redéfinition et utilise plutôt la valeur réelle de la couleur. Notez que ce ne concerne pas les registres de palette ou vidéo registres du CAD, parce que dans ces cas, nous redéfinissons la couleur associée à une valeur de couleur et non la valeur de couleur elle-même.
 
redéfini en utilisant fg_defcolor, Fastgraph ignore toujours la redéfinition et utilise plutôt la valeur réelle de la couleur. Notez que ce ne concerne pas les registres de palette ou vidéo registres du CAD, parce que dans ces cas, nous redéfinissons la couleur associée à une valeur de couleur et non la valeur de couleur elle-même.
  
Deuxièmement, Fastgraph aligne la matrice de tramage à des lignes spécifiques de pixels.
+
  Deuxièmement, Fastgraph aligne la matrice de tramage à des lignes spécifiques de pixels.
 +
 
 
Fastgraph dessine le rectangle tramé en commençant par la rangée de pixels spécifié par la limite inférieure du rectangle (le maximum coordonnée y fg_drect, ou le minimum coordonnée y fg_drectw) et procède à la hausse jusqu'à atteindre la limite supérieure du rectangle. Dans tous les cas la matrice de tramage utilisée par fg_drect et fg_drectw contient quatre lignes. Si nous laissons r représentent la ligne de pixel correspondant à la limite inférieure du rectangle, puis la première rangée utilisée dans la matrice de tramage est r modulo 4 (en supposant que les lignes de la matrice de tramage sont numérotés de 0 à 3). Cet alignement vous permet d'utiliser la même matrice de tramage dans de multiples appels à fg_drect et fg_drectw pour la construction d'un objet de rectangles tramées adjacents (par exemple, une zone en forme de L) et ont encore le match de motif de tramage où les rectangles se croisent.
 
Fastgraph dessine le rectangle tramé en commençant par la rangée de pixels spécifié par la limite inférieure du rectangle (le maximum coordonnée y fg_drect, ou le minimum coordonnée y fg_drectw) et procède à la hausse jusqu'à atteindre la limite supérieure du rectangle. Dans tous les cas la matrice de tramage utilisée par fg_drect et fg_drectw contient quatre lignes. Si nous laissons r représentent la ligne de pixel correspondant à la limite inférieure du rectangle, puis la première rangée utilisée dans la matrice de tramage est r modulo 4 (en supposant que les lignes de la matrice de tramage sont numérotés de 0 à 3). Cet alignement vous permet d'utiliser la même matrice de tramage dans de multiples appels à fg_drect et fg_drectw pour la construction d'un objet de rectangles tramées adjacents (par exemple, une zone en forme de L) et ont encore le match de motif de tramage où les rectangles se croisent.
  
  
===Région Fill===
+
Région Fill
 +
 
 +
  Fastgraph comprend des routines pour le remplissage des régions arbitraires.  Le fg_flood
  
Fastgraph comprend des routines pour le remplissage des régions arbitraires.  Le fg_flood
 
 
et les routines de fg_paint remplissent une région avec la valeur de couleur actuelle en spécifiant un point dans l'intérieur de la région de l'espace de l'écran. La routine de fg_floodw et fg_paintw remplir aussi une région, mais ils exigent le point intérieur à exprimer dans l'espace mondial. Toutes les régions remplir routines ont deux arguments qui spécifient le (x, y) les coordonnées du point intérieur. Pour fg_flood et fg_paint, les arguments sont des quantités entières. Pour fg_floodw et fg_paintw, ils flottent des quantités ponctuelles. Aucun d'entre eux changer la position du curseur graphique. La différence entre la «inondation» et les versions "de peinture" de ces routines est simple: fg_flood et fg_floodw ne prolongeront pas la région de remplissage au-delà des limites d'écrêtage, tandis que fg_paint et fg_paintw ignorer les limites d'écrêtage. Par conséquent, fg_paint et fg_paintw sont nettement plus rapides.
 
et les routines de fg_paint remplissent une région avec la valeur de couleur actuelle en spécifiant un point dans l'intérieur de la région de l'espace de l'écran. La routine de fg_floodw et fg_paintw remplir aussi une région, mais ils exigent le point intérieur à exprimer dans l'espace mondial. Toutes les régions remplir routines ont deux arguments qui spécifient le (x, y) les coordonnées du point intérieur. Pour fg_flood et fg_paint, les arguments sont des quantités entières. Pour fg_floodw et fg_paintw, ils flottent des quantités ponctuelles. Aucun d'entre eux changer la position du curseur graphique. La différence entre la «inondation» et les versions "de peinture" de ces routines est simple: fg_flood et fg_floodw ne prolongeront pas la région de remplissage au-delà des limites d'écrêtage, tandis que fg_paint et fg_paintw ignorer les limites d'écrêtage. Par conséquent, fg_paint et fg_paintw sont nettement plus rapides.
  
La région étant rempli doit être un polygone fermé dont la couleur limite est
+
  La région étant rempli doit être un polygone fermé dont la couleur limite est
 +
 
 
différent de celui du point intérieur spécifié. La région peut contenir des trous (zones intérieures qui ne seront pas remplis). Fastgraph remplit la région en changeant chaque pixel intérieur dont la couleur est le même que le point intérieur spécifié, à la couleur actuelle. Si le point intérieur est déjà la couleur actuelle, la région de remplissage routines ne font rien. Il est important de noter fg_paint et fg_paintw ne pas traiter les bords de l'écran que les limites des polygones. Remplissage d'un polygone ouvert provoquera ces routines à se comporter de façon imprévisible. Ce n'est pas le cas avec fg_flood et fg_floodw aussi longtemps que les limites d'écrêtage ne sont pas au-delà des bords de l'écran.
 
différent de celui du point intérieur spécifié. La région peut contenir des trous (zones intérieures qui ne seront pas remplis). Fastgraph remplit la région en changeant chaque pixel intérieur dont la couleur est le même que le point intérieur spécifié, à la couleur actuelle. Si le point intérieur est déjà la couleur actuelle, la région de remplissage routines ne font rien. Il est important de noter fg_paint et fg_paintw ne pas traiter les bords de l'écran que les limites des polygones. Remplissage d'un polygone ouvert provoquera ces routines à se comporter de façon imprévisible. Ce n'est pas le cas avec fg_flood et fg_floodw aussi longtemps que les limites d'écrêtage ne sont pas au-delà des bords de l'écran.
  
Exemple 6-17 illustre une utilisation simple de fg_paint dans un 320x200 graphiques
+
  Exemple 6-17 illustre une utilisation simple de fg_paint dans un 320x200 graphiques
 +
 
 
mode. Le programme fg_bestmode utilise pour sélectionner un mode vidéo disponible (si aucun mode graphique de 320x200 est disponible, le programme se termine). Après avoir établi le mode vidéo sélectionné, le programme utilise fg_move et fg_drawrel pour dessiner un rectangle creux de couleur 10 et un diamant creux de couleur 9. Le diamant est tracé au milieu du rectangle, ce qui en fait un trou par rapport au rectangle . Le programme laisse ces formes sur l'écran jusqu'à ce qu'une touche est enfoncée. Il appelle ensuite fg_paint pour remplir cette partie du rectangle à l'extérieur du diamant avec la couleur 10. Après avoir attendu une autre touche, le programme utilise à nouveau fg_paint pour remplir l'intérieur du diamant avec la couleur 15. Enfin, le Guide de l'utilisateur 120 Fastgraph
 
mode. Le programme fg_bestmode utilise pour sélectionner un mode vidéo disponible (si aucun mode graphique de 320x200 est disponible, le programme se termine). Après avoir établi le mode vidéo sélectionné, le programme utilise fg_move et fg_drawrel pour dessiner un rectangle creux de couleur 10 et un diamant creux de couleur 9. Le diamant est tracé au milieu du rectangle, ce qui en fait un trou par rapport au rectangle . Le programme laisse ces formes sur l'écran jusqu'à ce qu'une touche est enfoncée. Il appelle ensuite fg_paint pour remplir cette partie du rectangle à l'extérieur du diamant avec la couleur 10. Après avoir attendu une autre touche, le programme utilise à nouveau fg_paint pour remplir l'intérieur du diamant avec la couleur 15. Enfin, le Guide de l'utilisateur 120 Fastgraph
 +
 +
 
programme attend une autre touche, rétablit le mode vidéo original et attributs de l'écran, et retourne à DOS.
 
programme attend une autre touche, rétablit le mode vidéo original et attributs de l'écran, et retourne à DOS.
  
Ligne 3 987 : Ligne 4 060 :
 
                 fg_reset ();
 
                 fg_reset ();
 
               }
 
               }
 +
                                      Chapitre 6: Fundamentals graphiques 121
  
===Résumé des fondamentaux Routines graphiques===
 
  
Cette section résume les descriptions fonctionnelles du Fastgraph
+
Résumé des fondamentaux Routines graphiques
 +
 
 +
  Cette section résume les descriptions fonctionnelles du Fastgraph
 +
 
 
routines présentées dans ce chapitre. Des informations plus détaillées sur ces routines, y compris leurs arguments et les valeurs de retour, peut être trouvée dans le manuel de référence Fastgraph.
 
routines présentées dans ce chapitre. Des informations plus détaillées sur ces routines, y compris leurs arguments et les valeurs de retour, peut être trouvée dans le manuel de référence Fastgraph.
  
FG_BOX dessine un rectangle vide dans l'espace de l'écran, par rapport à la
+
  FG_BOX dessine un rectangle vide dans l'espace de l'écran, par rapport à la
 +
 
 
zone de découpage. La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
 
zone de découpage. La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
  
FG_BOXDEPTH définit la profondeur des rectangles dessinés avec l'affichage de la boîte
+
  FG_BOXDEPTH définit la profondeur des rectangles dessinés avec l'affichage de la boîte
 +
 
 
routines. La routine de fg_setmode initialise la profondeur de la boîte à un pixel.
 
routines. La routine de fg_setmode initialise la profondeur de la boîte à un pixel.
  
FG_BOXW dessine un rectangle vide dans l'espace du monde, par rapport à la
+
  FG_BOXW dessine un rectangle vide dans l'espace du monde, par rapport à la
 +
 
 
zone de découpage. La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
 
zone de découpage. La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
  
FG_BOXX dessine un rectangle vide dans l'espace de l'écran, par rapport à la
+
  FG_BOXX dessine un rectangle vide dans l'espace de l'écran, par rapport à la
 +
 
 
zone de découpage, en mode "ou exclusif". La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
 
zone de découpage, en mode "ou exclusif". La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
  
FG_BOXXW dessine un rectangle vide dans l'espace du monde, par rapport à la
+
  FG_BOXXW dessine un rectangle vide dans l'espace du monde, par rapport à la
 +
 
 
zone de découpage, en mode "ou exclusif". La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
 
zone de découpage, en mode "ou exclusif". La largeur des bords du rectangle est un pixel à moins changé avec la routine de fg_boxdepth.
  
FG_CIRCLE dessine un cercle vide dans l'espace de l'écran.  Le cercle est
+
  FG_CIRCLE dessine un cercle vide dans l'espace de l'écran.  Le cercle est
 +
 
 
centré sur la position du curseur graphique.
 
centré sur la position du curseur graphique.
  
FG_CIRCLEF dessine un cercle rempli dans l'espace de l'écran.  Le cercle est centré
+
  FG_CIRCLEF dessine un cercle rempli dans l'espace de l'écran.  Le cercle est centré
 +
 
 
à la position du curseur graphique.
 
à la position du curseur graphique.
  
FG_CIRCLEFW dessine un cercle rempli dans l'espace mondial.  Le cercle est centré
+
  FG_CIRCLEFW dessine un cercle rempli dans l'espace mondial.  Le cercle est centré
 +
 
 
à la position du curseur graphique.
 
à la position du curseur graphique.
  
FG_CIRCLEW dessine un cercle vide dans l'espace mondial.  Le cercle est
+
  FG_CIRCLEW dessine un cercle vide dans l'espace mondial.  Le cercle est
 +
 
 
centré sur la position du curseur graphique.
 
centré sur la position du curseur graphique.
  
FG_CLPRECT dessine un (rempli) rectangle solide dans l'espace de l'écran, en ce qui concerne
+
  FG_CLPRECT dessine un (rempli) rectangle solide dans l'espace de l'écran, en ce qui concerne
 +
 
 
à la zone de découpage.
 
à la zone de découpage.
  
FG_CLPRECTW dessine un (rempli) rectangle solide dans l'espace mondial, en ce qui concerne
+
  FG_CLPRECTW dessine un (rempli) rectangle solide dans l'espace mondial, en ce qui concerne
 +
 
 
à la zone de découpage.
 
à la zone de découpage.
  
FG_DASH dessine une ligne en pointillés des graphiques position du curseur à un
+
  FG_DASH dessine une ligne en pointillés des graphiques position du curseur à un
 +
 
 
position absolue de l'espace de l'écran. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position absolue de l'espace de l'écran. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DASHREL dessine une ligne en pointillés des graphiques curseur position à une
+
  FG_DASHREL dessine une ligne en pointillés des graphiques curseur position à une
 +
 
 
position de l'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position de l'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DASHRW dessine une ligne en pointillés des graphiques curseur position à une
+
  FG_DASHRW dessine une ligne en pointillés des graphiques curseur position à une
 +
 
 
la position mondiale de l'espace par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique. Guide de l'utilisateur 122 Fastgraph
 
la position mondiale de l'espace par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique. Guide de l'utilisateur 122 Fastgraph
  
FG_DASHW dessine une ligne en pointillés des graphiques position du curseur à un
+
 
 +
  FG_DASHW dessine une ligne en pointillés des graphiques position du curseur à un
 +
 
 
position absolue de l'espace mondial. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position absolue de l'espace mondial. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAW dessine une ligne solide des graphiques position du curseur à un
+
  FG_DRAW dessine une ligne solide des graphiques position du curseur à un
 +
 
 
position absolue de l'espace de l'écran. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position absolue de l'espace de l'écran. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWREL dessine une ligne solide des graphiques curseur position à une
+
  FG_DRAWREL dessine une ligne solide des graphiques curseur position à une
 +
 
 
position de l'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position de l'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWRELX dessine une ligne solide en mode "ou exclusif" des graphiques
+
  FG_DRAWRELX dessine une ligne solide en mode "ou exclusif" des graphiques
 +
 
 
la position du curseur vers une position d'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
la position du curseur vers une position d'espace de l'écran par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWRW dessine une ligne solide à partir de la position du curseur graphique à un monde
+
  FG_DRAWRW dessine une ligne solide à partir de la position du curseur graphique à un monde
 +
 
 
l'espace position par rapport à elle. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
l'espace position par rapport à elle. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWRXW dessine une ligne solide en mode "ou exclusif" des graphiques
+
  FG_DRAWRXW dessine une ligne solide en mode "ou exclusif" des graphiques
 +
 
 
la position du curseur à une position de l'espace du monde par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
la position du curseur à une position de l'espace du monde par rapport à lui. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWW dessine une ligne solide des graphiques position du curseur à un
+
  FG_DRAWW dessine une ligne solide des graphiques position du curseur à un
 +
 
 
position absolue de l'espace mondial. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
position absolue de l'espace mondial. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWX dessine une ligne solide en mode "ou exclusif" des graphiques
+
  FG_DRAWX dessine une ligne solide en mode "ou exclusif" des graphiques
 +
 
 
la position du curseur à une position d'espace d'écran absolu. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
la position du curseur à une position d'espace d'écran absolu. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRAWXW dessine une ligne solide en mode "ou exclusif" des graphiques
+
  FG_DRAWXW dessine une ligne solide en mode "ou exclusif" des graphiques
 +
 
 
la position du curseur à une position mondiale de l'espace absolu. Il permet également la position de destination de la nouvelle position du curseur graphique.
 
la position du curseur à une position mondiale de l'espace absolu. Il permet également la position de destination de la nouvelle position du curseur graphique.
  
FG_DRECT dessine un rectangle tramé dans l'espace de l'écran, sans tenir compte de
+
  FG_DRECT dessine un rectangle tramé dans l'espace de l'écran, sans tenir compte de
 +
 
 
la zone de découpage. Le motif de tramage du rectangle est défini par une matrice de tramage dont le format dépend du mode vidéo utilisé.
 
la zone de découpage. Le motif de tramage du rectangle est défini par une matrice de tramage dont le format dépend du mode vidéo utilisé.
  
FG_DRECTW dessine un rectangle tramé dans l'espace du monde, sans tenir compte de
+
  FG_DRECTW dessine un rectangle tramé dans l'espace du monde, sans tenir compte de
 +
 
 
la zone de découpage. Le motif de tramage du rectangle est défini par une matrice de tramage dont le format dépend du mode vidéo utilisé.
 
la zone de découpage. Le motif de tramage du rectangle est défini par une matrice de tramage dont le format dépend du mode vidéo utilisé.
  
FG_ELLIPSE dessine une ellipse non remplie dans l'espace de l'écran.  L'ellipse est
+
  FG_ELLIPSE dessine une ellipse non remplie dans l'espace de l'écran.  L'ellipse est
 +
 
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
  
FG_ELLIPSEF dessine une ellipse remplie dans l'espace de l'écran.  L'ellipse est
+
  FG_ELLIPSEF dessine une ellipse remplie dans l'espace de l'écran.  L'ellipse est
 +
 
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
  
FG_ELLIPSEW dessine une ellipse non remplie dans l'espace mondial.  L'ellipse est
+
  FG_ELLIPSEW dessine une ellipse non remplie dans l'espace mondial.  L'ellipse est
 +
 
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
  
FG_ELLIPSFW dessine une ellipse remplie dans l'espace mondial.  L'ellipse est
+
  Chapitre 6: Fundamentals graphiques 123
 +
 
 +
 
 +
  FG_ELLIPSFW dessine une ellipse remplie dans l'espace mondial.  L'ellipse est
 +
 
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
 
centrée sur la position du curseur graphique, et sa taille est déterminée par les longueurs spécifiées des demi-axes.
  
FG_ERASE efface l'écran dans le texte ou les modes graphiques.
+
  FG_ERASE efface l'écran dans le texte ou les modes graphiques.
  
FG_FILLPAGE remplit l'écran avec la couleur actuelle dans le texte ou
+
  FG_FILLPAGE remplit l'écran avec la couleur actuelle dans le texte ou
les modes graphiques
+
 
 +
les modes graphiques.
 +
 
 +
  FG_FLOOD remplit une région fermée arbitraire avec la valeur de couleur actuelle,
  
FG_FLOOD remplit une région fermée arbitraire avec la valeur de couleur actuelle,
 
 
en ce qui concerne les limites d'écrêtage. La région est définie en spécifiant un point de l'espace de l'écran dans son intérieur.
 
en ce qui concerne les limites d'écrêtage. La région est définie en spécifiant un point de l'espace de l'écran dans son intérieur.
  
FG_FLOODW remplit une région arbitraire fermée avec la valeur de couleur actuelle,
+
  FG_FLOODW remplit une région arbitraire fermée avec la valeur de couleur actuelle,
 +
 
 
en ce qui concerne les limites d'écrêtage. La région est définie en spécifiant un point de l'espace mondial dans son intérieur.
 
en ce qui concerne les limites d'écrêtage. La région est définie en spécifiant un point de l'espace mondial dans son intérieur.
  
FG_GETCLIP renvoie les limites d'écrêtage de courant, tel que défini dans le plus
+
  FG_GETCLIP renvoie les limites d'écrêtage de courant, tel que défini dans le plus
 +
 
 
appel récent à fg_setclip.
 
appel récent à fg_setclip.
  
FG_GETPIXEL renvoie la valeur de la couleur d'un pixel spécifié.
+
  FG_GETPIXEL renvoie la valeur de la couleur d'un pixel spécifié.
 +
 
 +
  FG_GETXBOX retourne la largeur en pixels pour les bords gauche et droit de
  
FG_GETXBOX retourne la largeur en pixels pour les bords gauche et droit de
 
 
rectangles creux dessinés avec des routines d'affichage de la boîte de Fastgraph.
 
rectangles creux dessinés avec des routines d'affichage de la boîte de Fastgraph.
  
FG_GETXPOS retourne l'espace x écran de coordonnées du curseur graphique
+
  FG_GETXPOS retourne l'espace x écran de coordonnées du curseur graphique
 +
 
 
position.
 
position.
  
FG_GETYBOX retourne la largeur en pixels pour les bords supérieur et inférieur de
+
  FG_GETYBOX retourne la largeur en pixels pour les bords supérieur et inférieur de
 +
 
 
rectangles creux dessinés avec des routines d'affichage de la boîte de Fastgraph.
 
rectangles creux dessinés avec des routines d'affichage de la boîte de Fastgraph.
  
FG_GETYPOS renvoie l'espace de l'écran coordonnée y du curseur graphique
+
  FG_GETYPOS renvoie l'espace de l'écran coordonnée y du curseur graphique
 +
 
 
position.
 
position.
  
FG_INSIDE détermine si le point spécifié est à l'intérieur convexe donnée
+
  FG_INSIDE détermine si le point spécifié est à l'intérieur convexe donnée
 +
 
 
polygone.
 
polygone.
  
FG_MOVE établit la position du curseur graphique à un écran absolu
+
  FG_MOVE établit la position du curseur graphique à un écran absolu
 +
 
 
point de l'espace.
 
point de l'espace.
  
FG_MOVEREL établit la position du curseur graphique à un espace d'écran
+
  FG_MOVEREL établit la position du curseur graphique à un espace d'écran
 +
 
 
point par rapport à la position actuelle.
 
point par rapport à la position actuelle.
  
FG_MOVERW établit la position du curseur graphique à un point de l'espace mondial
+
  FG_MOVERW établit la position du curseur graphique à un point de l'espace mondial
 +
 
 
par rapport à la position actuelle.
 
par rapport à la position actuelle.
  
FG_MOVEW établit la position du curseur graphique à un monde absolu
+
  FG_MOVEW établit la position du curseur graphique à un monde absolu
 +
 
 
point de l'espace.
 
point de l'espace.
  
FG_PAINT remplit une région arbitraire fermée avec la valeur de couleur actuelle,
+
  FG_PAINT remplit une région arbitraire fermée avec la valeur de couleur actuelle,
 +
 
 
sans respect des limites d'écrêtage. La région est définie en spécifiant un point de l'espace de l'écran dans son intérieur. Guide de l'utilisateur 124 Fastgraph
 
sans respect des limites d'écrêtage. La région est définie en spécifiant un point de l'espace de l'écran dans son intérieur. Guide de l'utilisateur 124 Fastgraph
  
FG_PAINTW remplit une région arbitraire fermée avec la valeur de couleur actuelle,
+
 
 +
  FG_PAINTW remplit une région arbitraire fermée avec la valeur de couleur actuelle,
 +
 
 
sans respect des limites d'écrêtage. La région est définie en spécifiant un point de l'espace mondial dans son intérieur.
 
sans respect des limites d'écrêtage. La région est définie en spécifiant un point de l'espace mondial dans son intérieur.
  
FG_POINT dessine un point (qui est, affiche un pixel) dans l'espace de l'écran.
+
  FG_POINT dessine un point (qui est, affiche un pixel) dans l'espace de l'écran.
  
FG_POINTW dessine un point dans l'espace mondial.
+
  FG_POINTW dessine un point dans l'espace mondial.
  
FG_POINTX dessine un point en mode "ou exclusif" dans l'espace de l'écran.
+
  FG_POINTX dessine un point en mode "ou exclusif" dans l'espace de l'écran.
  
FG_POINTXW dessine un point en mode "ou exclusif" dans l'espace mondial.
+
  FG_POINTXW dessine un point en mode "ou exclusif" dans l'espace mondial.
 +
 
 +
  FG_POLYEDGE définit si oui ou non comprend fg_polyfill tous les pixels situés
  
FG_POLYEDGE définit si oui ou non comprend fg_polyfill tous les pixels situés
 
 
sur les bords droit et inférieur d'un polygone lors de l'élaboration des polygones convexes remplis.
 
sur les bords droit et inférieur d'un polygone lors de l'élaboration des polygones convexes remplis.
  
FG_POLYFILL dessine un polygone convexe rempli dans l'espace de l'écran.  Le polygone est
+
  FG_POLYFILL dessine un polygone convexe rempli dans l'espace de l'écran.  Le polygone est
 +
 
 
fermé si nécessaire. Par défaut, les pixels se trouvant sur les bords droit et inférieur du polygone ne sont pas inclus lors de l'élaboration du polygone. Ce comportement peut être modifié avec fg_polyedge.
 
fermé si nécessaire. Par défaut, les pixels se trouvant sur les bords droit et inférieur du polygone ne sont pas inclus lors de l'élaboration du polygone. Ce comportement peut être modifié avec fg_polyedge.
  
FG_POLYGON dessine un polygone vide dans l'espace de l'écran, en utilisant deux
+
  FG_POLYGON dessine un polygone vide dans l'espace de l'écran, en utilisant deux
 +
 
 
coordonner des réseaux pour définir les sommets du polygone. Le polygone est fermé si nécessaire.
 
coordonner des réseaux pour définir les sommets du polygone. Le polygone est fermé si nécessaire.
  
FG_POLYGONW dessine un polygone dans l'espace non rempli de monde.  Il est le même que
+
  FG_POLYGONW dessine un polygone dans l'espace non rempli de monde.  Il est le même que
 +
 
 
fg_polygon, à l'exception de la coordination des tableaux contiennent des valeurs spatiales du monde.
 
fg_polygon, à l'exception de la coordination des tableaux contiennent des valeurs spatiales du monde.
  
FG_POLYLINE dessine un polygone vide dans l'espace de l'écran, en utilisant un seul
+
  FG_POLYLINE dessine un polygone vide dans l'espace de l'écran, en utilisant un seul
 +
 
 
coordonner ensemble pour définir les sommets du polygone. Le polygone est fermé si nécessaire.
 
coordonner ensemble pour définir les sommets du polygone. Le polygone est fermé si nécessaire.
  
FG_POLYOFF définit l'espace de l'écran de décalage appliqué à chaque sommet pour
+
  FG_POLYOFF définit l'espace de l'écran de décalage appliqué à chaque sommet pour
 +
 
 
polygones dessinés avec fg_polyfill ou fg_polyline.
 
polygones dessinés avec fg_polyfill ou fg_polyline.
  
FG_RECT dessine un (rempli) rectangle solide dans l'espace de l'écran ou de caractère
+
  FG_RECT dessine un (rempli) rectangle solide dans l'espace de l'écran ou de caractère
 +
 
 
l'espace, sans tenir compte de la zone de découpage.
 
l'espace, sans tenir compte de la zone de découpage.
  
FG_RECTW dessine un (rempli) rectangle solide dans l'espace du monde, sans égard
+
  FG_RECTW dessine un (rempli) rectangle solide dans l'espace du monde, sans égard
 +
 
 
à la zone de découpage.
 
à la zone de découpage.
  
FG_SETCLIP définit la zone de découpage dans l'espace de l'écran.  La coupure
+
  FG_SETCLIP définit la zone de découpage dans l'espace de l'écran.  La coupure
 +
 
 
la région est une zone rectangulaire à l'extérieur de laquelle certains graphiques sont supprimés.
 
la région est une zone rectangulaire à l'extérieur de laquelle certains graphiques sont supprimés.
  
FG_SETCLIPW définit la zone de découpage dans l'espace mondial.
+
  FG_SETCLIPW définit la zone de découpage dans l'espace mondial.
  
  
==Affichage des caractères Routines==
 
  
Une partie importante de tout programme est la capacité d'afficher du texte ou
+
 
 +
Chapitre 7
 +
 
 +
 
 +
 
 +
Affichage des caractères Routines Guide de l'utilisateur 126 Fastgraph
 +
 
 +
 
 +
aperçu
 +
 
 +
  Une partie importante de tout programme est la capacité d'afficher du texte ou
 +
 
 
d'autres caractères à l'écran. Fastgraph prend en charge deux jeux de caractères: le caractère matériel ou BIOS fixés disponibles avec chaque mode vidéo et caractère propre logiciel de Fastgraph défini pour les modes graphiques vidéo. Fastgraph / Light ne supporte pas le jeu de caractères du logiciel.
 
d'autres caractères à l'écran. Fastgraph prend en charge deux jeux de caractères: le caractère matériel ou BIOS fixés disponibles avec chaque mode vidéo et caractère propre logiciel de Fastgraph défini pour les modes graphiques vidéo. Fastgraph / Light ne supporte pas le jeu de caractères du logiciel.
  
Nous commencerons ce chapitre par un examen de l'espace de caractère, puis
+
  Nous commencerons ce chapitre par un examen de l'espace de caractère, puis
 +
 
 
discuter des détails au sujet des caractères matériels et logiciels. A la fin du chapitre, nous allons expliquer brièvement comment implémenter des caractères bitmap dans un programme. Pour simplifier les choses, les exemples de programmes présentés dans ce chapitre sont des exemples spécifiques au mode, et aucun test est effectué pour vérifier si le mode vidéo est disponible sur le système de l'utilisateur.
 
discuter des détails au sujet des caractères matériels et logiciels. A la fin du chapitre, nous allons expliquer brièvement comment implémenter des caractères bitmap dans un programme. Pour simplifier les choses, les exemples de programmes présentés dans ce chapitre sont des exemples spécifiques au mode, et aucun test est effectué pour vérifier si le mode vidéo est disponible sur le système de l'utilisateur.
  
  
===Espace de caractères===
+
Espace de caractères
 +
 
 +
  Le système de coordonnées utilisé pour afficher des caractères matériels est appelé
  
Le système de coordonnées utilisé pour afficher des caractères matériels est appelé
 
 
espace de caractère. Il est le seul système de coordonnées disponibles dans les modes vidéo de texte, mais il est un système complémentaire de coordonnées que vous pouvez utiliser soit avec l'espace de l'écran ou de l'espace mondial dans les modes graphiques vidéo. un espace de caractère peut être considéré comme une grille de rangées et de colonnes, chaque cellule de la grille de maintien d'un caractère. Chaque cellule est identifiée par ses propres coordonnées (ligne, colonne) entiers. Les lignes et les colonnes sont numérotées à partir de zéro; l'origine est toujours le coin supérieur gauche de l'écran. Par exemple, dans le 80-colonne en mode vidéo 25-ligne, la (ligne, colonne) les coordonnées de l'écran coins sont présentés dans le schéma suivant.
 
espace de caractère. Il est le seul système de coordonnées disponibles dans les modes vidéo de texte, mais il est un système complémentaire de coordonnées que vous pouvez utiliser soit avec l'espace de l'écran ou de l'espace mondial dans les modes graphiques vidéo. un espace de caractère peut être considéré comme une grille de rangées et de colonnes, chaque cellule de la grille de maintien d'un caractère. Chaque cellule est identifiée par ses propres coordonnées (ligne, colonne) entiers. Les lignes et les colonnes sont numérotées à partir de zéro; l'origine est toujours le coin supérieur gauche de l'écran. Par exemple, dans le 80-colonne en mode vidéo 25-ligne, la (ligne, colonne) les coordonnées de l'écran coins sont présentés dans le schéma suivant.
  
Ligne 4 191 : Ligne 4 337 :
  
 
   Mode de Nombre de Nombre de Char.  Carboniser.
 
   Mode de Nombre de Nombre de Char.  Carboniser.
  Colonnes Nombre de lignes Widthheight
+
                          Colonnes Nombre de lignes Widthheight
  
 
   0 40 25
 
   0 40 25
Ligne 4 204 : Ligne 4 350 :
 
                             11 80 25 9 14
 
                             11 80 25 9 14
 
                             12 40 25 8 8
 
                             12 40 25 8 8
 +
                                  Chapitre 7: Affichage des caractères Routines 127
 +
 +
 
   13 40 25 8 8
 
   13 40 25 8 8
 
                             14 80 25 8 8
 
                             14 80 25 8 8
Ligne 4 223 : Ligne 4 372 :
  
  
===Hardware caractères===
+
Hardware caractères
 +
 
 +
  caractères matériels sont disponibles dans tous les modes vidéo pris en charge.  Comme
  
caractères matériels sont disponibles dans tous les modes vidéo pris en charge.  Comme
 
 
expliqué dans le chapitre 5, les caractères en mode texte ont un attribut d'affichage qui définit leur couleur de premier plan, leur couleur de fond, et si elles clignotent ou non. caractères en mode graphique apparaissent dans une seule couleur, tel que déterminé par l'indice de couleur actuelle. Chapitre 5 a également expliqué comment fg_setattr et fg_setcolor les routines de Fastgraph définissent l'attribut ou de l'indice de couleur dans lequel les caractères matériels suivants apparaissent.
 
expliqué dans le chapitre 5, les caractères en mode texte ont un attribut d'affichage qui définit leur couleur de premier plan, leur couleur de fond, et si elles clignotent ou non. caractères en mode graphique apparaissent dans une seule couleur, tel que déterminé par l'indice de couleur actuelle. Chapitre 5 a également expliqué comment fg_setattr et fg_setcolor les routines de Fastgraph définissent l'attribut ou de l'indice de couleur dans lequel les caractères matériels suivants apparaissent.
  
Il est évidemment important de définir la couleur ou de l'attribut pour le matériel
+
  Il est évidemment important de définir la couleur ou de l'attribut pour le matériel
 +
 
 
caractères, mais il est tout aussi important de définir leur emplacement sur l'écran. Fastgraph dessine des caractères matériels à la position définie par le curseur de texte. Comme le curseur graphique, le curseur de texte ne sont pas un curseur dans le vrai sens, mais est tout simplement une paire d'espace de caractères (ligne, colonne) coordonne avec une signification particulière. La routine fg_setmode définit la position du curseur de texte sur les coordonnées spatiales de caractères (0,0), qui est bien sûr le coin supérieur gauche de la écran.2
 
caractères, mais il est tout aussi important de définir leur emplacement sur l'écran. Fastgraph dessine des caractères matériels à la position définie par le curseur de texte. Comme le curseur graphique, le curseur de texte ne sont pas un curseur dans le vrai sens, mais est tout simplement une paire d'espace de caractères (ligne, colonne) coordonne avec une signification particulière. La routine fg_setmode définit la position du curseur de texte sur les coordonnées spatiales de caractères (0,0), qui est bien sûr le coin supérieur gauche de la écran.2
  
La fg_locate routine Fastgraph modifie la position du curseur de texte.  Il a
+
  La fg_locate routine Fastgraph modifie la position du curseur de texte.  Il a
 +
 
 
deux arguments entiers qui spécifient la (ligne, colonne) espace de caractère coordonnées de la nouvelle position. Les valeurs de ligne doit être comprise entre 0 et un de moins que le nombre de lignes de caractères disponibles. Les valeurs de la colonne doit être comprise entre 0 et un de moins que le nombre de colonnes de caractères disponibles.
 
deux arguments entiers qui spécifient la (ligne, colonne) espace de caractère coordonnées de la nouvelle position. Les valeurs de ligne doit être comprise entre 0 et un de moins que le nombre de lignes de caractères disponibles. Les valeurs de la colonne doit être comprise entre 0 et un de moins que le nombre de colonnes de caractères disponibles.
  
La routine fg_text est basique routine d'affichage de caractères de Fastgraph.  Il
+
  La routine fg_text est basique routine d'affichage de caractères de Fastgraph.  Il
 +
 
 
affiche une chaîne de caractères de matériel, à partir de la position du curseur de texte, en utilisant l'attribut de couleur en cours (pour les modes de texte) ou indice de couleur (pour les modes graphiques). Si la chaîne atteint la dernière colonne dans une ligne, fg_text va envelopper la chaîne à la première colonne de la ligne suivante. En outre, fg_text laisse le curseur d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère apparaît ____________________
 
affiche une chaîne de caractères de matériel, à partir de la position du curseur de texte, en utilisant l'attribut de couleur en cours (pour les modes de texte) ou indice de couleur (pour les modes graphiques). Si la chaîne atteint la dernière colonne dans une ligne, fg_text va envelopper la chaîne à la première colonne de la ligne suivante. En outre, fg_text laisse le curseur d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère apparaît ____________________
  
(2) En réalité, il y a huit curseurs de texte, une pour chaque page vidéo.  le
+
  (2) En réalité, il y a huit curseurs de texte, une pour chaque page vidéo.  le
 +
 
 
routine fg_setmode initialise chaque position du curseur de texte à (0,0). Le chapitre suivant décrit plus en détail. Guide de l'utilisateur 128 Fastgraph
 
routine fg_setmode initialise chaque position du curseur de texte à (0,0). Le chapitre suivant décrit plus en détail. Guide de l'utilisateur 128 Fastgraph
 +
 +
 
à la fin d'une rangée). Cette fonctionnalité permet aux appels successifs à fg_text pour afficher les chaînes adjacentes. Le premier argument de la routine fg_text est une chaîne de caractères de longueur arbitraire, et le second argument est une valeur entière qui spécifie le nombre de caractères à afficher à partir de cette chaîne.
 
à la fin d'une rangée). Cette fonctionnalité permet aux appels successifs à fg_text pour afficher les chaînes adjacentes. Le premier argument de la routine fg_text est une chaîne de caractères de longueur arbitraire, et le second argument est une valeur entière qui spécifie le nombre de caractères à afficher à partir de cette chaîne.
  
Exemple 7-1 illustre l'utilisation de fg_locate et fg_text dans le 80x25
+
  Exemple 7-1 illustre l'utilisation de fg_locate et fg_text dans le 80x25
 +
 
 
mode texte de couleur (mode 3). Après avoir établi le mode vidéo et en faisant le curseur du BIOS invisible, le programme affiche quatre cordes avec des attributs différents. Les attributs sont sélectionnés en utilisant fg_setattr, et les cordes sont affichées par fg_text. La première chaîne apparaît en jaune (attributs 14,0,0) dans le coin supérieur gauche de l'écran; fg_locate est pas nécessaire parce que (0,0) est la position du curseur de texte par défaut établi par fg_setmode. La deuxième chaîne apparaît en vert clair (10,0,0) un espace vers la droite de la première chaîne. Sa position repose sur le fait fg_text laisse le curseur de texte placé un espace vers la droite du dernier caractère affiché (après le "w" de "jaune" dans ce cas). L'espace de premier plan dans «vert» laisse un espace entre les première et deuxième chaînes. De même, la troisième chaîne apparaît en clignotant rouge (12,0,1) un espace vers la droite de la deuxième chaîne.
 
mode texte de couleur (mode 3). Après avoir établi le mode vidéo et en faisant le curseur du BIOS invisible, le programme affiche quatre cordes avec des attributs différents. Les attributs sont sélectionnés en utilisant fg_setattr, et les cordes sont affichées par fg_text. La première chaîne apparaît en jaune (attributs 14,0,0) dans le coin supérieur gauche de l'écran; fg_locate est pas nécessaire parce que (0,0) est la position du curseur de texte par défaut établi par fg_setmode. La deuxième chaîne apparaît en vert clair (10,0,0) un espace vers la droite de la première chaîne. Sa position repose sur le fait fg_text laisse le curseur de texte placé un espace vers la droite du dernier caractère affiché (après le "w" de "jaune" dans ce cas). L'espace de premier plan dans «vert» laisse un espace entre les première et deuxième chaînes. De même, la troisième chaîne apparaît en clignotant rouge (12,0,1) un espace vers la droite de la deuxième chaîne.
  
Le programme utilise ensuite fg_locate pour déplacer le curseur de texte à la partie inférieure gauche
+
  Le programme utilise ensuite fg_locate pour déplacer le curseur de texte à la partie inférieure gauche
 +
 
 
coin de l'écran et affiche le "Appuyez sur une touche" chaîne. Cette chaîne est affichée avec une avant-plan rouge clair sur un fond gris (12,7,0). Les espaces supplémentaires autour de la chaîne prolongent la couleur de fond d'une position de caractère à gauche et à droite et font la chaîne plus attrayant visuellement. Enfin, une fois que vous appuyez sur une touche, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
 
coin de l'écran et affiche le "Appuyez sur une touche" chaîne. Cette chaîne est affichée avec une avant-plan rouge clair sur un fond gris (12,7,0). Les espaces supplémentaires autour de la chaîne prolongent la couleur de fond d'une position de caractère à gauche et à droite et font la chaîne plus attrayant visuellement. Enfin, une fois que vous appuyez sur une touche, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
  
Ligne 4 282 : Ligne 4 440 :
  
  
La routine fg_where récupère la position du curseur de texte dans ses deux
+
  La routine fg_where récupère la position du curseur de texte dans ses deux
 +
 
 
arguments entiers. Cette routine n'est pas utilisé aussi souvent que fg_locate et fg_text parce que plus souvent qu'autrement, votre programme sera connaître la position du curseur de texte implicitement, ou vous saurez à l'avance les endroits où le texte sera affiché. La routine fg_where prend deux arguments entiers passés par référence, et ces deux arguments reçoivent respectivement la position de la ligne et de la colonne actuelle du curseur de texte.
 
arguments entiers. Cette routine n'est pas utilisé aussi souvent que fg_locate et fg_text parce que plus souvent qu'autrement, votre programme sera connaître la position du curseur de texte implicitement, ou vous saurez à l'avance les endroits où le texte sera affiché. La routine fg_where prend deux arguments entiers passés par référence, et ces deux arguments reçoivent respectivement la position de la ligne et de la colonne actuelle du curseur de texte.
  
Exemple 7-2 produit les mêmes résultats que l'exemple 7-1, mais il le fait d'une
+
  Exemple 7-2 produit les mêmes résultats que l'exemple 7-1, mais il le fait d'une
 +
 
 
peu différemment. Il utilise sa propre routine, put_string, pour afficher une chaîne à une ligne et la colonne spécifiée.La routine de put_string appelle simplement fg_locate pour établir la position du curseur de texte et appelle fg_text pour afficher la chaîne alors. Notez l'utilisation de la fonction de la bibliothèque C strlen pour déterminer la longueur de chaîne passée à fg_text. Exemple 7-2 fg_where utilise également pour récupérer les nouvelles positions du texte du curseur, qui sont ensuite transmis à put_string.
 
peu différemment. Il utilise sa propre routine, put_string, pour afficher une chaîne à une ligne et la colonne spécifiée.La routine de put_string appelle simplement fg_locate pour établir la position du curseur de texte et appelle fg_text pour afficher la chaîne alors. Notez l'utilisation de la fonction de la bibliothèque C strlen pour déterminer la longueur de chaîne passée à fg_text. Exemple 7-2 fg_where utilise également pour récupérer les nouvelles positions du texte du curseur, qui sont ensuite transmis à put_string.
  
Ligne 4 322 : Ligne 4 482 :
 
  fg_setmode (old_mode);
 
  fg_setmode (old_mode);
 
                       fg_reset ();  
 
                       fg_reset ();  
 +
 +
Guide de l'utilisateur 130 Fastgraph
 +
  
 
   }
 
   }
Ligne 4 332 : Ligne 4 495 :
 
                       fg_text (string, strlen (string));
 
                       fg_text (string, strlen (string));
 
                     }
 
                     }
Parfois, vous voudrez peut-être changer l'attribut d'affichage du texte existant,
+
 
 +
 
 +
Parfois, vous voudrez peut-être changer l'attribut d'affichage du texte existant,
 +
 
 
tels que lors de la création d'une ombre sur les bords d'une fenêtre pop-up. La fg_chgattr routine Fastgraph remplit cette fonction. Il applique l'attribut d'affichage de texte actuel (tel que défini dans l'appel le plus récent à fg_setattr ou fg_setcolor) à un certain nombre de caractères, à partir de la position du curseur de texte. Il laisse le curseur de texte d'une colonne à droite du dernier caractère modifié (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). L'argument de la routine fg_chgattr spécifie le nombre de caractères à changer. Cette routine n'a pas d'effet dans les modes graphiques vidéo.
 
tels que lors de la création d'une ombre sur les bords d'une fenêtre pop-up. La fg_chgattr routine Fastgraph remplit cette fonction. Il applique l'attribut d'affichage de texte actuel (tel que défini dans l'appel le plus récent à fg_setattr ou fg_setcolor) à un certain nombre de caractères, à partir de la position du curseur de texte. Il laisse le curseur de texte d'une colonne à droite du dernier caractère modifié (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). L'argument de la routine fg_chgattr spécifie le nombre de caractères à changer. Cette routine n'a pas d'effet dans les modes graphiques vidéo.
  
La fg_chgtext routine Fastgraph effectue quelque peu la fonction inverse
+
La fg_chgtext routine Fastgraph effectue quelque peu la fonction inverse
 +
 
 
de fg_chgattr. Il affiche un nouveau texte, mais utilise les attributs d'affichage déjà affectés aux cellules de caractère où le texte apparaîtra. La routine de fg_chgtext prend les deux mêmes arguments que fg_text, affiche les caractères à partir de la position du curseur de texte, et laisse le curseur d'une colonne à droite du dernier caractère affiché. Comme fg_chgattr, fg_chgtext n'a pas d'effet dans les modes graphiques vidéo.
 
de fg_chgattr. Il affiche un nouveau texte, mais utilise les attributs d'affichage déjà affectés aux cellules de caractère où le texte apparaîtra. La routine de fg_chgtext prend les deux mêmes arguments que fg_text, affiche les caractères à partir de la position du curseur de texte, et laisse le curseur d'une colonne à droite du dernier caractère affiché. Comme fg_chgattr, fg_chgtext n'a pas d'effet dans les modes graphiques vidéo.
  
 
Exemple 7-3 illustre les fg_chgattr et fg_chgtext routines. Il fonctionne
 
Exemple 7-3 illustre les fg_chgattr et fg_chgtext routines. Il fonctionne
 +
 
dans le 80 colonnes en mode texte de couleur (mode 3), mais si nous changeons l'argument fg_setmode elle aussi irait dans le mode texte monochrome (mode 7). Le programme affiche d'abord le mot «bonjour» dans le coin supérieur gauche de l'écran, en utilisant un premier plan gris et attribut de fond noir. Après avoir attendu pendant une séquence de touches, le programme appelle fg_chgattr pour rendre le mot «bonjour» apparaît en vidéo inverse (qui est, un premier plan noir et gris attribut de fond). Après une deuxième séquence de touches, le programme fg_chgtext utilise pour changer le "h" de "bonjour" en majuscules. Suite à cela, le programme revient à DOS.
 
dans le 80 colonnes en mode texte de couleur (mode 3), mais si nous changeons l'argument fg_setmode elle aussi irait dans le mode texte monochrome (mode 7). Le programme affiche d'abord le mot «bonjour» dans le coin supérieur gauche de l'écran, en utilisant un premier plan gris et attribut de fond noir. Après avoir attendu pendant une séquence de touches, le programme appelle fg_chgattr pour rendre le mot «bonjour» apparaît en vidéo inverse (qui est, un premier plan noir et gris attribut de fond). Après une deuxième séquence de touches, le programme fg_chgtext utilise pour changer le "h" de "bonjour" en majuscules. Suite à cela, le programme revient à DOS.
  
Ligne 4 376 : Ligne 4 544 :
  
  
Vous pouvez également récupérer le caractère ou attribut stocké dans un spécifique
+
Vous pouvez également récupérer le caractère ou attribut stocké dans un spécifique
 +
 
 
cellule de caractère. La fg_getchar routine Fastgraph récupère les valeurs de caractères, tandis que fg_getattr récupère les attributs de caractère. Les deux routines ont deux arguments entiers qui spécifient la (ligne, colonne) coordonnées de la cellule de caractère d'intérêt. Exemple 7-4 utilise fg_getchar et fg_getattr à lire le caractère et l'attribut stocké à la ligne 24, la colonne 0. Juste avant la sortie du programme, il affiche ces valeurs.
 
cellule de caractère. La fg_getchar routine Fastgraph récupère les valeurs de caractères, tandis que fg_getattr récupère les attributs de caractère. Les deux routines ont deux arguments entiers qui spécifient la (ligne, colonne) coordonnées de la cellule de caractère d'intérêt. Exemple 7-4 utilise fg_getchar et fg_getattr à lire le caractère et l'attribut stocké à la ligne 24, la colonne 0. Juste avant la sortie du programme, il affiche ces valeurs.
  
Ligne 4 408 : Ligne 4 577 :
  
  
Si vous avez besoin de récupérer les caractères et les attributs d'un rectangle
+
Si vous avez besoin de récupérer les caractères et les attributs d'un rectangle
 +
 
 
domaine, il est plus efficace d'utiliser la routine de fg_getimage (décrit dans le chapitre 10) que d'appeler fg_getchar et fg_getattr à plusieurs reprises. Guide de l'utilisateur 132 Fastgraph
 
domaine, il est plus efficace d'utiliser la routine de fg_getimage (décrit dans le chapitre 10) que d'appeler fg_getchar et fg_getattr à plusieurs reprises. Guide de l'utilisateur 132 Fastgraph
  
  
Affichage des caractères matériels en graphiques modes vidéo est différent de
+
Affichage des caractères matériels en graphiques modes vidéo est différent de
 +
 
 
faire en mode texte. Comme mode texte, nous pouvons toujours utiliser fg_text pour afficher les chaînes dans l'espace de caractère, ce qui bien sûr limite les endroits où les chaînes peuvent apparaître. modes graphiques offrent la possibilité d'afficher les chaînes par rapport à un pixel, et non pas seulement des cellules de caractères. Le fg_print et routines fg_justify sont prévus à cet effet. Pour comparer les deux méthodes d'affichage des chaînes dans les modes graphiques, commençons par un exemple de le faire avec fg_text.
 
faire en mode texte. Comme mode texte, nous pouvons toujours utiliser fg_text pour afficher les chaînes dans l'espace de caractère, ce qui bien sûr limite les endroits où les chaînes peuvent apparaître. modes graphiques offrent la possibilité d'afficher les chaînes par rapport à un pixel, et non pas seulement des cellules de caractères. Le fg_print et routines fg_justify sont prévus à cet effet. Pour comparer les deux méthodes d'affichage des chaînes dans les modes graphiques, commençons par un exemple de le faire avec fg_text.
  
Exemple 7-5 est similaire à l'exemple 7-1, mais il fonctionne dans le EGA amélioré
+
Exemple 7-5 est similaire à l'exemple 7-1, mais il fonctionne dans le EGA amélioré
 +
 
 
mode graphique (mode 16), au lieu d'un mode texte. Dans les modes graphiques, fg_cursor n'a aucun effet, donc nous avons omis à partir du programme. En outre, les caractères ne peuvent pas être affichés avec un attribut clignotant, donc nous avons omis les caractères clignotantes (on pourrait simuler clignoter par répétitivement afficher et de les effacer, mais cela dépasse le cadre de cet exemple). Parce que les caractères en mode graphique ont seulement une couleur de premier plan, nous avons eu pour simuler le fond gris de la «Appuyez sur une touche" chaîne en dessinant d'abord un rectangle où cette chaîne apparaît. Les différences entre les exemples 7-5 et 7-1 attente pour tout mode graphique vidéo, et pas seulement le mode 16.
 
mode graphique (mode 16), au lieu d'un mode texte. Dans les modes graphiques, fg_cursor n'a aucun effet, donc nous avons omis à partir du programme. En outre, les caractères ne peuvent pas être affichés avec un attribut clignotant, donc nous avons omis les caractères clignotantes (on pourrait simuler clignoter par répétitivement afficher et de les effacer, mais cela dépasse le cadre de cet exemple). Parce que les caractères en mode graphique ont seulement une couleur de premier plan, nous avons eu pour simuler le fond gris de la «Appuyez sur une touche" chaîne en dessinant d'abord un rectangle où cette chaîne apparaît. Les différences entre les exemples 7-5 et 7-1 attente pour tout mode graphique vidéo, et pas seulement le mode 16.
  
Ligne 4 449 : Ligne 4 621 :
  
  
Maintenant, nous allons montrer comment afficher les graphiques des chaînes de mode en utilisant le plus
+
Maintenant, nous allons montrer comment afficher les graphiques des chaînes de mode en utilisant le plus
 +
 
 
espace écran flexible système de coordonnées. La routine est identique à celui fg_print fg_text, mais il affiche une chaîne par rapport à la position du curseur graphique (qui est, dans l'espace de l'écran), plutôt que la position de l'espace de caractère établi avec fg_locate. Par défaut, fg_print affiche des chaînes de sorte que leur
 
espace écran flexible système de coordonnées. La routine est identique à celui fg_print fg_text, mais il affiche une chaîne par rapport à la position du curseur graphique (qui est, dans l'espace de l'écran), plutôt que la position de l'espace de caractère établi avec fg_locate. Par défaut, fg_print affiche des chaînes de sorte que leur
  
Ligne 4 473 : Ligne 4 646 :
  
 
Ni fg_print ni fg_text effectue écrêtage. Il peut y avoir des moments,
 
Ni fg_print ni fg_text effectue écrêtage. Il peut y avoir des moments,
 +
 
cependant, lors de l'affichage des chaînes écrêtés est souhaitable, par exemple lors de l'affichage du texte dans une fenêtre fixe. Lorsque l'écrêtage est nécessaire, utiliser fg_printc ou fg_textc pour afficher des chaînes. Ces deux routines sont identiques en tous points à fg_print et fg_text, mais ils ne présentent pas de caractères se trouvant en dehors de la zone de découpage établi par fg_setclip ou fg_setclipw. En outre, si une partie d'un personnage est en dehors de la zone de découpage, fg_printc et fg_textc affichage seulement qu'une partie du personnage qui se situe dans la zone de découpage. Parce que l'écrêtage est uniquement pris en charge dans les modes graphiques vidéo, fg_textc est équivalente à fg_text lorsqu'il est utilisé en mode texte vidéo.
 
cependant, lors de l'affichage des chaînes écrêtés est souhaitable, par exemple lors de l'affichage du texte dans une fenêtre fixe. Lorsque l'écrêtage est nécessaire, utiliser fg_printc ou fg_textc pour afficher des chaînes. Ces deux routines sont identiques en tous points à fg_print et fg_text, mais ils ne présentent pas de caractères se trouvant en dehors de la zone de découpage établi par fg_setclip ou fg_setclipw. En outre, si une partie d'un personnage est en dehors de la zone de découpage, fg_printc et fg_textc affichage seulement qu'une partie du personnage qui se situe dans la zone de découpage. Parce que l'écrêtage est uniquement pris en charge dans les modes graphiques vidéo, fg_textc est équivalente à fg_text lorsqu'il est utilisé en mode texte vidéo.
  
Exemple 7-6 illustre l'utilisation de fg_print et fg_justify pour afficher
+
Exemple 7-6 illustre l'utilisation de fg_print et fg_justify pour afficher
 +
 
 
texte justifié dans le mode graphique 640x480 16 couleurs VGA (mode 18). La première série d'appels à fg_move, fg_justify et fg_print afficher la chaîne "Fastgraph" justifié à gauche, centré, et justifié à droite contre la rangée supérieure de l'écran. La deuxième série de ces appels affiche également la chaîne dans ces positions, mais chacun est centré verticalement dans le milieu de l'écran. La dernière série affiche les cordes contre la rangée du bas de l'écran. Les neuf appels à fg_justify dans l'exemple 7-6 représentent tous les paramètres possibles de justification pour les chaînes affichées avec fg_print.
 
texte justifié dans le mode graphique 640x480 16 couleurs VGA (mode 18). La première série d'appels à fg_move, fg_justify et fg_print afficher la chaîne "Fastgraph" justifié à gauche, centré, et justifié à droite contre la rangée supérieure de l'écran. La deuxième série de ces appels affiche également la chaîne dans ces positions, mais chacun est centré verticalement dans le milieu de l'écran. La dernière série affiche les cordes contre la rangée du bas de l'écran. Les neuf appels à fg_justify dans l'exemple 7-6 représentent tous les paramètres possibles de justification pour les chaînes affichées avec fg_print.
  
Ligne 4 484 : Ligne 4 659 :
  
 
  void main ()   
 
  void main ()   
 +
 +
Guide de l'utilisateur 134 Fastgraph
  
  
Ligne 4 532 : Ligne 4 709 :
  
  
Exemple 7-7 montre un effet secondaire qui se produit lors de l'affichage
+
Exemple 7-7 montre un effet secondaire qui se produit lors de l'affichage
 +
 
 
caractères dans les modes graphiques. Cet exemple utilise le mode graphique MCGA (mode 19) et affiche les deux chaînes de caractères dans le même emplacement. Si nous devions le faire en mode texte, la première chaîne disparaîtrait une fois nous avons affiché la deuxième chaîne (en supposant que la deuxième chaîne est pas plus courte que la première). Dans les modes graphiques, cependant, les parties de la première chaîne de caractères ne sont pas couverts par des caractères de la deuxième chaîne sont encore visibles. La raison pour laquelle cela peut ne pas être clair au début, mais rappelez-vous quand nous affichons des caractères dans les modes graphiques, nous ne sommes pas vraiment affichons des caractères, mais simplement une représentation de pixels des caractères. Fastgraph n'a aucun moyen de distinguer cette
 
caractères dans les modes graphiques. Cet exemple utilise le mode graphique MCGA (mode 19) et affiche les deux chaînes de caractères dans le même emplacement. Si nous devions le faire en mode texte, la première chaîne disparaîtrait une fois nous avons affiché la deuxième chaîne (en supposant que la deuxième chaîne est pas plus courte que la première). Dans les modes graphiques, cependant, les parties de la première chaîne de caractères ne sont pas couverts par des caractères de la deuxième chaîne sont encore visibles. La raison pour laquelle cela peut ne pas être clair au début, mais rappelez-vous quand nous affichons des caractères dans les modes graphiques, nous ne sommes pas vraiment affichons des caractères, mais simplement une représentation de pixels des caractères. Fastgraph n'a aucun moyen de distinguer cette
 +
 +
Chapitre 7: Affichage des caractères Routines 135
 +
 +
 
pixels de tous les autres pixels, peu importe ce que la routine que nous utilisons pour l'affichage de la chaîne.
 
pixels de tous les autres pixels, peu importe ce que la routine que nous utilisons pour l'affichage de la chaîne.
  
Ligne 4 560 : Ligne 4 742 :
 
                           }
 
                           }
  
Pour éviter ce problème, la procédure recommandée pour l'affichage
+
 
 +
Pour éviter ce problème, la procédure recommandée pour l'affichage
 +
 
 
caractères dans les modes graphiques est d'abord effacer la zone où le texte apparaîtra. La meilleure façon de le faire est d'utiliser fg_rect pour dessiner un rectangle dans la couleur de fond. Dans l'exemple 7-7, nous pourrions le faire en insérant les déclarations
 
caractères dans les modes graphiques est d'abord effacer la zone où le texte apparaîtra. La meilleure façon de le faire est d'utiliser fg_rect pour dessiner un rectangle dans la couleur de fond. Dans l'exemple 7-7, nous pourrions le faire en insérant les déclarations
  
Ligne 4 571 : Ligne 4 755 :
  
  
===Hauteur des caractères===
+
Hauteur des caractères
 +
 
 +
En VGA et SVGA graphiques modes (modes 17 à 29), il est possible de changer
  
En VGA et SVGA graphiques modes (modes 17 à 29), il est possible de changer
 
 
la hauteur des caractères affichée avec fg_print, fg_printc, fg_text et fg_textc. Par défaut, les caractères sont 16 pixels de haut dans les modes les graphiques VGA et SVGA (17, 18, 24 à 29) et 8 pixels de haut dans les modes graphiques MCGA et XVGA (19 à 23). La routine de fg_fontsize vous permet d'afficher les caractères du 8x8 du BIOS, 8x14 ou 8x16 polices dans l'un de ces modes. Son seul paramètre spécifie la hauteur de caractère en pixels; il doit être 8, 14 ou 16. Si la hauteur de caractère est une autre valeur ou si fg_fontsize est utilisé dans un mode vidéo numérotée 16 ou moins (qui est, dans un mode non VGA), rien ne se passe. Guide de l'utilisateur 136 Fastgraph
 
la hauteur des caractères affichée avec fg_print, fg_printc, fg_text et fg_textc. Par défaut, les caractères sont 16 pixels de haut dans les modes les graphiques VGA et SVGA (17, 18, 24 à 29) et 8 pixels de haut dans les modes graphiques MCGA et XVGA (19 à 23). La routine de fg_fontsize vous permet d'afficher les caractères du 8x8 du BIOS, 8x14 ou 8x16 polices dans l'un de ces modes. Son seul paramètre spécifie la hauteur de caractère en pixels; il doit être 8, 14 ou 16. Si la hauteur de caractère est une autre valeur ou si fg_fontsize est utilisé dans un mode vidéo numérotée 16 ou moins (qui est, dans un mode non VGA), rien ne se passe. Guide de l'utilisateur 136 Fastgraph
  
Lorsque nous changeons la hauteur de caractère avec fg_fontsize, le nombre de texte
+
 
 +
Lorsque nous changeons la hauteur de caractère avec fg_fontsize, le nombre de texte
 +
 
 
lignes sur l'écran change en conséquence. Le tableau suivant indique le nombre de lignes de texte disponibles dans chaque mode vidéo pris en charge lorsque vous utilisez les différentes tailles de caractères. Les valeurs en gras représentent la taille de caractères par défaut et le nombre de lignes pour ce mode vidéo.
 
lignes sur l'écran change en conséquence. Le tableau suivant indique le nombre de lignes de texte disponibles dans chaque mode vidéo pris en charge lorsque vous utilisez les différentes tailles de caractères. Les valeurs en gras représentent la taille de caractères par défaut et le nombre de lignes pour ce mode vidéo.
  
Ligne 4 596 : Ligne 4 783 :
 
                                 29 96 54 48
 
                                 29 96 54 48
  
Exemple 7-8 montre comment utiliser fg_fontsize pour activer le caractère 8x8
+
Exemple 7-8 montre comment utiliser fg_fontsize pour activer le caractère 8x8
 +
 
 
police dans le 640x480 mode graphique VGA 16-couleur (mode 18). Dans ce mode, les caractères sont normalement 16 pixels de haut, ce qui donne 30 lignes de caractères par écran. Lorsque nous utilisons la police de 8x8, ce qui augmente à 60 lignes parce que les personnages sont maintenant la moitié aussi grand qu'avant. Le programme d'exemple fg_text utilise pour afficher la chaîne "police 8x8 ROM" 60 fois, une fois dans chaque ligne.
 
police dans le 640x480 mode graphique VGA 16-couleur (mode 18). Dans ce mode, les caractères sont normalement 16 pixels de haut, ce qui donne 30 lignes de caractères par écran. Lorsque nous utilisons la police de 8x8, ce qui augmente à 60 lignes parce que les personnages sont maintenant la moitié aussi grand qu'avant. Le programme d'exemple fg_text utilise pour afficher la chaîne "police 8x8 ROM" 60 fois, une fois dans chaque ligne.
  
Ligne 4 632 : Ligne 4 820 :
  
  
===Routines de conversion===
+
Routines de conversion
 +
 
 +
Dans le chapitre 4, nous avons introduit les routines de Fastgraph pour convertir
  
Dans le chapitre 4, nous avons introduit les routines de Fastgraph pour convertir
 
 
coordonnées entre le caractère d'espace et de l'espace de l'écran. Dans cette section, nous passerons en revue ces routines et présentons un exemple qui utilise certains d'entre eux.
 
coordonnées entre le caractère d'espace et de l'espace de l'écran. Dans cette section, nous passerons en revue ces routines et présentons un exemple qui utilise certains d'entre eux.
  
Les fg_xalpha et fg_yalpha routines convertissent les coordonnées de l'espace écran pour
+
Les fg_xalpha et fg_yalpha routines convertissent les coordonnées de l'espace écran pour
 +
 
 
espace de caractère. La routine de fg_xalpha convertit un espace de coordonnées x écran à la colonne d'espace de caractère qui contient les coordonnées. De même, fg_yalpha convertit un espace d'écran coordonnée y à l'espace rangée de caractères qui contient les coordonnées.
 
espace de caractère. La routine de fg_xalpha convertit un espace de coordonnées x écran à la colonne d'espace de caractère qui contient les coordonnées. De même, fg_yalpha convertit un espace d'écran coordonnée y à l'espace rangée de caractères qui contient les coordonnées.
  
Les fg_xconvert et fg_yconvert routines convertissent espace de caractère
+
Les fg_xconvert et fg_yconvert routines convertissent espace de caractère
 +
 
 
coordonnées à l'espace de l'écran. La routine de fg_xconvert convertit une colonne d'espace de caractère à l'espace de l'écran de coordonnées de son pixel gauche. De même, fg_yconvert convertit un espace rangée de caractères à l'espace de l'écran de coordonnées de son sommet (numéro le plus bas) pixel.
 
coordonnées à l'espace de l'écran. La routine de fg_xconvert convertit une colonne d'espace de caractère à l'espace de l'écran de coordonnées de son pixel gauche. De même, fg_yconvert convertit un espace rangée de caractères à l'espace de l'écran de coordonnées de son sommet (numéro le plus bas) pixel.
  
Exemple 05.07 a montré comment afficher des caractères dans un mode graphique.
+
Exemple 05.07 a montré comment afficher des caractères dans un mode graphique.
  
 
Parce que les personnages ne sont pas une couleur de fond dans les modes graphiques, cet exemple utilisé fg_rect pour simuler une couleur de fond en dessinant un rectangle gris avant d'afficher le texte. Il était nécessaire de déterminer les coordonnées d'écran des cellules de caractères afin que nous puissions passer les paramètres corrects pour fg_rect. En utilisant fg_xconvert et fg_yconvert, nous pouvons laisser Fastgraph calculer les coordonnées nécessaires à l'écran. Cette méthode a l'avantage supplémentaire de travailler dans un mode graphique, tandis que les coordonnées transmises à fg_rect dans l'exemple 7-5 ne fonctionnerait correctement dans un mode graphique 640x350. Exemple 7-9 montre comment nous pourrions étendre exemple 7-5 en utilisant fg_xconvert et fg_yconvert.
 
Parce que les personnages ne sont pas une couleur de fond dans les modes graphiques, cet exemple utilisé fg_rect pour simuler une couleur de fond en dessinant un rectangle gris avant d'afficher le texte. Il était nécessaire de déterminer les coordonnées d'écran des cellules de caractères afin que nous puissions passer les paramètres corrects pour fg_rect. En utilisant fg_xconvert et fg_yconvert, nous pouvons laisser Fastgraph calculer les coordonnées nécessaires à l'écran. Cette méthode a l'avantage supplémentaire de travailler dans un mode graphique, tandis que les coordonnées transmises à fg_rect dans l'exemple 7-5 ne fonctionnerait correctement dans un mode graphique 640x350. Exemple 7-9 montre comment nous pourrions étendre exemple 7-5 en utilisant fg_xconvert et fg_yconvert.
Ligne 4 669 : Ligne 4 860 :
 
  fg_setcolor (7);
 
  fg_setcolor (7);
 
                         minx = fg_xconvert (0);  
 
                         minx = fg_xconvert (0);  
 +
 +
Guide de l'utilisateur 138 Fastgraph
 +
  
 
  maxx = fg_xconvert (16) - 1;
 
  maxx = fg_xconvert (16) - 1;
Ligne 4 684 : Ligne 4 878 :
  
  
===logiciels caractères===
+
logiciels caractères
 +
 
 +
caractères de logiciels, également appelés caractères d'AVC ou de caractères vectoriels
  
caractères de logiciels, également appelés caractères d'AVC ou de caractères vectoriels
 
 
dans d'autres documents, ne sont sont disponibles dans les modes graphiques vidéo. Contrairement aux caractères matériels de taille fixe, vous pouvez afficher les caractères de logiciels dans toutes les dimensions, à un angle quelconque, et à une position quelconque. En outre, les caractères de logiciels sont espacés proportionnellement. Cependant, les caractères de logiciels prennent plus de temps pour dessiner que des caractères matériels font.
 
dans d'autres documents, ne sont sont disponibles dans les modes graphiques vidéo. Contrairement aux caractères matériels de taille fixe, vous pouvez afficher les caractères de logiciels dans toutes les dimensions, à un angle quelconque, et à une position quelconque. En outre, les caractères de logiciels sont espacés proportionnellement. Cependant, les caractères de logiciels prennent plus de temps pour dessiner que des caractères matériels font.
  
Fastgraph comprend deux polices de caractères du logiciel, appelé la police primaire
+
Fastgraph comprend deux polices de caractères du logiciel, appelé la police primaire
 +
 
 
et la police de remplacement. La police primaire contient des lettres majuscules et minuscules, des nombres, la ponctuation et la plupart des autres caractères ASCII imprimables. La police alternative contient majuscules et minuscules lettres grecques et d'autres symboles mathématiques et scientifiques.
 
et la police de remplacement. La police primaire contient des lettres majuscules et minuscules, des nombres, la ponctuation et la plupart des autres caractères ASCII imprimables. La police alternative contient majuscules et minuscules lettres grecques et d'autres symboles mathématiques et scientifiques.
  
La routine Fastgraph fg_swchar affiche une chaîne de caractères de logiciels
+
La routine Fastgraph fg_swchar affiche une chaîne de caractères de logiciels
 +
 
 
dans l'index de couleur courante (tel que défini par l'appel le plus récent à fg_setcolor). La chaîne peut contenir tous les caractères de la police primaire, la police de remplacement, ou les deux. Vous pouvez afficher les caractères justifiés à gauche, centré ou justifié à droite par rapport à la position du curseur graphique. Tout comme fg_text met à jour la position du curseur de texte, fg_swchar définit la position graphique du curseur juste à droite du dernier caractère dessiné. Les caractères sont coupées en fonction de la zone de découpage de courant. En plus des caractères, la chaîne passée à fg_swchar peuvent également contenir des opérateurs pour la commutation des polices, soulignant, subscripting, ou en exposant caractères. Parce que fg_swchar utilise en interne les coordonnées spatiales du monde, vous devez appeler la routine de fg_initw à un certain point dans votre programme avant le premier appel à fg_swchar. Vous devez également créer un espace de système de coordonnées avec la routine de fg_setworld.
 
dans l'index de couleur courante (tel que défini par l'appel le plus récent à fg_setcolor). La chaîne peut contenir tous les caractères de la police primaire, la police de remplacement, ou les deux. Vous pouvez afficher les caractères justifiés à gauche, centré ou justifié à droite par rapport à la position du curseur graphique. Tout comme fg_text met à jour la position du curseur de texte, fg_swchar définit la position graphique du curseur juste à droite du dernier caractère dessiné. Les caractères sont coupées en fonction de la zone de découpage de courant. En plus des caractères, la chaîne passée à fg_swchar peuvent également contenir des opérateurs pour la commutation des polices, soulignant, subscripting, ou en exposant caractères. Parce que fg_swchar utilise en interne les coordonnées spatiales du monde, vous devez appeler la routine de fg_initw à un certain point dans votre programme avant le premier appel à fg_swchar. Vous devez également créer un espace de système de coordonnées avec la routine de fg_setworld.
  
 
La routine de fg_swchar a trois arguments. Le premier argument est le
 
La routine de fg_swchar a trois arguments. Le premier argument est le
 +
 
chaîne de caractères à afficher. Le second argument est une valeur entière qui spécifie le nombre de caractères dans la chaîne, y compris les caractères utilisés comme opérateurs spéciaux. Le troisième argument est une valeur entière qui détermine la position de la chaîne par rapport à la position du curseur graphique. Si cette valeur est négative, le coin en bas à gauche du premier caractère sera à la position du curseur graphique. Si elle est positive, le coin inférieur droit du dernier caractère sera à la position du curseur graphique. Si elle est nulle, la chaîne sera centrée horizontalement à la position du curseur graphique.
 
chaîne de caractères à afficher. Le second argument est une valeur entière qui spécifie le nombre de caractères dans la chaîne, y compris les caractères utilisés comme opérateurs spéciaux. Le troisième argument est une valeur entière qui détermine la position de la chaîne par rapport à la position du curseur graphique. Si cette valeur est négative, le coin en bas à gauche du premier caractère sera à la position du curseur graphique. Si elle est positive, le coin inférieur droit du dernier caractère sera à la position du curseur graphique. Si elle est nulle, la chaîne sera centrée horizontalement à la position du curseur graphique.
  
La taille des caractères du logiciel est déterminée par les valeurs passées à
+
Chapitre 7: Affichage des caractères Routines 139
 +
 
 +
 
 +
La taille des caractères du logiciel est déterminée par les valeurs passées à
 +
 
 
fg_setsize, fg_setsizew et fg_setratio. La routine fg_setsize a un seul argument entier qui définit la hauteur des caractères de logiciels dans les unités spatiales de l'écran, tandis que fg_setsizew a un seul argument flottant point qui définit la hauteur dans les unités spatiales du monde. Si aucune de ces routines est appelé, Fastgraph utilisera sa hauteur de caractères par défaut d'une unité mondiale de l'espace. La routine de fg_setratio a un seul argument à virgule flottante qui définit le rapport d'aspect pour les personnages de logiciels. Le rapport d'aspect est le rapport de la largeur à la hauteur de caractère du caractère. Par exemple, un rapport d'aspect de 2,0 signifie que les caractères sont deux fois plus larges que hautes. Si fg_setratio est pas appelée, Fastgraph utilise son rapport d'aspect par défaut de 1.
 
fg_setsize, fg_setsizew et fg_setratio. La routine fg_setsize a un seul argument entier qui définit la hauteur des caractères de logiciels dans les unités spatiales de l'écran, tandis que fg_setsizew a un seul argument flottant point qui définit la hauteur dans les unités spatiales du monde. Si aucune de ces routines est appelé, Fastgraph utilisera sa hauteur de caractères par défaut d'une unité mondiale de l'espace. La routine de fg_setratio a un seul argument à virgule flottante qui définit le rapport d'aspect pour les personnages de logiciels. Le rapport d'aspect est le rapport de la largeur à la hauteur de caractère du caractère. Par exemple, un rapport d'aspect de 2,0 signifie que les caractères sont deux fois plus larges que hautes. Si fg_setratio est pas appelée, Fastgraph utilise son rapport d'aspect par défaut de 1.
  
Exemple 7-10 affiche tous les caractères dans les deux polices de caractères de logiciels.
+
Exemple 7-10 affiche tous les caractères dans les deux polices de caractères de logiciels.
  
 
Le programme utilise le mode EGA graphique amélioré (mode 16), mais il pourrait fonctionner dans un mode graphique en changeant l'argument fg_setmode. Après avoir établi le mode vidéo, le programme appelle fg_initw pour initialiser les paramètres de l'espace mondial de Fastgraph; cela est nécessaire puisque les logiciels routines de dessin de caractères utilisent en interne les coordonnées spatiales du monde. La déclaration suivante est un appel à fg_setworld qui établit un espace de système de coordonnées avec 0,01 monde unités d'espace par pixel. Suite à cela est un appel à fg_setsizew qui définit la hauteur de caractère 0,21 unités spatiales du monde, ou 21 pixels. Notez que nous aurions pu plutôt utilisé fg_setsize ici avec un argument entier de 21.
 
Le programme utilise le mode EGA graphique amélioré (mode 16), mais il pourrait fonctionner dans un mode graphique en changeant l'argument fg_setmode. Après avoir établi le mode vidéo, le programme appelle fg_initw pour initialiser les paramètres de l'espace mondial de Fastgraph; cela est nécessaire puisque les logiciels routines de dessin de caractères utilisent en interne les coordonnées spatiales du monde. La déclaration suivante est un appel à fg_setworld qui établit un espace de système de coordonnées avec 0,01 monde unités d'espace par pixel. Suite à cela est un appel à fg_setsizew qui définit la hauteur de caractère 0,21 unités spatiales du monde, ou 21 pixels. Notez que nous aurions pu plutôt utilisé fg_setsize ici avec un argument entier de 21.
  
La prochaine partie du programme dessine les caractères de la police primaire sur
+
La prochaine partie du programme dessine les caractères de la police primaire sur
 +
 
 
la moitié supérieure de l'écran. Après avoir fait cela, le programme dessine les polices de caractères de substitution sur la moitié inférieure. Dans chaque cas, il le fait avec fg_swchar. Par défaut, la chaîne passée à fg_swchar va produire des caractères de la police primaire. Cependant, vous pouvez insérer un caractère de retour de barre oblique (\) dans la chaîne pour basculer entre les deux polices. Ne pas oublier C et C ++ appliquer une signification particulière pour le caractère de retour de barre dans les chaînes, vous devez donc utiliser deux barres obliques inverses consécutives pour insérer une seule barre oblique inverse dans la chaîne.
 
la moitié supérieure de l'écran. Après avoir fait cela, le programme dessine les polices de caractères de substitution sur la moitié inférieure. Dans chaque cas, il le fait avec fg_swchar. Par défaut, la chaîne passée à fg_swchar va produire des caractères de la police primaire. Cependant, vous pouvez insérer un caractère de retour de barre oblique (\) dans la chaîne pour basculer entre les deux polices. Ne pas oublier C et C ++ appliquer une signification particulière pour le caractère de retour de barre dans les chaînes, vous devez donc utiliser deux barres obliques inverses consécutives pour insérer une seule barre oblique inverse dans la chaîne.
  
Ligne 4 732 : Ligne 4 935 :
 
               fg_swchar ( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26, -1);
 
               fg_swchar ( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26, -1);
 
               fg_movew (0.0,2.8);  
 
               fg_movew (0.0,2.8);  
 +
 +
Guide de l'utilisateur 140 Fastgraph
 +
  
 
  fg_swchar ( "abcdefghijklmnopqrstuvwxyz", 26, -1);
 
  fg_swchar ( "abcdefghijklmnopqrstuvwxyz", 26, -1);
Ligne 4 759 : Ligne 4 965 :
 
Si vous comparez les chaînes de police primaires avec les chaînes de police de remplacement, vous verrez la police alternative contient moins de caractères. Par exemple, les lettres Q et V (soit majuscules ou minuscules) ont aucun caractère correspondant dans la police alternative. Vous pourriez avoir également remarqué la police primaire ne supporte pas l'ensemble de caractères ASCII imprimable. Tout caractère dans une chaîne passée à fg_swchar qui n'a pas un caractère correspondant dans la police courante affiche un caractère blanc.
 
Si vous comparez les chaînes de police primaires avec les chaînes de police de remplacement, vous verrez la police alternative contient moins de caractères. Par exemple, les lettres Q et V (soit majuscules ou minuscules) ont aucun caractère correspondant dans la police alternative. Vous pourriez avoir également remarqué la police primaire ne supporte pas l'ensemble de caractères ASCII imprimable. Tout caractère dans une chaîne passée à fg_swchar qui n'a pas un caractère correspondant dans la police courante affiche un caractère blanc.
  
En plus de l'opérateur de changement de police (le caractère de retour de barre oblique),
+
En plus de l'opérateur de changement de police (le caractère de retour de barre oblique),
 +
 
 
fg_swchar reconnaît trois autres opérateurs. L'opérateur superscript est une barre oblique inverse suivie d'un caret (\ ^). Il provoque le caractère suivant à apparaître comme un exposant. De même, l'opérateur d'indexation est une barre oblique inverse suivie d'un cas v inférieur (\ v); il provoque le caractère suivant à apparaître comme un indice. La taille des caractères en exposant et en indice est une moitié de la hauteur des autres caractères. L'opérateur de soulignement est le caractère de soulignement (_). Il provoque tous les caractères suivants dans la chaîne à être soulignés jusqu'à ce qu'un autre caractère de soulignement est trouvé, ou jusqu'à la fin de la chaîne. Lors de l'utilisation de ces opérateurs, assurez-vous de les inclure dans le cadre du compte de longueur de chaîne passée à fg_swchar.
 
fg_swchar reconnaît trois autres opérateurs. L'opérateur superscript est une barre oblique inverse suivie d'un caret (\ ^). Il provoque le caractère suivant à apparaître comme un exposant. De même, l'opérateur d'indexation est une barre oblique inverse suivie d'un cas v inférieur (\ v); il provoque le caractère suivant à apparaître comme un indice. La taille des caractères en exposant et en indice est une moitié de la hauteur des autres caractères. L'opérateur de soulignement est le caractère de soulignement (_). Il provoque tous les caractères suivants dans la chaîne à être soulignés jusqu'à ce qu'un autre caractère de soulignement est trouvé, ou jusqu'à la fin de la chaîne. Lors de l'utilisation de ces opérateurs, assurez-vous de les inclure dans le cadre du compte de longueur de chaîne passée à fg_swchar.
  
Exemple 7-11 illustre l'utilisation de la sélection de la police, exposant,
+
Exemple 7-11 illustre l'utilisation de la sélection de la police, exposant,
 +
 
 
indice, et de souligner les opérateurs avec fg_swchar. Encore une fois, parce que le caractère de retour de barre a une signification particulière en C et C ++, il faut utiliser deux barres obliques arrière consécutives pour représenter une seule barre oblique inverse dans la chaîne. Le programme affiche quatre cordes:
 
indice, et de souligner les opérateurs avec fg_swchar. Encore une fois, parce que le caractère de retour de barre a une signification particulière en C et C ++, il faut utiliser deux barres obliques arrière consécutives pour représenter une seule barre oblique inverse dans la chaîne. Le programme affiche quatre cordes:
  
Ligne 4 769 : Ligne 4 977 :
 
                                     U232
 
                                     U232
 
                           Un mot est souligné.  
 
                           Un mot est souligné.  
 +
                                Chapitre 7: Affichage des caractères Routines 141
 +
  
 
Le symbole de thêta dans la première chaîne est produite par l'affichage du caractère "h" dans la police de remplacement. Notez un autre opérateur de sélection de police (\) apparaît immédiatement après le "h" pour revenir à la police primaire. La première chaîne comprend également les opérateurs en exposant (\ ^) pour afficher les exposants dans l'équation. La deuxième chaîne comprend un caractère indicé unique, tandis que la troisième chaîne montre comment afficher trois caractères indicés consécutifs. Enfin, la quatrième chaîne montre comment souligner les caractères.
 
Le symbole de thêta dans la première chaîne est produite par l'affichage du caractère "h" dans la police de remplacement. Notez un autre opérateur de sélection de police (\) apparaît immédiatement après le "h" pour revenir à la police primaire. La première chaîne comprend également les opérateurs en exposant (\ ^) pour afficher les exposants dans l'équation. La deuxième chaîne comprend un caractère indicé unique, tandis que la troisième chaîne montre comment afficher trois caractères indicés consécutifs. Enfin, la quatrième chaîne montre comment souligner les caractères.
  
 
Notez par exemple 7-11 utilise également fg_setratio. Les trois premières cordes sont
 
Notez par exemple 7-11 utilise également fg_setratio. Les trois premières cordes sont
 +
 
dessiné avec un rapport d'aspect de 2, ce qui en fait deux fois plus larges que hautes. La quatrième corde est tirée avec un rapport d'aspect de 1 (le rapport d'aspect par défaut pour les caractères Fastgraph logiciels), de sorte que la hauteur des caractères est la même que la largeur de caractère. En outre, les chaînes sont centrées au lieu de justifiés à gauche comme dans l'exemple précédent.
 
dessiné avec un rapport d'aspect de 2, ce qui en fait deux fois plus larges que hautes. La quatrième corde est tirée avec un rapport d'aspect de 1 (le rapport d'aspect par défaut pour les caractères Fastgraph logiciels), de sorte que la hauteur des caractères est la même que la largeur de caractère. En outre, les chaînes sont centrées au lieu de justifiés à gauche comme dans l'exemple précédent.
  
Ligne 4 809 : Ligne 5 020 :
  
  
La routine fg_setangle définit l'angle de rotation à laquelle le logiciel
+
La routine fg_setangle définit l'angle de rotation à laquelle le logiciel
 +
 
 
caractères sont affichés. Son seul argument est une valeur en virgule flottante spécifiant l'angle, mesuré en degrés dans le sens antihoraire à partir de l'axe x positif. Si un programme dessine les personnages de logiciels avant d'appeler fg_setangle, Fastgraph utilisera son angle par défaut de zéro degré (qui est, les caractères seront orientés horizontalement). Guide de l'utilisateur 142 Fastgraph
 
caractères sont affichés. Son seul argument est une valeur en virgule flottante spécifiant l'angle, mesuré en degrés dans le sens antihoraire à partir de l'axe x positif. Si un programme dessine les personnages de logiciels avant d'appeler fg_setangle, Fastgraph utilisera son angle par défaut de zéro degré (qui est, les caractères seront orientés horizontalement). Guide de l'utilisateur 142 Fastgraph
  
  
 
Dans la plupart des programmes, la police de remplacement est pas nécessaire. Toutefois, si vous utilisez
 
Dans la plupart des programmes, la police de remplacement est pas nécessaire. Toutefois, si vous utilisez
 +
 
la routine fg_swchar, Fastgraph comprendra les définitions de ces caractères dans le segment de données de votre programme. Pour éviter de gaspiller cet espace, Fastgraph comprend la routine de fg_swtext. La routine de fg_swtext est identique fg_swchar, sauf qu'il ne comprend pas la police de remplacement. Comme l'opérateur de sélection de police ne s'applique pas lorsque vous utilisez fg_swtext, la routine ignore tout simplement. Vous ne devez utiliser fg_swtext si ne pas utiliser fg_swchar. Si vous utilisez les deux routines, votre programme ne fonctionne toujours correctement, mais son segment de données contiendra une copie supplémentaire des définitions de polices primaires.
 
la routine fg_swchar, Fastgraph comprendra les définitions de ces caractères dans le segment de données de votre programme. Pour éviter de gaspiller cet espace, Fastgraph comprend la routine de fg_swtext. La routine de fg_swtext est identique fg_swchar, sauf qu'il ne comprend pas la police de remplacement. Comme l'opérateur de sélection de police ne s'applique pas lorsque vous utilisez fg_swtext, la routine ignore tout simplement. Vous ne devez utiliser fg_swtext si ne pas utiliser fg_swchar. Si vous utilisez les deux routines, votre programme ne fonctionne toujours correctement, mais son segment de données contiendra une copie supplémentaire des définitions de polices primaires.
  
Exemple 7-12 illustre l'utilisation de fg_setangle et fg_swtext.  le
+
Exemple 7-12 illustre l'utilisation de fg_setangle et fg_swtext.  le
 +
 
 
programme dessine une série de chaînes de la forme "degrés" nnn, où nnn est un multiple de 15, rayonnant à partir du centre de l'écran. Chaque chaîne apparaît à l'angle spécifié. Par exemple, la chaîne "15 degrés" est tiré à un angle de 15 degrés.
 
programme dessine une série de chaînes de la forme "degrés" nnn, où nnn est un multiple de 15, rayonnant à partir du centre de l'écran. Chaque chaîne apparaît à l'angle spécifié. Par exemple, la chaîne "15 degrés" est tiré à un angle de 15 degrés.
  
Ligne 4 852 : Ligne 5 066 :
  
  
La routine finale concernant les personnages de logiciels est fg_swlength, qui
+
La routine finale concernant les personnages de logiciels est fg_swlength, qui
 +
 
 
retourne la longueur d'une chaîne de caractères spécifiée de logiciels dans les unités spatiales du monde. La longueur est retourné comme variable la valeur de fonction de point de la routine. La routine de fg_swlength a deux arguments - une chaîne de caractères de logiciels, et une valeur d'entier spécifiant le nombre de caractères dans la chaîne. Comme fg_swchar et fg_swtext, le nombre inclut les caractères spéciaux de l'opérateur.
 
retourne la longueur d'une chaîne de caractères spécifiée de logiciels dans les unités spatiales du monde. La longueur est retourné comme variable la valeur de fonction de point de la routine. La routine de fg_swlength a deux arguments - une chaîne de caractères de logiciels, et une valeur d'entier spécifiant le nombre de caractères dans la chaîne. Comme fg_swchar et fg_swtext, le nombre inclut les caractères spéciaux de l'opérateur.
  
Exemple 7-13 montre une utilisation typique de la routine de fg_swlength.  le
+
Chapitre 7: Affichage des caractères Routines 143
 +
 
 +
 
 +
Exemple 7-13 montre une utilisation typique de la routine de fg_swlength.  le
 +
 
 
programme affiche la chaîne "bonjour là." en vert clair sur un fond gris au milieu de l'écran. Comme dans nos exemples de caractères de logiciels précédents, le programme utilise le mode 16 et effectue les initialisations nécessaires pour utiliser des caractères de logiciels en premier. À la suite de cela, le programme fg_swlength utilise pour calculer la longueur de monde unités spatiales de la chaîne. Notez que nous avons ajouté des caractères blancs à chaque extrémité de la chaîne passée à fg_swlength; ce qui augmente la longueur de la chaîne réelle et donnera effectivement le rectangle gris une frontière étendue sur ses côtés gauche et droit. La longueur de la chaîne renvoyée par fg_swlength est multiplié par 0,5, ce qui donne la distance par rapport au centre de l'écran de chaque côté du rectangle. Le programme utilise ensuite cette valeur pour calculer le minimum et le maximum x coordonnées transmises à fg_rectw. Après avoir dessiné le rectangle gris, le programme fg_swtext utilise pour dessiner la chaîne de caractères de logiciels dans le milieu de l'écran. Il attend ensuite une touche avant de restaurer les attributs d'origine en mode vidéo et d'écran et de revenir à DOS.
 
programme affiche la chaîne "bonjour là." en vert clair sur un fond gris au milieu de l'écran. Comme dans nos exemples de caractères de logiciels précédents, le programme utilise le mode 16 et effectue les initialisations nécessaires pour utiliser des caractères de logiciels en premier. À la suite de cela, le programme fg_swlength utilise pour calculer la longueur de monde unités spatiales de la chaîne. Notez que nous avons ajouté des caractères blancs à chaque extrémité de la chaîne passée à fg_swlength; ce qui augmente la longueur de la chaîne réelle et donnera effectivement le rectangle gris une frontière étendue sur ses côtés gauche et droit. La longueur de la chaîne renvoyée par fg_swlength est multiplié par 0,5, ce qui donne la distance par rapport au centre de l'écran de chaque côté du rectangle. Le programme utilise ensuite cette valeur pour calculer le minimum et le maximum x coordonnées transmises à fg_rectw. Après avoir dessiné le rectangle gris, le programme fg_swtext utilise pour dessiner la chaîne de caractères de logiciels dans le milieu de l'écran. Il attend ensuite une touche avant de restaurer les attributs d'origine en mode vidéo et d'écran et de revenir à DOS.
  
Ligne 4 891 : Ligne 5 110 :
 
Personnages bitmap
 
Personnages bitmap
  
caractères bitmap combinent les propriétés du matériel et des logiciels
+
caractères bitmap combinent les propriétés du matériel et des logiciels
 +
 
 
personnages.Comme les caractères matériels, ils sont d'une taille fixe, mais ils sont presque toujours plus attrayant. Parce qu'ils ne sont pas évolutifs, ils font 144 Guide de l'utilisateur Fastgraph
 
personnages.Comme les caractères matériels, ils sont d'une taille fixe, mais ils sont presque toujours plus attrayant. Parce qu'ils ne sont pas évolutifs, ils font 144 Guide de l'utilisateur Fastgraph
 +
 +
 
pas besoin d'arithmétique en virgule flottante, et donc ils sont beaucoup plus rapides que les caractères de logiciels.
 
pas besoin d'arithmétique en virgule flottante, et donc ils sont beaucoup plus rapides que les caractères de logiciels.
  
Fastgraph ne fait aucune disposition spéciale pour les caractères bitmap parce qu'il
+
Fastgraph ne fait aucune disposition spéciale pour les caractères bitmap parce qu'il
 +
 
 
les traite comme si elles étaient une autre image bitmap. Par exemple, pour utiliser un cinq-pixel par pixel cinq police bitmap, vous pouvez construire des caractères comme montré ici, puis stocker ces représentations dans un tableau d'image.
 
les traite comme si elles étaient une autre image bitmap. Par exemple, pour utiliser un cinq-pixel par pixel cinq police bitmap, vous pouvez construire des caractères comme montré ici, puis stocker ces représentations dans un tableau d'image.
  
Ligne 4 907 : Ligne 5 130 :
  
  
===Résumé de l'affichage de caractères Routines===
+
Résumé de l'affichage de caractères Routines
 +
 
 +
Cette section résume les descriptions fonctionnelles du Fastgraph
  
Cette section résume les descriptions fonctionnelles du Fastgraph
 
 
routines présentées dans ce chapitre. Des informations plus détaillées sur ces routines, y compris leurs arguments et les valeurs de retour, peut être trouvée dans le manuel de référence Fastgraph.
 
routines présentées dans ce chapitre. Des informations plus détaillées sur ces routines, y compris leurs arguments et les valeurs de retour, peut être trouvée dans le manuel de référence Fastgraph.
  
FG_CHGATTR applique l'attribut d'affichage de texte en cours à un nombre donné
+
FG_CHGATTR applique l'attribut d'affichage de texte en cours à un nombre donné
 +
 
 
de caractères démarrant à la position du curseur de texte. Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère modifié (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). Elle n'a aucun effet dans les modes graphiques vidéo.
 
de caractères démarrant à la position du curseur de texte. Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère modifié (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). Elle n'a aucun effet dans les modes graphiques vidéo.
  
FG_CHGTEXT affiche une chaîne de caractères de matériel, à partir du texte
+
FG_CHGTEXT affiche une chaîne de caractères de matériel, à partir du texte
 +
 
 
la position du curseur, en utilisant les attributs d'affichage de texte existants. Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). Elle n'a aucun effet dans les modes graphiques vidéo.
 
la position du curseur, en utilisant les attributs d'affichage de texte existants. Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée). Elle n'a aucun effet dans les modes graphiques vidéo.
  
FG_FONTSIZE permet au 8x8, 8x14, ou la police de caractères BIOS 8x16 ROM pour
+
FG_FONTSIZE permet au 8x8, 8x14, ou la police de caractères BIOS 8x16 ROM pour
 +
 
 
chaînes affichées avec fg_print et fg_text. Cette routine n'a de sens que dans les modes VGA et SVGA graphiques vidéo.
 
chaînes affichées avec fg_print et fg_text. Cette routine n'a de sens que dans les modes VGA et SVGA graphiques vidéo.
  
FG_GETATTR renvoie l'attribut de caractère stockée à la valeur spécifiée  
+
    FG_GETATTR renvoie l'attribut de caractère stockée à la valeur spécifiée  
 +
 
 
position sur la page vidéo active. Elle n'a aucun effet dans les modes graphiques vidéo.
 
position sur la page vidéo active. Elle n'a aucun effet dans les modes graphiques vidéo.
  
FG_GETCHAR renvoie la valeur de caractères stockée à la position spécifiée
+
  FG_GETCHAR renvoie la valeur de caractères stockée à la position spécifiée
 +
 
 
sur la page de la vidéo active. Elle n'a aucun effet dans les modes graphiques vidéo.
 
sur la page de la vidéo active. Elle n'a aucun effet dans les modes graphiques vidéo.
  
FG_GETXJUST renvoie la justification horizontale actuelle pour la mise en
+
  FG_GETXJUST renvoie la justification horizontale actuelle pour la mise en
 +
 
 
chaînes affichées avec fg_print ou fg_printc.
 
chaînes affichées avec fg_print ou fg_printc.
  
FG_GETYJUST renvoie la justification verticale réglage actuel pour
+
  FG_GETYJUST renvoie la justification verticale réglage actuel pour
 +
 
 
chaînes affichées avec fg_print ou fg_printc.
 
chaînes affichées avec fg_print ou fg_printc.
  
FG_JUSTIFY définit les paramètres de justification horizontale et verticale pour
+
  Chapitre 7: Affichage des caractères Routines 145
 +
 
 +
 
 +
  FG_JUSTIFY définit les paramètres de justification horizontale et verticale pour
 +
 
 
chaînes affichées avec fg_print ou fg_printc.
 
chaînes affichées avec fg_print ou fg_printc.
  
FG_LOCATE établit la position du curseur de texte pour la page de la vidéo active.
+
  FG_LOCATE établit la position du curseur de texte pour la page de la vidéo active.
 +
 
 +
  FG_PRINT affiche une chaîne de caractères de matériel, par rapport à la
  
FG_PRINT affiche une chaîne de caractères de matériel, par rapport à la
 
 
graphiques position du curseur, en utilisant l'indice de couleur actuelle. Par défaut, les chaînes sont affichées de telle sorte que la rangée du bas du premier caractère est à la position graphique actuelle. Au retour, le curseur graphique est positionné juste à droite du dernier caractère affiché.
 
graphiques position du curseur, en utilisant l'indice de couleur actuelle. Par défaut, les chaînes sont affichées de telle sorte que la rangée du bas du premier caractère est à la position graphique actuelle. Au retour, le curseur graphique est positionné juste à droite du dernier caractère affiché.
  
FG_PRINTC est une version de fg_print qui effectue écrêtage.
+
  FG_PRINTC est une version de fg_print qui effectue écrêtage.
 +
 
 +
  FG_SETANGLE définit l'angle ou l'orientation à laquelle les caractères de logiciels
  
FG_SETANGLE définit l'angle ou l'orientation à laquelle les caractères de logiciels
 
 
sont affichés. L'angle est mesuré en degrés dans le sens antihoraire à partir de l'axe x positif.
 
sont affichés. L'angle est mesuré en degrés dans le sens antihoraire à partir de l'axe x positif.
  
FG_SETATTR établit le courant attribut d'affichage de texte en texte vidéo
+
  FG_SETATTR établit le courant attribut d'affichage de texte en texte vidéo
 +
 
 
modes. Cette routine n'a pas d'effet dans les modes graphiques vidéo.
 
modes. Cette routine n'a pas d'effet dans les modes graphiques vidéo.
  
FG_SETCOLOR établit l'indice de couleur actuelle (qui peut être un virtuel
+
  FG_SETCOLOR établit l'indice de couleur actuelle (qui peut être un virtuel
 +
 
 
indice de couleur dans les modes graphiques). Dans les modes de texte, la routine fg_setcolor propose une autre méthode pour établir l'attribut d'affichage de texte en cours.
 
indice de couleur dans les modes graphiques). Dans les modes de texte, la routine fg_setcolor propose une autre méthode pour établir l'attribut d'affichage de texte en cours.
  
FG_SETRATIO définit le rapport d'aspect pour les caractères de logiciel.  l'aspect
+
  FG_SETRATIO définit le rapport d'aspect pour les caractères de logiciel.  l'aspect
 +
 
 
le rapport est le rapport de la largeur à la hauteur de caractère du caractère.
 
le rapport est le rapport de la largeur à la hauteur de caractère du caractère.
  
FG_SETSIZE définit la hauteur des caractères de logiciels dans l'espace de l'écran
+
  FG_SETSIZE définit la hauteur des caractères de logiciels dans l'espace de l'écran
 +
 
 
unités.
 
unités.
  
FG_SETSIZEW définit la hauteur des caractères de logiciels dans l'espace mondial
+
  FG_SETSIZEW définit la hauteur des caractères de logiciels dans l'espace mondial
 +
 
 
unités.
 
unités.
  
FG_SWCHAR affiche une chaîne de caractères de logiciels utilisant le courant
+
  FG_SWCHAR affiche une chaîne de caractères de logiciels utilisant le courant
 +
 
 
indice de couleur. La chaîne peut être justifié à gauche, centré ou justifié à droite par rapport à la position du curseur graphique. La chaîne passée à fg_swchar peut contenir des opérateurs spéciaux qui permettent la commutation entre les polices, le soulignement, en exposant, ou subscripting. Cette routine n'a aucun effet en mode texte vidéo.
 
indice de couleur. La chaîne peut être justifié à gauche, centré ou justifié à droite par rapport à la position du curseur graphique. La chaîne passée à fg_swchar peut contenir des opérateurs spéciaux qui permettent la commutation entre les polices, le soulignement, en exposant, ou subscripting. Cette routine n'a aucun effet en mode texte vidéo.
  
FG_SWLENGTH retourne la longueur en monde unités spatiales d'une chaîne de
+
  FG_SWLENGTH retourne la longueur en monde unités spatiales d'une chaîne de
 +
 
 
caractères de logiciels.
 
caractères de logiciels.
  
FG_SWTEXT est une version réduite de la routine de fg_swchar.  Ce ne est pas
+
  FG_SWTEXT est une version réduite de la routine de fg_swchar.  Ce ne est pas
 +
 
 
inclure les définitions de caractères de police de remplacement et nécessite donc moins de mémoire que fg_swchar.
 
inclure les définitions de caractères de police de remplacement et nécessite donc moins de mémoire que fg_swchar.
  
FG_TEXT affiche une chaîne de caractères de matériel, à partir du texte
+
  FG_TEXT affiche une chaîne de caractères de matériel, à partir du texte
 +
 
 
la position du curseur, en utilisant l'attribut de couleur en cours (pour les modes de texte) ou indice de couleur (pour les modes graphiques). Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée).
 
la position du curseur, en utilisant l'attribut de couleur en cours (pour les modes de texte) ou indice de couleur (pour les modes graphiques). Cette routine laisse le curseur de texte d'une colonne à droite du dernier caractère affiché (ou la première colonne de la ligne suivante si le dernier caractère est à la fin d'une rangée).
  
FG_TEXTC est une version de fg_text qui effectue écrêtage lorsqu'il est exécuté dans
+
  FG_TEXTC est une version de fg_text qui effectue écrêtage lorsqu'il est exécuté dans
 +
 
 
graphiques modes vidéo. En mode texte, fg_textc équivaut à fg_text. Guide de l'utilisateur 146 Fastgraph
 
graphiques modes vidéo. En mode texte, fg_textc équivaut à fg_text. Guide de l'utilisateur 146 Fastgraph
  
FG_WHERE récupère les numéros de ligne et de colonne du curseur de texte
+
 
 +
  FG_WHERE récupère les numéros de ligne et de colonne du curseur de texte
 +
 
 
position.
 
position.
  
Coordonnées FG_XALPHA et FG_YALPHA convertir l'espace de l'écran à caractère
+
  Coordonnées FG_XALPHA et FG_YALPHA convertir l'espace de l'écran à caractère
 +
 
 
espace.
 
espace.
  
FG_XCONVERT et FG_YCONVERT convertir les coordonnées d'espace de caractères à l'écran
+
  FG_XCONVERT et FG_YCONVERT convertir les coordonnées d'espace de caractères à l'écran
 +
 
 
espace.
 
espace.
  
  
==Pages vidéo et le Guide virtuel Tampons==
 
  
La quantité de mémoire nécessaire pour stocker un plein écran d'information est
+
 
 +
chapitre 8
 +
 
 +
 
 +
 
 +
Pages vidéo et le Guide virtuel Tampons 148 Fastgraph utilisateur
 +
 
 +
 
 +
aperçu
 +
 
 +
  La quantité de mémoire nécessaire pour stocker un plein écran d'information est
 +
 
 
appelé une page vidéo (ou parfois tout simplement une page). Fastgraph offre une variété de types de pages, y compris les pages physiques, pages virtuelles, des pages étendues et pages logiques. En outre, les tampons virtuels vous permettent de définir des blocs arbitraires de la mémoire conventionnelle et les traiter comme si elles étaient de mémoire vidéo. Ce chapitre discutera pages vidéo et les tampons virtuels en détail, ainsi que les routines Fastgraph pour les gérer.
 
appelé une page vidéo (ou parfois tout simplement une page). Fastgraph offre une variété de types de pages, y compris les pages physiques, pages virtuelles, des pages étendues et pages logiques. En outre, les tampons virtuels vous permettent de définir des blocs arbitraires de la mémoire conventionnelle et les traiter comme si elles étaient de mémoire vidéo. Ce chapitre discutera pages vidéo et les tampons virtuels en détail, ainsi que les routines Fastgraph pour les gérer.
  
  
===Pages physiques et virtuelles Pages===
+
Pages physiques et virtuelles Pages
 +
 
 +
  Pages qui utilisent la mémoire qui se trouve sur la carte vidéo sont appelés
  
Pages qui utilisent la mémoire qui se trouve sur la carte vidéo sont appelés
 
 
pages physiques ou vraies pages. Le nombre de pages physiques disponibles dépend du mode vidéo et la quantité de mémoire résidente sur la carte vidéo de l'utilisateur. Tous les modes vidéo ont au moins une page physique. Dans certains modes vidéo, Fastgraph peut allouer disponible mémoire vive (RAM) et de traiter cette mémoire comme une page vidéo. Pages qui utilisent RAM standard dans ce sens sont appelés pages virtuelles. Du point de vue d'un programmeur, pages virtuelles sont essentiellement identiques aux pages physiques.
 
pages physiques ou vraies pages. Le nombre de pages physiques disponibles dépend du mode vidéo et la quantité de mémoire résidente sur la carte vidéo de l'utilisateur. Tous les modes vidéo ont au moins une page physique. Dans certains modes vidéo, Fastgraph peut allouer disponible mémoire vive (RAM) et de traiter cette mémoire comme une page vidéo. Pages qui utilisent RAM standard dans ce sens sont appelés pages virtuelles. Du point de vue d'un programmeur, pages virtuelles sont essentiellement identiques aux pages physiques.
  
Le tableau suivant indique le nombre de pages physiques dans chaque vidéo
+
  Le tableau suivant indique le nombre de pages physiques dans chaque vidéo
 +
 
 
mode. Il indique également si oui ou non les modes vidéo spécifiques prennent en charge les pages virtuelles.
 
mode. Il indique également si oui ou non les modes vidéo spécifiques prennent en charge les pages virtuelles.
  
      Page Mode Taille physique virtuelle
+
  Page Mode Taille physique virtuelle
      Description Numéro dans Bytes Pages Pages
+
    Description Numéro dans Bytes Pages Pages
  
      0 40 colonne texte de couleur 2000 8 no
+
  0 40 colonne texte de couleur 2000 8 no
 
       1 40 colonne texte de couleur 2000 8 no
 
       1 40 colonne texte de couleur 2000 8 no
 
       2 80 colonne texte de couleur 4000 4 pas
 
       2 80 colonne texte de couleur 4000 4 pas
Ligne 5 029 : Ligne 5 292 :
 
       26 800x600x256 SVGA graphiques 480.000 2 pas
 
       26 800x600x256 SVGA graphiques 480.000 2 pas
 
       27 1024x768x256 graphique SVGA 786.432 1+ pas
 
       27 1024x768x256 graphique SVGA 786.432 1+ pas
      28 800x600x16 graphique SVGA 240.000 4 pas
+
                            Chapitre 8: Pages vidéo et Virtual Tampons 149
 +
 
 +
 
 +
  28 800x600x16 graphique SVGA 240.000 4 pas
 
       29 1024x768x16 graphique SVGA 393,216 2 pas
 
       29 1024x768x16 graphique SVGA 393,216 2 pas
  
Ligne 5 044 : Ligne 5 310 :
 
                         29 1024x768x16 0 1+ 1+ 2
 
                         29 1024x768x16 0 1+ 1+ 2
  
Dans les deux tableaux précédents, notez que le nombre de pages physiques
+
  Dans les deux tableaux précédents, notez que le nombre de pages physiques
 +
 
 
certains modes vidéo est suivie par un symbole plus. Dans ces modes, il y a une page vidéo partielle supplémentaire disponible. Pour les modes 17, 18, et 23, il y a une page entière (page 0) plus une page partielle de 320 rangées de pixels (page 1). Pour le mode 22, il y a trois pages pleines physiques (numérotés de 0 à 2), plus une page partielle de 80 rangées de pixels (page 3). Pour le mode 27, il y a une page entière (page 0) plus une page partielle de 256 rangées de pixels (page 1) sur une carte 1MB SVGA. Vous pouvez utiliser en toute sécurité les pages partielles aussi longtemps que vous ne référencez pas de lignes de pixels au-delà de leur dernière ligne disponible. Cependant, vous ne pouvez pas faire une page vidéo partielle de la page visuelle.
 
certains modes vidéo est suivie par un symbole plus. Dans ces modes, il y a une page vidéo partielle supplémentaire disponible. Pour les modes 17, 18, et 23, il y a une page entière (page 0) plus une page partielle de 320 rangées de pixels (page 1). Pour le mode 22, il y a trois pages pleines physiques (numérotés de 0 à 2), plus une page partielle de 80 rangées de pixels (page 3). Pour le mode 27, il y a une page entière (page 0) plus une page partielle de 256 rangées de pixels (page 1) sur une carte 1MB SVGA. Vous pouvez utiliser en toute sécurité les pages partielles aussi longtemps que vous ne référencez pas de lignes de pixels au-delà de leur dernière ligne disponible. Cependant, vous ne pouvez pas faire une page vidéo partielle de la page visuelle.
  
Dans SVGA graphiques modes (modes 24 à 29), les pages vidéo doivent commencer à 256K
+
  Dans SVGA graphiques modes (modes 24 à 29), les pages vidéo doivent commencer à 256K
 +
 
 
limites pour maintenir la compatibilité entre les différents chipsets SVGA. Il en résulte dans la mémoire vidéo non utilisé à la fin d'une page. Par exemple, les pages en mode 26 nécessitent 480.000 octets de mémoire vidéo. Sur une carte 1MB SVGA, les deux pages commenceront à 0 et 524.288 (512K). Ainsi, il y a 44,288 (524,288 moins 480,000) de mémoire vidéo utilisé octets à la fin de chaque page. Avec 800 pixels (et donc 800 octets) par ligne de l'écran, cela signifie que chaque page a un supplément de 55 rangées de pixels par page. La taille réelle de la page est donc 800x655, avec les 600 premières lignes affichées. De même, la taille de la page en mode 25 est 640x819, les 480 premières lignes affichées.
 
limites pour maintenir la compatibilité entre les différents chipsets SVGA. Il en résulte dans la mémoire vidéo non utilisé à la fin d'une page. Par exemple, les pages en mode 26 nécessitent 480.000 octets de mémoire vidéo. Sur une carte 1MB SVGA, les deux pages commenceront à 0 et 524.288 (512K). Ainsi, il y a 44,288 (524,288 moins 480,000) de mémoire vidéo utilisé octets à la fin de chaque page. Avec 800 pixels (et donc 800 octets) par ligne de l'écran, cela signifie que chaque page a un supplément de 55 rangées de pixels par page. La taille réelle de la page est donc 800x655, avec les 600 premières lignes affichées. De même, la taille de la page en mode 25 est 640x819, les 480 premières lignes affichées.
pages physiques sont numérotées à partir de zéro.  Par exemple, il y a quatre
+
 
 +
  pages physiques sont numérotées à partir de zéro.  Par exemple, il y a quatre
 +
 
 
pages vidéo physiques disponibles en mode 3, et ils sont numérotés de 0 à 3. Les pages virtuelles sont numérotées à 63 n, où n est le nombre de pages physiques dans ce mode. Par exemple, il y a deux pages physiques (numérotées de 0 et 1) et 62 pages virtuelles (numérotées 2 à 63) en mode 11. Remarque seuls modes 4 à 12 et le mode 19 offre des pages virtuelles, et la quantité de mémoire conventionnelle dans le mode de système limite généralement le nombre de pages virtuelles disponibles (ceci est particulièrement vrai en mode 19 en raison de la grande taille de la page). Guide de l'utilisateur 150 Fastgraph
 
pages vidéo physiques disponibles en mode 3, et ils sont numérotés de 0 à 3. Les pages virtuelles sont numérotées à 63 n, où n est le nombre de pages physiques dans ce mode. Par exemple, il y a deux pages physiques (numérotées de 0 et 1) et 62 pages virtuelles (numérotées 2 à 63) en mode 11. Remarque seuls modes 4 à 12 et le mode 19 offre des pages virtuelles, et la quantité de mémoire conventionnelle dans le mode de système limite généralement le nombre de pages virtuelles disponibles (ceci est particulièrement vrai en mode 19 en raison de la grande taille de la page). Guide de l'utilisateur 150 Fastgraph
  
  
===Pages ayant une signification particulière===
+
Pages ayant une signification particulière
 +
 
 +
  Il y a trois pages de vidéo qui ont une signification particulière à Fastgraph.  le
  
Il y a trois pages de vidéo qui ont une signification particulière à Fastgraph.  le
 
 
la page visuelle, comme on peut le deviner, est la page vidéo visible sur l'écran de l'utilisateur. La page active est la page de vidéo à laquelle Fastgraph écrit du texte ou des informations graphiques. La page cachée n'a de sens que pour quelques routines de Fastgraph et sera discuté spécifiquement dans le contexte de ces routines. Les fg_setmode ensembles de routine tous les trois de ces pages à la page 0, et il n'a pas d'importance si ces pages sont physiques ou virtuels.
 
la page visuelle, comme on peut le deviner, est la page vidéo visible sur l'écran de l'utilisateur. La page active est la page de vidéo à laquelle Fastgraph écrit du texte ou des informations graphiques. La page cachée n'a de sens que pour quelques routines de Fastgraph et sera discuté spécifiquement dans le contexte de ces routines. Les fg_setmode ensembles de routine tous les trois de ces pages à la page 0, et il n'a pas d'importance si ces pages sont physiques ou virtuels.
  
L'une des caractéristiques les plus utiles de multiples pages de vidéo (soit physique
+
  L'une des caractéristiques les plus utiles de multiples pages de vidéo (soit physique
 +
 
 
ou virtuel) est la capacité à construire une image de texte ou des graphiques hors de l'écran (qui est, sur une page vidéo en plus la page visuelle). Puis, une fois l'image est prête, nous pouvons soit le transférer à la page visuelle, ou faire la page sur laquelle l'image réside la page visuelle. Cette fonctionnalité est particulièrement utile dans l'animation, car il affiche une image instantanément au lieu de mettre à jour visiblement l'écran tout en produisant l'image.
 
ou virtuel) est la capacité à construire une image de texte ou des graphiques hors de l'écran (qui est, sur une page vidéo en plus la page visuelle). Puis, une fois l'image est prête, nous pouvons soit le transférer à la page visuelle, ou faire la page sur laquelle l'image réside la page visuelle. Cette fonctionnalité est particulièrement utile dans l'animation, car il affiche une image instantanément au lieu de mettre à jour visiblement l'écran tout en produisant l'image.
  
  
===Quelques exemples simples===
+
Quelques exemples simples
 +
 
 +
  Dans cette section, nous allons présenter six variantes d'un programme simple qui
  
Dans cette section, nous allons présenter six variantes d'un programme simple qui
 
 
utilise quatre pages vidéo. Le programme remplit chaque page de la vidéo avec un rectangle, puis affiche le texte contenant le numéro de page de la vidéo dans le centre de chaque page. Les deux premiers exemples exécuter en mode texte ou des graphiques vidéo spécifique et utilisent uniquement des pages physiques. Les deux exemples suivants fonctionnent également en mode texte ou des graphiques vidéo spécifique, mais ils utilisent aussi des pages virtuelles. Les deux derniers exemples sont plus généraux et courir dans plusieurs modes vidéo. Vous pouvez bien sûr écrire un programme qui fait essentiellement la même chose que les exemples de cette section sans utiliser plusieurs pages vidéo. Toutefois, pour utiliser l'affichage d'image et d'animation des routines de Fastgraph efficacement, vous devez d'abord comprendre le concept de pages vidéo.
 
utilise quatre pages vidéo. Le programme remplit chaque page de la vidéo avec un rectangle, puis affiche le texte contenant le numéro de page de la vidéo dans le centre de chaque page. Les deux premiers exemples exécuter en mode texte ou des graphiques vidéo spécifique et utilisent uniquement des pages physiques. Les deux exemples suivants fonctionnent également en mode texte ou des graphiques vidéo spécifique, mais ils utilisent aussi des pages virtuelles. Les deux derniers exemples sont plus généraux et courir dans plusieurs modes vidéo. Vous pouvez bien sûr écrire un programme qui fait essentiellement la même chose que les exemples de cette section sans utiliser plusieurs pages vidéo. Toutefois, pour utiliser l'affichage d'image et d'animation des routines de Fastgraph efficacement, vous devez d'abord comprendre le concept de pages vidéo.
  
Avant de poursuivre, nous devons introduire la Fastgraph routines fg_setpage
+
  Avant de poursuivre, nous devons introduire la Fastgraph routines fg_setpage
 +
 
 
et fg_setvpage. La routine fg_setpage définit la page vidéo active, ce qui provoque Fastgraph pour mettre du texte suivant et sortie graphique sur cette page. La routine fg_setvpage définit la page vidéo visuel affiché sur l'écran. Les deux routines prennent un seul argument entier entre 0 et 63 qui spécifie le numéro de la page vidéo. Il n'a pas d'importance si la page vidéo de référence est une page physique ou une page virtuelle. Comme mentionné précédemment, fg_setmode rend la page 0 la page de la vidéo active et visuelle.
 
et fg_setvpage. La routine fg_setpage définit la page vidéo active, ce qui provoque Fastgraph pour mettre du texte suivant et sortie graphique sur cette page. La routine fg_setvpage définit la page vidéo visuel affiché sur l'écran. Les deux routines prennent un seul argument entier entre 0 et 63 qui spécifie le numéro de la page vidéo. Il n'a pas d'importance si la page vidéo de référence est une page physique ou une page virtuelle. Comme mentionné précédemment, fg_setmode rend la page 0 la page de la vidéo active et visuelle.
  
Exemple 8-1 utilise quatre pages vidéo (numérotés de 0 à 3) dans les 40 colonnes
+
  Exemple 8-1 utilise quatre pages vidéo (numérotés de 0 à 3) dans les 40 colonnes
 +
 
 
mode texte couleur (mode 1). Le programme des premiers appels fg_testmode pour vérifier la disponibilité du mode vidéo demandé lorsqu'il est utilisé avec quatre pages vidéo. Si elle est disponible, le programme appelle fg_setmode pour établir que le mode vidéo. La première boucle remplit chacune des quatre pages avec différents rectangles de couleurs et affiche le texte noir contenant le numéro de page de la vidéo dans le centre de chaque page. Elle le fait en appelant fg_setpage pour définir la page de vidéo active, fg_setcolor et fg_rect pour dessiner les rectangles colorés, et enfin fg_setattr, fg_locate et fg_text pour afficher le texte. Le programme doit appeler fg_locate intérieur de la boucle parce que chaque page vidéo a sa propre position du curseur de texte. La deuxième boucle fait successivement chaque page vidéo la page visuelle; la page reste affichée jusqu'à ce que vous appuyez sur une touche. après
 
mode texte couleur (mode 1). Le programme des premiers appels fg_testmode pour vérifier la disponibilité du mode vidéo demandé lorsqu'il est utilisé avec quatre pages vidéo. Si elle est disponible, le programme appelle fg_setmode pour établir que le mode vidéo. La première boucle remplit chacune des quatre pages avec différents rectangles de couleurs et affiche le texte noir contenant le numéro de page de la vidéo dans le centre de chaque page. Elle le fait en appelant fg_setpage pour définir la page de vidéo active, fg_setcolor et fg_rect pour dessiner les rectangles colorés, et enfin fg_setattr, fg_locate et fg_text pour afficher le texte. Le programme doit appeler fg_locate intérieur de la boucle parce que chaque page vidéo a sa propre position du curseur de texte. La deuxième boucle fait successivement chaque page vidéo la page visuelle; la page reste affichée jusqu'à ce que vous appuyez sur une touche. après
 +
 +
  Chapitre 8: Pages vidéo et Virtual Tampons 151
 +
 +
 
afficher toutes les quatre pages vidéo, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
 
afficher toutes les quatre pages vidéo, le programme restaure le mode vidéo original et attributs de l'écran avant de revenir à DOS.
  
Ligne 5 119 : Ligne 5 398 :
 
                 }
 
                 }
  
Exemple 8-2 est similaire à l'exemple 8-1, mais il utilise le EGA 320x200
+
 
 +
  Exemple 8-2 est similaire à l'exemple 8-1, mais il utilise le EGA 320x200
 +
 
 
mode graphique (mode 13), au lieu d'un mode texte. Notez que la seule différence réelle entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
 
mode graphique (mode 13), au lieu d'un mode texte. Notez que la seule différence réelle entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
  
 
   Exemple 8-2.  
 
   Exemple 8-2.  
 +
 +
Guide de l'utilisateur 152 Fastgraph
 +
  
 
   #include <fastgraf.h>
 
   #include <fastgraf.h>
Ligne 5 168 : Ligne 5 452 :
 
                 }
 
                 }
  
pages vidéo virtuels sont créés avec la routine de fg_allocate de Fastgraph.  le
+
 
 +
  pages vidéo virtuels sont créés avec la routine de fg_allocate de Fastgraph.  le
 +
 
 
réserves de routine fg_allocate mémoire conventionnelle à accès aléatoire (RAM) qui Fastgraph traite alors comme une page vidéo. La quantité de mémoire requise dépend du mode vidéo actuel. La routine fg_allocate prend un seul argument entier qui spécifie le numéro de la page par laquelle la page virtuelle sera référencé. Cette valeur doit être comprise entre 1 et 63.
 
réserves de routine fg_allocate mémoire conventionnelle à accès aléatoire (RAM) qui Fastgraph traite alors comme une page vidéo. La quantité de mémoire requise dépend du mode vidéo actuel. La routine fg_allocate prend un seul argument entier qui spécifie le numéro de la page par laquelle la page virtuelle sera référencé. Cette valeur doit être comprise entre 1 et 63.
  
Si vous essayez de créer une page virtuelle avec un numéro de page déjà attribué
+
  Si vous essayez de créer une page virtuelle avec un numéro de page déjà attribué
 +
 
 
à une page physique, fg_allocate ne fait rien. Par exemple, dans les graphiques modes Hercules (modes 11 et 12), il y a deux pages physiques numérotées 0 et 1. pages virtuelles dans les modes les graphiques Hercules doit donc avoir des numéros de page
 
à une page physique, fg_allocate ne fait rien. Par exemple, dans les graphiques modes Hercules (modes 11 et 12), il y a deux pages physiques numérotées 0 et 1. pages virtuelles dans les modes les graphiques Hercules doit donc avoir des numéros de page
 +
 +
  Chapitre 8: Pages vidéo et Virtual Tampons 153
 +
 +
 
entre 2 et 63. Si vous dites fg_allocate pour créer une page virtuelle Hercules numérotés de 0 ou 1, il ne fait rien parce que ces pages vidéo existent sous forme de pages physiques. De même, si vous utilisez fg_allocate dans un mode vidéo qui ne supporte pas les pages vidéo virtuelles, il retourne simplement sans rien faire.
 
entre 2 et 63. Si vous dites fg_allocate pour créer une page virtuelle Hercules numérotés de 0 ou 1, il ne fait rien parce que ces pages vidéo existent sous forme de pages physiques. De même, si vous utilisez fg_allocate dans un mode vidéo qui ne supporte pas les pages vidéo virtuelles, il retourne simplement sans rien faire.
  
Un problème possible avec fg_allocate peut se produire quand il n'y a pas assez
+
  Un problème possible avec fg_allocate peut se produire quand il n'y a pas assez
 +
 
 
mémoire disponible pour la création d'une page virtuelle en mode vidéo en cours. La routine renvoie fg_allocate que sa valeur de fonction d'un code d'état indiquant si oui ou non il a réussi. Les valeurs possibles du code d'état sont les suivants:
 
mémoire disponible pour la création d'une page virtuelle en mode vidéo en cours. La routine renvoie fg_allocate que sa valeur de fonction d'un code d'état indiquant si oui ou non il a réussi. Les valeurs possibles du code d'état sont les suivants:
sens de la valeur
 
  
0 page virtuelle créée
+
  sens de la valeur
1 numéro de page spécifié est une page physique
+
 
7 page virtuelle créé, mais les blocs de contrôle de mémoire ont été détruits
+
  0 page virtuelle créée
8 mémoire insuffisante pour créer la page virtuelle
+
          1 numéro de page spécifié est une page physique
 +
          7 page virtuelle créé, mais les blocs de contrôle de mémoire ont été détruits
 +
          8 mémoire insuffisante pour créer la page virtuelle
  
 
Si vous utilisez fg_testmode ou fg_bestmode pour vérifier si le nombre requis de pages vidéo sont disponibles lorsque vous utilisez le mode vidéo sur demande, vous ne devriez pas avoir besoin de surveiller le code de statut retourné par fg_allocate.
 
Si vous utilisez fg_testmode ou fg_bestmode pour vérifier si le nombre requis de pages vidéo sont disponibles lorsque vous utilisez le mode vidéo sur demande, vous ne devriez pas avoir besoin de surveiller le code de statut retourné par fg_allocate.
  
La routine de fg_freepage libère la mémoire pour une page virtuelle créée
+
  La routine de fg_freepage libère la mémoire pour une page virtuelle créée
 +
 
 
avec fg_allocate. Elle exige un seul argument entier qui identifie le numéro de page virtuelle pour libérer. Cette valeur doit être comprise entre 0 et 63. Si vous essayez de libérer une page vidéo physique, ou libérer une page virtuelle qui n'a jamais été créé, fg_freepage ne fait rien. Il est une bonne idée d'utiliser fg_freepage pour libérer toutes les pages vidéo virtuelles avant qu'un programme retourne le contrôle DOS, ou juste avant un programme sélectionne un nouveau mode vidéo.
 
avec fg_allocate. Elle exige un seul argument entier qui identifie le numéro de page virtuelle pour libérer. Cette valeur doit être comprise entre 0 et 63. Si vous essayez de libérer une page vidéo physique, ou libérer une page virtuelle qui n'a jamais été créé, fg_freepage ne fait rien. Il est une bonne idée d'utiliser fg_freepage pour libérer toutes les pages vidéo virtuelles avant qu'un programme retourne le contrôle DOS, ou juste avant un programme sélectionne un nouveau mode vidéo.
  
Exemple 8-3 est également similaire à l'exemple 8-1, mais il utilise le monochrome
+
  Exemple 8-3 est également similaire à l'exemple 8-1, mais il utilise le monochrome
 +
 
 
en mode texte (mode 7). Parce que le mode texte monochrome ne dispose que d'une seule page vidéo physique, nous devons utiliser des pages vidéo virtuelles pour les numéros de page 1, 2 et 3. Notez comment fg_allocate et fg_freepage sont utilisés pour créer et libérer les pages vidéo virtuelles dans cet exemple.
 
en mode texte (mode 7). Parce que le mode texte monochrome ne dispose que d'une seule page vidéo physique, nous devons utiliser des pages vidéo virtuelles pour les numéros de page 1, 2 et 3. Notez comment fg_allocate et fg_freepage sont utilisés pour créer et libérer les pages vidéo virtuelles dans cet exemple.
  
Ligne 5 212 : Ligne 5 507 :
 
                   sortie (1);
 
                   sortie (1);
 
                   }
 
                   }
 +
 +
Guide de l'utilisateur 154 Fastgraph
 +
  
 
   fg_getmode old_mode = ();
 
   fg_getmode old_mode = ();
Ligne 5 239 : Ligne 5 537 :
  
  
Exemple 8-4 est similaire à l'exemple 8-3, mais il utilise le Hercules norme
+
  Exemple 8-4 est similaire à l'exemple 8-3, mais il utilise le Hercules norme
 +
 
 
mode graphique (mode 11) au lieu du mode texte monochrome. Parce que les modes les graphiques Hercules ont deux pages vidéo physiques, nous devons utiliser des pages vidéo virtuelles pour les numéros de page 2 et 3. Notez la seule vraie différence entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
 
mode graphique (mode 11) au lieu du mode texte monochrome. Parce que les modes les graphiques Hercules ont deux pages vidéo physiques, nous devons utiliser des pages vidéo virtuelles pour les numéros de page 2 et 3. Notez la seule vraie différence entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
  
Ligne 5 265 : Ligne 5 564 :
  
 
   fg_getmode old_mode = ();  
 
   fg_getmode old_mode = ();  
 +
                            Chapitre 8: Pages vidéo et Virtual Tampons 155
 +
  
 
   fg_setmode (11);
 
   fg_setmode (11);
Ligne 5 290 : Ligne 5 591 :
  
  
Exemple 8-5 est une version généralisée d'exemples 8-1 et 8-3 qui fonctionne dans
+
  Exemple 8-5 est une version généralisée d'exemples 8-1 et 8-3 qui fonctionne dans
 +
 
 
tout mode texte vidéo 80 colonnes. Afin de simplifier le programme, chaque page vidéo est remplie avec des rectangles de la même couleur. Notez que fg_allocate et fg_freepage sont utilisés pour gérer les pages vidéo virtuelles en cas fg_bestmode sélectionne le mode texte monochrome (mode 7). Si fg_bestmode sélectionne une des couleurs mode texte de 80 colonnes (qui ont quatre pages vidéo physiques), fg_allocate et fg_freepage vont tout simplement revenir sans rien faire.
 
tout mode texte vidéo 80 colonnes. Afin de simplifier le programme, chaque page vidéo est remplie avec des rectangles de la même couleur. Notez que fg_allocate et fg_freepage sont utilisés pour gérer les pages vidéo virtuelles en cas fg_bestmode sélectionne le mode texte monochrome (mode 7). Si fg_bestmode sélectionne une des couleurs mode texte de 80 colonnes (qui ont quatre pages vidéo physiques), fg_allocate et fg_freepage vont tout simplement revenir sans rien faire.
  
Ligne 5 317 : Ligne 5 619 :
  
 
   fg_getmode old_mode = ();  
 
   fg_getmode old_mode = ();  
 +
 +
Guide de l'utilisateur 156 Fastgraph
 +
  
 
   fg_setmode (new_mode);
 
   fg_setmode (new_mode);
Ligne 5 342 : Ligne 5 647 :
 
                 }
 
                 }
  
Exemple 8-6 est une version généralisée d'exemples 8-2 et 8-4 qui fonctionne dans
+
 
 +
  Exemple 8-6 est une version généralisée d'exemples 8-2 et 8-4 qui fonctionne dans
 +
 
 
tout mode vidéo 320x200 graphique. Afin de simplifier le programme, chaque page vidéo est remplie avec des rectangles de la même couleur. Comme dans l'exemple 8-5, fg_allocate et fg_freepage sont utilisés pour gérer les pages vidéo virtuelles en cas fg_bestmode sélectionne un mode vidéo avec moins de quatre pages vidéo physiques. Notez que la seule différence réelle entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
 
tout mode vidéo 320x200 graphique. Afin de simplifier le programme, chaque page vidéo est remplie avec des rectangles de la même couleur. Comme dans l'exemple 8-5, fg_allocate et fg_freepage sont utilisés pour gérer les pages vidéo virtuelles en cas fg_bestmode sélectionne un mode vidéo avec moins de quatre pages vidéo physiques. Notez que la seule différence réelle entre ce programme et la version en mode texte est l'utilisation de fg_setcolor au lieu de fg_setattr pour faire apparaître le texte en noir.
  
Ligne 5 367 : Ligne 5 674 :
 
                       sortie (1);
 
                       sortie (1);
 
                       }
 
                       }
 +
                            Chapitre 8: Pages vidéo et Virtual Tampons 157
 +
  
 
   fg_getmode old_mode = ();
 
   fg_getmode old_mode = ();
Ligne 5 393 : Ligne 5 702 :
  
  
===Curseurs de texte===
+
Curseurs de texte
 +
 
 +
  Comme mentionné dans le chapitre précédent, Fastgraph dessine des caractères matériels
  
Comme mentionné dans le chapitre précédent, Fastgraph dessine des caractères matériels
 
 
à la position définie par le curseur de texte. Comme le curseur graphique, le curseur de texte ne sont pas un curseur dans le vrai sens, mais est tout simplement une paire d'espace de caractères (ligne, colonne) coordonne avec une signification particulière. Les 8 premières pages vidéo (qui est, pages 0 à 7) ont chacune leur propre curseur de texte. Chaque groupe ultérieur de 8 pages vidéo (pages 8 à 15, pages 16 à 23, et ainsi de suite) partagent respectivement les mêmes positions texte du curseur que les 8 premières pages. Cela signifie fg_locate mettra à jour l'un des 8 curseurs de texte différents en fonction de la page vidéo active. De même, fg_where retourne la position du curseur de texte pour la page active. Les fg_setmode de routine tous les ensembles de positions de curseur 8 texte aux coordonnées spatiales de caractères (0,0).
 
à la position définie par le curseur de texte. Comme le curseur graphique, le curseur de texte ne sont pas un curseur dans le vrai sens, mais est tout simplement une paire d'espace de caractères (ligne, colonne) coordonne avec une signification particulière. Les 8 premières pages vidéo (qui est, pages 0 à 7) ont chacune leur propre curseur de texte. Chaque groupe ultérieur de 8 pages vidéo (pages 8 à 15, pages 16 à 23, et ainsi de suite) partagent respectivement les mêmes positions texte du curseur que les 8 premières pages. Cela signifie fg_locate mettra à jour l'un des 8 curseurs de texte différents en fonction de la page vidéo active. De même, fg_where retourne la position du curseur de texte pour la page active. Les fg_setmode de routine tous les ensembles de positions de curseur 8 texte aux coordonnées spatiales de caractères (0,0).
  
Exemple 8-7 illustre l'utilisation de différents curseurs de texte dans un 80-
+
  Exemple 8-7 illustre l'utilisation de différents curseurs de texte dans un 80-
 +
 
 
en mode texte, couleur de colonne (mode 3). Le programme affiche d'abord le texte "Page" à la page vidéo 0 (la page visible) et attend une touche. Il fait alors la page 1 de la page vidéo active, modifie l'emplacement du curseur de texte pour cette page, et affiche le texte «Page 1» à la page vidéo 1. Ensuite, il ajoute le caractère "0" au texte initialement affiché à la page 0. Notez que nous ne devons rétablir la position du curseur de texte pour la page 0, car il est affecté en changeant le curseur de texte pour la page 1. Après avoir attendu une autre touche, le programme fait Page vidéo 1 la page visuelle et attend encore un autre touches activées avant de retourner à DOS.
 
en mode texte, couleur de colonne (mode 3). Le programme affiche d'abord le texte "Page" à la page vidéo 0 (la page visible) et attend une touche. Il fait alors la page 1 de la page vidéo active, modifie l'emplacement du curseur de texte pour cette page, et affiche le texte «Page 1» à la page vidéo 1. Ensuite, il ajoute le caractère "0" au texte initialement affiché à la page 0. Notez que nous ne devons rétablir la position du curseur de texte pour la page 0, car il est affecté en changeant le curseur de texte pour la page 1. Après avoir attendu une autre touche, le programme fait Page vidéo 1 la page visuelle et attend encore un autre touches activées avant de retourner à DOS.
  
Ligne 5 405 : Ligne 5 716 :
 
   #include <fastgraf.h>
 
   #include <fastgraf.h>
 
                           void main (void);  
 
                           void main (void);  
 +
 +
Guide de l'utilisateur 158 Fastgraph
 +
  
 
   void main ()
 
   void main ()
Ligne 5 436 : Ligne 5 750 :
  
  
===Obtention vidéo Informations sur la page===
+
Obtention vidéo Informations sur la page
 +
 
 +
  Fastgraph comporte deux routines, et fg_getpage fg_getvpage que,
  
Fastgraph comporte deux routines, et fg_getpage fg_getvpage que,
 
 
retour respectivement le nombre actif ou visuelle Page vidéo. Chaque routine retourne la vidéo numéro de page en tant que valeur de la fonction, et ni routine nécessite aucun argument.
 
retour respectivement le nombre actif ou visuelle Page vidéo. Chaque routine retourne la vidéo numéro de page en tant que valeur de la fonction, et ni routine nécessite aucun argument.
  
Lors de la création de pages virtuelles ou logiques, vous devez choisir un numéro de page
+
  Lors de la création de pages virtuelles ou logiques, vous devez choisir un numéro de page
 +
 
 
qui ne fait pas référence une page physique ou une page virtuelle ou logique précédemment créé. Alors qu'il est bien sûr possible de garder la trace des numéros de page seront disponibles dans un mode vidéo donné, la fonction de fg_findpage de Fastgraph peut rendre le travail plus facile. Elle retourne un numéro de page utilisé, que vous pouvez ensuite passer à l'une des routines d'allocation de pages virtuelles ou logiques de Fastgraph. S'il n'y a plus disponibles (soit les 64 entrées dans les tables de pages internes sont en cours d'utilisation), fg_findpage renvoie zéro.
 
qui ne fait pas référence une page physique ou une page virtuelle ou logique précédemment créé. Alors qu'il est bien sûr possible de garder la trace des numéros de page seront disponibles dans un mode vidéo donné, la fonction de fg_findpage de Fastgraph peut rendre le travail plus facile. Elle retourne un numéro de page utilisé, que vous pouvez ensuite passer à l'une des routines d'allocation de pages virtuelles ou logiques de Fastgraph. S'il n'y a plus disponibles (soit les 64 entrées dans les tables de pages internes sont en cours d'utilisation), fg_findpage renvoie zéro.
  
La routine de fg_getaddr est parfois utile lors de l'utilisation des pages virtuelles.  Il
+
  La routine de fg_getaddr est parfois utile lors de l'utilisation des pages virtuelles.  Il
 +
 
 
retours que sa valeur de la fonction d'adresse de segment (en mode réel) ou le sélecteur de segment (en mode protégé) pour le début de la page vidéo active. Il ne nécessite pas d'arguments. Bien que fg_getaddr est plus utile lors de l'utilisation des pages vidéo virtuelles, il fonctionne aussi bien avec des pages vidéo physiques.
 
retours que sa valeur de la fonction d'adresse de segment (en mode réel) ou le sélecteur de segment (en mode protégé) pour le début de la page vidéo active. Il ne nécessite pas d'arguments. Bien que fg_getaddr est plus utile lors de l'utilisation des pages vidéo virtuelles, il fonctionne aussi bien avec des pages vidéo physiques.
  
Exemple 8-9 illustre l'utilisation de fg_getpage, fg_getvpage, fg_findpage,
+
  Exemple 8-9 illustre l'utilisation de fg_getpage, fg_getvpage, fg_findpage,
 +
 
 
et fg_getaddr dans le VGA standard / MCGA mode 256 couleurs graphiques (mode 19). Ce mode vidéo offre une seule page physique, de sorte que le programme utilise fg_findpage
 
et fg_getaddr dans le VGA standard / MCGA mode 256 couleurs graphiques (mode 19). Ce mode vidéo offre une seule page physique, de sorte que le programme utilise fg_findpage
 +
 +
  Chapitre 8: Pages vidéo et Virtual Tampons 159
 +
 +
 
de trouver un numéro de page utilisé (qui sera page 1 en mode 19), puis appelle fg_allocate pour créer une page vidéo virtuelle. Après la création de la page virtuelle, le programme rend la page vidéo active; Page 0 reste la page vidéo visuelle. La routine de fg_getpage retourne ensuite le numéro de page active, suivie d'un appel à fg_getvpage pour retourner le numéro de page visuelle (0). Ensuite, le programme fg_getaddr utilise pour retourner l'adresse de segment / sélecteur pour les deux pages vidéo. Enfin, il restaure les attributs d'origine en mode vidéo et écran, affiche les valeurs retournées, et retourne au DOS.
 
de trouver un numéro de page utilisé (qui sera page 1 en mode 19), puis appelle fg_allocate pour créer une page vidéo virtuelle. Après la création de la page virtuelle, le programme rend la page vidéo active; Page 0 reste la page vidéo visuelle. La routine de fg_getpage retourne ensuite le numéro de page active, suivie d'un appel à fg_getvpage pour retourner le numéro de page visuelle (0). Ensuite, le programme fg_getaddr utilise pour retourner l'adresse de segment / sélecteur pour les deux pages vidéo. Enfin, il restaure les attributs d'origine en mode vidéo et écran, affiche les valeurs retournées, et retourne au DOS.
  

Avertissement : Toutes les contributions au wiki NuitDebout sont considérées comme publiées sous les termes de la licence Creative Commons attribution partage à l'identique 3.0.

Annuler | Aide (ouvre une nouvelle fenêtre)