[net.micro.pc] I/O redirection in Turbo Pascal

cs457ab@unm-la.UUCP (David W. Barts) (10/21/86)

If you have tried it, you know that it doesn't work.  Coming
from a UNIX environment, where redirection works for programs
written in any language, I find this very disturbing.  My question
is, is there an easy way to write Turbo programs that send
output to standard output so that <, >, and | work?

I have tried using the intr($21, ) call for this.  It works,
but then there's the problem of echoing standard input.  You
can either ALWAYS echo stdin (AH = 01, not what I want if stdin is
a file), or NEVER do it (AH = 08, unacceptable if stdin is CON:)

What I am looking for is either

	a.  A way to tell if stdin is CON:, so I can then
	    echo or not echo as is appropriate, or

	b.  A way to do this WITHOUT having to resort to
	    issuing DOS interrupts in my Pascal code.

Please respond directly to me and not to the net as I am
years behind in reading net articles and probably won't get
caught up any time soon.  In a few weeks I will summarize to
the net.
-- 

		--David Barts  N5JRN
		... {cmcl2,ihnp4}!lanl!unm-la!cs457ab
		... {ucbvax,gatech}!unmvax!unm-la!cs457ab
		unm-la!cs457ab@lanl.arpa
		University of New Mexico - Los Alamos

marms@sandia.UUCP (10/22/86)

I ran into this "problem" myself some months ago. I wanted to pipe
the output of my Turbo Pascal program to a file (ie: "work.com > file"). 
After beating my head against a wall trying all kinds of things, I found
the simple answer in the book. There is a compiler directive to set the
I/O mode such that stdin and stdout can be redirected. I don't have the 
book with me but it is probably either {$I-} or {$I+}. It could be one of
the other compiler directives, though. Check that chapter to know for sure.
Hope this has been some help.

Mike Arms
uucp:  ...{ucbvax | ihnp4!lanl | gatech}!unmvax!sandia!marms

smvorkoetter@watmum.UUCP (Stefan M. Vorkoetter) (10/23/86)

Turbo Pascal does support I/O redirection.  Simply make the first line of
the main program source file read,
	{$G512,P512}
so that Turbo Pascal uses MS-DOS buffered output.  I/O redirection works
fine then (except in compile to memory mode).

klotz@ihuxy.UUCP (Dave Klotzbach) (10/23/86)

> If you have tried it, you know that it doesn't work.  Coming

Could you possibly tell us which version of TP you ar using? If you
are using a version less than 3. this is true, otherwise you simply 
have to set the buffers size for inp and out to greater than 1. See 
the common question section of your manual. This is covered in great
detail.

> Please respond directly to me and not to the net as I am
> years behind in reading 

Due to the negative press TP has been getting lately I felt that this 
it is important to negate these complaints as publicly as they are aired.

tla@kaiser.UUCP (T Anderson) (10/24/86)

Starting with Turbo 3.0 there is a compiler directive that makes Turbo
use MS DOS I/O and then redirection works fine.  I don't have my manual
with me so I do not remember the exact stuff, but its something like
(*$P512 $G256*) where the numbers are the sizes of the buffers you
want to use.  $P is for output (put or something) and $G for input
(get).  It does make all I/O somewhat slower as the overhead for an
MS DOS call is more than Turbo's direct I/O.

				-- Terry L Anderson
				   AT&T Bell Laboratories
				   Liberty Corner, NJ
				   {ihnp4}!daimler!kaiser!tla

dea@hpcesea.HP (Bob Dea) (10/24/86)

Turbo Pascal version 3.0 has support for I/O re-direction by way of
Compiler Directives {$Gxxx} for input and {$Pxxx} for output. I 
have used this only in redirecting output to a file. Hope this helps!

sbanner1@uvicctr.UUCP (S. John Banner) (10/30/86)

In article <197@sandia.UUCP> marms@sandia.UUCP (Mike Arms) writes:
>I ran into this "problem" myself some months ago. I wanted to pipe
>the output of my Turbo Pascal program to a file (ie: "work.com > file"). 
>After beating my head against a wall trying all kinds of things, I found
Same Here.
>the simple answer in the book. There is a compiler directive to set the
>I/O mode such that stdin and stdout can be redirected. I don't have the 
>book with me but it is probably either {$I-} or {$I+}.

Actually, you have to use the G, and P directives, to set file buffer
sizes, and if you want to send the output (or get the input), from a
device rather than a file  ("uudecode < com1:", or whatever), you 
also have to set another directive (B I think), otherwise it will reset
your buffers to 0 again.  The I directive is strictly used to determine
what to do on an input error.

                      S. John Banner

UUCP:     ...!uw-beaver!uvicctr!sbanner1
BITNET:   ccsjb@uvvm
EAN:      sbanner1@uvunix.uvic.cdn