home *** CD-ROM | disk | FTP | other *** search
- LISEZ-MOI 18/12/92
-
-
- K B D $ R O U T I N E S
-
-
- << Single keypress under VMS in C, Pascal and Ada >>
-
-
- Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne.
- Author: Martin VICENTE (DGAC/CENA/SID)
- E-mail: vicente@cenaath.cena.dgac.fr
- Mail: C.E.N.A. - Orly Sud 205 - 94 542 ORLY AEROGARE CEDEX, FRANCE
-
-
- Comment lire "a la volee" des caracteres du clavier sous VMS ?
- **************************************************************
-
- Peut-etre certains d'entre vous ont-ils ete confronte a ce probleme,
- et trouve certaines solutions: librairie SMG$, appels systeme.
-
- L'appel a une routine de la Run-Time Library SMG permet effectivement
- de s'en sortir (polling sur SMG$READ_KEYSTROKE avec un time-out nul), mais
- avec des consequences desastreuses sur la consommation CPU!
-
- La solution de l'appel systeme est certainement la meilleure, mais
- necessite d'etre initie.
-
- Nous avons donc developpe cette extension de la RTL offrant
- ainsi a l'utilisateur une interface beaucoup plus simple a manier.
- Elle est accessible au developeur C, Pascal et Ada.
-
-
- La distribution contient les fichiers suivant:
- **********************************************
-
- Pour C:
-
- KBD$ROUTINES.H Fichier header
- DEMO_KBD$ROUTINES.C Programme de demo
-
- Pour Pascal:
-
- PASCAL$KBD_ROUTINES.PAS Declaration des routines
- DEMO_KBD$ROUTINES.PAS Programme de demo
-
- Pour Ada:
-
- KBD_.ADA Declaration des specifications.
- DEMO_KBD_ROUTINES.ADA Programme de demo
-
-
- La bibliotheque KBD contient 6 routines:
- ****************************************
-
- KBD$CLOSE_KEYBOARD: Libere la memoire des structures de donnees associees
- a ce module.
-
- KBD$CVT_ANSI_SMG: Convertit la sequence ANSI d'une touche en un code
- SMG.
-
- KBD$FLUSH_KEYBOARD: Vide le tampon clavier.
-
- KBD$KEY_PRESSED: Indique si au moins une touche est presente dans le
- tampon.
-
- KBD$OPEN_KEYBOARD: Creation et initialisation des structures de donnees
- associees au module.
-
- KBD$READ_KEYSTROKE: Extrait la touche suivante du tampon; si ce dernier
- est vide, se met en attente d'une action au clavier.
-
-
- Description de l'implementation:
- ********************************
-
- 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. Le tampon clavier est gere circulairement.
-
- Lorsque le tampon est plein, l'utilisateur est prevenu par un beep
- sonore.
-
-
- UTILISATION PRATIQUE:
- *********************
-
- 1/ Creez votre bibliotheque d'objets:
-
- $ LIBRARY/CREATE/OBJECT MYLIB
-
- Si vous voulez donner un autre nom a la bibliotheque, ou bien si vous
- avez deja une bibliotheque, vous devez modifiez la variable "LIB" dans
- le fichier BUILD.COM.
-
- 2/ Compilez et inserez le module KBD$ROUTINES dans la bibliotheque:
-
- $ @BUILD
- $ @BUILD 3 (ou KP3)
-
- 3/ Compilez et inserez les messages d'erreurs dans la bibliotheque:
-
- $ MESSAGE KBDMSG
- $ LIBRARY/REPLACE MYLIB KBDMSG
-
- 4/ En Pascal
-
- $ PASCAL DEMO_KBD$ROUTINES
- $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY
- $ RUN DEMO_KBD$ROUTINES
-
- 5/ En C
-
- $ CC DEMO_KBD$ROUTINES
- $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY, LINK_CC.OPT/OPTION
- $ RUN DEMO_KBD$ROUTINES
-
- 6/ En Ada
-
- $ ACS SET LIBRARY MYLIBADA
- $ ADA KBD_
- $ ADA DEMO_KBD_ROUTINES
- $ DEFINE LNK$LIBRARY MYLIB
- $ ACS LINK DEMO_KBD_ROUTINES
- $ DEASSIGN LNK$LIBRARY
-