english
version "1.0"
identify "%Z%%M% %I% %E%"

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

module address

#: This module implements the address base type for STIPPLE:

define address
    external

define address_data
    record
	buffer string
	initialized logical
	hyphen character
	lower_b character
	lower_c character
	lower_d character
	lower_digits string
	lower_h character
	lower_l character
	lower_o character
	lower_p character
	lower_s character
	lower_w character
	lower_x character
	percent character
	space character
	upper_digits string
	upper_h character
	upper_o character
	upper_x character
	zero_offset unsigned
    generate allocate, erase, print

object one@address

object zero@address


procedure add@address
    takes
	left address
	right address
    returns address
    external address__add


procedure and@address
    takes
	left address
	right address
    returns address
    external address__and


procedure character_convert@address
    takes
	address address
    returns character
    external address__character_convert


procedure copy@address
    takes
	arg address
    returns address
    external address__copy


procedure divide@address
    takes
	left address
	right address
    returns address
    external address__divide


procedure equal@address
    takes
	left address
	right address
    returns logical
    external address__equal


procedure format@address
    takes
	address address
	out_stream out_stream
	format string
	offset unsigned
    returns_nothing

    #: This routine will output {address} to {out_stream} using the formatting
    #, characters in {format} starting at {offset} until a terminating "%" is
    #, encountered.  See the {format} module find out more about formatted
    #, output.
    #,
    #, The accepted formats are:
    #,   b	Output a binary number.
    #,   c	Center the number.
    #,   d	Output a decimal number.
    #,   H	Output an upper-case hexadecimal number preceeded by "0X".
    #,   h	Output a lower-case hexadecimal number preceeded by "0x".
    #,   l	Left justify the number.
    #,   O	Output an octal number with a preceeding zero.
    #,   o	Output an octal number.
    #,   p<pad>	Set padding character to <pad>.
    #,   s<sep>	Separate every third digit with <sep>.
    #,   w<width> Output a minimim of <width> characters.
    #,   X	Output as an upper-case hexadecimal number.
    #,   x	Output as a lower-case hexadecimal number.


procedure greater_than@address
    takes
	left address
	right address
    returns logical
    external address__greater_than


procedure hash@address
    takes
	arg address
    returns address
    external address__hash


procedure input@address
    takes
	input in_stream
    returns address

procedure left_shift@address
    takes
	left address
	right address
    returns address
    external address__left_shift


procedure less_than@address
    takes
	left address
	right address
    returns logical
    external address__less_than


procedure minus@address
    takes
	arg address
    returns address
    external address__minus


procedure multiply@address
    takes
	left address
	right address
    returns address
    external address__multiply


procedure not@address
    takes
	arg address
    returns address
    external address__not	


procedure output@address
    takes
	arg address
	output out_stream
    returns_nothing

procedure or@address
    takes
	left address
	right address
    returns address
    external address__or


procedure parse@address
    takes
	input in_stream
    returns address

procedure print@address
    takes
	address address
	out_stream out_stream
    returns_nothing

    #: This procedure will print {address} as a decimal number to
    #, {out_stream}.


procedure put@address
    takes
	address address
	out_stream out_stream
    returns_nothing

procedure power@address
    takes
	left address
	right address
    returns address
    external address__power


procedure remainder@address
    takes
	left address
	right address
    returns address
    external address__remainder


procedure right_shift@address
    takes
	left address
	right address
    returns address
    external address__right_shift


procedure subtract@address
    takes
	left address
	right address
    returns address
    external address__subtract


procedure unsigned_convert@address
    takes
	arg address
    returns unsigned
    external unsigned__address_convert


procedure xor@address
    takes
	left address
	right address
    returns address
    external address__xor