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