home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MODEL
/
EVENTLIB.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-06-05
|
7KB
|
253 lines
/*
* イベント制御
*
* Copyright T.Kobayashi 1994.6.26
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "event.h"
#include "graph.h"
#include "input.h"
#include "ml.h"
#include "strclass.h"
#if 0
static char *SysConstName[] = {
"ESC",
"BS",
"RET",
"LEFT_SWITCH",
"RIGHT_SWITCH",
"HELP",
NULL
};
static IntData SysConst[] = {
{ TYPE_INT, 0, 0x1b, },
{ TYPE_INT, 0, 0x08, },
{ TYPE_INT, 0, 0x0D, },
{ TYPE_INT, 0, LEFT_SWITCH, },
{ TYPE_INT, 0, RIGHT_SWITCH, },
{ TYPE_INT, 0, 0x8000 + 30, },
};
#endif
typedef struct {
char *Name;
IntData Data;
} ConstData;
static ConstData SysConst[] = {
{"ESC", { TYPE_INT, 0, 0x1b, }},
{"BS", { TYPE_INT, 0, 0x08, }},
{"RET", { TYPE_INT, 0, 0x0D, }},
{"LEFT_SWITCH", { TYPE_INT, 0, LEFT_SWITCH, }},
{"RIGHT_SWITCH", { TYPE_INT, 0, RIGHT_SWITCH, }},
{"HELP", { TYPE_INT, 0, KEY_HELP }},
{"MOUSE_LEFT", { TYPE_INT, 0, LEFT_SWITCH, }},
{"MOUSE_RIGHT", { TYPE_INT, 0, RIGHT_SWITCH, }},
{"KEY_TAB", { TYPE_INT, 0, 0x09, }},
{"KEY_ESC", { TYPE_INT, 0, 0x1b, }},
{"KEY_BS", { TYPE_INT, 0, 0x08, }},
{"KEY_RET", { TYPE_INT, 0, 0x0D, }},
{"KEY_F1", { TYPE_INT, 0, KEY_F1, }},
{"KEY_F2", { TYPE_INT, 0, KEY_F2, }},
{"KEY_F3", { TYPE_INT, 0, KEY_F3, }},
{"KEY_F4", { TYPE_INT, 0, KEY_F4, }},
{"KEY_F5", { TYPE_INT, 0, KEY_F5, }},
{"KEY_F6", { TYPE_INT, 0, KEY_F6, }},
{"KEY_F7", { TYPE_INT, 0, KEY_F7, }},
{"KEY_F8", { TYPE_INT, 0, KEY_F8, }},
{"KEY_F9", { TYPE_INT, 0, KEY_F9, }},
{"KEY_F10", { TYPE_INT, 0, KEY_F10, }},
{"KEY_F11", { TYPE_INT, 0, KEY_F11, }},
{"KEY_F12", { TYPE_INT, 0, KEY_F12, }},
{"KEY_F13", { TYPE_INT, 0, KEY_F13, }},
{"KEY_F14", { TYPE_INT, 0, KEY_F14, }},
{"KEY_F15", { TYPE_INT, 0, KEY_F15, }},
{"KEY_ROLLUP", { TYPE_INT, 0, KEY_ROLLUP, }},
{"KEY_ROLLDOWN", { TYPE_INT, 0, KEY_ROLLDOWN, }},
{"KEY_INS", { TYPE_INT, 0, KEY_INS, }},
{"KEY_DEL", { TYPE_INT, 0, KEY_DEL, }},
{"KEY_UP", { TYPE_INT, 0, KEY_UP, }},
{"KEY_LEFT", { TYPE_INT, 0, KEY_LEFT, }},
{"KEY_RIGHT", { TYPE_INT, 0, KEY_RIGHT, }},
{"KEY_DOWN", { TYPE_INT, 0, KEY_DOWN, }},
{"KEY_CLR", { TYPE_INT, 0, KEY_CLR, }},
{"KEY_HELP", { TYPE_INT, 0, KEY_HELP, }},
{"KEY_HOME", { TYPE_INT, 0, KEY_HOME, }},
{"KEY_UNDO", { TYPE_INT, 0, KEY_UNDO, }},
{"KEY_NUMPAD_0", { TYPE_INT, 0, KEY_NUMPAD_0, }},
{"KEY_NUMPAD_1", { TYPE_INT, 0, KEY_NUMPAD_1, }},
{"KEY_NUMPAD_2", { TYPE_INT, 0, KEY_NUMPAD_2, }},
{"KEY_NUMPAD_3", { TYPE_INT, 0, KEY_NUMPAD_3, }},
{"KEY_NUMPAD_4", { TYPE_INT, 0, KEY_NUMPAD_4, }},
{"KEY_NUMPAD_5", { TYPE_INT, 0, KEY_NUMPAD_5, }},
{"KEY_NUMPAD_6", { TYPE_INT, 0, KEY_NUMPAD_6, }},
{"KEY_NUMPAD_7", { TYPE_INT, 0, KEY_NUMPAD_7, }},
{"KEY_NUMPAD_8", { TYPE_INT, 0, KEY_NUMPAD_8, }},
{"KEY_NUMPAD_9", { TYPE_INT, 0, KEY_NUMPAD_9, }},
{"KEY_NUMPAD_SLASH", { TYPE_INT, 0, KEY_NUMPAD_SLASH, }},
{"KEY_NUMPAD_ASTERISK", { TYPE_INT, 0, KEY_NUMPAD_ASTERISK, }},
{"KEY_NUMPAD_MINUS", { TYPE_INT, 0, KEY_NUMPAD_MINUS, }},
{"KEY_NUMPAD_PLUS", { TYPE_INT, 0, KEY_NUMPAD_PLUS, }},
{"KEY_NUMPAD_EQUAL", { TYPE_INT, 0, KEY_NUMPAD_EQUAL, }},
{"KEY_NUMPAD_ENTER", { TYPE_INT, 0, KEY_NUMPAD_ENTER, }},
{"KEY_NUMPAD_COMMA", { TYPE_INT, 0, KEY_NUMPAD_COMMA, }},
{"KEY_NUMPAD_PERIOD", { TYPE_INT, 0, KEY_NUMPAD_PERIOD, }},
};
static int GetMouseMove( int, int, DataStruct* );
static int GetKeyCode( int, int, DataStruct* );
static int GetShiftStat( int, int, DataStruct* );
static int FuncFlushKey( int, int, DataStruct* );
static int KeyEvent( int, int, DataStruct* );
static int InputEvent( int, int, DataStruct* );
static int FuncCallKeyEvent( int, int, DataStruct* );
void EventLibInit()
{
int i ;
#if 0
for( i = 0 ; SysConstName[i] != NULL ; i++ )
{
NewConst( SysConstName[i], (DataStruct*)&SysConst[i] );
}
#endif
for( i = 0; i < sizeof(SysConst) / sizeof(SysConst[0]); i++) {
NewConst( SysConst[i].Name, (DataStruct*)&(SysConst[i].Data));
}
NewFunction( 0, "MouseMove", GetMouseMove );
NewFunction( 0, "KeyCode", GetKeyCode );
NewFunction( 0, "ShiftStat", GetShiftStat );
NewFunction( 0, "FlushKey", FuncFlushKey );
NewFunction( 0, "KeyEvent", KeyEvent );
NewFunction( 0, "InputEvent", InputEvent );
NewFunction( 0, "CallKeyEvent", FuncCallKeyEvent);
}
/* マウスの移動フラグの読み出し */
static int GetMouseMove( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
ArgCheck( "MouseMove", args, buf, TYPE_NOASN );
StackPushBoolean( MouseMove );
return RETURN_RETURN ;
}
/* キーの読み出し */
static int GetKeyCode( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
ArgCheck( "KeyCode", args, buf, TYPE_NOASN );
StackPushInt( KeyCode );
return RETURN_RETURN ;
}
/* シフトキーの状態読み出し */
static int GetShiftStat( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
ArgCheck( "ShiftStat", args, buf, TYPE_NOASN );
StackPushInt( ShiftStat );
return RETURN_RETURN ;
}
/* キーバッファのクリア */
static int FuncFlushKey( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
FlushKey();
return RETURN_VOID ;
}
/* キーイベント関数の設定 */
static int KeyEvent( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
StringClass *str ;
if (args == 0 || buf[0].type != TYPE_FUNC) {
(*ExecError)( "型が不正です。(KeyEvent)" );
}
if (args == 2 && buf[0].type == TYPE_FUNC && ObjectCheck( &buf[1], ClassName("String"))) {
ArgCheck( "KeyEvent", args, buf, TYPE_FUNC, TYPE_OBJECT, TYPE_NOASN );
if ( ObjectCheck( &buf[1], ClassName( "String" ) ) )
{
str = (StringClass*)buf[1].od.ptr ;
EventSetKey( buf[0].funcd.ident, str->str );
}
else
(*ExecError)( "型が不正です。(KeyEvent)" );
} else {
int ident, i;
char str[4] = "F00";
ident = buf[0].funcd.ident;
for (i = 1; i < args; ++i) {
if (buf[i].type != TYPE_INT) {
(*ExecError)( "型が不正です。(KeyEvent)" );
}
if (0 <= buf[i].id.i && buf[i].id.i < 128) {
str[2] = buf[i].id.i;
EventSetKey( ident, str+2);
} else if (KEY_FUNC_START <= buf[i].id.i && buf[i].id.i < KEY_FUNC_END) {
str[1] = (buf[i].id.i-KEY_FUNC_START)/10 + '0';
str[2] = (buf[i].id.i-KEY_FUNC_START)%10 + '0';
EventSetKey(ident, str);
}
}
}
return RETURN_VOID ;
}
/* 入力イベント関数の設定 */
static int InputEvent( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
ArgCheck( "InputEvent", args, buf, TYPE_FUNC, TYPE_NOASN );
EventSetInput( buf[0].funcd.ident );
return RETURN_VOID ;
}
/* */
static int FuncCallKeyEvent( ident, args, buf )
int ident ;
int args ;
DataStruct *buf ;
{
StringClass *str ;
if (args > 0) {
if ( ObjectCheck( &buf[0], ClassName( "String" ) ) ) {
str = buf[0].od.ptr;
KeyCode = str->str[0];
} else {
ArgCheck( "InputEvent", args, buf, TYPE_INT, TYPE_NOASN );
KeyCode = buf[0].id.i;
}
}
StackPushBoolean(CallKeyEvent());
return RETURN_RETURN ;
}