[comp.sources.sun] v01i064: hype - a SunView object-oriented window builder, Part04/11

mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (09/15/89)

Submitted-by: apctrc!zmls04@uunet.uu.net (Martin L. Smith)
Posting-number: Volume 1, Issue 64
Archive-name: hype/part04

#! /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:
#	ToDo
#	Tutorial
# This archive created: Thu Sep 14 20:51:15 1989
export PATH; PATH=/bin:$PATH
if test ! -d 'ToDo'
then
	echo shar: creating directory "'ToDo'"
	mkdir 'ToDo'
fi
echo shar: entering directory "'ToDo'"
cd 'ToDo'
echo shar: extracting "'Makefile'" '(244 characters)'
if test -f 'Makefile'
then
	echo shar: will not over-write existing file "'Makefile'"
else
sed 's/^	X//' << \SHAR_EOF > 'Makefile'
	X
	XFILES	=	macros title	\
	X		bugs todos
	X
	Xcrt:
	X	tbl $(FILES) | nroff -ms | col -b | more -f
	X
	Xlpr:
	X	tbl $(FILES) | troff -t -ms | lpr -t 
	X
	Xspell:
	X	deroff $(FILES) | spell | more
	X
	Xsafe:
	X	rm -rf .safe
	X	ar rv .safe makefile $(FILES)
	X	chmod ugo-w .safe
SHAR_EOF
if test 244 -ne "`wc -c < 'Makefile'`"
then
	echo shar: error transmitting "'Makefile'" '(should have been 244 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'bugs'" '(1117 characters)'
if test -f 'bugs'
then
	echo shar: will not over-write existing file "'bugs'"
else
sed 's/^	X//' << \SHAR_EOF > 'bugs'
	X.bp
	X.SH
	X.LG
	X.LG
	XBugs
	X.NL
	X.NH 0
	XCore Dumps
	X.PP
	X.B Hype
	Xstill dumps core from time to time.
	XWe do not know if this is a manifestation of a single bug,
	Xmultiple bugs,
	Xor of internal problems in \fBSunview\fR
	X(which are known to exist).
	XIt is usually not possible to duplicate the error condition.
	X.PP
	XThe problem is not chronic and will probably remain until
	X.B hype
	Xis running under X11.
	X.NH
	XProcess Control
	X.PP
	XThere is a problem with child process control under
	X.B Sunview .
	XThe problem stems from the fact that
	X.B Sunview
	Xwants to retain control of child processes but the facilities
	Xoffered by
	X.B Sunview
	Xare not sufficient for what we need to do.
	XWe have elected to bypass Sun's system and implement our own,
	Xknowing that we were violating the
	X.B Sunview
	Xrules.
	X.PP
	XThe system sometimes gets in trouble when one is both programming
	X(which uses child editing processes)
	Xand trying to execute script-controlled child processes
	Xin a single
	X.B hype
	Xsession.
	X.PP
	XThe process-monitoring code was revised in January, 1989.
	XIt seems to be more reliable under Sunview.
	XProbably should be redone
	X(and made simpler)
	Xin X11.
	X
SHAR_EOF
if test 1117 -ne "`wc -c < 'bugs'`"
then
	echo shar: error transmitting "'bugs'" '(should have been 1117 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'macros'" '(20 characters)'
if test -f 'macros'
then
	echo shar: will not over-write existing file "'macros'"
else
sed 's/^	X//' << \SHAR_EOF > 'macros'
	X.nr PS 11
	X.nr VS 13
SHAR_EOF
if test 20 -ne "`wc -c < 'macros'`"
then
	echo shar: error transmitting "'macros'" '(should have been 20 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'title'" '(258 characters)'
if test -f 'title'
then
	echo shar: will not over-write existing file "'title'"
else
sed 's/^	X//' << \SHAR_EOF > 'title'
	X.TL
	X.LG
	X.LG
	X.LG
	XHype: Bugs and Improvements
	X.NL
	X.sp 3
	X.AU
	XMartin Smith
	XRob Read
	XTerri Fischer
	XKim Dill
	X.NL
	X.sp 5
	X.QP
	X.LG
	XThis is a memorandum of known bugs
	Xand possible language extensions.
	X.NL
	X.QE
	X.ds CH Hype Bugs and Extensions \(em Version 1.0
	X.ds CF -%-
SHAR_EOF
if test 258 -ne "`wc -c < 'title'`"
then
	echo shar: error transmitting "'title'" '(should have been 258 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'todos'" '(4565 characters)'
if test -f 'todos'
then
	echo shar: will not over-write existing file "'todos'"
else
sed 's/^	X//' << \SHAR_EOF > 'todos'
	X.SH
	X.LG
	X.LG
	XThings To Do
	X.NL
	X.NH 0
	XArrays
	X.PP
	XSupport a generalized awk-type array.
	XThink this means accept expressions like
	X.I "x[yoyo]"
	X(which is probably the same as defining a new variable
	Xwith a strange name).
	XThis scheme generalizes well to multiple dimensions
	Xand index types.
	XShould support
	X.I "x[yoyo[lima]]"
	Xetc.
	X.NH
	XGlobal Variables
	X.PP
	XEntities should have static variables.
	XPrescription might be
	X.I "entity-name.variable-name" .
	XProbably should be accessible from below but not above
	X(on the grounds that we have a bastard
	X.B Smalltalk
	Xin which objects replace classes;
	Xnot a very strong analogy).
	X.PP
	XSpecification possibilities:
	Xseparate info box,
	Xpart of the script,
	Xarray convention (\fBglobal[\fIreal-name\fB])\fR.
	XInitialization possibilities:
	Xnone (or
	X.B initHype ),
	Xscript,
	Xinfo box.
	X.PP
	XThis requirement is currently filled (sort of)
	Xby
	X.B setglob
	Xand
	X.B getglob .
	XThe present system stores globals in
	X\fBhype\fR's \fIenvironment\fR space
	X(sorry).
	X.NH
	XLists
	X.PP
	XShould support an open-ended list syntax for our typeless
	Xvariables.
	XPassing a list of targets to
	X.B send
	Xshould cause the message to be sent to each recipient;
	Xthe message responses should be collected into a list
	Xreturned by the
	X.B send
	Xfunction.
	XA single-element list should look like a simple variable.
	XThere should be ways to return the tree structure below
	Xa given point as a list,
	X\fIetc\fR.
	X.NH
	XProgramming Menu Lockout
	X.PP
	XThink we forgot to add the programming lockout switch.
	XThis should shortcircuit (for sure) all the
	Xmodification menus and (optionally) the navigation part as well.
	XProbably sufficient to use the HYPE_WIZARD environment variable
	X(or some such)
	Xfor this.
	X.NH
	XRembering Last Open States
	X.PP
	XHype should return to its last open state when it starts.
	XIt should be continuous across exits.
	XThis option should be defeatable from the command line.
	X.NH
	XReducing Library Size
	X.PP
	XOne of the reasons we have such a large library
	Xis the multiplicity of types for which we have
	Xseparate calls.
	XAn entity's fields should be dot-specified:
	XPane#Item.default, etc.
	XThen we could have \fBget("\fIPane#Item.value\fB")\fR etc.
	X.PP
	XDirectly referencing attributes might be even better.
	X.DS C
	X\fB#Item.value = "Rings Around Uranus";
	X\fB#OtherItem.color = "0 0 255";\fR
	X.DE
	XCould we force references to be explicit at compile-time?
	X.NH
	XScript Compilation Error Handling
	X.PP
	XOne solution is to imbed commented error messages
	Xinto an item's script.
	XEach source script line in memory would presumably
	Xrequire a file-line-number reference.
	XAt least this would be editor-unspecific.
	XCould use a funny format and strip these line out
	Xafter compilation succeeds.
	X.DS C
	X\fB#!!$SCRIPT ERROR: LINE xxx  Silly variable names not allowed.\fR
	X.DE
	X.NH
	XScript Run-time Error Handling
	X.PP
	XAt least need a backtracking facility.
	XHow about an \fBErrorBoard\fR, like
	X.B CB ?
	XCould use that for compile problems too.
	X.NH
	XBrowsing
	X.PP
	X.B Hype
	Xshould emulate \fBsmalltalk\fR
	Xand provide a set of browsers
	X(or one versatile one).
	XFurther,
	Xit should be possible to have a number of browsers
	Xopen at the same time.
	XThis should also be true of editors.
	X(We could do this now if process control under Sunview
	Xwere more reliable.)
	X.PP
	X.B "Message Browsing:"
	XShould support "who will respond to this message?".
	XCould try to support "who can send this message?"
	Xputting in question marks where message names are not literal.
	X.PP
	X.B "Structure Browsing:"
	XSimplest forms are object tree structure,
	Xand internal structure of an object.
	XLatter would show pane and item names (and type for item);
	Xwhich entities have scripts,
	Xand what messages those scripts handle.
	XNote that a structure browser could supplant the labyrinthine
	Xnavigation/creation/deletion menu system.
	X.PP
	XWe need to be able to browse, etc,
	Xwhile an editor is open.
	XIn a rework of the system we could support multiple simultaneous editors.
	X.NH
	XImproved Pretty Printing
	X.PP
	XShould have two modes:
	Xone is crt oriented,
	Xone is typesetter oriented.
	XThe latter could require a translation program.
	X.NH
	XAutomatic State File Backup
	X.NH
	XRE Message Names
	X.PP
	XMake message tags in scripts into regular expressions.
	XThis would make if easy for one script to respond to a whole class
	Xof messages, even all messages.
	X.NH
	XImages and Icons
	X.PP
	XAbsolutely have to have this.
	XAlso,
	Xan inconified object should be able to diddle
	Xits visual state without being opened.
	X(Turn red for bad news, etc.)
	X.NH
	XDebugging Support - Trace and Pause
	X.PP
	XWould be helpful to be able to send trace
	Xoutput to a commandtool.
	XProbably should have several levels of detail.
SHAR_EOF
if test 4565 -ne "`wc -c < 'todos'`"
then
	echo shar: error transmitting "'todos'" '(should have been 4565 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'ToDo'"
cd ..
if test ! -d 'Tutorial'
then
	echo shar: creating directory "'Tutorial'"
	mkdir 'Tutorial'
fi
echo shar: entering directory "'Tutorial'"
cd 'Tutorial'
echo shar: extracting "'addwidgets'" '(6613 characters)'
if test -f 'addwidgets'
then
	echo shar: will not over-write existing file "'addwidgets'"
else
sed 's/^	X//' << \SHAR_EOF > 'addwidgets'
	X.bp
	X.SH
	X.LG
	XIII.  Adding a Widget
	X.NL
	X.PP
	XIn this section
	Xwe will add
	Xa button to the root object
	Xwhich, when clicked upon,
	Xwill open
	X.B Thermometer .
	XIn order to do this,
	Xwe will:
	X.RS
	X.IP \(bu
	XAdd a template to
	X.B Tutorial
	X(our root object).
	X.IP \(bu
	XInstall a button on the template.
	X.IP \(bu
	XCopy the template containing the button onto
	X.B Tutorial
	Xas a pane.
	X.IP \(bu
	XProgram the button to open
	X.B Thermometer
	Xwhenever the button receives a left mouse click.
	X.RE
	X.LP
	XAdd a template
	X(a pattern of items)
	Xto the root object:
	X.RS
	X.IP \(em
	XStart
	X.B hype .
	XYour root object should appear.
	X.B Thermometer
	Xis present but it's closed.
	X.IP \(em
	XFrom the root object's border menu select
	X.B "Template\(rhCreate\ Template" .
	XA squarish, black window should appear.
	X.IP \(em
	XFrom the new window's border menu, select
	X.B Window\(rhMove
	Xand move the window so it is not overlapping the root object.
	X(Sometimes a template gets hidden behind other objects and
	Xyou won't be able to find it unless you move or make 
	Xiconic all the objects in front of it.)
	X.IP \(em
	XFrom the template's border menu,
	Xselect
	X.B "Template Info" .
	X.IP \(em
	XChange
	X.B "Template Name"
	Xto
	X.I Buttons .
	X.IP \(em
	XClick left on
	X.B OK .
	X.IP \(em
	X.I "Save your state" .
	X.RE
	X.LP
	XYou have created a new template and named it
	X.B Buttons .
	XAdd a button to it:
	X.RS
	X.IP \(em
	XUse the right mouse button with the cursor
	Xsomewhere in the template's central empty space
	Xto bring up the
	X.I "template contents menu"
	Xand select
	X.B "Create Item" .
	XThis will causes an oblong button with
	Xa funny name to appear.
	X.IP \(em
	XUsing the mouse and its \fImiddle\fR button,
	Xdrag the item a little out from the corner.
	X.IP \(em
	XFrom the template contents menu, walk through
	X.B "Item Info\(rh"
	Xto the single selection and select it.
	X(Note that this has the same funny name as the button.)
	XAn info box for the button itself now appears.
	X.IP \(em
	XChange the button's
	X.B Name
	Xto
	X.I OpenThermometer
	Xand it's
	X.B Label
	Xto
	X.I "Open Thermometer" .
	X(Note that the default
	X.B Type
	Xof an item is a button.)
	X.IP \(em
	XClick left on
	X.B OK .
	X.IP \(em
	X.I "Save your state" .
	X.RE
	X.LP
	XThe template now has a button and
	Xthe button has a sensible name.
	XThe template has not yet been added to the
	Xobject
	X.B Tutorial
	Xas a pane.
	XDo so:
	X.RS
	X.IP \(em
	XFrom the template border menu,
	Xselect
	X.B "Window\(rhFit\ Window" .
	XThis causes the template to shrink-wrap itself
	Xto its contents.
	X(You can still resize it through the menus.)
	X.IP \(em
	XMake sure the root object is bigger than the template;
	Xresize the root object if necessary.
	X.IP \(em
	XFrom the root's border menu select
	X.B "Pane\(rhAdd\ Pane\(rhButtons" .
	X.B Hype
	Xwill copy the template
	X.B Buttons
	Xonto the object
	Xwhere it becomes a 
	X.I pane .
	X.IP \(em
	X.I "Save your state" .
	X.RE
	X.PP
	XYou now have an object which holds a pane which has an item.
	XNote that if you click left on the button in the pane,
	Xit briefly changes color.
	XRight now that's all it does because it has no script to intercept
	Xmouse events or any other messages.
	X.PP
	XNow we will program our button
	Xto open the subobject
	Xwe created in the previous section,
	X.B Thermometer ,
	Xwhenever the button receives a left mouse button click.
	X.RS
	X.IP \(em
	XMake sure the template is visible.
	XIf it's
	X.I not
	Xopen, use
	X.B "Template\(rhOpen Template\(rhButtons"
	Xto open it.
	XIf nothing happens, try looking behind other
	Xopen windows for the template
	X.B Buttons .
	X.IP \(em
	XBring up the template contents menu for
	X.B Buttons
	Xby clicking the right mouse button somewhere
	Xin the template's central blank area.
	XNote that you should click in the
	X.I template 's
	Xblank area (inside the black window), 
	X.B not
	Xthe 
	X.I object 's.
	X(If the template is too small to find a blank area,
	Xyou can resize the template. 
	XUsually, however, if the tip of the arrow cursor is not over an
	Xitem, you can get the template contents menu.)
	X.IP \(em
	XFrom that menu,
	Xselect
	X.B "Edit\ Script\(rhOpenThermometer" .
	XAn editor window will open on an empty file
	Xwith a funny name
	X(the file name is of no consequence,
	Xbut the window title bar should relate to the item whose 
	Xscript you're editing).
	XNote that similar to when an info box is open,
	Xyou can do nothing but interact with the editor while
	Xan editor window is open.
	X.IP \(em
	XEnter the following text
	X(the editor is \fBvi\fR):
	X.RS
	X.DS
	X\fBmouseUp:
	X{
	X	open("Thermometer");
	X}.\fR
	X.DE
	X.RE
	X.I "Be sure to include the final period" .
	XThe ``mouseUp'', ``{'', and ``}.'' must all start in column one.
	XExit the editor by writing the file back out and quitting.
	X.IP \(em
	X.I "Save your state" .
	X.IP \(em
	XClose the open template by selecting
	X.B "Quit Template"
	Xfrom its border menu.
	X.IP \(em
	XNow observe that when you click left on the
	X.B "Open Thermometer"
	Xbutton on your root object, the
	X.B Thermometer
	X.I object
	Xappears.
	X.IP \(em
	XTo close
	X.B Thermometer ,
	Xat present,
	Xyou must select
	X.B "Quit Object"
	Xfrom
	X.B Thermometer 's
	Xborder menu.
	X.RE
	X.SH
	XSome Things to Note
	X.PP
	XYou can drag the pane around in the root object
	Xwith the middle mouse button,
	Xjust as you could drag items around on a template.
	XWhen you add items to a
	X.I template ,
	Xor move them around,
	Xthose changes will be reflected in the associated
	X.I pane
	X(if there is one)
	Xthe next time the object holding the pane is refreshed.
	XTo make the object refresh,
	Xclick left on the object's border or select
	X.B "Window\(rhRefresh"
	Xfrom the object's border menu.
	XA pane is not really a
	X.I copy
	Xof a template;
	Xit is a
	X.I link
	Xto a template.
	XChanges to scripts take effect immediately in all cases.
	X.PP
	XWhenever a new item is added to a template,
	Xor a new pane is added to an object,
	Xit appears in the upper-left corner.
	XThis can result in overlapping or even hidden images
	XThis problem is easy to avoid;
	Xdrag existing stuff away from the corner before adding anything new.
	X.PP
	XClicking the
	X.B "Open Thermometer"
	X.I button
	Xwhen the
	X.B Thermometer
	X.I object
	Xis already open produces no ill effects.
	X\fBOpen\fRing an open object is benign.
	X.PP
	X.B Hype
	Xwill not let you
	X.B Quit
	X(or close)
	Xthe last open object on the screen
	X(or at least it is not supposed to).
	XNote that when
	X.B Thermometer
	Xis open you can
	X.B "Quit\ Object"
	Xfrom
	X.B Tutorial 's
	Xborder menu.
	XBut after that you
	X.I cannot
	X.B "Quit\ Object"
	Xfrom
	X.B Thermometer 's
	Xborder menu
	X(at least not until you have again opened
	Xthe root object via
	X.B "Object\(rhOpen Parent" ).
	X.PP
	XThe
	X.B Object\(rh
	Xsub-menu of an object's border menu has entries
	Xto open either the parent or the child object of the current object.
	XThe purpose of this is to allow you to navigate through a
	Xclosed tree without having to remember the names of all of the
	Xobjects.
	X.RS
	X.IP \(em
	XNow exit
	X.B hype
	Xnormally.
	X.RE
SHAR_EOF
if test 6613 -ne "`wc -c < 'addwidgets'`"
then
	echo shar: error transmitting "'addwidgets'" '(should have been 6613 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'figure1.doc'" '(1678 characters)'
if test -f 'figure1.doc'
then
	echo shar: will not over-write existing file "'figure1.doc'"
else
sed 's/^	X//' << \SHAR_EOF > 'figure1.doc'
	X<MakerFile 1.03>oEd4@@
	X$H"H"HD\	Paragraph
	XHL@HI$HDltitleEdHHTHHH PH	4 H(PHXPHcpH(0PH_H$TPdHlHTHype: A Tutorial Q Version 1.2-#-~/BlankPortrait.pscomplp4d4d%d%duV>W5$T	mouseUp:0<W	infodWTU	script&?H\	h`E
	X+?4p	Tutorial (o)j^2_	Thermometer (o)a_A*l	Mercury (p)'q4^	infom
	X,0m'S	[degreesC:  send changeTo to all owned items
	XrCj	info
	X:"<Di	script8^J@g	DegF  (slider)`MHf	info(mde	script88?a	C  (button)KO`	info%/O	scriptO1a;]a;a
	X0pa1Y1
	X68Q[s8QK
	X7;QK[K/;>8&>Qk.
	X7&=Y
	X7
	X]'3zLYZzL
	XLc<
	X6	W
	X66=
	X]	.WY
	X]][(Q!)oQQ$)J(9oJQS*Q$alQ$Y$+Q5SmQ5Y5K,QnQY9(T])Bo(T(1C:(T	c(T1T>({	b({1{;? $`a $1$w@(d	Jg(d1d3A(1	Ek(111oB! 9Go!A+C!j!!gDA"hiAA#GUBLoUs_HUfUUIseKssWL GRo4N5MX55LP65 h
	XEtE|EEXEX	Paragraph{Q6gd
	XDfDgDf$DflDfl	Paragraph{H$5Q
	XT{'0S	{NR6/L_o	{5A/q%O	%mouseUp: close self()gS0t+m')
	X$DhDEEDutDwL	Paragraph
	X; YouUve now constructed a hype machine which has non-trivial structure and 	cbehavior. In this section we make a stab at a graphic display of the state of a ma	Vchine. In parenthesis are the types of the entities: (o) for object and (p) for pane.DPa;	^a;j;H?.
	XExEEXDyDytitleV. Looking BackO/ac0aclc0a]Q4]p/=E1Aik1
	X1yJd@Kgd
	Xd5&QsX;QsQKgO/X`%#MN#X_#q$MXq$$>sY[\6&^z^K$FT	ThermometerHVaFZ[	(OpenThermometer (button)zXq""O`N#,W
	X0=UY<AwQd	'changeTo: set own value
	X0<:3Z.U!Zz0L:V[3Y!9[a0e:\VZ!k\>n|-][!]ane|0^p	\!O^a4"]op"_agRlo2"3`qA-?aX"ea -*bl`"b(uTacl>"Ic(N"bgl:"{d6c!eQ#-ec3!IKd#_Kc=!JfgIe#fMKgH#Cg(M 7cklf#uh61 DiP!$'i1= Ejk"h$YjikC$k( 6glj$=lQNw_mok$omQ0(lnoS%!nQ~#mo,%Soa~gS^p(n%p4.
SHAR_EOF
echo shar: 13 control characters may be missing from "'figure1.doc'"
if test 1678 -ne "`wc -c < 'figure1.doc'`"
then
	echo shar: error transmitting "'figure1.doc'" '(should have been 1678 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'figure1.ps'" '(17792 characters)'
if test -f 'figure1.ps'
then
	echo shar: will not over-write existing file "'figure1.ps'"
else
sed 's/^	X//' << \SHAR_EOF > 'figure1.ps'
	X%!
	X%%Pages: (atend)
	X%%DocumentFonts: (atend)
	X%%EndComments
	X%
	X% Frame Maker PostScript Prolog 1.3, for use with Maker 1.3
	X% Copyright (c) 1986-1988 by Frame Technology, Inc.  All rights reserved.
	X%
	X% Known Problems:
	X%	Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
	X/FMversion (1.2) def 
	X/FrameDict 123 dict def 
	X% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
	XFrameDict /tmprangecheck errordict /rangecheck get put 
	Xerrordict /rangecheck {FrameDict /bug true put} put 
	XFrameDict /bug false put 
	Xmark 
	X% Some PS machines read past the CR, so keep the following 3 lines together!
	Xcurrentfile 5 string readline
	X00
	X0000000000
	Xcleartomark 
	Xerrordict /rangecheck FrameDict /tmprangecheck get put 
	XFrameDict /bug get { 
	X	/readline {
	X		/gstring exch def
	X		/gfile exch def
	X		/gindex 0 def
	X		{
	X			gfile read pop 
	X			dup 10 eq {exit} if 
	X			dup 13 eq {exit} if 
	X			gstring exch gindex exch put 
	X			/gindex gindex 1 add def 
	X		} loop
	X		pop 
	X		gstring 0 gindex getinterval true 
	X		} def
	X	} if
	X/FMVERSION {
	X	FMversion ne {
	X		/Times-Roman findfont 18 scalefont setfont
	X		100 100 moveto
	X		(Maker version does not match postscript_prolog!)
	X		dup =
	X		show showpage
	X		} if
	X	} def 
	X/FMLOCAL {
	X	FrameDict begin
	X	0 def 
	X	end 
	X	} def 
	X	/gstring FMLOCAL
	X	/gfile FMLOCAL
	X	/gindex FMLOCAL
	X	/landscape FMLOCAL
	X	/docheight FMLOCAL
	X	/docwidth FMLOCAL
	X	/yscale FMLOCAL
	X	/xscale FMLOCAL
	X	/orgxfer FMLOCAL
	X	/orgproc FMLOCAL
	X	/organgle FMLOCAL
	X	/orgfreq FMLOCAL
	X/FMDOCUMENT {
	X	array /FMfonts exch def
	X	/#copies exch def
	X	FrameDict begin
	X	0 ne /landscape exch def 
	X	/docheight exch def
	X	/docwidth exch def
	X	/yscale exch def
	X	/xscale exch def
	X	currenttransfer cvlit /orgxfer exch def
	X	currentscreen cvlit /orgproc exch def
	X		/organgle exch def /orgfreq exch def
	X	end 
	X	} def 
	X	/pagesave FMLOCAL
	X	/orgmatrix FMLOCAL
	X/FMBEGINPAGE {
	X	FrameDict begin 
	X	/pagesave save def
	X	
	X	2 setlinecap
	X	xscale yscale scale
	X	landscape {
	X		90 rotate
	X		0 docheight neg translate
	X		/fillprocs /fillprocs90 load store
	X		}
	X		{/fillprocs /fillprocs0 load store}
	X		ifelse
	X	/orgmatrix matrix def
	X	gsave 
	X	} def 
	X/FMENDPAGE {
	X	grestore 
	X	pagesave restore
	X	end 
	X	showpage
	X	} def 
	X	/fontname FMLOCAL
	X	/fontscale FMLOCAL
	X	/fontnum FMLOCAL
	X	/fontdict FMLOCAL
	X/FMDEFINEFONT {
	X	FrameDict begin
	X	/fontname exch def
	X	/fontscale exch def
	X	/fontnum exch def
	X	/fontdict fontname findfont fontscale scalefont def
	X	fontdict /Encoding get StandardEncoding eq
	X	{
	X		fontdict DiacriticEncode 
	X		/fontdict exch def
	X	} {
	X		fontdict NonDiacriticEncode
	X		/fontdict exch def
	X	} ifelse
	X	FMfonts fontnum
	X		fontnum fontdict definefont
	X	put
	X	end 
	X	} def 
	X/FMLINEWIDTHS { 
	X	FrameDict begin
	X	dup array /FMlinewidths exch def 
	X	1 sub -1 0 {exch FMlinewidths 3 1 roll lnormalize put} for
	X	end 
	X	} def 
	X/FMNORMALIZEGRAPHICS { 
	X	newpath
	X	0.0 0.0 moveto
	X	1 setlinewidth
	X	0 setlinecap
	X	0 setgray
	X	} bind def
	X/FMBEGINEPSF {
	X	end 
	X	/FMEPSF save def
	X	/showpage {} def 
	X	FMNORMALIZEGRAPHICS
	X	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
	X	fx fy translate 
	X	fw urx llx sub div fh ury lly sub div scale 
	X	llx neg lly neg translate 
	X	} bind def
	X 
	X/FMENDEPSF {
	X	FMEPSF restore
	X	FrameDict begin 
	X	} bind def
	X 
	XFrameDict begin 
	X/savematrix {
	X	orgmatrix currentmatrix pop
	X	} bind def
	X/restorematrix {
	X	orgmatrix setmatrix
	X	} bind def
	X/dmatrix matrix def
	X/dpi	72 0 dmatrix defaultmatrix dtransform
	X	dup mul exch   dup mul add   sqrt
	Xdef
	X/max	{2 copy lt {exch} if pop} bind def
	X/min	{2 copy gt {exch} if pop} bind def
	X/DiacriticEncoding [
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
	X/numbersign /dollar /percent /ampersand /quotesingle /parenleft
	X/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
	X/two /three /four /five /six /seven /eight /nine /colon /semicolon
	X/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
	X/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
	X/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
	X/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
	X/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
	X/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
	X/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
	X/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
	X/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
	X/udieresis /dagger /.notdef /cent /sterling /section /bullet
	X/paragraph /germandbls /registered /copyright /trademark /acute
	X/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
	X/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
	X/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
	X/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
	X/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
	X/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
	X/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
	X/periodcentered /quotesinglbase /quotedblbase /perthousand
	X/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
	X/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
	X/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
	X/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
	X] def
	X	/basefontdict FMLOCAL
	X	/newfontdict FMLOCAL
	X/DiacriticEncode {
	X	/basefontdict exch def
	X	/newfontdict basefontdict maxlength dict def
	X	basefontdict
	X	{exch dup /FID ne
	X		{dup /Encoding eq
	X			{exch pop DiacriticEncoding}
	X			{exch}
	X			ifelse
	X			newfontdict 3 1 roll put
	X			}
	X		{pop pop}
	X		ifelse
	X		} forall
	X	newfontdict
	X	} bind def
	X/NonDiacriticEncode {
	X	/basefontdict exch def
	X	/newfontdict basefontdict maxlength dict def
	X	basefontdict
	X	{exch dup /FID ne
	X		{exch newfontdict 3 1 roll put}
	X		{pop pop}
	X		ifelse
	X		} forall
	X	newfontdict
	X	} bind def
	X	/freq FMLOCAL
	X	/bwidth FMLOCAL
	X	/bpside FMLOCAL
	X	/bstring FMLOCAL
	X	/onbits FMLOCAL
	X	/offbits FMLOCAL
	X	/xindex FMLOCAL
	X	/yindex FMLOCAL
	X	/x FMLOCAL
	X	/y FMLOCAL
	X/setpattern {
	X	 /freq    exch def
	X	 /bwidth  exch def
	X	 /bpside  exch def
	X	 /bstring exch def
	X	 /onbits 0 def  /offbits 0 def
	X	 freq 0 {/y exch def
	X		 /x exch def
	X		 /xindex x 1 add 2 div bpside mul cvi def
	X		 /yindex y 1 add 2 div bpside mul cvi def
	X		 bstring yindex bwidth mul xindex 8 idiv add get
	X		 1 7 xindex 8 mod sub bitshift and 0 ne
	X		 {/onbits  onbits  1 add def 1}
	X		 {/offbits offbits 1 add def 0}
	X		 ifelse
	X		}
	X		setscreen
	X	 {} settransfer
	X	 offbits offbits onbits add div setgray
	X	} bind def
	X/grayness {
	X	setgray
	X	orgxfer cvx settransfer
	X	orgfreq organgle orgproc cvx setscreen
	X	} bind def
	X/normalize {
	X	transform cvi exch cvi exch itransform
	X	} bind def
	X/dnormalize {
	X	dtransform cvi exch cvi exch idtransform
	X	} bind def
	X/lnormalize { 
	X	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
	X	} bind def
	X/fillprocs0
	X	[{0.00 grayness}
	X	 {0.10 grayness}
	X	 {0.30 grayness}
	X	 {0.50 grayness} 
	X	 {0.70 grayness}
	X	 {0.90 grayness}
	X	 {0.97 grayness} 
	X	 {1.00 grayness} 
	X	 {<0F1E3C78F0E1C387> 8 1 dpi 16 div setpattern} 
	X	 {<0F87C3E1F0783C1E> 8 1 dpi 16 div setpattern} 
	X	 {<CCCCCCCCCCCCCCCC> 8 1 dpi 16 div setpattern} 
	X	 {<FFFF0000FFFF0000> 8 1 dpi 16 div setpattern} 
	X	 {<8142241818244281> 8 1 dpi 16 div setpattern} 
	X	 {<03060C183060C081> 8 1 dpi 16 div setpattern} 
	X	 {<8040201008040201> 8 1 dpi 16 div setpattern} 
	X	 {}
	X	 {1.00 grayness}
	X	 {0.90 grayness}
	X	 {0.70 grayness}
	X	 {0.50 grayness} 
	X	 {0.30 grayness}
	X	 {0.10 grayness}
	X	 {0.03 grayness} 
	X	 {0.00 grayness} 
	X	 {<F0E1C3870F1E3C78> 8 1 dpi 16 div setpattern} 
	X	 {<F0783C1E0F87C3E1> 8 1 dpi 16 div setpattern} 
	X	 {<3333333333333333> 8 1 dpi 16 div setpattern} 
	X	 {<0000FFFF0000FFFF> 8 1 dpi 16 div setpattern} 
	X	 {<7EBDDBE7E7DBBD7E> 8 1 dpi 16 div setpattern} 
	X	 {<FCF9F3E7CF9F3F7E> 8 1 dpi 16 div setpattern} 
	X	 {<7FBFDFEFF7FBFDFE> 8 1 dpi 16 div setpattern} 
	X	 {}
	X	] def
	X/fillprocs90
	X	 [{0.00 grayness}
	X	 {0.10 grayness}
	X	 {0.30 grayness}
	X	 {0.50 grayness}
	X	 {0.70 grayness}
	X	 {0.90 grayness}
	X	 {0.97 grayness}
	X	 {1.00 grayness}
	X	 {<87c3e1f0783c1e0f> 8 1 dpi 16 div setpattern}
	X	 {<f0e1c3870f1e3c78> 8 1 dpi 16 div setpattern}
	X	 {<0000ffff0000ffff> 8 1 dpi 16 div setpattern}
	X	 {<cccccccccccccccc> 8 1 dpi 16 div setpattern}
	X	 {<8142241818244281> 8 1 dpi 16 div setpattern}
	X	 {<81c06030180c0603> 8 1 dpi 16 div setpattern}
	X	 {<0102040810204080> 8 1 dpi 16 div setpattern}
	X	 {}
	X	 {1.00 grayness}
	X	 {0.90 grayness}
	X	 {0.70 grayness}
	X	 {0.50 grayness}
	X	 {0.30 grayness}
	X	 {0.10 grayness}
	X	 {0.03 grayness}
	X	 {0.00 grayness}
	X	 {<783c1e0f87c3e1f0> 8 1 dpi 16 div setpattern}
	X	 {<0f1e3c78f0e1c387> 8 1 dpi 16 div setpattern}
	X	 {<ffff0000ffff0000> 8 1 dpi 16 div setpattern}
	X	 {<3333333333333333> 8 1 dpi 16 div setpattern}
	X	 {<7ebddbe7e7dbbd7e> 8 1 dpi 16 div setpattern}
	X	 {<7e3f9fcfe7f3f9fc> 8 1 dpi 16 div setpattern}
	X	 {<fefdfbf7efdfbf7f> 8 1 dpi 16 div setpattern}
	X	 {}
	X	] def
	X/fillprocs /fillprocs0 load def
	X/H { 
	X	FMlinewidths exch get setlinewidth
	X	} bind def
	X/X { 
	X	fillprocs exch get exec
	X	} bind def
	X/V { 
	X	gsave eofill grestore
	X	} bind def
	X/N { 
	X	gsave stroke grestore 
	X	} bind def
	X/M {newpath moveto} bind def
	X/E {lineto} bind def
	X/D {curveto} bind def
	X/O {closepath} bind def
	X	/n FMLOCAL
	X/L { 
	X 	/n exch def
	X	newpath
	X	normalize
	X	moveto 
	X	2 1 n {pop normalize lineto} for
	X	} bind def
	X/Y { 
	X	L 
	X	closepath
	X	} bind def
	X/K { 
	X 	/n exch def
	X	newpath
	X	moveto 
	X	3 1 n {pop curveto} for
	X	} bind def
	X/J { 
	X 	/n exch def
	X	newpath
	X	moveto 
	X	1 1 n {pop curveto} for
	X	} bind def
	X	/x1 FMLOCAL
	X	/x2 FMLOCAL
	X	/y1 FMLOCAL
	X	/y2 FMLOCAL
	X/R { 
	X	/y2 exch def
	X	/x2 exch def
	X	/y1 exch def
	X	/x1 exch def
	X	x1 y1
	X	x2 y1
	X	x2 y2
	X	x1 y2
	X	4 Y 
	X	} bind def
	X/C { 
	X	grestore
	X	gsave
	X	R 
	X	clip
	X	} bind def
	X/U { 
	X	grestore
	X	gsave
	X	} bind def
	X/F { 
	X	FMfonts exch get
	X	setfont
	X	} bind def
	X/T { 
	X	moveto show
	X	} bind def
	X/P { 
	X	moveto
	X	0 32 3 2 roll widthshow
	X	} bind def
	X/S { 
	X	moveto
	X	0 exch ashow
	X	} bind def
	X/B { 
	X	moveto
	X	0 32 4 2 roll 0 exch awidthshow
	X	} bind def
	X/Q { 
	X	moveto
	X	gsave show grestore
	X	} bind def
	X	/x FMLOCAL
	X	/y FMLOCAL
	X	/dx FMLOCAL
	X	/dy FMLOCAL
	X	/dl FMLOCAL
	X	/t FMLOCAL
	X	/t2 FMLOCAL
	X	/Cos FMLOCAL
	X	/Sin FMLOCAL
	X	/r FMLOCAL
	X/W { 
	X	dnormalize
	X	/dy exch def
	X	/dx exch def
	X	normalize
	X	/y  exch def
	X	/x  exch def
	X	/dl dx dx mul dy dy mul add sqrt def
	X	dl 0.0 gt {
	X		/t currentlinewidth def
	X		savematrix
	X		/Cos dx dl div def
	X		/Sin dy dl div def
	X		/r [Cos Sin Sin neg Cos 0.0 0.0] def
	X		/t2 t 2.5 mul 3.5 max def
	X		newpath
	X		x y translate
	X		r concat
	X		0.0 0.0 moveto
	X		dl t 2.7 mul sub 0.0 rlineto
	X		stroke
	X		restorematrix
	X		x dx add y dy add translate
	X		r concat
	X		t 0.67 mul setlinewidth
	X		t 1.61 mul neg  0.0 translate
	X		0.0 0.0 moveto
	X		t2 1.7 mul neg  t2 2.0 div     moveto
	X		0.0 0.0 lineto
	X		t2 1.7 mul neg  t2 2.0 div neg lineto
	X		stroke
	X		t setlinewidth
	X		restorematrix
	X		} if
	X	} bind def
	X/G { 
	X	gsave
	X	newpath
	X	normalize translate 0.0 0.0 moveto 
	X	dnormalize scale 
	X	0.0 0.0 1.0 5 3 roll arc 
	X	closepath eofill
	X	grestore
	X	} bind def
	X	/x FMLOCAL
	X	/y FMLOCAL
	X	/w FMLOCAL
	X	/h FMLOCAL
	X	/xx FMLOCAL
	X	/yy FMLOCAL
	X	/ww FMLOCAL
	X	/hh FMLOCAL
	X/A { 
	X	/y exch def
	X	/x exch def
	X	/h exch def
	X	/w exch def
	X	x y normalize /yy exch def /xx exch def
	X	w h dnormalize /hh exch def /ww exch def
	X	ww abs hh abs xx ww add yy hh sub
	X	gsave
	X	savematrix
	X	newpath
	X	translate
	X	scale
	X	0.0 0.0 1.0 5 3 roll arc
	X	0 setlinecap
	X	restorematrix
	X	stroke
	X	grestore
	X	} bind def
	X	/FMsaveobject FMLOCAL
	X	/FMoptop FMLOCAL
	X	/FMdicttop FMLOCAL
	X/BEGINPRINTCODE {
	X	/FMdicttop countdictstack 1 add def 
	X	/FMoptop count 6 sub def 
	X	/FMsaveobject save def
	X	userdict begin 
	X	/showpage {} def 
	X	translate
	X	FMNORMALIZEGRAPHICS
	X	} bind def
	X/ENDPRINTCODE {
	X	count -1 FMoptop {pop pop} for 
	X	countdictstack -1 FMdicttop {pop end} for 
	X	FMsaveobject restore 
	X	} bind def
	X/gn { 
	X	0 
	X	{	46 mul 
	X		cf read pop 
	X		32 sub 
	X		dup 46 lt {exit} if 
	X		46 sub add 
	X		} loop
	X	add 
	X	} bind def
	X	/str FMLOCAL
	X/cfs { 
	X	/str sl string def 
	X	0 1 sl 1 sub {str exch val put} for 
	X	str def 
	X	} bind def
	X/ic [ 
	X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	X	0
	X	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
	X	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
	X	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
	X	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
	X	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
	X	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
	X	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
	X	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
	X	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
	X	] def
	X	/sl FMLOCAL
	X	/val FMLOCAL
	X	/ws FMLOCAL
	X	/im FMLOCAL
	X	/bs FMLOCAL
	X	/cs FMLOCAL
	X	/len FMLOCAL
	X	/pos FMLOCAL
	X/ms { 
	X	/sl exch def 
	X	/val 255 def 
	X	/ws cfs 
	X	/im cfs 
	X	/val 0 def 
	X	/bs cfs 
	X	/cs cfs 
	X	} bind def
	X400 ms 
	X/ip { 
	X	is 
	X	0 
	X	cf cs readline pop 
	X	{	ic exch get exec 
	X		add 
	X		} forall 
	X	pop 
	X	
	X	} bind def
	X/wh { 
	X	/len exch def 
	X	/pos exch def 
	X	ws 0 len getinterval im pos len getinterval copy pop
	X	pos len 
	X	} bind def
	X/bl { 
	X	/len exch def 
	X	/pos exch def 
	X	bs 0 len getinterval im pos len getinterval copy pop
	X	pos len 
	X	} bind def
	X/s1 1 string def
	X/fl { 
	X	/len exch def 
	X	/pos exch def 
	X	/val cf s1 readhexstring pop 0 get def
	X	pos 1 pos len add 1 sub {im exch val put} for
	X	pos len 
	X	} bind def
	X/hx { 
	X	3 copy getinterval 
	X	cf exch readhexstring pop pop 
	X	} bind def
	X	/h FMLOCAL
	X	/w FMLOCAL
	X	/lb FMLOCAL
	X	/bitmapsave FMLOCAL
	X	/is FMLOCAL
	X	/cf FMLOCAL
	X/BEGINBITMAP { 
	X	gsave
	X	translate scale /h exch def /w exch def
	X	/lb w 7 add 8 idiv def 
	X	sl lb lt {lb ms} if 
	X	/bitmapsave save def 
	X	/is im 0 lb getinterval def 
	X	ws 0 lb getinterval is copy pop 
	X	/cf currentfile def 
	X	w h 1 [w 0 0 h neg 0 h] 
	X	{ip} image 
	X	bitmapsave restore 
	X	grestore
	X	} bind def
	X/ENDBITMAP {
	X	} bind def
	Xend 
	X%%EndProlog
	X%%BeginSetup
	X(1.2) FMVERSION
	X1. 1. 612. 792. 0 1 6 FMDOCUMENT
	X0 12. /Times-Roman  FMDEFINEFONT
	X1 12. /Times-Bold  FMDEFINEFONT
	X2 24. /Times-Roman  FMDEFINEFONT
	X3 14. /Times-Roman  FMDEFINEFONT
	X4 12. /Times-Italic  FMDEFINEFONT
	X5 14. /Times-Bold  FMDEFINEFONT
	X0.5 1. 3. 4. 4 FMLINEWIDTHS
	X%%EndSetup
	X%%Page: "11" 1
	XFMBEGINPAGE
	X0 F
	X0 X
	X(Hype: A Tutorial \321 Version 1.2) 227.68 747. T
	X(-11-) 296. 36. T
	X1 F
	X(mouseUp) 446. 440. T
	X0 F
	X(:) 494. 440. T
	X(info) 405. 479. T
	X(script) 405. 440. T
	X1 F
	X4. (Buttons) 113. 502. P
	X0 F
	X4. ( \050p\051) 153.01 502. P
	X1 F
	X3.34 (Tutorial) 26. 356. P
	X0 F
	X3.34 ( \050o\051) 68.67 356. P
	X1 F
	X5.7 (Thermometer) 106. 252. P
	X0 F
	X5.7 ( \050o\051) 177.3 252. P
	X1 F
	X2.7 (Mercury) 223. 241. P
	X0 F
	X2.7 ( \050p\051) 268.31 241. P
	X(info) 113. 603. T
	X(info) 224. 545. T
	X(info) 226. 401. T
	X(info) 312. 321. T
	X4.02 (script \050none\051) 113. 562. P
	X4.02 (script \050none\051) 224. 503. P
	X(script) 226. 351. T
	X2.01 (script  \050none\051) 312. 282. P
	X1 F
	X2.34 (DegC) 312. 100. P
	X0 F
	X2.34 (  \050slider\051) 340.66 100. P
	X1 F
	X2. (degreesC) 268. 351. P
	X0 F
	X2. (:  send ) 315.32 351. P
	X1 F
	X2. (changeTo) 355.65 351. P
	X0 F
	X2. ( to all owned items) 405.66 351. P
	X(info) 405. 116. T
	X(script) 405. 83. T
	X1 F
	X3.01 (DegF) 312. 177. P
	X0 F
	X3.01 (  \050slider\051) 339.32 177. P
	X(info) 405. 194. T
	X(script) 405. 162. T
	X1 F
	X1.34 (C) 312. 241. P
	X0 F
	X1.34 (  \050button\051) 320.66 241. P
	X(info) 405. 257. T
	X(script) 405. 224. T
	X97. 605. 97. 256. 2 L
	X0 H
	XN
	X97. 256. 106. 256. 2 L
	XN
	X97. 506. 106. 506. 2 L
	XN
	X97. 359. 89. 359. 2 L
	XN
	X209. 549. 209. 464. 2 L
	XN
	X209. 549. 218. 549. 2 L
	XN
	X209. 506. 219. 506. 2 L
	XN
	X209. 461. 219. 461. 2 L
	XN
	X190. 506. 209. 506. 2 L
	XN
	X394. 481. 394. 443. 2 L
	XN
	X378. 460. 394. 460. 2 L
	XN
	X394. 482. 403. 482. 2 L
	XN
	X394. 443. 403. 443. 2 L
	XN
	X209. 405. 209. 244. 2 L
	XN
	X202. 256. 209. 256. 2 L
	XN
	X209. 244. 217. 244. 2 L
	XN
	X209. 355. 217. 355. 2 L
	XN
	X209. 405. 217. 405. 2 L
	XN
	X296. 324. 296. 103. 2 L
	XN
	X296. 324. 305. 324. 2 L
	XN
	X296. 285. 305. 285. 2 L
	XN
	X288. 244. 305. 244. 2 L
	XN
	X296. 180. 305. 180. 2 L
	XN
	X296. 103. 305. 103. 2 L
	XN
	X395. 119. 395. 87. 2 L
	XN
	X395. 119. 402. 119. 2 L
	XN
	X395. 87. 402. 87. 2 L
	XN
	X395. 195. 395. 165. 2 L
	XN
	X395. 195. 402. 195. 2 L
	XN
	X395. 165. 402. 165. 2 L
	XN
	X395. 260. 395. 228. 2 L
	XN
	X395. 227. 403. 227. 2 L
	XN
	X2 F
	X({) 438. 82. T
	X({) 438. 160. T
	X({) 437. 438. T
	X1 F
	X({) 261. 351. T
	X({) 438. 224. T
	X2.84 (mouseUp) 449. 224. P
	X0 F
	X2.84 (: close self\050\051) 497. 224. P
	X3 F
	X2.02 ( ) 108. 701. P
	X0 F
	X2.02 (You\325ve now constructed a ) 113.52 701. P
	X1 F
	X2.02 (hype) 250.9 701. P
	X3 F
	X2.02 ( ) 275.57 701. P
	X0 F
	X2.02 (machine which has non-trivial ) 281.09 701. P
	X4 F
	X2.02 (structure) 437.82 701. P
	X3 F
	X2.02 ( ) 481.15 701. P
	X0 F
	X2.02 (and) 486.67 701. P
	X4 F
	X2.59 (behavior.) 72. 686. P
	X0 F
	X2.59 ( In this section we make a stab at a graphic display of the state of a ma-) 117.66 686. P
	X(chine. In parenthesis are the types of the entities: \050o\051 for object and \050p\051 for pane.) 72. 672. T
	X97. 605. 106. 605. 2 L
	XN
	X5 F
	X(V. Looking Back) 72. 718. T
	X97. 565. 108. 565. 2 L
	XN
	X388. 103. 394. 103. 2 L
	XN
	X388. 180. 394. 180. 2 L
	XN
	X209. 549. 209. 461. 2 L
	XN
	X395. 260. 402. 260. 2 L
	XN
	X369. 244. 395. 244. 2 L
	XN
	X1 F
	X(Thermometer) 506. 433. T
	X7.02 (OpenThermometer ) 225. 457. P
	X0 F
	X7.02 (\050button\051) 334.34 457. P
	X1 F
	X2.56 (changeTo) 449. 152. P
	X0 F
	X2.56 (: set own value) 499. 152. P
	X1 F
	X4.18 (mouseUp) 449. 172. P
	X0 F
	X4.18 (: send ) 497. 172. P
	X1 F
	X4.18 (degreesC) 536.68 172. P
	X2.56 (changeTo) 449. 74. P
	X0 F
	X2.56 (: set own value) 499. 74. P
	X1 F
	X4.18 (mouseUp) 449. 94. P
	X0 F
	X4.18 (: send ) 497. 94. P
	X1 F
	X4.18 (degreesC) 536.68 94. P
	X0 F
	X1.34 (open the object) 506. 446. P
	XFMENDPAGE
	X%%Trailer
	X%%Pages: 1 1
	X%%DocumentFonts: Times-Roman
	X%%+ Times-Bold
	X%%+ Times-Italic
SHAR_EOF
if test 17792 -ne "`wc -c < 'figure1.ps'`"
then
	echo shar: error transmitting "'figure1.ps'" '(should have been 17792 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'figure2.doc'" '(1147 characters)'
if test -f 'figure2.doc'
then
	echo shar: will not over-write existing file "'figure2.doc'"
else
sed 's/^	X//' << \SHAR_EOF > 'figure2.doc'
	X<MakerFile 1.03>oEd4@@
	X$3ID3ILC@	Paragraph
	XC@C@C@titleEdHHTHH
	XH PJ( CbPP3P3<C^DP3dH$TPd3<,3	Hype: A Tutorial Q Version 1.2-#-~/BlankPortrait.pscomplp4d4ddTd8HBZ~u|{BZ@Z@OBOq~^p
	XijC [Q:Q$XxmQ:":"^Q^fcj#deDegC2dsdH cesd;d;sdesdHucd*f%#gDegFvgsH fts;;:s:Bis3 \js33PsPtjs3v\i:V)#ahDegFvo"EutE"9,_4`c-Yl4`c-hyY>oO_lchangeTo 40	/klpl$Wlpl$h	|W}{Kk`degreesC 40	_tM&(g	!convert to Fahrenheit and display
	X8uMk|e	display new temperature
	Xv :^j	message is ignored)x4CB[m	[send degreesC with new temperature (40) to every owned item_yQ)}Q)h+zQ)~Qzz)Q)w|R7) {R7{7{CRC@}
	X3y
	Xmessage~
	X$z
	XobjectN7|{
	Xitem
	XHZMessage-passing in the Tutorial
	X\8]mouseUpKw]	;sent by hype on mouse click%`)|{Wb	three identical messagesWl4`c-_Y	mQ:%$Xx;sftmsdVeus3jvSp:	!shows message name and parameters>)v$Mv)vg	Rn-
	XD(8DDDLDD	Paragraph	&get new Fahrenheit temperature (105),
	X
	XD\CUTCU\CT\CT\	Paragraph	'compute new Celsius temperature (40), 
	X
	XCVCVCV CUCU	Paragraph	Ksend changeTo with new Celsius temperaturehx#HaVM&i
	X%user mouses on 105 degrees FahrenheitEnr^ s{Keybd6`d3lp8$kboZ_c+
SHAR_EOF
echo shar: 10 control characters may be missing from "'figure2.doc'"
if test 1147 -ne "`wc -c < 'figure2.doc'`"
then
	echo shar: error transmitting "'figure2.doc'" '(should have been 1147 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'figure2.ps'" '(17483 characters)'
if test -f 'figure2.ps'
then
	echo shar: will not over-write existing file "'figure2.ps'"
else
sed 's/^	X//' << \SHAR_EOF > 'figure2.ps'
	X%!
	X%%Pages: (atend)
	X%%DocumentFonts: (atend)
	X%%EndComments
	X%
	X% Frame Maker PostScript Prolog 1.3, for use with Maker 1.3
	X% Copyright (c) 1986-1988 by Frame Technology, Inc.  All rights reserved.
	X%
	X% Known Problems:
	X%	Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
	X/FMversion (1.2) def 
	X/FrameDict 123 dict def 
	X% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
	XFrameDict /tmprangecheck errordict /rangecheck get put 
	Xerrordict /rangecheck {FrameDict /bug true put} put 
	XFrameDict /bug false put 
	Xmark 
	X% Some PS machines read past the CR, so keep the following 3 lines together!
	Xcurrentfile 5 string readline
	X00
	X0000000000
	Xcleartomark 
	Xerrordict /rangecheck FrameDict /tmprangecheck get put 
	XFrameDict /bug get { 
	X	/readline {
	X		/gstring exch def
	X		/gfile exch def
	X		/gindex 0 def
	X		{
	X			gfile read pop 
	X			dup 10 eq {exit} if 
	X			dup 13 eq {exit} if 
	X			gstring exch gindex exch put 
	X			/gindex gindex 1 add def 
	X		} loop
	X		pop 
	X		gstring 0 gindex getinterval true 
	X		} def
	X	} if
	X/FMVERSION {
	X	FMversion ne {
	X		/Times-Roman findfont 18 scalefont setfont
	X		100 100 moveto
	X		(Maker version does not match postscript_prolog!)
	X		dup =
	X		show showpage
	X		} if
	X	} def 
	X/FMLOCAL {
	X	FrameDict begin
	X	0 def 
	X	end 
	X	} def 
	X	/gstring FMLOCAL
	X	/gfile FMLOCAL
	X	/gindex FMLOCAL
	X	/landscape FMLOCAL
	X	/docheight FMLOCAL
	X	/docwidth FMLOCAL
	X	/yscale FMLOCAL
	X	/xscale FMLOCAL
	X	/orgxfer FMLOCAL
	X	/orgproc FMLOCAL
	X	/organgle FMLOCAL
	X	/orgfreq FMLOCAL
	X/FMDOCUMENT {
	X	array /FMfonts exch def
	X	/#copies exch def
	X	FrameDict begin
	X	0 ne /landscape exch def 
	X	/docheight exch def
	X	/docwidth exch def
	X	/yscale exch def
	X	/xscale exch def
	X	currenttransfer cvlit /orgxfer exch def
	X	currentscreen cvlit /orgproc exch def
	X		/organgle exch def /orgfreq exch def
	X	end 
	X	} def 
	X	/pagesave FMLOCAL
	X	/orgmatrix FMLOCAL
	X/FMBEGINPAGE {
	X	FrameDict begin 
	X	/pagesave save def
	X	
	X	2 setlinecap
	X	xscale yscale scale
	X	landscape {
	X		90 rotate
	X		0 docheight neg translate
	X		/fillprocs /fillprocs90 load store
	X		}
	X		{/fillprocs /fillprocs0 load store}
	X		ifelse
	X	/orgmatrix matrix def
	X	gsave 
	X	} def 
	X/FMENDPAGE {
	X	grestore 
	X	pagesave restore
	X	end 
	X	showpage
	X	} def 
	X	/fontname FMLOCAL
	X	/fontscale FMLOCAL
	X	/fontnum FMLOCAL
	X	/fontdict FMLOCAL
	X/FMDEFINEFONT {
	X	FrameDict begin
	X	/fontname exch def
	X	/fontscale exch def
	X	/fontnum exch def
	X	/fontdict fontname findfont fontscale scalefont def
	X	fontdict /Encoding get StandardEncoding eq
	X	{
	X		fontdict DiacriticEncode 
	X		/fontdict exch def
	X	} {
	X		fontdict NonDiacriticEncode
	X		/fontdict exch def
	X	} ifelse
	X	FMfonts fontnum
	X		fontnum fontdict definefont
	X	put
	X	end 
	X	} def 
	X/FMLINEWIDTHS { 
	X	FrameDict begin
	X	dup array /FMlinewidths exch def 
	X	1 sub -1 0 {exch FMlinewidths 3 1 roll lnormalize put} for
	X	end 
	X	} def 
	X/FMNORMALIZEGRAPHICS { 
	X	newpath
	X	0.0 0.0 moveto
	X	1 setlinewidth
	X	0 setlinecap
	X	0 setgray
	X	} bind def
	X/FMBEGINEPSF {
	X	end 
	X	/FMEPSF save def
	X	/showpage {} def 
	X	FMNORMALIZEGRAPHICS
	X	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
	X	fx fy translate 
	X	fw urx llx sub div fh ury lly sub div scale 
	X	llx neg lly neg translate 
	X	} bind def
	X 
	X/FMENDEPSF {
	X	FMEPSF restore
	X	FrameDict begin 
	X	} bind def
	X 
	XFrameDict begin 
	X/savematrix {
	X	orgmatrix currentmatrix pop
	X	} bind def
	X/restorematrix {
	X	orgmatrix setmatrix
	X	} bind def
	X/dmatrix matrix def
	X/dpi	72 0 dmatrix defaultmatrix dtransform
	X	dup mul exch   dup mul add   sqrt
	Xdef
	X/max	{2 copy lt {exch} if pop} bind def
	X/min	{2 copy gt {exch} if pop} bind def
	X/DiacriticEncoding [
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
	X/numbersign /dollar /percent /ampersand /quotesingle /parenleft
	X/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
	X/two /three /four /five /six /seven /eight /nine /colon /semicolon
	X/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
	X/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
	X/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
	X/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
	X/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
	X/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
	X/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
	X/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
	X/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
	X/udieresis /dagger /.notdef /cent /sterling /section /bullet
	X/paragraph /germandbls /registered /copyright /trademark /acute
	X/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
	X/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
	X/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
	X/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
	X/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
	X/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
	X/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
	X/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
	X/periodcentered /quotesinglbase /quotedblbase /perthousand
	X/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
	X/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
	X/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
	X/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
	X] def
	X	/basefontdict FMLOCAL
	X	/newfontdict FMLOCAL
	X/DiacriticEncode {
	X	/basefontdict exch def
	X	/newfontdict basefontdict maxlength dict def
	X	basefontdict
	X	{exch dup /FID ne
	X		{dup /Encoding eq
	X			{exch pop DiacriticEncoding}
	X			{exch}
	X			ifelse
	X			newfontdict 3 1 roll put
	X			}
	X		{pop pop}
	X		ifelse
	X		} forall
	X	newfontdict
	X	} bind def
	X/NonDiacriticEncode {
	X	/basefontdict exch def
	X	/newfontdict basefontdict maxlength dict def
	X	basefontdict
	X	{exch dup /FID ne
	X		{exch newfontdict 3 1 roll put}
	X		{pop pop}
	X		ifelse
	X		} forall
	X	newfontdict
	X	} bind def
	X	/freq FMLOCAL
	X	/bwidth FMLOCAL
	X	/bpside FMLOCAL
	X	/bstring FMLOCAL
	X	/onbits FMLOCAL
	X	/offbits FMLOCAL
	X	/xindex FMLOCAL
	X	/yindex FMLOCAL
	X	/x FMLOCAL
	X	/y FMLOCAL
	X/setpattern {
	X	 /freq    exch def
	X	 /bwidth  exch def
	X	 /bpside  exch def
	X	 /bstring exch def
	X	 /onbits 0 def  /offbits 0 def
	X	 freq 0 {/y exch def
	X		 /x exch def
	X		 /xindex x 1 add 2 div bpside mul cvi def
	X		 /yindex y 1 add 2 div bpside mul cvi def
	X		 bstring yindex bwidth mul xindex 8 idiv add get
	X		 1 7 xindex 8 mod sub bitshift and 0 ne
	X		 {/onbits  onbits  1 add def 1}
	X		 {/offbits offbits 1 add def 0}
	X		 ifelse
	X		}
	X		setscreen
	X	 {} settransfer
	X	 offbits offbits onbits add div setgray
	X	} bind def
	X/grayness {
	X	setgray
	X	orgxfer cvx settransfer
	X	orgfreq organgle orgproc cvx setscreen
	X	} bind def
	X/normalize {
	X	transform cvi exch cvi exch itransform
	X	} bind def
	X/dnormalize {
	X	dtransform cvi exch cvi exch idtransform
	X	} bind def
	X/lnormalize { 
	X	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
	X	} bind def
	X/fillprocs0
	X	[{0.00 grayness}
	X	 {0.10 grayness}
	X	 {0.30 grayness}
	X	 {0.50 grayness} 
	X	 {0.70 grayness}
	X	 {0.90 grayness}
	X	 {0.97 grayness} 
	X	 {1.00 grayness} 
	X	 {<0F1E3C78F0E1C387> 8 1 dpi 16 div setpattern} 
	X	 {<0F87C3E1F0783C1E> 8 1 dpi 16 div setpattern} 
	X	 {<CCCCCCCCCCCCCCCC> 8 1 dpi 16 div setpattern} 
	X	 {<FFFF0000FFFF0000> 8 1 dpi 16 div setpattern} 
	X	 {<8142241818244281> 8 1 dpi 16 div setpattern} 
	X	 {<03060C183060C081> 8 1 dpi 16 div setpattern} 
	X	 {<8040201008040201> 8 1 dpi 16 div setpattern} 
	X	 {}
	X	 {1.00 grayness}
	X	 {0.90 grayness}
	X	 {0.70 grayness}
	X	 {0.50 grayness} 
	X	 {0.30 grayness}
	X	 {0.10 grayness}
	X	 {0.03 grayness} 
	X	 {0.00 grayness} 
	X	 {<F0E1C3870F1E3C78> 8 1 dpi 16 div setpattern} 
	X	 {<F0783C1E0F87C3E1> 8 1 dpi 16 div setpattern} 
	X	 {<3333333333333333> 8 1 dpi 16 div setpattern} 
	X	 {<0000FFFF0000FFFF> 8 1 dpi 16 div setpattern} 
	X	 {<7EBDDBE7E7DBBD7E> 8 1 dpi 16 div setpattern} 
	X	 {<FCF9F3E7CF9F3F7E> 8 1 dpi 16 div setpattern} 
	X	 {<7FBFDFEFF7FBFDFE> 8 1 dpi 16 div setpattern} 
	X	 {}
	X	] def
	X/fillprocs90
	X	 [{0.00 grayness}
	X	 {0.10 grayness}
	X	 {0.30 grayness}
	X	 {0.50 grayness}
	X	 {0.70 grayness}
	X	 {0.90 grayness}
	X	 {0.97 grayness}
	X	 {1.00 grayness}
	X	 {<87c3e1f0783c1e0f> 8 1 dpi 16 div setpattern}
	X	 {<f0e1c3870f1e3c78> 8 1 dpi 16 div setpattern}
	X	 {<0000ffff0000ffff> 8 1 dpi 16 div setpattern}
	X	 {<cccccccccccccccc> 8 1 dpi 16 div setpattern}
	X	 {<8142241818244281> 8 1 dpi 16 div setpattern}
	X	 {<81c06030180c0603> 8 1 dpi 16 div setpattern}
	X	 {<0102040810204080> 8 1 dpi 16 div setpattern}
	X	 {}
	X	 {1.00 grayness}
	X	 {0.90 grayness}
	X	 {0.70 grayness}
	X	 {0.50 grayness}
	X	 {0.30 grayness}
	X	 {0.10 grayness}
	X	 {0.03 grayness}
	X	 {0.00 grayness}
	X	 {<783c1e0f87c3e1f0> 8 1 dpi 16 div setpattern}
	X	 {<0f1e3c78f0e1c387> 8 1 dpi 16 div setpattern}
	X	 {<ffff0000ffff0000> 8 1 dpi 16 div setpattern}
	X	 {<3333333333333333> 8 1 dpi 16 div setpattern}
	X	 {<7ebddbe7e7dbbd7e> 8 1 dpi 16 div setpattern}
	X	 {<7e3f9fcfe7f3f9fc> 8 1 dpi 16 div setpattern}
	X	 {<fefdfbf7efdfbf7f> 8 1 dpi 16 div setpattern}
	X	 {}
	X	] def
	X/fillprocs /fillprocs0 load def
	X/H { 
	X	FMlinewidths exch get setlinewidth
	X	} bind def
	X/X { 
	X	fillprocs exch get exec
	X	} bind def
	X/V { 
	X	gsave eofill grestore
	X	} bind def
	X/N { 
	X	gsave stroke grestore 
	X	} bind def
	X/M {newpath moveto} bind def
	X/E {lineto} bind def
	X/D {curveto} bind def
	X/O {closepath} bind def
	X	/n FMLOCAL
	X/L { 
	X 	/n exch def
	X	newpath
	X	normalize
	X	moveto 
	X	2 1 n {pop normalize lineto} for
	X	} bind def
	X/Y { 
	X	L 
	X	closepath
	X	} bind def
	X/K { 
	X 	/n exch def
	X	newpath
	X	moveto 
	X	3 1 n {pop curveto} for
	X	} bind def
	X/J { 
	X 	/n exch def
	X	newpath
	X	moveto 
	X	1 1 n {pop curveto} for
	X	} bind def
	X	/x1 FMLOCAL
	X	/x2 FMLOCAL
	X	/y1 FMLOCAL
	X	/y2 FMLOCAL
	X/R { 
	X	/y2 exch def
	X	/x2 exch def
	X	/y1 exch def
	X	/x1 exch def
	X	x1 y1
	X	x2 y1
	X	x2 y2
	X	x1 y2
	X	4 Y 
	X	} bind def
	X/C { 
	X	grestore
	X	gsave
	X	R 
	X	clip
	X	} bind def
	X/U { 
	X	grestore
	X	gsave
	X	} bind def
	X/F { 
	X	FMfonts exch get
	X	setfont
	X	} bind def
	X/T { 
	X	moveto show
	X	} bind def
	X/P { 
	X	moveto
	X	0 32 3 2 roll widthshow
	X	} bind def
	X/S { 
	X	moveto
	X	0 exch ashow
	X	} bind def
	X/B { 
	X	moveto
	X	0 32 4 2 roll 0 exch awidthshow
	X	} bind def
	X/Q { 
	X	moveto
	X	gsave show grestore
	X	} bind def
	X	/x FMLOCAL
	X	/y FMLOCAL
	X	/dx FMLOCAL
	X	/dy FMLOCAL
	X	/dl FMLOCAL
	X	/t FMLOCAL
	X	/t2 FMLOCAL
	X	/Cos FMLOCAL
	X	/Sin FMLOCAL
	X	/r FMLOCAL
	X/W { 
	X	dnormalize
	X	/dy exch def
	X	/dx exch def
	X	normalize
	X	/y  exch def
	X	/x  exch def
	X	/dl dx dx mul dy dy mul add sqrt def
	X	dl 0.0 gt {
	X		/t currentlinewidth def
	X		savematrix
	X		/Cos dx dl div def
	X		/Sin dy dl div def
	X		/r [Cos Sin Sin neg Cos 0.0 0.0] def
	X		/t2 t 2.5 mul 3.5 max def
	X		newpath
	X		x y translate
	X		r concat
	X		0.0 0.0 moveto
	X		dl t 2.7 mul sub 0.0 rlineto
	X		stroke
	X		restorematrix
	X		x dx add y dy add translate
	X		r concat
	X		t 0.67 mul setlinewidth
	X		t 1.61 mul neg  0.0 translate
	X		0.0 0.0 moveto
	X		t2 1.7 mul neg  t2 2.0 div     moveto
	X		0.0 0.0 lineto
	X		t2 1.7 mul neg  t2 2.0 div neg lineto
	X		stroke
	X		t setlinewidth
	X		restorematrix
	X		} if
	X	} bind def
	X/G { 
	X	gsave
	X	newpath
	X	normalize translate 0.0 0.0 moveto 
	X	dnormalize scale 
	X	0.0 0.0 1.0 5 3 roll arc 
	X	closepath eofill
	X	grestore
	X	} bind def
	X	/x FMLOCAL
	X	/y FMLOCAL
	X	/w FMLOCAL
	X	/h FMLOCAL
	X	/xx FMLOCAL
	X	/yy FMLOCAL
	X	/ww FMLOCAL
	X	/hh FMLOCAL
	X/A { 
	X	/y exch def
	X	/x exch def
	X	/h exch def
	X	/w exch def
	X	x y normalize /yy exch def /xx exch def
	X	w h dnormalize /hh exch def /ww exch def
	X	ww abs hh abs xx ww add yy hh sub
	X	gsave
	X	savematrix
	X	newpath
	X	translate
	X	scale
	X	0.0 0.0 1.0 5 3 roll arc
	X	0 setlinecap
	X	restorematrix
	X	stroke
	X	grestore
	X	} bind def
	X	/FMsaveobject FMLOCAL
	X	/FMoptop FMLOCAL
	X	/FMdicttop FMLOCAL
	X/BEGINPRINTCODE {
	X	/FMdicttop countdictstack 1 add def 
	X	/FMoptop count 6 sub def 
	X	/FMsaveobject save def
	X	userdict begin 
	X	/showpage {} def 
	X	translate
	X	FMNORMALIZEGRAPHICS
	X	} bind def
	X/ENDPRINTCODE {
	X	count -1 FMoptop {pop pop} for 
	X	countdictstack -1 FMdicttop {pop end} for 
	X	FMsaveobject restore 
	X	} bind def
	X/gn { 
	X	0 
	X	{	46 mul 
	X		cf read pop 
	X		32 sub 
	X		dup 46 lt {exit} if 
	X		46 sub add 
	X		} loop
	X	add 
	X	} bind def
	X	/str FMLOCAL
	X/cfs { 
	X	/str sl string def 
	X	0 1 sl 1 sub {str exch val put} for 
	X	str def 
	X	} bind def
	X/ic [ 
	X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	X	0
	X	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
	X	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
	X	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
	X	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
	X	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
	X	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
	X	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
	X	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
	X	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
	X	] def
	X	/sl FMLOCAL
	X	/val FMLOCAL
	X	/ws FMLOCAL
	X	/im FMLOCAL
	X	/bs FMLOCAL
	X	/cs FMLOCAL
	X	/len FMLOCAL
	X	/pos FMLOCAL
	X/ms { 
	X	/sl exch def 
	X	/val 255 def 
	X	/ws cfs 
	X	/im cfs 
	X	/val 0 def 
	X	/bs cfs 
	X	/cs cfs 
	X	} bind def
	X400 ms 
	X/ip { 
	X	is 
	X	0 
	X	cf cs readline pop 
	X	{	ic exch get exec 
	X		add 
	X		} forall 
	X	pop 
	X	
	X	} bind def
	X/wh { 
	X	/len exch def 
	X	/pos exch def 
	X	ws 0 len getinterval im pos len getinterval copy pop
	X	pos len 
	X	} bind def
	X/bl { 
	X	/len exch def 
	X	/pos exch def 
	X	bs 0 len getinterval im pos len getinterval copy pop
	X	pos len 
	X	} bind def
	X/s1 1 string def
	X/fl { 
	X	/len exch def 
	X	/pos exch def 
	X	/val cf s1 readhexstring pop 0 get def
	X	pos 1 pos len add 1 sub {im exch val put} for
	X	pos len 
	X	} bind def
	X/hx { 
	X	3 copy getinterval 
	X	cf exch readhexstring pop pop 
	X	} bind def
	X	/h FMLOCAL
	X	/w FMLOCAL
	X	/lb FMLOCAL
	X	/bitmapsave FMLOCAL
	X	/is FMLOCAL
	X	/cf FMLOCAL
	X/BEGINBITMAP { 
	X	gsave
	X	translate scale /h exch def /w exch def
	X	/lb w 7 add 8 idiv def 
	X	sl lb lt {lb ms} if 
	X	/bitmapsave save def 
	X	/is im 0 lb getinterval def 
	X	ws 0 lb getinterval is copy pop 
	X	/cf currentfile def 
	X	w h 1 [w 0 0 h neg 0 h] 
	X	{ip} image 
	X	bitmapsave restore 
	X	grestore
	X	} bind def
	X/ENDBITMAP {
	X	} bind def
	Xend 
	X%%EndProlog
	X%%BeginSetup
	X(1.2) FMVERSION
	X1. 1. 612. 792. 0 1 7 FMDOCUMENT
	X0 12. /Times-Roman  FMDEFINEFONT
	X1 14. /Times-Bold  FMDEFINEFONT
	X2 12. /Times-Italic  FMDEFINEFONT
	X3 12. /Times-Bold  FMDEFINEFONT
	X4 14. /Times-Roman  FMDEFINEFONT
	X5 18. /Times-Bold  FMDEFINEFONT
	X6 14. /Times-Italic  FMDEFINEFONT
	X0.5 1. 3. 4. 4 FMLINEWIDTHS
	X%%EndSetup
	X%%Page: "14" 1
	XFMBEGINPAGE
	X0 F
	X0 X
	X(Hype: A Tutorial \321 Version 1.2) 227.68 747. T
	X(-14-) 296. 36. T
	X450. 585. 576. 702. R
	X7 X
	XV
	X1 H
	X0 X
	XN
	X2 H
	X126. 314. 112. -141. W
	X107. 313. 133. -209. W
	X144. 314. 95. -67. W
	X248. 474. 248. 474. 248. 487.5 320. 474. 320. 474. 284. 474. 320. 501. 320. 501. 320. 487.5 248. 501. 248. 501. 284. 501. 248. 487.5 4 J
	X7 X
	XV
	X0 X
	XN
	X1 F
	X(Mercury) 95. 328. T
	X(C) 251. 81. T
	X81. 314. 162. 350. R
	XN
	X(DegC) 262. 163. T
	X243. 153. 243. 153. 243. 166.5 315. 153. 315. 153. 279. 153. 315. 180. 315. 180. 315. 166.5 243. 180. 243. 180. 279. 180. 243. 166.5 4 J
	XN
	X(DegF) 262. 232. T
	X243. 222. 243. 222. 243. 235.5 315. 222. 315. 222. 279. 222. 315. 249. 315. 249. 315. 235.5 243. 249. 243. 249. 279. 249. 243. 235.5 4 J
	XN
	X243. 72. 243. 72. 243. 86.5 270. 72. 270. 72. 256.5 72. 270. 101. 270. 101. 270. 86.5 243. 101. 243. 101. 256.5 101. 243. 86.5 4 J
	XN
	X(DegF) 267. 484. T
	X279. 467. -117. -116. W
	X7 X
	X90. 450. 49.5 22.5 229.5 417.5 G
	X0 X
	X90. 90.1 -49.5 22.5 279. 440. A
	X90. 180.1 49.5 22.5 180. 440. A
	X180. 270.1 49.5 -22.5 180. 395. A
	X270. 0.1 -49.5 -22.5 279. 395. A
	X0. 90. -49.5 22.5 279. 440. A
	X3.16 (changeTo 40) 190. 414. P
	X7 X
	X90. 450. 54. 18. 162. 278. G
	X0 X
	X90. 90.1 -54. 18. 216. 296. A
	X90. 180.1 54. 18. 108. 296. A
	X180. 270.1 54. -18. 108. 260. A
	X270. 0.1 -54. -18. 216. 260. A
	X0. 90. -54. 18. 216. 296. A
	X2.3 (degreesC 40) 125. 274. P
	X0 F
	X1.84 (convert to Fahrenheit and display) 333. 233. P
	X3.01 (display new temperature) 333. 164. P
	X2 F
	X1. (message is ignored) 288. 85. P
	X0 F
	X1.97 (send ) 180. 332. P
	X3 F
	X1.97 (degreesC) 206.97 332. P
	X0 F
	X1.97 ( with new temperature \05040\051 to every owned item) 254.28 332. P
	X7 X
	X90. 450. 20.5 6. 485.5 655. G
	X1 H
	X0 X
	X90. 90.1 -20.5 6. 506. 661. A
	X90. 180.1 20.5 6. 465. 661. A
	X180. 270.1 20.5 -6. 465. 649. A
	X270. 0.1 -20.5 -6. 506. 649. A
	X0. 90. -20.5 6. 506. 661. A
	X465. 623. 506. 635. R
	X7 X
	XV
	X0 X
	XN
	X466. 597. 466. 597. 466. 603. 507. 597. 507. 597. 486.5 597. 507. 609. 507. 609. 507. 603. 466. 609. 466. 609. 486.5 609. 466. 603. 4 J
	X7 X
	XV
	X0 X
	XN
	X4 F
	X(message) 522. 651. T
	X(object) 522. 625. T
	X(item) 523. 599. T
	X5 F
	X3.5 (Message-passing in the Tutorial) 72. 688. P
	X2 H
	X130. 605. 113. -101. W
	X7 X
	X90. 450. 49.5 18. 166.5 565. G
	X0 X
	X90. 90.1 -49.5 18. 216. 583. A
	X90. 180.1 49.5 18. 117. 583. A
	X180. 270.1 49.5 -18. 117. 547. A
	X270. 0.1 -49.5 -18. 216. 547. A
	X0. 90. -49.5 18. 216. 583. A
	X1 F
	X(mouseUp) 138. 561. T
	X2 F
	X0.87 (sent by ) 279. 562. P
	X3 F
	X0.87 (hype) 317.4 562. P
	X2 F
	X0.87 ( on mouse click) 342.07 562. P
	X2.51 (three identical messages) 297. 275. P
	X1.34 (shows message name and parameters) 339. 415. P
	X0 H
	X333. 418. -36. 0. W
	X0 F
	X(get new Fahrenheit temperature \050105\051,) 338. 501. T
	X(compute new Celsius temperature \05040\051, ) 338. 487. T
	X(send ) 338. 473. T
	X3 F
	X(changeTo) 363. 473. T
	X0 F
	X( with new Celsius temperature) 413. 473. T
	X6 F
	X1.88 (user mouses on 105 degrees Fahrenheit) 77. 616. P
	X5 F
	X(Key) 498. 684. T
	X282. 278. -54. 0. W
	X266. 565. -43. 0. W
	X450. 675. 576. 675. 2 L
	X1 H
	XN
	XFMENDPAGE
	X%%Trailer
	X%%Pages: 1 1
	X%%DocumentFonts: Times-Roman
	X%%+ Times-Bold
	X%%+ Times-Italic
SHAR_EOF
if test 17483 -ne "`wc -c < 'figure2.ps'`"
then
	echo shar: error transmitting "'figure2.ps'" '(should have been 17483 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'Makefile'" '(646 characters)'
if test -f 'Makefile'
then
	echo shar: will not over-write existing file "'Makefile'"
else
sed 's/^	X//' << \SHAR_EOF > 'Makefile'
	X#
	X#	See the comments in ../Guide/makefile
	X#
	X
	XFILES	=	macros title	\
	X		introduction	\
	X		jumpstart	\
	X		maketree	\
	X		addwidgets	\
	X		usemessages	\
	X		lookingback	\
	X		onward
	X
	XFRAMEFILES =	figure1.doc figure2.doc
	X
	XPSFILES = figure1.ps figure2.ps
	X
	Xcrt:
	X	tbl $(FILES) | nroff -ms | col -b | more -f
	X
	Xtroff:
	X	tbl $(FILES) | troff -t -ms | lpr -t 
	X
	Xframe:
	X	csh -c "setenv PRODUCT frame; \
	X		source /usr/local/bin/product.csh; \
	X		fmbook figure1.doc -p -g figure2.doc -p"
	X
	Xpostscript: ${PSFILES}
	X	lpr ${PSFILES}
	X
	Xlpr:
	X	make troff
	X	make postscript
	X
	Xspell:
	X	deroff $(FILES) | spell | more
	X
	Xsafe:
	X	rm -rf .safe
	X	ar rv .safe makefile $(FILES)
	X	chmod ugo-w .safe
SHAR_EOF
if test 646 -ne "`wc -c < 'Makefile'`"
then
	echo shar: error transmitting "'Makefile'" '(should have been 646 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'Tutorial'"
cd ..
#	End of shell archive
exit 0