X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=sys1%2Fkern%2Fsrc%2Fcon.c;h=6627f955a632f934349fce7008036e37dc2db0f6;hb=b1333cb9e35058191b43df84269bd5ee5823310f;hp=b1102723aab1d5b3c7ff57b14210a9648a8236ab;hpb=f28bc61c31cc95d9a0496a6f40a2fcdfd79f782d;p=3sys diff --git a/sys1/kern/src/con.c b/sys1/kern/src/con.c index b110272..6627f95 100644 --- a/sys1/kern/src/con.c +++ b/sys1/kern/src/con.c @@ -13,6 +13,10 @@ static int tbuf_first, tbuf_last; static int curx, cury, scroll; +#define CURSTACK_SIZE 16 +static unsigned int savecur[CURSTACK_SIZE]; +static int savecur_top; + static void newline(void); @@ -29,6 +33,36 @@ void con_reset(void) curx = cury = scroll = 0; tbuf_first = tbuf_last = 0; memset(textbuf[0], 0, sizeof textbuf[0]); + + savecur_top = 0; +} + +void con_setcur(int x, int y) +{ + curx = x < 0 ? 0 : (x >= NCOLS ? NCOLS - 1 : x); + cury = y < 0 ? 0 : (y >= NROWS ? NROWS - 1 : y); +} + +void con_getcur(int *x, int *y) +{ + *x = curx; + *y = cury; +} + +void con_pushcur(void) +{ + if(savecur_top >= CURSTACK_SIZE) return; + + savecur[savecur_top++] = curx | (cury << 16); +} + +void con_popcur(void) +{ + if(savecur_top <= 0) return; + + savecur_top--; + curx = savecur[savecur_top] & 0xffff; + cury = savecur[savecur_top] >> 16; } void con_putchar(int c)