[comp.sources.sun] v01i070: hype - a SunView object-oriented window builder, Part10/11

mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (09/15/89)

Submitted-by: apctrc!zmls04@uunet.uu.net (Martin L. Smith)
Posting-number: Volume 1, Issue 70
Archive-name: hype/part10

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	src
# This archive created: Thu Sep 14 21:00:08 1989
export PATH; PATH=/bin:$PATH
if test ! -d 'src'
then
	echo shar: creating directory "'src'"
	mkdir 'src'
fi
echo shar: entering directory "'src'"
cd 'src'
echo shar: extracting "'interface.c'" '(62000 characters)'
if test -f 'interface.c'
then
	echo shar: will not over-write existing file "'interface.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'interface.c'
	X#include <suntool/sunview.h>
	X#include <suntool/panel.h>
	X#include "util.h"
	X#include "tlmod.h"
	X#include "objmod.h"
	X#include "itemmod.h"
	X#include "../archives/hash/hash.h"
	X#include "visual.h"
	X#include "../archives/container/container.h"
	X#include "amcomp.h"
	X#include "fileio.h"
	X#include "pathname.h"
	X#include "info.h"
	X#include "clipboard.h"
	X#include <suntool/walkmenu.h>
	X
	Xextern Notify_error notify_errno;
	X
	X#define	    TABLE_SIZE		(100)
	X#define	    CMS_SIZE		(4)
	X#define	    MAX_NUM_WINDOWS	(20)
	X#define	    OBJECT		(1)
	X#define	    BACKGROUND		(0)
	X
	X#define CHECKPRIV(x) ((object_get_level(x) != WRITABLE) && (superuser != 1))
	X
	X
	Xstatic short cursor_pixrect_data[] = {
	X#include "cicon"
	X};
	X
	Xmpr_static(c_pixrect,16,16,1,cursor_pixrect_data);
	X
	Xextern int sigq_non_empty;
	X
	Xstatic Menu	    default_menu;
	X
	Xstatic OBPtr	    master;
	Xstatic OBPtr	    treeroot;
	X
	Xstatic Rect	    default_rect[1];
	X
	Xstatic Window	    cur_window;
	Xstatic Panel	    cur_panel;
	XHashTPtr    sv_to_hype;
	X
	Xstatic Container   default_cont;
	Xstatic Frame base_frame = NULL;
	X
	X
	Xstatic int	    movingflag = 0;
	Xstatic int	    grid_size = 10;
	Xstatic ITPtr	    moving_item;
	Xstatic Panel_item  moving_item_image;
	X
	X
	Xint superuser;
	Xint tab_length = 8;
	X
	X
	X/* MARTIN MARTIN MARTIN keep this variable as a tracelevel. */
	X/* Write iam library routines to inc, dec, and set it to zero. */
	X/* this is not part of the state.  Write a menu notify proc    */
	X/* in here to set it to 1 or 0, use of these as an example.    */
	Xint trace_level = 0;
	X
	Xchar *glob_recognizer = "*&^%hypeglob";
	X
	Xstatic char *init_obj_name = NULL;
	Xstatic char *public	 = NULL;
	Xstatic char *state	 = NULL;
	Xstatic char *user	 = NULL;
	Xstatic char *dpath	 = NULL;
	Xstatic char *init_script = NULL;
	Xstatic char *init_arg    = NULL;
	Xstatic char *editor	 = NULL;
	X
	XOBPtr distinguished;
	X
	X
	X#define OBJECT_OF_MENU4(m) \
	X	((OBPtr) menu_get(\
	X	menu_get(menu_get(\
	X	    menu_get(menu_get(m,\
	X	    MENU_PARENT),MENU_PARENT),MENU_PARENT),MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define OBJECT_OF_MENU3(m) \
	X	((OBPtr) menu_get(\
	X	menu_get(menu_get(menu_get(m,MENU_PARENT),MENU_PARENT),MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define OBJECT_OF_MENU2(m) \
	X	((OBPtr) menu_get(\
	X	menu_get(menu_get(m,MENU_PARENT),MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define OBJECT_OF_MENU0(m) \
	X	((OBPtr) menu_get(m,MENU_CLIENT_DATA))
	X#define TL_OF_MENU4(m) \
	X	((TLPtr) menu_get(\
	X	menu_get(menu_get(\
	X	    menu_get(menu_get(m,\
	X	    MENU_PARENT),MENU_PARENT),MENU_PARENT),MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define TL_OF_MENU2(m)\
	X	((TLPtr) menu_get(\
	X	menu_get(menu_get(m,MENU_PARENT),MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define TL_OF_MENU1(m)\
	X	((TLPtr) menu_get(\
	X	menu_get(m,MENU_PARENT)\
	X	,MENU_CLIENT_DATA))
	X#define TL_OF_MENU0(m)\
	X	((TLPtr) menu_get(m,MENU_CLIENT_DATA))
	X
	XOBPtr get_treeroot()
	X{
	X    return treeroot;
	X}
	XOBPtr get_master()
	X{
	X    return master;
	X}
	X
	Xvoid fmenu_quit(m, mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    if (superuser) {
	X	save_public(master,public);
	X    }
	X    obj = distinguished;
	X    if (obj != NULL)
	X	save_obj(obj,state);
	X    exit(0);
	X}
	Xvoid fmenu_quit_nosave(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    if (confirm_yes("Exit WITHOUT saving changes\n"))
	X	exit(0);
	X    else {
	X	return;
	X    }
	X}
	X 
	Xvoid fmenu_savecurrent(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    if (superuser) {
	X	save_public(master,public);
	X    }
	X    obj = distinguished;
	X    if (obj != NULL)
	X	save_obj(obj,state);
	X}
	Xvoid fmenu_savecurrentas(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char *fname;
	X    if (superuser) {
	X	save_public(master,public);
	X    }
	X    fname = vis_dialogue("Save Current State to what file?");
	X    obj = distinguished;
	X    if (obj != NULL)
	X	save_obj(obj,fname);
	X}
	X
	Xvoid fmenu_save(m, mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char *fname;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (fname = vis_dialogue("Save Subtree to what file?"))
	X	save_obj(obj,mystrcpy(fname));
	X}
	Xvoid fmenu_pretty(m, mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char *fname;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (fname = vis_dialogue("Pretty Print Subtree to what file?"))
	X	pretty_print(obj,fname);
	X}
	Xvoid fmenu_load(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    OBPtr lobj;
	X    char *fname;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    if (fname = vis_dialogue("Load Subtree from what file?"))
	X	load_below(fname, obj, 0, WRITABLE);
	X	/*load_over(fname,obj,WRITABLE);*/
	X}
	Xvoid fmenu_openall(m, mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    int n,i;
	X    OBPtr cur;
	X    OBPtr obj;
	X    cur = OBJECT_OF_MENU2(m);
	X    n = object_get_numchild(cur);
	X    for (i = 0; i < n; i++) {
	X	obj = object_get_nthobj(i,cur);
	X	show_obj(obj);
	X    }
	X}
	Xvoid objmenu_report(m, mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr cur;
	X
	X
	X    cur = (OBPtr) OBJECT_OF_MENU2(m);
	X    vis_info_box(cur);
	X
	X}
	Xvoid objmenu_new_object(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    OBPtr father,cur;
	X    int n;
	X
	X    cur = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    father = object_get_owner(cur);
	X
	X    obj = copy_object(cur);
	X    show_obj(obj);
	X}
	Xvoid objmenu_ex_microscript(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    ObjectCode oc;
	X    Container cont;
	X    Container self;
	X    char *x;
	X
	X    obj = (OBPtr) menu_get(m,MENU_CLIENT_DATA);
	X    if (x = vis_dialogue("Enter one line of script to test."))
	X	cont = cnew_constring(x);
	X    else {
	X	return;
	X    }
	X    oc = compile(cont,REPORT,0);
	X    if (oc != NULL) {
	X	x = gen_absolute_pname(obj);
	X	self = cnew_constring(gen_absolute_pname(obj));
	X	execute_script(oc,obj,cnew_con(),x,self);
	X	free(x);
	X	cdestroy(self);
	X    }
	X    free_oc(oc);
	X    cdestroy(cont);
	X}
	Xvoid mainmenu_show_clip(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char x[128];
	X    obj = OBJECT_OF_MENU0(m);
	X    switch (get_clipboard_type()) {
	X	case NULL_TYPE:
	X	    sprintf(x,"Clipboard Is Empty.");
	X	break;
	X	case OBJECT_TYPE:
	X	    sprintf(x,"Object: %s\n",get_clipboard_name());
	X	break;
	X	case TL_TYPE:
	X	    sprintf(x,"Template: %s\n",get_clipboard_name());
	X	break;
	X	case ITEM_TYPE:
	X	    sprintf(x,"Item: %s\n",get_clipboard_name());
	X	break;
	X    }
	X    confirm_ok(x);
	X}
	Xvoid objmenu_show_clip(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char x[128];
	X    obj = OBJECT_OF_MENU4(m);
	X    switch (get_clipboard_type()) {
	X	case NULL_TYPE:
	X	    sprintf(x,"Clipboard Is Empty.");
	X	break;
	X	case OBJECT_TYPE:
	X	    sprintf(x,"Object: %s\n",get_clipboard_name());
	X	break;
	X	case TL_TYPE:
	X	    sprintf(x,"Template: %s\n",get_clipboard_name());
	X	break;
	X	case ITEM_TYPE:
	X	    sprintf(x,"Item: %s\n",get_clipboard_name());
	X	break;
	X    }
	X    confirm_ok(x);
	X}
	X
	Xvoid mainmenu_windowfit(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU2(m);
	X    screen_fit(obj);
	X}
	Xvoid objmenu_edittextboard(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU4(m);
	X    edit_textboard();
	X}
	Xvoid objmenu_wintogv(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    int scr;
	X    obj = OBJECT_OF_MENU2(m);
	X    scr = attr_get_scr(object_get_attr(obj));
	X    scr = (scr & ~HYPE_SCROLL_V) | (HYPE_SCROLL_V & (~scr));
	X    attr_set_scr(object_get_attr(obj),scr);
	X}
	Xvoid objmenu_wintogh(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    int scr;
	X    obj = OBJECT_OF_MENU2(m);
	X    scr = attr_get_scr(object_get_attr(obj));
	X    scr = (scr & ~HYPE_SCROLL_H) | (HYPE_SCROLL_H & (~scr));
	X    attr_set_scr(object_get_attr(obj),scr);
	X}
	Xvoid tlmenu2_show_clip(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    char x[128];
	X    tl = TL_OF_MENU2(m);
	X    switch (get_clipboard_type()) {
	X	case NULL_TYPE:
	X	    sprintf(x,"Clipboard Is Empty.");
	X	break;
	X	case OBJECT_TYPE:
	X	    sprintf(x,"Object: %s\n",get_clipboard_name());
	X	break;
	X	case TL_TYPE:
	X	    sprintf(x,"Template: %s\n",get_clipboard_name());
	X	break;
	X	case ITEM_TYPE:
	X	    sprintf(x,"Item: %s\n",get_clipboard_name());
	X	break;
	X    }
	X    confirm_ok(x);
	X}
	Xvoid tlmenu4_show_clip(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    char x[128];
	X    tl = TL_OF_MENU4(m);
	X    switch (get_clipboard_type()) {
	X	case NULL_TYPE:
	X	    sprintf(x,"Clipboard Is Empty.");
	X	break;
	X	case OBJECT_TYPE:
	X	    sprintf(x,"Object: %s\n",get_clipboard_name());
	X	break;
	X	case TL_TYPE:
	X	    sprintf(x,"Template: %s\n",get_clipboard_name());
	X	break;
	X	case ITEM_TYPE:
	X	    sprintf(x,"Item: %s\n",get_clipboard_name());
	X	break;
	X    }
	X    confirm_ok(x);
	X}
	X
	Xvoid tlmenu_refresh(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    tl = TL_OF_MENU2(m);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	X
	Xvoid layer_show_clip(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    char x[128];
	X    tl = TL_OF_MENU2(m);
	X    switch (get_clipboard_type()) {
	X	case NULL_TYPE:
	X	    sprintf(x,"Clipboard Is Empty.");
	X	break;
	X	case OBJECT_TYPE:
	X	    sprintf(x,"Object: %s\n",get_clipboard_name());
	X	break;
	X	case TL_TYPE:
	X	    sprintf(x,"Template: %s\n",get_clipboard_name());
	X	break;
	X	case ITEM_TYPE:
	X	    sprintf(x,"Item: %s\n",get_clipboard_name());
	X	break;
	X    }
	X    confirm_ok(x);
	X}
	X
	Xvoid tlmenu_edittextboard(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    tl = TL_OF_MENU2(m);
	X    edit_textboard();
	X}
	X
	Xvoid TLmenu_windowfit_tl(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    tl = TL_OF_MENU2(m);
	X    screen_fit_tl(tl);
	X}
	Xvoid TLmenu_wintogh(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    int scr;
	X    tl = TL_OF_MENU2(m);
	X    scr = attr_get_scr(tl_get_attr(tl));
	X    scr = (scr & ~HYPE_SCROLL_H) | (HYPE_SCROLL_H & (~scr));
	X    attr_set_scr(tl_get_attr(tl),scr);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid TLmenu_wintogv(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    int scr;
	X    tl = TL_OF_MENU2(m);
	X    scr = attr_get_scr(tl_get_attr(tl));
	X    scr = (scr & ~HYPE_SCROLL_V) | (HYPE_SCROLL_V & (~scr));
	X    attr_set_scr(tl_get_attr(tl),scr);
	X    close_tl(tl);
	X    open_tl(tl);    
	X}
	X
	Xvoid script_menupre(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    prepend_textboard_to_cont(object_get_script(obj));
	X    compile_object_script(obj,REPORT);
	X}
	Xvoid script_menuapp(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    append_textboard_to_cont(object_get_script(obj));
	X    compile_object_script(obj,REPORT);
	X}
	Xvoid script_menucpy(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    load_textboard(object_get_script(obj));
	X}
	X
	Xvoid script_menuedit(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    char *lab,*abs;
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    abs = gen_absolute_pname(obj);
	X    lab = mystrcat(abs," - script");
	X    edit_cont(object_get_script(obj),lab);
	X    free(lab);
	X    free(abs);
	X    compile_object_script(obj,REPORT);
	X}
	Xvoid tlscript_menupre(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    prepend_textboard_to_cont(tl_get_script(tl));
	X    compile_tl_script(tl,REPORT);
	X}
	Xvoid tlscript_menuapp(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    append_textboard_to_cont(tl_get_script(tl));
	X    compile_tl_script(tl,REPORT);
	X}
	Xvoid tlscript_menucpy(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    load_textboard(tl_get_script(tl));
	X}
	X
	Xvoid tlscript_menuedit(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    char *lab,*abs;
	X
	X    tl = TL_OF_MENU2(m);
	X    abs = gen_absolute_tlpname(tl);
	X    lab = mystrcat(abs," - script");
	X    edit_cont(tl_get_script(tl),lab);
	X    free(lab);
	X    free(abs);
	X    compile_tl_script(tl,REPORT);
	X}
	Xvoid tlbgtext_menupre(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    prepend_textboard_to_cont(tl_get_bgtext(tl));
	X}
	Xvoid tlbgtext_menuapp(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    append_textboard_to_cont(tl_get_bgtext(tl));
	X}
	Xvoid tlbgtext_menucpy(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X    load_textboard(tl_get_bgtext(tl));
	X}
	X
	Xvoid tlbgtext_menuedit(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    char *lab,*abs;
	X    TLPtr tl;
	X
	X    tl = TL_OF_MENU2(m);
	X
	X    abs = gen_absolute_tlpname(tl);
	X    lab = mystrcat(abs," - bgtext");
	X    edit_cont(tl_get_bgtext(tl),lab);
	X    free(abs);
	X    free(lab);
	X}
	X
	Xvoid objmenu_add_temp(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    TLPtr tl;
	X    char *x;
	X    Rect *r;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X	tl = (get_tl_clipboard());
	X	if (tl == NULL) {
	X	    return;
	X	}
	X	tl = (tl);
	X	object_add_temp(obj,tl,object_get_numtemps(obj));
	X	r = (Rect *) attr_get_rect(tl_get_attr(tl));
	X	r->r_left = 0;
	X	r->r_top = 0;
	X	object_set_tempcoords(obj,tl,r);
	X	close_obj(obj);
	X	show_obj(obj);
	X}
	X
	Xvoid objmenu_refresh(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU2(m);
	X    close_then_open(obj);
	X}
	Xvoid objmenu_open_parent(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU2(m);
	X    if (obj == get_master()) {
	X	return;
	X    }
	X    obj = object_get_owner(obj);
	X    show_obj(obj);
	X}
	Xvoid objmenu_new_child(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    OBPtr father;
	X    int n;
	X
	X    father = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(father)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    obj = new_object(mystrcat("newobj",obj_number()),father);
	X    n = object_get_numchild(obj);
	X    object_add(obj,father,n);
	X    show_obj(obj);
	X}
	Xvoid objmenu_copyCB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    OBPtr father;
	X    int n;
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    put_object_clipboard(obj,NOT_ONLY_REF);
	X}
	Xvoid objmenu_CBtreeaschild(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    OBPtr father;
	X    int n;
	X
	X    father = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(father)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    obj = (get_object_clipboard());
	X    if (obj == NULL) {
	X	return;
	X    }
	X    obj = copy_tree(obj);
	X    n = object_get_numchild(father);
	X    if (obj != NULL) {
	X	object_add(obj,father,n);
	X	show_obj(obj);
	X    }
	X}
	Xvoid objmenu_CBaschild(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    OBPtr father;
	X    int n;
	X
	X    father = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(father)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    obj = get_object_clipboard();
	X    if (obj == NULL) {
	X	return;
	X    }
	X    obj = copy_object(obj);
	X    n = object_get_numchild(father);
	X    if (obj != NULL) {
	X	object_add(obj,father,n);
	X	show_obj(obj);
	X    }
	X}
	X
	Xvoid objmenu_delete(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    int i,n;
	X    OBPtr obj;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    if (confirm_yes("Delete Object?")) {
	X	delete_object(obj);
	X    }
	X}
	X
	Xvoid main_menu_close_obj(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU0(m);
	X    close_obj(obj);
	X}
	Xvoid objmenu_close(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    obj = OBJECT_OF_MENU2(m);
	X/*    if (obj != master) {*/
	X	close_obj(obj);
	X/*    } else {
	X	mywarning("can't close the master object right now\n");
	X    }
	X*/
	X}
	Xvoid recur_close_obj(obj)
	XOBPtr obj;
	X{
	X    int n,i;
	X    if (obj == NULL) {
	X	return;
	X    }
	X    n = object_get_numchild(obj);
	X    for (i = n -1; i >= 0; i--) {
	X	recur_close_obj(object_get_nthobj(i,obj));
	X    }
	X    close_obj(obj);
	X}
	X
	Xvoid objmenu_closedesc(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    int i,n;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    n = object_get_numchild(obj);
	X    for (i = n -1; i >= 0; i--) {
	X	recur_close_obj(object_get_nthobj(i,obj));
	X    }
	X}
	Xvoid tlmenu_closetls(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    TLPtr tl;
	X    int n,i;
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    n = object_get_numtls(obj);    
	X    for (i = 0; i < n; i++) {
	X	tl = object_get_nthtl(i,obj);
	X	close_tl(tl);
	X    }
	X}
	X
	X
	X
	Xvoid tlmenu_addnull(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    void newlayer_aux();
	X
	X    obj = OBJECT_OF_MENU2(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    newlayer_aux(obj);
	X
	X}
	Xvoid tlmenu_addCB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    OBPtr obj;
	X    TLPtr tl;
	X    void newlayer_aux();
	X
	X    obj = OBJECT_OF_MENU4(m);
	X    if (CHECKPRIV(obj)) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    tl = (get_tl_clipboard());
	X    if (tl != NULL) {
	X	tl = tl_copy(tl);
	X	object_add_tl(object_get_numtls(obj),tl,obj);
	X    }
	X}
	Xvoid TLmenu_quit(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    tl = TL_OF_MENU0(m);
	X    close_tl(tl);
	X}
	Xvoid TLmenu_del(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    OBPtr obj;
	X    if (!confirm_yes("Delete Template?")) {
	X	return;
	X    }
	X    tl = TL_OF_MENU0(m);
	X    close_tl(tl);
	X    object_del_tl(tl);
	X}
	Xvoid TLmenu_info(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    tl = TL_OF_MENU0(m);
	X    vis_info_tl(tl);        
	X}
	Xvoid TLmenu_script(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    char *lab,*abs;
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    abs = gen_absolute_tlpname(tl);
	X    lab = mystrcat(abs," - script");
	X    edit_cont(tl_get_script(tl),lab);
	X    free(lab);
	X    free(abs);
	X    compile_tl_script(tl,REPORT);
	X}
	Xvoid TLmenu_grid(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    int i;
	X    char *x, y[128];
	X
	X    tl = TL_OF_MENU0(m);
	X    sprintf(y, "Enter New Grid Size. Old = %1d.", grid_size);
	X    if( x = vis_dialogue( y ) ) {
	X	i = atoi(x);
	X	if ((i >0) && (i < 100)) {
	X	    grid_size = i;
	X	}
	X    } else {
	X	return;	
	X    }
	X}
	X
	X
	Xvoid newlayer_aux(obj)
	XOBPtr obj;
	X{
	X    Frame new_window;
	X    void assoc_layer_menu();
	X    TLPtr new;
	X    Panel new_panel;
	X    char name[256];
	X    name[0] = '\0';
	X    sprintf(name,"null%1d\0",object_get_numtl(obj));
	X    new = new_tl(name,obj);
	X    object_add_tl(0,new,obj);
	X    attr_set_type(tl_get_attr(new),1);
	X    attr_set_rect(tl_get_attr(new),default_rect);
	X    open_tl(new);
	X    cur_window = (Window) cur_com_frame;
	X}
	Xvoid LAmenu_newtext(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = new_item(HYPE_TEXT,default_cont,tl);        
	X    n = tl_get_numitems(tl);
	X    tl_add_item(tl,it,n);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_newbutton(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = new_item(HYPE_BUTTON,default_cont,tl);        
	X    n = tl_get_numitems(tl);
	X    tl_add_item(tl,it,n);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_newslider(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = new_item(HYPE_SLIDER,default_cont,tl);        
	X    n = tl_get_numitems(tl);
	X    tl_add_item(tl,it,n);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_newtoggle(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = new_item(HYPE_TOGGLE,default_cont,tl);        
	X    n = tl_get_numitems(tl);
	X    tl_add_item(tl,it,n);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	X
	Xvoid LAmenu_addCB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;    
	X    tl = TL_OF_MENU2(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = (get_item_clipboard());       
	X    n = tl_get_numitems(tl);
	X    if (it != NULL) {
	X	it = item_copy(it);
	X	attr_set_lux(item_get_attr(it),0);
	X	attr_set_luy(item_get_attr(it),0);	
	X	tl_add_item(tl,it,n);
	X	close_tl(tl);
	X	open_tl(tl);
	X    }
	X}
	X
	Xvoid LAmenu_newtextsw(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int x,y;
	X    tl = TL_OF_MENU0(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    it = new_item(HYPE_TEXTSW,default_cont,tl);        
	X    tl_add_item(tl,it,0);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_owner(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int x,y;
	X    tl = TL_OF_MENU0(m);
	X    show_obj(tl_get_owner(tl));
	X}
	X
	Xvoid LAmenu_copyCB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    TLPtr tl;
	X    ITPtr it;
	X    int x,y;
	X    tl = TL_OF_MENU2(m);
	X    put_tl_clipboard(tl,NOT_ONLY_REF);
	X}
	X
	X
	X
	Xvoid LAmenu_delitem(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    ITPtr it;
	X    TLPtr tl;
	X    Panel_item pitem;
	X    int n;
	X
	X    tl = TL_OF_MENU2(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    if (!confirm_yes("Delete Item?")) {
	X	return;
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    tl_delete_item(tl,it);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_infoitem(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    ITPtr it;
	X    TLPtr tl;
	X    int n;
	X    tl = TL_OF_MENU2(m);
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    vis_info_item(it,tl);
	X    close_tl(tl);
	X    open_tl(tl);
	X}
	Xvoid LAmenu_script(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X    char *lab,*abs;
	X    tl = TL_OF_MENU2(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    abs = gen_absolute_itempname(it);
	X    lab = mystrcat(abs," - script");
	X    edit_cont(item_get_script(it),lab);
	X    free(lab);
	X    free(abs);
	X    compile_item_script(it,REPORT);
	X}
	Xvoid LAmenu_cpyTB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X    tl = TL_OF_MENU4(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    load_textboard(item_get_script(it));
	X}
	Xvoid LAmenu_cpyCB(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X    tl = TL_OF_MENU4(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    put_item_clipboard(it,NOT_ONLY_REF);
	X}
	Xvoid LAmenu_pre(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X    tl = TL_OF_MENU4(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    prepend_textboard_to_cont(item_get_script(it));
	X    compile_item_script(it,REPORT);
	X}
	Xvoid LAmenu_app(m,mi)
	X    Menu	m;
	X    Menu_item	mi;
	X{
	X    Panel_item pitem;
	X    TLPtr tl;
	X    ITPtr it;
	X    int n;
	X    tl = TL_OF_MENU4(m);
	X    if (CHECKPRIV(tl_get_owner(tl))) {
	X	mywarning("Sorry, this object is write protected!\n");
	X	return;	
	X    }
	X    n = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    it = tl_get_nthitem(n,tl);
	X    append_textboard_to_cont(item_get_script(it));
	X    compile_item_script(it,REPORT);
	X
	X}
	X
	Xchild_open_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    OBPtr obj;
	X    obj = (OBPtr) menu_get(mi,MENU_CLIENT_DATA);
	X    show_obj(obj);
	X}
	XMenu child_list(m,operation)
	XMenu m;
	XMenu_generate operation;
	X{
	X    OBPtr obj;
	X    int i,n;
	X    Menu_item mi;
	X    obj = OBJECT_OF_MENU4(m);
	X    if (obj == NULL) {
	X	fprintf(stderr,"spurious call to child_list\n");
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		if (menu_set(m,MENU_REMOVE,1,0) != 1)
	X		    ;
	X	    }
	X	    mi = menu_create_item(MENU_STRING,
	X			mystrcpy("no subobjects"),
	X			0);
	X		    if (mi == NULL) {
	X			exit(2);
	X		    }
	X	   if ( menu_set(m,MENU_APPEND_ITEM,
	X			mi,0) != 1)
	X		    ;
	X	return m;
	X    }
	X    switch (operation) {
	X	case MENU_NOTIFY:
	X	case MENU_DISPLAY:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		if (menu_set(m,MENU_REMOVE,1,0) != 1)
	X		    ;
	X	    }
	X	    n = object_get_numchild(obj);
	X	    if (n == 0) {
	X		    mi = menu_create_item(MENU_STRING,
	X				mystrcpy("no subobjects"),
	X				0);
	X		    if (mi == NULL) {
	X			exit(5);
	X		    }
	X		    if (menu_set(m,MENU_APPEND_ITEM,
	X			mi,0) != 1)
	X			;
	X		    menu_set(m,MENU_DEFAULT,1,0);
	X	    } else {
	X	    for (i = 0; i < n; i++ ) {
	X		mi = menu_create_item(MENU_STRING,
	X			mystrcpy(object_get_name(
	X			object_get_nthobj(i,obj))),
	X			MENU_NOTIFY_PROC,child_open_proc,
	X			MENU_CLIENT_DATA,object_get_nthobj(i,obj),
	X			0);
	X		    if (mi == NULL) {
	X			exit(7);
	X		    }
	X		if (menu_set(m,MENU_APPEND_ITEM,
	X			mi,0) != 1)
	X		    ;
	X	    }
	X		    menu_set(m,MENU_DEFAULT,1,0);
	X	    }
	X	break;
	X
	X	break;
	X	case MENU_NOTIFY_DONE:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		if (menu_set(m,MENU_REMOVE,1,0) != 1)
	X			;
	X	    }
	X/*	    menu_destroy(m); */
	X	    m = menu_create(MENU_GEN_PROC,child_list,0);
	X		    if (m == NULL) {
	X			exit(10);
	X		    }
	X	break;
	X	case MENU_DISPLAY_DONE:
	X	break;
	X    }
	X    return m;
	X}
	Xmy_destroy_child_menu(menu_object,type)
	XMenu menu_object;
	XMenu_attribute type;
	X{
	X/*    fprintf(stderr,"destroy_child called\n");*/
	X/*    menu_destroy(menu_object);*/
	X}
	Xdel_temp_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    OBPtr obj;
	X    int i;
	X    if (!confirm_yes("Delete Pane?")) {
	X	return;
	X    }
	X    obj = OBJECT_OF_MENU4(m);
	X    i = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    object_del_temp(obj,i);
	X    close_then_open(obj);
	X}
	Xadd_pane_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    OBPtr obj;
	X    TLPtr tl;
	X    int i;
	X    Rect *r;
	X    obj = OBJECT_OF_MENU4(m);
	X    i = (int) menu_get(mi,MENU_CLIENT_DATA);
	X    tl = object_get_nthtl(i,obj);
	X    object_add_temp(obj,tl,object_get_numtemps(obj));
	X    r = (Rect *) attr_get_rect(tl_get_attr(tl));
	X    r->r_left = 0;
	X    r->r_top = 0;
	X    object_set_tempcoords(obj,tl,r);
	X    close_then_open(obj);
	X}
	XMenu delt_list(m,operation)
	XMenu m;
	XMenu_generate operation;
	X{
	X    OBPtr obj;
	X    int i,n;
	X    Menu_item mi;
	X    obj = OBJECT_OF_MENU4(m);
	X    if (obj == NULL) {
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X
	X		    mi = menu_create_item(MENU_STRING,
	X				mystrcpy("no panes"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			mi,0);
	X	return m;
	X    }
	X    switch (operation) {
	X	case MENU_NOTIFY:
	X	case MENU_DISPLAY:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X	    n = object_get_numtemps(obj);
	X	    if (n == 0) {
	X		    mi = menu_create_item(MENU_STRING,
	X				mystrcpy("no panes"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			mi,0);
	X	    } else {
	X		for (i = 0; i < n; i++ ) {
	X		    mi = menu_create_item(MENU_STRING,
	X			    mystrcpy(tl_get_name(
	X			    object_get_nthtemptl(obj,i))),
	X			    MENU_ACTION_PROC,del_temp_proc,
	X			    MENU_CLIENT_DATA,i,
	X			    0);
	X		    menu_set(m,MENU_APPEND_ITEM, mi,
	X			    0);
	X		}
	X	    }
	X	break;
	X	case MENU_DISPLAY_DONE:
	X	break;
	X	case MENU_NOTIFY_DONE:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X/*	    menu_destroy(m); */
	X	    m = menu_create(MENU_GEN_PROC,delt_list,0);
	X	break;
	X	default:
	X	
	X	break;
	X    }
	X    return m;
	X}
	XMenu addpane_list(m,operation)
	XMenu m;
	XMenu_generate operation;
	X{
	X    OBPtr obj;
	X    int i,n,k;
	X    Menu_item mi;
	X    obj = OBJECT_OF_MENU4(m);
	X    if (obj == NULL) {
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X
	X		    mi = menu_create_item(MENU_STRING,
	X				mystrcpy("no templates"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			mi,0);
	X	return m;
	X    }
	X    switch (operation) {
	X	case MENU_NOTIFY:
	X	break;
	X	case MENU_DISPLAY:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X	    n = object_get_numtls(obj);
	X	    k = 0;
	X	    for (i = 0; i < n; i++ ) {
	X	        if (!object_has_panetl(obj,object_get_nthtl(i,obj))) {
	X		    k = 1;
	X		    mi = menu_create_item(MENU_STRING,
	X			mystrcpy(tl_get_name(
	X			object_get_nthtl(i,obj))),
	X			MENU_ACTION_PROC,add_pane_proc,
	X			MENU_CLIENT_DATA,i,
	X			0);
	X		    menu_set(m,MENU_APPEND_ITEM, mi,
	X		        0);
	X		}
	X	    }
	X	    if (k == 0) {
	X		    mi = menu_create_item(MENU_STRING,
	X				mystrcpy("no templates left to add"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			mi,0);
	X	    }
	X	break;
	X	case MENU_DISPLAY_DONE:
	X	break;
	X	case MENU_NOTIFY_DONE:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X/*	    menu_destroy(m); */
	X	    m = menu_create(MENU_GEN_PROC,addpane_list,0);
	X	break;
	X	default:
	X	
	X	break;
	X    }
	X    return m;
	X}
	Xdestroy_delt_menu(menu_object,type)
	XMenu menu_object;
	XMenu_attribute type;
	X{
	X    fprintf(stderr,"destroy_delt called\n");
	X/*    menu_destroy(menu_object);*/
	X}
	Xtl_open_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    TLPtr tl;
	X    tl = (TLPtr) menu_get(mi,MENU_CLIENT_DATA);
	X    open_tl(tl);
	X}
	X
	XMenu tl_list(m,operation)
	XMenu m;
	XMenu_generate operation;
	X{
	X    OBPtr obj;
	X    int i,n;
	X    Menu_item item;
	X    obj = OBJECT_OF_MENU4(m);
	X    
	X    if (obj == NULL) {
	X	fprintf(stderr, "spurrious call\n");
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X		    item = menu_create_item(MENU_STRING,
	X				mystrcpy("no templates"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			item,0);
	X	return m;
	X    }
	X
	X    switch (operation) {
	X	case MENU_NOTIFY:
	X	case MENU_DISPLAY:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X
	X	    n = object_get_numtl(obj);
	X	    if (n == 0) {
	X		    item = menu_create_item(MENU_STRING,
	X				mystrcpy("no templates"),
	X				0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			item,0);
	X	    } else {
	X		for (i = 0; i < n; i++ ) {
	X		    item = menu_create_item(MENU_STRING,
	X			    mystrcpy(tl_get_name(
	X			    object_get_nthtl(i,obj))),
	X			    MENU_NOTIFY_PROC,tl_open_proc,
	X			    MENU_CLIENT_DATA,object_get_nthtl(i,obj),
	X			    0);
	X		    menu_set(m,MENU_APPEND_ITEM,
	X			item,0);
	X		}
	X	    }
	X	break;
	X	case MENU_DISPLAY_DONE:
	X	break;
	X	case MENU_NOTIFY_DONE:
	X	    n = (int) menu_get(m,MENU_NITEMS);
	X	    for (i = 0; i < n; i++) {
	X		menu_set(m,MENU_REMOVE,1,0);
	X	    }
	X/*	    menu_destroy(m);*/
	X	    m = menu_create(MENU_GEN_PROC,tl_list,0);
	X	break;
	X	default:
	X	
	X	break;
	X    }
	X    return m;
	X}
	Xdestroy_tl_menu(menu_object,type)
	XMenu menu_object;
	XMenu_attribute type;
	X{
	X/*    fprintf(stderr,"tl destroy called\n");*/
	X/*    menu_destroy(menu_object);*/
	X}
	XMenu make_item_menu()
	X{
	X    Menu item_menu;
	X    item_menu = menu_create(
	X		0);
	X    return item_menu;
	X}
	XMenu make_multi_menu(tl,f)
	Xvoid *f;
	XTLPtr tl;
	X{
	X    Menu m;
	X    Menu_item mi;
	X    int i,n;
	X    n = tl_get_numitems(tl);
	X    m = menu_create(MENU_CLIENT_DATA,tl,0);
	X    for (i = 0; i < n; i++) {
	X	mi = menu_create_item(MENU_STRING,item_get_name(tl_get_nthitem(i,tl)),
	X				MENU_NOTIFY_PROC, f,
	X				MENU_CLIENT_DATA,i,0);
	X	menu_set(m,MENU_INSERT,i,mi,0);
	X    }
	X    if (n == 0) {
	X	mi = menu_create_item(MENU_STRING,"no items",
	X				MENU_CLIENT_DATA,i,0);
	X	menu_set(m,MENU_INSERT,i,mi,0);	
	X    }
	X    return m;
	X}
	X
	Xedit_text_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    Panel_item item;
	X    Container c;
	X    char *x1,*x2;
	X    char *lab,*abs;
	X    ITPtr it;
	X    item = (Panel_item) menu_get(m,MENU_CLIENT_DATA);
	X    it = (ITPtr) panel_get(item,PANEL_CLIENT_DATA);
	X    x1 = escapesout(panel_get(item,PANEL_VALUE));
	X    c = cnew_constring(x1);
	X    free(x1);
	X    abs = gen_absolute_itempname(it);
	X    lab = mystrcat(abs," - value");
	X    edit_cont(c,lab);
	X    x1 = cflatten(c);
	X    x2 = escapesin(x1);
	X    while (strlen(x2) >= HYPE_TEXT_SIZE) {
	X	vis_dialogue("Text item size limited to %d characters\n",
	X	    HYPE_TEXT_SIZE);
	X	edit_cont(c,lab);
	X	free(x1);
	X	free(x2);
	X	x1 = cflatten(c);
	X	x2 = escapesin(x1);
	X    }
	X    panel_set(item,PANEL_VALUE,x2,0);
	X    free(x1);
	X    free(x2);
	X    free(lab);
	X    free(abs);
	X
	X}
	Xedit_textsw_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    ITPtr item;
	X    Container c;
	X    OBPtr obj;
	X    char *x;
	X    char *lab,*abs;
	X    item = (ITPtr) menu_get(mi,MENU_CLIENT_DATA);
	X    obj = (OBPtr) menu_get(m,MENU_CLIENT_DATA);
	X    c = info_look(object_get_info(obj),gen_absolute_itempname(item));
	X    if (c == NULL) {
	X	c = cnew_con();
	X    }
	X    abs = gen_absolute_itempname(item);
	X    lab = mystrcat(abs," - value");
	X    edit_cont(c,lab);
	X    free(lab);
	X    free(abs);
	X    object_set_info(obj,
	X	info_add_data(object_get_info(obj),gen_absolute_itempname(item),
	X	   ccpy_con(c)));	
	X}
	X
	XMenu make_textitem_menu(textit)
	XPanel_item textit;
	X{
	X    Menu m;
	X    m = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,    "Edit Text",
	X		    MENU_NOTIFY_PROC, edit_text_proc,
	X		    0,
	X	    0);
	X    menu_set(m,MENU_CLIENT_DATA,textit,0);
	X    return m;
	X}
	XMenu make_textswitem_menu(obj,item)
	XOBPtr obj;
	XITPtr item;
	X{
	X    Menu m;
	X    m = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,    "Edit Text",
	X		    MENU_NOTIFY_PROC, edit_textsw_proc,
	X		    MENU_CLIENT_DATA,item,
	X		    0,
	X	    0);
	X    
	X    menu_set(m,MENU_CLIENT_DATA,obj,0);
	X    return m;
	X}
	XMenu make_layer_menu(tl)
	XTLPtr tl;
	X{
	X    int i;
	X    Menu_item mi;
	X    Menu layer_frame_menu;
	X    Menu layer_CB_menu;
	X    Menu layer_TB_menu;
	X
	X    layer_TB_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Append TB to Script",
	X		    make_multi_menu(tl,LAmenu_app),
	X		MENU_PULLRIGHT_ITEM,
	X		    "Prepend TB to Script",
	X		    make_multi_menu(tl,LAmenu_pre),
	X		MENU_PULLRIGHT_ITEM,
	X		    "Copy Script to TB",
	X		    make_multi_menu(tl,LAmenu_cpyTB),
	X		MENU_ITEM,
	X		    MENU_STRING,    "Edit Textboard",
	X		    MENU_NOTIFY_PROC, tlmenu_edittextboard,
	X		    0,
	X		0);
	X
	X    layer_CB_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Copy Item to CB",
	X		    make_multi_menu(tl,LAmenu_cpyCB),
	X		MENU_ITEM,
	X		    MENU_STRING,    "Add Item From CB",
	X		    MENU_NOTIFY_PROC, LAmenu_addCB,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Clipboard Holds ...",
	X		    MENU_NOTIFY_PROC, layer_show_clip,
	X		    0,
	X		0);
	X    
	X    layer_frame_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Item Info",
	X		    make_multi_menu (tl,LAmenu_infoitem),
	X		MENU_PULLRIGHT_ITEM,
	X		    "Edit Script",
	X		    make_multi_menu(tl,LAmenu_script),
	X		MENU_PULLRIGHT_ITEM,
	X		    "Textboard",
	X		    layer_TB_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Clipboard",
	X		    layer_CB_menu,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Create Item",
	X		    MENU_NOTIFY_PROC, LAmenu_newbutton,
	X		    0,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Delete Item",
	X		    make_multi_menu(tl,LAmenu_delitem),
	X		0);
	X    menu_set(layer_frame_menu,MENU_CLIENT_DATA,tl,0);
	X    return layer_frame_menu;
	X}
	X
	XMenu make_tl_menu(tl)
	XTLPtr tl;
	X{
	X    Menu tl_frame_menu;
	X    Menu tlscript_menu;
	X    Menu tlbgtext_menu;
	X    Menu tl_CB_menu;
	X    Menu scroll_bar_menu;
	X    Menu_item fit;
	X    Menu_item refresh;
	X    tl_CB_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,    "Copy Template To CB",
	X		    MENU_NOTIFY_PROC, LAmenu_copyCB,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Clipboard Holds ...",
	X		    MENU_NOTIFY_PROC, tlmenu2_show_clip,
	X		    0,
	X		0);
	X    tlscript_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Edit Script",
	X		    MENU_NOTIFY_PROC, tlscript_menuedit,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Append TB to Script",
	X		    MENU_NOTIFY_PROC, tlscript_menuapp,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Prepend TB to Script",
	X		    MENU_NOTIFY_PROC, tlscript_menupre,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Copy Script To TB",
	X		    MENU_NOTIFY_PROC, tlscript_menucpy,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Edit Textboard",
	X		    MENU_NOTIFY_PROC, tlmenu_edittextboard,
	X		    0,
	X		0);
	X    tlbgtext_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Edit BG Text",
	X		    MENU_NOTIFY_PROC, tlbgtext_menuedit,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Append TB to BG Text",
	X		    MENU_NOTIFY_PROC, tlbgtext_menuapp,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Prepend TB to BG Text",
	X		    MENU_NOTIFY_PROC, tlbgtext_menupre,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Copy BG Text To TB",
	X		    MENU_NOTIFY_PROC, tlbgtext_menucpy,
	X		    0,
	X		0);
	X
	X    scroll_bar_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Toggle Vert Bar",
	X		    MENU_NOTIFY_PROC, TLmenu_wintogv,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Toggle Horiz Bar",
	X		    MENU_NOTIFY_PROC, TLmenu_wintogh,
	X		    0,
	X		0);
	X
	X    refresh = menu_create_item( 
	X		    MENU_STRING,  "Refresh",
	X		    MENU_NOTIFY_PROC, tlmenu_refresh,
	X		    0);
	X    fit = menu_create_item( 
	X		    MENU_STRING,  "Fit Window",
	X		    MENU_NOTIFY_PROC, TLmenu_windowfit_tl,
	X		    0);
	X    menu_set(default_menu, MENU_REPLACE, 7, refresh, 0);
	X    menu_set(default_menu, MENU_REPLACE, 8, fit, 0);
	X    menu_set(default_menu, MENU_REMOVE, 6, 0);
	X
	X    tl_frame_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Window",
	X		    default_menu,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Template Info",
	X		    MENU_NOTIFY_PROC, TLmenu_info,
	X		    0,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Template Script",
	X		    tlscript_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Background Text",
	X		    tlbgtext_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Clipboard",
	X		    tl_CB_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Scroll Bars",
	X		    scroll_bar_menu,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Alter Grid Size",
	X		    MENU_NOTIFY_PROC, TLmenu_grid,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Delete Template",
	X		    MENU_NOTIFY_PROC, TLmenu_del,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Open Owner Obj",
	X		    MENU_NOTIFY_PROC, LAmenu_owner,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Quit Template",
	X		    MENU_NOTIFY_PROC, TLmenu_quit,
	X		    0,
	X		0);
	X    menu_set(tl_frame_menu,MENU_CLIENT_DATA,tl,0);
	X    return tl_frame_menu;
	X}
	Xnull_proc(m,mi)
	XMenu m;
	XMenu_item mi;
	X{
	X    fprintf(stderr,"NULL_PROC\n");
	X    menu_get(mi,MENU_VALUE);
	X    menu_get(m,MENU_VALUE);
	X}
	X
	XMenu mondo_menu(obj)
	XOBPtr;
	X{
	X    Menu mspecial;
	X    Menu fmain_menu;
	X    Menu open_cmenu;
	X    Menu open_bmenu;
	X    Menu delt_menu;
	X    Menu addpane_menu;
	X    Menu object_menu;
	X    Menu file_menu;
	X    Menu tl_menu;
	X    Menu script_menu;
	X    Menu obj_CB_menu;
	X    Menu tlmenu_CB_menu;
	X    Menu pane_menu;
	X    Menu_item refresh;
	X    Menu_item fit;
	X    obj_CB_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Copy Object to CB",
	X		    MENU_NOTIFY_PROC, objmenu_copyCB,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Add CB Object as Child",
	X		    MENU_NOTIFY_PROC, objmenu_CBaschild,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Add CB Obj Tree as Child",
	X		    MENU_NOTIFY_PROC, objmenu_CBtreeaschild,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Clipboard Holds ...",
	X		    MENU_NOTIFY_PROC, objmenu_show_clip,
	X		    0,
	X		0);
	X    file_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Save State",
	X		    MENU_NOTIFY_PROC, fmenu_savecurrent,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Save & Quit",
	X		    MENU_NOTIFY_PROC, fmenu_quit,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "File State",
	X		    MENU_NOTIFY_PROC, fmenu_savecurrentas,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "File Subtree",
	X		    MENU_NOTIFY_PROC, fmenu_save,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Load Subtree",
	X		    MENU_NOTIFY_PROC, fmenu_load,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Quit, No Save",
	X		    MENU_NOTIFY_PROC, fmenu_quit_nosave,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Pretty Print",
	X		    MENU_NOTIFY_PROC, fmenu_pretty,
	X		    0,
	X		0);
	X    open_cmenu = menu_create(
	X	    MENU_GEN_PROC,child_list,
	X	    0);
	X    delt_menu = menu_create(MENU_GEN_PROC,delt_list,0);
	X    addpane_menu = menu_create(MENU_GEN_PROC,addpane_list,0);
	X    script_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Edit Script",
	X		    MENU_NOTIFY_PROC, script_menuedit,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Append TB to Script",
	X		    MENU_NOTIFY_PROC, script_menuapp,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Prepend TB to Script",
	X		    MENU_NOTIFY_PROC, script_menupre,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Copy Script to TB",
	X		    MENU_NOTIFY_PROC, script_menucpy,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Edit Textboard",
	X		    MENU_NOTIFY_PROC, objmenu_edittextboard,
	X		    0,
	X		0);
	X    pane_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Add Pane",
	X		    addpane_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Delete Pane",
	X		    delt_menu,
	X		0);
	X    object_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING,  "Object Info",	    
	X		    MENU_NOTIFY_PROC, objmenu_report,
	X		    0,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Obj Script",
	X		    script_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Clipboard",
	X		    obj_CB_menu,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Create Child",
	X		    MENU_NOTIFY_PROC, objmenu_new_child,
	X		    0,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Open Child",
	X		    open_cmenu,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Open Parent",
	X		    MENU_NOTIFY_PROC, objmenu_open_parent,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Delete Obj",
	X		    MENU_NOTIFY_PROC, objmenu_delete,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Close Tree",
	X		    MENU_NOTIFY_PROC, objmenu_closedesc,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Quit Object",
	X		    MENU_NOTIFY_PROC, objmenu_close,
	X		    0,
	X		0);
	X    open_bmenu = menu_create(MENU_GEN_PROC,tl_list,0);
	X    tlmenu_CB_menu = menu_create(
	X		MENU_ITEM,
	X		    MENU_STRING, "Add Template From CB",
	X		    MENU_NOTIFY_PROC, tlmenu_addCB,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING, "Clipboard Holds ...",
	X		    MENU_NOTIFY_PROC, tlmenu4_show_clip,
	X		    0,
	X		0);
	X/*    open_bmenu = make_tl_list_menu(obj);*/
	X/*    menu_destroy_with_proc(open_bmenu,destroy_tl_menu);*/
	X    tl_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Open Template",
	X		    open_bmenu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Clipboard",
	X		    tlmenu_CB_menu,
	X		MENU_ITEM,
	X		    MENU_STRING, "Create Template",
	X		    MENU_NOTIFY_PROC, tlmenu_addnull,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,  "Close All",
	X		    MENU_NOTIFY_PROC, tlmenu_closetls,
	X		    0,
	X		0);
	X
	X    refresh = menu_create_item( 
	X		    MENU_STRING,  "Refresh",
	X		    MENU_NOTIFY_PROC, objmenu_refresh,
	X		    0);
	X    fit = menu_create_item( 
	X		    MENU_STRING, "Fit Window",
	X		    MENU_NOTIFY_PROC, mainmenu_windowfit,
	X		    0);
	X    menu_set(default_menu, MENU_REPLACE, 7, refresh, 0);
	X    menu_set(default_menu, MENU_REPLACE, 8, fit, 0);
	X    menu_set(default_menu,MENU_REMOVE,6,0);
	X    fmain_menu = menu_create(
	X		MENU_PULLRIGHT_ITEM,
	X		    "Window",
	X		    default_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "File",
	X		    file_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Object",
	X		    object_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Template",
	X		    tl_menu,
	X		MENU_PULLRIGHT_ITEM,
	X		    "Pane",
	X		    pane_menu,
	X/*
	X		MENU_ITEM,
	X		    MENU_STRING,    "Clipboard Holds ...",
	X		    MENU_NOTIFY_PROC, mainmenu_show_clip,
	X		    0,
	X*/
	X		MENU_ITEM,
	X		    MENU_STRING,    "Test Script",
	X		    MENU_NOTIFY_PROC, objmenu_ex_microscript,
	X		    0,
	X		MENU_ITEM,
	X		    MENU_STRING,    "Quit Object",
	X		    MENU_NOTIFY_PROC, main_menu_close_obj,
	X		    0,
	X		0);
	X    menu_set(fmain_menu,MENU_CLIENT_DATA,obj,0);
	X/*    menu_destroy_with_proc(fmain_menu,my_destroy_child_menu);*/
	X
	X    return fmain_menu;
	X}
	XMenu make_frame_menu(obj)
	XOBPtr obj;
	X{
	X    return mondo_menu(obj);
	X}
	Xvoid test_event_proc(window,event,arg)
	X    Window  window;
	X    Event   *event;
	X    caddr_t arg;
	X{
	X    OBPtr obj;
	X    Menu m;
	X    Rect *r;
	X    obj = (OBPtr) menu_get(window_get(window,WIN_MENU),MENU_CLIENT_DATA);
	X    SIGPROCESS;
	X    set_alarm();
	X    if (event_id(event) != LOC_WINEXIT) {
	X	cur_window = window;
	X    }
	X    if ((event_id(event) == MS_LEFT) && event_is_down(event)) {
	X	close_then_open(obj);
	X	return;
	X    }
	X    if ((event_id(event) == MS_RIGHT) && event_is_down(event)) {
	X    default_menu = window_get(window,WIN_MENU);
	X/*	m = mondo_menu(obj);*/
	X	menu_show(m,window,event,0);
	X/*	menu_destroy(m);*/
	X	return;
	X    }
	X    if (event_id(event) == WIN_RESIZE) {
	X        r = (Rect *) window_get(window,WIN_RECT);	
	X	attr_set_rect(object_get_attr(obj),r);	
	X    }
	X}
	Xvoid tl_test_event_proc(window,event,arg)
	X    Window  window;
	X    Event   *event;
	X    caddr_t arg;
	X{
	X    TLPtr tl;
	X    Rect *r;
	X    tl = (TLPtr) menu_get(window_get(window,WIN_MENU),MENU_CLIENT_DATA);
	X    SIGPROCESS;
	X    set_alarm();
	X    if (event_id(event) != LOC_WINEXIT) {
	X	cur_window = window;
	X    }
	X    if (event_id(event) == WIN_RESIZE) {
	X        r = (Rect *) window_get(window,WIN_RECT);	
	X	attr_set_rect(tl_get_attr(tl),r);	
	X    }
	X}
	Xstatic Cursor orig_cursor;
	X
	Xvoid manual_panel_menu(panel,event)
	XPanel panel;
	XEvent *event;
	X{   
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    Menu m;
	X    cur_panel = panel;
	X    cur_window = window_get(cur_panel,WIN_OWNER);
	X    if (event_id(event) == LOC_WINENTER) {
	X	if (1) {
	X	    reftl = hlookup(cur_panel,sv_to_hype);
	X	    fill_panel_with_text(cur_panel,tl_get_bgtext(reftl),1);
	X	}
	X	return;
	X    }
	X
	X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
	X	refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X	reftl = (TLPtr) hlookup(cur_panel,sv_to_hype);
	X	m = make_layer_menu(reftl);
	X        menu_show(m,panel,event,0);
	X	menu_destroy(m);
	X    }
	X    if (movingflag) {
	X	int mx,my;
	X	if ((event_id(event) == MS_MIDDLE) && event_is_up(event)) {
	X	    mx = ((event_x(event) + (grid_size / 2)) / grid_size)*grid_size;
	X	    my = ((event_y(event) + (grid_size / 2)) / grid_size)*grid_size;
	X	    item_set_lux(moving_item,mx);
	X	    item_set_luy(moving_item,my);
	X	    movingflag = 0;
	X	    panel_set(moving_item_image,PANEL_ITEM_X,mx,
	X		    PANEL_ITEM_Y,my,
	X		    0);
	X	    window_set(panel,WIN_CURSOR,orig_cursor,0);
	X	    cursor_destroy(orig_cursor);
	X	    panel_paint(panel,PANEL_CLEAR);
	X	}
	X    }
	X    panel_text_notify(panel,event);
	X    return;
	X}
	Xvoid obj_tl_proc(panel,event)
	XPanel panel;
	XEvent *event;
	X{   
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    TPPtr temp;
	X    char *otarg;
	X    Rect *r;
	X    cur_panel = panel;
	X
	X    if (event_id(event) == LOC_WINENTER) {
	X	if (1) {
	X	    temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X	    reftl = object_get_temp_tl(temp);
	X	    fill_panel_with_text(panel,tl_get_bgtext(reftl),1);
	X	}
	X	cur_window = window_get(cur_panel,WIN_OWNER);
	X	return;
	X    }
	X
	X    if (event_id(event) == LOC_WINEXIT) {
	X	if (1) {
	X	    temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X	    reftl = object_get_temp_tl(temp);
	X	    get_values_tl(reftl);
	X	}
	X    }
	X    cur_window = window_get(cur_panel,WIN_OWNER);
	X    if (event_id(event) == MS_LEFT && event_is_down(event)) {
	X	refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X	temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X	reftl = object_get_temp_tl(temp);
	X	otarg = gen_tlpname((OBPtr) get_master(),reftl);
	X	handler(refobj,reftl,NULL,"mouseDown",cnew_constring(""),otarg);
	X    }
	X    if (event_id(event) == MS_LEFT && event_is_up(event)) {
	X	refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X	temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X	reftl = object_get_temp_tl(temp);
	X	otarg = gen_tlpname((OBPtr) get_master(),reftl);
	X	handler(refobj,reftl,NULL,"mouseUp",cnew_constring(""),otarg);
	X    }
	X    panel_text_notify(panel,event);
	X    panel_default_handle_event(cur_panel,event);
	X    return;
	X}
	Xvoid item_proc1(pitem,event)
	XPanel_item pitem;
	XEvent *event;
	X{
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    ITPtr refitem;
	X    char *otarg;
	X    TPPtr temp;
	X    cur_panel = panel_get(pitem,PANEL_PARENT_PANEL);
	X    cur_window = window_get(cur_panel,WIN_OWNER);    
	X    refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X    switch (item_get_type(refitem)) {
	X	case HYPE_TEXT:
	X	    panel_text_notify(pitem,event);
	X	    panel_default_handle_event(pitem,event);
	X            if (event_id(event) == MS_RIGHT && event_is_down(event)) {
	X		menu_show(make_textitem_menu(pitem),cur_panel,event,0);
	X	    } else    
	X            if (event_id(event) == MS_LEFT && event_is_down(event)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		handler(refobj,reftl,refitem,
	X		    "mouseDown",cnew_constring(""),otarg);
	X	    } else 
	X            if (event_id(event) == MS_LEFT && event_is_up(event)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		handler(refobj,reftl,refitem,
	X		    "mouseUp",cnew_constring(""),otarg);
	X	    } else 
	X	    if (event_is_ascii(event) || (event_id(event) == 10)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		object_set_info(refobj,info_add_data(object_get_info(refobj),
	X			    gen_absolute_itempname(refitem),
	X			    cnew_constring(
	X				panel_get(pitem,PANEL_VALUE))
	X			    ));		    
	X	    }
	X	break;
	X	case HYPE_BUTTON:
	X	    panel_default_handle_event(pitem,event);	
	X            if (event_id(event) == MS_LEFT && event_is_down(event)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		handler(refobj,reftl,refitem,
	X		    "mouseDown",cnew_constring(""),otarg);
	X	    } else 
	X            if (event_id(event) == MS_LEFT && event_is_up(event)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		handler(refobj,reftl,refitem,
	X		    "mouseUp",cnew_constring(""),otarg);		
	X	    }
	X	break;
	X    }
	X}
	Xvoid textsw_item_proc(pitem,event)
	XPanel_item pitem;
	XEvent *event;
	X{
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    ITPtr refitem;
	X    char *otarg;
	X    TPPtr temp;
	X    cur_panel = panel_get(pitem,PANEL_PARENT_PANEL);
	X    cur_window = window_get(cur_panel,WIN_OWNER);    
	X    refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X    switch (item_get_type(refitem)) {
	X	case HYPE_TEXTSW:
	X            if (event_id(event) == MS_RIGHT && event_is_down(event)) {
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		menu_show(make_textswitem_menu(refobj,refitem),
	X			cur_panel,event,0);
	X	    } else    
	X            if (event_id(event) == MS_LEFT && (event_is_up(event) ||
	X		    event_is_down(event))) {
	X		panel_text_notify(pitem,event);
	X		panel_default_handle_event(pitem,event);
	X	        refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		if (event_is_up(event)) {
	X		handler(refobj,reftl,refitem,
	X		    "mouseUp",cnew_constring(""),otarg);		    
	X		} else
	X		if (event_is_down(event)) {
	X		handler(refobj,reftl,refitem,
	X		    "mouseDown",cnew_constring(""),otarg);
	X		}
	X	    } 
	X    }
	X}
	X
	XContainer mask_to_cont(val,n)
	Xunsigned int val;
	Xint n;
	X{
	X    int i;
	X    Container c;
	X    c = cnew_con();
	X    for (i = 0; i < n; i++) {
	X	if (get_bit(i,val)) {
	X	    mfputc(c,'1');
	X	} else {
	X	    mfputc(c,'0');	    
	X	}
	X	mfputc(c,' ');
	X    }
	X    return c;
	X}
	Xvoid item_proc2(pitem,event,value)
	XPanel_item pitem;
	XEvent *event;
	Xunsigned int value;
	X{
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    ITPtr refitem;
	X    char *otarg;
	X    TPPtr temp;
	X    cur_panel = panel_get(pitem,PANEL_PARENT_PANEL);
	X    cur_window = window_get(cur_panel,WIN_OWNER);    
	X    refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X    switch (item_get_type(refitem)) {
	X	case HYPE_SLIDER:
	X            if (event_id(event) == MS_LEFT) {
	X		refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);		
	X		panel_default_handle_event(pitem,event);	
	X		if (event_is_up(event)) {
	X		object_set_info(refobj,info_add_data(object_get_info(refobj),
	X			    gen_absolute_itempname(refitem),
	X			    cnew_constring(
	X				int_to_string(panel_get(pitem,PANEL_VALUE)))
	X			    ));
	X		handler(refobj,reftl,refitem,
	X		    "mouseUp",cnew_constring(int_to_string(panel_get(pitem,
	X			PANEL_VALUE))),otarg);
	X		    
	X		} else {
	X		object_set_info(refobj,info_add_data(object_get_info(refobj),
	X			    gen_absolute_itempname(refitem),
	X			    cnew_constring(
	X				int_to_string(panel_get(pitem,PANEL_VALUE)))
	X			    ));
	X		handler(refobj,reftl,refitem,
	X		    "mouseDown",cnew_constring(int_to_string(panel_get(pitem,
	X			PANEL_VALUE))),otarg);
	X		    
	X		}
	X		
	X	    } else {
	X		panel_default_handle_event(pitem,event);	
	X
	X	    }
	X	break;
	X	case HYPE_TOGGLE:
	X            if (event_id(event) == MS_LEFT) {
	X		refobj = (OBPtr) hlookup(cur_window,sv_to_hype);
	X		temp = (TPPtr) hlookup(cur_panel,sv_to_hype);
	X		reftl = object_get_temp_tl(temp);
	X		refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X		otarg = gen_itempname(refitem,refobj,reftl);
	X		panel_default_handle_event(pitem,event);	
	X		if (event_is_up(event)) {
	X		object_set_info(refobj,info_add_data(object_get_info(refobj),
	X			    gen_absolute_itempname(refitem),
	X			    mask_to_cont(panel_get(pitem,PANEL_VALUE),
	X			    item_get_numc(refitem))
	X			    ));	
	X		handler(refobj,reftl,refitem,
	X		    "mouseUp",cnew_constring(""),otarg);
	X		} else {
	X		object_set_info(refobj,info_add_data(object_get_info(refobj),
	X			    gen_absolute_itempname(refitem),
	X			    mask_to_cont(panel_get(pitem,PANEL_VALUE),
	X			    item_get_numc(refitem))
	X			    ));	
	X		handler(refobj,reftl,refitem,
	X		    "mouseDown",cnew_constring(""),otarg);		    
	X		}
	X	    } else {
	X		panel_default_handle_event(pitem,event);
	X	    }
	X	break;
	X    }
	X}
	Xvoid tl_item_proc(pitem,event)
	XPanel_item pitem;
	XEvent *event;
	X{
	X    OBPtr refobj;
	X    TLPtr reftl;
	X    ITPtr refitem;
	X    char *otarg;
	X    TPPtr temp;
	X
	X    Cursor new;
	X
	X    cur_panel = panel_get(pitem,PANEL_PARENT_PANEL);
	X    cur_window = window_get(cur_panel,WIN_OWNER);    
	X    refitem = (ITPtr) hlookup(pitem,sv_to_hype);
	X    
	X    if (event_id(event) == MS_MIDDLE && event_is_up(event)) {
	X	if (movingflag == 1) {
	X	    manual_panel_menu(cur_panel,event);	    
	X	    return;
	X	}
	X    }
	X    if (event_id(event) == MS_MIDDLE && event_is_down(event)) {
	X	if (movingflag == 0) {
	X	    movingflag = 1;
	X	    moving_item = refitem;
	X	    moving_item_image = pitem;
	X	    orig_cursor = cursor_copy(window_get(cur_panel,WIN_CURSOR));
	X	    new = cursor_create(CURSOR_IMAGE,&c_pixrect,
	X			    CURSOR_SHOW_CROSSHAIRS,TRUE,
	X			    CURSOR_OP,PIX_SRC^PIX_DST,
	X			    0);
	X	    window_set(cur_panel,WIN_CURSOR,new,0);
	X	}
	X    }
	X}
	Xvoid disassoc_item(pitem)
	XPanel_item pitem;
	X{
	X    ITPtr item;
	X    item = (ITPtr) hlookup(pitem,sv_to_hype);
	X    delete_from_hash(pitem,sv_to_hype);
	X}
	Xvoid assoc_item(pitem,tl,item)
	XPanel_item pitem;
	XTLPtr tl;
	XITPtr item;
	X{
	X    add_to_hash(pitem,sv_to_hype,item);
	X
	X    switch (item_get_type(item)) {
	X	case HYPE_TEXT:
	X	    panel_set(pitem,PANEL_EVENT_PROC,item_proc1,0);
	X	break;
	X	case HYPE_BUTTON:
	X	    panel_set(pitem,PANEL_EVENT_PROC,item_proc1,0);
	X	break;
	X	case HYPE_SLIDER:
	X	    panel_set(pitem,PANEL_EVENT_PROC,item_proc2,0);
	X	break;
	X	case HYPE_TOGGLE:
	X	    panel_set(pitem,PANEL_EVENT_PROC,item_proc2,0);
	X	break;
	X	case HYPE_TEXTSW:
	X	    panel_set(pitem,PANEL_EVENT_PROC,textsw_item_proc,0);
	X	break;
	X    }
	X}
	Xvoid disassoc_tl_item(pitem)
	XPanel_item pitem;
	X{
	X    ITPtr item;
	X    item = (ITPtr) hlookup(pitem,sv_to_hype);
	X    delete_from_hash(pitem,sv_to_hype);
	X}
	Xvoid assoc_tl_item(pitem,tl,item)
	XPanel_item pitem;
	XTLPtr tl;
	XITPtr item;
	X{
	X	add_to_hash(pitem,sv_to_hype,item);
	X	panel_set(pitem,PANEL_EVENT_PROC,tl_item_proc,0);
	X}
	Xdisassoc_layer_menu(panel,tl)
	XPanel panel;
	XTLPtr tl;
	X{
	X    delete_from_hash(panel,sv_to_hype);
	X}
	Xvoid assoc_layer_menu(pframe,tl)
	XPanel pframe;
	XTLPtr tl;
	X{
	X    add_to_hash(pframe,sv_to_hype,tl);
	X    window_set(pframe,WIN_CONSUME_PICK_EVENTS,
	X		    WIN_NO_EVENTS,
	X		    LOC_MOVE,LOC_WINENTER,LOC_WINEXIT,
	X		    WIN_MOUSE_BUTTONS,
	X		    0,
	X		0);
	X    panel_set(pframe,PANEL_BACKGROUND_PROC,manual_panel_menu,0);
	X
	X}
	Xvoid disassoc_obj_tlmenu(panel)
	XPanel panel;
	X{
	X    TPPtr temp;
	X    temp = (TPPtr) hlookup(panel,sv_to_hype);
	X    delete_from_hash(panel,sv_to_hype);
	X}
	Xvoid assoc_obj_tlmenu(panel,temp)
	XPanel panel;
	XTPPtr temp;
	X{
	X    add_to_hash(panel,sv_to_hype,temp);
	X    window_set(panel,WIN_CONSUME_PICK_EVENTS,
	X		    WIN_NO_EVENTS,
	X		    LOC_MOVE,LOC_WINENTER,LOC_WINEXIT,
	X		    WIN_MOUSE_BUTTONS,
	X		    0,
	X		0);
	X    panel_set(panel,PANEL_BACKGROUND_PROC,obj_tl_proc,0);
	X}
	Xvoid disassoc_tl_menu(frame,tl)
	XFrame frame;
	XTLPtr tl;
	X{
	X    tl = hlookup(frame,sv_to_hype);
	X    delete_from_hash(frame,sv_to_hype);
	X}
	Xvoid assoc_tl_menu(frame,tl)
	XFrame frame;
	XTLPtr tl;
	X{
	X    add_to_hash(frame,sv_to_hype,tl);
	X    default_menu = window_get(frame,WIN_MENU);
	X    window_set(frame,WIN_MENU,make_tl_menu(tl),0);
	X    window_set(frame,FRAME_NO_CONFIRM, TRUE, 0);    
	X    window_set(frame,WIN_EVENT_PROC,tl_test_event_proc,0);
	X    window_set(frame,WIN_CONSUME_PICK_EVENTS,
	X			WIN_MOUSE_BUTTONS,
	X			LOC_MOVE,LOC_WINENTER,LOC_WINEXIT,0,
	X			0);
	X    
	X}
	Xvoid disassoc_window_menu(window,obj)
	XFrame window;
	XOBPtr obj;
	X{
	X    obj = (OBPtr) hlookup(window,sv_to_hype);
	X    delete_from_hash(window,sv_to_hype);
	X}
	Xvoid set_base(f)
	XFrame f;
	X{
	X    base_frame = f;
	X}
	XFrame get_base()
	X{
	X    return base_frame;
	X}
	X
	Xvoid assoc_window_menu(window,obj)
	XFrame window;
	XOBPtr obj;
	X{
	X    add_to_hash(window,sv_to_hype,obj);
	X    window_set(window,FRAME_NO_CONFIRM, TRUE, 0);
	X    window_set(window,WIN_EVENT_PROC,test_event_proc,0);
	X    window_set(window,WIN_CONSUME_PICK_EVENTS,
	X			MS_RIGHT,
	X			MS_LEFT,
	X			LOC_STILL,
	X			LOC_MOVE,
	X			LOC_WINENTER,
	X			LOC_WINEXIT,
	X			0,
	X			0);
	X    default_menu = window_get(window,WIN_MENU);
	X    window_set(window,WIN_MENU,mondo_menu(obj),0);
	X    if (get_master() == obj) {
	X	set_base(window);
	X    }
	X
	X}
	X
	Xvoid fire_it_up()
	X{
	X    cur_window = base_frame;
	X    window_main_loop(base_frame);
	X}
	X
	Xvoid init_interface()
	X{
	X    OBPtr oldmaster;
	X    OBPtr obj;
	X    ObjectCode oc;
	X    Container cont;
	X    Container self;
	X    char *x;
	X    
	X
	X    base_frame = NULL;
	X    default_cont = cnew_con();
	X    default_rect[0].r_left = 400;
	X    default_rect[0].r_top = 400;
	X    default_rect[0].r_width = 200;
	X    default_rect[0].r_height = 200;
	X    crewind(default_cont);
	X    if (editor == NULL) {
	X	editor = "vi";
	X    }
	X    sv_to_hype = make_hash();
	X    init_hash( TABLE_SIZE ,sv_to_hype);
	X    
	X    treeroot = oldmaster = create_master("treeroot");
	X    master = create_master("MASTER");
	X    object_set_name(oldmaster,"minmast");
	X    object_add(master,oldmaster,0);
	X    if (dpath == NULL) {
	X	dpath = gen_absolute_pname(master);
	X    }
	X    obj = obj_ofpname(dpath);
	X    if ((obj == treeroot) || (obj == NULL)) {
	X	dpath = gen_absolute_pname(master);
	X    }
	X    treeroot = oldmaster;
	X
	X    if (public == NULL) {
	X	distinguished = master;
	X	if (state == NULL) {
	X	    distinguished = master;
	X	    state = "./hype.state";
	X	    object_set_level(master,WRITABLE);
	X	} else {
	X	    master = load_below(state,treeroot,0,WRITABLE);
	X	    if (master == NULL) {
	X		fprintf(stderr,"unable to open file %s\n",state);
	X		exit(0);
	X	    }
	X	    distinguished = master;
	X	    object_set_level(distinguished,WRITABLE);
	X	}
	X    } else {
	X
	X
	X	master = load_over(public,master,READ_ONLY);	
	X	    if (master == NULL) {
	X		fprintf(stderr,"unable to open file %s\n",public);
	X		exit(0);
	X	    }
	X
	X
	X	if ((obj == treeroot) || (obj == NULL)) {
	X	    dpath = gen_absolute_pname(master);
	X	}
	X	if (state == NULL) {
	X	    distinguished = master;
	X	    obj = create_master(user);
	X	    object_add(obj,obj_ofpname(dpath),0);
	X	    object_set_name(obj,user);
	X	    object_set_level(obj,WRITABLE);
	X	    distinguished = obj;
	X	    state = "./hype.state";
	X	} else {
	X	    obj = obj_ofpname(dpath);
	X	    distinguished = load_below(state,obj,0,WRITABLE);
	X	    if (distinguished == NULL) {
	X		fprintf(stderr,"unable to open file %s\n",state);
	X		exit(0);
	X	    }
	X
	X	    object_set_level(distinguished,WRITABLE);
	X	}
	X    }
	X
	X
	X    if (init_arg == NULL) {
	X	cont = cnew_con();
	X    } else {
	X	cont = cnew_constring(init_arg);
	X    }
	X    broadcast(get_master(),"initHype",cont);
	X    cdestroy(cont);
	X
	X    if (init_script != NULL) {
	X	execute_hypefile(init_script,master,cnew_con(),"",cnew_constring("/"));
	X    }
	X    show_obj(master);
	X
	X}
	X
	X
	XOBPtr get_distinguished()
	X{
	X    return distinguished;
	X}
	X
	XOBPtr set_distinguished()
	X{
	X    return (distinguished = NULL);
	X}
	X
	Xchar *get_state_path()
	X{
	X    return state;    
	X}
	Xvoid set_state_path(x)
	Xchar *x;
	X{
	X    state = x;
	X}
	Xvoid set_state(x)
	Xchar *x;
	X{
	X    state = x;
	X}
	Xchar *get_user()
	X{
	X    return user;
	X}
	Xvoid set_user(x)
	Xchar *x;
	X{
	X    user = x;
	X}
	XWindow interface_get_window()
	X{
	X    if (cur_window != NULL) {
	X	return cur_window;
	X    }
	X    return (Window) hlookup(get_master(),sv_to_hype);
	X}
	Xchar *get_public()
	X{
	X    return public;
	X}
	Xvoid set_public(x)
	Xchar *x;
	X{
	X    public = x;
	X}
	Xchar *get_state()
	X{
	X    return state;
	X}
	Xvoid set_superuser(str)
	Xchar *str;
	X{
	X    if (str == NULL) {
	X	superuser = 0;
	X    } else {
	X	superuser = 1;
	X    }
	X}
	Xvoid set_init_script(str)
	Xchar *str;
	X{
	X    init_script = str;
	X}
	Xvoid set_init_arg(str)
	Xchar *str;
	X{
	X    init_arg = str;
	X}
	Xvoid set_dpath(str)
	Xchar *str;
	X{
	X    dpath = str;
	X}
	Xvoid set_editor(str)
	Xchar *str;
	X{
	X    editor = str;
	X}
	X
	Xchar *get_editor()
	X{
	X    return editor;
	X}
SHAR_EOF
if test 62000 -ne "`wc -c < 'interface.c'`"
then
	echo shar: error transmitting "'interface.c'" '(should have been 62000 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'interface.h'" '(185 characters)'
if test -f 'interface.h'
then
	echo shar: will not over-write existing file "'interface.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'interface.h'
	X
	Xvoid	init_interface();
	Xvoid	assoc_window_menu();
	Xvoid	fire_it_up();
	Xvoid	*get_distinguished();
	Xvoid	*get_master();
	Xvoid	*get_public();
	Xvoid	*get_state();
	Xvoid	*interface_get_window();
SHAR_EOF
if test 185 -ne "`wc -c < 'interface.h'`"
then
	echo shar: error transmitting "'interface.h'" '(should have been 185 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'src'"
cd ..
#	End of shell archive
exit 0