Thread View: vmsnet.sources
1 messages
1 total messages
Started by Martin VICENTE
Tue, 05 Jan 1993 00:07
VMS/RTL/KBD, part 02/03
Author: Martin VICENTE
Date: Tue, 05 Jan 1993 00:07
Date: Tue, 05 Jan 1993 00:07
1437 lines
49668 bytes
49668 bytes
Submitted-by: vicente@cenaath.cena.dgac.fr (Martin VICENTE)
Posting-number: Volume 4, Issue 36
Archive-name: keyboard_rtl/part02
-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+
X(*****************************************************************************
V)
X
X
X
X
X(*
X`20*`20Titre:`09`20`20`20KBD$ROUTINES`20Implementation
X`20*
X`20*`20Sujet:`09`20`20`20Implementation`20des`20routines`20KBD$xxx`20("Keyboar
Vd`20Routines").
X`20*
X`20*`20Version:`09`20`20`201.0
X`20*
X`20*`20Description:`09`20`20`20`20`20`20`20Ce`20module`20contient`20l'implemen
Vtation`20de`20la`20fonction
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20KBD$READ_KEYSTROKE`20pe
Vrmettant`20d'attendre`20une`20action`20au
X`20*`09`09`20`20`20clavier`20et`20renvoyant`20la`20sequence`20ANSI`20correspon
Vdant`20a`20la
X`20*`09`09`20`20`20touche`20actionnee.
X`20*
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Le`20module
V`20repose`20sur`20l'algorithme`20producteur-
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20consommateur,`20l'utili
Vsation`20de`20primitives`20de`20VAX/VMS`20(System
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Services:`20$GETDVI,
V`20$QIO,`20etc),`20d'un`20sous-programme
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20d'interruption`20(AST)
V`20et`20de`20la`20librairie`20PASCAL$PPL_ROUTINES.
X`20*
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Le`20produc
Vteur`20est`20un`20sous-programme`20d'interruption
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20active`20par`20une`20ac
Vtion`20au`20clavier,`20alimentant`20une`20memoire
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20tampon.`20Le`20consomma
Vteur`20est`20la`20fonction`20KBD$READ_KEYSTROKE
X`20*`09`09`20`20`20qui`20preleve`20a`20chaque`20appel`20une`20sequence`20ANSI
V`20de`20la`20memoire
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20tampon.
X`20*
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Lorsque`20l
Ve`20tampon`20est`20plein,`20l'utilisateur`20est`20prevenu
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20par`20un`20beep`20sonor
Ve`20emit`20par`20le`20sous-programme`20d'IT.
X`20*
X`20*`09`09`20`20`20`20`20`20`20La`20fonction`20KBD$FLUSH_KEYBOARD`20permet`20d
Ve`20vider`20le
X`20*`09`09`20`20`20tampon`20clavier.
X`20*
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Afin`20de`20po
Vuvoir`20recuperer`20les`20codes`20emis`20par`20CTRL/C,
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CTRL/O,`20CTRL/Q,`20CTR
VL/S,`20CTRL/T,`20CTRL/X,`20CTRL/Y`20et`20F6,`20il`20est
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20necessaire`20d'entrer
V`20la`20commande`20DCL`20"SET`20TERMINAL/PASTHRU
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20/NOTTSYNC".
X`20*
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Pour`20util
Viser`20KBD$READ_KEYSTROKE,`20il`20necessaire
X`20*`09`09`20`20`20d'appeler`20au`20prealable`20la`20fonction`20KBD$OPEN_KEYBO
VARD`20et`20de
X`20*`09`09`20`20`20terminer`20par`20KBD$CLOSE_KEYBOARD.
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20La`20routine`20KBD$OPEN
V_KEYBOARD`20permet,`20entre`20autres,`20de`20ne
X`20*`09`09`20`20`20creer`20la`20zone`20tampon`20que`20si`20l'on`20desire`20ree
Vllement`20utiliser
X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20KBD$READ_KEYSTROKE.
X`20*
X`20*`20Langage:`09`20`20`20PASCAL`20NON`20STANDARD
X`20*
X`20*`20Fichier:`09`20`20`20KBD$ROUTINES.PAS
X`20*
X`20*`20Environnement:`20`20Machine`20cible:`20`20`20`20`20`20`20`20`20`20VAX
X`20*`09`09`20`20`20Systeme`20d'exploitation:`20VAX/VMS`20Version`205.4-3
X`20*`09`09`20`20`20Compilateur:`20`20`20`20`20`20`20`20`20`20`20`20VAX`20Pasca
Vl`20Version`204.3
X`20*
X`20*`20Auteur:`09`20`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
X`20*
X`20*`09`09`20`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
X`20*
X`20*`09`09`20`20`20Mail:`20`20`20C.E.N.A.
X`20*`09`09`09`20`20`20Div.`20Support`20Informatique`20`26`20Developpement
X`20*`09`09`09`20`20`20Orly`20Sud`20205
X`20*`09`09`09`20`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
X`20*
X`20*`20Creation:`09`20`20`2019/05/92
X`20*
X`20*`20Modification:`20`20`2021/12/92
X`20*
X`20*)
X
X
X
X
X`5BINHERIT(`20'sys$library:starlet',
X`20`20`20`20`20`20`20`20`20`20'sys$library:pascal$lib_routines',
X`20`20`20`20`20`20`20`20`20`20'sys$library:pascal$ppl_routines',
X`20`20`20`20`20`20`20`20`20`20'pascal$kbd_routines'`20)`5D
X
X
XMODULE`20`20kbd$routines`20(G_screen);
X
X
X
X
X(*=================================================================`2019/05/92
V`20*)
X`09`5BHIDDEN`5D`20CONST
X(*===========================================================================*
V)
X
X
X`20`20`20`20NUL`20=`20Chr`20(`200);
X`20`20`20`20BEL`20=`20Chr`20(`207);
X`20`20`20`20ESC`20=`20Chr`20(27);
X
X
X(*=================================================================`2019/05/92
V`20*)
X`09`5BHIDDEN`5D`20TYPE
X(*===========================================================================*
V)
X
X
X`20`20`20`20$WORD`20`20=`20`5BWORD`5D`20-32768..32767;
X`20`20`20`20$UWORD`20=`20`5BWORD`5D`200..65535;
X
X
X`20`20`20`20T_item_list_cell`20=`20PACKED`20RECORD
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20CASE`20INTEGER`20OF
X`09`09`09`20`201:`20(`20(*`20Normal`20Cell`20-----*)
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20bufferLength`20`20:`20$UWORD;
X`09`09`09`20`20itemCode`20`20`20`20`20`20:`20$UWORD;
X`09`09`09`20`20bufferAddress`20:`20UNSIGNED;
X`09`09`09`20`20returnAddress`20:`20UNSIGNED`20`20);
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`202:`20(`20(*`20Terminator`20Cell`20-*)
X`09`09`09`20`20terminator`20`20`20`20:`20UNSIGNED`20`20)
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20END;
X
X`20`20`20`20T_item_list_template`20(count`20:`20INTEGER)`20=`20PACKED`20ARRAY
V`20`5B1..count`5D`20OF
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20T_item_li
Vst_cell;
X
X
X`20`20`20`20T_IOSB`20=`20RECORD
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ioStatus`20`20`20:`20$UWORD;
X`09`09transCount`20:`20$UWORD;
X`09`20`20`20`20`20`20`20`20deviceInfo`20:`20UNSIGNED
X`20`20`20`20`20`20`20`20`20`20`20`20`20END;
X
X`20`20`20`20T_device_name`20=`20PACKED`20ARRAY`20`5B1..64`5D`20OF`20CHAR;
X
X
X(*=================================================================`2019/05/92
V`20*)
X`09`5BHIDDEN`5D`20CONST
X(*===========================================================================*
V)
X
X
X`20`20`20`20C_ESCOVERBUF_EMPTY`20=`20kbd$t_escape_overflow_buffer`20`5B1..4
V`20:`20Chr`20(0)`5D;
X
X
X(*=================================================================`2020/05/92
V`20*)
X`09`5BHIDDEN`5D`20VAR
X(*===========================================================================*
V)
X
X
X`20`20`20`20G_keyboard_open`20:`20BOOLEAN`20VALUE`20FALSE;
X`20`20`20`20G_screen`20`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20TEXT;`20`20
V`20`20`7B`20Pour`20emettre`20le`20caractere`20BEL`20`20`20`20`7D
X`20`20`20`20G_channel`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20$UWORD;`20`20
V`7B`20Canal`20d'E/S`20affecte`20a`20SYS$INPUT`20`20`7D
X`20`20`20`20G_iosb`20`20`20`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20T_IOSB;
V`20`20`7B`20Bloc`20de`20status`20rempli`20par`20la`20QIO`20`7D
X`20`20`20`20G_qio_buffer`20`20`20`20:`20`5BVOLATILE`5D`20kbd$t_ansi_sequence;
X
X
X(*=================================================================`2019/05/92
V`20*)
X(*`20`20`20`20`20`20`20`20`20`20`20DEFINITIONS`20POUR`20L'ALGORITHME`20PRODUCT
VEUR/CONSOMMATEUR`20`20`20`20`20`20`20`20`20`20`20*)
X(*===========================================================================*
V)
X
X
X`5BHIDDEN`5D`20CONST
X
X`20`20`20C_TAILLE_MAX`20=`2032;`20`20`7B`20taille`20maximale`20du`20tampon`20c
Vlavier`20`7D
X
X`5BHIDDEN`5D`20TYPE
X
X`20`20`20T_tampon_clavier`20=`20ARRAY`20`5B0..C_TAILLE_MAX-1`5D`20OF`20kbd$t_a
Vnsi_sequence;
X
X`5BHIDDEN`5D`20VAR
X
X`20`20`20G_TAMPON_CLAVIER`20`20`20`20`20`20:`20`5BVOLATILE`5D`20`5ET_tampon_cl
Vavier;
X`20`20`20G_NB_A_CONSOMMER`20`20`20`20`20`20:`20`5BVOLATILE`5D`20UNSIGNED;
X`20`20`20G_NB_PLACE_DISPONIBLE`20:`20`5BVOLATILE`5D`200`20..`20C_TAILLE_MAX;
X`20`20`20G_INDICE_PRODUCTEUR`20`20`20:`20`5BVOLATILE`5D`200`20..`20C_TAILLE_MA
VX`20-`201;
X`20`20`20G_INDICE_CONSOMMATEUR`20:`200`20..`20C_TAILLE_MAX`20-`201;
X
X
X
X
X(*****************************************************************************
V)
X(*****************************************************************************
V)
X(**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20S`20O`20U
V`20S`20`20-`20`20P`20R`20O`20G`20R`20A`20M`20M`20E`20S`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20**)
X(*****************************************************************************
V)
X(*****************************************************************************
V)
X
X
X
X
X(******************************************************************`2022/05/92
V`20*)
X(*`09perform`09`09`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20PROCEDURE`20`20perform`20(cond_value`20:
V`20UNSIGNED);
X
XBEGIN
X
X`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20LIB$STOP`20(cond_value)
X
XEND`20(*`20perform`20*);
X
X
X(******************************************************************`2019/05/92
V`20*)
X(*`09SS_get_device_name`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BHIDDEN`5D`20FUNCTION`20`20SS_get_device_name`20(
X
X`20`20`20device`20`20`20:`20PACKED`20ARRAY`20`5Bl..u:INTEGER`5D`20OF`20CHAR;
X`20`20`20VAR`20name`20:`20T_device_name`20)`20:`20UNSIGNED;
X
XVAR
X
X`20`20`20item_list`20`20`20:`20T_item_list_template`20(2);
X`20`20`20device_name`20:`20T_device_name;
X`20`20`20cond_value`20`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20WITH`20item_list`5B1`5D`20DO`20BEGIN
X
X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20DVI$_ALLDEVNAM;
X`20`20`20`20`20`20bufferLength`20`20:=`20size`20`20`20`20`20(device_name);
X`20`20`20`20`20`20bufferAddress`20:=`20iAddress`20(device_name);
X`20`20`20`20`20`20returnAddress`20:=`200
X
X`20`20`20END`20`7BWITH`7D;
X
X`20`20`20item_list`20`5B2`5D.terminator`20:=`200;
X
X`20`20`20cond_value`20:=`20$GETDVI`20(itmlst`20:=`20item_list,`20devnam`20:=
V`20device);
X
X`20`20`20IF`20cond_value`20=`20SS$_NORMAL`20THEN`20name`20:=`20device_name;
X
X`20`20`20SS_get_device_name`20:=`20cond_value
X
XEND`20(*`20SS_get_device_name`20*);
X
X
X(******************************************************************`2022/05/92
V`20*)
X`20`20`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20FUNCTION`20`20SS_qio_read`20:`20UNSI
VGNED;`20`20FORWARD;
X(*****************************************************************************
V)
X
X
X(******************************************************************`2022/05/92
V`20*)
X(*`09SS_interrupt_keyboard`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20PROCEDURE`20`20interrupt_keyboard;
X
XVAR
X
X`20`20`20cond_value`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20(***************************)
X`20`20`20(*`20DEBUT`20BOUCLE`20PRODUCTEUR`20*)
X`20`20`20(***************************)
X
X`20`20`20IF`20(G_iosb.ioStatus`20=`20SS$_NORMAL)`20`20`20`20OR
X`20`20`20`20`20`20(G_iosb.ioStatus`20=`20SS$_BADESCAPE)`20THEN`20BEGIN
X
X`20`20`20`20`20`20`7B+`7D
X`20`20`20`20`20`20`7B`20La`20condition`20BADESCAPE`20permet`20de`20traiter`20l
Va`20touche`20F10`20(ESC).
X`20`20`20`20`20`20`7B-`7D
X
X`20`20`20`20`20`20IF`20G_NB_PLACE_DISPONIBLE`20=`200`20THEN
X
X`20`20`20`20`20`20`20`20`20Writeln`20(G_screen,`20BEL)`20`20`7B`20Le`20tampon
V`20clavier`20est`20plein`20!`20`7D
X
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20`20`20`20G_NB_PLACE_DISPONIBLE`20:=`20G_NB_PLACE_DISPONIBLE
V`20-`201;
X
X`20`20`20`20`20`20`20`20`20G_TAMPON_CLAVIER`5E`20`5BG_INDICE_PRODUCTEUR`5D`20:
V=`20G_qio_buffer;
X
X`20`20`20`20`20`20`20`20`20IF`20G_INDICE_PRODUCTEUR`20=`20C_TAILLE_MAX`20-`201
V
X`20`20`20`20`20`20`20`20`20`20`20`20THEN`20G_INDICE_PRODUCTEUR`20:=`200
X`09`20`20`20`20ELSE`20G_INDICE_PRODUCTEUR`20:=`20G_INDICE_PRODUCTEUR`20+`201;
X
X`20`20`20`20`20`20`20`20`20perform`20(PPL$INCREMENT_SEMAPHORE`20(G_NB_A_CONSOM
VMER))
X
X`20`20`20`20`20`20END`20`7BIF`7D;
X
X`20`20`20`20`20`20perform`20(SS_qio_read)
X
X`20`20`20END
X`20`20`20ELSE`20IF`20G_iosb.ioStatus`20<>`20SS$_ABORT`20THEN`20BEGIN
X
X`20`20`20`20`20`20LIB$STOP`20(G_iosb.ioStatus)
X
X`20`20`20END`20`7BIF`7D
X
X`20`20`20(*************************)
X`20`20`20(*`20FIN`20BOUCLE`20PRODUCTEUR`20*)
X`20`20`20(*************************)
X
XEND`20(*`20interrupt_keyboard`20*);
X
X
X(******************************************************************`2022/05/92
V`20*)
X(*`09SS_qio_read`09`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
XFUNCTION`20`20SS_qio_read;
X
XCONST
X
X`20`20`20IO_FUNCTION_CODE`20=`20IO$_READVBLK`20+`20IO$M_EXTEND;
X
XVAR
X
X`20`20`20item_list`20:`20T_item_list_template`20(2);
X
XBEGIN
X
X`20`20`20WITH`20item_list`5B1`5D`20DO`20BEGIN
X
X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20TRM$_ESCTRMOVR;
X`20`20`20`20`20`20bufferLength`20`20:=`200;
X`20`20`20`20`20`20bufferAddress`20:=`20size`20(G_qio_buffer.escOverBuffer);
X`20`20`20`20`20`20returnAddress`20:=`200
X
X`20`20`20END`20`7BWITH`7D;
X
X`20`20`20WITH`20item_list`5B2`5D`20DO`20BEGIN
X
X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20TRM$_MODIFIERS;
X`20`20`20`20`20`20bufferLength`20`20:=`200;
X`20`20`20`20`20`20bufferAddress`20:=`20uOR`20(uOR`20(`20TRM$M_TM_ESCAPE,
X`09`09`09`09`20`20TRM$M_TM_NOECHO`20),
X`09`09`09`09`20`20TRM$M_TM_NOFILTR`20);
X`20`20`20`20`20`20returnAddress`20:=`200
X
X`20`20`20END`20`7BWITH`7D;
X
X`20`20`20G_qio_buffer.escOverBuffer`20:=`20C_ESCOVERBUF_EMPTY;
X
X`20`20`20SS_QIO_read`20:=`20$QIO`20(`20chan`20`20`20:=`20G_channel,
X`09`09`09`20func`20`20`20:=`20IO_FUNCTION_CODE,
X`09`09`09`20iosb`20`20`20:=`20G_iosb,
X`09`09`09`20astadr`20:=`20interrupt_keyboard,
X`09`09`09`20p1`20`20`20`20`20:=`20G_qio_buffer,
X`09`09`09`20p2`20`20`20`20`20:=`20size`20(G_qio_buffer),
X`09`09`09`20p5`20`20`20`20`20:=`20iAddress`20(item_list),
X`09`09`09`20p6`20`20`20`20`20:=`20size`20(item_list)`20)
X
XEND`20(*`20SS_qio_read`20*);
X
X
X(******************************************************************`2019/05/92
V`20*)
X(*`09KBD$OPEN_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$open_keyboard`20:`20UNSIGNED;
X
XVAR
X
X`20`20`20cond_value`20:`20UNSIGNED;
X`20`20`20device`20`20`20`20`20:`20T_device_name;
X
XBEGIN
X
X`20`20`20IF`20G_keyboard_open`20THEN`20kbd$open_keyboard`20:=`20KBD$_ALREADYOP
VEN
X`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20(********************************)
X`20`20`20`20`20`20(*`20DEBUT`20INITIALISATION`20COMMUNE`20*)
X`20`20`20`20`20`20(********************************)
X
X`20`20`20`20`20`20`7B+`7D
X`20`20`20`20`20`20`7B`20Creation`20du`20tampon`20AVANT`20l'installation`20du
V`20S/P`20d'IT.
X`20`20`20`20`20`20`7B-`7D
X`20`20`20`20`20`20
X`20`20`20`20`20`20New`20(G_TAMPON_CLAVIER);
X
X`20`20`20`20`20`20cond_value`20:=`20PPL$CREATE_SEMAPHORE`20(
X`09`09`20`20`20`20`20`20`20semaphore_id`20`20`20`20`20`20:=`20G_NB_A_CONSOMMER
V,
X`09`09`20`20`20`20`20`20`20semaphore_maximum`20:=`20C_TAILLE_MAX,
X`09`09`20`20`20`20`20`20`20semaphore_initial`20:=`200`20);
X
X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:
V=`20KBD$_OPENERROR
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`09`20G_NB_PLACE_DISPONIBLE`20:=`20C_TAILLE_MAX;
X
X`09`20(******************************)
X`09`20(*`20FIN`20INITIALISATION`20COMMUNE`20*)
X`09`20(******************************)
X
X`09`20(***********************************)
X`09`20(*`20DEBUT`20INITIALISATION`20PRODUCTEUR`20*)
X`09`20(***********************************)
X
X`09`20`7B+`7D
X`09`20`7B`20Pour`20emettre`20le`20caractere`20BEL`20lorsque`20le`20tampon`20se
Vra`20plein.
X`09`20`7B-`7D
X
X`09`20open`20(G_screen,`20'SYS$OUTPUT',`20carriage_control`20:=`20NONE);
X
X`09`20Rewrite`20(G_screen);
X
X`20`20`20`20`20`20`20`20`20G_INDICE_PRODUCTEUR`20:=`200;
X
X`09`20cond_value`20:=`20SS_get_device_name`20('SYS$INPUT',`20device);
X
X`09`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:=`20KBD$_OPE
VNERROR
X`09`20ELSE`20BEGIN
X
X`09`20`20`20`20cond_value`20:=`20$ASSIGN`20(devnam`20:=`20device,`20chan`20:=
V`20G_channel);
X
X`09`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:=
V`20KBD$_OPENERROR
X`09`20`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B+`7D
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B`20Premiere`20mise`20en`20plac
Ve`20du`20S/P`20d'interruption.
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B-`7D
X
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20cond_value`20:=`20SS_qio_read;
X
X`09`20`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboa
Vrd`20:=`20KBD$_OPENERROR
X`09`20`20`20`20`20`20`20ELSE`20BEGIN
X
X`09`20`20`20`20`20`20`20`20`20`20(*********************************)
X`09`20`20`20`20`20`20`20`20`20`20(*`20FIN`20INITIALISATION`20PRODUCTEUR`20*)
X`09`20`20`20`20`20`20`20`20`20`20(*********************************)
X
X`09`09`09`09`09`20`20`20`20`20`20`20(*******************************)
X`09`20`20`20`20`20`20`20`20`20`20G_INDICE_CONSOMMATEUR`20:=`200;`20`20(*`20INI
VTIALISATION`20CONSOMMATEUR`20*)
X`09`09`09`09`09`20`20`20`20`20`20`20(*******************************)
X
X`09`20`20`20`20`20`20`20`20`20`20G_keyboard_open`20:=`20TRUE;
X
X`09`20`20`20`20`20`20`20`20`20`20kbd$open_keyboard`20:=`20KBD$_NORMAL
X
X`09`20`20`20`20`20`20`20END`20`7BIF`7D
X
X`09`20`20`20`20END`20`7BIF`7D
X
X`09`20END`20`7BIF`7D
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BIF`7D
X
XEND`20(*`20KBD$OPEN_KEYBOARD`20*);
X
X
X(******************************************************************`2026/05/92
V`20*)
X(*`09KBD$FLUSH_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$flush_keyboard`20:`20UNSIGNED;
X
XVAR
X
X`20`20`20cond_value`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$flush_keyboard`20:=`20KBD$_NO
VTOPEN
X`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20cond_value`20:=`20PPL$CREATE_SEMAPHORE`20(
X`09`09`20`20`20`20`20`20`20semaphore_id`20`20`20`20`20`20:=`20G_NB_A_CONSOMMER
V,
X`09`09`20`20`20`20`20`20`20semaphore_maximum`20:=`20C_TAILLE_MAX,
X`09`09`20`20`20`20`20`20`20semaphore_initial`20:=`200`20);
X
X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$flush_keyboard
V`20:=`20KBD$_FLUSHERROR
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`09`20G_NB_PLACE_DISPONIBLE`20:=`20C_TAILLE_MAX;
X
X`20`20`20`20`20`20`20`20`20G_INDICE_PRODUCTEUR`20`20`20:=`200;
X`09`20G_INDICE_CONSOMMATEUR`20:=`200;
X
X`09`20kbd$flush_keyboard`20:=`20KBD$_NORMAL
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BIF`7D
X
XEND`20(*`20KBD$FLUSH_KEYBOARD`20*);
X
X
X(******************************************************************`2019/05/92
V`20*)
X(*`09KBD$CLOSE_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$close_keyboard`20:`20UNSIGNED;
X
XVAR
X
X`20`20`20cond_value`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$close_keyboard`20:=`20KBD$_AL
VREADYCLOSE
X`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20G_keyboard_open`20:=`20FALSE;
X
X`20`20`20`20`20`20cond_value`20:=`20$CANCEL`20(chan`20:=`20G_channel);
X
X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$close_keyboard
V`20:=`20KBD$_CLOSEERROR
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20`20`20`20Close`20(G_screen);
X
X`20`20`20`20`20`20`20`20`20Dispose`20(G_TAMPON_CLAVIER);
X
X`20`20`20`20`20`20`20`20`20kbd$close_keyboard`20:=`20KBD$_NORMAL
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BIF`7D
X
XEND`20(*`20KBD$CLOSE_KEYBOARD`20*);
X
X
X(******************************************************************`2019/05/92
V`20*)
X(*`09KBD$READ_KEYSTROKE`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$read_keystroke`20(
X
X`20`20`20VAR`20key`20:`20kbd$t_ansi_sequence)`20:`20UNSIGNED;
X
X`7B+`7D
X`7B`20Cette`20fonction`20se`20met`20en`20attente`20d'une`20action`20au`20clavi
Ver`20et`20renvoie`20la
X`7B`20sequence`20ANSI`20de`20la`20touche`20qui`20vient`20d'etre`20actionnee.
X`7B-`7D
X
XVAR
X
X`20`20`20cond_value`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$read_keystroke`20:=`20KBD$_NO
VTOPEN
X`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20(*****************************)
X`20`20`20`20`20`20(*`20DEBUT`20BOUCLE`20CONSOMMATEUR`20*)
X`20`20`20`20`20`20(*****************************)
X
X`20`20`20`20`20`20cond_value`20:=`20PPL$DECREMENT_SEMAPHORE`20(G_NB_A_CONSOMME
VR);
X
X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$read_keystroke
V`20:=`20KBD$_READERROR
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20`20`20`20key`20:=`20G_TAMPON_CLAVIER`5E`20`5BG_INDICE_CONSOM
VMATEUR`5D;
X
X`20`20`20`20`20`20`20`20`20IF`20G_INDICE_CONSOMMATEUR`20=`20C_TAILLE_MAX`20-
V`201
X`20`20`20`20`20`20`20`20`20`20`20`20THEN`20G_INDICE_CONSOMMATEUR`20:=`200
X`20`20`20`20`20`20`20`20`20`20`20`20ELSE`20G_INDICE_CONSOMMATEUR`20:=`20G_INDI
VCE_CONSOMMATEUR`20+`201;
X
X`20`20`20`20`20`20`20`20`20G_NB_PLACE_DISPONIBLE`20:=`20G_NB_PLACE_DISPONIBLE
V`20+`201;
X
X`20`20`20`20`20`20`20`20`20kbd$read_keystroke`20:=`20KBD$_NORMAL
X
X`20`20`20`20`20`20`20`20`20(***************************)
X`20`20`20`20`20`20`20`20`20(*`20FIN`20BOUCLE`20CONSOMMATEUR`20*)
X`20`20`20`20`20`20`20`20`20(***************************)
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BIF`7D
X
XEND`20(*`20KBD$READ_KEYSTROKE`20*);
X
X
X(******************************************************************`2025/05/92
V`20*)
X(*`09KBD$KEY_PRESSED`09`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$key_pressed`20(VAR`20yes`20:`20BOOLEAN)`20:
V`20UNSIGNED;
X
XVAR
X
X`20`20`20nombre`20`20`20`20`20:`20$WORD;
X`20`20`20cond_value`20:`20UNSIGNED;
X
XBEGIN
X
X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$key_pressed`20:=`20KBD$_NOTOP
VEN
X`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20cond_value`20:=`20PPL$READ_SEMAPHORE`20(G_NB_A_CONSOMMER,
V`20nombre);
X
X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$key_pressed`20:=
V`20KBD$_KEYPRESERROR
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`20`20`20`20`20`20`20`20`20yes`20:=`20nombre`20<>`200;
X
X`20`20`20`20`20`20`20`20`20kbd$key_pressed`20:=`20KBD$_NORMAL
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BIF`7D
X
XEND`20(*`20KBD$KEY_PRESSED`20*);
X
X
X(******************************************************************`2019/05/92
V`20*)
X(*`09KBD$CVT_ANSI_SMG`09`09`09`09`09`09`20`20`20`20`20*)
X(*****************************************************************************
V)
X
X`5BGLOBAL`5D`20FUNCTION`20`20kbd$cvt_ansi_smg`20(sequence`20:`20kbd$t_ansi_seq
Vuence)`20:`20$UWORD;
X
XBEGIN
X
X`20`20`20WITH`20sequence`20DO`20BEGIN
X
X`20`20`20`20`20`20IF`20escOverBuffer`20=`20C_ESCOVERBUF_EMPTY`20THEN`20BEGIN
X
X`20`20`20`20`20`20`20`20`20(********************)
X`09`20(*`20ASCII`20Characters`20*)
X`20`20`20`20`20`20`20`20`20(********************)
X
X`20`20`20`20`20`20`20`20`20kbd$cvt_ansi_smg`20:=`20Ord`20(ascii)
X
X`20`20`20`20`20`20END
X`20`20`20`20`20`20ELSE`20IF`20ascii`20=`20ESC`20THEN`20BEGIN
X
X`20`20`20`20`20`20`20`20`20(********************)
X`09`20(*`20Escape`20Sequences`20*)
X`20`20`20`20`20`20`20`20`20(********************)
X
X`09`20IF`20escOverBuffer`20`5B1`5D`20=`20'O'`20THEN`20BEGIN`20`20(*`20SS3`20*)
V
X
X`09`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
X
X`09`20`20`20`20`20`20`20(*`20Arrow`20Keys`20-`20Application`20*)
X
X`09`20`20`20`20`20`20`20'A'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UP;
X`09`20`20`20`20`20`20`20'B'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DOWN;
X`09`20`20`20`20`20`20`20'C'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_RIGHT;
X`09`20`20`20`20`20`20`20'D'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_LEFT;
X
X`09`20`20`20`20`20`20`20(*`20Numeric`20Keypad`20Keys`20-`20Application`20*)
X
X`09`20`20`20`20`20`20`20'M'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_ENTER;
X`09`20`20`20`20`20`20`20'P'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF1;
X`09`20`20`20`20`20`20`20'Q'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF2;
X`09`20`20`20`20`20`20`20'R'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF3;
X`09`20`20`20`20`20`20`20'S'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF4;
X`09`20`20`20`20`20`20`20'l'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_COMMA;
X`09`20`20`20`20`20`20`20'm'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_MINUS;
X`09`20`20`20`20`20`20`20'n'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PERIOD;
X`09`20`20`20`20`20`20`20'p'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP0;
X`09`20`20`20`20`20`20`20'q'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP1;
X`09`20`20`20`20`20`20`20'r'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP2;
X`09`20`20`20`20`20`20`20's'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP3;
X`09`20`20`20`20`20`20`20't'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP4;
X`09`20`20`20`20`20`20`20'u'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP5;
X`09`20`20`20`20`20`20`20'v'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP6;
X`09`20`20`20`20`20`20`20'w'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP7;
X`09`20`20`20`20`20`20`20'x'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP8;
X`09`20`20`20`20`20`20`20'y'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP9
X
X`09`20`20`20`20`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`09`20`20`20`20END`20`7BCASE`7D
X
X`09`20END
X`09`20ELSE`20IF`20escOverBuffer`20`5B1`5D`20=`20'`5B'`20THEN`20BEGIN`20`20(*
V`20CSI`20*)
X
X`09`20`20`20`20IF`20escOverBuffer`20`5B3`5D`20=`20'`7E'`20THEN`20BEGIN
X
X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
X
X`09`09`20`20(*`20Editing`20Keys`20*)
X
X`09`09`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_FIND;
X`09`09`20`20'2'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_INSERT_HERE;
X`09`09`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_REMOVE;
X`09`09`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_SELECT;
X`09`09`20`20'5'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PREV_SCREEN;
X`09`09`20`20'6'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_NEXT_SCREEN
X
X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
X
X`09`20`20`20`20END
X`09`20`20`20`20ELSE`20IF`20escOverBuffer`20`5B4`5D`20=`20'`7E'`20THEN`20BEGIN
X
X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
X
X`09`09`20`20'1'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
X`09`09`09`20`20`20'7'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F6;
X`09`09`09`20`20`20'8'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F7;
X`09`09`09`20`20`20'9'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F8
X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X`09`09`09END`20`7BCASE`7D;
X`09`09`20`20'2'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
X`09`09`09`20`20`20'0'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F9;
X`09`09`09`20`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F10;
X`09`09`09`20`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F11;
X`09`09`09`20`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F12;
X`09`09`09`20`20`20'5'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F13;
X`09`09`09`20`20`20'6'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F14;
X`09`09`09`20`20`20'8'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_HELP;
X`09`09`09`20`20`20'9'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DO
X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X`09`09`09END`20`7BCASE`7D;
X`09`09`20`20'3'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
X`09`09`09`20`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F17;
X`09`09`09`20`20`20'2'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F18;
X`09`09`09`20`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F19;
X`09`09`09`20`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F20
X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X`09`09`09END`20`7BCASE`7D
X
X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
X
X`09`20`20`20`20END
X`09`20`20`20`20ELSE`20BEGIN
X
X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
X
X`09`09`20`20(*`20Arrow`20Keys`20-`20Normal`20*)
X
X`09`09`20`20'A'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UP;
X`09`09`20`20'B'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DOWN;
X`09`09`20`20'C'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_RIGHT;
X`09`09`20`20'D'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_LEFT
X
X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
X
X`09`20`20`20`20END`20`7BIF`7D
X
X`09`20END
X`09`20ELSE`20BEGIN
X
X`09`20`20`20`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`09`20END`20`7BIF`7D
X
X`20`20`20`20`20`20END
X`20`20`20`20`20`20ELSE`20BEGIN
X
X`09`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
X
X`20`20`20`20`20`20END`20`7BIF`7D
X
X`20`20`20END`20`7BWITH`7D
X
XEND`20(*`20KBD$CVT_ANSI_SMG`20*);
X
X
X
X
X(*****************************************************************************
V)
X
XEND`20(*`20KBD$ROUTINES`20Implementation`20*).
X
$ call unpack KBD$ROUTINES.PAS;1 979673541 ""
$!
$ create 'f'
X
X!------------------`20Distribution`20and`20Copyright`20-----------------
X!--
X!--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
X!--`20All`20rights`20reserved.
X!--
X!--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20no
Vtice
X!--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20an
Vy`20form
X!--`20without`20written`20permission`20of`20the`20copyright`20owner.
X!--
X!--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20No
Vn`20Profit
X!--`20Organization
X!--
X!---------------------------------------------------------------
X
X
X!------------------`20Disclaimer`20---------------------------------
X!--
X!--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
V`20and
X!--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
X!--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitne
Vss
X!--`20for`20a`20particular`20purpose`20exist.
X!--
X!--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20unde
Vr
X!--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitnes
Vs`20for
X!--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
V`20to
X!--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20Th
Ve`20user
X!--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20thi
Vs
X!--`20software.
X!--
X!--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
V`20be
X!--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
X!--`20or`20inconsequential`20damages`20or`20lost`20profits.
X!--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20
X!-------------------END-PROLOGUE--------------------------------
X
X
X
X
X!*****************************************************************************
V
X!*****************************************************************************
V
X!**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20**
X!**`20`20`20`20`20`20`20`20`20`20`20M`20E`20S`20S`20A`20G`20E`20S`20`20`20P
V`20O`20U`20R`20`20`20K`20B`20D`20$`20R`20O`20U`20T`20I`20N`20E`20S`20`20`20
V`20`20`20`20`20`20`20`20**
X!**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20**
X!********`20Copyright`20(C)`201992`20Centre`20d'Etudes`20de`20la`20Navigation
V`20Aerienne`20*******
X!*****************************************************************************
V
X
X
X
X
X!++
X!
X!`20Titre:`09`20`20MESSAGES`20POUR`20KBD$ROUTINES
X!
X!`20Sujet:`09`20`20Definition`20des`20messages`20pour`20KBD$ROUTINES.
X!
X!`20Version:`09`20`201.0
X!
X!`20Description:`09`20`20`20`20`20`20Ce`20fichier`20contient`20les`20messages
V`20d'erreur`20utilises`20par`20la
X!`09`09`20`20bibliotheque`20de`20routines`20KBD$ROUTINES.
X!`09`09`20`20`20`20`20`20Il`20doit`20etre`20compile`20a`20travers`20la`20comma
Vnde`20MESSAGE.`20Le
X!`09`09`20`20fichier`20objet`20obtenu`20peut`20etre`20soit`20lie`20directement
V`20a
X!`09`09`20`20l'application,`20soit`20etre`20utilise`20pour`20generer`20une`20i
Vmage
X!`09`09`20`20partageable:`20ce`20sera`20alors`20un`20fichier`20vecteur`20qui
V`20sera`20lie
X!`09`09`20`20a`20l'application.
X!
X!`20Fichier:`09`20`20KBDMSG.MSG
X!
X!`20Environnement:`20`20VAX/VMS`20Version`205.4-3
X!`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20VAX/VMS`20Message`20Utilit
Vy
X!
X!`20Auteur:`09`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
X!`20
X!`20`09`09`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
X!`20
X!`20`09`09`20`20Mail:`20`20`20C.E.N.A.
X!`20`09`09`09`20`20Div.`20Support`20Informatique`20`26`20Developpement
X!`20`09`09`09`20`20Orly`20Sud`20205
X!`20`09`09`09`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
X!
X!`20Creation:`09`20`2019/05/92
X!
X!`20Modification:`09`20`2026/05/92
X!
X!--
X
X
X.title`20Messages`20for`20KBD$`20utility
X
X.ident`20"Version`201.0"
X
X.facility`20KBD,`201`20/prefix=KBD$_
X
X
X.severity`20success
X
XNORMAL`09`09<normal`20successful`20completion>
X
X
X.severity`20informational
X
XALREADYOPEN`09<keyboard`20already`20open>
XALREADYCLOSE`09<keyboard`20already`20close>
X
X
X.severity`20warning
X
XNOTOPEN`09`09<keyboard`20not`20open>
X
X
X.severity`20error
X
XCLOSEERROR`09<error`20during`20close`20operation>
XFLUSHERROR`09<error`20during`20flush`20operation>
XKEYPRESERROR`09<error`20during`20key`20pressed`20operation>
XOPENERROR`09<error`20during`20open`20operation>
XREADERROR`09<error`20during`20read`20operation>
X
$ call unpack KBDMSG.MSG;1 340948879 ""
$!
$ create 'f'
X
X------------------`20Distribution`20and`20Copyright`20-----------------
X--
X--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
X--`20All`20rights`20reserved.
X--
X--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20not
Vice
X--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20any
V`20form
X--`20without`20written`20permission`20of`20the`20copyright`20owner.
X--
X--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20Non
V`20Profit
X--`20Organization
X--
X---------------------------------------------------------------
X
X
X------------------`20Disclaimer`20---------------------------------
X--
X--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
V`20and
X--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
X--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitnes
Vs
X--`20for`20a`20particular`20purpose`20exist.
X--
X--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20under
V
X--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitness
V`20for
X--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
V`20to
X--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20The
V`20user
X--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20this
V
X--`20software.
X--
X--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
V`20be
X--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
X--`20or`20inconsequential`20damages`20or`20lost`20profits.
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20
X-------------------END-PROLOGUE--------------------------------
X
X
X
X
X--****************************************************************************
V*
X--****************************************************************************
V*
X--**`09`09`09`09`09`09`09`09`09`20`20`20`20`20**
X--**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20D`20E`20M`20O`20`20`20D`20E
V`20S`20`20`20R`20O`20U`20T`20I`20N`20E`20S`20`20`20K`20B`20D`20$`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20**
X--**`09`09`09`09`09`09`09`09`09`20`20`20`20`20**
X--********`20Copyright`20(C)`201992`20Centre`20d'Etudes`20de`20la`20Navigation
V`20Aerienne`20*******
X--****************************************************************************
V*
X
X
X
X
X--`20++
X--
X--`20Titre:`09`20`20`20Paquetage`20KBD
X--
X--`20Sujet:`09`20`20`20Declarations`20des`20routines`20KBD$xxx`20("Keyboard
V`20Routines").
X--
X--`20Version:`09`20`20`201.0
X--
X--`20Description:`09`20`20`20`20`20`20`20Ce`20paquetage`20contient`20la`20decl
Varation`20de`20la`20procedure
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20READ_KEYSTROKE`20permetta
Vnt`20d'attendre`20une`20action`20au`20clavier
X--`09`09`20`20`20et`20renvoyant`20la`20sequence`20ANSI`20correspondant`20a`20l
Va`20touche
X--`09`09`20`20`20actionnee.
X--
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Pour`20utilis
Ver`20READ_KEYSTROKE,`20il`20necessaire`20d'appeler`20au
X--`09`09`20`20`20prealable`20la`20procedure`20OPEN_KEYBOARD`20et`20de`20termin
Ver`20par
X--`09`09`20`20`20CLOSE_KEYBOARD.
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20La`20routine`20OPEN_KEYBO
VARD`20permet,`20entre`20autres,`20de`20ne`20creer
X--`09`09`20`20`20le`20tampon`20clavier`20que`20si`20l'on`20desire`20reellement
V`20utiliser
X--`09`09`20`20`20READ_KEYSTROKE.
X--
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Lorsque`20le
V`20tampon`20est`20plein,`20l'utilisateur`20est`20prevenu
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20par`20un`20beep`20sonore.
V
X--
X--`09`09`20`20`20`20`20`20`20La`20procedure`20FLUSH_KEYBOARD`20permet`20de`20v
Vider`20le`20tampon
X--`09`09`20`20`20clavier.
X--
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Afin`20de`20pouv
Voir`20recuperer`20les`20codes`20emis`20par`20CTRL/C,
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CTRL/O,`20CTRL/Q,`20CTRL/
VS,`20CTRL/T,`20CTRL/X,`20CTRL/Y`20et`20F6,`20il`20est
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20necessaire`20d'entrer`20l
Va`20commande`20DCL`20"SET`20TERMINAL/PASTHRU
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20/NOTTSYNC".
X--
X--`20Langage:`09`20`20`20ADA
X--
X--`20Fichier:`09`20`20`20KBD_.ADA
X--
X--`20Paquetage:`09`20`20`20KBD
X--
X--`20Environnement:`20`20Machine`20cible:`20`20`20`20`20`20`20`20`20`20VAX
X--`09`09`20`20`20Systeme`20d'exploitation:`20VAX/VMS`20Version`205.4
X--`09`09`20`20`20Compilateur:`20`20`20`20`20`20`20`20`20`20`20`20VAX`20Ada`20V
Version`202.1-28
X--
X--`20Auteur:`09`20`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
X--
X--`09`09`20`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
X--
X--`09`09`20`20`20Mail:`20`20`20C.E.N.A.
X--`09`09`09`20`20`20Div.`20Support`20Informatique`20`26`20Developpement
X--`09`09`09`20`20`20Orly`20Sud`20205
X--`09`09`09`20`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
X--
X--`20Creation:`09`20`20`2019/05/92
X--
X--`20Modification:`20`20`2026/05/92
X--
X--`20--
X
X
X
X
Xwith`20CONDITION_HANDLING;
Xwith`20SYSTEM;
X
X
Xuse`20CONDITION_HANDLING;
Xuse`20SYSTEM;
X
X
X
X
Xpackage`20KBD`20is
X
X
X
X
X--`20=========================================================================
V===
X--`20`20TYPE
X--`20=========================================================================
V===
X
X
X`20`20`20`20type`20T_ESCAPE_OVERFLOW_BUFFER`20is`20array`20(1..4)`20of`20chara
Vcter;
X
X`20`20`20`20type`20T_ANSI_SEQUENCE`20is`20record
X`20`20`20`20`20`20`20`20ASCII`20`20`20`20`20`20`20`20`20:`20character;
X`20`20`20`20`20`20`20`20ESCOVERBUFFER`20:`20T_ESCAPE_OVERFLOW_BUFFER;
X`20`20`20`20end`20record;
X
X
X
X
X--`20*************************************************************************
V***
X--`20*************************************************************************
V***
X--`20**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20KBD$`20ROUTINE`20DECLARATION`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20**
X--`20*************************************************************************
V***
X--`20*************************************************************************
V***
X
X
X
X
X--
X--`20KBD$CLOSE_KEYBOARD
X--
X--`20`20`20Libere`20la`20memoire`20des`20structures`20de`20donnees`20associees
V`20a`20ce`20module.
X--
X
X`20`20`20`20procedure`20CLOSE_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TY
VPE);
X
X
X--
X--`20KBD$CVT_ANSI_SMG
X--
X--`20`20`20Convertit`20la`20sequence`20ANSI`20d'une`20touche`20en`20un`20code
V`20SMG.
X--
X--`20`20`20Liste`20des`20codes`20pouvant`20etre`20renvoyes`20(ils`20sont`20def
Vinis`20dans`20le`20paquetage
X--`20`20`20SMG):
X--
X--`09ascii`20(0`20-`20255)`09`09K_TRM_UP`09`09K_TRM_DOWN
X--`09K_TRM_RIGHT`09`09K_TRM_LEFT`09`09K_TRM_ENTER
X--`09K_TRM_PF1`09`09K_TRM_PF2`09`09K_TRM_PF3
X--`09K_TRM_PF4`09`09K_TRM_COMMA`09`09K_TRM_MINUS
X--`09K_TRM_PERIOD`09`09K_TRM_KP0`09`09K_TRM_KP1
X--`09K_TRM_KP2`09`09K_TRM_KP3`09`09K_TRM_KP4
X--`09K_TRM_KP5`09`09K_TRM_KP6`09`09K_TRM_KP7
X--`09K_TRM_KP8`09`09K_TRM_KP9`09`09K_TRM_FIND
X--`09K_TRM_INSERT_HERE`09K_TRM_REMOVE`09`09K_TRM_SELECT
X--`09K_TRM_PREV_SCREEN`09K_TRM_NEXT_SCREEN`09K_TRM_F6
X--`09K_TRM_F7`09`09K_TRM_F8`09`09K_TRM_F9
X--`09K_TRM_F10`09`09K_TRM_F11`09`09K_TRM_F12
X--`09K_TRM_F13`09`09K_TRM_F14`09`09K_TRM_HELP
X--`09K_TRM_DO`09`09K_TRM_F17`09`09K_TRM_F18
X--`09K_TRM_F19`09`09K_TRM_F20`09`09K_TRM_UP
X--`09K_TRM_DOWN`09`09K_TRM_RIGHT`09`09K_TRM_LEFT
X--`09K_TRM_UNKNOWN
X--
X
X`20`20`20`20procedure`20CVT_ANSI_SMG`20(
X`20`20`20`20`20`20`20`20SMG_CODE`20:`20out`20UNSIGNED_WORD;
X`09SEQUENCE`20:`20in`20`20T_ANSI_SEQUENCE`20);
X
X
X--
X--`20KBD$FLUSH_KEYBOARD
X--
X--`20`20`20Vide`20le`20tampon`20clavier.
X--
X
X`20`20`20`20procedure`20FLUSH_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TY
VPE);
X
X
X--
X--`20KBD$KEY_PRESSED
X--
X--`20`20`20Indique`20si`20au`20moins`20une`20touche`20est`20presente`20dans
V`20le`20tampon.
X--
X
X`20`20`20`20procedure`20KEY_PRESSED`20(
X`20`20`20`20`20`20`20`20COND_VALUE`20:`20out`20COND_VALUE_TYPE;
X`09YES`20`20`20`20`20`20`20`20:`20out`20BOOLEAN`20);
X
X
X--
X--`20KBD$OPEN_KEYBOARD
X--
X--`20`20`20Creation`20et`20initialisation`20des`20structures`20de`20donnees
V`20associees`20au`20module.
X--
X
X`20`20`20`20procedure`20OPEN_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TYP
VE);
X
X
X--
X--`20KBD$READ_KEYSTROKE
X--
X--`20`20`20Extrait`20la`20touche`20suivante`20du`20tampon;`20si`20ce`20dernier
V`20est`20vide,`20se`20met`20en
X--`20`20`20attente`20d'une`20action`20au`20clavier.
X--
X
X`20`20`20`20procedure`20READ_KEYSTROKE`20(
X`20`20`20`20`20`20`20`20COND_VALUE`20:`20out`20`20`20`20COND_VALUE_TYPE;
X`20`20`20`20`20`20`20`20KEY`20`20`20`20`20`20`20`20:`20in`20out`20T_ANSI_SEQUE
VNCE`20);
X
X
X
X
X--`20*************************************************************************
V***
X
X
Xprivate
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20CLOSE_KEYBOARD);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20CLOSE_KEYBOARD,`20"KBD$CLOS
VE_KEYBOARD",
X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20CVT_ANSI_SMG);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20CVT_ANSI_SMG,`20"KBD$CVT_AN
VSI_SMG",
X`20`20`20`20`20`20`20`20(UNSIGNED_WORD,`20T_ANSI_SEQUENCE)`20);
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20FLUSH_KEYBOARD);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20FLUSH_KEYBOARD,`20"KBD$FLUS
VH_KEYBOARD",
X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20KEY_PRESSED);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20KEY_PRESSED,`20"KBD$KEY_PRE
VSSED",
X`20`20`20`20`20`20`20`20(cond_value_type,`20BOOLEAN)`20);
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20OPEN_KEYBOARD);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20OPEN_KEYBOARD,`20"KBD$OPEN_
VKEYBOARD",
X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
X
X
X`20`20`20`20pragma`20INTERFACE`20(external,`20READ_KEYSTROKE);
X
X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20READ_KEYSTROKE,`20"KBD$READ
V_KEYSTROKE",
X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE,`20T_ANSI_SEQUENCE)`20);
X
X
Xend`20KBD;
$ call unpack KBD_.ADA;1 810836228 ""
$!
$ create 'f'
X!`20Fichier`20d'options`20pour`20le`20linker`20VAX/VMS
X!`20A`20utiliser`20pour`20du`20code`20genere`20par`20le`20compilateur`20CC`20n
Vatif
X!
XSYS$LIBRARY:VAXCRTLG.OLB/LIBRARY`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20!`20C`20Library
XSYS$LIBRARY:VAXCRTL.EXE/SHAREABLE`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20!`20C`20Run`20Time`20Library
$ call unpack LINK_CC.OPT;1 1381593291 ""
$!
$ create 'f'
X(*
X------------------`20Distribution`20and`20Copyright`20-----------------
X--
X--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
X--`20All`20rights`20reserved.
X--
X--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20not
Vice
X--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20any
V`20form
X--`20without`20written`20permission`20of`20the`20copyright`20owner.
X--
X--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20Non
V`20Profit
X--`20Organization
X--
X---------------------------------------------------------------
X
X
X------------------`20Disclaimer`20---------------------------------
X--
X--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
V`20and
X--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
X--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitnes
Vs
X--`20for`20a`20particular`20purpose`20exist.
X--
X--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20under
V
X--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitness
V`20for
X--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
V`20to
X--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20The
V`20user
X--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20this
V
X--`20software.
X--
X--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
V`20be
X--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
X--`20or`20inconsequential`20damages`20or`20lost`20profits.
X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20
X-------------------END-PROLOGUE--------------------------------
X*)
X
X
X
X
X(*****************************************************************************
V)
X(*****************************************************************************
V)
X(**`09`09`09`09`09`09`09`09`09`20`20`20`20**)
+-+-+-+-+-+-+-+- END OF PART 2 +-+-+-+-+-+-+-+-
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads