Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 8.2 Adaptation d'un nouveau terminal en Sup.: 8 Adaptation d'un nouveau terminal Préc.: 8 Adaptation d'un nouveau terminal Index Table des matières


Adaptation d'un nouveau terminal en entrée

Le lien entre FORTRAN 3D et les terminaux d'entrées s'effectue par l'intermédiaire de deux sous-programmes PERFGN et ITRCTG.

Le sous-programme PERFGN sera défini dans le paragraphe suivant. Le sous-programme ITRCTG est construit comme suit :

  ITRCTG :
  ------

      SUBROUTINE ITRCTG(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
      CHARACTER *(*)STRING
      REAL T1(*), T2(*), T3(*)
      INTEGER IT1(*), IT2(*), IT3(*)
      include 'data_f3d.ins'

      GOTO(1 , 2, 3, 4, 5, 6, 7, 8, 9, 10 , 11), IDEVIN 
C
      CALL  ITRCTX(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
      RETURN
001   CONTINUE
C         APOLLO
       CALL ITRCT5(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
002   CONTINUE
C         LASER_WRITER(POST_SCRIPT)
       CALL  ITRCTX(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
003   CONTINUE
C         X_WINDOW_V11
       CALL ITRCTX11(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
004   CONTINUE
C         TEKTRONIX_4014
       CALL ITRCT1(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
005   CONTINUE
C         APOLLO_5
       CALL ITRCT5(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
006   CONTINUE
C         IMPRIMANTE
       CALL  ITRCTX(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
007   CONTINUE
C         VERSATEK_SPECTRUM_V80
       CALL  ITRCTX(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
008   CONTINUE
C         VERSATEK_V80
       CALL  ITRCTX(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
009   CONTINUE
C         TEKTRONIX_4107
       CALL ITRCTE(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
010   CONTINUE
C         TEKTRO_4105
       CALL ITRCTN(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
011   CONTINUE
C         PHIGS
       CALL ITRPHG(INSTRU, T1, T2, T3, IT1, IT2, IT3, STRING)
       RETURN
       END

Attention : Si vous rajoutez ou supprimez un terminal n'oubliez pas de modifier 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 ITRCT* (cf. ci-dessous) et d'en réaliser l'appel dans ITRCTG.

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 EN ENTREE')
          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 IT2(1), IT2(2), ... STRING
          RETURN
        ELSEIF(INSTRU.EQ.-3)THEN 
C         PARAMETRES PAR DEFAUTS (SANS DIALOGUE) 
          IT2(1)=STD   { TYPE STANDARD DU CURSEUR }
          RETURN
        ENDIF
      ENDIF
      CALL WCHARI(INSTRU, ' EST UNE VALEUR INCOMPREHENSIBLE EN ENTREE')
      RETURN
      GOTO INDEXE SELON LES VALEURS >0 DE INSTRU
      GOTO(1, 2, 3, 4, 5, 6, 7, 8, 9), INSTRU

Les différentes taches à effectuer, repérées par INSTRU, sont détaillées ci-dessous :

      INSTRU = 1 : INITIALISATIONS DU TERMINAL EN ENTREE   (DEVICI)
      ----------

         IN :  IT1 : numero du terminal actif
               IT2(*) et STRING : informations supplementaires propres
               a certains terminaux
         Initialisez les valeurs des touches dont les noms sont dans 
         key_board.ins
c     valeurs des touches pour APOLLO
      bs=char(8)
      cr=char(13)
      lf=char(10)
      del=char(127)
      mark=char(129)
      line_del=char(130)
      char_del=char(131)
      marg_left=char(132)
      cmd=char(133)
      marg_right=char(134)
      pad_left=char(135)
      curs_down=char(136)
      pad_right=char(137)
      curs_left=char(138)
      next_window=char(139)
      curs_right=char(140)
      pad_up=char(141)
      curs_up=char(142)
      pad_down=char(143)
      pop=char(144)
      again=char(145)
      exit=char(148)
      back_space=char(149)
      return=char(150)
      funct1=char(192)
      funct2=char(193)
      funct3=char(194)
      funct4=char(195)
      funct5=char(196)
      funct6=char(197)
      funct7=char(198)
      funct8=char(199)
      funct9=char(187)
      funct10=char(0)
      funct11=char(0)
      funct12=char(0)
      shell=char(205)
      copy=char(232)
      tpast=char(233)
      grow=char(234)
      hold=char(235)
      cut=char(236)
      undo=char(237)
      move=char(238)
      help=char(239)
c     en shift
      funct0=char(186)
      sfunct0=char(190)
      sfunct1=char(208)
      sfunct2=char(209)
      sfunct3=char(210)
      sfunct4=char(211)
      sfunct5=char(212)
      sfunct6=char(213)
      sfunct7=char(214)
      sfunct8=char(215)
      sfunct9=char(191)
      sfunct10=char(0)
      sfunct11=char(0)
      sfunct12=char(0)
      smarg_right=char(206)
      spad_left=char(207)
      scurs_down=char(216)
      spad_right=char(217)
      scurs_left=char(218)
      snext_window=char(219)
      scurs_right=char(220)
      spad_up=char(221)
      scurs_up=char(222)
      spad_down=char(219)
      sagain=char(181)
      sread=char(182)
      spop=char(200)

      INSTRU = 2 : ENTREE D'UNE POSITION   (GETXY)
      ----------

         OUT  : T1(1) :  X EN CM.
                T2(1) :  Y EN CM.


      INSTRU = 3 : ENTREE D'UNE POSITION ET SAISIE D'UN CARACTERE (GETXYC)
      ----------

         OUT  : T1(1) :  X EN CM.
                T2(1) :  Y EN CM.
                STRING(1:1) LE CARACTERE SAISI


      INSTRU = 4 : ENTREE D'UNE LIGNE BRISEE  (STROKE)
      ----------

         IN   : IT1(1) NOMBRE DE POINTS A RENTRER
                IT1(2) CONTRAINTE
                       0 : PAS DE CONTRAINTE
                       1 : 2 POINTS SUCCESSIFS DE LA COURBE ENTREE
                         SONT SEPARES AU MINIMUM PAR T3(1) CM. ET
                         AU MAXIMUM PAR T3(2) CM.

         OUT  : IT2(1) NOMBRE DE POINTS EFFECTIVEMENT RENTRES
                T1(*) : TABLEAU DES ABSCISSES EN CM.
                T2(*) : TABLEAU DES ORDONNEES EN CM.


      INSTRU = 5 : ENTREE D'UN TEXTE (GETEXT)
      ----------

         IN : T1(1) : X EN CM. DU DEBUT DU TEXTE
              T2(1) : Y EN CM. DU DEBUT DU TEXTE
              STRING(1:IT1(1)) : LE TEXTE NON EDITABLE A IMPRIMER
              IT1(1) : NOMBRE DE CARACTERES DU TEXTE NON EDITABLE 
                       A IMPRIMER
              IT2(1) : NOMBRE MAXIMUM DE CARACTERES
              IT3(1) : NOMBRE DE CARACTERES DU TEXTE EDITABLE INITIAL
              STRING(IT1(1)+1:IT1(1)+IT3(1)) : TEXTE EDITABLE INITIAL

         OUT : T3(1) : X EN CM. DE LA FIN DU TEXTE
               T3(2) : Y EN CM. DE LA FIN DU TEXTE
               IT3(1) : NOMBRE DE CARACTERES ENTRES
               STRING(IT1(1)+1 : IT1(1)+IT3(1)) : TEXTE ENTRE


      INSTRU = 6 : ENTREE D'UN NOMBRE  (GETNUM)
      ----------

         IN : T1(1) : X EN CM. DU DEBUT DU TEXTE
              T2(1) : Y EN CM. DU DEBUT DU TEXTE
              STRING(1:IT1(1)) : LE TEXTE A IMPRIMER
              IT1(1) : NOMBRE DE CARACTERES DU TEXTE A IMPRIMER
              IT2(1) : TYPE DU NOMBRE (0 ENTIER, 1 REEL, 2 BOOLEEN)
              IT2(2) : CONTRAINTE
                       0 : PAS DE CONTRAINTE
                       1 : CONTRAINTES MIN ET MAX SUR LES NOMBRES :
                     LES CONTRAINTES SE TROUVENT DANS:
                           T3(1)=MIN ET T3(2)=MAX POUR DES REELS
                           IT3(1)=MIN ET IT3(2)=MAX POUR DES ENTIERS
         OUT  : SELON LE TYPE:
              IT3(3) LE NOMBRE ENTIER OU BOOLEEN (0=.TRUE., 1=.FALSE.)
              T3(3)  LE NOMBRE REEL

         SI L'UTILISATEUR TAPE (RC) ON NE MODIFIE PAS LES VARIABLES EN OUT.


      INSTRU = 7 : ENTREE D'UNE IDENTIFICATION  (GETHIT)
      ----------

         OUT : IT1(1) : NUMERO DU SEGMENT DESIGNE
               IT1(2) : VALEUR ASSOCIEE
                     ( VALEUR DONNEE PAR DEBAS(*)  SINON -1 )      


      INSTRU = 8 : DIMENSION DE LA SURFACE D'ENTREE  (SZSCRI)
      ----------

         OUT : T1(1) : XMIN EN CM.
               T1(2) : XMAX EN CM.
               T1(3) : YMIN EN CM.
               T1(4) : YMAX EN CM.
  

      INSTRU = 9 : INTERROGATION DU NOMBRE DE TOUCHES DE LA SOURIS (INQCRC)
      ----------
         OUT : IT1(1) : NOMBRE DE TOUCHES DE LA SOURIS.
               IT2(*) : LES CODES ENTIERS DE CES TOUCHES OU 0 SI
                        CODE INDEFINI

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 ITREXE de la bibliothèque perf-exemple peut servir de modèle à la création du programme d'entrée 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.: 8.2 Adaptation d'un nouveau terminal en Sup.: 8 Adaptation d'un nouveau terminal Préc.: 8 Adaptation d'un nouveau terminal Index Table des matières