📄 ldrawmos.cpp
字号:
#include <ldraw.h>
#include <i86.h>
#include <stdio.h>
#include <i86.h>
#include <mem.h>
#include <stdlib.h>
static char work=0;
short mouse_event=0, mouse_code, mouse_x, mouse_y, mouse_rb, mouse_sb;
static void clear_click();
static void _loadds far click_handler(int max,int mcx,int mdx)
{
#pragma aux click_handler parm [EAX] [ECX] [EDX]
mouse_event=1;
mouse_code=max;
mouse_x=mcx;
mouse_y=mdx;
if (mouse_code&8) mouse_rb=1,mouse_sb=mouse_code;
}
static void clear_click()
{ union REGS r;
r.w.ax=0;
int386(0x33,&r,&r);
}
char lmInit()
{ union REGS r; struct SREGS sregs;
if (work==1) return work;
r.w.ax=0; int386(0x33,&r,&r);
if (r.w.ax!=0) { work=1; lmPlace(0,0); }
else work=0;
if (work) {
lmSetX(0,639); lmSetY(0,479);
memset(&sregs,0,sizeof(sregs));
r.w.ax=0x0c;
r.w.cx=31; //0x0002 + 0x0008;
r.x.edx=FP_OFF(click_handler);
sregs.es=FP_SEG(click_handler);
int386x(0x33, &r, &r, &sregs);
atexit(clear_click);
}
return work;
}
void lmRead(short *x,short *y,short *b)
{ union REGS r;
if (work==0) { *x=*y=*b=0; return; }
r.w.ax=3; int386(0x33,&r,&r);
*x=r.w.cx; *y=r.w.dx; *b=r.w.bx;
mouse_x=r.w.cx, mouse_y=r.w.dx;
mouse_code=r.w.bx, mouse_sb=mouse_code;
}
void lmPlace(short x,short y)
{ union REGS r;
if (work==0) return;
r.w.ax=4; r.w.cx=x; r.w.dx=y;
int386(0x33,&r,&r);
mouse_x=x; mouse_y=y;
}
void lmSetX(short min,short max)
{ union REGS r;
if (work==0) return;
r.w.ax=7; r.w.cx=min; r.w.dx=max;
int386(0x33,&r,&r);
}
void lmSetY(short min,short max)
{ union REGS r;
if (work==0) return;
r.w.ax=8; r.w.cx=min; r.w.dx=max;
int386(0x33,&r,&r);
}
void lmSetClick(void *func)
{ union REGS r; struct SREGS sregs;
memset(&sregs,0,sizeof(sregs));
r.w.ax=0x0c;
r.w.cx=0x0002 + 0x0008;
r.x.edx=FP_OFF(func);
sregs.es=FP_SEG(func);
int386x(0x33, &r, &r, &sregs);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -