From cse.psu.edu!9fans-admin Fri Nov 1 01:15:31 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 01:15:31 JST 2002 Received: (qmail 22351 invoked by uid 1020); 1 Nov 2002 01:15:30 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 22347 invoked from network); 1 Nov 2002 01:15:30 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 01:15:30 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 276DF19A66; Thu, 31 Oct 2002 11:15:15 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from fbsd.acl.lanl.gov (fbsd.acl.lanl.gov [128.165.147.119]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 940D7199B3 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 11:14:23 -0500 (EST) Received: (qmail 62492 invoked by uid 18927); 31 Oct 2002 16:08:19 -0000 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 31 Oct 2002 16:08:19 -0000 From: andrey mirtchovski X-X-Sender: andrey@fbsd.acl.lanl.gov To: 9fans@cse.psu.edu Message-ID: <20021031090700.N57498-100000@fbsd.acl.lanl.gov> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: [9fans] straight out of slashdot Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 09:08:19 -0700 (MST) http://www.nytimes.com/2002/10/31/technology/circuits/31prof.html?pagewanted=print&position=top though, he doesn't mention plan 9 From cse.psu.edu!9fans-admin Fri Nov 1 01:21:27 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 01:21:27 JST 2002 Received: (qmail 22401 invoked by uid 1020); 1 Nov 2002 01:21:26 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 22397 invoked from network); 1 Nov 2002 01:21:26 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 01:21:26 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id BCDD4199E4; Thu, 31 Oct 2002 11:21:14 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id D691B19981 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 11:20:27 -0500 (EST) Message-ID: <2f372c58a7a1f2420e17473cdaae7051@plan9.bell-labs.com> From: presotto@plan9.bell-labs.com To: 9fans@cse.psu.edu Subject: Re: [9fans] straight out of slashdot MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-vzkfyvittzmhhtamydzsimxigv" Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 11:20:24 -0500 This is a multi-part message in MIME format. --upas-vzkfyvittzmhhtamydzsimxigv Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Brian was never really interested in plan 9. --upas-vzkfyvittzmhhtamydzsimxigv Content-Type: message/rfc822 Content-Disposition: inline Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Thu Oct 31 11:15:27 EST 2002 Received: from mail.cse.psu.edu ([130.203.4.6]) by plan9; Thu Oct 31 11:15:26 EST 2002 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 9EE9119A64; Thu, 31 Oct 2002 11:15:13 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from fbsd.acl.lanl.gov (fbsd.acl.lanl.gov [128.165.147.119]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 940D7199B3 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 11:14:23 -0500 (EST) Received: (qmail 62492 invoked by uid 18927); 31 Oct 2002 16:08:19 -0000 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 31 Oct 2002 16:08:19 -0000 From: andrey mirtchovski X-X-Sender: andrey@fbsd.acl.lanl.gov To: 9fans@cse.psu.edu Message-ID: <20021031090700.N57498-100000@fbsd.acl.lanl.gov> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: [9fans] straight out of slashdot Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 09:08:19 -0700 (MST) http://www.nytimes.com/2002/10/31/technology/circuits/31prof.html?pagewanted=print&position=top though, he doesn't mention plan 9 --upas-vzkfyvittzmhhtamydzsimxigv-- From cse.psu.edu!9fans-admin Fri Nov 1 03:22:30 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 03:22:30 JST 2002 Received: (qmail 23449 invoked by uid 1020); 1 Nov 2002 03:22:29 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 23445 invoked from network); 1 Nov 2002 03:22:28 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 03:22:28 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id F11E619A6B; Thu, 31 Oct 2002 13:22:14 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id CA51E19A55 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 13:21:13 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id g9VILB46008199 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 10:21:12 -0800 (PST) Message-ID: <67107739c028c1633ff711d4cfb24b99@centurytel.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 09:38:00 -0500 I thought the irony was obvious enough that I didn't need the smiley face. Honestly, you need to chill. >> Anyway, use of colloquialism or slang in an international forum just >> sticks in my craw and is as useless as balls on heifer. > > Then don't do it, don't get involved in such discussions. But it > demonstrates a certain lack of respect to dis other people who seem > comfortable with it. As to utility, I don't think your individual opinion > should be forced on others. Do you? How would you like -me- making such > decisions about -you-? From cse.psu.edu!9fans-admin Fri Nov 1 03:22:48 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 03:22:48 JST 2002 Received: (qmail 23468 invoked by uid 1020); 1 Nov 2002 03:22:47 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 23464 invoked from network); 1 Nov 2002 03:22:46 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 03:22:46 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id C785519A74; Thu, 31 Oct 2002 13:22:27 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id BEF29199B6 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 13:21:00 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id NAA26729 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 13:21:00 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id g9VIL0i04896 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 13:21:00 -0500 (EST) Message-Id: <200210311821.g9VIL0i04896@augusta.math.psu.edu> To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system In-Reply-To: Your message of "Thu, 31 Oct 2002 07:58:38 CST." From: Dan Cross Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 13:21:00 -0500 > > Anyway, use of colloquialism or slang in an international forum just > > sticks in my craw and is as useless as balls on heifer. > > Then don't do it, don't get involved in such discussions. But it > demonstrates a certain lack of respect to dis other people who seem > comfortable with it. As to utility, I don't think your individual opinion > should be forced on others. Do you? How would you like -me- making such > decisions about -you-? > > The idea -isn't- to lower the bar to some commen level. Just jump higher > if you feel the need. Otherwise, move to a different event. > > The -really- funny thing about his sort of stuff is the people doing the > complaining are -the- ones turning it into a flame fest. Uhh, ``sticks in my craw'' and ``useless as balls on a heifer'' are both colloquialisms. I think Skip was making a joke. - Dan C. From cse.psu.edu!9fans-admin Fri Nov 1 05:47:34 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 05:47:34 JST 2002 Received: (qmail 24490 invoked by uid 1020); 1 Nov 2002 05:47:33 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 24486 invoked from network); 1 Nov 2002 05:47:32 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 05:47:32 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 45A7D199BB; Thu, 31 Oct 2002 15:47:17 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from tractor.meridian.wednet.edu (tractor.meridian.wednet.edu [164.116.190.5]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id EFBD019991 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 15:46:42 -0500 (EST) Received: from tractor.meridian.wednet.edu [164.116.190.5] by tractor.meridian.wednet.edu (SMTPD32-6.06) id A38512E001DA; Thu, 31 Oct 2002 12:33:09 -0800 Received: FROM nas.com BY tractor.meridian.wednet.edu ; Thu Oct 31 12:33:08 2002 -0800 Message-ID: <3DC196AF.4070007@nas.com> From: Jack Johnson User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2a) Gecko/20020910 X-Accept-Language: en-us, en MIME-Version: 1.0 To: 9fans@cse.psu.edu References: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Subject: [9fans] rc on U/WIN? Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 12:46:39 -0800 Has anyone tried compiling the Rakitzis/Goodwin version of rc under U/WIN with the GNU dev toolchain? I've read that U/WIN is much happier about compiling random UNIX source out of the box than Cygwin, but I have to admit that I haven't tried it (yet) under either. I'm just fishing for some wholeheartedly subjective opinions. -Jack From cse.psu.edu!9fans-admin Fri Nov 1 06:21:35 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 06:21:35 JST 2002 Received: (qmail 24768 invoked by uid 1020); 1 Nov 2002 06:21:34 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 24764 invoked from network); 1 Nov 2002 06:21:33 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 06:21:33 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2A4FD19A6F; Thu, 31 Oct 2002 16:21:25 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id EF8A0199BB for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:20:16 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id QAA28892 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:20:16 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id g9VLKGi06485 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:20:16 -0500 (EST) Message-Id: <200210312120.g9VLKGi06485@augusta.math.psu.edu> To: 9fans@cse.psu.edu MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0" Content-ID: <6479.1036099195.0@augusta.math.psu.edu> From: Dan Cross Subject: [9fans] find(1) revisited. Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 16:20:16 -0500 ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <6479.1036099195.1@augusta.math.psu.edu> So find sucks, but is inarguably useful, and I've found myself missing it before. What would be a better solution, I've wondered? Here's a proposal for one I think fits in much nicer. Find basically does the following job: Walk a set of specified directory trees, apply a set of predicates to the contents, and perform some action if the result is true. However, find could be thought of as a pipeline of filters that operate on a stream of filenames; discarding some that don't find some criteria, and printing the rest to the next stage. The final stage of the pipeline performs some action, such as printing the file names or making them arguments to some command. So, I wrote two commands: walk, and sor. Walk walks over a directory tree, printing it's contents, possibly with quoting in the style of the new "%q" format (using ls's ``lsquote'' routine), and possibly with a limitation on the depth to which it'll descend. Sor (Stream OR, get it?) is an rc script that reads a set of filenames from it's input, and applies a set of tests to them, echoing those names that pass a test, discarding the rest. The effect is that one can now create arbitrary pipelines that mimic what find does under Unix, only are much more flexible. It isn't the fastest thing in the world, but it works, and seems to work pretty well. Now, I think sor is genuinely useful, but why walk when we have du -a? Two reasons. (1) du is the program to collect disk usage statistics, not the program to do general walks of a file tree. As such, it misses a feature to limit depth, and contains logic to make sure it doesn't ``count'' a file twice. That's useful for du, but not really for a general file walker; what if I want to see all names of a file? What if I want to look for multiple names with the same qid? It certainly makes no sense to augment du with that functionality: du is the disk usage summarizer, not the general file tree walker. Also, not being able to limit the depth of one's search can be annoying. What if I want to look for a file, but only in the first three levels of a hierarchy? It can be argued that it might be useful to summarize the disk usage information of everything up to n levels in a hierarchy, but I'd argue that that's not generally useful enough to warrant a change to du. Besides, what if I wanted to find all the names of a given file within n levels in a hierarchy? It could be argued that du could be used along with some clever sed script to achieve the effect of depth limiting, but we still loose the ability to see a file more than once. Hence walk. Anyway, I append both here in case others find them useful. It'd be nice to see them go into the distrubition if there's enough general appeal (and if they don't suck too badly). In any event, some feedback on the idea and the tools would be nice. - Dan C. ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <6479.1036099195.2@augusta.math.psu.edu> /* * Walk a directory tree, in the style of du(1), * but with some additional flourishes. * * Dan Cross */ #include #include static int mkdepth(int); static char *mkname(char *, int *, char *, char *); static void walk(char *, int, int); static void walkname(char *, int, int); static int walkquote(int c); char *fmt; void main(int argc, char *argv[]) { char *dir; int depth; Dir *d; dir = "."; fmt = "%s\n"; depth = -1; ARGBEGIN { case 'd': depth = atoi(ARGF()); break; case 'q': quotefmtinstall(); doquote = walkquote; fmt = "%q\n"; break; }ARGEND if (argc == 0) walkname(".", depth, 1); else { for (dir = *argv; dir; dir = *++argv) { if ((d = dirstat(dir)) == nil) { fprint(2, "dirstat %s: %r\n", dir); continue; } walkname(dir, depth, d->mode & DMDIR); free(d); } } exits(0); } /* Cribbed from ls(1) source. */ static int walkquote(int c) { if (c <= ' ' || strchr("`^#*[]=|\?${}()'", c)) return(1); return(0); } static void walkname(char *dirname, int depth, int isdir) { int fd; if (strcmp(dirname, ".") != 0 && strcmp(dirname, "..") != 0) print(fmt, dirname); if (isdir) { fd = open(dirname, OREAD); if (fd < 0) { fprint(2, "open %s: %r\n", dirname); return; } walk(dirname, fd, depth); close(fd); } } static char * mkname(char *name, int *l, char *basename, char *filename) { char *nname; int t; t = strlen(basename) + 1 + strlen(filename) + 1; if (*l == 0 || name == nil) { *l = t; name = malloc(t); if (name == nil) sysfatal("malloc %d: %r\n", l); } else if (*l < t) { nname = realloc(name, t); if (nname == nil) { free(name); sysfatal("malloc %d: %r\n", l); } *l = t; name = nname; } snprint(name, t, "%s/%s", basename, filename); cleanname(name); return(name); } static int mkdepth(int depth) { return((depth == -1) ? depth : depth - 1); } static void walk(char *dirname, int fd, int depth) { Dir *dir, *dp; char *name, *nname; int i, l, n, t; if (depth == 0) return; l = 0; name = nil; n = dirreadall(fd, &dir); for (dp = dir, i = 0; i < n; dp++, i++) { if (strcmp(dp->name, ".") == 0 || strcmp(dp->name, "..") == 0) continue; name = mkname(name, &l, dirname, dp->name); walkname(name, mkdepth(depth), dp->mode & DMDIR); } free(dir); if (name != nil) free(name); } ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <6479.1036099195.3@augusta.math.psu.edu> #!/bin/rc rfork e fn runtests { file=$1; shift while (! ~ $#* 0 && ! eval $1 ''''^$file^'''') shift if (! ~ $#* 0) echo $file } while (file = `{read}) { runtests $file $* } ------- =_aaaaaaaaaa0-- From cse.psu.edu!9fans-admin Fri Nov 1 06:32:58 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 06:32:58 JST 2002 Received: (qmail 24831 invoked by uid 1020); 1 Nov 2002 06:32:47 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 24827 invoked from network); 1 Nov 2002 06:32:46 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 06:32:46 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.30.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 7978C19A6B; Thu, 31 Oct 2002 16:32:42 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 30AB619981 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:31:10 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id g9VLV846015200 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 13:31:08 -0800 (PST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] rc on U/WIN? From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 12:47:57 -0500 > I'm just fishing for some wholeheartedly subjective > opinions. My experience a couple of years ago with U/Win and Cygwin was that U/Win smoothed over the differences of the environments better. My conclusion is based on a couple of small projects. 9pm is excellent if you're looking for a Plan9 environment on windows; but you probably knew that. From cse.psu.edu!9fans-admin Fri Nov 1 06:59:24 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 06:59:24 JST 2002 Received: (qmail 25013 invoked by uid 1020); 1 Nov 2002 06:59:23 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 25009 invoked from network); 1 Nov 2002 06:59:23 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 06:59:23 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.30.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4E00319A75; Thu, 31 Oct 2002 16:59:14 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 9B1E419A89 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:58:01 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id QAA05709 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:58:01 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id g9VLw1i06685 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 16:58:01 -0500 (EST) Message-Id: <200210312158.g9VLw1i06685@augusta.math.psu.edu> To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. In-Reply-To: Your message of "Thu, 31 Oct 2002 16:20:16 EST." <200210312120.g9VLKGi06485@augusta.math.psu.edu> From: Dan Cross Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 16:58:01 -0500 Oh! I forgot to say how to use these. Sorry, my bad. Basically, compile walk and put it and sor in your bin directories. Walk takes ``-d n'' to limit the depth of the walk to the nth level in the target directory (walk -d 0 prints nothing), and ``-q'' to quote the output in the style of ls(1). These can of course be used in concert. For example, `walk -d 3 -q /dev' prints out everything up to 3 levels deep in /dev, quoting everything that needs to be. `walk -d 3 -q /dev /env' might be a better demonstration, as I think it's a rare thing indeed that something in /dev needs to be quoted. Sor works sort of like grep, except that you pass it tests. For instance, `walk -d 3 -q /dev /env | sor 'test -d' '' will print out the names of all the directories up to depth 3 in /dev and /env. Multiple tests can be put on the same line, effectively creating a logical `or' operator. For example, walk -d 3 -q /sys/lib | sor 'test -d' 'test -x' (interestingly, this shows /sys/lib/ghostscript/font/mkfile is executable on my system; how odd.) Of course, the usual combinations with grep, sed, etc, will work. A few Unix find idioms and their translations are: unix% find $home -name '*foo*' -print term% walk $home | grep foo unix% find $home -name '*foo*' -type d -print term% walk $home | grep foo | sor 'test -d' unix% find $home '(' -name '*foo*' -o -name '*bar*' ')' -type d -print term% walk $home | grep '(foo|bar)' | sor 'test -d' unix% find $home/* $home/*/* -prune '(' -name '*foo*' -o -name '*bar*' ')' -type d -print term% walk -d 2 $home | grep '(foo|bar)' | sor 'test -d' unix% find $home -name foo.c -exec ls '{}' ';' term% ls `{walk $home | grep '^foo.c$'} Incidentally, sor internally sets the environment variable ``file'' to the name of the current file being examined. This can be useful for some tests. For example: term% walk -d 1 | sor '/sys/lib/texmf/bin/386/newer $file' Which is basically a goofy way of printing the names of files in the current directory. Or the perhaps more useful: term% walk -d 1 | sor 'grep README $file > /dev/null' Which is a goofy way of doing: grep -l README `{walk -d 1} Anyway, further examples exist, but already the combination of walk and sor is just as expressive, but a lot shorter and simpler than find, et al. Also, it's easy to write other programs that perform tests similar to the rest of the find predicates (I have some simple scripts, for instance, that pull the size and owner/group of a file out of ls -l's output). - Dan C. From cse.psu.edu!9fans-admin Fri Nov 1 09:41:28 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 09:41:28 JST 2002 Received: (qmail 27363 invoked by uid 1020); 1 Nov 2002 09:41:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 27359 invoked from network); 1 Nov 2002 09:41:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 09:41:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 6B2C619A76; Thu, 31 Oct 2002 19:41:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from tractor.meridian.wednet.edu (tractor.meridian.wednet.edu [164.116.190.5]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8507019A75 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 19:40:20 -0500 (EST) Received: from tractor.meridian.wednet.edu [164.116.190.5] by tractor.meridian.wednet.edu (SMTPD32-6.06) id AA47B4360168; Thu, 31 Oct 2002 16:26:47 -0800 Received: FROM nas.com BY tractor.meridian.wednet.edu ; Thu Oct 31 16:26:46 2002 -0800 Message-ID: <3DC1CD72.10305@nas.com> From: Jack Johnson User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2a) Gecko/20020910 X-Accept-Language: en-us, en MIME-Version: 1.0 To: 9fans@cse.psu.edu Subject: Re: [9fans] rc on U/WIN? References: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 16:40:18 -0800 Skip Tavakkolian wrote: > 9pm is excellent if you're looking for a Plan9 environment on windows; > but you probably knew that. I find it's a little too good. FINGERS: "lc" MOUTH: "Damn!" I'm also thinking of rewriting some of the little tools I use so they work relatively well whether I'm on Linux or Windows or Plan 9 (much like Dan missing 'find') and I don't care for bash as much as I used to. I like rxvt on Windows (when I'm stuck on Windows) because X-style copy & paste is hard for me to unlearn (I always want to stop and read the menus in rio/9term, and I reflexively try to use the history when I'm busy), and it just seems natural to want to replace bash with rc so I can just keep copying & pasting my way through life. (No original thought here. Move along.) -Jack From cse.psu.edu!9fans-admin Fri Nov 1 09:48:15 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 09:48:15 JST 2002 Received: (qmail 27525 invoked by uid 1020); 1 Nov 2002 09:48:15 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 27521 invoked from network); 1 Nov 2002 09:48:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 09:48:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id D545D19A7D; Thu, 31 Oct 2002 19:48:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 85AE21998C for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 19:47:45 -0500 (EST) Message-ID: <6216a59ca1c9f5ca6089a591aa990d30@collyer.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 16:47:33 -0800 I'm just curious: what sorts of things did you do with find that you find impossible or too awkward to do with du? The main things I can recall using find for were finding set-id files (not an issue on Plan 9), finding core files (ditto), or finding files older than some date (I use "du -ta" for that). I haven't missed find. From cse.psu.edu!9fans-admin Fri Nov 1 11:10:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 11:10:17 JST 2002 Received: (qmail 29891 invoked by uid 1020); 1 Nov 2002 11:10:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 29887 invoked from network); 1 Nov 2002 11:10:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 11:10:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 9FF9E19991; Thu, 31 Oct 2002 21:10:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id ECB8D19A02 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 21:09:38 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id VAA13055 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 21:09:38 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id gA129ci07736 for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 21:09:38 -0500 (EST) Message-Id: <200211010209.gA129ci07736@augusta.math.psu.edu> To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. In-Reply-To: Your message of "Thu, 31 Oct 2002 16:47:33 PST." <6216a59ca1c9f5ca6089a591aa990d30@collyer.net> From: Dan Cross Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 21:09:38 -0500 It was the longer permutations; mainly what I missed was finding files owned by certain people (for instance, what do I own in /sys/src?). Looking for files with certain permissions is also useful (what's world writable?). That sort of stuff. Also, I kind of wanted to be able to limit the depth of a search, and du seemed inappropriate for that. - Dan C. From cse.psu.edu!9fans-admin Fri Nov 1 14:01:43 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 14:01:43 JST 2002 Received: (qmail 2922 invoked by uid 1020); 1 Nov 2002 14:01:32 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 2918 invoked from network); 1 Nov 2002 14:01:31 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 14:01:31 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 21C46199BB; Fri, 1 Nov 2002 00:01:16 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from cackle.proxima.alt.za (cackle.proxima.alt.za [196.30.44.141]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id DCC4F19A6C for <9fans@cse.psu.edu>; Thu, 31 Oct 2002 23:59:59 -0500 (EST) Received: from niggle.hq.iba.co.za (server.iba.co.za [196.30.44.140]) by cackle.proxima.alt.za (8.12.3/8.12.3) with SMTP id gA14xqx8027587 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 06:59:58 +0200 (SAST) Message-ID: <99d3c18c199e0f08daa8f011d7a692b0@proxima.alt.za> To: 9fans@cse.psu.edu X-Mailer: acme From: lucio@proxima.alt.za MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] Niggles Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 03:08:56 +0200 Just a few oddities with a recent version of Plan 9. 1. In text mode, the keyboard handler seems to be a little erratic. In RIO no problems seem to occur. The behaviour seems to be caused by the occasional backspace and consists of the addition of spurious characters that are not echoed to the screen. Hard to describe, even harder to pinpoint. The most common situation is an invalid command name or command argument value that has a space or some other character in it not present in the command line itself. It is frequent enough to be a bit of a bother on an auth or cpu server. I can't recall if I ever encountered on the FS. I think the problem appeared in 4th Edition, I can probably check later this month. Hm, I haven't ever checked if switching to VGA mode makes a difference or not. 2. My Intellimouse seems to be misunderstood: the right button quite regularly starts duplicating the middle button function in RIO, SAM and ACME; a wloc command in any window restores it to its more useful behaviour. I only noticed this recently, I'm using a stand-alone workstation with the second ISO image (the one I asked Russ about a few days before its recent release - I think it's current, send me a digest and I'll compare). 3. I started getting vncv lockouts so I switched to a newer workstation, keeping the disks unchanged and the lockouts as well as frequent vncv failures have stopped. I find this quite baffling, but not unexpected. I also have a Gygabyte motherboard that seems incapable of handling any OSes like Plan 9, NetBSD or WinNT that need real memory protection. I think it's MMU related. Hm, could be CPU-related, too, the chip is Cyrix/IBM rather than Intel, but I think I tried a different CPU once. Can't think of anything else presently, I may follow up on this if I recall or encounter any other small issues that one can easily live with. ++L From cse.psu.edu!9fans-admin Fri Nov 1 14:07:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 14:07:17 JST 2002 Received: (qmail 3128 invoked by uid 1020); 1 Nov 2002 14:07:15 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 3124 invoked from network); 1 Nov 2002 14:07:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 14:07:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id CC45119A7A; Fri, 1 Nov 2002 00:07:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id AF88819A75 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 00:06:47 -0500 (EST) Message-ID: <0394cbfb2c4ecc3d90d0b2a8d9f8bf20@collyer.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] Niggles From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Thu, 31 Oct 2002 21:06:28 -0800 I've seen the invisible spurious character business on CPU server consoles with the serial console enabled, but while typing on the PS2 keyboard and watching the CGA display. I think it's new in 4e. From cse.psu.edu!9fans-admin Fri Nov 1 18:45:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 18:45:17 JST 2002 Received: (qmail 11331 invoked by uid 1020); 1 Nov 2002 18:45:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 11327 invoked from network); 1 Nov 2002 18:45:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 18:45:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 6EBEF19992; Fri, 1 Nov 2002 04:45:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id E5A4E1998C for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 04:44:00 -0500 (EST) Message-ID: <71ed15d151980331661063c9918daaeb@collyer.net> From: Geoff Collyer To: 9fans@collyer.net MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] jukebox configuration changes Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 01:43:59 -0800 I've just modified the file server kernel to cope with different DSIZEs (optical disc sizes) per jukebox and even per disc. It's now also possible to change FIXEDSIZES in /sys/src/fs/*/9*.c rather than having to edit dev/juke.c before compiling each distinct kernel. The way it used to work was that DSIZE was the size in RBUFSIZE-byte blocks of each optical disc *side*. However, it is possible to use discs of different sizes within a single jukebox: you set FIXEDSIZES to 0 and pay with a delay at each boot while the file server pulls each disc side in and asks the drive how big it is. It's probably wiser to use discs of the same size and set FIXEDSIZES to 1, which makes the file server just look at one disc and assume that all the sides are the size of its. So DSIZE was only used for computing the statistics that "statw" prints on the console, for working out sizes in the cache save and restore commands, and in the implementation of "check touch". Those operations could be led astray if DSIZE wasn't the size in Plan 9 blocks of all the optical discs in all jukeboxes on a given file server. If one wanted to put a jukebox with 5.2GB discs and one with 2.6GB discs on the same file server, it wouldn't work perfectly. DSIZE is gone. It's now possible to mix jukeboxes with discs of different sizes, and even, if you're willing to put up with the delays, to use discs of different sizes within a single jukebox, and everything should now work right. The whole thing compiles but I want to test it tomorrow (after the third jukebox arrives) before I offer the code to anyone else. From cse.psu.edu!9fans-admin Fri Nov 1 18:53:15 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 18:53:15 JST 2002 Received: (qmail 11461 invoked by uid 1020); 1 Nov 2002 18:53:14 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 11457 invoked from network); 1 Nov 2002 18:53:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 18:53:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id F36B719A6F; Fri, 1 Nov 2002 04:53:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mercury.bath.ac.uk (mercury.bath.ac.uk [138.38.32.81]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 462DC19A3E for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 04:52:29 -0500 (EST) Received: from news by mercury.bath.ac.uk with local (Exim 3.12 #1) id 187YGb-000393-00 for 9fans@cse.psu.edu; Fri, 01 Nov 2002 09:39:01 +0000 Received: from GATEWAY by bath.ac.uk with netnews for 9fans@cse.psu.edu (9fans@cse.psu.edu) To: 9fans@cse.psu.edu From: Joel Salomon Message-ID: Organization: http://groups.google.com/ Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit References: Subject: Re: [9fans] (no longer) WebDAV file system Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 09:37:22 GMT fst@centurytel.net (Skip Tavakkolian) wrote in message > > Anyway, use of colloquialism or slang in an international forum just > sticks in my craw and is as useless as balls on heifer. Or to paraphrase Robert Heinlein "I am inhibited in expressing myself by the presence of a non-native English speaker ; therefore I cannot adequately discuss the ancestry, personal habits, morals, and destination of those who use "enjoy colorfull conversations" in presence of such" ;-) --Joel __________________________________________________________________________ Due to economic circumstances, the light at the end of the tunnel has been turned off. __________________________________________________________________________ From cse.psu.edu!9fans-admin Fri Nov 1 19:32:12 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 19:32:12 JST 2002 Received: (qmail 12062 invoked by uid 1020); 1 Nov 2002 19:32:11 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 12058 invoked from network); 1 Nov 2002 19:32:11 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 19:32:11 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2FE4B19A74; Fri, 1 Nov 2002 05:31:34 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from nigel.9fs.org (cotswold.demon.co.uk [194.222.75.186]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 656BE19A6C for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 05:27:44 -0500 (EST) Message-ID: To: 9fans@cse.psu.edu From: nigel@9fs.org MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] full text search Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 10:27:34 0000 I'd like to offline (= overnight) index 'text' files so I can search them. Examples would be email, source code. Any recommendations of suitable code to port? I looked at glimpse, but was unsure about the license. From cse.psu.edu!9fans-admin Fri Nov 1 20:55:18 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 20:55:18 JST 2002 Received: (qmail 13354 invoked by uid 1020); 1 Nov 2002 20:55:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 13350 invoked from network); 1 Nov 2002 20:55:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 20:55:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 1A50519988; Fri, 1 Nov 2002 06:55:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from theraft.strakt.com (theraft.strakt.com [62.13.29.34]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8C29319A66 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 06:54:31 -0500 (EST) Received: from strakt.com (boyd@zode.strakt.com [62.13.29.39]) by theraft.strakt.com (8.12.3/8.12.3/Debian -4) with ESMTP id gA1Brbc5013581 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:54:13 +0100 Message-ID: <3DC26B41.7080905@strakt.com> From: Boyd Roberts User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1 X-Accept-Language: en MIME-Version: 1.0 To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. References: <6216a59ca1c9f5ca6089a591aa990d30@collyer.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 01 Nov 2002 12:53:37 +0100 Geoff Collyer wrote: >I'm just curious: what sorts of things did you do with find that you >find impossible or too awkward to do with du? > I guess, in the old days, find made it quicker, but now we don't care, 'cos du | grep is pretty quick. From cse.psu.edu!9fans-admin Fri Nov 1 20:57:10 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 20:57:11 JST 2002 Received: (qmail 13394 invoked by uid 1020); 1 Nov 2002 20:57:10 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 13390 invoked from network); 1 Nov 2002 20:57:10 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 20:57:10 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 6DF37199B3; Fri, 1 Nov 2002 06:57:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from theraft.strakt.com (theraft.strakt.com [62.13.29.34]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2394919A02 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 06:56:10 -0500 (EST) Received: from strakt.com (boyd@zode.strakt.com [62.13.29.39]) by theraft.strakt.com (8.12.3/8.12.3/Debian -4) with ESMTP id gA1BQbc5013273 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:27:17 +0100 Message-ID: <3DC264EC.3030704@strakt.com> From: Boyd Roberts User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1 X-Accept-Language: en MIME-Version: 1.0 To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system References: <200210311821.g9VIL0i04896@augusta.math.psu.edu> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 01 Nov 2002 12:26:36 +0100 Dan Cross wrote: >I think Skip was making a joke. > Really? How _can_ you say _that_? From cse.psu.edu!9fans-admin Fri Nov 1 21:02:25 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 21:02:25 JST 2002 Received: (qmail 13454 invoked by uid 1020); 1 Nov 2002 21:02:14 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 13450 invoked from network); 1 Nov 2002 21:02:13 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 21:02:13 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id B5C7819A7A; Fri, 1 Nov 2002 07:02:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from theraft.strakt.com (theraft.strakt.com [62.13.29.34]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4B40019A31 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 07:01:53 -0500 (EST) Received: from strakt.com (boyd@zode.strakt.com [62.13.29.39]) by theraft.strakt.com (8.12.3/8.12.3/Debian -4) with ESMTP id gA1C1rc5013692 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 13:01:53 +0100 Message-ID: <3DC26D30.1090008@strakt.com> From: Boyd Roberts User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1 X-Accept-Language: en MIME-Version: 1.0 To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. References: <200210312120.g9VLKGi06485@augusta.math.psu.edu> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 01 Nov 2002 13:01:52 +0100 Been there, done that :-) Shame you have to write walk in C, but at least it's small. From cse.psu.edu!9fans-admin Fri Nov 1 21:46:16 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Fri Nov 1 21:46:16 JST 2002 Received: (qmail 13863 invoked by uid 1020); 1 Nov 2002 21:46:15 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 13859 invoked from network); 1 Nov 2002 21:46:15 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 1 Nov 2002 21:46:15 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.30.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 3ABA119A89; Fri, 1 Nov 2002 07:46:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from ar.aichi-u.ac.jp (ar.aichi-u.ac.jp [202.250.160.40]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 6543A19A96 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 07:45:08 -0500 (EST) Received: from ar.aichi-u.ac.jp ([61.211.130.35]) by ar; Fri Nov 1 21:45:05 JST 2002 Subject: Re: [9fans] full text search Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v546) From: Kenji Arisawa To: 9fans@cse.psu.edu Content-Transfer-Encoding: 7bit In-Reply-To: Message-Id: X-Mailer: Apple Mail (2.546) Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 21:45:05 +0900 Hello Nigel, >I'd like to offline (= overnight) index 'text' files so I can search them. Examples >would be email, source code. Any recommendations of suitable code to port? >I looked at glimpse, but was unsure about the license. Look http://www.namazu.org/ Namazu is the most popular full-text search engine in Japan. It is assumed that text is written in ujis , I believe, but may be easy to support utf-8. The web site is written in English. Therefore you can read the documents. Kenji Arisawa From cse.psu.edu!9fans-admin Sat Nov 2 00:53:29 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 00:53:29 JST 2002 Received: (qmail 15744 invoked by uid 1020); 2 Nov 2002 00:53:19 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 15740 invoked from network); 2 Nov 2002 00:53:18 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 00:53:18 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.6.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 5342719A92; Fri, 1 Nov 2002 10:53:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mercury.bath.ac.uk (mercury.bath.ac.uk [138.38.32.81]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4B41A19A7A for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 10:52:25 -0500 (EST) Received: from news by mercury.bath.ac.uk with local (Exim 3.12 #1) id 187e2c-0004Iv-00 for 9fans@cse.psu.edu; Fri, 01 Nov 2002 15:48:58 +0000 Received: from GATEWAY by bath.ac.uk with netnews for 9fans@cse.psu.edu (9fans@cse.psu.edu) To: 9fans@cse.psu.edu From: will551 Message-ID: Organization: http://groups.google.com/ Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Subject: [9fans] Tcl Port Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 15:48:37 GMT hi Is there a tcl port available or one on the way for plan9? thanks will551 From cse.psu.edu!9fans-admin Sat Nov 2 02:23:27 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 02:23:27 JST 2002 Received: (qmail 16581 invoked by uid 1020); 2 Nov 2002 02:23:26 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16577 invoked from network); 2 Nov 2002 02:23:25 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 02:23:25 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 75A7D199B3; Fri, 1 Nov 2002 12:23:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (closedmind.org [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id B16E019A89 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:22:06 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Fri Nov 1 12:22:04 EST 2002 Received: from 141.154.232.39 ([141.154.232.39]) by plan9; Fri Nov 1 12:22:02 EST 2002 Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] Tcl Port From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:22:10 -0500 I started a Tcl port once, and it didn't look too hard to do inside the APE, but I just didn't care enough. From cse.psu.edu!9fans-admin Sat Nov 2 02:32:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 02:32:19 JST 2002 Received: (qmail 16629 invoked by uid 1020); 2 Nov 2002 02:32:18 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16625 invoked from network); 2 Nov 2002 02:32:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 02:32:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id AE59D199B3; Fri, 1 Nov 2002 12:32:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from 9srv.net (unknown [64.7.3.117]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id EEC9819A3E for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:31:25 -0500 (EST) Message-ID: From: a@9srv.net To: 9fans@cse.psu.edu Subject: Re: [9fans] Niggles MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:28:15 -0500 i disagree: i've seen it with 3e as well as 4e. on 3e, i'd observed it both via the regular serial ports and the avanstar port. but i get repeated characters only, not strictly spurious. i fairly frequently see things like this when typing via a ps2 keyboard at the cga console of my console server while C'd into another box: % ps pps: '/bin/pps' directory entry not found it's very disconcerting. ア From cse.psu.edu!9fans-admin Sat Nov 2 02:34:16 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 02:34:16 JST 2002 Received: (qmail 16637 invoked by uid 1020); 2 Nov 2002 02:34:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16633 invoked from network); 2 Nov 2002 02:34:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 02:34:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id AAEC819AAB; Fri, 1 Nov 2002 12:34:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (closedmind.org [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 7B9D119A9B for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:33:39 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Fri Nov 1 12:33:38 EST 2002 Received: from 141.154.232.39 ([141.154.232.39]) by plan9; Fri Nov 1 12:33:37 EST 2002 Message-ID: <7c7bab2000ffce0fe368c75f02278e74@plan9.bell-labs.com> To: 9fans@cse.psu.edu Subject: Re: [9fans] Niggles From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:33:36 -0500 here's the weird thing: explain why it doesn't happen in vga mode. From cse.psu.edu!9fans-admin Sat Nov 2 02:34:56 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 02:34:56 JST 2002 Received: (qmail 16644 invoked by uid 1020); 2 Nov 2002 02:34:56 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16640 invoked from network); 2 Nov 2002 02:34:55 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 02:34:55 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 3116719988; Fri, 1 Nov 2002 12:34:52 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from 9srv.net (unknown [64.7.3.117]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 1DC8019A78 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:34:00 -0500 (EST) Message-ID: <913d7a60837bce72ffbef1c5190d03de@9srv.net> From: a@9srv.net To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:31:49 -0500 this is great, dan. i need to play with it a bit more, but it looks really nice. got any suggestion for using sor to find files older/newer than, or with a modification/access time newer/older than a certain date? that and file ownership is probably what i used find for most. ア From cse.psu.edu!9fans-admin Sat Nov 2 02:42:58 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 02:42:58 JST 2002 Received: (qmail 16755 invoked by uid 1020); 2 Nov 2002 02:42:37 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16751 invoked from network); 2 Nov 2002 02:42:37 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 02:42:37 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 1B2B1199E3; Fri, 1 Nov 2002 12:42:34 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (closedmind.org [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id E8FD619A88 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 12:38:42 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Fri Nov 1 12:37:19 EST 2002 Received: from 141.154.232.39 ([141.154.232.39]) by plan9; Fri Nov 1 12:37:17 EST 2002 Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:37:26 -0500 use /386/bin/mtime (just pushed out to sources) to get the mtime as a decimal, and then do whatever you want. From cse.psu.edu!9fans-admin Sat Nov 2 04:15:23 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 04:15:23 JST 2002 Received: (qmail 17469 invoked by uid 1020); 2 Nov 2002 04:15:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 17465 invoked from network); 2 Nov 2002 04:15:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 04:15:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 43EDF19992; Fri, 1 Nov 2002 14:15:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 3364C19A78 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 14:14:03 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id OAA23190 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 14:14:02 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id gA1JE2i13963 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 14:14:02 -0500 (EST) Message-Id: <200211011914.gA1JE2i13963@augusta.math.psu.edu> To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. In-Reply-To: Your message of "Fri, 01 Nov 2002 13:01:52 +0100." <3DC26D30.1090008@strakt.com> From: Dan Cross Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 01 Nov 2002 14:14:02 -0500 Well, now that there's a perl port out there.... :-) - Dan C. From cse.psu.edu!9fans-admin Sat Nov 2 05:51:23 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 05:51:23 JST 2002 Received: (qmail 18218 invoked by uid 1020); 2 Nov 2002 05:51:22 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 18214 invoked from network); 2 Nov 2002 05:51:21 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 05:51:21 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id ECD0719A88; Fri, 1 Nov 2002 15:51:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from math.psu.edu (leibniz.math.psu.edu [146.186.130.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A7DAA19A88 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 15:50:16 -0500 (EST) Received: from augusta.math.psu.edu (augusta.math.psu.edu [146.186.132.2]) by math.psu.edu (8.9.3/8.9.3) with ESMTP id PAA22889 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 15:50:15 -0500 (EST) Received: from augusta.math.psu.edu (localhost [127.0.0.1]) by augusta.math.psu.edu (8.11.6+Sun/8.9.3) with ESMTP id gA1KoEi15571 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 15:50:14 -0500 (EST) Message-Id: <200211012050.gA1KoEi15571@augusta.math.psu.edu> To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system In-Reply-To: Your message of "Fri, 01 Nov 2002 12:26:36 +0100." <3DC264EC.3030704@strakt.com> From: Dan Cross Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 01 Nov 2002 15:50:14 -0500 > Really? How _can_ you say _that_? In the same I way I can say that Choate was mixing his cases in Russian. - Dan C. From cse.psu.edu!9fans-admin Sat Nov 2 06:09:21 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 06:09:21 JST 2002 Received: (qmail 18403 invoked by uid 1020); 2 Nov 2002 06:09:20 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 18399 invoked from network); 2 Nov 2002 06:09:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 06:09:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 7ABED19A66; Fri, 1 Nov 2002 16:09:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from rex.eecs.tulane.edu (rex.eecs.tulane.edu [129.81.132.1]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 47EF6199B3 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 16:09:00 -0500 (EST) Received: from (mlf@proteus [129.81.132.16]) by rex.eecs.tulane.edu with ESMTP id gA1L8WSE027774 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 15:08:32 -0600 (CST) Received: from localhost by proteus.eecs.tulane.edu; Fri, 1 Nov 2002 15:08:31 -0600 (CST) From: Mike Fletcher X-X-Sender: mlf@proteus To: 9fans@cse.psu.edu In-Reply-To: <200211012050.gA1KoEi15571@augusta.math.psu.edu> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: [9fans] VGA card not in lib/vgadb Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 15:08:31 -0600 (CST) Who can tell me what magic entries to use to get the following to work in Plan9 r4 ATI Rage 128 VR (identified in the VGA BIOS as 0xC0082="RAGE128 VR") I put the id string shown above in the most obvious place in /lib/vgadb; but I get errors saying vclk is out of range no matter what resolution I try. Monitor is multisync, CPU is Pent3/500MHz - both by Gateway. Any help will be appreciated. thanks, -Mike Fletcher Tulane University From cse.psu.edu!9fans-admin Sat Nov 2 06:10:16 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 06:10:16 JST 2002 Received: (qmail 18431 invoked by uid 1020); 2 Nov 2002 06:10:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 18427 invoked from network); 2 Nov 2002 06:10:15 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 06:10:15 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0939619A97; Fri, 1 Nov 2002 16:10:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 52B7B19A86 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 16:09:20 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA1L8jmQ011288 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 13:09:08 -0800 (PST) Message-ID: To: 9fans@cse.psu.edu From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Subject: [9fans] Plan9/Inferno based commercial products/services Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 12:25:25 -0500 I am compiling a list of existing (or announced) products, services and solutions that are based, literally or conceptually, on Plan9 (or Inferno). Here is a start: - Lucent's VPN Firewall Brick - Lucent's (NOT Datang Telecom Tech's ☺) PathStart Access Server - Vita Nuova's Inferno and Plan9 packages - AmericanVOD (www.americanvod.com) (??? not much info on this) - nCUBE VOD Server (I think it is based on 2/ed) Are there others? From cse.psu.edu!9fans-admin Sat Nov 2 06:21:20 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 06:21:20 JST 2002 Received: (qmail 18580 invoked by uid 1020); 2 Nov 2002 06:21:19 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 18576 invoked from network); 2 Nov 2002 06:21:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 06:21:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8515F19A9D; Fri, 1 Nov 2002 16:21:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from einstein.ssz.com (unknown [207.200.56.4]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id D8B0619A8E for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 16:20:19 -0500 (EST) Received: from localhost (ravage@localhost) by einstein.ssz.com (8.11.6/8.11.6/SuSE Linux 0.5) with ESMTP id gA1MI5t00405; Fri, 1 Nov 2002 16:18:06 -0600 From: Jim Choate To: <9fans@cse.psu.edu> Cc: , , Subject: Re: [9fans] Plan9/Inferno based commercial products/services In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN Content-Transfer-Encoding: QUOTED-PRINTABLE Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 16:18:03 -0600 (CST) On Fri, 1 Nov 2002, Skip Tavakkolian wrote: > I am compiling a list of existing (or announced) products, services > and solutions that are based, literally or conceptually, on Plan9 (or > Inferno). > > Here is a start: > > - Lucent's VPN Firewall Brick > - Lucent's (NOT Datang Telecom Tech's =E2=98=BA) PathStart Access Server > - Vita Nuova's Inferno and Plan9 packages > - AmericanVOD (www.americanvod.com) (??? not much info on this) > - nCUBE VOD Server (I think it is based on 2/ed) > > Are there others? I'm not sure, but possibly. I'm involved in starting a company built around various sorts of 24/365 on-call and contract IT and programming services built around Open Technology. Plan 9 and Inferno will feature in that to a significant degree. The company is In Silica, LLC. Though it will operate under a DBA (Open Forge). The Hangar 18 project is only one of the things we've got going. Our focus is on reliable distributed computing, global sign on, business informatics & automation. If all went well the paperwork hit the state's desk this afternoon. Should be in business (technically) sometime next week. If you would like more details please contact me directly. -- ____________________________________________________________________ We don't see things as they are, ravage@ssz.com we see them as we are. www.ssz.com jchoate@open-forge.org Anais Nin www.open-forge.org -------------------------------------------------------------------- From cse.psu.edu!9fans-admin Sat Nov 2 08:31:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 08:31:17 JST 2002 Received: (qmail 19399 invoked by uid 1020); 2 Nov 2002 08:31:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 19395 invoked from network); 2 Nov 2002 08:31:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 08:31:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 46A0B19A59; Fri, 1 Nov 2002 18:31:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from unicorn.math.spbu.ru (unicorn.math.spbu.ru [195.19.226.166]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id BF12319A06 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 18:30:40 -0500 (EST) Received: (from vugluskr@localhost) by unicorn.math.spbu.ru (8.9.3/8.9.3) id CAA30935 for 9fans@cse.psu.edu; Sat, 2 Nov 2002 02:30:39 +0300 From: "Roman V. Shaposhnick" To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system Message-ID: <20021102023038.B30740@unicorn.math.spbu.ru> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0pre3i In-Reply-To: Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 02:30:38 +0300 On Thu, Oct 31, 2002 at 07:58:38AM -0600, Jim Choate wrote: > > Da svidanya menya droog. hm. what's the name of this language? But anyway, it's not the one you intended it to be. Roman. From cse.psu.edu!9fans-admin Sat Nov 2 08:39:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 08:39:19 JST 2002 Received: (qmail 19467 invoked by uid 1020); 2 Nov 2002 08:39:14 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 19463 invoked from network); 2 Nov 2002 08:39:13 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 08:39:13 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2B00619A3E; Fri, 1 Nov 2002 18:39:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 7F025199E3 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 18:38:33 -0500 (EST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] Plan9/Inferno based commercial products/services From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 15:37:38 -0800 Are you counting only current products and services, or are you including ones from the past? PathStar is long dead and buried. From cse.psu.edu!9fans-admin Sat Nov 2 09:04:25 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 09:04:25 JST 2002 Received: (qmail 19714 invoked by uid 1020); 2 Nov 2002 09:04:15 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 19709 invoked from network); 2 Nov 2002 09:04:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 09:04:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id B284619A64; Fri, 1 Nov 2002 19:04:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id ACEBD199D5 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 19:03:33 -0500 (EST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] full text search From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 16:02:54 -0800 I've been meaning to port lq-text. It's relatively small and claimed to be 8-bit-clean. In the meantime, I use the scripts below, written in part to learn more about the problem. I index my mail each night from cron: 0 7 * * 0 cpu cd mbox && ftindex * */* >/n/other/index/mail I can then search the 95MB of it fairly quickly: : alpha; time ftlook -i $h/oth/index/mail boyd alpha firmware 2002oct25 9.1998 arch/9fans.2001jul11 arch/9fans.2001mar28 arch/9fans.2001nov16 arch/9fans.2001oct25 arch/9fans.2002aug11 arch/9fans.2002may13 arch/9fans.2002may27 arch/9fans.2002oct25 arch/9fans.2002sep18 0.05u 0.07s 0.26r ftlook -i /usr/geoff/oth/index/mail boyd alpha ... The named files contain all three words, ignoring case distinctions. ftlookword is specialised to use my mail index file and shows matching lines with line numbers: : alpha; time ftlookword mmc 9.1998:14172: in case of problems. the device name to use for the new yamahas is 'mmc' 9.1998:14175: 1) by default for now, an mmc device is in test-write mode. this means that 9.1998:14180: it should be followed by a message saying "mmcgettoc: blank disc". 9.1998:14212: scsi support didn't include the scsi-3 mmc command set). 9.1998:14333: when i changed it to use the mmc cdda read command rather 9.1998:14678: for mmc devices. arch/9fans.2001aug29:228: mmc.c does have this: arch/9fans.2001mar28:14272: hp scsi mmc optical jukeboxes (now in 9gb disk size!) are easily arch/9fans.2001mar28:14383: > money, hp scsi mmc optical jukeboxes (now arch/9fans.2001mar28:16889: boundary="upas-mnfzmmctbofdpmrurgpojpeugo" arch/9fans.2001mar28:16902: --upas-mnfzmmctbofdpmrurgpojpeugo arch/9fans.2001mar28:16919: --upas-mnfzmmctbofdpmrurgpojpeugo arch/9fans.2001mar28:16983: --upas-mnfzmmctbofdpmrurgpojpeugo-- arch/9fans.2002jul1:22387: diff /n/d/acme/bin/source/acd//mmc.c ./mmc.c=0A= arch/9fans.2002oct25:11409: i3gqQNvpcMMNOgFyXmD2htxpBR3ZNGOFi6HC3Cw0H9nVvUVdC/3jWO6eN4InFBeifFUxmmc65T8W optical:819: scsi support didn't include the scsi-3 mmc command set). 0.62u 0.21s 2.85r ftlookword mmc Note that this matched upas mime boundary lines; apparently I need to fine-tune the definition of `word'. # To unbundle, run this file echo ftindex sed 's/^X//' >ftindex <<'!' X#!/bin/rc X# index file... - generate full-text index X# indices can be combined via `sort -o bigindex -udf index*' if (~ $#* 0) X * = /fd/0 X# there's a lot of redundancy in the awk output, so strip duplicates X# in the output for each input file, then combine the stripped outputs. X{ X for (f) { X # limiting line & word length avoids indexing uuencoded & X # base64-encoded text. X awk ' X$0 != "" && (length($0) < 40 || $0 ~ /[^\t ][\t ][^\t ]/) { X $0 = tolower($0) X gsub(/=a0/, " ") X gsub(/[\/.,:;?!<>()[\]{}*=#%"''~|&^\\]/, " ") # delete most specials X for (i = 1; i <= NF; i++) X if (length($i) < 20 && X $i ~ /^[a-z\/][a-z0-9\-_\/]*[a-z0-9]$/ && X $i !~ /^(x-|message-id:)/) X print $i, FILENAME, NR X}' $f | X sort -udf +0 -2 X } X} | X sort -udf +0 -2 ! echo ftlook sed 's/^X//' >ftlook <<'!' X#!/bin/rc X# fulltext [-i index] word... - search full-text index fn usage { X echo usage: $1 '[-i index]' word... >[1=2] X exit usage X} idx=.index if (test $#* -ge 2) X switch ($1) { X case -i X idx=$2 X shift 2 X case -* X usage $0 X } if (test $#* -lt 1) X usage $0 X{ X for (arg) { X echo $arg X look -df -t ' ' $arg^' ' $idx X } X} | X sort +1 | X awk ' function delwd(wd) { delete fileword[wd] } function prmatch(w) { X any = 0 X for (w in fileword) X any++ X if (any == 0 && lastf != "") X print lastf X} BEGIN { lastf="" } NF == 1 { word[$1] = $1; fileword[$1] = $1; next } # a word we must match NF != 3 { print "badly formed index line: " $0 >"cat >[1=2]"; next } X$2 == lastf { delwd($1); next } # same old filename X{ X prmatch() X lastf = $2 X for (w in fileword) X delete fileword[w] # empty fileword X for (w in word) X fileword[w] = word[w] # copy word to fileword X delwd($1) X} END { prmatch() } X' ! echo ftlookword sed 's/^X//' >ftlookword <<'!' X#!/bin/rc cd $h/mbox exec grep -n $1 `{ftlook -i /n/other/index/mail $1} /dev/null ! From cse.psu.edu!9fans-admin Sat Nov 2 11:19:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 11:19:17 JST 2002 Received: (qmail 22220 invoked by uid 1020); 2 Nov 2002 11:19:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 22216 invoked from network); 2 Nov 2002 11:19:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 11:19:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.6.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id E04F6199B3; Fri, 1 Nov 2002 21:19:06 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 578D519981 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 21:18:31 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA22IMmQ014712 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 18:18:27 -0800 (PST) Message-ID: <18236e773f41de8095ce482fd020faa9@centurytel.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] Plan9/Inferno based commercial products/services From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 17:35:05 -0500 > Are you counting only current products and services, or are you > including ones from the past? PathStar is long dead and buried. Hopefully it would be a list of successful or in proof stage ideas. Can you say if it was stillborn, killed or irrelevant (no market)? From cse.psu.edu!9fans-admin Sat Nov 2 11:38:15 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 11:38:15 JST 2002 Received: (qmail 22763 invoked by uid 1020); 2 Nov 2002 11:38:14 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 22759 invoked from network); 2 Nov 2002 11:38:14 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 11:38:14 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.6.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0382819A5A; Fri, 1 Nov 2002 21:38:10 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 5742319A74 for <9fans@cse.psu.edu>; Fri, 1 Nov 2002 21:37:35 -0500 (EST) Message-ID: <34fb3eddc20e59e384f4ca8aa33277aa@collyer.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] Plan9/Inferno based commercial products/services From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Fri, 1 Nov 2002 18:37:29 -0800 PathStar was killed after some had been sold. The dot-com bubble burst and many of the customers couldn't pay their bills, and some people thought that there weren't going to be many new customers. There was also political maneuvering by competing groups within the company. I forget the exact timing; I think PathStar was cancelled in late 2000; certainly no later than March 2001. I thought PathStar was Lucent's last hope, but apparently management thought that people are going to buy 7R/Es (the follow-on to the 5ESS). If they couldn't afford PathStars, which were relatively inexpensive, they certainly won't be able to afford 7R/Es (except perhaps used, on ebay, where I see various 5ESS components). From cse.psu.edu!9fans-admin Sat Nov 2 18:38:35 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 18:38:35 JST 2002 Received: (qmail 28133 invoked by uid 1020); 2 Nov 2002 18:38:35 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 28129 invoked from network); 2 Nov 2002 18:38:32 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 18:38:32 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.18.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id C323719A5F; Sat, 2 Nov 2002 04:38:11 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 8F4CE1998C for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 04:37:47 -0500 (EST) Message-ID: <6abbfc6c12b445de261171c41f6114f8@collyer.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] jukebox configuration changes From: Geoff Collyer MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-ftiamxvctzhpzzvicpywrnwwdx" Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 01:37:37 -0800 This is a multi-part message in MIME format. --upas-ftiamxvctzhpzzvicpywrnwwdx Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit As promised, here are changes to the file server kernel to permit the use of jukeboxes with different-sized discs on a single file server. I've tested it with an HP 80EX with 5.2GB discs and an HP 40FX with 2.6GB discs on one file server. I've enclosed the diffs (a little over 200 lines) and a bundle of the changed files. I've done a little other file server work, including incorporating nigel's/forsyth's wormcopy, since I last synced kernels with nemo, but I don't think these changes will be hard to integrate. The files in the fs directory are the prototypes for cloning file server kernels. --upas-ftiamxvctzhpzzvicpywrnwwdx Content-Disposition: attachment; filename=fs.diffs Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit diff /n/dump/2002/1020/sys/src/fs/dev/cw.c ./dev/cw.c 125c125 < long hmsize, hmaddr; --- > long hmsize, hmaddr, dsize, dsizepct; 188a189,196 > /* print stats in terms of (first-)disc sides */ > dsize = wormsizeside(dev, 0); > if (dsize < 1) { > print("wormsizeside returned a size of %ld for %Z side 0\n", > dsize, dev); > dsize = 100; > } > dsizepct = dsize/100; 190,191c198 < h->fsize/DSIZE, < (h->fsize%DSIZE)/(DSIZE/100)); --- > h->fsize/dsize, (h->fsize%dsize)/dsizepct); 195,196c202 < h->wmax/DSIZE, < (h->wmax%DSIZE)/(DSIZE/100)); --- > h->wmax/dsize, (h->wmax%dsize)/dsizepct); 198,199c204 < h->wsize/DSIZE, < (h->wsize%DSIZE)/(DSIZE/100)); --- > h->wsize/dsize, (h->wsize%dsize)/dsizepct); 1640c1645 < mvstates(Device *dev, int s1, int s2, int drive) --- > mvstates(Device *dev, int s1, int s2, int side) 1651,1654c1656,1663 < hi = lo + 500*DSIZE; // BOTCH arbitrary large number < if(drive >= 0) { < lo = drive * DSIZE; < hi = lo + DSIZE; --- > hi = lo + devsize(dev->cw.w); /* size of all sides totalled */ > if(side >= 0) { > /* operate on only a single disc side */ > Sidestarts ss; > > wormsidestarts(dev, side, &ss); > lo = ss.sstart; > hi = ss.s1start; 1881a1891 > Sidestarts ss; 1891a1902,1903 > if (dskno >= 0) > wormsidestarts(dev, dskno, &ss); 1904,1905c1916,1917 < if(dskno < 0 || < m >= dskno*DSIZE && m < (dskno+1)*DSIZE) { --- > /* if given a diskno, restrict to just that disc side */ > if(dskno < 0 || m >= ss.sstart && m < ss.s1start) { 1926a1939 > Sidestarts ss; 1935c1948,1949 < ml = dskno*DSIZE; --- > wormsidestarts(dev, dskno, &ss); > ml = ss.sstart; /* start at beginning of disc side #dskno */ 2206d2219 < s2 = DSIZE; 2208a2222,2223 > else > s2 = wormsizeside(dev, s1); /* default to 1 disc side */ diff /n/dump/2002/1020/sys/src/fs/dev/juke.c ./dev/juke.c 6c6 < #define FIXEDSIZE 0 --- > 58a59,60 > extern int FIXEDSIZE; > 282c284 < if(FIXEDSIZE) --- > if(FIXEDSIZE) // TODO? push FIXEDSIZE into Device or Juke struct 289a292,347 > /* > * d must be, or be on, the same jukebox as `side' resides on. > * have to paw through Devmcat of sides. > */ > long > wormsizeside(Device *d, int side) > { > int s; > Device *x; > > switch(d->type) { > default: > print("wormsizeside: dev not ro, cw, juke nor mcat: %Z\n", d); > return 0; > > case Devmcat: /* of sides */ > break; > case Devjuke: > return wormsizeside(d->j.m, side); /* mcat of sides */ > case Devcw: > return wormsizeside(d->cw.w, side); /* should be juke */ > case Devro: > return wormsizeside(d->ro.parent, side); /* cw */ > } > > if (side < 0 || side >= d->cat.ndev) { > print("wormsizeside: side %d not in range [0..%d] for %Z\n", > side, d->cat.ndev, d); > return 0; > } > x = d->cat.first; > for (s = 0; s < side; s++) { > x = x->link; > if (x == nil) > panic("wormsizeside nil link"); > } > if (x->type != Devworm && x->type != Devlworm) { > print("wormsizeside: %Z of %Z type not (l)worm\n", x, d); > return 0; > } > return wormsize(x); > } > > /* returns starts of side #side and #(side+1) in *stp */ > void > wormsidestarts(Device *dev, int side, Sidestarts *stp) > { > int s; > long dstart; > > for (dstart = s = 0; s < side; s++) > dstart += wormsizeside(dev, s); > stp->sstart = dstart; > stp->s1start = dstart + wormsizeside(dev, side); > } > 583a642 > Device *dev = d; 587c646 < print("juke platter not devworm: %Z\n", d); --- > print("juke platter not (devmcat of) dev(l)worm: %Z\n", d); 590a650,653 > /* > * we don't call mcatinit(d) here, so we have to set d->cat.ndev > * ourselves. > */ 592a656 > dev->cat.ndev = o; diff /n/dump/2002/1020/sys/src/fs/fs/9fsfs.c ./fs/9fsfs.c 7a8,14 > /* > * setting this to zero permits the use of discs of different sizes, but > * can make jukeinit() quite slow while the robotics work through each disc > * twice (once per side). > */ > int FIXEDSIZE = 1; > diff /n/dump/2002/1020/sys/src/fs/fs/dat.h ./fs/dat.h 0a1,6 > /* > * The most fundamental constant. > * Will the code compile with RBUFSIZE a variable? > * Nope, for one thing, RBUFSIZE determines FEPERBUF, which determines > * the number of elements in a free-list-block array. > */ 2d7 < #define DSIZE (631736-1) /* 5.2GB on first disc */ diff /n/dump/2002/1020/sys/src/fs/port/chk.c ./port/chk.c 163,165c163,166 < oldblock = fsize/DSIZE; < oldblock *= DSIZE; < if(oldblock < 0) --- > /* round fsize down to start of current side */ > int s; > long dsize; > 166a168,170 > for (s = 0; dsize = wormsizeside(dev, s), > dsize > 0 && oldblock + dsize < fsize; s++) > oldblock += dsize; diff /n/dump/2002/1020/sys/src/fs/port/portdat.h ./port/portdat.h 153c153 < struct /* worm wren */ --- > struct /* worm wren, (l)worm in targ */ 178,179c178,179 < Device* j; < Device* m; --- > Device* j; /* (robotics, worm drives) - wrens */ > Device* m; /* (sides) - r or l devices */ 195c195 < struct /* part */ --- > struct /* byte-swapped */ 200a201,205 > > typedef struct Sidestarts { > long sstart; /* blocks before start of side */ > long s1start; /* blocks before start of next side */ > } Sidestarts; diff /n/dump/2002/1020/sys/src/fs/port/portfns.h ./port/portfns.h 265a266,267 > long wormsizeside(Device *, int side); > void wormsidestarts(Device *dev, int side, Sidestarts *stp); --upas-ftiamxvctzhpzzvicpywrnwwdx Content-Disposition: attachment; filename=fs.bun Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit # To unbundle, run this file echo dev/cw.c sed 's/^X//' >dev/cw.c <<'!' X#include "all.h" X#define DEBUG 0 X#define FIRST SUPER_ADDR X#define ADDFREE (100) X#define CACHE_ADDR SUPER_ADDR X#define MAXAGE 10000 X#define CDEV(d) (d->cw.c) X#define WDEV(d) (d->cw.w) X#define RDEV(d) (d->cw.ro) X/* cache state */ enum X{ X /* states -- beware these are recorded on the cache */ X /* cache worm */ X Cnone = 0, /* 0 ? */ X Cdirty, /* 1 0 */ X Cdump, /* 1 0->1 */ X Cread, /* 1 1 */ X Cwrite, /* 2 1 */ X Cdump1, /* inactive form of dump */ X Cerror, X /* opcodes -- these are not recorded */ X Onone, X Oread, X Owrite, X Ogrow, X Odump, X Orele, X Ofree, X}; typedef struct Cw Cw; struct Cw X{ X Device* dev; X Device* cdev; X Device* wdev; X Device* rodev; X Cw* link; X Filter ncwio[3]; X int dbucket; /* last bucket dumped */ X long daddr; /* last block dumped */ X long ncopy; X int nodump; X/* X * following are cached variables for dumps X */ X long fsize; X long ndump; X int depth; X int all; /* local flag to recur on modified directories */ X int allflag; /* global flag to recur on modified directories */ X long falsehits; /* times recur found modified blocks */ X struct X { X char name[500]; X char namepad[NAMELEN+10]; X }; X}; static char* cwnames[] = X{ X [Cnone] "none", X [Cdirty] "dirty", X [Cdump] "dump", X [Cread] "read", X [Cwrite] "write", X [Cdump1] "dump1", X [Cerror] "error", X [Onone] "none", X [Oread] "read", X [Owrite] "write", X [Ogrow] "grow", X [Odump] "dump", X [Orele] "rele", X}; Centry* getcentry(Bucket*, long); int cwio(Device*, long, void*, int); void cmd_cwcmd(int, char*[]); X/* X * console command X * initiate a dump X */ void cmd_dump(int argc, char *argv[]) X{ X Filsys *fs; X fs = cons.curfs; X if(argc > 1) X fs = fsstr(argv[1]); X if(fs == 0) { X print("%s: unknown file system\n", argv[1]); X return; X } X cfsdump(fs); X} X/* X * console command X * worm stats X */ static void cmd_statw(int, char*[]) X{ X Filsys *fs; X Iobuf *p; X Superb *sb; X Cache *h; X Bucket *b; X Centry *c, *ce; X long m, nw, bw, state[Onone]; X long sbfsize, sbcwraddr, sbroraddr, sblast, sbnext; X long hmsize, hmaddr, dsize, dsizepct; X Device *dev; X Cw *cw; X int s; X fs = cons.curfs; X dev = fs->dev; X if(dev->type != Devcw) { X print("curfs not type cw\n"); X return; X } X cw = dev->private; X if(cw == 0) { X print("curfs not inited\n"); X return; X } X print("cwstats %s\n", fs->name); X sbfsize = 0; X sbcwraddr = 0; X sbroraddr = 0; X sblast = 0; X sbnext = 0; X print(" filesys %s\n", fs->name); X print(" nio =%7W%7W%7W\n", cw->ncwio+0, cw->ncwio+1, cw->ncwio+2); X p = getbuf(dev, cwsaddr(dev), Bread); X if(!p || checktag(p, Tsuper, QPSUPER)) { X print("cwstats: checktag super\n"); X if(p) { X putbuf(p); X p = 0; X } X } X if(p) { X sb = (Superb*)p->iobuf; X sbfsize = sb->fsize; X sbcwraddr = sb->cwraddr; X sbroraddr = sb->roraddr; X sblast = sb->last; X sbnext = sb->next; X putbuf(p); X } X p = getbuf(cw->cdev, CACHE_ADDR, Bread|Bres); X if(!p || checktag(p, Tcache, QPSUPER)) { X print("cwstats: checktag c bucket\n"); X if(p) X putbuf(p); X return; X } X h = (Cache*)p->iobuf; X hmaddr = h->maddr; X hmsize = h->msize; X print(" maddr = %8ld\n", hmaddr); X print(" msize = %8ld\n", hmsize); X print(" caddr = %8ld\n", h->caddr); X print(" csize = %8ld\n", h->csize); X print(" sbaddr = %8ld\n", h->sbaddr); X print(" craddr = %8ld %8ld\n", h->cwraddr, sbcwraddr); X print(" roaddr = %8ld %8ld\n", h->roraddr, sbroraddr); X /* print stats in terms of (first-)disc sides */ X dsize = wormsizeside(dev, 0); X if (dsize < 1) { X print("wormsizeside returned a size of %ld for %Z side 0\n", X dsize, dev); X dsize = 100; X } X dsizepct = dsize/100; X print(" fsize = %8ld %8ld %2ld+%2ld%%\n", h->fsize, sbfsize, X h->fsize/dsize, (h->fsize%dsize)/dsizepct); X print(" slast = %8ld\n", sblast); X print(" snext = %8ld\n", sbnext); X print(" wmax = %8ld %2ld+%2ld%%\n", h->wmax, X h->wmax/dsize, (h->wmax%dsize)/dsizepct); X print(" wsize = %8ld %2ld+%2ld%%\n", h->wsize, X h->wsize/dsize, (h->wsize%dsize)/dsizepct); X putbuf(p); X bw = 0; /* max filled bucket */ X memset(state, 0, sizeof(state)); X for(m=0; mcdev, hmaddr + m/BKPERBLK, Bread); X if(!p || checktag(p, Tbuck, hmaddr + m/BKPERBLK)) { X print("cwstats: checktag c bucket\n"); X if(p) X putbuf(p); X return; X } X b = (Bucket*)p->iobuf + m%BKPERBLK; X ce = b->entry + CEPERBK; X nw = 0; X for(c=b->entry; cstate; X state[s]++; X if(s != Cnone && s != Cread) X nw++; X } X putbuf(p); X if(nw > bw) X bw = nw; X } X for(s=Cnone; sprivate; X if(cw == 0 || cw->nodump) X return 0; X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bres); X h = (Cache*)cb->iobuf; X msize = h->msize; X maddr = h->maddr; X wmax = h->wmax; X caddr = h->caddr; X putbuf(cb); X for(m=msize; m>=0; m--) { X a = cw->dbucket + 1; X if(a < 0 || a >= msize) X a = 0; X cw->dbucket = a; X p = getbuf(cw->cdev, maddr + a/BKPERBLK, Bread); X b = (Bucket*)p->iobuf + a%BKPERBLK; X ce = b->entry + CEPERBK; X bc = 0; X for(c=b->entry; cstate == Cdump) { X if(bc == 0) { X bc = c; X continue; X } X if(c->waddr < cw->daddr) { X if(bc->waddr < cw->daddr && X bc->waddr > c->waddr) X bc = c; X continue; X } X if(bc->waddr < cw->daddr || X bc->waddr > c->waddr) X bc = c; X } X if(bc) { X c = bc; X goto found; X } X putbuf(p); X } X if(cw->ncopy) { X print("%ld blocks copied to worm\n", cw->ncopy); X cw->ncopy = 0; X } X cw->nodump = 1; X return 0; found: X a = a*CEPERBK + (c - b->entry) + caddr; X p1 = getbuf(devnone, Cwdump1, 0); X count = 0; retry: X count++; X if(count > 10) X goto stop; X if(devread(cw->cdev, a, p1->iobuf)) X goto stop; X m = c->waddr; X cw->daddr = m; X s1 = devwrite(cw->wdev, m, p1->iobuf); X if(s1) { X p2 = getbuf(devnone, Cwdump2, 0); X s2 = devread(cw->wdev, m, p2->iobuf); X if(s2) { X if(s1 == 0x61 && s2 == 0x60) { X putbuf(p2); X goto retry; X } X goto stop1; X } X if(memcmp(p1->iobuf, p2->iobuf, RBUFSIZE)) X goto stop1; X putbuf(p2); X } X /* X * reread and compare X */ X if(conf.dumpreread) { X p2 = getbuf(devnone, Cwdump2, 0); X s1 = devread(cw->wdev, m, p2->iobuf); X if(s1) X goto stop1; X if(memcmp(p1->iobuf, p2->iobuf, RBUFSIZE)) { X print("reread C%ld W%ld didnt compare\n", a, m); X goto stop1; X } X putbuf(p2); X } X putbuf(p1); X c->state = Cread; X p->flags |= Bmod; X putbuf(p); X if(m > wmax) { X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bmod|Bres); X h = (Cache*)cb->iobuf; X if(m > h->wmax) X h->wmax = m; X putbuf(cb); X } X cw->ncopy++; X return 1; stop1: X putbuf(p2); X putbuf(p1); X c->state = Cdump1; X p->flags |= Bmod; X putbuf(p); X return 1; stop: X putbuf(p1); X putbuf(p); X print("stopping dump!!\n"); X cw->nodump = 1; X return 0; X} void cwinit1(Device *dev) X{ X Cw *cw; X static int first; X cw = dev->private; X if(cw) X return; X if(first == 0) { X cmd_install("dump", "-- make dump backup to worm", cmd_dump); X cmd_install("statw", "-- cache/worm stats", cmd_statw); X cmd_install("cwcmd", "subcommand -- cache/worm errata", cmd_cwcmd); X roflag = flag_install("ro", "-- ro reads and writes"); X first = 1; X } X cw = ialloc(sizeof(Cw), 0); X dev->private = cw; X cw->allflag = 0; X dofilter(cw->ncwio+0, C0a, C0b, 1); X dofilter(cw->ncwio+1, C1a, C1b, 1); X dofilter(cw->ncwio+2, C2a, C2b, 1); X cw->dev = dev; X cw->cdev = CDEV(dev); X cw->wdev = WDEV(dev); X cw->rodev = RDEV(dev); X devinit(cw->cdev); X devinit(cw->wdev); X} void cwinit(Device *dev) X{ X Cw *cw; X Cache *h; X Iobuf *cb, *p; X long l, m; X cwinit1(dev); X cw = dev->private; X l = devsize(cw->wdev); X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bmod|Bres); X h = (Cache*)cb->iobuf; X h->toytime = toytime() + SECOND(30); X h->time = time(); X m = h->wsize; X if(l != m) { X print("wdev changed size %ld to %ld\n", m, l); X h->wsize = l; X cb->flags |= Bmod; X } X for(m=0; mmsize; m++) { X p = getbuf(cw->cdev, h->maddr + m/BKPERBLK, Bread); X if(!p || checktag(p, Tbuck, h->maddr + m/BKPERBLK)) X panic("cwinit: checktag c bucket"); X putbuf(p); X } X putbuf(cb); X} long cwsaddr(Device *dev) X{ X Iobuf *cb; X long sa; X cb = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bres); X sa = ((Cache*)cb->iobuf)->sbaddr; X putbuf(cb); X return sa; X} long cwraddr(Device *dev) X{ X Iobuf *cb; X long ra; X switch(dev->type) { X default: X print("unknown dev in cwraddr %Z\n", dev); X return 1; X case Devcw: X cb = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bres); X ra = ((Cache*)cb->iobuf)->cwraddr; X break; X case Devro: X cb = getbuf(CDEV(dev->ro.parent), CACHE_ADDR, Bread|Bres); X ra = ((Cache*)cb->iobuf)->roraddr; X break; X } X putbuf(cb); X return ra; X} long cwsize(Device *dev) X{ X Iobuf *cb; X long fs; X cb = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bres); X fs = ((Cache*)cb->iobuf)->fsize; X putbuf(cb); X return fs; X} int cwread(Device *dev, long b, void *c) X{ X return cwio(dev, b, c, Oread) == Cerror; X} int cwwrite(Device *dev, long b, void *c) X{ X return cwio(dev, b, c, Owrite) == Cerror; X} int roread(Device *dev, long b, void *c) X{ X Device *d; X int s; X /* X * maybe better is to try buffer pool first X */ X d = dev->ro.parent; X if(d == 0 || d->type != Devcw || X d->private == 0 || RDEV(d) != dev) { X print("bad rodev %Z\n", dev); X return 1; X } X s = cwio(d, b, 0, Onone); X if(s == Cdump || s == Cdump1 || s == Cread) { X s = cwio(d, b, c, Oread); X if(s == Cdump || s == Cdump1 || s == Cread) { X if(cons.flags & roflag) X print("roread: %Z %ld -> %Z(hit)\n", dev, b, d); X return 0; X } X } X if(cons.flags & roflag) X print("roread: %Z %ld -> %Z(miss)\n", dev, b, WDEV(d)); X return devread(WDEV(d), b, c); X} int cwio(Device *dev, long addr, void *buf, int opcode) X{ X Iobuf *p, *p1, *p2, *cb; X Cache *h; X Bucket *b; X Centry *c; X long bn, a1, a2, max, newmax; X int state; X Cw *cw; X cw = dev->private; X cw->ncwio[0].count++; X cw->ncwio[1].count++; X cw->ncwio[2].count++; X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bres); X h = (Cache*)cb->iobuf; X if(toytime() >= h->toytime) { X cb->flags |= Bmod; X h->toytime = toytime() + SECOND(30); X h->time = time(); X } X if(addr < 0) { X putbuf(cb); X return Cerror; X } X bn = addr % h->msize; X a1 = h->maddr + bn/BKPERBLK; X a2 = bn*CEPERBK + h->caddr; X max = h->wmax; X putbuf(cb); X newmax = 0; X p = getbuf(cw->cdev, a1, Bread|Bmod); X if(!p || checktag(p, Tbuck, a1)) X panic("cwio: checktag c bucket"); X b = (Bucket*)p->iobuf + bn%BKPERBLK; X c = getcentry(b, addr); X if(c == 0) { X putbuf(p); X print("disk cache bucket %ld is full\n", a1); X return Cerror; X } X a2 += c - b->entry; X state = c->state; X switch(opcode) X { X default: X goto bad; X case Onone: X break; X case Oread: X switch(state) { X default: X goto bad; X case Cread: X if(!devread(cw->cdev, a2, buf)) X break; X c->state = Cnone; X case Cnone: X if(devread(cw->wdev, addr, buf)) { X state = Cerror; X break; X } X if(addr > max) X newmax = addr; X if(!devwrite(cw->cdev, a2, buf)) X c->state = Cread; X break; X case Cdirty: X case Cdump: X case Cdump1: X case Cwrite: X if(devread(cw->cdev, a2, buf)) X state = Cerror; X break; X } X break; X case Owrite: X switch(state) { X default: X goto bad; X case Cdump: X case Cdump1: X /* X * this is hard part -- a dump block must be X * sent to the worm if it is rewritten. X * if this causes an error, there is no X * place to save the dump1 data. the block X * is just reclassified as 'dump1' (botch) X */ X p1 = getbuf(devnone, Cwio1, 0); X if(devread(cw->cdev, a2, p1->iobuf)) { X putbuf(p1); X print("cwio: write induced dump error - r cache\n"); X casenone: X if(devwrite(cw->cdev, a2, buf)) { X state = Cerror; X break; X } X c->state = Cdump1; X break; X } X if(devwrite(cw->wdev, addr, p1->iobuf)) { X p2 = getbuf(devnone, Cwio2, 0); X if(devread(cw->wdev, addr, p2->iobuf)) { X putbuf(p1); X putbuf(p2); X print("cwio: write induced dump error - r+w worm\n"); X goto casenone; X } X if(memcmp(p1->iobuf, p2->iobuf, RBUFSIZE)) { X putbuf(p1); X putbuf(p2); X print("cwio: write induced dump error - w worm\n"); X goto casenone; X } X putbuf(p2); X } X putbuf(p1); X c->state = Cread; X if(addr > max) X newmax = addr; X cw->ncopy++; X case Cnone: X case Cread: X if(devwrite(cw->cdev, a2, buf)) { X state = Cerror; X break; X } X c->state = Cwrite; X break; X case Cdirty: X case Cwrite: X if(devwrite(cw->cdev, a2, buf)) X state = Cerror; X break; X } X break; X case Ogrow: X if(state != Cnone) { X print("cwgrow with state = %s\n", X cwnames[state]); X break; X } X c->state = Cdirty; X break; X case Odump: X if(state != Cdirty) { /* BOTCH */ X print("cwdump with state = %s\n", X cwnames[state]); X break; X } X c->state = Cdump; X cw->ndump++; /* only called from dump command */ X break; X case Orele: X if(state != Cwrite) { X if(state != Cdump1) X print("cwrele with state = %s\n", X cwnames[state]); X break; X } X c->state = Cnone; X break; X case Ofree: X if(state == Cwrite || state == Cread) X c->state = Cnone; X break; X } X if(DEBUG) X print("cwio: %ld s=%s o=%s ns=%s\n", X addr, cwnames[state], X cwnames[opcode], X cwnames[c->state]); X putbuf(p); X if(newmax) { X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bmod|Bres); X h = (Cache*)cb->iobuf; X if(newmax > h->wmax) X h->wmax = newmax; X putbuf(cb); X } X return state; bad: X print("cw state = %s; cw opcode = %s", X cwnames[state], cwnames[opcode]); X return Cerror; X} extern Filsys* dev2fs(Device *dev); int cwgrow(Device *dev, Superb *sb, int uid) X{ X char str[NAMELEN]; X Iobuf *cb; X Cache *h; X Filsys *filsys; X long fs, nfs, ws; X cb = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bmod|Bres); X h = (Cache*)cb->iobuf; X ws = h->wsize; X fs = h->fsize; X if(fs >= ws) X return 0; X nfs = fs + ADDFREE; X if(nfs >= ws) X nfs = ws; X h->fsize = nfs; X putbuf(cb); X sb->fsize = nfs; X filsys = dev2fs(dev); X if (filsys == nil) X print("%Z", dev); X else X print("%s", filsys->name); X uidtostr(str, uid, 1); X print(" grow from %ld to %ld limit %ld by %s uid=%d\n", X fs, nfs, ws, str, uid); X for(nfs--; nfs>=fs; nfs--) { X switch(cwio(dev, nfs, 0, Ogrow)) { X case Cerror: X return 0; X case Cnone: X addfree(dev, nfs, sb); X } X } X return 1; X} int cwfree(Device *dev, long addr) X{ X int state; X if(dev->type == Devcw) { X state = cwio(dev, addr, 0, Ofree); X if(state != Cdirty) X return 1; /* do not put in freelist */ X } X return 0; /* put in freelist */ X} int bktcheck(Bucket *b) X{ X Centry *c, *c1, *c2, *ce; X int err; X err = 0; X if(b->agegen < CEPERBK || b->agegen > MAXAGE) { X print("agegen %ld\n", b->agegen); X err = 1; X } X ce = b->entry + CEPERBK; X c1 = 0; /* lowest age last pass */ X for(;;) { X c2 = 0; /* lowest age this pass */ X for(c = b->entry; c < ce; c++) { X if(c1 != 0 && c != c1) { X if(c->age == c1->age) { X print("same age %d\n", c->age); X err = 1; X } X if(c1->waddr == c->waddr) X if(c1->state != Cnone) X if(c->state != Cnone) { X print("same waddr %ld\n", c->waddr); X err = 1; X } X } X if(c1 != 0 && c->age <= c1->age) X continue; X if(c2 == 0 || c->age < c2->age) X c2 = c; X } X if(c2 == 0) X break; X c1 = c2; X if(c1->age >= b->agegen) { X print("age >= generator %d %ld\n", c1->age, b->agegen); X err = 1; X } X } X return err; X} void resequence(Bucket *b) X{ X Centry *c, *ce, *cr; X int age, i; X ce = b->entry + CEPERBK; X for(c = b->entry; c < ce; c++) { X c->age += CEPERBK; X if(c->age < CEPERBK) X c->age = MAXAGE; X } X b->agegen += CEPERBK; X age = 0; X for(i=0;; i++) { X cr = 0; X for(c = b->entry; c < ce; c++) { X if(c->age < i) X continue; X if(cr == 0 || c->age < age) { X cr = c; X age = c->age; X } X } X if(cr == 0) X break; X cr->age = i; X } X b->agegen = i; X cons.nreseq++; X} Centry* getcentry(Bucket *b, long addr) X{ X Centry *c, *ce, *cr; X int s, age; X /* X * search for cache hit X * find oldest block as byproduct X */ X ce = b->entry + CEPERBK; X age = 0; X cr = 0; X for(c = b->entry; c < ce; c++) { X s = c->state; X if(s == Cnone) { X cr = c; X age = 0; X continue; X } X if(c->waddr == addr) X goto found; X if(s == Cread) { X if(cr == 0 || c->age < age) { X cr = c; X age = c->age; X } X } X } X /* X * remap entry X */ X c = cr; X if(c == 0) X return 0; /* bucket is full */ X c->state = Cnone; X c->waddr = addr; found: X /* X * update the age to get filo cache. X * small number in age means old X */ X if(!cons.noage || c->state == Cnone) { X age = b->agegen; X c->age = age; X age++; X b->agegen = age; X if(age < 0 || age >= MAXAGE) X resequence(b); X } X return c; X} X/* X * ream the cache X * calculate new buckets X */ Iobuf* cacheinit(Device *dev) X{ X Iobuf *cb, *p; X Cache *h; X Device *cdev; X long m; X print("cache init %Z\n", dev); X cdev = CDEV(dev); X devinit(cdev); X cb = getbuf(cdev, CACHE_ADDR, Bmod|Bres); X memset(cb->iobuf, 0, RBUFSIZE); X settag(cb, Tcache, QPSUPER); X h = (Cache*)cb->iobuf; X /* X * calculate csize such that X * tsize = msize/BKPERBLK + csize and X * msize = csize/CEPERBK X */ X h->maddr = CACHE_ADDR + 1; X m = devsize(cdev) - h->maddr; X h->csize = ((long long)(m-1) * CEPERBK*BKPERBLK) / (CEPERBK*BKPERBLK+1); X h->msize = h->csize/CEPERBK - 5; X while(!prime(h->msize)) X h->msize--; X h->csize = h->msize*CEPERBK; X h->caddr = h->maddr + (h->msize+BKPERBLK-1)/BKPERBLK; X h->wsize = devsize(WDEV(dev)); X if(h->msize <= 0) X panic("cache too small"); X if(h->caddr + h->csize > m) X panic("cache size error"); X /* X * setup cache map X */ X for(m=h->maddr; mcaddr; m++) { X p = getbuf(cdev, m, Bmod); X memset(p->iobuf, 0, RBUFSIZE); X settag(p, Tbuck, m); X putbuf(p); X } X print("done cacheinit\n"); X return cb; X} long getstartsb(Device *dev) X{ X Filsys *f; X Startsb *s; X for(f=filsys; f->name; f++) X if(devcmpr(f->dev, dev) == 0) X goto found; print("getstartsb: not found 1 %Z\n", dev); X return FIRST; found: X for(s=startsb; s->name; s++) X if(strcmp(f->name, s->name) == 0) X return s->startsb; print("getstartsb: not found 2 %Z %s\n", dev, f->name); X return FIRST; X} X/* X * ream the cache X * calculate new buckets X * get superblock from X * last worm dump block. X */ void cwrecover(Device *dev) X{ X Iobuf *p, *cb; X Cache *h; X Superb *s; X long m, baddr; X Device *wdev; X cwinit1(dev); X wdev = WDEV(dev); X p = getbuf(devnone, Cwxx1, 0); X s = (Superb*)p->iobuf; X baddr = 0; X m = getstartsb(dev); X localconfinit(); X if(conf.firstsb) X m = conf.firstsb; X for(;;) { X memset(p->iobuf, 0, RBUFSIZE); X if(devread(wdev, m, p->iobuf) || X checktag(p, Tsuper, QPSUPER)) X break; X baddr = m; X m = s->next; X print("dump %ld is good; %ld next\n", baddr, m); X if(baddr == conf.recovsb) X break; X } X putbuf(p); X if(!baddr) X panic("recover: no superblock\n"); X p = getbuf(wdev, baddr, Bread); X s = (Superb*)p->iobuf; X cb = cacheinit(dev); X h = (Cache*)cb->iobuf; X h->sbaddr = baddr; X h->cwraddr = s->cwraddr; X h->roraddr = s->roraddr; X h->fsize = s->fsize + 100; /* this must be conservative */ X if(conf.recovcw) X h->cwraddr = conf.recovcw; X if(conf.recovro) X h->roraddr = conf.recovro; X putbuf(cb); X putbuf(p); X p = getbuf(dev, baddr, Bread|Bmod); X s = (Superb*)p->iobuf; X memset(&s->fbuf, 0, sizeof(s->fbuf)); X s->fbuf.free[0] = 0; X s->fbuf.nfree = 1; X s->tfree = 0; X if(conf.recovcw) X s->cwraddr = conf.recovcw; X if(conf.recovro) X s->roraddr = conf.recovro; X putbuf(p); X print("done recover\n"); X} X/* X * ream the cache X * calculate new buckets X * initialize superblock. X */ void cwream(Device *dev) X{ X Iobuf *p, *cb; X Cache *h; X Superb *s; X long m, baddr; X Device *cdev; X print("cwream %Z\n", dev); X cwinit1(dev); X cdev = CDEV(dev); X devinit(cdev); X baddr = FIRST; /* baddr = super addr X baddr+1 = cw root X baddr+2 = ro root X baddr+3 = reserved next superblock */ X cb = cacheinit(dev); X h = (Cache*)cb->iobuf; X h->sbaddr = baddr; X h->cwraddr = baddr+1; X h->roraddr = baddr+2; X h->fsize = 0; /* prevents superream from freeing */ X putbuf(cb); X for(m=0; m<3; m++) X cwio(dev, baddr+m, 0, Ogrow); X superream(dev, baddr); X rootream(dev, baddr+1); /* cw root */ X rootream(dev, baddr+2); /* ro root */ X cb = getbuf(cdev, CACHE_ADDR, Bread|Bmod|Bres); X h = (Cache*)cb->iobuf; X h->fsize = baddr+4; X putbuf(cb); X p = getbuf(dev, baddr, Bread|Bmod|Bimm); X s = (Superb*)p->iobuf; X s->last = baddr; X s->cwraddr = baddr+1; X s->roraddr = baddr+2; X s->next = baddr+3; X s->fsize = baddr+4; X putbuf(p); X for(m=0; m<3; m++) X cwio(dev, baddr+m, 0, Odump); X} long rewalk1(Cw *cw, long addr, int slot, Wpath *up) X{ X Iobuf *p, *p1; X Dentry *d; X if(up == 0) X return cwraddr(cw->dev); X up->addr = rewalk1(cw, up->addr, up->slot, up->up); X p = getbuf(cw->dev, up->addr, Bread|Bmod); X d = getdir(p, up->slot); X if(!d || !(d->mode & DALLOC)) { X print("rewalk1 1\n"); X if(p) X putbuf(p); X return addr; X } X p1 = dnodebuf(p, d, slot/DIRPERBUF, 0, 0); X if(!p1) { X print("rewalk1 2\n"); X if(p) X putbuf(p); X return addr; X } X if(DEBUG) X print("rewalk1 %ld to %ld \"%s\"\n", X addr, p1->addr, d->name); X addr = p1->addr; X p1->flags |= Bmod; X putbuf(p1); X putbuf(p); X return addr; X} long rewalk2(Cw *cw, long addr, int slot, Wpath *up) X{ X Iobuf *p, *p1; X Dentry *d; X if(up == 0) X return cwraddr(cw->rodev); X up->addr = rewalk2(cw, up->addr, up->slot, up->up); X p = getbuf(cw->rodev, up->addr, Bread); X d = getdir(p, up->slot); X if(!d || !(d->mode & DALLOC)) { X print("rewalk2 1\n"); X if(p) X putbuf(p); X return addr; X } X p1 = dnodebuf(p, d, slot/DIRPERBUF, 0, 0); X if(!p1) { X print("rewalk2 2\n"); X if(p) X putbuf(p); X return addr; X } X if(DEBUG) X print("rewalk2 %ld to %ld \"%s\"\n", X addr, p1->addr, d->name); X addr = p1->addr; X putbuf(p1); X putbuf(p); X return addr; X} void rewalk(Cw *cw) X{ X int h; X File *f; X for(h=0; hnext) { X if(!f->fs) X continue; X if(cw->dev == f->fs->dev) X f->addr = rewalk1(cw, f->addr, f->slot, f->wpath); X else X if(cw->rodev == f->fs->dev) X f->addr = rewalk2(cw, f->addr, f->slot, f->wpath); X } X } X} long split(Cw *cw, Iobuf *p, long addr) X{ X long na; X int state; X na = 0; X if(p && (p->flags & Bmod)) { X p->flags |= Bimm; X putbuf(p); X p = 0; X } X state = cwio(cw->dev, addr, 0, Onone); /* read the state (twice?) */ X switch(state) X { X default: X panic("split: unknown state %s", cwnames[state]); X case Cerror: X case Cnone: X case Cdump: X case Cread: X break; X case Cdump1: X case Cwrite: X /* X * botch.. could be done by relabeling X */ X if(!p) { X p = getbuf(cw->dev, addr, Bread); X if(!p) { X print("split: null getbuf\n"); X break; X } X } X na = cw->fsize; X cw->fsize = na+1; X cwio(cw->dev, na, 0, Ogrow); X cwio(cw->dev, na, p->iobuf, Owrite); X cwio(cw->dev, na, 0, Odump); X cwio(cw->dev, addr, 0, Orele); X break; X case Cdirty: X cwio(cw->dev, addr, 0, Odump); X break; X } X if(p) X putbuf(p); X return na; X} int isdirty(Cw *cw, Iobuf *p, long addr, int tag) X{ X int s; X if(p && (p->flags & Bmod)) X return 1; X s = cwio(cw->dev, addr, 0, Onone); X if(s == Cdirty || s == Cwrite) X return 1; X if(tag == Tind1 || tag == Tind2) /* botch, get these modified */ X if(s != Cnone) X return 1; X return 0; X} long cwrecur(Cw *cw, long addr, int tag, int tag1, long qp) X{ X Iobuf *p; X Dentry *d; X int i, j, shouldstop; X long na; X char *np; X shouldstop = 0; X p = getbuf(cw->dev, addr, Bprobe); X if(!isdirty(cw, p, addr, tag)) { X if(!cw->all) { X if(DEBUG) X print("cwrecur: %ld t=%s not dirty %s\n", X addr, tagnames[tag], cw->name); X if(p) X putbuf(p); X return 0; X } X shouldstop = 1; X } X if(DEBUG) X print("cwrecur: %ld t=%s %s\n", X addr, tagnames[tag], cw->name); X if(cw->depth >= 100) { X print("dump depth too great %s\n", cw->name); X if(p) X putbuf(p); X return 0; X } X cw->depth++; X switch(tag) X { X default: X print("cwrecur: unknown tag %d %s\n", tag, cw->name); X case Tfile: X break; X case Tsuper: X case Tdir: X if(!p) { X p = getbuf(cw->dev, addr, Bread); X if(!p) { X print("cwrecur: Tdir p null %s\n", X cw->name); X break; X } X } X if(tag == Tdir) { X cw->namepad[0] = 0; /* force room */ X np = strchr(cw->name, 0); X *np++ = '/'; X } else { X np = 0; /* set */ X cw->name[0] = 0; X } X for(i=0; imode & DALLOC)) X continue; X qp = d->qid.path & ~QPDIR; X if(tag == Tdir) X strncpy(np, d->name, NAMELEN); X else X if(i > 0) X print("cwrecur: root with >1 directory\n"); X tag1 = Tfile; X if(d->mode & DDIR) X tag1 = Tdir; X for(j=0; jdblock[j]) { X na = cwrecur(cw, na, tag1, 0, qp); X if(na) { X d->dblock[j] = na; X p->flags |= Bmod; X } X } X } X if(na = d->iblock) { X na = cwrecur(cw, na, Tind1, tag1, qp); X if(na) { X d->iblock = na; X p->flags |= Bmod; X } X } X if(na = d->diblock) { X na = cwrecur(cw, na, Tind2, tag1, qp); X if(na) { X d->diblock = na; X p->flags |= Bmod; X } X } X } X break; X case Tind1: X j = tag1; X tag1 = 0; X goto tind; X case Tind2: X j = Tind1; X tind: X if(!p) { X p = getbuf(cw->dev, addr, Bread); X if(!p) { X print("cwrecur: Tind p null %s\n", X cw->name); X break; X } X } X for(i=0; iiobuf)[i]) { X na = cwrecur(cw, na, j, tag1, qp); X if(na) { X ((long*)p->iobuf)[i] = na; X p->flags |= Bmod; X } X } X } X break; X } X na = split(cw, p, addr); X cw->depth--; X if(na && shouldstop) { X if(cw->falsehits < 10) X print("shouldstop %ld %ld t=%s %s\n", X addr, na, tagnames[tag], cw->name); X cw->falsehits++; X } X return na; X} void cfsdump(Filsys *fs) X{ X Iobuf *pr, *p1, *p; X Dentry *dr, *d1, *d; X Cache *h; X Superb *s; X long orba, rba, oroa, roa, sba, a, m, n, i, tim; X char tstr[20]; X Cw *cw; X if(fs->dev->type != Devcw) { X print("cant dump; not cw device: %Z\n", fs->dev); X return; X } X cw = fs->dev->private; X if(cw == 0) { X print("cant dump: has not been inited: %Z\n", fs->dev); X return; X } X tim = toytime(); X wlock(&mainlock); /* dump */ X /* X * set up static structure X * with frequent variables X */ X cw->ndump = 0; X cw->name[0] = 0; X cw->depth = 0; X /* X * cw root X */ X sync("before dump"); X cw->fsize = cwsize(cw->dev); X orba = cwraddr(cw->dev); X print("cwroot %ld", orba); X cons.noage = 1; X cw->all = cw->allflag; X rba = cwrecur(cw, orba, Tsuper, 0, QPROOT); X if(rba == 0) X rba = orba; X print("->%ld\n", rba); X sync("after cw"); X /* X * partial super block X */ X p = getbuf(cw->dev, cwsaddr(cw->dev), Bread|Bmod|Bimm); X s = (Superb*)p->iobuf; X s->fsize = cw->fsize; X s->cwraddr = rba; X putbuf(p); X /* X * partial cache block X */ X p = getbuf(cw->cdev, CACHE_ADDR, Bread|Bmod|Bimm|Bres); X h = (Cache*)p->iobuf; X h->fsize = cw->fsize; X h->cwraddr = rba; X putbuf(p); X /* X * ro root X */ X oroa = cwraddr(cw->rodev); X pr = getbuf(cw->dev, oroa, Bread|Bmod); X dr = getdir(pr, 0); X datestr(tstr, time()); /* tstr = "yyyymmdd" */ X n = 0; X for(a=0;; a++) { X p1 = dnodebuf(pr, dr, a, Tdir, 0); X if(!p1) X goto bad; X n++; X for(i=0; imode & DALLOC)) X goto found1; X if(!memcmp(d1->name, tstr, 4)) X goto found2; /* found entry */ X } X putbuf(p1); X } X /* X * no year directory, create one X */ found1: X p = getbuf(cw->dev, rba, Bread); X d = getdir(p, 0); X d1->qid = d->qid; X d1->qid.version += n; X memmove(d1->name, tstr, 4); X d1->mode = d->mode; X d1->uid = d->uid; X d1->gid = d->gid; X putbuf(p); X accessdir(p1, d1, FWRITE, 0); X /* X * put mmdd[count] in year directory X */ found2: X accessdir(p1, d1, FREAD, 0); X putbuf(pr); X pr = p1; X dr = d1; X n = 0; X m = 0; X for(a=0;; a++) { X p1 = dnodebuf(pr, dr, a, Tdir, 0); X if(!p1) X goto bad; X n++; X for(i=0; imode & DALLOC)) X goto found; X if(!memcmp(d1->name, tstr+4, 4)) X m++; X } X putbuf(p1); X } X /* X * empty slot put in root X */ found: X if(m) /* how many dumps this date */ X sprint(tstr+8, "%ld", m); X p = getbuf(cw->dev, rba, Bread); X d = getdir(p, 0); X *d1 = *d; /* qid is QPROOT */ X putbuf(p); X strcpy(d1->name, tstr+4); X d1->qid.version += n; X accessdir(p1, d1, FWRITE, 0); X putbuf(p1); X putbuf(pr); X cw->fsize = cwsize(cw->dev); X oroa = cwraddr(cw->rodev); /* probably redundant */ X print("roroot %ld", oroa); X cons.noage = 0; X cw->all = 0; X roa = cwrecur(cw, oroa, Tsuper, 0, QPROOT); X if(roa == 0) { X print("[same]"); X roa = oroa; X } X print("->%ld /%.4s/%s\n", roa, tstr, tstr+4); X sync("after ro"); X /* X * final super block X */ X a = cwsaddr(cw->dev); X print("sblock %ld", a); X p = getbuf(cw->dev, a, Bread|Bmod|Bimm); X s = (Superb*)p->iobuf; X s->last = a; X sba = s->next; X s->next = cw->fsize; X cw->fsize++; X s->fsize = cw->fsize; X s->roraddr = roa; X cwio(cw->dev, sba, 0, Ogrow); X cwio(cw->dev, sba, p->iobuf, Owrite); X cwio(cw->dev, sba, 0, Odump); X print("->%ld (->%ld)\n", sba, s->next); X putbuf(p); X /* X * final cache block X */ X p = getbuf(cw->cdev, CACHE_ADDR, Bread|Bmod|Bimm|Bres); X h = (Cache*)p->iobuf; X h->fsize = cw->fsize; X h->roraddr = roa; X h->sbaddr = sba; X putbuf(p); X rewalk(cw); X sync("all done"); X print("%ld blocks queued for worm\n", cw->ndump); X print("%ld falsehits\n", cw->falsehits); X cw->nodump = 0; X /* X * extend all of the locks X */ X tim = toytime() - tim; X for(i=0; i 0) X tlocks[i].time += tim; X wunlock(&mainlock); X return; bad: X panic("dump: bad"); X} void mvstates(Device *dev, int s1, int s2, int side) X{ X Iobuf *p, *cb; X Cache *h; X Bucket *b; X Centry *c, *ce; X long m, lo, hi, msize, maddr; X Cw *cw; X cw = dev->private; X lo = 0; X hi = lo + devsize(dev->cw.w); /* size of all sides totalled */ X if(side >= 0) { X /* operate on only a single disc side */ X Sidestarts ss; X wormsidestarts(dev, side, &ss); X lo = ss.sstart; X hi = ss.s1start; X } X cb = getbuf(cw->cdev, CACHE_ADDR, Bread|Bres); X if(!cb || checktag(cb, Tcache, QPSUPER)) X panic("cwstats: checktag c bucket"); X h = (Cache*)cb->iobuf; X msize = h->msize; X maddr = h->maddr; X putbuf(cb); X for(m=0; mcdev, maddr + m/BKPERBLK, Bread|Bmod); X if(!p || checktag(p, Tbuck, maddr + m/BKPERBLK)) X panic("cwtest: checktag c bucket"); X b = (Bucket*)p->iobuf + m%BKPERBLK; X ce = b->entry + CEPERBK; X for(c=b->entry; cstate == s1 && c->waddr >= lo && c->waddr < hi) X c->state = s2; X putbuf(p); X } X} void prchain(Device *dev, long m, int flg) X{ X Iobuf *p; X Superb *s; X if(m == 0) { X if(flg) X m = cwsaddr(dev); X else X m = getstartsb(dev); X } X p = getbuf(devnone, Cwxx2, 0); X s = (Superb*)p->iobuf; X for(;;) { X memset(p->iobuf, 0, RBUFSIZE); X if(devread(WDEV(dev), m, p->iobuf) || X checktag(p, Tsuper, QPSUPER)) X break; X if(flg) { X print("dump %ld is good; %ld prev\n", m, s->last); X print("\t%ld cwroot; %ld roroot\n", s->cwraddr, s->roraddr); X if(m <= s->last) X break; X m = s->last; X } else { X print("dump %ld is good; %ld next\n", m, s->next); X print("\t%ld cwroot; %ld roroot\n", s->cwraddr, s->roraddr); X if(m >= s->next) X break; X m = s->next; X } X } X putbuf(p); X} void touchsb(Device *dev) X{ X Iobuf *p; X long m; X m = cwsaddr(dev); X p = getbuf(devnone, Cwxx2, 0); X memset(p->iobuf, 0, RBUFSIZE); X if(devread(WDEV(dev), m, p->iobuf) || X checktag(p, Tsuper, QPSUPER)) X print("WORM SUPER BLOCK READ FAILED\n"); X else X print("touch superblock %ld\n", m); X putbuf(p); X} void storesb(Device *dev, long last, int doit) X{ X Iobuf *ph, *ps; X Cache *h; X Superb *s; X long sbaddr, qidgen; X sbaddr = cwsaddr(dev); X ps = getbuf(devnone, Cwxx2, 0); X if(!ps) { X print("sbstore: getbuf\n"); X return; X } X /* X * try to read last sb X */ X memset(ps->iobuf, 0, RBUFSIZE); X if(devread(WDEV(dev), last, ps->iobuf) || X checktag(ps, Tsuper, QPSUPER)) X print("read last failed\n"); X else X print("read last succeeded\n"); X s = (Superb*)ps->iobuf; X qidgen = s->qidgen; X if(qidgen == 0) X qidgen = 0x31415; X qidgen += 1000; X if(s->next != sbaddr) X print("next(last) is not sbaddr %ld %ld\n", X s->next, sbaddr); X else X print("next(last) is sbaddr\n"); X /* X * read cached superblock X */ X ph = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bres); X if(!ph || checktag(ph, Tcache, QPSUPER)) { X print("cwstats: checktag c bucket\n"); X if(ph) X putbuf(ph); X putbuf(ps); X return; X } else X print("read cached sb succeeded\n"); X X h = (Cache*)ph->iobuf; X memset(ps->iobuf, 0, RBUFSIZE); X settag(ps, Tsuper, QPSUPER); X ps->flags = 0; X s = (Superb*)ps->iobuf; X s->cwraddr = h->cwraddr; X s->roraddr = h->roraddr; X s->fsize = h->fsize; X s->fstart = 2; X s->last = last; X s->next = h->roraddr+1; X s->qidgen = qidgen; X putbuf(ph); X if(s->fsize-1 != s->next || X s->fsize-2 != s->roraddr || X s->fsize-5 != s->cwraddr) { X print("addrs not in relationship %ld %ld %ld %ld\n", X s->cwraddr, s->roraddr, s->next, s->fsize); X putbuf(ps); X return; X } else X print("addresses in relation\n"); X if(doit) X if(devwrite(WDEV(dev), sbaddr, ps->iobuf)) X print("WORM SUPER BLOCK WRITE FAILED\n"); X ps->flags = 0; X putbuf(ps); X} void savecache(Device *dev) X{ X Iobuf *p, *cb; X Cache *h; X Bucket *b; X Centry *c, *ce; X long m, n, maddr, msize, left, *longp, nbyte; X Device *cdev; X if(walkto("/adm/cache")) X goto bad; X if(con_open(FID2, OWRITE|OTRUNC)) X goto bad; X cdev = CDEV(dev); X cb = getbuf(cdev, CACHE_ADDR, Bread|Bres); X if(!cb || checktag(cb, Tcache, QPSUPER)) X panic("savecache: checktag c bucket"); X h = (Cache*)cb->iobuf; X msize = h->msize; X maddr = h->maddr; X putbuf(cb); X n = BUFSIZE; /* calculate write size */ X if(n > MAXDAT) X n = MAXDAT; X cb = getbuf(devnone, Cwxx4, 0); X longp = (long*)cb->iobuf; X left = n/sizeof(long); X cons.offset = 0; X for(m=0; miobuf, cons.offset, nbyte); X cons.offset += nbyte; X longp = (long*)cb->iobuf; X left = n/sizeof(long); X } X p = getbuf(cdev, maddr + m/BKPERBLK, Bread); X if(!p || checktag(p, Tbuck, maddr + m/BKPERBLK)) X panic("cwtest: checktag c bucket"); X b = (Bucket*)p->iobuf + m%BKPERBLK; X ce = b->entry + CEPERBK; X for(c=b->entry; cstate == Cread) { X *longp++ = c->waddr; X left--; X } X putbuf(p); X } X nbyte = (n/sizeof(long) - left) * sizeof(long); X con_write(FID2, cb->iobuf, cons.offset, nbyte); X putbuf(cb); X return; bad: X print("cant open /adm/cache\n"); X} void loadcache(Device *dev, int dskno) X{ X Iobuf *p, *cb; X long m, nbyte, *longp, count; X Sidestarts ss; X if(walkto("/adm/cache")) X goto bad; X if(con_open(FID2, OREAD)) X goto bad; X cb = getbuf(devnone, Cwxx4, 0); X cons.offset = 0; X count = 0; X if (dskno >= 0) X wormsidestarts(dev, dskno, &ss); X for(;;) { X memset(cb->iobuf, 0, BUFSIZE); X nbyte = con_read(FID2, cb->iobuf, cons.offset, 100) / sizeof(long); X if(nbyte <= 0) X break; X cons.offset += nbyte * sizeof(long); X longp = (long*)cb->iobuf; X while(nbyte > 0) { X m = *longp++; X nbyte--; X if(m == 0) X continue; X /* if given a diskno, restrict to just that disc side */ X if(dskno < 0 || m >= ss.sstart && m < ss.s1start) { X p = getbuf(dev, m, Bread); X if(p) X putbuf(p); X count++; X } X } X } X putbuf(cb); X print("%ld blocks loaded from worm %d\n", count, dskno); X return; bad: X print("cant open /adm/cache\n"); X} void morecache(Device *dev, int dskno, long size) X{ X Iobuf *p; X long m, ml, mh, mm, count; X Cache *h; X Sidestarts ss; X p = getbuf(CDEV(dev), CACHE_ADDR, Bread|Bres); X if(!p || checktag(p, Tcache, QPSUPER)) X panic("savecache: checktag c bucket"); X h = (Cache*)p->iobuf; X mm = h->wmax; X putbuf(p); X wormsidestarts(dev, dskno, &ss); X ml = ss.sstart; /* start at beginning of disc side #dskno */ X mh = ml + size; X if(mh > mm) { X mh = mm; X print("limited to %ld\n", mh-ml); X } X count = 0; X for(m=ml; m < mh; m++) { X p = getbuf(dev, m, Bread); X if(p) X putbuf(p); X count++; X } X print("%ld blocks loaded from worm %d\n", count, dskno); X} void blockcmp(Device *dev, long wa, long ca) X{ X Iobuf *p1, *p2; X int i, c; X p1 = getbuf(WDEV(dev), wa, Bread); X if(!p1) { X print("dowcmp: wdev error\n"); X return; X } X p2 = getbuf(CDEV(dev), ca, Bread); X if(!p2) { X print("dowcmp: cdev error\n"); X putbuf(p1); X return; X } X c = 0; X for(i=0; iiobuf[i] != p2->iobuf[i]) { X print("%4d: %.2x %.2x\n", X i, X p1->iobuf[i]&0xff, X p2->iobuf[i]&0xff); X c++; X if(c >= 10) X break; X } X if(c == 0) X print("no error\n"); X putbuf(p1); X putbuf(p2); X} void wblock(Device *dev, long addr) X{ X Iobuf *p1; X int i; X p1 = getbuf(dev, addr, Bread); X if(p1) { X i = devwrite(WDEV(dev), addr, p1->iobuf); X print("i = %d\n", i); X putbuf(p1); X } X} void cwtest(Device*) X{ X} X#ifdef XXX X/* garbage to change sb size X * probably will need it someday X */ X fsz = number(0, 0, 10); X count = 0; X if(fsz == number(0, -1, 10)) X count = -1; /* really do it */ X print("fsize = %ld\n", fsz); X cdev = CDEV(dev); X cb = getbuf(cdev, CACHE_ADDR, Bread|Bres); X if(!cb || checktag(cb, Tcache, QPSUPER)) X panic("cwstats: checktag c bucket"); X h = (Cache*)cb->iobuf; X for(m=0; mmsize; m++) { X p = getbuf(cdev, h->maddr + m/BKPERBLK, Bread|Bmod); X if(!p || checktag(p, Tbuck, h->maddr + m/BKPERBLK)) X panic("cwtest: checktag c bucket"); X b = (Bucket*)p->iobuf + m%BKPERBLK; X ce = b->entry + CEPERBK; X for(c=b->entry; cwaddr < fsz) X continue; X if(count < 0) { X c->state = Cnone; X continue; X } X if(c->state != Cdirty) X count++; X } X putbuf(p); X } X if(count < 0) { X print("old cache hsize = %ld\n", h->fsize); X h->fsize = fsz; X cb->flags |= Bmod; X p = getbuf(dev, h->sbaddr, Bread|Bmod); X s = (Superb*)p->iobuf; X print("old super hsize = %ld\n", s->fsize); X s->fsize = fsz; X putbuf(p); X } X putbuf(cb); X print("count = %ld\n", count); X#endif int convstate(char *name) X{ X int i; X for(i=0; iiobuf+BUFSIZE); X for(i=0; iiobuf, 0, RBUFSIZE); X if(devread(WDEV(d), a+i, p->iobuf)) { X if(n == 1000) X break; X continue; X } X if(t->tag == tag) { X print("tag %d found at %Z %ld\n", tag, d, a+i); X break; X } X } X putbuf(p); X} void cmd_cwcmd(int argc, char *argv[]) X{ X Device *dev; X char *arg; X long s1, s2, a, b, n; X Cw *cw; X char str[28]; X if(argc <= 1) { X print(" cwcmd mvstate state1 state2 [platter]\n"); X print(" cwcmd prchain [start] [bakflg]\n"); X print(" cwcmd searchtag [start] [tag]\n"); X print(" cwcmd touchsb\n"); X print(" cwcmd savecache\n"); X print(" cwcmd loadcache [dskno]\n"); X print(" cwcmd morecache dskno [count]\n"); X print(" cwcmd blockcmp wbno cbno\n"); X print(" cwcmd startdump [01]\n"); X print(" cwcmd acct\n"); X print(" cwcmd clearacct\n"); X goto out; X } X arg = argv[1]; X /* X * items not depend on a cw filesystem X */ X if(strcmp(arg, "acct") == 0) { X for(a=0; adev; X if(dev == 0 || dev->type != Devcw || dev->private == 0) { X print("cfs not a cw filesystem: %Z\n", dev); X goto out; X } X cw = dev->private; X if(strcmp(arg, "searchtag") == 0) { X a = 0; X if(argc > 2) X a = number(argv[2], 0, 10); X b = Tsuper; X if(argc > 3) X b = number(argv[3], 0, 10); X n = 1000; X if(argc > 4) X n = number(argv[4], 0, 10); X searchtag(dev, a, b, n); X goto out; X } X if(strcmp(arg, "mvstate") == 0) { X if(argc < 4) X goto bad; X s1 = convstate(argv[2]); X s2 = convstate(argv[3]); X if(s1 < 0 || s2 < 0) X goto bad; X a = -1; X if(argc > 4) X a = number(argv[4], 0, 10); X mvstates(dev, s1, s2, a); X goto out; X bad: X print("cwcmd mvstate: bad args\n"); X goto out; X } X if(strcmp(arg, "prchain") == 0) { X a = 0; X if(argc > 2) X a = number(argv[2], 0, 10); X s1 = 0; X if(argc > 3) X s1 = number(argv[3], 0, 10); X prchain(dev, a, s1); X goto out; X } X if(strcmp(arg, "touchsb") == 0) { X touchsb(dev); X goto out; X } X if(strcmp(arg, "savecache") == 0) { X savecache(dev); X goto out; X } X if(strcmp(arg, "loadcache") == 0) { X s1 = -1; X if(argc > 2) X s1 = number(argv[2], 0, 10); X loadcache(dev, s1); X goto out; X } X if(strcmp(arg, "morecache") == 0) { X if(argc <= 2) { X print("arg count\n"); X goto out; X } X s1 = number(argv[2], 0, 10); X if(argc > 3) X s2 = number(argv[3], 0, 10); X else X s2 = wormsizeside(dev, s1); /* default to 1 disc side */ X morecache(dev, s1, s2); X goto out; X } X if(strcmp(arg, "blockcmp") == 0) { X if(argc < 4) { X print("cannot arg count\n"); X goto out; X } X s1 = number(argv[2], 0, 10); X s2 = number(argv[3], 0, 10); X blockcmp(dev, s1, s2); X goto out; X } X if(strcmp(arg, "startdump") == 0) { X if(argc > 2) X cw->nodump = number(argv[2], 0, 10); X cw->nodump = !cw->nodump; X if(cw->nodump) X print("dump stopped\n"); X else X print("dump allowed\n"); X goto out; X } X if(strcmp(arg, "allflag") == 0) { X if(argc > 2) X cw->allflag = number(argv[2], 0, 10); X else X cw->allflag = !cw->allflag; X print("allflag = %d; falsehits = %ld\n", X cw->allflag, cw->falsehits); X goto out; X } X if(strcmp(arg, "storesb") == 0) { X a = 4168344; X b = 0; X if(argc > 2) X a = number(argv[2], 4168344, 10); X if(argc > 3) X b = number(argv[3], 0, 10); X storesb(dev, a, b); X goto out; X } X if(strcmp(arg, "test") == 0) { X cwtest(dev); X goto out; X } X print("unknown cwcmd %s\n", arg); out:; X} ! echo dev/juke.c sed 's/^X//' >dev/juke.c <<'!' X#include "all.h" X#define SCSInone SCSIread X#define MAXDRIVE 10 X#define MAXSIDE 500 X#define TWORM MINUTE(10) X#define THYSTER SECOND(10) typedef struct Side Side; struct Side X{ X QLock; /* protects loading/unloading */ X int elem; /* element number */ X int drive; /* if loaded, where */ X uchar status; /* Sunload, etc */ X uchar rot; /* if backside */ X int ord; /* ordinal number for labeling */ X long time; /* time since last access, to unspin */ X long stime; /* time since last spinup, for hysteresis */ X long nblock; /* number of native blocks */ X long block; /* bytes per native block */ X long mult; /* multiplier to get plan9 blocks */ X long max; /* max size in plan9 blocks */ X}; typedef struct Juke Juke; struct Juke X{ X QLock; /* protects drive mechanism */ X Side side[MAXSIDE]; X int nside; /* how many storage elements (*2 if rev) */ X int ndrive; /* number of transfer elements */ X Device* juke; /* devworm of changer */ X Device* drive[MAXDRIVE]; /* devworm for i/o */ X uchar offline[MAXDRIVE]; /* drives removed from service */ X long fixedsize; /* one size fits all */ X int probeok; /* wait for init to probe */ X /* geometry returned by mode sense */ X int mt0, nmt; X int se0, nse; X int ie0, nie; X int dt0, ndt; X int rot; X Juke* link; X}; static Juke* jukelist; enum X{ X Sempty = 0, /* does not exist */ X Sunload, /* on the shelf */ X Sstart, /* loaded and spinning */ X}; extern int FIXEDSIZE; static int wormsense(Device*); static Side* wormunit(Device*); static void shelves(void); static int mmove(Juke*, int, int, int, int); static int bestdrive(Juke*, int); static void waitready(Device*); static void element(Juke*, int); X/* X * mounts and spins up the device X * locks the structure X */ static Side* wormunit(Device *d) X{ X int p, s, drive; X Side *v; X Juke *w; X uchar cmd[10], buf[8]; X w = d->private; X p = d->wren.targ; X if(p < 0 || p >= w->nside) { X// panic("wormunit partition %Z\n", d); X return 0; X } X /* X * if disk is unloaded, must load it X * into next (circular) logical unit X */ X v = &w->side[p]; X qlock(v); X if(v->status == Sunload) { X for(;;) { X qlock(w); X drive = bestdrive(w, p); X if(drive >= 0) X break; X qunlock(w); X waitsec(100); X } X print(" load r%ld drive %Z\n", v-w->side, w->drive[drive]); X if(mmove(w, w->mt0, v->elem, w->dt0+drive, v->rot)) { X qunlock(w); X goto sbad; X } X v->drive = drive; X v->status = Sstart; X v->stime = toytime(); X qunlock(w); X waitready(w->drive[drive]); X v->stime = toytime(); X } X if(v->status != Sstart) { X if(v->status == Sempty) X print("worm: unit empty %Z\n", d); X else X print("worm: not started %Z\n", d); X goto sbad; X } X v->time = toytime(); X if(v->block) X return v; X /* X * capacity command X */ X memset(cmd, 0, sizeof(cmd)); X memset(buf, 0, sizeof(buf)); X cmd[0] = 0x25; /* read capacity */ X s = scsiio(w->drive[v->drive], SCSIread, X cmd, sizeof(cmd), buf, sizeof(buf)); X if(s) X goto sbad; X v->nblock = X (buf[0]<<24) | X (buf[1]<<16) | X (buf[2]<<8) | X (buf[3]<<0); X v->block = X (buf[4]<<24) | X (buf[5]<<16) | X (buf[6]<<8) | X (buf[7]<<0); X v->mult = X (RBUFSIZE + v->block - 1) / X v->block; X v->max = X (v->nblock + 1) / v->mult; X print(" worm %Z: drive %Z\n", d, w->drive[v->drive]); X print(" %ld blocks at %ld bytes each\n", X v->nblock, v->block); X print(" %ld logical blocks at %d bytes each\n", X v->max, RBUFSIZE); X print(" %ld multiplier\n", X v->mult); X if(d->type != Devlworm) X return v; X /* check for label */ X print("label %Z ordinal %d\n", d, v->ord); X qunlock(v); X return wormunit(d); sbad: X qunlock(v); X// panic("wormunit sbad"); X return 0; X} static void waitready(Device *d) X{ X uchar cmd[6]; X int s, e; X for(e=0;e<100;e++) { X memset(cmd, 0, sizeof(cmd)); X s = scsiio(d, SCSInone, cmd, sizeof(cmd), cmd, 0); X if(s == 0) X break; X waitsec(100); X } X} static int bestdrive(Juke *w, int side) X{ X Side *v, *bv[MAXDRIVE]; X int i, s, e, drive; X long t, t0; loop: X /* build table of what platters on what drives */ X for(i=0; indt; i++) X bv[i] = 0; X v = &w->side[0]; X for(i=0; inside; i++, v++) { X s = v->status; X if(s == Sstart) { X drive = v->drive; X if(drive >= 0 && drive < w->ndt) X bv[drive] = v; X } X } X /* X * find oldest drive, but must be X * at least THYSTER old. X */ X e = w->side[side].elem; X t0 = toytime() - THYSTER; X t = t0; X drive = -1; X for(i=0; indt; i++) { X v = bv[i]; X if(v == 0) { /* 2nd priority: empty drive */ X if(w->offline[i]) X continue; X if(w->drive[i] != devnone) { X drive = i; X t = 0; X } X continue; X } X if(v->elem == e) { /* 1st priority: other side */ X drive = -1; X if(v->stime < t0) X drive = i; X break; X } X if(v->stime < t) { /* 3rd priority: by time */ X drive = i; X t = v->stime; X } X } X if(drive >= 0) { X v = bv[drive]; X if(v) { X qlock(v); X if(v->status != Sstart) { X qunlock(v); X goto loop; X } X print(" unload r%ld drive %Z\n", X v-w->side, w->drive[drive]); X if(mmove(w, w->mt0, w->dt0+drive, v->elem, v->rot)) { X qunlock(v); X goto loop; X } X v->status = Sunload; X qunlock(v); X } X } X return drive; X} long wormsize(Device *d) X{ X Side *v; X Juke *w; X long size; X w = d->private; X if(w->fixedsize) { X size = w->fixedsize; X goto out; X } X v = wormunit(d); X if(v == 0) X return 0; X size = v->max; X qunlock(v); X if(FIXEDSIZE) // TODO? push FIXEDSIZE into Device or Juke struct X w->fixedsize = size; out: X if(d->type == Devlworm) X return size-1; X return size; X} X/* X * d must be, or be on, the same jukebox as `side' resides on. X * have to paw through Devmcat of sides. X */ long wormsizeside(Device *d, int side) X{ X int s; X Device *x; X switch(d->type) { X default: X print("wormsizeside: dev not ro, cw, juke nor mcat: %Z\n", d); X return 0; X case Devmcat: /* of sides */ X break; X case Devjuke: X return wormsizeside(d->j.m, side); /* mcat of sides */ X case Devcw: X return wormsizeside(d->cw.w, side); /* should be juke */ X case Devro: X return wormsizeside(d->ro.parent, side); /* cw */ X } X if (side < 0 || side >= d->cat.ndev) { X print("wormsizeside: side %d not in range [0..%d] for %Z\n", X side, d->cat.ndev, d); X return 0; X } X x = d->cat.first; X for (s = 0; s < side; s++) { X x = x->link; X if (x == nil) X panic("wormsizeside nil link"); X } X if (x->type != Devworm && x->type != Devlworm) { X print("wormsizeside: %Z of %Z type not (l)worm\n", x, d); X return 0; X } X return wormsize(x); X} X/* returns starts of side #side and #(side+1) in *stp */ void wormsidestarts(Device *dev, int side, Sidestarts *stp) X{ X int s; X long dstart; X for (dstart = s = 0; s < side; s++) X dstart += wormsizeside(dev, s); X stp->sstart = dstart; X stp->s1start = dstart + wormsizeside(dev, side); X} static int wormiocmd(Device *d, int io, long b, void *c) X{ X Side *v; X Juke *w; X long l, m; X int s; X uchar cmd[10]; X w = d->private; X v = wormunit(d); X if(v == 0) X return 0x71; X if(b >= v->max) { X qunlock(v); X print("worm: wormiocmd out of range %Z(%ld)\n", d, b); X return 0x071; X } X memset(cmd, 0, sizeof(cmd)); X cmd[0] = 0x28; /* extended read */ X if(io != SCSIread) X cmd[0] = 0x2a; /* extended write */ X m = v->mult; X l = b * m; X cmd[2] = l>>24; X cmd[3] = l>>16; X cmd[4] = l>>8; X cmd[5] = l; X cmd[7] = m>>8; X cmd[8] = m; X s = scsiio(w->drive[v->drive], io, cmd, sizeof(cmd), c, RBUFSIZE); X qunlock(v); X return s; X} int wormread(Device *d, long b, void *c) X{ X int s; X s = wormiocmd(d, SCSIread, b, c); X if(s) { X print("wormread: %Z(%ld) bad status #%x\n", d, b, s); X cons.nwormre++; X return s; X } X return 0; X} int wormwrite(Device *d, long b, void *c) X{ X int s; X s = wormiocmd(d, SCSIwrite, b, c); X if(s) { X print("wormwrite: %Z(%ld) bad status #%x\n", d, b, s); X cons.nwormwe++; X return s; X } X return 0; X} static int mmove(Juke *w, int trans, int from, int to, int rot) X{ X uchar cmd[12], buf[4]; X int s; X static recur = 0; X memset(cmd, 0, sizeof(cmd)); X cmd[0] = 0xa5; /* move medium */ X cmd[2] = trans>>8; X cmd[3] = trans; X cmd[4] = from>>8; X cmd[5] = from; X cmd[6] = to>>8; X cmd[7] = to; X if(rot) X cmd[10] = 1; X s = scsiio(w->juke, SCSInone, cmd, sizeof(cmd), buf, 0); X if(s) { X print("scsio status #%x\n", s); X print("move medium t=%d fr=%d to=%d rot=%d", trans, from, to, rot); X// panic("mmove"); X if(recur == 0) { X recur = 1; X print("element from=%d\n", from); X element(w, from); X print("element to=%d\n", to); X element(w, to); X print("element trans=%d\n", trans); X element(w, trans); X recur = 0; X } X return 1; X } X return 0; X} static void geometry(Juke *w) X{ X int s; X uchar cmd[6], buf[4+20]; X memset(cmd, 0, sizeof(cmd)); X memset(buf, 0, sizeof(buf)); X cmd[0] = 0x1a; /* mode sense */ X cmd[2] = 0x1d; /* element address assignment */ X cmd[4] = sizeof(buf); /* allocation length */ X s = scsiio(w->juke, SCSIread, cmd, sizeof(cmd), buf, sizeof(buf)); X if(s) X panic("geometry #%x\n", s); X w->mt0 = (buf[4+2]<<8) | buf[4+3]; X w->nmt = (buf[4+4]<<8) | buf[4+5]; X w->se0 = (buf[4+6]<<8) | buf[4+7]; X w->nse = (buf[4+8]<<8) | buf[4+9]; X w->ie0 = (buf[4+10]<<8) | buf[4+11]; X w->nie = (buf[4+12]<<8) | buf[4+13]; X w->dt0 = (buf[4+14]<<8) | buf[4+15]; X w->ndt = (buf[4+16]<<8) | buf[4+17]; X memset(cmd, 0, 6); X memset(buf, 0, sizeof(buf)); X cmd[0] = 0x1a; /* mode sense */ X cmd[2] = 0x1e; /* transport geometry */ X cmd[4] = sizeof(buf); /* allocation length */ X s = scsiio(w->juke, SCSIread, cmd, sizeof(cmd), buf, sizeof(buf)); X if(s) X panic("geometry #%x\n", s); X w->rot = buf[4+2] & 1; X print(" mt %d %d\n", w->mt0, w->nmt); X print(" se %d %d\n", w->se0, w->nse); X print(" ie %d %d\n", w->ie0, w->nie); X print(" dt %d %d\n", w->dt0, w->ndt); X print(" rot %d\n", w->rot); X prflush(); X} static void element(Juke *w, int e) X{ X uchar cmd[12], buf[8+8+88]; X int s, t; X//loop: X memset(cmd, 0, sizeof(cmd)); X memset(buf, 0, sizeof(buf)); X cmd[0] = 0xb8; /* read element status */ X cmd[2] = e>>8; /* starting element */ X cmd[3] = e; X cmd[5] = 1; /* number of elements */ X cmd[9] = sizeof(buf); /* allocation length */ X s = scsiio(w->juke, SCSIread, cmd, sizeof(cmd), buf, sizeof(buf)); X if(s) { X print("scsiio #%x\n", s); X goto bad; X } X s = (buf[0]<<8) | buf[1]; X if(s != e) { X print("element = %d\n", s); X goto bad; X } X if(buf[3] != 1) { X print("number reported = %d\n", buf[3]); X goto bad; X } X s = (buf[8+8+0]<<8) | buf[8+8+1]; X if(s != e) { X print("element1 = %d\n", s); X goto bad; X } X switch(buf[8+0]) { /* element type */ X default: X print("unknown element %d: %d\n", e, buf[8+0]); X goto bad; X case 1: /* transport */ X s = e - w->mt0; X if(s < 0 || s >= w->nmt) X goto bad; X if(buf[8+8+2] & 1) X print("transport %d full %d.%d\n", s, X (buf[8+8+10]<<8) | buf[8+8+11], X (buf[8+8+9]>>6) & 1); X break; X case 2: /* storage */ X s = e - w->se0; X if(s < 0 || s >= w->nse) X goto bad; X w->side[s].status = Sempty; X if(buf[8+8+2] & 1) X w->side[s].status = Sunload; X if(w->rot) X w->side[w->nse+s].status = w->side[s].status; X break; X case 3: /* import/export */ X s = e - w->ie0; X if(s < 0 || s >= w->nie) X goto bad; X print("import/export %d #%.2x %d.%d\n", s, X buf[8+8+2], X (buf[8+8+10]<<8) | buf[8+8+11], X (buf[8+8+9]>>6) & 1); X break; X case 4: /* data transfer */ X s = e - w->dt0; X if(s < 0 || s >= w->ndt) X goto bad; X print("data transfer %d #%.2x %d.%d\n", s, X buf[8+8+2], X (buf[8+8+10]<<8) | buf[8+8+11], X (buf[8+8+9]>>6) & 1); X if(buf[8+8+2] & 1) { X t = ((buf[8+8+10]<<8) | buf[8+8+11]) - w->se0; X print("r%d in drive %d\n", t, s); X if(mmove(w, w->mt0, w->dt0+s, w->se0+t, (buf[8+8+9]>>6) & 1)) { X print("mmove initial unload\n"); X goto bad; X } X w->side[t].status = Sunload; X if(w->rot) X w->side[w->nse+t].status = Sunload; X } X if(buf[8+8+2] & 4) { X print("drive w%d has exception #%.2x #%.2x\n", s, X buf[8+8+4], buf[8+8+5]); X goto bad; X } X break; X } X return; bad: X// panic("element"); X return; X} static void positions(Juke *w) X{ X int i, f; X /* mark empty shelves */ X for(i=0; inse; i++) X element(w, w->se0+i); X for(i=0; inmt; i++) X element(w, w->mt0+i); X for(i=0; inie; i++) X element(w, w->ie0+i); X for(i=0; indt; i++) X element(w, w->dt0+i); X f = 0; X for(i=0; inse; i++) { X if(w->side[i].status == Sempty) { X if(f) { X print("r%d\n", i-1); X f = 0; X } X } else { X if(!f) { X print(" shelves r%d-", i); X f = 1; X } X } X } X if(f) X print("r%d\n", i-1); X} static void jinit(Juke *w, Device *d, int o) X{ X int p; X Device *dev = d; X switch(d->type) { X default: X print("juke platter not (devmcat of) dev(l)worm: %Z\n", d); X goto bad; X case Devmcat: X /* X * we don't call mcatinit(d) here, so we have to set d->cat.ndev X * ourselves. X */ X for(d=d->cat.first; d; d=d->link) X jinit(w, d, o++); X dev->cat.ndev = o; X break; X case Devlworm: X p = d->wren.targ; X if(p < 0 || p >= w->nside) X panic("jinit partition %Z\n", d); X w->side[p].ord = o; X case Devworm: X if(d->private) { X print("juke platter private pointer set %p\n", X d->private); X goto bad; X } X d->private = w; X break; X } X return; bad: X panic("jinit"); X} Side* wormi(char *arg) X{ X int i, j; X Juke *w; X Side *v; X w = jukelist; X i = number(arg, -1, 10) - 1; X if(i < 0 || i >= w->nside) { X print("bad unit number %s (%d)\n", arg, i+1); X return 0; X } X j = i; X if(j >= w->nse) X j -= w->nse; X if(j < w->nside) { X v = &w->side[j]; X qlock(v); X if(v->status == Sstart) { X if(mmove(w, w->mt0, w->dt0+v->drive, v->elem, v->rot)) { X qunlock(v); X return 0; X } X v->status = Sunload; X } X qunlock(v); X } X j += w->nse; X if(j < w->nside) { X v = &w->side[j]; X qlock(v); X if(v->status == Sstart) { X if(mmove(w, w->mt0, w->dt0+v->drive, v->elem, v->rot)) { X qunlock(v); X return 0; X } X v->status = Sunload; X } X qunlock(v); X } X v = &w->side[i]; X qlock(v); X return v; X} static void cmd_wormoffline(int argc, char *argv[]) X{ X int u, i; X Juke *w; X w = jukelist; X if(argc <= 1) { X print("usage: wormoffline drive\n"); X return; X } X u = number(argv[1], -1, 10); X if(u < 0 || u >= w->ndrive) { X print("bad drive %s (0<=%d<%d)\n", argv[1], u, w->ndrive); X return; X } X if(w->offline[u]) X print("drive %d already offline\n", u); X w->offline[u] = 1; X for(i=0; indrive; i++) X if(w->offline[i] == 0) X return; X print("that would take all drives offline\n"); X w->offline[u] = 0; X} static void cmd_wormonline(int argc, char *argv[]) X{ X int u; X Juke *w; X w = jukelist; X if(argc <= 1) { X print("usage: wormonline drive\n"); X return; X } X u = number(argv[1], -1, 10); X if(u < 0 || u >= w->ndrive) { X print("bad drive %s (0<=%d<%d)\n", argv[1], u, w->ndrive); X return; X } X if(w->offline[u] == 0) X print("drive %d already online\n", u); X w->offline[u] = 0; X} static void cmd_wormreset(int, char *[]) X{ X Juke *w; X for(w=jukelist; w; w=w->link) { X qlock(w); X positions(w); X qunlock(w); X } X} static void cmd_wormeject(int argc, char *argv[]) X{ X Juke *w; X Side *v; X if(argc <= 1) { X print("usage: wormeject unit\n"); X return; X } X w = jukelist; X v = wormi(argv[1]); X if(v == 0) X return; X mmove(w, w->mt0, v->elem, w->ie0, 0); X qunlock(v); X} static void cmd_wormingest(int argc, char *argv[]) X{ X Juke *w; X Side *v; X w = jukelist; X if(argc <= 1) { X print("usage: wormingest unit\n"); X return; X } X v = wormi(argv[1]); X if(v == 0) X return; X mmove(w, w->mt0, w->ie0, v->elem, 0); X qunlock(v); X} void jukeinit(Device *d) X{ X Juke *w; X Device *xdev; X Side *v; X int i; X /* j(ww...)(r) */ X xdev = d->j.j; X if(xdev->type != Devmcat) { X print("juke union not mcat\n"); X goto bad; X } X /* X * pick up the changer device X */ X xdev = xdev->cat.first; X if(xdev->type != Devwren) { X print("juke changer not wren %Z\n", xdev); X goto bad; X } X for(w=jukelist; w; w=w->link) X if(xdev == w->juke) X goto found; X /* X * allocate a juke structure X * no locking problems. X */ X w = ialloc(sizeof(Juke), 0); X w->link = jukelist; X jukelist = w; X print("alloc juke %Z\n", xdev); X qlock(w); X qunlock(w); X w->name = "juke"; X w->juke = xdev; X geometry(w); X /* X * pick up each side X */ X w->nside = w->nse; X if(w->rot) X w->nside += w->nside; X if(w->nside > MAXSIDE) { X print("too many sides: %d max %d\n", w->nside, MAXSIDE); X goto bad; X } X for(i=0; inse; i++) { X v = &w->side[i]; X qlock(v); X qunlock(v); X v->name = "shelf"; X v->elem = w->se0 + i; X v->rot = 0; X v->status = Sempty; X v->time = toytime(); X if(w->rot) { X v += w->nse; X qlock(v); X qunlock(v); X v->name = "shelf"; X v->elem = w->se0 + i; X v->rot = 1; X v->status = Sempty; X v->time = toytime(); X } X } X positions(w); X w->ndrive = w->ndt; X if(w->ndrive > MAXDRIVE) { X print("ndrives truncated to %d\n", MAXDRIVE); X w->ndrive = MAXDRIVE; X } X /* X * pick up each drive X */ X for(i=0; indrive; i++) X w->drive[i] = devnone; X cmd_install("wormreset", "-- put drives back where jukebox thinks they belong", cmd_wormreset); X cmd_install("wormeject", "unit -- shelf to outside", cmd_wormeject); X cmd_install("wormingest", "unit -- outside to shelf", cmd_wormingest); X cmd_install("wormoffline", "unit -- disable drive", cmd_wormoffline); X cmd_install("wormonline", "unit -- enable drive", cmd_wormonline); found: X i = 0; X while(xdev = xdev->link) { X if(xdev->type != Devwren) { X print("drive not devwren: %Z\n", xdev); X goto bad; X } X if(w->drive[i]->type != Devnone && X xdev != w->drive[i]) { X print("double init drive %d %Z %Z\n", i, w->drive[i], xdev); X goto bad; X } X if(i >= w->ndrive) { X print("too many drives %Z\n", xdev); X goto bad; X } X w->drive[i++] = xdev; X } X if(i <= 0) { X print("no drives\n"); X goto bad; X } X /* X * put w pointer in each platter X */ X d->private = w; X jinit(w, d->j.m, 0); X w->probeok = 1; X return; bad: X panic("juke init"); X} int dowcp(void) X{ X return 0; X} X/* X * called periodically X */ void wormprobe(void) X{ X int i, drive; X long t; X Side *v; X Juke *w; X t = toytime() - TWORM; X for(w=jukelist; w; w=w->link) { X if(w->probeok == 0 || !canqlock(w)) X continue; X for(i=0; inside; i++) { X v = &w->side[i]; X if(!canqlock(v)) X continue; X if(v->status == Sstart && t > v->time) { X drive = v->drive; X print(" time r%ld drive %Z\n", X v-w->side, w->drive[drive]); X mmove(w, w->mt0, w->dt0+drive, v->elem, v->rot); X v->status = Sunload; X } X qunlock(v); X } X qunlock(w); X } X} ! echo fs/9fsfs.c sed 's/^X//' >fs/9fsfs.c <<'!' X#include "all.h" X#include "mem.h" X#include "io.h" X#include "ureg.h" X#include "../pc/dosfs.h" X/* X * setting this to zero permits the use of discs of different sizes, but X * can make jukeinit() quite slow while the robotics work through each disc X * twice (once per side). X */ int FIXEDSIZE = 1; X#ifndef DATE X#define DATE 568011600L+4*3600 X#endif ulong mktime = DATE; /* set by mkfile */ Startsb startsb[] = X{ X "main", 2, X 0 X}; Dos dos; static struct X{ X char *name; X long (*read)(int, void*, long); X vlong (*seek)(int, vlong); X long (*write)(int, void*, long); X int (*part)(int, char*); X} nvrdevs[] = X{ X { "fd", floppyread, floppyseek, floppywrite, 0, }, X { "hd", ataread, ataseek, atawrite, setatapart, }, X /* X { "sd", scsiread, scsiseek, scsiwrite, setscsipart, }, X */ X { 0, }, X}; void otherinit(void) X{ X int dev, i, nfd, nhd, s; X char *p, *q, buf[sizeof(nvrfile)+8]; X kbdinit(); X printcpufreq(); X etherinit(); X scsiinit(); X s = spllo(); X nhd = atainit(); X nfd = floppyinit(); X dev = 0; X if(p = getconf("nvr")){ X strncpy(buf, p, sizeof(buf)-2); X buf[sizeof(buf)-1] = 0; X p = strchr(buf, '!'); X q = strrchr(buf, '!'); X if(p == 0 || q == 0 || strchr(p+1, '!') != q) X panic("malformed nvrfile: %s\n", buf); X *p++ = 0; X *q++ = 0; X dev = strtoul(p, 0, 0); X strcpy(nvrfile, q); X p = buf; X } else X if(p = getconf("bootfile")){ X strncpy(buf, p, sizeof(buf)-2); X buf[sizeof(buf)-1] = 0; X p = strchr(buf, '!'); X q = strrchr(buf, '!'); X if(p == 0 || q == 0 || strchr(p+1, '!') != q) X panic("malformed bootfile: %s\n", buf); X *p++ = 0; X *q = 0; X dev = strtoul(p, 0, 0); X p = buf; X } else X if(nfd) X p = "fd"; X else X if(nhd) X p = "hd"; X else X p = "sd"; X for(i = 0; nvrdevs[i].name; i++){ X if(strcmp(p, nvrdevs[i].name) == 0){ X dos.dev = dev; X if(nvrdevs[i].part && (*nvrdevs[i].part)(dos.dev, "disk") == 0) X break; X dos.read = nvrdevs[i].read; X dos.seek = nvrdevs[i].seek; X dos.write = nvrdevs[i].write; X break; X } X } X if(dos.read == 0) X panic("no device for nvram\n"); X if(dosinit(&dos) < 0) X panic("can't init dos dosfs on %s\n", p); X splx(s); X} void touser(void) X{ X int i; X settime(rtctime()); X boottime = time(); X print("sysinit\n"); X sysinit(); X userinit(floppyproc, 0, "floppyproc"); X /* X * Ethernet i/o processes X */ X etherstart(); X /* X * read ahead processes X */ X userinit(rahead, 0, "rah"); X /* X * server processes X */ X for(i=0; itext = "scp"; X synccopy(); X} void localconfinit(void) X{ X /* conf.nfile = 60000; */ /* from emelie */ X conf.nodump = 0; X conf.dumpreread = 1; X conf.firstsb = 0; /* time- & jukebox-dependent optimisation */ X conf.recovsb = 0; X conf.ripoff = 1; X conf.nlgmsg = 100; X conf.nsmmsg = 500; X} int (*fsprotocol[])(Msgbuf*) = { X serve9p1, X serve9p2, X nil, X}; ! echo fs/dat.h sed 's/^X//' >fs/dat.h <<'!' X/* X * The most fundamental constant. X * Will the code compile with RBUFSIZE a variable? X * Nope, for one thing, RBUFSIZE determines FEPERBUF, which determines X * the number of elements in a free-list-block array. X */ X#define RBUFSIZE (4*1024) /* raw buffer size */ X#include "../port/portdat.h" extern Mach mach0; typedef struct Segdesc Segdesc; struct Segdesc X{ X ulong d0; X ulong d1; X}; typedef struct Mbank { X ulong base; X ulong limit; X} Mbank; X#define MAXBANK 8 typedef struct Mconf { X Lock; X Mbank bank[MAXBANK]; X int nbank; X ulong topofmem; X} Mconf; extern Mconf mconf; extern char nvrfile[128]; ! echo port/chk.c sed 's/^X//' >port/chk.c <<'!' X#include "all.h" static char* abits; static long sizabits; static char* qbits; static long sizqbits; static char* name; static long sizname; static long fstart; static long fsize; static long nfiles; static long maxq; static char* calloc; static Device* dev; static long ndup; static long nused; static long nfdup; static long nqbad; static long nfree; static long nbad; static int mod; static int flags; static int ronly; static int cwflag; static long sbaddr; static long oldblock; static int depth; static int maxdepth; X/* local prototypes */ static int fsck(Dentry*); static void ckfreelist(Superb*); static void mkfreelist(Superb*); static void trfreelist(Superb*); static void xaddfree(Device*, long, Superb*, Iobuf*); static void xflush(Device*, Superb*, Iobuf*); static Dentry* maked(long, int, long); static void modd(long, int, Dentry*); static void xread(long, long); static int amark(long); static int fmark(long); static int ftest(long); static void missing(void); static void qmark(long); static void* malloc(ulong); static Iobuf* xtag(long, int, long); static void* malloc(ulong n) X{ X char *p, *q; X p = calloc; X while((ulong)p & 3) X p++; X q = p+n; X if(((ulong)q&0x0fffffffL) >= conf.mem) X panic("check: mem size"); X calloc = q; X memset(p, 0, n); X return p; X} X/* X * check flags X */ enum X{ X Crdall = (1<<0), /* read all files */ X Ctag = (1<<1), /* rebuild tags */ X Cpfile = (1<<2), /* print files */ X Cpdir = (1<<3), /* print directories */ X Cfree = (1<<4), /* rebuild free list */ X Csetqid = (1<<5), /* resequence qids */ X Cream = (1<<6), /* clear all bad tags */ X Cbad = (1<<7), /* clear all bad blocks */ X Ctouch = (1<<8), /* touch old dir and indir */ X}; static struct X{ X char* option; X long flag; X} ckoption[] = X{ X "rdall", Crdall, X "tag", Ctag, X "pfile", Cpfile, X "pdir", Cpdir, X "free", Cfree, X "setqid", Csetqid, X "ream", Cream, X "bad", Cbad, X "touch", Ctouch, X 0, X}; void cmd_check(int argc, char *argv[]) X{ X long f, i; X Filsys *fs; X Iobuf *p; X Superb *sb; X Dentry *d; X long raddr, flag; X flag = 0; X for(i=1; idev; X ronly = (dev->type == Devro); X cwflag = (dev->type == Devcw) | (dev->type == Devro); X if(!ronly) X wlock(&mainlock); /* check */ X calloc = (char*)ialloc(0, 1) + 100000; X flags = flag; X sizqbits = ((1<<22) + 7) / 8; /* botch */ X qbits = malloc(sizqbits); X sbaddr = superaddr(dev); X raddr = getraddr(dev); X p = xtag(sbaddr, Tsuper, QPSUPER); X if(!p) X goto out; X sb = (Superb*)p->iobuf; X fstart = 2; X cons.noage = 1; X fsize = sb->fsize; X sizabits = (fsize-fstart + 7)/8; X abits = malloc(sizabits); X sizname = 4000; X name = malloc(sizname); X sizname -= NAMELEN+10; /* for safety */ X mod = 0; X nfree = 0; X nfdup = 0; X nused = 0; X nbad = 0; X ndup = 0; X nqbad = 0; X depth = 0; X maxdepth = 0; X if(flags & Ctouch) { X /* round fsize down to start of current side */ X int s; X long dsize; X oldblock = 0; X for (s = 0; dsize = wormsizeside(dev, s), X dsize > 0 && oldblock + dsize < fsize; s++) X oldblock += dsize; X print("oldblock = %ld\n", oldblock); X } X amark(sbaddr); X if(cwflag) { X amark(sb->roraddr); X amark(sb->next); X } X print("checking filsys: %s\n", fs->name); X nfiles = 0; X maxq = 0; X d = maked(raddr, 0, QPROOT); X if(d) { X amark(raddr); X if(fsck(d)) X modd(raddr, 0, d); X depth--; X calloc -= sizeof(Dentry); X if(depth) X print("depth not zero on return\n"); X } X if(flags & Cfree) { X if(cwflag) X trfreelist(sb); X else X mkfreelist(sb); X } X if(sb->qidgen < maxq) X print("qid generator low path=%ld maxq=%ld\n", X sb->qidgen, maxq); X if(!(flags & Cfree)) X ckfreelist(sb); X if(mod) { X sb->qidgen = maxq; X print("file system was modified\n"); X settag(p, Tsuper, QPNONE); X } X print("nfiles = %ld\n", nfiles); X print("fsize = %ld\n", fsize); X print("nused = %ld\n", nused); X print("ndup = %ld\n", ndup); X print("nfree = %ld\n", nfree); X print("tfree = %ld\n", sb->tfree); X print("nfdup = %ld\n", nfdup); X print("nmiss = %ld\n", fsize-fstart-nused-nfree); X print("nbad = %ld\n", nbad); X print("nqbad = %ld\n", nqbad); X print("maxq = %ld\n", maxq); X if(!cwflag) X missing(); out: X cons.noage = 0; X putbuf(p); X if(!ronly) X wunlock(&mainlock); X} static int fsck(Dentry *d) X{ X Dentry *nd; X Iobuf *p1, *p2, *pd; X int i, j, k, ns, dmod; X long a, qpath; X depth++; X if(depth >= maxdepth) { X maxdepth = depth; X /* X * On a 386 each recursion costs 72 bytes or thereabouts, X * for some slop bump it up to 100. X * Alternatives here might be to give the check process X * a much bigger stack or rewrite it without recursion. X */ X if(maxdepth >= MAXSTACK/100) { X print("max depth exceeded: %s\n", name); X return 0; X } X } X dmod = 0; X if(!(d->mode & DALLOC)) X goto out; X nfiles++; X ns = strlen(name); X i = strlen(d->name); X if(i >= NAMELEN) { X d->name[NAMELEN-1] = 0; X print("%s->name (%s) not terminated\n", name, d->name); X return 0; X } X ns += i; X if(ns >= sizname) { X print("%s->name (%s) name too large\n", name, d->name); X return 0; X } X strcat(name, d->name); X if(d->mode & DDIR) { X if(ns > 1) { X strcat(name, "/"); X ns++; X } X if(flags & Cpdir) { X print("%s\n", name); X prflush(); X } X } else X if(flags & Cpfile) { X print("%s\n", name); X prflush(); X } X qpath = d->qid.path & ~QPDIR; X qmark(qpath); X if(qpath > maxq) X maxq = qpath; X for(i=0; idblock[i]; X if(amark(a)) { X if(flags & Cbad) { X d->dblock[i] = 0; X dmod++; X } X a = 0; X } X if(!a) X continue; X if(d->mode & DDIR) { X if((flags&Ctouch) && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X for(k=0; kiblock; X if(amark(a)) { X if(flags & Cbad) { X d->iblock = 0; X dmod++; X } X a = 0; X } X if(a) { X if((flags&Ctouch) && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X if(p1 = xtag(a, Tind1, qpath)) X for(i=0; iiobuf)[i]; X if(amark(a)) { X if(flags & Cbad) { X ((long*)p1->iobuf)[i] = 0; X p1->flags |= Bmod; X } X a = 0; X } X if(!a) X continue; X if(d->mode & DDIR) { X if((flags&Ctouch) && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X for(k=0; kdiblock; X if(amark(a)) { X if(flags & Cbad) { X d->diblock = 0; X dmod++; X } X a = 0; X } X if((flags&Ctouch) && a && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X if(p2 = xtag(a, Tind2, qpath)) X for(i=0; iiobuf)[i]; X if(amark(a)) { X if(flags & Cbad) { X ((long*)p2->iobuf)[i] = 0; X p2->flags |= Bmod; X } X continue; X } X if((flags&Ctouch) && a && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X if(p1 = xtag(a, Tind1, qpath)) X for(j=0; jiobuf)[j]; X if(amark(a)) { X if(flags & Cbad) { X ((long*)p1->iobuf)[j] = 0; X p1->flags |= Bmod; X } X continue; X } X if(!a) X continue; X if(d->mode & DDIR) { X if((flags&Ctouch) && a < oldblock) { X pd = getbuf(dev, a, Bread|Bmod); X if(pd) X putbuf(pd); X dmod++; X } X for(k=0; kiobuf; X if(x->count < XFEN) { X x->addr[x->count] = a; X x->count++; X return; X } X if(!x->flag) { X memset(&sb->fbuf, 0, sizeof(sb->fbuf)); X sb->fbuf.free[0] = 0L; X sb->fbuf.nfree = 1; X sb->tfree = 0; X x->flag = 1; X } X addfree(dev, a, sb); X} static void xflush(Device *dev, Superb *sb, Iobuf *p) X{ X int i; X Xfree *x; X x = (Xfree*)p->iobuf; X if(!x->flag) { X memset(&sb->fbuf, 0, sizeof(sb->fbuf)); X sb->fbuf.free[0] = 0L; X sb->fbuf.nfree = 1; X sb->tfree = 0; X } X for(i=0; icount; i++) X addfree(dev, x->addr[i], sb); X} X/* X * make freelist X * from existing freelist X * (cw devices) X */ static void trfreelist(Superb *sb) X{ X long a; X int n, i; X Iobuf *p, *xp; X Fbuf *fb; X xp = getbuf(devnone, Cckbuf, 0); X memset(xp->iobuf, 0, BUFSIZE); X fb = &sb->fbuf; X p = 0; X for(;;) { X n = fb->nfree; X if(n < 0 || n > FEPERBUF) X break; X for(i=1; ifree[i]; X if(a && !ftest(a)) X xaddfree(dev, a, sb, xp); X } X a = fb->free[0]; X if(!a) X break; X if(ftest(a)) X break; X xaddfree(dev, a, sb, xp); X if(p) X putbuf(p); X p = xtag(a, Tfree, QPNONE); X if(!p) X break; X fb = (Fbuf*)p->iobuf; X } X if(p) X putbuf(p); X xflush(dev, sb, xp); X putbuf(xp); X mod++; X print("%ld blocks free\n", sb->tfree); X} static void ckfreelist(Superb *sb) X{ X long a, lo, hi; X int n, i; X Iobuf *p; X Fbuf *fb; X strcpy(name, "free list"); X print("check %s\n", name); X fb = &sb->fbuf; X a = sbaddr; X p = 0; X lo = 0; X hi = 0; X for(;;) { X n = fb->nfree; X if(n < 0 || n > FEPERBUF) { X print("check: nfree bad %ld\n", a); X break; X } X for(i=1; ifree[i]; X if(a && !fmark(a)) { X if(!lo || lo > a) X lo = a; X if(!hi || hi < a) X hi = a; X } X } X a = fb->free[0]; X if(!a) X break; X if(fmark(a)) X break; X if(!lo || lo > a) X lo = a; X if(!hi || hi < a) X hi = a; X if(p) X putbuf(p); X p = xtag(a, Tfree, QPNONE); X if(!p) X break; X fb = (Fbuf*)p->iobuf; X } X if(p) X putbuf(p); X print("lo = %ld; hi = %ld\n", lo, hi); X} X/* X * make freelist from scratch X */ static void mkfreelist(Superb *sb) X{ X long a; X int i, b; X if(ronly) { X print("cant make freelist on ronly device\n"); X return; X } X strcpy(name, "free list"); X memset(&sb->fbuf, 0, sizeof(sb->fbuf)); X sb->fbuf.free[0] = 0L; X sb->fbuf.nfree = 1; X sb->tfree = 0; X for(a=fsize-fstart-1; a >= 0; a--) { X i = a/8; X if(i < 0 || i >= sizabits) X continue; X b = 1 << (a&7); X if(abits[i] & b) X continue; X addfree(dev, fstart+a, sb); X } X print("%ld blocks free\n", sb->tfree); X mod++; X} static Dentry* maked(long a, int s, long qpath) X{ X Iobuf *p; X Dentry *d, *d1; X p = xtag(a, Tdir, qpath); X if(!p) X return 0; X d = getdir(p, s); X d1 = malloc(sizeof(Dentry)); X memmove(d1, d, sizeof(Dentry)); X putbuf(p); X return d1; X} static void modd(long a, int s, Dentry *d1) X{ X Iobuf *p; X Dentry *d; X if(!(flags & Cbad)) X return; X p = getbuf(dev, a, Bread); X d = getdir(p, s); X if(!d) { X if(p) X putbuf(p); X return; X } X memmove(d, d1, sizeof(Dentry)); X p->flags |= Bmod; X putbuf(p); X} static void xread(long a, long qpath) X{ X Iobuf *p; X p = xtag(a, Tfile, qpath); X if(p) X putbuf(p); X} static Iobuf* xtag(long a, int tag, long qpath) X{ X Iobuf *p; X if(a == 0) X return 0; X p = getbuf(dev, a, Bread); X if(!p) { X print("check: \"%s\": xtag: p null\n", name); X if(flags & (Cream|Ctag)) { X p = getbuf(dev, a, Bmod); X if(p) { X memset(p->iobuf, 0, RBUFSIZE); X settag(p, tag, qpath); X mod++; X return p; X } X } X return 0; X } X if(checktag(p, tag, qpath)) { X print("check: \"%s\": xtag: checktag\n", name); X if(flags & (Cream|Ctag)) { X if(flags & Cream) X memset(p->iobuf, 0, RBUFSIZE); X settag(p, tag, qpath); X mod++; X return p; X } X return p; X } X return p; X} static int amark(long a) X{ X long i; X int b; X if(a < fstart || a >= fsize) { X if(a == 0) X return 0; X print("check: \"%s\": range %ld\n", X name, a); X nbad++; X return 1; X } X a -= fstart; X i = a/8; X b = 1 << (a&7); X if(abits[i] & b) { X if(!ronly) { X if(ndup < 10) X print("check: \"%s\": address dup %ld\n", X name, fstart+a); X else X if(ndup == 10) X print("..."); X } X ndup++; X return 1; X } X abits[i] |= b; X nused++; X return 0; X} static int fmark(long a) X{ X long i; X int b; X if(a < fstart || a >= fsize) { X print("check: \"%s\": range %ld\n", X name, a); X nbad++; X return 1; X } X a -= fstart; X i = a/8; X b = 1 << (a&7); X if(abits[i] & b) { X print("check: \"%s\": address dup %ld\n", X name, fstart+a); X nfdup++; X return 1; X } X abits[i] |= b; X nfree++; X return 0; X} static int ftest(long a) X{ X long i; X int b; X if(a < fstart || a >= fsize) X return 1; X a -= fstart; X i = a/8; X b = 1 << (a&7); X if(abits[i] & b) X return 1; X abits[i] |= b; X return 0; X} static void missing(void) X{ X long a, i; X int b, n; X n = 0; X for(a=fsize-fstart-1; a>=0; a--) { X i = a/8; X b = 1 << (a&7); X if(!(abits[i] & b)) { X print("missing: %ld\n", fstart+a); X n++; X } X if(n > 10) { X print(" ...\n"); X break; X } X } X} static void qmark(long qpath) X{ X int i, b; X i = qpath/8; X b = 1 << (qpath&7); X if(i < 0 || i >= sizqbits) { X nqbad++; X if(nqbad < 20) X print("check: \"%s\": qid out of range %lux\n", X name, qpath); X return; X } X if((qbits[i] & b) && !ronly) { X nqbad++; X if(nqbad < 20) X print("check: \"%s\": qid dup %lux\n", X name, qpath); X } X qbits[i] |= b; X} ! echo port/portdat.h sed 's/^X//' >port/portdat.h <<'!' X/* X * fundamental constants X */ X#define SUPER_ADDR 2 /* address of superblock */ X#define ROOT_ADDR 3 /* address of root directory */ X#define NAMELEN 28 /* size of names */ X#define NDBLOCK 6 /* number of direct blocks in Dentry */ X#define MAXDAT 8192 /* max allowable data message */ X#define MAXMSG 128 /* max size protocol message sans data */ X#define OFFMSG 60 /* offset of msg in buffer */ X#define NDRIVE 16 /* size of drive structure */ X#define NTLOCK 200 /* number of active file Tlocks */ X#define LRES 3 /* profiling resolution */ X#define NATTID 10 /* the last 10 ID's in attaches */ X#define C0a 59 /* time constants for filters */ X#define C0b 60 X#define C1a 599 X#define C1b 600 X#define C2a 5999 X#define C2b 6000 X/* X * derived constants X */ X#define BUFSIZE (RBUFSIZE-sizeof(Tag)) X#define DIRPERBUF (BUFSIZE/sizeof(Dentry)) X#define INDPERBUF (BUFSIZE/sizeof(long)) X#define INDPERBUF2 (INDPERBUF*INDPERBUF) X#define FEPERBUF ((BUFSIZE-sizeof(Super1)-sizeof(long))/sizeof(long)) X#define SMALLBUF (MAXMSG) X#define LARGEBUF (MAXMSG+MAXDAT+256) X#define RAGAP (300*1024)/BUFSIZE /* readahead parameter */ X#define CEPERBK ((BUFSIZE-BKPERBLK*sizeof(long))/\ X (sizeof(Centry)*BKPERBLK)) X#define BKPERBLK 10 typedef struct Alarm Alarm; typedef struct Auth Auth; typedef struct Conf Conf; typedef struct Label Label; typedef struct Lock Lock; typedef struct Mach Mach; typedef struct QLock QLock; typedef struct Ureg Ureg; typedef struct User User; typedef struct Fbuf Fbuf; typedef struct Super1 Super1; typedef struct Superb Superb; typedef struct Filsys Filsys; typedef struct Startsb Startsb; typedef struct Dentry Dentry; typedef struct Tag Tag; typedef struct Talarm Talarm; typedef struct Uid Uid; typedef struct Device Device; typedef struct Qid9p1 Qid9p1; typedef struct Iobuf Iobuf; typedef struct Wpath Wpath; typedef struct File File; typedef struct Chan Chan; typedef struct Cons Cons; typedef struct Time Time; typedef struct Tm Tm; typedef struct Rtc Rtc; typedef struct Hiob Hiob; typedef struct RWlock RWlock; typedef struct Msgbuf Msgbuf; typedef struct Queue Queue; typedef struct Command Command; typedef struct Flag Flag; typedef struct Bp Bp; typedef struct Rabuf Rabuf; typedef struct Rendez Rendez; typedef struct Filter Filter; typedef ulong Float; typedef struct Tlock Tlock; typedef struct Cache Cache; typedef struct Centry Centry; typedef struct Bucket Bucket; struct Lock X{ X ulong* sbsem; /* addr of sync bus semaphore */ X ulong pc; X ulong sr; X}; struct Rendez X{ X Lock; X User* p; X}; struct Filter X{ X ulong count; /* count and old count kept separate */ X ulong oldcount; /* so interrput can read them */ X int c1; /* time const multiplier */ X int c2; /* time const divider */ X int c3; /* scale for printing */ X Float filter; /* filter */ X}; struct QLock X{ X Lock; /* to use object */ X User* head; /* next process waiting for object */ X User* tail; /* last process waiting for object */ X char* name; /* for diagnostics */ X int locked; /* flag, is locked */ X}; struct RWlock X{ X int nread; X QLock wr; X QLock rd; X}; X/* X * send/recv queue structure X */ struct Queue X{ X Lock; /* to manipulate values */ X int size; /* size of queue */ X int loc; /* circular pointer */ X int count; /* how many in queue */ X User* rhead; /* process's waiting for send */ X User* rtail; X User* whead; /* process's waiting for recv */ X User* wtail; X void* args[1]; /* list of saved pointers, [->size] */ X}; struct Tag X{ X short pad; X short tag; X long path; X}; struct Device X{ X uchar type; X uchar init; X Device* link; /* link for mcat/mlev/mirror */ X Device* dlink; /* link all devices */ X void* private; X long size; X union X { X struct /* worm wren, (l)worm in targ */ X { X int ctrl; X int targ; X int lun; X } wren; X struct /* ata/ide */ X { X int ctrl; X int unit; X } ata; X struct /* mcat mlev mirror */ X { X Device* first; X Device* last; X int ndev; X } cat; X struct /* cw */ X { X Device* c; X Device* w; X Device* ro; X } cw; X struct /* juke */ X { X Device* j; /* (robotics, worm drives) - wrens */ X Device* m; /* (sides) - r or l devices */ X } j; X struct /* ro */ X { X Device* parent; X } ro; X struct /* fworm */ X { X Device* fw; X } fw; X struct /* part */ X { X Device* d; X long base; X long size; X } part; X struct /* byte-swapped */ X { X Device* d; X } swab; X }; X}; typedef struct Sidestarts { X long sstart; /* blocks before start of side */ X long s1start; /* blocks before start of next side */ X} Sidestarts; struct Rabuf X{ X union X { X struct X { X Device* dev; X long addr; X }; X Rabuf* link; X }; X}; typedef struct Qid X{ X uvlong path; X ulong vers; X uchar type; X} Qid; X/* bits in Qid.type */ X#define QTDIR 0x80 /* type bit for directories */ X#define QTAPPEND 0x40 /* type bit for append only files */ X#define QTEXCL 0x20 /* type bit for exclusive use files */ X#define QTMOUNT 0x10 /* type bit for mounted channel */ X#define QTAUTH 0x08 /* type bit for authentication file */ X#define QTFILE 0x00 /* plain file */ X/* DONT TOUCH, this is the disk structure */ struct Qid9p1 X{ X long path; X long version; X}; struct Hiob X{ X Iobuf* link; X Lock; X}; struct Chan X{ X char type; /* major driver type i.e. Dev* */ X int (*protocol)(Msgbuf*); /* version */ X int msize; /* version */ X char whochan[50]; X char whoname[NAMELEN]; X void (*whoprint)(Chan*); X ulong flags; X int chan; /* overall channel number, mostly for printing */ X int nmsgs; /* outstanding messages, set under flock -- for flush */ X ulong whotime; X Filter work; X Filter rate; X int nfile; /* used by cmd_files */ X RWlock reflock; X Chan* next; /* link list of chans */ X Queue* send; X Queue* reply; X uchar authinfo[64]; X void* ifc; X void* pdata; X}; struct Filsys X{ X char* name; /* name of filsys */ X char* conf; /* symbolic configuration */ X Device* dev; /* device that filsys is on */ X int flags; X #define FREAM (1<<0) /* mkfs */ X #define FRECOVER (1<<1) /* install last dump */ X #define FEDIT (1<<2) /* modified */ X}; struct Startsb X{ X char* name; X long startsb; X}; struct Time X{ X ulong lasttoy; X long bias; X long offset; X}; X/* X * array of qids that are locked X */ struct Tlock X{ X Device* dev; X ulong time; X long qpath; X File* file; X}; struct Cons X{ X ulong flags; /* overall flags for all channels */ X QLock; /* generic qlock for mutex */ X int uid; /* botch -- used to get uid on cons_create */ X int gid; /* botch -- used to get gid on cons_create */ X int nuid; /* number of uids */ X int ngid; /* number of gids */ X long offset; /* used to read files, c.f. fchar */ X int chano; /* generator for channel numbers */ X Chan* chan; /* console channel */ X Filsys* curfs; /* current filesystem */ X int profile; /* are we profiling? */ X long* profbuf; X ulong minpc; X ulong maxpc; X ulong nprofbuf; X long nlarge; /* number of large message buffers */ X long nsmall; /* ... small ... */ X long nwormre; /* worm read errors */ X long nwormwe; /* worm write errors */ X long nwormhit; /* worm read cache hits */ X long nwormmiss; /* worm read cache non-hits */ X int noage; /* dont update cache age, dump and check */ X long nwrenre; /* disk read errors */ X long nwrenwe; /* disk write errors */ X long nreseq; /* cache bucket resequence */ X Filter work[3]; /* thruput in messages */ X Filter rate[3]; /* thruput in bytes */ X Filter bhit[3]; /* getbufs that hit */ X Filter bread[3]; /* getbufs that miss and read */ X Filter brahead[3]; /* messages to readahead */ X Filter binit[3]; /* getbufs that miss and dont read */ X}; struct File X{ X QLock; X Qid qid; X Wpath* wpath; X Chan* cp; /* null means a free slot */ X Tlock* tlock; /* if file is locked */ X File* next; /* in cp->flist */ X Filsys* fs; X long addr; X long slot; X long lastra; /* read ahead address */ X ulong fid; X short uid; X Auth *auth; X char open; X #define FREAD 1 X #define FWRITE 2 X #define FREMOV 4 X long doffset; /* directory reading */ X ulong dvers; X long dslot; X}; struct Wpath X{ X Wpath* up; /* pointer upwards in path */ X long addr; /* directory entry addr */ X long slot; /* directory entry slot */ X short refs; /* number of files using this structure */ X}; struct Iobuf X{ X QLock; X Device* dev; X Iobuf* fore; /* for lru */ X Iobuf* back; /* for lru */ X char* iobuf; /* only active while locked */ X char* xiobuf; /* "real" buffer pointer */ X long addr; X int flags; X}; struct Uid X{ X short uid; /* user id */ X short lead; /* leader of group */ X short *gtab; /* group table */ X int ngrp; /* number of group entries */ X char name[NAMELEN]; /* user name */ X}; X/* DONT TOUCH, this is the disk structure */ struct Dentry X{ X char name[NAMELEN]; X short uid; X short gid; X ushort mode; X #define DALLOC 0x8000 X #define DDIR 0x4000 X #define DAPND 0x2000 X #define DLOCK 0x1000 X #define DREAD 0x4 X #define DWRITE 0x2 X #define DEXEC 0x1 X short muid; X Qid9p1 qid; X long size; X long dblock[NDBLOCK]; X long iblock; X long diblock; X long atime; X long mtime; X}; X/* DONT TOUCH, this is the disk structure */ struct Super1 X{ X long fstart; X long fsize; X long tfree; X long qidgen; /* generator for unique ids */ X /* X * Stuff for WWC device X */ X long cwraddr; /* cfs root addr */ X long roraddr; /* dump root addr */ X long last; /* last super block addr */ X long next; /* next super block addr */ X}; X/* DONT TOUCH, this is the disk structure */ struct Fbuf X{ X long nfree; X long free[FEPERBUF]; X}; X/* DONT TOUCH, this is the disk structure */ struct Superb X{ X Fbuf fbuf; X Super1; X}; struct Label X{ X ulong pc; X ulong sp; X}; struct Alarm X{ X Lock; X Alarm* next; X int busy; X int dt; /* in ticks */ X void (*f)(Alarm*, void*); X void* arg; X}; struct Talarm X{ X Lock; X User *list; X}; struct Conf X{ X ulong nmach; /* processors */ X ulong nproc; /* processes */ X ulong mem; /* total physical bytes of memory */ X ulong sparemem; /* memory left for check/dump and chans */ X ulong nalarm; /* alarms */ X ulong nuid; /* distinct uids */ X ulong nserve; /* server processes */ X ulong nfile; /* number of fid -- system wide */ X ulong nwpath; /* number of active paths, derrived from nfile */ X ulong gidspace; /* space for gid names -- derrived from nuid */ X ulong nlgmsg; /* number of large message buffers */ X ulong nsmmsg; /* number of small message buffers */ X ulong wcpsize; /* memory for worm copies; unused in 4e */ X ulong recovcw; /* recover addresses */ X ulong recovro; X ulong firstsb; X ulong recovsb; X ulong nauth; /* number of Auth structs */ X uchar nodump; /* no periodic dumps */ X uchar ripoff; X uchar dumpreread; /* read and compare in dump copy */ X ulong npage0; /* total physical pages of memory */ X ulong npage1; /* total physical pages of memory */ X ulong base0; /* base of bank 0 */ X ulong base1; /* base of bank 1 */ X}; X/* X * message buffers X * 2 types, large and small X */ struct Msgbuf X{ X short count; X short flags; X #define LARGE (1<<0) X #define FREE (1<<1) X #define BFREE (1<<2) X #define BTRACE (1<<7) X #define Mbrcvbuf (1<<15) /* to free, call (*free)(this) */ X Chan* chan; X Msgbuf* next; X ulong param; X int category; X uchar* data; /* rp or wp: current processing point */ X uchar* xdata; /* base of allocation */ X /* added for cpu kernel compatibility - geoff */ X void (*free)(Msgbuf *); X}; X/* X * message buffer categories X */ enum X{ X Mxxx = 0, X Mbreply1, X Mbreply2, X Mbreply3, X Mbreply4, X Mbarp1, X Mbarp2, X Mbip1, X Mbip2, X Mbip3, X Mbil1, X Mbil2, X Mbil3, X Mbil4, X Mbilauth, X Maeth1, X Maeth2, X Maeth3, X Mbeth1, X Mbeth2, X Mbeth3, X Mbeth4, X Mbsntp, X MAXCAT, X}; struct Mach X{ X int machno; /* physical id of processor */ X int mmask; /* 1<machno */ X ulong ticks; /* of the clock since boot time */ X int lights; /* light lights, this processor */ X User* proc; /* current process on this processor */ X Label sched; /* scheduler wakeup */ X Lock alarmlock; /* access to alarm list */ X void* alarm; /* alarms bound to this clock */ X void (*intr)(Ureg*, ulong); /* pending interrupt */ X User* intrp; /* process that was interrupted */ X ulong cause; /* arg to intr */ X Ureg* ureg; /* arg to intr */ X uchar stack[1]; X}; X#define MAXSTACK 4000 X#define NHAS 100 struct User X{ X Label sched; X Mach* mach; /* machine running this proc */ X User* rnext; /* next process in run queue */ X User* qnext; /* next process on queue for a QLock */ X void (*start)(void); /* startup function */ X char* text; /* name of this process */ X void* arg; X Filter time[3]; /* cpu time used */ X int exiting; X int pid; X int state; X Rendez tsleep; X ulong twhen; X Rendez *trend; X User *tlink; X int (*tfn)(void*); X struct X { X QLock* q[NHAS];/* list of locks this process has */ X QLock* want; /* lock waiting */ X } has; X uchar stack[MAXSTACK]; X}; X#define PRINTSIZE 256 struct X{ X Lock; X int machs; X int exiting; X} active; struct Command X{ X char* arg0; X char* help; X void (*func)(int, char*[]); X}; struct Flag X{ X char* arg0; X char* help; X ulong flag; X}; struct Tm X{ X /* see ctime(3) */ X int sec; X int min; X int hour; X int mday; X int mon; X int year; X int wday; X int yday; X int isdst; X}; struct Rtc X{ X int sec; X int min; X int hour; X int mday; X int mon; X int year; X}; X/* X * cw device X */ X/* DONT TOUCH, this is the disk structure */ struct Cache X{ X long maddr; /* cache map addr */ X long msize; /* cache map size in buckets */ X long caddr; /* cache addr */ X long csize; /* cache size */ X long fsize; /* current size of worm */ X long wsize; /* max size of the worm */ X long wmax; /* highwater write */ X long sbaddr; /* super block addr */ X long cwraddr; /* cw root addr */ X long roraddr; /* dump root addr */ X long toytime; /* somewhere convienent */ X long time; X}; X/* DONT TOUCH, this is the disk structure */ struct Centry X{ X ushort age; X short state; X long waddr; /* worm addr */ X}; X/* DONT TOUCH, this is the disk structure */ struct Bucket X{ X long agegen; /* generator for ages in this bkt */ X Centry entry[CEPERBK]; X}; X/* X * scsi i/o X */ enum X{ X SCSIread = 0, X SCSIwrite = 1, X}; X/* X * Process states X */ enum X{ X Dead = 0, X Moribund, X Zombie, X Ready, X Scheding, X Running, X Queueing, X Sending, X Recving, X MMUing, X Exiting, X Inwait, X Wakeme, X Broken, X}; X/* X * Lights X */ enum X{ X Lreal = 0, /* blink in clock interrupt */ X Lintr, /* on while in interrupt */ X Lpanic, /* in panic */ X Lcwmap, /* in cw lookup */ X}; X/* X * devnone block numbers X */ enum X{ X Cwio1 = 1, X Cwio2, X Cwxx1, X Cwxx2, X Cwxx3, X Cwxx4, X Cwdump1, X Cwdump2, X Cuidbuf, X Cckbuf, X}; X/* X * error codes generated from the file server X */ enum X{ X Ebadspc = 1, X Efid, X Echar, X Eopen, X Ecount, X Ealloc, X Eqid, X Eaccess, X Eentry, X Emode, X Edir1, X Edir2, X Ephase, X Eexist, X Edot, X Eempty, X Ebadu, X Enoattach, X Ewstatb, X Ewstatd, X Ewstatg, X Ewstatl, X Ewstatm, X Ewstato, X Ewstatp, X Ewstatq, X Ewstatu, X Ewstatv, X Ename, X Ewalk, X Eronly, X Efull, X Eoffset, X Elocked, X Ebroken, X Eauth, X Eauth2, X Efidinuse, X Etoolong, X Econvert, X Eversion, X Eauthdisabled, X Eauthnone, X Eedge, X MAXERR X}; X/* X * device types X */ enum X{ X Devnone = 0, X Devcon, /* console */ X Devwren, /* scsi disk drive */ X Devworm, /* scsi video drive */ X Devlworm, /* scsi video drive (labeled) */ X Devfworm, /* fake read-only device */ X Devjuke, /* jukebox */ X Devcw, /* cache with worm */ X Devro, /* readonly worm */ X Devmcat, /* multiple cat devices */ X Devmlev, /* multiple interleave devices */ X Devil, /* internet link */ X Devpart, /* partition */ X Devfloppy, /* floppy drive */ X Devide, /* IDE drive */ X Devswab, /* swab data between mem and device */ X Devdup, /* Dup drive */ X Devmirr, /* mirror devices */ X MAXDEV X}; X/* X * tags on block X */ X/* DONT TOUCH, this is in disk structures */ enum X{ X Tnone = 0, X Tsuper, /* the super block */ X Tdir, /* directory contents */ X Tind1, /* points to blocks */ X Tind2, /* points to Tind1 */ X Tfile, /* file contents */ X Tfree, /* in free list */ X Tbuck, /* cache fs bucket */ X Tvirgo, /* fake worm virgin bits */ X Tcache, /* cw cache things */ X Tconfig, /* configuration block */ X MAXTAG X}; X/* X * flags to getbuf X */ enum X{ X Bread = (1<<0), /* read the block if miss */ X Bprobe = (1<<1), /* return null if miss */ X Bmod = (1<<2), /* buffer is dirty, needs writing */ X Bimm = (1<<3), /* write immediately on putbuf */ X Bres = (1<<4), /* reserved, never renammed */ X}; extern register Mach* m; extern register User* u; extern Talarm talarm; Conf conf; Cons cons; X#define MACHP(n) ((Mach*)(MACHADDR+n*BY2PG)) X#pragma varargck type "Z" Device* X#pragma varargck type "T" ulong X#pragma varargck type "I" uchar* X#pragma varargck type "E" uchar* X#pragma varargck type "W" Filter* X#pragma varargck type "G" int extern int (*fsprotocol[])(Msgbuf*); ! echo port/portfns.h sed 's/^X//' >port/portfns.h <<'!' void accessdir(Iobuf*, Dentry*, int, int); void addfree(Device*, long, Superb*); Alarm* alarm(int, void(*)(Alarm*, void*), void*); void alarminit(void); void arpstart(void); void arginit(void); char* authaname(Auth*); void authinit(void); void authfree(Auth*); Auth* authnew(char*, char*); int authread(File*, uchar*, int); int authuid(Auth*); char* authuname(Auth*); int authwrite(File*, uchar*, int); void cdiag(char*, int); int cnumb(void); Device* config(void); int rawchar(int); long bufalloc(Device*, int, long, int); void buffree(Device*, long, int); int byuid(void*, void*); void cancel(Alarm*); int canlock(Lock*); int canqlock(QLock*); void cfsdump(Filsys*); Chan* chaninit(int, int, int); void cmd_check(int, char*[]); void cmd_users(int, char*[]); void cmd_newuser(int, char*[]); void cmd_netdb(int, char*[]); void cmd_passwd(int, char*[]); void cmd_printconf(int, char*[]); int checkname(char*); int checktag(Iobuf*, int, long); int cksum(void*, int, int); int cksum0(int, int); void clock(ulong, ulong); void clockinit(void); void clockreload(ulong); void cyclstart(void); void dotrace(int); int conschar(void); void consinit(void (*)(char*, int)); void consreset(void); void consstart(int); int (*consgetc)(void); void (*consputc)(int); void (*consputs)(char*, int); void consserve(void); int conslock(void); int con_attach(int, char*, char*); int con_clone(int, int); int con_create(int, char*, int, int, long, int); int con_clri(int); int con_fstat(int); int con_open(int, int); int con_read(int, char*, long, int); int con_remove(int); void con_rintr(int); int con_session(void); int con_walk(int, char*); int con_write(int, char*, long, int); int cwgrow(Device*, Superb*, int); int cwfree(Device*, long); void cwinit(Device*); long cwraddr(Device*); int cwread(Device*, long, void*); void cwream(Device*); void cwrecover(Device*); long cwsaddr(Device*); long cwsize(Device*); long dbufread(Iobuf*, Dentry*, long, long, int); int cwwrite(Device*, long, void*); void datestr(char*, ulong); void delay(int); int devcmpr(Device*, Device*); void devream(Device*, int); void devrecover(Device*); void devinit(Device*); int devread(Device*, long, void*); long devsize(Device*); int devwrite(Device*, long, void*); Iobuf* dnodebuf(Iobuf*, Dentry*, long, int, int); Iobuf* dnodebuf1(Iobuf*, Dentry*, long, int, int); void dofilter(Filter*, int, int, int); int doremove(File*, int); void dtrunc(Iobuf*, Dentry*, int); int dumpblock(Device*); void dumpregs(Ureg*); void dumpstack(User*); void exit(void); XFloat famd(Float, int, int, int); ulong fdf(Float, int); void fileinit(Chan*); XFile* filep(Chan*, ulong, int); void firmware(void); int fname(char*); int fpair(char*, char*); void formatinit(void); int fread(void*, int); void freealarm(Alarm*); void freefp(File*); void freewp(Wpath*); XFilsys* fsstr(char*); long fwormsize(Device*); void fwormream(Device*); void fworminit(Device*); int fwormread(Device*, long, void*); int fwormwrite(Device*, long, void*); char* getauthlist(void); Iobuf* getbuf(Device*, long, int); void* getarg(void); char* getwd(char*, char*); int getc(void); ulong getcallerpc(void*); Dentry* getdir(Iobuf*, int); Chan* getlcp(uchar*, long); long getraddr(Device*); void getstring(char*, int, int); void gotolabel(Label*); void hexdump(void*, int); int iaccess(File*, Dentry*, int); void* ialloc(ulong, int); void ilock(Lock*); void iunlock(Lock*); long indfetch(Device*, long, long, long , int, int, int); int ingroup(int, int); int inh(int, uchar*); void init0(void); void iobufinit(void); void* iobufmap(Iobuf*); void iobufunmap(Iobuf*); int iobufql(QLock*); int jukeread(Device*, long, void*); int jukewrite(Device*, long, void*); void jukeinit(Device*); void jukeream(Device*); void jukerecover(Device*); long jukesaddr(Device*); long jukesize(Device*); void kbdchar(int); void lights(int, int); void launchinit(void); void localconfinit(void); int leadgroup(int, int); void lock(Lock*); void lockinit(void); void machinit(void); Msgbuf* mballoc(int, Chan*, int); void mbinit(void); void mbfree(Msgbuf*); ulong meminit(void); Iobuf* movebuf(Iobuf*); void mcatinit(Device*); int mcatread(Device*, long, void*); long mcatsize(Device*); int mcatwrite(Device*, long, void*); void mirrinit(Device*); int mirrread(Device*, long, void*); long mirrsize(Device*); int mirrwrite(Device*, long, void*); void mkqid(Qid*, Dentry*, int); int mkqidcmp(Qid*, Dentry*); void mkqid9p1(Qid9p1*, Qid*); void mkqid9p2(Qid*, Qid9p1*, int); void mlevinit(Device*); int mlevread(Device*, long, void*); long mlevsize(Device*); int mlevwrite(Device*, long, void*); int nametokey(char*, char*); Alarm* newalarm(void); XFile* newfp(void); User* newproc(void); Queue* newqueue(int); void newstart(void); Wpath* newwp(void); Auth* newauth(void); int nvrcheck(void); int nvread(int, void*, int); char* nvrgetconfig(void); int nvrsetconfig(char*); int nvwrite(int, void*, int); int walkto(char*); int no(void*); long number(char*, int, int); void online(void); void otherinit(void); void panic(char*, ...); void partinit(Device*); int partread(Device*, long, void*); long partsize(Device*); int partwrite(Device*, long, void*); void prdate(void); void preread(Device*, long); void prflush(void); int prime(long); void printinit(void); void procinit(void); void putbuf(Iobuf*); long qidpathgen(Device*); void qlock(QLock*); void qunlock(QLock*); void rahead(void); void ready(User*); void ream(Filsys*); void* recv(Queue*, int); void restartprint(Alarm*); void rlock(RWlock*); void rootream(Device*, long); int roread(Device*, long, void*); void rstate(Chan*, int); ulong rtc2sec(Rtc *); void runlock(RWlock*); User* runproc(void); void sched(void); void schedinit(void); int scsiio(Device*, int, uchar*, int, void*, int); void sec2rtc(ulong, Rtc *); void send(Queue*, void*); void serve(void); int serve9p1(Msgbuf*); int serve9p2(Msgbuf*); int setlabel(Label*); void settag(Iobuf*, int, long); void settime(ulong); void sleep(Rendez*, int(*)(void*), void*); void sntpinit(void); int splhi(void); int spllo(void); void splx(int); void startprint(void); int strtouid(char*); long superaddr(Device*); void superream(Device*, long); void swab(void*, int); void sync(char*); int syncblock(void); long syscall(Ureg*); void sysinit(void); int Tfmt(Fmt*); ulong time(void); ulong nextime(ulong, int, int); Tlock* tlocked(Iobuf*, Dentry*); void tsleep(Rendez*, int(*)(void*), void*, int); void touser(void); ulong toytime(void); ulong rtctime(void); void setrtc(ulong); void uidtostr(char*, int, int); Uid* uidpstr(char*); void unlock(Lock*); void userinit(void(*)(void), void*, char*); void vecinit(void); void wakeup(Rendez*); void wbflush(void); void wlock(RWlock*); void wormcopy(void); void wormprobe(void); int dowcp(void); int dowcmp(void); void synccopy(void); void waitsec(int); long wormsearch(Device*, int, long, long); int wormread(Device*, long, void*); long wormsize(Device*); long wormsizeside(Device *, int side); void wormsidestarts(Device *dev, int side, Sidestarts *stp); int wormwrite(Device*, long, void*); void wreninit(Device*); int wrenread(Device*, long, void*); long wrensize(Device*); int wrenwrite(Device*, long, void*); void wunlock(RWlock*); void cmd_exec(char*); void cmd_install(char*, char*, void (*)(int, char*[])); ulong flag_install(char*, char*); int chartoip(uchar *, char *); int isvalidip(uchar*); int nhgets(uchar*); long nhgetl(uchar*); void hnputs(uchar*, int); void hnputl(uchar*, long); void pokewcp(void); ! --upas-ftiamxvctzhpzzvicpywrnwwdx-- From cse.psu.edu!9fans-admin Sat Nov 2 22:17:18 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 22:17:18 JST 2002 Received: (qmail 30075 invoked by uid 1020); 2 Nov 2002 22:17:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30071 invoked from network); 2 Nov 2002 22:17:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 22:17:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 5A3D8199D5; Sat, 2 Nov 2002 08:17:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from psuvax1.cse.psu.edu (unknown [217.78.77.105]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 05A2F199E4 for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 08:16:22 -0500 (EST) From: "Joyce Kalu (Mrs)" To: 9fans@cse.psu.edu MIME-Version: 1.0 Content-Type: text/plain;charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <20021102131622.05A2F199E4@mail.cse.psu.edu> Subject: [9fans] URGENT ASSISTANCE/INVESTMENT (P) Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 02 Nov 2002 14:16:19 From the desk of:- MRS Joyce Kalu C/O Barrister Chike Egobia Lagos Nigeria Sir, URGENT AND CONFIDENTIAL BUSINESS PROPOSAL I am Joyce Kalu (mrs) widow of the late Col. Kulu Kalu the former governor of Kano State of Nigerian. My late husband was one of the victims of the November ADC Aircraft Boeing 722 that crashed in Lagos. I have just been informed by family attorney Barrister Chike Egobia that my late husband operated a secret account with fictitious name in a Nigeria bank into which total sum of Nineteen Million, Five Hundred Thousand US Dollars ($19.5) was transferred and credited in his favour. The attorney now advised me to seek in confidence a foreign account into which this fund could be transferred for disbursement as directed by my late husband in his will. It has been resolved that 25% will be your share for nominating an account for this purpose and any other assistance you will give in that regard. 10% has been mapped out to payback all local and international expenses, which may be, incurred in the transfer process and 5% has been conceded to the local bank manager here assisting facilitating the transfer. Finally, 60% will come to myself and my children and good part of this shall be directed towards executing his will which is to buy shares and stocks in foreign country to securities his childrens future to facilitate the conclusion of this transaction if accepted do send to me promptly by fax through family attorney, the following. 1. The account number to be used for remittance 2. Name and address of your bank 3. Fax and telephone numbers, through which you will be contacted 4. Promptly whenever you attorney/ assistance may be required Please note that i have been assured that the transaction will be concluded in ten (10) banking working days upon my receiving from you the above listed information will commence the process of retrieving the will immediately i hear from you. May at this point emphasize the high level of confidentiality, which this business demands hope you will not betray the trust and confidence, which is reposed in you. However, you may need to give me sufficient assurance that you will not sit on this fund when it is finally remitted into your account. Please direct your reply by email to my box in which the family attorney will communicate with him towards effective completion of this transaction. Regards. Joyce Kalu (Mrs) From cse.psu.edu!9fans-admin Sat Nov 2 23:09:27 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sat Nov 2 23:09:27 JST 2002 Received: (qmail 30622 invoked by uid 1020); 2 Nov 2002 23:09:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30618 invoked from network); 2 Nov 2002 23:09:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 2 Nov 2002 23:09:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id CA81419A3E; Sat, 2 Nov 2002 09:09:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from goliat.eik.bme.hu (goliat.eik.bme.hu [152.66.115.2]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id B629619A57 for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 09:08:13 -0500 (EST) Received: by goliat.eik.bme.hu (Postfix, from userid 455) id 4F8C047FEE; Sat, 2 Nov 2002 15:08:10 +0100 (MET) Received: from localhost (localhost [127.0.0.1]) by goliat.eik.bme.hu (Postfix) with ESMTP id 260E9536AC for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 15:08:10 +0100 (MET) From: FODEMESI Gergely X-X-Sender: fgergo@goliat To: 9fans@cse.psu.edu Subject: Re: [9fans] Plan9/Inferno based commercial products/services In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN Content-Transfer-Encoding: QUOTED-PRINTABLE Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 15:08:09 +0100 (MET) Not really based on plan9, but the idea is based(?) on venti or something like venti: www.avamar.com. Though I haven't seen any credits to any of the original authors. $175.000 for an enterprise sized backup appliance... On Fri, 1 Nov 2002, Skip Tavakkolian wrote: > I am compiling a list of existing (or announced) products, services > and solutions that are based, literally or conceptually, on Plan9 (or > Inferno). > > Here is a start: > > - Lucent's VPN Firewall Brick > - Lucent's (NOT Datang Telecom Tech's =E2=98=BA) PathStart Access Server > - Vita Nuova's Inferno and Plan9 packages > - AmericanVOD (www.americanvod.com) (??? not much info on this) > - nCUBE VOD Server (I think it is based on 2/ed) > > Are there others? > > From cse.psu.edu!9fans-admin Sun Nov 3 04:26:22 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sun Nov 3 04:26:22 JST 2002 Received: (qmail 1880 invoked by uid 1020); 3 Nov 2002 04:26:21 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 1876 invoked from network); 3 Nov 2002 04:26:20 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 3 Nov 2002 04:26:20 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8A9B519A74; Sat, 2 Nov 2002 14:26:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mtiwmhc11.worldnet.att.net (mtiwmhc11.worldnet.att.net [204.127.131.115]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 3752E19988 for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 14:25:00 -0500 (EST) Received: from default ([12.89.176.9]) by mtiwmhc11.worldnet.att.net (InterMail vM.5.01.05.12 201-253-122-126-112-20020820) with SMTP id <20021102192454.CDBC22044.mtiwmhc11.worldnet.att.net@default> for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 19:24:54 +0000 Message-ID: <00ea01c282bf$3a7f9780$09b0590c@default> From: "Thomas West" To: <9fans@cse.psu.edu> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2014.211 X-MIMEOLE: Produced By Microsoft MimeOLE V5.00.2014.211 Subject: [9fans] Need help on telco and mail Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 14:28:46 -0800 1) I want to disable the fax receive feature so the system (with telco running) will ignore incoming telephone calls. This will let me get e-mail from time to time and still leave the line clear for incoming voice calls.What's the easiest way to do this? 2) mail problem: After invoking maill , composing mail an hitting 'esc' the screen border toggles, but no mail is sent. But the following sends mail via modem to ISP. echo msg|mail att.net!west9 ; kickqueue and echo msg|mail west9 sends mail locally. With, for instance, 'pwd' the composition feature works as expected. Thanks, -Tom From cse.psu.edu!9fans-admin Sun Nov 3 05:03:27 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sun Nov 3 05:03:27 JST 2002 Received: (qmail 2254 invoked by uid 1020); 3 Nov 2002 05:03:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 2250 invoked from network); 3 Nov 2002 05:03:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 3 Nov 2002 05:03:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id CD08D19A74; Sat, 2 Nov 2002 15:03:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from hamnavoe (hamnavoe.gotadsl.co.uk [213.208.117.150]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id C85DA19A3F for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 15:02:20 -0500 (EST) Message-ID: <0b12e84be3688fd4146253e2ff94dc48@hamnavoe.demon.co.uk> To: 9fans@cse.psu.edu Subject: Re: [9fans] Need help on telco and mail From: Richard Miller MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 20:01:34 0000 > 1) I want to disable the fax receive feature so the system (with telco > running) will ignore incoming telephone calls. This will let me get e-mail > from time to time and still leave the line clear for incoming voice > calls.What's the easiest way to do this? Use the undocumented '-n' option on the telco command. From cse.psu.edu!9fans-admin Sun Nov 3 05:04:11 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sun Nov 3 05:04:11 JST 2002 Received: (qmail 2266 invoked by uid 1020); 3 Nov 2002 05:04:11 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 2262 invoked from network); 3 Nov 2002 05:04:10 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 3 Nov 2002 05:04:10 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 50727199EC; Sat, 2 Nov 2002 15:04:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 57ACC19A75 for <9fans@cse.psu.edu>; Sat, 2 Nov 2002 15:03:09 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Sat Nov 2 15:03:08 EST 2002 Received: from 141.154.231.210 ([141.154.231.210]) by plan9; Sat Nov 2 15:03:06 EST 2002 Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] Need help on telco and mail From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sat, 2 Nov 2002 15:03:04 -0500 > 1) I want to disable the fax receive feature so the system (with telco > running) will ignore incoming telephone calls. This will let me get e-mail > from time to time and still leave the line clear for incoming voice > calls.What's the easiest way to do this? The undocumented -n command-line flag might be exactly what you want. > 2) mail problem: After invoking maill , composing mail an hitting > 'esc' the screen border toggles, but no mail is sent. > But the following sends mail via modem to ISP. > echo msg|mail att.net!west9 ; kickqueue > and > echo msg|mail west9 > sends mail locally. > > With, for instance, 'pwd' the composition feature works as expected. I assume you are talking about `hold mode.' When a window is in hold mode (is blue), none of the input you type is sent to whatever is reading from that console. When you exit hold mode (by typing esc), the input starts flowing again. Hold mode doesn't cause EOFs to be sent, though. You still need to type ^D to send mail an EOF. Russ From cse.psu.edu!9fans-admin Sun Nov 3 17:43:33 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Sun Nov 3 17:43:33 JST 2002 Received: (qmail 11614 invoked by uid 1020); 3 Nov 2002 17:43:32 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 11610 invoked from network); 3 Nov 2002 17:43:31 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 3 Nov 2002 17:43:30 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.6.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 1BD9F199ED; Sun, 3 Nov 2002 03:43:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from SoftHome.net (unknown [212.234.117.216]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 698C7199D5; Sun, 3 Nov 2002 03:42:51 -0500 (EST) Message-ID: <006b40a63a1d$1328e7a5$4da67bc5@ixrcta> From: "Tim Thomas" To: <9fans@cse.psu.edu> Cc: <9fans-request@cse.psu.edu> MiME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C6_85A71A2B.A6245B75" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: QUALCOMM Windows Eudora Version 5.1 Importance: Normal Subject: [9fans] re: where to register domains for less Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu X-Reply-To: "Tim Thomas" List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sun, 03 Nov 2002 02:07:28 +0600 ------=_NextPart_000_00C6_85A71A2B.A6245B75 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: base64 UGF5IExlc3MgYW5kIEdldCBCZXR0ZXIgVmFsdWUNCg0KVGhlIG5ldyAuQkla IGFuZCAuSU5GTyBkb21haW4gZXh0ZW5zaW9ucyBhcmUgbm93IGNvbnZlbmll bnRseSBhdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cuZG9tYWluZmFjdG9yeS5j b20uIFRoZXNlIHRvcC1sZXZlbCBleHRlbnNpb25zIGFyZSBjb21wZXRpdmVs eSBwcmljZWQgYXQganVzdCAkMTQuOTUveWVhciBidXQgc2luY2UgdGhleSB3 ZXJlIHJlY2VudGx5IGxhdW5jaGVkLCB0aGUgY2hhbmNlcyBhcmUgdmVyeSBn b29kIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byByZWdpc3RlciBhbiBlYXN5 LXRvLXJlbWVtYmVyIGRvbWFpbiBuYW1lLiBUcnkgYSBzZWFyY2ggdG9kYXku Li5pdCdzIGZyZWUuIElmIHlvdXIgZG9tYWluIGlzIGF2YWlsYWJsZSwgeW91 IGNhbiByZWdpc3RlciBpbiBqdXN0IGEgZmV3IG1pbnV0ZXMuDQogDQpJZiB5 b3Ugc3RpbGwgcHJlZmVyIC5DT00gb3IgLk5FVCwgdGhlc2Ugb3JpZ2luYWwg ZXh0ZW5zaW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lIGxvdyBwcmlj ZSBvZiAkMTQuOTUgcGVyIHllYXIuIFdoZW4geW91IHJlZ2lzdGVyIGEgbmV3 IGRvbWFpbiBhdDogaHR0cDovL3d3dy5kb21haW5mYWN0b3J5LmNvbSwgeW91 IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYW4gZWFzeS10by11c2UgY29udHJvbCBw YW5lbCB3aGljaCBhbGxvd3MgeW91IHRvIG1vZGlmeSB5b3VyIEROUyBhbmQg c2V0dXAgVVJMIEZvcndhcmRpbmcgZWFzaWx5LiBQcmVtaXVtIGN1c3RvbWVy IHN1cHBvcnQgdmlhIHRvbGwtZnJlZSBwaG9uZSBhbmQgZW1haWwgaXMgYXZh aWxhYmxlIHRvIGFsbCBjdXN0b21lcnMgYXQgbm8gZXh0cmEgY2hhcmdlLiBP dXIgcmVzZWFyY2ggaGFzIGZvdW5kIHRoYXQgbW9zdCBvdGhlciBkb21haW4g cmVnaXN0cmFycyBkbyBub3QgZXZlbiBvZmZlciBhbnkgcGhvbmUgc3VwcG9y dC4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgY2FzZSBhdCBEb21haW4g RmFjdG9yeS4NCiANClJlZ2lzdGVyIHlvdXIgbmV3IGRvbWFpbiB0b2RheSwg YW5kIHRha2UgdGhlIGZpcnN0IHN0ZXAgdG8gY3JlYXRpbmcgYW4gZWZmZWN0 aXZlIG9ubGluZSBwcmVzZW5jZS4NCiANClNpbmNlcmVseSwNCiANCkRvbWFp biBBZG1pbmlzdHJhdG9yDQpEb21haW4gRmFjdG9yeQ0KDQoNClRvIHJlbW92 ZSB5b3VyIGVtYWlsIGFkZHJlc3MgZnJvbSBmdXJ0aGVyIHByb21vdGlvbmFs IG1haWxpbmdzIGZyb20gdGhpcyBjb21wYW55LCBwbGVhc2UgY2xpY2sgaGVy ZTogaHR0cDovL3d3dy5lbWFpbHJlbW92YWxzLmNvbS9jZ2ktYmluL2RvbWFp bi1yZW1vdmUuY2dpDQoNCg0KKEkzLXNzNCkyMTczbGFNQjQtOTgxanpGUTk1 OThNbnV0NC0wNjRzanJEMjkwN2t4eGQyLTQ2NHlGbDQ2DQozOTcxaHdUTjUt MDE5aEJhbDE1 From cse.psu.edu!9fans-admin Mon Nov 4 02:12:20 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 02:12:20 JST 2002 Received: (qmail 17762 invoked by uid 1020); 4 Nov 2002 02:12:20 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 17758 invoked from network); 4 Nov 2002 02:12:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 02:12:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 1163C19A2F; Sun, 3 Nov 2002 12:12:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from wintermute.cse.psu.edu (wintermute.cse.psu.edu [130.203.20.5]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 69225199D5 for <9fans@cse.psu.edu>; Sun, 3 Nov 2002 12:11:11 -0500 (EST) Received: from commons10k1.mo24.107.36.224.charter-stl.com (commons10k1.mo24.107.36.224.charter-stl.com [24.107.36.224]) by wintermute.cse.psu.edu (CSE Mail Server (Backup MX)) with SMTP id EFC6E73CA0 for <9fans@cse.psu.edu>; Sun, 3 Nov 2002 12:11:09 -0500 (EST) Received: from juno.com (bigfoot.com [81.124.239.91]) by aol.com (8.11.6/8.11.6) with ESMTP id 32531 for <9fans@cse.psu.edu>; Sun, 3 Nov 2002 17:11:26 +0000 From: "chamber" To: "" <9fans@cse.psu.edu> X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) Message-ID: <236015564 Mime-Version: 1.0 Content-Type: text/html; charset="iso-8859-1" Subject: [9fans] Your $200 are waiting you Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Sun, 3 Nov 2002 17:11:26 +0000 GaminglandCasino.com

WWW.GAMINGLANDCASINO.COM
See why Gamingland Casino is the most incredible online casino.
Whatever you level, whatever your game, we've got all the casino excitement you're looking for in the comfort of your home!

Tha'ts right, we'll match your 1st purchase 100% up to $200!
And no waiting...your Free Bonus is credited to your account instantly!

GET $200 FREE

Buy $50 Get $50 FREE!

Buy $100 Get $100 FREE!

Buy $200 Get $200 FREE!


Play our Free NO DOWNLOAD quality games with superb graphics & sounds.

OPEN ACCOUNT

 Security & Support

 Gamingland Casino is fully licensed by the Directorate of  Offshore Gaming. We provide friendly Customer Support via  phone, email & fax.

WWW.GAMINGLANDCASINO.COM

GaminglandCasino.com

You have received this Newsletter because you, or someone else, is registered to this Email Address with gambling related sites. If you no longer wish to be included in our Email Updates, please click here




2084-15288-28492
From cse.psu.edu!9fans-admin Mon Nov 4 17:45:28 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 17:45:28 JST 2002 Received: (qmail 25689 invoked by uid 1020); 4 Nov 2002 17:45:23 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 25685 invoked from network); 4 Nov 2002 17:45:23 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 17:45:23 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 68E0B19A58; Mon, 4 Nov 2002 03:45:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from nautilus.escet.urjc.es (nautilus.escet.urjc.es [212.128.4.207]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 7215B19999 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 03:44:55 -0500 (EST) Message-ID: <43a1c7bdff714973b8f59f268ecbdb2e@plan9.escet.urjc.es> To: 9fans@cse.psu.edu Subject: Re: [9fans] VGA card not in lib/vgadb From: Fco.J.Ballesteros MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 09:44:50 +0100 > I put the id string shown above in the most obvious > place in /lib/vgadb; but I get errors saying vclk > is out of range no matter what resolution I try. I think your card is unsupported and there's no driver for that model. From cse.psu.edu!9fans-admin Mon Nov 4 17:56:28 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 17:56:28 JST 2002 Received: (qmail 25761 invoked by uid 1020); 4 Nov 2002 17:56:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 25757 invoked from network); 4 Nov 2002 17:56:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 17:56:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.6.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 952E019A63; Mon, 4 Nov 2002 03:56:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from nautilus.escet.urjc.es (nautilus.escet.urjc.es [212.128.4.207]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id BCC7E19A60 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 03:54:59 -0500 (EST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] find(1) revisited. From: Fco.J.Ballesteros MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 09:54:58 +0100 This happen before, but just to help, this is what i use. It's just du, wrapped to operate on your files. For example, to walk /usr/nemo to find files with execute permission: ; walk /usr/nemo 'test -x $f && echo $f' you can pass any command and use $f where you want the file name. #!/bin/rc rfork e if (~ $#* 0) { echo 'usage: walk file [cmd...]' >[1=2] exit usage } file=$1 shift if (~ $#* 0) cmd='echo $f' if not cmd=$* cd `{basename -d $file} exec du -a $file | awk '{print $2}' | while (f=`{read}) { eval $cmd } From cse.psu.edu!9fans-admin Mon Nov 4 18:54:22 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 18:54:22 JST 2002 Received: (qmail 26243 invoked by uid 1020); 4 Nov 2002 18:54:21 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 26239 invoked from network); 4 Nov 2002 18:54:21 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 18:54:21 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A3BB619A64; Mon, 4 Nov 2002 04:54:11 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mercury.bath.ac.uk (mercury.bath.ac.uk [138.38.32.81]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 6EC5919A2D for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 04:53:06 -0500 (EST) Received: from news by mercury.bath.ac.uk with local (Exim 3.12 #1) id 188du0-0000Li-00 for 9fans@cse.psu.edu; Mon, 04 Nov 2002 09:52:12 +0000 Received: from GATEWAY by bath.ac.uk with netnews for 9fans@cse.psu.edu (9fans@cse.psu.edu) To: 9fans@cse.psu.edu From: Joel Salomon Message-ID: Organization: http://groups.google.com/ Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Subject: [9fans] Usb/Pci 802.11b adapters Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 09:52:06 GMT The Wiki "supported hardware" page is unclear on the subject - are any internal/external/usb/etc adapters for 802.11b/WiFi supported under plan9? (I need one for a pc, not a laptop) --Joel __________________________________________________________________________ Due to economic circumstances, the light at the end of the tunnel has been turned off. __________________________________________________________________________ From cse.psu.edu!9fans-admin Mon Nov 4 18:54:32 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 18:54:32 JST 2002 Received: (qmail 26250 invoked by uid 1020); 4 Nov 2002 18:54:31 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 26246 invoked from network); 4 Nov 2002 18:54:31 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 18:54:31 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 71A0919A6A; Mon, 4 Nov 2002 04:54:17 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mercury.bath.ac.uk (mercury.bath.ac.uk [138.38.32.81]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 714A219A59 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 04:53:16 -0500 (EST) Received: from news by mercury.bath.ac.uk with local (Exim 3.12 #1) id 188duW-0000N0-00 for 9fans@cse.psu.edu; Mon, 04 Nov 2002 09:52:44 +0000 Received: from GATEWAY by bath.ac.uk with netnews for 9fans@cse.psu.edu (9fans@cse.psu.edu) To: 9fans@cse.psu.edu From: Peter Wang Message-ID: Organization: Cornell University Subject: [9fans] rebooting unexpectedly during install Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 09:52:26 GMT Hi all, I was wondering if anyone has ran into this problem and if so, what he/she did to resolve it. I am currently trying to install plan9 on to a few 486 desktops and while booting from the floppy, after the line, entry: 0x80100020, the system would just reboot itself. Does anyone have any idea why this would happen? Thanks! Peter Wang From cse.psu.edu!9fans-admin Mon Nov 4 18:56:14 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Mon Nov 4 18:56:14 JST 2002 Received: (qmail 26274 invoked by uid 1020); 4 Nov 2002 18:56:14 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 26270 invoked from network); 4 Nov 2002 18:56:13 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 4 Nov 2002 18:56:13 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 569F719A2D; Mon, 4 Nov 2002 04:56:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mail.snellwilcox.com (unknown [195.173.15.12]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id D44C4199BE for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 04:55:51 -0500 (EST) To: 9fans@cse.psu.edu From: steve.simon@snellwilcox.com Received: from ccMail by snellwilcox.com (ccMail Link to SMTP R8.52.01.1) id 4169583387; Mon, 04 Nov 2002 09:55:46 +0000 Importance: normal Priority: normal Subject: Re:[9fans] rc on U/WIN? Message-Id: <4169583387@snellwilcox.com> X-MIME-Engine: v0.90 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Id: <4169583387-1@snellwilcox.com> Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu X-Reply-To: steve.simon@snellwilcox.com List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 04 Nov 2002 09:53:41 +0000 Yep, I use Byrons RC under cygwin all the time. I havent tried U?WIN for years, all I can say is the cygwin package keeps surprising me with its ability to compile any fairly vanilla Unix curses (Yes I know, but there are some usefull programs), or X11 source from the net. -Steve ____________________Reply Separator____________________ Subject: [9fans] rc on U/WIN? Author: 9fans@cse.psu.edu Date: 31/10/02 20:46 Has anyone tried compiling the Rakitzis/Goodwin version of rc under U/WIN with the GNU dev toolchain? I've read that U/WIN is much happier about compiling random UNIX source out of the box than Cygwin, but I have to admit that I haven't tried it (yet) under either. I'm just fishing for some wholeheartedly subjective opinions. -Jack From cse.psu.edu!9fans-admin Tue Nov 5 01:33:34 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 01:33:34 JST 2002 Received: (qmail 30060 invoked by uid 1020); 5 Nov 2002 01:33:33 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30056 invoked from network); 5 Nov 2002 01:33:32 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 01:33:32 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 11DD019A74; Mon, 4 Nov 2002 11:33:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 8930619A6E for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 11:32:09 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Mon Nov 4 11:32:04 EST 2002 Received: from 141.154.233.218 ([141.154.233.218]) by plan9; Mon Nov 4 11:32:03 EST 2002 Message-ID: <079949df585f367678db028ae955cafa@plan9.bell-labs.com> To: 9fans@cse.psu.edu Subject: Re: [9fans] Usb/Pci 802.11b adapters From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 11:32:02 -0500 I don't think anyone has tried any of them. The ones that behave just like laptop cards will probably work without much pain; the hard part is identifying which ones those are. Russ From cse.psu.edu!9fans-admin Tue Nov 5 03:13:23 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:13:23 JST 2002 Received: (qmail 30738 invoked by uid 1020); 5 Nov 2002 03:13:22 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30734 invoked from network); 5 Nov 2002 03:13:22 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:13:22 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A588119A7F; Mon, 4 Nov 2002 13:13:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from 192.168.1.101 (24-197-148-57.charterga.net [24.197.148.57]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id ADE0F199B9 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:12:23 -0500 (EST) Message-ID: <679fae6627e8b7863188410ec5747eff@charter.net> From: "athiele@charter.net"@cse.psu.edu To: 9fans@cse.psu.edu MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] Long file names Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 13:13:43 -0500 I saw a post not too long ago about working around long file paths/names does anyone remember how to do it ? Also is there a "source" type command so I can reread my profile file ? Adrian From cse.psu.edu!9fans-admin Tue Nov 5 03:22:21 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:22:21 JST 2002 Received: (qmail 30786 invoked by uid 1020); 5 Nov 2002 03:22:20 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30782 invoked from network); 5 Nov 2002 03:22:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:22:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 6F75819995; Mon, 4 Nov 2002 13:22:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from lavoro.home.cs.york.ac.uk (public1-york1-5-cust17.leed.broadband.ntl.com [80.0.45.17]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id F12F7199D5 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:21:37 -0500 (EST) Message-ID: <2de58957f267de397b24fbc068dbc8e1@caldo.demon.co.uk> To: 9fans@cse.psu.edu Subject: Re: [9fans] Long file names From: Charles Forsyth MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-mlffnijwkmosmbxvwghlrvqnsy" Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 18:14:41 0000 This is a multi-part message in MIME format. --upas-mlffnijwkmosmbxvwghlrvqnsy Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit 1. see lnfs(4) 2. see rc(1), particularly `.' (as a command) --upas-mlffnijwkmosmbxvwghlrvqnsy Content-Type: message/rfc822 Content-Disposition: inline Return-Path: <9fans-admin@cse.psu.edu> Received: from punt-1.mail.demon.net by mailstore for forsyth@caldo.demon.co.uk id 1036433607:10:06731:26; Mon, 04 Nov 2002 18:13:27 GMT Received: from psuvax1.cse.psu.edu ([130.203.4.6]) by punt-1.mail.demon.net id aa1006891; 4 Nov 2002 18:13 GMT Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A588119A7F; Mon, 4 Nov 2002 13:13:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from 192.168.1.101 (24-197-148-57.charterga.net [24.197.148.57]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id ADE0F199B9 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:12:23 -0500 (EST) Message-ID: <679fae6627e8b7863188410ec5747eff@charter.net> From: "athiele@charter.net"@cse.psu.edu To: 9fans@cse.psu.edu MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] Long file names Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 13:13:43 -0500 I saw a post not too long ago about working around long file paths/names does anyone remember how to do it ? Also is there a "source" type command so I can reread my profile file ? Adrian --upas-mlffnijwkmosmbxvwghlrvqnsy-- From cse.psu.edu!9fans-admin Tue Nov 5 03:26:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:26:19 JST 2002 Received: (qmail 30814 invoked by uid 1020); 5 Nov 2002 03:26:19 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30810 invoked from network); 5 Nov 2002 03:26:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:26:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4BD6B19A84; Mon, 4 Nov 2002 13:26:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 3954019A84 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:24:58 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA4IOu4C018882 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 10:24:56 -0800 (PST) Message-ID: <06c665b13b0886782402ab6f68b8418d@centurytel.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] Long file names From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 09:41:31 -0500 > I saw a post not too long ago > about working around long file paths/names > does anyone remember how to do it ? You want lnfs. > Also is there a "source" type command > so I can reread my profile file ? It is the '.' term% echo 'fn foo () { echo foo }' > somefile term% . somefile term% foo foo From cse.psu.edu!9fans-admin Tue Nov 5 03:34:31 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:34:31 JST 2002 Received: (qmail 30881 invoked by uid 1020); 5 Nov 2002 03:34:21 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30877 invoked from network); 5 Nov 2002 03:34:20 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:34:20 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2ECFF19A86; Mon, 4 Nov 2002 13:34:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from dc-mx03.cluster1.charter.net (dc-mx03.cluster1.charter.net [209.225.8.13]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 2753F19A81 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:33:20 -0500 (EST) Received: from [24.197.148.57] (HELO trudy) by dc-mx03.cluster1.charter.net (CommuniGate Pro SMTP 3.5.9) with SMTP id 36666562 for 9fans@cse.psu.edu; Mon, 04 Nov 2002 13:33:17 -0500 From: "Adrian" To: <9fans@cse.psu.edu> Subject: RE: [9fans] Long file names Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) Importance: Normal In-Reply-To: <06c665b13b0886782402ab6f68b8418d@centurytel.net> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 13:35:04 -0500 Thank you. -----Original Message----- From: 9fans-admin@cse.psu.edu [mailto:9fans-admin@cse.psu.edu]On Behalf Of Skip Tavakkolian Sent: Monday, November 04, 2002 9:42 AM To: 9fans@cse.psu.edu Subject: Re: [9fans] Long file names > I saw a post not too long ago > about working around long file paths/names > does anyone remember how to do it ? You want lnfs. > Also is there a "source" type command > so I can reread my profile file ? It is the '.' term% echo 'fn foo () { echo foo }' > somefile term% . somefile term% foo foo From cse.psu.edu!9fans-admin Tue Nov 5 03:37:20 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:37:20 JST 2002 Received: (qmail 30914 invoked by uid 1020); 5 Nov 2002 03:37:20 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 30910 invoked from network); 5 Nov 2002 03:37:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:37:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 31C3C19A81; Mon, 4 Nov 2002 13:37:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from maelmord.ragnartech.net (oss429AP.cslab.stthomas.edu [140.209.124.113]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id E4FB619A71 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:36:45 -0500 (EST) Received: from ragnar by maelmord.ragnartech.net with local (Exim 3.35 #1 (Debian)) id 188m7P-0001mS-00 for <9fans@cse.psu.edu>; Mon, 04 Nov 2002 12:38:35 -0600 To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system Message-ID: <20021104183835.GB6601@ragnartech.net> References: <67107739c028c1633ff711d4cfb24b99@centurytel.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <67107739c028c1633ff711d4cfb24b99@centurytel.net> User-Agent: Mutt/1.4i From: Peter Downs Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 12:38:35 -0600 summary: webdavfs, why bother? Tack sucks. peter From cse.psu.edu!9fans-admin Tue Nov 5 03:57:25 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 03:57:25 JST 2002 Received: (qmail 31070 invoked by uid 1020); 5 Nov 2002 03:57:24 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 31066 invoked from network); 5 Nov 2002 03:57:23 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 03:57:23 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A9CBF19A5B; Mon, 4 Nov 2002 13:57:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from lavoro.home.cs.york.ac.uk (public1-york1-5-cust17.leed.broadband.ntl.com [80.0.45.17]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id CF22319A88 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:56:55 -0500 (EST) Message-ID: <3bc4c84495a4a6c337661858aeeaf797@caldo.demon.co.uk> To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system From: Charles Forsyth MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-riwryvleoieskzqsbojhsvrzji" Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 18:49:59 0000 This is a multi-part message in MIME format. --upas-riwryvleoieskzqsbojhsvrzji Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit that certainly wasn't the point of my own remark. there are two distinct things: 1. trying to interface to WebDAV 2. WebDAV itself. the target of my somewhat despairing remark was (2). (1) is quite understandable if you must deal with webDAV anyway. hence the existence of ftpfs(4), webfs(4), nfsserver(8), and others. --upas-riwryvleoieskzqsbojhsvrzji Content-Type: message/rfc822 Content-Disposition: inline Return-Path: <9fans-admin@cse.psu.edu> Received: from punt-2.mail.demon.net by mailstore for forsyth@caldo.demon.co.uk id 1036435070:20:10776:196; Mon, 04 Nov 2002 18:37:50 GMT Received: from psuvax1.cse.psu.edu ([130.203.4.6]) by punt-2.mail.demon.net id aa2127738; 4 Nov 2002 18:37 GMT Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 31C3C19A81; Mon, 4 Nov 2002 13:37:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from maelmord.ragnartech.net (oss429AP.cslab.stthomas.edu [140.209.124.113]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id E4FB619A71 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 13:36:45 -0500 (EST) Received: from ragnar by maelmord.ragnartech.net with local (Exim 3.35 #1 (Debian)) id 188m7P-0001mS-00 for <9fans@cse.psu.edu>; Mon, 04 Nov 2002 12:38:35 -0600 To: 9fans@cse.psu.edu Subject: Re: [9fans] WebDAV file system Message-ID: <20021104183835.GB6601@ragnartech.net> References: <67107739c028c1633ff711d4cfb24b99@centurytel.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <67107739c028c1633ff711d4cfb24b99@centurytel.net> User-Agent: Mutt/1.4i From: Peter Downs Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 12:38:35 -0600 summary: webdavfs, why bother? Tack sucks. peter --upas-riwryvleoieskzqsbojhsvrzji-- From cse.psu.edu!9fans-admin Tue Nov 5 04:03:21 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 04:03:21 JST 2002 Received: (qmail 31145 invoked by uid 1020); 5 Nov 2002 04:03:19 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 31141 invoked from network); 5 Nov 2002 04:03:18 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 04:03:18 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id D678619A96; Mon, 4 Nov 2002 14:03:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 37A0419A8E for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 14:02:03 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA4J1S4C025607; Mon, 4 Nov 2002 11:01:28 -0800 (PST) Message-ID: <8f330d27b33b3b4ef7d636cc43e56ddf@centurytel.net> To: 9fans@cse.psu.edu, "Skip, Tavakkolian"@centurytel.net, Subject: Re: [9fans] WebDAV file system From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 10:15:04 -0500 > Tack sucks. Pity; Sailing wouldn't be the same without it. ☺ From cse.psu.edu!9fans-admin Tue Nov 5 04:28:22 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 04:28:22 JST 2002 Received: (qmail 31405 invoked by uid 1020); 5 Nov 2002 04:28:21 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 31401 invoked from network); 5 Nov 2002 04:28:21 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 04:28:21 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id D13EA19A90; Mon, 4 Nov 2002 14:28:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id CF7AF19A90 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 14:27:58 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA4JRu4C006316 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 11:27:57 -0800 (PST) Message-ID: To: 9fans@cse.psu.edu From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] HTTP tunnelling of 9P -- taboo? Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 10:44:31 -0500 To get around firewalls and provide an alternative to things like WebDAV. What are the arguments (technical, aesthetic, etc.) against it? From cse.psu.edu!9fans-admin Tue Nov 5 06:18:25 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 06:18:25 JST 2002 Received: (qmail 32253 invoked by uid 1020); 5 Nov 2002 06:18:24 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 32249 invoked from network); 5 Nov 2002 06:18:23 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 06:18:23 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 00BDD199D5; Mon, 4 Nov 2002 16:18:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from maelmord.ragnartech.net (oss429AP.cslab.stthomas.edu [140.209.124.113]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 1C71119A87 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 16:17:19 -0500 (EST) Received: from ragnar by maelmord.ragnartech.net with local (Exim 3.35 #1 (Debian)) id 188odA-00026g-00; Mon, 04 Nov 2002 15:19:32 -0600 To: 9fans@cse.psu.edu Cc: hangar18-general@open-forge.org, joew@open-forge.org, hell@einstein.ssz.com Message-ID: <20021104211932.GA8090@ragnartech.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i From: Peter Downs Subject: [9fans] vgadb Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 15:19:32 -0600 I have an IBM personal computer 750, with onboard S3 Trio64. the default boot disk couldn't start rio, but adding this to vgadb got it working. ctlr 0xC0044="S3 TRIO64V+ 40MHz V1.01-01" link=vga hwgc=s3hwgc ctlr=trio64 linear=1 link=ibm8514 this merges nicely with the other Phoenix S3 TRIO64 Enhanced VGA entries. peter From cse.psu.edu!9fans-admin Tue Nov 5 06:49:31 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 06:49:31 JST 2002 Received: (qmail 32687 invoked by uid 1020); 5 Nov 2002 06:49:20 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 32683 invoked from network); 5 Nov 2002 06:49:19 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 06:49:19 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4422119A97; Mon, 4 Nov 2002 16:49:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from 9srv.net (unknown [64.7.3.117]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 2F67A19A6D for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 16:48:58 -0500 (EST) Message-ID: <9ac56b3938baa3accb55d587a63f662a@9srv.net> From: a@9srv.net To: 9fans@cse.psu.edu Subject: Re: [9fans] HTTP tunnelling of 9P -- taboo? MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 16:38:35 -0500 the aesthetic question is easiest: good God please no! tunneling *anything* through http is ugly, since http itself is ugly. and taking a nice, clean, simple, powerful protocol and shoving it into an awkward dinky protocol is always aestheticaly wrong. technically, the issue probably isn't getting around firewalls, but proxies. firewalls generally just allow or disallow a certain set of ports (most, anyway). if that's indeed the issue, just run a listener on port 80 of your server and connnect to that. also, why would a distributed fs protocol need to be embeded in http to be an alternative to WebDAV? why not just use 9p as is? the drive to embed everything in http seems strange to me. is the fact that WebDAV is a set of http "extentions" really a selling point for most of its users? i doubt it. ア From cse.psu.edu!9fans-admin Tue Nov 5 07:06:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 07:06:19 JST 2002 Received: (qmail 345 invoked by uid 1020); 5 Nov 2002 07:06:18 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 336 invoked from network); 5 Nov 2002 07:06:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 07:06:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.16.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0E1D019A92; Mon, 4 Nov 2002 17:06:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from collyer.net (adsl-63-192-14-226.dsl.snfc21.pacbell.net [63.192.14.226]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 01DBF19A6D for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 17:05:33 -0500 (EST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] HTTP tunnelling of 9P -- taboo? From: Geoff Collyer MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 14:04:31 -0800 I get the impression that some people feel that http may soon be the only protocol allowed through corporate firewalls, with companies becoming more paranoid and implementing reverse firewalls (such as the Great Firewall of China). From cse.psu.edu!9fans-admin Tue Nov 5 07:46:32 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 07:46:32 JST 2002 Received: (qmail 673 invoked by uid 1020); 5 Nov 2002 07:46:21 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 669 invoked from network); 5 Nov 2002 07:46:21 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 07:46:21 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 27DE019A6D; Mon, 4 Nov 2002 17:46:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id A706219A33 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 17:45:43 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA4MjeWi002192 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 14:45:42 -0800 (PST) Message-ID: <8b79c03719cc12902cab4cc6048f4e2b@centurytel.net> To: 9fans@cse.psu.edu Subject: Re: [9fans] HTTP tunnelling of 9P -- taboo? From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 14:02:15 -0500 The number of users behind firewalls is significant enough that no company thinking of products or services should forget about them; > I get the impression that some people feel that http may soon be the > only protocol allowed through corporate firewalls, with companies > becoming more paranoid and implementing reverse firewalls (such as the > Great Firewall of China). From cse.psu.edu!9fans-admin Tue Nov 5 08:36:28 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 08:36:28 JST 2002 Received: (qmail 1144 invoked by uid 1020); 5 Nov 2002 08:36:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 1140 invoked from network); 5 Nov 2002 08:36:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 08:36:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0D45819A95; Mon, 4 Nov 2002 18:36:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 4132719992 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 18:35:30 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Mon Nov 4 18:35:27 EST 2002 Received: from 141.154.234.201 ([141.154.234.201]) by plan9; Mon Nov 4 18:35:26 EST 2002 Message-ID: To: 9fans@cse.psu.edu From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] circular logic (was webdav...) Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 17:27:09 -0500 non-http protocols are dangerous. therefore we'll only allow http. only http is allowed. therefore we'll tunnel everything over http. From cse.psu.edu!9fans-admin Tue Nov 5 09:17:18 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 09:17:18 JST 2002 Received: (qmail 1881 invoked by uid 1020); 5 Nov 2002 09:17:17 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 1877 invoked from network); 5 Nov 2002 09:17:16 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 09:17:16 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 7E8DE19A99; Mon, 4 Nov 2002 19:17:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from mailnw.centurytel.net (mailnw.centurytel.net [209.206.160.237]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 9A71619A6E for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 19:16:13 -0500 (EST) Received: from term4e (pppoe2231.gh.centurytel.net [64.91.54.239]) by mailnw.centurytel.net (8.12.6/8.12.6) with SMTP id gA50GAWi021153 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 16:16:12 -0800 (PST) Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] circular logic (was webdav...) From: "Skip Tavakkolian" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 15:32:45 -0500 It is a circuitous approach -- forced by many external factors -- that gets to the right solution (eventually). Something like: the proxy/firewall device doesn't know the protocol, therefore the IT department wont allow it, which forces the HTTP tunneling, which gives the system/protocol a chance to become popular, which makes it a legitimate protocol and gets it on the vendors' radars, which is then supported, obviating the need for tunneling. > non-http protocols are dangerous. > therefore we'll only allow http. > > only http is allowed. > therefore we'll tunnel everything over http. From cse.psu.edu!9fans-admin Tue Nov 5 10:44:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 10:44:19 JST 2002 Received: (qmail 4514 invoked by uid 1020); 5 Nov 2002 10:44:18 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 4510 invoked from network); 5 Nov 2002 10:44:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 10:44:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8411419A33; Mon, 4 Nov 2002 20:44:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 8CB2F199BE for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 20:43:46 -0500 (EST) Received: from IO.COM ([12.235.55.86]) by sccrmhc01.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20021105014345.GSFC8743.sccrmhc01.attbi.com@IO.COM> for <9fans@cse.psu.edu>; Tue, 5 Nov 2002 01:43:45 +0000 Subject: Re: [9fans] circular logic (was webdav...) Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v546) From: Jonathan Sergent To: 9fans@cse.psu.edu Content-Transfer-Encoding: 7bit In-Reply-To: Message-Id: <05C3B9E5-F060-11D6-BE3D-0003939B34F8@IO.COM> X-Mailer: Apple Mail (2.546) Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 17:43:45 -0800 On Monday, Nov 4, 2002, at 14:27 US/Pacific, Russ Cox wrote: > non-http protocols are dangerous. > therefore we'll only allow http. This is an oversimplification. The companies that I know that have this problem are actually in a situation where they have an internal network that is not directly routed to the Internet at all, and all traffic must pass through application-layer gateways (aka proxies). The protocols which are proxied tend to vary. But everyone proxies HTTP in this environment. There often isn't an intent to stop the use of other applications; just no resources (time and money) to explicitly enable them. It seems to me like this sort of thing is going away and becoming less common, not more common. (If everyone used Plan 9 and people could just import /net, this problem wouldn't exist... people in these environments would just tunnel everything over 9P! Is this any more acceptable?) > only http is allowed. > therefore we'll tunnel everything over http. So often this is a matter of resources; if the application developer knows that in some situations only HTTP is allowed, but doesn't want to write everything for both cases, said application developer will tend to just do everything over HTTP so that it "just works" for people on weird networks. --jss. From cse.psu.edu!9fans-admin Tue Nov 5 11:52:19 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 11:52:19 JST 2002 Received: (qmail 7641 invoked by uid 1020); 5 Nov 2002 11:52:18 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 7637 invoked from network); 5 Nov 2002 11:52:17 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 11:52:17 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.8.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 473D919A89; Mon, 4 Nov 2002 21:52:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 0EE9719992 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 21:51:41 -0500 (EST) Message-ID: <2343c11d856067dd031eecbb53b207ea@plan9.bell-labs.com> From: presotto@plan9.bell-labs.com To: 9fans@cse.psu.edu Subject: Re: [9fans] circular logic (was webdav...) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-olmzkvseqjouhqmisiiqngfnqr" Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 21:51:39 -0500 This is a multi-part message in MIME format. --upas-olmzkvseqjouhqmisiiqngfnqr Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Welcome XML/SOAP --upas-olmzkvseqjouhqmisiiqngfnqr Content-Type: message/rfc822 Content-Disposition: inline Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Mon Nov 4 18:36:16 EST 2002 Received: from mail.cse.psu.edu ([130.203.4.6]) by plan9; Mon Nov 4 18:36:14 EST 2002 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.20.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0E6BA19A67; Mon, 4 Nov 2002 18:36:07 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 4132719992 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 18:35:30 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Mon Nov 4 18:35:27 EST 2002 Received: from 141.154.234.201 ([141.154.234.201]) by plan9; Mon Nov 4 18:35:26 EST 2002 Message-ID: To: 9fans@cse.psu.edu From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] circular logic (was webdav...) Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 17:27:09 -0500 non-http protocols are dangerous. therefore we'll only allow http. only http is allowed. therefore we'll tunnel everything over http. --upas-olmzkvseqjouhqmisiiqngfnqr-- From cse.psu.edu!9fans-admin Tue Nov 5 12:35:17 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 12:35:17 JST 2002 Received: (qmail 8884 invoked by uid 1020); 5 Nov 2002 12:35:16 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 8880 invoked from network); 5 Nov 2002 12:35:15 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 12:35:15 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.23.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 4F81119A87; Mon, 4 Nov 2002 22:35:08 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (ampl.com [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 304B719A80 for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 22:34:58 -0500 (EST) Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Mon Nov 4 22:34:56 EST 2002 Received: from 141.154.234.201 ([141.154.234.201]) by plan9; Mon Nov 4 22:34:55 EST 2002 Message-ID: <7270cbb0e0c673a48fba4c401875c664@plan9.bell-labs.com> To: 9fans@cse.psu.edu Subject: Re: [9fans] circular logic (was webdav...) From: "Russ Cox" MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 22:34:58 -0500 >> non-http protocols are dangerous. >> therefore we'll only allow http. > > This is an oversimplification. The companies that I know that have > this problem are actually in a situation where they have an internal > network that is not directly routed to the Internet at all, and all > traffic must pass through application-layer gateways (aka proxies). > The protocols which are proxied tend to vary. But everyone proxies > HTTP in this environment. Not everyone. I bet there are places where the proxies are mag tapes moved from outside machines to inside machines (and not vice versa). > There often isn't an intent to stop the use of other applications; just > no resources (time and money) to explicitly enable them. Come on. Buy a router that does ip filtering. They all do. HTTP proxies would have to be changed to admit WebDAV (they added new verbs!), so we're talking about modifications either way. My point was that it makes more sense just to open another port. > (If everyone used Plan 9 and people could just import /net, this > problem wouldn't exist... people in these environments would just > tunnel everything over 9P! Is this any more acceptable?) No, it's not. It would be just as dumb (although more convenient for me) to allow only 9P through a firewall. > > only http is allowed. > > therefore we'll tunnel everything over http. > > So often this is a matter of resources; if the application developer > knows that in some situations only HTTP is allowed, but doesn't want to > write everything for both cases, said application developer will tend > to just do everything over HTTP so that it "just works" for people on > weird networks. If you're actually _using_ HTTP then fine. Tunneling WebDAV over HTTP requires changing all the proxies because you're really speaking WebDAV/HTTP, which bears only a passing resemblance to HTTP. Who says the weird networks are going to allow WebDAV/HTTP through? My point was that it's work either way. It's dumb that WebDAV and friends are trying to pretend that it's not. Russ From cse.psu.edu!9fans-admin Tue Nov 5 13:34:22 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 13:34:22 JST 2002 Received: (qmail 10769 invoked by uid 1020); 5 Nov 2002 13:34:22 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 10765 invoked from network); 5 Nov 2002 13:34:21 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 13:34:21 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id D94DF19A80; Mon, 4 Nov 2002 23:34:11 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from plan9.cs.bell-labs.com (closedmind.org [204.178.31.2]) by mail.cse.psu.edu (CSE Mail Server) with SMTP id 61884199BE for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 23:33:36 -0500 (EST) Message-ID: <62d61310dd2c9827ae61a965fa2ea3b3@plan9.bell-labs.com> From: "Russ Cox" To: 9fans@cse.psu.edu Subject: Re: [9fans] How to sync venti MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 23:33:34 -0500 On Tue Sep 3 08:08:15 EDT 2002, arisawa@ar.aichi-u.ac.jp wrote: > How can I sync venti to terminate safely? Once all the clients have stopped, you can run the new command venti/sync (you'll have to pull to get the one I just installed on sources), which won't return until the write queues have emptied. Of course, they might fill up again after venti/sync returns, but if you stop all the Venti clients and then run venti/sync, you can be guaranteed the queues stay empty afterward. Vac now syncs before exiting, so if vac is your only client, you don't have to worry about ever running venti/sync. As long as your vacs have exited, all the data is on the disk. Russ From cse.psu.edu!9fans-admin Tue Nov 5 15:39:56 JST 2002 remote from ar Received: from vega.aichi-u.ac.jp ([202.16.124.3]) by ar; Tue Nov 5 15:39:56 JST 2002 Received: (qmail 16296 invoked by uid 1020); 5 Nov 2002 15:39:55 +0900 Delivered-To: arisawa@aichi-u.ac.jp Received: (qmail 16292 invoked from network); 5 Nov 2002 15:39:55 +0900 Received: from psuvax1.cse.psu.edu (HELO mail.cse.psu.edu) (130.203.4.6) by vega.aichi-u.ac.jp with SMTP; 5 Nov 2002 15:39:55 +0900 Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.30.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id 0544719A0D; Tue, 5 Nov 2002 01:39:09 -0500 (EST) Delivered-To: 9fans@cse.psu.edu Received: from wintermute.cse.psu.edu (wintermute.cse.psu.edu [130.203.8.5]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id E8BE119AA1 for <9fans@cse.psu.edu>; Tue, 5 Nov 2002 01:38:52 -0500 (EST) Received: from mta02-svc.ntlworld.com (mta02-svc.ntlworld.com [62.253.162.42]) by wintermute.cse.psu.edu (CSE Mail Server (Backup MX)) with ESMTP id 75BA173CDA for <9fans@cse.psu.edu>; Tue, 5 Nov 2002 00:42:34 -0500 (EST) Received: from KIKE ([80.4.204.18]) by mta03-svc.ntlworld.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with SMTP id <20021104230421.RFWB292.mta03-svc.ntlworld.com@KIKE> for <9fans@cse.psu.edu>; Mon, 4 Nov 2002 23:04:21 +0000 Message-ID: <00e601c28456$8810ee20$6501a8c0@KIKE> From: "matt" To: <9fans@cse.psu.edu> References: <9ac56b3938baa3accb55d587a63f662a@9srv.net> Subject: Re: [9fans] HTTP tunnelling of 9P -- taboo? MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Mon, 4 Nov 2002 23:04:29 -0000 > is the fact that WebDAV is a set of http "extentions" really a > selling point for most of its users? i doubt it. lack of unified document management tools for web authoring is the key to it's appeal "it works in a browser" is certainly a selling point, the many windowed desktop is too noisy, user context switches seem less expensive inside the same application - witness ftp in a browser etc.etc. For years I've bemoaned the death of the application and the rich controls available to application programmers. The people at my latest job were delighted when I switched them from browser based