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 + -
显示快捷键?