HDTenEightyP/NetNews huggingface dataset:
From: west@jade.ab.ca (Darrin West)
Subject: Re: A LITTLE BRAINTEASER...
Organization: Jade Simulations International, Inc.
Date: Thu, 13 Aug 1992 14:10:21 GMT

This solution does use a struct and a linked list (so I guess it HAS
data structures), but it has the advantage (:-) of using only one
function and no loops, and certainly does not use the heap.

#include <stdio.h>
struct X {
    char ch;
    struct X *last;
};

/* this program only works if called with no arguments */
main(argc)
struct X *argc;
{
    struct X x;

    x.ch=getchar();
    x.last=argc;

    if (x.ch == EOF){
	/* we are now in the printing phase */
	if (argc != (struct X*)1) {
	    /* we are in the middle of a line */
	    main(argc->last);  /* print the first of the line */
	    putchar(argc->ch); /* and then print this letter */
	}
	/* we reached the front of the line */
    }
    else{
	/* we are in the reading phase */
	if (x.ch == '\n') main(1); /* keep reading; mark the end of the line */

	/* this is the neat part, in most cases this reads the rest of the
	   line but when the previous statement was executed (we are at the end
	   of a line) this prints the current line. */
	main(&x);
    }
}

I had considered not using a struct, but just two variables juxtaposed on
the stack and doing some pointer incrementing, but that isn't portable :-).
(maybe if I did this: int *last1;char ch;int *last2; and set both last
 pointers, it would work on inverted stack machines too.)

Ok, I tried it (looks even better, and might even port! :-)

#include <stdio.h>

main(argc)
int *argc;
{
    int *last1;
    int ch;
    int *last2;

    ch = getchar();
    last1 = last2 = argc;

    if (ch == EOF){
	if (argc != (int*)1) {
	    main(*(argc+1));
	    putchar(*argc);
	}
    }
    else{
	if (ch == '\n') main(1);
	main(&ch);
    }
}


Anyone for a grosser solution?

-- 
Darrin West, MSc.
  Jade Simulations International Corporation. west@jade.ab.ca
Newsgroups: comp.lang.c
From: bcschu@skws02.monsanto.com (Brett Schultz)
Subject: Re: Optimizing code for tests
Organization: Monsanto Company
Date: Fri, 14 Aug 1992 19:23:50 GMT

bcschu@skws02.monsanto.com (Brett Schultz) writes:
: I am writing a computationally expensive program now.  In order to make it
: run faster, I compiled each object using cc with the -j option and then the
: entire thing with the -O3 option.  This didn't run any faster than when I had
: used the -g option.  What can the compiler do to help the program run faster?
: 
: My program is expensive also due to comparisons.  I think that is what Jeffrey
: L Bromberg was talking about.  I think what he was asking is if the compiler 
: optimizes comparisons in your algorithm (right??).  I don't know if he tried
: to use the compiler optimization options.  Try it and let me know what you get.
: 
: Did I use the optimatization options correctly with cc, and if so, why didn't
: it make my program faster.
: 
: Any input will be helpful
: 
: Thanks in advance.
: 
: 
: Brett
: 
: bcschu@skws02.monsanto.com
: 



Many of you have sent me mail asking what system, compiler etc....

I am using a sgi 240 and a unix OS.
: run faster, I compiled each object using cc with the -j option and then the
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

cc is the compiler.

Many of you have also suggested to look for bottlenecks in my program.
I appreciate the info, but I have already found the bottlenecks and just
thought that optimized code runs faster than non-optimized code (esp. when
compiled with debugging info).  However, my question was that when I compiled
my code with, from what I understood from our man pages on cc, that one had
to compile individual objects using a -j option.  It is like the -O3 option,
but for objects.  Our cc compiler will not let me compile objects with the
-O3 option.  When I compile with -j, it produces a ".u" file.  I wasn't really
sure if I was compiling correctly, and what to do with the .u files.

Sorry about the confusion and thanks for the input.  I hope this clarifies
things.

Brett
Xref: sparky comp.lang.c:12293 rec.games.programmer:3403
From: smayo@wang.com (Scott Mayo)
Newsgroups: comp.lang.c,rec.games.programmer
Subject: Need help with Microsoft C calling sequence & interrupts
Date: 13 Aug 92 19:16:18 GMT
Organization: Wang Labs, Lowell MA, USA

Please mail responses (to smayo@wang.com). This question goes to folk
who are familiar with Large model C as done by the Microsoft Compiler,
and with DOS and PC interrupts. Apologies, if this is not exactly the
right newsgroup.

I am using the C runtime _dos_getvect() and _dos_setvect() calls to
snag an interrupt on the PC, and provide my own handler (0x9, the keyboard,
if you are curious, but the question applies to any interrupt). As far
as I know, you can't code inline assembly in Microsoft's C, and I'm
not an ASM programmer anyway. I can hook the interrupt easily
enough. _setvect works just fine.

At the end of my interrupt handler, though, I need to pass control to
the previous handler of the interrupt - which is BIOS in this case. I
have the address to jump to, courtesy of my call to _getvect. I just don't
seem to have any way to *get* there. If I *call* through the pointer,
I seem, not too suprisingly, to end up with an eventual stack overflow. But I
have no way to JMP there, which is probably what this situation calls for.

If I wedge the address into the right place on the stack, and just let
my interrupt routine pick up the address as it returns, will it work?
(I have my doubts - I imagine my interrupt routine ends with an IRET).

Is there some evil trickery I can do with longjmp() to get to the right
place? (Again, I have doubts).

Is there a sane way to do this, or do I simply have to use ASM to do this
right? Thanks for any information - please mail responses.
--
The moment you step into the world of facts, you step into a world of
limits.			GKChesterton
smayo@wang.com
Newsgroups: comp.lang.c,comp.sys.ibm.pc
From: Josef Moellers <mollers.pad@sni.de>
Subject: Re: Using ANSI.SYS codes from C? (Turbo)
Date: Tue, 18 Aug 1992 07:36:19 GMT
Organization: Siemens Nixdorf Info.Sys. AG, Paderborn, Germany

In <1992Aug18.013912.12547@cs.umb.edu> cteague@ra.cs.umb.edu (Charles F. Teague II) writes:


>  Is there any way to use ANSI.SYS escape sequences from C?  (TurboC++v1.0)
>I'm hoping to use this just to get a simple coloring of my text, without
>using conio.h, and staggering cprintf()s with textcolor() and/or textattr().

>  I've tried several different output fns, and none of them seem to be able
>to do what a simple echo command in a batch file can do:  change the text
>color by using ansi codes.  If anyone can help me out, I'd appreciate it.

>	Thanks,

I've never tried this, but something like
	printf("\033[3mText\033[0m");
should do something to Your "Text".

-- 
| Josef Moellers		| c/o Siemens Nixdorf Informationssysteme AG  |
|  USA: mollers.pad@sni-usa.com	| Abt. STO-XS 113	   | Riemekestrasse   |
| !USA: mollers.pad@sni.de	| Phone: (+49) 5251 835124 | D-4790 Paderborn |
From: wirzeniu@klaava.Helsinki.FI (Lars Wirzenius)
Newsgroups: comp.lang.c
Subject: Re: Is "...", instead of ",..." legal ?
Keywords: variable arguments
Date: 13 Aug 92 17:12:10 GMT
Organization: University of Helsinki

scott@megadata.mega.oz.au (Scott Humphreys) writes:
>That is - can I legally declare a function with none or many arguments,
>or does it HAVE to have at least one argument. 

Not in C, possibly in C++ (I don't know).  In Standard C you must have
at least one argument.  (Pre-ansi C and non-standard C may allow for no
arguments.  I don't recommend doing it.)

>This came up because gcc version 2.2.2 let me do it,
>but gave a warning when used with the -pedantic option.

The language gcc compiles by default is not standard C, and contains a
lot of extensions.

--
Lars.Wirzenius@helsinki.fi
Newsgroups: comp.lang.c
From: chupchup@ferkel.ucsb.edu (Robert Earl)
Subject: Re: Convert float to a string ?
Organization: (EVIL!)
Date: Fri, 21 Aug 1992 00:53:57 GMT

prem@prem.lbl.gov (Shirdi R. Prem) writes:

| In article <1992Aug20.172112.1564@tin.monsanto.com> bcschu@skws02.monsanto.com (Brett Schultz) writes:
| >prem@prem.lbl.gov (Shirdi R. Prem) writes:
| >: In article <1992Aug19.204417.13500@tin.monsanto.com> bcschu@skws02.monsanto.com (Brett Schultz) writes:
| >: 
| >: 	   sprintf(b,"%f\0",a);
| >: 		     ^^^^^^
| >: 
| >: 	Are you sure you need a '\0' here............???

| >Let me know if sprintf puts one there anyway, I wasn't sure.

| 	Yes. It does.

No, it does NOT put one there - the '\0' is implicitly provided by the
C compiler whenever you mention a "..." double-quoted string.  sprintf
does check for the NUL, however, when reading the format string.  Once
it reaches the NUL and copies it to the target string (in this case,
b), it stops.

If you were to somehow pass a non-NUL terminated string to sprintf, it
would likely go off into never-never land, copying arguments and
trying to find the zero character.  But '\0' is guaranteed to
terminate any string literal compiled into a C program, therefore the
strings are valid input to library functions such as sprintf.


-- 
"If you've got a pig that likes jumping fences, | robert earl
you have to make its fence a lot higher all at  | rearl@ucsd.edu
once -- if you do it by increments, all you're  | rearl@piggy.ucsb.edu
doing is training a jumping pig." -Henry Spencer|
From: jbc@hpcuhe.cup.hp.com (Jeff Caldwell)
Date: Sat, 15 Aug 1992 01:17:25 GMT
Subject: Re: How can a program know where it was invoked?
Organization: Hewlett Packard, Cupertino
Newsgroups: comp.lang.c

> >      main(argc, argv)
> >       int argc;
> >       char     *argv[];
> >      {
> >         char string[20];
> >         sprintf(&string, "which %s", argv[0]);
> >         system(string);
> >      }
> 
> Also, the & in front of "string" is wrong.

Oops.  Obvious typo.  Thanks for the correction.  

			-Jeff Caldwell
From: williford@lub001.lamar.edu
Newsgroups: comp.lang.c
Subject: WANTED:  Simple Windows source code.
Date: 14 Aug 92 12:21:33 +1700
Organization: Lamar University - Beaumont

	I am looking for some simple sorce code for a Windows program.  I would
like to start playing with programing Windows programs.  I have the Borland C++
compiler.  Any simple source would be greatly appreciated! 


T.I.A. (Thanks in advance)

*****************************************************************************
Rhett Williford
Systems Operator
ACM President-Lamar University, Beaumont
Internet: williford@lub001.lamar.edu
*****************************************************************************

Newsgroups: comp.lang.c
From: fjh@mundil.cs.mu.OZ.AU (Fergus James HENDERSON)
Subject: Re: A LITTLE BRAINTEASER...
Organization: Computer Science, University of Melbourne, Australia
Date: Sat, 15 Aug 1992 07:32:57 GMT

ramki@fakir.india.hp.com (R Ramakrishnan) writes:

>Hi,
>
>Here is the one you asked for. Hope this works.

That is NOT what was asked for. (At least this one compiles and
execute properly, even if it doesn't give the right results, huh? :-)

-- 
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: jfw@ksr.com (John F. Woods)
Newsgroups: comp.lang.c
Subject: Re: problems with atof()
Date: 21 Aug 92 14:45:46 EDT

nilo@atdigarfield.cern.ch (Operator) writes:
> I have a problem withe the atof() function, you know string to double 
>conversion. 
>    #include <stdio.h>
>    #include <ctype.h>
>    main()
>     {
>       double a[2];
>       char *b="-.345"
>       printf("this is b : %f  %s \n",atof(b),b);

>       a[0] = atof(b);

You have not declared atof() before using it, therefore you have told the
compiler that it returns an int.  It does not, as you know.  You lied to the
compiler, and it extracted its revenge.

Either add a declaration somewhere appropriate, like
	double atof( /* char *string */ );  /* for ANSI C, uncomment the
					     * parameter declaration */
or (if you have ANSI C) you can add
	#include <stdlib.h>
Newsgroups: comp.lang.c
From: scott@megadata.mega.oz.au (Scott Humphreys)
Subject: Is "...", instead of ",..." legal ?
Keywords: variable arguments
Organization: Megadata P/L, North Ryde, Sydney, Aust.
Date: Thu, 13 Aug 1992 00:24:29 GMT

In various books describing the expansion to ANSI-C,
one of the differences is described as the inclusion
of the ",..." operator for function prototypes
[ meaning that a variable number of arguments follow-
  e.g. int printf (const char *, ...);  ]

My question is: is this legal : int foo (...);

That is - can I legally declare a function 
with none or many arguments, or does it HAVE to have
at least one argument.

This came up because gcc version 2.2.2 let me do it,
but gave a warning when used with the -pedantic option.
Another tool I used (gnu GCT versxion 1.3) bombed on this construct.

Thanks for your time - I trust this isn't a FAQ...
-- 
Dad to Jill (6), Hugh (3), Rhett (1), ? (find out in Dec).
email:  scott@megadata.mega.oz.au |        /\          _/_ _/_ 
fax:    (Int'l +61) (02) 887-4847 |       /  )  _. ____/   /   
voice:  (Int'l +61) (02) 805-0899 |      /__/__(__(_) (___<__  
Newsgroups: comp.lang.c
From: chrism@col.hp.com (Chris Magnuson)
Subject: BOOKS FOR SALE!!
Date: Sat, 15 Aug 1992 16:48:18 GMT
Organization: HP Colorado Springs Division


   What follows is a list of more books for sale.  Terms are the same as before,
shipping is $4 additional, books are hardcover (unless noted), etc.  Best
offer, etc.

   Topics include electronics, DSP (digital signal processing), software
engineering, computer languages and data structures, and realtime
programming.

Chris Magnuson
chrism@col.hp.com
Software Engineer
Hewlett-Packard


*************************
Digital Signal Processing
*************************

  Theory and Application of Digital Signal Processing, Rabiner and Gold, ISBN
0-13-914101-4, 762 pages, $20.


******************
Software/Languages
******************

  A Book on C, Kelley and Pohl, ISBN 0-8053-6860-4, 362 pages, $8 (softcover).
  "Good beginning-intermediate C programming text."

  Compiler Design in C, Holub, ISBN 0-13-155045-4, 924 pages, $30.
  "Good implementation book on compiler writing and theory."

  Data Structures Using Pascal, Tenenbaum and Augenstein, Second Edition, 
ISBN 0-13-196668-5, 774 pages, $20.
  "The most used book on dta structures at the university level."

  Structured Design, Yourdon and Constantine, ISBN 0-13-854421-9, 473 pages,
$15.
  "The classic software design text."

  An Implementation Guide to Real-Time Programming, Ripps, ISBN 0-13-451873-X,
262 pages, $15.
  "Just like it says...implementation-oriented realtime book."

  Software Engineering: A Practitioner's Approach, Second Edition, Pressman,
   ISBN 0-07-050783-X, 567 pages, $13.
  "I hate to part with this one...McCabe/Halstead/metrics, data flow and
   design...just about everything you can think of including object-oriented
   design."

***********
Electronics
***********

  Circuit Theory Fundamentals and Applications, Budak, ISBN 0-13-133975-3,
590 pages, $10.
  "The best book there is for learning circuit theory from."

  Illustrated Encyclopedic Dictionary of Electronics, Douglas-Young, ISBN
0-13-450791-6, 606 pages, $10.
  " Good reference."

  Basic Electronics, Grob, Third Edition, ISBN 07-024917-2, 763 pages, $5.
  "Has a variety of topics, including tubes!"

  Electronic Devices and Circuits: Discrete and Integrated, Ghausi, ISBN
0-03-062481-9, 808 pages, $10.
  "Hot book on designing electronic circuits, from diodes through
   op-amps."

  Micro-Electronic Circuits, Sedra and Smith, ISBN 0-03-056729-7, 927 pages,
$15.
  "Another hot book...diodes, op-amps, FETs, transistors, etc."
  
  Analog-Digital Conversion Handbook, Third Edition, Sheingold, Ed., ISBN
  0-13-032848-0, 670+ pages, $10.
  "Want to know how analog-digital and digital-analog conversion works?"

  Microprocessor Architecture, Programming, and Applications, Gaonkar,
ISBN 0675-201594-05, 655+ pages, $10.
  "Designing with microprocessors is very 90's-ish."

  Analysis and Design of Analog Integrated Circuits , Second Edition, Gray
   and Meyer, ISBN 0-471-87493-0, 771 pages, $15.
  "Transistors, diff amps, op-amp stages, FETs..."

Newsgroups: comp.lang.c
From: rehak@breeze.rap.ucar.edu (Nancy Rehak)
Subject: Re: problems with atof() 
Organization: NCAR / RAP
Date: Thu, 20 Aug 1992 13:45:17 GMT

In article <1992Aug20.125252.3451@dxcern.cern.ch> nilo@atdigarfield.cern.ch (Operator) writes:
>Hello!
>
> I have a problem withe the atof() function, you know string to double 
>conversion. 
> I can not figure out where the error is, so any help will be really really appreciated.
>
>   here follows the small program...
>
>    #include <stdio.h>
>    #include <ctype.h>

     double atof();
     ^^^^^^^^^^^^^^  add this line
>    main()
>     {
>       double a[2];
>       char *b="-.345";
                       ^ add the semicolon for compiling

>       printf("this is b : %f  %s \n",atof(b),b);
>
>       a[0] = atof(b);
>
>       printf("and this is a[0] : %f \n",a[0]);
>
>       exit();
>      }
>
>    whose output is .....
>
>           this is b : -0.345  -.345    
>
>           and this is a[0] : -623456346545..........  large number...
>
>    As you can see the problem appears when I try to assign the return
>    value of atof() which is supposed to be a double type number, to a 
>    variable. It does not work. 
>
>     I don't know how to use this returned values so as to perform some
>     extra operations with it.
>
>
>             Thank you in advance..
>
>                        Nilo Segura   AT Division
>                        CERN - Switzerland


Try the above changes.

Nancy Rehak
Newsgroups: comp.lang.c
From: darcy@druid.uucp (D'Arcy J.M. Cain)
Subject: Re: problems with atof() 
Date: Sat, 22 Aug 1992 07:59:15 GMT
Organization: D'Arcy Cain Consulting

nilo@atdigarfield.cern.ch (Operator) writes:
> I have a problem withe the atof() function, you know string to double 
>conversion. 
> [...]
>    #include <stdio.h>
>    #include <ctype.h>

Where's stdlib.h?  Without it your compiler thinks that atof returns an
int and does an int to float conversion on the float that atof returns.
If your compiler doesn't have a stdlib.h then try math.h.

-- 
D'Arcy J.M. Cain (darcy@druid.com)  |
D'Arcy Cain Consulting              |   There's no government
Toronto, Ontario, Canada            |   like no government!
+1 416 424 2871          DoD#0082   |
Newsgroups: comp.lang.c
From: curt@watson.ibm.com (Curt McDowell)
Subject: Re: POWER OF LARGE NUMBERS
Date: Thu, 20 Aug 1992 22:57:14 GMT
Disclaimer: This posting represents the poster's views, not necessarily those of IBM
Organization: IBM T.J. Watson Research Center

In article <thompson.714156001@daphne.socsci.umn.edu>, thompson@atlas.socsci.umn.edu (T. Scott Thompson) writes:
> cgay@majestix.cs.uoregon.edu (Carl L. Gay) writes:
> 
> >? (time (expt (expt 6 6) 6))
> >(EXPT (EXPT 6 6) 6) took 34 milliseconds (0.034 seconds) to run.
> > 56 bytes of memory allocated.
> >10314424798490535546171949056
> >? (time (expt 6 (expt 6 6)))
> >(EXPT 6 (EXPT 6 6)) took 32290 milliseconds (32.290 seconds) to run.
> >Of that, 120 milliseconds (0.120 seconds) were spent in The Cooperative Multitasking Experience.
> > 30464 bytes of memory allocated.
> >265...36300 digits removed...656
> 
> >Just provided for your amusement...
> 
> Alright!  Who volunteers for 7 ^ (7 ^ 7)?
>                                 ...
>                              10 ^ (10 ^ 10) ?
> 
> P.S.  Mathematica 2.1 on a Sparc 2 does 6 ^ (6 ^ 6) in 5.02 CPU seconds.

GNU Calc on a Sparc 1 does it in 3.25 real seconds... and then
takes 2 minutes 58 seconds to print the answer.

It does 7 ^ (7 ^ 7) in 12 minutes 24 seconds, yielding...
	375 ...(695969 digits deleted)... 343

To print the answer to that one takes 17 hours 2 minutes!
I guess that part of their package could use some work.  :-/

--
Curt McDowell
IBM T. J. Watson Research Center
Newsgroups: comp.lang.c,comp.programming
From: venaas@siri.unit.no (Stig Venaas)
Subject: Re: A LITTLE BRAINTEASER...
Organization: University of Trondheim
Date: Wed, 12 Aug 92 13:04:37 GMT

It's easy I think.

First you use your code for reversing all the input, then
afterwards you use your code for reversing each line.
The result is that each line is in the original order, but
the order of the lines are reversed.

You could also do it the other way around.
The answer is, use your two routines in succesion. Which one you
uses first is not important.

-- 
Stig (venaas@siri.unit.no)
Newsgroups: comp.lang.c
From: prem@prem.lbl.gov (Shirdi R. Prem)
Subject: Re: Convert float to a string ?
Reply-To: prem@prem.lbl.gov (Shirdi R. Prem)
Organization: Lawrence Berkeley Laboratory
Date: Wed, 19 Aug 1992 21:27:49 GMT

In article <1992Aug19.204417.13500@tin.monsanto.com> bcschu@skws02.monsanto.com (Brett Schultz) writes:
>KSZ@VM.NRC.CA writes:
>: Suppose I have a float a=12.4567, how can I convert it into a string including
>: 8 characters? i.e. What I want is
>
>Use sprintf..
>
>main()
>{
>   float a = 12.4567;
>   char b[10];
>
>   sprintf(b,"%f\0",a);
>}
>That'll do it.
>Brett


	   sprintf(b,"%f\0",a);
		     ^^^^^^
		     ^^^^^^

	Are you sure you need a '\0' here............???

	Prem!  (I guess I should've written a test program to find out, )   
	       ( rather than posting this..........                     )
Newsgroups: comp.lang.c
From: karl@ima.isc.com (Karl Heuer)
Subject: Re: Sorting (continued)
Organization: Interactive Systems, Cambridge, MA 02138-5302
Date: Tue, 18 Aug 1992 17:56:49 GMT

In article <1992Aug15.135836.23357@midway.uchicago.edu>
pynq@midway.uchicago.edu asks how to handle a sorting problem.

I've already discussed the suggested algorithms; in this article I'd like to
outline a possible sort engine which doesn't depend on the array model of
qsort().  Given such an engine in our software toolchest, pynq's problem
would be trivial.

I think it should be possible to design something along the following lines:

	#include <sort.h>
	sort_t *mksort(int (*cmpf)(void const *, void const *),
		size_t eltsize, unsigned int flags, ...);
	int putsort(sort_t *, void const *);
	void *getsort(sort_t *);
	void rmsort(sort_t *);

	/* sample program */
	int mycompare(void const *x, void const *y) {
	    return (strcmp(*(char * const *)x, *(char * const *)y));
	}
	main() {
	    char *buf;
	    sort_t *sp;
	    void *p;
	    if ((sp = mksort(mycompare, sizeof(char *), 0)) == NULL) die();
	    while ((buf = fgetline(stdin)) != NULL) {
		if (putsort(sp, &buf) != 0) die();
	    }
	    while ((p = getsort(sp)) != NULL) puts(*(char **)p);
	    return (0);
	}

Here's the basic idea.  |mksort()| creates an opaque object that will somehow
hold all the state information.  |putsort()| adds an element to the set; it
returns |int| rather than |void| only because it might have to signal an error
from an internal |malloc()|.  |getsort()| returns a null pointer if the set is
empty, otherwise it returns the "smallest" element, and deletes it from the
set.  |rmsort()| does any final cleanup.

Although the usual sequence of calls would be as shown in the example, it's
also possible to terminate the |getsort()| loop before exhausting the set.
Also, if it can be done without compromising the speed, it would be nice if
the package would allow additional calls to |putsort()| even after the user
has started to retrieve them with |getsort()|.

This package could be implemented using any of the algorithms listed in the
original article, or any other method.  Although the details are not visible
to the user, hints on the anticipated usage can be provided through the
|flags| argument (and perhaps additional arguments), in case no single
algorithm has acceptable behavior for all cases.

Karl W. Z. Heuer (karl@ima.isc.com or uunet!ima!karl), The Walking Lint
Newsgroups: comp.lang.c