TIP: Click on subject to list as thread! ANSI
echo: aust_c_here
to: All
from: andrew clarke
date: 1996-03-06 23:20:28
subject: VidMgr 3 of 4

* Crossposted in area ED_CODE, AUST_C_HERE, C_ECHO, PUBLIC_DOMAIN

>>>>>>>>>> CSplit: Version 2.1
>>>>>>>>>>
>>>>>>>>>> CSplit: Begin part 3/4
>>>>>>>>>>
    register char FAR *p;
    p = vm_screenptr((char) (x - 1), (char) (y - 1));
    *p = ch;
}

void vm_puts(char x, char y, char *str)
{
    register char FAR *p;
    p = vm_screenptr((char) (x - 1), (char) (y - 1));
    while (*str) {
        *p++ = *str++;
        p++;
    }
}

void vm_xputch(char x, char y, char attr, char ch)
{
    register char FAR *p;
    p = vm_screenptr((char) (x - 1), (char) (y - 1));
    *p = ch;
    *(p + 1) = attr;
}

void vm_xputs(char x, char y, char attr, char *str)
{
    register char FAR *p;
    p = vm_screenptr((char) (x - 1), (char) (y - 1));
    while (*str) {
        *p++ = *str++;
        *p++ = attr;
    }
}

void vm_putattr(char x, char y, char attr)
{
    register char FAR *p;
    p = vm_screenptr((char) (x - 1), (char) (y - 1));
    *(p + 1) = attr;
}

void vm_paintclearbox(char x1, char y1, char x2, char y2, char attr)
{
    char x, y;
    for (y = y1; y <= y2; y++)
        for (x = x1; x <= x2; x++)
            vm_xputch(x, y, attr, ' ');
}

void vm_paintbox(char x1, char y1, char x2, char y2, char attr)
{
    char x, y;
    for (y = y1; y <= y2; y++)
        for (x = x1; x <= x2; x++)
            vm_putattr(x, y, attr);
}

void vm_clearbox(char x1, char y1, char x2, char y2)
{
    char x, y;
    for (y = y1; y <= y2; y++)
        for (x = x1; x <= x2; x++)
            vm_putch(x, y, ' ');
}

void vm_gettext(char x1, char y1, char x2, char y2, char *dest)
{
    char x, y;
    for (y = y1; y <= y2; y++)
        for (x = x1; x <= x2; x++) {
            vm_xgetchxy(x, y, dest + 1, dest);
            dest += 2;
        }
}

void vm_puttext(char x1, char y1, char x2, char y2, char *srce)
{
    char x, y;
    for (y = y1; y <= y2; y++)
        for (x = x1; x <= x2; x++) {
            vm_xputch(x, y, *(srce + 1), *srce);
            srce += 2;
        }
}

void vm_horizline(char x1, char x2, char row, char attr, char ch)
{
    char x;
    for (x = x1; x <= x2; x++)
        vm_xputch(x, row, attr, ch);
}

#elif defined(__OS2__)

#define INCL_KBD
#define INCL_VIO
#define INCL_DOSPROCESS

#include 

char vm_getscreenwidth(void)
{
    VIOMODEINFO vi;
    vi.cb = sizeof(VIOMODEINFO);
    VioGetMode(&vi, 0);
    return vi.col;
}

char vm_getscreenheight(void)
{
    VIOMODEINFO vi;
    vi.cb = sizeof(VIOMODEINFO);
    VioGetMode(&vi, 0);
    return vi.row;
}

short vm_getscreensize(void)
{
    return (short) (vm_getscreenwidth() * vm_getscreenheight() * 2);
}

char vm_wherex(void)
{
    USHORT row, col;
    VioGetCurPos(&row, &col, 0);
    return (char) (col + 1);
}

char vm_wherey(void)
{
    USHORT row, col;
    VioGetCurPos(&row, &col, 0);
    return (char) (row + 1);
}

void vm_gotoxy(char x, char y)
{
    VioSetCurPos((USHORT) (y - 1), (USHORT) (x - 1), 0);
}

void vm_setcursorsize(char start, char end)
{
    VIOCURSORINFO vi;
    vi.yStart = start;
    vi.cEnd = end;
    vi.cx = 0;
    vi.attr = 0;
    VioSetCurType(&vi, 0);
}

void vm_getcursorsize(char *start, char *end)
{
    VIOCURSORINFO vi;
    VioGetCurType(&vi, 0);
    *start = vi.yStart;
    *end = vi.cEnd;
}

int vm_kbhit(void)
{
    KBDKEYINFO ki;
    ki.fbStatus = 0;
    KbdPeek(&ki, 0);
    return ki.fbStatus & KBDTRF_FINAL_CHAR_IN;
}

int vm_getch(void)
{
    KBDKEYINFO ki;

    ki.chChar = ki.chScan = 0;
    KbdCharIn(&ki, IO_WAIT, 0);

    if (ki.chChar == 0xe0) {
        if (ki.chScan) {
            ki.chChar = 0;      /* force scan return */
        } else {                /* get next block */
            ki.chChar = 0;
            KbdCharIn(&ki, IO_WAIT, 0);
            if (!ki.chScan) {   /* still no scan? */
                ki.chScan = ki.chChar;  /* move new char over */
                ki.chChar = 0;  /* force its return */
            } else {
                ki.chChar = 0;  /* force new scan */
            }
        }
    }
    if (ki.chScan == 0xe0) {
        if (!ki.chChar) {
            ki.chScan = 0;
            KbdCharIn(&ki, IO_WAIT, 0);
            if (!ki.chScan) {   /* still no scan? */
                ki.chScan = ki.chChar;  /* move new char over */
                ki.chChar = 0;  /* force its return */
            } else {
                ki.chChar = 0;  /* force new scan */
            }
        } else {
            ki.chScan = 0;      /* handle 0xe00d case */
        }
    }
    if (ki.chChar)
        ki.chScan = 0;

    return (int) ((ki.chScan << 8) + (ki.chChar));
}

char vm_getchxy(char x, char y)
{
    char ch;
    USHORT len = 1;
    VioReadCharStr(&ch, &len, (USHORT) (y - 1), (USHORT) (x - 1), 0);
    return ch;
}

char vm_getattrxy(char x, char y)
{
    char cell[4];
    USHORT len = 4;
    VioReadCellStr(cell, &len, (USHORT) (y - 1), (USHORT) (x - 1), 0);
    return *(cell + 1);
}

void vm_xgetchxy(char x, char y, char *attr, char *ch)
{
    char cell[4];
    USHORT len = 4;
    VioReadCellStr(cell, &len, (USHORT) (y - 1), (USHORT) (x - 1), 0);
    *ch = *cell;
    *attr = *(cell + 1);
}

void vm_setcursorstyle(int style)
{
    VIOCURSORINFO vi;

    switch (style) {
    case CURSOR_HALF:
        vi.yStart = -50;
        vi.cEnd = -100;
        vi.cx = 0;
        vi.attr = 0;
        VioSetCurType(&vi, 0);
        break;
    case CURSOR_FULL:
        vi.yStart = 0;
        vi.cEnd = -100;
        vi.cx = 0;
        vi.attr = 0;
        VioSetCurType(&vi, 0);
        break;
    case CURSOR_NORM:
        vi.yStart = -90;
        vi.cEnd = -100;
        vi.cx = 0;
        vi.attr = 0;
        VioSetCurType(&vi, 0);
        break;
    case CURSOR_HIDE:
        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)
{
    VioWrtCharStr(&ch, 1, (USHORT) (y - 1), (USHORT) (x - 1), 0);
}

void vm_puts(char x, char y, char *str)
{
    VioWrtCharStr(str, (USHORT) strlen(str), (USHORT) (y - 1), (USHORT) \
\
(x - 1), 0);
}

void vm_xputch(char x, char y, char attr, char ch)
{
    VioWrtCharStrAtt(&ch, 1, (USHORT) (y - 1), (USHORT) (x - 1), \
\
(PBYTE) & attr, 0);
}

void vm_xputs(char x, char y, char attr, char *str)
{
    VioWrtCharStrAtt(str, (USHORT) strlen(str), (USHORT) (y - 1), \
\
(USHORT) (x - 1), (PBYTE) & attr, 0);
}

void vm_putattr(char x, char y, char attr)
{
    VioWrtNAttr((PBYTE) & attr, 1, (USHORT) (y - 1), (USHORT) (x - 1), \
\
0);
}

void vm_paintclearbox(char x1, char y1, char x2, char y2, char attr)
{
    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)
{
    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)
{
    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_gettext(char x1, char y1, char x2, char y2, char *dest)
{
    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)
{
    USHORT width;
    char y;
    width = (USHORT) ((x2 - x1 + 1) * 2);
    for (y = y1; y <= y2; y++) {
        VioWrtCellStr((PBYTE) srce, width, (USHORT) (y - 1), (USHORT) \
\
>>>>>>>>>> CSplit: End part 3/4 crc: f3d9
>>>>>>>>>>

--- Msgedsq/2 3.30
* Origin: Blizzard of Ozz, Melbourne, Australia (3:635/727.4{at}fidonet)
SEEN-BY: 50/99 78/0 620/243 623/630 632/349 634/395 635/503 544 727 711/401
SEEN-BY: 711/409 410 413 430 510 808 809 932 934 712/515 713/888 714/906
SEEN-BY: 800/1 7877/2809
@PATH: 635/727 544 50/99 711/808 809 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.