v01i067: hype - a SunView object-oriented window builder, Part07/11
Charles Mcgrew
mcgrew at dartagnan.rutgers.edu
Fri Sep 15 12:49:16 AEST 1989
Submitted-by: apctrc!zmls04 at 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
More information about the Comp.sources.sun
mailing list