-- 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[, 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 <<>> <> <<>> <> <<(the scale is multiplied with lambda, and defaulted to lambda (2))>> <> 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 <> 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" <> <> <> <> <<>> <> <> 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]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]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]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]Viewers> % { logpa: ImagerPixelArray.PixelArray; SetRoot: PROC [aisFileName: ROPE, invert: BOOL _ FALSE] = {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]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]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: BOOL _ FALSE] = {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]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]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 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]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]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)