home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / fildlg22 / mouse.c < prev    next >
C/C++ Source or Header  |  1980-01-02  |  4KB  |  201 lines

  1. /*
  2.  *    mouse.c
  3.  *        マウス関連の関数を定義する.
  4.  *        但しマウスの初期化と終了処理については,
  5.  *        DISP_init()とDISP_terminate()で実行する.
  6.  */
  7.  
  8. #include    <stdlib.h>
  9. #include    <mos.h>
  10. #include    "romcpy.h"
  11. #include    "mouse.h"
  12.  
  13.  
  14. #define        GLOBAL
  15.  
  16.  
  17. /*--------------------------------------*/
  18. /*        定数定義        */
  19. /*--------------------------------------*/
  20.  
  21. /*    システムROM内アイコンパターン関連定義    */
  22. #define     SysIconOffset    0x3b000
  23. #define        SysIconWidth    32
  24. #define        SysIconHeight    32
  25. #define        SysWaitIconId    8
  26. #define        SysIconBytes    (SysIconWidth * SysIconHeight / 8)
  27.  
  28.  
  29. /*--------------------------------------*/
  30. /*        ローカル関数宣言    */
  31. /*--------------------------------------*/
  32.  
  33. /*    ローカル関数は無し    */
  34.  
  35.  
  36. /*--------------------------------------*/
  37. /*        関数定義        */
  38. /*--------------------------------------*/
  39.  
  40. GLOBAL    void
  41. MOU_waitClick(
  42.     int    button)            /* 1:左ボタン, 2:右ボタン */
  43. /*
  44.  *    PURPOSE
  45.  *        指定したマウスのボタンがクリックされるまで待つ
  46.  */
  47. {
  48.     int    btn;
  49.     int    x, y;
  50.     
  51.     do {
  52.         MOS_rdpos(&btn, &x, &y);
  53.     } while ((btn & button) == 0);        /* wait button push */
  54. }
  55. /* ---    MOU_waitClick()  --- */
  56.  
  57.  
  58. GLOBAL    void
  59. MOU_waitPress(
  60.     int    button,
  61.     int    *x,        /* マウス座標通知領域へのポインタ */
  62.     int    *y)        /*    同上    */
  63. /*
  64.  *    PURPOSE
  65.  *        指定されたマウスボタンが押されるのを待ち,
  66.  *        押された時点のマウスカーソルの座標を通知する.
  67.  */
  68. {
  69.     int    btn;
  70.     
  71.     do {
  72.         MOS_rdpos(&btn, x, y);
  73.     } while ((btn & button) == 0);
  74. }
  75. /* ---    MOU_waitPress()  --- */
  76.  
  77.  
  78. GLOBAL    void
  79. MOU_waitRelease(
  80.     int    button,
  81.     int    *x,        /* マウス座標通知領域へのポインタ */
  82.     int    *y)        /*    同上    */
  83. /*
  84.  *    PURPOSE
  85.  *        指定されたマウスボタンが離されるのを待ち,
  86.  *        離された時点のマウスカーソルの座標を通知する.
  87.  */
  88. {
  89.     int    btn;
  90.     
  91.     do {
  92.         MOS_rdpos(&btn, x, y);
  93.     } while (btn & button);
  94. }
  95. /* ---    MOU_waitPress()  --- */
  96.  
  97.  
  98. GLOBAL    int
  99. MOU_readPosition(
  100.     int    *x,
  101.     int    *y)
  102. /*
  103.  *    PURPOSE
  104.  *        現在のマウスの位置とボタンの状態を通知する.
  105.  *    RETURNS
  106.  *        ボタンの状態 0 = Off, 1 = On
  107.  *            bit 0 : 左ボタン
  108.  *            bit 1 : 右ボタン
  109.  */
  110. {
  111.     int    button;
  112.     
  113.     MOS_rdpos(&button, x, y);
  114.     return(button);
  115. }
  116. /* ---    MOU_readPosition()  --- */
  117.  
  118.  
  119. GLOBAL    void
  120. MOU_display(
  121.     int    on)        /* 1 : 表示, 0 : 非表示 */
  122. /*
  123.  *    PURPOSE
  124.  *        マウスの表示/非表示を設定する.
  125.  */
  126. {
  127.     MOS_disp(on);
  128. }
  129. /* ---    MOU_display()  --- */
  130.  
  131.  
  132. GLOBAL    void
  133. MOU_setBoundary(
  134.     int    luX,
  135.     int    luY,
  136.     int    rdX,
  137.     int    rdY)
  138. /*
  139.  *    PURPOSE
  140.  *        マウスの移動制限範囲を指定する.
  141.  */
  142. {
  143.     MOS_horizon(luX, rdX);
  144.     MOS_vertical(luY, rdY);
  145. }
  146. /* ---    MOU_setBoundary()  --- */
  147.  
  148.  
  149. GLOBAL    void
  150. MOU_setPage(
  151.     int    page)
  152. /*
  153.  *    PURPOSE
  154.  *        マウスの表示ページを設定する.
  155.  */
  156. {
  157.     MOS_writePage(page);
  158. }
  159. /* ---    MOU_setPage()  --- */
  160.  
  161.  
  162. GLOBAL    void
  163. MOU_setCursorType(
  164.     int    type)        /* 0 : シテスムカーソル, 1 : 時計カーソル */
  165. /*
  166.  *    PURPOSE
  167.  *        マウスカーソルの形状を制御する.
  168.  *        typeが0ならシステムカーソルに,1なら時計マークに変更する.
  169.  */
  170. {
  171.     static    char    _SysWaitIcon[2 + SysIconBytes * 2];
  172.     static    int    _SetSysWaitIcon = 0;
  173.     
  174.     switch (type) {
  175.     case 0:
  176.         MOS_type(0, 0, 0, NULL);        /* システム */
  177.         break;
  178.     case 1:
  179.     default:
  180.         /*
  181.          * 時計アイコンパターンが未設定であれば,
  182.          * システムROMからパターンとANDパターンの両方を読み出す.
  183.          */
  184.         if (_SetSysWaitIcon == 0) {
  185.             romcpy(&_SysWaitIcon[2],    (void *)
  186.                 (SysIconOffset + ((SysIconWidth + 7) / 8) 
  187.                     * SysIconHeight * SysWaitIconId * 2),
  188.                 SysIconBytes * 2);
  189.             _SysWaitIcon[0] = SysIconWidth / 8;
  190.             _SysWaitIcon[1] = SysIconHeight;
  191.             _SetSysWaitIcon = 1;
  192.         }
  193.         MOS_type(1, SysIconWidth / 2, SysIconHeight / 2, _SysWaitIcon);
  194.             /* 単色, 中心(16,16) */
  195.         break;
  196.     }
  197. }
  198. /* ---    MOU_setCursorType()  --- */
  199.  
  200.  
  201.