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