home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume34 / vms_rtl_kbd / part02 / LISEZ-MOI < prev   
Encoding:
Text File  |  1992-12-19  |  3.7 KB  |  132 lines

  1. LISEZ-MOI                                   18/12/92
  2.  
  3.  
  4.                             K B D $ R O U T I N E S
  5.  
  6.  
  7.              << Single keypress under VMS in C, Pascal and Ada >>
  8.  
  9.  
  10.  Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne.
  11.    Author: Martin VICENTE (DGAC/CENA/SID)
  12.    E-mail: vicente@cenaath.cena.dgac.fr
  13.    Mail:   C.E.N.A. - Orly Sud 205 - 94 542 ORLY AEROGARE CEDEX, FRANCE
  14.  
  15.  
  16. Comment lire "a la volee" des caracteres du clavier sous VMS ?
  17. **************************************************************
  18.  
  19.     Peut-etre certains d'entre vous ont-ils ete confronte a ce probleme,
  20.     et trouve certaines solutions: librairie SMG$, appels systeme.
  21.  
  22.     L'appel a une routine de la Run-Time Library SMG permet effectivement
  23.     de s'en sortir (polling sur SMG$READ_KEYSTROKE avec un time-out nul), mais
  24.     avec des consequences desastreuses sur la consommation CPU!
  25.  
  26.     La solution de l'appel systeme est certainement la meilleure, mais
  27.     necessite d'etre initie.
  28.  
  29.     Nous avons donc developpe cette extension de la RTL offrant
  30.     ainsi a l'utilisateur une interface beaucoup plus simple a manier.
  31.     Elle est accessible au developeur C, Pascal et Ada.
  32.  
  33.  
  34. La distribution contient les fichiers suivant:
  35. **********************************************
  36.  
  37.     Pour C:
  38.  
  39.         KBD$ROUTINES.H          Fichier header
  40.         DEMO_KBD$ROUTINES.C      Programme de demo
  41.  
  42.     Pour Pascal:
  43.  
  44.         PASCAL$KBD_ROUTINES.PAS      Declaration des routines
  45.         DEMO_KBD$ROUTINES.PAS      Programme de demo
  46.  
  47.     Pour Ada:
  48.  
  49.         KBD_.ADA          Declaration des specifications.
  50.         DEMO_KBD_ROUTINES.ADA      Programme de demo
  51.  
  52.  
  53. La bibliotheque KBD contient 6 routines:
  54. ****************************************
  55.  
  56.     KBD$CLOSE_KEYBOARD:     Libere la memoire des structures de donnees associees
  57.              a ce module.
  58.  
  59.     KBD$CVT_ANSI_SMG:     Convertit la sequence ANSI d'une touche en un code
  60.              SMG.
  61.  
  62.     KBD$FLUSH_KEYBOARD:  Vide le tampon clavier.
  63.  
  64.     KBD$KEY_PRESSED:     Indique si au moins une touche est presente dans le
  65.              tampon.
  66.  
  67.     KBD$OPEN_KEYBOARD:     Creation et initialisation des structures de donnees
  68.              associees au module.
  69.  
  70.     KBD$READ_KEYSTROKE:  Extrait la touche suivante du tampon; si ce dernier
  71.              est vide, se met en attente d'une action au clavier.
  72.  
  73.  
  74. Description de l'implementation:
  75. ********************************
  76.  
  77.     Le module repose sur l'algorithme producteur-consommateur,
  78.     l'utilisation de primitives de VAX/VMS (System Services: $GETDVI, $QIO,
  79.     etc), d'un sous-programme d'interruption (AST) et de la librairie
  80.     PASCAL$PPL_ROUTINES.
  81.  
  82.     Le producteur est un sous-programme d'interruption active par une
  83.     action au clavier, alimentant une memoire tampon. Le consommateur est la
  84.     fonction KBD$READ_KEYSTROKE qui preleve a chaque appel une sequence ANSI
  85.     de la memoire tampon. Le tampon clavier est gere circulairement.
  86.  
  87.     Lorsque le tampon est plein, l'utilisateur est prevenu par un beep
  88.     sonore.
  89.  
  90.  
  91. UTILISATION PRATIQUE:
  92. *********************
  93.  
  94.     1/ Creez votre bibliotheque d'objets:
  95.  
  96.         $ LIBRARY/CREATE/OBJECT MYLIB
  97.  
  98.        Si vous voulez donner un autre nom a la bibliotheque, ou bien si vous
  99.        avez deja une bibliotheque, vous devez modifiez la variable "LIB" dans
  100.        le fichier BUILD.COM.
  101.  
  102.     2/ Compilez et inserez le module KBD$ROUTINES dans la bibliotheque:
  103.  
  104.         $ @BUILD
  105.         $ @BUILD 3  (ou KP3)
  106.  
  107.     3/ Compilez et inserez les messages d'erreurs dans la bibliotheque:
  108.  
  109.         $ MESSAGE KBDMSG
  110.         $ LIBRARY/REPLACE MYLIB KBDMSG
  111.  
  112.     4/ En Pascal
  113.  
  114.         $ PASCAL DEMO_KBD$ROUTINES
  115.         $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY
  116.         $ RUN DEMO_KBD$ROUTINES
  117.  
  118.     5/ En C
  119.  
  120.         $ CC DEMO_KBD$ROUTINES
  121.         $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY, LINK_CC.OPT/OPTION
  122.         $ RUN DEMO_KBD$ROUTINES
  123.  
  124.     6/ En Ada
  125.  
  126.         $ ACS SET LIBRARY MYLIBADA
  127.         $ ADA KBD_
  128.         $ ADA DEMO_KBD_ROUTINES
  129.         $ DEFINE LNK$LIBRARY MYLIB
  130.         $ ACS LINK DEMO_KBD_ROUTINES
  131.         $ DEASSIGN LNK$LIBRARY
  132.