english
version "1.0"
identify "@(#)variant.sts 1.13 94/10/02 Copyright (c) 1990, 1991 -- Wayne C. Gramlich"

#: This file will test the variant code.

module variant

import
    out_stream
    integer
    string
    system
    unsigned

define number
    variant kind number_kind
	integer integer
	unsigned unsigned
    generate erase, new, print

procedure main
    takes
	system system
    returns unsigned

    out_stream :@= system.standard_out_stream

    number :@= allocate@number()
    print@(number, out_stream)
    put@(" is the initial number\n\", out_stream)

    number.unsigned := 17
    print@(number, out_stream)
    put@(" is an unsigned number\n\", out_stream)

    return 0

procedure put@number
    takes
	number number
	out_stream out_stream
    returns_nothing

    extract number
	tag integer:: integer := integer
	    put@(integer, out_stream)
	tag unsigned:: unsigned := unsigned
	    put@(unsigned, out_stream)

