home *** CD-ROM | disk | FTP | other *** search
- (*
- ------------------ Distribution and Copyright -----------------
- --
- -- This software is copyright by the CENA/DGAC/FRANCE
- -- All rights reserved.
- --
- -- No part of the material protected by this copyright notice
- -- may be reproduced or utilized for commercial use in any form
- -- without written permission of the copyright owner.
- --
- -- It may be reproduced or utilized for R&D use in Non Profit
- -- Organization
- --
- ---------------------------------------------------------------
-
-
- ------------------ Disclaimer ---------------------------------
- --
- -- This software and its documentation are provided "AS IS" and
- -- without any expressed or implied warranties whatsoever.
- -- No warranties as to performance, merchantability, or fitness
- -- for a particular purpose exist.
- --
- -- Because of the diversity of conditions and hardware under
- -- which this software may be used, no warranty of fitness for
- -- a particular purpose is offered. The user is advised to
- -- test the software thoroughly before relying on it. The user
- -- must assume the entire risk and liability of using this
- -- software.
- --
- -- In no event shall any person or organization of people be
- -- held responsible for any direct, indirect, consequential
- -- or inconsequential damages or lost profits.
- --
- -------------------END-PROLOGUE--------------------------------
- *)
-
-
-
-
- (*****************************************************************************)
- (*****************************************************************************)
- (** **)
- (** K B D $ R O U T I N E S Implementation **)
- (** **)
- (******* Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne ********)
- (*****************************************************************************)
-
-
-
-
- (*
- * Titre: KBD$ROUTINES Implementation
- *
- * Sujet: Implementation des routines KBD$xxx ("Keyboard Routines").
- *
- * Version: 1.0
- *
- * Description: Ce module contient l'implementation de la fonction
- * KBD$READ_KEYSTROKE permettant d'attendre une action au
- * clavier et renvoyant la sequence ANSI correspondant a la
- * touche actionnee.
- *
- * Le module repose sur l'algorithme producteur-
- * consommateur, l'utilisation de primitives de VAX/VMS (System
- * Services: $GETDVI, $QIO, etc), d'un sous-programme
- * d'interruption (AST) et de la librairie PASCAL$PPL_ROUTINES.
- *
- * Le producteur est un sous-programme d'interruption
- * active par une action au clavier, alimentant une memoire
- * tampon. Le consommateur est la fonction KBD$READ_KEYSTROKE
- * qui preleve a chaque appel une sequence ANSI de la memoire
- * tampon.
- *
- * Lorsque le tampon est plein, l'utilisateur est prevenu
- * par un beep sonore emit par le sous-programme d'IT.
- *
- * La fonction KBD$FLUSH_KEYBOARD permet de vider le
- * tampon clavier.
- *
- * Afin de pouvoir recuperer les codes emis par CTRL/C,
- * CTRL/O, CTRL/Q, CTRL/S, CTRL/T, CTRL/X, CTRL/Y et F6, il est
- * necessaire d'entrer la commande DCL "SET TERMINAL/PASTHRU
- * /NOTTSYNC".
- *
- * Pour utiliser KBD$READ_KEYSTROKE, il necessaire
- * d'appeler au prealable la fonction KBD$OPEN_KEYBOARD et de
- * terminer par KBD$CLOSE_KEYBOARD.
- * La routine KBD$OPEN_KEYBOARD permet, entre autres, de ne
- * creer la zone tampon que si l'on desire reellement utiliser
- * KBD$READ_KEYSTROKE.
- *
- * Langage: PASCAL NON STANDARD
- *
- * Fichier: KBD$ROUTINES.PAS
- *
- * Environnement: Machine cible: VAX
- * Systeme d'exploitation: VAX/VMS Version 5.4-3
- * Compilateur: VAX Pascal Version 4.3
- *
- * Auteur: Martin VICENTE (DGAC/CENA/SID)
- *
- * E-mail: vicente@cenaath.cena.dgac.fr
- *
- * Mail: C.E.N.A.
- * Div. Support Informatique & Developpement
- * Orly Sud 205
- * 94 542 ORLY AEROGARE CEDEX, FRANCE
- *
- * Creation: 19/05/92
- *
- * Modification: 26/05/92
- *
- *)
-
-
-
-
- [INHERIT( 'sys$library:starlet',
- 'sys$library:pascal$lib_routines',
- 'sys$library:pascal$ppl_routines',
- 'vic$library:pascal$kbd_routines' )]
-
-
- MODULE kbd$routines (G_screen);
-
-
-
-
- (*================================================================= 19/05/92 *)
- [HIDDEN] CONST
- (*===========================================================================*)
-
-
- NUL = Chr ( 0);
- BEL = Chr ( 7);
- ESC = Chr (27);
-
-
- (*================================================================= 19/05/92 *)
- [HIDDEN] TYPE
- (*===========================================================================*)
-
-
- $WORD = [WORD] -32768..32767;
- $UWORD = [WORD] 0..65535;
-
-
- T_item_list_cell = PACKED RECORD
- CASE INTEGER OF
- 1: ( (* Normal Cell -----*)
- bufferLength : $UWORD;
- itemCode : $UWORD;
- bufferAddress : UNSIGNED;
- returnAddress : UNSIGNED );
- 2: ( (* Terminator Cell -*)
- terminator : UNSIGNED )
- END;
-
- T_item_list_template (count : INTEGER) = PACKED ARRAY [1..count] OF
- T_item_list_cell;
-
-
- T_IOSB = RECORD
- ioStatus : $UWORD;
- transCount : $UWORD;
- deviceInfo : UNSIGNED
- END;
-
- T_device_name = PACKED ARRAY [1..64] OF CHAR;
-
-
- (*================================================================= 19/05/92 *)
- [HIDDEN] CONST
- (*===========================================================================*)
-
-
- C_ESCOVERBUF_EMPTY = kbd$t_escape_overflow_buffer [1..4 : Chr (0)];
-
-
- (*================================================================= 20/05/92 *)
- [HIDDEN] VAR
- (*===========================================================================*)
-
-
- G_keyboard_open : BOOLEAN VALUE FALSE;
- G_screen : [VOLATILE] TEXT; { Pour emettre le caractere BEL }
- G_channel : [VOLATILE] $UWORD; { Canal d'E/S affecte a SYS$INPUT }
- G_iosb : [VOLATILE] T_IOSB; { Bloc de status rempli par la QIO }
- G_qio_buffer : [VOLATILE] kbd$t_ansi_sequence;
-
-
- (*================================================================= 19/05/92 *)
- (* DEFINITIONS POUR L'ALGORITHME PRODUCTEUR/CONSOMMATEUR *)
- (*===========================================================================*)
-
-
- [HIDDEN] CONST
-
- C_TAILLE_MAX = 32; { taille maximale du tampon clavier }
-
- [HIDDEN] TYPE
-
- T_tampon_clavier = ARRAY [0..C_TAILLE_MAX-1] OF kbd$t_ansi_sequence;
-
- [HIDDEN] VAR
-
- G_TAMPON_CLAVIER : [VOLATILE] ^T_tampon_clavier;
- G_NB_A_CONSOMMER : [VOLATILE] UNSIGNED;
- G_NB_PLACE_DISPONIBLE : [VOLATILE] 0 .. C_TAILLE_MAX;
- G_INDICE_PRODUCTEUR : [VOLATILE] 0 .. C_TAILLE_MAX - 1;
- G_INDICE_CONSOMMATEUR : 0 .. C_TAILLE_MAX - 1;
-
-
-
-
- (*****************************************************************************)
- (*****************************************************************************)
- (** S O U S - P R O G R A M M E S **)
- (*****************************************************************************)
- (*****************************************************************************)
-
-
-
-
- (****************************************************************** 22/05/92 *)
- (* perform *)
- (*****************************************************************************)
-
- [HIDDEN,ASYNCHRONOUS,UNBOUND] PROCEDURE perform (cond_value : UNSIGNED);
-
- BEGIN
-
- IF NOT Odd (cond_value) THEN LIB$STOP (cond_value)
-
- END (* perform *);
-
-
- (****************************************************************** 19/05/92 *)
- (* SS_get_device_name *)
- (*****************************************************************************)
-
- [HIDDEN] FUNCTION SS_get_device_name (
-
- device : PACKED ARRAY [l..u:INTEGER] OF CHAR;
- VAR name : T_device_name ) : UNSIGNED;
-
- VAR
-
- item_list : T_item_list_template (2);
- device_name : T_device_name;
- cond_value : UNSIGNED;
-
- BEGIN
-
- WITH item_list[1] DO BEGIN
-
- itemCode := DVI$_ALLDEVNAM;
- bufferLength := size (device_name);
- bufferAddress := iAddress (device_name);
- returnAddress := 0
-
- END {WITH};
-
- item_list [2].terminator := 0;
-
- cond_value := $GETDVI (itmlst := item_list, devnam := device);
-
- IF cond_value = SS$_NORMAL THEN name := device_name;
-
- SS_get_device_name := cond_value
-
- END (* SS_get_device_name *);
-
-
- (****************************************************************** 22/05/92 *)
- [HIDDEN,ASYNCHRONOUS,UNBOUND] FUNCTION SS_qio_read : UNSIGNED; FORWARD;
- (*****************************************************************************)
-
-
- (****************************************************************** 22/05/92 *)
- (* SS_interrupt_keyboard *)
- (*****************************************************************************)
-
- [HIDDEN,ASYNCHRONOUS,UNBOUND] PROCEDURE interrupt_keyboard;
-
- VAR
-
- cond_value : UNSIGNED;
-
- BEGIN
-
- (***************************)
- (* DEBUT BOUCLE PRODUCTEUR *)
- (***************************)
-
- IF (G_iosb.ioStatus = SS$_NORMAL) OR
- (G_iosb.ioStatus = SS$_BADESCAPE) THEN BEGIN
-
- {+}
- { La condition BADESCAPE permet de traiter la touche F10 (ESC).
- {-}
-
- IF G_NB_PLACE_DISPONIBLE = 0 THEN
-
- Writeln (G_screen, BEL) { Le tampon clavier est plein ! }
-
- ELSE BEGIN
-
- G_NB_PLACE_DISPONIBLE := G_NB_PLACE_DISPONIBLE - 1;
-
- G_TAMPON_CLAVIER^ [G_INDICE_PRODUCTEUR] := G_qio_buffer;
-
- IF G_INDICE_PRODUCTEUR = C_TAILLE_MAX - 1
- THEN G_INDICE_PRODUCTEUR := 0
- ELSE G_INDICE_PRODUCTEUR := G_INDICE_PRODUCTEUR + 1;
-
- perform (PPL$INCREMENT_SEMAPHORE (G_NB_A_CONSOMMER))
-
- END {IF};
-
- perform (SS_qio_read)
-
- END
- ELSE IF G_iosb.ioStatus <> SS$_ABORT THEN BEGIN
-
- LIB$STOP (G_iosb.ioStatus)
-
- END {IF}
-
- (*************************)
- (* FIN BOUCLE PRODUCTEUR *)
- (*************************)
-
- END (* interrupt_keyboard *);
-
-
- (****************************************************************** 22/05/92 *)
- (* SS_qio_read *)
- (*****************************************************************************)
-
- FUNCTION SS_qio_read;
-
- CONST
-
- IO_FUNCTION_CODE = IO$_READVBLK + IO$M_EXTEND;
-
- VAR
-
- item_list : T_item_list_template (2);
-
- BEGIN
-
- WITH item_list[1] DO BEGIN
-
- itemCode := TRM$_ESCTRMOVR;
- bufferLength := 0;
- bufferAddress := size (G_qio_buffer.escOverBuffer);
- returnAddress := 0
-
- END {WITH};
-
- WITH item_list[2] DO BEGIN
-
- itemCode := TRM$_MODIFIERS;
- bufferLength := 0;
- bufferAddress := uOR (uOR ( TRM$M_TM_ESCAPE,
- TRM$M_TM_NOECHO ),
- TRM$M_TM_NOFILTR );
- returnAddress := 0
-
- END {WITH};
-
- G_qio_buffer.escOverBuffer := C_ESCOVERBUF_EMPTY;
-
- SS_QIO_read := $QIO ( chan := G_channel,
- func := IO_FUNCTION_CODE,
- iosb := G_iosb,
- astadr := interrupt_keyboard,
- p1 := G_qio_buffer,
- p2 := size (G_qio_buffer),
- p5 := iAddress (item_list),
- p6 := size (item_list) )
-
- END (* SS_qio_read *);
-
-
- (****************************************************************** 19/05/92 *)
- (* KBD$OPEN_KEYBOARD *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$open_keyboard : UNSIGNED;
-
- VAR
-
- cond_value : UNSIGNED;
- device : T_device_name;
-
- BEGIN
-
- IF G_keyboard_open THEN kbd$open_keyboard := KBD$_ALREADYOPEN
- ELSE BEGIN
-
- (********************************)
- (* DEBUT INITIALISATION COMMUNE *)
- (********************************)
-
- {+}
- { Creation du tampon AVANT l'installation du S/P d'IT.
- {-}
-
- New (G_TAMPON_CLAVIER);
-
- cond_value := PPL$CREATE_SEMAPHORE (
- semaphore_id := G_NB_A_CONSOMMER,
- semaphore_maximum := C_TAILLE_MAX,
- semaphore_initial := 0 );
-
- IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
- ELSE BEGIN
-
- G_NB_PLACE_DISPONIBLE := C_TAILLE_MAX;
-
- (******************************)
- (* FIN INITIALISATION COMMUNE *)
- (******************************)
-
- (***********************************)
- (* DEBUT INITIALISATION PRODUCTEUR *)
- (***********************************)
-
- {+}
- { Pour emettre le caractere BEL lorsque le tampon sera plein.
- {-}
-
- open (G_screen, 'SYS$OUTPUT', carriage_control := NONE);
-
- Rewrite (G_screen);
-
- G_INDICE_PRODUCTEUR := 0;
-
- cond_value := SS_get_device_name ('SYS$INPUT', device);
-
- IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
- ELSE BEGIN
-
- cond_value := $ASSIGN (devnam := device, chan := G_channel);
-
- IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
- ELSE BEGIN
-
- {+}
- { Premiere mise en place du S/P d'interruption.
- {-}
-
- cond_value := SS_qio_read;
-
- IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
- ELSE BEGIN
-
- (*********************************)
- (* FIN INITIALISATION PRODUCTEUR *)
- (*********************************)
-
- (*******************************)
- G_INDICE_CONSOMMATEUR := 0; (* INITIALISATION CONSOMMATEUR *)
- (*******************************)
-
- G_keyboard_open := TRUE;
-
- kbd$open_keyboard := KBD$_NORMAL
-
- END {IF}
-
- END {IF}
-
- END {IF}
-
- END {IF}
-
- END {IF}
-
- END (* KBD$OPEN_KEYBOARD *);
-
-
- (****************************************************************** 26/05/92 *)
- (* KBD$FLUSH_KEYBOARD *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$flush_keyboard : UNSIGNED;
-
- VAR
-
- cond_value : UNSIGNED;
-
- BEGIN
-
- IF NOT G_keyboard_open THEN kbd$flush_keyboard := KBD$_NOTOPEN
- ELSE BEGIN
-
- cond_value := PPL$CREATE_SEMAPHORE (
- semaphore_id := G_NB_A_CONSOMMER,
- semaphore_maximum := C_TAILLE_MAX,
- semaphore_initial := 0 );
-
- IF NOT Odd (cond_value) THEN kbd$flush_keyboard := KBD$_FLUSHERROR
- ELSE BEGIN
-
- G_NB_PLACE_DISPONIBLE := C_TAILLE_MAX;
-
- G_INDICE_PRODUCTEUR := 0;
- G_INDICE_CONSOMMATEUR := 0;
-
- kbd$flush_keyboard := KBD$_NORMAL
-
- END {IF}
-
- END {IF}
-
- END (* KBD$FLUSH_KEYBOARD *);
-
-
- (****************************************************************** 19/05/92 *)
- (* KBD$CLOSE_KEYBOARD *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$close_keyboard : UNSIGNED;
-
- VAR
-
- cond_value : UNSIGNED;
-
- BEGIN
-
- IF NOT G_keyboard_open THEN kbd$close_keyboard := KBD$_ALREADYCLOSE
- ELSE BEGIN
-
- G_keyboard_open := FALSE;
-
- cond_value := $CANCEL (chan := G_channel);
-
- IF NOT Odd (cond_value) THEN kbd$close_keyboard := KBD$_CLOSEERROR
- ELSE BEGIN
-
- Close (G_screen);
-
- Dispose (G_TAMPON_CLAVIER);
-
- kbd$close_keyboard := KBD$_NORMAL
-
- END {IF}
-
- END {IF}
-
- END (* KBD$CLOSE_KEYBOARD *);
-
-
- (****************************************************************** 19/05/92 *)
- (* KBD$READ_KEYSTROKE *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$read_keystroke (
-
- VAR key : kbd$t_ansi_sequence) : UNSIGNED;
-
- {+}
- { Cette fonction se met en attente d'une action au clavier et renvoie la
- { sequence ANSI de la touche qui vient d'etre actionnee.
- {-}
-
- VAR
-
- cond_value : UNSIGNED;
-
- BEGIN
-
- IF NOT G_keyboard_open THEN kbd$read_keystroke := KBD$_NOTOPEN
- ELSE BEGIN
-
- (*****************************)
- (* DEBUT BOUCLE CONSOMMATEUR *)
- (*****************************)
-
- cond_value := PPL$DECREMENT_SEMAPHORE (G_NB_A_CONSOMMER);
-
- IF NOT Odd (cond_value) THEN kbd$read_keystroke := KBD$_READERROR
- ELSE BEGIN
-
- key := G_TAMPON_CLAVIER^ [G_INDICE_CONSOMMATEUR];
-
- IF G_INDICE_CONSOMMATEUR = C_TAILLE_MAX - 1
- THEN G_INDICE_CONSOMMATEUR := 0
- ELSE G_INDICE_CONSOMMATEUR := G_INDICE_CONSOMMATEUR + 1;
-
- G_NB_PLACE_DISPONIBLE := G_NB_PLACE_DISPONIBLE + 1;
-
- kbd$read_keystroke := KBD$_NORMAL
-
- (***************************)
- (* FIN BOUCLE CONSOMMATEUR *)
- (***************************)
-
- END {IF}
-
- END {IF}
-
- END (* KBD$READ_KEYSTROKE *);
-
-
- (****************************************************************** 25/05/92 *)
- (* KBD$KEY_PRESSED *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$key_pressed (VAR yes : BOOLEAN) : UNSIGNED;
-
- VAR
-
- nombre : $WORD;
- cond_value : UNSIGNED;
-
- BEGIN
-
- IF NOT G_keyboard_open THEN kbd$key_pressed := KBD$_NOTOPEN
- ELSE BEGIN
-
- cond_value := PPL$READ_SEMAPHORE (G_NB_A_CONSOMMER, nombre);
-
- IF NOT Odd (cond_value) THEN kbd$key_pressed := KBD$_KEYPRESERROR
- ELSE BEGIN
-
- yes := nombre <> 0;
-
- kbd$key_pressed := KBD$_NORMAL
-
- END {IF}
-
- END {IF}
-
- END (* KBD$KEY_PRESSED *);
-
-
- (****************************************************************** 19/05/92 *)
- (* KBD$CVT_ANSI_SMG *)
- (*****************************************************************************)
-
- [GLOBAL] FUNCTION kbd$cvt_ansi_smg (sequence : kbd$t_ansi_sequence) : $UWORD;
-
- BEGIN
-
- WITH sequence DO BEGIN
-
- IF escOverBuffer = C_ESCOVERBUF_EMPTY THEN BEGIN
-
- (********************)
- (* ASCII Characters *)
- (********************)
-
- kbd$cvt_ansi_smg := Ord (ascii)
-
- END
- ELSE IF ascii = ESC THEN BEGIN
-
- (********************)
- (* Escape Sequences *)
- (********************)
-
- IF escOverBuffer [1] = 'O' THEN BEGIN (* SS3 *)
-
- CASE escOverBuffer [2] OF
-
- (* Arrow Keys - Application *)
-
- 'A' : kbd$cvt_ansi_smg := SMG$K_TRM_UP;
- 'B' : kbd$cvt_ansi_smg := SMG$K_TRM_DOWN;
- 'C' : kbd$cvt_ansi_smg := SMG$K_TRM_RIGHT;
- 'D' : kbd$cvt_ansi_smg := SMG$K_TRM_LEFT;
-
- (* Numeric Keypad Keys - Application *)
-
- 'M' : kbd$cvt_ansi_smg := SMG$K_TRM_ENTER;
- 'P' : kbd$cvt_ansi_smg := SMG$K_TRM_PF1;
- 'Q' : kbd$cvt_ansi_smg := SMG$K_TRM_PF2;
- 'R' : kbd$cvt_ansi_smg := SMG$K_TRM_PF3;
- 'S' : kbd$cvt_ansi_smg := SMG$K_TRM_PF4;
- 'l' : kbd$cvt_ansi_smg := SMG$K_TRM_COMMA;
- 'm' : kbd$cvt_ansi_smg := SMG$K_TRM_MINUS;
- 'n' : kbd$cvt_ansi_smg := SMG$K_TRM_PERIOD;
- 'p' : kbd$cvt_ansi_smg := SMG$K_TRM_KP0;
- 'q' : kbd$cvt_ansi_smg := SMG$K_TRM_KP1;
- 'r' : kbd$cvt_ansi_smg := SMG$K_TRM_KP2;
- 's' : kbd$cvt_ansi_smg := SMG$K_TRM_KP3;
- 't' : kbd$cvt_ansi_smg := SMG$K_TRM_KP4;
- 'u' : kbd$cvt_ansi_smg := SMG$K_TRM_KP5;
- 'v' : kbd$cvt_ansi_smg := SMG$K_TRM_KP6;
- 'w' : kbd$cvt_ansi_smg := SMG$K_TRM_KP7;
- 'x' : kbd$cvt_ansi_smg := SMG$K_TRM_KP8;
- 'y' : kbd$cvt_ansi_smg := SMG$K_TRM_KP9
-
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {CASE}
-
- END
- ELSE IF escOverBuffer [1] = '[' THEN BEGIN (* CSI *)
-
- IF escOverBuffer [3] = '~' THEN BEGIN
-
- CASE escOverBuffer [2] OF
-
- (* Editing Keys *)
-
- '1' : kbd$cvt_ansi_smg := SMG$K_TRM_FIND;
- '2' : kbd$cvt_ansi_smg := SMG$K_TRM_INSERT_HERE;
- '3' : kbd$cvt_ansi_smg := SMG$K_TRM_REMOVE;
- '4' : kbd$cvt_ansi_smg := SMG$K_TRM_SELECT;
- '5' : kbd$cvt_ansi_smg := SMG$K_TRM_PREV_SCREEN;
- '6' : kbd$cvt_ansi_smg := SMG$K_TRM_NEXT_SCREEN
-
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {CASE}
-
- END
- ELSE IF escOverBuffer [4] = '~' THEN BEGIN
-
- CASE escOverBuffer [2] OF
-
- '1' : CASE escOverBuffer [3] OF
- '7' : kbd$cvt_ansi_smg := SMG$K_TRM_F6;
- '8' : kbd$cvt_ansi_smg := SMG$K_TRM_F7;
- '9' : kbd$cvt_ansi_smg := SMG$K_TRM_F8
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
- END {CASE};
- '2' : CASE escOverBuffer [3] OF
- '0' : kbd$cvt_ansi_smg := SMG$K_TRM_F9;
- '1' : kbd$cvt_ansi_smg := SMG$K_TRM_F10;
- '3' : kbd$cvt_ansi_smg := SMG$K_TRM_F11;
- '4' : kbd$cvt_ansi_smg := SMG$K_TRM_F12;
- '5' : kbd$cvt_ansi_smg := SMG$K_TRM_F13;
- '6' : kbd$cvt_ansi_smg := SMG$K_TRM_F14;
- '8' : kbd$cvt_ansi_smg := SMG$K_TRM_HELP;
- '9' : kbd$cvt_ansi_smg := SMG$K_TRM_DO
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
- END {CASE};
- '3' : CASE escOverBuffer [3] OF
- '1' : kbd$cvt_ansi_smg := SMG$K_TRM_F17;
- '2' : kbd$cvt_ansi_smg := SMG$K_TRM_F18;
- '3' : kbd$cvt_ansi_smg := SMG$K_TRM_F19;
- '4' : kbd$cvt_ansi_smg := SMG$K_TRM_F20
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
- END {CASE}
-
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {CASE}
-
- END
- ELSE BEGIN
-
- CASE escOverBuffer [2] OF
-
- (* Arrow Keys - Normal *)
-
- 'A' : kbd$cvt_ansi_smg := SMG$K_TRM_UP;
- 'B' : kbd$cvt_ansi_smg := SMG$K_TRM_DOWN;
- 'C' : kbd$cvt_ansi_smg := SMG$K_TRM_RIGHT;
- 'D' : kbd$cvt_ansi_smg := SMG$K_TRM_LEFT
-
- OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {CASE}
-
- END {IF}
-
- END
- ELSE BEGIN
-
- kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {IF}
-
- END
- ELSE BEGIN
-
- kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
-
- END {IF}
-
- END {WITH}
-
- END (* KBD$CVT_ANSI_SMG *);
-
-
-
-
- (*****************************************************************************)
-
- END (* KBD$ROUTINES Implementation *).
-
-