HDTenEightyP/NetNews huggingface dataset:
From: scott@kronos.com (Scott Riegelhaupt-Herzig)
Newsgroups: comp.lang.c
Subject: Re: Question to test general C knowledge
Date: 11 Dec 92 17:54:33 GMT
Organization: Kronos Inc. / Waltham, MA
Disclaimer: This posting is a personal opinion and not that of Kronos Inc.

In article <Bz11Iv.DM7@netnews.jhuapl.edu> bandy@netnews.jhuapl.edu (Mike Bandy) writes:
>Path: kronos!hsdndev!wupost!uunet!netnews!bandy
>From: bandy@netnews.jhuapl.edu (Mike Bandy)
>Newsgroups: comp.lang.c
>Subject: Re: Question to test general C knowledge
>Message-ID: <Bz11Iv.DM7@netnews.jhuapl.edu>
>Date: 10 Dec 92 04:52:06 GMT
>References: <Bz0A46.Cvu@watserv1.uwaterloo.ca>
>Organization: JHU/Applied Physics Laboratory
>Lines: 17

>dmeister@mansci1.UWaterloo.ca (Darren Meister) writes:

>>My supervisor is interviewing co-op students for employment who will
>>have to do some C programming. Now, all of their resumes say that they
>>know how to program in C. They do not need to be C gods but a strong 
>>knowledge will be required. I'm sorry if this is the wrong place to ask
>>this but, if you could ask someone one question to test if they
>>generally understand C what would it be. Thanks for your responses.

>"What's the difference between = and ==?"       ;)


>-- 

>        Mike Bandy
>        bandy@aplcomm.jhuapl.edu
>        Johns Hopkins University / Applied Physics Lab

How about:
What's the difference between 'X' and "X" ?

Or, one of my favorites:
Name the four NULLs in C.

(They are, of course, NULL character, NULL pointer, NULL string, and null 
statement.)

					<S>
Scott P. Riegelhaupt-Herzig             scott@kronos.com
Kronos, Inc.
62 Fourth Avenue
Waltham, MA   02154
+1 617 487-4743
Newsgroups: comp.lang.c
From: richard@crowded-house.den.mmc.com (Richard Armstrong)
Subject: Re: A_REVERSE in curses???
Organization: Martin Marietta
Date: Thu, 17 Dec 1992 16:13:56 GMT

In article <1992Dec11.122950.4544@bvl.pt> vasco@jessica.bvl.pt (Antonio Vasconcelos) writes:
> sjs@netcom.com (Stephen Schow) writes:
>)I need help with curses.  I wrote a little test program that works great on
>)one UNIX box.  When I try to compile it on another UNIX box (at netcom) it
>)failes to recognize the A_REVERSE macro definition, which I had pressumed
>)was a standard thing.  Is it a standard thing?
>
>Take a look at file /usr/include/curses.h, probably the names have been changed
>on your implementation, I think IBM did that in AIX 3.1.5.
>
>regards,
>
>|/asco
>

Also look in the system 5 libraries.  /usr/5include/curses.h


-- 
My company never said any of this... I didn't either.
Richard Armstrong, Software Engineer, Martin Marietta
Email->>>> richard@crowded-house.den.mmc.com <<<<-Email 

Newsgroups: comp.lang.c
From: ewebster@nyx.cs.du.edu (Eric Webster)
Subject: Quiz update/reply
Summary: For your information. . .
Keywords: Quiz, time
Organization: University of Denver, Dept. of Math & Comp. Sci.
Date: Fri, 11 Dec 92 21:12:38 GMT


Hello Netland,        (its him again AHHHHhhhh !!)         11 DEC 92

As you can imagine I got a few replies from my Quiz.  Sent to me.
First of all I would like to thank everyone for posting back to the 
net.  That way everone got the adventage of reading you answer, not
just myself.  I also would like to thank the person for reminding 
a few people of the *SPIRIT* of my quiz.  I'm sorry I should pay
closer attention to who replies back.  Especially if their in my
defence.

YES !!  There is something truly wrong with Example #2.  There was
TWO (2) people, who were right on the money.  CONGRATULATIONS, JOB
WELL DONE !!!   Hardly anyone talked about Example #3, why ?

Now if I may . . . 

1)  No I do not want to start some kind of flame war.  I honestly
felt (still do) that this type of "bad pratice" would be of use.
How many times have we all heard. "This is a better way of doing
it", and not understanding why ?   Well you now have a bad example
to perform a job.  To get the time.  Soon, before X-mass, you'll
have an answer.  Happy new year.  After all isn't this one of the
reason someone started "comp.lang.c" ?

2)  Lets assume that example #2 is only to be used on a IBM PC using 
TURBO C/C++ pro ver 2.0.   That way we don't have to read any more
architecture differences.  Although, I've worked on AT&T 3B20S, 3B2, 
and Sperry 5000/80, 5000/95,  and don't believe it would matter.

3)  I didn't want to use a looping problem.  Where you stepped through
the loop to find out how many times an varible got incremented.  So
you had to know the differents between "++i;" and "i++;".  Fine, 
This is important to know.  But these types of questions only seemed
to test my patiences.  In other words how many iterations of the
loop can I go though, before I collapse on the floor in a heap of
boredom. 

4)  If I'm going to post a Quiz to the newsgroup.  Then my time, and
yours is better spend, coming up with an example to get a job done.
Like getting the time.  After all I came up with the time example 
from reading someones question from the net.  I make this suggestion
to everyone.  

5)  Now that you know where I'm coming from.  Is any one out there
intersested in me coming up with another one ??  Say one (1) a
month ??  I would like someone to sent quiz/info out about Unix
ioctl.  Unix Device Drivers.  I could use some strengthening in 
thoughs areas.


--------------------------------------------------------------------
Eric T. Webster                       | Why is it that what an author
E-Mail : ericw@redstone-emh2.army.mil | omits, from the book, is 
                                      | just what you need ? 
--------------------------------------------------------------------

Newsgroups: comp.lang.c
From: ST21519@VM.CC.LATECH.EDU
Subject: Power C(Mix) and PDS .OBJ
Organization: Louisiana Tech University
Date: Thu, 17 Dec 92 10:51:40 CST

I believe one cannot take Power C's .OBJ code and link it with PDS's Link,
but can you maybe take PDS .OBJ code and link with Power C to get the best
of both worlds?
From: alien@acheron.amigans.gen.nz (Ross Smith)
Newsgroups: comp.lang.c
Subject: Re:  Question to test general C knowledge
Date: 19 Dec 92 12:16:42 GMT+12
Distribution: world
Organization: Muppet Labs

In article <1992Dec12.111409.147@ondec.lonestar.org> d_north@ondec.lonestar.org (David G. North, CCP) writes:
>After all the recent hubbub under the topic 'what do you say?'
>How about:
>  What's the difference between '=' and '=='?

All == are =, but some are more = than others :-)

>Or better yet, what is the type and value of the following expression:
>  "this is a test"[4]

The type is char, which may or may not be signed.
The value is a space, which may or may not equal 32.


--
...... Ross Smith (Wanganui, NZ) ...... alien@acheron.amigans.gen.nz ......
   Mine is the ship bound for Alpha Centauri
   We must be out of our minds
   For though we are shipmates bound for tomorrow
   Everyone here's flying blind                          (Crystal Gayle)
--
From: ok@goanna.cs.rmit.oz.au (Richard A. O'Keefe)
Newsgroups: comp.lang.c
Subject: Re: Question to test general C knowledge
Date: 15 Dec 92 06:06:23 GMT
Organization: Comp Sci, RMIT, Melbourne, Australia

In article <scott.40.724096473@kronos.com>, scott@kronos.com (Scott Riegelhaupt-Herzig) writes:
> Or, one of my favorites:
> Name the four NULLs in C.
> 
> (They are, of course, NULL character, NULL pointer, NULL string, and null 
> statement.)

The character's official name is NUL, not NULL.

There is no NULL string.  There are _empty_ strings, "", but they
are not null.  (A "string" in C is defined to be a pointer to a NUL-
terminated array of characters, and NULL is not such a pointer.)
From: roy%cybrspc@cs.umn.edu (Roy M. Silvernail)
Newsgroups: comp.lang.c
Subject: Re: Question to test general C knowledge
Date: Sat, 12 Dec 92 19:37:35 CST
Organization: Villa CyberSpace, Minneapolis, MN

wade@nb.rockwell.com (Wade Guthrie) writes:

> One question that I particularly like, although few applicants ever get it, i
> 
> what does:
> 
>  printf("shop"+1); 
> 
> do?

That's a good one, but why would anyone miss it? :-)

(I just checked, and it does exactly what I expected)
--
Roy M. Silvernail --    [my machine ] "Sometimes, you're the windshield....
roy%cybrspc@cs.umn.edu  [my opinions]            sometimes, you're the bug!"
cybrspc!roy@cs.umn.edu  [my $0.0275 ]                      --Mark Knopfler
From: scjones@thor.sdrc.com (Larry Jones)
Newsgroups: comp.lang.c
Subject: Re: longjumping out of a signal handler
Date: 16 Dec 92 22:59:14 GMT

In article <4233@dozo.and.nl>, jos@and.nl (Jos Horsmeier) writes:
> True, all true, as far as I can find in the ANSI C standard, it's
> perfectly safe now to use longjmp() from within a signal function.
> No special prerequisites are necessary ...

Remember that the ANSI C Standard really only talks about *synchronous*
signals that occur because the program called raise().  As far as
*asynchronous* signals (which are the interesting kind), what it says
(in 4.7.1.1 The signal Function) is:

	...the behavior is undefined if the signal handler calls
	any function in the standard library other than the signal
	function itself (with a first argument of the signal number
	corresponding to the signal that caused the invocation of
	the handler) or refers to any object with static storage
	duration other than by assigning a value to a static storage
	duration variable of type volatile sig_atomic_t.
----
Larry Jones, SDRC, 2000 Eastman Dr., Milford, OH  45150-2789  513-576-2070
larry.jones@sdrc.com  or  ...uunet!sdrc!larry.jones
Geez, I gotta have a REASON for everything? -- Calvin
From: pegasus@csd4.csd.uwm.edu
Newsgroups: comp.lang.c
Subject: Test for general 'C' knowledge
Date: 14 Dec 1992 22:09:41 GMT
Organization: Computing Services Division, University of Wisconsin - Milwaukee
Distribution: world
NNTP-Posting-Host: 129.89.7.4
Originator: pegasus@csd4.csd.uwm.edu


Hi everybody.

I have been reading the many questions that some employers ask potential
hirees with a sinking feeling in my stomach.

I consider myself a fairly comptetent 'C' programmer for only using
the lanquage for about 2 years.  After reading these questions I 
realized that I could only answer them half way.

Does this mean that I am not a competent programmer?

AM I less of a programmer if I have to look up QuickSort in a reference book?
I was taught in school that it is not neccessary to memorize any type of
sort.

About the question:   i = i++
WHo the heck would write that anyway?


How would I go about acquiring knowledge like this?

I am just wondering because I would hate to apply for a job and be told
that I am incomptent because of questions like these.


Thank you for the time....


-- 
pegasus@csd4.csd.uwm.edu                David R. Hucke
                                        UW-Milwaukee Film Major
--
Newsgroups: comp.lang.c
From: alpha@waggen.twuug.com (Joe Wright)
Subject: Re: Question to test general C knowledge
Organization: ALPHA, Box 68621, Va. Beach, VA 23455
X-Newsreader: TIN [version 1.1 PL6]
Date: Tue, 15 Dec 1992 20:13:37 GMT

Wade Guthrie (wade@nb.rockwell.com) wrote:
: 
: One question that I particularly like, although few applicants ever get it, is:
: 
: what does:
: 
:  printf("shop"+1); 
: 
: do?
: 
Prints "hop".  

-- 
Joe Wright  alpha@waggen.twuug.com  "Jose' can you C?"
Newsgroups: comp.lang.c
From: bketcham@stein.u.washington.edu (Benjamin Ketcham)
Subject: Re: turboc
Organization: University of Washington, Seattle
Date: Fri, 18 Dec 1992 20:18:50 GMT

in article <1992Dec18.140840.891@nrlvx1.nrl.navy.mil> donohue@nrlvx1.nrl.navy.mil writes:
>
>John Donohue
>

>	if (number[size -1] != '\0')
>		{
>		puts("Too many digits; You wiped me out.");
>		number[size-1] = '\0';
>		goto M10;
                ^^^^
AAAAAAAAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!

>		}
>while ((ch = number[count]) != '\0' && digit == YES)
>	{
>	if (!issign(ch) && !isdigit(ch))
>		{
>		digit = NO;
>		printf("That doesn't look like an number\n");
>		goto M10;
                ^^^^
AAAAAAAAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!

>		}
>	if (digit == YES)
>	{
>	value = atof(number);
>	printf("The number was %f \n",value);
>	goto stoper;
        ^^^^
AAAAAAAAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!

>	}
>	}	
>stoper: printf("PROGRAM DONE\n");	
>}


Newsgroups: comp.lang.c
From: scs@adam.mit.edu (Steve Summit)
Subject: Re: quick addition using char and shorts....
Organization: none, at the moment
Date: Tue, 15 Dec 1992 16:46:18 GMT

In article <1992Dec14.182803.28809@thinkage.on.ca>, dat@thinkage.on.ca (David Adrien Tanguay) writes:
> scs@adam.mit.edu (Steve Summit) writes:
>> Certainly, though, this is an example of a classic space/time
>> tradeoff: ...if you care more about space,
>> prepare to sacrifice some time spent doing conversions.
> 
> But be careful: the space saved by using the smaller size may be exceeded
> by the space required by the extra instructions needed to do the conversions!

David is absolutely right.  This observation underscores a more
general point: if you care enough about optimizations to be
spending time implementing them, make sure you perform at least a
few measurements to verify their effect!  It would be tragic, if
it weren't so pathetically funny, how often well-intentioned but
misguided optimization efforts actually make things worse,
without that fact ever being realized.

					Steve Summit
					scs@adam.mit.edu
From: davidn@csource.oz.au (david nugent)
Newsgroups: comp.lang.c
Subject: Re: What do you say.
Date: Thu, 17 Dec 92 12:31:08 +1100
Organization: Unique Computing Pty Ltd, Melbourne, Australia

In <1992Dec8.014940.5497@fs7.ece.cmu.edu> woyansky@flamingo.ece.cmu.edu (George J. Woyansky) writes:

>We had a guy where I used to work that couldn't understand how arrays of
>dimension >= 2 were stored in memory.  Not just row/column major confusion,
>but big conceptual problems about _where_ the next row/column got stored...

Hmm - isn't that why you have to mount some memory banks horizontally
and others vertically?  As for multi-dimentional arrays; well, I guess
you have to do a few more hardware mods to accommodate.


david

PS: For the humour impaired, here's the :-)
Newsgroups: comp.lang.c
From: alex@mips.complang.tuwien.ac.at (Alexander Forst)
Subject: Re: WHAT WENT WRONG?
Organization: Technical University of Vienna
Date: Thu, 17 Dec 1992 11:32:00 GMT

In article <10441.107.uupcb@cutting.hou.tx.us>, david.brooks@cutting.hou.tx.us (David Brooks)  writes:
|> The following code is intended to compute the factorial of a given
|> number. Unfortunately it gives weird results for numbers larger than 12
|> or so... Does anyone have an idea why? I tried compiling it under Huge
|> memory model and still the same effects.
|> 
|> 
|> #include <stdio.h>
|> 
|> main()
|> {
|>     double x, y;
|> 
|>     printf("\nEnter number to factorialize:");
|>     scanf("%d", &x);
|> 
|>     for(y=x-1;y>1;y--) x*=y;
|> 
|>     printf("\nFactorial= %d\n", x);
|> }
|> 
|> 
|> Undoubtedly the problem comes from playing with numbers that are too
|> big. Is there something obvious that I am overlooking here? Or is there
|> some hidden secret for dealing with big numbers that only rocket
|> scientists and C gurus are aware of? Any help is appreciated!
|> 
|>    David

You should try

main()
{
double x, y;
 
     printf("\nEnter number to factorialize:");
     scanf("%lf", &x);
             ^^------------------------ you want to input a double value
 
     for(y=x-1;y>1;y--) x*=y;
 
     printf("\nFactorial= %lf\n", x);
                           ^^---------- and printf a double value
}

%d stands for integers
%f stands for floats

and the l makes them long values (long and double)
There are other conversion codes as well for printf and scanf.
Look them up in the manual.

	Alex

-----------------------------------------------------------------------------
"Dad! You shot the Flanders-Zombie!"       |          Alexander Forst
              "He was a Zombie?"           |  alex@mips.complang.tuwien.ac.at
                                           |  University of Technology Vienna
                    Bart & Homer Simpson   |  Institute of Computer Languages
-----------------------------------------------------------------------------
Newsgroups: comp.lang.c
From: dfw@fed_img.ingr.com
Subject: Re: Another question to test general C knowledge
Organization: Intergraph
Date: Tue, 15 Dec 1992 13:14:13 GMT

Yeah,
  how about

  i = i++;

  What are the side effects of THIS (i never gets incremented).
  i = ++i; is trivial; ++i PRE-increments i, then assigns it to itself,
  just as i++ or i += 1.

Enjoy,
 dfw
Newsgroups: comp.lang.c
From: agrafiot@wl.com (Dimitris Agrafiotis)
Subject: Re: questions on variable argument lists
Organization: Warner Lambert / Parke-Davis
Distribution: usa
Date: Mon, 14 Dec 1992 20:34:22 GMT

In article <1992Dec14.195419.4785@wl.com> agrafiot@wl.com (Dimitris Agrafiotis) writes:
>
>I want to define a function, alpha(), that takes as arguments a pointer to a
>function, beta(), and the arguments to be passed to that function. Ideally,
>the function would be implemented as follows:
>
>void alpha(void (*beta)(...), ...)
>{
>   va_list arg;
>   va_start(arg, beta);
>   (*beta)(arg);
>   va_end(arg);
>}
>
>but that doesn't work for several reasons. First, the compiler seems to
>require at least one argument in the declaration of beta(). Is there
>an elegant way around that ? Second, even when you avoid this problem
>by introducing a dummy argument, you get garbage at run time (this was
>run on an SGI Indigo). What is the reason? What's the best alternative
>and how portable would it be?
>Thanks in advance,
>
>-- 
>Dimitris K. Agrafiotis
>Computer Assisted Drug Design
>Parke-Davis Pharmaceutical Research
>(agrafiot@wl.com)

I did some experiments and I think I found the solution to my problem
(at least on the SGI machines). The declaration would be something like:

void alpha(void (*beta)(va_list arg), ...);

and the rest is obvious. Sorry for waisting your time.


-- 
Dimitris K. Agrafiotis
Computer Assisted Drug Design
Parke-Davis Pharmaceutical Research
(agrafiot@wl.com)
From: volpe@bart.NoSubdomain.NoDomain (Christopher R Volpe)
Newsgroups: comp.lang.c
Subject: Re: Question to test general C knowledge
Date: 15 Dec 92 14:52:07 GMT
Reply-To: volpe@ausable.crd.ge.com
Organization: GE Corporate Research & Development

In article <16233@goanna.cs.rmit.oz.au>, ok@goanna.cs.rmit.oz.au (Richard A. O'Keefe) writes:
|> In article <scott.40.724096473@kronos.com>, scott@kronos.com (Scott Riegelhaupt-Herzig) writes:
|> > Or, one of my favorites:
|> > Name the four NULLs in C.
|> > 
|> > (They are, of course, NULL character, NULL pointer, NULL string, and null 
|> > statement.)
|> 
|> The character's official name is NUL, not NULL.
|> 
|> There is no NULL string.  There are _empty_ strings, "", but they
|> are not null.  (A "string" in C is defined to be a pointer to a NUL-
|> terminated array of characters, and NULL is not such a pointer.)

Some people use "null string" as a synonym for "empty string", not as
a synonym for "null pointer to char".

-Chris
-- 
==================
Chris Volpe
G.E. Corporate R&D
volpecr@crd.ge.com
From: wirzeniu@klaava.Helsinki.FI (Lars Wirzenius)
Newsgroups: comp.lang.c
Subject: Re: Passing Variable Arguments -twice-
Date: 12 Dec 92 15:52:37 GMT
Organization: University of Helsinki

pjones@asl.slb.com writes:
>I'm trying to pass some arguments to printf() through another routine,

FAQ, question 7.2.

>void main(void)

main returns int, not void.

--
Lars.Wirzenius@helsinki.fi  (finger wirzeniu@klaava.helsinki.fi)
   MS-DOS, you can't live with it, you can live without it.
From: roy%cybrspc@cs.umn.edu (Roy M. Silvernail)
Newsgroups: comp.lang.c
Subject: Re: Testing competence of potential hires
Date: Sat, 12 Dec 92 18:52:15 CST
Organization: Villa CyberSpace, Minneapolis, MN

ajayshah@almaak.usc.edu (Ajay Shah) writes:

> (trivial competence measurement)
>    Consider this code fragment:
> 
>    void abc(char *cde)
>    {
>       for (; *cde; ++cde) *cde = toupper(*cde);
>       return cde;
>    }
> 
>    a) Roughly what is he trying?  (convert a string to uppercase).
>    b) What errors will the (ANSI) compiler choke on?
>         - it's a void and he's returning cde
>       What errors will the compiler not find?
>         - he is not checking if cde == NULL
>    c) what header files are needed for this to compile? (string.h,ctype.h).

    d)  Assuming he changes the type to return (char *), what does he
        expect to return?  (Looks like *cde == '\0' at return, to me...)

    e)  Does he suggest strupr() without asking the platform?
--
Roy M. Silvernail --    [my machine ] "You can't be serious!"
roy%cybrspc@cs.umn.edu  [my opinions]   "Sure, I _can_...
cybrspc!roy@cs.umn.edu  [my $0.0275 ]     I just choose not to be." -- me
From: lpeters@postmaster@hq.af.mil (Leslie D Peters)
Newsgroups: comp.lang.c
Subject: Re: Purchasing C
Date: 18 Dec 92 14:35:30 GMT
Reply-To: lpeters@marge.hq.af.mil
Organization: 7th Communications Group

In article <Bz5p83.2GG@undergrad.math.waterloo.edu>, gjkirk@napier.uwaterloo.ca (Gerald Kirk) writes:
|> I am looking at possibly purchasing a C compiler.
|> I would like something that has a debugger and a
|> decent library, but that does not cost hundreds
|> of dollars.
|> 
|> Does anyone have any suggestions?

For the price, Mix Power C for DOS is probably the best choice.
As I recall, it is about $30 for the compiler and $20 for a
debugger.  Other utilities/libraries/source are similarly priced.
-- 
/============================================================================\
|                                            |                               |
|                    ___                     |                               |
|       ___....-----'---`-----....___        |   I haven't lost my mind --   |
| =========================================  |                               |
|        ___`---..._______...---'___         |    it's backed up on          |
|       (___)      _|_|_|_      (___)        |           tape somewhere.     |
|         \\____.-'_.---._`-.____//          |                               |
|           ~~~~`.__`---'__.'~~~~            |   lpeters@marge.hq.af.mil     |
|                   `~~~'                    |                               |
|                                            |     Les Peters                |
\============================================================================/
Newsgroups: comp.lang.c
From: dkeisen@leland.Stanford.EDU (Dave Eisen)
Subject: Re: Question to test general C knowledge
Organization: Sequoia Peripherals, Inc.
Date: Fri, 18 Dec 92 19:26:23 GMT

>>I consider myself competent with the C and find it difficult to understand
>>why anyone would ask these type of questions in an interview - surely these
>>don't show someones level of competence.
>
>I consider such quizes to be a waste of time in general, and quizes
>over 'tricks' to be even more worthless.

Obviously quizzes over tricks in the language are worthless.

But I would hate to have to make hiring decisions without
testing the proficiency of the candidates. I've talked to
people who come off really well in interviews when discussinig
general programming issues, who've done well in CS classes which 
were at a high enough level to actually cover something, whose
code samples, usually written for these courses, looked wonderful,
but who couldn't write the simplest of programs, even armed with
K&R and the manual. (I know you're thinking that if their coursework
looked good that this failure must have interview jitters, but 
the key feature here is that, at least at UC Berkeley, all of the
undergrad CS classwork is done by groups so beautiful problem sets
are no assurance at all that the person in question can program.)

I can find out more by watching someone write a simple program
than I could find out by tracking down references and talking
to the interviewee for hours. 



-- 
Dave Eisen                               Sequoia Peripherals: (415) 967-5644
dkeisen@leland.Stanford.EDU              Home:                (415) 321-5154
       There's something in my library to offend everybody. 
          --- Washington Coalition Against Censorship