From 928a3b2052ad184b886093d73f140683d4c62a61 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 7 Jan 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-01-07 --- ip/ipifc.c | 12 +++++++++--- pc/kbd.c | 10 +++++++--- port/devproc.c | 2 +- port/portdat.h | 2 ++ port/qlock.c | 2 ++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ip/ipifc.c b/ip/ipifc.c index 521dca26e49cba2eb759432217d37ef87cd9d8f0..21d4c830d8392d703029743847def44efa564496 100644 --- a/ip/ipifc.c +++ b/ip/ipifc.c @@ -189,7 +189,10 @@ ipifcunbind(Ipifc *ifc) av[2] = mask; av[3] = 0; while(ifc->lifc){ - sprint(ip, "%I", ifc->lifc->local); + if(ipcmp(ifc->lifc->mask, IPallbits) == 0) + sprint(ip, "%I", ifc->lifc->remote); + else + sprint(ip, "%I", ifc->lifc->local); sprint(mask, "%M", ifc->lifc->mask); ipifcrem(ifc, av, 3, 0); } @@ -595,8 +598,11 @@ ipifcconnect(Conv* c, char **argv, int argc) } wlock(ifc); while(ifc->lifc){ - sprint(ip, "%I", ifc->lifc->local); - sprint(mask, "%I", ifc->lifc->mask); + if(ipcmp(ifc->lifc->mask, IPallbits) == 0) + sprint(ip, "%I", ifc->lifc->remote); + else + sprint(ip, "%I", ifc->lifc->local); + sprint(mask, "%M", ifc->lifc->mask); ipifcrem(ifc, av, 3, 0); } wunlock(ifc); diff --git a/pc/kbd.c b/pc/kbd.c index 90d899e791f3a208ce11c5a37ba383972cd80509..fe96fc3455a20195f20546940288de3c8e0968b6 100644 --- a/pc/kbd.c +++ b/pc/kbd.c @@ -49,6 +49,10 @@ enum { Scroll= KF|21, }; +/* + * The codes at 0x79 and 0x81 are produed by the PFU Happy Hacking keyboard. + * A 'standard' keyboard doesn't produce anything above 0x58. + */ Rune kbtab[] = { [0x00] No, 0x1b, '1', '2', '3', '4', '5', '6', @@ -66,7 +70,7 @@ Rune kbtab[] = [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, -[0x78] No, No, No, No, No, No, No, No, +[0x78] No, View, No, Up, No, No, No, No, }; Rune kbtabshift[] = @@ -86,7 +90,7 @@ Rune kbtabshift[] = [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, -[0x78] No, No, No, No, No, No, No, No, +[0x78] No, Up, No, Up, No, No, No, No, }; Rune kbtabesc1[] = @@ -106,7 +110,7 @@ Rune kbtabesc1[] = [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, -[0x78] No, No, No, No, No, No, No, No, +[0x78] No, Up, No, No, No, No, No, No, }; enum diff --git a/port/devproc.c b/port/devproc.c index 9aaa6876fe0a2806ba29c0df68a829eabd63730e..df75beadd8c3fda54175e062061da61f8e784dda 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -33,7 +33,7 @@ Dirtab procdir[] = "ctl", {Qctl}, 0, 0000, "fd", {Qfd}, 0, 0000, "fpregs", {Qfpregs}, sizeof(FPsave), 0000, - "kregs", {Qkregs}, sizeof(Ureg), 0400, + "kregs", {Qkregs}, sizeof(Ureg), 0440, "mem", {Qmem}, 0, 0000, "note", {Qnote}, 0, 0000, "noteid", {Qnoteid}, 0, 0666, diff --git a/port/portdat.h b/port/portdat.h index 836cf0aaee70f0e08cb8eb5ccad5af86847e9993..5d05bbf4f17151193340208be1cf6dff32fd2d65 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -70,6 +70,8 @@ struct RWlock Lock use; Proc *head; /* list of waiting processes */ Proc *tail; + ulong wpc; /* pc of writer */ + Proc *wproc; /* writing proc */ int readers; /* number of readers */ int writer; /* number of writers */ }; diff --git a/port/qlock.c b/port/qlock.c index 02685246c219ed4d410b6d8616c774c29c955d28..71418ed1144510304600d72fa2968f7771ff29b2 100644 --- a/port/qlock.c +++ b/port/qlock.c @@ -137,6 +137,8 @@ wlock(RWlock *q) rwstats.wlock++; if(q->readers == 0 && q->writer == 0){ /* noone waiting, go for it */ + q->wpc = getcallerpc(&q); + q->wproc = up; q->writer = 1; unlock(&q->use); return;