HDTenEightyP/NetNews huggingface dataset:
From: typhoon@stcon2.kaist.ac.kr (Han Yun-Su)
Subject: Re: Unix equivalent to DOS kbhit() function?
Organization: KAIST in Seoul, Korea
X-Newsreader: Tin 1.1 PL3
Date: Tue, 29 Dec 92 07:33:37 GMT

I wrote 'kbhit()' function for UNIX.
It's very simple..

Here's example source.

Save this article as 'kbhit.c', delete headers and signature..
Compile with -lcurses -ltermcap options, that is,

cc kbhit.c -o kbhit -lcurses -ltermcap

and..type kbhit !
test some characters..
(This works totaly fine for my SUN)

Er..sorry.. I'm not good at english..:)
I can speak C more fluently than english..hehe :)
But my major is NOT Computer Science but Life Science. 

If you find better idea than this one, Please let me know.

Good Luck!


/* ---- Cut Here ---- */
#include <sgtty.h>
#include <curses.h>

kbhit()
{
  static unsigned i;

  ioctl(0, FIONREAD, &i);
  return i;
}

main()
{
  unsigned long count = 0L;
  int c = ' ';
  int i = 0;

  initscr();	/* initialize curses functions */
  crmode();	/* cbreak mode */
  noecho();	/* do not echo pressed character */

  mvprintw(0, 0, "Press \'q\' to quit\n");
  refresh();

  while (c != 'q') {
    count++;
    if (kbhit()) {
      c = getch();
      mvprintw(1, 0, "%d: \'%c\' is pressed (count: %ld)\n", ++i, c, count);
      refresh();
      }
    }

  nocrmode();
  echo();
  endwin();	/* close curses... */
}
/* ---- Cut Here ---- */

--
Han Yun-Su, KAIST, Life Science    |   Life is short, DNA is long.
Molecular Genetics Laboratory      |   DNAs, recombine in the neuclus!
Tel: (042)-4061, 4786              |   Slow and steady evolves the life.
Newsgroups: comp.lang.c
From: wright@staff.tc.umn.edu (Mark Wright)
Subject: Function definition style
Organization: University of Minnesota
Date: Wed, 30 Dec 1992 22:30:45 GMT

Is there any good reason not to use the following style for defining
functions:

type function_name( varname1, varname2, varname3 )

type varname1;
type varname2;
type varname3;

I try to use the style in ansi k&r, but I notice that others are using this
style and I assume they aren't all using pre-ansi compilers.  My problem is
that to use Brief's function listing command the end paren must be on the same
line as the function name, which is difficult to do using k&r 2 style if the 
function needs several structs as parameters.  Besides, it's easier to
document function parameters with k&r 1 style.  Is there any good reason
for me to continue to use k&r 2 style (other than the fact that it makes 
the function declaration in a .h file a simple cut and paste operation)?

-- 
Mark Wright
wright@epx.cis.umn.edu
Newsgroups: comp.lang.c
From: swillden@news.ccutah.edu (Shawn Willden)
Subject: Re: C code Layout
Reply-To: swillden@icarus.weber.edu
Organization: University of Utah Computer Center
X-Newsreader: Tin 1.1 PL3
Date: Wed, 23 Dec 92 15:31:37 GMT

hartman@ulogic.UUCP (Richard M. Hartman) writes:

[ Styles A and B deleted (you already know what they are) ]

: ... am I in the minority here by preferring style C:
: 
: 	keyword (condition) 
: 		{
: 		statement1;
: 		statement2;
: 		statement3;
: 		}
: 
: [...] consider this -- if you have:
: 
: 	if (cond)
: 		statement;
: 
: and then have to add another statement to it:
: 
: 	if (cond)
: 	{
: 		statement;
: 		statement2;
: 	}
: 
: My editor (vi with auto-indent set) requires additional effort
: to move those braces back to the "outdented" position, whereas

This thread is entirely too polite.  Don't you people know that when
coding styles are discussed massive *FLAMAGE* and LOTS OF SHOUTING IS
REQUIRED TO DO THE SUBJECT JUSTICE???????

In keeping with internet custom I would suggest to Mr. Hartman that he
GET A LIFE AND A REAL EDITOR LIKE EMACS AND STOP SCREWING AROUND WITH
VI FOR HELLS SAKE MAN DONT YOU KNOW THIS IS THE 90S???!?!?!?  YOUR
PROBABLY ONE OF THOSE PINKOCOMMIE WHITESPACELOVING FREAKS TO!!!!

: 		-Richard Hartman
: 		hartman@uLogic.COM

--
Shawn Willden
swillden@icarus.weber.edu

P.S. I prefer style C myself
Newsgroups: comp.lang.c
From: pdh@netcom.com (Phil Howard )
Subject: Re: Function definition style
Organization: Netcom - Online Communication Services  (408 241-9760 guest) 
Date: Thu, 31 Dec 1992 19:55:31 GMT

mccall@mksol.dseg.ti.com (fred j mccall 575-3539) writes:

>I just like the way the old declarations LOOK -- it's nice and
>consistent with every other variable declaration in the way that it
>declares the parameters.  However, because ANSI has decreed (for what
>seem good and sufficient reasons, but I still don't like it) that the
>'classic' declarations will not type-check the parameters even if
>there is a prototype somewhere which is visible, I try to force myself
>to use the new-style declarations when the compiler will support them.

I like certain aspects about the old style, but I need to use the new
semantics, so I have adopted a layout style like the following:


unsigned long my_function(
	struct tree_node *	this_one	,
	unsigned long		pattern		,
	int			how_many
)
{
    /* local declarations and code goes here */
}
-- 
/************************************************************************\
| Phil Howard,  pdh@netcom.com,  KA9WGN    Spell protection?  "1(911)A1" |
| "It's not broken... it's just functionally challenged" --Phil and Pete |
\************************************************************************/
From: etmjaro@crosby.ericsson.se (Jan Rooijackers,5309,9741)
Newsgroups: comp.lang.c
Subject: C (Kernighan & Ritchie)
Keywords: C (Kernighan & Ritchie)
Date: 21 Dec 92 07:27:29 GMT
Reply-To: etmjaro@crosby.ericsson.se
Organization: Ericsson Telecommunication Rijen (ETM)


I'm reading The C programming language from Kernighan & Ritchie and try to
make the exercise.
My question have someone the solution of these exercise or can someone tell
me where I can find them, so that I can look if my solutions are correct.


Thanks in advance.
Newsgroups: comp.lang.c
From: backscha@Informatik.TU-Muenchen.DE (Martin Backschat)
Subject: Accessing a dynamical 3-D field
Originator: backscha@hpzenger1.informatik.tu-muenchen.de
Organization: Technische Universitaet Muenchen, Germany
Date: Tue, 29 Dec 1992 14:21:34 GMT


In my program I use 3-D fields of doubles with variable bounds.
This field is implemented as an array of doubles which is allocated
dynamically with malloc.
To access for example the [i][j][k] component in the field f of dimension U,V,W
I have to write   f[i*V*W + j*W + k].

Now my question:

Is it somehow possible to declare and allocate a 3-D field u (of doubles) with
variable bounds, allocated by malloc, in such a way that it can be accessed
with
u[i,j,k] (with type casting)?
From: markh@csd4.csd.uwm.edu (Mark)
Newsgroups: comp.lang.c
Subject: Unsolveable bug
Date: 29 Dec 1992 17:34:38 GMT
Organization: Computing Services Division, University of Wisconsin - Milwaukee
NNTP-Posting-Host: 129.89.7.4

   I've run into an unsolveable bug.  The bug comes from no visible error, it
disappears when searched for under a debugger, and it's likewise non-existent
when the same program is run under other platforms and compilers.  And it
doesn't involve anything having to do with timing of any sort.

   It appears on the DOS port of the program and causes the machine to crash
immediately after a call to malloc().  The malloc call is the ANSI-compatible
call, declared with the <stdlib.h> header.  The particular usage leading to
the crash is (as determined by traces): malloc(16), malloc(16), malloc(20), ...
with no intervening free() calls.  All calls to malloc() return valid pointers.
Checking the memory usage reveals no corruption or access out of bounds.

   The compiler creating the problem has had reliable error-free performance
with other similar programs.
Newsgroups: comp.lang.c
From: conniff@mailhost.aa.cad.slb.com (Steven D. Conniff)
Subject: Re: What do you say.
Organization: Schlumberger CAD/CAM at Ann Arbor, MI
Date: Tue, 22 Dec 1992 18:44:29 GMT


> 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...

> I'm sure that this will motivate many other entertaining and enlightening
> 'clueless programmer stories' (kind of like stupid pet tricks, no?)

I've got tons of stupid sayings from my roommates in college who were
mostly EEs.  Here are a couple: (NOTE: same stupid guy in both cases)

      - My roommate was taking a 100 level Fortran Class at MSU.  One day
        he comes home from class going crazy.  He told us that he started
        a virius on a machine in the lab.  We asked, "How did you do that?"
        His response: "I made a Fortran program with a while loop that
        wouldn't stop.  You know. An infinite loop."

      - One other day, I came home from my compiler class raging about
        a bug that I couldn't find.  He doesn't even look up from the
        Genesis game that he's playing and says, "I don't see what the
        big deal is about computers.  I mean, they can only do what you
        tell them to do."

                 "W H A T  D O  Y O U  S A Y ? ? ? "

                 "W H A T  D O  Y O U  S A Y ? ? ? "

-- 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Steve Conniff                             conniff@ann-arbor.cad.slb.com
Applicon Schlumberger                     conniff@aaaca1.sinet.slb.com 
Ann Arbor, Michigan (USA)                 AAACA1::CONNIFF (SINet)
From: kenneths@ai.mit.edu (Kenneth J. Schneider)
Newsgroups: comp.lang.c
Subject: Re: Wanted: program to extract comments from C
Date: 21 Dec 92 20:04:39 GMT
Organization: MIT Artificial Intelligence Laboratory
NNTP-Posting-Host: granola.ai.mit.edu

well, i just hacked this lex file together:

%{
int inCComment=0, inCPPComment=0;
%}

%%

\/\*    {
          if (inCComment == 1)
	    printf("/*");
	  inCComment=1;
	}
\*\/    { 
          inCComment=0;
	  printf("\n");
	}

\/\/    {
          inCPPComment=1;
	}
\n      {
          if (inCPPComment==1) {
	    inCPPComment=0;
	    printf("\n");
	  }
	}
.       {
          if (inCComment || inCPPComment)
	    ECHO;
	}
%%

---------------------------------------------------------

to use it do:
	lex filename /* file containing the above code */
	cc lex.yy.c -ll
	cat yourfile.c | a.out >! mycomments


not thoroughly tested, but should work :-)


also note that cpp allows you to strip or not strip comment, so you could just
run the file through cpp with strip on and with strip off, then diff the two files

ken
Newsgroups: comp.lang.c
From: wc8519@writer.yorku.ca (Colin Beckmann)
Subject: Graphics in C C++
Organization: York University
Distribution: na
Date: Thu, 24 Dec 1992 16:22:12 GMT

	I am trying to learn a little about GUI in C-C++ and have been 
reading  two books by James McCord  "C Programmers Guide to Graphics" and
"Borland C++ Programmers Guide to Graphics"  The first does not go into 
mice in any form but the second provides a model of a graphical user 
interface.  I thought  this is **GREAT**. :-). One problem, "it don't
work,Ma" and I, being a mere lowly apprentice don't know how to fix it. :-( 
Perhaps someone out there can help me with this problem.I am using Borlands
3.1 and source code settings are for C++ since I am using BGI graphics .
Your help is greatly appreciated.  Replys can either go to the net or email 
me directly.  The solution is probably quite simple and I am going to 
look like the rank amature that I am by if you never ask you'll never know.
Thanks in advance. 


The offending code seems to be

		/* This function is used to communicate with the mouse 	*/
		/* via interrrupt 0x33h												*/

void mouse_call (regax, regbx, regcx, regdx)
{
	union REGS inregs, outregs ;

	inregs.x.ax = regax ;
	inregs.x.bx = regbx ;
	inregs.x.cx = regcx ;
	inregs.x.dx = regdx ;

	int86 (0x33, &inregs, &outregs) ;

	globax = outregs.x.ax ;
	globbx = outregs.x.bx ;
	globcx = outregs.x.cx ;
	globdx = outregs.x.dx ;
}

which was ment to work with 


void get_demo_option (void)
{
	do
	{
		mouse_call (5,0,0,0) ;
		update_pos () ;
	}	while (globbx == 0) ;

	bar (1,21,638,445) ;
	if (globcx >= 20 && globcx <= 180 && globdx >= 20 && globdx <= 39)
	{
		putimage (100,100, dialog_box, COPY_PUT) ;
		monitor_dialog () ;
	}

	if (globcx >= 20 && globcx <= 180 && globdx >= 40 && globdx <= 59)
	{
		putimage (100,100, scroll_bar, COPY_PUT) ;
		monitor_scroll () ;
	}

	if (globcx >= 20 && globcx <= 180 && globdx >= 60 && globdx <= 79)
	{
		putimage (100,100, radio_button, COPY_PUT) ;
		monitor_radio () ;
	}

	if (globcx >= 20 && globcx <= 180 && globdx >= 80 && globdx <= 99)
	{
		draw_tool () ;
	}

	if (globcx >= 20 && globcx <= 180 && globdx >= 100 && globdx <= 120)
	{
		clear_screen () ;
	}
}

This was to activate part of a pull down menu.
I know that the old style function def for mouse_call was obsolete and and
the program would not run.  I changed it to 

void mouse_call (int regax, int regbx, int regcx, int regdx)

and the program would compile but the clicking the button does not do
much.  The program displays the x y coordinates of the mouse and the mouse
is where they say it is.  The program was apparently written for Borland
2.0 
Any help would be appreciated.
Happy Holidays

Colin

email  wc8519@grant.yorku.ca

 
Newsgroups: comp.lang.c
From: jutta@opal.cs.tu-berlin.de (Jutta Degener)
Subject: Re: definition of strncpy stupid?
Organization: Techn. University of Berlin, Germany
Date: Wed, 23 Dec 1992 17:50:09 GMT

msb@sq.sq.com (Mark Brader) writes:
> If you say
>	if (strlen (src) >= n) {
>		memcpy (dest, src, n-1);
>		dest[n-1] = '\0';
>	} else
>		strcpy (dest, src);
> then you are taking an extra pass through the source string, which is
> inefficient if it is long.

And `src' had better be '\0'-terminated, or strlen may give you
a memory access error.  I found the otherwise little used memchr()
function to come in handy with this.

Here is a sixth way:

	*dest = 0;
	strncat(dest, src, n-1);

Frohe Weihnachten,

Jutta (jutta@cs.tu-berlin.de)
Newsgroups: comp.lang.c
From: fjh@munta.cs.mu.OZ.AU (Fergus James HENDERSON)
Subject: Re: C weirdos
Organization: Computer Science, University of Melbourne, Australia
Date: Tue, 29 Dec 1992 18:42:08 GMT

daniel@juliet.osf.org (Daniel Dardailler) writes:

>Does anybody know if there is a specific news group for all the
>little useless C programs that does nothing but funny C hackery.

comp.lang.c is alright for that sort of thing, IMHO.
I suppose that the next best alternatives are alt.hackers and
alt.religion.computers, but they don't really sound quite appropriate.

>(one example:    
>    main(a){a="main(a){a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}
> the smallest auto-print program)
  ^^^^^^^^^^^^

How can you call that "the smallest"?
The *smallest* self-printing program is an empty file, which is
self-reproducing in many languages. 

Perhaps you meant the smallest *C* program? Well *my* system's standard
library contains a default main() that just does a "return 0;",
so an empty file is a self-reproducing C program on *my* system.

Perhaps you meant the smallest *portable* C program?
... no, that can't be right, because your example wasn't portable!

-- 
Fergus Henderson             fjh@munta.cs.mu.OZ.AU      
This .signature virus is a self-referential statement that is true - but 
you will only be able to consistently believe it if you copy it to your own
.signature file!
From: wayne@backbone.uucp (Wayne Schlitt)
Newsgroups: comp.lang.c
Subject: Re: 9th order polynomial
Date: Thu, 31 Dec 1992 04:44:30 GMT
Organization: The Backbone Cabal
	<1992Dec14.214016.149@ondec.lonestar.org>
	<1992Dec29.103955.4864@spillman.uucp>
NNTP-Posting-Host: helios.unl.edu

In article <1992Dec29.103955.4864@spillman.uucp> tye@spillman.uucp (E. Tye McQueen) writes:
> )
> )  for (temp=d_src, accum=1.0, i=i_pow; i ; i>>=1, temp*=temp)
> )    if (i&1) accum *= temp;
> )  return(accum);
> [...]
> 
> Note that the order in which you perform the operations to
> compute a polynomial value can greatly affect the accuracy
> of your calculation [ ... ]
> 
> It's been too long so I can't recall whether computing it as
> 
>     ((((a*x+b)*x+c)*x+d)*x+e)*x+f
> 
> was a particularly good or particularly bad method.  [ ... ]
> 
> Note that if  a*x  is almost equal to  -b  then this method
> probably yields very poor results [ ... ]

if a*x aprox equals -b then a*x^n aprox equals -b*x^(n-1), so either
way, you will loose gobs of precision.  The "missing" information is
the least significant digits and they weren't stored anyway.  When you
compute x^n and store it in a register, you are going to be missing
_lots_ of least significant bits, where as if you multiply and
accumulate, you don't loose as many if things cancel.

As an example, assume that we have 4 digits of accuracy in the
floating point arithmetic:

x = 7.301
a = 2.001
b = -14.59
c = 9.300

then a*x = 14.61 and a*x + b = .02000

the result of (a*x+b)*x+c = 9.446

the result of a*x^2+b*x+c = (2.001 * 53.30) + (-14.59 * 7.301) + 9.300 = 9.500

the real result should be: 9.440916601




It's been a while since I studied this type of
problem real hard too, but I think that the (a*x+b)*x+c method will
typically give as good a result as you can get.



-wayne
Newsgroups: comp.lang.c
From: pod@sour.sw.oz.au (Paul O'Donnell)
Subject: Re: a ? b : c = d; /* legal ? */
Organization: Softway Pty Ltd
Date: 29 Dec 92 23:56:55 GMT
Keywords: interpretation, conditional operator, language issue

In <BzDA4u.459@cdsmn.mn.org> wells@cdsmn.mn.org (Rich Wells) writes:

[ Deleted (correct) discussion that a ? b : c = d; is equivalent to
  (a ? b : c) = d; and is bogus. ]

>***** Microsoft C (7.0 and 5.1):

>The statement does not compile.  The compiler complains
>(rightly, I think) that the ?: does not yield an lvalue,
>and so the assignment is invalid.

This is correct behaviour.

>***** Metaware HighC (version 3.01 for the 386):

>The statement is interpreted as:

>    if (a)
>        b;
>    else
>        c = d;

>which, it seems to me, ignores precedence rules.

Yuk, this is wrong, wrong, wrong as you correctly surmise.

>***** Turbo C++ (3.0):

>The statement is interpreted as:

>    if (a)
>        a = d;
>    else
>        b = d;

>In other words, it allows the ?: operator to yield an
>lvalue, and uses that for the assignment.  (NOTE: TC++
>is a C++ compiler; does this change the answer?)

Surely you mean:

    if (a)
        b = d;
    else
        c = d;

Gcc does this too.  If you use the -pedantic flag, it warns you that
that ANSI disallows it, but does it anyway.  I don't know what is
correct for C++.  It does seem to be a reasonable extension.

>This came from a friend of a friend
>(perhaps I should post to alt.folklore.computers?) who claims
>he was asked this on an employment exam, and was told that
>the Turbo C++ interpretation is correct.

Well I hope he didn't take the job, because they were wrong.

>BTW: if I have used the words 'statement', 'expression' and
>'lvalue' wrong, forgive me; I'm not an experienced language
>lawyer.  However, please correct me if I used them wrong;
>inquiring minds want to know.

You did fine.

-- 
Paul O'Donnell - Softway Pty Ltd         |"You're just saying that because
Internet: pod@softway.sw.oz.au           |you don't understand art."
Phone: +61 2 698-2322 Fax: +61 2 699-9174|     - Jeremy Fitzhardinge
Newsgroups: comp.lang.c
From: misar@rbg.informatik.th-darmstadt.de (walter misar)
Subject: Re: assert
Date: Tue, 22 Dec 1992 16:10:04 GMT
Organization: TH Darmstadt

In article <HBF.92Dec19163113@gandalf.uio.no>, hbf@gandalf.uio.no (Hallvard B Furuseth) writes:
> assert is sometimes (ie sun or gcc) defined to call another macro (ie
> __assert) which does most or all of the work.  I expect it's a hack to
> make sure the argument is stringified properly, or something like that.
> Can somebody explain?

Shrug. But at looking on sun's definition of assert() if found following (bug ?):

#define _assert(ex)    {if (!(ex)){(void)fprintf(stderr,"Assertion failed: file
 \"%s\", line %d\n", __FILE__, __LINE__);exit(1);}}
#define assert(ex)     _assert(ex)

This wont work in cases like this

#include <stdio.h>
#include <assert.h>

main()
{ if (42==42) assert(17<23);
  else printf("never");
}

=>

$cc t.c
"t.c", line 6: syntax error at or near word "else"

cause it expands to something like this if (...) {...}; else ....
(Gnu does it right, using a ? : instead of the if, thus having no need
 for the {})

-- 
Walter Misar                        It is impossible to enjoy idling thoroughly
misar@rbg.informatik.th-darmstadt.de       unless one has plenty of work to do.
Newsgroups: comp.lang.c
From: ktf@bc3.GUN.de (Klaus ter Fehn)
Subject: Re: fgets() sscanf() EOF confusion
Organization: private
Date: Wed, 30 Dec 1992 20:43:58 GMT

In article <1992Dec30.160832.3769@coe.montana.edu> sandy@cs.montana.edu (Sandy Pittendrigh) writes:

>I know how to read a text file one character at a time, 
>and how to jump out of a loop when EOF is encountered,

>but I'd like to do something like the following, and don't 
>know how to detect EOF when using fgets and sscanf.


    1	>while(!feof(inFile))
    2	>  {
    3	>  fgets(line,80,inFile);
    4	>  sscanf(line,"%d %d %d %d", &x, &y, &z);
    5	>  if(eof(inFile) /* But this doesn't work */
    6	>   {
    7	>   doSomething(x,y,z);
    8	>   break;
    9	>   }
   10	>  else doSomething(x,y,z);
   11	>  }

>Is this a resonable concept? 

delete line 7
change line 5 to 'if (feof(inFile))'
drop one '%d' in line 4
move line 4 behind line 9
drop the 'else' on line 10:

    1	while(!feof(inFile))
    2	{
    3	        fgets(line,80,inFile);
    4	        if(feof(inFile))
    5	        {
    6	                break;
    7	        }
    8	        sscanf(line,"%d %d %d", &x, &y, &z);
    9	        doSomething(x,y,z);
   10	}

This for your program-code - but you're reading 3 Integers at a time.
Above you mentioned, that you're trying to read one character at a time
out of an ascii-file. For that the following code will do so:

    1	int character;
    2	/* ... */
    3	while ((character = fgetc(inFile)) != EOF)
    4	{
    5		doSomethingWithChar(character);
    6	}

Note, that you should use an int-var for reading with fgetc, because it
return 0..255, if ASCII-Values are read and EOF (often -1) if end of 
file was encountered.

Greetings...
-- 
Klaus ter Fehn		<ktf@bc3.GUN.de>
Neanderstr. 4		{mcshh,smurf,unido}!easix!bc3!ktf
4000 Duesseldorf 1
FRG / Germany		Tel.: +49-211-676331
From: hartman@ulogic.UUCP (Richard M. Hartman)
Newsgroups: comp.lang.c
Subject: Re: A different C puzzle
Date: 22 Dec 92 22:27:15 GMT
Organization: negligable

In article <1992Dec21.040744.24098@u.washington.edu: bketcham@stein.u.washington.edu (Benjamin Ketcham) writes:
:OK, how about this, then:
:
:Write a program that uses every valid character exactly once.  Extra credit
:depending on how much it does (eg, can it produce output?).  Partial credit
:for the substantially easier problem "Write a program that uses every valid
:character exactly twice.".
:
:This is comp.lang.c, so the answer should be in C, naturally, and the "valid
:character" set follows from that.
:
:--ben

I should think it would be rather difficult to use only one " ...
Two of each is a different matter.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Oh I give my life so lightly		|
to my gentle lady.			|	-Richard Hartman	
Giving freely, and completely,		|	hartman@uLogic.COM
for my lady.				|
Newsgroups: comp.lang.c