Path: utzoo!attcan!uunet!portal!atari!kbad
From: kbad@atari.UUCP (Ken Badertscher)
Newsgroups: comp.sys.atari.st
Subject: Re: File handle info
Message-ID: <1066@atari.UUCP>
Date: 31 May 88 22:59:37 GMT
References: <465@ruuinf.UUCP>
Organization: Atari Corp., Sunnyvale, CA
Lines: 29

in article <465@ruuinf.UUCP>, piet@ruuinf.UUCP (Piet van Oostrum) says:
> what I think is the easiest way to do it: if you seek to an illegal
> position (like -1), you get an error (-64) if the file is on disk,
> otherwise you get 0. If the file is on disk, its position is not changed,
> so the operation is effectively always a no-op.

  That may be an easy way to do it, but I wouldn't recommend relying on
an undocumented feature of what Fseek returns.  Hardly safe.

  The approved method of determining isatty is to save your current
position in the file, seek to 1 byte from the beginning, then restore
your current position.  If the seek to 1 byte from the beginning
returns 1, you're not a tty.  It involves a couple more seeks, but
it's safer:

int isatty(fd)
int fd;
{
  long savepos;
  long seekret;
 
  savepos = Fseek(0L,fd,1); /* save where we are */
  seekret = Fseek(1L,fd,0); /* seek to 1 byte from beginning */
  Fseek(savepos,fd,0);      /* then back to where we were */
  return (seekret != 1L);   /* if the seek didn't work, it's a tty */
}

  Ken Badertscher
  Atari Software Test/Support