![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
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