function x1shapeSET(action, field, value)

    if (field == "transfmode")
	int value

	if (value)
	    setfield pixflags pc
	else
	    setfield pixflags ~pc
	end
	return 0
    else
	if (field == "iconname")
	    str iconname = {getpath {el .} -head} @ {value}
	    if ({isa xshape {iconname}})
		setfield &&xpts &{iconname}/xpts \
		         &&ypts &{iconname}/ypts \
		         &&zpts &{iconname}/zpts \
		         npts {getfield {iconname} npts}
	    else
		echo Bad iconname {value}
	    end
	    return 0
	end
    end

    return {x1highlightSET {action} {field} {value}}
end


//
// this is a version of x1pixCREATE which avoids handling -coords
// options to x1shapes.  The -coords option should be handled by
// the xshape CREATE action anyways.
//

function x1shapeCREATE(action, createargs)

    int	arg

    for (arg = 5; arg < {argc}; arg = arg+1)
	str argname = {argv {arg}}

	if ({substring x{argname} 0 1} == "x-" && ("x"@{argname}) != "x-coords")
	    str argval = {argv {arg+1}}

	    argname = {strsub x{argname} x- ""}
	    setfield {argname} {argval}
	    arg = arg + 1
	end

    end

    return 1
end


function printcareful(args)

    str arg

    foreach arg ({argv})
	echo " "{arg} -nonewline
    end
    echo ""

end


create xshape shape

    addfield shape iconname -description "Name of icon to display"
    addfield shape transfmode -description "non-zero means use pixel coords"

    setfield shape transfmode 0
    setfield shape script \
	"X1click.d1 B1DOWN <w> ; X1click.d2 B2DOWN <w>; X1click.d3 B3DOWN <w>"

    x1setuphighlight shape 0
    addaction shape SET x1shapeSET
    addaction shape CREATE x1shapeCREATE
    addclass shape output

addobject x1shape shape