//genesis

int X1COMPAT

if (X1COMPAT)
    return // compatibility already loaded
end

X1COMPAT = 1

xcolorscale hot //rainbow

// this is a small set of functions to provide backward compatability
// with some Xodus 1 commands not easily mapped to Xodus 2 commands.
// The XADDPTS variable can be set to zero to disable inclusion of
// xaddpts in the compatibility library.  Eventually xaddpts is to
// be included in Xodus 2.

// Mon Aug 15 17:33:49 PDT 1994
// Added a number of exended object to provide BC functionality for pix/draw
// selections.

int XADDPTS = 1

//
// "when" commands
//

function when(widg, action, do, script)

	if ({argc} != 4)
	    echo "usage: when <widget> <action> do <script>"
	    return
	end

	str command = {getarg {arglist {script}} -arg 1}

	if (action == "click1")
	    script = {strsub {script} {command} {command}.d1}
	else if (action == "click2")
	    script = {strsub {script} {command} {command}.d2}
	else if (action == "click3")
	    script = {strsub {script} {command} {command}.d3}
	else if ({strncmp {action} drag 4} == 0)
	    script = {strsub {script} {command} {command}.y}
	end // drag
	end // click3
	end // click2
	end // click1

	str old = {getfield {widg} script}

	if (old == "nil" || old == "")
	    setfield {widg} script {script}
	else
	    setfield {widg} script {old}";"{script}
	end
end

function dropwhen(widg, script)

	if (script == "all")
	    setfield {widg} script ""
	else
	    str scrstr = {getfield {widg} script}

	    scrstr = {strsub {scrstr} {script} ""}
	    scrstr = {strsub {scrstr} ";;" ";"}
	    setfield {widg} script {scrstr}
	end
end

function listwhen(widg)

	showfield {widg} script

end



//
// xshowall
//

function xshowall

	str elm

	foreach elm ({el /##[CLASS=widget]})
	    xshow {elm}
	end

end


//
// Create Xodus 1 compatability objects
//

create xform /x1compat
pushe /x1compat > /dev/null

    include X1widget label
    include X1widget button
    include X1widget toggle
    include X1widget dialog
    include X1text
    include X1widget image

    include X1graph
    include X1draw  // makes all the pixes too

pope > /dev/null

    // these are field name aliases for widget width and height.  This
    // isn't a complete solution since the old width and height do not
    // include widget and edge references while wgeom and hgeom do.  What
    // we do here will work so long as the caller doesn't need to preserve
    // widget and edge refs.

    addfield /x1compat width -indirect . wgeom
    addfield /x1compat height -indirect . hgeom

	// scheduler complains if the widgets aren't schedulable
	addclass /x1compat output

addobject x1form /x1compat


//
// xaddpts
//
//	This command will eventually be added to Xodus 2.  The XADDPTS
//	script variable will control its inclusion here.

if (!XADDPTS)
    return
end

function xaddpts(plotpath)

	float	x, y
	int	npts
	int	nargs = {argc}
	int	arg
	int	i

	if (nargs < 3 || nargs%2 != 1)
	    echo usage: $0 plotpath x y [additional-x-y-pairs]
	    return
	end

	if (!{isa xplot {plotpath}})
	    echo $0: element {plotpath} is not an xplot or does not exist
	    return
	end

	npts = {getfield {plotpath} npts}
	for (arg = 2; arg < nargs; arg = arg + 2)
	    if ({argv {arg}} == "-color")
		setfield {plotpath} fg {argv {arg+1}}
	    else
		x = {argv {arg}}
		y = {argv {arg+1}}
		setfield {plotpath} xpts->table[{npts}] {x} \
				    ypts->table[{npts}] {y}
		npts = npts + 1
	    end
	end
	setfield {plotpath} npts {npts}
end

// add some aliases for old Xodus commands which are used in callbacks

addalias xshow_on_top xshowontop