-- Seattle.mail
-- Pier, June 22, 1985 1:38:30 pm PDT
  5-Jun-85 Beach.pa Staging CedarInSeattle Demo at PARC
Date: 5 Jun 85 11:53:27 PDT
From: Beach.pa
Subject: Staging CedarInSeattle Demo at PARC
To: Overton, Saaranzin, Murray
Cc: Beach, Sweet, Donahue, Hagmann, Swinehart, Pollez (CSL speakers/demonstrators)
Cc: Ritchie, Pier, PeterKessler, Diebert (hangers on!)

Here is the preliminary plan for staging the equipment we intend to show at the SIGPLAN/SIGSOFT conference in Seattle. The goal is to establish and run the configuration at PARC beforehand. All the equipment can then be shipped together from the PARC loading dock.

The staging area will be the open area in the Purple Lab, room 35-2403 (the room with the Color Versatec plotter; we will use the open space near the power distribution panels). OSD should deliver their equipment to this area. A critical resource will be the 10-mbit Ethernet cable which we could use as early as possible, since the Cedar configuration piggy-backs its Grapevine and boot servers from the 10-mbit Ethernet.

We expect the following OSD equipment: 10-mbit Ethernet cable, 3 workstations, 1 file server, 1 print server, and 1 Librarian/Adobe server.

We expect the following CSL Cedar equipment: 3-mbit Ethernet cable, 3 Dorados, 1 DLion Grapevine server, 1 DLion boot server/gateway, 1 Dicentra gateway.

The Seattle demo configuration will be a combined Cedar/XDE internet. The Cedar Dorados will be on their own 3-mbit mini-Ethernet; the XDE workstations and servers will be on a 10-mbit Ethernet; and the Cedar Grapevine and boot server will be on the XDE 10-mbit Ethernet. A Dicentra will provide the gateway between the 3-mbit and 10-mbit Ethernets.

For the staging at PARC, the 10-mbit Ethernet will be entirely within 2403, while the 3-mbit Ethernet will stretch from the staging area to the server room (so we don't have to move the Dorados due to their special power requirements), a distance of about 40 feet. A temporary Dicentra gateway will be used to connect the 3-mbit mini-Ethernet to PARC net 3# in the Purple Lab server room. This permits the Dorados to be useable within CSL whenever we are not testing the demo configuration. To isolate the demo configuration, the temporary gateway is disconnected.

Action items:

Becky Sarranzin: please arrange for OSD to ship the 10-mbit Ethernet cable and equipment to 35-2403. Please let me know when the remainder of the equipment could be delivered.

Mike Overton/Hal Murray: please arrange the 3-mbit mini-Ethernet and temporary gateway. Initial Dorado allocation for the mini-Ethernet are Shangrila, Sea-Horse, and Reprisal (I think all three are 4MW, 315 disk, color, PC board Dorados located in the Purple Lab server room).
 17-Jun-85 To: Pier SIGPLAN Travel Plans
Date: 17 Jun 85 11:23:42 PDT
From: Pier.pa
Subject: SIGPLAN Travel Plans
To: Pier


Depart Monday, June 24, from SFO on AirCal #765, departing 5 PM arriving 6:49 PM
Return Friday, June 28, from SEATAC on AirCal #724, departing 4:45 PM arriving 6:58.
Hertz car at SEATAC.
Registration confirmed.
TAKE: Xerox Hertz card, registration confirmation card.
Hotel: The Madison
 18-Jun-85 To: Beach Seattle Demo Catagories
Date: 18 Jun 85 14:31:08 PDT
From: Pier.pa
Subject: Seattle Demo Catagories
To: Beach
Reply-To: Pier
cc: , Pier
-- DemoCat.tioga
-- Pier, June 18, 1985 2:29:01 pm PDT
Preliminary Outline for SIGPLAN Demo
1. Programming Tools
Tioga Editor
expand abbreviations, expand proc definitions, node structure, Editor Comforts, ...
Tioga features available to all packages via programming interface TiogaOps, e.g. TerminalEmulator, Walnut, Remember
DF Files
File structure, Bringover, SModel, VerifyDF
guiding MakeDo, basis of Release management
MakeDo and other programming aids
Compiler, Binder, GetDWIM, GetFromRelease, GetImpl
2. Debugging and Performance Analysis Tools
Debugging:
Interpreter
breakpoints, stack walk, variables, sources, global variable access
DebugTool
teledebugging, process/context freezing
BreakTool
Celtics
Performance Analysis:
Watch
Spy
PupWatch ?? - careful about passwords
3. Applications
RandomImagerTest on color display
idling or in parallel with other activities
Icon Editor
Icon Files, changing Icon in a viewer on the fly
Whiteboard
Cedar whiteboard as primary documentation
VBounce with exploding icon
ChipNDale (maybe)
ShowPress
Do we make press files on the fly or use canned ones or both ??
Walnut
mail servers, data base access, messages, ...
4. Other Topics of Interest
Chat, FTP to VAXC
then what ??
Remember
Multiple interfaces to capabilities
DFTool vs. Command line
Small Languages
JaM, TEdit, styles, TIP, CommandTool, text string matcher, MISP
Printing and Fonts
??
FS
T-Shirts, Games, On-line Slides
 18-Jun-85 To: Beach Icon Editor Script
Date: 18 Jun 85 17:11:45 PDT
From: Pier.pa
Subject: Icon Editor Script
To: Beach
Reply-To: Pier
cc: , Pier
I like this a lot but it might be too long; we should time it

-- IconEditorScript.tioga
-- Ken Pier, June 18, 1985 5:08:57 pm PDT
new CommandTool
cdr IconEditor
Bringover -p /Cedar/CedarChest6.0/Top/IconEditor.df
brief explanation of DF file and Bringover
IconEditor
Choose existing Icon and edit it
Point out change immediately reflected in small icons
Show some editing features: boxfills, lines, bitmap shifting
Open and briefly discuss IconEditorDoc.tioga
CreateIcon
point out new icon
Completely fill new icon with desktop Grey
Make a centered white box and fill it in with some pattern
Set and Show a Label field
Save Icons to File
Create vanilla text viewer, make iconic
Get an interpreter tool
via INTERPRETER, locate vanilla viewer
change icon field in viewer using
viewer.icon ← Icons.NewIconFromFile[<filename of file containing icons>, index];
redisplay vanilla viewer with new Icon
note label field is too small
use Shift Up and SetLabel to make bigger label field
change to new Icon and redisplay again
type SIGPLAN into interpreter, then DEL
type SEATTLE into interpreter, then DEL
invoke CreateFilledIcon
sweep out SIGPLAN SEATTLE into new Icon
 19-Jun-85 To: Beach SilScript for Seattle
Date: 19 Jun 85 11:46:38 PDT
From: Pier.pa
Subject: SilScript for Seattle
To: Beach
Reply-To: Pier
cc: , Pier

-- SilScript.tioga
-- Ken Pier, June 19, 1985 11:44:55 am PDT
new CommandTool
cdr Sil
Bringover /Cedar/CedarChest6.0/Top/CSil.df
brief explanation of DF file and Bringover
XSil.load
eXperimental SIL
brief explanation of package loading and starting SIL
show Sil running, point our mark and origin carets with fixed size
add procedure to caret managing interface to change size of cursors
Add to SilDisplayCursors
SilCaretSize: PROC [newMarkWidth, newMarkLength, newOriginWidth, newOriginLength: NAT];
Add to SilDisplayCursorsImpl
SilCaretSize: PUBLIC ENTRY PROC [newMarkWidth, newMarkLength, newOriginWidth, newOriginLength: NAT] = {
markWidth ← newMarkWidth;
markLength ← newMarkLength;
originWidth ← newOriginWidth;
originLength ← newOriginLength;
};
Perform MakeDo -dr CSil
explain about MakeDo
observe compiling and binding called from MakeDo
observe more compiling than usual because of interface change
Reload XSil.bcd
New Sil Viewer
Call SilCaretSize from CommandTool to dynamically change sizes
← SilDisplayCursors.SilCaretSize[10,10,10,10]
← SilDisplayCursorsImpl.SilCaretSize[2,2,4,4]
← SilDisplayCursorsImpl.SilCaretSize[newMarkWidth: 2, newMarkLength: 6, newOriginWidth: 4, newOriginLength: 2]

 19-Jun-85 To: Beach WhiteboardScript for Seattle
Date: 19 Jun 85 17:38:10 PDT
From: Pier.pa
Subject: WhiteboardScript for Seattle
To: Beach
Reply-To: Pier
cc: , Pier

-- WhiteboardScript.tioga
-- Ken Pier, June 19, 1985 5:37:32 pm PDT
new CommandTool
cdr Whiteboard
Bringover /Cedar/CedarChest6.0/Top/Whiteboard.df
brief explanation of DF file and Bringover if needed
Whiteboard Cedar
brief explanation of package loading if needed
explain concept of whiteboard(s), databases, ...
Demonstrate WB functions
scrolling of all types of windows
open text icon
open whiteboard
expand whiteboard
add text box
move entity
delete entity
Wander around on Cedar Whiteboard
emphasize that this contains all introductory and most other material or pointers to that material
pointers to text files can be instantly dereferenced by selecting the file name and opening the file

 19-Jun-85 Jacobi.pa Demonstrating ChipNDale
Date: 19 Jun 85 17:43:07 PDT
From: Jacobi.pa
Subject: Demonstrating ChipNDale
To: Pier.pa, Beach.pa
Cc: Jacobi
Demonstrating ChipNDale
interactive editing, zooming... works
now reading .sil files is converted to Cedar6.0
design rule checking, mask making... does not work
DF files
bringover /indigo/chipndale/6.0/top/cddesign21.df
gets everything a designer would like to have to work interactive (better do not use -p)
if you want more (sources), use
/indigo/chipndale/6.0/top/cd21.df
/indigo/chipndale/6.0/top/cdcmos21.df
/indigo/chipndale/6.0/top/cdnmos21.df
/indigo/chipndale/6.0/top/chipnsil.df
Designs to show
you should ask designers, not me
I typically use the Chipmonk file /ivy/mccreight/rom/rom4.chip for demonstrations, but I don't know if you are allowed to show it outside...
Check the files designers give you; designers sometime depend on non released programs beeing loaded to read in their designs...
User Profile
ChipNDale
Do with fonts whatever you want....
(the scale is multiplied with lambda, and defaulted to lambda (2))
here some examples
ChipNDale.ChipNSil.Font0: "Xerox/TiogaFonts/Helvetica10"
ChipNDale.ChipNSil.Font1: "Xerox/TiogaFonts/Helvetica7"
ChipNDale.ChipNSil.Font2: "Xerox/TiogaFonts/Gates32"
ChipNDale.ChipNSil.Font3: "Xerox/PressFonts/Helvetica-bir"
ChipNDale.ChipNSil.ScaleFont3: 20
ChipNDale.ChipNSil.Font4: "Xerox/PressFonts/Helvetica-brr"
ChipNDale.ChipNSil.ScaleFont4: 20
ChipNDale.ChipNSil.Font5: "Xerox/PressFonts/Helvetica-mir"
ChipNDale.ChipNSil.ScaleFont5: 20
ChipNDale.ChipNSil.Font6: "Xerox/PressFonts/Helvetica-mrr"
ChipNDale.ChipNSil.ScaleFont6: 20
ChipNDale.ChipNSil.Font7: "Xerox/PressFonts/Gates-mrr"
ChipNDale.ChipNSil.ScaleFont7: 64
These files are created on execution of the CDReadSil command
ChipNDale.ChipNSil.Library5: "///cd21/SilLib5.dale"
ChipNDale.ChipNSil.Library6: "///cd21/SilLib6.dale"
ChipNDale.ChipNSil.Library7: "///cd21/SilLib7.dale"
ChipNDale.ChipNSil.Library8: "///cd21/SilLib8.dale"
ChipNDale.ChipNSil.Library9: "///cd21/SilLib9.dale"
These files are substituted on auto import, they are not used otherwise
ChipNDale.ImportFor.SilLib5: "///cd21/overton5.dale"
ChipNDale.ImportFor.SilLib6: "///cd21/overton6.dale"
ChipNDale.ImportFor.SilLib8: "///cd21/overton8.dale"
Sil
options must be available for CDReadSil command, use for example:
Sil.Font0: Helvetica10
Sil.Font1: Helvetica7
Sil.Font2: Template64
Sil.Font3: Gates32
Sil.Font5: ///sil/Sil.lb5
Sil.Font6: ///sil/Sil.lb6
Sil.Font7: ///sil/Sil.lb7
Sil.Font8: ///sil/Sil.lb8
Sil.Font9: ///sil/Voicelb9.sil
 19-Jun-85 To: Beach RandomImagerScript for Seattle
Date: 19 Jun 85 17:58:12 PDT
From: Pier.pa
Subject: RandomImagerScript for Seattle
To: Beach
Reply-To: Pier
cc: , Pier

-- RandomImagerScript.tioga
-- Ken Pier, June 19, 1985 5:50:19 pm PDT
new CommandTool
cd ImagerExamples
bringover -p /Cedar/CedarChest6.0/Top/ImagerExamples.df
ColorDisplay
turn on in 24 bpp mode
RandomImager.cm
watch and explain elements on the screen
introduce Interpress imaging model

 21-Jun-85 Spreitzer.pa Re: ViewRec script
Date: 21 Jun 85 23:13:24 PDT
From: Spreitzer.pa
Subject: Re: ViewRec script
In-reply-to: "My message of 21 Jun 85 20:05:39 PDT"
To: Pier
Cc: Spreitzer
My first message had a bug in it: failing to start EQT (part of the statement interpreter). Here's a corrected version:
A possibly fun script of things to do with ViewRec might include making RecordViewers on the Rope, IO, and FS interfaces (this makes incidental use of the statement interpreter):
% cd ViewRecDemo
% Bringover -p [Cedar]<CedarChest6.0>Top>ViewRec.DF
% ViewRec
Demo the Rope interface:
% ← ViewRec.ViewInterface[name: "Rope", otherStuff: NIL, viewerInit: [name: "Rope", iconic: FALSE]]
Try Cat, Concat, Compare, &etc.
Demo the IO interface:
% Bringover -p [Cedar]<CedarChest6.0>Top>StatementInterpreter.DF
% EQT
% { ioType: TYPE = AMMiniModel.AcquireIRType["IO"]; ViewStream: PROC [s: IO.STREAM, name: ROPE] RETURNS [rv: ViewRec.RecordViewer] = {bl: ViewRec.BindingList = ViewRec.BindAllOfATypeFromTVs[CODE[ioType], CODE[IO.STREAM], NIL, [Value[NIL, &up[s]]]]; rv ← ViewRec.ViewInterface[name: "IO", specs: bl, otherStuff: NIL, viewerInit: [name: name]]}; NULL}
% ← &vio ← ViewerIO.CreateViewerStreams["IO.STREAM demo"]
% ← ViewStream[&vio.out, "out"]
% ← ViewStream[&vio.in, "in"]
Do out.GetInfo, PutRope, PutChar, Flush, EraseChar
Do in.GetInfo, EndOf, CharsAvail, PeekChar, GetChar, Backup, GetCedarTokenRope, GetInt, GetReal, GetRopeLiteral, SkipWhitespace, others that work (GetUnpackedTime doesn't)
N.B.: &vio.in is an edited stream
Don't worry about things that fail --- most of them you can simply abort. I think the worst you can do is close a stream --- and to fix that you can simply create a new one and start over.
Demo the FS interface:
Bind the BasicTime.GMT's, because ViewRec doesn't have default handling for TYPE[2]'s:
% ← &fst ← AMMiniModel.AcquireIRType["FS"]
% ← &bl ← ViewRec.BindAllOfATypeFromTVs[&fst, CODE[BasicTime.GMT], NIL, [Value[NIL, &up[BasicTime.nullGMT]]]]
% ← ViewRec.ViewInterface[name: "FS", specs: &bl, otherStuff: NIL, viewerInit: [name: "FS"]]
Do ExpandName, ConstructFName, FileInfo, Copy, Delete, Rename, SetKeep

 22-Jun-85 Spreitzer.pa PolyHack script
Date: 22 Jun 85 00:51:27 PDT
From: Spreitzer.pa
Subject: PolyHack script
To: Pier.pa
Cc: Spreitzer
The PolyHack is a graphics hack that uses BiScrollers, ViewRec, StructuredStreams, and Misp.
Read the PolyHack document for an introduction to the theory of the PolyHack, and details of how to use it.
There is a bit of an embarrasment here --- the introducion of a second language (Misp), when the first (Cedar) would do (nearly) as well. The real reason it uses Misp, instead of the interpreter (including the statement interpreter), is that when the PolyHack was created, the interpreter was less powerful than Misp in a number of relevant ways. The interpreter has since gotten better, but is still a bit less powerful: it cannot pass functions that it created around as values; that feature is used in a few things I've tried in the PolyHack, but will not be used in the script below.
Here's a possible demo:
% cd PolyHackDemo
% Bringover -p [Cedar]<CedarChest6.0>Top>PolyHack.DF
% PolyHack
My favorite configuration of viewers is: (column division in the middle), "(BiScrolling) Poly Hack" above "(BiScrolling) Poly Hack Control" in the left column, and "Watch" above this script above "PolyHacks" [possibly above "(BiScrolling) Poly Hack Log" adjusted small] in the right column.
Some Tachys:
Set sweep mode, select old Tachy in "PolyHacks", middle click in "(BiScrolling) Poly Hack", then left click (now it starts running), then right click (when bored).
Same for new Tachy.
Some Sins:
Set fill mode. Select the do loop from the Sins section of "PolyHacks", and hit the ReadEvalPrint button in the control panel. This runs a demo that repeatedly chooses a random pattern and runs it through one cycle. Any click in the graphics window to stop.
Some Polygons:
Set outline mode. Select the do loop from the Polygons section of "PolyHacks", and hit the ReadEvalPrint button in the control panel. This runs a demo that is similar to an XDE DMT. Middle click in the graphics window to stop.
Some Spirographs:
Get color viewers going, and put the "(BiScrolling) Poly Hack" in the color column. Make sure the colormap actually has interesting colors in it (not just all grays).
Set trace mode.
Select the red, green, and blue example from the Spirographs section of "PolyHacks", middle click in "(BiScrolling) Poly Hack", then left click (now it starts running), then right click (when completed). Try it this one with sweep mode. You might try composing some traditional (two wheeled) spirographs --- there are some relatively trivial examples in "PolyHacks".
 22-Jun-85 Spreitzer.pa Background picture demo
Date: 22 Jun 85 01:06:47 PDT
From: Spreitzer.pa
Subject: Background picture demo
To: Pier.pa
Cc: Spreitzer
Here's a hack Bill Jackson pushed through: setting the background color to be a sampled color, instead of the usual desktop-gray stipple.
Below is given a way to use any AIS file as the background color. Also given is a way to extract AIS files from press files. See if you can find any good files to use.
Here's an example:
% cd Roots
% StatementInterpreter
% AddDebugSearchRules [Cedar]<Cedar6.0>Viewers>
% { logpa: ImagerPixelArray.PixelArray; SetRoot: PROC [aisFileName: ROPE, invert: BOOLFALSE] = {pa: ImagerPixelArray.PixelArray ← logpa ← ImagerPixelArray.FromAIS[aisFileName]; max: NAT ← ImagerPixelArray.MaxSampleValue[pa, 0]; colorOp: ImagerColor.ColorOperator ← IF max=1 THEN ImagerColorOperator.BlackColorModel[FALSE] ELSE IF invert THEN ImagerColorOperator.GrayLinearColorModel[max, 0, 0, NIL] ELSE ImagerColorOperator.GrayLinearColorModel[0, max, 0, NIL]; color: ImagerColor.Color ← ImagerColor.MakeSampledColor[pa, IdealXForm[pa], colorOp]; ViewerPaintImpl.desktopGrey ← color; ViewerOps.PaintEverything[]}; NULL}
% { IdealXForm: PROC [pa: ImagerPixelArray.PixelArray] RETURNS [t: ImagerTransformation.Transformation] = {t ← ImagerTransformation.Concat[ImagerTransformation.Invert[pa.m], ImagerTransformation.Rotate[-90]]}; NULL}
Set the background to be a MazeWar eyeball:
% ← SetRoot["[Cedar]<CedarChest6.0>MazeWar>EyeballFront.ais"]
Note the phase problem when area revealed from behind icons is painted. Perhaps it would be interesting to try adding scaling and translation to the transformation used so that this problem isn't apparant.
The PressFileUtilities package exports a way to extract the sampled images from press files and put them in AIS files.
% Bringover -p [Cedar]<CedarChest6.0>Top>PressFileUtilities
For some press file with a bitmap in it (can you find one?)
% PressImageExtract foo.press
Before using SetPressRoot, you should make sure PressImageExtract has been executed at least once, to provide the implementation.
% { SetPressRoot: PROC [pressFileName: ROPE, invert: BOOLFALSE] = {fullFName: ROPE; base: ROPE; aisName: ROPE; cp: FS.ComponentPositions; &x ← FS.ExpandName[pressFileName]; fullFName ← &x.fullFName; cp ← &x.cp; base ← Rope.Substr[&x.fullFName, cp.base.start, cp.base.length]; aisName ← Rope.Cat[base, "-1.ais"]; IF NOT Exists[aisName] THEN PressImageExtractImpl.ExtractImages[pressFileName, base, ProcessProps.GetProp[$CommanderHandle].out]; SetRoot[aisName, invert]}; NULL}
% { Exists: PROC [fileName: ROPE] RETURNS [exists: BOOL] = {exists ← TRUE; [] ← FS.FileInfo[fileName !FS.Error => {exists ← FALSE; CONTINUE}]}; NULL}
% ← SetPressRoot["Fubar.press"]
Here's how to get back to normal:
% { Dullify: PROC = {ViewerPaintImpl.desktopGrey ← ImagerBackdoor.MakeStipple[8822H]}; NULL}
% ← Dullify[]
 22-Jun-85 To: Pier ViewRec Scripts for Seattle
Date: 22 Jun 85 15:06:07 PDT
From: Pier.pa
Subject: ViewRec Scripts for Seattle
To: Pier
Reply-To: Pier
cc: Beach, Pier

-- ViewRec Demo
cd;
cd ViewRecDemo;
addd /cedar/cedar6.0/viewers/
Bringover -p [Cedar]<CedarChest6.0>Top>ViewRec.DF
← ViewRec.ViewInterface[name: "Rope", otherStuff: NIL, viewerInit: [name: "Rope", iconic: FALSE]]
-- Try Cat, Concat, Compare, &etc.
-- Demo the IO interface:
Bringover -p [Cedar]<CedarChest6.0>Top>StatementInterpreter.DF
EQT
{ ioType: TYPE = AMMiniModel.AcquireIRType["IO"]; ViewStream: PROC [s: IO.STREAM, name: ROPE] RETURNS [rv: ViewRec.RecordViewer] = {bl: ViewRec.BindingList = ViewRec.BindAllOfATypeFromTVs[CODE[ioType], CODE[IO.STREAM], NIL, [Value[NIL, &up[s]]]]; rv ← ViewRec.ViewInterface[name: "IO", specs: bl, otherStuff: NIL, viewerInit: [name: name]]}; NULL}
← &vio ← ViewerIO.CreateViewerStreams["IO.STREAM demo"]
← ViewStream[&vio.out, "out"]
← ViewStream[&vio.in, "in"]
-- Do out.GetInfo, PutRope, PutChar, Flush, EraseChar
-- Do in.GetInfo, EndOf, CharsAvail, PeekChar, GetChar, Backup, GetCedarTokenRope,
-- GetInt, GetReal, GetRopeLiteral, SkipWhitespace, others that work (GetUnpackedTime doesn't)
-- N.B.: &vio.in is an edited stream
-- Don't worry about things that fail most of them you can simply abort. I think the worst you can do is close a stream and to fix that you can simply create a new one and start over.
--
Demo the FS interface:
-- Bind the BasicTime.GMT's, because ViewRec doesn't have default handling for TYPE[2]'s:
← ViewRec.ViewInterface[name: "FS", specs: &bl, otherStuff: NIL, viewerInit: [name: "FS"]]
-- Do ExpandName, ConstructFName, FileInfo, Copy, Delete, Rename, SetKeep

 22-Jun-85 Plass.pa Viewers for Cedar 6.0
Date: 22 Jun 85 11:19:29 PDT
From: Plass.pa
Subject: Viewers for Cedar 6.0
To: Release Coordinator <Atkinson.pa>
Cc: CedarImplementors^.pa
Reply-to: Plass.pa
Viewers
I borrowed the Viewers torch to make a small fix to ViewerPaintImpl. The desktop colors now tile properly; if "Foo.ais" is a bitmap AIS file (e.g., one created with PressScreen), say
← &color ← ImagerColor.MakeSampledBlack[pa: ImagerPixelArray.FromAIS["[Cedar]<CedarChest6.0>MazeWar>EyeballFront.ais"], um: ImagerTransformation.Scale[1], clear: FALSE]
← ViewerPaintImpl.desktopGrey ← &color
← ViewerOps.PaintEverything[]
and your desktop will be less boring. (You can use any Imager color, but this is a fast case. There is another variable for the color display).
 22-Jun-85 To: Beach PolyHack Demo for Seattle
Date: 22 Jun 85 15:33:53 PDT
From: Pier.pa
Subject: PolyHack Demo for Seattle
To: Beach
Reply-To: Pier
cc: , Pier

The PolyHack is a graphics hack that uses BiScrollers, ViewRec, StructuredStreams, and Misp.
Read the PolyHack document for an introduction to the theory of the PolyHack, and details of how to use it.
There is a bit of an embarrasment here --- the introducion of a second language (Misp), when the first (Cedar) would do (nearly) as well. The real reason it uses Misp, instead of the interpreter (including the statement interpreter), is that when the PolyHack was created, the interpreter was less powerful than Misp in a number of relevant ways. The interpreter has since gotten better, but is still a bit less powerful: it cannot pass functions that it created around as values; that feature is used in a few things I've tried in the PolyHack, but will not be used in the script below.
Here's a possible demo:
cd; cd PolyHackDemo;
Bringover -p [Cedar]<CedarChest6.0>Top>PolyHack.DF
PolyHack
-- close all viewers on desktop then open in this order:
Left column: (BiScrolling) Poly Hack, (BiScrolling) Poly Hack Control, MispInterpreter, PolyHack.PreLoad. Shove PreLoad contents into MispInterpreter. Close MispInterpreter and PreLoad.
Right column: Watch, this script, PolyHacks
-- Some Tachys:
Set sweep mode, select old Tachy in "PolyHacks", middle click in "(BiScrolling) Poly Hack", then left click (now it starts running), then right click (when bored).
Same for new Tachy.
-- Some Sins:
Set fill mode. Select the do loop from the Sins section of "PolyHacks", and hit the ReadEvalPrint button in the control panel. This runs a demo that repeatedly chooses a random pattern and runs it through one cycle. Any click in the graphics window to stop.
-- Some Polygons:
Set outline mode. Select the do loop from the Polygons section of "PolyHacks", and hit the ReadEvalPrint button in the control panel. This runs a demo that is similar to an XDE DMT. Middle click in the graphics window to stop.
-- Some Spirographs:
Get color viewers going, and put the "(BiScrolling) Poly Hack" in the color column. Make sure the colormap actually has interesting colors in it (not just all grays).
Set trace mode.
Select the red, green, and blue example from the Spirographs section of "PolyHacks", middle click in "(BiScrolling) Poly Hack", then left click (now it starts running), then right click (when completed). Try it this one with sweep mode. You might try composing some traditional (two wheeled) spirographs --- there are some relatively trivial examples in "PolyHacks".
Tachys
--like old Tachy:
(list
(OpenPoly invert
(Constant 450 300)
(Liss 300 150 3.125 90 300 150 3.125 00)
(Constant 300 300)
)
(HalveFirst (OpenPoly invert
(Liss 300 150 3.125 90 300 150 3.125 00)
(Sum
(Liss 300 150 3.125 090 300 150 3.125 000)
(Liss 000 075 12.50 270 000 075 12.50 180)
))
)
(OpenPoly invert
(Constant 300 300)
(Liss 300 200 133.5 30 300 200 133.5 00)
)
)
--like new Tachy
(list
(ListPoly false invert
(cons
(Constant 320 320)
(Series
(list
(Liss 320 162 -01 090 320 162 -01 000)
(Liss 000 108 002 270 000 108 002 180)
(Liss 000 072 -04 090 000 072 -04 000)
(Liss 000 048 008 270 000 048 008 180)
(Liss 000 032 -16 090 000 032 -16 000)
)
)
)
)
(OpenPoly invert
(Constant 320 320)
(Liss 320 300 133.5 20 320 300 133.5 00)
)
)
(list
(ListPoly false invert
(Series
(list
(Constant 200 200)
(Liss 000 243 01 090 000 243 01 000)
(Liss 000 162 -2 270 000 162 -2 180)
(Liss 000 108 04 090 000 108 04 000)
(Liss 000 072 -8 270 000 072 -8 180)
(Liss 000 048 17 090 000 048 17 000)
)
)
)
)
(list
(ListPoly false invert
(Series
(list
(Constant 400 400)
(Liss 000 324 01 090 000 324 01 000)
(Liss 000 216 -2 270 000 216 -2 180)
(Liss 000 144 04 090 000 144 04 000)
(Liss 000 096 -8 270 000 096 -8 180)
(Liss 000 064 17 090 000 064 17 000)
)
)
)
)
(list
(ListPoly false invert
(Series
(list
(Constant 200 200)
(Liss 000 243 002 090 000 243 002 000)
(Liss 000 162 -04 270 000 162 -04 180)
(Liss 000 108 008 090 000 108 008 000)
(Liss 000 072 -16 270 000 072 -16 180)
(Liss 000 048 034 090 000 048 034 000)
)
)
)
)
(list
(OpenPoly invert
(Constant 1 1)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
(Liss 0 -.066667 15 90 0 0.000000 15 0)
(Liss 0 0.058824 17 90 0 -.058824 17 0)
(Liss 0 -.052632 19 90 0 0.000000 19 0)
)
)
)
(list
(OpenPoly invert
(Constant 0 0)
(Sum
(Liss 0 1.000000 1 90 0 1.000000 1 0)
(Liss 0 0.333333 3 90 0 0.333333 3 0)
(Liss 0 0.111111 9 90 0 0.111111 9 0)
)
)
)
(list
(OpenPoly invert
(Constant 0 0)
(Sum
(Liss 0 1.000000 1 90 0 1.000000 1 0)
(Liss 0 1.000000 3 90 0 1.000000 3 0)
(Liss 0 1.000000 9 90 0 1.000000 9 0)
)
)
)
(list
(OpenPoly invert
(Sum
(Liss 0 1.000000 1 225 0 1.000000 1 90)
(Liss 0 1.000000 3 225 0 1.000000 3 90)
(Liss 0 1.000000 9 225 0 1.000000 9 90)
)
(Sum
(Liss 0 1.000000 1 90 0 1.000000 1 0)
(Liss 0 1.000000 3 90 0 1.000000 3 0)
(Liss 0 1.000000 9 90 0 1.000000 9 0)
)
)
)
(list
(OpenPoly invert
(Liss 0 1 2 0 0 1 1 90)
(Liss 0 1 1 90 0 1 2 0)
)
)
Sins
(randbox 5)
(do
()
((not (Stop)))
(prog
(SetPolys (randbox 5))
(Run 360)
(pause 2)
)
)
Polygons
(ListPoly true white (StarHack (Choose 3 9) 40))
(do
()
((not (Stop)))
(let
( ( (vla vlab vlb) (StarHackWithBounds (Choose 4 6) 24) ) )
(prog
(SetPolys (ListPoly true white vlab))
(DrawPolys (ListPoly true white vla))
(DrawPolys (ListPoly true white vlb))
(pause 1)
(Run 40)
(pause 2)
)
)
)
Spirographs
(list
(OpenPoly white
(Spiro
(Point 100 100) 5 (list (Wheel 75 0 0)))
(Spiro
(Point 100 100) 5 (list (Wheel 75 0 120)))
(Spiro
(Point 100 100) 5 (list (Wheel 75 0 240)))
)
)
(list
(OpenPoly white
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0) (Wheel 100 -1 0 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 120) (Wheel 100 -1 120 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 240) (Wheel 100 -1 240 0.75))))
)
(list
(OpenPoly white
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 180) (Wheel 100 -1 180 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 10 0 0))) )
(OpenPoly white
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0) (Wheel 100 -1 0 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 10 0 0))) )
)
(list
(OpenPoly white
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0) (Wheel 100 -1 0) (Wheel 75 -1 0 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0) (Wheel 100 -1 0 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0 0.75)))
)
)
(list
(OpenPoly white
(Spiro
(Point 200 200) 5 (list (Wheel 150 0 0) (Wheel 100 -1 0) (Wheel 75 -1 0 0.75)))
(Spiro
(Point 200 200) 5 (list (Wheel 1 0 0)))
)
)
(list
(OpenPoly red
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 0) (Wheel 160 -1 0) (Wheel 120 -1 0 0.8)))
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 0 0.9)))
)
(OpenPoly green
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 120) (Wheel 160 -1 120) (Wheel 120 -1 120 0.8)))
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 120 0.9)))
)
(OpenPoly blue
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 240) (Wheel 160 -1 240) (Wheel 120 -1 240 0.8)))
(Spiro
(Point 245 245) 3 (list (Wheel 240 0 240 0.9)))
)
)
(list
(OpenPoly white
(Spiro
(Point 250 250) 85 (list (Wheel 100 0 0) (Wheel 75 1 0 0.8)))
(Spiro
(Point 250 250) 01 (list (Wheel 100 0 0) (Wheel 75 -1 0 0.8)))
)
)
(list
(OpenPoly white
(Constant 200 200)
(Spiro
(Point 200 200) 1 (list (Wheel 150 0 0) (Wheel 50 -1 0 0.5)))
)
)
(list
(OpenPoly white
(Constant 200 200)
(Spiro
(Point 200 200) 1 (list (Wheel 150 0 0) (Wheel 100 -1 0)))
)
)
(list
(OpenPoly white
(Constant 250 250)
(Spiro
(Point 250 250) 1 (list (Wheel 243 0 0) (Wheel 81 1 0) (Wheel 27 1 0)))
)
)
(list
(OpenPoly white
(Constant 250 250)
(Spiro
(Point 250 250)
1
(list
(Wheel 243 0 0)
(Wheel 081 1 0)
(Wheel 027 1 0)
(Wheel 009 1 0)
(Wheel 003 1 0)
(Wheel 001 1 0)
)
)
)
)
(list
(OpenPoly white
(Constant 250 250)
(Spiro
(Point 250 250)
1
(list
(Wheel 243 0 0)
(Wheel 027 1 0)
(Wheel 003 1 0)
)
)
)
)
Coloring
(setq rot (Coloring (lambda (x) (fromHSV (rem (div x 6.0) 1.0) 1.0 1.0))))
Experimental
Ptolmic Ananlyses
(ListPoly false white (Series (list
(Constant 0 0)
(Liss 0 1.000000 1 90 0 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
(Liss 0 -.066667 15 90 0 0.000000 15 0)
(Liss 0 0.058824 17 90 0 -.058824 17 0)
(Liss 0 -.052632 19 90 0 0.052632 19 0)
)))
(defun PoolCoefs (freq)
(if
(equal 0 (rem freq 2))
(list 0 0 0 0)
(let
(
(inv (div 1.0 freq))
(xsgn (rem (round (quot (minus freq 1) 2)) 2))
(ysgn (quot (minus 3 (rem freq 6)) 2))
)
(list
(if (equal xsgn 0) inv (minus 0 inv))
90
(mult ysgn inv)
0
)
)
)
)
(defun BoxCoefs (freq)
(if
(equal 0 (rem freq 2))
(list 0 0 0 0)
(let
(
(inv (div 1.0 freq))
(xsgn (rem (round (quot (minus freq 1) 2)) 2))
(ysgn (quot (minus 3 (rem freq 6)) 2))
)
(list
(if (equal xsgn 0) inv (minus 0 inv))
90
(if (equal xsgn 0) inv (minus 0 inv))
(minus 90 (mult 90 freq))
)
)
)
)
(FilteredSeries false white (Generate 20 PoolCoefs) 20 30)
(FilteredSeries false white (Generate 10 BoxCoefs) 0 11)
(PoolCoefs 11)
(Generate 19 PoolCoefs)
Random
(list
(OpenPoly white
(Sum
(Bounce 0 100 2 -3 100 100)
(Liss 0 10 72 90 0 10 72 0)
)
(Sum
(Bounce 0 000 2 3 100 100)
(Liss 0 10 72 90 0 10 72 0)
)
)
)
(list
(OpenPoly invert
(Constant 1 1)
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
(Liss 0 -.066667 15 90 0 0.000000 15 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
(Liss 0 -.066667 15 90 0 0.000000 15 0)
(Liss 0 0.058824 17 90 0 -.058824 17 0)
)
(Sum
(Liss 1 1.000000 1 90 1 1.000000 1 0)
(Liss 0 -.333333 3 90 0 0.000000 3 0)
(Liss 0 0.200000 5 90 0 -.200000 5 0)
(Liss 0 -.142857 7 90 0 0.142857 7 0)
(Liss 0 0.111111 9 90 0 0.000000 9 0)
(Liss 0 -.090909 11 90 0 -.090909 11 0)
(Liss 0 0.076923 13 90 0 0.076923 13 0)
(Liss 0 -.066667 15 90 0 0.000000 15 0)
(Liss 0 0.058824 17 90 0 -.058824 17 0)
(Liss 0 -.052632 19 90 0 0.052632 19 0)
)
)
)
(ListPoly false invert (Series (list
(Constant 0 0)
(Liss 0 100 1 00 0 100 1 90)
(Liss 0 050 3 90 0 050 3 00)
) -1.0))
(FilteredSeries false invert
(quote
(
(01 1.000000 90 1.000000 0)
(03 -.333333 90 0.000000 0)
(05 0.200000 90 -.200000 0)
(07 -.142857 90 0.142857 0)
(09 0.111111 90 0.000000 0)
(11 -.090909 90 -.090909 0)
(13 0.076923 90 0.076923 0)
(15 -.066667 90 0.000000 0)
(17 0.058824 90 -.058824 0)
(19 -.052632 90 0.052632 0)
)
)
0 20
)
(PowerSeries false invert 6 (div 1.0 2) -1 180)
(PowerSeries false invert 5 (div 2.0 3) -2 180)
(FilteredPowerSeries false invert 7 (div 2.0 3) -2 180 1)
(PowerSeries false invert 6 (div 3.0 4) -3 180)
(PowerSeries false invert 5 (div 4.0 5) -4 180)
(PowerSeries false invert 2 (div 2.0 3) -0.5 0)
(PowerSeries false invert 5 -0.5 2 0)
(setq tau (div twopi 3))
(setq tau2 (mult tau 2))
(setq z0 256)
(setq z1 (mult z0 (exp (mult tau i))))
(setq z2 (mult z0 (exp (mult tau i 2))))
(setq threePSquared (mult 3 z2))
(setq tritest
(let
(
(t1 (div twopi 3))
(z0 200))
(let
(
(t2 (mult t1 2))
(z1 (mult z0 (exp (mult t1 i))))
(z2 (mult z0 (exp (mult t1 i 2)))))
(PtolAnal
(list
(list 0 z0)
(list t1 z0)
(list t1 z1)
(list t2 z1)
(list t2 z2)
(list twopi z2))))))
(PtolSeries false invert 6 tritest 100.0)
(atest -3)
(MapBothInts ln 1 3)
(setq atest
(let
(
(t0 0)
(t1 pi)
(t2 twopi)
(z0 50)
(z1 -50))
(PtolAnal
(list
(list t0 z0)
(list t1 z0)
(list t1 z1)
(list t2 z1)))))
(setq tritest1 (PtolAnal1
(list
(list 0 1)
(list tau 1)
(list tau r)
(list tau2 r)
(list tau2 r2)
(list twopi r2))))
(setq pts (nth 2 (tritest1 2)))
(tritest 3)
(exact 3)
(rem -4 3)
(setq n 1)
(mult (div i n) (minus 1 r) threeRSquared)
(PtolAnalWork 2 pts)
(defun exact (n)
(mult (div i n twopi) (minus 1 r) (nth (plus 1 (rem n 3)) (list 0 threePSquared 0))))
(defun PtolAnal1
(pts)
(let
((last (nth (length pts) pts)))
(let
((closedpts (cons (list (minus (car last) twopi) (nth 2 last)) pts)))
(lambda (n) (list n closedpts)))))
(circpts 256 4)
(lines 200.0 4 12)
(circpts 64 3)