📄 hb.h
字号:
# define BYTE unsigned char
# define WORD unsigned int
# define closemode CLOSEMODE
# define inkey INKEY
# define setbank SETBANK
# define sethimode SETHIMODE
# define clrbank CLRBANK
# define wbuf WBUF
# define waitkey WAITKEY
# define MOUSE 0x33
# define ARROWCOLOR 15
# define BACKCOLOR 135
extern closemode();
extern inkey();
extern sethimode();
extern setbank();
extern clrbank();
extern wbuf();
extern waitkey();
# include <dos.h>
int CurBankA=0;
int CurBankB=0;
char bank;
int offset;
/* The shape of the arrow */
BYTE arrow[20][20]=
{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*
BYTE arrow[20][20]=
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,
0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,
0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,
0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,1,0,0,0,4,0,0,0,0,0,0,4,0,0,0,1,0,0,
0,1,0,0,0,4,4,4,0,0,0,0,4,4,4,0,0,0,1,0,
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,
0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,
0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,
0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,
0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
*/
void pset(int x,int y,BYTE color)
{
bank=((long) y*640+(long)x)/65536;
offset=(y*640+x)%65536;
if (bank!=CurBankA)
{
setbank((int) bank,0);
CurBankA=bank;
}
pokeb(0xa000,offset,color);
}
# if IBMVIDEOCARD
BYTE point(int x,int y)
{
BYTE far * video=MK_FP(0xa000,0x0000);
WORD bank;
int offset;
bank=((long) y*640+(long)x)/65536;
offset=(y*640+x)%65536;
if (bank!=CurBankB)
{
setbank(bank,1);
CurBankB=bank;
}
return *(video+offset);
}
# else
BYTE point(int x,int y)
{
BYTE far * video=MK_FP(0xa000,0x0000);
WORD bank;
int offset;
bank=((long) y*640+(long)x)/65536;
offset=(y*640+x)%65536;
if (bank!=CurBankA)
{
setbank(bank,0);
CurBankA=bank;
}
return *(video+offset);
}
# endif
void hline(int start_x,int end_x,int y,BYTE color)
{
int dx;
dx=end_x-start_x+1;
bank=((long) y*640+(long)start_x)/65536;
offset=(y*640+start_x)%65536;
if (bank!=CurBankA)
{
setbank((int) bank,0);
CurBankA=bank;
}
wbuf(offset,dx,color);
}
void vline(int start_y,int end_y,int x,BYTE color)
{
int y;
for (y=start_y;y<end_y+1;y++) pset(x,y,color);
}
void bar(int left,int top,int right,int bottom,BYTE color)
{
hline(left,right,top,color);
hline(left,right,bottom,color);
vline(top,bottom,left,color);
vline(top,bottom,right,color);
}
void fill(int left,int top,int right,int bottom,BYTE color)
{
int x,y;
for (y=top;y<bottom+1;y++)
hline(left,right,y,color);
}
void drawarrow(int x,int y,BYTE color)
{
int xx,yy;
for (yy=0;yy<20;yy++)
for (xx=0;xx<20;xx++)
if (arrow[yy][xx]) pset(x+xx,y+yy,color);
}
void getimage(int x,int y,BYTE *buf)
{
int xx,yy;
for(yy=0;yy<20;yy++)
for(xx=0;xx<20;xx++)
*(buf++)=point(x+xx,y+yy);
}
void putimage(int x,int y,BYTE *buf)
{
int xx,yy;
for(yy=0;yy<20;yy++)
for(xx=0;xx<20;xx++)
pset(x+xx,y+yy,*(buf++));
}
int MouseState()
{
union REGS regs;
regs.x.ax = 3;
int86(MOUSE, ®s, ®s);
return(regs.x.bx);
}
void Set_Range(int start_x,int start_y,int end_x,int end_y)
{
union REGS r;
r.x.ax=7;
r.x.cx=start_x;
r.x.dx=end_x;
int86(0x33,&r,&r);
r.x.ax=8;
r.x.cx=start_y;
r.x.dx=end_y;
int86(MOUSE,&r,&r);
}
void Mouse_Reset()
{
union REGS regs;
regs.x.ax = 0;
int86(MOUSE, ®s, ®s);
if (! regs.x.ax)
{
printf("Mousedriver not installed.");
exit(0);
}
Set_Range(0,0,629,479);
}
void Get_XY(int *x,int *y)
{
union REGS ireg,oreg;
ireg.x.ax=3;
int86(MOUSE,&ireg,&oreg);
*x=oreg.x.cx;
*y=oreg.x.dx;
}
void Set_XY(int x,int y)
{
union REGS ireg;
ireg.x.ax=4;
ireg.x.cx=x;
ireg.x.dx=y;
int86(MOUSE,&ireg,&ireg);
}
BYTE font[96][7] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* Space */
{ 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00 }, /* ! */
{ 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* " */
{ 0x48, 0xFC, 0x48, 0x48, 0xFC, 0x48, 0x00 }, /* # */
{ 0x40, 0x60, 0x80, 0x40, 0x20, 0xC0, 0x40 }, /* $ */
{ 0xC4, 0xC8, 0x10, 0x20, 0x4C, 0x8C, 0x00 }, /* % */
{ 0x40, 0xA0, 0x40, 0xA4, 0x90, 0x64, 0x00 }, /* & */
{ 0xC0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00 }, /* ' */
{ 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x00 }, /* ( */
{ 0x80, 0x40, 0x20, 0x20, 0x40, 0x80, 0x00 }, /* ) */
{ 0x00, 0x90, 0x60, 0xF0, 0x60, 0x90, 0x00 }, /* * */
{ 0x00, 0x00, 0x40, 0xE0, 0x40, 0x00, 0x00 }, /* + */
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80 }, /* , */
{ 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00 }, /* - */
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 }, /* . */
{ 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00 }, /* / */
{ 0x60, 0x90, 0xB0, 0xD0, 0x90, 0x60, 0x00 }, /* 0 */
{ 0x40, 0xC0, 0x40, 0x40, 0x40, 0xE0, 0x00 }, /* 1 */
{ 0x60, 0x90, 0x10, 0x60, 0x80, 0xF0, 0x00 }, /* 2 */
{ 0xE0, 0x10, 0x60, 0x10, 0x10, 0xE0, 0x00 }, /* 3 */
{ 0x20, 0xA0, 0xA0, 0xF0, 0x20, 0x20, 0x00 }, /* 4 */
{ 0xF0, 0x80, 0xE0, 0x10, 0x10, 0xE0, 0x00 }, /* 5 */
{ 0x70, 0x80, 0xE0, 0x90, 0x90, 0x60, 0x00 }, /* 6 */
{ 0xF0, 0x10, 0x20, 0x40, 0x40, 0x40, 0x00 }, /* 7 */
{ 0x60, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00 }, /* 8 */
{ 0x60, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x00 }, /* 9 */
{ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00 }, /* : */
{ 0x00, 0x40, 0x00, 0x00, 0x40, 0x80, 0x00 }, /* ; */
{ 0x00, 0x20, 0x40, 0x80, 0x40, 0x20, 0x00 }, /* < */
{ 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00 }, /* = */
{ 0x00, 0x80, 0x40, 0x20, 0x40, 0x80, 0x00 }, /* > */
{ 0x60, 0x90, 0x10, 0x60, 0x00, 0x40, 0x00 }, /* ? */
{ 0x70, 0x88, 0xB8, 0xB0, 0x84, 0x78, 0x00 }, /* @ */
{ 0x60, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x00 }, /* A */
{ 0xE0, 0x90, 0xE0, 0x90, 0x90, 0xE0, 0x00 }, /* B */
{ 0x60, 0x90, 0x80, 0x80, 0x90, 0x60, 0x00 }, /* C */
{ 0xE0, 0x90, 0x90, 0x90, 0x90, 0xE0, 0x00 }, /* D */
{ 0xF0, 0x80, 0xE0, 0x80, 0x80, 0xF0, 0x00 }, /* E */
{ 0xF0, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x00 }, /* F */
{ 0x60, 0x90, 0x80, 0xB0, 0x90, 0x60, 0x00 }, /* G */
{ 0x90, 0x90, 0xF0, 0x90, 0x90, 0x90, 0x00 }, /* H */
{ 0xE0, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00 }, /* I */
{ 0x70, 0x20, 0x20, 0x20, 0xA0, 0x40, 0x00 }, /* J */
{ 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x90, 0x00 }, /* K */
{ 0x80, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00 }, /* L */
{ 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x00 }, /* M */
{ 0x90, 0xD0, 0xB0, 0x90, 0x90, 0x90, 0x00 }, /* N */
{ 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00 }, /* O */
{ 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x00 }, /* P */
{ 0x70, 0x88, 0x88, 0x88, 0x90, 0x68, 0x00 }, /* Q */
{ 0xE0, 0x90, 0x90, 0xE0, 0x90, 0x90, 0x00 }, /* R */
{ 0x70, 0x80, 0x60, 0x10, 0x10, 0xE0, 0x00 }, /* S */
{ 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, /* T */
{ 0x90, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00 }, /* U */
{ 0x88, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00 }, /* V */
{ 0x88, 0x88, 0x88, 0xA8, 0xD8, 0x88, 0x00 }, /* W */
{ 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00 }, /* X */
{ 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00 }, /* Y */
{ 0xF0, 0x10, 0x20, 0x40, 0x80, 0xF0, 0x00 }, /* Z */
{ 0xE0, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00 }, /* [ */
{ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00 }, /* */
{ 0xE0, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00 }, /* ] */
{ 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^ */
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00 }, /* _ */
{ 0xC0, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00 }, /* ` */
{ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x00 }, /* a */
{ 0x80, 0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00 }, /* b */
{ 0x00, 0x00, 0x70, 0x80, 0x80, 0x70, 0x00 }, /* c */
{ 0x10, 0x10, 0x70, 0x90, 0x90, 0x70, 0x00 }, /* d */
{ 0x00, 0x00, 0x70, 0xA0, 0xC0, 0x70, 0x00 }, /* e */
{ 0x30, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00 }, /* f */
{ 0x00, 0x00, 0x60, 0x90, 0x70, 0x10, 0xE0 }, /* g */
{ 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x00 }, /* h */
{ 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00 }, /* i */
{ 0x00, 0x20, 0x00, 0x20, 0x20, 0x20, 0xC0 }, /* j */
{ 0x80, 0x80, 0xA0, 0xC0, 0xA0, 0x90, 0x00 }, /* k */
{ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00 }, /* l */
{ 0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0x00 }, /* m */
{ 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x00 }, /* n */
{ 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00 }, /* o */
{ 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80 }, /* p */
{ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10 }, /* q */
{ 0x00, 0x00, 0x60, 0x80, 0x80, 0x80, 0x00 }, /* r */
{ 0x00, 0x00, 0x70, 0xC0, 0x30, 0xE0, 0x00 }, /* s */
{ 0x00, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00 }, /* t */
{ 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x00 }, /* u */
{ 0x00, 0x00, 0x88, 0x88, 0x50, 0x20, 0x00 }, /* v */
{ 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0x58, 0x00 }, /* w */
{ 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x00 }, /* x */
{ 0x00, 0x00, 0x90, 0x90, 0x70, 0x10, 0xE0 }, /* y */
{ 0x00, 0x00, 0xF0, 0x20, 0x40, 0xF0, 0x00 }, /* z */
{ 0x10, 0x20, 0x20, 0xC0, 0x20, 0x20, 0x10 }, /* { */
{ 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00 }, /* | */
{ 0x80, 0x40, 0x40, 0x30, 0x40, 0x40, 0x80 }, /* } */
{ 0x64, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ~ */
{ 0x45, 0x33, 0xa0, 0x01, 0x44, 0xa0, 0xc0 },
};
short font_width[96] = {
3,2,4,7,4,7,6,3,4,4,5,4,3,4,2,7, /*Space thru slash */
5,4,5,5,5,5,5,5,5,5, /* 0 thru 9 */
2,3,4,4,4,5,7, /* Colon through at (@) */
5,5,5,5,5,5,5,5,4,5,5,5,6,5,5,5,6,5,5,4,5,6,6,6,6,5, /* Cap. letters */
4,7,4,4,5,3, /* Right square bracket [ thru open quote (`) */
5,5,5,5,5,5,5,5,2,4,5,2,6,5,5,5,5,4,5,4,5,6,6,5,5,5, /* Lowercase ltrs */
5,2,5,7 /* Left sqiggle, broken bar, right squiggle, tilde */
};
void print(int x, int y, char letter,BYTE scale,BYTE col)
{
static int y_scan, width;
static BYTE mask;
static BYTE * fontptr;
BYTE sx,sy;
register int x_scan;
if(letter <= 31) return;
letter -= 32;
width = font_width[(int)letter];
fontptr = font[(int)letter];
for (y_scan = 0; y_scan != 7; y_scan++)
{
mask = 128;
for (x_scan = 0; x_scan != width; x_scan++)
{
if (*fontptr & mask)
for (sy=0;sy<scale;sy++)
for (sx=0;sx<scale;sx++)
pset(x+x_scan*scale+sx,y+y_scan*scale+sy,col);
mask >>= 1;
}
++fontptr;
}
}
void text(int x, int y, char * str,BYTE scale,BYTE col)
{
while(*str) {
print(x, y, *str,scale,col);
x+= font_width[*str-32]*scale;
++str;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -