eof strangeness

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

eof strangeness

John Coppens
Hi all.

While modifying some older programs, I found a strange effect with eof
(input). When calling eof(input), the program needs an <enter> key to
continue.

The definition of eof (according to the FPC docs) is that it immediately
returns... which is what I need. Can anyone suggest a solution for this?

program testeof;

begin
  if eof then
    writeln('EOF found')
  else
    writeln('No EOF found');
end.

This sample program doesn't return till <enter> is pressed.

TIA,
John
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: eof strangeness

Bob Richards-2
John Coppens wrote:

> program testeof;
>
> begin
>   if eof then
>     writeln('EOF found')
>   else
>     writeln('No EOF found');
> end.
>
> This sample program doesn't return till <enter> is pressed.

That's correct and reasonable. You are terminating your program after an EOL (ENTER), If
you send it an EOF ^d it also responds reasonably.

$ ./testeof
       ^d entered at kybd
EOF found

Bob

--
PGP Encrypted E-Mail Prefered
Public Key at: http://www.tamara-b.org/~bob/pubkey.asc
.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: eof strangeness

John Coppens
On Tue, 02 May 2006 14:42:00 -0400
Bob Richards <[hidden email]> wrote:

> John Coppens wrote:
>
> > program testeof;
> >
> > begin
> >   if eof then
> >     writeln('EOF found')
> >   else
> >     writeln('No EOF found');
> > end.
> >
> > This sample program doesn't return till <enter> is pressed.
>
> That's correct and reasonable. You are terminating your program after
> an EOL (ENTER), If you send it an EOF ^d it also responds reasonably.
>
> $ ./testeof
>        ^d entered at kybd
> EOF found

Hi Bob...

I see your reasoning, but I do not understand why eof doesn't return
always. The eof is not a 'wait for eof', but a test. If we're _not_ at
the end of the file, the program should return with false, at least how I
understand it.

program test1;
var
  v: integer;
begin
  if not eof then begin
    write('Wait for input ');
    readln(v);              
  end;
end.

the eof call here, makes the program invert it's output, as the eof waits
for the buffer to be filled (so the number is already on the screen) then
outputs the 'Wait for input' text. It doesn't feel right...

I guess the eof call is superfluous here, but it wouldn't be so illogical
if the input channel is redirected (eg. from a file).

Thanks for your input (pun intended ;-)

John
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: eof strangeness

Jonas Maebe-2

On 3 mei 2006, at 06:37, John Coppens wrote:

> I see your reasoning, but I do not understand why eof doesn't return
> always. The eof is not a 'wait for eof', but a test. If we're _not_ at
> the end of the file, the program should return with false, at least  
> how I
> understand it.

It is not possible to know whether you are at the end of a file or  
device without (attempting to) read from it (unless you previously  
hit the eof marker).


Jonas
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal