⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vmgremx.c

📁 C语言库函数的源代码,是C语言学习参考的好文档。
💻 C
📖 第 1 页 / 共 2 页
字号:
    {
        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 + -