home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume34 / vmsrtlkb / part01 < prev    next >
Encoding:
Text File  |  1992-12-18  |  54.7 KB  |  1,978 lines

  1. Newsgroups: comp.sources.misc
  2. From: vicente@cenaath.cena.dgac.fr (Martin VICENTE)
  3. Subject: v34i081:  vms_rtl_kbd - single keypress under VMS, Part01/02
  4. Message-ID: <csm-v34i081=vms_rtl_kbd.154140@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: ca1aca038d8265f1dbc47635f0ff43ac
  6. Date: Fri, 18 Dec 1992 21:44:02 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: vicente@cenaath.cena.dgac.fr (Martin VICENTE)
  10. Posting-number: Volume 34, Issue 81
  11. Archive-name: vms_rtl_kbd/part01
  12. Environment: VMS, C, Pascal, ADA
  13.  
  14. How to detect a single keystroke under VMS (without RETURN) ?
  15. *************************************************************
  16. Perhaps many of you have had to solve this problem, and have found
  17. solutions: SMG$ libraries, system calls.
  18.  
  19. Calling an SMG Run-Time Library's routine effectively solves it (polling 
  20. on SMG$READ_KEYSTROKE with no time-out), but has disastrous consequences 
  21. CPU load.
  22.  
  23. The system call solution is certainly the best one, but this needs to
  24. be initiated.
  25.  
  26. So we developed this RTL's extension which offers users an interface 
  27. much easier to manipulate.  It is accessible to the C, Pascal and Ada 
  28. developer.
  29.  
  30. Martin VICENTE (vicente@cenaath.cena.dgac.fr)
  31. ---------------------------- CUT HERE -------------------------
  32. #! /bin/sh
  33. # This is a shell archive.  Remove anything before this line, then feed it
  34. # into a shell via "sh file" or similar.  To overwrite existing files,
  35. # type "sh file -c".
  36. # Contents:  README build.com kbd$routines.pas kbd_.ada kbdmsg.msg
  37. #   pascal$kbd_routines.pas
  38. # Wrapped by kent@sparky on Fri Dec 18 15:30:48 1992
  39. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  40. echo If this archive is complete, you will see the following message:
  41. echo '          "shar: End of archive 1 (of 2)."'
  42. if test -f 'README' -a "${1}" != "-c" ; then 
  43.   echo shar: Will not clobber existing file \"'README'\"
  44. else
  45.   echo shar: Extracting \"'README'\" \(3508 characters\)
  46.   sed "s/^X//" >'README' <<'END_OF_FILE'
  47. XREADME                                       18/12/92
  48. X
  49. X
  50. X                            K B D $ R O U T I N E S
  51. X
  52. X
  53. X             << Single keypress under VMS in C, Pascal and Ada >>
  54. X
  55. X
  56. X Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne.
  57. X   Author: Martin VICENTE (DGAC/CENA/SID)
  58. X   E-mail: vicente@cenaath.cena.dgac.fr
  59. X   Mail:   C.E.N.A. - Orly Sud 205 - 94 542 ORLY AEROGARE CEDEX, FRANCE
  60. X
  61. X
  62. XHow to detect a single keystroke under VMS (without RETURN) ?
  63. X*************************************************************
  64. X
  65. X    Perhaps many of you did have to solve this problem, and had found 
  66. X    solutions: SMG$ libraries, system calls.
  67. X
  68. X    Calling a SMG Run-Time Library's routine permit effectively to solve
  69. X    it (polling on SMG$READ_KEYSTROKE with no time-out), but it has a 
  70. X    disastrous consequences over CPU load.
  71. X
  72. X    the system call solution is certainly the best one, but this need to
  73. X    be initiate.
  74. X
  75. X    So we developped this RTL's extension which thus offers to users an
  76. X    interface much easier to manipulate.
  77. X    It is accessible to C, Pascal and Ada developer. 
  78. X
  79. X
  80. XThe package contains these files:
  81. X*********************************
  82. X
  83. X    In C:
  84. X
  85. X        KBD$ROUTINES.H          Header file
  86. X        DEMO_KBD$ROUTINES.C      Demonstration program
  87. X
  88. X    In Pascal:
  89. X
  90. X        PASCAL$KBD_ROUTINES.PAS      Routine declaration
  91. X        DEMO_KBD$ROUTINES.PAS      Demonstration program
  92. X
  93. X    In Ada:
  94. X
  95. X        KBD_.ADA          Specification declaration
  96. X        DEMO_KBD_ROUTINES.ADA      Demonstration program
  97. X
  98. X
  99. XThe KBD library is made of 6 routines:
  100. X**************************************
  101. X
  102. X    KBD$CLOSE_KEYBOARD:     Free memory from data-structures associated to this 
  103. X             unit.
  104. X
  105. X    KBD$CVT_ANSI_SMG:     Convert the ANSI sequence of a key into a SMG code.
  106. X
  107. X    KBD$FLUSH_KEYBOARD:  Empty the keyboard buffer.
  108. X
  109. X    KBD$KEY_PRESSED:     Indicate if at least one key is present in the buffer.
  110. X
  111. X    KBD$OPEN_KEYBOARD:     Creation and initialization of the data-structures 
  112. X             associated to the unit.
  113. X
  114. X    KBD$READ_KEYSTROKE:  Extract the next key from the buffer; if the latter is
  115. X             empty, wait for an action onto the keyboard.
  116. X
  117. X
  118. Ximplementation's description
  119. X****************************
  120. X
  121. X    This unit is based on the producer-consumer algorithm, uses VAX/VMS
  122. X    primaries (System Services: $GETDVI, $QIO, etc), a breaking subroutine
  123. X    (AST) and the PASCAL$PPL_ROUTINES library.
  124. X    
  125. X    The producer is a breaking subroutine activated by an action onto 
  126. X    the keyboard, feeding a buffer memory. The consumer is the 
  127. X    KBD$READ_KEYSTROKE which take, each call, an ANSI sequence from buffer
  128. X    memory. The keyboard's buffer is managed in a circle.
  129. X
  130. X    When the buffer is full, the user is warned by a sound beep.
  131. X
  132. XPRACTICAL USE:
  133. X**************
  134. X
  135. X    1/ Create your own object library:
  136. X
  137. X        $ LIBRARY/CREATE/OBJECT MYLIB
  138. X
  139. X       If you want do give another name to the library, or if you have already
  140. X       got one, you've got to modify the "LIB" variable in the BUILD.COM file.
  141. X
  142. X    2/ Compile and insert KBD$ROUTINES unit into the library:
  143. X
  144. X        $ @BUILD
  145. X        $ @BUILD 3  (ou KP3)
  146. X
  147. X    3/ Compile and insert error messages into the library:
  148. X
  149. X        $ MESSAGE KBDMSG
  150. X        $ LIBRARY/REPLACE MYLIB KBDMSG
  151. X
  152. X    4/ In Pascal
  153. X
  154. X        $ PASCAL DEMO_KBD$ROUTINES
  155. X        $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY
  156. X        $ RUN DEMO_KBD$ROUTINES
  157. X
  158. X    5/ In C
  159. X
  160. X        $ CC DEMO_KBD$ROUTINES
  161. X        $ LINK DEMO_KBD$ROUTINES, MYLIB/LIBRARY, LINK_CC.OPT/OPTION
  162. X        $ RUN DEMO_KBD$ROUTINES
  163. X
  164. X    6/ In Ada
  165. X
  166. X        $ ACS SET LIBRARY MYLIBADA
  167. X        $ ADA KBD_
  168. X        $ ADA DEMO_KBD_ROUTINES
  169. X        $ DEFINE LNK$LIBRARY MYLIB
  170. X        $ ACS LINK DEMO_KBD_ROUTINES
  171. X        $ DEASSIGN LNK$LIBRARY
  172. END_OF_FILE
  173.   if test 3508 -ne `wc -c <'README'`; then
  174.     echo shar: \"'README'\" unpacked with wrong size!
  175.   fi
  176.   # end of 'README'
  177. fi
  178. if test -f 'build.com' -a "${1}" != "-c" ; then 
  179.   echo shar: Will not clobber existing file \"'build.com'\"
  180. else
  181.   echo shar: Extracting \"'build.com'\" \(6511 characters\)
  182.   sed "s/^X//" >'build.com' <<'END_OF_FILE'
  183. X
  184. X$!------------------ Distribution and Copyright -----------------
  185. X$!--
  186. X$!- This software is copyright by the CENA/DGAC/FRANCE
  187. X$!-- All rights reserved.
  188. X$!--
  189. X$!-- No part of the material protected by this copyright notice
  190. X$!-- may be reproduced or utilized for commercial use in any form
  191. X$!-- without written permission of the copyright owner.
  192. X$!--
  193. X$!-- It may be reproduced or utilized for R&D use in Non Profit
  194. X$!-- Organization
  195. X$!--
  196. X$!---------------------------------------------------------------
  197. X
  198. X
  199. X$!------------------ Disclaimer ---------------------------------
  200. X$!--
  201. X$!-- This software and its documentation are provided "AS IS" and
  202. X$!-- without any expressed or implied warranties whatsoever.
  203. X$!-- No warranties as to performance, merchantability, or fitness
  204. X$!-- for a particular purpose exist.
  205. X$!--
  206. X$!-- Because of the diversity of conditions and hardware under
  207. X$!-- which this software may be used, no warranty of fitness for
  208. X$!-- a particular purpose is offered.  The user is advised to
  209. X$!-- test the software thoroughly before relying on it.  The user
  210. X$!-- must assume the entire risk and liability of using this
  211. X$!-- software.
  212. X$!--
  213. X$!-- In no event shall any person or organization of people be
  214. X$!-- held responsible for any direct, indirect, consequential
  215. X$!-- or inconsequential damages or lost profits.
  216. X$!--                                                           
  217. X$!-------------------END-PROLOGUE--------------------------------
  218. X
  219. X
  220. X
  221. X
  222. X$!++
  223. X$!
  224. X$! Titre:       BUILD
  225. X$!
  226. X$! Sujet:       Fichier de procedure pour la reconstruction d'un module
  227. X$!           Pascal (interface + implementation) et son insertion dans
  228. X$!           une librarie d'objets.
  229. X$!
  230. X$! Version:       1.3
  231. X$!
  232. X$! Description:       Le module doit en fait se decomposer en 2 fichiers, un pour
  233. X$!           la partie interface et l'autre pour la partie
  234. X$!           implementation.
  235. X$!           Ils doivent respecter le format suivant: file_V_x_x.PAS
  236. X$!
  237. X$!           Si P1 = 1, alors compilation de l'interface
  238. X$!           Si P1 = 2, alors compilation de l'implementation
  239. X$!           Si P1 = 3, alors compilation de tout
  240. X$!
  241. X$!           Si P2 = F, alors phase finale
  242. X$!
  243. X$! Langage:       DCL
  244. X$!
  245. X$! Fichier:       BUILD.COM
  246. X$!
  247. X$! Environnement:  Machine cible:          VAX
  248. X$!           Systeme d'exploitation: VMS Version 5.4-3
  249. X$!
  250. X$! Auteur:       Martin VICENTE (DGAC/CENA/SID)
  251. X$!
  252. X$!           E-mail: vicente@cenaath.cena.dgac.fr
  253. X$!
  254. X$!           Mail:   C.E.N.A.
  255. X$!               Div. Support Informatique & Developpement
  256. X$!               Orly Sud 205
  257. X$!               94 542 ORLY AEROGARE CEDEX, FRANCE
  258. X$!
  259. X$! Creation:       19/05/92
  260. X$!
  261. X$! Modification:   01/07/92
  262. X$!
  263. X$!--
  264. X$
  265. X$
  266. X$!====  PARAMETRES DU PROGRAMME  ==============================================
  267. X$
  268. X$ TIT     = "KBD$ROUTINES"        ! Titre
  269. X$ FIC_INT = "PASCAL$KBD_ROUTINES"    ! Nom du fichier interface
  270. X$ FIC_IMP = "KBD$ROUTINES"        ! Nom du fichier implementation
  271. X$ VER     = ""                ! Version (respectez le format)
  272. X$ LIB     = "MYLIB"            ! Librairie
  273. X$
  274. X$!====  LISTE DES ETIQUETTES  =================================================
  275. X$!
  276. X$! afp  AFFICHER PAVE NUMERIQUE
  277. X$! gtm  GET TIME
  278. X$! int  COMPILER INTERFACE
  279. X$! imp  COMPILER IMPLEMENTATION
  280. X$! tou  TOUT COMPILER
  281. X$! cin  COMPILER INTERFACE
  282. X$! cim  COMPILER IMPLEMENTATION
  283. X$!
  284. X$!====  DEFINITION DES SYMBOLES  ==============================================
  285. X$
  286. X$ AFFICHER   := write sys$output
  287. X$ LIGNE_VIDE := "''AFFICHER' """
  288. X$
  289. X$ VC = "''VIDEO_C'"
  290. X$ VI = "''VIDEO_I'"
  291. X$ VB = "''VIDEO_B'"
  292. X$ VN = "''VIDEO_N'"
  293. X$
  294. X$!====  DEBUT DU PROGRAMME  ===================================================
  295. X$
  296. X$ if p1 .eqs. "" then goto afp!AFFICHER PAVE NUMERIQUE
  297. X$
  298. X$ gosub gtm!GET TIME
  299. X$
  300. X$ DATE  = f$extract(0,11,TIME)
  301. X$ HEURE = f$extract(12,5,TIME)
  302. X$ TITRE = "''VI'BUILD DE ''TIT' LE ''DATE' A ''HEURE'''VN'"
  303. X$
  304. X$ EFFACER := delete/since='TIME'
  305. X$
  306. X$ if p2 .eqs. "F"
  307. X$   then
  308. X$     SOUSTITRE = "Version ''VER' - Phase finale"
  309. X$     COMPILER := pascal/warning/nocheck/optimize=all
  310. X$   else
  311. X$     SOUSTITRE = "Version ''VER' - Phase de developpement"
  312. X$     COMPILER := pascal/warning/check=all/nooptimize
  313. X$ endif
  314. X$
  315. X$ if p1 .eqs. "1"
  316. X$   then
  317. X$     gosub int!COMPILER INTERFACE
  318. X$   else
  319. X$     if p1 .eqs. "2"
  320. X$    then
  321. X$         gosub imp!COMPILER IMPLEMENTATION
  322. X$    else
  323. X$         if p1 .eqs. "3"
  324. X$        then
  325. X$             gosub tou!TOUT COMPILER
  326. X$        else
  327. X$             AFFICHER "%BUILD-E-PARINV, parametre invalide"
  328. X$          AFFICHER " \''p1'\"
  329. X$      endif
  330. X$     endif
  331. X$ endif
  332. X$
  333. X$ exit
  334. X$
  335. X$ afp:!AFFICHER PAVE NUMERIQUE
  336. X$
  337. X$    DEF := define/key/terminate/nolog
  338. X$
  339. X$    DEF help "@ BUILD"
  340. X$    DEF kp1  "@ BUILD 1"
  341. X$    DEF kp2  "@ BUILD 2"
  342. X$    DEF kp3  "@ BUILD 3"
  343. X$
  344. X$    set terminal/application_keypad
  345. X$
  346. X$    LIGNE_VIDE
  347. X$    AFFICHER  "DEFINITION DU PAVE NUMERIQUE"
  348. X$    LIGNE_VIDE
  349. X$
  350. X$    AFFICHER "    HELP -> DEFINITION DU PAVE NUMERIQUE"
  351. X$    AFFICHER "    KP1  -> COMPILER L'INTERFACE"
  352. X$    AFFICHER "    KP2  -> COMPILER L'IMPLEMENTATION"
  353. X$    AFFICHER "    KP3  -> COMPILER TOUT"
  354. X$
  355. X$    LIGNE_VIDE
  356. X$
  357. X$    exit
  358. X$
  359. X$!====  FIN DU PROGRAMME  =====================================================
  360. X$
  361. X$ int:!COMPILER INTERFACE
  362. X$
  363. X$    AFFICHER  TITRE
  364. X$    AFFICHER  SOUSTITRE
  365. X$    LIGNE_VIDE
  366. X$
  367. X$    gosub cin!COMPILER INTERFACE
  368. X$
  369. X$ return
  370. X$
  371. X$ imp:!COMPILER IMPLEMENTATION
  372. X$
  373. X$    AFFICHER  TITRE
  374. X$    AFFICHER  SOUSTITRE
  375. X$    LIGNE_VIDE
  376. X$
  377. X$    gosub cim!COMPILER IMPLEMENTATION
  378. X$
  379. X$ return
  380. X$
  381. X$ tou:!TOUT COMPILER
  382. X$
  383. X$    AFFICHER  TITRE
  384. X$    AFFICHER  SOUSTITRE
  385. X$    LIGNE_VIDE
  386. X$
  387. X$    gosub cin!COMPILER INTERFACE
  388. X$    gosub cim!COMPILER IMPLEMENTATION
  389. X$
  390. X$ return
  391. X$
  392. X$ cin:!COMPILER INTERFACE
  393. X$
  394. X$    AFFICHER  "''VB'COMPILATION DU MODULE ''FIC_INT'''VN'"
  395. X$
  396. X$    SRC = "''FIC_INT'''VER'.PAS"
  397. X$    INT = "''FIC_INT'"
  398. X$
  399. X$    purge 'SRC'
  400. X$
  401. X$    AFFICHER "Compilation"
  402. X$
  403. X$    COMPILER/environment='INT'/object='INT'/nodiagnostics 'SRC'
  404. X$
  405. X$    purge 'INT'.PEN
  406. X$    purge 'INT'.OBJ
  407. X$
  408. X$    define sys$output nl:
  409. X$    define sys$error  nl:
  410. X$    delete 'INT'.DIA;*
  411. X$    deassign sys$error
  412. X$    deassign sys$output
  413. X$
  414. X$    AFFICHER "Insertion dans la librairie"
  415. X$
  416. X$    library/replace 'LIB' 'FIC_INT'
  417. X$
  418. X$ return
  419. X$
  420. X$ cim:!COMPILER IMPLEMENTATION
  421. X$
  422. X$    AFFICHER "''VB'COMPILATION DU MODULE ''FIC_IMP'''VN'"
  423. X$
  424. X$    SRC = "''FIC_IMP'''VER'.PAS"
  425. X$    IMP = "''FIC_IMP'"
  426. X$
  427. X$    purge 'SRC'
  428. X$
  429. X$    AFFICHER "Compilation"
  430. X$
  431. X$    COMPILER/noenvironment/object='IMP'/nodiagnostics 'SRC'
  432. X$
  433. X$    purge 'IMP'.OBJ
  434. X$
  435. X$    define sys$output nl:
  436. X$    define sys$error  nl:
  437. X$    delete 'INT'.DIA;*
  438. X$    deassign sys$error
  439. X$    deassign sys$output
  440. X$
  441. X$    AFFICHER "Insertion dans la librairie"
  442. X$
  443. X$    library/replace 'LIB' 'FIC_IMP'
  444. X$
  445. X$ return
  446. X$
  447. X$ gtm:!GET TIME
  448. X$
  449. X$    TIME  = f$time ()
  450. X$    DATE  = f$extract(0,11,TIME)
  451. X$    HEURE = f$extract(12,11,TIME)
  452. X$
  453. X$!    Conversion du format de time de  DD-MMM-YYYY HH:MM:SS.CC
  454. X$!                     en  DD-MMM-YYYY:HH:MM:SS.CC
  455. X$
  456. X$    TIME = "''DATE':''HEURE'"
  457. X$
  458. X$ return
  459. X$
  460. END_OF_FILE
  461.   if test 6511 -ne `wc -c <'build.com'`; then
  462.     echo shar: \"'build.com'\" unpacked with wrong size!
  463.   fi
  464.   # end of 'build.com'
  465. fi
  466. if test -f 'kbd$routines.pas' -a "${1}" != "-c" ; then 
  467.   echo shar: Will not clobber existing file \"'kbd$routines.pas'\"
  468. else
  469.   echo shar: Extracting \"'kbd$routines.pas'\" \(21759 characters\)
  470.   sed "s/^X//" >'kbd$routines.pas' <<'END_OF_FILE'
  471. X(*
  472. X------------------ Distribution and Copyright -----------------
  473. X--
  474. X-- This software is copyright by the CENA/DGAC/FRANCE
  475. X-- All rights reserved.
  476. X--
  477. X-- No part of the material protected by this copyright notice
  478. X-- may be reproduced or utilized for commercial use in any form
  479. X-- without written permission of the copyright owner.
  480. X--
  481. X-- It may be reproduced or utilized for R&D use in Non Profit
  482. X-- Organization
  483. X--
  484. X---------------------------------------------------------------
  485. X
  486. X
  487. X------------------ Disclaimer ---------------------------------
  488. X--
  489. X-- This software and its documentation are provided "AS IS" and
  490. X-- without any expressed or implied warranties whatsoever.
  491. X-- No warranties as to performance, merchantability, or fitness
  492. X-- for a particular purpose exist.
  493. X--
  494. X-- Because of the diversity of conditions and hardware under
  495. X-- which this software may be used, no warranty of fitness for
  496. X-- a particular purpose is offered.  The user is advised to
  497. X-- test the software thoroughly before relying on it.  The user
  498. X-- must assume the entire risk and liability of using this
  499. X-- software.
  500. X--
  501. X-- In no event shall any person or organization of people be
  502. X-- held responsible for any direct, indirect, consequential
  503. X-- or inconsequential damages or lost profits.
  504. X--                                                           
  505. X-------------------END-PROLOGUE--------------------------------
  506. X*)
  507. X
  508. X
  509. X
  510. X
  511. X(*****************************************************************************)
  512. X(*****************************************************************************)
  513. X(**                                        **)
  514. X(**                K B D $ R O U T I N E S   Implementation                 **)
  515. X(**                                            **)
  516. X(******* Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne ********)
  517. X(*****************************************************************************)
  518. X
  519. X
  520. X
  521. X
  522. X(*
  523. X * Titre:       KBD$ROUTINES Implementation
  524. X *
  525. X * Sujet:       Implementation des routines KBD$xxx ("Keyboard Routines").
  526. X *
  527. X * Version:       1.0
  528. X *
  529. X * Description:           Ce module contient l'implementation de la fonction
  530. X *                 KBD$READ_KEYSTROKE permettant d'attendre une action au
  531. X *           clavier et renvoyant la sequence ANSI correspondant a la
  532. X *           touche actionnee.
  533. X *
  534. X *                     Le module repose sur l'algorithme producteur-
  535. X *                 consommateur, l'utilisation de primitives de VAX/VMS (System
  536. X *                 Services: $GETDVI, $QIO, etc), d'un sous-programme
  537. X *                 d'interruption (AST) et de la librairie PASCAL$PPL_ROUTINES.
  538. X *
  539. X *                     Le producteur est un sous-programme d'interruption
  540. X *                 active par une action au clavier, alimentant une memoire
  541. X *                 tampon. Le consommateur est la fonction KBD$READ_KEYSTROKE
  542. X *           qui preleve a chaque appel une sequence ANSI de la memoire
  543. X *                 tampon.
  544. X *
  545. X *                     Lorsque le tampon est plein, l'utilisateur est prevenu
  546. X *                 par un beep sonore emit par le sous-programme d'IT.
  547. X *
  548. X *               La fonction KBD$FLUSH_KEYBOARD permet de vider le
  549. X *           tampon clavier.
  550. X *
  551. X *                    Afin de pouvoir recuperer les codes emis par CTRL/C,
  552. X *                 CTRL/O, CTRL/Q, CTRL/S, CTRL/T, CTRL/X, CTRL/Y et F6, il est
  553. X *                 necessaire d'entrer la commande DCL "SET TERMINAL/PASTHRU
  554. X *                 /NOTTSYNC".
  555. X *
  556. X *                     Pour utiliser KBD$READ_KEYSTROKE, il necessaire
  557. X *           d'appeler au prealable la fonction KBD$OPEN_KEYBOARD et de
  558. X *           terminer par KBD$CLOSE_KEYBOARD.
  559. X *                 La routine KBD$OPEN_KEYBOARD permet, entre autres, de ne
  560. X *           creer la zone tampon que si l'on desire reellement utiliser
  561. X *                 KBD$READ_KEYSTROKE.
  562. X *
  563. X * Langage:       PASCAL NON STANDARD
  564. X *
  565. X * Fichier:       KBD$ROUTINES.PAS
  566. X *
  567. X * Environnement:  Machine cible:          VAX
  568. X *           Systeme d'exploitation: VAX/VMS Version 5.4-3
  569. X *           Compilateur:            VAX Pascal Version 4.3
  570. X *
  571. X * Auteur:       Martin VICENTE (DGAC/CENA/SID)
  572. X *
  573. X *           E-mail: vicente@cenaath.cena.dgac.fr
  574. X *
  575. X *           Mail:   C.E.N.A.
  576. X *               Div. Support Informatique & Developpement
  577. X *               Orly Sud 205
  578. X *               94 542 ORLY AEROGARE CEDEX, FRANCE
  579. X *
  580. X * Creation:       19/05/92
  581. X *
  582. X * Modification:   26/05/92
  583. X *
  584. X *)
  585. X
  586. X
  587. X
  588. X
  589. X[INHERIT( 'sys$library:starlet',
  590. X          'sys$library:pascal$lib_routines',
  591. X          'sys$library:pascal$ppl_routines',
  592. X          'vic$library:pascal$kbd_routines'  )]
  593. X
  594. X
  595. XMODULE  kbd$routines (G_screen);
  596. X
  597. X
  598. X
  599. X
  600. X(*================================================================= 19/05/92 *)
  601. X    [HIDDEN] CONST
  602. X(*===========================================================================*)
  603. X
  604. X
  605. X    NUL = Chr ( 0);
  606. X    BEL = Chr ( 7);
  607. X    ESC = Chr (27);
  608. X
  609. X
  610. X(*================================================================= 19/05/92 *)
  611. X    [HIDDEN] TYPE
  612. X(*===========================================================================*)
  613. X
  614. X
  615. X    $WORD  = [WORD] -32768..32767;
  616. X    $UWORD = [WORD] 0..65535;
  617. X
  618. X
  619. X    T_item_list_cell = PACKED RECORD
  620. X                          CASE INTEGER OF
  621. X              1: ( (* Normal Cell -----*)
  622. X                          bufferLength  : $UWORD;
  623. X              itemCode      : $UWORD;
  624. X              bufferAddress : UNSIGNED;
  625. X              returnAddress : UNSIGNED  );
  626. X                          2: ( (* Terminator Cell -*)
  627. X              terminator    : UNSIGNED  )
  628. X                       END;
  629. X
  630. X    T_item_list_template (count : INTEGER) = PACKED ARRAY [1..count] OF
  631. X                                                T_item_list_cell;
  632. X
  633. X
  634. X    T_IOSB = RECORD
  635. X                ioStatus   : $UWORD;
  636. X        transCount : $UWORD;
  637. X            deviceInfo : UNSIGNED
  638. X             END;
  639. X
  640. X    T_device_name = PACKED ARRAY [1..64] OF CHAR;
  641. X
  642. X
  643. X(*================================================================= 19/05/92 *)
  644. X    [HIDDEN] CONST
  645. X(*===========================================================================*)
  646. X
  647. X
  648. X    C_ESCOVERBUF_EMPTY = kbd$t_escape_overflow_buffer [1..4 : Chr (0)];
  649. X
  650. X
  651. X(*================================================================= 20/05/92 *)
  652. X    [HIDDEN] VAR
  653. X(*===========================================================================*)
  654. X
  655. X
  656. X    G_keyboard_open : BOOLEAN VALUE FALSE;
  657. X    G_screen        : [VOLATILE] TEXT;    { Pour emettre le caractere BEL    }
  658. X    G_channel       : [VOLATILE] $UWORD;  { Canal d'E/S affecte a SYS$INPUT  }
  659. X    G_iosb          : [VOLATILE] T_IOSB;  { Bloc de status rempli par la QIO }
  660. X    G_qio_buffer    : [VOLATILE] kbd$t_ansi_sequence;
  661. X
  662. X
  663. X(*================================================================= 19/05/92 *)
  664. X(*           DEFINITIONS POUR L'ALGORITHME PRODUCTEUR/CONSOMMATEUR           *)
  665. X(*===========================================================================*)
  666. X
  667. X
  668. X[HIDDEN] CONST
  669. X
  670. X   C_TAILLE_MAX = 32;  { taille maximale du tampon clavier }
  671. X
  672. X[HIDDEN] TYPE
  673. X
  674. X   T_tampon_clavier = ARRAY [0..C_TAILLE_MAX-1] OF kbd$t_ansi_sequence;
  675. X
  676. X[HIDDEN] VAR
  677. X
  678. X   G_TAMPON_CLAVIER      : [VOLATILE] ^T_tampon_clavier;
  679. X   G_NB_A_CONSOMMER      : [VOLATILE] UNSIGNED;
  680. X   G_NB_PLACE_DISPONIBLE : [VOLATILE] 0 .. C_TAILLE_MAX;
  681. X   G_INDICE_PRODUCTEUR   : [VOLATILE] 0 .. C_TAILLE_MAX - 1;
  682. X   G_INDICE_CONSOMMATEUR : 0 .. C_TAILLE_MAX - 1;
  683. X
  684. X
  685. X
  686. X
  687. X(*****************************************************************************)
  688. X(*****************************************************************************)
  689. X(**                     S O U S  -  P R O G R A M M E S                     **)
  690. X(*****************************************************************************)
  691. X(*****************************************************************************)
  692. X
  693. X
  694. X
  695. X
  696. X(****************************************************************** 22/05/92 *)
  697. X(*    perform                                     *)
  698. X(*****************************************************************************)
  699. X
  700. X[HIDDEN,ASYNCHRONOUS,UNBOUND] PROCEDURE  perform (cond_value : UNSIGNED);
  701. X
  702. XBEGIN
  703. X
  704. X   IF NOT Odd (cond_value) THEN LIB$STOP (cond_value)
  705. X
  706. XEND (* perform *);
  707. X
  708. X
  709. X(****************************************************************** 19/05/92 *)
  710. X(*    SS_get_device_name                             *)
  711. X(*****************************************************************************)
  712. X
  713. X[HIDDEN] FUNCTION  SS_get_device_name (
  714. X
  715. X   device   : PACKED ARRAY [l..u:INTEGER] OF CHAR;
  716. X   VAR name : T_device_name ) : UNSIGNED;
  717. X
  718. XVAR
  719. X
  720. X   item_list   : T_item_list_template (2);
  721. X   device_name : T_device_name;
  722. X   cond_value  : UNSIGNED;
  723. X
  724. XBEGIN
  725. X
  726. X   WITH item_list[1] DO BEGIN
  727. X
  728. X      itemCode      := DVI$_ALLDEVNAM;
  729. X      bufferLength  := size     (device_name);
  730. X      bufferAddress := iAddress (device_name);
  731. X      returnAddress := 0
  732. X
  733. X   END {WITH};
  734. X
  735. X   item_list [2].terminator := 0;
  736. X
  737. X   cond_value := $GETDVI (itmlst := item_list, devnam := device);
  738. X
  739. X   IF cond_value = SS$_NORMAL THEN name := device_name;
  740. X
  741. X   SS_get_device_name := cond_value
  742. X
  743. XEND (* SS_get_device_name *);
  744. X
  745. X
  746. X(****************************************************************** 22/05/92 *)
  747. X  [HIDDEN,ASYNCHRONOUS,UNBOUND] FUNCTION  SS_qio_read : UNSIGNED;  FORWARD;
  748. X(*****************************************************************************)
  749. X
  750. X
  751. X(****************************************************************** 22/05/92 *)
  752. X(*    SS_interrupt_keyboard                             *)
  753. X(*****************************************************************************)
  754. X
  755. X[HIDDEN,ASYNCHRONOUS,UNBOUND] PROCEDURE  interrupt_keyboard;
  756. X
  757. XVAR
  758. X
  759. X   cond_value : UNSIGNED;
  760. X
  761. XBEGIN
  762. X
  763. X   (***************************)
  764. X   (* DEBUT BOUCLE PRODUCTEUR *)
  765. X   (***************************)
  766. X
  767. X   IF (G_iosb.ioStatus = SS$_NORMAL)    OR
  768. X      (G_iosb.ioStatus = SS$_BADESCAPE) THEN BEGIN
  769. X
  770. X      {+}
  771. X      { La condition BADESCAPE permet de traiter la touche F10 (ESC).
  772. X      {-}
  773. X
  774. X      IF G_NB_PLACE_DISPONIBLE = 0 THEN
  775. X
  776. X         Writeln (G_screen, BEL)  { Le tampon clavier est plein ! }
  777. X
  778. X      ELSE BEGIN
  779. X
  780. X         G_NB_PLACE_DISPONIBLE := G_NB_PLACE_DISPONIBLE - 1;
  781. X
  782. X         G_TAMPON_CLAVIER^ [G_INDICE_PRODUCTEUR] := G_qio_buffer;
  783. X
  784. X         IF G_INDICE_PRODUCTEUR = C_TAILLE_MAX - 1
  785. X            THEN G_INDICE_PRODUCTEUR := 0
  786. X        ELSE G_INDICE_PRODUCTEUR := G_INDICE_PRODUCTEUR + 1;
  787. X
  788. X         perform (PPL$INCREMENT_SEMAPHORE (G_NB_A_CONSOMMER))
  789. X
  790. X      END {IF};
  791. X
  792. X      perform (SS_qio_read)
  793. X
  794. X   END
  795. X   ELSE IF G_iosb.ioStatus <> SS$_ABORT THEN BEGIN
  796. X
  797. X      LIB$STOP (G_iosb.ioStatus)
  798. X
  799. X   END {IF}
  800. X
  801. X   (*************************)
  802. X   (* FIN BOUCLE PRODUCTEUR *)
  803. X   (*************************)
  804. X
  805. XEND (* interrupt_keyboard *);
  806. X
  807. X
  808. X(****************************************************************** 22/05/92 *)
  809. X(*    SS_qio_read                                 *)
  810. X(*****************************************************************************)
  811. X
  812. XFUNCTION  SS_qio_read;
  813. X
  814. XCONST
  815. X
  816. X   IO_FUNCTION_CODE = IO$_READVBLK + IO$M_EXTEND;
  817. X
  818. XVAR
  819. X
  820. X   item_list : T_item_list_template (2);
  821. X
  822. XBEGIN
  823. X
  824. X   WITH item_list[1] DO BEGIN
  825. X
  826. X      itemCode      := TRM$_ESCTRMOVR;
  827. X      bufferLength  := 0;
  828. X      bufferAddress := size (G_qio_buffer.escOverBuffer);
  829. X      returnAddress := 0
  830. X
  831. X   END {WITH};
  832. X
  833. X   WITH item_list[2] DO BEGIN
  834. X
  835. X      itemCode      := TRM$_MODIFIERS;
  836. X      bufferLength  := 0;
  837. X      bufferAddress := uOR (uOR ( TRM$M_TM_ESCAPE,
  838. X                  TRM$M_TM_NOECHO ),
  839. X                  TRM$M_TM_NOFILTR );
  840. X      returnAddress := 0
  841. X
  842. X   END {WITH};
  843. X
  844. X   G_qio_buffer.escOverBuffer := C_ESCOVERBUF_EMPTY;
  845. X
  846. X   SS_QIO_read := $QIO ( chan   := G_channel,
  847. X             func   := IO_FUNCTION_CODE,
  848. X             iosb   := G_iosb,
  849. X             astadr := interrupt_keyboard,
  850. X             p1     := G_qio_buffer,
  851. X             p2     := size (G_qio_buffer),
  852. X             p5     := iAddress (item_list),
  853. X             p6     := size (item_list) )
  854. X
  855. XEND (* SS_qio_read *);
  856. X
  857. X
  858. X(****************************************************************** 19/05/92 *)
  859. X(*    KBD$OPEN_KEYBOARD                             *)
  860. X(*****************************************************************************)
  861. X
  862. X[GLOBAL] FUNCTION  kbd$open_keyboard : UNSIGNED;
  863. X
  864. XVAR
  865. X
  866. X   cond_value : UNSIGNED;
  867. X   device     : T_device_name;
  868. X
  869. XBEGIN
  870. X
  871. X   IF G_keyboard_open THEN kbd$open_keyboard := KBD$_ALREADYOPEN
  872. X   ELSE BEGIN
  873. X
  874. X      (********************************)
  875. X      (* DEBUT INITIALISATION COMMUNE *)
  876. X      (********************************)
  877. X
  878. X      {+}
  879. X      { Creation du tampon AVANT l'installation du S/P d'IT.
  880. X      {-}
  881. X      
  882. X      New (G_TAMPON_CLAVIER);
  883. X
  884. X      cond_value := PPL$CREATE_SEMAPHORE (
  885. X               semaphore_id      := G_NB_A_CONSOMMER,
  886. X               semaphore_maximum := C_TAILLE_MAX,
  887. X               semaphore_initial := 0 );
  888. X
  889. X      IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
  890. X      ELSE BEGIN
  891. X
  892. X     G_NB_PLACE_DISPONIBLE := C_TAILLE_MAX;
  893. X
  894. X     (******************************)
  895. X     (* FIN INITIALISATION COMMUNE *)
  896. X     (******************************)
  897. X
  898. X     (***********************************)
  899. X     (* DEBUT INITIALISATION PRODUCTEUR *)
  900. X     (***********************************)
  901. X
  902. X     {+}
  903. X     { Pour emettre le caractere BEL lorsque le tampon sera plein.
  904. X     {-}
  905. X
  906. X     open (G_screen, 'SYS$OUTPUT', carriage_control := NONE);
  907. X
  908. X     Rewrite (G_screen);
  909. X
  910. X         G_INDICE_PRODUCTEUR := 0;
  911. X
  912. X     cond_value := SS_get_device_name ('SYS$INPUT', device);
  913. X
  914. X     IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
  915. X     ELSE BEGIN
  916. X
  917. X        cond_value := $ASSIGN (devnam := device, chan := G_channel);
  918. X
  919. X        IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
  920. X        ELSE BEGIN
  921. X
  922. X               {+}
  923. X               { Premiere mise en place du S/P d'interruption.
  924. X               {-}
  925. X
  926. X               cond_value := SS_qio_read;
  927. X
  928. X           IF NOT Odd (cond_value) THEN kbd$open_keyboard := KBD$_OPENERROR
  929. X           ELSE BEGIN
  930. X
  931. X              (*********************************)
  932. X              (* FIN INITIALISATION PRODUCTEUR *)
  933. X              (*********************************)
  934. X
  935. X                           (*******************************)
  936. X              G_INDICE_CONSOMMATEUR := 0;  (* INITIALISATION CONSOMMATEUR *)
  937. X                           (*******************************)
  938. X
  939. X              G_keyboard_open := TRUE;
  940. X
  941. X              kbd$open_keyboard := KBD$_NORMAL
  942. X
  943. X           END {IF}
  944. X
  945. X        END {IF}
  946. X
  947. X     END {IF}
  948. X
  949. X      END {IF}
  950. X
  951. X   END {IF}
  952. X
  953. XEND (* KBD$OPEN_KEYBOARD *);
  954. X
  955. X
  956. X(****************************************************************** 26/05/92 *)
  957. X(*    KBD$FLUSH_KEYBOARD                             *)
  958. X(*****************************************************************************)
  959. X
  960. X[GLOBAL] FUNCTION  kbd$flush_keyboard : UNSIGNED;
  961. X
  962. XVAR
  963. X
  964. X   cond_value : UNSIGNED;
  965. X
  966. XBEGIN
  967. X
  968. X   IF NOT G_keyboard_open THEN kbd$flush_keyboard := KBD$_NOTOPEN
  969. X   ELSE BEGIN
  970. X
  971. X      cond_value := PPL$CREATE_SEMAPHORE (
  972. X               semaphore_id      := G_NB_A_CONSOMMER,
  973. X               semaphore_maximum := C_TAILLE_MAX,
  974. X               semaphore_initial := 0 );
  975. X
  976. X      IF NOT Odd (cond_value) THEN kbd$flush_keyboard := KBD$_FLUSHERROR
  977. X      ELSE BEGIN
  978. X
  979. X     G_NB_PLACE_DISPONIBLE := C_TAILLE_MAX;
  980. X
  981. X         G_INDICE_PRODUCTEUR   := 0;
  982. X     G_INDICE_CONSOMMATEUR := 0;
  983. X
  984. X     kbd$flush_keyboard := KBD$_NORMAL
  985. X
  986. X      END {IF}
  987. X
  988. X   END {IF}
  989. X
  990. XEND (* KBD$FLUSH_KEYBOARD *);
  991. X
  992. X
  993. X(****************************************************************** 19/05/92 *)
  994. X(*    KBD$CLOSE_KEYBOARD                             *)
  995. X(*****************************************************************************)
  996. X
  997. X[GLOBAL] FUNCTION  kbd$close_keyboard : UNSIGNED;
  998. X
  999. XVAR
  1000. X
  1001. X   cond_value : UNSIGNED;
  1002. X
  1003. XBEGIN
  1004. X
  1005. X   IF NOT G_keyboard_open THEN kbd$close_keyboard := KBD$_ALREADYCLOSE
  1006. X   ELSE BEGIN
  1007. X
  1008. X      G_keyboard_open := FALSE;
  1009. X
  1010. X      cond_value := $CANCEL (chan := G_channel);
  1011. X
  1012. X      IF NOT Odd (cond_value) THEN kbd$close_keyboard := KBD$_CLOSEERROR
  1013. X      ELSE BEGIN
  1014. X
  1015. X         Close (G_screen);
  1016. X
  1017. X         Dispose (G_TAMPON_CLAVIER);
  1018. X
  1019. X         kbd$close_keyboard := KBD$_NORMAL
  1020. X
  1021. X      END {IF}
  1022. X
  1023. X   END {IF}
  1024. X
  1025. XEND (* KBD$CLOSE_KEYBOARD *);
  1026. X
  1027. X
  1028. X(****************************************************************** 19/05/92 *)
  1029. X(*    KBD$READ_KEYSTROKE                             *)
  1030. X(*****************************************************************************)
  1031. X
  1032. X[GLOBAL] FUNCTION  kbd$read_keystroke (
  1033. X
  1034. X   VAR key : kbd$t_ansi_sequence) : UNSIGNED;
  1035. X
  1036. X{+}
  1037. X{ Cette fonction se met en attente d'une action au clavier et renvoie la
  1038. X{ sequence ANSI de la touche qui vient d'etre actionnee.
  1039. X{-}
  1040. X
  1041. XVAR
  1042. X
  1043. X   cond_value : UNSIGNED;
  1044. X
  1045. XBEGIN
  1046. X
  1047. X   IF NOT G_keyboard_open THEN kbd$read_keystroke := KBD$_NOTOPEN
  1048. X   ELSE BEGIN
  1049. X
  1050. X      (*****************************)
  1051. X      (* DEBUT BOUCLE CONSOMMATEUR *)
  1052. X      (*****************************)
  1053. X
  1054. X      cond_value := PPL$DECREMENT_SEMAPHORE (G_NB_A_CONSOMMER);
  1055. X
  1056. X      IF NOT Odd (cond_value) THEN kbd$read_keystroke := KBD$_READERROR
  1057. X      ELSE BEGIN
  1058. X
  1059. X         key := G_TAMPON_CLAVIER^ [G_INDICE_CONSOMMATEUR];
  1060. X
  1061. X         IF G_INDICE_CONSOMMATEUR = C_TAILLE_MAX - 1
  1062. X            THEN G_INDICE_CONSOMMATEUR := 0
  1063. X            ELSE G_INDICE_CONSOMMATEUR := G_INDICE_CONSOMMATEUR + 1;
  1064. X
  1065. X         G_NB_PLACE_DISPONIBLE := G_NB_PLACE_DISPONIBLE + 1;
  1066. X
  1067. X         kbd$read_keystroke := KBD$_NORMAL
  1068. X
  1069. X         (***************************)
  1070. X         (* FIN BOUCLE CONSOMMATEUR *)
  1071. X         (***************************)
  1072. X
  1073. X      END {IF}
  1074. X
  1075. X   END {IF}
  1076. X
  1077. XEND (* KBD$READ_KEYSTROKE *);
  1078. X
  1079. X
  1080. X(****************************************************************** 25/05/92 *)
  1081. X(*    KBD$KEY_PRESSED                                 *)
  1082. X(*****************************************************************************)
  1083. X
  1084. X[GLOBAL] FUNCTION  kbd$key_pressed (VAR yes : BOOLEAN) : UNSIGNED;
  1085. X
  1086. XVAR
  1087. X
  1088. X   nombre     : $WORD;
  1089. X   cond_value : UNSIGNED;
  1090. X
  1091. XBEGIN
  1092. X
  1093. X   IF NOT G_keyboard_open THEN kbd$key_pressed := KBD$_NOTOPEN
  1094. X   ELSE BEGIN
  1095. X
  1096. X      cond_value := PPL$READ_SEMAPHORE (G_NB_A_CONSOMMER, nombre);
  1097. X
  1098. X      IF NOT Odd (cond_value) THEN kbd$key_pressed := KBD$_KEYPRESERROR
  1099. X      ELSE BEGIN
  1100. X
  1101. X         yes := nombre <> 0;
  1102. X
  1103. X         kbd$key_pressed := KBD$_NORMAL
  1104. X
  1105. X      END {IF}
  1106. X
  1107. X   END {IF}
  1108. X
  1109. XEND (* KBD$KEY_PRESSED *);
  1110. X
  1111. X
  1112. X(****************************************************************** 19/05/92 *)
  1113. X(*    KBD$CVT_ANSI_SMG                             *)
  1114. X(*****************************************************************************)
  1115. X
  1116. X[GLOBAL] FUNCTION  kbd$cvt_ansi_smg (sequence : kbd$t_ansi_sequence) : $UWORD;
  1117. X
  1118. XBEGIN
  1119. X
  1120. X   WITH sequence DO BEGIN
  1121. X
  1122. X      IF escOverBuffer = C_ESCOVERBUF_EMPTY THEN BEGIN
  1123. X
  1124. X         (********************)
  1125. X     (* ASCII Characters *)
  1126. X         (********************)
  1127. X
  1128. X         kbd$cvt_ansi_smg := Ord (ascii)
  1129. X
  1130. X      END
  1131. X      ELSE IF ascii = ESC THEN BEGIN
  1132. X
  1133. X         (********************)
  1134. X     (* Escape Sequences *)
  1135. X         (********************)
  1136. X
  1137. X     IF escOverBuffer [1] = 'O' THEN BEGIN  (* SS3 *)
  1138. X
  1139. X        CASE escOverBuffer [2] OF
  1140. X
  1141. X           (* Arrow Keys - Application *)
  1142. X
  1143. X           'A' : kbd$cvt_ansi_smg := SMG$K_TRM_UP;
  1144. X           'B' : kbd$cvt_ansi_smg := SMG$K_TRM_DOWN;
  1145. X           'C' : kbd$cvt_ansi_smg := SMG$K_TRM_RIGHT;
  1146. X           'D' : kbd$cvt_ansi_smg := SMG$K_TRM_LEFT;
  1147. X
  1148. X           (* Numeric Keypad Keys - Application *)
  1149. X
  1150. X           'M' : kbd$cvt_ansi_smg := SMG$K_TRM_ENTER;
  1151. X           'P' : kbd$cvt_ansi_smg := SMG$K_TRM_PF1;
  1152. X           'Q' : kbd$cvt_ansi_smg := SMG$K_TRM_PF2;
  1153. X           'R' : kbd$cvt_ansi_smg := SMG$K_TRM_PF3;
  1154. X           'S' : kbd$cvt_ansi_smg := SMG$K_TRM_PF4;
  1155. X           'l' : kbd$cvt_ansi_smg := SMG$K_TRM_COMMA;
  1156. X           'm' : kbd$cvt_ansi_smg := SMG$K_TRM_MINUS;
  1157. X           'n' : kbd$cvt_ansi_smg := SMG$K_TRM_PERIOD;
  1158. X           'p' : kbd$cvt_ansi_smg := SMG$K_TRM_KP0;
  1159. X           'q' : kbd$cvt_ansi_smg := SMG$K_TRM_KP1;
  1160. X           'r' : kbd$cvt_ansi_smg := SMG$K_TRM_KP2;
  1161. X           's' : kbd$cvt_ansi_smg := SMG$K_TRM_KP3;
  1162. X           't' : kbd$cvt_ansi_smg := SMG$K_TRM_KP4;
  1163. X           'u' : kbd$cvt_ansi_smg := SMG$K_TRM_KP5;
  1164. X           'v' : kbd$cvt_ansi_smg := SMG$K_TRM_KP6;
  1165. X           'w' : kbd$cvt_ansi_smg := SMG$K_TRM_KP7;
  1166. X           'x' : kbd$cvt_ansi_smg := SMG$K_TRM_KP8;
  1167. X           'y' : kbd$cvt_ansi_smg := SMG$K_TRM_KP9
  1168. X
  1169. X           OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1170. X
  1171. X        END {CASE}
  1172. X
  1173. X     END
  1174. X     ELSE IF escOverBuffer [1] = '[' THEN BEGIN  (* CSI *)
  1175. X
  1176. X        IF escOverBuffer [3] = '~' THEN BEGIN
  1177. X
  1178. X           CASE escOverBuffer [2] OF
  1179. X
  1180. X          (* Editing Keys *)
  1181. X
  1182. X          '1' : kbd$cvt_ansi_smg := SMG$K_TRM_FIND;
  1183. X          '2' : kbd$cvt_ansi_smg := SMG$K_TRM_INSERT_HERE;
  1184. X          '3' : kbd$cvt_ansi_smg := SMG$K_TRM_REMOVE;
  1185. X          '4' : kbd$cvt_ansi_smg := SMG$K_TRM_SELECT;
  1186. X          '5' : kbd$cvt_ansi_smg := SMG$K_TRM_PREV_SCREEN;
  1187. X          '6' : kbd$cvt_ansi_smg := SMG$K_TRM_NEXT_SCREEN
  1188. X
  1189. X          OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1190. X
  1191. X           END {CASE}
  1192. X
  1193. X        END
  1194. X        ELSE IF escOverBuffer [4] = '~' THEN BEGIN
  1195. X
  1196. X           CASE escOverBuffer [2] OF
  1197. X
  1198. X          '1' : CASE escOverBuffer [3] OF
  1199. X               '7' : kbd$cvt_ansi_smg := SMG$K_TRM_F6;
  1200. X               '8' : kbd$cvt_ansi_smg := SMG$K_TRM_F7;
  1201. X               '9' : kbd$cvt_ansi_smg := SMG$K_TRM_F8
  1202. X               OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1203. X            END {CASE};
  1204. X          '2' : CASE escOverBuffer [3] OF
  1205. X               '0' : kbd$cvt_ansi_smg := SMG$K_TRM_F9;
  1206. X               '1' : kbd$cvt_ansi_smg := SMG$K_TRM_F10;
  1207. X               '3' : kbd$cvt_ansi_smg := SMG$K_TRM_F11;
  1208. X               '4' : kbd$cvt_ansi_smg := SMG$K_TRM_F12;
  1209. X               '5' : kbd$cvt_ansi_smg := SMG$K_TRM_F13;
  1210. X               '6' : kbd$cvt_ansi_smg := SMG$K_TRM_F14;
  1211. X               '8' : kbd$cvt_ansi_smg := SMG$K_TRM_HELP;
  1212. X               '9' : kbd$cvt_ansi_smg := SMG$K_TRM_DO
  1213. X               OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1214. X            END {CASE};
  1215. X          '3' : CASE escOverBuffer [3] OF
  1216. X               '1' : kbd$cvt_ansi_smg := SMG$K_TRM_F17;
  1217. X               '2' : kbd$cvt_ansi_smg := SMG$K_TRM_F18;
  1218. X               '3' : kbd$cvt_ansi_smg := SMG$K_TRM_F19;
  1219. X               '4' : kbd$cvt_ansi_smg := SMG$K_TRM_F20
  1220. X               OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1221. X            END {CASE}
  1222. X
  1223. X          OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1224. X
  1225. X           END {CASE}
  1226. X
  1227. X        END
  1228. X        ELSE BEGIN
  1229. X
  1230. X           CASE escOverBuffer [2] OF
  1231. X
  1232. X          (* Arrow Keys - Normal *)
  1233. X
  1234. X          'A' : kbd$cvt_ansi_smg := SMG$K_TRM_UP;
  1235. X          'B' : kbd$cvt_ansi_smg := SMG$K_TRM_DOWN;
  1236. X          'C' : kbd$cvt_ansi_smg := SMG$K_TRM_RIGHT;
  1237. X          'D' : kbd$cvt_ansi_smg := SMG$K_TRM_LEFT
  1238. X
  1239. X          OTHERWISE kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1240. X
  1241. X           END {CASE}
  1242. X
  1243. X        END {IF}
  1244. X
  1245. X     END
  1246. X     ELSE BEGIN
  1247. X
  1248. X        kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1249. X
  1250. X     END {IF}
  1251. X
  1252. X      END
  1253. X      ELSE BEGIN
  1254. X
  1255. X     kbd$cvt_ansi_smg := SMG$K_TRM_UNKNOWN
  1256. X
  1257. X      END {IF}
  1258. X
  1259. X   END {WITH}
  1260. X
  1261. XEND (* KBD$CVT_ANSI_SMG *);
  1262. X
  1263. X
  1264. X
  1265. X
  1266. X(*****************************************************************************)
  1267. X
  1268. XEND (* KBD$ROUTINES Implementation *).
  1269. X
  1270. END_OF_FILE
  1271.   if test 21759 -ne `wc -c <'kbd$routines.pas'`; then
  1272.     echo shar: \"'kbd$routines.pas'\" unpacked with wrong size!
  1273.   fi
  1274.   # end of 'kbd$routines.pas'
  1275. fi
  1276. if test -f 'kbd_.ada' -a "${1}" != "-c" ; then 
  1277.   echo shar: Will not clobber existing file \"'kbd_.ada'\"
  1278. else
  1279.   echo shar: Extracting \"'kbd_.ada'\" \(7343 characters\)
  1280.   sed "s/^X//" >'kbd_.ada' <<'END_OF_FILE'
  1281. X
  1282. X------------------ Distribution and Copyright -----------------
  1283. X--
  1284. X-- This software is copyright by the CENA/DGAC/FRANCE
  1285. X-- All rights reserved.
  1286. X--
  1287. X-- No part of the material protected by this copyright notice
  1288. X-- may be reproduced or utilized for commercial use in any form
  1289. X-- without written permission of the copyright owner.
  1290. X--
  1291. X-- It may be reproduced or utilized for R&D use in Non Profit
  1292. X-- Organization
  1293. X--
  1294. X---------------------------------------------------------------
  1295. X
  1296. X
  1297. X------------------ Disclaimer ---------------------------------
  1298. X--
  1299. X-- This software and its documentation are provided "AS IS" and
  1300. X-- without any expressed or implied warranties whatsoever.
  1301. X-- No warranties as to performance, merchantability, or fitness
  1302. X-- for a particular purpose exist.
  1303. X--
  1304. X-- Because of the diversity of conditions and hardware under
  1305. X-- which this software may be used, no warranty of fitness for
  1306. X-- a particular purpose is offered.  The user is advised to
  1307. X-- test the software thoroughly before relying on it.  The user
  1308. X-- must assume the entire risk and liability of using this
  1309. X-- software.
  1310. X--
  1311. X-- In no event shall any person or organization of people be
  1312. X-- held responsible for any direct, indirect, consequential
  1313. X-- or inconsequential damages or lost profits.
  1314. X--                                                           
  1315. X-------------------END-PROLOGUE--------------------------------
  1316. X
  1317. X
  1318. X
  1319. X
  1320. X--*****************************************************************************
  1321. X--*****************************************************************************
  1322. X--**                                         **
  1323. X--**               D E M O   D E S   R O U T I N E S   K B D $               **
  1324. X--**                                         **
  1325. X--******** Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne *******
  1326. X--*****************************************************************************
  1327. X
  1328. X
  1329. X
  1330. X
  1331. X-- ++
  1332. X--
  1333. X-- Titre:       Paquetage KBD
  1334. X--
  1335. X-- Sujet:       Declarations des routines KBD$xxx ("Keyboard Routines").
  1336. X--
  1337. X-- Version:       1.0
  1338. X--
  1339. X-- Description:           Ce paquetage contient la declaration de la procedure
  1340. X--                 READ_KEYSTROKE permettant d'attendre une action au clavier
  1341. X--           et renvoyant la sequence ANSI correspondant a la touche
  1342. X--           actionnee.
  1343. X--
  1344. X--                     Pour utiliser READ_KEYSTROKE, il necessaire d'appeler au
  1345. X--           prealable la procedure OPEN_KEYBOARD et de terminer par
  1346. X--           CLOSE_KEYBOARD.
  1347. X--                 La routine OPEN_KEYBOARD permet, entre autres, de ne creer
  1348. X--           le tampon clavier que si l'on desire reellement utiliser
  1349. X--           READ_KEYSTROKE.
  1350. X--
  1351. X--                     Lorsque le tampon est plein, l'utilisateur est prevenu
  1352. X--                 par un beep sonore.
  1353. X--
  1354. X--               La procedure FLUSH_KEYBOARD permet de vider le tampon
  1355. X--           clavier.
  1356. X--
  1357. X--                    Afin de pouvoir recuperer les codes emis par CTRL/C,
  1358. X--                 CTRL/O, CTRL/Q, CTRL/S, CTRL/T, CTRL/X, CTRL/Y et F6, il est
  1359. X--                 necessaire d'entrer la commande DCL "SET TERMINAL/PASTHRU
  1360. X--                 /NOTTSYNC".
  1361. X--
  1362. X-- Langage:       ADA
  1363. X--
  1364. X-- Fichier:       KBD_.ADA
  1365. X--
  1366. X-- Paquetage:       KBD
  1367. X--
  1368. X-- Environnement:  Machine cible:          VAX
  1369. X--           Systeme d'exploitation: VAX/VMS Version 5.4
  1370. X--           Compilateur:            VAX Ada Version 2.1-28
  1371. X--
  1372. X-- Auteur:       Martin VICENTE (DGAC/CENA/SID)
  1373. X--
  1374. X--           E-mail: vicente@cenaath.cena.dgac.fr
  1375. X--
  1376. X--           Mail:   C.E.N.A.
  1377. X--               Div. Support Informatique & Developpement
  1378. X--               Orly Sud 205
  1379. X--               94 542 ORLY AEROGARE CEDEX, FRANCE
  1380. X--
  1381. X-- Creation:       19/05/92
  1382. X--
  1383. X-- Modification:   26/05/92
  1384. X--
  1385. X-- --
  1386. X
  1387. X
  1388. X
  1389. X
  1390. Xwith CONDITION_HANDLING;
  1391. Xwith SYSTEM;
  1392. X
  1393. X
  1394. Xuse CONDITION_HANDLING;
  1395. Xuse SYSTEM;
  1396. X
  1397. X
  1398. X
  1399. X
  1400. Xpackage KBD is
  1401. X
  1402. X
  1403. X
  1404. X
  1405. X-- ============================================================================
  1406. X--  TYPE
  1407. X-- ============================================================================
  1408. X
  1409. X
  1410. X    type T_ESCAPE_OVERFLOW_BUFFER is array (1..4) of character;
  1411. X
  1412. X    type T_ANSI_SEQUENCE is record
  1413. X        ASCII         : character;
  1414. X        ESCOVERBUFFER : T_ESCAPE_OVERFLOW_BUFFER;
  1415. X    end record;
  1416. X
  1417. X
  1418. X
  1419. X
  1420. X-- ****************************************************************************
  1421. X-- ****************************************************************************
  1422. X-- **                        KBD$ ROUTINE DECLARATION                        **
  1423. X-- ****************************************************************************
  1424. X-- ****************************************************************************
  1425. X
  1426. X
  1427. X
  1428. X
  1429. X--
  1430. X-- KBD$CLOSE_KEYBOARD
  1431. X--
  1432. X--   Libere la memoire des structures de donnees associees a ce module.
  1433. X--
  1434. X
  1435. X    procedure CLOSE_KEYBOARD (COND_VALUE : out COND_VALUE_TYPE);
  1436. X
  1437. X
  1438. X--
  1439. X-- KBD$CVT_ANSI_SMG
  1440. X--
  1441. X--   Convertit la sequence ANSI d'une touche en un code SMG.
  1442. X--
  1443. X--   Liste des codes pouvant etre renvoyes (ils sont definis dans le paquetage
  1444. X--   SMG):
  1445. X--
  1446. X--    ascii (0 - 255)        K_TRM_UP        K_TRM_DOWN
  1447. X--    K_TRM_RIGHT        K_TRM_LEFT        K_TRM_ENTER
  1448. X--    K_TRM_PF1        K_TRM_PF2        K_TRM_PF3
  1449. X--    K_TRM_PF4        K_TRM_COMMA        K_TRM_MINUS
  1450. X--    K_TRM_PERIOD        K_TRM_KP0        K_TRM_KP1
  1451. X--    K_TRM_KP2        K_TRM_KP3        K_TRM_KP4
  1452. X--    K_TRM_KP5        K_TRM_KP6        K_TRM_KP7
  1453. X--    K_TRM_KP8        K_TRM_KP9        K_TRM_FIND
  1454. X--    K_TRM_INSERT_HERE    K_TRM_REMOVE        K_TRM_SELECT
  1455. X--    K_TRM_PREV_SCREEN    K_TRM_NEXT_SCREEN    K_TRM_F6
  1456. X--    K_TRM_F7        K_TRM_F8        K_TRM_F9
  1457. X--    K_TRM_F10        K_TRM_F11        K_TRM_F12
  1458. X--    K_TRM_F13        K_TRM_F14        K_TRM_HELP
  1459. X--    K_TRM_DO        K_TRM_F17        K_TRM_F18
  1460. X--    K_TRM_F19        K_TRM_F20        K_TRM_UP
  1461. X--    K_TRM_DOWN        K_TRM_RIGHT        K_TRM_LEFT
  1462. X--    K_TRM_UNKNOWN
  1463. X--
  1464. X
  1465. X    procedure CVT_ANSI_SMG (
  1466. X        SMG_CODE : out UNSIGNED_WORD;
  1467. X    SEQUENCE : in  T_ANSI_SEQUENCE );
  1468. X
  1469. X
  1470. X--
  1471. X-- KBD$FLUSH_KEYBOARD
  1472. X--
  1473. X--   Vide le tampon clavier.
  1474. X--
  1475. X
  1476. X    procedure FLUSH_KEYBOARD (COND_VALUE : out COND_VALUE_TYPE);
  1477. X
  1478. X
  1479. X--
  1480. X-- KBD$KEY_PRESSED
  1481. X--
  1482. X--   Indique si au moins une touche est presente dans le tampon.
  1483. X--
  1484. X
  1485. X    procedure KEY_PRESSED (
  1486. X        COND_VALUE : out COND_VALUE_TYPE;
  1487. X    YES        : out BOOLEAN );
  1488. X
  1489. X
  1490. X--
  1491. X-- KBD$OPEN_KEYBOARD
  1492. X--
  1493. X--   Creation et initialisation des structures de donnees associees au module.
  1494. X--
  1495. X
  1496. X    procedure OPEN_KEYBOARD (COND_VALUE : out COND_VALUE_TYPE);
  1497. X
  1498. X
  1499. X--
  1500. X-- KBD$READ_KEYSTROKE
  1501. X--
  1502. X--   Extrait la touche suivante du tampon; si ce dernier est vide, se met en
  1503. X--   attente d'une action au clavier.
  1504. X--
  1505. X
  1506. X    procedure READ_KEYSTROKE (
  1507. X        COND_VALUE : out    COND_VALUE_TYPE;
  1508. X        KEY        : in out T_ANSI_SEQUENCE );
  1509. X
  1510. X
  1511. X
  1512. X
  1513. X-- ****************************************************************************
  1514. X
  1515. X
  1516. Xprivate
  1517. X
  1518. X
  1519. X    pragma INTERFACE (external, CLOSE_KEYBOARD);
  1520. X
  1521. X    pragma IMPORT_VALUED_PROCEDURE ( CLOSE_KEYBOARD, "KBD$CLOSE_KEYBOARD",
  1522. X        (COND_VALUE_TYPE) );
  1523. X
  1524. X
  1525. X    pragma INTERFACE (external, CVT_ANSI_SMG);
  1526. X
  1527. X    pragma IMPORT_VALUED_PROCEDURE ( CVT_ANSI_SMG, "KBD$CVT_ANSI_SMG",
  1528. X        (UNSIGNED_WORD, T_ANSI_SEQUENCE) );
  1529. X
  1530. X
  1531. X    pragma INTERFACE (external, FLUSH_KEYBOARD);
  1532. X
  1533. X    pragma IMPORT_VALUED_PROCEDURE ( FLUSH_KEYBOARD, "KBD$FLUSH_KEYBOARD",
  1534. X        (COND_VALUE_TYPE) );
  1535. X
  1536. X
  1537. X    pragma INTERFACE (external, KEY_PRESSED);
  1538. X
  1539. X    pragma IMPORT_VALUED_PROCEDURE ( KEY_PRESSED, "KBD$KEY_PRESSED",
  1540. X        (cond_value_type, BOOLEAN) );
  1541. X
  1542. X
  1543. X    pragma INTERFACE (external, OPEN_KEYBOARD);
  1544. X
  1545. X    pragma IMPORT_VALUED_PROCEDURE ( OPEN_KEYBOARD, "KBD$OPEN_KEYBOARD",
  1546. X        (COND_VALUE_TYPE) );
  1547. X
  1548. X
  1549. X    pragma INTERFACE (external, READ_KEYSTROKE);
  1550. X
  1551. X    pragma IMPORT_VALUED_PROCEDURE ( READ_KEYSTROKE, "KBD$READ_KEYSTROKE",
  1552. X        (COND_VALUE_TYPE, T_ANSI_SEQUENCE) );
  1553. X
  1554. X
  1555. Xend KBD;
  1556. END_OF_FILE
  1557.   if test 7343 -ne `wc -c <'kbd_.ada'`; then
  1558.     echo shar: \"'kbd_.ada'\" unpacked with wrong size!
  1559.   fi
  1560.   # end of 'kbd_.ada'
  1561. fi
  1562. if test -f 'kbdmsg.msg' -a "${1}" != "-c" ; then 
  1563.   echo shar: Will not clobber existing file \"'kbdmsg.msg'\"
  1564. else
  1565.   echo shar: Extracting \"'kbdmsg.msg'\" \(3427 characters\)
  1566.   sed "s/^X//" >'kbdmsg.msg' <<'END_OF_FILE'
  1567. X
  1568. X!------------------ Distribution and Copyright -----------------
  1569. X!--
  1570. X!-- This software is copyright by the CENA/DGAC/FRANCE
  1571. X!-- All rights reserved.
  1572. X!--
  1573. X!-- No part of the material protected by this copyright notice
  1574. X!-- may be reproduced or utilized for commercial use in any form
  1575. X!-- without written permission of the copyright owner.
  1576. X!--
  1577. X!-- It may be reproduced or utilized for R&D use in Non Profit
  1578. X!-- Organization
  1579. X!--
  1580. X!---------------------------------------------------------------
  1581. X
  1582. X
  1583. X!------------------ Disclaimer ---------------------------------
  1584. X!--
  1585. X!-- This software and its documentation are provided "AS IS" and
  1586. X!-- without any expressed or implied warranties whatsoever.
  1587. X!-- No warranties as to performance, merchantability, or fitness
  1588. X!-- for a particular purpose exist.
  1589. X!--
  1590. X!-- Because of the diversity of conditions and hardware under
  1591. X!-- which this software may be used, no warranty of fitness for
  1592. X!-- a particular purpose is offered.  The user is advised to
  1593. X!-- test the software thoroughly before relying on it.  The user
  1594. X!-- must assume the entire risk and liability of using this
  1595. X!-- software.
  1596. X!--
  1597. X!-- In no event shall any person or organization of people be
  1598. X!-- held responsible for any direct, indirect, consequential
  1599. X!-- or inconsequential damages or lost profits.
  1600. X!--                                                           
  1601. X!-------------------END-PROLOGUE--------------------------------
  1602. X
  1603. X
  1604. X
  1605. X
  1606. X!*****************************************************************************
  1607. X!*****************************************************************************
  1608. X!**                                                                         **
  1609. X!**           M E S S A G E S   P O U R   K B D $ R O U T I N E S           **
  1610. X!**                                                                         **
  1611. X!******** Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne *******
  1612. X!*****************************************************************************
  1613. X
  1614. X
  1615. X
  1616. X
  1617. X!++
  1618. X!
  1619. X! Titre:      MESSAGES POUR KBD$ROUTINES
  1620. X!
  1621. X! Sujet:      Definition des messages pour KBD$ROUTINES.
  1622. X!
  1623. X! Version:      1.0
  1624. X!
  1625. X! Description:          Ce fichier contient les messages d'erreur utilises par la
  1626. X!          bibliotheque de routines KBD$ROUTINES.
  1627. X!              Il doit etre compile a travers la commande MESSAGE. Le
  1628. X!          fichier objet obtenu peut etre soit lie directement a
  1629. X!          l'application, soit etre utilise pour generer une image
  1630. X!          partageable: ce sera alors un fichier vecteur qui sera lie
  1631. X!          a l'application.
  1632. X!
  1633. X! Fichier:      KBDMSG.MSG
  1634. X!
  1635. X! Environnement:  VAX/VMS Version 5.4-3
  1636. X!                 VAX/VMS Message Utility
  1637. X!
  1638. X! Auteur:      Martin VICENTE (DGAC/CENA/SID)
  1639. X! 
  1640. X!           E-mail: vicente@cenaath.cena.dgac.fr
  1641. X! 
  1642. X!           Mail:   C.E.N.A.
  1643. X!               Div. Support Informatique & Developpement
  1644. X!               Orly Sud 205
  1645. X!               94 542 ORLY AEROGARE CEDEX, FRANCE
  1646. X!
  1647. X! Creation:      19/05/92
  1648. X!
  1649. X! Modification:      26/05/92
  1650. X!
  1651. X!--
  1652. X
  1653. X
  1654. X.title Messages for KBD$ utility
  1655. X
  1656. X.ident "Version 1.0"
  1657. X
  1658. X.facility KBD, 1 /prefix=KBD$_
  1659. X
  1660. X
  1661. X.severity success
  1662. X
  1663. XNORMAL        <normal successful completion>
  1664. X
  1665. X
  1666. X.severity informational
  1667. X
  1668. XALREADYOPEN    <keyboard already open>
  1669. XALREADYCLOSE    <keyboard already close>
  1670. X
  1671. X
  1672. X.severity warning
  1673. X
  1674. XNOTOPEN        <keyboard not open>
  1675. X
  1676. X
  1677. X.severity error
  1678. X
  1679. XCLOSEERROR    <error during close operation>
  1680. XFLUSHERROR    <error during flush operation>
  1681. XKEYPRESERROR    <error during key pressed operation>
  1682. XOPENERROR    <error during open operation>
  1683. XREADERROR    <error during read operation>
  1684. X
  1685. END_OF_FILE
  1686.   if test 3427 -ne `wc -c <'kbdmsg.msg'`; then
  1687.     echo shar: \"'kbdmsg.msg'\" unpacked with wrong size!
  1688.   fi
  1689.   # end of 'kbdmsg.msg'
  1690. fi
  1691. if test -f 'pascal$kbd_routines.pas' -a "${1}" != "-c" ; then 
  1692.   echo shar: Will not clobber existing file \"'pascal$kbd_routines.pas'\"
  1693. else
  1694.   echo shar: Extracting \"'pascal$kbd_routines.pas'\" \(7178 characters\)
  1695.   sed "s/^X//" >'pascal$kbd_routines.pas' <<'END_OF_FILE'
  1696. X(*
  1697. X------------------ Distribution and Copyright -----------------
  1698. X--
  1699. X-- This software is copyright by the CENA/DGAC/FRANCE
  1700. X-- All rights reserved.
  1701. X--
  1702. X-- No part of the material protected by this copyright notice
  1703. X-- may be reproduced or utilized for commercial use in any form
  1704. X-- without written permission of the copyright owner.
  1705. X--
  1706. X-- It may be reproduced or utilized for R&D use in Non Profit
  1707. X-- Organization
  1708. X--
  1709. X---------------------------------------------------------------
  1710. X
  1711. X
  1712. X------------------ Disclaimer ---------------------------------
  1713. X--
  1714. X-- This software and its documentation are provided "AS IS" and
  1715. X-- without any expressed or implied warranties whatsoever.
  1716. X-- No warranties as to performance, merchantability, or fitness
  1717. X-- for a particular purpose exist.
  1718. X--
  1719. X-- Because of the diversity of conditions and hardware under
  1720. X-- which this software may be used, no warranty of fitness for
  1721. X-- a particular purpose is offered.  The user is advised to
  1722. X-- test the software thoroughly before relying on it.  The user
  1723. X-- must assume the entire risk and liability of using this
  1724. X-- software.
  1725. X--
  1726. X-- In no event shall any person or organization of people be
  1727. X-- held responsible for any direct, indirect, consequential
  1728. X-- or inconsequential damages or lost profits.
  1729. X--                                                           
  1730. X-------------------END-PROLOGUE--------------------------------
  1731. X*)
  1732. X
  1733. X
  1734. X
  1735. X
  1736. X(*****************************************************************************)
  1737. X(*****************************************************************************)
  1738. X(**                                        **)
  1739. X(**                           PASCAL$KBD_ROUTINES                           **)
  1740. X(**                                        **)
  1741. X(******** Copyright (C) 1992 Centre d'Etudes de la Navigation Aerienne *******)
  1742. X(*****************************************************************************)
  1743. X
  1744. X
  1745. X
  1746. X
  1747. X(*
  1748. X * Titre:       PASCAL$KBD_ROUTINES
  1749. X *
  1750. X * Sujet:       Declarations des routines KBD$xxx ("Keyboard Routines").
  1751. X *
  1752. X * Version:       1.0
  1753. X *
  1754. X * Description:           Ce module contient la declaration de la fonction
  1755. X *                 KBD$READ_KEYSTROKE permettant d'attendre une action au
  1756. X *           clavier et renvoyant la sequence ANSI correspondant a la
  1757. X *           touche actionnee.
  1758. X *
  1759. X *                     Pour utiliser KBD$READ_KEYSTROKE, il necessaire
  1760. X *           d'appeler au prealable la fonction KBD$OPEN_KEYBOARD et de
  1761. X *           terminer par KBD$CLOSE_KEYBOARD.
  1762. X *                 La routine KBD$OPEN_KEYBOARD permet, entre autres, de ne
  1763. X *           creer le tampon clavier que si l'on desire reellement
  1764. X *           utiliser KBD$READ_KEYSTROKE.
  1765. X *
  1766. X *                     Lorsque le tampon est plein, l'utilisateur est prevenu
  1767. X *                 par un beep sonore.
  1768. X *
  1769. X *               La fonction KBD$FLUSH_KEYBOARD permet de vider le
  1770. X *           tampon clavier.
  1771. X *
  1772. X *                    Afin de pouvoir recuperer les codes emis par CTRL/C,
  1773. X *                 CTRL/O, CTRL/Q, CTRL/S, CTRL/T, CTRL/X, CTRL/Y et F6, il est
  1774. X *                 necessaire d'entrer la commande DCL "SET TERMINAL/PASTHRU
  1775. X *                 /NOTTSYNC".
  1776. X *
  1777. X * Langage:       PASCAL NON STANDARD
  1778. X *
  1779. X * Fichier:       PASCAL$KBD_ROUTINES_V_1_0.PAS
  1780. X *
  1781. X * Module:       PASCAL$KBD_ROUTINES
  1782. X *
  1783. X * Environnement:  Machine cible:          VAX
  1784. X *           Systeme d'exploitation: VAX/VMS Version 5.4-3
  1785. X *           Compilateur:            VAX Pascal Version 4.3
  1786. X *
  1787. X * Auteur:       Martin VICENTE (DGAC/CENA/SID)
  1788. X *
  1789. X *           E-mail: vicente@cenaath.cena.dgac.fr
  1790. X *
  1791. X *           Mail:   C.E.N.A.
  1792. X *               Div. Support Informatique & Developpement
  1793. X *               Orly Sud 205
  1794. X *               94 542 ORLY AEROGARE CEDEX, FRANCE
  1795. X *
  1796. X *
  1797. X * Creation:       19/05/92
  1798. X *
  1799. X * Modification:   26/05/92
  1800. X *
  1801. X *)
  1802. X
  1803. X
  1804. X
  1805. X
  1806. XMODULE  pascal$kbd_routines;
  1807. X
  1808. X
  1809. X
  1810. X
  1811. X(*===========================================================================*)
  1812. X    [HIDDEN] TYPE
  1813. X(*===========================================================================*)
  1814. X
  1815. X
  1816. X    $UWORD = [WORD] 0..65535;
  1817. X
  1818. X
  1819. X(*===========================================================================*)
  1820. X    TYPE
  1821. X(*===========================================================================*)
  1822. X
  1823. X
  1824. X    KBD$T_ESCAPE_OVERFLOW_BUFFER = PACKED ARRAY [1..4] OF CHAR;
  1825. X
  1826. X    KBD$T_ANSI_SEQUENCE = PACKED RECORD
  1827. X                     ascii         : CHAR;
  1828. X                 escOverBuffer : KBD$T_ESCAPE_OVERFLOW_BUFFER
  1829. X                  END;
  1830. X
  1831. X
  1832. X(*===========================================================================*)
  1833. X(*                         CONDITION VALUE RETURNED                          *)
  1834. X(*===========================================================================*)
  1835. X
  1836. X
  1837. XVAR  KBD$_NORMAL,
  1838. X     KBD$_ALREADYOPEN,
  1839. X     KBD$_OPENERROR,
  1840. X     KBD$_ALREADYCLOSE,
  1841. X     KBD$_CLOSEERROR,
  1842. X     KBD$_NOTOPEN,
  1843. X     KBD$_READERROR,
  1844. X     KBD$_KEYPRESERROR,
  1845. X     KBD$_FLUSHERROR
  1846. X
  1847. X     : [EXTERNAL,VALUE] UNSIGNED;
  1848. X
  1849. X
  1850. X
  1851. X
  1852. X(*****************************************************************************)
  1853. X(*****************************************************************************)
  1854. X(**                        KBD$ FUNCTION DECLARATION                        **)
  1855. X(*****************************************************************************)
  1856. X(*****************************************************************************)
  1857. X
  1858. X
  1859. X
  1860. X
  1861. X(*
  1862. X * KBD$CLOSE_KEYBOARD
  1863. X *
  1864. X *   Libere la memoire des structures de donnees associees a ce module.
  1865. X *)
  1866. X
  1867. XFUNCTION  kbd$close_keyboard : UNSIGNED;
  1868. X
  1869. XEXTERNAL;
  1870. X
  1871. X
  1872. X(*
  1873. X * KBD$CVT_ANSI_SMG
  1874. X *
  1875. X *   Convertit la sequence ANSI d'une touche en un code SMG.
  1876. X *
  1877. X *   Liste des codes pouvant etre renvoyes (ils sont definis dans
  1878. X *   SYS$LIBRARY:PASCAL$SMG_ROUTINES):
  1879. X *
  1880. X *    ascii (0 - 255)        SMG$K_TRM_UP        SMG$K_TRM_DOWN
  1881. X *    SMG$K_TRM_RIGHT        SMG$K_TRM_LEFT        SMG$K_TRM_ENTER
  1882. X *    SMG$K_TRM_PF1        SMG$K_TRM_PF2        SMG$K_TRM_PF3
  1883. X *    SMG$K_TRM_PF4        SMG$K_TRM_COMMA        SMG$K_TRM_MINUS
  1884. X *    SMG$K_TRM_PERIOD    SMG$K_TRM_KP0        SMG$K_TRM_KP1
  1885. X *    SMG$K_TRM_KP2        SMG$K_TRM_KP3        SMG$K_TRM_KP4
  1886. X *    SMG$K_TRM_KP5        SMG$K_TRM_KP6        SMG$K_TRM_KP7
  1887. X *    SMG$K_TRM_KP8        SMG$K_TRM_KP9        SMG$K_TRM_FIND
  1888. X *    SMG$K_TRM_INSERT_HERE    SMG$K_TRM_REMOVE    SMG$K_TRM_SELECT
  1889. X *    SMG$K_TRM_PREV_SCREEN    SMG$K_TRM_NEXT_SCREEN    SMG$K_TRM_F6
  1890. X *    SMG$K_TRM_F7        SMG$K_TRM_F8        SMG$K_TRM_F9
  1891. X *    SMG$K_TRM_F10        SMG$K_TRM_F11        SMG$K_TRM_F12
  1892. X *    SMG$K_TRM_F13        SMG$K_TRM_F14        SMG$K_TRM_HELP
  1893. X *    SMG$K_TRM_DO        SMG$K_TRM_F17        SMG$K_TRM_F18
  1894. X *    SMG$K_TRM_F19        SMG$K_TRM_F20        SMG$K_TRM_UP
  1895. X *    SMG$K_TRM_DOWN        SMG$K_TRM_RIGHT        SMG$K_TRM_LEFT
  1896. X *    SMG$K_TRM_UNKNOWN
  1897. X *)
  1898. X
  1899. XFUNCTION  kbd$cvt_ansi_smg (sequence : kbd$t_ansi_sequence) : $UWORD;
  1900. X
  1901. XEXTERNAL;
  1902. X
  1903. X
  1904. X(*
  1905. X * KBD$FLUSH_KEYBOARD
  1906. X *
  1907. X *   Vide le tampon clavier.
  1908. X *)
  1909. X
  1910. XFUNCTION  kbd$flush_keyboard : UNSIGNED;
  1911. X
  1912. XEXTERNAL;
  1913. X
  1914. X
  1915. X(*
  1916. X * KBD$KEY_PRESSED
  1917. X *
  1918. X *   Indique si au moins une touche est presente dans le tampon.
  1919. X *)
  1920. X
  1921. XFUNCTION  kbd$key_pressed (VAR yes : BOOLEAN) : UNSIGNED;
  1922. X
  1923. XEXTERNAL;
  1924. X
  1925. X
  1926. X(*
  1927. X * KBD$OPEN_KEYBOARD
  1928. X *
  1929. X *   Creation et initialisation des structures de donnees associees au module.
  1930. X *)
  1931. X
  1932. XFUNCTION  kbd$open_keyboard : UNSIGNED;
  1933. X
  1934. XEXTERNAL;
  1935. X
  1936. X
  1937. X(*
  1938. X * KBD$READ_KEYSTROKE
  1939. X *
  1940. X *   Extrait la touche suivante du tampon; si ce dernier est vide, se met en
  1941. X *   attente d'une action au clavier.
  1942. X *)
  1943. X
  1944. XFUNCTION  kbd$read_keystroke (VAR key : kbd$t_ansi_sequence) : UNSIGNED;
  1945. X
  1946. XEXTERNAL;
  1947. X
  1948. X
  1949. X
  1950. X
  1951. X(*****************************************************************************)
  1952. X
  1953. XEND (* PASCAL$KBD_ROUTINES *).
  1954. END_OF_FILE
  1955.   if test 7178 -ne `wc -c <'pascal$kbd_routines.pas'`; then
  1956.     echo shar: \"'pascal$kbd_routines.pas'\" unpacked with wrong size!
  1957.   fi
  1958.   # end of 'pascal$kbd_routines.pas'
  1959. fi
  1960. echo shar: End of archive 1 \(of 2\).
  1961. cp /dev/null ark1isdone
  1962. MISSING=""
  1963. for I in 1 2 ; do
  1964.     if test ! -f ark${I}isdone ; then
  1965.     MISSING="${MISSING} ${I}"
  1966.     fi
  1967. done
  1968. if test "${MISSING}" = "" ; then
  1969.     echo You have unpacked both archives.
  1970.     rm -f ark[1-9]isdone
  1971. else
  1972.     echo You still must unpack the following archives:
  1973.     echo "        " ${MISSING}
  1974. fi
  1975. exit 0
  1976. exit 0 # Just in case...
  1977.