vmgremx.c
来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 745 行 · 第 1/2 页
C
745 行
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 + =
减小字号Ctrl + -
显示快捷键?