function textex()
{
	if (dad("textex", "exists"))
		return;

	dad("textex", "new");
	dad("textex", "begin_vbox");
		dad("textex", "flags", "expfill");

# create a text widget that expands/fills but is scrollable if text is still
# larger
		wt = dad("textex", "text");
			dad("textex", "onchange", "textex_chg");
			dad("textex", "flags", "expfill");
			dad("textex", "flags", "scroll");

# a row of buttons for testing extra features
		dad("textex", "begin_hbox");
			dad("textex", "button", "insert", 0);
				dad("textex", "onchange", "textex_prep");
			dad("textex", "button", "append", 0);
				dad("textex", "onchange", "textex_app");
			dad("textex", "button", "set", 0);
				dad("textex", "onchange", "textex_set");
			dad("textex", "button", "getpos", 0);
				dad("textex", "onchange", "textex_getpos");
			dad("textex", "button", "setpos o", 0);
				dad("textex", "onchange", "textex_setposo");
			dad("textex", "button", "setpos xy", 0);
				dad("textex", "onchange", "textex_setposxy");
			dad("textex", "button", "ro", 0);
				dad("textex", "onchange", "textex_ro");
			dad("textex", "button", "rw", 0);
				dad("textex", "onchange", "textex_rw");
			dad("textex", "button", "bottom", 0);
				dad("textex", "onchange", "textex_bottom");
		dad("textex", "end");
		dad("textex", "button_closes", "close", 0);
	dad("textex", "end");

	dad("textex", "run", "Unit converter", "");
}

function textex_chg()
{
	message("Text changed!" @ dad("textex", "get", wt));
}

function textex_prep()
{
	dad("textex", "text", "insert", wt, "INSERT!");
}

function textex_app()
{
	dad("textex", "text", "append", wt, "APPEND!");
}

function textex_set()
{
	dad("textex", "set", wt, "woops");
}

function textex_getpos()
{
	message("Text cursor offs=" @ dad("textex", "text", "getoffs", wt));
	message("Text cursor x;y=" @ dad("textex", "text", "getx", wt) @ ";" @ dad("textex", "text", "gety", wt));
}

function textex_setposo()
{
	dad("textex", "text", "setoffs", wt, 4);
}

function textex_setposxy()
{
	dad("textex", "text", "setxy", wt, 5,3);
}

function textex_ro()
{
	dad("textex", "text", "readonly", wt, 1);
}

function textex_rw()
{
	dad("textex", "text", "readonly", wt, 0);
}

function textex_bottom()
{
	dad("textex", "text", "scroll_to_bottom", wt, 0);
}


function main(ARG) {
	fgw_func_reg(textex);
	fgw_func_reg(textex_chg);
	fgw_func_reg(textex_prep);
	fgw_func_reg(textex_app);
	fgw_func_reg(textex_set);
	fgw_func_reg(textex_getpos);
	fgw_func_reg(textex_setposo);
	fgw_func_reg(textex_setposxy);
	fgw_func_reg(textex_ro);
	fgw_func_reg(textex_rw);
	fgw_func_reg(textex_bottom);
}

