v01i061: hype - a SunView object-oriented window builder, Part01/11
Charles Mcgrew
mcgrew at dartagnan.rutgers.edu
Fri Sep 15 12:25:11 AEST 1989
Submitted-by: apctrc!zmls04 at uunet.uu.net (Martin L. Smith)
Posting-number: Volume 1, Issue 61
Archive-name: hype/part01
#! /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:
# Makefile
# Readme
# example.hyp
# This archive created: Thu Sep 14 20:44:16 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Makefile'" '(318 characters)'
if test -f 'Makefile'
then
echo shar: will not over-write existing file "'Makefile'"
else
sed 's/^ X//' << \SHAR_EOF > 'Makefile'
X
Xhype :
X cd archives/container; make
X cd archives/hash; make
X cd archives/info; make
X cd archives/mfile; make
X cd src; make
X
Xtest: hype
X hype -Sexample.hyp
X
Xlpr:
X cd Guide; make lpr
X cd Tutorial; make lpr
X cd ToDo; make lpr
X
Xclean:
X find archives src -name "*.[oa]" -print -exec rm {} \;
SHAR_EOF
if test 318 -ne "`wc -c < 'Makefile'`"
then
echo shar: error transmitting "'Makefile'" '(should have been 318 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'Readme'" '(21953 characters)'
if test -f 'Readme'
then
echo shar: will not over-write existing file "'Readme'"
else
sed 's/^ X//' << \SHAR_EOF > 'Readme'
X August 21, 1989
X Tulsa, Oklahoma
X
X This is our submission to the world. Hope someone enjoys it.
X
XDISCLAIMER:
X Hype was written by Robert L. Read (read at cs.utexas.edu) in 1988
X under contract to the Amoco Production Company, Tulsa Research
X Center. Amoco has released Hype in its entirety to its author,
X Rob Read. Rob has elected to place the code into the public
X domain and I (Martin L. Smith, zmls04 at trc.amoco.com) am doing
X the donkey work for Rob.
X
X Hype is free and absolutely unsupported. Neither Amoco nor
X Rob Read nor I nor anyone on this earth make any claims about
X its suitability or reliability and we accept absolutely no
X responsibility for any consequences which may result from its
X use.
X
X So far as we are concerned, you may do anything whatsoever that
X you wish with this program.
X
XRECLAIMER:
X
X Rob and I would like to hear from you if you use it, hate it,
X like it, extend it, or have some cogent remarks to make about
X it. (His e-mail gets through more regularly than mine does.)
X
XShameless Claims:
X
X Hype is a visual-interface configurable machine which supports
X a tree-structured hierarchy of visible windows. Windows
X may contain a collection of widgets (buttons, sliders, etc).
X The class of all hype entities (windows, widgets, etc) are `objects.'
X A hype configuration (called a state) is built interactively
X within hype. (It's a little like emacs in that it consists
X of an engine that has to be programmed to become an application;
X it's internal flexibility is much less than emacs'.)
X
X Hype currently sits on Sunview. It's mostly been run on
X Sun3's. Not sure if we actually tested it on a 4.
X
X Hype windows and widgets communicate by message-passing.
X A message consists of a name string (such as `mouseUp')
X and an optional parameter string which, like all hype strings,
X can be of arbitrary length. Messages are initiated by
X asynchronous system events such as mouse clicking,
X program start-up, death of a child, etc,
X or by
X synchronous hype events such as an object sending a
X message to another object.
X Messages may be directed to a specific object or broadcast to
X the entire tree. Directed messages which are not intercepted
X are hierarchically routed up the window tree until they are
X either intercepted by someone along the way or they pass off
X the root of the tree into oblivion.
X
X An object's behavior is defined by specifying which messages
X it will intercept and how it will handle those messages. We
X do this by giving each object a (possibly empty) set of methods.
X Each method is programmed in a C-like language and can include
X such actions as changing the visual appearance of objects,
X initiating new messages, executing other programs, messing with
X the file system, etc.
X
X Hype was built to provide an easy way to interactively create
X light-weight windowed user interfaces. We spent more time
X building it than actually using it but we think that it met
X our original expectations. It's fun to play with (there's
X a cold-start tutorial in the documentation) and it's a fairly
X neat prototyping system as well. Give it a shot.
X
XMaking Stuff:
X
X From this directory,
X
X make creates ./hype, the executable.
X
X make test creates ./hype, the executable, and
X executes it with the state file
X "example.hyp," approximately based on
X the tutorial (below)
X
X make lpr sends all the documentation to lpr.
X Some of the docs use postscript figures
X and the makefile assumes your printer can
X handle postscript.
X
X make clean erases a bunch of *.o and *.a files
X
X All of the `real' makefiles have CFLAGS = -g embedded in them.
X Don't think we've tried anything more macho than that. We
X considered cleaning up the program structure before submitting
X it to the net but decided instead to `share' all of our
X intellectualy and personal defects with you good people as
X well as our code itself. Think of it as a contribution
X to the rest-of-the-world's self-esteem.
X
XSource Directories:
X
X The subdirectories src and archive/* contain all the source.
X There is lots of relative-path linking among all these, all
X for include and library files, so either maintain this relative
X tree or grep around and fix the connections.
X
XDocumentation Directories:
X
X Guide:
X Programmers guide. Mostly -ms (troff, nroff) document.
X The guide has three figures, prepared with Frame. Postscript
X versions of those figures have been included. If you have
X a ps printer, just try
X make lpr
X and you should get all the pieces. Don't have an alternative
X way to do the figures; regrets to you ps-less people out there.
X
X ToDo:
X A list of things to fix/change/think about. If you're
X i[Bnterested in extending, or re-doing hype, look at this.
X
X Tutorial:
X A tutorial introduction to hype. Comments under `Guide'
X (above) apply here.
X
XMore Documentation
X
X We are preparing a paper, which we will probably submit to SPE,
X on the design of hype and our experiences with it. I haven't
X included it here because some journals (don't know about SPE)
X get irritated at rampant outside dissemination. If you extremely,
X really, honestly, no I am not shitting you, want a preprint
X then send surface mail (e-mail is too easy for compulsive
X archivists) to
X Martin L. Smith
X Amoco Research
X POB 3385
X Tulsa, OK 74102
X and we'll see what we can do. Include the phrase "I can still
X see portions of my desk top and I promise I will read your
X paper when I get it."
X
X
XHype state files
X
X example.hyp:
X is a hype state which started out as the
X examples worked out in the tutorial. We've added some
X stuff for various purposes, mostly testing.
X
XIf Make Breaks:
X
X Here is the output, after a modest bit of cosmetology, from
X running make on our system, a Sun 3/60:
X
X cd archives/container; make
X cc -g -sun3 -c container.c
X ar rcv container.a container.o
X a - container.o
X ranlib container.a
X cd archives/hash; make
X cc -g -sun3 -c hash.c
X cc -g -sun3 -c shash.c
X ar rcv hash.a hash.o shash.o
X a - hash.o
X a - shash.o
X ranlib hash.a
X cd archives/info; make
X cc -g -sun3 -c info_tl.c
X cc -g -sun3 -c info_obj.c
X cc -g -sun3 -c info_item.c
X cc -g -sun3 -c info_util.c
X ar rcv info.a *.o
X a - info_item.o
X a - info_obj.o
X a - info_tl.o
X a - info_util.o
X ranlib info.a
X cd archives/mfile; make
X cc -g -sun3 -c mfile.c
X ar rcv mfile.a mfile.o
X a - mfile.o
X ranlib mfile.a
X cd src; make
X cc -g -sun3 -c attr.c
X cc -g -sun3 -c amcomp.c
X cc -g -sun3 -c clipboard.c
X cc -g -sun3 -c color.c
X cc -g -sun3 -c confirm.c
X cc -g -sun3 -c deque.c
X cc -g -sun3 -c dialogue.c
X cc -g -sun3 -c emalloc.c
X cc -g -sun3 -c edit_cont.c
X cc -g -sun3 -c fileio.c
X cc -g -sun3 -c global.c
X cc -g -sun3 -c handler.c
X cc -g -sun3 -c hype.c
X cc -g -sun3 -c iam.c
X cc -g -sun3 -c info.c
X cc -g -sun3 -c init.c
X cc -g -sun3 -c interface.c
X cc -g -sun3 -c itemmod.c
X cc -g -sun3 -c map.c
X cc -g -sun3 -c objmod.c
X cc -g -sun3 -c pathname.c
X "pathname.c", line 64: warning:
X illegal combination of pointer and integer, op RETURN
X cc -g -sun3 -c screen.c
X cc -g -sun3 -c select.c
X cc -g -sun3 -c sighandler.c
X cc -g -sun3 -c symbol.c
X cc -g -sun3 -c textboard.c
X cc -g -sun3 -c tlmod.c
X cc -g -sun3 -c util.c
X cc -g -sun3 -c visual.c
X yacc scripter.y
X
X conflicts: 73 shift/reduce
X cc -g -sun3 -c -o scripter.o y.tab.c
X rm -f y.tab.c
X cc -g -sun3 -c lex.c
X cc -g -o ../hype scripter.o lex.o attr.o amcomp.o clipboard.o
X color.o confirm.o deque.o dialogue.o
X emalloc.o edit_cont.o fileio.o global.o
X handler.o hype.o iam.o info.o
X init.o interface.o itemmod.o map.o objmod.o
X pathname.o screen.o select.o sighandler.o
X symbol.o textboard.o tlmod.o util.o
X visual.o
X ../archives/info/info.a ../archives/mfile/mfile.a
X ../archives/container/container.a ../archives/hash/hash.a
X /usr/lib/debug/malloc.o -ll -lm
X -lsuntool -lsunwindow -lpixrect
X size ../hype
X text data bss dec hex
X 172032 24576 52952 249560 3ced8
X
X
XMiscellany:
X
X These are some notes that Rob made during the latter stages of
X development. Some of them refer to bugs that have been fixed
X or are otherwise out of date. I've included them just to keep
X the record complete.
X
X ----- NOTES ABOUT BUGS -----
X
X HYPE seems to be running rather smoothly. However it is a large system
X and is bound to contain bugs. In particuliar, SunView is known to be
X buggy in certain ways. The text following describes known and anticipated
X problems, ways to avoid them, and what to do if they occur.
X
X 1) Hype is dangerously sensitive to special characters, in particuliar
X the ^. I may be able to fix that before I leave.
X
X 2) I have had at least one unexplainable crash.
X
X 3) Sun claims that their advertised menu utility GEN_PROC is unreliable.
X I am still using that facility at present. This could produce problems
X that would be extremely difficult to debug or even explain.
X
X 4) In OS3.5 their is a repeatable case of hype invoking a UNIRAS routine
X and smashing the machine, i.e., the message
X PANIC!!! RESYNCHING DISKS.
X is displayed and the machine reboots. Further, this has on one
X occasion damaged files in the file system. This is clearly a major
X bug. I am attempting to verify if the same thing is true for
X OS4.0.
X
X 5) Because of admitted bugs in SunView, I am unable to deallocate
X menu space perfectly. There are undoubtably other memory leaks
X in the system, but at present they seem to be slow enough not
X to be a problem. It is possible however that one of the builtin
X functions has a leak, and thus a script calling it which was
X executed often would be a problem. Luckily, simply quitting HYPE
X and restarting reclaims all lost memory, although of course it
X will begin leaking again.
X
X 6) OS4.0 -- Hype appears to run as is under os4.0, but an exhaustive
X test is impossible. If something breaks on 4.0 that didn't break
X on 3.5, it may be a failue on my part to return a value from a
X function. Simply returning the correct value will fix the problem.
X (the OS3.5 compiler has a tendency to return the right value without
X an explicit return statement. Obviously I should have no functions
X without explicit returns, but I might anyway.)
X
X 7) DUPLICATE AND EMPTY NAMES -- Hype duplicate allows and empty names.
X This
X is convenient since the clipboard can be used easily to manipulate
X entities, but creates a non-deterministic situation as to which will
X be chosen. I know of no bugs with this but suspect if pushed a
X failure could be found.
X
X 8) BAD SCRIPTS -- I know of no case in which righting an erroneous
X script can cause HYPE to crater. However, this is a very difficult
X bug to for which to test. If this occurs, tell someone and right
X the script correctly. (or be wrong in a different way.)
X
X WHAT TO DO IF THERE IS A PROBLEM:
X AVOID THE BEHAVIOUR THAT PRODUCED THE PROBLEM.
X
X Lame advice, surely, but the best available. Hype is flexible
X enough that there will be many solutions to MOST problems. If
X one brings hype down, use another one.
X
X STATE FILES AND HOW THEY HELP
X Hype carries it's information in "state files". If hype crashes,
X all changes up to the last "saving" of the state file are lost.
X Thus, saving often makes you less susceptible to HYPE crashes
X (which seem very rare at the moment but may become a problem.)
X
X Furthermore, it's a good idea to keep backups of state files just
X as you keep backup of source code, thus protecting from:
X 1) Disk crashes
X 2) Accidental erasure
X 3) Hype corruption of its own state files.
X
X TO A CODE MAINTAINER
X Where do I begin? Hype is written at about C-- grade coding
X right now. The one thing it does have going for it is a high degree
X of modularity for a program that handles such a complicated data
X structure. I tend to use functional interfaces, which make things
X wordy and a bit slower, but do provide a level of abstraction.
X
X Hype is basically a maintainer of a huge attributed graph. That is,
X "object"s form a tree, each node of which has a lot of information.
X If the links in that system are corrupted, hype will crash eventually.
X
X The language implementation is straightforward (as those things go.)
X The huge file iam.c contains all of the builtin functions, and provides
X lots of examples an adding more. To add a new primitive function you
X DO NOT have to change the YACC or Lex specification. The function
X address and a suitable name must be added to the table defined in
X init.c, and the function should be added to iam.c. Of course,
X each function must obey several constraints, that are pretty clear
X from looking at the other functions in iam.c. It must:
X
X 1) Use the macro CHECK_NUM_ARGS (or whatever I called it.)
X This macro updates the PC, and so must be used even for functions
X of zero arguments.
X
X 2) A STRING (not a Container, or integer etc.) MUST be pushed
X on the stack as the return value.
X
X 3) The appropriate number of arguments MUST be popped.
X
X
X WORKING WITH SUNVIEW
X This is a major downer. Sunview is a nice package but it does have
X bugs. Further, it is just high enough level that you don't really
X know what's going on. In particuliar, you can't successfully
X manage the events as they occor.
X
X FILE DESCRIPTORS
X SunView uses file descriptors to implement windows. This means
X that the number of windows open at one time is limited. I have
X solved this problem by closing old windows behind the user. It
X is tempting to increase the number of windows I allow to be open,
X however when hype performs certain operations it may need three
X or four at once. I have it set now to the highest level that
X does not cause problems. In OS4 it may be better.
X
X ----- NOTES ABOUT THINGS THAT NEED ATTENTION -----
X
X
XThis file contains an incomplete list of the work I would accomplish to
Ximprove HYPE short of a major rewrite, which is what it really needs.
XHowever, this file may be informative to a maintainer or as a guide for
Xrewriting (although I hope to be involved in that process.)
X
X1) The number of argument checks could be print the function in question
Xif it failed, thus providing better error checking.
X
X2) The number of argument checks could be compile time checked, thus
Xproviding superior error checking.
X
X3) The syntax error linenumbers should be reported script-file relative
Xrather than relative to the particuliar message handler in question.
X
X4) Message handlers could be specified with regular expressions. (messages
Xthemselves can not be easily made into regular expressions.)
X
X5) The source code should compile without warnings.
X
X6) Standard functions should take a variable number of arguments.
X
X7) Most of the string handling functions defined in the UNIX manuals
Xshould be supported.
X
X8) Speed could be tremendously increased by a better string handler
X(container) package. In particuliar, a system that uses a union of
Xflat strings and containers, and keeps track of the current representation
Xcould greatly accelerate actions, especially script actions.
X
X9) An increased mathematical set of functions should be provided.
X
X10) Several general "find" functions should be provided. These would
Xsearch an entire hype structure:
X a) looking for handlers that caught a given message
X b) searching all data fields for a string.
X
X11) The type of items should be expanded to include invisible items,
Xchoice items, etc.
X
X12) An item expansion facility would be nice but fairly difficult, at
Xleast in Sunview.
X
X13) Bit-mapped image importation is a must.
X
X14) Cursor icon control (easy in X, hard in Sunview) would be nice.
X
X15) Underlying string operations need to be fast.
X
X16) The template bgtext facility is very stop-gap now.
X
X17) The refreshing takes far to long, and should be done on an item-by-item
Xbasis rather than by redrawing the whole object.
X
X18) OBVIOUSLY, WE NEED X NOW!!
X
X19) The functional interfaces to the object modules need to be better thought
Xout.
X
X20) The information module info.c could be easily obviated by a hash table
Xthat would decrease code volume and increase speed.
X
X21) Each enitity should maintain its own absolute pathname so that the
X expensive conversions in pathname.c could be really cut down.
X
X22) Each entity should have a set of static variables that are part of the
X state and thus stored on quit. These should be declared with some nice
X syntax somewhere in the message handling files.
X
X23) The state files should be more efficiently readable--that is, not
X require character by character input.
X
X24) It would be really, really cool if some sort of open pipe facility
X was allowed, and messages would be generated by hype when the pipe
X closed. This is very hard in SunView especially because of the
X file descriptor problem, but should be easy in X.
X
X25) It might be possilbe to build some sort of dynamic link or automatic
X new process incorporation.
X
X26) The next designer needs to sit down with SmallTalk and build and pick
X all the good stuff. Hype, for this audience, is NOT meant to be an
X object-oriented programming environment, but IS meant to take advantage
X of whatever it can to make user interface design easy.
X
X27) With X, it is not inconceivable that HYPE could start managing some
X graphics functions.
X
X28) Hype could provide somesort of debugging mode that printed all
X kinds of messages. Debugging object-oriented systems is hard.
X
X29) The hash table implementation does not now expand itself when it gets
X full. It makes sense to have it detect fullness and recompute itself.
X
X30) The awk approach to subscripted variables might will work out.
X
X31) Image importation should employ a standard canned SUN painting program,
X whichever one is useful.
X
X32) The benefits of X's control over the event stream are too numerous
X to name.
X
X33) It would be nice to have some standard internal quoting system so
X that spaces aren't such a downer.
X
X34) It is still true that a browser would be quite useful, and not really
X that hard.
X
X35) The Apple/NeWS concept of using a bit compression of the images as
X its own icon might work especially will since we have fixed item
X shapes (even in an X version.)
X
X36) Hype might very well offer access to some other interpreter, namely
X an SPL/mathlab like language, or a LISP interpreter or both.
X Since no copilation is required, Hype could pipe back and forth
X between the stated interpreter. This would allow a user to use
X hype in a HYPERCARD like fashion, as a graphics window onto another
X high-level language, or more importantly to use a fast computational
X engine like a COMMON LISP interpreter to do HYPE dirty work. This
X seems cooler than trying to make the HYPE LANGUAGE fast, since that
X should not really be part of it's design criteria.
X
X37) HYPE can definitely be modified to run as a stand alone program just
X as spl could be. (I mean here in pipes.) Perhaps the interactive
X design of hype makes this unnecessary though.
X
X38) If Hype had sort of an internal graphics tablet the user could draw
X on, we could do stuff like string processes together like SEISPROC,
X only better. Perhaps more realistic is to write a special program
X that HYPE knows how to communicate with to that, and then have
X HYPE extract the given information from it.
X
X39) Along those lines, it might be possible to write a package that
X lets a (presumably but not necessarily) child process actually send
X (using a function call that looks just like the HYPE "send" call)
X messages to a different HYPE process. Thus HYPE could be extended
X by any number of auxilliary programs that HYPE is "unaware" of but
X know how to talk to HYPE.
X
X40) Clearly one important aspect of HYPE/X is the networking concept.
X X makes it easy for HYPE to run on a Cray and be driven from a SUN.
X I suggest the following additional support functionality:
X 1) High level HYPE functions that manage network job spawning
X and maintenance. A HYPE programmer should be protected from
X the exact syntax of a remote shell command, or an ftp , etc.
X (Of course, unix and unixbg still work, and can spawn remote
X shells.
X
X 2) Possibly support for a networking monitoring "PSEUDO-OBJECT"
X like the current (real) object "history" in the public file
X with greatly increased functionality.
X
X50) A hype window clear switch, to iconify all hype windows.
X
X51) BUILD AN EDITOR INTO HYPE!!!! Maybe emacs could be mock-lisp
X programmed to do the job. Who knows what evil lurks in the
X hearts of men?
X
X52) A special hypnotic hype pattern that will make users my absolute
X slave forever.
X
X53) The kitchen sink.
X
X54) The browser migh be anotated with known message creation and reception
X arcs.
X
X55) If truly large hype machines were ever built, we could have an object
X load on-demand function that would keep the internal memory structure
X reaonable.
X
X56) We really would like to have a generaly object-ownership and privilege
X mechanism, so that JOE BLOW can create an object that JOE-SIXPACK can
X use but not modify, even though JOE-SIXPACK can build his own objects.
X
X57) Conceivably some kind of mega-funky delta versioning system might
X be kept on state files.
X
X58) TOTAL INSULATION OF THE USER FROM THE FACT THAT HE IS USING HYPE.
X Thus HYPE could be a real programming tool.
X
X59) The concept of PSEUDO-OBJECTS is an appealing aproach to graphics
X that does not require the full inheritance and class-definablility
X of Smalltalk.
X
X60) On-line HYPE help.
X
X61) So it goes, on and on, through the setting sun, we go
X round and round and round and round until we
X pick it up again
X time flies
X on and on it goes
X
X------ END -----
SHAR_EOF
if test 21953 -ne "`wc -c < 'Readme'`"
then
echo shar: error transmitting "'Readme'" '(should have been 21953 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'example.hyp'" '(2969 characters)'
if test -f 'example.hyp'
then
echo shar: will not over-write existing file "'example.hyp'"
else
sed 's/^ X//' << \SHAR_EOF > 'example.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 126 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^
X63^
X/Tutorial/Thermometer!Mercury#DegC
X^
X145^
X/Tutorial/Thermometer!Mercury#DegF
X+
XSandBox
X^
XSand Box^
X^
X^
X1
XToys
X^
X^
X^
X^
X3
XRecursionTest
XRecursionTest
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^
X744 305 408 109 0 1
X^
X^
X1
X!Toys
X0 0 399 109 0 0
X^
X^
X1
XRecursionTest
X^
XRecursionTest^
X^
X^
X1
XToys
X^
X^
X^
XExecuting this test will break hype:
X^
X3
XRecursionCount
XRecursion Count
X0
X0
X^
X
X^
X^
X1^
X^
X^
X^
X^
X^
X^
X^
X^
X^
X^
X^
X10^
X70 60 0 0 0 0
X^
X^
XGo
XGo
X1
X0
X^
XmouseUp:
X{
X count = param();
X if(count == "null" ) { # must be the real mouseUp
X count = getitemval("!Toys#RecursionCount");
X stderr("Recursion to depth " $$ count $$ " starting." );
X } else {
X --count;
X# stderr(" count = " $$ count );
X# if(count <= 0)
X# return "";
X }
X stderr(" count = " $$ count );
X if(count > 1)
X send("mouseUp", self(), count);
X if(count == "null")
X stderr("Done.");
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^
X370 60 0 0 -1 0
X^
X^
X0 431 408 109 0 1
X^
X^
X1
X!Toys
X0 0 399 109 0 0
X^
X^
X0
X153 223 409 132 0 0
X^
X99 126 132^
X^
X15^
X/Tutorial/SandBox/RecursionTest!Toys#RecursionCount
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 2969 -ne "`wc -c < 'example.hyp'`"
then
echo shar: error transmitting "'example.hyp'" '(should have been 2969 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
More information about the Comp.sources.sun
mailing list