Re: [9fans] FP register usage in Plan9 assembler

2016-02-03 Thread erik quanstrom
> WRT to drawbacks in the loader for writing assembly, one of the
> biggest problems is merciless optimization that cannot be disabled on
> a per translation-unit basis (we're using a loader, remember?) As an
> example, it's damned near impossible to perform PC-relative branching
> in the vector table. Instead you end up having to the slower (and
> sillier) load method that exists today.

profiling can be disabled on a per function basis, so it would be
a small amount of effort confined to the linker to add a per-function
optimization disable. it would not require a change to the asm grammar,
as another bit in the profile-disable field could be used.

can you explain exactly what optimization that is causing trouble, and
do you have timing information on both methods?

> opcodes into the instruction stream. The exynos port relied on it
> heavily since the Cortex-A15 required a bit more special handling than
> the simpler cores in the omap, pi2, and teg2 ports. As you mentioned,

the typical case of adding an opcode is easy.  /n/atom/patch/applied2013/6l8laes
adds 4 opcodes with 7 lines in a table (with a comment and a blank line).
i see the arm refresh patch adds 12 to the analogous file in 5l.

but it also aliases R14 to LC and bubbles that change through (etc), which
may explain the line count.

> 5[al], libmach, even acid were updated. You really can't touch one

i was confused at first by this claim, since acid has not architecture-
dependent code.  but you mean /sys/lib/acid/arm, an acid script.
none of those changes were required by additional instructions.

thanks for the patch, btw!  i have made use of a number of parts of it.

- erik



Re: [9fans] rc exec error behaviour

2016-01-31 Thread erik quanstrom
On Sun Jan 31 16:56:19 PST 2016, henesy@gmail.com wrote:

> Will this project (rc-go?) be hosted at a particular bitbucket/hg 
> repository for pull requests, etc?
> 
> On 01/31/2016 12:58 AM, Skip Tavakkolian wrote:
> > Sign me up for testing.
> >
> > On Sat, Jan 30, 2016, 5:16 PM Prof Brucee  > > wrote:
> >
> > Any objections to me rewriting rc in go without all known bugs?

i don't believe the offer was made with a straight face.

- erik



Re: [9fans] Install: root file system

2016-01-11 Thread erik quanstrom
> If I'm not mistaken, the man page about kfs is misleading. It says that
> indeed what is not fossil is treated as "kfs", but that "kfs" handles 
> cd9660 or dos too.
> 
> If I understand correctly, this is not true. This is 9660srv or dossrv
> or bzfl programs that are copied as "kfs" in the special installation
> kernel root according to the type of the root filesystem to read.

yes, this is correct.  these programs masquerade as "kfs" to make the boot
process happy.

> Note to others: I have only a PS2 keyboard/mouse combo, and other
> serials are all USB. Disabling via plan9.ini the USB, even if attached
> as USB devices, the mouse and keyboard appear (I guess by some BIOS
> emulation). If USB is on, I have no mouse and no keyboard, or only one
> of the twoi: the one connected to the PS2 combo.

on many motherboards, ps/2 keyboard and mouse are emulated by bios.
when usb is turned on, then the the bootloader or os (perhaps via bios calls)
needs to deal with usb.

i think that the distribution usb is not working for some ehci chipsets, 
especially
those that need explicit bios handoff, and those with multiple ehci controllers.

- erik



Re: [9fans] a question on csquery

2016-01-09 Thread erik quanstrom
> > tcp!io.local!1
> /net/tcp/clone 192.168.0.5!1
> /net/tcp/clone 2402:6b00:22cd:bf80::5!1
> >
> io% 
> 
> is there any reason that csquery should not show both IPs
> when address is sysname on that csquery command is executed?

perhaps a dns failure?  i am not seeing this

for this entry
ip=10.1.1.19 ip=2402:6b00:22cd:bf80::6 sys=dual dom=dual.quanstro.net
i get

> tcp!dual!1
/net/tcp/clone 10.1.1.19!1
/net/tcp/clone 2402:6b00:22cd:bf80::6!1
> tcp!dual.quanstro.net!1
/net/tcp/clone 10.1.1.19!1
/net/tcp/clone 2402:6b00:22cd:bf80::6!1

- erik



Re: [9fans] a question on csquery

2016-01-09 Thread erik quanstrom
On Sat Jan  9 15:46:03 PST 2016, aris...@ar.aichi-u.ac.jp wrote:
> hello erik,
> 
> did you try ndb/csquery on the machine named dual?

there is no machine named "dual".  it was just a set of ndb entries.
i tried the same experiment with a machine i have, and got the same
result.

- erik



Re: [9fans] subtracting pointers on amd64 6c

2016-01-06 Thread erik quanstrom
On Tue Jan  5 23:02:59 PST 2016, cinap_len...@felloff.net wrote:
> it appears that %t and %z are already used by a bunch of programs,
> including the kernel:
> 
> term% grep -n 'fmtinstall\(''[zt]''' */*.c */*/*.c */*/*/*.c
> cmd/trace.c:137:  fmtinstall('t', timeconv);
> 9/port/edf.c:122: fmtinstall('t', timeconv);
> cmd/db/output.c:159:  fmtinstall('t', tconv);
> cmd/vac/unvac.c:45:   fmtinstall('t', mtimefmt);
> cmd/venti/srv/fixarenas.c:1897:   fmtinstall('z', zfmt);
> cmd/venti/srv/fixarenas.c:1898:   fmtinstall('t', tfmt);
> 

yes, i changed fixarena's 'z' to 'Z'.  when necessary, i plan on changing
't' to 'T' or similar hopefully well-chosen non-conflicting character.

- erik



Re: [9fans] subtracting pointers on amd64 6c

2016-01-05 Thread erik quanstrom
> since 6c is more commonly used now, and there's more interest or need,
> it's probably best just to introduce the difference type and change
> the result type.  it's the same thing with usize.  i'll see if i can
> add some code to check for mismatches automatically.
> 
> there are usable ANSI formats for the difference and sizeof types.

i'm using usize, and its print modifier 'z' in 9atom. 
i haven't added 't' for ptrdiff, since it doesn't exist in the compilers.

- erik



Re: [9fans] subtracting pointers on amd64 6c

2016-01-05 Thread erik quanstrom
On Tue Jan  5 11:49:06 PST 2016, charles.fors...@gmail.com wrote:

> On 5 January 2016 at 19:01, Devon H. O'Dell  wrote:
> 
> > so given any of the examples in this thread, if you typedef'ed
> > ptrdiff_t to long, then the compiler technically isn't actually doing
> > anything wrong. whether it is doing something useful is a different
> > question.
> >
> 
> Well, although I knew that was true, I didn't want to push the point because
> in practice, people have a right to expect certain reasonable behaviour,
> and it's quite reasonable to expect that p+(q-p) yields q if they both point
> into the same array that the system agreed to allocate somehow.
> It make sense to use 64 bits for the difference, and indeed the code
> block that adds the current cast has an if(1 && ...) suggesting an if(0 &&

yes!  this.  one thing i love about the plan 9 compilers is that my reasonable
expectations are not violated by some happy optimizer, or decision.

this gets us back to the op's pov

> i get that probably nobody cares about c standards here, but it might
> be useful to mention what c99 and c11 say about this issue, since the

which i think is wrong.  there is some current silliness with compilers that
conflates allowed with required and undefined with can be deleted.  i
see plan 9's decisions as rejecting this way of thinking.  however, this is
in no way anti-standard.

- erik



Re: [9fans] subtracting pointers on amd64 6c

2016-01-05 Thread erik quanstrom
> ...and arguing with it, based on assuming charles is disagreeing with
> me about reasonable behavior. he isn't. apparently, you didn't take
> the time to read what i had written in the first place. or at least
> not past the first sentence.
> 
> this is really annoying to me because it tends to be a frequent thing
> you do when replying to me on this list: disagreeing with me based on
> something that seems like either assuming i don't have any basis for
> understanding what i'm talking about, or not reading what i've written
> and assuming others are disagreeing with me. the reason this is
> annoying is because i have to re-read what i've written, carefully, to
> make sure i don't have to retract anything i've said.

for the record, i did not intend to disagree with your statement.

i did want to make it clear that i, and several people i've worked with
on plan 9 have made a concerted effort to be as compliant with the
standard as reasonable; i was making a related by separate point.  etc.

sorry if you took it this way.  sorry for using your statement as a foil.
please accept my apology.

- erik



Re: [9fans] subtracting pointers on amd64 6c

2016-01-05 Thread erik quanstrom
On Tue Jan  5 14:34:52 PST 2016, cinap_len...@felloff.net wrote:
> > there are usable ANSI formats for the difference and sizeof types.
> 
> so one would write %td instead of %ld for ptrdiff type? that seems
> easy.

yup.

> i'm not so sure how usize/ssize would work. %zud and %zd? or would
> the z flag imply unsigned? would the return type of sizeof() also
> become usize?

yes.  (but ssize doesn't exist yet.)

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-04 Thread erik quanstrom
> erik quanstrom <quans...@quanstro.net> once said:
> > unfortunately, the simlification removes the code that solves an important
> > use case.  it's important to be able to specify the protocol or network 
> > stack,
> > such as in
> > 
> > ip/ping /net.alt/icmp!someaddress
> 
> Most commands use an -x option and setnetmtpt(2) to arrange
> an alternate network root. Is there any reason not to do the
> same for ip/ping?

"most" commands do not.  for example,

cpu -h /net.alt/tcp!ladd.quanstro.net

sorry i haven't the time to do statistics, but i'm pretty sure that
only programs lib ndb/dnsquery that do not take dial strings are
exceptions here.  and they are self-inconsistent.  some take -x
(bare option) and some take -x /mnt/pt.

that notwithstanding, it seems logical to allow icmpv6!host
as a proper dial string for ping, and this requires the same code.

i think it makes sense to do it as ping and traceroute have done.

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-04 Thread erik quanstrom
> "most" commands do not.  for example,
> 
>   cpu -h /net.alt/tcp!ladd.quanstro.net
> 

it turns out i had a bit of extra time since it's too icy to leave the
house.  :-(

anyway, here are all the programs that take -x mntpt, as determined by
the man pages.

vnc(1) vncs
httpfile(4)
6in4(8)
ndb(8) ndb/cs, csquery, dns, dnstcp, dnsquery, dnsdebug
ppp(8) ip/ppp, pppoe, pptp, pptpd
secstore(8) secstored
syslogd(8)
udpecho(8)

none of these programs take a dial string.

however, some of them could (see nettest(8), 
http://sources.9atom.org/magic/man2html/8/nettest)
such as syslogd, udpecho, secstored and vncs.

httpfile, well, rob has already made the point.

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-03 Thread erik quanstrom
unfortunately, the simlification removes the code that solves an important
use case.  it's important to be able to specify the protocol or network stack,
such as in

ip/ping /net.alt/icmp!someaddress

the diff is here and i'll be working on a patch.

the basic idea is to translate only the dns names to ip addresses, and then
reassemble the string.  this way we can keep any decorations such as 
/net.alt/icmpv6!...

- erik

---

lilly; diff -c `{yesterday -n20 /sys/src/cmd/ip/ping.c} /sys/src/cmd/ip/ping.c
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:28,34 - /sys/src/cmd/ip/ping.c:28,34
  
  typedef struct {
int version;
-   char*net;
+   char*protoname;
int echocmd;
int echoreply;
unsigned iphdrsz;
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:393,398 - /sys/src/cmd/ip/ping.c:393,401
  
  /* from /sys/src/libc/9sys/dial.c */
  
+ static char defnet[] = "/net";
+ static char defproto[] = "icmp";
+ 
  enum
  {
Maxstring   = 128,
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:406,416 - /sys/src/cmd/ip/ping.c:409,414
char*netdir;
char*proto;
char*rem;
- 
-   /* other args */
-   char*local;
-   char*dir;
-   int *cfdp;
  };
  
  /*
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:417,423 - /sys/src/cmd/ip/ping.c:415,421
   *  parse a dial string
   */
  static void
- _dial_string_parse(char *str, DS *ds)
+ dsparse(char *str, char *defproto, DS *ds)
  {
char *p, *p2;
  
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:425,437 - /sys/src/cmd/ip/ping.c:423,435
ds->buf[Maxstring-1] = 0;
  
p = strchr(ds->buf, '!');
-   if(p == 0) {
-   ds->netdir = 0;
-   ds->proto = "net";
+   if(p == nil) {
+   ds->netdir = nil;
+   ds->proto = defproto;
ds->rem = ds->buf;
} else {
if(*ds->buf != '/' && *ds->buf != '#'){
-   ds->netdir = 0;
+   ds->netdir = nil;
ds->proto = ds->buf;
} else {
for(p2 = p; *p2 != '/'; p2--)
/n/dump/2015/1214/sys/src/cmd/ip/ping.c:443,506 - /sys/src/cmd/ip/ping.c:441,560
*p = 0;
ds->rem = p + 1;
}
+   if(ds->netdir == nil || ds->netdir[0] == 0)
+   ds->netdir = defnet;
  }
  
  /* end excerpt from /sys/src/libc/9sys/dial.c */
  
- /* side effect: sets network & target */
- static int
- isv4name(char *name)
+ char*
+ dstopretty(DS *ds, char *name)
  {
-   int r = 1;
-   char *root, *ip, *pr;
+   char *port;
+ 
+   port = strchr(ds->rem, '!');
+   if(port == nil)
+   port = "";
+ 
+   if(ds->netdir == defnet)
+   return smprint("%s!%s%s", ds->proto, name, port);
+   else
+   return smprint("%s/%s!%s%s", ds->netdir, ds->proto, name, port);
+ }
+ 
+ char*
+ nametoip(char *name0, int *ipver, char **target, char **pretty)
+ {
+   int n,fd;
+   char buf[128], ip6[128], ip4[128], *cs, *s, *p, *name, *addr, *ip;
DS ds;
  
-   _dial_string_parse(name, );
+   *target = nil;
+   dsparse(name0, defproto, );
  
-   /* cope with leading /net.alt/icmp! and the like */
-   root = nil;
-   if (ds.netdir != nil) {
-   pr = strrchr(ds.netdir, '/');
-   if (pr == nil)
-   pr = ds.netdir;
-   else {
-   *pr++ = '\0';
-   root = ds.netdir;
-   network = strdup(root);
+   /* do not override protocol specified */
+   if(*ipver == -1 && ds.proto != defproto){
+   if(strcmp(ds.proto, v4pr.protoname) == 0)
+   *ipver = 4;
+   else if (strcmp(ds.proto, v6pr.protoname) == 0)
+   *ipver = 6;
+   }
+ 
+   name = ds.rem;
+   ip6[0] = 0;
+   ip4[0] = 0;
+   if(isdottedquad(name)){
+   snprint(ip4, sizeof ip4, "%s", name);
+   goto match;
+   }
+   if(isv6lit(name)){
+   snprint(ip6, sizeof ip6, "%s", name);
+   goto match;
+   }
+ 
+ 
+   cs = smprint("%s/cs", ds.netdir);
+   fd = open(cs, ORDWR);
+   if(fd < 0)
+   sysfatal("cannot open %s: %r", cs);
+   free(cs);
+ 
+   addr = smprint("tcp!%s!1", name);
+   if(write(fd, addr, strlen(addr)) != strlen(addr)){
+   close(fd);
+   sysfatal("cannot write %s to %s: %r", addr, cs);
+   }
+   free(addr);
+   seek(fd, 0, 0);
+   while((n = read(fd, buf, sizeof(buf)-1)) > 0){
+   buf[n] = 0;
+   ip = strchr(buf,' ');
+   ip++;
+   p = strchr(ip,'!');
+   *p = 0;
+   if(isdottedquad(ip)){
+   if(ip4[0] == 0)
+   snprint(ip4, sizeof ip4, "%s", ip);
+   

Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-03 Thread erik quanstrom
> i spent some time thinking about this problem.
> 
> the purpose of -6 is to force icmpv6.  (one can use a v4 address
> with icmpv6, that works due to ipv4 embedding.)  this is not the same as
> controlling name lookup.  since there are better more flexible tools
> for doing that by hand.  the result can be fead to ip/ping.
> 
> it's kind of an ugly problem.

and it turns out that the patch as given breaks things like
ip/ping /net.alt/icmpv6!hostname

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-03 Thread erik quanstrom
On Sun Jan  3 13:42:21 PST 2016, 23h...@gmail.com wrote:
> your ipv4 "embedding" doesn't need to be part of the ping tool. it's
> not commonly used anyway.

i think the attribution here is false.  i read the man page for that 
information.

in any event, ping as patched is wrong.  addresses like icmpv6!address must
be accepted.  this may make the -4 flag silly in it's current form.

> allowing the ping tool to do dns lookups on the other hand are a
> common convenience.

but as such, one loses precision.  for example if i use a name, i can't
easily force the name lookup to find the ip i'm thinking of.

> perhaps i misunderstand. i'm not against adding zeros at the front.

see /sys/src/libip/ipaux.c^/uchar v4prefix

- erik



Re: [9fans] mDNS

2016-01-02 Thread erik quanstrom
On Sat Jan  2 01:31:36 PST 2016, st...@quintile.net wrote:

> 
> , 
> 
> I am confused, are you talking of replacing the interface to dns(1)?
> 
> I had no real plan, maybe to just make mDNS accumulate broadcast and
> multicast mDNS messages into a virtual file in /lib/ndb format.
> 
> more importantly I really need a publish system, which would be just based off
> /lib/ndb/local, just a static spec.
> 
> my target is porting shairport, and maybe Dnla at a later date.

that wasn't what i had in mind at all.  dns(1) does a whole bunch of things,
including.
- answering queries via /net/dns
- answering queries via udp, and tcp,
- maintence of database ndb files
- resursive resolution via udp or tcp
- caching of results

currently these functions are all in ndb/dns, and there isn't even threading.
that seems like a hard structure to maintain.

- erik



Re: [9fans] Pi updates

2016-01-02 Thread erik quanstrom
On Fri Jan  1 21:15:03 PST 2016, blstu...@bellsouth.net wrote:
> On Fri, 1/1/16, erik quanstrom <quans...@quanstro.net> wrote:
> > i'm looking @ the gpio interface, and i wonder what the recommended
> > technique for sampling a pin might be from a shell script?
> 
> I haven't really used it in shell scripts, but if I were going to do
> so, I'd probably write up a little utility to take a hex string and
> a bit number and do the 'and' on it.  Then feed that with the
> result of dd to get exactly one sample from devgpio.  On the
> other hand, if one of the usual suspects (e.g. hoc, bc, dc, awk)
> have some bit-wise operators I'm forgetting, use that.

the (atom) aux/number program does do that; none of the others do
for fairly fundamental reasons: as awk and hoc are really floating
point, and bc and dc are mp, and the mp library has no bit operations.
i believe acid can as well, but only with great pain.

perhaps just using base 2 for the encoding would make life a lot easer. so 

00010

for bit 27 active.  with this format there's no limit to the number of bits one
could represent.

also, mightn't there be some value in presenting the full state of the device
to allow it to be restored directly from the status file, so perhaps 3 lines
could be added, one each for up/down/float settings?

00010
00010
0
0

might represent bit 27 set, with the pull up resistor active.  (perhaps
float ≡ (pullup | pulldown) == 0? and could be elimitated.

i'm sure a little tinkering with this idea can make it a lot more useful.

- erik



Re: [9fans] Install: root file system

2016-01-02 Thread erik quanstrom
i'm not sure what the root cause of your problem is, due to not enough data,
but it does remind me of a limitation that has been bugging me.

to boot from usb cleanly, i added a bit to the boot process that creates a 
loopback
sd device /dev/sdu0 that points to the usb disk device.  i've been booting my 
auth
server this way for some time.

it seems to me that i really screwed this up.  what i really want is a sd device
that always points to the boot drive, the one bios refers to as 0x80.
givem this, one can then put something like "bootargs=local!#S/sdB0/fs"
in plan9.ini.  this will allow the 9atom usb install image to run off any 
bootable
media (for which we have drivers).

so, i'm preparing a patch that will present the boot device as /dev/sdB0 
regardless
of what underlying disk driver or protocol is being used.  here's the output 
from
my test machine.  it's been booted over the network, but even so bios has 
assigned
a 0x80 drive, and it's been found and configured:

>>  sdB loop #S/sdF0/data
sdE ahci ahci port 0xfe00fb538000 pci 0.17.4: 64a ncq alp led clo 
pmb slum pslum ems apts alhd xonly smb elmt iss 3 ncs 31 np 4 ghc 8002 isr 
0 pi f 0-3 ver 10300
sdF ahci ahci port 0xfe00fb532000 pci 0.31.2: 64a ncq alp led clo 
pmb slum pslum ems apts alhd xonly smb elmt iss 3 ncs 31 np 6 ghc 8002 isr 
0 pi 3f 0-5 ver 10300
sdN nvme port 0xfe00fb41 pci 2.0.0 v1.0 rst 0 ctg 1 ams 0 
stride 1 to 2 fatal 0
sdO nvme port 0xfe00fb30 pci 4.0.0 v1.1 rst 0 ctg 1 ams 0 
stride 1 to 3 fatal 0

- erik



[9fans] rpi emmc

2016-01-02 Thread erik quanstrom
in diffing bls' version and sources, i see some significant differences, but
it's not clear which one is more up-to-date.

anyone?

- erik



; 9diff emmc.c
/n/sources/plan9/sys/src/9/bcm/emmc.c:178,184 - emmc.c:178,188
  static int
  datadone(void*)
  {
-   return emmc.datadone;
+   int i;
+ 
+   u32int *r = (u32int*)EMMCREGS;
+   i = r[Interrupt];
+   return i & (Datadone|Err);
  }
  
  static int
/n/sources/plan9/sys/src/9/bcm/emmc.c:310,318 - emmc.c:314,322
if((c & Respmask) == Resp48busy){
WR(Irpten, Datadone|Err);
tsleep(, datadone, 0, 3000);
-   i = emmc.datadone;
-   emmc.datadone = 0;
WR(Irpten, 0);
+   emmc.datadone = 0;
+   i = r[Interrupt];
if((i & Datadone) == 0)
print("emmcio: no Datadone after CMD%d\n", cmd);
if(i & Err)
/n/sources/plan9/sys/src/9/bcm/emmc.c:380,390 - emmc.c:384,396
[Data], buf, len);
if(dmawait(DmaChanEmmc) < 0)
error(Eio);
+   if(!write)
+   cachedinvse(buf, len);
WR(Irpten, Datadone|Err);
tsleep(, datadone, 0, 3000);
-   i = emmc.datadone;
-   emmc.datadone = 0;
WR(Irpten, 0);
+   emmc.datadone = 0;
+   i = r[Interrupt];
if((i & Datadone) == 0){
print("emmcio: %d timeout intr %ux stat %ux\n",
write, i, r[Status]);
/n/sources/plan9/sys/src/9/bcm/emmc.c:407,419 - emmc.c:413,423
  mmcinterrupt(Ureg*, void*)
  { 
u32int *r;
-   int i;
- 
r = (u32int*)EMMCREGS;
-   i = r[Interrupt];
-   r[Interrupt] = i & (Datadone|Err);
-   emmc.datadone = i;
-   wakeup();
+   if(r[Interrupt]&(Datadone|Err)){
+   WR(Irpten, 0);
+   wakeup();
+   }
  }
  
  SDio sdio = {



Re: [9fans] rpi emmc

2016-01-02 Thread erik quanstrom
On Sat Jan  2 21:23:12 PST 2016, blstu...@bellsouth.net wrote:
> On Sat, 1/2/16, David du Colombier <0in...@gmail.com> wrote:
> > > in diffing bls' version and sources, i see some significant
> > > differences, but it's not clear which one is more up-to-date.
> > 
> > Brian Stuart's version is more up-to-date.
> > 
> > Brian Stuart based his changes on the latest changes from Richard
> > Miller, available in /n/sources/contrib/miller/9/bcm.
>  
> I'm pretty sure that file is unchanged from Richard's latest version
> on contrib.

ok.  i got confused with all the versions floating around.

- erik



Re: [9fans] bonjour mDNS?

2016-01-01 Thread erik quanstrom
On Fri Jan  1 19:32:25 PST 2016, m...@boschma.cx wrote:
> 
> > On 2 Jan 2016, at 7:05 am, Steve Simon  wrote:
> > anyone done any work to implement mDNS / bonjour on plan9?
> > 
> 
> No, but I have an interest; just starting out with Plan9 :)
> 
> > my rough plan is to write a file server which generates /lib/ndb/mdns
> > which can be included into your /lib/ndb/local.
> > 
> > I fear the biggest hassle is the clash of UDP port use may mean
> > mDNS must become part of dns(1) rather than a separate file server.
> > 
> 
> Shouldn’t dns(1) only bind to unicast UDP port and thus mDNS could bind to 
> the multicast UDP port?
> 
> Are you only considering resolution or also publishing services?

it would make sense to me to make a dnsudp request file server that manages 
requests, and
fork (ha!) that task off to it.  this file server would not care if it's 
querying normal dns,
or mdns.

- erik



Re: [9fans] Rio: possibility to forbid resizing a window?

2016-01-01 Thread erik quanstrom
> Is there such possibility with rio?

yes, this is implemented by games/sudoku.  just refuse to resize.

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-01 Thread erik quanstrom
unfortunately, there is some imprecision when mixing -4 and -6 with names,
and i don't have a tidy solution.

also, the man page claims that the biggest an icmp packet could possibly be is 
8192 bytes, which
is incorrect.  icmp is fragmented like any other ip packet, so the maximum 
payload is 64k.

- erik



Re: [9fans] Pi updates

2016-01-01 Thread erik quanstrom
On Wed Dec 30 14:27:27 PST 2015, blstu...@bellsouth.net wrote:
> On Wed, 12/30/15, Skip Tavakkolian <9...@9netics.com> wrote:
> > > - Enhancements for I2C and SPI
> > 
> > is there an updated devrtc3231.c, or a conventional user space
> > fs, that uses the new i2c?
> 
> Yes, there's a devi2c userland interface ported over from Inferno.
> That's what's being used to drive the robot in the video clip.

i'm looking @ the gpio interface, and i wonder what the recommended
technique for sampling a pin might be from a shell script?

- erik



Re: [9fans] need a REAL WORKING iso

2016-01-01 Thread erik quanstrom
On Fri Jan  1 03:56:33 PST 2016, fpussa...@contactoffice.fr wrote:
> hello all
> 
> where can i get a iso file for 9front or plan9 for raspberry pi 
> 
> 
> I have the bell-labs./contrib/miller one but it is all 
> stuck/restricted.  even writting to /dev/keymap is impossible...
> neither mounting 9fs sources and so on.just unusable at all no inst dir 
> ... etc so it is just a brick
> 
> I ve allready had one about one year ago that permitted to call inst/textonly 
> to have a real plan9 station on the RPI fullfeatured and fonctionnal...

i believe you mistyped "/dev/kbmap".

this isn't a complete solution, but you can put the "fs" partition from the 
9atom install
image (http://ftp.9atom.org/other/usbinstamd64.bz2) a 400mb+ partition on your
sd card and then copy it to whatever file system
you'd like to use.  there are enough binaries in the image to build the system 
either
from the included files, or from sources.

make sure that dns is working when you try to mount sources.

- erik



Re: [9fans] bug or feature ? --- ip/ping -6

2016-01-01 Thread erik quanstrom
on reading the man page, i found a small flaw in the implementation.  according 
to
the man page, -6 forces is of icmp6, even if the address is icmp4.  i changed 
ping to
do that.as a result, i added a -4 flag which forces the ping to use icmp4.  
obviously, there is no
native 6-in-4, so this is an error.

also, i corrected an indirection of a nil pointer when a name lookup fails.

my pathetic excuse for unit testing, and a diff are below.  my version (hacks 
and all)
is attached.

- erik

ps.  the hand-implementation of csquery seems to be a result of not trusting
ndb/cs to be running.  odd.  does anyone have context on why this would be 
useful?

---

; ip/ping -6an1 bwc
sending 1 64 byte messages 1000 ms apart to icmpv6!2402:6b00:22cd:bf80::9!1
2402:6b00:22cd:bf80::7 -> 2402:6b00:22cd:bf80::9
0: 2402:6b00:22cd:bf80::9 -> 2402:6b00:22cd:bf80::7 rtt 78 µs, avg rtt 78 µs, 
ttl = 255
; ip/ping -4an1 bwc
sending 1 64 byte messages 1000 ms apart to icmp!10.1.1.9!1
10.1.1.7 -> 10.1.1.9
0: 10.1.1.9 -> 10.1.1.7 rtt 70 µs, avg rtt 70 µs, ttl = 255
; ip/ping -an1 bwc
sending 1 64 byte messages 1000 ms apart to icmp!10.1.1.9!1
10.1.1.7 -> 10.1.1.9
0: 10.1.1.9 -> 10.1.1.7 rtt 72 µs, avg rtt 72 µs, ttl = 255
; ip/ping -4an1 10.1.1.7
sending 1 64 byte messages 1000 ms apart to icmp!10.1.1.7!1
10.1.1.7 -> 10.1.1.7
0: 10.1.1.7 -> 10.1.1.7 rtt 15 µs, avg rtt 15 µs, ttl = 255
; ip/ping -6an1 10.1.1.7
sending 1 64 byte messages 1000 ms apart to icmpv6!10.1.1.7!1
2402:6b00:22cd:bf80::7 -> 10.1.1.7
0: 10.1.1.7 -> 10.1.1.7 rtt 18 µs, avg rtt 18 µs, ttl = 255
; ip/ping -4an1 2402:6b00:22cd:bf80::7
ip/ping: ip/ping: nametoip: address 2402:6b00:22cd:bf80::7 does not match proto 
4
; ip/ping -an1 missing
ip/ping: cannot write tcp!missing!1 to/net/cs: cs: can't translate address: 
dns: resource does not exist; negrcode


; diffy -c ping.c
/n/dump/2016/0101/sys/src/cmd/ip/ping.c:391,505 - ping.c:391,461
return colon;
  }
  
- /* from /sys/src/libc/9sys/dial.c */
- 
- enum
+ char*
+ nametoip(char *cs, char *name, int *ipver)
  {
-   Maxstring   = 128,
-   Maxpath = 256,
- };
+   int n,fd;
+   char buf[128], ip6[128], ip4[128], *p, *addr, *ip;
  
- typedef struct DS DS;
- struct DS {
-   /* dist string */
-   charbuf[Maxstring];
-   char*netdir;
-   char*proto;
-   char*rem;
- 
-   /* other args */
-   char*local;
-   char*dir;
-   int *cfdp;
- };
- 
- /*
-  *  parse a dial string
-  */
- static void
- _dial_string_parse(char *str, DS *ds)
- {
-   char *p, *p2;
- 
-   strncpy(ds->buf, str, Maxstring);
-   ds->buf[Maxstring-1] = 0;
- 
-   p = strchr(ds->buf, '!');
-   if(p == 0) {
-   ds->netdir = 0;
-   ds->proto = "net";
-   ds->rem = ds->buf;
-   } else {
-   if(*ds->buf != '/' && *ds->buf != '#'){
-   ds->netdir = 0;
-   ds->proto = ds->buf;
-   } else {
-   for(p2 = p; *p2 != '/'; p2--)
-   ;
-   *p2++ = 0;
-   ds->netdir = ds->buf;
-   ds->proto = p2;
-   }
-   *p = 0;
-   ds->rem = p + 1;
+   ip6[0] = 0;
+   ip4[0] = 0;
+   if(isdottedquad(name)){
+   snprint(ip4, sizeof ip4, "%s", name);
+   goto match;
}
- }
+   if(isv6lit(name)){
+   snprint(ip6, sizeof ip6, "%s", name);
+   goto match;
+   }
  
- /* end excerpt from /sys/src/libc/9sys/dial.c */
- 
- /* side effect: sets network & target */
- static int
- isv4name(char *name)
- {
-   int r = 1;
-   char *root, *ip, *pr;
-   DS ds;
- 
-   _dial_string_parse(name, );
- 
-   /* cope with leading /net.alt/icmp! and the like */
-   root = nil;
-   if (ds.netdir != nil) {
-   pr = strrchr(ds.netdir, '/');
-   if (pr == nil)
-   pr = ds.netdir;
-   else {
-   *pr++ = '\0';
-   root = ds.netdir;
-   network = strdup(root);
+   if(cs == nil)
+   cs = "/net/cs";
+   fd = open(cs, ORDWR);
+   if(fd < 0)
+   sysfatal("cannot open %s: %r", cs);
+   addr = smprint("tcp!%s!1", name);
+   if(write(fd, addr, strlen(addr)) != strlen(addr)){
+   close(fd);
+   sysfatal("cannot write %s to%s: %r", addr, cs);
+   }
+   free(addr);
+   seek(fd, 0, 0);
+   while((n = read(fd, buf, sizeof(buf)-1)) > 0){
+   buf[n] = 0;
+   ip = strchr(buf,' ');
+   ip++;
+   p = strchr(ip,'!');
+   *p = 0;
+   if(isdottedquad(ip)){
+   if(ip4[0] == 0)
+   snprint(ip4, sizeof ip4, "%s", ip);
+   

Re: [9fans] contrib/install

2015-12-20 Thread erik quanstrom
> I wonder, have you installed the contribution package? If not then this is 
> what you need, I think - it's been a few years since I did this...
> 
> 9fs sources
> /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/contrib
> 
> Once this completes you should be able to do the installs you wanted.
> FYI, i have never used OpenSSL on plan9, there is a an sslv2 compliant
> client an server thanks to cor aid and Brian Stuart.
> 
> -Steve
> 
> 
> > On 20 Dec 2015, at 19:32, Skip Tavakkolian <9...@9netics.com> wrote:
> > 
> > what is the value of the 'path' environment variable?  (i.e. echo $path)
> > 
> > 
> >> I am trying to install contributed software and after running install 
> >> contrib/install I always get:
> >> term% contrib/install fgb/opensslcontrib/install: './contrib' directory 
> >> entry not found
> >> So I create it and get:term% contrib/install: './contrib/install' does not 
> >> exist
> >> Then:contrib/install: './contrib/install' cannot exec directory
> >> Any help would be appreciated.

is contrib/* set to be executable?  as mentioned above, the contrib programs
(like patch, and apatch) call each other, so it's important that the top-level
directory be in one's path.

- erik



Re: [9fans] Writing a CD image

2015-12-02 Thread erik quanstrom
that's a new warning that I think is in error.  I don't remember the details.

- erik


On Dec 1, 2015 11:53 PM, lu...@proxima.alt.za wrote:
>
> What does the following mean? 
>
> nwa is 262298 but invis track starts blk 0 
> cdfs: nwa from drive 0 != computed nwa 262,146 
> be careful!  assuming computed nwa 
>
> Previously using a disk that came up with this error led to what 
> looked like corrupted data (I was able to ignore that, so I'm not 
> entirely sure), 
>
> Lucio. 
>
>
>


Re: [9fans] Compiling ken-cc on Linux

2015-11-27 Thread erik quanstrom
> Funny, but actually I was wondering if there is any subtle issue in the
> standards of the C language that makes it somehow hard to implement.
> For example I've met a few times weird implementations of libraries and
> frameworks dictated by broken standards: once they are in, they can never
> be removed due to backward compatibility. I thought that Charles (that also
> implemented the Limbo compiler) might have referenced these kind of issues
> in his pun.

i think the simple answer is: no.  but many folks just love complexity, and are
determined to find it.  if you give such a person one problem, they'll come back
with two problems.  i call these folks complicators.  don't be a complicator.

(i have to remind myself this from time to time.)

- erik



Re: [9fans] Compiling ken-cc on Linux

2015-11-27 Thread erik quanstrom
> memory bug in Jörg Schilling's Bourne shell (likely developed only
> on Solaris rooted) simply by compiling and starting it under
> FreeBSD.  And i have found stack read violations simply by running

given cdrtools, this is not a surprise.  
https://en.wikipedia.org/wiki/Cdrtools#Device_naming
"all the world's a vax^h^h^hscsi"

- erik



[9fans] libsec/port/hmac.c

2015-11-27 Thread erik quanstrom
hmac_x(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DigestState 
*s,
DigestState*(*x)(uchar*, ulong, uchar*, DigestState*), int xlen)
{
int i;
uchar pad[Hmacblksz+1], innerdigest[256];

if(xlen > sizeof(innerdigest))
return nil;
if(klen > Hmacblksz)
return nil;

/* first time through */
if(s == nil || s->seeded == 0){
>>  if(klen >= Hmacblksz){
print("klen too large: %lud", klen);
assert(0);

i'm pretty sure that > is ment here, not >=.  am i missing something?

- erik



Re: [9fans] Undefined Behaviour in C

2015-11-26 Thread erik quanstrom
On Thu Nov 26 03:25:34 PST 2015, brantleyco...@me.com wrote:

> Hi Bakul.  Long time since our Bay Area plan 9 hacking sessions. I've avoided 
> the valley all together for a year and a half now. Not quite long enough yet. 
> 
> I thought the same thing, using ~0 for nil, but realized two things. First, 
> that's a valid address on the PDP11 where the convention developed. It's the 
> unibus space. Second, ~0 + member offest is still in page zero. 
> 
> By the way, are there any structs more than 4K in Linux? Are there any in 
> plan 9?

since that 4k is really pagesz, on amd64 that would be 2mb.  there's no 
compelling reason on
64-bit machines to start at the bottom instead of the middle.

the answer to the question is yes, yes there are.  by Biobufs are larger than 
the original, but
they are normally 8k.

; cd /sys/src/cmd
; grep sizeof `{find .|grep acid}|sed 's/;$//g'|awk '$NF ~ /^[0-9][0-9]*$/ && 
$NF>4096'
./8l/acid6:sizeofBiobuf = 8272
./8l/acid6:sizeof_4_ = 16384
./8l/acid6:sizeof_5_ = 16384
./acid/acid6:sizeofBiobuf = 8248
./aux/vga/acid6:sizeofBiobuf = 49232
./mk/acid:sizeofBiobuf = 8248
./stats.acid:sizeofAuthRpc = 8216
./stats.acid:sizeofEvent = 8368
./6l/acid6:sizeofBiobuf = 8272
./6l/acid6:sizeof_4_ = 16384
./6l/acid6:sizeof_5_ = 16384

this is not an exhaustive list.

- erik



Re: [9fans] Undefined Behaviour in C

2015-11-26 Thread erik quanstrom
aren't there any Biobufs at the start of structures?  I only have a phone here so I can't verify.
- erik

On Nov 26, 2015 8:50 AM, Charles Forsyth  wrote:On 26 November 2015 at 16:42, Brantley Coile  wrote:I’m still kind of dubious that there are any structures where one would not catch a null pointer.I don't think there are any. In practice, ome other value lower down will be accessed first.Unless the compiler introduces its own invisible erroneous behaviour.



Re: [9fans] Undefined Behaviour in C

2015-11-25 Thread erik quanstrom
so to answer bwc's question, no.  not always.  
On Nov 25, 2015 4:59 AM, Charles Forsyth  wrote:The link to the lwn.net article explains that using mmap the naughty application mapped a page to virtual 0, which was then available in kernel mode in that process, and all they'd need to do is put their own "socket" structure at 0 + offsetof(struct tun_struct, sk).On 25 November 2015 at 10:43, Brantley Coile  wrote:Just curious, will Linux not panic when the kernel deterrences a nil pointer?Sent from my iPadOn Nov 25, 2015, at 5:27 AM, Alexandru Gheorghe  wrote:
  

  
  
On 11/23/2015 01:20 PM, Vasudev Kamath wrote:

  Ramakrishnan Muthukrishnan  writes:


  
Had been reading the SOSP paper:


and this blog post that proposes a simpler C:


  
  I started reading the paper and its interesting. I didn't knew till date
how optimizations really worked and why they were considered harmful.


They can be quite harmful, the dereference example of tun->sk
is a popular example that dates from 2009 regarding the Linux Kernel
being exploited by Spender (Brad Spengler):
https://lwn.net/Articles/342330/
"a NULL pointer was
  dereferenced before being checked, the check was optimized out by
  the
  compiler, and the code used the NULL pointer in a way which
  allowed the
  attacker to take over the system"

Funny because Spengler did try many times to introduce better
security in the Linux Kernel (see his set of patches in
collaboration with the PaX Team: GRSEC) but was refused many times
by the community and Linus in particular due to performance
penalties (among other "opinions"). Which again opens the question
where exactly is the undefined behavior problem? Resides on the
programmer or on the compiler (and its programmers)? And how do you
deal with the performance side? Because clearly, if you introduce
more security then you will start having penalties on it; I guess
the question is how much are you willing to let go in preference of
more security and stable systems?

It's a very interesting paper, I only read 7 pages but will soon
finish it and go ahead with the references (probably it links the
example I wrote in the beginning of this e-mail).

Thanks for sharing.

-- 
; Alexandru Gheorghe
;
;   aGlobal
; 
  





Re: [9fans] blank line in /lib/ndb/local

2015-11-09 Thread erik quanstrom
On Mon Nov  9 04:32:24 PST 2015, aris...@ar.aichi-u.ac.jp wrote:
> Hello,
> 
> manual ndb(6) says: "Each line starting without white space starts a new 
> tuple. Lines starting with # are comments.”
> 
> assume we have an entry such as:
> dom=foo
>   # a blank line follows
> 
>   auth=bar
> 
> if the blank line contains a white space, then
>   ndb/query dom foo auth
> will produce
>   dom=foo auth=bar
> on the other hand, if the blank line is empty, then the command will produce
>   dom=foo
> 
> Is this a bug or a specification?
> I want to believe this is a bug.

i can't replicate this:

; cat a.db
dom=fu
# comment

auth=bar
; ndb/query -f a.db dom fu
dom=fu 


- erik



Re: [9fans] blank line in /lib/ndb/local

2015-11-09 Thread erik quanstrom
On Mon Nov  9 20:03:06 PST 2015, aris...@ar.aichi-u.ac.jp wrote:
> hello,
> 
> your blank line doesn’t have a white space.
> 
> > 2015/11/10 12:02、erik quanstrom <quans...@quanstro.net> のメール:
> > 
> > On Mon Nov  9 04:32:24 PST 2015, aris...@ar.aichi-u.ac.jp wrote:
> >> Hello,
> >> 
> >> manual ndb(6) says: "Each line starting without white space starts a new 
> >> tuple. Lines starting with # are comments.”

exactly.  that's what the manual says.  an otherwise blank like with only 
whitespace would
fit the definition of a line starting with whitespace, therefore not starting a 
new tuple.

- erik



Re: [9fans] blank line in /lib/ndb/local

2015-11-09 Thread erik quanstrom
On Mon Nov  9 21:10:14 PST 2015, aris...@ar.aichi-u.ac.jp wrote:
> yes, your right.
> the manual says what the code does.
> however I don’t think it is a good idea to make sense in white spaces within 
> blank line.
> probably the code does not suppose blank lines within ndb entry.
> 

i don't think it's a good idea, either.  however, changing it is not of much 
value.

fwiw, there is a program ndb/vrfy that comes with a yacc grammar.  i wote it
because with 30 people fiddling with ndb files, there were occasional mistakes
and it was nice to have a way to automaticly email folks with a list of 
potential
ndb errors.

if this program doesn't already whine about this iffy construct, i'd welcome
a patch!

- erik



Re: [9fans] 9vx on OSX

2015-11-07 Thread erik quanstrom
On Sat Nov  7 02:53:10 PST 2015, aris...@ar.aichi-u.ac.jp wrote:
> Hello,
> 
> thanks all.
> 
> > mine is weird: when I type “abc”, I have “aabbcc”.
> 
> I replaced 9vx (not only 9vx binary but whole set of 9vx package) on Yosemite 
> by the one that is working on Mountain Lion.
> however the problem is not fixed.
> 
> probably that is only to me.
> some differences in environment makes problem.

sounds like a timing issue.  i haven't looked at the fake keyboard
for 9vx, but that's where i'd look first.

- erik



Re: [9fans] Off topic: Linus rants against GCC-isms

2015-11-04 Thread erik quanstrom
On Wed Nov  4 19:43:55 PST 2015, arn...@skeeve.com wrote:
> Hi All.
> 
> Although this group in general doesn't like Linux, I think most of you
> might enjoy his rant:
> 
> http://gizmodo.com/you-dont-need-to-understand-programming-to-appreciate-t-1739927472

and yet i look at the linux kernel my rant mirrors linus'.  it is probablly
bad code, and self-righeous indignation about other people code all the
way to ken's door.  and if we were honest enough and iconoclastic enough,
we might find something to complain about there, too.

let's face it.  programming is hard, and we all suck at it.

by the way, this is about gcc insofar as the mistake is feeling the need to
use (and provide a wrapper for, in case of older compiler) some shiny new
feature of gcc.

a further by the way, the link got word wrapped and is 

http://gizmodo.com/you-dont-need-to-understand-programming-to-appreciate-t-1739927472

- erik



Re: [9fans] cpu from one CPU server to another CPU server

2015-11-04 Thread erik quanstrom
On Wed Nov  4 11:15:04 PST 2015, burt...@inbox.com wrote:
> Hi,
> 
> When I log into my first CPU server using drawterm, I try to cpu to my second 
> CPU server and the first one in drawterm just hangs after entering the 
> username/password.  After I run the cpu command, all subsequent windows in 
> drawterm that I create with rio are blank like the whole system is hung.  I 
> then have to kill my drawterm and reconnect after which everything is ok.
> 
> If I boot up a terminal with a local fossil I can successfully cpu into the 
> other CPU server.
> 
> Any ideas on what is going on?

this is likely an authentication issue.  changing to the local fossil 
is likely skipping authentication.  you might try auth/debug to see what's 
going on.

also, i have this little wiggle in my lib/profile if the problem is not looking 
up
the auth server, but talking to factotum:

if(! test -e /mnt/term/mnt/wsys){
# cpu call from drawterm
prompt=('; ' '')
x=`{wc -l /mnt/term/mnt/factotum/ctl>[2=] || echo 0}
->  if(test $x(1) -gt 1 && ! ~ $sysname mikro µ)
->  bind /mnt/term/mnt/factotum /mnt/factotum
if not
auth/factotum
termish terminal drawterm
}


- erik



Re: [9fans] rpi boot

2015-10-24 Thread erik quanstrom
On Fri Oct 23 15:37:55 PDT 2015, cyberfo...@gmail.com wrote:

> I don't have the Plan9 uSD card handy, but to the best of my recollection
> all Raspberry Pi SD cards have at least two partitions on them.  The ARM
> processor remains halted upon reset and the VideoCore loads the image from
> the (first?) DOS formatted partition.  Once that image is loaded into RAM,
> the ARM processor starts running it.
> 
> I'm not even sure that uboot is involved.
> 
> You might find some useful information at:
> http://raspberrypi.stackexchange.com/questions/10489/how-does-raspberry-pi-boot

u-boot is not used on the rpi.  the firmware load the kernel directly.

- erik



Re: [9fans] RUDP and/or others

2015-10-18 Thread erik quanstrom
On Sun Oct 18 17:11:11 PDT 2015, k...@sciops.net wrote:
> On Sun, Oct 18, 2015 at 04:59:44PM -0700, erik quanstrom wrote:
> > On Sun Oct 18 16:16:59 PDT 2015, 9...@9netics.com wrote:
> > > > Anyone know of a leaner reliable datagram protocol? I know I saw one a
> > > > year ago, but I just can't remember what it was!
> > > 
> > > are you looking for Internet Link (IL)?
> > 
> > there's also rudp, which if i have gotten my second-hand stories straight, 
> > was used on
> > the pathstar backplane.
> > 
> > - erik
> > 
> 
> I second this.  Aleksandar, you should investigate RUDP as soon as
> possible.  

for clarity, i was neither recommending or not recommending rudp, as i know
nothing about the problem to be solved except for the tidbits "fpga" and "vnc",
neither of which are something i've spent much time with.

good luck!

- erik



Re: [9fans] RUDP and/or others

2015-10-18 Thread erik quanstrom
On Sun Oct 18 16:16:59 PDT 2015, 9...@9netics.com wrote:
> > Anyone know of a leaner reliable datagram protocol? I know I saw one a
> > year ago, but I just can't remember what it was!
> 
> are you looking for Internet Link (IL)?

there's also rudp, which if i have gotten my second-hand stories straight, was 
used on
the pathstar backplane.

- erik



Re: [9fans] RUDP and/or others

2015-10-18 Thread erik quanstrom
On Sun Oct 18 15:53:44 PDT 2015, akuk...@gmail.com wrote:
> -BEGIN PGP SIGNED MESSAGE- 
> Hash: SHA1 
>  
> >On Mon, 19 Oct 2015 00:43:56 +0200 
> >Aleksandar Kuktin  wrote: 
>  
> > Anyone know of a leaner reliable datagram protocol? I know I saw one a 
> > year ago, but I just can't remember what it was! 
>  
> BTW, the purpose of the exercise is to identify possible candidates for 
> transporting VNC, and that can be implemented in FPGA fabric. As in "the 
> entire stack". 

the plan 9 source is here /sys/src/9/ip/rudp.c

what about encryption?

- erik



Re: [9fans] Web Gardens

2015-10-18 Thread erik quanstrom
On Thu Oct 15 20:50:52 PDT 2015, k...@sciops.net wrote:
> On Thu, Oct 15, 2015 at 07:10:01PM -0700, erik quanstrom wrote:
> > 
> > i'd recommend a google search
> > 
> > https://www.google.com/webhp?sourceid=chrome-instant=1=2=UTF-8#q=web%20garden
> > 
> 
> I deeply apologize for failing to summarize to your satisfaction.  I
> have bookmarked the url you provided and welcome any feedback I Can use
> to improve my understanding in this matter.

relax.

i posted that link because "web gardens" are off topic, and well addressed
outside this mailing list.

- erik



Re: [9fans] Web Gardens

2015-10-15 Thread erik quanstrom
On Mon Oct 12 09:16:37 PDT 2015, k...@sciops.net wrote:
> On Mon, Oct 12, 2015 at 05:57:16PM +1300, Andrew Simmons wrote:
> > As a diversion from the discussion of the existential essence of 
> > Javascript, 
> > could I ask the group for a view on the meaning of the term "Web Garden"? 
> > I was just asked about this in a job interview. 
> 
> This is a concept that has developed in the Windows world because a lot
> of the .net web server tech tends to share state per-process.  In order
> to have multiple backend processes running on a single server you
> generally have to play games with information sharing between processes.
> It's just another reason web services on Windows can be such a pain in
> the ass.
> 

i'd recommend a google search

https://www.google.com/webhp?sourceid=chrome-instant=1=2=UTF-8#q=web%20garden

- erik



Re: [9fans] off topic - a good Git reference

2015-10-02 Thread erik quanstrom
did you fix the SSL interface in python, too?  
- erik

On Oct 2, 2015 9:37 PM, Nick Owens <misch...@offblast.org> wrote:9front now supports tls 1.2 in libsec/devtls. Mercurial can make use of it through webfs.
On Oct 2, 2015 7:35 PM, "erik quanstrom" <quanstro@quanstro.net> wrote:On Fri Oct  2 18:46:06 PDT 2015, khm@sciops.net wrote:
> On Fri, Oct 02, 2015 at 11:56:47PM +0200, a.regenfuss@gmx.de wrote:
> > >Mercurial works.
> > If you have got an installed python.
>
> that's pretty much universally the case for mercurial, yes.

well, there are some problems with ssl.

- erik





Re: [9fans] off topic - a good Git reference

2015-10-02 Thread erik quanstrom
On Fri Oct  2 18:46:06 PDT 2015, k...@sciops.net wrote:
> On Fri, Oct 02, 2015 at 11:56:47PM +0200, a.regenf...@gmx.de wrote:
> > >Mercurial works.
> > If you have got an installed python.
> 
> that's pretty much universally the case for mercurial, yes.

well, there are some problems with ssl.

- erik



Re: [9fans] off topic - a good Git reference

2015-10-02 Thread erik quanstrom
On Wed Sep 30 03:03:36 PDT 2015, brantleyco...@me.com wrote:
> How can it be a secret 'society' if there's just one member for each secret 
> society?
> 
> Sent from my iPad
> 
> > On Sep 29, 2015, at 11:11 PM, erik quanstrom <quans...@quanstro.net> wrote:
> > 
> >> On Tue Sep 29 12:45:25 PDT 2015, k...@sciops.net wrote:
> >>> On Tue, Sep 29, 2015 at 02:18:20PM -0300, Tiago Natel wrote:
> >>> is there someone else interested in write a git tool for plan 9 ?
> >>> 
> >>> []'s
> >> 
> >> This has been written.  You just need to fill out a Secret Plan 9 Super
> >> Secret Society application and find three Bilderbergs to vouch for you.
> > 
> > it's the super secret plan 9 society here!  we *hate* the sp9sss.
> > 
> > to the original question: i haven't used git on plan 9.  sorry, i don't have
> > any useful info.

the members talk to themselves?

- erik



Re: [9fans] Replacement for find

2015-09-30 Thread erik quanstrom
On Wed Sep 30 01:12:36 PDT 2015, charles.fors...@gmail.com wrote:

> On 30 September 2015 at 09:01, Wolfgang Helbig  wrote:
> 
> > But I consider it ugly, to ask for the disk usage if you just want to
> > recursively list all files.
> >
> 
> It probably is not ideal, even when the circumlocution is hidden in a
> script.
> Perhaps find's syntax and conventions could be improved, though?

9atom has a relative of andrey's find.  it takes very few options.  
the -d and -D options are not easily duplicated with du.

; man find

 FIND(1)   FIND(1)

 NAME
  find - recursively list files.

 SYNOPSIS
  find [ -1Ddfq ] dir ...

 DESCRIPTION
  List each argument.  If the argument is a directory recur-
  sively list it's contents.  The default is to list the cur-
  rent directory.  Specifying -d prints only directories, -D
  prints only files, -f supresses warnings, while -q supresses
  quoting the output for rc(1). With -1, mount points will not
  be traversed.

 SOURCE
  /sys/src/cmd/find.c

 SEE ALSO
  du(1)

 BUGS
  Feeping creaturism.


- erik



Re: [9fans] off topic - a good Git reference

2015-09-29 Thread erik quanstrom
On Tue Sep 29 12:45:25 PDT 2015, k...@sciops.net wrote:
> On Tue, Sep 29, 2015 at 02:18:20PM -0300, Tiago Natel wrote:
> > is there someone else interested in write a git tool for plan 9 ?
> > 
> > []'s
> 
> This has been written.  You just need to fill out a Secret Plan 9 Super
> Secret Society application and find three Bilderbergs to vouch for you.

it's the super secret plan 9 society here!  we *hate* the sp9sss.

to the original question: i haven't used git on plan 9.  sorry, i don't have
any useful info.

- erik



Re: [9fans] dns message

2015-09-26 Thread erik quanstrom
> ipnet=local ip=192.168.0.0 ipmask=255.255.255.0
>   ipgw=192.168.0.1
>   smtp=ar
!>  ntp=ntp.jst.mfeed.ad.jp ip
>   auth=hebe
>   fs=hebe
>   # the dns values are advertised by DHCP server
>   # we assume that dhcpd is running on the same ip. look /cfg/common/cpurc
>   dns=192.168.0.6

this is an indication of an issue.

the ntp line has a trailing ip, which may be confusing the dns client.

- erik



Re: [9fans] dns message

2015-09-26 Thread erik quanstrom
On Sat Sep 26 15:52:28 PDT 2015, aris...@ar.aichi-u.ac.jp wrote:
> thank you erik.
> you are very careful!
> I didn’t aware that garbage.
> however removing “ip” does not fix my problem.
> looking source code I guess: names that are not followed by “=“ are just 
> discarded.
> I want to know whether this is only to me.

i am not currently having this issue.  i found an instance of this issue
when i was setting up a machine a while ago,  according to /sys/log/dns.

- erik



Re: [9fans] Out of pseudo mount points

2015-09-23 Thread erik quanstrom
On Wed Sep 23 15:34:38 PDT 2015, adriano.vera...@mail.com wrote:
> I have 2 identical hosts (same hw, same kernel, same cpurc, ) ...  but
> 
> A# import -b B /srv /srv
> A# mount /srv/kfs /n/k
> 
> beeing /srv/kfs imported from B, works as expected and
> 
> B# import -b A /srv /srv
> B# mount /srv/kfs /n/k
> 
> beeing /srv/kfs imported from A, produces
> "mount: /n/k: Out of pseudo mount points".
> The same for all file servers imported from A.
> 
> Where is/could be  the (my, sure) error ?
> Can someone kindly help me ?

can this be addressed with a a reboot?  if so, then i'd
recommend making Npsmpt larger in exportfs, otherwise
there's a bug in exportfs that's leaking pseudo mount points.

- erik



Re: [9fans] Issues with USB mouse in 9atom

2015-09-22 Thread erik quanstrom
On Tue Sep 22 17:47:17 PDT 2015, quans...@quanstro.net wrote:
> I mentioned booted.  
> 
> - erik
> 
> 
> On Sep 22, 2015 2:58 PM, erik quanstrom <quans...@quanstro.net> wrote:
> >
> > > Yeah, I installed from the CD. But that image is for amd64, correct? a 64 
> > > bit processor? My junk computer is an old gateway, with a celeron D, a 
> > > whopping 256 MB of ram, and a full 100 GB hard disk space. But since this 
> > > is 32 bit to my knowledge, would a possible solution involve making a 
> > > bootable flash disk from this distribution within my installation? 
> > > 
> > > > i don't see any confirmation, but it looks like the install was from 
> > > > the 
> > > > cd image? 
> > > > if so, i recommend using the usb install image instead 
> > > > 
> > > > http://ftp.9atom.org/other/usbinstamd64.bz2 
> > > > 
> > > > this *should* fix all those issues.  posting a few details on the 
> > > > processor might 
> > > > be helpful in figuring out any issues. 
> >
> > either 32 or 64 bit kernels can be built from the usb image. 

well, autocorrect ftw!  that was supposed to say, both the 32- and 64-bit 
kernels can be /booted/ from the usb image, so your hardware should be
fine.

- erik



Re: [9fans] Issues with USB mouse in 9atom

2015-09-22 Thread erik quanstrom
I mentioned booted.  

- erik


On Sep 22, 2015 2:58 PM, erik quanstrom <quans...@quanstro.net> wrote:
>
> > Yeah, I installed from the CD. But that image is for amd64, correct? a 64 
> > bit processor? My junk computer is an old gateway, with a celeron D, a 
> > whopping 256 MB of ram, and a full 100 GB hard disk space. But since this 
> > is 32 bit to my knowledge, would a possible solution involve making a 
> > bootable flash disk from this distribution within my installation? 
> > 
> > > i don't see any confirmation, but it looks like the install was from the 
> > > cd image? 
> > > if so, i recommend using the usb install image instead 
> > > 
> > > http://ftp.9atom.org/other/usbinstamd64.bz2 
> > > 
> > > this *should* fix all those issues.  posting a few details on the 
> > > processor might 
> > > be helpful in figuring out any issues. 
>
> either 32 or 64 bit kernels can be built from the usb image. 
>
> - erik 
>
>


Re: [9fans] Issues with USB mouse in 9atom

2015-09-22 Thread erik quanstrom
> Yeah, I installed from the CD. But that image is for amd64, correct? a 64
> bit processor? My junk computer is an old gateway, with a celeron D, a
> whopping 256 MB of ram, and a full 100 GB hard disk space. But since this
> is 32 bit to my knowledge, would a possible solution involve making a
> bootable flash disk from this distribution within my installation?
> 
> > i don't see any confirmation, but it looks like the install was from the
> > cd image?
> > if so, i recommend using the usb install image instead
> >
> > http://ftp.9atom.org/other/usbinstamd64.bz2
> >
> > this *should* fix all those issues.  posting a few details on the
> > processor might
> > be helpful in figuring out any issues.

either 32 or 64 bit kernels can be built from the usb image.

- erik



Re: [9fans] Issues with USB mouse in 9atom

2015-09-21 Thread erik quanstrom
> After obtaining a disk drive for an old PC I've had for a little while, I
> was overjoyed to turn it into a dedicated 9 machine. I realized could have
> a second server as part of my 9junk grid! However, it seems the original
> site from bell labs is down, and that since 9front apparently can't find a
> bootstrap processor, so I decided to give 9atom a try. It installed
> successfully, minus this "spurious interrupt 39" message everywhere.
> 
> However, there seems to be an issue using the mouse. It's just a generic
> black dell USB mouse. Whenever I right click to open a window (or use the
> menu at all), it seems as if it detects the release much too early, and
> doesn't always give me time to choose the correct option. Before I go out
> to buy a new mouse (which I don't mind at all, considering money is no
> object for my love for 9), is there anything I can write into a config file
> of some sort, or edit and recompile in a driver?

i don't see any confirmation, but it looks like the install was from the cd 
image?
if so, i recommend using the usb install image instead 

http://ftp.9atom.org/other/usbinstamd64.bz2

this *should* fix all those issues.  posting a few details on the processor 
might
be helpful in figuring out any issues.

- erik



Re: [9fans] tls and iphones and ios9 (sigh)

2015-09-18 Thread erik quanstrom
On Fri Sep 18 06:01:44 PDT 2015, cinap_len...@felloff.net wrote:
> so you need server side support for what cipher suits and protocol
> versions exactly?
> 
> the work has been done in 9front libsec and devtls to support ecdhe
> and dhe and tls 1.2 on the *client* side at least. so you can start
> from there. whats missing is the signing and signature verification
> of the dh parameters.

quite a bit of work that looks good.  thanks.

here are some current differences i've got.  the - is your version.
* i think aes_xts should take u32ints as this is defined in the standard.
the assumption that ulong is 32 bits is suspect.

* sorry for the ignorance, but why do we need ripemd160?


../../../include/libsec.h:396,403 - /mnt/term/sys/include/libsec.h:407,414
  PEMChain*readcertchain(char *filename);
  
  /* aes_xts.c */
- int aes_xts_encrypt(ulong tweak[], ulong ecb[],  vlong sectorNumber, uchar 
*input, uchar *output, ulong len) ;
- int aes_xts_decrypt(ulong tweak[], ulong ecb[], vlong sectorNumber, uchar 
*input, uchar *output, ulong len);
+ int aes_xts_encrypt(u32int tweak[], u32int ecb[],  vlong sectorNumber, uchar 
*input, uchar *output, usize len) ;
+ int aes_xts_decrypt(u32int tweak[], u32int ecb[], vlong sectorNumber, uchar 
*input, uchar *output, usize len);
  
  typedef struct ECpoint{
int inf;
../../../include/libsec.h:432,439 - /mnt/term/sys/include/libsec.h:443,448
  void  base58enc(uchar *, char *, int);
  int   base58dec(char *, uchar *, int);
  
- DigestState*  ripemd160(uchar *, ulong, uchar *, DigestState *);
- 
  /*
   * Diffie-Hellman key exchange
   */


- erik



Re: [9fans] tls and iphones and ios9 (sigh)

2015-09-17 Thread erik quanstrom
combover.  I see what you did there.

- erik


On Sep 17, 2015 8:42 AM, Jeff Sickel  wrote:
>
>
> > On Sep 17, 2015, at 9:33 AM, Steve Simon  wrote: 
> > 
> > I upgraded my iphone to ios9 and now cannot access my email on plan9 - 
> > no sniggering at the back. 
> > 
> > It seems apple require 1024bit keys for Diffe helman exchanges in TLS, 
> > and DH + RSA is no longer sypported at all. 
> > 
> > Primarly this is a warning to 9fans about the perils of ios9 
> > and a vain hope that somone might be looking at modifying libsec. 
> > 
> > -Steve 
> > 
>
> A good warning as OS X 10.11 will be using the same App Transport Security 
> as iOS 9, both using TLS 1.2. 
>
> Might be time to combover RFC 5246 and reconcile libsec and devtls. 
>
> -jas 
>
>
>


Re: [9fans] tls and iphones and ios9 (sigh)

2015-09-17 Thread erik quanstrom
On Thu Sep 17 12:49:37 PDT 2015, j...@corpus-callosum.com wrote:
> 
> > On Sep 17, 2015, at 12:46 PM, Skip Tavakkolian <9...@9netics.com> wrote:
> > 
> >> combover.  I see what you did there.
> > 
> > ha! i can trump that…
> 
> There’s a direct correlation to length of hair and billable rate.

lucky me.

- erik



Re: [9fans] kenc vlong double

2015-09-13 Thread erik quanstrom
>   MOVLv+-8(SP),F0 <- nope.

actually, double nope.  the move if implemented as written is wrong.  we want 
to move
a quad to a float, not a long to a float.

- erik



Re: [9fans] kenc vlong double

2015-09-13 Thread erik quanstrom
> --- a/sys/src/cmd/cc/com.cSun Sep 13 13:51:00 2015 +0200
> +++ b/sys/src/cmd/cc/com.cSun Sep 13 19:59:43 2015 +0200
> @@ -182,8 +182,8 @@
>   r = new1(OCAST, n->right, Z);
>   r->type = t;
>   n->right = r;
> - n->type = t;
>   }
> + n->type = t;
>   break;

isn't the && !mixedasop() added to the condition the problem:
the cast should not be elided if it's a float/double.  though 8c
might get this wrong for other reasons.

- erik



Re: [9fans] kenc vlong double

2015-09-13 Thread erik quanstrom
> On 13 September 2015 at 19:21, erik quanstrom <quans...@quanstro.net> wrote:
> 
> > isn't the && !mixedasop() added to the condition the problem:
> > the cast should not be elided if it's a float/double.  t
> >
> 
> the test is correct, because in mixed-mode assignment, you want to do the
> calculation in float/double,
> then convert it to the integer type, not convert the rhs float/double to
> the integer type at the start.
> ie, I += D  is I = I+D which is I = (double)I + D, not I += (int)D;

ah, you're right.

- erik



[9fans] irq latency

2015-09-07 Thread erik quanstrom
tl;dr: pcie access = latency

it's interesting to take a look at irq latency for a number of devices on 
different
machines.  it looks like the experimental device --- the interrupt does nothing 
---
gives us a lower bound for irq latency, which works out to be 36ns (!).  clearly
this doesn't count dispatch, or the overhead of trap().

m# aux/cpuid -i
Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz
vector.mach bus irq count sum(cycles)  cycles/call  type  name
m# /usr/quanstro/bin/rc/irqlatency
   66.0  1124605  3143914 127.78
msi-x experimental
   50.0  50   348487802964226 2304.14
lapic APIC timer
   50.6  50   324950841831354 2590.65
lapic APIC timer
   50.4  50   319746832771958 2604.48
lapic APIC timer
   50.2  50   323061846873676 2621.40
lapic APIC timer
   50.3  50   323080867020068 2683.61
lapic APIC timer
   50.5  50   323056886385231 2743.75
lapic APIC timer
   50.7  50   324165905699976 2793.95
lapic APIC timer
   50.1  50   323519997341922 3082.79
lapic APIC timer
   65.0  11 4383 45452712 10370.23
msi-x ether0
   66.5   566222777537556 11741.38   
ioapic usbehci
   65.7  119   247991 27554.56  
msi sdF (ahci)
   65.1   4 1084 38400923 35425.21   
ioapic COM1

; aux/cpuid -i
AMD Phenom(tm) II X4 965 Processor
; irqlatency
   50.3  50 83106879 109878207918 1322.13
lapic APIC timer
   50.2  50 83070335 109844976915 1322.31
lapic APIC timer
   50.1  50 83228230 110448926024 1327.06
lapic APIC timer
   50.0  50 90772899 169367434384 1865.84
lapic APIC timer
   65.2  10  1179147  11639594649 9871.20
msi-x ether0
   65.0   117657178037258 10083.10   
ioapic i8042
   68.2  12   312539   3476219928 11122.52   
ioapic kbdaux
   66.0   4  911 21026234 23080.39   
ioapic COM1
   71.1  11   58  1780132 30691.93  
msi sdE (ahci)
   68.1  101  7934988 7934988.00   
ioapic usbohci

given the efficency of locks, and the same ethernet devices (i211), we can 
reason
that since the latency is prop. to the frequency, 

10370*3.4/3.5 = 10073.71428571

the latency must largely be pcie register reads and writes.  sadly, the msi-x 
interrupt
doesn't handle single causes, otherwise no register access would be necessary.

- erik

ps.

interesting question: why do the lapic timers take longer on the faster 
machine?  that's
double the latency.  is this an intel thing?  (note this is a different 
ethernet chipset,
and a different driver so the comparison with the other two is bogus.)

lilly; aux/cpuid -i
 Intel(R) Atom(TM) CPU D525   @ 1.80GHz
lilly; irqlatency
   50.3  508021803131705456340928 2126.03
lapic APIC timer
   50.1  508039881801811997635679 2253.76
lapic APIC timer
   50.2  508325052881914666440067 2299.89
lapic APIC timer
   50.0  508308619692509217805168 3020.02
lapic APIC timer
   70.2  15216587 8293.50   
ioapic usbehci
   66.2  11 36660721 362749665600 9894.78  
msi ether0
   66.1  10   395700   4099132008 10359.19  
msi ether1
   65.0   1110404 10404.00   
ioapic i8042
   68.1  14   35   379197 10834.20   
ioapic usbuhci
   67.3  10   95  1065114 11211.73   
ioapic usbehci
   65.3   4  603  8503128 14101.37   
ioapic COM1



Re: [9fans] irq latency

2015-09-07 Thread erik quanstrom
On Mon Sep  7 18:24:05 PDT 2015, quans...@quanstro.net wrote:
> tl;dr: pcie access = latency

speaking of latency, 9fans seems to have >6hr latency right now.

- erik



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-06 Thread erik quanstrom
privalloc doesn't create a name either.  unless by name an entry in a table shared by the set of memory sharing processes is what is meant.  this is not helpful though because I was specifically addressing the case where it was just process private.
- erik

On Sep 6, 2015 1:21 PM, Charles Forsyth <charles.fors...@gmail.com> wrote:On 6 September 2015 at 16:02, erik quanstrom <quanstro@quanstro.net> wrote:a slot of local interest?  doesn't malloc serve that purpose well enough?It doesn't create a name for a per-process global.



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-06 Thread erik quanstrom
On Sat Sep  5 23:33:50 PDT 2015, cinap_len...@felloff.net wrote:
> hey charles!
> 
> is privfree() broken? it appears it chains the slots together,
> but only the calling process will get a correct chain. the chain
> head (privs) is shared (in bss) and seen by all process so the
> others will get corrupted chains (chain link is private) no?
> 
> i wonder what the intended use for privfree() was. theres no
> code using it.

i think the logic in tprivalloc is what was intended.

- erik



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-06 Thread erik quanstrom
> probably, since a shared bitmap would need a lock and allow
> any process to allocate a slot, which could then either be broadcast
> to allow per-process tagging (as above), or allocation of a slot of only
> local interest. even so, tprivfree is incomplete.

a slot of local interest?  doesn't malloc serve that purpose well enough?

- erik



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-05 Thread erik quanstrom
On Sat Sep  5 07:06:44 PDT 2015, giac...@tesio.it wrote:

> 2011-05-20 3:30 GMT+02:00 erik quanstrom <quans...@quanstro.net>:

uh, wow.  i hope this wasn't my mailer dragging the past up.

> > one note is that while i'm aware of privalloc(2), i didn't use it.  the
> > implementation doesn't appear correct for shared-memory procs.
> > i think there are two issues
> > - locking is unnecessary.  the only preemptable unit of execution is
> > a process and each process is guarenteed to have its own instance
> > of _privates and _nprivates.
> > - for shared-memory procs, we will run out of privates because
> > the static privinit will be falsely shared.  privinit should be replaced
> > by using a private entry.
> >
> 
> In a set of processes that share memory, I need a single per-process
> location to store the address of structure (which is in turn allocated in
> the global memory space).
> 
> Privalloc(2) seemed what I need, but seem that I can't use it properly.
> 
> In the parent process I do:
> 
> 1) initialialize a global variable p = (MyStruct **)privalloc();
> 2) allocate a MyStruct for every process I'm going to spawn
> 3) spawn processes with rfork(RFMEM|RFPROC)
> 
> The spawn() function that call rfork takes a MyStruct* as argument and
> assign it to *p in the new process.
> For extra safety I added an assert(*p == nil) just after rfork, and after a
> few (apparently?) successful spawns, the assert fails.

hmm.  in /sys/src/libc/amd64/arv0.s _privates and _nprivates are in the bss.

GLOBL   _privates(SB), $8
GLOBL   _nprivates(SB), $4

so they can be set in the parent process.  in /sys/src/libc/amd64/main9.s

#define NPRIVATES   16

TEXT_main(SB), 1, $(2*8+NPRIVATES*8)
MOVQAX, _tos(SB)
LEAQ16(SP), AX
MOVQAX, _privates(SB)
MOVL$NPRIVATES, _nprivates(SB)


we see that the privates and nprivates are on the stack just below _tos.

the only ways i can see your pointer not being nil is
(a) kernel bug -- the stack is not cleared
(b) the the parent has written to the privalloc'd element before forking,
and the stack was copied faithfully.

i think you can tell which case you have by assert(*p == nil) in the parent.

i'm sure there could be other bugs as well.

as to getpid() being "slow", you can always use _tos->pid

- erik



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-05 Thread erik quanstrom
by the way, the following program runs without asserting for me
with or without the waits.

- erik

---

#include 
#include 

void
task(void **p)
{
assert(*p == nil);
*p = (void*)(uintptr)getpid();
}

void
spawn(void (*t)(void**), void **p)
{
int pid;

switch(pid = rfork(RFMEM|RFPROC)){
case -1:
sysfatal("spawn: rfork: %r");
case 0:
t(p);
exits("");
default:
USED(pid);
return;
}
}

void
main(void)
{
int i, k;
void **p;
Waitmsg *w;

p = privalloc();
k = 0;
for(i = 0; i < 1024; i++){
spawn(task, p);
for(k++; k > 16; k--){
if((w = wait()) == nil)
break;
free(w);
}
}
exits("");
}



Re: [9fans] Privalloc(2) and rfork(RFPROC|RFMEM) (was: a pair nec bugs)

2015-09-05 Thread erik quanstrom
> May be my problem is that p is global in my case?

global variables are in the bss, and thus shared. p will have
the same value in each thread, but *p should point into the
stack, and thus the same virtual address will be mapped to
different physical pages of memory.

however, if *p is assigned to a non-zero value before the process
is created, the new page allocated for the new process' stack will
have a copy of the old value, and thus not be 0.

- erik



Re: [9fans] acme search backwards

2015-09-03 Thread erik quanstrom
somehow I thought that was going to be the response, but that's not really true 
unless acme has been rewritten on the lower level kbd model.

that model also introduces user space kbd control, so good luck using it in the 
event of panic.

- erik


On Sep 3, 2015 6:34 AM, Aram Hăvărneanu <ara...@mgk.ro> wrote:
>
> On Thu, Sep 3, 2015 at 3:11 PM, erik quanstrom <quans...@quanstro.net> wrote: 
> > because the keyboard doesn't pass modal presses to user space 
>
> There has been solved in 9front in 2011: http://man.cat-v.org/9front/8/kbdfs 
>
> -- 
> Aram Hăvărneanu 
>
>


Re: [9fans] acme search backwards

2015-09-03 Thread erik quanstrom
On Thu Sep  3 02:40:05 PDT 2015, rudolf.syk...@gmail.com wrote:
> On 3 September 2015 at 11:16, Mathieu Lonjaret
> > https://groups.google.com/d/msg/comp.os.plan9/Q6R9iuu0lE8/u3h-FUnXOmEJ
> 
> Thanks for the link!
> I wonder, why is it that they claim that implementing the functionality
> of:
> 3b = search forward, shift+3b = search backward
> is not feasible on plan9...

because the keyboard doesn't pass modal presses to user space, and devmouse
already takes shift+right -> middle, for insufficient mice.

- erik



Re: [9fans] On Linux, what is the rc init file?

2015-08-30 Thread erik quanstrom
On Fri Aug 28 10:24:30 PDT 2015, rym...@gmail.com wrote:

 YES!! That was it! My plan9home directory didn't contain a bin folder; that
 was somewhere else. When I symlinked it there, it worked! Thank you!
 
 

out of curiousity, why use a non-standard install?  

- erik



Re: [9fans] On Linux, what is the rc init file?

2015-08-30 Thread erik quanstrom
On Fri Aug 28 09:09:09 PDT 2015, asbras...@gmail.com wrote:
 On Fri, Aug 28, 2015 at 11:49:41AM -0400, s...@9front.org wrote:
  Take a look at $PLAN9/rcmain.
  
  sl
 
 Well, punch me in the face and call me Suzanne!
 That changes everything, because absence of a .bashrc
 lookalike was the thing that prevented me from using
 rc for everyday shell needs. But I never investigated a lot.
 Thank you

the .bashrc lookalike is *not* rcmain. rcmain is the second
phase of the rc virtual machine bootstrapping itself.

the .bashrc lookalike is $home/lib/profile.

- erik



Re: [9fans] python for plan9 ?

2015-08-15 Thread erik quanstrom
On Sat Aug 15 16:06:57 PDT 2015, v...@klankschap.nl wrote:
 is there a python 3.4 port ?
 .F

nope.

- erik



Re: [9fans] p9p sed vs linux sed

2015-08-14 Thread erik quanstrom
i think the change doesn't work for any multi-line file:

; cp /sys/src/cmd/sed.c /tmp/notsed.c
; cd /tmp
; ed notsed.c
; ed notsed.c
27827
putline(Biobuf *bp, Rune *buf, int n)
+4
ebputc(bp, '\n');
d
w
27808
q
; tmk notsed.c
6c -FVTw notsed.c
6l -o 6.notsed notsed.6
; ; {echo a ; echo b} | 6.notsed 's/./.☺/g'
.☺.☺; 

- erik



Re: [9fans] read9pmsg usage

2015-08-10 Thread erik quanstrom
on plan 9 systems 0 writes are not discarded.
- erik

On Aug 10, 2015 7:11 AM, Giacomo Tesio giac...@tesio.it wrote:Hi, Ive a probably naive question that I cant figure out.Ive just noticed that fcall(2) statesRead9pmsg calls read(2) multiple times, if necessary, to
read an entire 9P message into buf.  The return value is 0
for end of file, or -1 for error; it does not return partial
messages.but Ive noticed that a few client does not interpret a 0 return value as a EOF, eghttps://github.com/brho/plan9/blob/master/sys/src/cmd/usb/lib/fs.c#L604-L606https://github.com/brho/plan9/blob/master/sys/src/cmd/usb/audio/audiofs.c#L889-L891https://github.com/brho/plan9/blob/master/sys/src/cmd/aux/searchfs.c#L613-L615 https://github.com/brho/plan9/blob/master/sys/src/cmd/lnfs.c#L547-L551https://github.com/brho/plan9/blob/master/sys/src/cmd/telco/telco.c#L935-L937The comment there states that/*
 * reading from a pipe or a network device
 * will give an error after a few eof reads.
 * however, we cannot tell the difference
 * between a zero-length read and an interrupt
 * on the processes writing to us,
 * so we wait for the error.
 */
However many other fs just handle errors and eof together, for example here:https://github.com/brho/plan9/blob/master/sys/src/cmd/ip/ftpfs/ftpfs.c#L273-L279Im a bit confused about this. Whats the proper use of the 0 return value?Giacomo



[9fans] dhcp problem with windows 7 client

2015-07-31 Thread erik quanstrom
i'm looking at a windows 7 client that is not happy with dhcp.  i know this 
machine had
been happy dhcp'ing on the network 18 months ago, but now it's not.  here's the 
symptom:

lilly Jul 31 05:57:38 Discover(0.0.0.0-10.1.1.1) 
xid(e52418a9)flag(0)ea(6480993af534)id(id016480993af534)need(mask dom router 
dns NBns NBtype NBscope discoverrouter staticroutes 121 249 vendorinfo )
lilly Jul 31 05:57:38 
Offer(10.1.1.1-10.1.1.11)id(id016480993af534)ci(0.0.0.0)gi(0.0.0.0)yi(10.1.1.11)si(10.1.1.1)
 
typ(2)leas(1800)sid(10.1.1.1)mask(/112)router(10.1.10.1)host(thinkpad.quanstro.net)dom(quanstro.net)
 dns(10.1.1.1)NBtype(2)
lilly Jul 31 05:57:38 Request(0.0.0.0-10.1.1.1) 
xid(e52418a9)flag(0)ea(6480993af534)ip(10.1.1.11)id(id016480993af534)sid(10.1.1.1)need(mask
 dom router dns NBns NBtype NBscope discoverrouter staticroutes 121 249 
vendorinfo )
lilly Jul 31 05:57:38 
Ack(10.1.1.1-10.1.1.11)id(id016480993af534)ci(0.0.0.0)gi(0.0.0.0)yi(10.1.1.11)si(10.1.1.1)
 
typ(5)leas(1800)sid(10.1.1.1)mask(/112)router(10.1.10.1)host(thinkpad.quanstro.net)dom(quanstro.net)
 dns(10.1.1.1)NBtype(2)
lilly Jul 31 05:57:38 Decline(0.0.0.0-10.1.1.1) 
xid(e52418a9)flag(0)ea(6480993af534)ci(10.1.1.11)ip(10.1.1.11)id(id016480993af534)sid(10.1.1.1)need()

it appears to ask for 
mask dom router dns NBns NBtype NBscope discoverrouter staticroutes 121 
249
121 is classless static routes

it's not clear to me why the win 7 machine is declining the address.  has 
anyone seen this before?

- erik



Re: [9fans] dhcp problem with windows 7 client

2015-07-31 Thread erik quanstrom
looks like the problem was a prior config having given another device the same 
ip. the client is not giving up its address even after lease expiration.

- erik


On Jul 31, 2015 5:58 AM, erik quanstrom quans...@quanstro.net wrote:

 i'm looking at a windows 7 client that is not happy with dhcp.  i know this 
 machine had 
 been happy dhcp'ing on the network 18 months ago, but now it's not.  here's 
 the symptom: 

 lilly Jul 31 05:57:38 Discover(0.0.0.0-10.1.1.1) 
 xid(e52418a9)flag(0)ea(6480993af534)id(id016480993af534)need(mask dom router 
 dns NBns NBtype NBscope discoverrouter staticroutes 121 249 vendorinfo ) 
 lilly Jul 31 05:57:38 
 Offer(10.1.1.1-10.1.1.11)id(id016480993af534)ci(0.0.0.0)gi(0.0.0.0)yi(10.1.1.11)si(10.1.1.1)
  
 typ(2)leas(1800)sid(10.1.1.1)mask(/112)router(10.1.10.1)host(thinkpad.quanstro.net)dom(quanstro.net)
  dns(10.1.1.1)NBtype(2) 
 lilly Jul 31 05:57:38 Request(0.0.0.0-10.1.1.1) 
 xid(e52418a9)flag(0)ea(6480993af534)ip(10.1.1.11)id(id016480993af534)sid(10.1.1.1)need(mask
  dom router dns NBns NBtype NBscope discoverrouter staticroutes 121 249 
 vendorinfo ) 
 lilly Jul 31 05:57:38 
 Ack(10.1.1.1-10.1.1.11)id(id016480993af534)ci(0.0.0.0)gi(0.0.0.0)yi(10.1.1.11)si(10.1.1.1)
  
 typ(5)leas(1800)sid(10.1.1.1)mask(/112)router(10.1.10.1)host(thinkpad.quanstro.net)dom(quanstro.net)
  dns(10.1.1.1)NBtype(2) 
 lilly Jul 31 05:57:38 Decline(0.0.0.0-10.1.1.1) 
 xid(e52418a9)flag(0)ea(6480993af534)ci(10.1.1.11)ip(10.1.1.11)id(id016480993af534)sid(10.1.1.1)need()
  

 it appears to ask for 
 mask dom router dns NBns NBtype NBscope discoverrouter staticroutes 121 249 
 121 is classless static routes 

 it's not clear to me why the win 7 machine is declining the address.  has 
 anyone seen this before? 

 - erik 




Re: [9fans] Harvey OS: A new OS inspired heavily by Plan 9

2015-07-26 Thread erik quanstrom
just speaking for myself, I found the fact that plan 9 was a self contained thing to be a must have. i don't consider the gcc toolchain to be a feature. 
if "fast compilation" is a feature over plan 9, I'd like to see some numbers.
- erik

On Jul 25, 2015 3:15 PM, Axel Belinfante axel.belinfa...@utwente.nl wrote:I couldn’t resist looking, and found in http://www.osnews.com/comments/28699	Harvey is an effort to get the Plan 9 code working with gcc and clang”.So, in a way it seems to be a port of Plan 9.More details, including the feature list below, are at http://harvey-os.org		Features	• AMD 64 bit	• Modern, simplified syscall system	• GCC toolchain means you can use gdb(!)	• Compile in Linux or OSX using Harveys headers and libs, no need to change anything else	• Fast compilation of the whole system	• All Plan9 userland apps available	• Plans to add X11 with rio-like multiplexing, tty driver, new fileserver, native toolchain and moreI’m intrigued by the “compile … using Harveys headers and libs, no need to change anything else” —I guess that means that it will be easy to “port” stuff to Harvey?The team list contains names well-known on this list...I must say, it looks quite interesting, worth checking out.Axel.On 25 Jul 2015, at 17:58, Ryan Gonzalez rymg19@gmail.com wrote:
No clue. Im guessing its heavily inspired by Plan 9.On July 25, 2015 3:34:13 AM CDT, steve@quintile.net steve@quintile.net wrote:
not sure what Harvey is... is it just plan9 ported to build on gcc?if so does gcc run under Harvey?does gcc run under plan9 now?SteveOn 25 Jul 2015, at 01:43, Ryan Gonzalez rymg19@gmail.com wrote:https://medium.com/this-is-not-a-monad-tutorial/harvey-an-operating-system-with-plan-9-s-shadow-3081414e5f0b

Im not affiliated with this whatsoever; I just saw it on Reddit and found it interesting.

I found this part particularly neat:

 We are working in ANSI POSIX environment to have most of well known tools and programs that programmers or end users expects to have in a modern operating system. Things that for traditional Plan 9 would be very difficult to have.

-- 
Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity.
-- 
Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity.


Re: [9fans] Harvey OS: A new OS inspired heavily by Plan 9

2015-07-26 Thread erik quanstrom
wrong list?  ;-)

On Jul 26, 2015 1:47 PM, hiro 23h...@gmail.com wrote:

 I'm trying to argue from a Linux point of view. 




Re: [9fans] Has Linux jumped the shark?

2015-07-24 Thread erik quanstrom
On Thu Jul 23 22:12:56 PDT 2015, prof.bru...@gmail.com wrote:

 You are not helping at all. We know that Peter has done *everything*.
 
 brucee
 
 On Fri, Jul 24, 2015 at 2:49 PM, cinap_len...@felloff.net wrote:
 
  http://9front.org/img/pjwshark.png

so it's peter.  the most interesting man in the world.

- erik



Re: [9fans] usb disk - no partitions?

2015-07-22 Thread erik quanstrom
On Tue Jul 21 02:03:39 PDT 2015, cinap_len...@felloff.net wrote:
 you have to use disk/partfs with the original usb/disk driver.
 nusb/disk in 9front supports partitions.

in 9atom, there is a loopback sd driver, should performance matter.

- erik



Re: [9fans] Plumbing - Files with spaces

2015-07-22 Thread erik quanstrom
do you mean frogs not runes? the normal rules are ok with most runes.
- erik

On Jul 22, 2015 6:29 AM, dexen deVries dexen.devr...@gmail.com wrote:there is trfs(4), not sure if applicable to plan9port.trfs -  translate spaces and other runes in file names file systemhttp://9p.io/magic/webls?dir=/sources/contrib/nemo



Re: [9fans] Gawk in 9front-ports

2015-07-09 Thread erik quanstrom
confirmed.  it's existence is due to early gnu programs fighting with small 
variations in unix and compilers.  byron's rc used a small script to the same 
effect.  but for the most part, this all could be avoided with careful planning 
and not using esoteric functions.  

gcc also had its own configuration step.  the header rewriting is a vestage of 
this system.

- erik


On Jul 9, 2015 05:31, Jeff Sickel j...@corpus-callosum.com wrote:


  On Jul 9, 2015, at 5:19 AM, Steve Simon st...@quintile.net wrote: 
  
  FWIW: fgb did a stirling script called config which sets up some 
  environment and runs configure under ape. It doesn't always work but often 
  gets close 
  to generating a config.h as linux intended. 

 Configure predates Linux.  That, or my memory of using it to bang my head 
 against the perl wall in the 1980s damaged the register. 

 -jas 

 … at least you’re not using Xenix 





Re: [9fans] rsc's libtask on embedded

2015-07-09 Thread erik quanstrom
all process-like implementations except if they give up on per-cpu 
multiprogramming are setjmp based at heart.

- erik


On Jul 9, 2015 09:31, Bakul Shah ba...@bitblocks.com wrote:

 Your use is different and simple enough that I would suggest doing this from 
 scratch in pure C. Or start from an existing setjmp based implementation. It 
 should really be a couple pages of code at most. 

  On Jul 9, 2015, at 9:12 AM, st...@quintile.net st...@quintile.net 
  wrote: 
  
  co routines plus channels is exactly what I want. 




Re: [9fans] Gawk in 9front-ports

2015-07-07 Thread erik quanstrom
On Mon Jul  6 19:40:45 PDT 2015, staal1...@gmail.com wrote:

 There was a recent discussion about that it would be nice to have gawk on
 Plan9.

i'm confused.  wasn't there also an effort to un-apeify the one true awk?

- erik



Re: [9fans] Help with interrupting fgetc()

2015-06-27 Thread erik quanstrom
two additional points.  I the style for note matching is strstr matching 
because the exact string can't be counted on.  for example details may be 
added.  also the bio(2) library and peint(2) areusually used instead of stdio.

- erik


On Jun 27, 2015 1:30 PM, Nils M Holm n...@t3x.org wrote:


 I'm trying to get the DEL key to cause an error in an interpreter I'm 
 writing. On Unix, I just catch SIGINT and set an error flag that causes 
 the interpreter to return to the REPL. On Plan9, fgetc() seems to return 
 EOF after catching an interrupted note. 

 To make a long story short, I expected the following code to echo 
 characters typed and print oopsie when DEL is pressed. It should 
 keep echoing after printing oopsie, but it just exits instead. 
 What am I missing? 

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 #include u.h 
 #include libc.h 
 #include stdio.h 

 void n(void *x, char *s) { 
 if (!strcmp(s, interrupt)) { 
 print(oopsie!\n); 
 noted(NCONT); 
 } 
 else { 
 noted(NDFLT); 
 } 
 } 

 main() { 
 int c; 

 notify(n); 
 c = fgetc(stdin); 
 while (c != EOF) { 
 fputc(c, stdout); 
 c = fgetc(stdin); 
 } 
 return 0; 
 } 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

 -- 
 Nils M Holm   n m h @ t 3 x . o r g   www.t3x.org 




[9fans] unicode8.0.0

2015-06-20 Thread erik quanstrom
if you're running recent 9atom, /lib/unicodedata and
the runepunct and runeclass data may be updated either
by pulling the source or by

; cd /sys/src/cmd/runeclass
; mk nuke
; mk install

i recommend pulling the source as isalpharune(2) and
runeclass(2) have been tweaked to point to the current
standard.

- erik



Re: [9fans] drawterm source?

2015-06-18 Thread erik quanstrom
On Thu Jun 18 03:43:58 PDT 2015, 0in...@gmail.com wrote:
  Anyone looked at this, or have a version which performs both of these 
  features?
 
 So, I think you'll be happy with https://github.com/0intro/drawterm now.

so why do we have so many un-coordinated versions of drawterm?

- erik



Re: [9fans] inequality testing in shell

2015-06-15 Thread erik quanstrom
On Sun Jun 14 14:12:13 PDT 2015, nsa...@gmail.com wrote:
 Why doesn't the plan9 test program have features for checking
 inequalities (i.e. greater than etc.)?
 What do you guys do when you want to test for inequality?
 
 Maybe the most convenient way to do that in the shell would be if I
 made two tiny programs, lt  gt which would check their two arguments.

to be more pedantic than necessary, test is not part of the plan 9 shell.
the ~ operator is the way to test for (string) equality or inequality.
! is shell negation, so for non-negative integral x,

~ $x [1-3]  - x  4
! ~ $x [1-3]- x = 4

the shell doesn't understand numbers.

outside the shell, hoc or awk are alternatives to test

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-31 Thread erik quanstrom
 There have been many fixes to BWK's code since then. If you're going to
 start over, it should be done from his current code, available from
 his Princeton home page.

9atom's awk has been updated with bwk's recent source.  it also has a fix for 
the problem
sometimes seen with plan 9 installs where a score looks enough like floating 
point that
awk tries to treat it as such and gets a fp exception in the process.

i would consider adding pure extensions, such as %C, or the ability to deal 
with hex.

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-30 Thread erik quanstrom
On Sat May 30 13:36:14 PDT 2015, s...@9front.org wrote:
 On May 30, 2015, at 11:54 AM, erik quanstrom quans...@quanstro.net wrote:
 
  I would very much like to see this fast and conformant, so that APE
  awk can be thrown in the trash.
  
  i don't understand this.  awk is bwk's ota source, with some minor tweaks 
  to fit the
  environment.  it works well, and allows portable awk to be written.  can you
  explain what is to be gained by a re do?  i don't think doesn't use ape 
  per ce
  is a good argument.  it would have to be explained what this enables.  i 
  can't see
  that part.
  
  - erik
 
 if i understood correctly, the major reasons were better unicode handling and 
 not using sh for system().

using rc instead of /bin/ape/sh is a a bind away.  similarly, adding %C to awk 
is also trivial.
but there are compatability tradeoffs.  (i used rune/uconv (see rune(1), 
http://sources.9atom.org/magic/man2html/1/rune)

this doesn't seem like motiviation to rewrite awk.  there must be another 
reason?

by the way, thinking a bit bigger, what i'd like to see is x, where x is to awk 
as rc is to the
bourne shell.  

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-30 Thread erik quanstrom
On Sat May 30 21:43:03 PDT 2015, k...@sciops.net wrote:
 Quoting arn...@skeeve.com:
 
  BWK has said that malloc affects the performance of his awk; I think
  it's in his README file.
 
 Yes, it was explained to me that plan 9 malloc does useful things instead
 of just shoving things into the first available hole like APE malloc.

instead of guessing, you could see if the pool library's checks are really a 
bottleneck.
it is straightforward to add header and tail magic and the callerpc stuff to ape
malloc and run the comparsion again.

otherwise, it seems far more likely that the problem is that quicklicks are
faster than tree allocators.

 I'm reasonably certain Moore's Law has fixed this issue for all
 practical applications, however...

i'm resonablly certain that plan 9 malloc's poor performance has cost me quite
a bit of work.

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-30 Thread erik quanstrom
On Sat May 30 22:02:11 PDT 2015, quans...@quanstro.net wrote:
 On Sat May 30 21:43:03 PDT 2015, k...@sciops.net wrote:
  Quoting arn...@skeeve.com:
  
   BWK has said that malloc affects the performance of his awk; I think
   it's in his README file.
  
  Yes, it was explained to me that plan 9 malloc does useful things instead
  of just shoving things into the first available hole like APE malloc.
 
 instead of guessing, you could see if the pool library's checks are really a 
 bottleneck.
 it is straightforward to add header and tail magic and the callerpc stuff to 
 ape
 malloc and run the comparsion again.
 
 otherwise, it seems far more likely that the problem is that quicklicks are
 faster than tree allocators.

also, ape %f/%g are much faster than the native version.

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-30 Thread erik quanstrom
 I would very much like to see this fast and conformant, so that APE
 awk can be thrown in the trash.

i don't understand this.  awk is bwk's ota source, with some minor tweaks to 
fit the
environment.  it works well, and allows portable awk to be written.  can you
explain what is to be gained by a re do?  i don't think doesn't use ape per ce
is a good argument.  it would have to be explained what this enables.  i can't 
see
that part.

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-30 Thread erik quanstrom
 Personally, it's just one more reason to reduce our nation's dependence on
 foreign code -- does anyone want to help test pap's native awk?

pretty difficult to do if there is a desire to use git or hg.

- erik



Re: [9fans] Ports tree for Plan 9

2015-05-29 Thread erik quanstrom
On Wed May 27 12:51:19 PDT 2015, cinap_len...@felloff.net wrote:
  A potential bug in APE sys/wait.h : the header does not make sure that 
  pid_t 
  has been defined.
  Compiling sbase on Plan9/APE ended up in situations where there were lots 
  of 
  compilation faliures simply because sys/wait.h was included without 
  sys/types.h being included before.
 
 fixed.

uh, i just read the open group spec.  i did not see the requirement that wait.h
define pid_t.  if someone could site chapter and verse, i would be happy to add
the include, but it would seem hasty without a standards citation.

- erik



<    1   2   3   4   5   6   7   8   9   10   >