home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
fildlg22
/
mouse.c
< prev
next >
Wrap
C/C++ Source or Header
|
1980-01-02
|
4KB
|
201 lines
/*
* mouse.c
* マウス関連の関数を定義する.
* 但しマウスの初期化と終了処理については,
* DISP_init()とDISP_terminate()で実行する.
*/
#include <stdlib.h>
#include <mos.h>
#include "romcpy.h"
#include "mouse.h"
#define GLOBAL
/*--------------------------------------*/
/* 定数定義 */
/*--------------------------------------*/
/* システムROM内アイコンパターン関連定義 */
#define SysIconOffset 0x3b000
#define SysIconWidth 32
#define SysIconHeight 32
#define SysWaitIconId 8
#define SysIconBytes (SysIconWidth * SysIconHeight / 8)
/*--------------------------------------*/
/* ローカル関数宣言 */
/*--------------------------------------*/
/* ローカル関数は無し */
/*--------------------------------------*/
/* 関数定義 */
/*--------------------------------------*/
GLOBAL void
MOU_waitClick(
int button) /* 1:左ボタン, 2:右ボタン */
/*
* PURPOSE
* 指定したマウスのボタンがクリックされるまで待つ
*/
{
int btn;
int x, y;
do {
MOS_rdpos(&btn, &x, &y);
} while ((btn & button) == 0); /* wait button push */
}
/* --- MOU_waitClick() --- */
GLOBAL void
MOU_waitPress(
int button,
int *x, /* マウス座標通知領域へのポインタ */
int *y) /* 同上 */
/*
* PURPOSE
* 指定されたマウスボタンが押されるのを待ち,
* 押された時点のマウスカーソルの座標を通知する.
*/
{
int btn;
do {
MOS_rdpos(&btn, x, y);
} while ((btn & button) == 0);
}
/* --- MOU_waitPress() --- */
GLOBAL void
MOU_waitRelease(
int button,
int *x, /* マウス座標通知領域へのポインタ */
int *y) /* 同上 */
/*
* PURPOSE
* 指定されたマウスボタンが離されるのを待ち,
* 離された時点のマウスカーソルの座標を通知する.
*/
{
int btn;
do {
MOS_rdpos(&btn, x, y);
} while (btn & button);
}
/* --- MOU_waitPress() --- */
GLOBAL int
MOU_readPosition(
int *x,
int *y)
/*
* PURPOSE
* 現在のマウスの位置とボタンの状態を通知する.
* RETURNS
* ボタンの状態 0 = Off, 1 = On
* bit 0 : 左ボタン
* bit 1 : 右ボタン
*/
{
int button;
MOS_rdpos(&button, x, y);
return(button);
}
/* --- MOU_readPosition() --- */
GLOBAL void
MOU_display(
int on) /* 1 : 表示, 0 : 非表示 */
/*
* PURPOSE
* マウスの表示/非表示を設定する.
*/
{
MOS_disp(on);
}
/* --- MOU_display() --- */
GLOBAL void
MOU_setBoundary(
int luX,
int luY,
int rdX,
int rdY)
/*
* PURPOSE
* マウスの移動制限範囲を指定する.
*/
{
MOS_horizon(luX, rdX);
MOS_vertical(luY, rdY);
}
/* --- MOU_setBoundary() --- */
GLOBAL void
MOU_setPage(
int page)
/*
* PURPOSE
* マウスの表示ページを設定する.
*/
{
MOS_writePage(page);
}
/* --- MOU_setPage() --- */
GLOBAL void
MOU_setCursorType(
int type) /* 0 : シテスムカーソル, 1 : 時計カーソル */
/*
* PURPOSE
* マウスカーソルの形状を制御する.
* typeが0ならシステムカーソルに,1なら時計マークに変更する.
*/
{
static char _SysWaitIcon[2 + SysIconBytes * 2];
static int _SetSysWaitIcon = 0;
switch (type) {
case 0:
MOS_type(0, 0, 0, NULL); /* システム */
break;
case 1:
default:
/*
* 時計アイコンパターンが未設定であれば,
* システムROMからパターンとANDパターンの両方を読み出す.
*/
if (_SetSysWaitIcon == 0) {
romcpy(&_SysWaitIcon[2], (void *)
(SysIconOffset + ((SysIconWidth + 7) / 8)
* SysIconHeight * SysWaitIconId * 2),
SysIconBytes * 2);
_SysWaitIcon[0] = SysIconWidth / 8;
_SysWaitIcon[1] = SysIconHeight;
_SetSysWaitIcon = 1;
}
MOS_type(1, SysIconWidth / 2, SysIconHeight / 2, _SysWaitIcon);
/* 単色, 中心(16,16) */
break;
}
}
/* --- MOU_setCursorType() --- */