Modulefpreviousupnextcontentsindex[BIG][Normal][small]
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


8.2 Adaptation d'un nouveau terminal en sortie

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


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
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