english
version "1.0"
identify "xyz"

#: Copyright (c) 1991-2005 by Wayne C. Gramlich.
#, All rights reserved.

module out_stream

#: The out_stream module implements output stream objects and their
#, associated operations.

import
    address
    float
    integer
    logical
    real
    string
    system
    unsigned

define out_stream
    external

procedure address_get@out_stream
    takes
	out_stream out_stream
    returns address
    external out_stream__address_get

    #: This procedure will return the address of {out_stream}.


procedure character_put@out_stream
    takes
	out_stream out_stream
	character character
    returns_nothing
    external out_stream__character_put

procedure close@out_stream
    takes
	out_stream out_stream
    returns_nothing
    external out_stream__close


procedure xdescriptor_open@out_stream
    takes
	descriptor unsigned
    returns out_stream

    #: This procedure will return an {out_stream} object that is
    #, connect to {descriptor}.  If an error occures, ??@{out_stream}
    #, is returned.

    return descriptor_open@out_stream(descriptor)


procedure descriptor_open@out_stream
    takes
	descriptor unsigned
    returns out_stream
    external out_stream__descriptor_open

    #: This procedure will return an {out_stream} object that is
    #, connect to {descriptor}.  If an error occures, ??@{out_stream}
    #, is returned.


procedure float_write@out_stream
    takes
	out_stream out_stream
	float float
    returns_nothing
    external out_stream__float_write
 
    #: This procedure will write {float} to {out_stream}.


procedure file_name_get@out_stream
    takes
	out_stream out_stream
    returns string
    external out_stream__file_name_get


procedure file_number_get@out_stream
    takes
	out_stream out_stream
    returns unsigned
    external out_stream__file_number_get

    #: This procedure will return the underlying file number for
    #, {out_stream}.  This is really a utility routine for the
    #, {printer} module.


procedure flush@out_stream
    takes
	out_stream out_stream
    returns_nothing
    external out_stream__flush

    #: This procedure will flush any data that is in {out_stream} out.


procedure identical@out_stream
    takes
	out_stream1 out_stream
	out_stream2 out_stream
    returns logical

    #: This procedure will return {true}@{logical} if {out_stream1} is
    #, identical to {out_stream2} and {false} otherwise.

    return out_stream1.address = out_stream2.address


procedure is_open_get@out_stream
    takes
	out_stream out_stream
    returns logical
    external out_stream__is_open_get

procedure open@out_stream
    takes
	file_name string
    returns out_stream

    return open_create@out_stream(file_name)


procedure xopen_append@out_stream
    takes
	file_name string
    returns out_stream

    return open_append@out_stream(file_name)


procedure open_append@out_stream
    takes
	file_name string
    returns out_stream
    external out_stream__open_append

procedure open_create@out_stream
    takes
	file_name string
    returns out_stream
    external out_stream__open_create

procedure pad@out_stream
    takes
	out_stream out_stream
	pad_amount unsigned
    returns_nothing

    #: This procedure will output {pad_amount} spaces to {out_stream}.

    if pad_amount > 1000
	pad_amount := 1000
    loop
	while pad_amount != 0
	put@(" ", out_stream)
	pad_amount :-= 1


procedure pipe_close@out_stream
    takes
	out_stream out_stream
    returns_nothing
    external out_stream__pipe_close


procedure pipe_open@out_stream
    takes
	command string
    returns_nothing
    external out_stream__pipe_open


procedure print@out_stream
    takes
	out_stream out_stream
	print_stream out_stream
    returns_nothing
    external out_stream__print

procedure float_print@out_stream
    takes
	out_stream out_stream
	float float
    returns_nothing
    external out_stream__float_print

procedure real_print@out_stream
    takes
	out_stream out_stream
	real real
    returns_nothing
    external out_stream__real_print

procedure integer_print@out_stream
    takes
	out_stream out_stream
	integer integer
    returns_nothing
    external out_stream__integer_print

procedure unsigned_print@out_stream
    takes
	out_stream out_stream
	unsigned unsigned
	radix unsigned
    returns_nothing
    external out_stream__unsigned_print

