![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Suiv.: Liste des périphériques disponibles
Sup.: 8 Adaptation d'un nouveau terminal
Préc.: Adaptation d'un nouveau terminal en
Index
Table des matières
Le lien entre FORTRAN 3D et les terminaux de sortie s'effectue par l'intermédiaire des 2 deux sous-programmes PERFGN et ITRCTG.
PERFGN sert d'interface entre le logiciel graphique FORTRAN 3D et votre périphérique de base. ITRCTG a été présenté dans le paragraphe précédent.
PERFGN :
------
SUBROUTINE PERFGN(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
CHARACTER *(*)STRING
REAL V1(*), V2(*), V3(*)
INTEGER ICH(*)
include 'data_f3d.ins'
GOTO(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), IDEVIC
C SI IDEVIC=0 ON AFFECTE LE NOMBRE DE DEVICES A ICH(1)
IF(IDEVIC.EQ.0)THEN
C ICH(1) = NOMBRE DE PERIPHERIQUES DISPONIBLES
ICH(1)=11
RETURN
ENDIF
CALL PERIFX(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
001 CONTINUE
C APOLLO
CALL PERIF5(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
002 CONTINUE
C LASER_WRITER(POST_SCRIPT)
CALL PERIFD(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
003 CONTINUE
C X_WINDOW_V11
CALL PERIFX11(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
004 CONTINUE
C TEKTRONIX_4014
CALL PERIF1(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
005 CONTINUE
C APOLLO_5
CALL PERIF5(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
006 CONTINUE
C IMPRIMANTE
CALL PERIF7(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
007 CONTINUE
C VERSATEK_SPECTRUM_V80
CALL PERIF8(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
008 CONTINUE
C VERSATEK_V80
CALL PERIFC(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
009 CONTINUE
C TEKTRONIX_4107
CALL PERIFE(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
010 CONTINUE
C TEKTRO_4105
CALL PERIFN(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
011 CONTINUE
C PHIGS
CALL PERPHG(INSTRU, V1, V2, V3, I1, I2, I3, ICH, STRING)
RETURN
END
Attention : Si vous ajoutez ou supprimez un terminal n'oubliez pas de modifier la valeur de ICH(1) (le nombre de terminaux disponibles) et le GOTO indexé.
Dans un driver quelconque les paramètres ont pour signification :
L'utilisation de ces variables dépend de INSTRU (cf. ci-dessous).
Pour utiliser un terminal graphique, non déjà fourni dans la bande Modulef, il suffit d'écrire le programme PERIF* (cf. ci-dessous) et d'en réaliser l'appel dans PERFGN.
INSTRU a des significations très particulières s'il est négatif :
IF(INSTRU.LT.0)THEN {INTERROGATION DU DEVICE}
IF( INSTRU.EQ.-1)THEN
C IMPRESSION DANS I1= NUMERO D'ORDRE
CALL WCHARI(I1, 'PERIPHERIQUE XXX')
RETURN
ELSEIF(INSTRU.EQ.-2)THEN
C DEFINITION DES PARAMETRE D'APPEL AVEC DIALOGUE
ON AFFECTE AVEC UN DIALOGUE LES PARAMETRES D'APPEL
QUE L'ON MET DANS ICH(1), ICH(2), ... STRING
RETURN
ELSEIF(INSTRU.EQ.-3)THEN
C PARAMETRES PAR DEFAUT (SANS DIALOGUE)
ICH(1)=STD { AFFICHAGE STANDARD : PLEIN ECRAN }
ICH(2)=2 { COULEUR DU FOND}
STRING='BLABLA'
RETURN
ENDIF
ENDIF
CALL WCHARI(INSTRU, ' EST UNE VALEUR INCOMPREHENSIBLE')
RETURN
GOTO INDEXE SELON LES VALEURS >0 DE INSTRU
GOTO(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
+ 23,24,25,26,27,28,29,30,31,32,33,34,35), INSTRU
Les différentes taches à effectuer, repérées par INSTRU, sont détaillées ci-dessous :
INSTRU = 1 : INITIALISATIONS DU TERMINAL (DEVICE)
----------
IN : I1 : NUMERO DU TERMINAL ACTIF
ICH(*) ET STRING : INFORMATIONS SUPPLEMENTAIRES
PROPRES A CERTAINS TERMINAUX
TOUTES LES VARIABLES UTILES SONT INITIALISEES PAR DEFAUT.
(PAR EXEMPLE : TYPE DES TRAITS, TAILLE DES TEXTES, ...)
INSTRU = 2 : DEFINITION DES CARACTERISTIQUES GRAPHIQUES (LIGH3)
----------
IN : I1 : INTENSITE (SI >= 0 ON AFFECTE)
I2 : CLIGNOTEMENT (0 NON, 1 OUI) (SI >= 0 ON AFFECTE)
SI STEREO ( DROITE=4 / GAUCHE=2 )
I3 : NUMERO DE LA COULEUR DANS LA TABLE DES COULEURS
(SI >= 0 ON AFFECTE)
INSTRU = 3 : DEFINITION DES TRAITS (DRAW3)
----------
IN : I1 : TYPE DU TRAITS (PLEIN, POINTILLE ...)
ON DEFINIT : TYPE = I1
SI I1 < 0 PAS DE TRACE DES TRAITS
V1(1) : EPAISSEUR DU TRAIT EN MM. (SI >= 0 ON AFFECTE)
INSTRU = 4 : TRACE D'UN SEGMENT DE DROITE (LIN2TO, LIN3TO, ...)
----------
IN : V1(1) : ABSCISSE DU DEBUT DU SEGMENT
V1(2) : ORDONNEE DU DEBUT DU SEGMENT
V2(1) : ABSCISSE DE LA FIN DU SEGMENT
V2(2) : ORDONNEE DE LA FIN DU SEGMENT
SI TYPE < 0 PAS DE TRACE
INSTRU = 5 : TRACE D'UN TEXTE (TXT2D, TXT3D, ...)
----------
IN : I1 : NOMBRE DE CARACTERES DU TEXTE
V1(1) : ABSCISSE DU DEBUT DU TEXTE
V1(2) : ORDONNEE DU DEBUT DU TEXTE
STRING : LE TEXTE
SI TYPE < 0 PAS DE TRACE
SI I1 = 1 ET STRING(1:1) APPARTIENT A UN ENSEMBLE
DE CARACTERES CENTRABLES ( O O X X + * 0 ) CENTREZ
LE CARACTERE.
INSTRU = 6 : DEBUT D'UNE ZONE DESIGNABLE (DEBAS)
----------
IN : I1 : IDENTIFICATEUR DE LA ZONE
INSTRU = 7 : FIN D'UNE ZONE DESIGNABLE (FINAS)
----------
INSTRU = 8 : CARACTERISTIQUES DU TRACE DES TEXTES (DRW3TX)
----------
IN : I1 : NUMERO DE LA POLICE DE CARACTERES DISPONIBLE
I1=0 ON CHERCHE LA POLICE QUI A LA TAILLE
LA PLUS PROCHE DE CELLE DEMANDEE
I1#0 ON PREND LA POLICE I1
V1(1) : TAILLE DES CARACTERES EN CM.
V2(1) : ANGLE DU TEXTE PAR RAPPORT A L'HORIZONTALE
(EN FRACTION DE PI / 2.)
INSTRU = 9 : DEBUT D'UNE FACETTE (DEBFAC)
----------
IN : I1 : = 0 : CONTOUR EXTERIEUR, 1 TROU
INSTRU = 10 : FIN D'UNE FACETTE (FINFAC)
----------
ON TRACE LA FACETTE
INSTRU = 11 : EFFACEMENT DE L'ECRAN (CLEAN)
----------
TOUS LES DESSINS EXISTANTS SONT EFFACES ET DETRUITS
INSTRU = 12 : AFFICHAGE D'UN SEGMENT. MISE EN EVIDENCE (DSPLAY, HIGHLT)
----------
I1 : 0 = AFFICHAGE NORMAL
1 = MISE EN EVIDENCE (CLIGNOTEMENT ...)
ICH(1) = NUMERO DU SEGMENT
INSTRU = 13 : OUVERTURE D'UN SEGMENT (OPENG)
----------
ICH(1) = NUMERO DU SEGMENT
UN SEGMENT REPRESENTE UNE SEQUENCE D'INSTRUCTIONS
GRAPHIQUES DEFINIE ENTRE OPENG ET CLOSEG.
INSTRU = 14 : FERMETURE D'UN SEGMENT (CLOSEG)
----------
INSTRU = 15 : DESTRUCTION D'UN SEGMENT (KILLG)
----------
ICH(1) = NUMERO DU SEGMENT
INSTRU = 16 : EFFACEMENT D'UN SEGMENT (REMOVG)
----------
ICH(1) = NUMERO DU SEGMENT
INSTRU = 17 : DEMANDE DE LA TAILLE DE L'ECRAN (SZSCRN)
----------
OUT : V1(1) = ABSCISSE DU COIN BAS-GAUCHE EN CM.
V1(2) = SON ORDONNEE EN CM.
V1(3) = ABSCISSE DU POINT HAUT-DROIT EN CM.
V1(4) = SON ORDONNEE EN CM.
L'ECRAN EST AINSI DEFINI EN CM.
INSTRU = 18 : TEST D'EXISTENCE D'UN SEGMENT (INQEXS)
----------
IN : ICH(1)= NUMERO DU SEGMENT
OUT : I2= 0 SI LE SEGMENT EXISTE, 1 SINON
INSTRU = 19 : LISTE DES SEGMENTS EXISTANTS (INQNXS)
----------
IN : I1 = 1 INITIALISATION DE LA RECHERCHE
I1 = 0 DEMANDE DU NUMERO DU SEGMENT SUIVANT
OUT : SI I1 = 0
I2 = 0 SI IL EXISTE UN SEGMENT SUIVANT
ICH(1) NUMERO DE CE SEGMENT
I2 -= 0 SI IL N'EXISTE PAS DE SEGMENT SUIVANT
INSTRU = 20 : MISE A JOUR DE L'ECRAN (UPDATE)
----------
INSTRU = 21 : FIN, FERMETURE DU PERIPHERIQUE (ENDDEV)
----------
IN : I1 : NUMERO DU TERMINAL
INSTRU = 22 : PASSAGE EN MODE STEREO (STEREO)
----------
IN: I1=1 (ON) I1=0 (OFF)
OUT: I2 =0 OK ON FAIT LA STEREO
I2-=0 ON NE PEUT PAS LA FAIRE
INSTRU = 23 : COULEUR COURANTE (INQCOL)
----------
OUT : V1(1), V2(1), V3(1) REELS ENTRE 0. ET 1. DONNANT LE R V B
(PROPORTION DE ROUGE, VERT, BLEU)
INSTRU = 24 : METTRE LA COULEUR COURANTE (SETCOL)
----------
IN : FORCE LA COULEUR COURANTE A LA VALEUR DE LA TABLE
LA PLUS PROCHE DE V1(1), V2(1), V3(1)
INSTRU = 25 : NOMBRE DE COULEURS (INBCOL)
----------
OUT : I1 : NOMBRE DE COULEURS POSSIBLES
(COULEUR DU FOND ET AU MOINS L'AUTRE : I1 >= 2)
INSTRU = 26 : DEFINIR UNE TABLE DE COULEURS (SETTBC)
----------
IN : FORCE V1(1:), V2(1:), V3(1:) [0...1] DANS LA TABLE DE
COULEURS ENTRE LES INDICES I1 ET I2 INCLUS.
LES INDICES I1 ET I2 VARIENT ENTRE 0 ET NBCOLO-1.
OUT : I3 = 0 FORCAGE EFFECTUE
I3 = -1 TABLE NON MODIFIABLE
INSTRU = 27 : NOMBRE DE COULEUR ET TABLE (INQTBC)
----------
OUT : RENVOIE DANS V1(1:), V2(1:), V3(1:) [0...1]
LA TABLE DE COULEURS COURANTE ENTRE LES INDICES I1 ET
I2 INCLUS.
LES INDICES I1 ET I2 VARIENT ENTRE 0 ET NBCOLO-1.
INSTRU = 28 : CLIP HARD POUR LES TEXTES (CLIPHD)
----------
IN : V1(1) MIN EN X DE LA ZONE, EN CM.
V1(2) MAX EN X
V1(3) MIN EN Y
V1(4) MAX EN Y
I1 = 1 FORCE LE CLIP, 0 SINON
INSTRU = 29 : EFFACEMENT SELECTIF (INQFAC)
----------
OUT : I1 : 0 SI L'EFFACEMENT SELECTIF EST POSSIBLE, 1 SINON
INSTRU = 30 : EXISTENCE D'ENTREES (INQCUR)
----------
OUT : I1 : 0 SI IL EXISTE DES ENTREES AU CURSEUR (OU AUTRE),
1 SINON
SI DES ENTREES EXISTENT ON GARDERA LE MEME NUMERO DE TERMINAL
(CF ITRCTG : ADAPTATION D'UN NOUVEAU TERMINAL EN ENTREE)
INSTRU = 31 : QUALITE MAXIMALE DES TEXTES (INQMQT)
----------
OUT : I1 =0 SI LA QUALITE MAXIMALE DES TEXTES EST HARD
(LE TEXT SOFT EST PLUS MAUVAIS QUE LE HARD)
=1 SI LA QUALITE MAXIMALE DES TEXTES EST SOFT
INSTRU = 32 : CENTRAGE DU TEXTE (CTRTXT)
----------
IN : V1(1) = ALPHA POSITION DANS UNE BOITE (0., 0.) (1., 1.)
V1(2) = BETA DU CENTRE DU TEXTE A ECRIRE EN X (ALPHA)
EN Y (BETA) : ALPHA ET BETA ENTRE 0. ET 1.
PAR DEFAUT ALPHA = BETA = 0.
INSTRU = 33 : INQUIRE DU NOMBRE MAXIMUN DE SEGMENTS GERES (INQSGM)
----------
OUT : I1 = NOMBRE MAXIMUM DE SEGMENTS GERES (0 = AUCUN)
SI I1 >0 CELA SIGNIFIE QUE L'ON GERE CORRECTEMENT TOUTES LES
INSTRUCTIONS:
======
12 DSPLAY
13 OPENG
14 CLOSEG
15 KILLG
16 REMOVG
18 INQEXS
19 INQNXS
INSTRU = 34 : RENVOIE LE NUMERO DE LA COULEUR COURANTE (INQNCO)
----------
OUT : I1 = NUMERO DE LA COULEUR COURANTE
INSTRU = 35 : HARDCOPY (HARDCP)
----------
IN: I1 = CHOIX1 (SI DIFFERENTS TERMINAUX DE HARD-COPY)
I2 = CHOIX2 (SI DIFFERENTES POSSIBILITES DU MATERIEL)
En s'inspirant, le cas échéant, des programmes déjà fournis, on définira ces différentes actions en fonction des possibilités du terminal graphique dont on dispose.
Le sous-programme fictif PEREXE de la bibliothèque perf-exemple peut servir de modèle à la création du programme de sortie d'un nouveau périphérique.
De plus un certain nombre de subroutines ont été écrites pour aider une implémentation rapide des drivers (voir le chapitre 7 et l'index) :
GETUNF RCHARS RINTG
RREAL CHARI WCHARS
ZCENTR ZCOLOR ZFNDTC
ZGNUM ZGTEXT ZSTROK
ZTXT