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
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