HDTenEightyP/NetNews huggingface dataset:
From: colinl@cssc-syd.tansu.com.au (Colin Lynch)
Subject: Re: Need (today's date + [1-7] days)
Keywords: date
Organization: Customised Software Solutions Centres, AOTC
Date: Tue, 28 Jul 1992 07:20:25 GMT

bernie@metapro.DIALix.oz.au (Bernd Felsche) writes:

>In <1992Jul16.145836.15586@avalon.nwc.navy.mil>
>   dejesus@archimedes.nwc.navy.mil (Francisco X DeJesus) writes:

>>If I can get today's date in a shell script or C program, how can I find
>>out the dates of the next week? For example, if I know today is
>>"Wed Dec 30 1992", how can I have the program now that the next seven days
>>are going to be "Thu Dec 31 1992", "Fri Jan 1 1993", etc (taking the
>>case in which both month and year could change).

>I usually get away with fiddling with the timezone.
>Unfortunately, some operating systems ignore hour offsets
>greater than 12 hours from UTC.

    ...The most reliable way to do this is to first convert the current
date/time into a time_t type ("time_t" is defined in the system header file
<time.h>, and is basically a long containing the number of seconds since the
start of 01 Jan 1970 on most systems):

       #include <time.h>

       time_t   current_time;

       current_time = time((time_t *)0);

    Having done this, just set a macro for the length (in seconds) of one
day:

       #define ONE_DAY	((60) * (60) * (24))

    From here, you can get the value for any day you want. For example, the 
value for two days' into the future would be:

      two_days_ahead = current_time + (ONE_DAY * 2);

    You can then convert the time_t for the desired day back into some 
useful structure. If you want to manipulate it, maybe do this:

      struct tm *timestruct;

      timestruct = localtime(&two_days_ahead);

    The function localtime() and the struct tm are both defined in <time.h>.
Struct tm includes separate values for year, month, etc, in case you want 
specific bits.

    If you just want to print it out, try this:

    struct tm *timestruct;
    char timestamp[30];

    timestruct = localtime(&two_days_ahead);

    strftime(timestamp, 30, "%a %b %d %H:%M:%S %Z %Y", timestruct);

    This will give you the string timestamp, which will have this format:

Tue Jul 28 07:19:53 GMT 1992

  Hope this is helpful. Cheers, Colin.



-- 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Colin Lynch - Telecom Australia | E-mail:  colinl@cssc-syd.tansu.oz.au
Advanced Network Products       |   post:  PO Box A226
Customised Software             |          Sydney South NSW  2000
Xref: sparky comp.unix.programmer:3965 comp.unix.questions:9491 gnu.misc.discuss:2566 gnu.gcc.help:1796 comp.unix.ultrix:5936
From: jtkohl@cs.Berkeley.EDU (John T Kohl)
Newsgroups: comp.unix.programmer,comp.unix.questions,gnu.misc.discuss,gnu.gcc.help,comp.unix.ultrix
Subject: Re: help with unexec
Date: 28 Jul 1992 17:59:47 GMT
Organization: University of California, Berkeley
NNTP-Posting-Host: stinson.cs.berkeley.edu
In-reply-to: dnicodem@cs.ulowell.edu's message of 28 Jul 92 01:49:55 GMT

In article <1992Jul28.014955.21272@ulowell.ulowell.edu> dnicodem@cs.ulowell.edu (David Nicodemus) writes:

> I am looking for a way to force a program out of execution, and save an image
> of the program that can be restarted from the same point at a later time. 

You might look at the Condor software from the University of Wisconsin
(see the Winter '92 USENIX proceedings for a description of the
mechanism and pointers to other work).  It requires a "well-behaved"
application (e.g. doesn't do things which are hard to reconstitute, like
use the network, pipes, etc.).
--
John Kohl <jtkohl@cs.berkeley.edu>
UC Berkeley CS grad student
Member of the League for Programming Freedom--details: league@prep.ai.mit.edu
(The above opinions are MINE.  Don't put my words in somebody else's mouth!)
From: ccx018@cch.coventry.ac.uk (Leslie Griffiths (Griff))
Newsgroups: comp.unix.programmer
Subject: Re: expanding ~'s in a directory name.
Date: 31 Jul 92 07:58:30 GMT
Organization: Coventry University

In article <1992Jul29.012629.14000@gucis.cit.gu.edu.au> aroll@gucis.cit.gu.edu.au (Ashley Roll) writes:

>My problem is how do I expand ~'s. I want to expand then the way that csh does.
>
>Has anyone written or got code that will do this that I can use? Or is there
>a library function that will do this.

Well, all you need to do is to find out the users home directory, which can
be obtained from the "struct passwd *" returned by a function such as 
getpwuid, or getpwnam i.e.

#include <pwd.h>

main()
{
  struct passwd *pass;

	
  if ((pass = getpwuid(getuid())) == NULL)/* Not sure if getpwuid sets errno */
       {
	 fprintf(stderr, "Could not get passwd struct\n"); 
	 exit(1);
       }

  printf("Users home area is %s\n", pass->pw_dir);
}

To see what else is contained within the struct passwd, see /usr/include/pwd.h

Cheers


  
-- 
Griff				\\         	ccx018@uk.ac.cov
^^^^^		       		 :-=       	^^^^^^^^^^^^^^^^
		        	//
Xref: sparky comp.unix.programmer:4004 comp.unix.questions:9557
From: yedidya@bimacs.BITNET (Yedidya Israel)
Newsgroups: comp.unix.programmer,comp.unix.questions
Subject: Re: Bidirectional Pipes
Keywords: pipes
Date: 29 Jul 92 13:00:24 GMT
Organization: Math department, Bar-Ilan University, Ramat-Gan, ISRAEL

In article <1992Jul24.101257.12697@cpio1.UUCP> bernard@cpio1.UUCP (Bernard Fouche) writes:
>
>In article <1992Jul14.061826.11689@Unibase.SK.CA>, roe@Unibase.SK.CA (Roe Peterson) writes:
>> 890025d@dragon.acadiau.ca (Andy DeWolfe) writes:
>> Sorry, but there is no such beastie as a bi-directional pipe.  The
>> pipe(2) system call will return two file descriptors, one open for
>> write, and one open for read.  Have the reader close the write end, and
>> the writer close the read end.
>>
>> You can't use pipe to communicate in both direction over one file
>> descriptor.

But socketpair can.
--
Israel Yedidya,         Phone:  972-3-5318682 or 972-3-5318407/8
System Administrator,   Fax:    972-3-5353325
Math & CS Department,   Email:  yedidya@bimacs.cs.biu.ac.il
Bar-Ilan University,    Bitnet: yedidya@bimacs
Ramat-Gan, ISRAEL.      Uucp:   ...!uunet!pucc.princeton.edu!bimacs!yedidya
If someone proves there is no God, I'll stop being religious!
Newsgroups: comp.unix.programmer
From: gram@aim1.aztec.co.za (Graham Wheeler)
Subject: Re: STREAMS help desperately needed
Organization: Aztec Information Management
Date: Fri, 31 Jul 1992 09:11:03 GMT

jhelberg@nl.oracle.com (Joost Helberg) writes:

>: 			tp = (struct termio *)mp->b_cont->b_datap;
>BANG, b_datap points to the datab structure, not the data which
>may contain the termio data!
>: 			tp->c_iflag = PAD->terminfo.c_iflag;
>destroying the structure in b_datap

>after some time the streams layers free up this message and they get
>confused finding flags in the datab --> crash.

Correct. What is quite interesting was that when I put B9600|CS8 in as the
c_lflag value, and made the others zero, it never crashed (even after a couple
of hours of continual driver activity). When I made everything zero it did.

I knew I should have taken a holiday and come back to this problem; I had been
staring at it so long in dismay I probably wouldn't have found the bug if it
tapdanced in front of me. I will shut up now. Thanks folks, you have not only
solved my problem, you have lifted me out of a bad depression (just in time
for the weekend!) Long live the net!

A very mollified but much more cheerful Graham


>--
>   Joost Helberg                                Rijnzathe 6
>   jhelberg@oracle.nl                           NL-3454 PV De Meern
>   jhelberg@nl.oracle.com                       The Netherlands

>   Oracle Europe BV                             Product Line Development	
>   Phone: +31 3406 94211                        Fax:   +31 3406 65609
-- 
Graham Wheeler                     | "That which is weak conquers the strong,
Software Systems Engineer/Student  | that which is soft conquers the hard."
Aztec Information Management/UCT   | 		Lao Tzu - Tao Te Ching Ch. 78
gram@aim1.aztec.co.za / gram@cs.uct.ac.za 
Newsgroups: comp.unix.programmer
From: rajeev@cbnewsf.cb.att.com (rajeev.dolas)
Subject: I am stumped on this one!!!
Organization: AT&T
Distribution: usa
Date: Fri, 24 Jul 1992 20:49:44 GMT


Hello all,

	I have included a function from my code which doesn't work on a Sun
	(690 w/ 4.1.2) but works on an Amdahl and I can't figure out why. 
	I am seeking help from the net after spending considerable amount of
	time trying to debug this. I appreciate your help.

	Thanks in advance.

	Raj Dolas
	raj@qsun.att.com



#include <stdio.h>

/* I have deleted lots of stuff to keep it simple for netters */
parse_conf(f2)
int f2;
{

	char fname[80], ch, cmp[80];
	char pars_wbuf[128];
	char *pbuf;
	char *cp_line;
	char *tmp_line;
	char *var, *getenv();
	int comp, he;
	int parse_ret;
	int fd;
	FILE *fp1, *fp2;

	strcpy(fname, "/qsun/h5/raj/progs/acs/config/Star3/072392");

	umask(0);
	umask(066);
	if((fp1 = fopen(fname, "w")) == NULL) 
	{
		if((fp1 = fopen(fname, "w+")) == NULL)
		printf("Cannot open fp1 in parse_conf()\n");
		return(-78);
	}

	/** f2 was opened in another function with "w" and data was written */
	if((fp2 = fdopen(f2, "r")) == NULL)
	{
		printf("Cannot open fp2 in parse_conf()\n");
		return(-78);
	}

	/* As data was written to this file before, I must do a fseek */
	if((he = fseek(fp2, 0L, 0)) < 0)
	{
		printf("fseek error in parse_conf()\n");
		return(-78);
	}

	/* str_comp is my function which returns -1 if match is not found */
	while((fgets(pars_wbuf, 80, fp2) != NULL) &&
		((parse_ret = str_comp(cmp, pars_wbuf)) != 0))
	{
		pars_wbuf[strlen(pars_wbuf)] = '\0';
		pbuf = pars_wbuf;
		cp_line = (char *)malloc(sizeof(strlen(pars_wbuf)));
		strcpy(cp_line, "\0");
		tmp_line = cp_line;

		if((comp = line_comp(pars_wbuf)) == 0)
			;
		else 
		{
			/* Traverse thru pbuf, skip "
			while(*pbuf != '\0')
			{
				if(*pbuf != 0x0D)
				{
					/* I was writing a char at a time to
					   the file before. This part works
					   on Amdahl but not on a sun.	*/

					/**
					ch = *pbuf;
					fprintf(stdout, "%c", ch); 
					if((he = putc(ch, fp1)) < 0)
					{
					     printf("pars_conf: Write error\n");
						return(-13);
					}
					**/

					/* Now I save it to a buffer */
					*cp_line++ = *pbuf;
				}
				*pbuf++;
			}
			/* If I do a fputs to stdout, it works fine */
			/**
			fputs(tmp_line, stdout);
			fflush(stdout);
			**/

			/* dbxtool shows the following error on this instr -
			 signal SEGV in malloc at 0xf773634
			 malloc+0x150:	st	%o0, [%15]
			 */
			fputs(tmp_line, fp1);
		}
		free(cp_line);
	}
	
	fclose(fp1);

	
	if(fname)
		free(*fname);
	
	if(parse_ret != 0)
		return(-89);

}



Newsgroups: comp.unix.programmer
From: dealwisb@cognos.com (Brian de Alwis)
Subject: Re: named pipes (was: Finger and .plan, .project)
Keywords: named pipes, fopen, popen, .plan, .profile, .signature
Organization: Cognos Incorporated, Ottawa CANADA
Date: Sun, 26 Jul 1992 23:49:59 GMT

In article <1992Jul26.165838.1278@news.eng.convex.com> tchrist@pixel.convex.COM
(Tom Christiansen) writes:
>What programs would break drastically if we changed the library fopen()
>call to either accept "rx"/"wx" to indicate a popen(), or else for the
>sake of transparency, to have it stat() the file and check for the execute
>bit?  (Should we to do it for open() as well?  Probably.)  Certainly editors
>would prefer the former solution, but most general purpose programs the
>latter one.

What would happen if a program did an open/fopen on a directory? Many
directories have rx/wx on them... I like your idea, however, I'd
suggest having a special group for these files. When fopen/open
detected this special group, they would do the popen. Since no user
would belong to this group, only the owner would be able to edit it
(provided appropriate permissions were setup).

The largest problems I see with the above would be the uid/gid that the
file would be executed under - I'd suggest the uid/gid a la
set[ug]id(); handling of command-line arguments (none); and set[ud]id
bits (ignore them?).
-- 
+++BdA  Brian de Alwis. Brain on loan to Cognos Inc, Ottawa, Ontario.
	dealwisb@cognos.com, or bsdealwi@napier.{waterloo.edu,uwaterloo.ca}
	"Nine out of ten men who tried camels said they preferred women"
Xref: sparky comp.unix.programmer:3857 comp.unix.questions:9320 comp.lang.c:11492
Newsgroups: comp.unix.programmer,comp.unix.questions,comp.lang.c
Subject: Re: #include file dependancies
From: ecmtwhk@ccu1.aukuni.ac.nz (Thomas Koenig)
Date: Thu, 23 Jul 1992 01:31:54 GMT
Distribution: comp
Organization: University of Auckland, New Zealand.

ajg@controls.ccd.harris.com (Arnold Goldberg) writes:

>We here have a very large source tree.

>What I'm looking for is a script or utility that will somehow tell
>me which #include files are not actually needed for a source file.

Gcc (or rather, gcc's preprocessor) has the -M flag which will generate
makefile dependencies for the specified source files; check out the manpage
for your C compiler to see wether it also supports it.
-- 
Thomas Koenig, ecmtwhk@ccu1.aukuni.ac.nz, ib09@rz.uni-karlsruhe.de
The joy of engineering is to find a straight line on a double logarithmic
diagram.
From: urlichs@smurf.sub.org (Matthias Urlichs)
Newsgroups: comp.unix.programmer
Subject: Re: Fork ?
Date: 28 Jul 1992 22:52:57 +0200
Organization: University of Karlsruhe, FRG
NNTP-Posting-Host: 127.0.0.1

In comp.unix.programmer, article <431@highett.mel.dbce.csiro.au>,
  kang@mel.dbce.csiro.au (Kang Ho) writes:
< In article <1992Jul6.010103.22037@news.uiowa.edu> gdcarson@icaen.uiowa.edu (Gregory Donald Carson) writes:
< > I have a question about fork's.  I have a C program that I need to call
< > repeatedly. [...deleted...]
< > The C program that I need to call takes a long time to run, and I want it
< > to run, while the main program continues. I have heard of a thing called 
< > a fork, and was hoping someone could [...deleted...]
< > The C program that I wish to call is passed an image data array, and 
< > then displays it, its normal quit returns control to the calling program.
< 
< The program fragment is as follows: 
< main()
< {
<   int pid;
< 
<   if ((pid=fork())<0){
<     perror("fork unsuccessful");
<     exit(-1);
<     }
<   else if (pid==0){
<     /* child process */
<     execl("/bin/imgdisp","imgdisp","param1",(char *)0);
perror("imgdisp gone");
exit(-1);
<     }
<   else {
<     /* parent process */
<     wait((int *)0);
<     }
<   ...
< } 

-- 
"I'd love to go out with you, but I did my own thing and now I've got
to undo it."
-- 
Matthias Urlichs  --  urlichs@smurf.sub.org -- urlichs@smurf.ira.uka.de   /(o\
Humboldtstrasse 7 -- 7500 Karlsruhe 1 -- Germany  --  +49-721-9612521     \o)/
From: joseph@joebloe.maple-shade.nj.us (Joseph Nathan Hall)
Newsgroups: comp.unix.programmer
Subject: New process group for child
Date: Tue, 21 Jul 92 18:30:57 EDT
Organization: 5 Sigma Software
Reply-To: joseph@joebloe.maple-shade.nj.us
Distribution: us
X-Mailer: uAccess - Macintosh Release: 1.5v5


I'd like to put a child process into its own process group to keep
it from receiving signals from the parent.  How do I go about this?
In particular, how do I get a new process group id?  SunOS/BSD.

uunet!joebloe!joseph   (609) 273-8200 day   joseph%joebloe@uunet.uu.net
v   v  sssss | Certified Guru: all-grain brewing,| 2102 Ryan's Run East
 v v  s   s  | C, synthesizer comp & arranging,  | Rt 38 & 41
  v    sss   | photography. Also not a bad cook. | Maple Shade NJ 08052
-----My employer isn't paying for this, and my opinions are my own-----
Newsgroups: comp.unix.programmer
From: gemini@geminix.in-berlin.de (Uwe Doering)
Subject: Re: fdclose function? Or something like it?
Organization: Private UNIX Site
Date: Tue, 21 Jul 1992 06:54:46 GMT

volpe@bart.NoSubdomain.NoDomain (Christopher R Volpe) writes:

>Folks-
>  I'm looking for advice on the following scenario: 
>
>  My routine is handed a file descriptor opened and managed by some
>calling routine. (The descriptor actually corresponds to a connected
>internet-domain socket, but hopefully that will not be relevant.) In my
>routine, I would like to do some stdio-type operations (e.g. fprintf) on 
>the descriptor, so I open a stream with `stream=fdopen(fd,"w");'. Now,
>before I return to the caller, I want to free up the stream since I no 
>longer need it, and since this routine may be called may times with
>the same descriptor or different descriptors, and I don't want to 
>run out of streams after doing too many fdopens. However, I don't want
>to disturb the underlying descriptor, so I can't do a "fclose(stream)".
>Is there some way to "undo" an fdopen call? Something like an "fdclose"
>call that might close the stream without closing the descriptor? 

You could dup() the file descriptor at the beginning of your routine,
then associate this duplicated fd with a stream via fdopen(). At the
end of your routine you can fclose() this stream without closing the
socket connection because the original fd still holds it open. So
after this you can continue to write to the socket from elsewhere
in your program via the original fd that was before passed to your
routine.

Hope that helps.

      Uwe
-- 
Uwe Doering  |  INET : gemini@geminix.in-berlin.de
Berlin       |----------------------------------------------------------------
Germany      |  UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
From: evansmp@uhura.aston.ac.uk (Mark Evans)
Newsgroups: comp.unix.programmer
Subject: Re: Signals propagated from child to parent
Date: 30 Jul 92 17:41:35 GMT
Organization: Aston University

tasos@cs.bu.edu (Anastasios Kotsikonas) writes:
: Greetings to all. Subject should have been "AIX bashing".
: 
: Well, can somebody clarify the following: when a forked child receives
: a signal is the parent supposed to get the same signal (SIGSEGV for example)?
: 
: If a A forks B, B forks C, C dies, B receives SIGCLD, is A supposed to get
: SIGCLD too?
Not unless B then exits.

: 
: If A forks B, A does a system(), is A supposed to receive SIGCLD? Well on AIX
: not only it does, but the subsequent wait(), that we are supposed to execute
: when catching SIGCLD, blocks for ever waiting for B to die!!!!!!!!
system () will call wait() internaly and will return after waiting for the
shell.
The wait you put in can only be for B.

: 
: If A forks B and B exits normally (exit (0)) is A supposed to be told
: after the SIGCLD and wait() that WIFSIGNALED is TRUE AND WTERMSIG == SIGHUP?
In that case wait() will give you the the exit status of the child,
in this case 0.
(that's why status is defined as a union)
-- 
-------------------------------------------------------------------------
Mark Evans                                   |evansmp@uhura.aston.ac.uk
+(44) 21 565 1979 (Home)                     |evansmp@cs.aston.ac.uk
+(44) 21 359 6531 x4039 (Office)             |
Newsgroups: comp.unix.programmer,comp.unix.questions,comp.lang.c
From: ajg@controls.ccd.harris.com (Arnold Goldberg)
Subject: Re: #include file dependancies
Organization: Harris Controls and Compositions
	<1992Jul23.013154.22987@ccu1.aukuni.ac.nz>
	<1992Jul23.082922.5261@ericsson.se>
Distribution: comp
Date: Thu, 23 Jul 1992 18:25:29 GMT

>>>>> On Thu, 23 Jul 1992 08:29:22 GMT, etxmesa@eos.ericsson.se (Michael Salmon) said:
Michael> |> ajg@controls.ccd.harris.com (Arnold Goldberg) writes:
Michael> |> 
Michael> |> >We here have a very large source tree.
Michael> |> 
Michael> |> >What I'm looking for is a script or utility that will somehow tell
Michael> |> >me which #include files are not actually needed for a source file.
ichael> |> 
Michael> |> Gcc (or rather, gcc's preprocessor) has the -M flag which will generate
Michael> |> makefile dependencies for the specified source files; check out the manpage
Michael> |> for your C compiler to see wether it also supports it.
Michael> If I interpret Arnold correctly he wants a program that checks which
Michael> include files are used rather than those that are included, there is a
Michael> subtle difference.

Right!  The difference while it may be subtle is quite substancial..

Well, I still don't have any working solutions.

C'mon people don't let me down here.  I know some of you have to be worried
about this also

I'll post a summary if there is enough interest.

A slightly disappointed,
arnold

--
------------------------------------------------------------------------
Arnold Goldberg                            Email:  ajg@ccd.harris.com
Phone: (407)242-5051                       Snail:  Harris Corporation
Fax  : (407)242-4262                               407 John Rodes Blvd.
                                                   Melbourne, FL 32905

The opinions expressed are my own and do not in any way represent Harris 
------------------------------------------------------------------------
Newsgroups: comp.unix.programmer
From: wey@convex.cl.msu.edu (Lih-Er Wey)
Subject: Mail expiration program needed
Organization: Michigan State University
Distribution: comp
Date: Thu, 23 Jul 92 20:50:55 GMT

 I am looking for a mail expiration program to scan each user's system mail box and delete the mail which is older than some certain length of time. Any input will be appreciated. 

					  Lih-Er Wey

					  Michigan State University
					  Computer Laboratory
From: nedele#s@cicb.fr ( Thierry Nedelec - stagiaire CICB (resp. R. Poezart))
Newsgroups: comp.unix.programmer
Subject: How to get GrpName by UserName ?
Date: 28 Jul 92 14:04:07 GMT
Organization: CICB - Universite' de Rennes I - FR

Can someone help me ?
I want to know the name of the group using a user name,
I'd like something like that (using C):

	grpname = get_grp_name(username);

Any help will be very usefull.

Thanks,

NED.
From: dan@cedb.dpcsys.org (Dan Busarow)
Newsgroups: comp.unix.programmer
Subject: Re: pipe cc to error and never again experience pain (was: Re: pipe CC to more)
Summary: how do i get error?
Date: 30 Jul 92 01:27:10 GMT
Organization: DPC Systems, Monrovia, CA

In article <1992Jul28.132537.21635@uwm.edu>, markh@csd4.csd.uwm.edu (Mark William Hopkins) writes:
> Pipe cc to error.
>                  cc FILE.c ... FILE.c |& error
> Most of the errors are put back in the source files as comments /*###...*/
> With error -v, vi is also started up on the files with pattern search on ###
> already enabled.

Sounds very interesting.  Where might the source for error be found?

TIA
Dan



-- 
+                                                                            -
   Dan Busarow             dan@cedb.dpcsys.org              uunet!cedb!dan
   DPC SYSTEMS                Monrovia, CA                  (818) 305-5733
-                                                                            +
From: irj@inf.rl.ac.uk (Ian R Jenkins)
Newsgroups: comp.unix.programmer
Subject: process poll
Date: 27 Jul 92 18:11:14 GMT
Organization: Rutherford Appleton Laboratory

Hello UNIX Gurus. 
I use a Sun Sparc2 (SunOS 4.1.1), which is one of about 50 Sun workstations
on a local area network. I am currently involved in a project which requires
that only one instance of a particular process is actually executing anywhere
on the lan at any given moment. Is there a function that I can use that
will search all of the machines on a lan, checking to see if process "xyz" is
running, and if so, return the hostname of the machine on which xyz is
executing ??? Any help would be most welcome.

Ian Jenkins


--

	"I'm not going to die, I've just bought a new pair of trousers"

				Havergal Brian, aged 92

Ian Jenkins				JANET:	irj@uk.ac.rl.inf
Rutherford Appleton Laboratory,		UUCP:	..!mcsun!ukc!rlinf!irj
Chilton, Didcot, Oxon. OX11 0QX.
Xref: sparky comp.unix.programmer:4037 comp.unix.sysv386:12693