home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / vmsnet / sources / 482 < prev    next >
Encoding:
Internet Message Format  |  1993-01-05  |  47.1 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
  2. Newsgroups: vmsnet.sources
  3. From: vicente@cenaath.cena.dgac.fr (Martin VICENTE)
  4. Subject: VMS/RTL/KBD, part 02/03
  5. Date: Tue, 05 Jan 1993 00:07:25 GMT
  6. Message-ID: <9912958@MVB.SAIC.COM>
  7. Lines: 1437
  8. Approved: Mark.Berryman@Mvb.Saic.Com
  9.  
  10. Submitted-by: vicente@cenaath.cena.dgac.fr (Martin VICENTE)
  11. Posting-number: Volume 4, Issue 36
  12. Archive-name: keyboard_rtl/part02
  13.  
  14. -+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+
  15. X(*****************************************************************************
  16. V)
  17. X
  18. X
  19. X
  20. X
  21. X(*
  22. X`20*`20Titre:`09`20`20`20KBD$ROUTINES`20Implementation
  23. X`20*
  24. X`20*`20Sujet:`09`20`20`20Implementation`20des`20routines`20KBD$xxx`20("Keyboar
  25. Vd`20Routines").
  26. X`20*
  27. X`20*`20Version:`09`20`20`201.0
  28. X`20*
  29. X`20*`20Description:`09`20`20`20`20`20`20`20Ce`20module`20contient`20l'implemen
  30. Vtation`20de`20la`20fonction
  31. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20KBD$READ_KEYSTROKE`20pe
  32. Vrmettant`20d'attendre`20une`20action`20au
  33. X`20*`09`09`20`20`20clavier`20et`20renvoyant`20la`20sequence`20ANSI`20correspon
  34. Vdant`20a`20la
  35. X`20*`09`09`20`20`20touche`20actionnee.
  36. X`20*
  37. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Le`20module
  38. V`20repose`20sur`20l'algorithme`20producteur-
  39. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20consommateur,`20l'utili
  40. Vsation`20de`20primitives`20de`20VAX/VMS`20(System
  41. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Services:`20$GETDVI,
  42. V`20$QIO,`20etc),`20d'un`20sous-programme
  43. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20d'interruption`20(AST)
  44. V`20et`20de`20la`20librairie`20PASCAL$PPL_ROUTINES.
  45. X`20*
  46. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Le`20produc
  47. Vteur`20est`20un`20sous-programme`20d'interruption
  48. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20active`20par`20une`20ac
  49. Vtion`20au`20clavier,`20alimentant`20une`20memoire
  50. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20tampon.`20Le`20consomma
  51. Vteur`20est`20la`20fonction`20KBD$READ_KEYSTROKE
  52. X`20*`09`09`20`20`20qui`20preleve`20a`20chaque`20appel`20une`20sequence`20ANSI
  53. V`20de`20la`20memoire
  54. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20tampon.
  55. X`20*
  56. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Lorsque`20l
  57. Ve`20tampon`20est`20plein,`20l'utilisateur`20est`20prevenu
  58. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20par`20un`20beep`20sonor
  59. Ve`20emit`20par`20le`20sous-programme`20d'IT.
  60. X`20*
  61. X`20*`09`09`20`20`20`20`20`20`20La`20fonction`20KBD$FLUSH_KEYBOARD`20permet`20d
  62. Ve`20vider`20le
  63. X`20*`09`09`20`20`20tampon`20clavier.
  64. X`20*
  65. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Afin`20de`20po
  66. Vuvoir`20recuperer`20les`20codes`20emis`20par`20CTRL/C,
  67. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CTRL/O,`20CTRL/Q,`20CTR
  68. VL/S,`20CTRL/T,`20CTRL/X,`20CTRL/Y`20et`20F6,`20il`20est
  69. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20necessaire`20d'entrer
  70. V`20la`20commande`20DCL`20"SET`20TERMINAL/PASTHRU
  71. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20/NOTTSYNC".
  72. X`20*
  73. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Pour`20util
  74. Viser`20KBD$READ_KEYSTROKE,`20il`20necessaire
  75. X`20*`09`09`20`20`20d'appeler`20au`20prealable`20la`20fonction`20KBD$OPEN_KEYBO
  76. VARD`20et`20de
  77. X`20*`09`09`20`20`20terminer`20par`20KBD$CLOSE_KEYBOARD.
  78. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20La`20routine`20KBD$OPEN
  79. V_KEYBOARD`20permet,`20entre`20autres,`20de`20ne
  80. X`20*`09`09`20`20`20creer`20la`20zone`20tampon`20que`20si`20l'on`20desire`20ree
  81. Vllement`20utiliser
  82. X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20KBD$READ_KEYSTROKE.
  83. X`20*
  84. X`20*`20Langage:`09`20`20`20PASCAL`20NON`20STANDARD
  85. X`20*
  86. X`20*`20Fichier:`09`20`20`20KBD$ROUTINES.PAS
  87. X`20*
  88. X`20*`20Environnement:`20`20Machine`20cible:`20`20`20`20`20`20`20`20`20`20VAX
  89. X`20*`09`09`20`20`20Systeme`20d'exploitation:`20VAX/VMS`20Version`205.4-3
  90. X`20*`09`09`20`20`20Compilateur:`20`20`20`20`20`20`20`20`20`20`20`20VAX`20Pasca
  91. Vl`20Version`204.3
  92. X`20*
  93. X`20*`20Auteur:`09`20`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
  94. X`20*
  95. X`20*`09`09`20`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
  96. X`20*
  97. X`20*`09`09`20`20`20Mail:`20`20`20C.E.N.A.
  98. X`20*`09`09`09`20`20`20Div.`20Support`20Informatique`20`26`20Developpement
  99. X`20*`09`09`09`20`20`20Orly`20Sud`20205
  100. X`20*`09`09`09`20`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
  101. X`20*
  102. X`20*`20Creation:`09`20`20`2019/05/92
  103. X`20*
  104. X`20*`20Modification:`20`20`2021/12/92
  105. X`20*
  106. X`20*)
  107. X
  108. X
  109. X
  110. X
  111. X`5BINHERIT(`20'sys$library:starlet',
  112. X`20`20`20`20`20`20`20`20`20`20'sys$library:pascal$lib_routines',
  113. X`20`20`20`20`20`20`20`20`20`20'sys$library:pascal$ppl_routines',
  114. X`20`20`20`20`20`20`20`20`20`20'pascal$kbd_routines'`20)`5D
  115. X
  116. X
  117. XMODULE`20`20kbd$routines`20(G_screen);
  118. X
  119. X
  120. X
  121. X
  122. X(*=================================================================`2019/05/92
  123. V`20*)
  124. X`09`5BHIDDEN`5D`20CONST
  125. X(*===========================================================================*
  126. V)
  127. X
  128. X
  129. X`20`20`20`20NUL`20=`20Chr`20(`200);
  130. X`20`20`20`20BEL`20=`20Chr`20(`207);
  131. X`20`20`20`20ESC`20=`20Chr`20(27);
  132. X
  133. X
  134. X(*=================================================================`2019/05/92
  135. V`20*)
  136. X`09`5BHIDDEN`5D`20TYPE
  137. X(*===========================================================================*
  138. V)
  139. X
  140. X
  141. X`20`20`20`20$WORD`20`20=`20`5BWORD`5D`20-32768..32767;
  142. X`20`20`20`20$UWORD`20=`20`5BWORD`5D`200..65535;
  143. X
  144. X
  145. X`20`20`20`20T_item_list_cell`20=`20PACKED`20RECORD
  146. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  147. V`20CASE`20INTEGER`20OF
  148. X`09`09`09`20`201:`20(`20(*`20Normal`20Cell`20-----*)
  149. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  150. V`20bufferLength`20`20:`20$UWORD;
  151. X`09`09`09`20`20itemCode`20`20`20`20`20`20:`20$UWORD;
  152. X`09`09`09`20`20bufferAddress`20:`20UNSIGNED;
  153. X`09`09`09`20`20returnAddress`20:`20UNSIGNED`20`20);
  154. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  155. V`202:`20(`20(*`20Terminator`20Cell`20-*)
  156. X`09`09`09`20`20terminator`20`20`20`20:`20UNSIGNED`20`20)
  157. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20END;
  158. X
  159. X`20`20`20`20T_item_list_template`20(count`20:`20INTEGER)`20=`20PACKED`20ARRAY
  160. V`20`5B1..count`5D`20OF
  161. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  162. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20T_item_li
  163. Vst_cell;
  164. X
  165. X
  166. X`20`20`20`20T_IOSB`20=`20RECORD
  167. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ioStatus`20`20`20:`20$UWORD;
  168. X`09`09transCount`20:`20$UWORD;
  169. X`09`20`20`20`20`20`20`20`20deviceInfo`20:`20UNSIGNED
  170. X`20`20`20`20`20`20`20`20`20`20`20`20`20END;
  171. X
  172. X`20`20`20`20T_device_name`20=`20PACKED`20ARRAY`20`5B1..64`5D`20OF`20CHAR;
  173. X
  174. X
  175. X(*=================================================================`2019/05/92
  176. V`20*)
  177. X`09`5BHIDDEN`5D`20CONST
  178. X(*===========================================================================*
  179. V)
  180. X
  181. X
  182. X`20`20`20`20C_ESCOVERBUF_EMPTY`20=`20kbd$t_escape_overflow_buffer`20`5B1..4
  183. V`20:`20Chr`20(0)`5D;
  184. X
  185. X
  186. X(*=================================================================`2020/05/92
  187. V`20*)
  188. X`09`5BHIDDEN`5D`20VAR
  189. X(*===========================================================================*
  190. V)
  191. X
  192. X
  193. X`20`20`20`20G_keyboard_open`20:`20BOOLEAN`20VALUE`20FALSE;
  194. X`20`20`20`20G_screen`20`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20TEXT;`20`20
  195. V`20`20`7B`20Pour`20emettre`20le`20caractere`20BEL`20`20`20`20`7D
  196. X`20`20`20`20G_channel`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20$UWORD;`20`20
  197. V`7B`20Canal`20d'E/S`20affecte`20a`20SYS$INPUT`20`20`7D
  198. X`20`20`20`20G_iosb`20`20`20`20`20`20`20`20`20`20:`20`5BVOLATILE`5D`20T_IOSB;
  199. V`20`20`7B`20Bloc`20de`20status`20rempli`20par`20la`20QIO`20`7D
  200. X`20`20`20`20G_qio_buffer`20`20`20`20:`20`5BVOLATILE`5D`20kbd$t_ansi_sequence;
  201. X
  202. X
  203. X(*=================================================================`2019/05/92
  204. V`20*)
  205. X(*`20`20`20`20`20`20`20`20`20`20`20DEFINITIONS`20POUR`20L'ALGORITHME`20PRODUCT
  206. VEUR/CONSOMMATEUR`20`20`20`20`20`20`20`20`20`20`20*)
  207. X(*===========================================================================*
  208. V)
  209. X
  210. X
  211. X`5BHIDDEN`5D`20CONST
  212. X
  213. X`20`20`20C_TAILLE_MAX`20=`2032;`20`20`7B`20taille`20maximale`20du`20tampon`20c
  214. Vlavier`20`7D
  215. X
  216. X`5BHIDDEN`5D`20TYPE
  217. X
  218. X`20`20`20T_tampon_clavier`20=`20ARRAY`20`5B0..C_TAILLE_MAX-1`5D`20OF`20kbd$t_a
  219. Vnsi_sequence;
  220. X
  221. X`5BHIDDEN`5D`20VAR
  222. X
  223. X`20`20`20G_TAMPON_CLAVIER`20`20`20`20`20`20:`20`5BVOLATILE`5D`20`5ET_tampon_cl
  224. Vavier;
  225. X`20`20`20G_NB_A_CONSOMMER`20`20`20`20`20`20:`20`5BVOLATILE`5D`20UNSIGNED;
  226. X`20`20`20G_NB_PLACE_DISPONIBLE`20:`20`5BVOLATILE`5D`200`20..`20C_TAILLE_MAX;
  227. X`20`20`20G_INDICE_PRODUCTEUR`20`20`20:`20`5BVOLATILE`5D`200`20..`20C_TAILLE_MA
  228. VX`20-`201;
  229. X`20`20`20G_INDICE_CONSOMMATEUR`20:`200`20..`20C_TAILLE_MAX`20-`201;
  230. X
  231. X
  232. X
  233. X
  234. X(*****************************************************************************
  235. V)
  236. X(*****************************************************************************
  237. V)
  238. X(**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20S`20O`20U
  239. V`20S`20`20-`20`20P`20R`20O`20G`20R`20A`20M`20M`20E`20S`20`20`20`20`20`20`20
  240. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20**)
  241. X(*****************************************************************************
  242. V)
  243. X(*****************************************************************************
  244. V)
  245. X
  246. X
  247. X
  248. X
  249. X(******************************************************************`2022/05/92
  250. V`20*)
  251. X(*`09perform`09`09`09`09`09`09`09`09`20`20`20`20`20*)
  252. X(*****************************************************************************
  253. V)
  254. X
  255. X`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20PROCEDURE`20`20perform`20(cond_value`20:
  256. V`20UNSIGNED);
  257. X
  258. XBEGIN
  259. X
  260. X`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20LIB$STOP`20(cond_value)
  261. X
  262. XEND`20(*`20perform`20*);
  263. X
  264. X
  265. X(******************************************************************`2019/05/92
  266. V`20*)
  267. X(*`09SS_get_device_name`09`09`09`09`09`09`20`20`20`20`20*)
  268. X(*****************************************************************************
  269. V)
  270. X
  271. X`5BHIDDEN`5D`20FUNCTION`20`20SS_get_device_name`20(
  272. X
  273. X`20`20`20device`20`20`20:`20PACKED`20ARRAY`20`5Bl..u:INTEGER`5D`20OF`20CHAR;
  274. X`20`20`20VAR`20name`20:`20T_device_name`20)`20:`20UNSIGNED;
  275. X
  276. XVAR
  277. X
  278. X`20`20`20item_list`20`20`20:`20T_item_list_template`20(2);
  279. X`20`20`20device_name`20:`20T_device_name;
  280. X`20`20`20cond_value`20`20:`20UNSIGNED;
  281. X
  282. XBEGIN
  283. X
  284. X`20`20`20WITH`20item_list`5B1`5D`20DO`20BEGIN
  285. X
  286. X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20DVI$_ALLDEVNAM;
  287. X`20`20`20`20`20`20bufferLength`20`20:=`20size`20`20`20`20`20(device_name);
  288. X`20`20`20`20`20`20bufferAddress`20:=`20iAddress`20(device_name);
  289. X`20`20`20`20`20`20returnAddress`20:=`200
  290. X
  291. X`20`20`20END`20`7BWITH`7D;
  292. X
  293. X`20`20`20item_list`20`5B2`5D.terminator`20:=`200;
  294. X
  295. X`20`20`20cond_value`20:=`20$GETDVI`20(itmlst`20:=`20item_list,`20devnam`20:=
  296. V`20device);
  297. X
  298. X`20`20`20IF`20cond_value`20=`20SS$_NORMAL`20THEN`20name`20:=`20device_name;
  299. X
  300. X`20`20`20SS_get_device_name`20:=`20cond_value
  301. X
  302. XEND`20(*`20SS_get_device_name`20*);
  303. X
  304. X
  305. X(******************************************************************`2022/05/92
  306. V`20*)
  307. X`20`20`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20FUNCTION`20`20SS_qio_read`20:`20UNSI
  308. VGNED;`20`20FORWARD;
  309. X(*****************************************************************************
  310. V)
  311. X
  312. X
  313. X(******************************************************************`2022/05/92
  314. V`20*)
  315. X(*`09SS_interrupt_keyboard`09`09`09`09`09`09`20`20`20`20`20*)
  316. X(*****************************************************************************
  317. V)
  318. X
  319. X`5BHIDDEN,ASYNCHRONOUS,UNBOUND`5D`20PROCEDURE`20`20interrupt_keyboard;
  320. X
  321. XVAR
  322. X
  323. X`20`20`20cond_value`20:`20UNSIGNED;
  324. X
  325. XBEGIN
  326. X
  327. X`20`20`20(***************************)
  328. X`20`20`20(*`20DEBUT`20BOUCLE`20PRODUCTEUR`20*)
  329. X`20`20`20(***************************)
  330. X
  331. X`20`20`20IF`20(G_iosb.ioStatus`20=`20SS$_NORMAL)`20`20`20`20OR
  332. X`20`20`20`20`20`20(G_iosb.ioStatus`20=`20SS$_BADESCAPE)`20THEN`20BEGIN
  333. X
  334. X`20`20`20`20`20`20`7B+`7D
  335. X`20`20`20`20`20`20`7B`20La`20condition`20BADESCAPE`20permet`20de`20traiter`20l
  336. Va`20touche`20F10`20(ESC).
  337. X`20`20`20`20`20`20`7B-`7D
  338. X
  339. X`20`20`20`20`20`20IF`20G_NB_PLACE_DISPONIBLE`20=`200`20THEN
  340. X
  341. X`20`20`20`20`20`20`20`20`20Writeln`20(G_screen,`20BEL)`20`20`7B`20Le`20tampon
  342. V`20clavier`20est`20plein`20!`20`7D
  343. X
  344. X`20`20`20`20`20`20ELSE`20BEGIN
  345. X
  346. X`20`20`20`20`20`20`20`20`20G_NB_PLACE_DISPONIBLE`20:=`20G_NB_PLACE_DISPONIBLE
  347. V`20-`201;
  348. X
  349. X`20`20`20`20`20`20`20`20`20G_TAMPON_CLAVIER`5E`20`5BG_INDICE_PRODUCTEUR`5D`20:
  350. V=`20G_qio_buffer;
  351. X
  352. X`20`20`20`20`20`20`20`20`20IF`20G_INDICE_PRODUCTEUR`20=`20C_TAILLE_MAX`20-`201
  353. V
  354. X`20`20`20`20`20`20`20`20`20`20`20`20THEN`20G_INDICE_PRODUCTEUR`20:=`200
  355. X`09`20`20`20`20ELSE`20G_INDICE_PRODUCTEUR`20:=`20G_INDICE_PRODUCTEUR`20+`201;
  356. X
  357. X`20`20`20`20`20`20`20`20`20perform`20(PPL$INCREMENT_SEMAPHORE`20(G_NB_A_CONSOM
  358. VMER))
  359. X
  360. X`20`20`20`20`20`20END`20`7BIF`7D;
  361. X
  362. X`20`20`20`20`20`20perform`20(SS_qio_read)
  363. X
  364. X`20`20`20END
  365. X`20`20`20ELSE`20IF`20G_iosb.ioStatus`20<>`20SS$_ABORT`20THEN`20BEGIN
  366. X
  367. X`20`20`20`20`20`20LIB$STOP`20(G_iosb.ioStatus)
  368. X
  369. X`20`20`20END`20`7BIF`7D
  370. X
  371. X`20`20`20(*************************)
  372. X`20`20`20(*`20FIN`20BOUCLE`20PRODUCTEUR`20*)
  373. X`20`20`20(*************************)
  374. X
  375. XEND`20(*`20interrupt_keyboard`20*);
  376. X
  377. X
  378. X(******************************************************************`2022/05/92
  379. V`20*)
  380. X(*`09SS_qio_read`09`09`09`09`09`09`09`20`20`20`20`20*)
  381. X(*****************************************************************************
  382. V)
  383. X
  384. XFUNCTION`20`20SS_qio_read;
  385. X
  386. XCONST
  387. X
  388. X`20`20`20IO_FUNCTION_CODE`20=`20IO$_READVBLK`20+`20IO$M_EXTEND;
  389. X
  390. XVAR
  391. X
  392. X`20`20`20item_list`20:`20T_item_list_template`20(2);
  393. X
  394. XBEGIN
  395. X
  396. X`20`20`20WITH`20item_list`5B1`5D`20DO`20BEGIN
  397. X
  398. X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20TRM$_ESCTRMOVR;
  399. X`20`20`20`20`20`20bufferLength`20`20:=`200;
  400. X`20`20`20`20`20`20bufferAddress`20:=`20size`20(G_qio_buffer.escOverBuffer);
  401. X`20`20`20`20`20`20returnAddress`20:=`200
  402. X
  403. X`20`20`20END`20`7BWITH`7D;
  404. X
  405. X`20`20`20WITH`20item_list`5B2`5D`20DO`20BEGIN
  406. X
  407. X`20`20`20`20`20`20itemCode`20`20`20`20`20`20:=`20TRM$_MODIFIERS;
  408. X`20`20`20`20`20`20bufferLength`20`20:=`200;
  409. X`20`20`20`20`20`20bufferAddress`20:=`20uOR`20(uOR`20(`20TRM$M_TM_ESCAPE,
  410. X`09`09`09`09`20`20TRM$M_TM_NOECHO`20),
  411. X`09`09`09`09`20`20TRM$M_TM_NOFILTR`20);
  412. X`20`20`20`20`20`20returnAddress`20:=`200
  413. X
  414. X`20`20`20END`20`7BWITH`7D;
  415. X
  416. X`20`20`20G_qio_buffer.escOverBuffer`20:=`20C_ESCOVERBUF_EMPTY;
  417. X
  418. X`20`20`20SS_QIO_read`20:=`20$QIO`20(`20chan`20`20`20:=`20G_channel,
  419. X`09`09`09`20func`20`20`20:=`20IO_FUNCTION_CODE,
  420. X`09`09`09`20iosb`20`20`20:=`20G_iosb,
  421. X`09`09`09`20astadr`20:=`20interrupt_keyboard,
  422. X`09`09`09`20p1`20`20`20`20`20:=`20G_qio_buffer,
  423. X`09`09`09`20p2`20`20`20`20`20:=`20size`20(G_qio_buffer),
  424. X`09`09`09`20p5`20`20`20`20`20:=`20iAddress`20(item_list),
  425. X`09`09`09`20p6`20`20`20`20`20:=`20size`20(item_list)`20)
  426. X
  427. XEND`20(*`20SS_qio_read`20*);
  428. X
  429. X
  430. X(******************************************************************`2019/05/92
  431. V`20*)
  432. X(*`09KBD$OPEN_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
  433. X(*****************************************************************************
  434. V)
  435. X
  436. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$open_keyboard`20:`20UNSIGNED;
  437. X
  438. XVAR
  439. X
  440. X`20`20`20cond_value`20:`20UNSIGNED;
  441. X`20`20`20device`20`20`20`20`20:`20T_device_name;
  442. X
  443. XBEGIN
  444. X
  445. X`20`20`20IF`20G_keyboard_open`20THEN`20kbd$open_keyboard`20:=`20KBD$_ALREADYOP
  446. VEN
  447. X`20`20`20ELSE`20BEGIN
  448. X
  449. X`20`20`20`20`20`20(********************************)
  450. X`20`20`20`20`20`20(*`20DEBUT`20INITIALISATION`20COMMUNE`20*)
  451. X`20`20`20`20`20`20(********************************)
  452. X
  453. X`20`20`20`20`20`20`7B+`7D
  454. X`20`20`20`20`20`20`7B`20Creation`20du`20tampon`20AVANT`20l'installation`20du
  455. V`20S/P`20d'IT.
  456. X`20`20`20`20`20`20`7B-`7D
  457. X`20`20`20`20`20`20
  458. X`20`20`20`20`20`20New`20(G_TAMPON_CLAVIER);
  459. X
  460. X`20`20`20`20`20`20cond_value`20:=`20PPL$CREATE_SEMAPHORE`20(
  461. X`09`09`20`20`20`20`20`20`20semaphore_id`20`20`20`20`20`20:=`20G_NB_A_CONSOMMER
  462. V,
  463. X`09`09`20`20`20`20`20`20`20semaphore_maximum`20:=`20C_TAILLE_MAX,
  464. X`09`09`20`20`20`20`20`20`20semaphore_initial`20:=`200`20);
  465. X
  466. X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:
  467. V=`20KBD$_OPENERROR
  468. X`20`20`20`20`20`20ELSE`20BEGIN
  469. X
  470. X`09`20G_NB_PLACE_DISPONIBLE`20:=`20C_TAILLE_MAX;
  471. X
  472. X`09`20(******************************)
  473. X`09`20(*`20FIN`20INITIALISATION`20COMMUNE`20*)
  474. X`09`20(******************************)
  475. X
  476. X`09`20(***********************************)
  477. X`09`20(*`20DEBUT`20INITIALISATION`20PRODUCTEUR`20*)
  478. X`09`20(***********************************)
  479. X
  480. X`09`20`7B+`7D
  481. X`09`20`7B`20Pour`20emettre`20le`20caractere`20BEL`20lorsque`20le`20tampon`20se
  482. Vra`20plein.
  483. X`09`20`7B-`7D
  484. X
  485. X`09`20open`20(G_screen,`20'SYS$OUTPUT',`20carriage_control`20:=`20NONE);
  486. X
  487. X`09`20Rewrite`20(G_screen);
  488. X
  489. X`20`20`20`20`20`20`20`20`20G_INDICE_PRODUCTEUR`20:=`200;
  490. X
  491. X`09`20cond_value`20:=`20SS_get_device_name`20('SYS$INPUT',`20device);
  492. X
  493. X`09`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:=`20KBD$_OPE
  494. VNERROR
  495. X`09`20ELSE`20BEGIN
  496. X
  497. X`09`20`20`20`20cond_value`20:=`20$ASSIGN`20(devnam`20:=`20device,`20chan`20:=
  498. V`20G_channel);
  499. X
  500. X`09`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboard`20:=
  501. V`20KBD$_OPENERROR
  502. X`09`20`20`20`20ELSE`20BEGIN
  503. X
  504. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B+`7D
  505. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B`20Premiere`20mise`20en`20plac
  506. Ve`20du`20S/P`20d'interruption.
  507. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B-`7D
  508. X
  509. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20cond_value`20:=`20SS_qio_read;
  510. X
  511. X`09`20`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$open_keyboa
  512. Vrd`20:=`20KBD$_OPENERROR
  513. X`09`20`20`20`20`20`20`20ELSE`20BEGIN
  514. X
  515. X`09`20`20`20`20`20`20`20`20`20`20(*********************************)
  516. X`09`20`20`20`20`20`20`20`20`20`20(*`20FIN`20INITIALISATION`20PRODUCTEUR`20*)
  517. X`09`20`20`20`20`20`20`20`20`20`20(*********************************)
  518. X
  519. X`09`09`09`09`09`20`20`20`20`20`20`20(*******************************)
  520. X`09`20`20`20`20`20`20`20`20`20`20G_INDICE_CONSOMMATEUR`20:=`200;`20`20(*`20INI
  521. VTIALISATION`20CONSOMMATEUR`20*)
  522. X`09`09`09`09`09`20`20`20`20`20`20`20(*******************************)
  523. X
  524. X`09`20`20`20`20`20`20`20`20`20`20G_keyboard_open`20:=`20TRUE;
  525. X
  526. X`09`20`20`20`20`20`20`20`20`20`20kbd$open_keyboard`20:=`20KBD$_NORMAL
  527. X
  528. X`09`20`20`20`20`20`20`20END`20`7BIF`7D
  529. X
  530. X`09`20`20`20`20END`20`7BIF`7D
  531. X
  532. X`09`20END`20`7BIF`7D
  533. X
  534. X`20`20`20`20`20`20END`20`7BIF`7D
  535. X
  536. X`20`20`20END`20`7BIF`7D
  537. X
  538. XEND`20(*`20KBD$OPEN_KEYBOARD`20*);
  539. X
  540. X
  541. X(******************************************************************`2026/05/92
  542. V`20*)
  543. X(*`09KBD$FLUSH_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
  544. X(*****************************************************************************
  545. V)
  546. X
  547. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$flush_keyboard`20:`20UNSIGNED;
  548. X
  549. XVAR
  550. X
  551. X`20`20`20cond_value`20:`20UNSIGNED;
  552. X
  553. XBEGIN
  554. X
  555. X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$flush_keyboard`20:=`20KBD$_NO
  556. VTOPEN
  557. X`20`20`20ELSE`20BEGIN
  558. X
  559. X`20`20`20`20`20`20cond_value`20:=`20PPL$CREATE_SEMAPHORE`20(
  560. X`09`09`20`20`20`20`20`20`20semaphore_id`20`20`20`20`20`20:=`20G_NB_A_CONSOMMER
  561. V,
  562. X`09`09`20`20`20`20`20`20`20semaphore_maximum`20:=`20C_TAILLE_MAX,
  563. X`09`09`20`20`20`20`20`20`20semaphore_initial`20:=`200`20);
  564. X
  565. X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$flush_keyboard
  566. V`20:=`20KBD$_FLUSHERROR
  567. X`20`20`20`20`20`20ELSE`20BEGIN
  568. X
  569. X`09`20G_NB_PLACE_DISPONIBLE`20:=`20C_TAILLE_MAX;
  570. X
  571. X`20`20`20`20`20`20`20`20`20G_INDICE_PRODUCTEUR`20`20`20:=`200;
  572. X`09`20G_INDICE_CONSOMMATEUR`20:=`200;
  573. X
  574. X`09`20kbd$flush_keyboard`20:=`20KBD$_NORMAL
  575. X
  576. X`20`20`20`20`20`20END`20`7BIF`7D
  577. X
  578. X`20`20`20END`20`7BIF`7D
  579. X
  580. XEND`20(*`20KBD$FLUSH_KEYBOARD`20*);
  581. X
  582. X
  583. X(******************************************************************`2019/05/92
  584. V`20*)
  585. X(*`09KBD$CLOSE_KEYBOARD`09`09`09`09`09`09`20`20`20`20`20*)
  586. X(*****************************************************************************
  587. V)
  588. X
  589. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$close_keyboard`20:`20UNSIGNED;
  590. X
  591. XVAR
  592. X
  593. X`20`20`20cond_value`20:`20UNSIGNED;
  594. X
  595. XBEGIN
  596. X
  597. X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$close_keyboard`20:=`20KBD$_AL
  598. VREADYCLOSE
  599. X`20`20`20ELSE`20BEGIN
  600. X
  601. X`20`20`20`20`20`20G_keyboard_open`20:=`20FALSE;
  602. X
  603. X`20`20`20`20`20`20cond_value`20:=`20$CANCEL`20(chan`20:=`20G_channel);
  604. X
  605. X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$close_keyboard
  606. V`20:=`20KBD$_CLOSEERROR
  607. X`20`20`20`20`20`20ELSE`20BEGIN
  608. X
  609. X`20`20`20`20`20`20`20`20`20Close`20(G_screen);
  610. X
  611. X`20`20`20`20`20`20`20`20`20Dispose`20(G_TAMPON_CLAVIER);
  612. X
  613. X`20`20`20`20`20`20`20`20`20kbd$close_keyboard`20:=`20KBD$_NORMAL
  614. X
  615. X`20`20`20`20`20`20END`20`7BIF`7D
  616. X
  617. X`20`20`20END`20`7BIF`7D
  618. X
  619. XEND`20(*`20KBD$CLOSE_KEYBOARD`20*);
  620. X
  621. X
  622. X(******************************************************************`2019/05/92
  623. V`20*)
  624. X(*`09KBD$READ_KEYSTROKE`09`09`09`09`09`09`20`20`20`20`20*)
  625. X(*****************************************************************************
  626. V)
  627. X
  628. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$read_keystroke`20(
  629. X
  630. X`20`20`20VAR`20key`20:`20kbd$t_ansi_sequence)`20:`20UNSIGNED;
  631. X
  632. X`7B+`7D
  633. X`7B`20Cette`20fonction`20se`20met`20en`20attente`20d'une`20action`20au`20clavi
  634. Ver`20et`20renvoie`20la
  635. X`7B`20sequence`20ANSI`20de`20la`20touche`20qui`20vient`20d'etre`20actionnee.
  636. X`7B-`7D
  637. X
  638. XVAR
  639. X
  640. X`20`20`20cond_value`20:`20UNSIGNED;
  641. X
  642. XBEGIN
  643. X
  644. X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$read_keystroke`20:=`20KBD$_NO
  645. VTOPEN
  646. X`20`20`20ELSE`20BEGIN
  647. X
  648. X`20`20`20`20`20`20(*****************************)
  649. X`20`20`20`20`20`20(*`20DEBUT`20BOUCLE`20CONSOMMATEUR`20*)
  650. X`20`20`20`20`20`20(*****************************)
  651. X
  652. X`20`20`20`20`20`20cond_value`20:=`20PPL$DECREMENT_SEMAPHORE`20(G_NB_A_CONSOMME
  653. VR);
  654. X
  655. X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$read_keystroke
  656. V`20:=`20KBD$_READERROR
  657. X`20`20`20`20`20`20ELSE`20BEGIN
  658. X
  659. X`20`20`20`20`20`20`20`20`20key`20:=`20G_TAMPON_CLAVIER`5E`20`5BG_INDICE_CONSOM
  660. VMATEUR`5D;
  661. X
  662. X`20`20`20`20`20`20`20`20`20IF`20G_INDICE_CONSOMMATEUR`20=`20C_TAILLE_MAX`20-
  663. V`201
  664. X`20`20`20`20`20`20`20`20`20`20`20`20THEN`20G_INDICE_CONSOMMATEUR`20:=`200
  665. X`20`20`20`20`20`20`20`20`20`20`20`20ELSE`20G_INDICE_CONSOMMATEUR`20:=`20G_INDI
  666. VCE_CONSOMMATEUR`20+`201;
  667. X
  668. X`20`20`20`20`20`20`20`20`20G_NB_PLACE_DISPONIBLE`20:=`20G_NB_PLACE_DISPONIBLE
  669. V`20+`201;
  670. X
  671. X`20`20`20`20`20`20`20`20`20kbd$read_keystroke`20:=`20KBD$_NORMAL
  672. X
  673. X`20`20`20`20`20`20`20`20`20(***************************)
  674. X`20`20`20`20`20`20`20`20`20(*`20FIN`20BOUCLE`20CONSOMMATEUR`20*)
  675. X`20`20`20`20`20`20`20`20`20(***************************)
  676. X
  677. X`20`20`20`20`20`20END`20`7BIF`7D
  678. X
  679. X`20`20`20END`20`7BIF`7D
  680. X
  681. XEND`20(*`20KBD$READ_KEYSTROKE`20*);
  682. X
  683. X
  684. X(******************************************************************`2025/05/92
  685. V`20*)
  686. X(*`09KBD$KEY_PRESSED`09`09`09`09`09`09`09`20`20`20`20`20*)
  687. X(*****************************************************************************
  688. V)
  689. X
  690. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$key_pressed`20(VAR`20yes`20:`20BOOLEAN)`20:
  691. V`20UNSIGNED;
  692. X
  693. XVAR
  694. X
  695. X`20`20`20nombre`20`20`20`20`20:`20$WORD;
  696. X`20`20`20cond_value`20:`20UNSIGNED;
  697. X
  698. XBEGIN
  699. X
  700. X`20`20`20IF`20NOT`20G_keyboard_open`20THEN`20kbd$key_pressed`20:=`20KBD$_NOTOP
  701. VEN
  702. X`20`20`20ELSE`20BEGIN
  703. X
  704. X`20`20`20`20`20`20cond_value`20:=`20PPL$READ_SEMAPHORE`20(G_NB_A_CONSOMMER,
  705. V`20nombre);
  706. X
  707. X`20`20`20`20`20`20IF`20NOT`20Odd`20(cond_value)`20THEN`20kbd$key_pressed`20:=
  708. V`20KBD$_KEYPRESERROR
  709. X`20`20`20`20`20`20ELSE`20BEGIN
  710. X
  711. X`20`20`20`20`20`20`20`20`20yes`20:=`20nombre`20<>`200;
  712. X
  713. X`20`20`20`20`20`20`20`20`20kbd$key_pressed`20:=`20KBD$_NORMAL
  714. X
  715. X`20`20`20`20`20`20END`20`7BIF`7D
  716. X
  717. X`20`20`20END`20`7BIF`7D
  718. X
  719. XEND`20(*`20KBD$KEY_PRESSED`20*);
  720. X
  721. X
  722. X(******************************************************************`2019/05/92
  723. V`20*)
  724. X(*`09KBD$CVT_ANSI_SMG`09`09`09`09`09`09`20`20`20`20`20*)
  725. X(*****************************************************************************
  726. V)
  727. X
  728. X`5BGLOBAL`5D`20FUNCTION`20`20kbd$cvt_ansi_smg`20(sequence`20:`20kbd$t_ansi_seq
  729. Vuence)`20:`20$UWORD;
  730. X
  731. XBEGIN
  732. X
  733. X`20`20`20WITH`20sequence`20DO`20BEGIN
  734. X
  735. X`20`20`20`20`20`20IF`20escOverBuffer`20=`20C_ESCOVERBUF_EMPTY`20THEN`20BEGIN
  736. X
  737. X`20`20`20`20`20`20`20`20`20(********************)
  738. X`09`20(*`20ASCII`20Characters`20*)
  739. X`20`20`20`20`20`20`20`20`20(********************)
  740. X
  741. X`20`20`20`20`20`20`20`20`20kbd$cvt_ansi_smg`20:=`20Ord`20(ascii)
  742. X
  743. X`20`20`20`20`20`20END
  744. X`20`20`20`20`20`20ELSE`20IF`20ascii`20=`20ESC`20THEN`20BEGIN
  745. X
  746. X`20`20`20`20`20`20`20`20`20(********************)
  747. X`09`20(*`20Escape`20Sequences`20*)
  748. X`20`20`20`20`20`20`20`20`20(********************)
  749. X
  750. X`09`20IF`20escOverBuffer`20`5B1`5D`20=`20'O'`20THEN`20BEGIN`20`20(*`20SS3`20*)
  751. V
  752. X
  753. X`09`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
  754. X
  755. X`09`20`20`20`20`20`20`20(*`20Arrow`20Keys`20-`20Application`20*)
  756. X
  757. X`09`20`20`20`20`20`20`20'A'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UP;
  758. X`09`20`20`20`20`20`20`20'B'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DOWN;
  759. X`09`20`20`20`20`20`20`20'C'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_RIGHT;
  760. X`09`20`20`20`20`20`20`20'D'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_LEFT;
  761. X
  762. X`09`20`20`20`20`20`20`20(*`20Numeric`20Keypad`20Keys`20-`20Application`20*)
  763. X
  764. X`09`20`20`20`20`20`20`20'M'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_ENTER;
  765. X`09`20`20`20`20`20`20`20'P'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF1;
  766. X`09`20`20`20`20`20`20`20'Q'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF2;
  767. X`09`20`20`20`20`20`20`20'R'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF3;
  768. X`09`20`20`20`20`20`20`20'S'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PF4;
  769. X`09`20`20`20`20`20`20`20'l'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_COMMA;
  770. X`09`20`20`20`20`20`20`20'm'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_MINUS;
  771. X`09`20`20`20`20`20`20`20'n'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PERIOD;
  772. X`09`20`20`20`20`20`20`20'p'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP0;
  773. X`09`20`20`20`20`20`20`20'q'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP1;
  774. X`09`20`20`20`20`20`20`20'r'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP2;
  775. X`09`20`20`20`20`20`20`20's'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP3;
  776. X`09`20`20`20`20`20`20`20't'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP4;
  777. X`09`20`20`20`20`20`20`20'u'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP5;
  778. X`09`20`20`20`20`20`20`20'v'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP6;
  779. X`09`20`20`20`20`20`20`20'w'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP7;
  780. X`09`20`20`20`20`20`20`20'x'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP8;
  781. X`09`20`20`20`20`20`20`20'y'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_KP9
  782. X
  783. X`09`20`20`20`20`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  784. X
  785. X`09`20`20`20`20END`20`7BCASE`7D
  786. X
  787. X`09`20END
  788. X`09`20ELSE`20IF`20escOverBuffer`20`5B1`5D`20=`20'`5B'`20THEN`20BEGIN`20`20(*
  789. V`20CSI`20*)
  790. X
  791. X`09`20`20`20`20IF`20escOverBuffer`20`5B3`5D`20=`20'`7E'`20THEN`20BEGIN
  792. X
  793. X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
  794. X
  795. X`09`09`20`20(*`20Editing`20Keys`20*)
  796. X
  797. X`09`09`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_FIND;
  798. X`09`09`20`20'2'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_INSERT_HERE;
  799. X`09`09`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_REMOVE;
  800. X`09`09`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_SELECT;
  801. X`09`09`20`20'5'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_PREV_SCREEN;
  802. X`09`09`20`20'6'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_NEXT_SCREEN
  803. X
  804. X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  805. X
  806. X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
  807. X
  808. X`09`20`20`20`20END
  809. X`09`20`20`20`20ELSE`20IF`20escOverBuffer`20`5B4`5D`20=`20'`7E'`20THEN`20BEGIN
  810. X
  811. X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
  812. X
  813. X`09`09`20`20'1'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
  814. X`09`09`09`20`20`20'7'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F6;
  815. X`09`09`09`20`20`20'8'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F7;
  816. X`09`09`09`20`20`20'9'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F8
  817. X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  818. X`09`09`09END`20`7BCASE`7D;
  819. X`09`09`20`20'2'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
  820. X`09`09`09`20`20`20'0'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F9;
  821. X`09`09`09`20`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F10;
  822. X`09`09`09`20`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F11;
  823. X`09`09`09`20`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F12;
  824. X`09`09`09`20`20`20'5'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F13;
  825. X`09`09`09`20`20`20'6'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F14;
  826. X`09`09`09`20`20`20'8'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_HELP;
  827. X`09`09`09`20`20`20'9'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DO
  828. X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  829. X`09`09`09END`20`7BCASE`7D;
  830. X`09`09`20`20'3'`20:`20CASE`20escOverBuffer`20`5B3`5D`20OF
  831. X`09`09`09`20`20`20'1'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F17;
  832. X`09`09`09`20`20`20'2'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F18;
  833. X`09`09`09`20`20`20'3'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F19;
  834. X`09`09`09`20`20`20'4'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_F20
  835. X`09`09`09`20`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  836. X`09`09`09END`20`7BCASE`7D
  837. X
  838. X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  839. X
  840. X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
  841. X
  842. X`09`20`20`20`20END
  843. X`09`20`20`20`20ELSE`20BEGIN
  844. X
  845. X`09`20`20`20`20`20`20`20CASE`20escOverBuffer`20`5B2`5D`20OF
  846. X
  847. X`09`09`20`20(*`20Arrow`20Keys`20-`20Normal`20*)
  848. X
  849. X`09`09`20`20'A'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UP;
  850. X`09`09`20`20'B'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_DOWN;
  851. X`09`09`20`20'C'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_RIGHT;
  852. X`09`09`20`20'D'`20:`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_LEFT
  853. X
  854. X`09`09`20`20OTHERWISE`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  855. X
  856. X`09`20`20`20`20`20`20`20END`20`7BCASE`7D
  857. X
  858. X`09`20`20`20`20END`20`7BIF`7D
  859. X
  860. X`09`20END
  861. X`09`20ELSE`20BEGIN
  862. X
  863. X`09`20`20`20`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  864. X
  865. X`09`20END`20`7BIF`7D
  866. X
  867. X`20`20`20`20`20`20END
  868. X`20`20`20`20`20`20ELSE`20BEGIN
  869. X
  870. X`09`20kbd$cvt_ansi_smg`20:=`20SMG$K_TRM_UNKNOWN
  871. X
  872. X`20`20`20`20`20`20END`20`7BIF`7D
  873. X
  874. X`20`20`20END`20`7BWITH`7D
  875. X
  876. XEND`20(*`20KBD$CVT_ANSI_SMG`20*);
  877. X
  878. X
  879. X
  880. X
  881. X(*****************************************************************************
  882. V)
  883. X
  884. XEND`20(*`20KBD$ROUTINES`20Implementation`20*).
  885. X
  886. $ call unpack KBD$ROUTINES.PAS;1 979673541 ""
  887. $!
  888. $ create 'f'
  889. X
  890. X!------------------`20Distribution`20and`20Copyright`20-----------------
  891. X!--
  892. X!--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
  893. X!--`20All`20rights`20reserved.
  894. X!--
  895. X!--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20no
  896. Vtice
  897. X!--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20an
  898. Vy`20form
  899. X!--`20without`20written`20permission`20of`20the`20copyright`20owner.
  900. X!--
  901. X!--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20No
  902. Vn`20Profit
  903. X!--`20Organization
  904. X!--
  905. X!---------------------------------------------------------------
  906. X
  907. X
  908. X!------------------`20Disclaimer`20---------------------------------
  909. X!--
  910. X!--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
  911. V`20and
  912. X!--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
  913. X!--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitne
  914. Vss
  915. X!--`20for`20a`20particular`20purpose`20exist.
  916. X!--
  917. X!--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20unde
  918. Vr
  919. X!--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitnes
  920. Vs`20for
  921. X!--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
  922. V`20to
  923. X!--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20Th
  924. Ve`20user
  925. X!--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20thi
  926. Vs
  927. X!--`20software.
  928. X!--
  929. X!--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
  930. V`20be
  931. X!--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
  932. X!--`20or`20inconsequential`20damages`20or`20lost`20profits.
  933. X!--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  934. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  935. V`20`20`20`20`20`20`20`20`20`20
  936. X!-------------------END-PROLOGUE--------------------------------
  937. X
  938. X
  939. X
  940. X
  941. X!*****************************************************************************
  942. V
  943. X!*****************************************************************************
  944. V
  945. X!**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  946. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  947. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20**
  948. X!**`20`20`20`20`20`20`20`20`20`20`20M`20E`20S`20S`20A`20G`20E`20S`20`20`20P
  949. V`20O`20U`20R`20`20`20K`20B`20D`20$`20R`20O`20U`20T`20I`20N`20E`20S`20`20`20
  950. V`20`20`20`20`20`20`20`20**
  951. X!**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  952. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  953. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20**
  954. X!********`20Copyright`20(C)`201992`20Centre`20d'Etudes`20de`20la`20Navigation
  955. V`20Aerienne`20*******
  956. X!*****************************************************************************
  957. V
  958. X
  959. X
  960. X
  961. X
  962. X!++
  963. X!
  964. X!`20Titre:`09`20`20MESSAGES`20POUR`20KBD$ROUTINES
  965. X!
  966. X!`20Sujet:`09`20`20Definition`20des`20messages`20pour`20KBD$ROUTINES.
  967. X!
  968. X!`20Version:`09`20`201.0
  969. X!
  970. X!`20Description:`09`20`20`20`20`20`20Ce`20fichier`20contient`20les`20messages
  971. V`20d'erreur`20utilises`20par`20la
  972. X!`09`09`20`20bibliotheque`20de`20routines`20KBD$ROUTINES.
  973. X!`09`09`20`20`20`20`20`20Il`20doit`20etre`20compile`20a`20travers`20la`20comma
  974. Vnde`20MESSAGE.`20Le
  975. X!`09`09`20`20fichier`20objet`20obtenu`20peut`20etre`20soit`20lie`20directement
  976. V`20a
  977. X!`09`09`20`20l'application,`20soit`20etre`20utilise`20pour`20generer`20une`20i
  978. Vmage
  979. X!`09`09`20`20partageable:`20ce`20sera`20alors`20un`20fichier`20vecteur`20qui
  980. V`20sera`20lie
  981. X!`09`09`20`20a`20l'application.
  982. X!
  983. X!`20Fichier:`09`20`20KBDMSG.MSG
  984. X!
  985. X!`20Environnement:`20`20VAX/VMS`20Version`205.4-3
  986. X!`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20VAX/VMS`20Message`20Utilit
  987. Vy
  988. X!
  989. X!`20Auteur:`09`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
  990. X!`20
  991. X!`20`09`09`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
  992. X!`20
  993. X!`20`09`09`20`20Mail:`20`20`20C.E.N.A.
  994. X!`20`09`09`09`20`20Div.`20Support`20Informatique`20`26`20Developpement
  995. X!`20`09`09`09`20`20Orly`20Sud`20205
  996. X!`20`09`09`09`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
  997. X!
  998. X!`20Creation:`09`20`2019/05/92
  999. X!
  1000. X!`20Modification:`09`20`2026/05/92
  1001. X!
  1002. X!--
  1003. X
  1004. X
  1005. X.title`20Messages`20for`20KBD$`20utility
  1006. X
  1007. X.ident`20"Version`201.0"
  1008. X
  1009. X.facility`20KBD,`201`20/prefix=KBD$_
  1010. X
  1011. X
  1012. X.severity`20success
  1013. X
  1014. XNORMAL`09`09<normal`20successful`20completion>
  1015. X
  1016. X
  1017. X.severity`20informational
  1018. X
  1019. XALREADYOPEN`09<keyboard`20already`20open>
  1020. XALREADYCLOSE`09<keyboard`20already`20close>
  1021. X
  1022. X
  1023. X.severity`20warning
  1024. X
  1025. XNOTOPEN`09`09<keyboard`20not`20open>
  1026. X
  1027. X
  1028. X.severity`20error
  1029. X
  1030. XCLOSEERROR`09<error`20during`20close`20operation>
  1031. XFLUSHERROR`09<error`20during`20flush`20operation>
  1032. XKEYPRESERROR`09<error`20during`20key`20pressed`20operation>
  1033. XOPENERROR`09<error`20during`20open`20operation>
  1034. XREADERROR`09<error`20during`20read`20operation>
  1035. X
  1036. $ call unpack KBDMSG.MSG;1 340948879 ""
  1037. $!
  1038. $ create 'f'
  1039. X
  1040. X------------------`20Distribution`20and`20Copyright`20-----------------
  1041. X--
  1042. X--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
  1043. X--`20All`20rights`20reserved.
  1044. X--
  1045. X--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20not
  1046. Vice
  1047. X--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20any
  1048. V`20form
  1049. X--`20without`20written`20permission`20of`20the`20copyright`20owner.
  1050. X--
  1051. X--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20Non
  1052. V`20Profit
  1053. X--`20Organization
  1054. X--
  1055. X---------------------------------------------------------------
  1056. X
  1057. X
  1058. X------------------`20Disclaimer`20---------------------------------
  1059. X--
  1060. X--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
  1061. V`20and
  1062. X--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
  1063. X--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitnes
  1064. Vs
  1065. X--`20for`20a`20particular`20purpose`20exist.
  1066. X--
  1067. X--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20under
  1068. V
  1069. X--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitness
  1070. V`20for
  1071. X--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
  1072. V`20to
  1073. X--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20The
  1074. V`20user
  1075. X--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20this
  1076. V
  1077. X--`20software.
  1078. X--
  1079. X--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
  1080. V`20be
  1081. X--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
  1082. X--`20or`20inconsequential`20damages`20or`20lost`20profits.
  1083. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1084. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1085. V`20`20`20`20`20`20`20`20`20
  1086. X-------------------END-PROLOGUE--------------------------------
  1087. X
  1088. X
  1089. X
  1090. X
  1091. X--****************************************************************************
  1092. V*
  1093. X--****************************************************************************
  1094. V*
  1095. X--**`09`09`09`09`09`09`09`09`09`20`20`20`20`20**
  1096. X--**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20D`20E`20M`20O`20`20`20D`20E
  1097. V`20S`20`20`20R`20O`20U`20T`20I`20N`20E`20S`20`20`20K`20B`20D`20$`20`20`20`20
  1098. V`20`20`20`20`20`20`20`20`20`20`20**
  1099. X--**`09`09`09`09`09`09`09`09`09`20`20`20`20`20**
  1100. X--********`20Copyright`20(C)`201992`20Centre`20d'Etudes`20de`20la`20Navigation
  1101. V`20Aerienne`20*******
  1102. X--****************************************************************************
  1103. V*
  1104. X
  1105. X
  1106. X
  1107. X
  1108. X--`20++
  1109. X--
  1110. X--`20Titre:`09`20`20`20Paquetage`20KBD
  1111. X--
  1112. X--`20Sujet:`09`20`20`20Declarations`20des`20routines`20KBD$xxx`20("Keyboard
  1113. V`20Routines").
  1114. X--
  1115. X--`20Version:`09`20`20`201.0
  1116. X--
  1117. X--`20Description:`09`20`20`20`20`20`20`20Ce`20paquetage`20contient`20la`20decl
  1118. Varation`20de`20la`20procedure
  1119. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20READ_KEYSTROKE`20permetta
  1120. Vnt`20d'attendre`20une`20action`20au`20clavier
  1121. X--`09`09`20`20`20et`20renvoyant`20la`20sequence`20ANSI`20correspondant`20a`20l
  1122. Va`20touche
  1123. X--`09`09`20`20`20actionnee.
  1124. X--
  1125. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Pour`20utilis
  1126. Ver`20READ_KEYSTROKE,`20il`20necessaire`20d'appeler`20au
  1127. X--`09`09`20`20`20prealable`20la`20procedure`20OPEN_KEYBOARD`20et`20de`20termin
  1128. Ver`20par
  1129. X--`09`09`20`20`20CLOSE_KEYBOARD.
  1130. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20La`20routine`20OPEN_KEYBO
  1131. VARD`20permet,`20entre`20autres,`20de`20ne`20creer
  1132. X--`09`09`20`20`20le`20tampon`20clavier`20que`20si`20l'on`20desire`20reellement
  1133. V`20utiliser
  1134. X--`09`09`20`20`20READ_KEYSTROKE.
  1135. X--
  1136. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Lorsque`20le
  1137. V`20tampon`20est`20plein,`20l'utilisateur`20est`20prevenu
  1138. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20par`20un`20beep`20sonore.
  1139. V
  1140. X--
  1141. X--`09`09`20`20`20`20`20`20`20La`20procedure`20FLUSH_KEYBOARD`20permet`20de`20v
  1142. Vider`20le`20tampon
  1143. X--`09`09`20`20`20clavier.
  1144. X--
  1145. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Afin`20de`20pouv
  1146. Voir`20recuperer`20les`20codes`20emis`20par`20CTRL/C,
  1147. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CTRL/O,`20CTRL/Q,`20CTRL/
  1148. VS,`20CTRL/T,`20CTRL/X,`20CTRL/Y`20et`20F6,`20il`20est
  1149. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20necessaire`20d'entrer`20l
  1150. Va`20commande`20DCL`20"SET`20TERMINAL/PASTHRU
  1151. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20/NOTTSYNC".
  1152. X--
  1153. X--`20Langage:`09`20`20`20ADA
  1154. X--
  1155. X--`20Fichier:`09`20`20`20KBD_.ADA
  1156. X--
  1157. X--`20Paquetage:`09`20`20`20KBD
  1158. X--
  1159. X--`20Environnement:`20`20Machine`20cible:`20`20`20`20`20`20`20`20`20`20VAX
  1160. X--`09`09`20`20`20Systeme`20d'exploitation:`20VAX/VMS`20Version`205.4
  1161. X--`09`09`20`20`20Compilateur:`20`20`20`20`20`20`20`20`20`20`20`20VAX`20Ada`20V
  1162. Version`202.1-28
  1163. X--
  1164. X--`20Auteur:`09`20`20`20Martin`20VICENTE`20(DGAC/CENA/SID)
  1165. X--
  1166. X--`09`09`20`20`20E-mail:`20vicente@cenaath.cena.dgac.fr
  1167. X--
  1168. X--`09`09`20`20`20Mail:`20`20`20C.E.N.A.
  1169. X--`09`09`09`20`20`20Div.`20Support`20Informatique`20`26`20Developpement
  1170. X--`09`09`09`20`20`20Orly`20Sud`20205
  1171. X--`09`09`09`20`20`2094`20542`20ORLY`20AEROGARE`20CEDEX,`20FRANCE
  1172. X--
  1173. X--`20Creation:`09`20`20`2019/05/92
  1174. X--
  1175. X--`20Modification:`20`20`2026/05/92
  1176. X--
  1177. X--`20--
  1178. X
  1179. X
  1180. X
  1181. X
  1182. Xwith`20CONDITION_HANDLING;
  1183. Xwith`20SYSTEM;
  1184. X
  1185. X
  1186. Xuse`20CONDITION_HANDLING;
  1187. Xuse`20SYSTEM;
  1188. X
  1189. X
  1190. X
  1191. X
  1192. Xpackage`20KBD`20is
  1193. X
  1194. X
  1195. X
  1196. X
  1197. X--`20=========================================================================
  1198. V===
  1199. X--`20`20TYPE
  1200. X--`20=========================================================================
  1201. V===
  1202. X
  1203. X
  1204. X`20`20`20`20type`20T_ESCAPE_OVERFLOW_BUFFER`20is`20array`20(1..4)`20of`20chara
  1205. Vcter;
  1206. X
  1207. X`20`20`20`20type`20T_ANSI_SEQUENCE`20is`20record
  1208. X`20`20`20`20`20`20`20`20ASCII`20`20`20`20`20`20`20`20`20:`20character;
  1209. X`20`20`20`20`20`20`20`20ESCOVERBUFFER`20:`20T_ESCAPE_OVERFLOW_BUFFER;
  1210. X`20`20`20`20end`20record;
  1211. X
  1212. X
  1213. X
  1214. X
  1215. X--`20*************************************************************************
  1216. V***
  1217. X--`20*************************************************************************
  1218. V***
  1219. X--`20**`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1220. V`20KBD$`20ROUTINE`20DECLARATION`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1221. V`20`20`20`20`20`20`20`20`20**
  1222. X--`20*************************************************************************
  1223. V***
  1224. X--`20*************************************************************************
  1225. V***
  1226. X
  1227. X
  1228. X
  1229. X
  1230. X--
  1231. X--`20KBD$CLOSE_KEYBOARD
  1232. X--
  1233. X--`20`20`20Libere`20la`20memoire`20des`20structures`20de`20donnees`20associees
  1234. V`20a`20ce`20module.
  1235. X--
  1236. X
  1237. X`20`20`20`20procedure`20CLOSE_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TY
  1238. VPE);
  1239. X
  1240. X
  1241. X--
  1242. X--`20KBD$CVT_ANSI_SMG
  1243. X--
  1244. X--`20`20`20Convertit`20la`20sequence`20ANSI`20d'une`20touche`20en`20un`20code
  1245. V`20SMG.
  1246. X--
  1247. X--`20`20`20Liste`20des`20codes`20pouvant`20etre`20renvoyes`20(ils`20sont`20def
  1248. Vinis`20dans`20le`20paquetage
  1249. X--`20`20`20SMG):
  1250. X--
  1251. X--`09ascii`20(0`20-`20255)`09`09K_TRM_UP`09`09K_TRM_DOWN
  1252. X--`09K_TRM_RIGHT`09`09K_TRM_LEFT`09`09K_TRM_ENTER
  1253. X--`09K_TRM_PF1`09`09K_TRM_PF2`09`09K_TRM_PF3
  1254. X--`09K_TRM_PF4`09`09K_TRM_COMMA`09`09K_TRM_MINUS
  1255. X--`09K_TRM_PERIOD`09`09K_TRM_KP0`09`09K_TRM_KP1
  1256. X--`09K_TRM_KP2`09`09K_TRM_KP3`09`09K_TRM_KP4
  1257. X--`09K_TRM_KP5`09`09K_TRM_KP6`09`09K_TRM_KP7
  1258. X--`09K_TRM_KP8`09`09K_TRM_KP9`09`09K_TRM_FIND
  1259. X--`09K_TRM_INSERT_HERE`09K_TRM_REMOVE`09`09K_TRM_SELECT
  1260. X--`09K_TRM_PREV_SCREEN`09K_TRM_NEXT_SCREEN`09K_TRM_F6
  1261. X--`09K_TRM_F7`09`09K_TRM_F8`09`09K_TRM_F9
  1262. X--`09K_TRM_F10`09`09K_TRM_F11`09`09K_TRM_F12
  1263. X--`09K_TRM_F13`09`09K_TRM_F14`09`09K_TRM_HELP
  1264. X--`09K_TRM_DO`09`09K_TRM_F17`09`09K_TRM_F18
  1265. X--`09K_TRM_F19`09`09K_TRM_F20`09`09K_TRM_UP
  1266. X--`09K_TRM_DOWN`09`09K_TRM_RIGHT`09`09K_TRM_LEFT
  1267. X--`09K_TRM_UNKNOWN
  1268. X--
  1269. X
  1270. X`20`20`20`20procedure`20CVT_ANSI_SMG`20(
  1271. X`20`20`20`20`20`20`20`20SMG_CODE`20:`20out`20UNSIGNED_WORD;
  1272. X`09SEQUENCE`20:`20in`20`20T_ANSI_SEQUENCE`20);
  1273. X
  1274. X
  1275. X--
  1276. X--`20KBD$FLUSH_KEYBOARD
  1277. X--
  1278. X--`20`20`20Vide`20le`20tampon`20clavier.
  1279. X--
  1280. X
  1281. X`20`20`20`20procedure`20FLUSH_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TY
  1282. VPE);
  1283. X
  1284. X
  1285. X--
  1286. X--`20KBD$KEY_PRESSED
  1287. X--
  1288. X--`20`20`20Indique`20si`20au`20moins`20une`20touche`20est`20presente`20dans
  1289. V`20le`20tampon.
  1290. X--
  1291. X
  1292. X`20`20`20`20procedure`20KEY_PRESSED`20(
  1293. X`20`20`20`20`20`20`20`20COND_VALUE`20:`20out`20COND_VALUE_TYPE;
  1294. X`09YES`20`20`20`20`20`20`20`20:`20out`20BOOLEAN`20);
  1295. X
  1296. X
  1297. X--
  1298. X--`20KBD$OPEN_KEYBOARD
  1299. X--
  1300. X--`20`20`20Creation`20et`20initialisation`20des`20structures`20de`20donnees
  1301. V`20associees`20au`20module.
  1302. X--
  1303. X
  1304. X`20`20`20`20procedure`20OPEN_KEYBOARD`20(COND_VALUE`20:`20out`20COND_VALUE_TYP
  1305. VE);
  1306. X
  1307. X
  1308. X--
  1309. X--`20KBD$READ_KEYSTROKE
  1310. X--
  1311. X--`20`20`20Extrait`20la`20touche`20suivante`20du`20tampon;`20si`20ce`20dernier
  1312. V`20est`20vide,`20se`20met`20en
  1313. X--`20`20`20attente`20d'une`20action`20au`20clavier.
  1314. X--
  1315. X
  1316. X`20`20`20`20procedure`20READ_KEYSTROKE`20(
  1317. X`20`20`20`20`20`20`20`20COND_VALUE`20:`20out`20`20`20`20COND_VALUE_TYPE;
  1318. X`20`20`20`20`20`20`20`20KEY`20`20`20`20`20`20`20`20:`20in`20out`20T_ANSI_SEQUE
  1319. VNCE`20);
  1320. X
  1321. X
  1322. X
  1323. X
  1324. X--`20*************************************************************************
  1325. V***
  1326. X
  1327. X
  1328. Xprivate
  1329. X
  1330. X
  1331. X`20`20`20`20pragma`20INTERFACE`20(external,`20CLOSE_KEYBOARD);
  1332. X
  1333. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20CLOSE_KEYBOARD,`20"KBD$CLOS
  1334. VE_KEYBOARD",
  1335. X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
  1336. X
  1337. X
  1338. X`20`20`20`20pragma`20INTERFACE`20(external,`20CVT_ANSI_SMG);
  1339. X
  1340. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20CVT_ANSI_SMG,`20"KBD$CVT_AN
  1341. VSI_SMG",
  1342. X`20`20`20`20`20`20`20`20(UNSIGNED_WORD,`20T_ANSI_SEQUENCE)`20);
  1343. X
  1344. X
  1345. X`20`20`20`20pragma`20INTERFACE`20(external,`20FLUSH_KEYBOARD);
  1346. X
  1347. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20FLUSH_KEYBOARD,`20"KBD$FLUS
  1348. VH_KEYBOARD",
  1349. X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
  1350. X
  1351. X
  1352. X`20`20`20`20pragma`20INTERFACE`20(external,`20KEY_PRESSED);
  1353. X
  1354. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20KEY_PRESSED,`20"KBD$KEY_PRE
  1355. VSSED",
  1356. X`20`20`20`20`20`20`20`20(cond_value_type,`20BOOLEAN)`20);
  1357. X
  1358. X
  1359. X`20`20`20`20pragma`20INTERFACE`20(external,`20OPEN_KEYBOARD);
  1360. X
  1361. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20OPEN_KEYBOARD,`20"KBD$OPEN_
  1362. VKEYBOARD",
  1363. X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE)`20);
  1364. X
  1365. X
  1366. X`20`20`20`20pragma`20INTERFACE`20(external,`20READ_KEYSTROKE);
  1367. X
  1368. X`20`20`20`20pragma`20IMPORT_VALUED_PROCEDURE`20(`20READ_KEYSTROKE,`20"KBD$READ
  1369. V_KEYSTROKE",
  1370. X`20`20`20`20`20`20`20`20(COND_VALUE_TYPE,`20T_ANSI_SEQUENCE)`20);
  1371. X
  1372. X
  1373. Xend`20KBD;
  1374. $ call unpack KBD_.ADA;1 810836228 ""
  1375. $!
  1376. $ create 'f'
  1377. X!`20Fichier`20d'options`20pour`20le`20linker`20VAX/VMS
  1378. X!`20A`20utiliser`20pour`20du`20code`20genere`20par`20le`20compilateur`20CC`20n
  1379. Vatif
  1380. X!
  1381. XSYS$LIBRARY:VAXCRTLG.OLB/LIBRARY`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1382. V`20!`20C`20Library
  1383. XSYS$LIBRARY:VAXCRTL.EXE/SHAREABLE`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1384. V`20!`20C`20Run`20Time`20Library
  1385. $ call unpack LINK_CC.OPT;1 1381593291 ""
  1386. $!
  1387. $ create 'f'
  1388. X(*
  1389. X------------------`20Distribution`20and`20Copyright`20-----------------
  1390. X--
  1391. X--`20This`20software`20is`20copyright`20by`20the`20CENA/DGAC/FRANCE
  1392. X--`20All`20rights`20reserved.
  1393. X--
  1394. X--`20No`20part`20of`20the`20material`20protected`20by`20this`20copyright`20not
  1395. Vice
  1396. X--`20may`20be`20reproduced`20or`20utilized`20for`20commercial`20use`20in`20any
  1397. V`20form
  1398. X--`20without`20written`20permission`20of`20the`20copyright`20owner.
  1399. X--
  1400. X--`20It`20may`20be`20reproduced`20or`20utilized`20for`20R`26D`20use`20in`20Non
  1401. V`20Profit
  1402. X--`20Organization
  1403. X--
  1404. X---------------------------------------------------------------
  1405. X
  1406. X
  1407. X------------------`20Disclaimer`20---------------------------------
  1408. X--
  1409. X--`20This`20software`20and`20its`20documentation`20are`20provided`20"AS`20IS"
  1410. V`20and
  1411. X--`20without`20any`20expressed`20or`20implied`20warranties`20whatsoever.
  1412. X--`20No`20warranties`20as`20to`20performance,`20merchantability,`20or`20fitnes
  1413. Vs
  1414. X--`20for`20a`20particular`20purpose`20exist.
  1415. X--
  1416. X--`20Because`20of`20the`20diversity`20of`20conditions`20and`20hardware`20under
  1417. V
  1418. X--`20which`20this`20software`20may`20be`20used,`20no`20warranty`20of`20fitness
  1419. V`20for
  1420. X--`20a`20particular`20purpose`20is`20offered.`20`20The`20user`20is`20advised
  1421. V`20to
  1422. X--`20test`20the`20software`20thoroughly`20before`20relying`20on`20it.`20`20The
  1423. V`20user
  1424. X--`20must`20assume`20the`20entire`20risk`20and`20liability`20of`20using`20this
  1425. V
  1426. X--`20software.
  1427. X--
  1428. X--`20In`20no`20event`20shall`20any`20person`20or`20organization`20of`20people
  1429. V`20be
  1430. X--`20held`20responsible`20for`20any`20direct,`20indirect,`20consequential
  1431. X--`20or`20inconsequential`20damages`20or`20lost`20profits.
  1432. X--`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1433. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  1434. V`20`20`20`20`20`20`20`20`20
  1435. X-------------------END-PROLOGUE--------------------------------
  1436. X*)
  1437. X
  1438. X
  1439. X
  1440. X
  1441. X(*****************************************************************************
  1442. V)
  1443. X(*****************************************************************************
  1444. V)
  1445. X(**`09`09`09`09`09`09`09`09`09`20`20`20`20**)
  1446. +-+-+-+-+-+-+-+-  END  OF PART 2 +-+-+-+-+-+-+-+-
  1447.