key.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /*****************************************************************************/
  2. /* ここから */
  3. /*****************************************************************************/
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include "sys/key.h"
  7. #include "Wonx.h"
  8. /*****************************************************************************/
  9. /* 互換関数の定義 */
  10. /*****************************************************************************/
  11. /*
  12. * Xサーバとの同期の整合性がとれなくなるなどの問題が考えられるので,
  13. * 互換関数の内部は UNIXTimer_Pause(), UNIXTimer_Unpause() でくくり,
  14. * タイマ割り込みを一時停止して処理を行う.また,unpause するまえに,
  15. * かならず sync するようにする.
  16. */
  17. /*
  18. * タイマの一時停止の2重解除の問題が出てくるので,
  19. * 互換関数から互換関数を呼んではいけない.
  20. * (一時停止はネストされるが,いちおう)
  21. * 似たような処理をする関数の場合は,必ず static な別関数に処理をまとめ,
  22. * そっちを呼び出すようにすること.
  23. * 引数の表示の問題もあるしね.
  24. */
  25. int key_press_check(void)
  26. {
  27. XDisplay x_display;
  28. int ret;
  29. if (!Wonx_IsCreated()) Wonx_Create();
  30. /* タイマを一時停止する */
  31. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  32. printf("call : key_press_check() : "); fflush(stdout);
  33. x_display = WonxDisplay_GetXDisplay(Wonx_GetWonxDisplay());
  34. XDisplay_Sync(x_display);
  35. ret = XDisplay_GetKeyPress(x_display);
  36. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  37. printf("return value = 0x%04x\n", (int)ret); fflush(stdout);
  38. /* タイマをもとに戻す */
  39. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  40. return (ret);
  41. }
  42. int key_hit_check(void)
  43. {
  44. XDisplay x_display;
  45. int ret;
  46. if (!Wonx_IsCreated()) Wonx_Create();
  47. /* タイマを一時停止する */
  48. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  49. printf("call : key_hit_check() : "); fflush(stdout);
  50. x_display = WonxDisplay_GetXDisplay(Wonx_GetWonxDisplay());
  51. XDisplay_Sync(x_display);
  52. ret = XDisplay_GetKeyPress(x_display);
  53. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  54. printf("return value = 0x%04x\n", (int)ret); fflush(stdout);
  55. /* タイマをもとに戻す */
  56. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  57. return (ret);
  58. }
  59. int key_wait(void)
  60. {
  61. XDisplay x_display;
  62. int ret;
  63. if (!Wonx_IsCreated()) Wonx_Create();
  64. /* タイマを一時停止する */
  65. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  66. printf("call : key_wait() : "); fflush(stdout);
  67. x_display = WonxDisplay_GetXDisplay(Wonx_GetWonxDisplay());
  68. /*
  69. * 以下はホットスポットになり得るので注意!
  70. */
  71. ret = 0;
  72. do {
  73. XDisplay_Sync(x_display);
  74. ret = XDisplay_GetKeyPress(x_display);
  75. } while (ret == 0);
  76. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  77. printf("return value = 0x%04x\n", (int)ret); fflush(stdout);
  78. /* タイマをもとに戻す */
  79. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  80. return (ret);
  81. }
  82. void key_set_repeat(int rate, int delay)
  83. {
  84. if (!Wonx_IsCreated()) Wonx_Create();
  85. /* タイマを一時停止する */
  86. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  87. printf("call : key_set_repeat() : rate = %d, delay = %d, ", rate, delay);
  88. fflush(stdout);
  89. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  90. printf("return value = none\n"); fflush(stdout);
  91. /* タイマをもとに戻す */
  92. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  93. return;
  94. }
  95. int key_get_repeat(void)
  96. {
  97. int ret;
  98. if (!Wonx_IsCreated()) Wonx_Create();
  99. /* タイマを一時停止する */
  100. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  101. printf("call : key_get_repeat() : "); fflush(stdout);
  102. ret = 0;
  103. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  104. printf("return value = 0x%04x\n", (int)ret); fflush(stdout);
  105. /* タイマをもとに戻す */
  106. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  107. return (ret);
  108. }
  109. int key_hit_check_with_repeat(void)
  110. {
  111. XDisplay x_display;
  112. int ret;
  113. if (!Wonx_IsCreated()) Wonx_Create();
  114. /* タイマを一時停止する */
  115. UNIXTimer_Pause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  116. printf("call : key_hit_check_with_repeat() : "); fflush(stdout);
  117. x_display = WonxDisplay_GetXDisplay(Wonx_GetWonxDisplay());
  118. XDisplay_Sync(x_display);
  119. ret = XDisplay_GetKeyPress(x_display);
  120. WonxDisplay_Sync(Wonx_GetWonxDisplay());
  121. printf("return value = 0x%04x\n", (int)ret); fflush(stdout);
  122. /* タイマをもとに戻す */
  123. UNIXTimer_Unpause(WonxSystem_GetUNIXTimer(Wonx_GetWonxSystem()));
  124. return (ret);
  125. }
  126. /*****************************************************************************/
  127. /* ここまで */
  128. /*****************************************************************************/
  129. /*****************************************************************************/
  130. /* End of File. */
  131. /*****************************************************************************/