static int *xp;
static int xbuf[256];
Lock vgascreenlock;
-int drawdebug;
void
vgaimageinit(ulong)
int h, w, pos;
Rectangle r;
- if(xp < xbuf || xp >= &xbuf[sizeof(xbuf)])
+ if(xp < xbuf || xp >= &xbuf[nelem(xbuf)])
xp = xbuf;
h = scr->memdefont->height;
static void
vgascreenputs(char* s, int n)
{
- int i, gotdraw;
- Rune r;
- char buf[4];
+ static char rb[UTFmax+1];
+ static int nrb;
+ char *e;
+ int gotdraw;
VGAscr *scr;
Rectangle flushr;
flushr = Rect(10000, 10000, -10000, -10000);
- while(n > 0){
- i = chartorune(&r, s);
- memmove(buf, s, i);
- buf[i] = 0;
- n -= i;
- s += i;
- vgascreenputc(scr, buf, &flushr);
+ e = s + n;
+ while(s < e){
+ rb[nrb++] = *s++;
+ if(nrb >= UTFmax || fullrune(rb, nrb)){
+ rb[nrb] = 0;
+ vgascreenputc(scr, rb, &flushr);
+ nrb = 0;
+ }
}
flushmemscreen(flushr);
h = scr->memdefont->height;
r = scr->gscreen->r;
- if(i = mkcolor(scr->gscreen, 0x444488FF)){
+ if(i = mkcolor(scr->gscreen, 0x0D686BFF)){
memimagedraw(scr->gscreen, r, i, ZP, nil, ZP, S);
freememimage(i);
}
+ r = scr->gscreen->clipr;
window = insetrect(r, 20);
memimagedraw(scr->gscreen, window, conscol, ZP, memopaque, ZP, S);
window = insetrect(window, 4);
qunlock(&drawlock);
+ vgascreenputs(kmesg.buf, kmesg.n);
+
screenputs = vgascreenputs;
}
Physseg seg;
memset(&seg, 0, sizeof seg);
- seg.attr = SG_PHYSICAL;
+ seg.attr = SG_PHYSICAL | SG_DEVICE | SG_NOEXEC;
seg.name = name;
seg.pa = pa;
seg.size = size;