[comp.sources.sun] v01i067: hype - a SunView object-oriented window builder, Part07/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 67
Archive-name: hype/part07

#! /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 20:57:46 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 "'fileio.c'" '(8798 characters)'
if test -f 'fileio.c'
then
	echo shar: will not over-write existing file "'fileio.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'fileio.c'
	X#include "util.h"
	X#include "../archives/container/container.h"
	X#include "tlmod.h"
	X#include "objmod.h"
	X#include "itemmod.h"
	X#include "attr.h"
	X#include "info.h"
	X#include "color.h"
	X#include "interface.h"
	X
	Xextern char **environ;
	Xextern char *glob_recognizer;
	X
	Xstatic FILE *fd;
	X
	Xint public_flag;
	X
	X#define MARK	(fprintf(fd,"^\n"))
	X
	Xsave_obj(obj,fname)
	XOBPtr obj;
	Xchar *fname;
	X{
	X    char *temp;
	X    char *com;
	X    char a[256];
	X    
	X    if (fname == NULL) {
	X	return NULL;
	X    }
	X    temp = "/tmp/HYPE";
	X    temp = mystrcat(temp,get_user());
	X    fd = fopen(temp,"w");
	X    
	X    if (fd == NULL) {
	X	sprintf(a,"unable to open file:%s.\n",temp);
	X	mywarning(a);
	X	return NULL;
	X    }
	X    com = mystrcat("mv -f ",temp);
	X    com = mystrcat(com," ");
	X    com = mystrcat(com,fname);
	X    write_env(fd);
	X    write_obj(obj);    
	X    fclose(fd);
	X    mysystem(com);
	X    
	X}
	Xwrite_env(fd)
	XFILE *fd;
	X{
	X    char **ep;
	X    int num = 0;
	X    ep = environ;
	X    while(*ep != NULL) {
	X	if (strncmp(*ep,glob_recognizer,12) == 0)
	X	    num++;
	X	ep++;
	X    }
	X    fprintf(fd,"!!!\nglobals=%d\n",num);
	X    ep = environ;
	X    while(*ep != NULL) {
	X	if (strncmp(*ep,glob_recognizer,12) == 0)
	X	    fprintf(fd,"%s\n",*ep);
	X	ep++;
	X    }
	X}
	Xread_env(fd)
	XFILE *fd;
	X{
	X    int num;
	X    char c;
	X    char global[4096];
	X    c = getc(fd);
	X    if (c != '!') {
	X	ungetc(c,fd);
	X	return;
	X    } else {
	X	c = getc(fd);
	X	c = getc(fd);
	X	c = getc(fd);
	X	if (c != '\n') {
	X	    mywarning("Corrupted state file with respect to \
	Xglobal variables!");
	X	    return;
	X	}
	X    }
	X    fscanf(fd,"globals=%d\n",&num);
	X    while(num-- > 0) {
	X	fscanf(fd,"%s\n",global);
	X	putenv(mystrcpy(global));
	X    }
	X}
	X
	Xsave_public(obj,fname)
	XOBPtr obj;
	Xchar *fname;
	X{
	X    if (fname == NULL) {
	X	return;
	X    }
	X    fd = fopen(fname,"w");
	X    if (fd == NULL) {
	X	fprintf(stderr,"unable to open file:%s.\n",fname);
	X	return NULL;
	X    }
	X    write_public(obj);
	X    fclose(fd);
	X}
	X/*
	X**	FIX 8/16/88 declaration for get_state_path
	X*/
	Xchar *get_state_path();
	X
	Xwrite_public(obj)
	XOBPtr obj;
	X{
	X    int i,numtl,numkid,numtemp;
	X    int dist;
	X    char *path;
	X    if (obj == get_distinguished()) {
	X	FILE *safe;
	X	safe = fd;
	X	path = get_state_path();
	X	save_obj(obj,path);
	X	fd = safe;
	X	return;
	X    }
	X
	X    fprintf(fd,"%s\n",object_get_name(obj));
	X    write_script(fd,object_get_label(obj));
	X    write_script(fd,object_get_script(obj));
	X    numtl = object_get_numtl(obj);
	X    fprintf(fd,"%d\n",numtl);
	X    for (i = numtl-1; i >= 0; i--) {
	X	write_tl(object_get_nthtl(i,obj));
	X    }
	X    numtemp = object_get_numtemps(obj);
	X    fprintf(fd,"%d\n",numtemp);
	X    for (i = numtemp-1; i >= 0; i--) {
	X	object_write_temp(obj,i,fd);
	X    }
	X    numkid = object_get_numchild(obj);
	X    dist = -1;
	X    for (i = 0; i < numkid; i++) {
	X	if (object_get_nthobj(i,obj) == get_distinguished()) {
	X	    dist = i;
	X	}
	X    }    
	X    if (dist == -1) {
	X	fprintf(fd,"%d\n",(numkid));	
	X    } else {
	X	fprintf(fd,"%d\n",(numkid-1));
	X    }
	X
	X    for (i = numkid-1; i >= 0; i--) {
	X	if (i != dist) {
	X	    write_public(object_get_nthobj(i,obj));
	X	} else {
	X	    write_public(object_get_nthobj(i,obj));
	X	}
	X    }
	X    write_attr(object_get_attr(obj));
	X    write_infolist(object_get_info(obj),obj);
	X    fprintf(fd,"+\n");
	X}
	Xwrite_obj(obj)
	XOBPtr obj;
	X{
	X    int i,numtl,numkid,numtemp;
	X    fprintf(fd,"%s\n",object_get_name(obj));
	X    write_script(fd,object_get_label(obj));
	X    write_script(fd,object_get_script(obj));
	X    numtl = object_get_numtl(obj);
	X    fprintf(fd,"%d\n",numtl);
	X    for (i = numtl-1; i >= 0; i--) {
	X	write_tl(object_get_nthtl(i,obj));
	X    }
	X    numtemp = object_get_numtemps(obj);
	X    fprintf(fd,"%d\n",numtemp);
	X    for (i = numtemp-1; i >= 0; i--) {
	X	object_write_temp(obj,i,fd);
	X    }
	X    numkid = object_get_numchild(obj);
	X    fprintf(fd,"%d\n",numkid);
	X    for (i = numkid-1; i >= 0; i--) {
	X	write_obj(object_get_nthobj(i,obj));
	X    }
	X    write_attr(object_get_attr(obj));
	X    write_infolist(object_get_info(obj),obj);
	X    fprintf(fd,"+\n");
	X}
	X
	Xwrite_tl(tl)
	XTLPtr tl;
	X{
	X    int i,numitems;
	X    fprintf(fd,"%s\n",(tl_get_name(tl)));
	X    write_script(fd,tl_get_script(tl));
	X    write_script(fd,tl_get_bgtext(tl)); 
	X    numitems = tl_get_numitems(tl);
	X    fprintf(fd,"%d\n",numitems);
	X    for (i = 0; i < numitems; i++) {
	X	write_item(tl_get_nthitem(i,tl));
	X    }
	X    write_attr(tl_get_attr(tl));
	X}
	Xint name_of_item(x,obj)
	Xchar *x;
	XOBPtr obj;
	X{
	X    int i,j,m,n;
	X    TLPtr tl;
	X    n = object_get_numtemps(obj);
	X    for (i = 0; i < n; i++) {
	X	tl = object_get_nthtemptl(obj,i);
	X	m = tl_get_numitems(tl);
	X	for (j = 0; j < m; j++) {
	X	    if (strcmp(gen_absolute_itempname(tl_get_nthitem(j,tl)),x) == 0) {
	X		return 1;
	X	    }
	X	}
	X    }
	X    return 0;
	X}
	Xwrite_infolist(ilist,obj)
	XInfoList ilist;
	XOBPtr obj;
	X{
	X    if (ilist == NULL) {
	X	return;
	X    }
	X    if (name_of_item(inode_name(ilist),obj) ) {
	X	write_script(fd,inode_val(ilist));
	X	fprintf(fd,"%s\n",inode_name(ilist));
	X    }
	X    write_infolist(next_infonode(ilist),obj);
	X    return;
	X}
	X
	Xwrite_item(it)
	XITPtr it;
	X{
	X    Scolor sc;
	X    fprintf(fd,"%s\n",item_get_name(it));
	X    fprintf(fd,"%s\n",item_get_label(it));
	X    fprintf(fd,"%d\n",item_get_type(it));
	X    fprintf(fd,"%d\n",item_get_numc(it));
	X    write_script(fd,item_get_script(it));
	X    write_script(fd,item_get_def(it));
	X    write_script(fd,item_get_min(it));
	X    write_script(fd,item_get_max(it));
	X    write_script(fd,item_get_labels(it));
	X    write_script(fd,item_get_icon(it));
	X    write_script(fd,item_get_form(it));
	X    write_script(fd,item_get_dlen(it));
	X    write_attr(item_get_attr(it));
	X}
	Xwrite_attr(at)
	XAttrPtr at;
	X{
	X    Scolor sc;
	X    fprintf(fd,"%d %d %d %d %d %d\n",
	X		    attr_get_lux(at),
	X		    attr_get_luy(at),
	X		    attr_get_width(at),
	X		    attr_get_height(at),
	X		    attr_get_scr(at),
	X		    attr_get_type(at));
	X    write_script(fd,attr_get_col(at));
	X
	X}
	X
	XOBPtr load_over(fname,owner,level)
	Xchar *fname;
	XOBPtr owner;
	Xint level;
	X{   
	X    OBPtr obj;
	X    OBPtr super;
	X    int ord;
	X    FILE *fd1;
	X    char x[128];
	X    fd1 = fopen(fname,"r");
	X    if (fd1 == NULL) {
	X	sprintf(x,"Unable to open file \"%s\".\n",fname);
	X	confirm_ok(x);
	X	/*fprintf(stderr,"unable to open file:%s.\n",fname);*/
	X	return NULL;
	X    }
	X    read_env(fd1);
	X    super = object_get_owner(owner);
	X    ord = object_get_ord(super,owner);
	X    object_del(super,ord);
	X    obj = read_object(fd1,owner,level);
	X    object_add(obj,super,ord);
	X    fclose(fd1);
	X    fill_in_tree(obj);
	X    return obj;
	X}
	XOBPtr load_below(fname,owner,ord,level)
	Xchar *fname;
	XOBPtr owner;
	Xint ord;
	Xint level;
	X{
	X    OBPtr obj;
	X    OBPtr final;
	X    OBPtr super;
	X    obj = new_object("bs",owner);
	X    object_add(obj,owner,ord);    
	X    return load_over(fname,obj,level);   
	X}
	Xpp_item(fd,item)
	XFILE *fd;
	XITPtr item;
	X{
	X    fprintf(fd,"\tITEM NAME:%s\n",item_get_name(item));
	X    fprintf(fd,"\tITEM LABEL:%s\n",item_get_label(item));
	X    fprintf(fd,"\tITEM SCRIPT:\n");
	X    pp_script(fd,item_get_script(item));
	X}
	Xpp_tl(fd,tl)
	XFILE *fd;
	XTLPtr tl;
	X{
	X    int i,numitems;
	X    fprintf(fd,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
	X    fprintf(fd,"BACKGROUND NAME:%s\n",(gen_absolute_tlpname(tl)));
	X    fprintf(fd,"BACKGROUND SCRIPT:\n");
	X    pp_script(fd,tl_get_script(tl));
	X    numitems = tl_get_numitems(tl);
	X    fprintf(fd,"BACKGROUND ITEMS:%d\n",numitems);
	X    for (i = 0; i < numitems; i++) {
	X	fprintf(fd,"\t%s\n",item_get_name(tl_get_nthitem(i,tl)));
	X    }
	X    for (i = 0; i < numitems; i++) {
	X	pp_item(fd,tl_get_nthitem(i,tl));
	X    }
	X    fprintf(fd,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
	X}
	X
	Xpp_obj(fd,obj)
	XFILE *fd;
	XOBPtr obj;
	X{
	X    int i,numtl,numkid,numtemp;
	X
	X    fprintf(fd,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
	X    fprintf(fd,"OBJECT NAME  :%s\n",gen_absolute_pname(obj));
	X    fprintf(fd,"OBJECT SCRIPT:\n");
	X    pp_script(fd,object_get_script(obj));
	X    numtl = object_get_numtl(obj);
	X    fprintf(fd,"OBJECT BACKGROUNDS:%d\n",numtl);
	X    for (i = 0; i < numtl; i++) {
	X	fprintf(fd,"\t%s\n",gen_absolute_tlpname(object_get_nthtl(i,obj)));
	X    }
	X    numtemp = object_get_numtemps(obj);
	X    fprintf(fd,"OBJECT TEMPLATES:%d\n",numtemp);
	X    for (i = 0; i < numtemp; i++) {
	X	fprintf(fd,"\t%s\n",gen_absolute_tppname(object_get_nthtemptl(obj,i)));
	X    }
	X    numkid = object_get_numchild(obj);
	X    fprintf(fd,"OBJECT SUBOBJECTS:%d\n",numkid);
	X    for (i = 0; i < numkid; i++) {
	X	fprintf(fd,"\t%s\n",gen_absolute_pname(object_get_nthobj(i,obj)));
	X    }
	X    fprintf(fd,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
	X    for (i = 0; i < numtl; i++) {
	X	pp_tl(fd,object_get_nthtl(i,obj));
	X    }
	X
	X    for (i = 0; i < numkid; i++) {
	X	pp_obj(fd,object_get_nthobj(i,obj));
	X    }
	X}
	Xpretty_print(obj,fname)
	XOBPtr obj;
	XFILE *fname;
	X{
	X    FILE *fd;
	X    fd = fopen(fname,"w");
	X    if (fd == NULL) {
	X	fprintf(stderr,"unable to open file:%s.\n",fname);
	X	return NULL;
	X    }
	X    pp_obj(fd,obj);    
	X    fclose(fd);    
	X}
SHAR_EOF
if test 8798 -ne "`wc -c < 'fileio.c'`"
then
	echo shar: error transmitting "'fileio.c'" '(should have been 8798 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'fileio.h'" '(57 characters)'
if test -f 'fileio.h'
then
	echo shar: will not over-write existing file "'fileio.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'fileio.h'
	X
	Xvoid	save_obj();
	Xvoid	*load_below();
	Xvoid	*load_over();
SHAR_EOF
if test 57 -ne "`wc -c < 'fileio.h'`"
then
	echo shar: error transmitting "'fileio.h'" '(should have been 57 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'global.c'" '(24 characters)'
if test -f 'global.c'
then
	echo shar: will not over-write existing file "'global.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'global.c'
	Xint sigq_non_empty = 0;
SHAR_EOF
if test 24 -ne "`wc -c < 'global.c'`"
then
	echo shar: error transmitting "'global.c'" '(should have been 24 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'handler.c'" '(7556 characters)'
if test -f 'handler.c'
then
	echo shar: will not over-write existing file "'handler.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'handler.c'
	X#include <ctype.h>
	X#include "util.h"
	X#include "../archives/hash/shash.h"
	X#include "map.h"
	X#include "itemmod.h"
	X#include "tlmod.h"
	X#include "objmod.h"
	X#include "amcomp.h"
	X#include "pathname.h"
	X#include "../archives/container/container.h"
	X#include "../archives/mfile/mfile.h"
	X
	Xcompile_whole_handler(script,map,hash,report)
	XMapPtr map;
	XSHashTPtr hash;
	XContainer script;
	Xint report;
	X{
	X    char c;
	X    char buff[4096];
	X    int found,endfound;
	X    Container res;
	X    ObjectCode oc;
	X    int i,length;
	X    int lastmessageline = 0;
	X    int linecount = 0;
	X
	X    crewind(script);
	X    c = mfgetc(script);
	X    if (c == '\n') {
	X	linecount++;
	X    }
	X    found = 0;
	X    while ((c != EOF) && !found) {
	X	i = 0;
	X/* search for comment here */
	X        while((c != ':') && (c != '{') && (c != EOF)) {
	X	    if (c == '#') {
	X		while ((c != '\n') && (c != EOF)) {
	X		    c = mfgetc(script);
	X		    if (c == '\n') {
	X			linecount++;
	X		    }
	X		}
	X		continue;
	X	    }
	X	    if (!isspace(c)) {
	X		buff[i++] = c;
	X	    }
	X	    c = mfgetc(script);
	X	    if (c == '\n') {
	X		linecount++;
	X	    }
	X	}
	X	buff[i] = '\0';
	X/* search for comment here */
	X
	X	while ((c != '{') && (c != EOF)) {
	X	    if (c == '#') {
	X		while ((c != '\n') && (c != EOF)) {
	X		    c = mfgetc(script);
	X		    if (c == '\n') {
	X			linecount++;
	X		    }
	X		}
	X	    }
	X	    c = mfgetc(script);
	X	    if (c == '\n') {
	X		linecount++;
	X	    }
	X	}
	X	lastmessageline = linecount;
	X	endfound = 0;
	X	res = cnew_con();
	X	if (c == '{') {
	X	    while (!endfound && (c != EOF)) {
	X		mfputc(res,c);
	X		if (c == '}') {
	X		    c = mfgetc(script);
	X		    if (c == '\n') {
	X			linecount++;
	X		    }
	X		    if (c == '.') {
	X			endfound = 1;
	X			c = mfgetc(script);
	X			if (c == '\n') {
	X			    linecount++;
	X			}
	X		    } else {
	X			mfputc(res,c);
	X		    }
	X		} else {
	X		    c = mfgetc(script);
	X		    if (c == '\n') {
	X			linecount++;
	X		    }
	X		} 
	X	    }
	X	} 
	X	if (endfound) {
	X	    oc = compile(res,report,lastmessageline);
	X/* MARTIN MARTIN MARTIN */
	X/* Right here you can print out a message about which */
	X/* handlers (if any were successfully compiled. */
	X		if (oc != NULL) {
	X		    if (slookup(buff,hash) != NULL) {
	X			mywarning("duplicate message handler discarded\n");
	X		    } else {
	X			sadd_to_hash(mystrcpy(buff),hash,oc);
	X		    }
	X		}
	X		cdestroy(res);
	X	}
	X    }
	X}
	XObjectCode search_for_handlerv2(hash,message)
	XSHashTPtr hash;
	Xchar *message;
	X{
	X    char c;
	X    char *reg;
	X    int found,endfound;
	X    Container res;
	X    int i,n;
	X    MapPtr map;
	X    
	X    i = 0;
	X    while (1) {
	X	reg = (char *) shash_get_nth(hash,i);
	X	if (reg == NULL) {
	X	    break;
	X	}
	X	i++;
	X	if (strcmp(message,reg) == 0) {
	X	    return (ObjectCode) slookup(reg,hash);
	X	}
	X    }
	X    return NULL;
	X}
	Xvoid deallocate_msghandlers(hash)
	XSHashTPtr hash;
	X{
	X    char c;
	X    char *reg;
	X    int found,endfound;
	X    Container res;
	X    int i,n;
	X    MapPtr map;
	X    
	X    i = 0;
	X    while (1) {
	X	reg = (char *) shash_get_nth(hash,i);
	X	if (reg == NULL) {
	X	    break;
	X	} else {
	X	    if (slookup(reg,hash) != NULL) {
	X		free(slookup(reg,hash));
	X	    }
	X	}
	X	i++;
	X    }
	X    return;
	X}
	X
	Xstatic
	X    int tlnum;
	X/*  The code commented out below send a signal when passing up the tree */
	X/*  to every pane on an object.  As it stands now inheritance goes      */
	X/*  purely up the object backbone, requiring an object specific         */
	X/*  dispatching of messages to panes, if panes are to catch non-target  */
	X/*  ed messages.							*/
	X
	X/* MARTIN MARTIN MARTIN							*/
	X/* The simplest way to implement a trace feature is to print out the    */
	X/* cflatten(param) here with a message like "object "object_get_name(   */
	X/* refobj) " received message " message" with param " cflatten(param)   */
	X/* You'll have to differentiate between the 3 entity types . */
	X/* Right before you dive down an "execute script" path, you could pring */
	X/* out a message like "entity"XXX" caught message "soandso" and then    */
	X/* "entity"XXX" returning value "result".                               */
	X
	XContainer handler(refobj,reftl,refitem,message,param,otarget)
	XOBPtr refobj;
	XTLPtr reftl;
	XITPtr refitem;
	Xchar *message;
	XContainer param;
	Xchar *otarget;
	X{
	X    Container xscript;
	X    Container result;
	X    Container self;
	X    ObjectCode oc;
	X    char *x;
	X    if (refobj == NULL) {
	X	return cnew_con();
	X    }
	X    if ((refitem == NULL) && (reftl == NULL)) {
	X	oc = search_for_handlerv2(object_get_msgstab(refobj),message);
	X	if (oc == NULL) {
	X		return handler(object_get_owner(refobj),
	X			NULL,NULL,message,param,otarget);		
	X	} else {
	X	    x = gen_absolute_pname(refobj);
	X	    self = cnew_constring(x);
	X	    result = execute_script(oc,refobj,param,otarget,self);
	X	    free(x);
	X	    cdestroy(self);
	X	    return result;
	X	}
	X    } else if (refitem == NULL) {
	X	oc = search_for_handlerv2(tl_get_msgstab(reftl),message);
	X	if (oc == NULL) {
	X		return handler(refobj,
	X			NULL,NULL,message,param,otarget);		
	X	} else {
	X	    x = gen_absolute_tlpname(reftl);
	X	    self = cnew_constring(x);	    
	X	    result = execute_script(oc,refobj,param,otarget,self);
	X	    free(x);
	X	    cdestroy(self);
	X	    return result;
	X	}    
	X    } else {
	X	oc = search_for_handlerv2(item_get_msgstab(refitem),message);
	X	if (oc == NULL) {
	X	    return handler(refobj,reftl,NULL,message,param,otarget);
	X	} else {
	X	    x = gen_itempname(refitem,refobj,reftl);
	X	    self = cnew_constring(x);
	X	    result = execute_script(oc,refobj,param,otarget,self);
	X	    free(x);
	X	    cdestroy(self);
	X	    return result;
	X	}    
	X    }
	X}
	X/*  This function sends a message to every object of a tree below */
	X/*  the root node.  Traversal is depth first.			   */
	Xbroadcast(refobj,msg,param)
	XOBPtr refobj;
	Xchar *msg;
	XContainer param;
	X{
	X    int i,n;
	X    OBPtr obj;
	X    char *otarget;
	X    Container self;
	X    ObjectCode oc;
	X    if (refobj == NULL) {
	X	return;
	X    }
	X    otarget = gen_absolute_pname(refobj);
	X    self = cnew_constring(otarget);
	X    oc = search_for_handlerv2(object_get_msgstab(refobj),msg);
	X
	X/* MARTIN MARTIN MARTIN */
	X/* Right here you could print out "message="msg"sent to object" */
	X/* by broadcast.  This would let you see the timing of signals. */
	X    if (oc != NULL) {
	X	execute_script(oc,refobj,param,otarget,self);
	X    }
	X/* You could also cacth the return value of the above script and */
	X/* print it out as a return value.				 */
	X    cdestroy(self);
	X    free(otarget);
	X    n = object_get_numchild(refobj);
	X    for (i = 0; i < n; i++) {
	X	obj = object_get_nthobj(i,refobj);
	X	broadcast(obj,msg,param);
	X    }
	X}
	Xvoid compile_object_script(obj,rep)
	Xint rep;
	XOBPtr obj;
	X{
	X    deallocate_msghandlers(object_get_msgstab(obj));
	X    unmake_map(object_get_msgsmap(obj));
	X    sunmake_hash(object_get_msgstab(obj));
	X    object_set_msgsmap(obj,make_map());
	X    object_set_msgstab(obj,smake_hash());
	X    Sinit_hash(3,object_get_msgstab(obj));
	X    compile_whole_handler(object_get_script(obj),
	X	object_get_msgsmap(obj),
	X	object_get_msgstab(obj),rep);
	X}
	X
	Xvoid compile_item_script(it,rep)
	Xint rep;
	XITPtr it;
	X{
	X    deallocate_msghandlers(item_get_msgstab(it));
	X    unmake_map(item_get_msgsmap(it));
	X    sunmake_hash(item_get_msgstab(it));
	X    item_set_msgsmap(it,make_map());
	X    item_set_msgstab(it,smake_hash());
	X    Sinit_hash(3,item_get_msgstab(it));
	X    compile_whole_handler(item_get_script(it),
	X	item_get_msgsmap(it),
	X	item_get_msgstab(it),rep);
	X}
	X
	Xvoid compile_tl_script(tl,rep)
	Xint rep;
	XTLPtr tl;
	X{
	X    deallocate_msghandlers(tl_get_msgstab(tl));
	X    unmake_map(tl_get_msgsmap(tl));
	X    sunmake_hash(tl_get_msgstab(tl));
	X    tl_set_msgsmap(tl,make_map());
	X    tl_set_msgstab(tl,smake_hash());
	X    Sinit_hash(3,tl_get_msgstab(tl));
	X    compile_whole_handler(tl_get_script(tl),
	X	tl_get_msgsmap(tl),
	X	tl_get_msgstab(tl),rep);
	X}
SHAR_EOF
if test 7556 -ne "`wc -c < 'handler.c'`"
then
	echo shar: error transmitting "'handler.c'" '(should have been 7556 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'handler.h'" '(18 characters)'
if test -f 'handler.h'
then
	echo shar: will not over-write existing file "'handler.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'handler.h'
	X
	Xvoid *handler();
SHAR_EOF
if test 18 -ne "`wc -c < 'handler.h'`"
then
	echo shar: error transmitting "'handler.h'" '(should have been 18 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'hash.c'" '(2961 characters)'
if test -f 'hash.c'
then
	echo shar: will not over-write existing file "'hash.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'hash.c'
	X/*  hash.c -- hype requires many a fine young hash table so that it can have */
	X/*  roughly constant time lookups for most of it's stuff.  This file is an   */
	X/*  attempt at a general hash table maintenance module.			     */
	X
	X
	X#include "../../src/util.h"
	X
	Xtypedef struct hnode {
	X	struct hnode	    *next;
	X	void 		    *val;
	X	char		    *ptr;
	X} Hnode,*HnodePtr;
	X
	Xtypedef struct hash {
	X	int		    size;
	X	HnodePtr	    *entry;
	X} HashT,*HashTPtr;
	X
	XHashTPtr make_hash()
	X{
	X    HashTPtr temp;
	X    temp = (HashTPtr) malloc(sizeof(HashT) * 1);
	X    temp->entry = NULL;
	X    temp->size = 0;
	X}
	Xvoid	unmake_hnode_list(ptr)
	XHnodePtr ptr;
	X{
	X    if (ptr != NULL) {
	X	unmake_hnode_list(ptr->next);
	X	free(ptr);
	X    }
	X}
	Xvoid	unmake_hash(hash)
	XHashTPtr hash;
	X{   
	X    int i;
	X    for (i = 0; i < hash->size; i++) {
	X        unmake_hnode_list(hash->entry[i]);
	X    }
	X    free(hash->entry);
	X    free(hash);
	X}
	X
	XHnodePtr make_hnode()
	X{
	X    HnodePtr temp;
	X    temp = (HnodePtr) malloc(sizeof(Hnode) * 1);
	X    temp->val = 0;
	X    temp->next = NULL;
	X    temp->ptr  = NULL;
	X    return temp;
	X}
	Xvoid init_hash( size, hash)
	Xint size;
	XHashTPtr hash;
	X{
	X    int i;
	X    hash->size = size;
	X    hash->entry = (HnodePtr *) malloc(sizeof(HnodePtr) * size);
	X    for ( i = 0; i < size; i++) {
	X	hash->entry[i] = NULL;
	X    }
	X}
	X
	Xint hashval( x, size)
	Xint x;
	Xint size;
	X{
	X    int f;
	X    f = x & 0x000f;
	X    f *= ((x & 0x0f00) >> 16);
	X    f += ((x & 0x00f0) >> 8);
	X    f += ((x & 0xf000) >> 24) * 3;
	X    return abs(f) % size;
	X}
	X
	Xdelete_from_hash(val, hash)
	Xvoid *val;
	XHashTPtr hash;
	X{
	X    int fval;
	X    HnodePtr temp,cur;
	X    fval = hashval(val,hash->size);
	X    cur = hash->entry[fval];
	X    if (cur == NULL) {
	X	mywarning("hash.c: tried to delete non-existent element from hash table\n");
	X    }
	X    if (cur->val == val) {
	X	hash->entry[fval] = cur->next;
	X	free(cur);
	X	return;
	X    }
	X    while ((cur->next != NULL) && ((cur->next->val != val))) {
	X	cur = cur->next;
	X    }
	X    if (cur->next == NULL) {
	X	return;
	X/*	mywarning("hash.c: element to delete not found\n"); */
	X    } else {
	X	temp = cur->next;
	X	cur->next = cur->next->next;
	X	free(temp);
	X    }
	X}
	X
	Xchar *hlookup(val,hash)
	XHashTPtr hash;
	Xvoid *val;
	X{
	X    int fval;
	X    HnodePtr cur;
	X    fval = hashval(val,hash->size);
	X    cur = hash->entry[fval];
	X    if (cur == NULL) {
	X	return NULL;
	X    }
	X    if (cur->val == val) {
	X	return cur->ptr;
	X    }
	X    while (cur != NULL) {
	X	if (cur->val == val) {
	X	    return cur->ptr;
	X	} else {
	X	    cur = cur->next;
	X	}
	X    }
	X    return NULL;
	X}
	Xadd_to_hash(val, hash, ptr)
	Xvoid *val;
	Xchar *ptr;
	XHashTPtr hash;
	X{
	X    HnodePtr temp,cur;
	X    int fval;
	X    if (hlookup(val,hash) != NULL) {
	X	mywarning("duplicate hash key attempted\n");
	X	return NULL;
	X    }
	X	
	X    temp = make_hnode();
	X    temp->val = val;
	X    temp->next = NULL;
	X    temp->ptr = ptr;
	X    fval = hashval(val,hash->size);
	X    cur = hash->entry[fval];
	X
	X    if (cur == NULL) {
	X	hash->entry[fval] = temp;
	X    } else {
	X	temp->next = hash->entry[fval];
	X	hash->entry[fval] = temp;
	X    }
	X}
SHAR_EOF
if test 2961 -ne "`wc -c < 'hash.c'`"
then
	echo shar: error transmitting "'hash.c'" '(should have been 2961 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'hype.c'" '(2191 characters)'
if test -f 'hype.c'
then
	echo shar: will not over-write existing file "'hype.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'hype.c'
	X#include "interface.h"
	X#include "sighandler.h"
	X#include <stdio.h>
	X#include <sys/time.h>
	X#include <sys/resource.h>
	X
	Xstruct itimerval value;
	X
	Xmain (argc, argv)
	Xint	argc;
	Xchar	*argv[];
	X{
	X    malloc_debug(1);
	X    gsigflag = TOPLEVEL;
	X    svsignal(SIGINT,oninterrupt);
	X    svsignal(SIGCHLD,onsigchild);
	X    svsignal(SIGALRM,onsigalarm);
	X    set_alarm();    
	X    parse_args(argc,argv);
	X    init_objmod();
	X    init_amcomp();
	X    init_screen();
	X    init_textboard();
	X    init_clipboard();
	X    init_interface();
	X    fire_it_up();
	X}
	Xset_alarm()
	X{
	X    value.it_interval.tv_sec = 1;
	X    value.it_interval.tv_usec = 0;
	X    value.it_value.tv_sec = 1;
	X    value.it_value.tv_usec = 0;
	X    setitimer(ITIMER_REAL,&value,NULL);
	X}
	X
	Xparse_args(argc,argv)
	Xint argc;
	Xchar *argv[];
	X{
	X    char *str;
	X    int i;
	X    str = (char *) getenv("HYPE_PUBLIC");
	X    set_public(str);
	X    str = (char *) getenv("HYPE_STATE");
	X    set_state(str);
	X    str = (char *) getenv("USER");
	X    if (str == NULL) {
	X	fprintf(stderr,"USER environment variable not set!");
	X	exit(0);
	X    }
	X    set_user(str);
	X    str = (char *) getenv("HYPE_HANGBELOW");
	X    set_dpath(str);
	X
	X    str = (char *) getenv("HYPE_PRIVILEGE");
	X    set_superuser(str);
	X    str = (char *) getenv("HYPE_INIT_SCRIPT");
	X    set_init_script(str);
	X    str = (char *) getenv("HYPE_EDITOR");
	X    set_editor(str);
	X    
	X    i = 1;
	X    while (i < argc) {
	X	if (argv[i][0] != '-') {
	X	    i++;
	X	    continue;
	X	}
	X	switch (argv[i][1]) {
	X	    case 'P':
	X		set_public(argv[i]+2);
	X	    break;
	X	    case 'S':
	X		set_state(argv[i]+2);
	X	    break;
	X	    case 'I':
	X		set_init_script(argv[i]+2);
	X	    break;
	X	    case 'W':
	X		set_superuser(argv[i]+2);
	X	    break;
	X	    case 'B':
	X		set_dpath(argv[i]+2);
	X	    break;
	X	    case 'E':
	X		set_editor(argv[i]+2);
	X	    break;
	X	    case 'p':
	X		set_public(NULL);
	X	    break;
	X	    case 's':
	X		set_state(NULL);
	X	    break;
	X	    case 'i':
	X		set_init_script(NULL);
	X	    break;
	X	    case 'w':
	X		set_superuser(NULL);
	X	    break;
	X	    case 'b':
	X		set_dpath(NULL);
	X	    break;
	X	    case 'e':
	X		set_editor(NULL);
	X	    break;
	X	    default:
	X		
	X	    break;
	X	}
	X	i++;
	X    }
	X    if ((argc > 1) && (argv[argc-1][0] != '-')) {
	X	set_init_arg(argv[argc-1]+0 );
	X    }
	X    
	X}
	X
SHAR_EOF
if test 2191 -ne "`wc -c < 'hype.c'`"
then
	echo shar: error transmitting "'hype.c'" '(should have been 2191 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'y.tab.h'" '(1024 characters)'
if test -f 'y.tab.h'
then
	echo shar: will not over-write existing file "'y.tab.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'y.tab.h'
	X
	Xtypedef union  {
	X	char	*text;
	X	Inst	inst;
	X	int	pc;
	X	struct {
	X	int	pc;
	X	int	narg;
	X	}	pcx;
	X} YYSTYPE;
	Xextern YYSTYPE yylval;
	X# define VAR 257
	X# define NAME 258
	X# define NUMBER 259
	X# define IF 260
	X# define THEN 261
	X# define REPEAT 262
	X# define WHILE 263
	X# define FOR 264
	X# define LPAREN 265
	X# define RPAREN 266
	X# define LBRACE 267
	X# define RBRACE 268
	X# define ELSE 269
	X# define DQSTRING 270
	X# define SQSTRING 271
	X# define BACKGROUND 272
	X# define STRING 273
	X# define SC 274
	X# define EQUAL 275
	X# define OBJECTDESIG 276
	X# define BGDESIG 277
	X# define ITEMDESIG 278
	X# define COMMA 279
	X# define AND 280
	X# define OR 281
	X# define NOT 282
	X# define CEQUAL 283
	X# define NEQUAL 284
	X# define LTOREQ 285
	X# define GTOREQ 286
	X# define LESSTHAN 287
	X# define GREATERTHAN 288
	X# define RETURN 289
	X# define MYERRTOKEN 290
	X# define CONCAT 291
	X# define PLUS 292
	X# define MINUS 293
	X# define STAR 294
	X# define SLASH 295
	X# define BREAK 296
	X# define CONTINUE 297
	X# define PLUSPLUS 298
	X# define LONEQUOTE 299
	X# define MINUSMINUS 300
	X# define BUILTIN 301
SHAR_EOF
if test 1024 -ne "`wc -c < 'y.tab.h'`"
then
	echo shar: error transmitting "'y.tab.h'" '(should have been 1024 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'visual.c'" '(1776 characters)'
if test -f 'visual.c'
then
	echo shar: will not over-write existing file "'visual.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'visual.c'
	X
	X
	X#include "util.h"
	X#include "itemmod.h"
	X#include "tlmod.h"
	X#include "objmod.h"
	X#include "deque.h"
	X#include "../archives/container/container.h"
	X#include "handler.h"
	X#include "pathname.h"
	X#include "interface.h"
	X
	X
	Xvoid show_obj(obj)
	XOBPtr obj;
	X{
	X    char *target;
	X    Container c;
	X    if (!object_open(obj)) {
	X	add_frontq(obj,1+object_get_numtemps(obj),0);
	X        draw_obj(obj);
	X	c = cnew_con();
	X	target = gen_absolute_pname(obj);
	X	handler(obj,NULL,NULL,"objectOpen",c,target);
	X	cdestroy(c);
	X	free(target);
	X    }
	X}
	X
	Xvoid open_tl(tl)
	XTLPtr tl;
	X{
	X    if (!tl_open(tl)) {
	X	add_frontq(tl,2,1);
	X	draw_tl_frame(tl);	
	X    }
	X}
	X
	Xvoid close_tl(tl)
	XTLPtr tl;
	X{
	X    if (tl_open(tl)) {
	X	if (last_window()) {
	X	    return;
	X	}
	X	del_q(tl);
	X	undraw_tl_frame(tl); 
	X    }
	X}
	Xvoid refreshvalues(obj)
	XOBPtr obj;
	X{
	X    if (object_open(obj)) {
	X	get_values(obj);
	X    }
	X}
	Xvoid close_then_open(obj)
	XOBPtr obj;
	X{
	X    if (object_open(obj)) {
	X        get_values(obj);
	X	del_q(obj);
	X	undraw_obj(obj);
	X    }
	X    show_obj(obj);    
	X}
	Xvoid close_obj(obj)
	XOBPtr obj;
	X{
	X    Container c;
	X    char *target;
	X    if (object_open(obj)) {
	X        get_values(obj);
	X	if (last_window()) {
	X	    return;
	X	}
	X	del_q(obj);
	X        undraw_obj(obj);
	X	c = cnew_con();
	X	target = gen_absolute_pname(obj);
	X	handler(obj,NULL,NULL,"objectClose",c,target);
	X	cdestroy(c);
	X	free(target);
	X    }
	X}
	XString vis_dialogue(quest)
	XString quest;
	X{
	X    return (String) scr_dialogue(quest);
	X}
	Xint vis_choose(quest,first,second)
	XString quest,first,second;
	X{
	X    return scr_choose(quest,first,second);
	X}
	X
	Xvoid hide_obj()
	X{
	X    
	X}
	Xvoid vis_info_tl(tl)
	XTLPtr tl;
	X{
	X    scr_info_tl(tl);
	X}
	Xvoid vis_info_box(obj)
	XOBPtr obj;
	X{
	X    scr_info_box(obj);
	X    return;
	X}
	Xvoid vis_info_item(item,tl)
	XITPtr item;
	XTLPtr tl;
	X{
	X    scr_info_item(item,tl);
	X    return;
	X}
SHAR_EOF
if test 1776 -ne "`wc -c < 'visual.c'`"
then
	echo shar: error transmitting "'visual.c'" '(should have been 1776 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'visual.h'" '(93 characters)'
if test -f 'visual.h'
then
	echo shar: will not over-write existing file "'visual.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'visual.h'
	X
	Xvoid show_obj();
	Xvoid hide_obj();
	Xvoid show_test();
	Xchar *vis_dialogue();
	Xint vis_choose();
SHAR_EOF
if test 93 -ne "`wc -c < 'visual.h'`"
then
	echo shar: error transmitting "'visual.h'" '(should have been 93 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'util.c'" '(4304 characters)'
if test -f 'util.c'
then
	echo shar: will not over-write existing file "'util.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'util.c'
	X#include <malloc.h>
	X#include <ctype.h>
	X#include <stdio.h>
	X#include "../archives/container/container.h"
	X#include "../archives/mfile/mfile.h"
	X#include "objmod.h"
	X#include "util.h"
	X
	X
	X
	Xchar *mystrcpy(str)
	Xchar *str;
	X{
	X    int i,j;
	X    char *temp;
	X    i = strlen(str);
	X    i++;
	X    temp = (char *) malloc( sizeof(char) * i);
	X    for (j = 0;j < i; j++) {
	X	temp[j] = str[j];
	X    }
	X    return temp;
	X}
	Xchar *mystrcat(x,y)
	Xchar *x,*y;
	X{
	X    char c[4096];
	X    c[0] = '\0';
	X    strcat(c,x);
	X    strcat(c,y);
	X    return mystrcpy(c);
	X}
	Xchar *int_to_string(i)
	Xint i;
	X{
	X    char x[100];
	X    sprintf(x,"%d\0",i);
	X    return mystrcpy(x);
	X}
	Xchar *fgetline(fd)
	XFILE *fd;
	X{
	X    char c;
	X    char str[256];
	X    int i = 0;
	X    c = getc(fd);
	X    
	X    
	X    while (c != '\n') {
	X	str[i++] = c;
	X	c = getc(fd);
	X    }
	X    str[i] = '\0';
	X    return mystrcpy(str);
	X}
	Xchar *carets_out(x)
	Xchar *x;
	X{
	X    char *z,*y;
	X    int i,j,n;
	X    n = strlen(x);
	X    y = (char *) malloc(n * 4);
	X    j = 0;
	X    for (i = 0; i < n; i++) {
	X	if (x[i] == '^') {
	X	    y[j++] = '\\';
	X	    y[j++] = x[i];
	X	    y[j++] = '\\';
	X	} else {
	X	    y[j++] = x[i];
	X	}
	X    }
	X    y[j] = '\0';
	X    z = mystrcpy(y);
	X    free(y);
	X    return z;
	X    
	X}
	Xvoid write_script(fd,cont)
	XFILE *fd;
	XContainer cont;
	X{
	X    char *x,*y;
	X    fprintf(fd,"^\n");
	X    x = cflatten(cont);
	X    y = carets_out(x);
	X    fprintf(fd,"%s",y);
	X    free(x);
	X    free(y);
	X    fprintf(fd,"^\n");
	X}
	Xvoid pp_script(fd,cont)
	XFILE *fd;
	XContainer cont;
	X{
	X    char *x;
	X    x = cflatten(cont);
	X    fprintf(fd,"%s",x);
	X    free(x);
	X}
	Xvoid read_script(fd,cont)
	XFILE *fd;
	XContainer cont;
	X{
	X    char c;
	X    crewind(cont);
	X    c = getc(fd);
	X    if (c != '^') {
	X	mywarning("Improperly Formatted State File.\n");
	X	exit(0);
	X    }
	X    c = getc(fd);
	X    if (c != '\n') {
	X	mywarning("Improperly Formatted State File.\n");
	X	exit(0);
	X    }
	X    c = getc(fd);
	X    while (c != '^') {
	X	if (c == '\\') {
	X	    c = getc(fd);
	X	    if (c == '^') {
	X		c = getc(fd);
	X		if (c == '\\') {
	X		    mfputc(cont,'^');
	X		    c = getc(fd);    
	X		} else {
	X		    mfputc(cont,'\\');
	X		    return;		    
	X		}
	X	    } else {
	X		mfputc(cont,'\\');
	X	    }
	X	} else {
	X	    mfputc(cont,c);
	X	    c = getc(fd);
	X    	}
	X    }
	X    ungetc(c,fd);
	X    c = getc(fd);
	X    if (c != '^') {
	X	mywarning("Improperly Formatted State File.\n");
	X	exit(0);
	X    }
	X    c = getc(fd);
	X    if (c != '\n') {
	X	mywarning("Improperly Formatted State File.\n");
	X	exit(0);
	X    }
	X    ctrunc(cont);
	X}
	X
	Xchar *escapesout(x)
	Xchar *x;
	X{
	X    char *y;
	X    int i = 0;
	X    if (x == 0)
	X	return mystrcpy("");
	X
	X    y = (char *) malloc(strlen(x) * 1);
	X    while(*x != '\0') {
	X	if (*x == '\\') {
	X	    switch (x[1]) {
	X		case 'n':
	X		    y[i] = '\n';
	X		break;
	X		case 't':
	X		    y[i] = '\t';
	X		break;
	X		case '\\':
	X		    y[i] = '\\';
	X		break;
	X		case '\'':
	X		    y[i] = '\'';
	X		break;
	X		case '\"':
	X		    y[i] = '\"';
	X		break;
	X		case '0':
	X		    y[i] = '\0';
	X		break;
	X		default:
	X		    y[i++] = x[0];
	X		    y[i] = x[1];
	X		break;
	X	    }
	X	    x++;
	X	    x++;
	X	} else {
	X	    y[i] = *x++;
	X	}
	X	i++;
	X    }
	X    y[i] = '\0';
	X    x = mystrcpy(y);
	X    free(y);
	X    return x;
	X}
	X
	Xchar *escapesin(x)
	Xchar *x;
	X{
	X    char *y;
	X    int i;
	X    i = 0;
	X    if (x == NULL)
	X	return mystrcpy("");
	X    y = (char *) malloc(strlen(x) * 2); 
	X    while(*x != '\0') {
	X	switch(*x) {
	X	case '\n':
	X	    y[i++] = '\\';
	X	    y[i++] = 'n';
	X	break;
	X	case '\t':
	X	    y[i++] = '\\';
	X	    y[i++] = 't';
	X	break;
	X	case '\"':
	X	    y[i++] = '\\';
	X	    y[i++] = '\"';	
	X	break;
	X	case '\'':
	X	    y[i++] = '\\';
	X	    y[i++] = 'n';	
	X	break;
	X	case '\\':
	X	    y[i++] = '\\';
	X	    y[i++] = 'n';	
	X	break;
	X	default:
	X	    y[i++] = *x;
	X	break;
	X	}    
	X	x++;
	X    }
	X    y[i] = '\0';
	X    x = mystrcpy(y);
	X    free(y);
	X    return x;
	X}
	Xint only_digits(x)
	Xchar *x;
	X{
	X    int i;
	X    char a[128];
	X    i = 0;
	X    while (x[i] != '\0') {
	X	if ((!isdigit(x[i])) && (!(x[i] == '-')) && (!(x[i] == '.'))
	X	    && (!isspace(x[i])) && (!(x[i] == '+'))) {
	X	    return 0;
	X	}
	X	i++;
	X    }
	X    if (i == 0) {
	X	return 0;
	X    }
	X    return 1;
	X}
	Xint is_a_number(x)
	Xchar *x;
	X{
	X    double f;
	X    f = atof(x);
	X    if (f != 0.0)
	X	return 1;
	X    if (x[0] == '0')
	X	return 1;
	X    if ((x[0] == '-')   && (x[1] == '0'))
	X	return 1;
	X    if ((x[0] == '+') && (x[1] == '0')) {
	X	return 1;
	X    }
	X    return 0;
	X}
	Xvoid close_all()
	X{
	X    int i,n;
	X    n = getdtablesize();
	X    for (i = 3; i < n; i++) {
	X	close(i);
	X    }
	X}
SHAR_EOF
if test 4304 -ne "`wc -c < 'util.c'`"
then
	echo shar: error transmitting "'util.c'" '(should have been 4304 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'util.h'" '(1320 characters)'
if test -f 'util.h'
then
	echo shar: will not over-write existing file "'util.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'util.h'
	X/*  util.h -- This file contains some minor routines and macros to make */
	X/*  my code read better, and hence has nothing to do with the desing of */
	X/*  hype.								*/
	X
	X#include <stdio.h>
	X#include <string.h>
	X
	X#define	    HYPE_TEXT	(0)
	X#define	    HYPE_BUTTON	(1)
	X#define	    HYPE_SLIDER	(2)
	X#define	    HYPE_TOGGLE (3)
	X#define	    HYPE_TEXTSW	(4)
	X
	X#define	    HYPE_TEXT_SIZE  (256)
	X#define	    READ_ONLY	    (0)
	X#define	    WRITABLE	    (1)
	X#define	    HYPE_SCROLL_V   (1<<0)
	X#define	    HYPE_SCROLL_H   (1<<1)
	X
	X#define	    REPORT	    1
	X#define	    NO_REPORT	    0
	X
	X#define	    NULL_TYPE	    0
	X#define	    OBJECT_TYPE	    1
	X#define	    TL_TYPE	    2
	X#define	    ITEM_TYPE	    3
	X
	X#define	    NOT_ONLY_REF    0
	X#define	    ONLY_REF	    1
	X
	X#define	    GONNA_SAVE	    1
	X#define	    NOT_GONNA_SAVE  0
	X
	X#define malloc(x) emalloc(x)
	X#define free(x) efree(x)
	X#define myerror(x) ({   \
	X			fprintf(stderr,x);  \
	X			exit(4);	    \
	X		    })
	X
	X
	X#define set_bit(n,x) (x = x | (1 << n))
	X
	X#define get_bit(n,x) (x & (1 << n))
	X
	Xchar *mystrcpy();
	X
	Xchar *mystrcat();
	X
	Xtypedef char		*String;
	X
	Xvoid *cur_com_frame;
	Xchar *fgetline();
	Xvoid read_script();
	Xchar *int_to_string();
	Xchar *escapesin();
	Xchar *escapesout();
	XString vis_dialogue();
	X
	X#define mywarning(x) ((String) confirm_ok(x))
	X
	X#define SIGPROCESS {if (sigq_non_empty) sigprocess();}
SHAR_EOF
if test 1320 -ne "`wc -c < 'util.h'`"
then
	echo shar: error transmitting "'util.h'" '(should have been 1320 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'test.hyp'" '(8640 characters)'
if test -f 'test.hyp'
then
	echo shar: will not over-write existing file "'test.hyp'"
else
sed 's/^	X//' << \SHAR_EOF > 'test.hyp'
	X!!!
	Xglobals=0
	XTutorial
	X^
	XMy Tutorial Root^
	X^
	X^
	X1
	XButtons
	X^
	X^
	X^
	X^
	X3
	XThermometer
	XThermometer
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("Thermometer");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X30 10 0 0 1 0
	X^
	X^
	XExit
	XExit
	X1
	X0
	X^
	XmouseUp:
	X{
	X	exit();
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X30 90 0 0 0 0
	X^
	X^
	XSandBox
	XSand Box
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("SandBox");
	X	close(".");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X30 50 0 0 65536 0
	X^
	X^
	X185 356 187 138 0 1
	X^
	X^
	X1
	X!Buttons
	X0 0 187 124 0 0
	X^
	X^
	X2
	XThermometer
	X^
	XThermometer^
	X^
	XdegreesC:
	X{
	X	newtemp = param();
	X	for(i = 0; i < numpanes(self()); i++) {
	X		pane = self() $$ "!" $$ i;
	X		for(j = 0; j < numitems(pane); j++) {
	X			item = getnthitem(pane, j);
	X			send("changeTo", item, newtemp);
	X		}
	X	}
	X}.
	XinitHype:
	X{
	X	if(param() == "thermometer")
	X		open(self());
	X}.
	X
	X^
	X1
	XMercury
	X^
	X^
	X^
	X^
	X3
	XC
	XC
	X1
	X0
	X^
	XmouseUp:
	X{
	X	close(".");
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 5 0 0 0 0
	X^
	X^
	XDegF
	XDeg F
	X2
	X0
	X^
	XmouseUp:
	X{
	X	value = getitemval(self());
	X	centigrade = 5.0 * ( value - 32 ) / 9.0;
	X	send("degreesC", self(), centigrade);
	X}.
	XchangeTo:
	X{
	X	farenheit = (9 * param() / 5) + 32;
	X	if(farenheit != getitemval(self()))
	X		setitemval(self(), farenheit);
	X}.
	X^
	X^
	X55^
	X^
	X32^
	X^
	X212^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X180^
	X10 50 0 0 0 0
	X^
	X^
	XDegC
	XDeg C
	X2
	X0
	X^
	XmouseUp:
	X{
	X	value = getitemval(self());
	X	send("degreesC", ".", value);
	X}.
	XchangeTo:
	X{
	X	celsius = param();
	X	if(celsius != getitemval(self()))
	X		setitemval(self(), celsius);
	X}.
	X^
	X^
	X^
	X^
	X0^
	X^
	X100^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X180^
	X10 30 0 0 255 0
	X^
	X^
	X742 432 389 93 0 1
	X^
	X^
	X1
	X!Mercury
	X0 0 389 93 0 0
	X^
	X^
	X0
	X748 272 399 116 32767 0
	X^
	X214 153 81^
	X^
	X212^
	X/Tutorial/Thermometer!Mercury#DegF
	X^
	X100^
	X/Tutorial/Thermometer!Mercury#DegC
	X+
	XSandBox
	X^
	XSand Box^
	X^
	X^
	X1
	XToys
	X^
	X^
	X^
	X^
	X5
	XScriptTest
	XScript  Test
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("RecursionTest");
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X20 10 0 0 1 0
	X^
	X^
	XC
	XC
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("..");
	X	close(".");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X280 10 0 0 0 0
	X^
	X^
	XX
	XX
	X1
	X0
	X^
	XmouseUp:
	X{
	X	exit();
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X280 40 0 0 0 0
	X^
	X^
	XProcessTest
	XProcess Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X	open("ProcessTest");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X20 40 0 0 668 0
	X^
	X^
	XSaveState
	XSave   State
	X1
	X0
	X^
	XmouseDown:
	X{
	X	savestate();
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X20 70 0 0 0 0
	X^
	X^
	X744 305 408 150 0 1
	X^
	X^
	X1
	X!Toys
	X0 0 399 109 0 0
	X^
	X^
	X2
	XRecursionTest
	X^
	XRecursionTest^
	X^
	X#
	X#	send the message param() with param param() to all items.
	X#
	XinterceptSelfBroadcast:
	X{
	X	for(i = 0; i < numpanes(self()); i++) {
	X		pane = getnthtl(self(), i);
	X		for(j = 0; j < numitems(pane); ++j) {
	X			item = getnthitem(pane, j);
	X			send(param(), item, param());
	X		}
	X	}
	X}.
	X
	X^
	X1
	XToys
	X^
	X^
	X^
	X
	X^
	X7
	XCount
	XCount:
	X0
	X0
	X^
	X
	X^
	X^
	X1^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10^
	X200 40 0 0 0 0
	X^
	X^
	XRecursionTest
	XRecursion Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X		count = getitemval("!Toys#Count");
	X		stderr("Recursion to depth " $$ count $$ " starting." );
	X		send("recurseDeeply", self(), count);
	X		stderr("Done.");
	X}.
	X
	XrecurseDeeply:
	X{
	X	count = param();
	X	if(--count > 1) 
	X		send("recurseDeeply", self(), count);
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 60 0 0 0 0
	X^
	X^
	XC
	XC
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("..");
	X	close(".");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X170 10 0 0 -1 0
	X^
	X^
	XMessageTest
	XMessage   Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X	count = getitemval("!Toys#Count");
	X	stderr("Passing " $$ count $$ " messages." );
	X	for(i = 0; i < count; i++)
	X		send("testMessage", self(), "");
	X	stderr("Done.");
	X}.
	X
	XtestMessage:
	X{
	X	return "";
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 35 0 0 12 0
	X^
	X^
	XScriptTest
	XScript    Test
	X1
	X0
	X^
	X#
	X#	master test script
	X#
	XmouseDown:
	X{
	X	testlist =
	X		"performBroadcastTest "	$$
	X		"performScriptTest "	$$
	X		"";
	X	count = getitemval("!Toys#Count");
	X	stderr("BEGIN hype test series -------------------------------------");
	X	for(i = 0; i < numwords(testlist); i++) {
	X		stderr("Test -- " $$ nthword(testlist, i));
	X		result = send(nthword(testlist, i), self(), count);
	X		if(result == "failure")
	X			stderr( "     FAILED.");
	X		else if(result == "success")
	X			stderr( "     ok.");
	X		else
	X			stderr( "     test not performed?");
	X	}
	X	stderr("END hype test series ---------------------------------------");
	X}.
	X#
	X#	test 1: broadcast a message to ".", which spreads it downward,
	X#		and acknowledge receipt.
	X#
	XperformBroadcastTest:
	X{
	X	count = param();
	X	setitemval(self(), "failure");
	X	broadcast("interceptSelfBroadcast", ".", "itemIntercept");
	X	if(getitemval(self()) != "success")
	X		return "failure";
	X	return "success";
	X}.
	XitemIntercept:
	X{
	X	setitemval(self(), "success");
	X}.
	X#
	X#	test 2: exercise script structures
	X#
	XperformScriptTest:
	X{
	X	tests =
	X		"performEvalAndCompare "	$$
	X		"performBreakContinue "	$$
	X		"";
	X	overall = "success";
	X	for(i = 0; i < numwords(tests); i++) {
	X		stderr("       Script test: " $$ nthword(tests, i));
	X		result = send(nthword(tests, i), self(), "");
	X		if(result == "failure") {
	X			overall = "failure";
	X			stderr("             FAILED.");
	X		} else if( result == "success") {
	X			stderr("             ok.");
	X		} else {
	X			stderr("             test not run?");
	X			overall = "failure";
	X		}
	X	}
	X	return overall;
	X}.
	X#
	X#	test 2.0: expression evaluation and relational testing
	X#
	XperformEvalAndCompare:
	X{
	X	score = "success";
	X
	X	i = 1;
	X	j = 0;
	X	if(	(i == j)
	X		|| (i <= 0) || (i > 1) || (i != 1)
	X		|| (j != 0) || (j > 0) || (j < 0)
	X	){
	X		stderr("number 1 failed");
	X		score = "failure";
	X	}
	X	if(	(i != j)
	X		&& (i == 1) && (i != -1) && (i - 1 == 0)
	X		&& (j == 0) && ( j != -1) && (j + 1 == i)
	X	){
	X	} else {
	X		stderr("number 2 failed");
	X		score = "failure";
	X	}
	X
	X	return score;
	X}.
	X#
	X#	test 2.1: check break and continue
	X#
	XperformBreakContinue:
	X{
	X	n = 31;
	X	limit = 99;
	X#
	X#	single-level break
	X#
	X	stderr(" --- single-level break test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n)
	X			break;
	X	}
	X	if(i == n)
	X		stderr( " --- --- success");
	X	else {
	X		stderr( " --- --- FAILURE  i == " $$ i);
	X		return "failure";
	X	}
	X#
	X#	multi-level break
	X#
	X	stderr(" --- multi-level break test:");
	X	for(i = 0; i < 5; i++) {
	X		for(j = 0; j < limit; j++)
	X			if(j == n)
	X				break;
	X		if(j != n) {
	X			stderr(" ---  --- FAILURE  j == " $$ j);
	X			return "failure";
	X		}
	X	}
	X	if(i == 5)
	X		stderr( " --- --- success");
	X	else {
	X		stderr( " --- --- FAILURE  i == " $$ i);
	X		return "failure";
	X	}
	X#
	X#	single-level continue
	X#
	X	stderr(" --- single-level continue test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n)
	X			continue;
	X		if(i == n) {
	X			stderr( " --- --- FAILURE in continue.");
	X			return "failure";
	X		}
	X	}
	X	stderr( " --- --- success");
	X#
	X#	multi-level continue
	X#
	X	stderr(" --- multi-level continue test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n) {
	X			for(j = 0; j < 7; j++) {
	X				if(j <= 4)
	X					continue;
	X				if(j == 5)
	X					break;
	X				if(j <= 4) {
	X					stderr( " --- --- inner continue bad.");
	X					return "failure";
	X				}
	X			}
	X			if(j != 5) {
	X				stderr(" --- inner break failed: " $$ j);
	X				return "failure";
	X			}
	X			continue;
	X		}
	X		if(i == n) {
	X			stderr( " --- --- FAILURE in outer continue.");
	X			return "failure";
	X		}
	X	}
	X	stderr( " --- --- success");
	X	return "success";
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 10 0 0 28 0
	X^
	X^
	XSaveState
	XSave State
	X1
	X0
	X^
	XmouseDown:
	X{
	X	savestate();
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X200 10 0 0 -2147483648 0
	X^
	X^
	XOpenClose
	XOpen Close
	X1
	X0
	X^
	XmouseDown:
	X{
	X	state = getitemval(self());
	X	Thing = "./Dummy";
	X	if(state == "open") {
	X		close(Thing);
	X		setitemval(self(), "");
	X		delobject(Thing);
	X	} else {
	X		it = makenewchild(".");
	X		setobjname(it, "Dummy");
	X		setobjlabel(Thing, "A Dummy Object");
	X		open(Thing);
	X		refresh(Thing);
	X		setobjcolor(Thing, "255 0 0");
	X		refresh(Thing);
	X		setitemval(self(), "open");
	X	}
	X	refresh(Thing);
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X200 60 0 0 0 0
	X^
	X^
	X772 243 349 126 0 1
	X^
	X^
	X1
	X!Toys
	X0 0 349 126 0 0
	X^
	X^
	X1
	XDummy
	X^
	XA Dummy Object^
	X^
	X^
	X0
	X0
	X0
	X872 548 232 90 0 0
	X^
	X255 0 0^
	X+
	X743 65 359 149 0 0
	X^
	X99 126 132^
	X^
	X33^
	X/Tutorial/SandBox/RecursionTest!Toys#Count
	X^
	Xsuccess^
	X/Tutorial/SandBox/RecursionTest!Toys#ScriptTest
	X^
	X^
	X/Tutorial/SandBox/RecursionTest!Toys#OpenClose
	X+
	XProcessTest
	X^
	XProcess Test Platform^
	X^
	X^
	X1
	XProcessControl
	X^
	X^
	X^
	X^
	X4
	XC
	XC
	X1
	X0
	X^
	XmouseUp:
	X{
	X	close(".");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X430 10 0 0 246513664 0
	X^
	X^
	XDelay
	XDelay
	X2
	X0
	X^
	X^
	X^
	X^
	X^
	X0^
	X^
	X60^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X60^
	X180 10 0 0 0 0
	X^
	X^
	XLaunch
	XLaunch
	X1
	X0
	X^
	XmouseDown:
	X{
	X	delay = getitemval("!ProcessControl#Launch");
	X	if(delay < 0)
	X		delay = 0;
	X	cmd = "sleep " $$ delay;
	X	r = unixbg(cmd);
	X	stderr("launch: " $$ r);
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 10 0 0 0 0
	X^
	X^
	XLaunchColorTool
	XLaunch Color Tool
	X1
	X0
	X^
	XmouseDown:
	X{
	X	r = unixbg("colortool");
	X	stderr(r);
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 60 0 0 -608 0
	X^
	X^
	X608 477 539 200 0 1
	X^
	X^
	X1
	X!ProcessControl
	X0 0 532 200 0 0
	X^
	X^
	X0
	X606 152 542 223 184 0
	X^
	X200 100 0^
	X^
	X48^
	X/Tutorial/SandBox/ProcessTest!ProcessControl#Delay
	X+
	X741 0 409 132 24 0
	X^
	X99 126 132^
	X+
	X753 0 197 149 0 0
	X^
	X132 92 83^
	X+
SHAR_EOF
if test 8640 -ne "`wc -c < 'test.hyp'`"
then
	echo shar: error transmitting "'test.hyp'" '(should have been 8640 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'textboard.c'" '(901 characters)'
if test -f 'textboard.c'
then
	echo shar: will not over-write existing file "'textboard.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'textboard.c'
	X#include "util.h"
	X#include "../archives/container/container.h"
	X#include "../archives/mfile/mfile.h"
	X
	Xstatic Container textboard;
	Xstatic char *tb;
	Xstatic int tb_correct;
	X
	Xinit_textboard()
	X{
	X    textboard = cnew_con();
	X    tb = cflatten(textboard);
	X    tb_correct = 1;
	X}
	Xedit_textboard()
	X{
	X    edit_cont(textboard,"Textboard");
	X    tb_correct = 0;
	X}
	Xappend_textboard_to_cont(cont)
	XContainer cont;
	X{
	X    mfseek(cont,0,2);
	X    if (!tb_correct) {
	X	free(tb);
	X	tb = cflatten(textboard);
	X	tb_correct = 1;
	X    }
	X    mfinsert(cont,tb,strlen(tb));
	X}
	Xprepend_textboard_to_cont(cont)
	XContainer cont;
	X{
	X    mfseek(cont,0,0);
	X    if (!tb_correct) {
	X	free(tb);
	X	tb = cflatten(textboard);
	X	tb_correct = 1;
	X    }
	X    mfinsert(cont,tb,strlen(tb));
	X}
	Xload_textboard(cont)
	XContainer cont;
	X{
	X    cdestroy(textboard);
	X    textboard = ccpy_con(cont);
	X    tb_correct = 0;
	X}
	XContainer get_textboard()
	X{
	X    return textboard;
	X}
SHAR_EOF
if test 901 -ne "`wc -c < 'textboard.c'`"
then
	echo shar: error transmitting "'textboard.c'" '(should have been 901 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tlmod.c'" '(5313 characters)'
if test -f 'tlmod.c'
then
	echo shar: will not over-write existing file "'tlmod.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'tlmod.c'
	X#include "util.h"
	X#include "../archives/hash/shash.h"
	X#include "objmod.h"
	X#include "itemmod.h"
	X#include "map.h"
	X#include "attr.h"
	X#include "../archives/container/container.h"
	X#include "pathname.h"
	X
	Xtypedef struct tl {
	X    String		name;
	X    Container		script;
	X    Container		bgtext;
	X    MapPtr		msgsmap;
	X    SHashTPtr		msgstab;
	X    OBPtr		owner;
	X    MapPtr		itemmap;
	X    SHashTPtr		itemtable;
	X    AttrPtr		attribs;
	X    int			ref_cnt;
	X} TL,*TLPtr;
	X
	X
	XAttrPtr tl_get_attr(tl)
	XTLPtr tl;
	X{
	X    return tl->attribs;    
	X}
	XString tl_get_name(tl)
	XTLPtr	tl;
	X{
	X    return tl->name;
	X}
	XTLPtr new_tl(name,owner)
	XOBPtr	owner;
	XString  name;
	X{
	X    TLPtr temp;
	X    temp = (TLPtr) malloc(sizeof(TL) * 1);
	X    temp->name = mystrcpy(name);
	X    temp->itemmap =    make_map();
	X    temp->itemtable = smake_hash();
	X    temp->owner = owner;
	X    temp->script = cnew_con();
	X    temp->bgtext = cnew_con();
	X    temp->msgsmap = make_map();
	X    temp->msgstab = smake_hash();
	X    Sinit_hash(1,temp->msgstab);
	X    temp->attribs = make_attr();
	X    temp->ref_cnt = 0;
	X    Sinit_hash(1,temp->itemtable);
	X    return temp;
	X}
	Xvoid tl_set_owner(tl,obj)
	XTLPtr tl;
	XOBPtr obj;
	X{
	X    tl->owner = obj;    
	X}
	XTLPtr tl_copy(tl)
	XTLPtr tl;
	X{
	X    TLPtr new;
	X    ITPtr it,tl_get_nthitem();
	X    void tl_add_item();
	X    char *name;
	X    int i,n;
	X    name = mystrcpy(tl->name);
	X    new = new_tl(name,NULL);
	X    n = tl_get_numitems(tl);
	X    for (i = 0; i < n; i++) {
	X	it = tl_get_nthitem(i,tl);
	X	tl_add_item(new,item_copy(it),i);
	X    }
	X    new->script = ccpy_con(tl->script);
	X    new->attribs = copy_attr(tl->attribs);
	X    new->bgtext = ccpy_con(tl->bgtext);
	X    free(name);
	X    compile_tl_script(new,0);
	X    return new;
	X}
	Xvoid tl_unmake(tl)
	XTLPtr tl;
	X{
	X    clipboard_report_dealloc(tl);
	X    free(tl->name);
	X    cdestroy(tl->script);
	X    cdestroy(tl->bgtext);
	X    unmake_map(tl->msgsmap);
	X    sunmake_hash(tl->msgstab);
	X    unmake_map(tl->itemmap);
	X    sunmake_hash(tl->itemtable);
	X    unmake_attr(tl->attribs);
	X}
	XMapPtr tl_get_msgsmap(tl)
	XTLPtr tl;
	X{
	X    return tl->msgsmap;
	X}
	XSHashTPtr tl_get_msgstab(tl)
	XTLPtr tl;
	X{
	X    return tl->msgstab;
	X}
	Xvoid tl_set_msgsmap(tl,map)
	XTLPtr tl;
	XMapPtr map;
	X{
	X    tl->msgsmap = map;
	X}
	Xvoid tl_set_msgstab(tl,tab)
	XTLPtr tl;
	XSHashTPtr tab;
	X{
	X    tl->msgstab = tab;
	X}
	XContainer tl_get_script(tl)
	XTLPtr tl;
	X{
	X    return tl->script;
	X}
	Xvoid tl_set_script(tl,script)
	XTLPtr tl;
	XContainer script;
	X{
	X    cdestroy(tl->script);
	X    tl->script = script;
	X}
	XContainer tl_get_bgtext(tl)
	XTLPtr tl;
	X{
	X    return tl->bgtext;
	X}
	Xvoid tl_set_bgtext(tl,bgtext)
	XTLPtr tl;
	XContainer bgtext;
	X{
	X    cdestroy(tl->bgtext);
	X    tl->bgtext = bgtext;
	X}
	Xvoid tl_set_color(tl,color)
	XTLPtr tl;
	XContainer color;
	X{
	X    attr_set_col(tl->attribs,color);
	X}
	XContainer tl_get_color(tl)
	XTLPtr tl;
	X{
	X    return attr_get_col(tl->attribs);    
	X}
	XTLPtr new_null_tl(owner)
	XOBPtr owner;
	X{
	X    TLPtr tl;
	X    tl =  new_tl("null",owner);
	X    return tl;
	X}
	Xint   tl_get_numitems(tl)
	XTLPtr tl;
	X{
	X    if (tl == NULL) {
	X	return 0;
	X    }
	X    return map_get_size(tl->itemmap);
	X}
	XOBPtr tl_get_owner(tl)
	XTLPtr tl;
	X{
	X    return tl->owner;
	X}
	XITPtr tl_get_nthitem(n,tl)
	Xint n;
	XTLPtr tl;
	X{
	X    return (ITPtr) map_get_nth(n,tl->itemmap);
	X}
	X
	X
	Xint tl_get_ref_cnt(tl)
	XTLPtr	tl;
	X{
	X    return tl->ref_cnt;
	X}
	Xvoid tl_inc_ref_cnt(tl)
	XTLPtr tl;
	X{
	X    tl->ref_cnt++;
	X}
	Xvoid tl_dec_ref_cnt(tl)
	XTLPtr tl;
	X{
	X    tl->ref_cnt--;
	X}
	X
	Xvoid tl_set_name(name,tl)
	XString name;
	XTLPtr tl;
	X{
	X    OBPtr owner;
	X    owner = tl->owner;
	X    sdelete_from_hash(tl->name,object_get_btable(owner),tl);
	X    free(tl->name);
	X    tl->name = mystrcpy(name);
	X    sadd_to_hash(tl->name,object_get_btable(owner),tl);
	X}
	X
	Xvoid tl_delete_item(tl,item)
	XTLPtr tl;
	XITPtr item;
	X{
	X    int i;
	X    for (i = 0; i < tl_get_numitems(tl); i++) {
	X	if (item == tl_get_nthitem(i,tl)) 
	X	    break;
	X    }
	X    sdelete_from_hash(item_get_name(item),tl->itemtable,item);
	X    del_from_map(i,tl->itemmap);
	X/*    put_item_clipboard(item,ONLY_REF);*/
	X}
	Xvoid	tl_add_item(tl,item,ord)
	XTLPtr	tl;
	XITPtr	item;
	Xint	ord;
	X{
	X    item_set_owner(item,tl);
	X    add_to_map(ord,item,tl->itemmap);
	X    sadd_to_hash(item_get_name(item),tl->itemtable,item);
	X}
	Xvoid tl_set_itemord(tl,item,ord)
	XTLPtr tl;
	XITPtr item;
	Xint	ord;
	X{
	X    int old;
	X    old = tl_get_ord_of_item(tl,item);
	X    del_from_map(old,tl->itemmap);
	X/*    if (ord >= tl_get_numitems(tl)) {
	X	ord = tl_get_numitems(tl) - 1;
	X    }
	X*/
	X    add_to_map(ord,item,tl->itemmap);
	X/*    tl_delete_item(tl,item);
	X    tl_add_item(tl,item,ord);
	X*/
	X    
	X}
	Xint tl_get_ord_of_item(tl,item)
	XTLPtr tl;
	XITPtr item;
	X{
	X    int i;
	X    int n;
	X    n = tl_get_numitems(tl);
	X    for (i = 0; i < n; i++) {
	X	if (tl_get_nthitem(i,tl) == item) {
	X	    break;
	X	}
	X    }
	X    return i;
	X}
	X
	Xvoid	tl_change_item_name(tl,item,old)
	XTLPtr tl;
	XITPtr item;
	XString old;
	X{
	X    	sdelete_from_hash(old,tl->itemtable,item);
	X	sadd_to_hash(item_get_name(item),tl->itemtable,item);
	X}
	XSHashTPtr tl_get_itable(tl)
	XTLPtr tl;
	X{
	X    return tl->itemtable;
	X}
	XTLPtr read_tl(fd,obj)
	XFILE *fd;
	XOBPtr obj;
	X{
	X    TLPtr tl;
	X    char *name;
	X    int numitems;
	X    int i;
	X
	X    name = fgetline(fd);
	X    tl = new_tl(name,obj);
	X    read_script(fd,tl->script);
	X    read_script(fd,tl->bgtext);
	X
	X    compile_tl_script(tl,NO_REPORT);
	X
	X    fscanf(fd,"%d\n",&numitems);
	X    for (i = 0; i < numitems; i++) {
	X	tl_add_item(tl,read_item(fd),i);
	X    }
	X    tl->attribs = read_attr(fd);
	X    return tl;
	X}
	X
SHAR_EOF
if test 5313 -ne "`wc -c < 'tlmod.c'`"
then
	echo shar: error transmitting "'tlmod.c'" '(should have been 5313 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tlmod.h'" '(338 characters)'
if test -f 'tlmod.h'
then
	echo shar: will not over-write existing file "'tlmod.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'tlmod.h'
	X
	Xtypedef void		*TLPtr;
	X
	XTLPtr	new_tl();
	XTLPtr   new_null_tl();
	XTLPtr   tl_get_ancestor();
	Xchar *tl_get_name();
	X
	Xvoid *tl_get_owner();
	X
	Xtl_set();
	X
	Xtl_get();
	X
	Xtl_add();
	X
	Xtl_del();
	X
	Xtl_add_item();
	X
	Xtl_del_item();
	X
	Xvoid *tl_get_nthitem();
	X
	Xvoid *tl_get_attr();
	XTLPtr	read_tl();
	Xchar *tl_get_ancname();
	X
	Xvoid *tl_get_owner();
	Xvoid *tl_copy();
SHAR_EOF
if test 338 -ne "`wc -c < 'tlmod.h'`"
then
	echo shar: error transmitting "'tlmod.h'" '(should have been 338 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tut.hyp'" '(4437 characters)'
if test -f 'tut.hyp'
then
	echo shar: will not over-write existing file "'tut.hyp'"
else
sed 's/^	X//' << \SHAR_EOF > 'tut.hyp'
	X!!!
	Xglobals=1
	X*&^%hypeglobx=allelulia
	XRecursionTest
	X^
	XRecursionTest^
	X^
	X#
	X#	send the message param() with param param() to all items.
	X#
	XinterceptSelfBroadcast:
	X{
	X	stderr(" --- " $$ self() $$ ": caught interceptSelfBroadcast.");
	X	for(i = 0; i < numpanes(self()); i++) {
	X		pane = getnthtl(self(), i);
	X		stderr(" ---  --- pane == " $$ pane );
	X		for(j = 0; j < numitems(pane); ++j) {
	X			item = getnthitem(pane, j);
	X			stderr(" ---  ---  ---  item == " $$ item);
	X			send(param(), item, param());
	X		}
	X	}
	X}.
	X
	X^
	X1
	XToys
	X^
	X^
	X^
	X
	X^
	X6
	XCount
	XCount:
	X0
	X0
	X^
	X
	X^
	X^
	X1^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10^
	X205 60 0 0 0 0
	X^
	X^
	XRecursionTest
	XRecursion Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X		count = getitemval("!Toys#Count");
	X		stderr("Recursion to depth " $$ count $$ " starting." );
	X		send("recurseDeeply", self(), count);
	X		stderr("Done.");
	X}.
	X
	XrecurseDeeply:
	X{
	X	count = param();
	X	if(--count > 1) 
	X		send("recurseDeeply", self(), count);
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 60 0 0 0 0
	X^
	X^
	XC
	XC
	X1
	X0
	X^
	XmouseUp:
	X{
	X	open("..");
	X	close(".");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X205 10 0 0 -1 0
	X^
	X^
	XMessageTest
	XMessage   Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X	count = getitemval("!Toys#Count");
	X	stderr("Passing " $$ count $$ " messages." );
	X	for(i = 0; i < count; i++)
	X		send("testMessage", self(), "");
	X	stderr("Done.");
	X}.
	X
	XtestMessage:
	X{
	X	return "";
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X10 35 0 0 12 0
	X^
	X^
	XScriptTest
	XScript    Test
	X1
	X0
	X^
	X#
	X#	master test script
	X#
	XmouseDown:
	X{
	X	count = getitemval("!Toys#Count");
	X	send("performBroadcastTest", self(), count);
	X	if(send("performControlTest", self(), count) == "failure")
	X		stderr("Control test failed.");
	X	stderr("Done.");
	X}.
	X#
	X#	test 1: broadcast a message to ".", which spreads it downward,
	X#		and acknowledge receipt.
	X#
	XperformBroadcastTest:
	X{
	X	count = param();
	X	setitemval(self(), "failure");
	X	stderr("===== Begin broadcast test =====" );
	X	broadcast("interceptSelfBroadcast", ".", "itemIntercept");
	X	if(getitemval(self()) == "success")
	X		stderr("Broadcast test succeeded.");
	X	else
	X		stderr("BROADCAST TEST FAILED.");
	X	stderr("===== End broadcast test =====" );
	X}.
	XitemIntercept:
	X{
	X	stderr(" --- itemIntercept caught in " $$ self() );
	X	setitemval(self(), "success");
	X}.
	X#
	X#	test 2: exercise control flow structures
	X#
	XperformControlTest:
	X{
	X	tests =
	X		"performBreakContinue" $$
	X		"";
	X	stderr("===== Flow of Control Test =====");
	X	for(i = 0; i < numwords(tests); i++) {
	X		if(send(nthword(tests, i), self(), "") == "failure")
	X			return "failure";
	X	}
	X}.
	X#
	X#	test 2.1: check break and continue
	X#
	XperformBreakContinue:
	X{
	X	n = 31;
	X	limit = 99;
	X#
	X#	single-level break
	X#
	X	stderr(" --- single-level break test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n)
	X			break;
	X	}
	X	if(i == n)
	X		stderr( " --- --- success");
	X	else {
	X		stderr( " --- --- FAILURE  i == " $$ i);
	X		return "failure";
	X	}
	X#
	X#	multi-level break
	X#
	X	stderr(" --- multi-level break test:");
	X	for(i = 0; i < 5; i++) {
	X		for(j = 0; j < limit; j++)
	X			if(j == n)
	X				break;
	X		if(j != n) {
	X			stderr(" ---  --- FAILURE  j == " $$ j);
	X			return "failure";
	X		}
	X	}
	X	if(i == 5)
	X		stderr( " --- --- success");
	X	else {
	X		stderr( " --- --- FAILURE  i == " $$ i);
	X		return "failure";
	X	}
	X#
	X#	single-level continue
	X#
	X	stderr(" --- single-level continue test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n)
	X			continue;
	X		if(i == n) {
	X			stderr( " --- --- FAILURE in continue.");
	X			return "failure";
	X		}
	X	}
	X	stderr( " --- --- success");
	X#
	X#	multi-level continue
	X#
	X	stderr(" --- multi-level continue test:");
	X	for(i = 0; i < limit; i++) {
	X		if(i == n) {
	X			for(j = 0; j < 7; j++) {
	X				stderr(j);
	X				if(j <= 4)
	X					continue;
	X				if(j == 5)
	X					break;
	X				if(j <= 4) {
	X					stderr( " --- --- inner continue bad.");
	X					return "failure";
	X				}
	X			}
	X			if(j != 5) {
	X				stderr(" --- inner break failed: " $$ j);
	X				return "failure";
	X			}
	X			continue;
	X		}
	X		if(i == n) {
	X			stderr(i);
	X			stderr(n);
	X			stderr( " --- --- FAILURE in outer continue.");
	X			return "failure";
	X		}
	X	}
	X	stderr( " --- --- success");
	X}.
	X
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X180 80 0 0 28 0
	X^
	X^
	XMessageTest
	XMessage   Test
	X1
	X0
	X^
	XmouseDown:
	X{
	X	count = getitemval("!Toys#Count");
	X	stderr("Passing " $$ count $$ " messages." );
	X	for(i = 0; i < count; i++)
	X		send("testMessage", self(), "");
	X	stderr("Done.");
	X}.
	X
	XtestMessage:
	X{
	X	return "";
	X}.
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X^
	X280 20 0 0 0 0
	X^
	X^
	X682 233 349 126 0 1
	X^
	X^
	X1
	X!Toys
	X0 0 349 124 0 0
	X^
	X^
	X0
	X734 208 359 147 0 0
	X^
	X99 126 132^
	X^
	X100^
	X/RecursionTest!Toys#Count
	X^
	Xsuccess^
	X/RecursionTest!Toys#ScriptTest
	X+
SHAR_EOF
if test 4437 -ne "`wc -c < 'tut.hyp'`"
then
	echo shar: error transmitting "'tut.hyp'" '(should have been 4437 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'twi.cursor'" '(193 characters)'
if test -f 'twi.cursor'
then
	echo shar: will not over-write existing file "'twi.cursor'"
else
sed 's/^	X//' << \SHAR_EOF > 'twi.cursor'
	X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
	X */
	X	0x7FFE,0xFFFF,0xC003,0xC003,0xC403,0xC403,0xCA03,0xCA03,
	X	0xD103,0xDF03,0xD103,0xD103,0xD157,0xC003,0xFFFF,0x7FFE
SHAR_EOF
if test 193 -ne "`wc -c < 'twi.cursor'`"
then
	echo shar: error transmitting "'twi.cursor'" '(should have been 193 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'twi.icon'" '(1933 characters)'
if test -f 'twi.icon'
then
	echo shar: will not over-write existing file "'twi.icon'"
else
sed 's/^	X//' << \SHAR_EOF > 'twi.icon'
	X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
	X */
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x3FFF,0xFFFF,0xFFFF,0xFFFC,
	X	0x7FFF,0xFFFF,0xFFFF,0xFFFE,0xE000,0x0000,0x0000,0x0007,
	X	0xC01F,0xFFFF,0xFFFF,0xFE03,0xC010,0x0000,0x0000,0x0203,
	X	0xC010,0x0100,0x0000,0x0203,0xC010,0x0100,0x0000,0x0203,
	X	0xC010,0x0280,0x0000,0x0203,0xC010,0x0280,0x0000,0x0203,
	X	0xC010,0x0280,0x0000,0x0203,0xC010,0x0440,0x0000,0x0203,
	X	0xC010,0x07C0,0x0000,0x0203,0xC010,0x0443,0x060C,0x0203,
	X	0xC010,0x0443,0x060C,0x0203,0xC010,0x0000,0x0000,0x0203,
	X	0xC01F,0xFFFF,0xFFFF,0xFE03,0xE000,0x0000,0x0000,0x0007,
	X	0x7FFF,0xFFFF,0xFFFF,0xFFFE,0x3FFF,0xFFFF,0xFFFF,0xFFFC,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	X	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
SHAR_EOF
if test 1933 -ne "`wc -c < 'twi.icon'`"
then
	echo shar: error transmitting "'twi.icon'" '(should have been 1933 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'src'"
cd ..
#	End of shell archive
exit 0