mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (09/15/89)
Submitted-by: apctrc!zmls04@uunet.uu.net (Martin L. Smith) Posting-number: Volume 1, Issue 71 Archive-name: hype/part11 #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # src # This archive created: Thu Sep 14 21:00:27 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 "'info.c'" '(2096 characters)' if test -f 'info.c' then echo shar: will not over-write existing file "'info.c'" else sed 's/^ X//' << \SHAR_EOF > 'info.c' X X#include "util.h" X#include "string.h" X#include "itemmod.h" X#include "tlmod.h" X#include "objmod.h" X#include "../archives/container/container.h" X#include "pathname.h" X Xtypedef struct il { X struct il *next; X Container val; X String name; X} InfoNode, *InfoList; X X X Xstatic XInfoList new_infonode() X{ X InfoList temp; X temp = (InfoList) malloc(sizeof(InfoNode) * 1); X temp->val = cnew_con(); X temp->next = NULL; X return temp; X} XInfoList next_infonode(ilist) XInfoList ilist; X{ X if (ilist == NULL) { X return NULL; X } else { X return ilist->next; X } X} XString inode_name(ilist) XInfoList ilist; X{ X return ilist->name; X} XContainer inode_val(ilist) XInfoList ilist; X{ X return ilist->val; X} X Xvoid unmake_infonode(ilist) XInfoList ilist; X{ X cdestroy(ilist->val); X free(ilist); X} X Xvoid unmake_infolist(ilist) XInfoList ilist; X{ X if (ilist != NULL) { X unmake_infolist(ilist->next); X unmake_infonode(ilist); X } X} X X XContainer info_look(ilist,name) XInfoList ilist; XString name; X{ X InfoList temp; X while (ilist != NULL) { X if (strcmp(ilist->name,name) == 0) { X return ilist->val; X } X ilist = ilist->next; X } X return NULL; X} X XInfoList info_add_data(ilist,name,data) XString name; XInfoList ilist; XContainer data; X{ X InfoList temp; X temp = ilist; X crewind(data); X while (temp != NULL) { X if (strcmp(temp->name,name) == 0) { X cdestroy(temp->val); X crewind(data); X temp->val = ccpy_con(data); X return ilist; X } X temp = temp->next; X } X temp = new_infonode(); X temp->name = mystrcpy(name); X cdestroy(temp->val); X temp->val = ccpy_con(data); X temp->next = ilist; X return temp; X} X XInfoList read_info(fd,obj) XFILE *fd; XOBPtr obj; X{ X char *name,*tlname; X char c; X Container script; X Container def; X InfoList temp,ilist; X char *x; X c = fgetc(fd); X temp = NULL; X X while (c != '+') X { X ungetc(c,fd); X ilist = new_infonode(); X ilist->next = temp; X read_script(fd,ilist->val); X x = fgetline(fd); X ilist->name = x; X c = fgetc(fd); X temp = ilist; X } X c = fgetc(fd); X return temp; X} X SHAR_EOF if test 2096 -ne "`wc -c < 'info.c'`" then echo shar: error transmitting "'info.c'" '(should have been 2096 characters)' fi fi # end of overwriting check echo shar: extracting "'info.h'" '(63 characters)' if test -f 'info.h' then echo shar: will not over-write existing file "'info.h'" else sed 's/^ X//' << \SHAR_EOF > 'info.h' Xtypedef void *InfoList; Xvoid *info_look(); Xvoid *read_info(); X SHAR_EOF if test 63 -ne "`wc -c < 'info.h'`" then echo shar: error transmitting "'info.h'" '(should have been 63 characters)' fi fi # end of overwriting check echo shar: extracting "'init.c'" '(6337 characters)' if test -f 'init.c' then echo shar: will not over-write existing file "'init.c'" else sed 's/^ X//' << \SHAR_EOF > 'init.c' X#include <stdio.h> X Xextern int unixcom(),opencom(),closecom(),ask(),choose(); Xextern int concat(); Xextern int itemval(); Xextern int stderrcom(),stdoutcom(); Xextern int send(); Xextern int param(); Xextern int target(); Xextern int plus(),times(),minus(),divide(); Xextern int numchildren(),numtls(),numpanes(); Xextern int numitems(); Xextern int getnthobject(),getnthitem(),getnthtl(),getnthpane(); Xextern int getitemval(),getitemmin(),getitemmax(),getitemlux(),getitemdef(); Xextern int getitemluy(),getitemname(),getitemicon(),getitemform(),getitemscript(); Xextern int setitemval(),setitemmin(),setitemmax(),setitemlux(),setitemdef(); Xextern int setitemluy(),setitemname(),setitemicon(),setitemform(),setitemscript(); X Xextern int setitemmin(); Xextern int numval(); Xextern int sformat(); Xextern int addbutton(),addslider(),addtext(); Xextern int delitem(); X Xextern int nthword(),nthchar(),nthitem(),nthline(); Xextern int settlcolor(),setobjcolor(); Xextern int gettlcolor(),getobjcolor(); Xextern int setitemlabel(); Xextern int setitemtoggles(),getitemtoggles(); Xextern int getobjname(),setobjname(); Xextern int getitemlabel(); Xextern int iamstrlen(),mysubstring(); Xextern int setitemtype(),getitemtype(); Xextern int makenewchild(),delobject(),makenewsibling(); Xextern int unixbg(); Xextern int mysetenv(),mygetenv(); Xextern int addtoggle(),addtextsw(); Xextern int myrefresh(); Xextern int gettlscript(); Xextern int settlscript(); Xextern int iamnumchars(),iamnumwords(),iamnumlines(),iamnumclauses(); Xextern int pass(),broadsend(); Xextern int self(); Xextern int pasteitemfromCB(),copyitemtoCB(),copyobjecttoCB(); Xextern int myexit(),myabort(),mychdir(),mykill(),mygetcwd(); Xextern int mypread(),mypwrite(); Xextern int refreshitem(),exectext(),myloadbelow(),myloadover(),mysaveobj(); Xextern int gettlbgtext(),settlbgtext(); Xextern int pasteitemfromCB(),pastetlfromCB(),pasteobjfromCB(),pastetreefromCB(); Xextern int copyitemtoCB(),copyobjtoCB(),copytltoCB(); Xextern int my_menu(),my_multi_select(); Xextern int setobjlabel(),getobjlabel(),setobjscript(),getobjscript(); Xextern int abort(),mysavestate(); Xextern int setglob(),getglob(); X Xstatic struct { X char *name; X int (*func)(); X} builtins[] = { X X/* Basic math functions */ X "plus", plus, X "minus", minus, X "times", times, X "divide", divide, X/* "exp", myexp, X "remain", myremain, X*/ X X/* Global variables */ X "setglob", setglob, X "getglob", getglob, X X/* Open, close, redraw objects */ X "open", opencom, X "close", closecom, X "refresh", myrefresh, X X/* Object data manipulators */ X "getnthobject", getnthobject, X "getnthpane", getnthtl, X "getnthtl", getnthtl, X "getobjname", getobjname, X "setobjname", setobjname, X "setobjcolor", setobjcolor, X "getobjcolor", getobjcolor, X "setobjlabel", setobjlabel, X "getobjlabel", getobjlabel, X "setobjscript", setobjscript, X "getobjscript", getobjscript, X "delobject", delobject, X "numchildren", numchildren, X "numpanes", numpanes, X "numtls", numtls, X "makenewchild", makenewchild, X "makenewsibling", makenewsibling, X X X/* Item data extractors */ X "getitemname", getitemname, X "getitemval", getitemval, X "getitemmin", getitemmin, X "getitemmax", getitemmax, X "getitemicon", getitemicon, X "getitemform", getitemform, X "getitemscript", getitemscript, X "getitemlux", getitemlux, X "getitemluy", getitemluy, X "getitemlabel", getitemlabel, X "getitemtype", getitemtype, X X X/* Item data manipulators */ X "setitemmin", setitemmin, X "setitemname", setitemname, X "setitemmax", setitemmax, X "setitemicon", setitemicon, X "setitemform", setitemform, X "setitemscript", setitemscript, X "setitemdef", setitemdef, X "setitemlux", setitemlux, X "setitemluy", setitemluy, X "setitemval", setitemval, X "setitemlabel", setitemlabel, X "setitemtype", setitemtype, X "refreshitem", refreshitem, X X/* Template shapers */ X "getnthitem", getnthitem, X "numitems", numitems, X "addbutton", addbutton, X "addtext", addtext, X "addslider", addslider, X "addtoggle", addtoggle, X "addtextsw", addtextsw, X "delitem", delitem, X "settlcolor", settlcolor, X "gettlcolor", gettlcolor, X "settlscript", settlscript, X "gettlscript", gettlscript, X "gettlbgtext", gettlbgtext, X "settlbgtext", settlbgtext, X X/* Communication functions */ X "ask", ask, X "choose", choose, X "stderr", stderrcom, X "stdout", stdoutcom, X "menu", my_menu, X "select", my_multi_select, X X/* Clipboard manipulators */ X "pasteitem", pasteitemfromCB, X "pastetl", pastetlfromCB, X "pasteobj", pasteobjfromCB, X "pasteobjtree", pastetreefromCB, X "copyitem", copyitemtoCB, X "copyobj", copyobjtoCB, X "copytl", copytltoCB, X X/* Hype format file functions */ X "saveobj", mysaveobj, X "loadover", myloadover, X "loadbelow", myloadbelow, X "exectext", exectext, X/* "execfile", execfile, X "execfileincontext",execfileincontext, X "exectextincontext",exectextincontext, X*/ X/* Special script utility functions */ X "self", self, X "param", param, X "target", target, X/* "findhandlers", findhandlers, X "findpanes", findpanes, X "alarm", myalarm, X "signal", mysignal, X "sort", sort, X*/ X X/* Message manipulation commands */ X "send", send, X "pass", pass, X "broadcast", broadsend, X X/* Operate on strings in a reasonable way */ X "numval", numval, X "concat", concat, X "strlen", iamstrlen, X "numlines", iamnumlines, X "numclauses", iamnumclauses, X "numwords", iamnumwords, X "numchars", iamnumchars, X "nthword", nthword, X "nthchar", nthchar, X "nthclause", nthitem, X "nthline", nthline, X "sformat", sformat, X "substring", mysubstring, X/* X "search", searchstring, X*/ X X X/* These functions are the main hooks into the operating system. */ X "putenv", mysetenv, X "getenv", mygetenv, X "unix", unixcom, X "unixbg", unixbg, X "exit", myexit, X "abort", myabort, X "savestate", mysavestate, X "getcwd", mygetcwd, X "kill", mykill, X "chdir", mychdir, X "pwrite", mypwrite, X "pread", mypread, X/* "prandw", prandw, X*/ X 0, NULL X}; X X Xinit_builtins() X{ X int i; X for (i = 0; builtins[i].name; i++) { X install(builtins[i].name,builtins[i].func); X } X} X SHAR_EOF if test 6337 -ne "`wc -c < 'init.c'`" then echo shar: error transmitting "'init.c'" '(should have been 6337 characters)' fi fi # end of overwriting check echo shar: extracting "'init.h'" '(4 characters)' if test -f 'init.h' then echo shar: will not over-write existing file "'init.h'" else sed 's/^ X//' << \SHAR_EOF > 'init.h' X SHAR_EOF if test 4 -ne "`wc -c < 'init.h'`" then echo shar: error transmitting "'init.h'" '(should have been 4 characters)' fi fi # end of overwriting check echo shar: extracting "'init.script'" '(22 characters)' if test -f 'init.script' then echo shar: will not over-write existing file "'init.script'" else sed 's/^ X//' << \SHAR_EOF > 'init.script' Xunixbg("colortool"); SHAR_EOF if test 22 -ne "`wc -c < 'init.script'`" then echo shar: error transmitting "'init.script'" '(should have been 22 characters)' fi fi # end of overwriting check echo shar: extracting "'itemmod.c'" '(6362 characters)' if test -f 'itemmod.c' then echo shar: will not over-write existing file "'itemmod.c'" else sed 's/^ X//' << \SHAR_EOF > 'itemmod.c' X#include "util.h" X#include "../archives/hash/shash.h" X#include "map.h" X#include "color.h" X#include "tlmod.h" X#include "attr.h" X#include "../archives/container/container.h" Xstatic itemnumber = 0; X Xtypedef struct it { X int itype; X String name; X String label; X Container script; X MapPtr msgsmap; X SHashTPtr msgstab; X Container def; X Container dlen; X Container minval; X Container maxval; X Container icon; X Container format; X int numc; X Container data; X Container labels; X AttrPtr attr; X TLPtr owner; X} IT,*ITPtr; X XMapPtr item_get_msgsmap(it) XITPtr it; X{ X return it->msgsmap; X} XSHashTPtr item_get_msgstab(it) XITPtr it; X{ X return it->msgstab; X} Xvoid item_set_msgsmap(it,map) XITPtr it; XMapPtr map; X{ X it->msgsmap = map; X} Xvoid item_set_msgstab(it,tab) XITPtr it; XSHashTPtr tab; X{ X it->msgstab = tab; X} Xint item_get_type(it) XITPtr it; X{ X return it->itype; X X} Xint item_set_type(it,itype) Xint itype; XITPtr it; X{ X it->itype = itype; X} Xchar *item_get_label(it) XITPtr it; X{ X return it->label; X} X XITPtr new_item(itype,def,owner) XContainer def; Xint itype; XTLPtr owner; X{ X ITPtr temp; X temp = (ITPtr) malloc(sizeof(IT) * 1); X temp->itype = itype; X temp->name = mystrcat("itemname",int_to_string(itemnumber++)); X temp->label = mystrcpy(temp->name); X temp->def = ccpy_con(def); X temp->script = cnew_con(); X temp->msgsmap = make_map(); X temp->msgstab = smake_hash(); X Sinit_hash(3,temp->msgstab); X if (temp->itype == HYPE_TEXT) { X temp->dlen = cnew_constring("30"); X } else if (temp->itype == HYPE_SLIDER) { X temp->dlen = cnew_constring("200"); X } else { X temp->dlen = cnew_con(); X } X temp->minval = cnew_con(); X temp->maxval = cnew_con(); X temp->icon = cnew_con(); X temp->format = cnew_con(); X temp->numc = 0; X temp->labels = cnew_con(); X temp->data = cnew_con(); X temp->owner = owner; X temp->attr = make_attr(); X return temp; X} XITPtr item_copy(it) XITPtr it; X{ X ITPtr new; X new = new_item(it->itype,(it->def),NULL); X free(new->name); X new->name = mystrcpy(it->name); X new->script = ccpy_con(it->script); X new->label = mystrcpy(it->label); X new->minval = ccpy_con(it->minval); X new->maxval = ccpy_con(it->maxval); X new->icon = ccpy_con(it->icon); X new->format = ccpy_con(it->format); X new->data = ccpy_con(it->data); X new->dlen = ccpy_con(it->dlen); X new->numc = it->numc; X new->attr = copy_attr(it->attr); X compile_item_script(new,0); X return new; X} X Xvoid unmake_item(item) XITPtr item; X{ X clipboard_report_dealloc(item); X free(item->name); X cdestroy(item->def); X cdestroy(item->minval); X cdestroy(item->maxval); X cdestroy(item->icon); X cdestroy(item->format); X cdestroy(item->labels); X cdestroy(item->data); X unmake_attr(item->attr); X unmake_map(item->msgsmap); X sunmake_hash(item->msgstab); X free(item); X} XAttrPtr item_get_attr(item) XITPtr item; X{ X return item->attr; X} Xvoid item_set_attr(item,attr) XITPtr item; XAttrPtr attr; X{ X item->attr = attr; X} XTLPtr item_get_owner(item) XITPtr item; X{ X return item->owner; X} Xvoid item_set_owner(it,tl) XITPtr it; XTLPtr tl; X{ X it->owner = tl; X} XContainer item_get_dlen(item) XITPtr item; X{ X return item->dlen; X} X Xint item_get_numc(item) XITPtr item; X{ X return item->numc; X} Xint item_get_lux(item) XITPtr item; X{ X return attr_get_lux(item->attr); X} Xint item_get_luy(item) XITPtr item; X{ X return attr_get_luy(item->attr); X} Xvoid item_set_dlen(item,c) XITPtr item; XContainer c; X{ X item->dlen = c; X} Xvoid item_set_numc(item,i) XITPtr item; Xint i; X{ X item->numc = i; X} Xvoid item_set_lux(item,i) XITPtr item; Xint i; X{ X attr_set_lux(item->attr,i); X} X Xvoid item_set_luy(item,i) XITPtr item; Xint i; X{ X attr_set_luy(item->attr,i); X} XContainer item_get_min(item) XITPtr item; X{ X return item->minval; X} XContainer item_get_labels(item) XITPtr item; X{ X return item->labels; X} XContainer item_get_max(item) XITPtr item; X{ X return item->maxval; X} XContainer item_get_icon(item) XITPtr item; X{ X return item->icon; X} XContainer item_get_form(item) XITPtr item; X{ X return item->format; X} XContainer item_get_script(item) XITPtr item; X{ X return item->script; X} XContainer item_get_def(item) XITPtr item; X{ X return item->def; X} XString item_get_name(item) XITPtr item; X{ X return item->name; X} Xvoid item_set_name(item,str) XITPtr item; XString str; X{ X item->name = mystrcpy(str); X} Xvoid item_set_label(item,str) XITPtr item; XString str; X{ X item->label = mystrcpy(str); X} Xvoid item_set_min(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->minval); X item->minval = ccpy_con(str); X} X Xvoid item_set_labels(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->labels); X item->labels = ccpy_con(str); X} Xvoid item_set_data(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->data); X item->data = ccpy_con(str); X} Xvoid item_set_max(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->maxval); X item->maxval = ccpy_con(str); X} Xvoid item_set_icon(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->icon); X item->icon = ccpy_con(str); X} Xvoid item_set_form(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->format); X item->format = ccpy_con(str); X} Xvoid item_set_script(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->script); X item->script = ccpy_con(str); X} Xvoid item_set_def(item,str) XITPtr item; XContainer str; X{ X cdestroy(item->def); X item->def = ccpy_con(str); X} XITPtr read_item(fd) XFILE *fd; X{ X ITPtr it; X int type; X char *name,*label; X int r,g,b; X int itype,lux,luy,numc; X Container def; X itemnumber++; X def = cnew_con(); X name = fgetline(fd); X label = fgetline(fd); X fscanf(fd,"%d\n",&type); X itype = type; X fscanf(fd,"%d\n", &numc); X it = new_item(itype,def); X it->itype = itype; X it->numc = numc; X it->name = mystrcpy(name); X it->label = mystrcpy(label); X read_script(fd,it->script); X compile_item_script(it,NO_REPORT); X read_script(fd,it->def); X read_script(fd,it->minval); X read_script(fd,it->maxval); X read_script(fd,it->labels); X read_script(fd,it->icon); X read_script(fd,it->format); X read_script(fd,it->dlen); X it->attr = read_attr(fd); X return it; X} SHAR_EOF if test 6362 -ne "`wc -c < 'itemmod.c'`" then echo shar: error transmitting "'itemmod.c'" '(should have been 6362 characters)' fi fi # end of overwriting check echo shar: extracting "'itemmod.h'" '(469 characters)' if test -f 'itemmod.h' then echo shar: will not over-write existing file "'itemmod.h'" else sed 's/^ X//' << \SHAR_EOF > 'itemmod.h' Xtypedef void *ITPtr; X XITPtr new_item(); X Xvoid unmake_item(); X Xvoid *item_get_def(); X XString item_get_name(); X Xvoid item_set_name(); X Xvoid item_set_def(); Xint item_get_type(); X Xint item_get_lux(); Xint item_get_luy(); Xvoid *item_get_color(); Xvoid *item_get_min(); Xvoid *item_get_max(); Xvoid *item_get_icon(); Xvoid *item_get_form(); Xvoid item_set_form(); Xvoid item_set_min(); Xvoid item_set_max(); Xvoid item_set_icon(); X Xvoid *item_copy(); Xvoid *item_get_owner(); SHAR_EOF if test 469 -ne "`wc -c < 'itemmod.h'`" then echo shar: error transmitting "'itemmod.h'" '(should have been 469 characters)' fi fi # end of overwriting check echo shar: extracting "'lex.c'" '(14053 characters)' if test -f 'lex.c' then echo shar: will not over-write existing file "'lex.c'" else sed 's/^ X//' << \SHAR_EOF > 'lex.c' X# include "stdio.h" X# define U(x) x X# define NLSTATE yyprevious=YYNEWLINE X# define BEGIN yybgin = yysvec + 1 + X# define INITIAL 0 X# define YYLERR yysvec X# define YYSTATE (yyestate-yysvec-1) X# define YYOPTIM 1 X# define YYLMAX BUFSIZ X# define output(c) putc(c,yyout) X# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) X# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} X# define yymore() (yymorfg=1) X# define ECHO fprintf(yyout, "%s",yytext) X# define REJECT { nstr = yyreject(); goto yyfussy;} Xint yyleng; extern char yytext[]; Xint yymorfg; Xextern char *yysptr, yysbuf[]; Xint yytchar; XFILE *yyin = {stdin}, *yyout = {stdout}; Xextern int yylineno; Xstruct yysvf { X struct yywork *yystoff; X struct yysvf *yyother; X int *yystops;}; Xstruct yysvf *yyestate; Xextern struct yysvf yysvec[], *yybgin; X#include "scripter.h" X#include "../archives/container/container.h" X#include "y.tab.h" X#include "symbol.h" X#include "util.h" X#include <strings.h> X# define YYNEWLINE 10 Xyylex(){ Xint nstr; extern int yyprevious; Xwhile((nstr = yylook()) >= 0) Xyyfussy: switch(nstr){ Xcase 0: Xif(yywrap()) return(0); break; Xcase 1: X { ; } Xbreak; Xcase 2: X { ; } Xbreak; Xcase 3: X { inc_lineno(); } Xbreak; Xcase 4: X { return PLUSPLUS; } Xbreak; Xcase 5: X { return MINUSMINUS; } Xbreak; Xcase 6: X { return LBRACE; } Xbreak; Xcase 7: X { return RBRACE; } Xbreak; Xcase 8: X { return SC; } Xbreak; Xcase 9: X { return EQUAL; } Xbreak; Xcase 10: X { return PLUS; } Xbreak; Xcase 11: X { return MINUS; } Xbreak; Xcase 12: X { return STAR; } Xbreak; Xcase 13: X { return SLASH; } Xbreak; Xcase 14: X { return LTOREQ; } Xbreak; Xcase 15: X { return GTOREQ; } Xbreak; Xcase 16: X { return GREATERTHAN; } Xbreak; Xcase 17: X { return LESSTHAN; } Xbreak; Xcase 18: X { return CEQUAL; } Xbreak; Xcase 19: X { return NEQUAL; } Xbreak; Xcase 20: X { return CONCAT; } Xbreak; Xcase 21: X { return AND; } Xbreak; Xcase 22: X { return OR; } Xbreak; Xcase 23: X { return NOT; } Xbreak; Xcase 24: X { return COMMA; } Xbreak; Xcase 25: X { return FOR; } Xbreak; Xcase 26: X { return IF; } Xbreak; Xcase 27: X { return THEN; } Xbreak; Xcase 28: X { return ELSE; } Xbreak; Xcase 29: X { return WHILE; } Xbreak; Xcase 30: X { return RETURN; } Xbreak; Xcase 31: X { return BREAK; } Xbreak; Xcase 32: X { return CONTINUE; } Xbreak; Xcase 33: X { return LPAREN; } Xbreak; Xcase 34: X { return RPAREN; } Xbreak; Xcase 35: X { X yylval.text = yytext; X return NUMBER; X } Xbreak; Xcase 36: X { X yylval.text = yytext+1; X yylval.text[yyleng-2] = '\0'; X return SQSTRING; X } Xbreak; Xcase 37: X { X yylval.text = yytext+1; X yylval.text[yyleng-2] = '\0'; X yylval.text = escapesout(yylval.text); X return DQSTRING; X } Xbreak; Xcase 38: X X { X void *temp; X temp = symlookup(yytext); X if ((int) temp == 0) { X yylval.text = mystrcpy(yytext); X return STRING; X } X if (((int) temp > 0) && ((int) temp < 1024)) { X yylval.pc = (int) temp; X return VAR; X } else { X yylval.inst = (Inst) temp; X return BUILTIN; X } X } Xbreak; Xcase 39: X { X return LONEQUOTE; X } Xbreak; Xcase -1: Xbreak; Xdefault: Xfprintf(yyout,"bad switch yylook %d",nstr); X} return(0); } X/* end of yylex */ X#undef input() X#undef output() X#undef unput() Xextern Container mfin; Xchar input() X{ X char c; X c = mfgetc(mfin); X if ((c == EOF) || getgloberror()) X return 0; X return c; X} Xchar output(c) Xchar c; X{ X putchar(c); X} Xchar unput() X{ X mfungetc(mfin); X} Xint yyvstop[] = { X0, X X2, X0, X X3, X0, X X23, X0, X X39, X0, X X1, X0, X X33, X0, X X34, X0, X X12, X0, X X10, X0, X X24, X0, X X11, X0, X X13, X0, X X35, X0, X X8, X0, X X17, X0, X X9, X0, X X16, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X6, X0, X X7, X0, X X19, X0, X X37, X0, X X20, X0, X X21, X0, X X36, X0, X X4, X0, X X5, X0, X X35, X0, X X14, X0, X X18, X0, X X15, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X26, X38, X0, X X38, X0, X X38, X0, X X38, X0, X X22, X0, X X37, X0, X X38, X0, X X38, X0, X X38, X0, X X25, X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X38, X0, X X28, X38, X0, X X38, X0, X X27, X38, X0, X X38, X0, X X31, X38, X0, X X38, X0, X X38, X0, X X29, X38, X0, X X38, X0, X X30, X38, X0, X X38, X0, X X32, X38, X0, X0}; X# define YYTYPE char Xstruct yywork { YYTYPE verify, advance; } yycrank[] = { X0,0, 0,0, 1,0, 1,0, X1,0, 1,0, 1,0, 1,0, X1,0, 1,0, 1,3, 1,4, X1,0, 1,0, 1,0, 1,0, X1,0, 1,0, 1,0, 1,0, X1,0, 1,0, 1,0, 1,0, X1,0, 1,0, 1,0, 1,0, X1,0, 1,0, 1,0, 1,0, X1,0, 0,0, 1,5, 1,6, X1,7, 1,8, 1,0, 1,9, X1,10, 1,11, 1,12, 1,13, X1,14, 1,15, 1,16, 1,0, X1,17, 1,18, 8,39, 9,40, X0,0, 14,42, 0,0, 16,43, X0,0, 0,0, 0,0, 1,0, X1,19, 1,20, 1,21, 1,22, X1,0, 1,0, 1,23, 0,0, X0,0, 0,0, 0,0, 5,35, X20,45, 21,46, 7,7, 22,47, X0,0, 0,0, 0,0, 0,0, X0,0, 0,0, 7,7, 7,0, X0,0, 0,0, 0,0, 0,0, X0,0, 0,0, 0,0, 0,0, X1,0, 1,0, 1,0, 1,0, X0,0, 1,0, 0,0, 1,24, X1,25, 36,0, 1,26, 1,27, X0,0, 0,0, 1,28, 7,7, X0,0, 0,0, 0,0, 0,0, X7,7, 7,7, 7,7, 1,29, X57,0, 1,30, 0,0, 7,7, X1,31, 7,7, 0,0, 0,0, X1,32, 1,33, 1,34, 1,0, X1,0, 2,0, 2,0, 2,0, X2,0, 2,0, 2,0, 2,0, X2,0, 24,48, 7,7, 2,0, X2,0, 2,0, 2,0, 2,0, X2,0, 2,0, 2,0, 2,0, X2,0, 2,0, 2,0, 2,0, X2,0, 2,0, 2,0, 2,0, X2,0, 2,0, 2,0, 2,0, X25,49, 2,5, 26,50, 2,7, X2,8, 2,0, 2,9, 27,51, X6,36, 28,52, 2,13, 2,14, X2,15, 2,16, 2,0, 2,17, X6,36, 6,0, 29,53, 30,54, X31,55, 33,56, 48,58, 36,38, X49,59, 50,60, 2,0, 2,19, X2,20, 2,21, 2,22, 2,0, X2,0, 51,61, 53,62, 54,63, X55,64, 58,65, 57,38, 59,66, X60,67, 6,37, 62,68, 63,69, X64,70, 65,71, 6,36, 6,36, X6,36, 66,72, 68,73, 70,74, X72,75, 6,36, 73,76, 6,36, X75,77, 77,78, 0,0, 2,0, X2,0, 2,0, 2,0, 0,0, X2,0, 38,0, 2,24, 2,25, X10,10, 2,26, 2,27, 0,0, X6,36, 2,28, 0,0, 0,0, X10,10, 10,0, 0,0, 0,0, X0,0, 0,0, 2,29, 0,0, X2,30, 0,0, 0,0, 2,31, X0,0, 38,57, 0,0, 2,32, X2,33, 2,34, 2,0, 2,0, X0,0, 0,0, 0,0, 6,38, X0,0, 10,10, 0,0, 0,0, X0,0, 0,0, 10,41, 10,10, X10,10, 0,0, 0,0, 0,0, X0,0, 10,10, 18,44, 10,10, X18,18, 18,18, 18,18, 18,18, X18,18, 18,18, 18,18, 18,18, X18,18, 18,18, 0,0, 0,0, X0,0, 0,0, 0,0, 0,0, X10,10, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 0,0, X0,0, 0,0, 0,0, 38,38, X0,0, 0,0, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X0,0, 0,0, 0,0, 0,0, X23,23, 0,0, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X23,23, 23,23, 23,23, 23,23, X44,44, 44,44, 44,44, 44,44, X44,44, 44,44, 44,44, 44,44, X44,44, 44,44, 0,0, 0,0, X0,0}; Xstruct yysvf yysvec[] = { X0, 0, 0, Xyycrank+-1, 0, 0, Xyycrank+-128, yysvec+1, 0, Xyycrank+0, 0, yyvstop+1, Xyycrank+0, 0, yyvstop+3, Xyycrank+10, 0, yyvstop+5, Xyycrank+-167, 0, yyvstop+7, Xyycrank+-73, 0, yyvstop+9, Xyycrank+14, 0, 0, Xyycrank+13, 0, 0, Xyycrank+-227, 0, 0, Xyycrank+0, 0, yyvstop+11, Xyycrank+0, 0, yyvstop+13, Xyycrank+0, 0, yyvstop+15, Xyycrank+10, 0, yyvstop+17, Xyycrank+0, 0, yyvstop+19, Xyycrank+10, 0, yyvstop+21, Xyycrank+0, 0, yyvstop+23, Xyycrank+228, 0, yyvstop+25, Xyycrank+0, 0, yyvstop+27, Xyycrank+11, 0, yyvstop+29, Xyycrank+12, 0, yyvstop+31, Xyycrank+14, 0, yyvstop+33, Xyycrank+245, 0, yyvstop+35, Xyycrank+23, yysvec+23, yyvstop+37, Xyycrank+49, yysvec+23, yyvstop+39, Xyycrank+54, yysvec+23, yyvstop+41, Xyycrank+56, yysvec+23, yyvstop+43, Xyycrank+67, yysvec+23, yyvstop+45, Xyycrank+77, yysvec+23, yyvstop+47, Xyycrank+75, yysvec+23, yyvstop+49, Xyycrank+76, yysvec+23, yyvstop+51, Xyycrank+0, 0, yyvstop+53, Xyycrank+57, 0, 0, Xyycrank+0, 0, yyvstop+55, Xyycrank+0, 0, yyvstop+57, Xyycrank+-91, yysvec+6, 0, Xyycrank+0, 0, yyvstop+59, Xyycrank+-215, yysvec+6, 0, Xyycrank+0, 0, yyvstop+61, Xyycrank+0, 0, yyvstop+63, Xyycrank+0, 0, yyvstop+65, Xyycrank+0, 0, yyvstop+67, Xyycrank+0, 0, yyvstop+69, Xyycrank+320, 0, yyvstop+71, Xyycrank+0, 0, yyvstop+73, Xyycrank+0, 0, yyvstop+75, Xyycrank+0, 0, yyvstop+77, Xyycrank+81, yysvec+23, yyvstop+79, Xyycrank+74, yysvec+23, yyvstop+81, Xyycrank+70, yysvec+23, yyvstop+83, Xyycrank+79, yysvec+23, yyvstop+85, Xyycrank+0, yysvec+23, yyvstop+87, Xyycrank+78, yysvec+23, yyvstop+90, Xyycrank+94, yysvec+23, yyvstop+92, Xyycrank+91, yysvec+23, yyvstop+94, Xyycrank+0, 0, yyvstop+96, Xyycrank+-106, yysvec+6, yyvstop+98, Xyycrank+100, yysvec+23, yyvstop+100, Xyycrank+83, yysvec+23, yyvstop+102, Xyycrank+99, yysvec+23, yyvstop+104, Xyycrank+0, yysvec+23, yyvstop+106, Xyycrank+85, yysvec+23, yyvstop+109, Xyycrank+93, yysvec+23, yyvstop+111, Xyycrank+96, yysvec+23, yyvstop+113, Xyycrank+98, yysvec+23, yyvstop+115, Xyycrank+104, yysvec+23, yyvstop+117, Xyycrank+0, yysvec+23, yyvstop+119, Xyycrank+96, yysvec+23, yyvstop+122, Xyycrank+0, yysvec+23, yyvstop+124, Xyycrank+110, yysvec+23, yyvstop+127, Xyycrank+0, yysvec+23, yyvstop+129, Xyycrank+102, yysvec+23, yyvstop+132, Xyycrank+104, yysvec+23, yyvstop+134, Xyycrank+0, yysvec+23, yyvstop+136, Xyycrank+99, yysvec+23, yyvstop+139, Xyycrank+0, yysvec+23, yyvstop+141, Xyycrank+116, yysvec+23, yyvstop+144, Xyycrank+0, yysvec+23, yyvstop+146, X0, 0, 0}; Xstruct yywork *yytop = yycrank+377; Xstruct yysvf *yybgin = yysvec+1; Xchar yymatch[] = { X00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , X01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 , X01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , X01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , X011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 , X'(' ,')' ,01 ,01 ,01 ,01 ,'.' ,01 , X'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , X'0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 , X01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' , X01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , X'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , X0}; Xchar yyextra[] = { X0,0,0,0,0,0,0,0, X0,0,0,0,0,0,0,0, X0,0,0,0,0,0,0,0, X0,0,0,0,0,0,0,0, X0,0,0,0,0,0,0,0, X0}; X#ifndef lint Xstatic char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */ X#endif X Xint yylineno =1; X# define YYU(x) x X# define NLSTATE yyprevious=YYNEWLINE Xchar yytext[YYLMAX]; Xstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; Xchar yysbuf[YYLMAX]; Xchar *yysptr = yysbuf; Xint *yyfnd; Xextern struct yysvf *yyestate; Xint yyprevious = YYNEWLINE; Xyylook(){ X register struct yysvf *yystate, **lsp; X register struct yywork *yyt; X struct yysvf *yyz; X int yych, yyfirst; X struct yywork *yyr; X# ifdef LEXDEBUG X int debug; X# endif X char *yylastch; X /* start off machines */ X# ifdef LEXDEBUG X debug = 0; X# endif X yyfirst=1; X if (!yymorfg) X yylastch = yytext; X else { X yymorfg=0; X yylastch = yytext+yyleng; X } X for(;;){ X lsp = yylstate; X yyestate = yystate = yybgin; X if (yyprevious==YYNEWLINE) yystate++; X for (;;){ X# ifdef LEXDEBUG X if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); X# endif X yyt = yystate->yystoff; X if(yyt == yycrank && !yyfirst){ /* may not be any transitions */ X yyz = yystate->yyother; X if(yyz == 0)break; X if(yyz->yystoff == yycrank)break; X } X *yylastch++ = yych = input(); X yyfirst=0; X tryagain: X# ifdef LEXDEBUG X if(debug){ X fprintf(yyout,"char "); X allprint(yych); X putchar('\n'); X } X# endif X yyr = yyt; X if ( (int)yyt > (int)yycrank){ X yyt = yyr + yych; X if (yyt <= yytop && yyt->verify+yysvec == yystate){ X if(yyt->advance+yysvec == YYLERR) /* error transitions */ X {unput(*--yylastch);break;} X *lsp++ = yystate = yyt->advance+yysvec; X goto contin; X } X } X# ifdef YYOPTIM X else if((int)yyt < (int)yycrank) { /* r < yycrank */ X yyt = yyr = yycrank+(yycrank-yyt); X# ifdef LEXDEBUG X if(debug)fprintf(yyout,"compressed state\n"); X# endif X yyt = yyt + yych; X if(yyt <= yytop && yyt->verify+yysvec == yystate){ X if(yyt->advance+yysvec == YYLERR) /* error transitions */ X {unput(*--yylastch);break;} X *lsp++ = yystate = yyt->advance+yysvec; X goto contin; X } X yyt = yyr + YYU(yymatch[yych]); X# ifdef LEXDEBUG X if(debug){ X fprintf(yyout,"try fall back character "); X allprint(YYU(yymatch[yych])); X putchar('\n'); X } X# endif X if(yyt <= yytop && yyt->verify+yysvec == yystate){ X if(yyt->advance+yysvec == YYLERR) /* error transition */ X {unput(*--yylastch);break;} X *lsp++ = yystate = yyt->advance+yysvec; X goto contin; X } X } X if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ X# ifdef LEXDEBUG X if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); X# endif X goto tryagain; X } X# endif X else X {unput(*--yylastch);break;} X contin: X# ifdef LEXDEBUG X if(debug){ X fprintf(yyout,"state %d char ",yystate-yysvec-1); X allprint(yych); X putchar('\n'); X } X# endif X ; X } X# ifdef LEXDEBUG X if(debug){ X fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); X allprint(yych); X putchar('\n'); X } X# endif X while (lsp-- > yylstate){ X *yylastch-- = 0; X if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ X yyolsp = lsp; X if(yyextra[*yyfnd]){ /* must backup */ X while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ X lsp--; X unput(*yylastch--); X } X } X yyprevious = YYU(*yylastch); X yylsp = lsp; X yyleng = yylastch-yytext+1; X yytext[yyleng] = 0; X# ifdef LEXDEBUG X if(debug){ X fprintf(yyout,"\nmatch "); X sprint(yytext); X fprintf(yyout," action %d\n",*yyfnd); X } X# endif X return(*yyfnd++); X } X unput(*yylastch); X } X if (yytext[0] == 0 /* && feof(yyin) */) X { X yysptr=yysbuf; X return(0); X } X yyprevious = yytext[0] = input(); X if (yyprevious>0) X output(yyprevious); X yylastch=yytext; X# ifdef LEXDEBUG X if(debug)putchar('\n'); X# endif X } X } Xyyback(p, m) X int *p; X{ Xif (p==0) return(0); Xwhile (*p) X { X if (*p++ == m) X return(1); X } Xreturn(0); X} X /* the following are only used in the lex library */ Xyyinput(){ X return(input()); X } Xyyoutput(c) X int c; { X output(c); X } Xyyunput(c) X int c; { X unput(c); X } SHAR_EOF if test 14053 -ne "`wc -c < 'lex.c'`" then echo shar: error transmitting "'lex.c'" '(should have been 14053 characters)' fi fi # end of overwriting check echo shar: extracting "'lex.l'" '(2164 characters)' if test -f 'lex.l' then echo shar: will not over-write existing file "'lex.l'" else sed 's/^ X//' << \SHAR_EOF > 'lex.l' X%{ X#include "scripter.h" X#include "../archives/container/container.h" X#include "y.tab.h" X#include "symbol.h" X#include "util.h" X#include <strings.h> X%} X%% X X"#"[^\n]* { ; } X[ \t] { ; } X[\n] { inc_lineno(); } X"++" { return PLUSPLUS; } X"--" { return MINUSMINUS; } X"{" { return LBRACE; } X"}" { return RBRACE; } X";" { return SC; } X"=" { return EQUAL; } X"+" { return PLUS; } X"-" { return MINUS; } X"*" { return STAR; } X"/" { return SLASH; } X"<=" { return LTOREQ; } X">=" { return GTOREQ; } X">" { return GREATERTHAN; } X"<" { return LESSTHAN; } X"==" { return CEQUAL; } X"!=" { return NEQUAL; } X"$$" { return CONCAT; } X"&&" { return AND; } X"||" { return OR; } X"!" { return NOT; } X"," { return COMMA; } Xfor { return FOR; } Xif { return IF; } Xthen { return THEN; } Xelse { return ELSE; } Xwhile { return WHILE; } Xreturn { return RETURN; } Xbreak { return BREAK; } Xcontinue { return CONTINUE; } X[(] { return LPAREN; } X[)] { return RPAREN; } X X X[0-9]+[.]?[0-9]* { X yylval.text = yytext; X return NUMBER; X } X X X X'[^'\n]*' { X yylval.text = yytext+1; X yylval.text[yyleng-2] = '\0'; X return SQSTRING; X } X X\"(\\\"|[^"\n])*\" { X yylval.text = yytext+1; X yylval.text[yyleng-2] = '\0'; X yylval.text = escapesout(yylval.text); X return DQSTRING; X } X X[_a-zA-Z][_a-zA-Z0-9]* X { X void *temp; X temp = symlookup(yytext); X if ((int) temp == 0) { X yylval.text = mystrcpy(yytext); X return STRING; X } X if (((int) temp > 0) && ((int) temp < 1024)) { X yylval.pc = (int) temp; X return VAR; X } else { X yylval.inst = (Inst) temp; X return BUILTIN; X } X } X\" { X return LONEQUOTE; X } X%% X#undef input() X#undef output() X#undef unput() Xextern Container mfin; Xchar input() X{ X char c; X c = mfgetc(mfin); X if ((c == EOF) || getgloberror()) X return 0; X return c; X} Xchar output(c) Xchar c; X{ X putchar(c); X} Xchar unput() X{ X mfungetc(mfin); X} SHAR_EOF if test 2164 -ne "`wc -c < 'lex.l'`" then echo shar: error transmitting "'lex.l'" '(should have been 2164 characters)' fi fi # end of overwriting check echo shar: extracting "'objmod.c'" '(15231 characters)' if test -f 'objmod.c' then echo shar: will not over-write existing file "'objmod.c'" else sed 's/^ X//' << \SHAR_EOF > 'objmod.c' X#include <stdio.h> X#include <sunwindow/rect.h> X#include "util.h" X#include "string.h" X#include "../archives/hash/shash.h" X#include "../archives/hash/hash.h" X#include "map.h" X#include "itemmod.h" X#include "tlmod.h" X#include "info.h" X#include "attr.h" X#include "../archives/container/container.h" X#include "pathname.h" X#include "color.h" X#include "clipboard.h" X X#define OBJECT_MAGIC (9543) X Xtypedef struct obj { X int magic; X int level; X struct obj *ancestor; X String name; X Container script; X Container label; X MapPtr msgsmap; X SHashTPtr msgstab; X MapPtr objmap; X SHashTPtr objtable; X MapPtr tlmap; X SHashTPtr tltable; X MapPtr objtls; X InfoList info; X AttrPtr attr; X} OB,*OBPtr; X Xtypedef struct temp { X AttrPtr attr; X char *pname; X TLPtr tl; X} TP,*TPPtr; X X X#define CHECK(obj) (if (obj == NULL) \ X return NULL;) X Xstatic HashTPtr deltable; X Xstatic int objnumber; X Xchar *obj_number() X{ X return int_to_string(objnumber++); X} XTPPtr new_temp(tl) XTLPtr tl; X{ X TPPtr temp; X temp = (TPPtr) malloc(sizeof(TP) * 1); X temp->tl = tl; X temp->attr = make_attr(); X return temp; X} Xvoid set_temp_pane(temp,pname) XTPPtr temp; Xchar *pname; X{ X temp->pname = pname; X} XTPPtr copy_temp(temp,tl) XTPPtr temp; XTLPtr tl; X{ X TPPtr t; X t = new_temp(tl); X t->attr = copy_attr(temp->attr); X return t; X} Xvoid unmake_temp(t) XTPPtr t; X{ X unmake_attr(t->attr); X free(t); X} XAttrPtr object_get_attr(obj) XOBPtr obj; X{ X return obj->attr; X} X X XOBPtr new_object(name,owner) XString name; XOBPtr owner; X{ X OBPtr temp; X temp = (OBPtr) malloc(sizeof(OB) * 1); X temp->magic = OBJECT_MAGIC; X temp->ancestor = owner; X temp->name = mystrcpy(name); X temp->objmap = make_map(); X temp->objtable = smake_hash(); X temp->msgsmap = make_map(); X temp->msgstab = smake_hash(); X Sinit_hash(1,temp->msgstab); X temp->tlmap = make_map(); X temp->tltable = smake_hash(); X temp->objtls = make_map(); X temp->info = NULL; X temp->attr = make_attr(); X temp->script = cnew_con(); X if (owner != NULL) { X temp->level = owner->level; X } X Sinit_hash(4,temp->objtable); X X Sinit_hash(4,temp->tltable); X temp->label = cnew_con(); X return temp; X} XMapPtr object_get_msgsmap(obj) XOBPtr obj; X{ X return obj->msgsmap; X} XSHashTPtr object_get_msgstab(obj) XOBPtr obj; X{ X return obj->msgstab; X} Xvoid object_set_msgsmap(obj,map) XOBPtr obj; XMapPtr map; X{ X obj->msgsmap = map; X} Xvoid object_set_msgstab(obj,tab) XOBPtr obj; XSHashTPtr tab; X{ X obj->msgstab = tab; X} Xvoid unmake_object(obj) XOBPtr obj; X{ X clipboard_report_dealloc(obj); X unmake_map(obj->objmap); X sunmake_hash(obj->objtable); X unmake_map(obj->msgsmap); X sunmake_hash(obj->msgstab); X unmake_map(obj->tlmap); X sunmake_hash(obj->tltable); X unmake_map(obj->objtls); X unmake_infolist(obj->info); X unmake_attr(obj->attr); X cdestroy(obj->label); X cdestroy(obj->script); X free(obj); X} XTPPtr object_get_nthtemp(obj,n) XOBPtr obj; Xint n; X{ X TPPtr t; X t = (TPPtr) map_get_nth(n,obj->objtls); X return t; X} Xobject_add_temp(obj,tl,ord) XOBPtr obj; XTLPtr tl; Xint ord; X{ X TPPtr t; X t = new_temp(tl); X add_to_map(ord,t,obj->objtls); X tl_inc_ref_cnt(tl); X} Xobject_add_half_temp(obj,pname,ord) XOBPtr obj; Xchar *pname; Xint ord; X{ X TPPtr t; X t = new_temp(NULL); X t->pname = pname; X add_to_map(ord,t,obj->objtls); X} Xobject_add_pane(obj,t,ord) XOBPtr obj; XTPPtr t; Xint ord; X{ X add_to_map(ord,t,obj->objtls); X tl_inc_ref_cnt(t->tl); X} Xobject_write_temp(obj,ord,fd) XOBPtr obj; Xint ord; XFILE *fd; X{ X TPPtr t; X t = object_get_nthtemp(obj,ord); X fprintf(fd,"%s\n",gen_anc_tlpname(t->tl,obj)); X write_attr(t->attr); X} Xobject_del_temp(obj,ord) XOBPtr obj; Xint ord; X{ X TPPtr t; X t = object_get_nthtemp(obj,ord); X del_from_map(ord,obj->objtls); X tl_dec_ref_cnt(t->tl); X unmake_temp(t); X} XAttrPtr temp_get_attr(temp) XTPPtr temp; X{ X return temp->attr; X} X XTLPtr object_get_nthtemptl(obj,n) XOBPtr obj; Xint n; X{ X TPPtr t; X t = (TPPtr) map_get_nth(n,obj->objtls); X return t->tl; X} X XRect *object_get_temp_rect(temp) XTPPtr temp; X{ X return attr_get_rect(temp->attr); X} Xobject_set_tempcoords(obj,tl,r) XOBPtr obj; XTLPtr tl; XRect *r; X{ X int n,i; X TPPtr t; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X if (tl == object_get_nthtemptl(obj,i)) { X t = object_get_nthtemp(obj,i); X attr_set_rect(t->attr,r); X break; X } X } X X} XTLPtr object_get_temp_tl(temp) XTPPtr temp; X{ X return temp->tl; X} X Xvoid object_del_temp_ptr(obj,tl) XOBPtr obj; XTLPtr tl; X{ X int n,i; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X if (tl == object_get_nthtemptl(obj,i)) { X object_del_temp(obj,i); X break; X } X } X X} Xint object_has_panetl(obj,tl) XOBPtr obj; XTLPtr tl; X{ X int n,i; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X if (tl == object_get_nthtemptl(obj,i)) { X return 1; X } X } X return 0; X X} X X Xint object_get_numtemps(obj) XOBPtr obj; X{ X return map_get_size(obj->objtls); X} Xobject_add(obj,owner,ord) XOBPtr obj; XOBPtr owner; Xint ord; X{ X obj->ancestor = owner; X add_to_map(ord,obj,owner->objmap); X sadd_to_hash(obj->name,owner->objtable,obj); X} Xint object_get_ord(owner,obj) XOBPtr owner; XOBPtr obj; X{ X int i; X int n; X OBPtr object_get_nthobj(); X n = object_get_numchild(owner); X for (i = 0; i < n; i++) { X if (object_get_nthobj(i,owner) == obj) X break; X } X if (i >= n) { X mywarning("major error about heredity\n"); X } X return i; X} Xvoid object_del(owner,ord) XOBPtr owner; Xint ord; X{ X int i,n; X OBPtr obj,object_get_nthobj(); X obj = object_get_nthobj(ord,owner); X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X object_del_temp(obj,0); X } X del_from_map(ord,owner->objmap); X sdelete_from_hash(obj->name,owner->objtable,obj); X} XOBPtr object_get_owner(obj) XOBPtr obj; X{ X return obj->ancestor; X} Xvoid object_set_owner(obj,owner) XOBPtr obj,owner; X{ X obj->ancestor = owner; X} Xchar *object_get_name(obj) XOBPtr obj; X{ X return obj->name; X} XOBPtr object_get_firstobj(obj) XOBPtr obj; X{ X return object_get_nthobj(0,obj); X} XOBPtr object_get_nthobj(n,obj) Xint n; XOBPtr obj; X{ X return (OBPtr) map_get_nth(n,obj->objmap); X} XTLPtr object_get_nthtl(n,obj) Xint n; XOBPtr obj; X{ X return (TLPtr) map_get_nth(n,obj->tlmap); X} Xint object_get_numchild(obj) XOBPtr obj; X{ X return map_get_size(obj->objmap); X} Xint object_get_numtl(obj) XOBPtr obj; X{ X return map_get_size(obj->tlmap); X} XSHashTPtr object_get_ctable(obj) XOBPtr obj; X{ X return obj->objtable; X} XSHashTPtr object_get_btable(obj) XOBPtr obj; X{ X return obj->tltable; X} Xint object_get_numtls(obj) XOBPtr obj; X{ X return map_get_size(obj->tlmap); X} X X/* X** FIX 8/16/88 decl of get_treerot X*/ XOBPtr get_treeroot(); X Xvoid object_set_name(obj,name) XOBPtr obj; XString name; X{ X OBPtr owner; X if (obj == get_treeroot()) { X return; X } X owner = obj->ancestor; X sdelete_from_hash(obj->name,owner->objtable,obj); X free(obj->name); X obj->name = mystrcpy(name); X sadd_to_hash(obj->name,owner->objtable,obj); X} XContainer object_get_script(obj) XOBPtr obj; X{ X return obj->script; X} XContainer object_get_label(obj) XOBPtr obj; X{ X return obj->label; X} Xvoid object_set_label(obj,label) XOBPtr obj; XContainer label; X{ X obj->label = label; X} XContainer object_get_color(obj) XOBPtr obj; X{ X return attr_get_col(obj->attr); X} X Xvoid object_set_level(obj,level) XOBPtr obj; Xint level; X{ X obj->level = level; X} Xint object_get_level(obj) XOBPtr obj; X{ X return obj->level; X} Xvoid object_set_script(obj,script) XOBPtr obj; XContainer script; X{ X obj->script = script; X} Xvoid object_set_color(obj,color) XOBPtr obj; XContainer color; X{ X attr_set_col(obj->attr,color); X} XInfoList object_get_info(obj) XOBPtr obj; X{ X return obj->info; X} Xvoid object_set_info(obj,ilist) XOBPtr obj; XInfoList ilist; X{ X obj->info = ilist; X} Xvoid object_add_tl(ord,tl,obj) Xint ord; XTLPtr tl; XOBPtr obj; X{ X tl_set_owner(tl,obj); X add_to_map(ord,tl,obj->tlmap); X sadd_to_hash(tl_get_name(tl),obj->tltable,tl); X} Xvoid object_del_tl(tl) XTLPtr tl; X{ X OBPtr obj; X int ord; X int n; X char x[128]; X if (tl_get_ref_cnt(tl) != 0) { X sprintf(x,"\"%s\" used by some object, so cannot be deleted.\n", X tl_get_name(tl)); X confirm_ok(x); X open_tl(tl); X return; X } X obj = tl_get_owner(tl); X n = object_get_numtls(obj); X for (ord = 0;ord < n;ord++) { X if (object_get_nthtl(ord,obj) == tl) X break; X } X if (ord >= n) { X mywarning("tl not found \n"); X return; X } X del_from_map(ord,obj->tlmap); X sdelete_from_hash(tl_get_name(tl),obj->tltable,tl); X/* put_tl_clipboard(tl,ONLY_REF);*/ X/* tl_unmake(tl);*/ X} Xint object_get_tl_ord(obj,tl) XOBPtr obj; XTLPtr tl; X{ X int i,n; X n = object_get_numtls(obj); X for (i = 0; i < n; i++) { X if (object_get_nthtl(i,obj) == tl) { X return i; X } X } X return -1; X} XOBPtr copy_object(obj) XOBPtr obj; X{ X OBPtr new; X TPPtr temp; X TLPtr tl; X int i,n,j; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X temp = object_get_nthtemp(obj,i); X j = object_get_tl_ord(obj,temp->tl); X if (j == -1) { X mywarning( X"Attempt to copy an object which is not self-contained!"); X return NULL; X } X } X new = new_object(mystrcpy( X object_get_name(obj)), X object_get_owner(obj)); X n = object_get_numtls(obj); X for (i = 0; i < n; i++) { X tl = object_get_nthtl(i,obj); X object_add_tl(i,tl_copy(tl),new); X } X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X temp = object_get_nthtemp(obj,i); X j = object_get_tl_ord(obj,temp->tl); X tl = object_get_nthtl(j,new); X object_add_pane(new,copy_temp(temp,tl),i); X } X new->attr = copy_attr(obj->attr); X new->script = ccpy_con(obj->script); X compile_object_script(obj); X return new; X} Xint check_tree_for_self_containment(obj) XOBPtr obj; X{ X int i,n,j; X TPPtr temp; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X temp = object_get_nthtemp(obj,i); X j = object_get_tl_ord(obj,temp->tl); X if (j == -1) { X return -1; X } X } X n = object_get_numchild(obj); X for (i = 0; i < n; i++) { X if (check_tree_for_self_containment(object_get_nthobj(i,obj)) == -1) { X return -1; X } X } X X} XOBPtr copy_tree(obj) XOBPtr obj; X{ X OBPtr new; X OBPtr cur; X TPPtr temp; X TLPtr tl; X int i,n,j; X if (check_tree_for_self_containment(obj) == -1) { X mywarning("Attempt to copy an object which is not self-contained!"); X return NULL; X } X new = new_object(mystrcpy( X object_get_name(obj)),object_get_owner(obj)); X n = object_get_numtls(obj); X for (i = 0; i < n; i++) { X tl = object_get_nthtl(i,obj); X object_add_tl(i,tl_copy(tl),new); X } X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X temp = object_get_nthtemp(obj,i); X tl = object_get_nthtl(object_get_tl_ord(obj,temp->tl),new); X object_add_pane(new,copy_temp(temp,tl),i); X } X n = object_get_numchild(obj); X for (i = 0; i < n; i++) { X cur = object_get_nthobj(i,obj); X object_add(copy_tree(cur),new,i); X } X new->attr = copy_attr(obj->attr); X new->script = ccpy_con(obj->script); X compile_object_script(obj,NO_REPORT); X return new; X} X XOBPtr read_object(fd,owner,level) XFILE *fd; XOBPtr owner; Xint level; X{ X char *name; X OBPtr obj; X TLPtr tl; X int numtl,numkid; X int i; X int numtemp; X if (fd == NULL) { X mywarning("yikes!!!\n"); X } X obj_number(); X name = fgetline(fd); X obj = new_object(name,owner); X read_script(fd,object_get_label(obj)); X obj->level = level; X object_add(obj,owner,0); X read_script(fd,object_get_script(obj)); X compile_object_script(obj,NO_REPORT); X fscanf(fd,"%d\n",&numtl); X for (i = 0; i < numtl; i++) { X tl = read_tl(fd,obj); X if (tl != NULL) { X object_add_tl(i,tl,obj); X } X } X fscanf(fd,"%d\n",&numtemp); X for (i = 0; i < numtemp; i++) { X AttrPtr at; X TPPtr t; X name = fgetline(fd); X at = read_attr(fd); X object_add_half_temp(obj,name,i); X/* object_add_temp(obj,tl,i);*/ X t = object_get_nthtemp(obj,i); X t->attr = at; X if (tl != NULL) { X } else { X mywarning("file corrupt!\n"); X } X } X fscanf(fd,"%d\n",&numkid); X for (i = 0; i < numkid; i++) { X read_object(fd,obj,level); X } X obj->attr = read_attr(fd); X obj->info = read_info(fd,obj); X return obj; X} XOBPtr create_master(name) Xchar *name; X{ X X OBPtr obj; X TLPtr tl; X obj = new_object(name,NULL); X return obj; X} Xvoid init_objmod() X{ X deltable = make_hash(); X init_hash(40,deltable); X} Xvoid init_deltable() X{ X unmake_hash(deltable); X deltable = make_hash(); X init_hash(40,deltable); X} X X/* X** FIX 8/16/88 decl for get_distinguished X*/ XOBPtr get_distinguished(); X Xvoid delete_object1(obj) XOBPtr obj; X{ X int i,n,k; X OBPtr father; X check_delete_aux(obj); X if (check_delete_object(obj) != 0) { X return; X } X if (obj == get_distinguished()) { X set_distinguished(NULL); X } X father = object_get_owner(obj); X n = object_get_numchild(obj); X for (i = 0; i < n; i++) { X delete_object1(object_get_firstobj(obj)); X } X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X object_del_temp(obj,0); X } X k = object_get_numtls(obj); X for (i = 0; i < k; i++) { X object_del_tl(object_get_nthtl(0,obj)); X } X if (father != NULL) { X n = object_get_ord(father,obj); X object_del(father,n); X close_obj(obj); X unmake_object(obj); X } X} Xvoid delete_object(obj) XOBPtr obj; X{ X int i,n,k; X OBPtr father; X X init_deltable(); X delete_object1(obj); X X} Xint check_delete_object(obj) XOBPtr obj; X{ X int i,n,k; X int failed; X int val; X char x[128]; X TLPtr tl; X n = object_get_numtemps(obj); X X n = object_get_numchild(obj); X failed = 0; X for (i = 0; i < n; i++) { X failed = check_delete_object(object_get_nthobj(i,obj)); X if (failed) { X return failed; X } X } X k = object_get_numtls(obj); X for (i = 0; i < k; i++) { X n = (int) hlookup(object_get_nthtl(i,obj),deltable); X if (tl_get_ref_cnt(object_get_nthtl(i,obj)) > n) { X sprintf(x,"%s used by some object, so cannot be deleted.\n", X tl_get_name(object_get_nthtl(i,obj))); X confirm_ok(x); X return 1; X } X } X return 0; X} Xint check_delete_aux(obj) XOBPtr obj; X{ X int i,n,k; X int failed; X int val; X TLPtr tl; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X tl = object_get_nthtemptl(obj,i); X val = (int) hlookup(tl,deltable); X if (val == NULL) { X val = 0; X } else { X delete_from_hash(tl,deltable); X } X val++; X add_to_hash(tl,deltable,val); X } X n = object_get_numchild(obj); X for (i = 0; i < n; i++) { X check_delete_aux(object_get_nthobj(i,obj)); X } X} Xvoid fill_in_tree(obj) XOBPtr obj; X{ X OBPtr new; X OBPtr cur; X TPPtr temp; X TLPtr tl; X int i,n; X n = object_get_numtemps(obj); X for (i = 0; i < n; i++) { X temp = object_get_nthtemp(obj,i); X temp->tl = tl_ofpname(temp->pname,obj); X tl_inc_ref_cnt(temp->tl); X } X n = object_get_numchild(obj); X for (i = 0; i < n; i++) { X cur = object_get_nthobj(i,obj); X fill_in_tree(cur); X } X} X SHAR_EOF if test 15231 -ne "`wc -c < 'objmod.c'`" then echo shar: error transmitting "'objmod.c'" '(should have been 15231 characters)' fi fi # end of overwriting check echo shar: extracting "'objmod.h'" '(1105 characters)' if test -f 'objmod.h' then echo shar: will not over-write existing file "'objmod.h'" else sed 's/^ X//' << \SHAR_EOF > 'objmod.h' X#define CHECK_OBJECT(x) if ((*(int *) x) != 9543) { \ X mywarning("bad object magic number!\n"); \ X return; \ X } Xtypedef void *OBPtr; Xtypedef void *TPPtr; X Xvoid *object_get_attr(); X Xvoid *object_get_temp_tl(); X XOBPtr new_object(); X Xvoid unmake_object(); X Xint object_add(); X XOBPtr object_get_owner(); X Xchar *object_get_name(); X XOBPtr object_get_nthobj(); XOBPtr copy_object(); X Xvoid *object_get_nthtl(); X Xint object_get_numchild(); X Xint object_get_numtl(); X Xvoid *object_get_ctable(); X Xvoid *object_get_btable(); X Xint object_get_numtls(); X Xvoid object_set_name(); X Xvoid *object_get_info(); X Xvoid object_set_info(); X Xvoid object_add_tl(); X XOBPtr create_master(); X Xint object_get_ord(); X Xvoid object_del(); X XOBPtr read_object(); X Xvoid *object_get_nthtemp(); Xvoid *object_get_nthtemptl(); Xvoid object_add_temp(); Xvoid object_del_temp(); Xvoid object_del_temp_ptr(); X Xvoid *object_get_label(); Xvoid object_set_label(); Xvoid *copy_obj(); Xvoid *copy_tree(); SHAR_EOF if test 1105 -ne "`wc -c < 'objmod.h'`" then echo shar: error transmitting "'objmod.h'" '(should have been 1105 characters)' fi fi # end of overwriting check echo shar: done with directory "'src'" cd .. # End of shell archive exit 0