BGI : Différence entre versions

De Wiki expérimental
(Page créée avec « ----------------------------- The BGI Driver Toolkit Creating Device Drivers for the Borland Graphics Interface -------------------------------------- Copyri... »)
 
(Le tableau d'état du pilote)
 
(11 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
-----------------------------
+
L'interface graphique Borland (BGI) est un progiciel rapide, compact et indépendant de l'appareil pour le développement graphique intégré aux produits de langage Turbo Pascal, Turbo C et Turbo Prolog. L'indépendance du périphérique est obtenue via des pilotes spécifiques au périphérique chargeables appelés à partir d'un noyau commun. Ce document décrit les fonctionnalités BGI de base, ainsi que les étapes nécessaires pour créer de nouveaux pilotes de périphérique. Ce document est accompagné de fichiers contenant un exemple de code et d'autres informations pertinentes.
The BGI Driver Toolkit
+
  
 +
==Nom du fichier Description du fichier==
  
 +
BH.C        BGI source de programme de construction d'en-tête de chargeur
 +
BH.EXE      BGI programme de construction d'en-tête de chargeur
 +
DEVICE.INC  Fichier de structure et de définition de macro
 +
DEBVECT.ASM  Table vectorielle pour l'exemple de pilote (DEBUG)
 +
DEBUG.C Module principal pour l'exemple de pilote
 +
MAKEFILE Fichier de construction
 +
BUILD.BAT Un fichier batch pour MAKE-phobics
  
 +
Sommaire
  
Creating Device Drivers
+
    1 Architecture d'exécution BGI
 +
    2 Modèle graphique BGI
 +
    3 Section d'en-tête
 +
    4 Le tableau d'état du pilote
 +
    5 La table vectorielle des pilotes de périphériques
 +
    6 descriptions vectorielles
 +
    7 Détails de construction du pilote de périphérique
 +
    8 Livre de recettes
  
for the Borland Graphics Interface
+
==Architecture d'exécution BGI==
--------------------------------------
+
  
 +
Les programmes produits par les langues Borland créent des graphiques via deux entités agissant de concert: le noyau générique BGI et un pilote spécifique au périphérique. En règle générale, une application construite avec un compilateur Borland comprendra plusieurs fichiers de pilote de périphérique sur le disque de distribution (extension .BGI) afin que le programme puisse s'exécuter sur différents types d'écrans et d'imprimantes. Les demandes graphiques (par exemple, ligne de dessin, barre de dessin, etc.) sont envoyées par l'application au noyau BGI, qui à son tour fait des demandes au pilote de périphérique pour manipuler réellement le matériel.
  
 +
Un pilote de périphérique BGI est une image binaire; c'est-à-dire une séquence d'octets sans symboles ou autres informations de liaison. Le pilote commence par un en-tête court, suivi d'une table vectorielle contenant les points d'entrée des fonctions à l'intérieur. L'équilibre du pilote comprend le code et les données nécessaires pour manipuler le matériel graphique cible.
  
 +
Toutes les références de code et de données dans le pilote doivent être proches (c'est-à-dire, petit modèle, décalage uniquement), et le pilote entier, à la fois le code et les données, doit tenir dans les 64 Ko. En cours d'utilisation, le pilote de périphérique peut compter sur son chargement sur une limite de paragraphe. Le noyau BGI utilise une convention d'appel basée sur un registre pour communiquer avec le pilote de périphérique (décrit en détail ci-dessous).
 +
==Modèle graphique BGI==
  
 +
Lorsque vous examinez les fonctions répertoriées ici, gardez à l'esprit que BGI effectue la plupart des opérations de dessin en utilisant une couleur de dessin ou de traçage implicite (COLOR), une couleur de remplissage (FILLCOLOR) et un motif (FILLPATTERN). Par exemple, l'appel PIESLICE n'accepte aucune information de motif ou de couleur, mais utilise à la place la valeur COLOR précédemment définie pour tracer le bord de la tranche et les valeurs FILLCOLOR et FILLPATTERN précédemment définies pour l'intérieur.
  
 +
Pour plus d'efficacité, de nombreuses opérations ont lieu à la position du pointeur actuel, ou CP. Par exemple, la routine LINE n'accepte qu'une seule paire de coordonnées (x, y), en utilisant le CP comme point de départ de la ligne et la paire de coordonnées transmise comme point d'arrivée. De nombreuses fonctions (LINE, pour n'en nommer qu'une) affectent CP, et la fonction MOVE peut être utilisée pour régler explicitement CP. Le système de coordonnées BGI place l'origine (pixel 0,0) dans le coin supérieur gauche de l'écran.
 +
==Section d'en-tête==
  
 +
La section d'en-tête de périphérique, qui doit être au début du pilote de périphérique, est construite à l'aide de la macro BGI définie dans le fichier DEVICE.INC. La macro BGI prend le nom du pilote de périphérique à construire comme argument. Par exemple, un pilote nommé DEBUG commencerait comme indiqué ici:
  
 +
CSEG SEGMENT PARA PUBLIC 'CODE'; n'importe quel nom de segment peut être utilisé
 +
ASSUME DS: CSEG, CS: CSEG; cs = ds
 +
CODESEG
 +
INCLUDE DEVICE.INC; inclure le fichier device.inc BGI DEBUG; déclarer la section d'en-tête du périphérique
  
 +
La section d'en-tête de périphérique déclare un point d'entrée spécial appelé EMULATE. Si l'action d'un vecteur de pilote de périphérique n'est pas prise en charge par le matériel d'un périphérique, l'entrée de vecteur doit contenir l'entrée EMULATE. Cela sera corrigé au moment du chargement pour contenir un saut dans la routine d'émulation du noyau. Ces routines émuleront l'action du vecteur en décomposant la demande en primitives plus simples. Par exemple, si le matériel a la fonctionnalité pour dessiner un arc, le vecteur d'arc contiendra l'adresse de la routine pour envoyer les données d'arc au matériel et apparaîtra comme suit:
  
Copyright (c) 1988,89 Borland International
+
dw offset ARC; Vecteur à la routine d'arc
  
 
+
Si, comme c'est souvent le cas, le matériel n'a pas la fonctionnalité d'afficher les arcs, le vecteur contiendrait à la place le vecteur EMULATE:
 
+
 
+
 
+
Revision 1
+
 
+
May 15, 1989
+
 
+
 
+
 
+
 
+
 
+
Introduction
+
=======================
+
 
+
The Borland Graphics Interface (BGI) is a fast, compact, and
+
device-independent software package for graphics development built into the
+
Turbo Pascal, Turbo C, and Turbo Prolog language products. Device
+
independence is achieved via loadable device-specific drivers called from a
+
common Kernel. This document describes basic BGI functionality, as well as
+
the steps necessary to create new device drivers. Accompanying this
+
document are files containing sample code and other pertinent information.
+
 
+
File Name File Description
+
 
+
BH.C BGI loader header building program source
+
BH.EXE BGI loader header building program
+
DEVICE.INC Structure and macro definition file
+
DEBVECT.ASM Vector table for sample (DEBUG) driver
+
DEBUG.C Main module for sample driver
+
MAKEFILE Build file
+
BUILD.BAT A batch file for MAKE-phobics
+
 
+
BGI Run-time Architecture
+
=============================
+
 
+
Programs produced by Borland languages create graphics via two entities
+
acting in concert: the generic BGI Kernel and a device-specific driver.
+
Typically, an application built with a Borland compiler will include
+
several device driver files on the distribution disk (extension .BGI) so
+
that the program can run on various types of screens and printers.
+
Graphics requests (for example, draw line, draw bar, etc.) are sent by the
+
application to the BGI Kernel, which in turn makes requests of the device
+
driver to actually manipulate the hardware.
+
 
+
A BGI device driver is a binary image; that is, a sequence of bytes without
+
symbols or other linking information. The driver begins with a short
+
header, followed by a vector table containing the entry points to the
+
functions inside. The balance of the driver comprises the code and data
+
required to manipulate the target graphics hardware.
+
 
+
All code and data references in the driver must be near (i.e., small model,
+
offset only), and the entire driver, both code and data, must fit within
+
64K. In use, the device driver can count on its being loaded on a paragraph
+
boundary. The BGI Kernel uses a register-based calling convention to
+
communicate with the device driver (described in detail below).
+
 
+
BGI Graphics Model
+
=======================
+
 
+
When considering the functions listed here, keep in mind that BGI performs
+
most drawing operations using an implicit drawing or tracing color (COLOR),
+
fill color (FILLCOLOR), and pattern (FILLPATTERN). For example, the
+
PIESLICE call accepts no pattern or color information, but instead uses the
+
previously set COLOR value to trace the edge of the slice, and the
+
previously set FILLCOLOR and FILLPATTERN values for the interior.
+
 
+
For efficiency, many operations take place at the position of the current
+
pointer, or CP. For example, the LINE routine accepts only a single (x,y)
+
coordinate pair, using the CP as the starting point of the line and the
+
passed coordinate pair as the ending point. Many functions (LINE, to name
+
one) affect CP, and the MOVE function can be used to explicitly adjust CP.
+
The BGI coordinate system places the origin (pixel 0,0) at the upper
+
left-hand corner of the screen.
+
 
+
Header Section
+
=======================
+
 
+
The device header section, which must be at the beginning of the device
+
driver, is built using macro BGI defined in file DEVICE.INC. The BGI macro
+
takes the name of the device driver to be built as an argument. For
+
example, a driver named DEBUG would begin as shown here:
+
 
+
CSEG SEGMENT PARA PUBLIC 'CODE' ; any segment naming may be used
+
ASSUME DS:CSEG, CS:CSEG ; cs=ds
+
 
+
CODESEG
+
 
+
INCLUDE DEVICE.INC ; include the device.inc file
+
BGI DEBUG ; declare the device header section
+
 
+
The device header section declares a special entry point known as EMULATE.
+
If the action of a device driver vector is not supported by the hardware of
+
a device, the vector entry should contain the entry EMULATE. This will be
+
patched at load time to contain a jump to the Kernel's emulation routine.
+
These routines will emulate the action of the vector by breaking down the
+
request into simpler primitives. For example, if the hardware has the
+
functionality to draw arc, the arc vector will contain the address
+
of the routine to dispatch the arc data to the hardware and would
+
appear as follows:
+
 
+
dw offset ARC ; Vector to the arc routine
+
 
+
If, as is often the case, the hardware doesn't have the functionality to
+
display arcs, the vector would instead contain the EMULATE vector:
+
  
 
dw EMULATE
 
dw EMULATE
  
The Kernel has emulation support for the following vectors:
+
Le noyau prend en charge l'émulation pour les vecteurs suivants:
  
BAR Filling 3D rectangles
+
BAR Remplissage de rectangles 3D ARC Rendu d'arc elliptique PIESLICE Tranches de tarte elliptiques FILLED_ELLIPSE Ellipses remplies
ARC Elliptical arc rendering
+
PIESLICE Elliptical pie slices
+
FILLED_ELLIPSE Filled Ellipses
+
  
The Driver Status Table
+
==Le tableau d'état du pilote==
=======================
+
  
BGI requires that each driver contain a Driver Status Table (DST) to
+
BGI requiert que chaque pilote contienne une table d'état du pilote (DST) pour déterminer les caractéristiques de base du périphérique auquel le pilote s'adresse. À titre d'exemple, le DST pour un écran CGA est affiché ici:
determine the basic characteristics of the device that the driver
+
addresses. As an example, the DST for a CGA display is shown here:
+
  
STATUS STRUC
+
STATUS STRUC STAT DB 0; État actuel du périphérique (0 = aucune erreur) DEVTYP DB 0; Identifiant de type de périphérique (doit être 0) XRES DW 639; Résolution maximale du périphérique dans la direction X YRES DW 199; Résolution maximale de l'appareil dans la direction Y XEFRES DW 639; Résolution X effective de l'appareil YEFRES DW 199; Résolution Y efficace du périphérique XINCH DW 9000; Taille de l'appareil X en pouces * 1000 YINCH DW 7000; Périphérique Y Taille en pouces * 1000 ASPEC DW 4500; Rapport hauteur / largeur = (y_size / x_size) * 10000 DB 8h DB 8h; pour des raisons de compatibilité, utilisez ces valeurs DB 90h DB 90h STATUS ENDS
STAT DB 0 ; Current Device Status (0 = No Errors)
+
DEVTYP DB 0 ; Device Type Identifier (must be 0)
+
XRES DW 639 ; Device Full Resolution in X Direction
+
YRES DW 199 ; Device Full Resolution in Y Direction
+
XEFRES DW 639 ; Device Effective X Resolution
+
YEFRES DW 199 ; Device Effective Y Resolution
+
XINCH DW 9000 ; Device X Size in inches*1000
+
YINCH DW 7000 ; Device Y Size in inches*1000
+
ASPEC DW 4500 ; Aspect Ratio = (y_size/x_size) * 10000
+
DB 8h
+
DB 8h ; for compatibility, use these values
+
DB 90h
+
DB 90h
+
STATUS ENDS
+
  
The BGI interface provides a system for reporting errors to the BGI Kernel
+
L'interface BGI fournit un système pour signaler les erreurs au noyau BGI et au code de niveau supérieur développé à l'aide des packages linguistiques de Borland. Cela se fait à l'aide du champ STAT de la table d'état du pilote. Ce champ doit être rempli par le code du pilote si une erreur est détectée lors de l'exécution de l'installation de l'appareil (INSTALL). Les codes d'erreur suivants sont prédéfinis dans le fichier d'inclusion GRAPHICS.H pour Turbo C et dans l'unité graphique pour Turbo Pascal.
and to the higher level code developed using Borland's language packages.
+
This is done using the STAT field of the Driver Status Table. This field
+
should be filled in by the driver code if an error is detected during the
+
execution of the device installation (INSTALL). The following error codes
+
are predefined in include file GRAPHICS.H for Turbo C and in the Graphics
+
unit for Turbo Pascal.
+
  
grOk = 0 Normal Operation, No errors
+
grOk = 0 Fonctionnement normal, aucune erreur
grNoInitGraph = -1
+
grNoInitGraph = -1  
grNotDetected = -2
+
grNotDetected = -2  
grFileNotFound = -3
+
grFileNotFound = -3  
grInvalidDriver = -4
+
grInvalidDriver = -4  
grNoLoadMem = -5
+
grNoLoadMem = -5  
grNoScanMem = -6
+
grNoScanMem = -6  
grNoFloodMem = -7
+
grNoFloodMem = -7  
grFontNotFound = -8
+
grFontNotFound = -8  
grNoFontMem = -9
+
grNoFontMem = -9  
grInvalidMode = -10
+
grE = -9 -11 Erreur de pilote générique
grError = -11 Generic Driver Error
+
grIOerror = -12  
grIOerror = -12
+
grInvalidFont = -13  
grInvalidFont = -13
+
grInvalidFontNum = -14  
grInvalidFontNum = -14
+
grInvalidDeviceNum = -15
grInvalidDeviceNum = -15
+
  
The next field in the Device Status Table, DEVTYP, describes the class of
+
Le champ suivant du tableau d'état des périphériques, DEVTYP, décrit la classe du périphérique que le pilote contrôle; pour les périphériques d'écran, cette valeur est toujours 0.
the device that the driver controls; for screen devices, this value is
+
always 0.
+
  
The next four fields, XRES, YRES, XEFRES, and YEFRES contain the number of
+
Les quatre champs suivants, XRES, YRES, XEFRES et YEFRES contiennent le nombre de pixels disponibles pour BGI sur cet appareil dans les dimensions horizontale et verticale, moins un. Pour les périphériques d'écran, XRES = XEFRES et YRES = YEFRES. Les champs XINCH et YINCH correspondent au nombre de pouces horizontalement et verticalement dans lesquels les pixels de l'appareil sont mappés, multiplié par 1000. Ces champs, associés à XRES et YRES, permettent le calcul de la résolution de l'appareil (DPI ou points par pouce).
pixels available to BGI on this device in the horizontal and vertical
+
dimensions, minus one. For screen devices, XRES=XEFRES and YRES=YEFRES.
+
The XINCH and YINCH fields are the number of inches horizontally and
+
vertically into which the device's pixels are mapped, times 1000. These
+
fields in conjunction with XRES and YRES permit device resolution (DPI, or
+
dots per inch) calculation.
+
  
Horizontal resolution (DPI) = (XRES+1) / (XINCH/1000)
+
Résolution horizontale (DPI) = (XRES + 1) / (XINCH / 1000) Résolution verticale (DPI) = (YRES + 1) / (YINCH / 1000)
Vertical resolution (DPI) = (YRES+1) / (YINCH/1000)
+
  
The ASPEC (aspect ratio) field is effectively a multiplier/divisor pair
+
Le champ ASPEC (rapport d'aspect) est effectivement une paire multiplicateur / diviseur (le diviseur est toujours 10000) qui est appliqué aux valeurs de coordonnées Y pour produire des images ajustées au rapport d'aspect (par exemple, des cercles ronds). Par exemple, un champ ASPEC de 4500 implique que l'application devra transformer les coordonnées Y par le rapport 4500/10000 lors du dessin de cercles sur ce périphérique si elle s'attend à ce qu'elles soient rondes. Les variations de moniteur individuelles peuvent nécessiter un ajustement supplémentaire par l'application.
(the divisor is always 10000) that is applied to Y coordinate values to
+
produce aspect-ratio adjusted images (e.g., round circles). For example,
+
an ASPEC field of 4500 implies that the application will have to transform
+
Y coordinates by the ratio 4500/10000 when drawing circles to that device
+
if it expects them to be round. Individual monitor variations may require
+
an additional adjustment by the application.
+
  
 +
==La table vectorielle des pilotes de périphériques==
  
The Device Driver Vector Table
+
Les routines du pilote de périphérique sont accessibles via une table vectorielle. Ce tableau se trouve au début du pilote et contient des décalages 16 bits vers les sous-programmes et les tableaux de configuration dans le pilote. Le format de la table vectorielle est indiqué ci-dessous.
==============================
+
 
+
The routines in the device driver are accessed via a vector table.
+
This table is at the beginning of the driver and contains 16-bit
+
offsets to subroutines and configuration tables within the driver.
+
The format of the vector table is shown below.
+
  
 
VECTOR_TABLE:
 
VECTOR_TABLE:
  
DW INSTALL ; Driver initialization and installation
+
DW INSTALL; Initialisation et installation du pilote
DW INIT ; Initialize device for output
+
DW INIT; Initialiser le périphérique pour la sortie
DW CLEAR ; Clear graphics device; get fresh screen
+
DW CLEAR; Dispositif graphique clair; obtenir un nouvel écran
DW POST ; Exit from graphics mode, unload plotter, etc
+
DW POST; Quittez le mode graphique, déchargez le traceur, etc.
DW MOVE ; Move Current Pointer (CP) to (X,Y)
+
DW MOVE; Déplacer le pointeur actuel (CP) vers (X, Y)
DW DRAW ; Draw Line from (CP) to (X,Y)
+
DW DRAW; Tracer une ligne de (CP) à (X, Y)
DW VECT ; Draw line from (X0,Y0) to (X1,Y1)
+
DW VECT; Tracez une ligne de (X0, Y0) à (X1, Y1)
DW EMULATE ; Reserved, must contain Emulate vector
+
DW EMULATE; Réservé, doit contenir un vecteur d'émulation
DW BAR ; Filled 3D bar from (CP) to (X,Y)
+
DW BAR; Barre 3D remplie de (CP) à (X, Y)
DW PATBAR ; Patterned rectangle from (X,Y) to (X1,Y1)
+
DW PATBAR; Rectangle à motifs de (X, Y) à (X1, Y1)
DW ARC ; Define ARC
+
DW ARC; Définir l'ARC
DW PIESLICE ; Define an elliptical pie slice
+
DW PIESLICE; Définir une part de tarte elliptique
DW FILLED_ELLIPSE ; Draw a filled ellipse
+
DW FILLED_ELLIPSE; Dessinez une ellipse remplie
DW PALETTE ; Load a palette entry
+
PALETTE DW; Charger une entrée de palette
DW ALLPALETTE ; Load the full palette
+
DW ALLPALETTE; Charger la palette complète
DW COLOR ; Set current drawing color/background
+
COULEUR DW; Définir la couleur / l'arrière-plan du dessin actuel
DW FILLSTYLE ; Filling control and style
+
DW FILLSTYLE; Contrôle et style de remplissage
DW LINESTYLE ; Line drawing style control
+
DW LINESTYLE; Contrôle du style de dessin au trait
DW TEXTSTYLE ; Hardware Font control
+
DW TEXTSTYLE; Contrôle des polices matérielles
DW TEXT ; Hardware Draw text at (CP)
+
DW TEXT; Hardware Draw text at (CP)
DW TEXTSIZ ; Hardware Font size query
+
DW TEXTSIZ; Requête de taille de police matérielle
DW RESERVED ; Reserved
+
DW RÉSERVÉ; Réservé
DW FLOODFILL ; Fill a bounded region
+
DW FLOODFILL; Remplir une région délimitée
DW GETPIX ; Read a pixel from (X,Y)
+
DW GETPIX; Lire un pixel de (X, Y)
DW PUTPIX ; Write a pixel to (X,Y)
+
DW PUTPIX; Écrire un pixel dans (X, Y)
DW BITMAPUTIL ; Bitmap Size query function
+
DW BITMAPUTIL; Fonction de requête de taille de bitmap
DW SAVEBITMAP ; BITBLT from screen to system memory
+
DW SAVEBITMAP; BITBLT de l'écran à la mémoire système
DW RESTOREBITMAP ; BITBLT from system memory to screen
+
DW RESTOREBITMAP; BITBLT de la mémoire système à l'écran
DW SETCLIP ; Define a clipping rectangle
+
DW SETCLIP; Définir un rectangle de détourage
DW COLOR_QUERY ; Color Table Information Query
+
DW COLOR_QUERY; Requête d'informations sur la table des couleurs
;
+
; 35 additional vectors are reserved for Borland's future use.
+
;
+
DW RESERVED ; Reserved for Borland's use (1)
+
DW RESERVED ; Reserved for Borland's use (2)
+
DW RESERVED ; Reserved for Borland's use (3)
+
.
+
.
+
.
+
DW RESERVED ; Reserved for Borland's use (33)
+
DW RESERVED ; Reserved for Borland's use (34)
+
DW RESERVED ; Reserved for Borland's use (35)
+
;
+
; Any vectors following this block may be used by
+
; independent device driver developers as they see fit.
+
;
+
 
+
 
+
Vector Descriptions
+
===================
+
 
+
The following information describes the input, output, and function
+
of each of the functions accessed through the device vector table.
+
 
+
DW offset INSTALL ; device driver installation
+
 
+
The Kernel calls the INSTALL vector to prepare the device driver for use. A
+
function code is passed in AL. The following function codes are defined:
+
 
+
>>> Install Device: AL = 00
+
Input:
+
CL = Mode Number for device
+
 
+
Return:
+
ES:BX --> Device Status Table (see STATUS structure, above)
+
 
+
The INSTALL function is intended to inform the driver of the operating
+
parameters that will be used. The device should not be switched to
+
graphics mode (see INIT). On input, CL contains the mode in which the
+
device will operate. (refer to BGI setgraphmode statement)
+
  
 +
  ;  35 vecteurs supplémentaires sont réservés pour une utilisation future de Borland.
 +
;
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (1)
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (2)
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (3)
 +
.
 +
.
 +
.
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (33)
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (34)
 +
DW RÉSERVÉ;  Réservé à l'usage de Borland (35)
 +
;
 +
;  Tout vecteur suivant ce bloc peut être utilisé par
 +
;  développeurs de pilotes de périphériques indépendants comme bon leur semble.
 +
;
  
The return value from the Install Device function is a pointer to a Device
+
Descriptions des vecteurs
Status Table (described earlier).
+
  
>>> Mode Query: AL = 001h
+
Les informations suivantes décrivent l'entrée, la sortie et la fonction de chacune des fonctions accessibles via la table vectorielle des périphériques.
Input:
+
  
Nothing
+
DW offset INSTALL; installation du pilote de périphérique
  
Return:
+
Le noyau appelle le vecteur INSTALL pour préparer le pilote de périphérique à l'utilisation. Un code de fonction est passé en AL. Les codes de fonction suivants sont définis:
CX The number of modes supported by this device.
+
  
The MODE QUERY function is used to inquire about the maximum number of
+
>>> Installer l'appareil: AL = 00 Entrée: CL = Numéro de mode pour l'appareil
modes supported by this device driver.
+
  
 +
Retour: ES: BX -> Tableau d'état du périphérique (voir la structure STATUS, ci-dessus)
  
>>> Mode Names: AL = 002h
+
La fonction INSTALL est destinée à informer le pilote des paramètres de fonctionnement qui seront utilisés. L'appareil ne doit pas être mis en mode graphique (voir INIT). En entrée, CL contient le mode dans lequel l'appareil fonctionnera. (voir la déclaration BGI setgraphmode)
Input:
+
CX The mode number for the query.
+
  
Return:
 
ES:BX --> a Pascal string containing the name
 
  
The MODE NAMES function is used to inquire about the ASCII form of the mode
+
La valeur de retour de la fonction Installer le périphérique est un pointeur vers un tableau d'état du périphérique (décrit précédemment).
number present in CX. The return value in ES:BX points to a Pascal string
+
describing the given mode. (Note: A Pascal, or _length_, string is a string
+
in which the first byte of data is the number of characters in the string,
+
followed by the string data itself.) To ease access to these strings from
+
C, the strings should be followed by a zero byte, although this zero byte
+
should not be included in the string length. The following is an example
+
of this format:
+
  
NAME: db 16, '1280 x 1024 Mode', 0
+
>>> Requête de mode: AL = 001h Entrée:
  
 +
Rien
  
==================================================================
+
Return: CX Le nombre de modes pris en charge par cet appareil.
  
DW offset INIT ; Initialize device for output
+
La fonction MODE QUERY est utilisée pour demander le nombre maximum de modes pris en charge par ce pilote de périphérique.
  
Input:
 
ES:BX --> Device Information Table
 
  
Return:
+
>>> Noms de mode: AL = 002h Entrée: CX Le numéro de mode de la requête.
Nothing
+
  
This vector is used to change an already INSTALLed device from text mode to
+
Retour: ES: BX -> une chaîne Pascal contenant le nom
graphics mode. This vector should also initialize any default palettes and
+
drawing mode information as required. The input to this vector is a
+
device information table (DIT). The format of the DIT is shown below and
+
contains the background color and an initialization flag. If the device
+
requires additional information at INIT time, these values can be appended
+
to the DIT. There in no return value for this function. If an
+
error occurs during device initialization, the STAT field of the Device
+
Status Table should be loaded with the appropriate error value.
+
  
; ************** Device Information Table Definition **************
+
La fonction NOMS DE MODE est utilisée pour rechercher la forme ASCII du numéro de mode présent dans CX. La valeur de retour dans ES: BX pointe vers une chaîne Pascal décrivant le mode donné. (Remarque: une chaîne Pascal ou _length_ est une chaîne dans laquelle le premier octet de données est le nombre de caractères de la chaîne, suivi des données de chaîne elles-mêmes.) Pour faciliter l'accès à ces chaînes à partir de C, les chaînes doivent être suivi d'un octet zéro, bien que cet octet zéro ne doive pas être inclus dans la longueur de la chaîne. Voici un exemple de ce format:
  
struct DIT
+
NOM: db 16, 'Mode 1280 x 1024', 0
DB 0 ; Background color for initializing screen
+
DB 0 ; Init flag; 0A5h = don't init; anything
+
; else = init
+
DB 64 dup 0 ; Reserved for Borland's future use
+
; additional user information here
+
DIT ends
+
  
  
==================================================================
 
  
DW offset CLEAR ; Clear the graphics device
+
DW offset INIT; Initialiser le périphérique pour la sortie
  
Input:
+
Entrée: ES: BX -> Tableau d'informations sur le périphérique
Nothing
+
  
Return:
+
Retour: Rien
Nothing
+
  
This vector is used to clear the graphics device to a known state. In the
+
Ce vecteur est utilisé pour changer un appareil déjà installé du mode texte au mode graphique. Ce vecteur doit également initialiser les palettes par défaut et les informations sur le mode de dessin selon les besoins. L'entrée de ce vecteur est une table d'informations sur les appareils (DIT). Le format du DIT est indiqué ci-dessous et contient la couleur d'arrière-plan et un indicateur d'initialisation. Si l'appareil nécessite des informations supplémentaires au moment INIT, ces valeurs peuvent être ajoutées au DIT. Il n'y a pas de valeur de retour pour cette fonction. Si une erreur se produit pendant l'initialisation du périphérique, le champ STAT du tableau d'état du périphérique doit être chargé avec la valeur d'erreur appropriée.
case of a CRT device, the screen is cleared. In the case of a printer
+
or plotter, the paper is advanced, and pens are returned to the station.
+
  
 +
************** Définition du tableau d'informations sur le périphérique **************
  
 +
struct DIT DB 0; Couleur de fond pour initialiser l'écran DB 0; Drapeau Init; 0A5h = ne pas initier; n'importe quoi
  
==================================================================
+
else = init
  
DW offset POST ; Exit from graphics mode
+
DB 64 dup 0; Réservé à une utilisation future de Borland
  
Input:
+
informations utilisateur supplémentaires ici
Nothing
+
  
Return:
+
DIT se termine
Nothing
+
  
This routine is used to close the graphics system. In the case of graphics
 
screens or printers, the mode should be returned to text mode. For
 
plotters, the paper should be unloaded and the pens should be returned to
 
station.
 
  
  
 +
DW offset CLEAR; Effacez le périphérique graphique
  
==================================================================
+
Entrée: rien
  
DW offset MOVE ; Move the current drawing pointer
+
Retour: Rien
  
Input:
+
Ce vecteur est utilisé pour effacer le périphérique graphique dans un état connu. Dans le cas d'un appareil CRT, l'écran est effacé. Dans le cas d'une imprimante ou d'un traceur, le papier est avancé et les stylos sont renvoyés à la station.
AX the new CP x coordinate
+
BX the new CP y coordinate
+
  
Return:
 
Nothing
 
  
Sets the Driver's current pointer (CP) to (AX,BX). This function is
 
used prior to any of the TEXT, ARC, SYMBOL, DRAW, FLOODFILL, BAR, or
 
PIESLICE routines to set the position where drawing is to take place.
 
  
 +
DW offset POST; Quitter le mode graphique
  
==================================================================
+
Entrée: rien
  
DW offset DRAW ; Draw a line from the (CP) to (X,Y)
+
Retour: Rien
  
Input:
+
Cette routine est utilisée pour fermer le système graphique. Dans le cas d'écrans graphiques ou d'imprimantes, le mode doit être remis en mode texte. Pour les traceurs, le papier doit être déchargé et les stylos doivent être retournés à la station.
AX The ending x coordinate for the line
+
BX The ending y coordinate for the line
+
  
Return:
 
Nothing
 
  
  
Draw a line from the CP to (X,Y). The current LINESTYLE setting is used.
+
DW offset MOVE; Déplacer le pointeur de dessin courant
The current pointer (CP) is updated to the line's endpoint.
+
  
 +
Entrée: AX la nouvelle coordonnée CP x BX la nouvelle coordonnée CP y
  
 +
Retour: Rien
  
==================================================================
+
Définit le pointeur actuel du pilote (CP) sur (AX, BX). Cette fonction est utilisée avant l'une des routines TEXT, ARC, SYMBOL, DRAW, FLOODFILL, BAR ou PIESLICE pour définir la position où le dessin doit avoir lieu.
  
DW VECT ; Draw line from (X1,Y1) to (X2,Y2)
 
  
Input:
 
AX X1; The beginning X coordinate for the line
 
BX Y1; The beginning Y coordinate for the line
 
CX X2; The ending X coordinate for the line
 
DX Y2; The ending Y coordinate for the line
 
  
Return:
+
DW offset DRAW; Tracez une ligne de (CP) à (X, Y)
Nothing
+
  
Draws a line from the (X1,Y1) to (X2,Y2). The current LINESTYLE setting is
+
Entrée: AX La coordonnée x de fin pour la ligne BX La coordonnée y de fin pour la ligne
used to draw the line. Note: CP is NOT changed by this vector.
+
  
 +
Retour: Rien
  
  
==================================================================
+
Tracez une ligne du CP à (X, Y). Le paramètre LINESTYLE actuel est utilisé. Le pointeur actuel (CP) est mis à jour au point final de la ligne.
  
DW BAR ; fill and outline rectangle (CP),(X,Y)
 
  
Input:
 
AX X--right edge of rectangle
 
BX Y--bottom edge of rectangle
 
CX 3D = width of 3D bar (ht := .75 * wdt); 0 = no 3D effect
 
DX 3D bar top flag; if CX <> 0, and DX = 0, draw a top
 
  
Return:
+
DW VECT; Tracez une ligne de (X1, Y1) à (X2, Y2)
Nothing
+
  
Fills and outlines a bar (rectangle) using the current COLOR, FILLCOLOR,
+
Entrée: AX X1; La coordonnée X de départ pour la ligne BX Y1; La coordonnée Y de début pour la ligne CX X2; La coordonnée X de fin pour la ligne DX Y2; La coordonnée Y de fin pour la ligne
and FILLPATERN. The current pointer defines the upper left corner of the
+
rectangle and (X,Y) is lower right. An optional 3D shadow effect
+
(intended for business graphics programs) is obtained by making CX nonzero.
+
DX then serves as a flag indicating whether a top should be drawn on the
+
bar.
+
  
 +
Retour: Rien
  
==================================================================
+
Trace une ligne de (X1, Y1) à (X2, Y2). Le paramètre LINESTYLE actuel est utilisé pour tracer la ligne. Remarque: le CP n'est PAS modifié par ce vecteur.
  
DW PATBAR ; fill rectangle (X1,Y1), (X2,Y2)
 
  
Input:
 
AX X1--the rectangle's left coordinate
 
BX Y1--the rectangle's top coordinate
 
CX X2--the rectangle's right coordinate
 
DX Y2--the rectangle's bottom coordinate
 
  
Return:
+
DW BAR; remplir et contourner le rectangle (CP), (X, Y)
Nothing
+
  
Fill (but don't outline) the indicated rectangle with the current fill
+
Entrée: AX X - bord droit du rectangle BX Y - bord inférieur du rectangle CX 3D = largeur de la barre 3D (ht: = .75 * wdt); 0 = pas d'effet 3D DX Pavillon haut de la barre 3D; si CX <> 0 et DX = 0, dessinez un sommet
pattern and fill color.
+
  
 +
Retour: Rien
  
==================================================================
+
Remplit et décrit une barre (rectangle) à l'aide des couleurs COLOR, FILLCOLOR et FILLPATERN actuelles. Le pointeur actuel définit le coin supérieur gauche du rectangle et (X, Y) est inférieur droit. Un effet d'ombre 3D en option (destiné aux programmes graphiques d'entreprise) est obtenu en rendant CX non nul. DX sert alors de drapeau indiquant si un sommet doit être dessiné sur la barre.
  
DW ARC ; Draw an elliptical arc
 
  
Input:
 
AX The starting angle of the arc in degrees (0-360)
 
BX The ending angle of the arc in degrees (0-360)
 
CX X radius of the elliptical arc
 
DX Y radius of the elliptical arc
 
  
Return:
+
DW PATBAR; remplir le rectangle (X1, Y1), (X2, Y2)
Nothing
+
  
ARC draws an elliptical arc using the (CP) as the center point of the
+
Entrée: AX X1 - la coordonnée gauche du rectangle BX Y1 - la coordonnée supérieure du rectangle CX X2 - la coordonnée droite du rectangle DX Y2 - la coordonnée inférieure du rectangle
arc, from the given start angle to the given end angle. To get circular
+
arcs the application (not the driver) must adjust the Y radius as follows:
+
  
YRAD := XRAD * (ASPEC / 10000)
+
Retour: Rien
  
where ASPEC is the aspect value stored in the DST.
+
Remplissez (mais ne dessinez pas) le rectangle indiqué avec le motif de remplissage et la couleur de remplissage actuels.
  
  
==================================================================
 
  
DW PIESLICE ; Draw an elliptical pie slice
+
DW ARC; Dessinez un arc elliptique
  
Input:
+
Entrée: AX L'angle de départ de l'arc en degrés (0-360) BX L'angle de fin de l'arc en degrés (0-360) CX Rayon X de l'arc elliptique DX Rayon Y de l'arc elliptique
AX The starting angle of the slice in degrees (0-360)
+
BX The ending angle of the slice in degrees (0-360)
+
CX X radius of the elliptical slice
+
DX Y radius of the elliptical slice
+
  
Return:
+
Retour: Rien
Nothing
+
  
PIESLICE draws a filled elliptical pie slice (or wedge) using CP as the
+
ARC dessine un arc elliptique en utilisant le (CP) comme point central de l'arc, de l'angle de départ donné à l'angle de fin donné. Pour obtenir des arcs circulaires, l'application (et non le pilote) doit ajuster le rayon Y comme suit:
center of the slice, from the given start angle to the given end angle.
+
The current FILLPATTERN and FILLCOLOR is used to fill the slice and it is
+
outlined in the current COLOR. To get circular pie slices, the application
+
(not the driver) must adjust the Y radius as follows:
+
  
YRAD := XRAD * ASPEC / 10000
+
YRAD: = XRAD * (ASPEC / 10000)
  
where ASPEC is the aspect value stored in the driver's DST.
+
ASPEC est la valeur d'aspect stockée dans le DST.
  
  
  
==================================================================
+
DW PIESLICE; Dessinez une part de tarte elliptique
  
DW FILLED_ELLIPSE ; Draw a filled ellipse at (CP)
+
Entrée: AX L'angle de début de la tranche en degrés (0-360) BX L'angle de fin de la tranche en degrés (0-360) CX Rayon X de la tranche elliptique DX Rayon Y de la tranche elliptique
  
Input:
+
Retour: Rien
AX X Radius of the ellipse
+
BX Y Radius of the ellipse
+
  
Return:
+
PIESLICE dessine une tranche de tarte elliptique remplie (ou un coin) en utilisant CP comme centre de la tranche, de l'angle de début donné à l'angle de fin donné. Le FILLPATTERN et le FILLCOLOR actuels sont utilisés pour remplir la tranche et sont décrits dans le COLOR actuel. Pour obtenir des tranches de tarte circulaires, l'application (et non le pilote) doit ajuster le rayon Y comme suit:
Nothing
+
  
This vector is used to draw a filled ellipse. The center point of the
+
YRAD: = XRAD * ASPEC / 10000
ellipse is assumed to be at the current pointer (CP). The AX Register
+
contains the X Radius of the ellipse, and the BX Register contains the Y
+
Radius of the ellipse.
+
  
 +
où ASPEC est la valeur d'aspect stockée dans le DST du pilote.
  
==================================================================
 
  
DW PALETTE ; Load a color entry into the Palette
 
  
Input:
+
DW FILLED_ELLIPSE; Dessinez une ellipse remplie à (CP)
AX The index number and function code for load
+
BX The color value to load into the palette
+
  
Return:
+
Entrée: AX X Rayon de l'ellipse BX Y Rayon de l'ellipse
Nothing
+
  
The PALETTE vector is used to load single entries into the palette. The
+
Retour: Rien
register AX contains the function code for the load action and the index
+
of the color table entry to be loaded. The upper two bits of AX determine
+
the action to be taken. The table below tabulates the actions. If the
+
control bits are 00, the color table index in (AX AND 03FFFh) is loaded
+
with the value in BX. If the control bits are 10, the color table index in
+
(AX AND 03FFFh) is loaded with the RGB value in (Red=BX, Green=CX, and
+
Blue=DX). If the control bits are 11, the color table entry for the
+
background is loaded with the value in BX.
+
  
Control Bits Color Value and Index
+
Ce vecteur est utilisé pour dessiner une ellipse remplie. Le point central de l'ellipse est supposé être au pointeur actuel (CP). Le registre AX contient le rayon X de l'ellipse et le registre BX contient le rayon Y de l'ellipse.
  
00 Register BX contains color, AX is index
 
01 not used
 
10 Red=BX Green=CX Blue=DX, AX is index
 
11 Register BX contains color for background
 
  
==================================================================
 
  
DW ALLPALETTE ; Load the full palette
+
PALETTE DW; Charger une entrée de couleur dans la palette
  
Input:
+
Entrée: AX Le numéro d'index et le code de fonction pour le chargement BX La valeur de couleur à charger dans la palette
ES:BX --> array of palette entries
+
  
Return:
+
Retour: Rien
Nothing
+
  
The ALLPALETTE routine loads the entire palette in one driver
+
Le vecteur PALETTE est utilisé pour charger des entrées uniques dans la palette. Le registre AX contient le code de fonction pour l'action de chargement et l'index de l'entrée de table de couleurs à charger. Les deux bits supérieurs d'AX déterminent l'action à entreprendre. Le tableau ci-dessous présente les actions. Si les bits de contrôle sont 00, l'index de la table des couleurs dans (AXE ET 03FFFh) est chargé avec la valeur dans BX. Si les bits de contrôle sont 10, l'index de la table des couleurs dans (AXE ET 03FFFh) est chargé avec la valeur RVB dans (Rouge = BX, Vert = CX et Bleu = DX). Si les bits de contrôle sont 11, l'entrée de la table des couleurs pour l'arrière-plan est chargée avec la valeur dans BX.
call. The register pair ES:BX points to the table of values to be loaded
+
into the palette. The number of entries is determined by the color entries
+
in the Driver Status Table. The background color is not explicitly loaded
+
with this command.
+
  
 +
Valeur et indice de couleur des bits de contrôle
  
==================================================================
+
00 Le registre BX contient la couleur, AX est l'index 01 non utilisé 10 Rouge = BX Vert = CX Bleu = DX, AX est l'index 11 Le registre BX contient la couleur de l'arrière-plan
  
DW COLOR ; Load the current drawing color.
 
  
Input:
+
DW ALLPALETTE; Charger la palette complète
AL The index number of the current drawing color
+
AH The index number of the fill color
+
  
Return:
+
Entrée: ES: BX -> tableau d'entrées de palette
Nothing
+
  
The COLOR vector is used to determine the current drawing color. The value
+
Retour: Rien
in AL is the index into the palette of the new current drawing color. The
+
value in the AH register is the color index of the new fill color.
+
All primitives are drawn with the current drawing color until the color
+
is changed.
+
  
The fill color is used for the interior color for the bar, polygons, pie
+
La routine ALLPALETTE charge toute la palette en un seul appel de pilote. La paire de registres ES: BX pointe vers la table de valeurs à charger dans la palette. Le nombre d'entrées est déterminé par les entrées de couleur dans le tableau d'état du pilote. La couleur d'arrière-plan n'est pas explicitement chargée avec cette commande.
slice, and floodfill primitives.
+
  
  
==================================================================
 
  
DW FILLSTYLE ; Set the filling pattern
+
COULEUR DW; Chargez la couleur de dessin actuelle.
  
Input:
+
Entrée: AL Le numéro d'index de la couleur de dessin actuelle AH Le numéro d'index de la couleur de remplissage
AL Primary fill pattern number
+
ES:BX If the pattern number is 0FFh, this points to user define
+
pattern mask.
+
  
Return:
+
Retour: Rien
Nothing
+
  
 +
Le vecteur COULEUR est utilisé pour déterminer la couleur de dessin actuelle. La valeur dans AL est l'index dans la palette de la nouvelle couleur de dessin actuelle. La valeur dans le registre AH est l'indice de couleur de la nouvelle couleur de remplissage. Toutes les primitives sont dessinées avec la couleur de dessin actuelle jusqu'à ce que la couleur soit modifiée.
  
Sets the fill pattern for drawing. The fill pattern is used to fill all
+
La couleur de remplissage est utilisée pour la couleur intérieure des primitives de barres, de polygones, de tranches de tarte et de remplissage.
bounded regions (BAR, POLY, and PIESLICE). The numbers for the
+
predefined fill patterns are as follows:
+
  
Code Description 8 Byte fill pattern
 
  
0 No Fill 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
 
1 Solid Fill 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh
 
2 Line Fill 0FFh, 0FFh, 000h, 000h, 0FFh, 0FFh, 000h, 000h
 
3 Lt Slash Fill 001h, 002h, 004h, 008h, 010h, 020h, 040h, 080h
 
4 Slash Fill 0E0h, 0C1h, 083h, 007h, 00Eh, 01Ch, 038h, 070h
 
5 Backslash Fill 0F0h, 078h, 03Ch, 01Eh, 00Fh, 087h, 0C3h, 0E1h
 
6 Lt Bkslash Fill 0A5h, 0D2h, 069h, 0B4h, 05Ah, 02Dh, 096h, 04Bh
 
7 Hatch Fill 0FFh, 088h, 088h, 088h, 0FFh, 088h, 088h, 088h
 
8 XHatch Fill 081h, 042h, 024h, 018h, 018h, 024h, 042h, 081h
 
9 Interleave Fill 0CCh, 033h, 0CCh, 033h, 0CCh, 033h, 0CCh, 033h
 
10 Wide Dot Fill 080h, 000h, 008h, 000h, 080h, 000h, 008h, 000h
 
11 Close Dot Fill 088h, 000h, 022h, 000h, 088h, 000h, 022h, 000h
 
  
0FFh User is defining the pattern of the fill.
+
DW FILLSTYLE; Définir le motif de remplissage
  
In the case of a user-defined fill pattern, the register pair ES:BX point
+
Entrée: AL Numéro de motif de remplissage principal ES: BX Si le numéro de motif est 0FFh, cela pointe vers le masque de motif défini par l'utilisateur.
to 8 bytes of data arranged as a 8x8 bit pattern to be used for the fill
+
pattern.
+
  
 +
Retour: Rien
  
==================================================================
 
  
DW LINESTYLE ; Set the line drawing pattern
+
Définit le motif de remplissage pour le dessin. Le motif de remplissage est utilisé pour remplir toutes les régions délimitées (BAR, POLY et PIESLICE). Les numéros des motifs de remplissage prédéfinis sont les suivants:
  
Input:
+
Code Description Modèle de remplissage à 8 octets
AL Line pattern number
+
BX User-defined line drawing pattern
+
CX Line width for drawing
+
  
Return:
+
0 Sans remplissage 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 1 Remplissage solide 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh 2 Remplissage de ligne 0FFh, 0FFh, 000h, 000h, 0FFh, 0FFh , 000h, 000h 3 Lt Slash Fill 001h, 002h, 004h, 008h, 010h, 020h, 040h, 080h 4 Slash Fill 0E0h, 0C1h, 083h, 007h, 00Eh, 01Ch, 038h, 070h 5 Backslash Fill 0F0h, 078h, 03Ch 01Eh, 00Fh, 087h, 0C3h, 0E1h 6 Lt Bkslash Fill 0A5h, 0D2h, 069h, 0B4h, 05Ah, 02Dh, 096h, 04Bh 7 Hatch Fill 0FFh, 088h, 088h, 088h, 0FFh, 088h, 088h, 088h , 042h, 024h, 018h, 018h, 024h, 042h, 081h 9 Interleave Fill 0CCh, 033h, 0CCh, 033h, 0CCh, 033h, 0CCh, 033h 10 Wide Dot Fill 080h, 000h, 008h, 000h, 080h, 000h, 008h, 000h 11 Close Dot Fill 088h, 000h, 022h, 000h, 088h, 000h, 022h, 000h
Nothing
+
  
Sets the current line-drawing style and the width of the line. The line
+
0FFh L'utilisateur définit le motif du remplissage.
width is either one pixel or three pixels in width. The following table
+
defines the default line styles:
+
  
Code Description 16 Bit Pattern
+
Dans le cas d'un motif de remplissage défini par l'utilisateur, la paire de registres ES: BX pointe vers 8 octets de données agencées sous la forme d'un motif de 8 x 8 bits à utiliser pour le motif de remplissage.
AL = 0 Solid Line Style 1111111111111111B
+
AL = 1 Dotted Line 1100110011001100B
+
AL = 2 Center Line 1111110001111000B
+
AL = 3 Dashed line 1111100011111000B
+
AL = 4 User-defined line style
+
  
If the value in AL is four, the user is defining a line style in the BX
 
register. If the value in AL is not four, then the value in register BX is
 
ignored.
 
  
  
==================================================================
+
DW LINESTYLE; Définir le motif de dessin au trait
  
DW TEXTSTYLE ; Hardware text style control
+
Entrée: AL Numéro de motif de ligne BX Modèle de dessin au trait défini par l'utilisateur CX Largeur de ligne pour le dessin
  
Input:
+
Retour: Rien
AL Hardware font number
+
AH Hardware font orientation
+
0 = Normal, 1 = 90 Degree, 2 = Down
+
BX Desired X Character (size in graphics units)
+
CX Desired Y Character (size in graphics units)
+
  
Return:
+
Définit le style de dessin au trait actuel et la largeur de la ligne. La largeur de ligne est soit d'un pixel soit de trois pixels de largeur. Le tableau suivant définit les styles de ligne par défaut:
BX Closest X Character size available (in graphics units)
+
CX Closest Y Character size available (in graphics units)
+
  
The TEXTSTYLE vector is used to define the attributes of the hardware font
+
Code Description Motif 16 bits AL = 0 Style de ligne continue 1111111111111111B AL = 1 Ligne pointillée 1100110011001100B AL = 2 Ligne centrale 1111110001111000B AL = 3 Ligne pointillée 1111100011111000B AL = 4 Style de ligne défini par l'utilisateur
for output. The parameters affected are the hardware font to be used, the
+
orientation of the font for output, the desired height and width of the
+
font output. All subsequent text will be drawn using these attributes.
+
  
If the desired size is not supported by the current device, the closest
+
Si la valeur dans AL est quatre, l'utilisateur définit un style de ligne dans le registre BX. Si la valeur dans AL n'est pas quatre, la valeur dans le registre BX est ignorée.
available match to the desired size should be used. The return value from
+
this function gives the dimensions of the font (in pixels) that will
+
actually be used.
+
  
For example, if the desired font is 8x10 pixels and the device supports
 
8x8 and 16x16 fonts, the closest match will be the 8x8. The output of the
 
function will be BX = 8, and CX = 8.
 
  
  
==================================================================
+
DW TEXTSTYLE; Contrôle du style de texte matériel
  
DW TEXT ; Hardware text output at (CP)
+
Entrée: AL Numéro de police matérielle AH Orientation de la police matérielle 0 = Normal, 1 = 90 degrés, 2 = Vers le bas BX Caractère X souhaité (taille en unités graphiques) CX Caractère Y souhaité (taille en unités graphiques)
  
Input:
+
Retour: BX Closest X Taille de caractère disponible (en unités graphiques) CX Closest Y Taille de caractère disponible (en unités graphiques)
ES:BX --> ASCII text of the string
+
CX The length (in characters) of the string.
+
  
This function is used to send hardware text to the output device. The text
+
Le vecteur TEXTSTYLE est utilisé pour définir les attributs de la police matérielle pour la sortie. Les paramètres affectés sont la police matérielle à utiliser, l'orientation de la police pour la sortie, la hauteur et la largeur souhaitées de la sortie de la police. Tout le texte suivant sera dessiné en utilisant ces attributs.
is output to the device beginning at the (CP). The (CP) is assumed to be
+
at the upper left of the string.
+
  
 +
Si la taille souhaitée n'est pas prise en charge par le périphérique actuel, la correspondance disponible la plus proche de la taille souhaitée doit être utilisée. La valeur de retour de cette fonction donne les dimensions de la police (en pixels) qui seront réellement utilisées.
  
==================================================================
+
Par exemple, si la police souhaitée est de 8 x 10 pixels et que l'appareil prend en charge les polices 8 x 8 et 16 x 16, la correspondance la plus proche sera la 8 x 8. La sortie de la fonction sera BX = 8 et CX = 8.
  
DW TEXTSIZ ; Determine the height and width of text
 
; strings in graphics units.
 
  
Input:
 
ES:BX --> ASCII text of the string
 
CX The length (in characters) of the string.
 
  
Return:
+
DW TEXT; Sortie de texte matériel sur (CP)
BX The width of the string in graphics units.
+
CX The height of the string in graphics units.
+
  
This function is used to determine the actual physical length and width of
+
Entrée: ES: BX -> texte ASCII de la chaîne CX La longueur (en caractères) de la chaîne.
a text string. The current text attributes (set by TEXTSTYLE) are used to
+
determine the actual dimensions of a string without displaying it. The
+
application can thereby determine how a specific string will fit and reduce
+
or increase the font size as required. There is NO graphics output for
+
this vector. If an error occurs during length calculation, the STAT field
+
of the Device Status Record should be marked with the device error code.
+
  
 +
Cette fonction est utilisée pour envoyer du texte matériel au périphérique de sortie. Le texte est envoyé à l'appareil à partir du (CP). Le (CP) est supposé être en haut à gauche de la chaîne.
  
==================================================================
 
  
DW FLOODFILL ; Fill a bounded region using a flood fill
 
  
Input:
+
DW TEXTSIZ; Déterminer la hauteur et la largeur du texte
AX The x coordinate for the seed point
+
BX The y coordinate for the seed point
+
CL The boundary color for the Flood Fill
+
  
Return:
+
chaînes en unités graphiques.
Nothing (Errors are returned in Device Status STAT field).
+
  
This function is called to fill a bounded region on bitmap devices. The
+
Entrée: ES: BX -> texte ASCII de la chaîne CX La longueur (en caractères) de la chaîne.
(X,Y) input coordinate is used as the seed point for the flood fill. (CP)
+
becomes the seed point. The current FILLPATTERN is used to flood the
+
region.
+
  
 +
Retour: BX La largeur de la chaîne en unités graphiques. CX La hauteur de la chaîne en unités graphiques.
  
==================================================================
+
Cette fonction est utilisée pour déterminer la longueur et la largeur physiques réelles d'une chaîne de texte. Les attributs de texte actuels (définis par TEXTSTYLE) sont utilisés pour déterminer les dimensions réelles d'une chaîne sans l'afficher. L'application peut ainsi déterminer comment une chaîne spécifique s'adaptera et réduire ou augmenter la taille de la police selon les besoins. Il n'y a AUCUNE sortie graphique pour ce vecteur. Si une erreur se produit pendant le calcul de la longueur, le champ STAT de l'enregistrement d'état du périphérique doit être marqué avec le code d'erreur du périphérique.
  
DW GETPIXEL ; Read a pixel from the graphics screen
 
  
Input:
 
AX The x coordinate for the seed point
 
BX The y coordinate for the seed point
 
  
Return:
+
DW FLOODFILL; Remplir une région délimitée à l'aide d'un remplissage d'inondation
DL The color index of the pixel read from the screen.
+
  
GETPIXEL reads the color index value of a single pixel from the graphics
+
Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ CL La couleur de la limite pour le remplissage d'inondation
screen. The color index value is returned in the DL register.
+
  
 +
Retour: rien (les erreurs sont renvoyées dans le champ STAT de l'état du périphérique).
  
 +
Cette fonction est appelée pour remplir une région délimitée sur des périphériques bitmap. La coordonnée d'entrée (X, Y) est utilisée comme point de départ pour le remblayage. (CP) devient le point de départ. Le FILLPATTERN actuel est utilisé pour inonder la région.
  
==================================================================
 
  
DW PUTPIXEL ; Write a pixel to the graphics screen
 
  
Input:
+
DW GETPIXEL; Lire un pixel sur l'écran graphique
AX The x coordinate for the seed point
+
BX The y coordinate for the seed point
+
DL The color index of the pixel read from the screen.
+
  
Return:
+
Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ
Nothing
+
  
PUTPIXEL writes a single pixel with the the color index value contained in
+
Retour: DL L'indice de couleur du pixel lu sur l'écran.
the DL register.
+
  
 +
GETPIXEL lit la valeur d'index de couleur d'un seul pixel sur l'écran graphique. La valeur de l'indice de couleur est renvoyée dans le registre DL.
  
  
==================================================================
 
  
DW BITMAPUTIL ; Bitmap Utilities Function Table
+
DW PUTPIXEL; Écrivez un pixel sur l'écran graphique
  
Input:
+
Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ DL L'indice de couleur du pixel lu sur l'écran.
Nothing
+
  
Return:
+
Retour: Rien
ES:BX --> BitMap Utility Table.
+
  
 +
PUTPIXEL écrit un seul pixel avec la valeur d'index de couleur contenue dans le registre DL.
  
The BITMAPUTIL vector loads a pointer into ES:BX, which is the base of a
 
table defining special case-entry points used for pixel manipulation.
 
These functions are currently only called by the ellipse emulation routines
 
that are in the BGI Kernel. If the device driver does not use emulation
 
for ellipses, this entry does not need to be implemented. This entry was
 
provided because some hardware requires additional commands to enter and
 
exit pixel mode, thus adding overhead to the GETPIXEL and SETPIXEL vectors.
 
This overhead affected the drawing speed of the ellipse emulation routines.
 
These entry points are provided so that the ellipse emulation routines can
 
enter pixel mode, and remain in pixel mode for the duration of the ellipse-
 
rendering process.
 
  
The format of the BITMAPUTIL table is as follows:
 
  
DW offset GOTOGRAPHIC ; Enter pixel mode on the graphics hardware
+
DW BITMAPUTIL; Tableau des fonctions des utilitaires bitmap
DW offset EXITGRAPHIC ; Leave pixel mode on the graphics hardware
+
DW offset PUTPIXEL ; Write a pixel to the graphics hardware
+
DW offset GETPIXEL ; Read a pixel from the graphics hardware
+
DW offset GETPIXBYTE ; Return a word containing the pixel depth
+
DW offset SET_DRAW_PAGE ; Select page in which to draw primitives
+
DW offset SET_VISUAL_PAGE ; Set the page to be displayed
+
DW offset SET_WRITE_MODE ; XOR Line Drawing Control
+
  
The parameters of these functions are as follows:
+
Entrée: rien
  
GOTOGRAPHIC ; Enter pixel mode on the graphics hardware
+
Retour: ES: BX -> Table des utilitaires BitMap.
This function is used to enter the special Pixel Graphics mode.
+
  
EXITGRAPHIC ; Leave pixel mode on the graphics hardware
 
This function is used to leave the special Pixel Graphics mode.
 
  
PUTPIXEL ; Write a pixel to the graphics hardware
+
Le vecteur BITMAPUTIL charge un pointeur dans ES: BX, qui est la base d'un tableau définissant des points d'entrée de cas spéciaux utilisés pour la manipulation des pixels. Ces fonctions ne sont actuellement appelées que par les routines d'émulation d'ellipse qui se trouvent dans le noyau BGI. Si le pilote de périphérique n'utilise pas d'émulation pour les ellipses, cette entrée n'a pas besoin d'être implémentée. Cette entrée a été fournie car certains matériels nécessitent des commandes supplémentaires pour entrer et sortir du mode pixel, ajoutant ainsi une surcharge aux vecteurs GETPIXEL et SETPIXEL. Cette surcharge a affecté la vitesse de dessin des routines d'émulation d'ellipse. Ces points d'entrée sont fournis pour que les routines d'émulation d'ellipse puissent entrer en mode pixel et rester en mode pixel pendant la durée du processus de rendu d'ellipse.
This function has the same format as the PUTPIXEL entry described
+
above.
+
  
GETPIXEL ; Read a pixel from the graphics hardware
+
Le format de la table BITMAPUTIL est le suivant:
This function has the same format as the GETPIXEL entry described
+
above.
+
  
GETPIXBYTE ; Return a word containing the pixel depth
+
DW offset GOTOGRAPHIC; Entrer en mode pixel sur le matériel graphique DW offset EXITGRAPHIC; Laisser le mode pixel sur le matériel graphique DW offset PUTPIXEL; Ecrire un pixel sur le matériel graphique DW offset GETPIXEL; Lire un pixel à partir du matériel graphique DW offset GETPIXBYTE; Renvoie un mot contenant la profondeur de pixel DW offset SET_DRAW_PAGE; Sélectionnez la page dans laquelle dessiner les primitives DW offset SET_VISUAL_PAGE; Définissez la page à afficher DW offset SET_WRITE_MODE; Contrôle de dessin au trait XOR
This function returns the number of bits per pixel (color depth) of
+
the graphics hardware in the AX register.
+
  
SET_DRAW_PAGE ; Select alternate output graphics pages (if any)
+
Les paramètres de ces fonctions sont les suivants:
This function take the desired page number in the AL register and
+
selects alternate graphics pages for output of graphics primitives.
+
  
SET_VISUAL_PAGE ; Select the visible alternate graphics pages (if any)
+
GOTOGRAPHIQUE; Entrer en mode pixel sur le matériel graphique Cette fonction est utilisée pour entrer dans le mode spécial Pixel Graphics.
This function take the desired page number in the AL register and
+
selects alternate graphics for displaying on the screen.
+
  
SET_WRITE_MODE ; XOR Line drawing mode control. XOR Mode is selected
+
EXITGRAPHIQUE; Laisser le mode pixel sur le matériel graphique Cette fonction est utilisée pour quitter le mode graphique spécial pixel.
if the value in AX is one, and disabled if the value in AX is zero.
+
  
 +
PUTPIXEL; Écrire un pixel sur le matériel graphique Cette fonction a le même format que l'entrée PUTPIXEL décrite ci-dessus.
  
 +
GETPIXEL; Lire un pixel à partir du matériel graphique Cette fonction a le même format que l'entrée GETPIXEL décrite ci-dessus.
  
==================================================================
+
GETPIXBYTE; Renvoyer un mot contenant la profondeur de pixel Cette fonction renvoie le nombre de bits par pixel (profondeur de couleur) du matériel graphique dans le registre AX.
  
DW SAVEBITMAP ; Write from screen memory to system memory
+
SET_DRAW_PAGE; Sélectionner des pages graphiques de sortie alternatives (le cas échéant) Cette fonction prend le numéro de page souhaité dans le registre AL et sélectionne des pages graphiques alternatives pour la sortie des primitives graphiques.
  
Input:
+
SET_VISUAL_PAGE; Sélectionner les autres pages graphiques visibles (le cas échéant) Cette fonction prend le numéro de page souhaité dans le registre AL et sélectionne des graphiques alternatifs à afficher à l'écran.
ES:BX Points to the buffer in system memory
+
to be written. ES:[BX] contains the width of the
+
rectangle -1. ES:[BX+2] contains the heigth of
+
the rectangle -1.
+
  
CX The upper left X coordinate of the rectangle.
+
SET_WRITE_MODE; Contrôle du mode de dessin des lignes XOR. Le mode XOR est sélectionné si la valeur dans AX est un et désactivé si la valeur dans AX est zéro.
DX The upper left Y coordinate of the rectangle.
+
  
Return:
 
Nothing
 
  
The SAVEBITMAP routine is a block copy routine that copies screen pixels
 
from a defined rectangle as specified by (SI,DI) - (CX,DX) to the system
 
memory.
 
  
 +
DW SAVEBITMAP; Écrire de la mémoire d'écran à la mémoire système
  
==================================================================
+
Entrée: ES: BX Pointe vers le tampon de la mémoire système à écrire. ES: [BX] contient la largeur du rectangle -1. ES: [BX + 2] contient la hauteur du rectangle -1.
  
DW RESTOREBITMAP ; Write screen memory to the screen.
+
CX La coordonnée X supérieure gauche du rectangle. DX La coordonnée Y supérieure gauche du rectangle.
  
Input:
+
Retour: Rien
ES:BX Points to the buffer in system memory
+
to be read. ES:[BX] contains the width of the
+
rectangle -1. ES:[BX+2] contains the heigth of
+
the rectangle -1.
+
  
CX The upper left X coordinate of the rectangle.
+
La routine SAVEBITMAP est une routine de copie de bloc qui copie les pixels d'écran d'un rectangle défini comme spécifié par (SI, DI) - (CX, DX) dans la mémoire système.
DX The upper left Y coordinate of the rectangle.
+
  
AL The pixel operation to use when transferring
 
the image into graphics memory. Write mode for
 
block writing.
 
0: Overwrite mode
 
1: XOR mode
 
2: OR mode
 
3: AND mode
 
4: Complement mode
 
  
Return:
 
Nothing
 
  
The RESTOREBITMAP vector is used to load screen pixels from the system
+
DW RESTOREBITMAP; Écrivez la mémoire d'écran sur l'écran.
memory. The routine reads a stream of bytes from the system memory into the
+
rectangle defined by (SI,DI) - (CX,DX). The value in the AL register
+
defines the mode that is used for the write. The following table defines
+
the values of the available write modes:
+
  
Pixel Operation Code
+
Entrée: ES: BX Pointe vers le tampon de la mémoire système à lire. ES: [BX] contient la largeur du rectangle -1. ES: [BX + 2] contient la hauteur du rectangle -1.
Overwrite mode 0
+
Logical XOR 1
+
Logical OR 2
+
Logical AND 3
+
Complement 4
+
  
 +
CX La coordonnée X supérieure gauche du rectangle. DX La coordonnée Y supérieure gauche du rectangle.
  
==================================================================
+
AL Opération pixel à utiliser lors du transfert de l'image dans la mémoire graphique. Mode d'écriture pour l'écriture de blocs. 0: mode de remplacement 1: mode XOR 2: mode OU 3: mode ET 4: mode complément
  
DW SETCLIP ; Define a clipping rectangle
+
Retour: Rien
  
Input:
+
Le vecteur RESTOREBITMAP est utilisé pour charger les pixels d'écran de la mémoire système. La routine lit un flux d'octets de la mémoire système dans le rectangle défini par (SI, DI) - (CX, DX). La valeur du registre AL définit le mode utilisé pour l'écriture. Le tableau suivant définit les valeurs des modes d'écriture disponibles:
AX Upper Left X coordinate of clipping rectangle
+
BX Upper Left Y coordinate of clipping rectangle
+
CX Lower Right X coordinate of clipping rectangle
+
DX Lower Right Y coordinate of clipping rectangle
+
  
Return:
+
Pixel Operation Code Overwrite mode 0 Logique XOR 1 Logique OU 2 Logique ET 3 Complément 4
Nothing
+
  
The SETCLIP vector defines a rectangular clipping region on the screen. The
 
registers (AX,BX) - (CX,DX) define the clipping region.
 
  
  
==================================================================
+
DW SETCLIP; Définir un rectangle de détourage
  
DW offset COLOR_QUERY ; Device Color Information Query
+
Saisie: AX Coordonnée X supérieure gauche du rectangle de détourage BX Coordonnée Y supérieure gauche du rectangle de détourage CX Coordonnée X inférieure droite du rectangle de détourage DX Coordonnée Y inférieure droite du rectangle de détourage
  
This vector is used to inquire about the color capabilities of a given
+
Retour: Rien
piece of hardware. A function code is passed into the driver in AL. The
+
following function codes are defined:
+
  
>>> Color Table Size AL = 000h
+
Le vecteur SETCLIP définit une zone de découpage rectangulaire à l'écran. Les registres (AX, BX) - (CX, DX) définissent la région d'écrêtage.
Input:
+
None:
+
  
Return:
 
BX The size of the color lookup table.
 
CX The maximum color number allowed.
 
  
The COLOR TABLE SIZE query is used to determine the maximum number of
 
colors supported by the hardware. The value returned in the BX register is
 
the number of color entries in the color lookup table. The value returned
 
in the CX register is the highest number for a color value. This value is
 
usually the value in BX minus one; however, there can be exceptions.
 
  
 +
DW offset COLOR_QUERY; Requête d'informations sur la couleur de l'appareil
  
>>> Default Color Table AL = 001h
+
Ce vecteur est utilisé pour se renseigner sur les capacités de couleur d'un matériel donné. Un code de fonction est transmis au pilote dans AL. Les codes de fonction suivants sont définis:
Input:
+
Nothing
+
  
Return:
+
>>> Taille de la table des couleurs AL = 000h Entrée: Aucune:
ES:BX --> default color table for the device
+
  
The DEFAULT COLOR TABLE function is used to determine the color table
+
Retour: BX La taille de la table de correspondance des couleurs. CX Le nombre de couleurs maximum autorisé.
values for the default (power-up) color table. The format of this table is
+
a byte containing the number of valid entries, followed by the given number
+
of bytes of color information.
+
  
 +
La requête COLOR TABLE SIZE est utilisée pour déterminer le nombre maximal de couleurs prises en charge par le matériel. La valeur renvoyée dans le registre BX est le nombre d'entrées de couleur dans la table de recherche des couleurs. La valeur renvoyée dans le registre CX est le nombre le plus élevé pour une valeur de couleur. Cette valeur est généralement la valeur en BX moins un; cependant, il peut y avoir des exceptions.
  
  
 +
>>> Tableau des couleurs par défaut AL = 001h Entrée: rien
  
Device Driver Construction Particulars
+
Retour: ES: BX -> table de couleurs par défaut pour l'appareil
======================================
+
  
The source code for a sample, albeit unusual, BGI device driver is included
+
La fonction TABLEAU DES COULEURS PAR DÉFAUT est utilisée pour déterminer les valeurs de la table des couleurs pour la table des couleurs par défaut (au démarrage). Le format de ce tableau est un octet contenant le nombre d'entrées valides, suivi du nombre donné d'octets d'informations de couleur.
with this Toolkit to assist developers in creating their own. The
+
demonstration driver is provided in two files, DEBVECT.ASM and DEBUG.C.
+
This "Debug" driver doesn't actually draw graphics, but instead simply
+
sends descriptive messages to the console screen (via DOS function call 9)
+
upon receiving commands. Instead of simply playing back commands, your own
+
driver would be structured similarly, but would access control ports and
+
screen memory to perform each function.
+
  
 +
==Détails sur la construction du pilote de périphérique==
  
Cookbook
+
Le code source d'un exemple, quoique inhabituel, de pilote de périphérique BGI est inclus avec cette boîte à outils pour aider les développeurs à créer le leur. Le pilote de démonstration est fourni dans deux fichiers, DEBVECT.ASM et DEBUG.C. Ce pilote de «débogage» ne dessine pas réellement de graphiques, mais envoie simplement des messages descriptifs à l'écran de la console (via l'appel de fonction DOS 9) lors de la réception des commandes. Au lieu de simplement lire des commandes, votre propre pilote serait structuré de la même manière, mais accéderait aux ports de contrôle et à la mémoire de l'écran pour exécuter chaque fonction.
========
+
==Livre de recettes==
  
1. Compile or assemble the files required.
+
1. Compilez ou assemblez les fichiers requis.
  
2. Link the files together, making sure that the device vector
+
2. Reliez les fichiers ensemble, en vous assurant que la table vectorielle des périphériques est le premier module du lien.
table is the first module within the link.
+
  
3. Run EXETOBIN on the resulting .EXE or .COM file to produce a .BIN
+
3. Exécutez EXETOBIN sur le fichier .EXE ou .COM résultant pour produire un fichier .BIN. Aucune correction de réinstallation ne devrait être requise.
file. There should be no relocation fixups required.
+
  
4. Run program BH (provided with the toolkit) on the .BIN
+
4. Exécutez le programme BH (fourni avec la boîte à outils) sur le fichier .BIN pour produire le fichier .BGI.
file to produce the .BGI file.
+
  
The resulting driver is now ready for testing. Examine the file TEST.C for
+
Le pilote résultant est maintenant prêt pour les tests. Examinez le fichier TEST.C pour un exemple d'installation, de chargement et d'appel d'un pilote de périphérique nouvellement créé.
an example of installing, loading, and calling a newly-created device
+
driver.
+
  
  
Examples
+
Exemples
  
; To call any BGI function from assembly language, include the
+
Pour appeler une fonction BGI à partir du langage d'assemblage, incluez le
; structure below and use the CALLBGI macro.
+
structure ci-dessous et utilisez la macro CALLBGI.
  
CALLBGI MACRO P
+
CALLBGI MACRO P MOV SI, $ & P; METTRE L'OPCODE DANS (SI) APPELER CS: DWORD PTR BGI_ADD; BGI_ADD POINTS TO DRIVER ENDM
MOV SI,$&P ; PUT OPCODE IN (SI)
+
CALL CS:DWORD PTR BGI_ADD ; BGI_ADD POINTS TO DRIVER
+
ENDM
+
  
; e.g., to draw a line from (10,15) to (200,300):
+
Par exemple, pour tracer une ligne de (10,15) à (200,300)
  
MOV AX, 10
+
MOV AX, 10 MOV BX, 15 MOV CX, 200 MOV DX, 300 CALLBGI VECT
MOV BX, 15
+
MOV CX, 200
+
MOV DX, 300
+
CALLBGI VECT
+
  
  
 +
Pour indexer un élément dans la table d'état, incluez la table d'état
 +
structures ci-dessous et utilisez la macro BGISTAT.
  
; To index any item in the status table, include the status table
+
BGISTAT MACRO P; OBTENIR ES: -> BGI STATUS LES SI, CS: DWORD PTR STABLE; OBTENIR L'EMPLACEMENT DU STATUT SUR SI AJOUTER SI, $ & P; DÉCALAGE POUR CORRIGER ENDM
; structures below and use the BGISTAT macro.
+
  
BGISTAT MACRO P ; GET ES: --> BGI STATUS
+
par exemple, pour obtenir le rapport d'aspect d'un appareil
LES SI, CS:DWORD PTR STABLE ; GET LOCATION OF STATUS TO SI
+
ADD SI, $&P ; OFFSET TO CORRECT LOCATION
+
ENDM
+
  
; e.g., to obtain the aspect ratio of a device:
+
BGISTAT ASPEC MOV AX, ES: [SI]; (AX) = Y / X * 10000
  
BGISTAT ASPEC
+
[[catégorie:BGI]]
MOV AX, ES:[SI] ; (AX)= Y/X *10000
+
+

Version actuelle en date du 10 janvier 2020 à 23:36

L'interface graphique Borland (BGI) est un progiciel rapide, compact et indépendant de l'appareil pour le développement graphique intégré aux produits de langage Turbo Pascal, Turbo C et Turbo Prolog. L'indépendance du périphérique est obtenue via des pilotes spécifiques au périphérique chargeables appelés à partir d'un noyau commun. Ce document décrit les fonctionnalités BGI de base, ainsi que les étapes nécessaires pour créer de nouveaux pilotes de périphérique. Ce document est accompagné de fichiers contenant un exemple de code et d'autres informations pertinentes.

Nom du fichier Description du fichier

BH.C         BGI source de programme de construction d'en-tête de chargeur 
BH.EXE       BGI programme de construction d'en-tête de chargeur 
DEVICE.INC   Fichier de structure et de définition de macro 
DEBVECT.ASM  Table vectorielle pour l'exemple de pilote (DEBUG) 
DEBUG.C Module principal pour l'exemple de pilote 
MAKEFILE Fichier de construction 
BUILD.BAT Un fichier batch pour MAKE-phobics

Sommaire

   1 Architecture d'exécution BGI
   2 Modèle graphique BGI
   3 Section d'en-tête
   4 Le tableau d'état du pilote
   5 La table vectorielle des pilotes de périphériques
   6 descriptions vectorielles
   7 Détails de construction du pilote de périphérique
   8 Livre de recettes 

Architecture d'exécution BGI

Les programmes produits par les langues Borland créent des graphiques via deux entités agissant de concert: le noyau générique BGI et un pilote spécifique au périphérique. En règle générale, une application construite avec un compilateur Borland comprendra plusieurs fichiers de pilote de périphérique sur le disque de distribution (extension .BGI) afin que le programme puisse s'exécuter sur différents types d'écrans et d'imprimantes. Les demandes graphiques (par exemple, ligne de dessin, barre de dessin, etc.) sont envoyées par l'application au noyau BGI, qui à son tour fait des demandes au pilote de périphérique pour manipuler réellement le matériel.

Un pilote de périphérique BGI est une image binaire; c'est-à-dire une séquence d'octets sans symboles ou autres informations de liaison. Le pilote commence par un en-tête court, suivi d'une table vectorielle contenant les points d'entrée des fonctions à l'intérieur. L'équilibre du pilote comprend le code et les données nécessaires pour manipuler le matériel graphique cible.

Toutes les références de code et de données dans le pilote doivent être proches (c'est-à-dire, petit modèle, décalage uniquement), et le pilote entier, à la fois le code et les données, doit tenir dans les 64 Ko. En cours d'utilisation, le pilote de périphérique peut compter sur son chargement sur une limite de paragraphe. Le noyau BGI utilise une convention d'appel basée sur un registre pour communiquer avec le pilote de périphérique (décrit en détail ci-dessous).

Modèle graphique BGI

Lorsque vous examinez les fonctions répertoriées ici, gardez à l'esprit que BGI effectue la plupart des opérations de dessin en utilisant une couleur de dessin ou de traçage implicite (COLOR), une couleur de remplissage (FILLCOLOR) et un motif (FILLPATTERN). Par exemple, l'appel PIESLICE n'accepte aucune information de motif ou de couleur, mais utilise à la place la valeur COLOR précédemment définie pour tracer le bord de la tranche et les valeurs FILLCOLOR et FILLPATTERN précédemment définies pour l'intérieur.

Pour plus d'efficacité, de nombreuses opérations ont lieu à la position du pointeur actuel, ou CP. Par exemple, la routine LINE n'accepte qu'une seule paire de coordonnées (x, y), en utilisant le CP comme point de départ de la ligne et la paire de coordonnées transmise comme point d'arrivée. De nombreuses fonctions (LINE, pour n'en nommer qu'une) affectent CP, et la fonction MOVE peut être utilisée pour régler explicitement CP. Le système de coordonnées BGI place l'origine (pixel 0,0) dans le coin supérieur gauche de l'écran.

Section d'en-tête

La section d'en-tête de périphérique, qui doit être au début du pilote de périphérique, est construite à l'aide de la macro BGI définie dans le fichier DEVICE.INC. La macro BGI prend le nom du pilote de périphérique à construire comme argument. Par exemple, un pilote nommé DEBUG commencerait comme indiqué ici:

CSEG SEGMENT PARA PUBLIC 'CODE'; n'importe quel nom de segment peut être utilisé 
ASSUME DS: CSEG, CS: CSEG; cs = ds
CODESEG
INCLUDE DEVICE.INC; inclure le fichier device.inc BGI DEBUG; déclarer la section d'en-tête du périphérique

La section d'en-tête de périphérique déclare un point d'entrée spécial appelé EMULATE. Si l'action d'un vecteur de pilote de périphérique n'est pas prise en charge par le matériel d'un périphérique, l'entrée de vecteur doit contenir l'entrée EMULATE. Cela sera corrigé au moment du chargement pour contenir un saut dans la routine d'émulation du noyau. Ces routines émuleront l'action du vecteur en décomposant la demande en primitives plus simples. Par exemple, si le matériel a la fonctionnalité pour dessiner un arc, le vecteur d'arc contiendra l'adresse de la routine pour envoyer les données d'arc au matériel et apparaîtra comme suit:

dw offset ARC; Vecteur à la routine d'arc

Si, comme c'est souvent le cas, le matériel n'a pas la fonctionnalité d'afficher les arcs, le vecteur contiendrait à la place le vecteur EMULATE:

dw EMULATE

Le noyau prend en charge l'émulation pour les vecteurs suivants:

BAR Remplissage de rectangles 3D ARC Rendu d'arc elliptique PIESLICE Tranches de tarte elliptiques FILLED_ELLIPSE Ellipses remplies

Le tableau d'état du pilote

BGI requiert que chaque pilote contienne une table d'état du pilote (DST) pour déterminer les caractéristiques de base du périphérique auquel le pilote s'adresse. À titre d'exemple, le DST pour un écran CGA est affiché ici:

STATUS STRUC STAT DB 0; État actuel du périphérique (0 = aucune erreur) DEVTYP DB 0; Identifiant de type de périphérique (doit être 0) XRES DW 639; Résolution maximale du périphérique dans la direction X YRES DW 199; Résolution maximale de l'appareil dans la direction Y XEFRES DW 639; Résolution X effective de l'appareil YEFRES DW 199; Résolution Y efficace du périphérique XINCH DW 9000; Taille de l'appareil X en pouces * 1000 YINCH DW 7000; Périphérique Y Taille en pouces * 1000 ASPEC DW 4500; Rapport hauteur / largeur = (y_size / x_size) * 10000 DB 8h DB 8h; pour des raisons de compatibilité, utilisez ces valeurs DB 90h DB 90h STATUS ENDS

L'interface BGI fournit un système pour signaler les erreurs au noyau BGI et au code de niveau supérieur développé à l'aide des packages linguistiques de Borland. Cela se fait à l'aide du champ STAT de la table d'état du pilote. Ce champ doit être rempli par le code du pilote si une erreur est détectée lors de l'exécution de l'installation de l'appareil (INSTALL). Les codes d'erreur suivants sont prédéfinis dans le fichier d'inclusion GRAPHICS.H pour Turbo C et dans l'unité graphique pour Turbo Pascal.

grOk = 0 Fonctionnement normal, aucune erreur 
grNoInitGraph = -1 
grNotDetected = -2 
grFileNotFound = -3 
grInvalidDriver = -4 
grNoLoadMem = -5 
grNoScanMem = -6 
grNoFloodMem = -7 
grFontNotFound = -8 
grNoFontMem = -9 
grE = -9 -11 Erreur de pilote générique 
grIOerror = -12 
grInvalidFont = -13 
grInvalidFontNum = -14 
grInvalidDeviceNum = -15

Le champ suivant du tableau d'état des périphériques, DEVTYP, décrit la classe du périphérique que le pilote contrôle; pour les périphériques d'écran, cette valeur est toujours 0.

Les quatre champs suivants, XRES, YRES, XEFRES et YEFRES contiennent le nombre de pixels disponibles pour BGI sur cet appareil dans les dimensions horizontale et verticale, moins un. Pour les périphériques d'écran, XRES = XEFRES et YRES = YEFRES. Les champs XINCH et YINCH correspondent au nombre de pouces horizontalement et verticalement dans lesquels les pixels de l'appareil sont mappés, multiplié par 1000. Ces champs, associés à XRES et YRES, permettent le calcul de la résolution de l'appareil (DPI ou points par pouce).

Résolution horizontale (DPI) = (XRES + 1) / (XINCH / 1000) Résolution verticale (DPI) = (YRES + 1) / (YINCH / 1000)

Le champ ASPEC (rapport d'aspect) est effectivement une paire multiplicateur / diviseur (le diviseur est toujours 10000) qui est appliqué aux valeurs de coordonnées Y pour produire des images ajustées au rapport d'aspect (par exemple, des cercles ronds). Par exemple, un champ ASPEC de 4500 implique que l'application devra transformer les coordonnées Y par le rapport 4500/10000 lors du dessin de cercles sur ce périphérique si elle s'attend à ce qu'elles soient rondes. Les variations de moniteur individuelles peuvent nécessiter un ajustement supplémentaire par l'application.

La table vectorielle des pilotes de périphériques

Les routines du pilote de périphérique sont accessibles via une table vectorielle. Ce tableau se trouve au début du pilote et contient des décalages 16 bits vers les sous-programmes et les tableaux de configuration dans le pilote. Le format de la table vectorielle est indiqué ci-dessous.

VECTOR_TABLE:

DW INSTALL;  Initialisation et installation du pilote
DW INIT;  Initialiser le périphérique pour la sortie
DW CLEAR;  Dispositif graphique clair;  obtenir un nouvel écran
DW POST;  Quittez le mode graphique, déchargez le traceur, etc.
DW MOVE;  Déplacer le pointeur actuel (CP) vers (X, Y)
DW DRAW;  Tracer une ligne de (CP) à (X, Y)
DW VECT;  Tracez une ligne de (X0, Y0) à (X1, Y1)
DW EMULATE;  Réservé, doit contenir un vecteur d'émulation
DW BAR;  Barre 3D remplie de (CP) à (X, Y)
DW PATBAR;  Rectangle à motifs de (X, Y) à (X1, Y1)
DW ARC;  Définir l'ARC
DW PIESLICE;  Définir une part de tarte elliptique
DW FILLED_ELLIPSE;  Dessinez une ellipse remplie
PALETTE DW;  Charger une entrée de palette
DW ALLPALETTE;  Charger la palette complète
COULEUR DW;  Définir la couleur / l'arrière-plan du dessin actuel
DW FILLSTYLE;  Contrôle et style de remplissage
DW LINESTYLE;  Contrôle du style de dessin au trait
DW TEXTSTYLE;  Contrôle des polices matérielles
DW TEXT;  Hardware Draw text at (CP)
DW TEXTSIZ;  Requête de taille de police matérielle
DW RÉSERVÉ;  Réservé
DW FLOODFILL;  Remplir une région délimitée
DW GETPIX;  Lire un pixel de (X, Y)
DW PUTPIX;  Écrire un pixel dans (X, Y)
DW BITMAPUTIL;  Fonction de requête de taille de bitmap
DW SAVEBITMAP;  BITBLT de l'écran à la mémoire système
DW RESTOREBITMAP;  BITBLT de la mémoire système à l'écran
DW SETCLIP;  Définir un rectangle de détourage
DW COLOR_QUERY;  Requête d'informations sur la table des couleurs
 ;  35 vecteurs supplémentaires sont réservés pour une utilisation future de Borland.
;
DW RÉSERVÉ;  Réservé à l'usage de Borland (1)
DW RÉSERVÉ;  Réservé à l'usage de Borland (2)
DW RÉSERVÉ;  Réservé à l'usage de Borland (3)
.
.
.
DW RÉSERVÉ;  Réservé à l'usage de Borland (33)
DW RÉSERVÉ;  Réservé à l'usage de Borland (34)
DW RÉSERVÉ;  Réservé à l'usage de Borland (35)
;
;  Tout vecteur suivant ce bloc peut être utilisé par
;  développeurs de pilotes de périphériques indépendants comme bon leur semble.
;

Descriptions des vecteurs

Les informations suivantes décrivent l'entrée, la sortie et la fonction de chacune des fonctions accessibles via la table vectorielle des périphériques.

DW offset INSTALL; installation du pilote de périphérique

Le noyau appelle le vecteur INSTALL pour préparer le pilote de périphérique à l'utilisation. Un code de fonction est passé en AL. Les codes de fonction suivants sont définis:

>>> Installer l'appareil: AL = 00 Entrée: CL = Numéro de mode pour l'appareil

Retour: ES: BX -> Tableau d'état du périphérique (voir la structure STATUS, ci-dessus)

La fonction INSTALL est destinée à informer le pilote des paramètres de fonctionnement qui seront utilisés. L'appareil ne doit pas être mis en mode graphique (voir INIT). En entrée, CL contient le mode dans lequel l'appareil fonctionnera. (voir la déclaration BGI setgraphmode)


La valeur de retour de la fonction Installer le périphérique est un pointeur vers un tableau d'état du périphérique (décrit précédemment).

>>> Requête de mode: AL = 001h Entrée:

Rien

Return: CX Le nombre de modes pris en charge par cet appareil.

La fonction MODE QUERY est utilisée pour demander le nombre maximum de modes pris en charge par ce pilote de périphérique.


>>> Noms de mode: AL = 002h Entrée: CX Le numéro de mode de la requête.

Retour: ES: BX -> une chaîne Pascal contenant le nom

La fonction NOMS DE MODE est utilisée pour rechercher la forme ASCII du numéro de mode présent dans CX. La valeur de retour dans ES: BX pointe vers une chaîne Pascal décrivant le mode donné. (Remarque: une chaîne Pascal ou _length_ est une chaîne dans laquelle le premier octet de données est le nombre de caractères de la chaîne, suivi des données de chaîne elles-mêmes.) Pour faciliter l'accès à ces chaînes à partir de C, les chaînes doivent être suivi d'un octet zéro, bien que cet octet zéro ne doive pas être inclus dans la longueur de la chaîne. Voici un exemple de ce format:

NOM: db 16, 'Mode 1280 x 1024', 0


DW offset INIT; Initialiser le périphérique pour la sortie

Entrée: ES: BX -> Tableau d'informations sur le périphérique

Retour: Rien

Ce vecteur est utilisé pour changer un appareil déjà installé du mode texte au mode graphique. Ce vecteur doit également initialiser les palettes par défaut et les informations sur le mode de dessin selon les besoins. L'entrée de ce vecteur est une table d'informations sur les appareils (DIT). Le format du DIT est indiqué ci-dessous et contient la couleur d'arrière-plan et un indicateur d'initialisation. Si l'appareil nécessite des informations supplémentaires au moment INIT, ces valeurs peuvent être ajoutées au DIT. Il n'y a pas de valeur de retour pour cette fonction. Si une erreur se produit pendant l'initialisation du périphérique, le champ STAT du tableau d'état du périphérique doit être chargé avec la valeur d'erreur appropriée.

                            • Définition du tableau d'informations sur le périphérique **************

struct DIT DB 0; Couleur de fond pour initialiser l'écran DB 0; Drapeau Init; 0A5h = ne pas initier; n'importe quoi

else = init

DB 64 dup 0; Réservé à une utilisation future de Borland

informations utilisateur supplémentaires ici

DIT se termine


DW offset CLEAR; Effacez le périphérique graphique

Entrée: rien

Retour: Rien

Ce vecteur est utilisé pour effacer le périphérique graphique dans un état connu. Dans le cas d'un appareil CRT, l'écran est effacé. Dans le cas d'une imprimante ou d'un traceur, le papier est avancé et les stylos sont renvoyés à la station.


DW offset POST; Quitter le mode graphique

Entrée: rien

Retour: Rien

Cette routine est utilisée pour fermer le système graphique. Dans le cas d'écrans graphiques ou d'imprimantes, le mode doit être remis en mode texte. Pour les traceurs, le papier doit être déchargé et les stylos doivent être retournés à la station.


DW offset MOVE; Déplacer le pointeur de dessin courant

Entrée: AX la nouvelle coordonnée CP x BX la nouvelle coordonnée CP y

Retour: Rien

Définit le pointeur actuel du pilote (CP) sur (AX, BX). Cette fonction est utilisée avant l'une des routines TEXT, ARC, SYMBOL, DRAW, FLOODFILL, BAR ou PIESLICE pour définir la position où le dessin doit avoir lieu.


DW offset DRAW; Tracez une ligne de (CP) à (X, Y)

Entrée: AX La coordonnée x de fin pour la ligne BX La coordonnée y de fin pour la ligne

Retour: Rien


Tracez une ligne du CP à (X, Y). Le paramètre LINESTYLE actuel est utilisé. Le pointeur actuel (CP) est mis à jour au point final de la ligne.


DW VECT; Tracez une ligne de (X1, Y1) à (X2, Y2)

Entrée: AX X1; La coordonnée X de départ pour la ligne BX Y1; La coordonnée Y de début pour la ligne CX X2; La coordonnée X de fin pour la ligne DX Y2; La coordonnée Y de fin pour la ligne

Retour: Rien

Trace une ligne de (X1, Y1) à (X2, Y2). Le paramètre LINESTYLE actuel est utilisé pour tracer la ligne. Remarque: le CP n'est PAS modifié par ce vecteur.


DW BAR; remplir et contourner le rectangle (CP), (X, Y)

Entrée: AX X - bord droit du rectangle BX Y - bord inférieur du rectangle CX 3D = largeur de la barre 3D (ht: = .75 * wdt); 0 = pas d'effet 3D DX Pavillon haut de la barre 3D; si CX <> 0 et DX = 0, dessinez un sommet

Retour: Rien

Remplit et décrit une barre (rectangle) à l'aide des couleurs COLOR, FILLCOLOR et FILLPATERN actuelles. Le pointeur actuel définit le coin supérieur gauche du rectangle et (X, Y) est inférieur droit. Un effet d'ombre 3D en option (destiné aux programmes graphiques d'entreprise) est obtenu en rendant CX non nul. DX sert alors de drapeau indiquant si un sommet doit être dessiné sur la barre.


DW PATBAR; remplir le rectangle (X1, Y1), (X2, Y2)

Entrée: AX X1 - la coordonnée gauche du rectangle BX Y1 - la coordonnée supérieure du rectangle CX X2 - la coordonnée droite du rectangle DX Y2 - la coordonnée inférieure du rectangle

Retour: Rien

Remplissez (mais ne dessinez pas) le rectangle indiqué avec le motif de remplissage et la couleur de remplissage actuels.


DW ARC; Dessinez un arc elliptique

Entrée: AX L'angle de départ de l'arc en degrés (0-360) BX L'angle de fin de l'arc en degrés (0-360) CX Rayon X de l'arc elliptique DX Rayon Y de l'arc elliptique

Retour: Rien

ARC dessine un arc elliptique en utilisant le (CP) comme point central de l'arc, de l'angle de départ donné à l'angle de fin donné. Pour obtenir des arcs circulaires, l'application (et non le pilote) doit ajuster le rayon Y comme suit:

YRAD: = XRAD * (ASPEC / 10000)

où ASPEC est la valeur d'aspect stockée dans le DST.


DW PIESLICE; Dessinez une part de tarte elliptique

Entrée: AX L'angle de début de la tranche en degrés (0-360) BX L'angle de fin de la tranche en degrés (0-360) CX Rayon X de la tranche elliptique DX Rayon Y de la tranche elliptique

Retour: Rien

PIESLICE dessine une tranche de tarte elliptique remplie (ou un coin) en utilisant CP comme centre de la tranche, de l'angle de début donné à l'angle de fin donné. Le FILLPATTERN et le FILLCOLOR actuels sont utilisés pour remplir la tranche et sont décrits dans le COLOR actuel. Pour obtenir des tranches de tarte circulaires, l'application (et non le pilote) doit ajuster le rayon Y comme suit:

YRAD: = XRAD * ASPEC / 10000

où ASPEC est la valeur d'aspect stockée dans le DST du pilote.


DW FILLED_ELLIPSE; Dessinez une ellipse remplie à (CP)

Entrée: AX X Rayon de l'ellipse BX Y Rayon de l'ellipse

Retour: Rien

Ce vecteur est utilisé pour dessiner une ellipse remplie. Le point central de l'ellipse est supposé être au pointeur actuel (CP). Le registre AX contient le rayon X de l'ellipse et le registre BX contient le rayon Y de l'ellipse.


PALETTE DW; Charger une entrée de couleur dans la palette

Entrée: AX Le numéro d'index et le code de fonction pour le chargement BX La valeur de couleur à charger dans la palette

Retour: Rien

Le vecteur PALETTE est utilisé pour charger des entrées uniques dans la palette. Le registre AX contient le code de fonction pour l'action de chargement et l'index de l'entrée de table de couleurs à charger. Les deux bits supérieurs d'AX déterminent l'action à entreprendre. Le tableau ci-dessous présente les actions. Si les bits de contrôle sont 00, l'index de la table des couleurs dans (AXE ET 03FFFh) est chargé avec la valeur dans BX. Si les bits de contrôle sont 10, l'index de la table des couleurs dans (AXE ET 03FFFh) est chargé avec la valeur RVB dans (Rouge = BX, Vert = CX et Bleu = DX). Si les bits de contrôle sont 11, l'entrée de la table des couleurs pour l'arrière-plan est chargée avec la valeur dans BX.

Valeur et indice de couleur des bits de contrôle

00 Le registre BX contient la couleur, AX est l'index 01 non utilisé 10 Rouge = BX Vert = CX Bleu = DX, AX est l'index 11 Le registre BX contient la couleur de l'arrière-plan


DW ALLPALETTE; Charger la palette complète

Entrée: ES: BX -> tableau d'entrées de palette

Retour: Rien

La routine ALLPALETTE charge toute la palette en un seul appel de pilote. La paire de registres ES: BX pointe vers la table de valeurs à charger dans la palette. Le nombre d'entrées est déterminé par les entrées de couleur dans le tableau d'état du pilote. La couleur d'arrière-plan n'est pas explicitement chargée avec cette commande.


COULEUR DW; Chargez la couleur de dessin actuelle.

Entrée: AL Le numéro d'index de la couleur de dessin actuelle AH Le numéro d'index de la couleur de remplissage

Retour: Rien

Le vecteur COULEUR est utilisé pour déterminer la couleur de dessin actuelle. La valeur dans AL est l'index dans la palette de la nouvelle couleur de dessin actuelle. La valeur dans le registre AH est l'indice de couleur de la nouvelle couleur de remplissage. Toutes les primitives sont dessinées avec la couleur de dessin actuelle jusqu'à ce que la couleur soit modifiée.

La couleur de remplissage est utilisée pour la couleur intérieure des primitives de barres, de polygones, de tranches de tarte et de remplissage.


DW FILLSTYLE; Définir le motif de remplissage

Entrée: AL Numéro de motif de remplissage principal ES: BX Si le numéro de motif est 0FFh, cela pointe vers le masque de motif défini par l'utilisateur.

Retour: Rien


Définit le motif de remplissage pour le dessin. Le motif de remplissage est utilisé pour remplir toutes les régions délimitées (BAR, POLY et PIESLICE). Les numéros des motifs de remplissage prédéfinis sont les suivants:

Code Description Modèle de remplissage à 8 octets

0 Sans remplissage 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 1 Remplissage solide 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh 2 Remplissage de ligne 0FFh, 0FFh, 000h, 000h, 0FFh, 0FFh , 000h, 000h 3 Lt Slash Fill 001h, 002h, 004h, 008h, 010h, 020h, 040h, 080h 4 Slash Fill 0E0h, 0C1h, 083h, 007h, 00Eh, 01Ch, 038h, 070h 5 Backslash Fill 0F0h, 078h, 03Ch 01Eh, 00Fh, 087h, 0C3h, 0E1h 6 Lt Bkslash Fill 0A5h, 0D2h, 069h, 0B4h, 05Ah, 02Dh, 096h, 04Bh 7 Hatch Fill 0FFh, 088h, 088h, 088h, 0FFh, 088h, 088h, 088h , 042h, 024h, 018h, 018h, 024h, 042h, 081h 9 Interleave Fill 0CCh, 033h, 0CCh, 033h, 0CCh, 033h, 0CCh, 033h 10 Wide Dot Fill 080h, 000h, 008h, 000h, 080h, 000h, 008h, 000h 11 Close Dot Fill 088h, 000h, 022h, 000h, 088h, 000h, 022h, 000h

0FFh L'utilisateur définit le motif du remplissage.

Dans le cas d'un motif de remplissage défini par l'utilisateur, la paire de registres ES: BX pointe vers 8 octets de données agencées sous la forme d'un motif de 8 x 8 bits à utiliser pour le motif de remplissage.


DW LINESTYLE; Définir le motif de dessin au trait

Entrée: AL Numéro de motif de ligne BX Modèle de dessin au trait défini par l'utilisateur CX Largeur de ligne pour le dessin

Retour: Rien

Définit le style de dessin au trait actuel et la largeur de la ligne. La largeur de ligne est soit d'un pixel soit de trois pixels de largeur. Le tableau suivant définit les styles de ligne par défaut:

Code Description Motif 16 bits AL = 0 Style de ligne continue 1111111111111111B AL = 1 Ligne pointillée 1100110011001100B AL = 2 Ligne centrale 1111110001111000B AL = 3 Ligne pointillée 1111100011111000B AL = 4 Style de ligne défini par l'utilisateur

Si la valeur dans AL est quatre, l'utilisateur définit un style de ligne dans le registre BX. Si la valeur dans AL n'est pas quatre, la valeur dans le registre BX est ignorée.


DW TEXTSTYLE; Contrôle du style de texte matériel

Entrée: AL Numéro de police matérielle AH Orientation de la police matérielle 0 = Normal, 1 = 90 degrés, 2 = Vers le bas BX Caractère X souhaité (taille en unités graphiques) CX Caractère Y souhaité (taille en unités graphiques)

Retour: BX Closest X Taille de caractère disponible (en unités graphiques) CX Closest Y Taille de caractère disponible (en unités graphiques)

Le vecteur TEXTSTYLE est utilisé pour définir les attributs de la police matérielle pour la sortie. Les paramètres affectés sont la police matérielle à utiliser, l'orientation de la police pour la sortie, la hauteur et la largeur souhaitées de la sortie de la police. Tout le texte suivant sera dessiné en utilisant ces attributs.

Si la taille souhaitée n'est pas prise en charge par le périphérique actuel, la correspondance disponible la plus proche de la taille souhaitée doit être utilisée. La valeur de retour de cette fonction donne les dimensions de la police (en pixels) qui seront réellement utilisées.

Par exemple, si la police souhaitée est de 8 x 10 pixels et que l'appareil prend en charge les polices 8 x 8 et 16 x 16, la correspondance la plus proche sera la 8 x 8. La sortie de la fonction sera BX = 8 et CX = 8.


DW TEXT; Sortie de texte matériel sur (CP)

Entrée: ES: BX -> texte ASCII de la chaîne CX La longueur (en caractères) de la chaîne.

Cette fonction est utilisée pour envoyer du texte matériel au périphérique de sortie. Le texte est envoyé à l'appareil à partir du (CP). Le (CP) est supposé être en haut à gauche de la chaîne.


DW TEXTSIZ; Déterminer la hauteur et la largeur du texte

chaînes en unités graphiques.

Entrée: ES: BX -> texte ASCII de la chaîne CX La longueur (en caractères) de la chaîne.

Retour: BX La largeur de la chaîne en unités graphiques. CX La hauteur de la chaîne en unités graphiques.

Cette fonction est utilisée pour déterminer la longueur et la largeur physiques réelles d'une chaîne de texte. Les attributs de texte actuels (définis par TEXTSTYLE) sont utilisés pour déterminer les dimensions réelles d'une chaîne sans l'afficher. L'application peut ainsi déterminer comment une chaîne spécifique s'adaptera et réduire ou augmenter la taille de la police selon les besoins. Il n'y a AUCUNE sortie graphique pour ce vecteur. Si une erreur se produit pendant le calcul de la longueur, le champ STAT de l'enregistrement d'état du périphérique doit être marqué avec le code d'erreur du périphérique.


DW FLOODFILL; Remplir une région délimitée à l'aide d'un remplissage d'inondation

Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ CL La couleur de la limite pour le remplissage d'inondation

Retour: rien (les erreurs sont renvoyées dans le champ STAT de l'état du périphérique).

Cette fonction est appelée pour remplir une région délimitée sur des périphériques bitmap. La coordonnée d'entrée (X, Y) est utilisée comme point de départ pour le remblayage. (CP) devient le point de départ. Le FILLPATTERN actuel est utilisé pour inonder la région.


DW GETPIXEL; Lire un pixel sur l'écran graphique

Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ

Retour: DL L'indice de couleur du pixel lu sur l'écran.

GETPIXEL lit la valeur d'index de couleur d'un seul pixel sur l'écran graphique. La valeur de l'indice de couleur est renvoyée dans le registre DL.


DW PUTPIXEL; Écrivez un pixel sur l'écran graphique

Entrée: AX La coordonnée x pour le point de départ BX La coordonnée y pour le point de départ DL L'indice de couleur du pixel lu sur l'écran.

Retour: Rien

PUTPIXEL écrit un seul pixel avec la valeur d'index de couleur contenue dans le registre DL.


DW BITMAPUTIL; Tableau des fonctions des utilitaires bitmap

Entrée: rien

Retour: ES: BX -> Table des utilitaires BitMap.


Le vecteur BITMAPUTIL charge un pointeur dans ES: BX, qui est la base d'un tableau définissant des points d'entrée de cas spéciaux utilisés pour la manipulation des pixels. Ces fonctions ne sont actuellement appelées que par les routines d'émulation d'ellipse qui se trouvent dans le noyau BGI. Si le pilote de périphérique n'utilise pas d'émulation pour les ellipses, cette entrée n'a pas besoin d'être implémentée. Cette entrée a été fournie car certains matériels nécessitent des commandes supplémentaires pour entrer et sortir du mode pixel, ajoutant ainsi une surcharge aux vecteurs GETPIXEL et SETPIXEL. Cette surcharge a affecté la vitesse de dessin des routines d'émulation d'ellipse. Ces points d'entrée sont fournis pour que les routines d'émulation d'ellipse puissent entrer en mode pixel et rester en mode pixel pendant la durée du processus de rendu d'ellipse.

Le format de la table BITMAPUTIL est le suivant:

DW offset GOTOGRAPHIC; Entrer en mode pixel sur le matériel graphique DW offset EXITGRAPHIC; Laisser le mode pixel sur le matériel graphique DW offset PUTPIXEL; Ecrire un pixel sur le matériel graphique DW offset GETPIXEL; Lire un pixel à partir du matériel graphique DW offset GETPIXBYTE; Renvoie un mot contenant la profondeur de pixel DW offset SET_DRAW_PAGE; Sélectionnez la page dans laquelle dessiner les primitives DW offset SET_VISUAL_PAGE; Définissez la page à afficher DW offset SET_WRITE_MODE; Contrôle de dessin au trait XOR

Les paramètres de ces fonctions sont les suivants:

GOTOGRAPHIQUE; Entrer en mode pixel sur le matériel graphique Cette fonction est utilisée pour entrer dans le mode spécial Pixel Graphics.

EXITGRAPHIQUE; Laisser le mode pixel sur le matériel graphique Cette fonction est utilisée pour quitter le mode graphique spécial pixel.

PUTPIXEL; Écrire un pixel sur le matériel graphique Cette fonction a le même format que l'entrée PUTPIXEL décrite ci-dessus.

GETPIXEL; Lire un pixel à partir du matériel graphique Cette fonction a le même format que l'entrée GETPIXEL décrite ci-dessus.

GETPIXBYTE; Renvoyer un mot contenant la profondeur de pixel Cette fonction renvoie le nombre de bits par pixel (profondeur de couleur) du matériel graphique dans le registre AX.

SET_DRAW_PAGE; Sélectionner des pages graphiques de sortie alternatives (le cas échéant) Cette fonction prend le numéro de page souhaité dans le registre AL et sélectionne des pages graphiques alternatives pour la sortie des primitives graphiques.

SET_VISUAL_PAGE; Sélectionner les autres pages graphiques visibles (le cas échéant) Cette fonction prend le numéro de page souhaité dans le registre AL et sélectionne des graphiques alternatifs à afficher à l'écran.

SET_WRITE_MODE; Contrôle du mode de dessin des lignes XOR. Le mode XOR est sélectionné si la valeur dans AX est un et désactivé si la valeur dans AX est zéro.


DW SAVEBITMAP; Écrire de la mémoire d'écran à la mémoire système

Entrée: ES: BX Pointe vers le tampon de la mémoire système à écrire. ES: [BX] contient la largeur du rectangle -1. ES: [BX + 2] contient la hauteur du rectangle -1.

CX La coordonnée X supérieure gauche du rectangle. DX La coordonnée Y supérieure gauche du rectangle.

Retour: Rien

La routine SAVEBITMAP est une routine de copie de bloc qui copie les pixels d'écran d'un rectangle défini comme spécifié par (SI, DI) - (CX, DX) dans la mémoire système.


DW RESTOREBITMAP; Écrivez la mémoire d'écran sur l'écran.

Entrée: ES: BX Pointe vers le tampon de la mémoire système à lire. ES: [BX] contient la largeur du rectangle -1. ES: [BX + 2] contient la hauteur du rectangle -1.

CX La coordonnée X supérieure gauche du rectangle. DX La coordonnée Y supérieure gauche du rectangle.

AL Opération pixel à utiliser lors du transfert de l'image dans la mémoire graphique. Mode d'écriture pour l'écriture de blocs. 0: mode de remplacement 1: mode XOR 2: mode OU 3: mode ET 4: mode complément

Retour: Rien

Le vecteur RESTOREBITMAP est utilisé pour charger les pixels d'écran de la mémoire système. La routine lit un flux d'octets de la mémoire système dans le rectangle défini par (SI, DI) - (CX, DX). La valeur du registre AL définit le mode utilisé pour l'écriture. Le tableau suivant définit les valeurs des modes d'écriture disponibles:

Pixel Operation Code Overwrite mode 0 Logique XOR 1 Logique OU 2 Logique ET 3 Complément 4


DW SETCLIP; Définir un rectangle de détourage

Saisie: AX Coordonnée X supérieure gauche du rectangle de détourage BX Coordonnée Y supérieure gauche du rectangle de détourage CX Coordonnée X inférieure droite du rectangle de détourage DX Coordonnée Y inférieure droite du rectangle de détourage

Retour: Rien

Le vecteur SETCLIP définit une zone de découpage rectangulaire à l'écran. Les registres (AX, BX) - (CX, DX) définissent la région d'écrêtage.


DW offset COLOR_QUERY; Requête d'informations sur la couleur de l'appareil

Ce vecteur est utilisé pour se renseigner sur les capacités de couleur d'un matériel donné. Un code de fonction est transmis au pilote dans AL. Les codes de fonction suivants sont définis:

>>> Taille de la table des couleurs AL = 000h Entrée: Aucune:

Retour: BX La taille de la table de correspondance des couleurs. CX Le nombre de couleurs maximum autorisé.

La requête COLOR TABLE SIZE est utilisée pour déterminer le nombre maximal de couleurs prises en charge par le matériel. La valeur renvoyée dans le registre BX est le nombre d'entrées de couleur dans la table de recherche des couleurs. La valeur renvoyée dans le registre CX est le nombre le plus élevé pour une valeur de couleur. Cette valeur est généralement la valeur en BX moins un; cependant, il peut y avoir des exceptions.


>>> Tableau des couleurs par défaut AL = 001h Entrée: rien

Retour: ES: BX -> table de couleurs par défaut pour l'appareil

La fonction TABLEAU DES COULEURS PAR DÉFAUT est utilisée pour déterminer les valeurs de la table des couleurs pour la table des couleurs par défaut (au démarrage). Le format de ce tableau est un octet contenant le nombre d'entrées valides, suivi du nombre donné d'octets d'informations de couleur.

Détails sur la construction du pilote de périphérique

Le code source d'un exemple, quoique inhabituel, de pilote de périphérique BGI est inclus avec cette boîte à outils pour aider les développeurs à créer le leur. Le pilote de démonstration est fourni dans deux fichiers, DEBVECT.ASM et DEBUG.C. Ce pilote de «débogage» ne dessine pas réellement de graphiques, mais envoie simplement des messages descriptifs à l'écran de la console (via l'appel de fonction DOS 9) lors de la réception des commandes. Au lieu de simplement lire des commandes, votre propre pilote serait structuré de la même manière, mais accéderait aux ports de contrôle et à la mémoire de l'écran pour exécuter chaque fonction.

Livre de recettes

1. Compilez ou assemblez les fichiers requis.

2. Reliez les fichiers ensemble, en vous assurant que la table vectorielle des périphériques est le premier module du lien.

3. Exécutez EXETOBIN sur le fichier .EXE ou .COM résultant pour produire un fichier .BIN. Aucune correction de réinstallation ne devrait être requise.

4. Exécutez le programme BH (fourni avec la boîte à outils) sur le fichier .BIN pour produire le fichier .BGI.

Le pilote résultant est maintenant prêt pour les tests. Examinez le fichier TEST.C pour un exemple d'installation, de chargement et d'appel d'un pilote de périphérique nouvellement créé.


Exemples

Pour appeler une fonction BGI à partir du langage d'assemblage, incluez le structure ci-dessous et utilisez la macro CALLBGI.

CALLBGI MACRO P MOV SI, $ & P; METTRE L'OPCODE DANS (SI) APPELER CS: DWORD PTR BGI_ADD; BGI_ADD POINTS TO DRIVER ENDM

Par exemple, pour tracer une ligne de (10,15) à (200,300)

MOV AX, 10 MOV BX, 15 MOV CX, 200 MOV DX, 300 CALLBGI VECT


Pour indexer un élément dans la table d'état, incluez la table d'état structures ci-dessous et utilisez la macro BGISTAT.

BGISTAT MACRO P; OBTENIR ES: -> BGI STATUS LES SI, CS: DWORD PTR STABLE; OBTENIR L'EMPLACEMENT DU STATUT SUR SI AJOUTER SI, $ & P; DÉCALAGE POUR CORRIGER ENDM

par exemple, pour obtenir le rapport d'aspect d'un appareil

BGISTAT ASPEC MOV AX, ES: [SI]; (AX) = Y / X * 10000