📄 vmgremx.c
字号:
{
char cell[2];
USHORT len = sizeof cell;
VioReadCellStr(cell, &len, (USHORT) (y - 1), (USHORT) (x - 1), 0);
return *(cell + 1);
}
}
void vm_xgetchxy(char x, char y, char *attr, char *ch)
{
if (_osmode == DOS_MODE)
{
char cell[2];
vi_init();
v_getline(cell, (int)(x - 1), (int)(y - 1), 1);
*ch = *cell;
*attr = *(cell + 1);
}
else
{
char cell[2];
USHORT len = sizeof cell;
VioReadCellStr(cell, &len, (USHORT) (y - 1), (USHORT) (x - 1), 0);
*ch = *cell;
*attr = *(cell + 1);
}
}
void vm_setcursorstyle(int style)
{
if (_osmode == DOS_MODE)
{
if (vm_iscolorcard())
{
switch (style)
{
case CURSORHALF:
vm_setcursorsize(4, 7);
break;
case CURSORFULL:
vm_setcursorsize(0, 7);
break;
case CURSORNORM:
vm_setcursorsize(7, 8);
break;
case CURSORHIDE:
v_hidecursor();
break;
default:
break;
}
}
else
{
switch (style)
{
case CURSORHALF:
vm_setcursorsize(8, 13);
break;
case CURSORFULL:
vm_setcursorsize(0, 13);
break;
case CURSORNORM:
vm_setcursorsize(11, 13);
break;
case CURSORHIDE:
vm_setcursorsize(32, 32);
break;
default:
break;
}
}
}
else
{
VIOCURSORINFO vi;
switch (style)
{
case CURSORHALF:
vi.yStart = -50;
vi.cEnd = -100;
vi.cx = 0;
vi.attr = 0;
VioSetCurType(&vi, 0);
break;
case CURSORFULL:
vi.yStart = 0;
vi.cEnd = -100;
vi.cx = 0;
vi.attr = 0;
VioSetCurType(&vi, 0);
break;
case CURSORNORM:
vi.yStart = -90;
vi.cEnd = -100;
vi.cx = 0;
vi.attr = 0;
VioSetCurType(&vi, 0);
break;
case CURSORHIDE:
vi.yStart = -90;
vi.cEnd = -100;
vi.cx = 0;
vi.attr = -1;
VioSetCurType(&vi, 0);
break;
default:
break;
}
}
}
void vm_putch(char x, char y, char ch)
{
if (_osmode == DOS_MODE)
{
char cell[2];
vi_init();
v_getline(cell, (int)(x - 1), (int)(y - 1), 1);
*cell = ch;
v_putline(cell, (int)(x - 1), (int)(y - 1), 1);
}
else
{
VioWrtCharStr(&ch, 1, (USHORT) (y - 1), (USHORT) (x - 1), 0);
}
}
void vm_puts(char x, char y, char *str)
{
if (_osmode == DOS_MODE)
{
vi_init();
while (*str)
{
vm_putch(x, y, *str);
str++;
x++;
}
}
else
{
VioWrtCharStr(str, (USHORT) strlen(str), (USHORT) (y - 1), (USHORT) (x - 1), 0);
}
}
void vm_xputch(char x, char y, char attr, char ch)
{
if (_osmode == DOS_MODE)
{
char cell[2];
vi_init();
*cell = ch;
*(cell + 1) = attr;
v_putline(cell, (int)(x - 1), (int)(y - 1), 1);
}
else
{
VioWrtCharStrAtt(&ch, 1, (USHORT) (y - 1), (USHORT) (x - 1), (PBYTE) &attr, 0);
}
}
void vm_xputs(char x, char y, char attr, char *str)
{
if (_osmode == DOS_MODE)
{
char *p, *cell, *pcell;
cell = malloc(strlen(str) * 2);
if (cell)
{
pcell = cell;
p = str;
while (*p)
{
*pcell++ = *p++;
*pcell++ = attr;
}
vi_init();
v_putline(cell, (int)(x - 1), (int)(y - 1), strlen(str));
free(cell);
}
}
else
{
VioWrtCharStrAtt(str, (USHORT) strlen(str), (USHORT) (y - 1), (USHORT) (x - 1), (PBYTE) &attr, 0);
}
}
void vm_putattr(char x, char y, char attr)
{
if (_osmode == DOS_MODE)
{
char cell[2];
vi_init();
v_getline(cell, (int)(x - 1), (int)(y - 1), 1);
*(cell + 1) = attr;
v_putline(cell, (int)(x - 1), (int)(y - 1), 1);
}
else
{
VioWrtNAttr((PBYTE) &attr, 1, (USHORT) (y - 1), (USHORT) (x - 1), 0);
}
}
void vm_paintclearbox(char x1, char y1, char x2, char y2, char attr)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_xputch(x, y, attr, ' ');
}
}
}
else
{
char y, cell[2];
cell[0] = ' ';
cell[1] = attr;
for (y = y1; y <= y2; y++)
{
VioWrtNCell((PBYTE) &cell, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
}
}
}
void vm_paintbox(char x1, char y1, char x2, char y2, char attr)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_putattr(x, y, attr);
}
}
}
else
{
char y;
for (y = y1; y <= y2; y++)
{
VioWrtNAttr((PBYTE) &attr, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
}
}
}
void vm_clearbox(char x1, char y1, char x2, char y2)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_putch(x, y, ' ');
}
}
}
else
{
char y, ch;
ch = ' ';
for (y = y1; y <= y2; y++)
{
VioWrtNChar((PBYTE) &ch, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
}
}
}
void vm_fillbox(char x1, char y1, char x2, char y2, char ch)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_putch(x, y, ch);
}
}
}
else
{
char y;
for (y = y1; y <= y2; y++)
{
VioWrtNChar((PBYTE) &ch, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
}
}
}
void vm_gettext(char x1, char y1, char x2, char y2, char *dest)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_xgetchxy(x, y, dest + 1, dest);
dest += 2;
}
}
}
else
{
USHORT width;
char y;
width = (USHORT) ((x2 - x1 + 1) * 2);
for (y = y1; y <= y2; y++)
{
VioReadCellStr((PBYTE) dest, &width, (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
dest += width;
}
}
}
void vm_puttext(char x1, char y1, char x2, char y2, char *srce)
{
if (_osmode == DOS_MODE)
{
char x, y;
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
vm_xputch(x, y, *(srce + 1), *srce);
srce += 2;
}
}
}
else
{
USHORT width;
char y;
width = (USHORT) ((x2 - x1 + 1) * 2);
for (y = y1; y <= y2; y++)
{
VioWrtCellStr((PBYTE) srce, width, (USHORT) (y - 1), (USHORT) (x1 - 1), 0);
srce += width;
}
}
}
void vm_horizline(char x1, char x2, char row, char attr, char ch)
{
if (_osmode == DOS_MODE)
{
char x;
for (x = x1; x <= x2; x++)
{
vm_xputch(x, row, attr, ch);
}
}
else
{
char cell[2];
cell[0] = ch;
cell[1] = attr;
VioWrtNCell((PBYTE) &cell, (USHORT) (x2 - x1 + 1), (USHORT) (row - 1), (USHORT) (x1 - 1), 0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -