[net.micro.cpm] Turbo Pascal output

mdf@trwrba.UUCP (Mark D. Falleroni) (01/16/85)

Is there a method that enables program output to be sent
to the screen and printer??? Cntrl-P works when running
CPM, but from Turbo Pascal, it doesn't. (at least not on
my machine.)  Do I make the program a .COM file and use Cntrl-P??
Thanks in advance for any help given.
           Mark Falleroni
           TRW
           Ogden,Ut.
           (mdf)

db21@ihuxk.UUCP (Dave Beyerl) (01/23/85)

> Subject: Turbo Pascal output
>
> Is there a method that enables program output to be sent
> to the screen and printer??? Cntrl-P works when running
> CPM, but from Turbo Pascal, it doesn't. (at least not on
> my machine.)  Do I make the program a .COM file and use Cntrl-P??
> Thanks in advance for any help given.
>          Mark Falleroni
>          TRW
>          Ogden,Ut.
>          (mdf)
>
	In order to print output to both the screen and the line
printer in Turbo Pascal under CP/M you must include a second
writeln statement which directs its output to the Lst device.
For example, to print the string 'Hello There!' on both the
screen and printer, you would include the following lines in
your program:

	writeln ('Hello There!'); { print on screen }
	writeln (Lst,'Hello There!'); { print on printer }

	This is discussed beginning in section 14.5, Text Files,
of my Turbo manual.  There is a program with examples in 
section 14.5.1, and a description of the logical devices given
in section 14.5.2.

					Dave Beyerl
					ihuxk!db21
					AT&T Bell Labs, Naperville, IL

hunterj@utai.UUCP (James Hunter) (01/25/85)

In article <864@ihuxk.UUCP> db21@ihuxk.UUCP (Dave Beyerl) writes:
>
>> Subject: Turbo Pascal output
>>
>> Is there a method that enables program output to be sent
>> to the screen and printer??? Cntrl-P works when running
>> CPM, but from Turbo Pascal, it doesn't. (at least not on
>> my machine.)  Do I make the program a .COM file and use Cntrl-P??
>> Thanks in advance for any help given.
>>
>	In order to print output to both the screen and the line
>printer in Turbo Pascal under CP/M you must include a second
>writeln statement which directs its output to the Lst device.
>For example, to print the string 'Hello There!' on both the
>screen and printer, you would include the following lines in
>your program:
>
>	writeln ('Hello There!'); { print on screen }
>	writeln (Lst,'Hello There!'); { print on printer }
>

  Or, you could write a procedure to print to both the console and the printer:

  type
    workstring = string[255];


   procedure both(stuff: workstring);
   begin
	writeln(stuff);
	writeln(LST,stuff);
   end;

  You may want to use the compiler directive {$V-} with this which relaxes
parameter checking and allows parameters of any string length to be passed.
{See section 16.1.1 of manual about this}.
The problem with this approach is that you may want to print both strings
and numbers, which won't be automatically formatted as with the writeln
command.

---------------------
  Gumby lives!!

SMERESKI.WBST@XEROX.ARPA (01/26/85)

Re:
----------------------------------------------------------
>> Subject: Turbo Pascal output
>>
>> Is there a method that enables program output to be sent
>> to the screen and printer??? Cntrl-P works when running
>> CPM, but from Turbo Pascal, it doesn't. (at least not on
>> my machine.)  Do I make the pr^ram a .COM file and use Cntrl-P??
>> Thanks in advance for any help Oiven.
>>          Mark Faleroni
>>          TRW
>>          Ogden,Ut.
>>          (mdf)
>>
>        In order to print output to both the screen and the line
>printer in Turbo Pascal under CP/M you must include a second
>writeln statement which directs its output to the Lst device.
>For example, to print the string 'Hello There!' on both the
>screen and printer, you would include the following lines in
>your program:
>
>        writeln ('Hello There!'); { print on screen }
>        writeln (Lst,'Hello There!'); { print on printer }
>
>        This is discussed beginning in section 14.5, Text Files,
>of my Turbo manual.  There is a program with examples in 
>section 14.5.1, and a description of the logical devices given
>in section 14.5.2.
>
>                                        Dave Beyerl
>                                        ihuxk!db21
>                                        AT&T Bell Labs, Naperville, IL
>
----------------------------------------------------------------


Because of the good documentation and careful construction of Turbo-Pascal
it is possible to make it do almost anything you wish.  For instance if
you really want to echo all console output to the printer the following
program will do it.  The information needed to set it up can be found in 
the Turbo Pascal manual in section A.12 for CPM systems and B2.3 for 8086
based systems.

         Program ControlpTest;
         
         Var
            Ch : Char;
            SaveAddress : Integer;

         Procedure PWrite (Ch : Char);
         Var
            CB : Byte Absolute Ch;
         
         Begin {PWrite}
         Bios (4, CB);
         Bios (3, CB);
         End; {PWrite}
         
         
         Begin {ControlpTest}
         SaveAddress := ConOutPtr;      {Save address of default routine}
         ConOutPtr := Addr (PWrite);    {turn on printer echo}   
         Read (Kbd, Ch);
         While Ch <> ^Z Do              {test the echo until control-Z}
            Begin
            Write (Ch);
            Read (Kbd, Ch);
            End;
         ConOutPtr := SaveAddress;      {turn off printer echo}
         End.

If you really want to simulate control-P in all its glory then simply patch
into the console input routine in a similar fashion (ConInPtr := address of
your own Procedure).  Your procedure can then scan all console input for a 
control-P and turn the echo on or off as shown above.

I hope this technique is useful to some of you.


/Dave