Last modified on Thu Mar 12 09:34:00 PST 1998 by heydon modified on Thu Aug 28 17:36:57 PDT 1997 by leifer modified on Thu Nov 30 13:55:52 PDT 1995 by gnelson This file describes problems, enhancements, and inefficiencies in the current top-level Juno application. It was initially created from the notes on Allan's whiteboard on Tue Mar 30, 1993. BUGS ========================================================================== o When the dragged point cannot track the mouse exactly, the value reported by "JunoUI.DragLoc" trails the drag by one frame. This seems inevitable, since the "draggee" field of a "Drag.T" is not updated until the end of the drag loop. o When a template is instantiated and the current command is subsequently modified, the AST for the template is modified too. We need to make a copy of the template's AST when it is instantiated. o If a template is part of a bundled in module, a compilation error will occur when the template is instantiated if the instantiated command refers to a top-level name of the bundled module. o The drawing's bounding box is not being drawn when "PS.SetBBox" is run incrementally. Applying this tool should re-run the current command from scratch. The proposed solution is to have different subtypes of a "ProcTool": one for incremental point procedures, one for incremental text procedures, and one for non-incremental point procedures. The tool for "PS.SetBBox" would be of the latter variety. o Clicking "PS.Fill" does not erase the red path outline of the filled area. This could be fixed by making "PS.Fill" non-incremental. o The path returned by "PS.CurrentPath" may not correspond to the current path, since the path is represented by a Trestle path, and Trestle's paths have integer coordinates. o When Juno source is unparsed, the program doesn't always get the margin width correct [heydon, ramshaw]. o The "Solve" button should be passive any time it becomes a no-op due to repainting the drawing view (e.g., on repaint, or after a point is adjusted). o "Fold" should normalize the editor. o Normalize isn't good enough; TextPort should center the error. o Marquee too narrow for 8 arguments? Done on Thu Mar 12 09:33:52 PST 1998 by heydon o Sharon reports the following bug. If a Juno.modlist is used, and one of the modules named in it contains errors, Juno will load the offending module as the "current module" at start-up time and high- light the error. However, the name of the offending module will also appear in the module list. Selecting that module causes Juno to crash. The fix is not to add a module to the module list in Juno.CompileModules until *after* it has been successfully compiled. Done on Sun Oct 26 13:59:34 PST 1997 by heydon o Lyle reports that the "Solve" button is not updating the locations of the points in the current command. To see the problem, create two points, add a HOR constraint between them, and then click "Solve". The points are moved, but their hints are not updated. The same test also reveals that the "Run" button has a similar problem! The problem was fixed by changing "Drawing.ExecCurrCmd" to call "Drawing.SourceUntrue" in the event that running the current command via "CurrCmd.Run" caused the current command's hints to be updated. This required changing "CurrCmd.Run" and "CurrCmd.UpdateHints" to return a BOOLEAN indicating if the hints had been updated or not. Done on Sun Oct 26 11:49:19 PST 1997 by heydon o Fixed bug in "CurrCmd.MovePoint1" in which a point value could be created that contained negative literals. The procedure now calls "JunoASTUtils.NewNumber" to create a number wrapped in a "JunoAST.UMinus" node if the number is negative. Done on Thu Jul 24 13:29:04 PDT 1997 by leifer and heydon o Changed JunoPt.ToASTPair to call JunoASTUtils.NewPoint so that literal pairs with negated values get allocated with JunoAST.UMinus nodes. Done on Sat Mar 1 01:21:44 PST 1997 by heydon o Changing the code font does not change the font of any module views that are already open. Moreover, changes to the code font are never applied to *private* module views. The latter was easy to fix (a line simply had to be moved). The former required adding code to "Juno.DoConfigure" to walk over all of the modules to see which ones had help windows and calling "JunoConfig.SetFonts" and "VBT.Mark" on each one. Done on Thu Jan 30 11:36:06 PST 1997 by heydon o Due to the recent change that makes the test for a total command more strict, one of the procedure bodies compiled by the "Fold As Animation..." command had to be bracketed in IF..FI. Done on Tue Jan 28 14:55:15 PST 1997 by heydon o Due to the recent change that makes the test for a total command more strict, the command compiled for the drag command had to be bracketed in IF..FI to make it total. Done on Mon Jan 27 19:16:01 PST 1997 by heydon o Made changes to many bundled modules to accomodate the recent change to the code that checks that a procedure body is total. Done on Tue Oct 1 15:43:03 PDT 1996 by heydon o Renamed "PenStroke" module to "Pen", hid its "Line" and "Curve" procedures, and renamed "CurrentPath" -> "Stroke". Replaced "MoveTo", "LineTo", and "CurveTo" procedures in the "Dash" module by a single "Stroke" procedure. Now, the client should use the procedures in the PS module to construct a path, and the "Stroke" procedure in the "Pen" or "Dash" module to stroke it. Done on Tue Jul 16 14:15:30 PDT 1996 by heydon o In some cases, when one animation is played after another, the last frame of the first animation becomes part of the background of the second. The fix is to call "DblBufferVBT.ClearSaved" in "Drawing.ExecCurrCmd" just before running the current command. Done on Thu Apr 18 11:50:46 PDT 1996 by heydon o There was a bug introduced in the "Drag" and "Freeze" shortcuts. The shortcuts were not working if no tool was selected. Done on Mon Apr 15 09:47:58 PDT 1996 by heydon o The Adjust tool would erase paint wherever the adjusted point label was moved. Now that we have DblBufferVBT.Save/Restore, that could be avoided by saving the drawing on the tool's "pre" method and restoring it on the "during" method. Done on Sun Apr 14 18:44:50 PDT 1996 by heydon o Now that we are no longer re-compiling and running the current command after a drag completes, any highlights produced during the drag are not taken down. This was easily fixed by changing "Drag.PostDrag" to simulate "Drag.DuringDrag" once so the drag loop would execute one more time. Done on Sun Apr 14 18:43:15 PDT 1996 by heydon o If an error occurs during a drag, no error message is displayed (one used to be displayed by re-compiling and running the current command after the drag). This was fixed by displaying an error in "Drag.ApplyDrag" if the compiled drag command did not complete successfully. Done on Sun Apr 14 18:39:52 PDT 1996 by heydon o At the end of a drag, the current command was being recompiled and re-run. This was a problem, since if the point being dragged was not frozen, it may have been moved on the final running of the current command. The code to re-run the current command is not necessary; it was added for Lyle a while ago to take down highlighting at the end of the drag. Done on Mon Feb 19 15:47:01 PST 1996 by heydon o Fixed the "Print" command to use "/usr/bin/lpr" and to use the current module name as the name to print on the header page. Done on Mon Feb 19 15:41:46 PST 1996 by heydon o Fixed the "Preview" command to write its output to a temporary file instead of using a pipe. This means that the previewer (psview(1)) does not have to run in stream mode. Also added code to run the previewer on the same display as the one specified by the "-display" argument to Juno (if any). Done on Wed Jan 3 20:11:33 PST 1996 by heydon o If the user specifies a variable that is not in the current command as an argument to the Fold procedure, it is silently included in the signature. Juno should probably check for that mistake and report an error. Done on Tue Jan 2 18:10:24 PST 1996 by heydon o The saved buffer of the drawing's DblBufferVBT needs to be cleared at the start of dragging. Done on Tue Jan 2 17:34:29 PST 1996 by heydon o "Preview" will crash Juno if there are too many processes currently running, and the attempt to fork another one fails. Rather than declaring "OSError.E" fatal, we should handle it. Done on Thu Dec 21 16:26:28 PST 1995 by heydon o Greg's code for flagging errors in bundled modules and modules listed in the user's "Juno.modlist" handled parse errors okay, but not compilation errors. I fixed the code not to crash in the latter case. Done on Fri Jul 7 19:17:27 PDT 1995 by heydon o Juno was crashing with stack overflows [rustan, davidm]. The problem seems to be that a library under Juno that had been bumping the default stack size no longer does so. I changed the code in "Juno.m3" to set the minimum default stack size to 6000 Word.T's, which is double the initial value. Done on Wed Jun 21 22:40:02 PDT 1995 by heydon o Juno was crashing if the parameter value in a "Param" UI declaration was an unknown (qualified) identifier [gnelson]. Done on Tue Jun 20 22:30:28 PDT 1995 by heydon o Fixed bug in "CurrCmd.m3" in which hints that were expressed as functions of other values were not being updated. The problem was that the absolute value of the point hadn't changed. Hence, "cc.changedVal[]" was FALSE for that point. However, even if a point's value hasn't changed, its hint must be updated it that hint is functional in values that have changed. Done on Tue Jun 20 16:27:26 PDT 1995 by heydon o Fixed bug in "Juno.DoPushCurrCmdWork": Greg made the type of one of the arguments to "Juno.DoFold" narrower, but didn't change the use of that procedure to use a narrower type; the implicit NARROW was failing on a "Push Current Command" operation. Done on Mon Jun 19 09:20:32 PDT 1995 by heydon o Changed form for "Help..." windows so they could be resized. Done on Fri Jun 2 16:44:30 PDT 1995 by heydon o Fixed bug in implementation of "PS.CurrentPath" to handle a new precondition on "RTVal.FromPair" requiring both its arguments to be non-NIL. Done on Thu May 11 15:46:25 PDT 1995 by heydon o There was a bug in "CurrCmd.FillCache": when the variable array was too small, it sometimes was not grown large enough. An occurrence of "MIN" needed to be changed to "MAX". Done on Thu Mar 23 11:49:30 PST 1995 by heydon o Fixed bug in "Rect.OnC" constraint in which an existential variable was not getting an appropriate hint. Done on Tue Mar 21 12:07:06 PST 1995 by heydon o Fixed bug in "Ellipse.OnEcc" in which an unnecessary existential variable was introduced that was causing the solver to converge on sub-optimal solutions. Done on Thu Jan 19 15:40:07 PST 1995 by heydon o When loading a file, the current command should be set to "SKIP" if compiling the module failed, or if there was no command to pop from that module. The latter was already done, but not the former. [ramshaw] Done on Thu Dec 22 16:01:53 PST 1994 by heydon o The bounding box computed for a string rendered on the screen is not as tight as possible. This is because the "VBT.BoundingBox" procedure is not exact. The fix is to implement new versions of "VBT.BoundingBox" and "ScrnFont.BoundingBox" that compute the tightest possible bounding box. Currently, the latter procedure not only does not compute the vertical extent of the bounding box (instead, it uses the vertical extent of the bounding box of the entire font), but it also computes the horizontal extent incorrectly by possibly including extra space before the first character and after the last character (it should only use the printing width to move the reference point). Done on Wed Dec 21 13:22:29 PST 1994 by heydon o The X versions of the PostScript fonts use the PostScript ISOLatin1Encoding, but the metric files are defined with the PostScript StandardEncoding. To fix this, we must define the various encodings in files for the PklFonts program to read, and then change the PostScript code generated by Juno to replace the encoding for a font with the ISOLatin1Encoding the first time each font is selected. Done on Fri Dec 16 13:04:03 PST 1994 by heydon o When the program first starts up, creating a point and then applying a text tool to it causes the tool to immediately terminate. The problem is that the Juno module acquires the keyboard focus without setting the "hasFocus" boolean in the drawing, so the drawing acquires the focus even though it already has it. This causes it to be notified that it has just lost the focus, which causes the text tool to complete. The fix is to simply remove all cases in Juno.m3 where the keyboard focus is being acquired there. [heydon] Done on Thu Dec 15 18:20:54 PST 1994 by heydon o When writing PostScript, the PS.StringBBox procedure fails if its argument contains any unmapped characters. Should it? No, we map all such characters to the space character, since that is how the ".notdef" character is defined for Adobe PostScript fonts. Done on Thu Dec 15 18:19:57 PST 1994 by heydon o With the new centered coordinate system, the run-time error message displayed in PostScript output is not being located correctly. Done on Wed Nov 23 14:33:33 PST 1994 by heydon o The "Run" button has strange effects when typing the text of a text tool [heydon]. Done on Wed Nov 23 14:33:17 PST 1994 by heydon o If typing the text argument of a text tool, the tool should be applied when the keyboard focus is lost. Done on Thu Nov 17 11:39:50 PST 1994 by heydon o "Arc.SmallArc" is trapping with guard failures [najork]. Done on Thu Nov 17 11:39:39 PST 1994 by heydon o The hints for non-point values are being updated even if there was already a non-literal hint supplied [heydon]. Done on Mon Nov 14 14:45:55 PST 1994 by heydon o The test for when to allow mouse events in the source window was wrong. However, it was not noticed because it only fails if continuous unparsing is turned off. The user should be given an error message if the source is out of date *and* if the current AST is up-to-date (which can only happen if continuous unparsing is turned off). Moreover, this test should be applied only to keystrokes, not to mouse events. [heydon] Done on Mon Nov 14 13:00:21 PST 1994 by heydon o "Fold" implicitly re-compiled the current module and current command. However, if the current module had changed, any newly declared UI tools were not added to the toolbox on this implicit recompilation. [heydon] Done on Sat Nov 12 19:25:06 PST 1994 by heydon o The change on 8-Sept-94 to the way IMPORT is handled introduced a bug: if the current module contains any IMPORT declarations and a tool from some other module not named in the imports is applied, the program crashes (there is a compilation error compiling the incremental command, and such compilation errors are asserted to be impossible). There are three possible fixes. One is to compile the current command in a scope that includes all the bundled modules, independent of any IMPORT lines in the current command; then, the compilation error will occur when/if the current command is folded or pushed. The second solution is to handle the compilation error by highlighting the error and displaying an error message. The third solution is to somehow update the IMPORT list in the current module to include the new module name. For now, we do option 1. However, the folded/pushed version of the current command is not compiled under the restricted module scope at fold/push time, so the compilation error for such commands is delayed until the current module is rebuilt. Done on Sat Nov 12 18:23:26 PST 1994 by heydon o There are bugs with text tools, especially when using text tools with a single (text) argument. When using such a tool, if the user selects another tool, the text tool is applied as it should be, but it then seems to be applied again with the argument "|". If the newly selected tool is a tool with no arguments or a set tool (hence, not requiring the user to supply any arguments directly), an application of the text tool to the argument "|" also appears in the current command. [heydon] Done on Sat Nov 12 18:18:47 PST 1994 by heydon o The "setup" method associated with set tools is never being called [heydon]. This bug never manifested itself because a set tool's default "setup" method is a no-op. Done on Wed Nov 9 13:51:28 PST 1994 by heydon o Juno is crashing with an "exception not in raises list" failure on the exception JunoCompileErr.Error [najork]. This is due to a bug in the Modula-3 compiler used to build Juno-2 v1.07c in which exception scopes were not being handled correctly in the face of nested procedures. The bug seems to have been fixed in the latest version of the compiler. Done on Mon Nov 7 14:49:48 PST 1994 by heydon o If the current command contains two projections at top-level, one directly nested inside the other, the program crashes on "Fold" if any of the variables in the inner projection is referred to in the command [najork]. The same bug also manifests itself if the current command has this form and the users tries to drag a point [heydon]. The fix was to change the code in CurrCmd so that if multiple projections are nested inside each other at top-level in the current command, the command is considered to have an empty constraint and a body starting at the second projection. Done on Tue Nov 1 18:35:49 PST 1994 by heydon o The change on 18-Oct-94 updated pair-valued hints too often. The hint should only be updated if it is a literal. For example, the hint should not be updated if it is a function. Done on Tue Oct 18 17:00:23 PDT 1994 by heydon o If there was a hint for a current command variable, and the hint was neither a point nor a REL expression, and if the body of the current command set the variable to be a pair of reals (i.e., a point), the hint for the variable was not being updated. Done on Thu Sep 22 12:38:17 PDT 1994 by heydon o The values of "PS.NonZeroWinding" and "PS.OddWinding" were reversed in the bundled "PS" Juno module [rustan, heydon]. Done on Sun Sep 11 16:37:13 PDT 1994 by heydon o The code that updates the hints incrementally at the end of running the current command has a bug: if the user types in a new value for the hint and clicks "Run", but the command changes the value back to the exact same value it had from the previous run, the new value of the variable is not displayed. When the current command is set to a new value through "CurrCmd.Change", the value caches must be reset, since the invariant that the unparsed values match the cache values is no longer guaranteed to hold. Done on Thu Sep 8 12:45:10 PDT 1994 by heydon o The implementation does not check that names defined in the module and imported names are distinct. They should also all be distinct from the name of the module itself. Done on Thu Sep 8 12:44:45 PDT 1994 by heydon o The implementation should report an error if CLOSE and APPLY are redefined. Done on Thu Sep 8 09:18:30 PDT 1994 by heydon o If the "MODULE" declaration is not first in the module, the error that gets reported is "Only one MODULE header is allowed". Instead, it should be something like, "The MODULE header may only be preceded by comments". Done on Thu Aug 4 10:29:09 PDT 1994 by heydon o Even though the default PS.LineWidth is 1.0, "PSImpl" was writing out the default as 0.0 in PostScript output. I changed the PostScript header output so it would print the actual default values. I also changed "defaultColor" from a "VAR (* CONST *)" to a "CONST" named "DefaultColor". Done on Fri Jul 29 18:52:23 PDT 1994 by heydon o If the current command's constraint contains a global variable, Juno crashes if the current command is folded as a predicate (since by definition, predicates may not contain references to global variables, whereas constraints in general may). The fix is to relax the definition of "pure" in the language definition to allow references to global variables. Done on Wed Jul 27 19:13:28 PDT 1994 by heydon o Juno crashes at startup if the startup file does not exist in the current directory and the current directory is unwritable, or if the named startup file is a directory. Done on Thu Jul 21 17:25:49 PDT 1994 by heydon o The keyboard focus is not being acquired by the dialogue boxes for opening and saving files. The problem seems to be that when the top-level window is made dormant, the Trestle timestamp becomes stale. The actual problem was a bug in FormsVBT [heydon]. Done on Thu Jul 12 17:27:40 PDT 1994 by heydon o Juno crashes if a "UI Param" declaration's value is a QId that does not name a CONST, VAR, or PROC [heydon]. Done on Fri Jul 1 17:48:43 PDT 1994 by heydon o If a compilation error occurs in the module editor, it is not being highlighted on *subsequent* compilations (nor is an error message displayed). Done on Thu Jun 23 11:22:05 PDT 1994 by heydon o If the user kills the previewer process while Juno is still generating PostScript output, the external procedures are not being restored correctly, so subsequent attempts to draw to the screen cause Juno to crash. Done on Tue Jun 21 14:27:17 PDT 1994 by heydon o The grid points aren't erased when the grid is turned off. Done on Mon Jun 20 15:06:58 PDT 1994 by heydon o Juno crashes at startup with "TrestleComm.Failure" if an X connection cannot be established, for example, if one is running Juno remotely and has not xhost'ed the remote machine. Done on Thu Jun 16 17:09:10 PDT 1994 by heydon o Juno crashes with an assertion failure if the user has clicked in a cycle of near constraints with the REL tool and tries dragging. For example, click in two points "a" and "b", select the REL tool, then click "a", "b", "a" and try dragging [detlefs]. The solution is to highlight the compilation error in the source window instead of pretty-printing the drag command and crashing. Done on Fri May 27 12:30:36 PDT 1994 by heydon o When using a text tool, the keyboard focus is not regained if it is lost (for example, by clicking in the current command editor, or moving the cursor out of the Juno window). Done on Fri May 27 12:30:07 PDT 1994 by heydon o The filebrowsers sometimes fail when they shouldn't, and when they do fail, the error message is sometimes displayed the *next* time they are used. This only seems to happen when the user types in directory/file names. The problem is that the "OK" buttons in the dialogues could cause the filebrowser callbacks to be invoked with a strange value, so get rid of the "OK" buttons altogether. Done on Wed Apr 20 16:46:01 PDT 1994 by heydon o If the module view has height 0 (i.e., is an empty window), declarations unparsed into it as a result of folding have a fixed, small width. The width of the current command window should be used instead. Note: the current command view does not exhibit this problem. Why not? Does the current command get unparsed whenever the size of the current command view changes, even if only its height is changed? [gnelson, heydon] Done on Thu Apr 21 10:04:54 PDT 1994 by heydon o If the user has turned on the grid, and then deletes either of the points defining the grid (for example, by editing the current command, folding it, etc.), the grid tool should automatically change to "Grid On", i.e., the grid should be turned off. Done on Tue Apr 19 17:03:52 PDT 1994 by heydon o When the middle divider bar is dragged to the left, it doesn't end up as far left as where you dragged it [heydon]. This was a compiler bug: Bill was not compiling LAST(INTEGER) correctly. This problem was probably actually "fixed" a while ago with a release of a fixed compiler. Done on Tue Apr 12 19:15:50 PDT 1994 by heydon o Juno crashes when previewing if the previewer is killed from the shell while the PostScript program is still being sent to the previewer down the pipe (you have to be displaying a complicated PostScript program to have time to trigger this bug). This causes a "Wr.Failure" exception, which is uncaught [heydon]. The fix was to catch the exception and report it as a "Failed external procedure" run-time error. Done on Wed Apr 6 12:15:12 PDT 1994 by heydon o The first frame during dragging is not being painted over with white, so it is possible to see the first two frames at once. To see this effect, choose the "Drag" tool, and press the mouse button a substantial distance from any of the existing points. Then, move the mouse 1 pixel. The bug was that "damaged" was not being set to "Rect.Full" the first time "Drag.AnimateProc" was called. Done on Tue Mar 29 15:41:46 PST 1994 by heydon o Resizing the editor window causes its contents to be recompiled when the "Make" button is pressed, even though its parse trees have not changed. Done on Tue Mar 29 15:30:45 PST 1994 by heydon o If I perform the following steps: first, change the signature (say the number of IN parameters) of a predicate in the module view that is currently called in the current command's , and then "Make", I get a "Wrong number of IN's" error message as I should. However, there are two problems: 1) the "Make" button is grayed out, as if the compilation were successful (which it was not), and 2) the compilation error is not underlined. Note that if I instead change the number of IN parameters in the current command where the predicate is *used*, problems (1) and (2) don't appear. Done on Tue Mar 29 13:45:02 PST 1994 by heydon o TextPort.Select doesn't always seem to work to highlight error. The problem was that Andrew Myers was passing 0 for the time stamp. Also, we needed to make the module view acquire the keyboard focus in "JunoError.P". Done on Sun Feb 20 19:16:35 PST 1994 by heydon o If the current module is changed from being anonymous to being named, the current command scope is not being reset [heydon]. The fix was to always treat the current module as anonymous. This means that folded/unfolded pred/func/proc entities are always added to/removed from the current command scope. Done on Sun Feb 20 18:56:27 PST 1994 by heydon o Previous changes seem to have introduced the following bug: When the make button is clicked and the current command re-run, the current command is not being updated to include the new values for the variables after a solve. Done on Sun Feb 20 18:56:19 PST 1994 by heydon o When Folding (Automatic), the new pred/func/proc is not being added to the current command scope, so if the user attempts to apply a proc tool with the dummy argument name (i.e., without explicitly changing the name and clicking Make), the application of the tool produces an "undeclared identifier" compilation errors. Compilation errors are fatal when incrementally extending the current command [mhb]. A related problem is that identifiers are not being removed from the current command scope when popping the current command [heydon]. Done on Fri Feb 18 19:18:04 PST 1994 by heydon o It's possible to invoke a private pred/func/proc defined in the current (anonymous) module from the current command [heydon]. Done on Fri Feb 18 18:43:50 PST 1994 by heydon o "Drawing.ApplyProc" requires that the root AST is up-to-date. This condition is not always met when applying a tool with 0 arguments, so Juno is crashing in such situations with an ASSERT fault [mhb]. Done on Fri Feb 18 09:10:00 PST 1994 by heydon o Juno crashes if the current command has a run-time error while redirecting its output as PostScript to a file or pipe [mhb]. (See "PipePostScriptToCmd" in "Juno.m3".) The fix was to generate appropriate PostScript code to display the run-time error message in the PostScript output. Done on Tue Feb 15 17:04:44 PST 1994 by heydon o Compiling the drag command fails if the body of the current command is not a total command [mhb]. Done on Mon Jan 17 15:49:26 PST 1994 by heydon o The point returned by "PS.CurrentPoint" is integer-valued, so when executing the statement "PS.MoveTo(a); b := PS.CurrentPoint()", it is quite likely that "a # b". Done on Fri Jan 7 18:18:30 PST 1994 by heydon o Fold is broken if the current command contains a parse or compilation error as a result of the user typing in the current command editor. An error message is displayed, but the AST that gets folded is the one corresponding to the most recently successfully parsed and compiled current command. Hence, the user's editing is lost. Done on Mon Nov 15 13:01:03 PST 1993 by heydon o "CurrCmd.m3" was not filling in the "bp" field of newly-created "JunoAST.T" nodes, so the program was crashing with a NIL "bp" field on some compilation errors. Done on Mon Nov 8 18:00:54 PST 1993 by heydon o Dragging a frozen point sometimes fails when the mouse button is released. This is probably due to using finite-precision numbers. There are two possible problems: either our EQUAL bytecode does not allow enough play, or after dragging, we should solve for the point as if it were unfrozen (even if the point is frozen). Come to think of it, why do we have to re-run the current command at all after dragging? Fix: We don't even need to re-run the current command at the end of dragging; just add the final drawing annotations instead. Done on Fri Oct 22 11:29:15 PDT 1993 by heydon o The comment for "PS.Moveto" does not specify that only the last "Moveto" in a sequence of "Moveto"'s takes effect [heydon]. Done on Tue Oct 19 15:08:15 PDT 1993 by heydon o After Dragging, Juno runs the current command one last time. If the dragged point was unhinted, then this can move the dragged point, since during dragging, we first try solving the constraints with the dragged point artificially frozen. So, after dragging, we should try running the current command with the dragged point artificially frozen, just like Adjust does. To see this behavior, use Lyle's OnCurve predicate, and make sure the dragged Bezier point is unfrozen [heydon]. Done on Thu Oct 14 17:20:25 PDT 1993 by heydon o "PS.ShowPage" should output page number for next new page [bourdoncle]. We have to dump the current PS state at the start of each page, since the pages can be executed in any order. Done on Thu Oct 14 17:19:56 PDT 1993 by heydon o Backspacing past the beginning of a text argument crashes Juno [mhb]. Done on Thu Oct 14 11:52:16 PDT 1993 by heydon o The "CurrCmd" interface is inconsistent and buggy. The following bugs are almost entirely due to the fact that the restrictions on the current command are not well defined. - Dragging can crash when the drag command is compiled if the current command does not adhere to the restrictions on current commands. For example, if the current command has the form "VAR x IN VAR y IN y := x END END", the inner "VAR" is not being compiled into the drag command, so the assignment causes a compilation error [ramshaw]. - "CurrCmd.AddConstraint" is buggy in the case that the has the form "TRUE OR ...", since it naively conjoins the new constraint onto the current [heydon]. - When folding a procedure, if the current command's is TRUE, then there is no reason to add a guard in the folded procedure. - "CurrCmd" is not very robust: it can crash if the current command does not have a particular form. The fix was to remove the restrictions on the current command. The current command is now allowed to be an arbitrary Juno command. Done on Mon Oct 11 11:52:47 PDT 1993 by heydon o The comment for "Text.GetChar" should say that it returns an integer, not a string of length 1 [gnelson]. Done on Sun Oct 10 17:12:51 PDT 1993 by heydon o Dragging deadlocks when a run-time error occurs while dragging [ramshaw, heydon]. Done on Tue Oct 5 10:08:45 PDT 1993 by heydon o The Juno machine crashes in random places while dragging with an over-constrained CurrCmd [jdd, hania]. The problem was that at the very end of the Drag, the PostDrag method was not waiting for the other thread to finish running the compiled Juno command. Done on Thu Sep 30 09:27:56 PDT 1993 by heydon o The "Make" button is not always deactivated initially. There seems to be some sort of a race condition when Juno starts up. Also, "Untitled.juno" is not always unparsed to the correct width at start-up. Done on Wed Sep 15 15:35:07 PDT 1993 by heydon o Compiler is crashing because not all "JunoAST.T" nodes created by the application have their backpointers initialized to "JunoAST.End". Done on Tue Sep 7 20:14:08 PDT 1993 by heydon o Current tool is deselected if it adds a constraint to the current command (thereby activating the "Make" button). Done on Wed Sep 1 09:51:36 PDT 1993 by heydon o XOR'ing of crosses is broken in drawing view. Done on Wed Sep 1 09:50:22 PDT 1993 by heydon o Drag.RunDeltaCmd currently asserts that the computation ended with a "HALT" error. But if some other kind of run-time error occurs while dragging, we should report it instead of crashing. The current fix is to ignore the trap code result while dragging. Done on Fri Aug 20 20:57:13 PDT 1993 by heydon o The PS and Text module implementations need to be (Modula-3) NIL-safe. Done on Thu Jul 8 00:21:53 PDT 1993 by heydon o Juno crashes on a VAR declaration without an initializer. Pass3 in JunoBuild is not checking if an initializer was supplied or not. We should actually initialize uninitialized variables to NIL. Done on Wed Jul 7 23:39:09 PDT 1993 by heydon o When generating PostScript, the third argument to the "curveto" command is always the same as the second argument. Easily fixed. Done on Tue Jun 22 14:36:35 PDT 1993 by heydon o When writing PostScript code, strings need escapes inserted in non-printing characters and in the special characters '(', ')', and '\'. Done on Tue Jun 22 14:35:45 PDT 1993 by heydon o The X model of stroking degenerate paths does not match the PostScript model. Namely, a MoveTo that is not followed by a LineTo or CurveTo or Close should not produce any ink when the path is stroked. Done on Tue Jun 15 18:35:32 PDT 1993 by heydon o Andrew's scheme of appending "ABORT" to the current command breaks if the user's current command contains "ABORT". We need a way of laying down a unique machine instruction that traps and can be recognized from the trap type (perhaps by adding another error trap?). Done on Tue Jun 15 18:35:14 PDT 1993 by heydon o Opening a module causes the name of the current file name to be highlighted in red. Done on Fri May 21 12:25:48 PDT 1993 by heydon o Editor windows have funny shapes when switching from one view to another. Done on Fri Apr 9 18:38:46 PDT 1993 by heydon o The Drag tool currently allows the user to drag the point to a location where the guard fails. This should not be possible. Done on Tue Mar 30 11:30:35 PST 1993 by heydon (actually done a while ago) o Program crashes on start-up if Untitled.juno contains errors. The window system has problems popping up the error window. TO DO ========================================================================= o Fork threads for "DoLoadFileWork", "DoSaveWork", "DoSaveAsWork", "DoModuleWork", "DoFoldDialogueWork", "DoPushCurrCmdWork", and "DoPopCurrCmdWork" in the "Juno" module. o Fork a separate thread to generate PostScript so the menu will pop down immediately. This requires making the background dormant before forking the thread, waiting for the thread to finish, and then making the background active again. The same technique should be used for the "Make", "PushCurrCmd", "PopCurrCmd", and "SavePSAs" commands. This code was all written at one point, but we had some deadlocks, so it was removed. We will have to do more thorough locking-level checks before adding it again. o Add an option to the "Labels" menu (which should probably be renamed) to show only those points with absolute hints [najork]. o Make the built-in tools part of a fake module with a "Help..." menu option. o Add REL3 to the language and UI? Add REL1 to the language? o Add a way to interrupt infinite loops. Perhaps a "Stop" button in the UI? o Make the "Load", "Save As...", and "Save PostScript As..." dialogues all have the same directory state. o Make the filebrowsers understand "~" in filenames. o Add way to select a group of points and adjust them in the drawing view. o Provide gesture for "grouping" objects into a single procedure? o Implement "Unfold": If the current command is a call to a procedure or predicate only, then unfolding inlines the procedure or predicate body, and sets the "Refold" name to the name of the procedure or predicate deleted from the module view. There should also be a new "Refold " menu item whenever a procedure has been unfolded. This menu item is disabled after folding or refolding. Perhaps the name "Automatic" should change to something like "New" (or even "New PRED" or "New PROC" as the case may be)? [heydon, gnelson]. o Add support for "IMPORTS". This requires building a new kind of scope that looks up identifiers by searching the file system. The system must provide support to prevent cyclic imports. o When a new tool is selected, unparse the signature and comment for the tool in a special window. o Make "TRUE OR ..." work as a UI gesture, and in the CurrCmd interface (see CurrCmd.AddConstraint). This will also require changes to the compiler, since "OR" is no longer recognized in constraints. o Allow folding as a predicate or function in the "Fold..." dialogue? o Add a "Merge Point" tool for merging two top-level points. Applying this tool to the two points "a" and "b" would remove the declaration for "b" in the current command, and replace all occurrences of "b" by "a" in the current command. o Provide gestures for entering arguments other than points. Possibilities include: pairs, lists, nested function / functional-procedure calls, scalers. Anything else? o Add means for displaying/hiding marquee? o Read-eval-print loop available on run-time errors. Done on Mon Dec 15 11:10:22 PST 1997 by heydon o Changed ScrnFontExtras.TightBoundingBox to remove dependence on the TextF interface. Done on Mon Dec 15 10:44:18 PST 1997 by heydon o Removed three unnecessary ELSE clauses in TYPECASE statements in ToolBox.m3. These were pointed out by Bill's Critical Mass compiler when he built Juno. Done on Thu Aug 28 17:37:36 PDT 1997 by heydon and leifer o Added Reload and Clear All buttons to the file menu. Done on Mon Jun 16 17:32:35 PDT 1997 by heydon o Reorganized code so XParam procedures for parsing the "-display" and "-geometry" arguments are now called from within "JunoWM.Install". Done on Tue Apr 29 17:40:33 PDT 1997 by heydon o Changed the implementation of "Fold As Animation..." so that the animation duration can be easily changed. Done on Tue Apr 15 11:19:12 PDT 1997 by heydon o Changed Digital logo in "About" box so it is the proper Digital burgandy color. Done on Wed Mar 19 11:52:25 PST 1997 by heydon o Fixed bugs in "Rect.East" and "Rect.West" procedures. Added new "Rect.FromCenterCorner" procedure. Done on Sat Mar 1 00:53:14 PST 1997 by heydon o Change unparsing so blank lines are not inserted between consecutive "UI" declarations. Done on Sat Mar 1 00:15:12 PST 1997 by heydon o Added new "Print" module. Done on Mon Jan 27 19:16:55 PST 1997 by heydon o Changed UI to print names of modules to the start-up screen as they are compiled. Done on Wed Nov 27 17:15:22 PST 1996 by heydon o Added "X" and "Y" to "Rel" module. Also made implementation of "Rel.InvX" and "Rel.InvY" slightly more efficient. Done on Fri Nov 22 17:16:44 PST 1996 by heydon o Added "VerSym", "HorSym", and "LineSym" to the "Geometry" module. Done on Tue Oct 1 15:42:50 PDT 1996 by heydon o Exposed more functionality in the Arrow module, such as a FUNC for returning the point where the base of an arrowhead starts. Done on Sat Sep 21 15:47:44 PDT 1996 by heydon o Added procedures "DrawSemi" and "DrawSemiCC" to the "Ellipse" module. Done on Tue Apr 16 16:49:46 PDT 1996 by heydon o Added short-cuts for "Drag" (middle mouse button) and "Freeze" (right mouse button). These shortcuts do not apply if the user is in the middle of using a tool. Done on Mon Apr 15 13:42:50 PDT 1996 by heydon o Added horizontal and vertical dragging to the Drag and Adjust tools. Done on Sun Apr 14 18:45:28 PDT 1996 by heydon o Added built-in "Random" module at Rustan Leino's request. Done on Fri Mar 29 14:07:29 PST 1996 by heydon o Add support for configuration files. At this point, all changes do not take effect immediately, as would be ideal; reshaping some of the windows is necessary. Done on Thu Jan 11 18:30:19 PST 1996 by heydon and gnelson o Break text-tool arguments at newline characters so long arguments will be visible when unparsed. Done on Wed Jan 3 20:14:54 PST 1996 by heydon and gnelson o Design and implement a more efficient scheme for permanent ink during animations. Done on Tue Jan 2 13:34:29 PST 1996 by heydon o Incorporated new "DblBufferVBT" save/restore functionality: changed dragging code to use new "DblBuffer.Save/Restore" instead of "DblBuffer.GetDamaged/SetDamaged"; added "PS.SavePage" and "PS.RestorePage"; changed "Anim.Play" to call "PS.RestorePage" instead of "PS.Reset". Done on Thu Dec 28 16:55:29 PST 1995 by heydon o Implemented "Fold As Animation..." Done on Tue Dec 19 13:00:44 PST 1995 by heydon o Added "FromCorners" and "Inset" procedures to bundled-in "Rect" module. Done on Sun Dec 17 13:00:24 PST 1995 by heydon o Added support to "PSImpl" for rendering pages in landscape orientation, and added "-landscape" and "-portrait" switches to the application for specifying the orientation. Eventually, it would be better if the page size / orientation could be saved and restored on a per-file basis. Done on Fri Dec 15 10:44:06 PST 1995 by heydon o Bundled "CharSet" and "Xform2" modules into the application. Done on 30 Nov 95 by gnelson o Crash recovery Done on 30 Nov 95 by gnelson o Given the new "Juno.modlist" mechanism, it would be nice if the program did not crash while compiling such modules. Instead, it should display a parser/compiler error to Stdio.stderr. This may require fixes to two distinct parts of the code: one to detect parse errors, and another to detect compilation errors. Done on Mon Jul 3 12:49:33 PDT 1995 by heydon o Added simple "Square.juno" module for drawing arbitrarily-oriented squares. Done on Sun Jul 2 12:50:11 PDT 1995 by heydon o Added Rustan Leino's contributions to the "Bezier" and "Path" modules. As part of the coding for the new "Path" routines, I generalized the "BST.Find" procedure to take a user-supplied comparison function (as a closure). Done on Tue Jun 27 14:22:48 PDT 1995 by heydon o Changed definition of "Triangle.Area" to be more robust. Done on Sun Jun 25 15:41:12 PDT 1995 by heydon o Added notion of "line-breaking depth" to the "Unparse" module. Done on Wed Jun 21 17:29:51 PDT 1995 by heydon o Added "Normalize" and "WarpTime" procedures to "Anim" module. Done on Wed Jun 21 17:14:41 PDT 1995 by heydon o Added "Path" and "Curve" built-in modules. Done on Mon Jun 19 09:10:55 PDT 1995 by heydon o Changed name of bundled in "Juno.juno" module to "JunoUI.juno". Moved "PS._ANIMATE" procedure from "PSImpl.m3" to "JunoUIImpl.m3", and changed its name to "JunoUI._DRAG". Done on Fri Jun 16 18:07:20 PDT 1995 by heydon o Added "Line" and "CurrentPath" procedures to "PenStroke" module. Done sometime before Fri Jun 16 1995 by gnelson o Added Rel1 to the UI. Done sometime before Fri Jun 16 1995 by gnelson o Added templates. Done sometime before Fri Jun 16 1995 by gnelson o Added ability to specify arguments to folded procedures/predicates in the fold dialogue. Done sometime before Fri Jun 16 1995 by gnelson o Fixed current module window so it doesn't always scroll to the top of the file. Done on Tue May 2 15:21:46 PDT 1995 by heydon o Added "Reverse" and "Repeat" procedures to the "Anim" module. Done on Tue Feb 21 12:04:47 PST 1995 by heydon o Added new "BST" module. Done on Tue Feb 21 12:04:21 PST 1995 by heydon o Made changes to the "List" module: The "Size" procedure was renamed "Length"; added new "Prefix", "Suffix", and "SuffixFrom" procedures. Updated other modules that used the "Size" procedure. Done on Mon Jan 30 10:46:26 PST 1995 by heydon o The comment for "PS.Type" should describe which character encodings it uses. The comment for "Show.R" had a mistake. [ramshaw] Done on Thu Jan 19 13:29:18 PST 1995 by heydon o Added key bindings to disable garbage collection (the "o" key) and to force a garbage collection (the "g" key). Done on Mon Dec 19 18:51:12 PST 1994 by heydon o Fork threads for "DoPrintWork", "DoPreviewWork", and "DoSavePSAsWork" in the "Juno" module. Done on Thu Dec 1 10:31:27 PST 1994 by heydon o Add a confirmation to the "Save As..." dialogue if the user is attempting to save the current module over a file that already exists [najork]. Done on Fri Nov 18 12:51:46 PST 1994 by heydon o Add a "Save PostScript" menu option that saves the PostScript to a file whose name is formed from the current module name by replacing the extension with ".ps" [perl]. Done on Wed Nov 16 16:15:26 PST 1994 by heydon o Change the "Load" and "Save" commands so that the current command is implicitly "Pushed" into a procedure with a reserved name (and no arguments) on "Save" and "Popped" from that reserved procedure name on "Load". For backward compatibility, if a loaded module does not contain a procedure with the reserved name, the implementation should treat such modules as if they contained the procedure with a body of "SKIP". Also, since the current command under this scheme is implicitly part of the current module, the module name should change to have a red background (and any other associated state changed) whenever the current command changes. Done on Sat Nov 12 16:05:21 PST 1994 by heydon o Cleaned up declarations in "Drawing.i3". Now, there is no type "Drawing.DeclTool", and not all "Drawing.ArgTool"'s have a "text" method; only the type "Drawing.ProcTool" has a "text" method. Since the current tool stored in a "Drawing.T" has type "Drawing.ArgTool", extra NARROW's are required to apply the "text" method if the current tool is known to be a text tool. Done on Fri Nov 11 18:42:04 PST 1994 by heydon o Change the implementation of the drawing view so that the origin of Juno's coordinate system is always in the center of the window or at the center of the printed page. Done on Tue Oct 11 18:22:09 PDT 1994 by heydon o Change UI so a newly-created point can be made frozen by holding down the option key. Done on Fri Oct 7 18:21:10 PDT 1994 by heydon o When the current command is pushed/folded, it always gets enclosed by an IF/FI, even if it is total. The program should only bracket the current command by IF/FI if it is not total. Done on Tue Oct 4 11:01:10 PDT 1994 by heydon o Updated the "Anim" module so its "Save" and "Restore" procedures are point tools, and so that they save/restore the current animation time factor (in addition to the permanent objects). Done on Mon Oct 3 11:05:50 PDT 1994 by heydon o Added the "Juno.modlist" mechanism for specifying auxiliary modules to be loaded without having to bundle them into the application. I also wrote code to fill in the module browser dynamically, so modules can now be bundled without any source changes -- only resource changes are required, so the newly bundled modules are available without a recompilation. Done on Fri Sep 9 09:13:49 PDT 1994 by heydon o Change implementation and language definition so that any name starting with "_" is reserved. Done on Thu Sep 8 17:02:19 PDT 1994 by heydon o Change the implementation so that if a module includes any IMPORT statements, then a restricted environment is created for the compilation of the rest of the module. Done on Wed Aug 24 15:18:59 PDT 1994 by heydon o Added "OnHint", "OnCHint", and "OnRHint" functions to the "Rect" module, and changed "DiGraph" to support undirected edges. Done on Fri Aug 5 18:39:43 PDT 1994 by heydon o Changed "CurrCmd" so that it unparses *all* values (not just points) after running the current command. Done on Thu Aug 4 10:48:44 PDT 1994 by heydon o Augmented the "R3" module to contain functions similar to "R2". Done on Sun Jul 31 16:39:24 PDT 1994 by heydon o Add processing for X command-line arguments "-geometry" and "-display". See the "XTrestle" and "XParam" interfaces. Done on Fri Jun 24 10:53:42 PDT 1994 by heydon o Change PostScript prologue to include the "CreationDate" comment. Done on Fri Jun 24 10:52:50 PDT 1994 by heydon o Add a "Unit" interface that defines constants and procedures for converting between screen-independent and screen-dependent units. Done on Wed Jun 22 14:14:28 PDT 1994 by heydon o Add the notion of a bounding box to the PostScript state. The bounding box is an annotation drawn at the end of each frame as a greyed out box. There should be a PS procedure for setting the bounding box. Additionally, we use this new piece of state to generate a "%%BoundingBox" comment in the PostScript output [heydon, gnelson]. Done on Wed Jun 22 14:12:18 PDT 1994 by heydon o Change the implementation of the PostScript module so that Juno's coordinate system uses screen-independent units such as points. Done on Mon Jun 20 15:08:26 PDT 1994 by heydon o Change Juno to accept the name of the module file to edit on the command line. Done on Mon Jun 13 17:32:47 PDT 1994 by heydon o Change the implementations of the external procedures to use the new "JunoArgs" machine interface. Done on Mon Jun 6 10:14:03 PDT 1994 by heydon o Add the "-zeus" switch so Juno can act as a server for Zeus animations. Done on Mon Jun 6 10:11:31 PDT 1994 by heydon o Change the "Make" button into "Solve", and add a "Run" button. Also, add the "Refresh" menu to control how the drawing view is refreshed when it needs to be updated implicitly. These changes are necessary for making it easier to work with long-running commands such as animations. Done on Fri Jun 3 09:51:30 PDT 1994 by heydon o If the current module is out-of-date on exit or on loading a new one, ask the user if the current module should be saved [mhb]. Done on Thu Jun 2 10:16:29 PDT 1994 by heydon o Create a new "Anim" module for producing animations. Done on Thu Jun 2 10:08:28 PDT 1994 by heydon o Create a new "Time" module with the single procedure "Now" for making animations run against the wall clock. Done on Thu Jun 2 10:07:37 PDT 1994 by heydon o Separate the old "PS.Showpage" into two procedures: "PS.Showpage" for simply flushing the off-screen VBT, and "PS.Reset" for resetting the PostScript state. Done on Fri May 27 12:34:08 PDT 1994 by heydon o In dialogue windows, change the icons for the close and grow buttons. Done on Fri May 27 12:29:52 PDT 1994 by heydon o Make the program install a grey top-level window sooner, then switch over to the regular Juno window. Done on Fri May 27 12:29:24 PDT 1994 by heydon o Make the dialogue boxes disable reactivity of the top-level background window. This means we have to name the "close" button so we can attach a call-back to it; we can get rid of the "Cancel" buttons too. Done on Fri May 27 12:28:56 PDT 1994 by heydon o The "Key" method should pass more characters through when using a text tool, and there should be a way to pass return (for example, by holding down a modifier key). Done on Thu May 19 18:30:35 PDT 1994 by heydon o Add a "Fold" dialogue box. Done on Wed May 18 15:06:40 PDT 1994 by heydon o Add UI declarations to all of the bundled-in modules. Done on Wed May 18 15:02:49 PDT 1994 by heydon o Add procedures to the "PS" module for getting the current line width, end style, joint style, color, and winding style. Done on Tue May 17 15:04:40 PDT 1994 by heydon o Add user-interface declarations for point tools, text tools, set tools, and parameters of set tools. Change the Juno UI to understand these declarations. Done on Mon May 16 15:04:17 PDT 1994 by heydon o Change the UI so that the bundled-in modules are installed in a VPackSplit, instead of in top-level windows. Done on Thu May 5 13:40:20 PDT 1994 by heydon o Add procedures for setting the font face and font size independently. Also, add procedures for getting the face and size values of the current font. Done on Thu May 5 13:40:12 PDT 1994 by heydon o An X font of size "n" has capital letters that are roughly "n" pixels high. However, there is some variance between one font and the next. Change the "PS" module so font sizes are specified by symbolic names. Done on Thu May 5 13:38:01 PDT 1994 by heydon o The PostScript fonts always come out smaller than the X fonts on the screen. The reason is that the X font "size" is (roughly) the height of a capital letter, whereas the PostScript font "size" is the height of a capital letter plus some inter-line spacing. Fix the way PostScript fonts are sized so they correspond to the X fonts. Done on Thu May 5 13:35:31 PDT 1994 by heydon o Change "PS.SetRGB" to "PS.SetColor". Done on Mon May 2 15:49:57 PDT 1994 by heydon o Add procedure "PS.StringBBox". Done on Tue Feb 15 16:09:04 PST 1994 by heydon o Change the cursor into a watch while compiling the drag command [heydon]. Done on Tue Feb 15 16:12:56 PST 1994 by heydon o Add the notion of the current command "stack" to the module editor and the UI [heydon]. Done on Mon Jan 17 15:51:23 PST 1994 by heydon o Change definition of the current point in the PS module so that it is not undefined if the current sub-path is closed. Done on Mon Nov 15 17:20:54 PST 1993 by heydon o Pickle AFM files with separate program. Done on Fri Oct 22 12:02:49 PDT 1993 by heydon o Add "PS.CurrentPath" to "PS.juno" and "PSModule.m3" [gnelson]. Done on Thu Sep 16 16:16:25 PDT 1993 by heydon o Fix LoadBrowser so it is not read-only. Then, the user can create a new (empty) module by typing the new file's name in the "Load..." dialogue. Done on Tue Sep 7 16:47:08 PDT 1993 by heydon o Make printing directly to a printer and saving PS to a named file work. Done on Tue Sep 7 16:46:25 PDT 1993 by heydon o Bundle in standard modules. Done on Tue Sep 7 16:45:56 PDT 1993 by heydon o Build a separate editor for the PS and TEXT modules. These editors are special, since they do not admit a private view. Done on Mon Aug 30 16:30:39 PDT 1993 by heydon o Separate code for doing animated drags into a separate "Drag" interface? Done on Fri Aug 27 18:22:27 PDT 1993 by heydon o UI for entering text Done on Wed Jul 7 23:49:30 PDT 1993 by heydon o Add PS.ShowPage() and Symbol font to the "PSModule". Done on Fri Jul 2 11:36:37 PDT 1993 by heydon o Implement the TEXT module. Done on Tue Jun 15 13:39:49 PDT 1993 by heydon o Add text to PS interface. Done on Tue Apr 13 13:21:16 PDT 1993 by heydon o Add Close procedure and width, endstyles, joint styles, and winding conditions to PS interface. Done on Fri Apr 9 18:18:23 PDT 1993 by heydon o Make the Drag tool use the difference between the cursor and the draggee as the delta each time the mouse is moved. Done on Thu Apr 8 11:17:09 PDT 1993 by heydon o Continuous solve Done on Tue Mar 30 11:30:35 PST 1993 by heydon (actually done a while ago) o Add support for multiple editor modules, each with a button, public, and private view. Done on Tue Mar 30 11:30:35 PST 1993 by heydon (actually done a while ago) o Create tools for functions, as well as predicates and procedures. CODE IMPROVEMENTS ============================================================= o Clean up the CurrCmd interface, so it simply provides syntactic operations on the current command. o Merge Source and Editor modules. Done on Thu Jan 11 18:32:48 PST 1996 by heydon and gnelson o Changed "Drawing" implementation so the "text" method of a "Drawing.ProcTool" is invoked automatically with an empty text argument immediately after the "setup" method if the tool is a text tool with one arg. Previously, this was being done in the default "Drawing.ProcTool" "setup" method. INEFFICIENCIES ================================================================ o Add logging (make compiling lazy) o Add sprites to drawing view. Done on Mon Jun 16 16:23:28 PDT 1997 by heydon o Changed m3makefile so the application is now compiled with optimization for efficiency. Done on Thu Jan 11 18:29:19 PST 1996 by heydon and gnelson o Use the DblBufferVBT "saved buffer" to implement text tools more efficiently. Done on Sun Jun 18 09:10:10 PDT 1995 by heydon o Rearranged code so the startup window is displayed as soon as possible. Done on Tue Feb 28 11:56:00 PST 1995 by heydon o Change "Arc" module so any arc that is (almost exactly) an integral multiple of quarter circles is drawn using quarter circles only. Done on Fri Jun 17 17:50:46 PDT 1994 by heydon o The "reshape" method of the drawing view is doing work even if the "new" rectangle is empty (which happens, for example, when the window is deleted). Done on Thu May 19 18:20:27 PDT 1994 by heydon o Optimize "ToolBox.Update" so it does not create a new set of buttons on every update. In particular, if the name matches but the signature has changed, the current button should simply be replaced. If the name does not match, the new button should simply be inserted. If both the name and the signature match, then the button is correct as is. Done on Wed Apr 20 17:33:21 PDT 1994 by heydon o The current command is being unparsed even when the current command view's domain is empty [heydon]. Done on Wed Apr 20 16:43:43 PDT 1994 by heydon o The current command is being "made" (and hence, unparsed) *twice* on each Fold, Push, and Pop [heydon]. Done on Sun Feb 20 18:15:19 PST 1994 by heydon o "ToolBox.Update" is being called when the Make button is clicked, even if the current module has not changed [heydon]. Done on Thu Nov 11 18:05:40 PST 1993 by heydon o Make compiles the current command twice when the source view has been edited by hand. The first compilation is just to check for errors!