From 49c39b160bc1b55189f276e04348957e10bf1993 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 3 Jun 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-06-03 --- pc/devvga.c | 33 ++++++++++++------ pc/vga.c | 92 +++++++------------------------------------------- pc/vga.h | 8 ++--- port/devcons.c | 2 +- port/devmnt.c | 2 +- port/devwren.c | 1 + port/proc.c | 7 ++-- port/stream.c | 15 ++------ port/sysproc.c | 2 +- port/systab.h | 6 ++-- 10 files changed, 49 insertions(+), 119 deletions(-) diff --git a/pc/devvga.c b/pc/devvga.c index db1b1906120fda94d47f4c3cba9d89ea998fec4f..77ae0ef6853ffcaa56fda31f03a9c0b35ff60539 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -6,6 +6,8 @@ #include "io.h" #include "../port/error.h" +#include +#include #include "devtab.h" #include "vga.h" @@ -128,16 +130,15 @@ vgaread(Chan *c, void *buf, long n, ulong offset) case Qvgatype: return readstr(offset, buf, n, vgacard); case Qvgasize: - sprint(obuf, "%dx%d%x%d %s", - screeninfo.maxx, screeninfo.maxy, - (screeninfo.packed == 0) ? 256 : 16, - (screeninfo.interlaced != 0) ? "interlaced" : "non-interlaced"); + sprint(obuf, "%d %d", + gscreen.r.max.x, gscreen.r.max.y); return readstr(offset, buf, n, obuf); case Qvgaport: if (offset + n >= 0x8000) error(Ebadarg); - for (port=offset; portqid.path&~CHDIR){ case Qdir: @@ -163,12 +163,25 @@ vgawrite(Chan *c, void *buf, long n, ulong offset) case Qvgasize: if(offset != 0) error(Ebadarg); - error(Eperm); + if(n >= sizeof cbuf) + n = sizeof cbuf - 1; + memmove(cbuf, buf, n); + cbuf[n-1] = 0; + cp = cbuf; + maxx = strtoul(cp, &cp, 0); + maxy = strtoul(cp, &cp, 0); + if (maxx == 0 || maxy == 0 || + maxx > 1280 || maxy > 1024) + error(Ebadarg); + setscreen(maxx, maxy, 1); + return n; case Qvgaport: + cp = buf; if (offset + n >= 0x8000) error(Ebadarg); - for (port=offset; portbits->base; for(i = defont->bits->width*Dy(defont->bits->r); i > 0; i--, l++) *l = (*l<<24) | ((*l>>8)&0x0000ff00) | ((*l<<8)&0x00ff0000) | (*l>>24); - - gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[0]); - out.pos.x = MINX; - out.pos.y = 0; - out.bwid = defont0.info[' '].width; + setscreen(MAXX, MAXY, 1); } void @@ -395,34 +355,6 @@ mouseclock(void) mouseupdate(1); } -vgaset(char *cmd) -{ - int set; - int reg; - int val; - - set = *cmd++; - cmd++; - reg = strtoul(cmd, &cmd, 0); - cmd++; - val = strtoul(cmd, &cmd, 0); - switch(set){ - case 'a': - arout(reg, val); - break; - case 'g': - grout(reg, val); - break; - case 'c': - crout(reg, val); - break; - case 's': - srout(reg, val); - break; - } -} - - /* * a fatter than usual cursor for the safari */ diff --git a/pc/vga.h b/pc/vga.h index 87f559fc83e911667bead4082dcf68e7ccfec1ea..3d1e5e288e69273807fe8e791bd1a15c0b503c36 100644 --- a/pc/vga.h +++ b/pc/vga.h @@ -17,8 +17,6 @@ enum ARR= 0x3C1, /* attribute registers (reading) */ }; -extern void genout(int, int); -extern void srout(int, int); -extern void grout(int, int); -extern void arout(int, int); -extern void crout(int, int); +extern void setscreen(int, int, int); + +extern struct GBitmap gscreen; diff --git a/port/devcons.c b/port/devcons.c index 6f1575f3ea86ef77e84ac92c4dc68372cf3c6a75..b6f82bf4f5e9bbb2b007249635f2b4c1613a7c09 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -607,7 +607,7 @@ consread(Chan *c, void *buf, long n, ulong offset) error(Ebadarg); chal = u->p->pgrp->crypt->chal; chal[0] = RXschal; - for(i=1; i<8; i++) + for(i=1; irequest.uname, u->p->user, NAMELEN); chal[0] = FScchal; for(i = 1; i < AUTHLEN; i++) - chal[i++] = nrand(256); + chal[i] = nrand(256); memmove(r->request.chal, chal, AUTHLEN); strncpy(r->request.chal+AUTHLEN, serv, NAMELEN); diff --git a/port/devwren.c b/port/devwren.c index 8e65ef50940a544e82285f6cf68e535e8ce8b696..e59a08c0acd2123dec23d9c886bbe5528e951577 100644 --- a/port/devwren.c +++ b/port/devwren.c @@ -191,6 +191,7 @@ wrenwrite(Chan *c, char *a, long n, ulong offset) if(n) return n; error("end of device"); + return 0; /* not reached */ } static long diff --git a/port/proc.c b/port/proc.c index 22bc3032c9bb9c20a797f2404b69627ba2c0e8f7..7b82a7d3cc2cebfc09c7ffea95a4984bb1bd10ce 100644 --- a/port/proc.c +++ b/port/proc.c @@ -106,9 +106,7 @@ sched(void) } gotolabel(&m->sched); } - spllo(); p = runproc(); - splhi(); mapstack(p); gotolabel(&p->sched); } @@ -147,7 +145,7 @@ ready(Proc *p) } /* - * Always called spllo + * Always called splhi */ Proc* runproc(void) @@ -157,6 +155,7 @@ runproc(void) int i; loop: + spllo(); while(runhiq.head==0 && runloq.head==0) for(i=0; i<10; i++) /* keep out of shared memory for a while */ ; @@ -170,7 +169,6 @@ loop: p = rq->head; if(p==0 || p->mach){ /* p->mach==0 only when process state is saved */ unlock(&runhiq); - spllo(); goto loop; } if(p->rnext == 0) @@ -181,7 +179,6 @@ loop: print("runproc %s %d %s\n", p->text, p->pid, statename[p->state]); unlock(&runhiq); p->state = Scheding; - spllo(); return p; } diff --git a/port/stream.c b/port/stream.c index ca3b97fb4bf9e30d8f4ba14ed8514730c4091e91..ac7825066aad1202a8a13087c3b90cd4fd52a75a 100644 --- a/port/stream.c +++ b/port/stream.c @@ -171,14 +171,6 @@ newblock(Bclass *bcp) /* * allocate a block */ -static int -isblock(void *arg) -{ - Bclass *bcp; - - bcp = (Bclass *)arg; - return bcp->first!=0; -} Block * allocb(ulong size) { @@ -217,10 +209,6 @@ allocb(ulong size) bp->next = 0; bp->list = 0; bp->type = M_DATA; - bp->flags &= S_CLASS; - if(bp->lim-bp->rptrlim, bp->rptr, - size, bp->flags, bcp-bclass); return bp; } @@ -237,11 +225,12 @@ freeb(Block *bp) int x; ulong pc; +#ifdef asdf pc = getcallerpc(((uchar*)&bp) - sizeof(bp)); if((bp->flags&S_CLASS) >= Nclass) /* Check for double free */ panic("freeb class last(%lux) this(%lux)", bp->pc, pc); bp->pc = pc; - +#endif asdf for(; bp; bp = nbp){ bcp = &bclass[bp->flags & S_CLASS]; bp->flags = bp->flags|S_CLASS; /* Check for double free */ diff --git a/port/sysproc.c b/port/sysproc.c index b0783e4fbb714e6c0c14a14af46880a6340eb790..3c6ba5098f1972727ddf486eff46aa2f03b73dcb 100644 --- a/port/sysproc.c +++ b/port/sysproc.c @@ -571,7 +571,7 @@ syserrstr(ulong *arg) } long -sysforkpgrp(ulong *arg) +sys__forkpgrp__(ulong *arg) { int mask; Pgrp *pg; diff --git a/port/systab.h b/port/systab.h index d1d5fc110c313dd775c867f54fc2c99b545246f5..98c2a0674469f33b44edc185ae962261636b4dcb 100644 --- a/port/systab.h +++ b/port/systab.h @@ -13,7 +13,7 @@ Syscall sysalarm; Syscall sysexec; Syscall sysexits; Syscall sys__fork__; -Syscall sysforkpgrp; +Syscall sys__forkpgrp__; Syscall sysfstat; Syscall syssegbrk; Syscall sysmount; @@ -52,7 +52,7 @@ Syscall *systab[]={ [EXEC] sysexec, [EXITS] sysexits, [__FORK__] sys__fork__, - [FORKPGRP] sysforkpgrp, + [__FORKPGRP__] sys__forkpgrp__, [FSTAT] sysfstat, [SEGBRK] syssegbrk, [MOUNT] sysmount, @@ -92,7 +92,7 @@ char *sysctab[]={ [EXEC] "Exec", [EXITS] "Exits", [__FORK__] "__fork_", - [FORKPGRP] "Forkpgrp", + [__FORKPGRP__] "__forkpgrp_", [FSTAT] "Fstat", [SEGBRK] "Segbrk", [MOUNT] "Mount",