0.6.2 - 16 Nov 2009 This release includes a few tweaks to buildscript's Inno Setup support; a bugfix, and the removal of a limitation of one destination for each source file. Brian Campbell (1): Buildscript: Inno Setup fixes Buildscript changes: Brian Campbell (3): Bugfix: Compare Inno Setup exclude globs against all components of path Refactor and comment FileSet.apply_exclusions based on code review inno_setup.rb: Allow the same file to be installed to multiple locations 0.6.1 - 13 Nov 2009 This release includes a few tweaks to the installer configuration, and to our logging system, in order to help get our programs in shape to be released. Brian Campbell (3): Installer: Exclude all .pdb files, except Halyard.pdb by default Exclude test media directories from installer and updater Merge branch 'master' of git://github.com/emk/halyard Eric Kidd (2): HACP: Log contents of HACP PutParam in Trace.log log: Allow log4cplus.properties to be overridden by a project 0.6.0 - 9 Nov 2009 These release notes only cover the difference between 0.5.43 and 0.6.0, and not the cumulative differences between 0.4.* and 0.6.0. This release includes a build fix for the UpdateInstaller test suites, several tweaks to the HACP API to make it more convenient, and support for loading more icon sizes. Brian Campbell (1): UpdateInstaller: Require 'digest/sha1' in tests Eric Kidd (3): HACP: Allow hacp-write to be called from a group, and tweak API hacp: Call current-group-member, not current-card in hacp-write Add support for more Windows icon sizes 0.5.43 - 2 Nov 2009 This is a bug fix build. It _should_ fix a variety of Quake bugs that appeared above 100 frames/second (though we will need extensive testing) and it moves our binary releases of Halyard to a new binary git repository. Eric Kidd (2): buildfile.rb: Upload binaries to a different repo Limit Quake 2 to no more than 100 frames/second 0.5.42 - 20 Oct 2009 This release includes a few more bug fixes which we want to make before declaring this engine stable. Of particular interest is the new %card% .focus! method, which can be used to focus the stage on startup. Eric Kidd (3): Correctly enable/disable accelerators in full-screen mode LICENSE.txt: Convert line endings to CRLF for use on Windows Add %card% .focus! method 0.5.41 - 15 Oct 2009 This release includes just a single fix, to make the use of Tamale as the user data directory consistent between all Scheme code, by pushing the code to switch to the Tamale user data directory up into (script-user-data-directory). Brian Campbell (2): Use Tamale user data directory for all script user data access Fix build failure in Common tests due to calling 'DataPath prim 0.5.40 - 13 Oct 2009 This release includes a few more tools for migrating an installed program from Tamale to Halyard. We add a stub executable that can replace Tamale.exe as the target of old shortcuts, which then simply invokes engine/win32/Halyard.exe with the same arguments. This stub executable is not part of the normal build and deploy process; it must be built and deployed manually to projects that need it. We also add a mode in which we use the Tamale user data directory instead of the Halyard user data directory, if a Tamale user data directory is present and the program has requested this, to seamlessly provide access to all old saved data. You can enable this feature by create a file named config/USE-TAMALE-DIRECTORY-FOR-USER-PREFS Brian Campbell (3): Updater: Add LnkTrampoline project to redirect user with old shortcuts Updater: LnkTrampoline: Use backslashes when launching engine data-file.ss: Use Tamale user data directory if specified and exists 0.5.39 - 8 Oct 2009 This release focuses on two areas, the update installer and providing better native widget support. The update installer has been taught how to clean up programs which were installed with the old, pre 0.5 program layout. This involves deleting any extra files and directories in the PLT search path, as well as ensuring that the case of files and directories is corrected, as the filesystem is case insensitive while PLT is not. There have been a few bug fixes and performance fixes as well. There are two new native widgets added, %list-box% and an experimental %pop-up-menu%. Look in elements.ss for documentation on %list-box%. As %pop-up-menu% is experimental and the interface subject to change, it is in it's own file "halyard/pop-up-menu.ss" and must be required manually. We have also added code signing for our executables, and more importantly our update installer, so users updating on Vista or newer will get nicer dialog boxes about updating. Brian Campbell (15): Updater: Fix path to re-launch executable Updater: Fix performance regression in download-update Updater: Extract superclass of UpdateInstallerTest Updater: Add test coverage for smarter update installer Updater: Delete vestigial files in script and collect directories Updater: Delete vestigial directories in script and collect dirs Updater: Downcase file and directory names when doing cleanup. Updater: Add logging when marking updates as impossible Updater: Fix bug in which we would try to delete non-empty directories Updater: Rename directories that differ only in case Updater: Case rename directories even when all files within them change Updater: Look for executable in various places if we don't find it Updater: Code review cleanup Widgets: Build fixes for pop-up-menu.ss Merge branch 'widgets' Eric Kidd (4): buildfile.rb: Sign our binaries when requested Widgets: Add new %list-box% element Widgets: Rename selection -> selection-list in %list-box% Widgets: Add pop-up menu widget 0.5.38.1 - 4 Sep 2009 This is a bugfix release, to fix a problem in which QuickTime media failed to play when launched in command line or runtime mode. Brian Campbell (1): FileSystem: Simplify paths containing . and .. when setting base dirs 0.5.38 - 1 Sep 2009 This release of Halyard substantially improves the updater to no longer require downloads for files which are already present on the system, though they may be moved to other locations in the update. This will allow updating of large programs in which, for example, the media directory has moved, without having to download all of the media again. We also fix a bug in which an extra 1-pixel wide light colored border appeared in full-screen mode, due to the wxAUI art provider. Brian Campbell (16): UpdateInstaller: Add unit tests for parsing full manifest UpdateInstaller: Begin implementing ManifestDiff class UpdateInstaller: Rename Manifest -> FileSpec, merge ManifestDiff UpdateInstaller: Change static members to init methods UpdateInstaller: Add support for copying files from tree to pool UpdateInstaller: Add notes on model behind new behavior UpdateInstaller: More notes on model of new behavior UpdateInstaller: Change init methods back to static members, tweak names UpdateInstaller: Use boost:unordered_set, _map, and _multimap UpdateInstaller: Implement file moves, deletes, and copies via the pool UpdateInstaller: Record current state in todo/updater-update.txt Updater: Provide stronger guarantees for MANIFEST-DIFF Updater: Only download files that we do not already have on disk Updater: Remove vestigial remains of MANIFEST-DIFF UpdateInstaller: Code review cleanups Merge branch 'master' of git://github.com/emk/halyard Eric Kidd (1): Remove border from stage in full-screen mode 0.5.37 - 28 Aug 2009 This release of Halyard replaces the high-level HACP client with asynchronous implementation that handles errors internally. It also includes a new DATA-FILE->HASH-TABLE function which, when given a path, will load a user preference file in data-file.ss format and convert it to a hash table. See the commit message for that patch for example code. Eric Kidd (4): %easy-url-request%: Add on-transfer-finished callback HACP: Allow keyword parameters to be passed to %url-request%s HACP: Rewrite high-level client to run asynchronously data-file.ss: Export data-file->hash-table for reading old prefs 0.5.36 - 4 Aug 2009 This release of Halyard includes a preliminary implementation of HACP, a protocol for talking to a "learning management system" via HTTP. It's similar to SCORM, but it can be used from outside of a browser. Our HACP implementation has a number of important limitations: 1. It relies on two custom HACP extensions to register new users and create HACP sessions. 2. It ignores the data returned by HACP GetParam requests. 3. The main API is not yet asynchronous, and the error-handling is weak. Basically, we're using HACP as a write-only protocol to report facts about the user. This implementation is extremely preliminary, and only intended to support development of Halyard code which uses HACP experimentally. We also add UUID-generation functions using the review-stage boost::uuid library. On Windows, these UUIDs are actually generated by Windows. On other platforms, we rely on potentially predictable random number generators. There are also a number of improvements to %easy-url-request% and subclasses, based on actual use. Eric Kidd (28): LICENSE.txt: Add licensing info for boost::uuid Add a (uuid) function for generating universally unique identifiers Delete %json-request% elements created during unit tests Add a %http-post-form-request% to simulate web form submission %url-request%: Move parameter support to %easy-url-request% json.ss: Use hash tables instead of "assoc vectors" %json-request%: Allow HTTP POST requests to return JSON response HACP: Implement our custom setup extensions HACP: Implement GetParam request which ignores the response HACP: Implement PutParam request HACP: Allow objectives to be written using PutParam request HACP: Use proper "percent encoding" for keys, values and data http-test-server.rb: Fix undefined variable errors HACP: Implement valid-hacp-status? for range-checking HACP: Add support for setting simple HACP fields HACP: Add support for setting the status of objectives HACP: Add placeholder for high-level API UUID: Add uuid? function for recognizing UUID strings HACP: Rough in high-level API, and assign UUIDs to users HACP: Register current user with the server util.ss: Export make-log-exception-fn HACP: Create a new HACP session HACP: Don't raise errors in test server during normal unit testing HACP: Make initial GetParam request HACP: Make PutParam requests HACP: Don't re-register known users HACP: Do not allow hyphens in auto-generated student IDs HACP: Send "Lesson_Status" field instead of incorrect "Status" field Scott McMurray (1): Import uuid_alt_v13_pod 0.5.35 - 7 July 2009 This version of Halyard fixes many long-standing Z-order, visibility and cursor-grabbing bugs. To fix these bugs, we replaced our flat C++ element list with a hierarchy based on the Scheme node hierarchy. The new behavior is currently turned off by default, although this will change in the next engine release. In the meantime, you can observe the new semantics by passing the following parameter to .new: :has-legacy-z-order-and-visibility? #f You will want to add the following to the startup code of all existing Halyard programs: (require (lib "deprecated.ss" "halyard")) (set! (compatibility-default 'has-legacy-z-order-and-visibility?) #t) We strongly recommend against changing this default at the library level--instead, change the default on a per-program basis. Most libraries should work correctly in either mode, with the occasional addition of a :has-legacy-z-order-and-visibility? override. Here's a summary of what changes when the new features are enabled: 1. Elements are now drawn immediately after their parent node, and not in order of global creation. Hit-testing has been updated in a similar fashion. 2. By default, all elements specify ':wants-cursor? #t'. The default cursor, however, has changed from 'hand to 'inherit, _except_ for subclasses of %basic-button% and %clickable-zone%. Other %custom-element% subclasses with mouse-* handlers should be updated to explicitly set their cursor to something appropriate. 3. Mouse grabbing will now send events to the children of the grabbed element. Under normal circumstances, these will propagate back up to the element itself. 4. %element% .raise-to-top! now raises an element above its immediate siblings, but not necessarily above all other elements on the card. 5. Putting an element into the drag layer should also put all of its children into the drag layer as well. 6. Calling (set! (elem .shown?) #f) will also make its children invisible. Calling (set! (elem .shown?) #t) will make the children visible _only_ if they were visible before. When upgrading to this new engine, select 'Reset to Default Perspective' from the 'Window' menu, and you will gain access to a new 'Elements' pane. This pane shows all currently-active elements. Hidden elements are shown using grey text. This engine introduces the new API (find-node-at point), which takes a point in screen coordinates, and returns the node at that point; currently, it only returns elements, but if cards or groups become clickable in the future, may return those. This engine also includes an important bug-fix for stale event handling, and some preliminary Linux/wxGTK patches from Robinson. Brian Campbell (5): C++ nodes: Bugfix for legacy z-order emulation on group-parented elems C++ nodes: Use current group member as legacy element parent Don't mark events as stale if their timestamp equals sMaxStaleTime C++ nodes: Add FindNodeAt primitive and FIND-NODE-AT function C++ nodes: Fix sementics of legacy children for current group member Eric Kidd (59): Cleanup: Add 'indent-tabs-mode: nil' to fix-prologues.pl Cleanup: Change C++ prologues to include 'indent-tabs-mode: nil' Cleanup: Convert tabs to spaces Cleanup: Modify fix-comments to strip "/////" clutter Cleanup: Strip "/////" clutter from comments Cleanup: Add tool for updating brace style Cleanup: Convert braces to Java style Merge branch 'cleanup' of git@github.com:emk/halyard Merge branch 'for-merge' of git://github.com/colonelqubit/halyard Cairo: Fix text in compile-time error message gnome-autogen.sh: Look for glibtool on the Mac gitignore: Ignore libtool-generated files fix-comments.pl: Modify to strip more "//////////" clutter Cleanup: Strip top-level "//////////" clutter ASSERT: Check condition at call site, not in separate function Doxygen: Run 'doxygen -u' to update Doxyfile Doxygen: Fix infinite loop when generating API docs wxAui: Fix incomplete comment found in code review boost: Upgrade to 1.39.0 C++ nodes: Make Node a superclass of Element C++ nodes: Modify Wait primitive to look up element like other primitives C++ nodes: Use BOOST_FOREACH to loop over mElements C++ nodes: Add a name-to-Node map to Stage C++ nodes: Replace Stage::FindElement with FindNode C++ nodes: Convert more mElements loops to use mNodes Stage: Make our use of dynamic_cast_tag more consistent C++ nodes: Convert Element addition and removal to support Nodes C++ nodes: Rename more Stage APIs to refer to Nodes configure: Require Boost 1.34.0 or later C++ nodes: Add C++ counterpart to %group-member% C++ nodes: Add C++ counterpart to %invisible-element% C++ nodes: Add C++ counterpart to %root-node% Node: Don't pass inStage to every constructor C++ nodes: Break Card and CardGroup into separate classes C++ nodes: Implement Node::GetParent() C++ nodes: Implement Node::(RegisterWith|UnregisterFrom)Parent configure: Require Boost 1.38.0 Elements pane: Add a primitive "Elements" pane Elements pane: Use "display names" for nodes Elements pane: Expand GroupMembers automatically Elements pane: Display icons for nodes Elements pane: Display italic class names for anonymous nodes Elements pane: Show the names of hidden nodes in grey Bug fix: Elements pane: Base event table on correct class Elements pane: Only update when visible C++ nodes: Keep track of legacy Z-order relationships C++ nodes: Composite using new Z-order code C++ nodes: Make mouse grabbing use LightweightElement explicitly C++ nodes: Hit-test using new Z-order code C++ nodes: "Raise to top" using new Z-order semantics C++ nodes: Add demo code and instructions for planned features C++ nodes: Remove useless Element::GetCursorName() function C++ nodes: Tweak cursor handling for new Z-order semantics C++ nodes: Send mouse-(enter|leave) to children of grabbed element C++ nodes: Reorganize Node.h and break into sections C++ nodes: Reorganize Element.h and break into sections C++ nodes: Try to detect leaked Node objects C++ nodes: Hide and show elements using new Z-order semantics C++ nodes: Allow default z-order semantics to be changed Robinson Tryon (6): autotools: Look for BOOST_PRG_EXEC instead of BOOST_TEST_EXEC Make HalyardCheckAssertion inTest an unsigned long FileSystem: Use proper syntax to declare operator== friend /m4: Pick correct mzscheme libs based on $ac_mzscheme_want_precise_gc TValue: Make template specializations in the proper namespace HalyardEventLoop: Make __WXGTK__ builds use the standard loop 0.5.34 - 12 June 2009 This release significantly improves the Halyard developer GUI in a number of long-overdue ways: 1) We now support creating new Halyard-based programs from the GUI. 2) The "Recent Programs" list finally works. 3) We have an icon on the Macintosh. 4) Halyard's old SashFrame class has been replaced by a new AUI-based GUI, complete with dockable palettes. 5) The listener's focus and scrolling behavior has been improved significantly. 6) We now have a "Media Info" palette which shows the path and timecode of whatever element the script is waiting on. This is experimental, and will be refined further in future releases. This release also includes a few compilation fixes for recent Ubuntu versions of GCC. It probably wouldn't be too hard to get a very primitive Linux port of Halyard running if anybody is interested. This release introduces a new function in the unit test API, RUNNING-ALL-TESTS?, which specifies if we are currently running through our unit test sequence. Brian Campbell (3): Cairo: Remove warning for drawing 0-area rectangle outline Merge branch 'autogen-update' of git@github.com:lambda/halyard Halyard.sln: Don't build unnecessary projects in Libraries phase Christian Persch (2): autogen: Add -Wno-portability to automake invocation. Bug #529120... autogen: Support for automake 1.11 Eric Kidd (26): StartupDlg: Implement "recent files" list ScriptEditor: Only scan for identifiers in source directories StartupDlg: Implement "new program" radio button Stage: Factor common code out of OpenDocument, NewDocument StartupDlg: Rename mRecentFiles -> mHistory Stage: Factor out AddFileToHistory calls Reorganize .gitignore and add .DS_Store Mac: Add application icon and Info.plist wxAui: Convert StageFrame to use wxAui wxAui: Convert ScriptEditor to use wxAui wxAui: Reduce minimum window size for ScriptEditor wxAui: Bug fix: Remove extra CreateToolBar call wxAui: Save and restore frame sizes DocNotebook: Make a note of a long-standing Mac bug wxAui: Remove obsolete "TODO AUI" comment Mac: Make CFBundleExecutable name uppercase Remove ancient timecoder demo wxAui: Convert Listener to use wxAui wxAui: Tweak Listener behavior on Windows ProgramTree: Get rid of useless "Cards" node Merge branch 'aui' of git@github.com:emk/halyard wxAui: Allow user to reset frame perspective to default Bug fix: Cairo: Fix TransformRectToUnitSquare regressions wxAui: Add a "Media Info" pane with paths & timecodes Revert "HalyardCheckAssertion: Correct type of inTest to bool" wxAui: Fine-tune spacing of "Media Info" palette Robinson Tryon (11): HACKING.txt: Clarify win32 build instructions Remove unneeded declaration of Halyard::TStateDB HalyardCheckAssertion: Correct type of inTest to bool Include string.h explicitly when using strncpy Remove extra specifier from ~StyleRep() Make #endif lines use proper syntax Change default values to have correct wxString type Unit tests: Create/provide function running-all-tests? /bugs: Add card /bugs/bug-f12767-measure-text-space-before-newline /m4: Update ax_boost_unit_test_framework.m4 to the latest version /m4: Update ax_boost_test_exec_monitor.m4 to the latest version Rodney Dawes (1): autogen: Only pass --enable-maintainer-mode when AM_MAINTAINER_MODE is... 0.5.33 - 4 June 2009 This release introduces a few more performance optimizations. At this point, we believe that we are doing no unnecessary primitive calls for basic element creation, and that primitive call overhead is no longer the bottleneck. Since release 0.5.30.1, we have improved performance on element creation by a factor of around 3, and on primitive call overhead by a factor of around 20. This release updates draw-text and draw-graphic to return the bounding box of the item drawn. This can help DRAW methods avoid an extra primitive call to measure text or a graphic. Brian Campbell (3): Performance: Remove extra primitive call to WakeUpIfNecessary Performance: Only call StateDbUnregisterListeners if we have listeners Performance: Disable trace logging for primitives Eric Kidd (4): Bug fix: Only expand WITH-DC argument once Performance: Return bounding box from draw-text and draw-graphic Don't build log messages for primitives if we don't need them Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard 0.5.32 - 2 June 2009 In this release, we replace Halyard's offscreen drawing routines with Cairo. Cairo is a fast, portable 2D graphics library, used by Firefox, Gnome and many other open source projects. We're merging the Cairo branch slightly ahead of schedule, because we're in the middle of performance tuning, and Cairo appears to be significantly faster than our old drawing code for at least one operation (drawing rectangles in transparent overlays), and potentially faster for a few other common operations. Here is some data from the /benchmarking card. All times are in microseconds, and numbers are accurate to the nearest 100 microseconds or so. These benchmarks were performed in a Parallels VM on a year-old MacBook Pro, and Halyard was compiled in Release mode. Before Cairo a. Clear opaque overlay 462 260 b. Fill opaque overlay 500 280 c. Clear alpha overlay 380 280 d. Fill alpha overlay 1982 382 e. Draw graphic 802 742 f. Mask 702 822 g. Draw text 1022 1120 h. Measure text 922 842 Operations (a)-(c) appear to be faster, although the improvement is near the margin of error. Operation (d) has improved enormously (and consistently, across many benchmarking trials). Other operations are at or near the margin of error, with slight performance decreases in (f) and (g). These latter two could very well be real--there are non-trivial code changes on both paths. But as the values of (a) and (c) in the first column show, equivalent operations can vary by a hundred microseconds or so. This release fixes several long-standing drawing bugs, and adds several new APIs. * Bug fix: Diagonal lines now work on transparent overlays * Bug fix: Opaque images now on transparent overlays Now that we're using Cairo for offscreen drawing, we can support all drawing operations on transparent overlays. This means no more "image with a single transparent pixel" hacks. * New: draw-oval and draw-oval-outline This version of Halyard includes two new drawing primitives. Note that, in general, we don't intend to export a large number of these special-purpose primitives. Instead, we hope to export Cairo's more flexible API, which can draw a wide variety of images using a relatively small set of functions. * New: %graphic% now takes :scale, :scale-x and :scale-y parameters * New: draw-graphic and measure-graphic now take :scale-x and :scale-y parameters On an experimental basis, we're now exposing the ability to resize images. These parameters are floating point numbers, relative to a scale 1.0. In the future, we _may_ decide to move the scale parameters from %graphic% to %custom-element%. Eric Kidd (33): DrawingArea: Add basic Cairo support DrawingArea: Add support for DRAW-OVAL and DRAW-OVAL-OUTLINE DrawingArea: Factor common code into CairoContext DrawingArea: Draw rectangles using Cairo primitives Add example code for diagonal lines DrawingArea: Draw lines using Cairo DrawingArea: Clear DrawingArea using Cairo DrawingArea: Draw letters using Cairo DrawingArea: Rename CairoContext::GetSurface -> CreateSurface BREAKS WIN32: DrawingArea: Re-implement Mask using Cairo DrawingArea: Delete DrawingAreaOpt.{h,cpp} BREAKS WIN32: DrawingArea: Draw bitmaps using Cairo Remove last vestigial support for _INCR_X, etc. DrawingArea: Add scaling to DRAW-GRAPHIC DrawingArea: Move CairoContext into a separate file pixman: Put pixman.lib into pixman build directory DrawingArea: Factor out bitmap measuring code BREAKS WIN32: DrawingArea: Composite onto stage using Cairo Stage: Use Cairo to manage clipping regions Cairo: Create a CairoSurfacePtr class Cairo: Extract CairoBitmapContext from CairoContext BREAKS MAC: DrawingArea: Use a cairo_image_surface instead of a wxBitmap Cairo: Include error strings in error messages FIXES MAC & WIN32: ImageCache: Store loaded images as Cairo surfaces Rename (graphic|surface) -> image in ImageCache, DrawingArea APIs Clean up *Pic primitives. Stage: Clear path after setting up clip Make splash screen copyright text more attractive Benchmark: Allow (benchmark ...) form to appear anywhere Benchmark: Add benchmarks for simple drawing calls Merge branch 'cairo' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard DrawingArea: Do not try to fill 0-area shapes Merge branch 'v0.5.31-fix' of ssh://imlsrc.dartmouth.edu/var/lib/git/halya 0.5.31.1 - 2 June 2009 This release fixes a regression introduced by the previous release. Brian Campbell (1): Bug fix: Initialize :shown? on %custom-element% correctly 0.5.31 - 1 June 2009 This release introduces a number of simple performance optimizations. Element creating has always been slow, so we have done some benchmarking, and discovered several quick and easy performance optimizations that buy us a good deal of extra performance. We also expose a bit more of our benchmarking to Halyard programs, so we can more easily compare the differences in performance depending on the size of the program we're running or other factors affected by the program (like monkey patching). In order to set up engine nodes, such as setting their in-drag-layer? and shown? properties, after they have been created, we have created a new method that is overridable on nodes, .FINISH-INITIALIZING-ENGINE-NODE. This is called after .CREATE-ENGINE-NODE, to allow further initialization to be overridden separately. Brian Campbell (5): kernel.ss: Cache results of have-prim? nodes.ss: Cache node .full-name computation Move Halyard benchmarks from test into runtime Add Noop and UntracedNoop primitives for benchmarking Performance: Don't set element parameters to default values on setup 0.5.30.1 - 27 May 2009 This release is a build fix for 0.5.30, which did not have all of the build dependencise listed and thus could not be reproducably built. Brian Campbell (2): Build fix: Remove unnecessary libraries from PLT build step Build fix: add extra dependencies to wxRC 0.5.30 - 26 May 2009 This release upgrades the engine to be able to run on top of wxWidgets 2.9 RC 3, while maintaining compatibility with wxWidgets 2.8 for the Mac build. We updated wx and wxIE to their latest versions, and forward ported our patches to apply to them. We also have also sent some of these patches upstream, in the hope that we will no longer have to maintain them separately. We also did some more Unicode cleanup in order to build against the new wxWidgets. Things to look out for, that may have broken or changed; we have tested most of these things, but there may be corner cases that were missed: - Keyboard commands. We fixed a few bugs with keyboard commands such as the escape key, but there may be something we missed. - Text entry widgets, and other native controls. - Performance. We have not noticed any performance regressions, but it would be good to be on the lookout. - The script editor. The patches below marked as BROKEN mean that the build was broken, the program would not launch, or the program had significant crashing bugs at that stage of the porting process. We have allowed these to remain in the history to document the upgrade process, but marked as BROKEN so we can avoid them when bisecting history and the like. Brian Campbell (5): BROKEN: Port to wx 2.9 BROKEN: wxIE: Re-apply constructor race fix to wxactivex.cpp BROKEN: wxIE: Port our interface changes forward BROKEN: Add more required wxWidgets projects and update dependencies BROKEN: Override wxGUIAppTraits to install custom event loop in wx 2.9 Eric Kidd (16): BROKEN: Update Quake 2 for wxWidgets 2.9 BROKEN: Fix custom build using wxrc.exe BROKEN: Organize projects into folders BROKEN: wxWidgets: Use non-DLL C runtime BROKEN: Remove unusued Halyard.sln configurations BROKEN: Replace wxIE with new version from wxPython Fix cross-fade crash using wxMemoryDC::SelectObjectAsSource Mac build fix: Explicitly convert "About" text to Unicode ScriptEditor: Replace irregular use of L"..." with wxT("...") wxWidgets: Ignore build byproducts and Emacs backup files ScriptEditor: Always use standard syntax highlighting ScriptEditor: Reapply our FindText patch Remove deprecated wxWidgets 2.6 APIs ScriptEditor: Fix indentation, etc., for square brackets ScriptEditor: Properly handle enter key in find dialog Stage: Intercept Escape manually if menu accelerator fails 0.5.29.1 - 18 May 2009 This release fixes a build regression in the previous release. When we upgraded to Windows SDK 6.1, we hadn't tested the PLT build process, which wound up failing. Brian Campbell (1): Build fix: libs/plt 0.5.29 - 23 April 2009 This is the first official build with the Electric Gibbon branch merged; Electric Gibbon is a new testing tool for simulating clicks on elements while jumping to each card. See the release notes for the Electric Gibbon branch releases for details. This release adds the %url-request% class and subclasses, to support communicating over HTTP asynchronously from Scheme, including GET and POST requests that send and parse JSON. Support for proxies is incomplete in this release. This is a work in progress; the API is not yet stable. This release updates the primitive logging machinery. Primitives are now logged along with their arguments before they are executed, to let you tell what primitive was called before a crash occurred. They are also logged after the primitive returns, to show the return value. Brian Campbell (10): Installer: Pass "." as argument in shortcuts instead of full path TPrimitives: Move formatting of strings and booleans into TValue TPrimitives: Remove TArgumentList::GetListArg() and corresponding operator>> TPrimitives: Suppres noisy primitive logging using log4cplus TPrimitives: Suppress logging of fewer primitive calls TPrimitives: Move all operator>> declarations to one place TPrimitives: Log prim calls before and after they are executed TPrimitives: Remove unused int16 version of operator>> TPrimitives: Factor out many formulaic operator>> functions with a template TPrimitives: Reverse direction of >>> and <<< when logging primitives Eric Kidd (28): eg: Make infinite loops result in non-fatal errors TLogger::ConsoleAlert: Display "WARN:", not "WARNING:" Allow unrestricted access to the network Upgrade to libcurl v7.19.4 Add asynchronous %url-request% element %url-request%: Properly clean up engine element %url-request%: Make changes suggested in code review Add more trace statements for elements and %url-request% %url-request%: Report HTTP status >= 400 as a failed transfer Mac: Require libcurl v7.19.3 %url-request%: Add HTTP POST support %url-request%: Add support for getting the response Content-Type %url-request%: Add support for sending 'Accept' header EventDispatcher: Fix argument name for DoEventProgressChanged /features/browser: Extract %progress-bar% class %url-request%: Implement progress events %url-request%: Make %easy-url-request% part of the official API %url-request%: Rename .success? -> .succeeded? json: Implement %json-request% json: Send "Accept: application/json" with JSON requests json: Merge most of %json-request% into %easy-url-request% %curl-request%: Add stub function for configuring proxy servers Update to Windows SDK v6.1 proxy: Query for IE settings and log proxy: Fix boolean casting warning proxy: Assume ":" and "::" in proxy or proxy_bypass mean "no proxy" proxy: Honor proxy, but ignore proxy_bypass for now Merge branch 'master' of git://github.com/lambda/halyard Tony Garnock-Jones (1): json: Import 3rd-party JSON library 0.5.28-gibbon6 - 25 March 2009 This release adds a number of enhancements to Electric Gibbon, including support for using release engines with halyard:jump_each:test, support for catching multiple Halyard errors in a single test run, and support for detecting certain kinds of infinite loops during halyard:jump_each:test. Detecting multiple Halyard errors required us to add Yet Another Logging hack. Since the old TLogger code was about 20% archaic code, and about 80% festering hacks, we refactored it into something cleaner and started using log4cplus for the actual output. The new code is very shiny, but alas, we had to add one last tiny hack to get the our new features working anyway. If your halyard:jump_each:test runs are taking way too long, try: rake halyard:jump_each:test MODE=release PORTING NOTES: - Remove config/developer.prefs and decide whether to use ENABLE-DEVELOPER-TOOLS-IN-ALL-MODES!. - All of the old logging functions are deprecated, though they should still be fully supported by deprecated.ss. I'll be putting up a wiki page explaining the new logging functions and levels shortly. Brian Campbell (2): Mac build fix: Cast to uint32 when setting /system/clock/milliseconds log: Remove redundant (cat ...) statements from nodes.ss Eric Kidd (42): log: Combine gLog and gDebugLog into unified logging API log: Remove environment-error log: Remove TLog mask support log: Fix comment in TPrimitives.h log: Replace WITH-ERRORS-BLOCKED with WITH-EXCEPTIONS-BLOCKED log: Promote expensive event logging to a debug message log: Mac build fix: Add abort() to TLogger::Fatal log: Move static functions from TLog to TLogger Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard in log: Move TLog into its own file log: Move vsnprintf (and buffer) into TLogger log: Add LevelFromString and LevelToString functions log: Move warning inteception code to TLogger log: Reorder TLog::Warning and TLog::Error log: Bug fix: Use correct level for LOG-ERROR and FATAL log: Move alert-display code into TLogger log: Move ExitWithError into TLogger log: Make level-based conditionals simpler log: Get rid of level-specific functions in TLog log: Move trace messages into new Trace.log log: Log loader/stage2 progress at level TRACE log: Log user-initiated events, etc., at level DEBUG log: Test fix: Remove remaining debug-log references log: Log "unexpected errno" at level TRACE log: Add rudimentary log4cplus support log: Move log4cplus configuration to external file Add a SetEnvVar function Add FileSystem::Path::operator/ log: Configure log4cplus using an external properties file log: Add __declspec(noreturn) to TLogger::Fatal log: Remove old TLog class log: Clean up log4cplus initialization log: Register log files with CrashReporter log: Ignore rolled-over log files in Common/test log: Shrink log file sizes considerably log: Log command-line-error at level DEBUG Remove TDeveloperPrefs halyard/test: Allow users to switch from RUNTIME to AUTHORING mode eg: Clean up "New:" lines in output eg: Try to avoid infinite loops when replaying actions eg: Report multiple errors from a single run of jump_each eg: Allow the use of release *.exe with jump_each 0.5.28-gibbon5 - 18 March 2009 The previous implementation of %deep-test-planner% had a number of issues which were missed in 0.5.28-gibbon4, mostly because the code was such a snarl. In this version, rerunning actions to return to a previously known state should work much more consistently. Eric Kidd (1): eg: Refactor %test-planner% for clarity and fix bugs 0.5.28-gibbon4 - 18 March 2009 Electric Gibbon can now update its test plan to include actions that only become available once other actions have been performed. This required porting our event API from Swindle to Mizzen (although we do have a reasonably good backwards compatibility layer). Eric Kidd (11): eg: Add unit tests for Swindle-based events API eg: Reimplement events using Mizzen instead of Swindle eg: Only generate test-actions if .supports-user-interaction? is true eg: Generate real events, not just .click eg: Move run-next-test-action to %test-planner% eg: Code review: Add documentation for events.ss eg: Run test actions hidden behind other test actions eg: Don't include any more of srfi/1 than necessary eg: Merge test action HOVER into CLICK eg: Print "Repeating" when returning to a card eg: Code review: Reorder %deep-test-planner% and add comments 0.5.28-gibbon3 - 10 March 2009 We're currently running Electric Gibbon heavily against in-house projects. Here's a small bug fix to make it stop clicking on invisible buttons. Eric Kidd (1): eg: Don't click on elements with :shown? #f 0.5.28-gibbon2 - 5 March 2009 This release changes the interface for invoking jump_each: rake halyard:jump_each [START=/card/name] # Jump to each card. rake halyard:jump_each:test [START=/card/name] # Jump to each and test. This allows existing programs to keep calling an old-fashioned 'jump_each'. Eric Kidd (4): eg: Split %test-planner% into %(null|shallow)-test-planner% eg: Only run test actions when halyard:jump_each:test called eg: Add START parameter to halyard:jump_each tasks eg: Code review: Add missing word to comment 0.5.28-gibbon1 - 4 March 2009 This release contains some buildscript improvements by Brian, and a substantial amount of work towards an "Electric Gibbon" stress-testing tool that allows 'rake halyard:jump_each' to click on buttons. Porting notes: * Please do not use (gensym) to generate names for anonymous elements. Instead, please pass ':name #f' and let Halyard generate a name. Pay careful attention to new-FOO functions that wrap (%FOO% .new ...), which tend to be the major offenders. Brian Campbell (10): tools: Add announce-build.sh tool for emailing build announcements tools: Add announce-build-freshmeat.rb for pinging freshmeat tools: Add irc announce bot, for announcing a build on IRC fix-prologues.pl: Put correct comment in .rake and Rakefiles tools: Add GPL headers to announce scripts tools: Fix permissions on announce scripts tools: Move #! lines back to beginning of files announce-build-freshmeat.rb: Don't print responses unless -v or --dry-run Buildscript: Add tool for staging and releasing updates on server eg: Comment fixes following code review Eric Kidd (27): halyard.el: Indent backwards-compatibility APIs properly eg: Initial files for Electric Gibbon test tool eg: Implement a primitive TEST-ACTION form eg: Allow test actions to be created manually eg: Recurse over child elements when listing test actions eg: Look for elements on groups, too eg: Document public APIs eg: Add a test-action for %clickable-zone% eg: Remove unused eq-with-gensym? hack eg: Centralizing (gensym) calls for anonymous elements eg: Make anonymous element names semi-stable eg: Add %test-action% .key method eg: Issue a warning about gensym'd node names eg: Add extremely primitive test planner eg: Test %test-planner% with an actual set of actions eg: Add support for resuming a test where we left off eg: Remember what card a %test-planner% is associated with eg: Document %test-planner% eg: Add %test-planner% .done? eg: Don't generate test actions for disabled elements eg: Integrate Electric Gibbon into halyard:jump_each eg: Improve halyard:jump_each output eg: Drain deferred thunk queue after each action eg: Remove delays during jump_each eg: Add :skip-when-testing-card? flag to %element% eg: Don't open browser when running jump_each on halyard/test eg: Code review: Rename :skip-when-testing-card? -> :skip-test-actions? 0.5.28 - 25 Feb 2009 The only engine change in this release is to remove a few messages that the crash reporters logs to the debug log, which were obscuring the underlying message in the report title. This release also includes several build script changes. We had tagged 0.5.27 before updating the build scripts, so this release contains the build script changes we used to build 0.5.27. In addition, we have added a command to buildscript/commands.rb to allow projects to check out and tag from Git. Brian Campbell (10): Convert .rake files from DOS to Unix line endings freeze.rake: Fix ignore regexp for Emacs backup files buildfile.rb: Push engine binaries to Git repository buildfile.rb: Don't use git clone --no-checkout buildfile.rb: Pull and push from Git via ssh: URLs, not git: buildfile.rb: Remove Subversion support HACKING.txt: remove outdated instructions, and mention modern layout buildscript: README.txt fixes buildscript: commands.rb: Add command for cloning from Git Crash reporter: Remove message about finding curl.exe 0.5.27 - 17 Feb 2009 This release reorganizes the support files used by the installer and the updater. In particular, 3rd-party binary files are expected to live in binaries/, and configuration files now live in config/. Eric Kidd (10): Replace test/buildfile.rb with one from a modern project reorg: Expect QuickTime support files in binaries/ reorg: Expect GnuPG files in binaries/ reorg: Expect curl in binaries/ reorg: Move trustedkeys.gpg to config/ Explain why moving AUTO-UPDATE is tricky reorg: Move TRUST-PRECOMPILED to config/ reorg: Move Autorun.inf to config/ Include VP3 source code in installer Merge branch 'master' into reorg 0.5.26 - 6 Feb 2009 This release fixes several broken pieces related to the update installer. When we did the reorg to put the executables into runtime, which is deployed to engine/win32, we did not update everything else to match. This release adds UpdateInstaller.exe to the list of binaries released to our programs, fixes various units tests and adds them to the main 'rake test' task, and updates the installer to install UpdateInstaller.exe to the place the updater expects it. Brian Campbell (6): .gitignore: Ignore doc directory UpdateInstaller: Point unit tests to runtime instead of Win32/Bin Rakefile: Call UpdateInstaller and buildscript tests during 'rake test' buildfile.rb: Add UpdateInstaller.exe to list of released binaries Installer: Fix installer rake task to point to windows-installer-final.iss Installer: Always install UpdateInstaller.exe in program root 0.5.25 - 5 Feb 2009 We're getting ready for an alpha release of one of our in-house programs, so it's time to update the copyrights and license information, and fix some bitrot in the installers and build system. This release also modifies Quake 2 to stop writing automatic save files and configuration data to disk. Brian Campbell (5): Updated buildscript to latest version Updated buildscript to latest version Rakefile: updated 'sign' task to refer to current engine location Installer: Include On2_VP3.qtx again Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard Eric Kidd (6): Quake 2: Don't write configuration or auto-saved games to disk Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard fix-prologues.pl: Update for 2009 and extend to *.rb files Update copyrights to 2009 Don't use windows-installer.iss for all versions of *.iss file LICENSE.txt: Update for 2009 and latest changes 0.5.24 - 9 Jan 2009 This is a minor release fixing a couple of installer-related issues. Eric Kidd (2): Add qtcheck.dll to list of files in a binary release Fix path for the updater icon 0.5.23 - 23 Dec 2008 This release includes a new, standardized system for building installers for Halyard applications. Just copy config/windows-installer.iss from halyard/test, customize it for your program, and run: rake halyard:installer This release also removes the code that forced QuickTime safe mode, because safe mode fails on some machines that work fine in accelerated mode. Yes, this is not very convenient. Eric Kidd (8): Add experimental halyard:(un)freeze task Update halyard-test *.iss to build primitive installers Add halyard:installer task to standard Rakefiles Installer: Conditonally enable more files Merge installer template into config/windows-installer.iss Stop forcing QuickTime safe mode (again) Installer: Begin to split out program-specific parts Installer: Implement AppShortName using CustomMessages 0.5.22 - 25 Nov 2008 We've finished overhauling the server-side portion of the crash reporter, and we need some more changes on the client side. This release includes both fixes to the crash reporter infrastructure, and workarounds for various issues discovered by the crash reporter. Eric Kidd (6): Add crash report URL to halyard/test Force QuickTime to run in Safe/GDI mode Include full text of PortAudio error messages Crash reporter: Search for curl executable in script and runtime dirs Add %force-crash function Crash reporter: Display error if we can't create temp dir 0.5.21 - 28 Oct 2008 Things are definitely beginning to stabilize a bit as we approach 0.6. We're still planning to do some work on installers, and on various Quake 2 issues. This release improves support for testing code that uses (jump ...), state-db.ss and data-file.ss. It also clears the state-db on each reload, and catches attempts to override an existing member function using ELEM. Eric Kidd (7): Clear gStateDB when script is reloaded Don't allow ELEM to clobber inherited methods Updater: Fix AUTO-UPDATE-POSSIBLE? to always use DIR Allow expressions to be passed to ASSERT-JUMPS Trap unexpected JUMPs while running unit tests state-db: Add better supporting for writing unit tests data-file: Add better support for writing unit tests 0.5.20 - 13 Oct 2008 This engine extends %CLICKABLE-ZONE% with support for %BASIC-BUTTON%'s .CLICK and :COMMAND features. It also improves the buildbot support and re-enables the old wxWidgets-based crash reporter on Win32. One new set of restrictions to be aware of: %ELEMENT% .NEW is much better about checking for errors, and no longer allows elements to be attached to nodes that are being destroyed. This may break some existing code. Of course, there's a strong argument that such code was already broken, but just in a much less obvious way. Please run 'rake halyard:jump_each' before releasing these engines to Halyard-based projects. Thank you! Brian Campbell & Eric Kidd (2): halyard-unit: Don't skip first test case when running all Bug fix: Fix %clickable-zone% .click Eric Kidd (7): mzscheme: Display error dialog when VirtualAlloc fails Don't allow %element% .new to parent elements to a static node Remove useless junk from error dialogs Add standard .click method to %clickable-zone% Jumping to each card: Don't end playback of looping audio Bug fix: Re-enable FancyCrashReporter on Windows Crash reporter: Fix bugs and add support for COMMAND_LINE mode 0.5.19 - 7 Oct 2008 The major new features in this release are (defer body ...), which is equivalent to (run-deferred (fn () body ...)), and some rudimentary support for jumping to every card in the program: rake halyard:jump_each You can skip a group or card by setting :skip-when-jumping-to-each-card?: (card /sample (%card% :skip-when-jumping-to-each-card? #t) ...) After updating to this engine, run: rake halyard:update_tools Also of interest are the new resolve-(static|running)-node methods and the (rather kludgy) new metadata-attr. Eric Kidd (8): halyard-unit: Call IDLE after each test card Turn the warning "Transition: way too long" into a debug message buildbot: Make it easier to call JUMP from the command-line Jumping to each card: Begin with a basic implementation Jumping to each card: Add 'rake halyard:jump_each' task config/boot.rb: Add ENV['HALYARD_RUNTIME'] to search path Factor metadata-attr out of card-sequence.ss Jumping to each card: Allow cards and groups to be skipped Eric Kidd & Robinson Tryon (2): halyard-unit: Allow stopping and resuming test suites Add .resolve-static-node and .resolve-running-node methods Eric Kidd & Brian Campbell (1): Add a (defer ...) special form 0.5.18 - 1 Oct 2008 We decided to rename "caution" to "warning", because "warning" is more consistent with the terminology used by other interpreters and compilers. We also improved the warning dialogs and added the unit-test macros ASSERT-WARNS and ASSERT-JUMPS. Several low-level APIs were exported from drag.ss to make it easier for people doing complicated things with the drag-and-drop framework. Note that we provide backwards-compatibility stubs for all renamed functions. Existing code should require the following file: (require (lib "deprecated.ss" "halyard")) Once this is done, you won't need to worry about APIs deprecated in the future. Eric Kidd (7): Win32: Show "Warning" instead of "Error" in caution dialogs Mac: Show "Warning" and "Error" in appropriate dialogs TLogger: Rename "caution" -> "warning" mizzen: Add ASSERT-WARNS macro halyard-unit: Add ASSERT-JUMPS for unit-testing JUMPs Rename NON-FATAL-ERROR -> REPORT-ERROR buildbot: Force WAIT to return immediately in COMMAND_LINE mode Eric Kidd & Brian Campbell (1): drag.ss: Export some more low-level drag machinery 0.5.17 - 29 Sep 2008 This release makes the CAUTION infrastructure more pleasant to deal with. Specifically, the unit test framework now captures caution messages, and several related engine-level problems have been fixed. Eric Kidd & Brian Campbell (4): Bug fix: Don't call TLogger from interrupt level %invisible-element%: Do not show caution when deleted Treat cautions as unit test failures .gitignore: Ignore Quake 2 save files 0.5.16 - 26 Sep 2008 This release adds several features for making sim development more convenitent; we add the ability to define teleport locations, along with associated setup code, in Quake, so you can easily jump into the middle of a sim. See the documentation in halyard/quake2/teleport.ss for further details. We also fixed a bug that causes pause/resume to break wait points on Vorbis audio streams. We have also made several changes to support the automatic build bot, and as part of this, we have begun showing CAUTION message dialogs in AUTHORING mode. Eric Kidd (6): Lazy loading: Improve a misleading error message Buildbot support: Add git:force_clean Rake task Move %static-node-trampoline% .responds-to? next to .method-missing Buildbot support: Rake tasks for full and quick build prep Show caution dialog in AUTHORING mode Make .responds-to? always return a boolean value Eric Kidd & Brian Campbell (3): AudioStream: Correctly preserve samples played across pause/resume Quake 2: Add support for teleporting when developing levels FileSystem.cpp: Remove unexpected errno cautions 0.5.15.1 - 8 Sep 2008 This release is simply a build fix for the 0.5.15 release, though it contains a few other minor changes that went in between the 0.5.15 release and now. The build fix is to reduce LOG_APAGE_SIZE back down to 16, since 17 causes the engine to crash on some computers. Brian Campbell (2): Decrease LOG_APAGE_SIZE to 16 after build failure Documentation: Update HACKING.txt to include a 'rake libs' step while... Eric Kidd (5): Mac build fix: Remove __attribute__ from TLogger::ExitWithError Code review: Explain how script-load-error works Code review: Explain how ModelFormat and Migrate work Build: Clean up default Rake tests for script projects Buildbot support: Display Caution messages on console 0.5.15 - 5 Sep 2008 This release consists of many small cleanups and bug fixes. There are a few API changes and improvements: - It is now possible to refer to static nodes anywhere in the program as /foo/bar (instead of @/foo/bar), even if they're not in scope. - DEFINE/P is once again part of the public API. - To access the state-db, you must require it: (require (lib "state-db.ss" "halyard")) - To run test suites in a Halyard script, use: rake halyard:test - You'll want to version control ignore rules for config/cached.conf. There is also extensive new support for running Halyard under Buildbot and similar command-line tools. To do access this mode, see the new 'halyard_command' function in Rake. Brian Campbell (8): Unit test framework: Display errors in order they occur Unit test framework: Clean up leftover temporary parent elements in... Implement simpe static node path syntax Save number of files loaded to an ignroable "cached configuration" file Save separate file counts for lazy and non-lazy loads Editor: Load syntax highlighting information even when first load fails Code review: Fix migration code and ambiguous if statement braces Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard Eric Kidd (12): Cleanup: Remove exclamation point from organization name Cleanup: Add test cases, comment fixes for measure-text Cleanup: Fix %browser% test cases to work without network Move state-db API into separate file Bug fix: Re-export define/p Increase LOG_APAGE_SIZE to 17 for Windows XP Bug fix: Clean up interactions between EXIT-SCRIPT and JUMP Buildbot support: Add SUCCESS? parameter to exit-script Buildbot support: Add support for running in command-line mode Buildbot support: Make errors accessible in COMMAND_LINE mode Buildbot support: Make test failure messages available to scripts Lazy loading: Don't lose track of current card after errors William Scavone (1): New Halyard icons to replace the old Tamale icons 0.5.14 - 29 August 2008 Halyard now supports lazy loading! To enable it, open a listener and type: (set! (lazy-loading-enabled?) #t) Then, reload your script and keep an eye on the status bar at the bottom of the window. You should see messages of the form "Loaded /features." whenever a module gets loaded. If you think the lazy loader is getting a little too eager, and loading huge files too soon, please see the Debug.log for details on why certain modules were loaded. And if you discover any bugs, please get in touch with Eric immediately, and he'll investigate them--this code is still very experimental. Other interesting changes: - The Debug.log is back! - The "Open" dialog box now defaults usefully once again. - The (set-status-text! msg) function may be used to display debugging information at the bottom of the developer-mode window. Please don't use this when loading code, because it will make it impossible to see important information from the engine. Brian Campbell (3): Cleanup Rakefile and build process Walk up directory hierarchy to guess at appropriate current directory Demand loading: Code review comment updates and fixes Eric Kidd (23): Demand loading: Register groups with engine, not just cards Demand loading: Remove extra RegisterGroupMember layer Fix boot.rb to work in projects with engine/src directory Give a better error when attempting to show an invisible Widget Simplify Widget::Show error-handling further Demand loading: Rename script-paths.ss -> external-nodes.ss Demand loading: Add *enable-demand-loading?* variable Cleanup: Make trace.ss into a private API Demand loading: Detect nodes declared in wrong file Demand loading: Implement rudimentary demand loader Demand loading: Add GroupItemData for mCardsID Demand loading: Change register-group-member parameters for clarity Demand loading: Make find-static-node work on external-group children Demand loading: Show "open folder" controls for unloaded groups Demand loading: Load groups when opened in GUI Demand loading: Detect confusion of cards and groups Demand loading: Prevent adding children to unloaded groups Demand loading: Show loading information using SetStatusText Demand loading: Fix crash when %kernel-valid-card? triggers load Demand loading: Rename to "lazy loading" Lazy loading: Don't save *.ss file count when lazy loading enabled Lazy loading: Address code review comments on ProgramTree Lazy loading: Rename mIsLazyLoadingPotentiallyEnabled 0.5.13 - 25 August 2008 In the past, several internal Halyard APIs have actually been exported to the public. In this release, we make those APIs private. The new rule: Anything in the halyard/ collection is a public API[1]. Anything in halyard/private/ is for internal use only, and it may change drastically without warning. We also loosen up a type constraint on %BROWSER% .PATH. If you find that you need to use APIs from halyard/private/, please let us know, and we'll make a new release shortly. [1] You may want to look at the top of halyard/private/api.ss for a list of suspicious and deprecated functions. We probably won't revist these until Halyard 0.7. Eric Kidd (8): Test fix: Make sure we actually run all Halyard test cases Improve error message for (@/static-node .instance-of? %node%) Update to latest wxquake2, with new README-WX.txt and license files Remove unused build configurations Move private *.ss files to halyard/private Hide private nodes.ss and kernel.ss APIs Allow use of PLT paths with %browser% Bug fix: Load built-in-identifiers.ss from correct directory 0.5.12 - 30 July 2008 This release makes several API changes intended to support demand-loading. In particular, the file start.ss must now be wrapped in a module declaration, and REQUIRE statements should be replaced by appropriate EXTERNAL-GROUP and EXTERNAL-CARD statements. For example, an old-style start.ss might look like this: (require (file "example.ss")) (require (file "example/card.ss")) A new-style start.ss would look like this: (module start (lib "halyard.ss" "halyard") (external-group /example) ) The second line in the original file would move to the end of example.ss, where it would become: ;; In example.ss. (external-card /example/card) All non-group, non-card *.ss files should move into an appropriate subdirectory of collects. You should continue to load these files using REQUIRE, as before. Eric Kidd (4): Turn start.ss into a regular module Repository fix: Delete bogus lower-case "common/test/scripts" tree Implement Perl-inspired SPLIT and JOIN functions Add external-group and external-card forms for loading scripts 0.5.11 - 28 July 2008 This release substantially reorganizes the directory structure of a Halyard script in several important ways. Some highlights: Graphics -> local/graphics Graphics/script -> local/branding Graphics/cursors -> local/cursors LocalMedia -> local/media Media -> streaming/media HTML -> local/html Runtime/* -> engine/win32/runtime/collects/* (our stuff) Runtime/* -> engine/win32/runtime/plt/* (PLT's stuff) Fonts -> engine/win32/fonts *.{exe,dll} -> engine/win32/*.{exe,dll} Scripts/* -> scripts/* (groups and cards) Scripts/* -> collects/$COLLECT/* (libraries) (temp files) -> temp/* developer.prefs -> config/developer.prefs See http://iml.dartmouth.edu/halyard/wiki/index.php/Porting_notes for a complete list of renamed directories. Several minor APIs have also changed: 1. ABSTRACT-PATH->NATIVE-PATH is no longer available (use BUILD-PATH). 2. MAKE-NATIVE-PATH is no longer available (use RESOLVE-CONTENT-PATH, but be careful--it generally only works on files, not directories). 3. Some uses of CURRENT-DIRECTORY will need to be replaced with RUNTIME-DIRECTORY. Most other uses of CURRENT-DIRECTORY will need to be reviewed carefully. We now provide a script-level collects/ directory, which may optionally contain content files and Ruby support code: collects/$NAME/_halyard local/graphics - Graphics local/media - Media files local/* - Etc. ruby/libs - Ruby libraries ruby/tasks/*.rake - Rake tasks With this layout, referring to a graphics file named $NAME/foo.png will actually look in collects/$NAME/_halyard/local/graphics/foo.png. Ruby code may also be stored at the top-level of a script: ruby/libs ruby/tasks/*.rake You will want to grab a copy of halyard/test/config/boot.rb and copy it $HALYARD_SCRIPT/config/boot.rb. Once you've done that, you should begin every Ruby script in your project with a line like the following: require 'config/boot' Your Rakefile should also contain the following line: require 'halyard/rake' Once you do this, Ruby libraries and tasks/*.rake files will automatically be made available. Known regression: The code which automatically decides which application.halyard file is associated with the current engine is not working right now. Brian Campbell (1): Pass correct parameters in RECTANGLE-OUTLINE node helper Eric Kidd (27): reorg: Media -> streaming/media, LocalMedia -> local/media reorg: Remove unused FileSystem::Get*Directory APIs reorg: Graphics/script -> local/branding reorg: Graphics -> local/graphics reorg: local/graphics/cursors -> local/cursors reorg: HTML -> local/html reorg: definitions.sqlite3, user.conf -> temp/ reorg: developer.prefs -> config/ reorg: Scripts/ -> collects/halyard-test/ reorg: Name files in Scripts/ after the groups they contain Ignore .stg-edit.txt reorg: Scripts -> scripts reorg: TestScripts -> test-scripts Bug fix: Don't create temp directory if it already exists reorg: Move Runtime/, Fonts/ to new runtime/ directory reorg: Remove FileSystem::GetScriptsDirectoryName Bug fix: Don't attempt to open user.conf without a ScriptEditor Test fix: Make halyard-fixtures-dir look in the right place reorg: Fix ScriptEditorDB to scan runtime/ directory reorg: Mac: Add support for new runtime/ directory location reorg: Update buildfile.rb to know about new layout reorg: Centralize TODO files in tree, and add REORG-TODO.txt reorg: Merge REORG-TODO.txt from Windows system reorg: tools/buildscript -> runtime/ruby/lib/buildscript reorg: Allow Halyard and collects to provide Ruby libs & Rake tasks reorg: Allow content to be stored in collects/*/_halyard directories Merge branch 'chaining' 0.5.10-chaining2 - 25 July 2008 This release fixes a few small bugs in the -chaining1 release, related to the script editor. Brian Campbell (3): Reorganize and touch up documentation in tags.ss Add syntax tagger for DEFPRIMCLASS, and fix tagger for DEFSUBST editor: Fix crash when file in saved active tab no longer exists 0.5.10-chaining1 - 23 July 2008 This release is intended for one new feature: the chaining of method names. This new syntax allows us to write (object .foo.bar.baz 10) instead of (((object .foo) .bar) .baz 10), which should make many uses of the new syntax much more pleasant. This is relased off of a branch, because there is significant file reorganization occuring on master which we don't want to land until it is done. Eric Kidd (4): Allow (obj .foo.bar arg1 arg2)-style method calls Add command-line test driver file Added begin/var support to λ special form code review: clean up regex, add unit tests 0.5.10 - 11 July 2008 In this release, we merge the experimental sandbox branch. Descriptions of those changes can be found in the -sandbox1 and 2 releases mentioned below. In addition, we have rewritten the syntax highlighting and autocompletion to work off of the same database as meta-. and the help strings. This means that a few things may highlight and indent differently. In particular, macros can no longer expand to the DEFINE-SYNTAX-INDENT form, but instead you must include that information in a syntax tagger as seen in Runtime/halyard/tags.ss. Also, some functions and macros that were picked up by the old system may be missed, but any that were can be added back in using the appropriate syntax taggers and define-syntax-indent forms. Eric Kidd (8): buildfile.rb: Allow version numbers of the form "v0.5.9-foo1" buildfile.rb: Document the need to install Cygwin's zip Merge branch 'sandbox' Retain more syntax information in begin/var sqlite3_plus: Add an 'isnull' member function Store identifier and indentation information in ScriptEditorDB Fix assorted define-syntax-tagger problems ScriptEditorDB: Docs & delete indentation information when file changes 0.5.9-sandbox2 - 8 May 2008 This release fixes all known issues in the "sandbox" branch. Particular thanks go to Matthew Flatt, who helped us fix an out-of-memory crash during script reloads. Note that the engine may still crash if you try to allocate more than ~1.6G on the Scheme heap. This may happen if you try to compile very large programs with errortrace turned on. If this occurs, simply restart the engine and try again--compilation will resume where it left off. Eric Kidd (5): Increase stack size from 1000 to 64000 Modify progress bar to work with new sandboxed loader Compile all *.ss files to *.zo in a single pass Mac: Disable compilation manager when it can't be used Fix out-of-memory crash during script reload 0.5.9-sandbox1 - 6 May 2008 This is an experimental release of Halyard using Eli Barzilay's sandbox.ss module. It should have full support for backtraces in error dialogs. However, this release also contains at least one nasty crashing bug in GC_mark (and/or mark_struct_val) during reloads. To trigger it, turn on errortrace support, delete all *.zo files, and reload the script. Other limitations: * Errortrace won't work on the Mac, because you generally can't write to PLT's collections directory under MacPorts. * It takes at least two reloads to get everything properly compiled. We're still debugging this. * The progress bar is completely broken, because we're not getting any callbacks from cm.ss when we load an already-compiled file. We're pushing this out as a "-sandbox1" release to allow more testing before we merge it back to the "master" branch. Also included is Brian's new code for saving open tabs in the editor. Brian Campbell (2): Editor: Save open tabs and currently active tab Mention Mac build instructions in HACKING.txt Eric Kidd (9): Modify loader to use sandbox.ss instead of custom code MacPorts: Replace bogus collects-dir value with addon-dir Replace wrapped load/use-compiled-handler with callback buildfile.rb fix: Add svn:ignore properties correctly Display backtraces in error dialogs Initialize errortrace before compilation manager Set up the compilation manager and errortrace in correct order Add support for version numbers containing "-pre" and "-rc" Merge branch 'master' into sandbox 0.5.9 - 5 May 2008 The memory leak is fixed! This makes Halyard substantially more usable for day-to-day development. Many thanks to Matthew Flatt for debugging this long-standing problem. Other highlights: * %text-box% elements now default :clickable-where-transparent? to #f. * When "Show Element Borders" is turned on, element names will be displayed in the status bar. * Our tarballs now include a "./configure" script. Eric Kidd (9): Ignore Xcode-related files Performance: Work around Swindle-related memory leak wxMac: Fix crash in mTree->SetItemBold autotools: Add autogen.sh from gnome-common Allow loader.ss to use (require ...) paths Show element names in status bar when borders are displayed Run ./autogen.sh before making release tarballs Ignore "compiled" directories when releasing to Subversion Build fix: Insert missing semicolon 0.5.8 - 1 May 2008 This version of Halyard features significantly improved Mac support. The following features now work: * The script editor (except for search and replace) * QuickTime (although the Mac VP3 codecs have issues) * Error dialogs * Toolbar icons (although some disappear when clicked) Also of note: * The Windows engine now uses FreeType 2.3.5. * The QuickTime layer has been partially restructured, and is now compiled against the QT 7.3 SDK instead of the QT 6 SDK * We export %pref and set-%pref! from data-file.ss to work around macro hygiene issues. * There is now a centralized benchmarking card in halyard/test. * Type-checking of mizzen objects is now much faster. Please keep your eyes open for any regressions, and let us know if you find any. Brian Campbell (13): wxMac: Add Xcode project for debugging Halyard Update Makefiles to support building in separate directories paths: Remove extraneous debug statements Add benchmarks for different types of elements wxMac: Fix assertion failure when creating 0-area DrawingArea wxMac: Fix assertion failure when drawing elements partly off-screen wxMac: Wrap strings in wxLogTrace calls appropriately Properly convert from wxChar * to char * in AppLog wxMac: Update the script editor to work with vanilla wxWidgets 2.8 Fix browser test cases that fail on wxMac Export %pref and set-%pref! from data-file.ss Increase toolbar bitmaps to 16x16 pixels, and fix icon transparency Convert toolbar bitmaps and editor icons to XPMs Eric Kidd (25): autotools: Enable precompiled headers QuickTime: Move TQTPrimitives into TQTMovie and reorganize Merge branch 'portability' Replace /performance/dispatch card with interface to benchmark suite wxMac: Merge APP_PLATFORM_MACINTOSH with APP_PLATFORM_OTHER Update application.halyard Update to modern wxConfigBase API wxMac: Enable CONFIG_LOCATION_BOX_IS_COMBO Performance: Optimize %class% .subclass-of? Win32 build fix: 'and', 'not', incorrect __WXWIN__ conditional Use non-consing form of hash-table-get when possible GC bug fix: Actually register variables and arrays correctly Performance: Warn if we're leaking TSchemePtr objects Build fix: Don't call wxBitmap::IsOk() under wxWidgets 2.6 Warning fixes: Clean up VorbisFile.cpp under MSVC++ Move GUI error-dialog code into HalyardApp wxMac: Implement portable error dialog QuickTime: Upgrade to QT 7.3 SDK and remove FSSpec code QuickTime: Initial Macintosh support wxMac: Always use full-width hex strings for colors Warning fix: Manually convert result of scheme_eq to bool autotools: Make ./configure issue an error if we're missing libraries FreeType: Upgrade to v2.3.5 on Win32 Build fix: Correct dependencies for FreeType Performance: Add benchmark for calling a primitive 0.5.7 - 22 April 2008 This release includes a highly-experimental port to Mac OS X. Video, audio, transitions and the script editor don't work yet, but much of the core engine now runs. Brian also has begun work on a new path system. So far, this requires two changes to existing code: 1) Card and group names now begin with "/". 2) You may unambiguously refer to a path using an absolute name. For example, "@index" still searches for the nearest node named "index" (using the standard acquisition rules), but "@/index" will always find the top-level card named index. This is just the start of the new path system; expect the rest of the of changes in the next release or two. Also of interest: (jump-current) now actually calls (jump ...). Brian Campbell (11): paths: Update node full names to include leading slashes paths: Add unit tests for existing path system paths: Add support for absolute paths, beginning with / buildfile.rb: Re-apply changes from 347d6dc6b6 buildfile.rb: Make gpgv.exe executable Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard Merge branch 'master' into paths wxMac: Fixes to compile against Leopard-bundled wxWidgets wxMac: Clear stage background before displaying splash screen paths: Fix .resolve-path errors to actually mention the path name Merge branch 'paths' Eric Kidd (41): autotools: Add autoconf macros for finding wxWidgets autotools: Check for presence of wxWidgets and create empty Makefile autotools: Rename TestAll to CommonTest for consistency with Windows Add CommonTest to .gitignore wxMac: Start modifying code to build with wxMac 2.8 Unicode wxMac: Regenerate *.xpm files from *.ico and *.bmp files wxMac: Compile CustomTreeCtrl and DirtyList wxMac: Compile wx/src/dlg subdirectory wxMac: Compile DocNotebook and Downloader wxMac: Compile DrawingArea DrawingArea: Move conditional code into top-level functions wxMac: Compile DrawingAreaOpt wxMac: Compile remaining classes beginning with "D" and "E" wxMac: Start work on FancyCrashReporter wxMac: Start work on HalyardApp wxMac: Compile FancyStatusBar, GuiUtil and HistoryText wxMac: Compile classes beginning with "I" and "L" wxMac: Compile MediaElement, MovieElement and MovieWindow wxMac: Compile Overlay, ProgramTree and SashFrame wxMac: Compile Stage, StageAccessible and StageFrame wxMac: Compile TestHarness, Timecoder, ToolWindow, Transition wxMac: Compile TWxPrimitives wxMac: Compile Widget and Zone wxMac: Breaks link: Start trying to link Halyard wxMac: Compile application.xrc wxMac: Conditionalize FancyCrashReporter and BrowserElementIE wxMac: Conditionalize ScriptEditor wxMac: It compiles! (But it doesn't run.) wxMac: Preliminary sketch of event loop wxMac: Don't set Stage background before Create() wxMac: Call wxEventLoopActivator correctly wxMSW build fix: Preprocessor definitions and const removal wxMac: Only use new event loop on tested platforms wxMac: Create proper bundle directory (and it runs!) Remove "Show Debug Log..." menu item wxMac: Use standard menu item IDs autotools: Require wxWidgets 2.8.7 Build fix: Replace HALYARD_EXIT with wxID_EXIT in ScriptEditor wxMac QuickTime: Move uint32, etc., into Halyard namespace Build fix: Convert remaining int16 -> Halyard::int16 Make (jump-current) actually call (jump ...) 0.5.6 - 17 April 2008 This build fixes a number of serious issues in 0.5.5: * The last release failed to build, because certain essential PLT libraries were not copied from libs/plt/collects to test/Runtime. * When a script failed to load, it left behind dirty internal state in TSchemeInterpreter, causing subsequent reloads to fail with an error in DefStyle. This build addresses both those bugs, and puts into place new tools to prevent future mistakes of this sort: * When making a build, we now run all of our unit tests, including both those in CommonTest, and the various %test-suite% cards in halyard/test. * It is now possible to make test builds without tagging a release. Type "ruby -I tools/buildscript buildfile.rb " to make a build. Here, can either be a version number like "v0.5.5", a branch name like "master", or an SHA1 name. To run the GUI-based unit tests from the command-line, type: cd test ../../Win32/Bin/Halyard_d.exe -e "(command-line-test-driver)" . We also now provide a single, centralized "tests" sequence containing all the automatic test cards in the program. API changes include: tests: This is a new top-level sequence which you should use as a parent for all %test-suite% cards. To populate this with a set of standard tests, require (lib "tests.ss" "halyard"). run-all-test-suites: Call this function to run all the cards in "tests". tests/run-all: Click on this card to call run-all-test-suites. fixture-dir -> halyard-fixture-dir: This function only works for code in Halyard module, so rename it appropriately. $mizzen-tests: All the test cases defined by mizzen. Eric Kidd (12): Update buildfile.rb for use with PLT v372 Rakefile: Include PLT's net, planet and xml collections Put all test suites under "tests/" sequence and rationalize Report SchemeStructToTValue failures sooner Bug fix: Clear bucket map properly after a failed reload Support for running unit tests from command line Test fix: Restructure CommonTest to always have a TSchemeInterpreter Bug fix: Change default value of *running-all-tests?* to #t Rakefile: Run all cards in "tests" as part of test suite buildfile.rb: Support building from arbitrary tags Build fix: Use global $untagged_build variable in buildscript.rb Test fix: Use absolute paths when setting up interpreter 0.5.5 - 15 April 2008 [This build has a number of bugs, and we never released binaries for it.] This version of Halyard is based on PLT Scheme v372, and uses the new 3m garbage collector. No major script-level changes should be necessary. However, you must do several things: * Make sure that you no longer have libmzgc2*.dll or libmzsch2*.dll in any of your programs. These files are obsolete. * Delete any compiled/ directories from 0.5.4 or earlier * If you're running halyard/test, make sure that you only have two subdirectories in test/Runtime: mizzen and halyard. You can delete other directories by running 'make clean_scheme'. Forgetting to clean up these directories will make the engine crash as soon as you try to open a script. Peformance has improved 50-200% on various benchmarks, and we hope to do even better in future releases. Other major highlights include a bundled copy of the build system (in tools/buildscript) and support for building all of halyard/Common under Mac OS X using MacPorts. Brian Campbell (10): buildfile.rb: Use svn+ssh URLs instead of https for tagging binaries test: Remove broken and inappropriate test cases Fix HACKING.txt to include correct command for pushing tags and master ax_lib_mzscheme: Detect PLT installed via MacPorts buildfile.rb: Don't include compiled directories in SVN checkin or ZIP Add buildscript as a submodule Remove deprecated TEST-ELEMENTS features Change Tamale->Halyard in animate-doc.txt HACKING.txt: Correct build instructions loader.ss: Add more extensive comments on the path setup Eric Kidd (39): autotools: Add macro to check for PLT Scheme libraries Fix nasty GC leak in TSchemePtr.h Build Common/lang/scheme (not yet linkable with gcc, though) ax_lib_mzscheme: Use -F for framework search path, not -L ScriptEditorDB: Get current time correctly in test case Disable TRUST-PRECOMPILED support before upgrading PLT Common: Build lang/scheme and re-enable all test cases autotools: Make sure we build all of Common Test case fix: Attempt to find a portable way of updating timestamps Build fix: Make ScriptEditorDB use native_file_string Breaks build: Modify configure.ac to look for PLT v372 Untested: Rewrite TSchemePtr to use scheme_malloc_immobile_box PLT v372: Make the code compile (but not actually work) TSchemePtr: Add documentation suggested in code review Pass __gc_var_stack__ to scheme_set_stack_base Add an experimental C++ API for interfacing with PLT's precise GC Explain GC safety assumption made by TSchemePtr's constructor Begin converting code to use new GC API FindBucket: Use stable identifiers with std::map, not movable pointers Document all the patches we had applied to PLT v360 TSchemeReg: Fix assertion that checks value of mOffset Make TSchemeInterpreter::Eq call scheme_eq Remove in-tree copies of standard PLT collections Look for PLT collections in standard locations Document interaction between scheme_signal_error and MZ_GC_UNREG Document difference between SCHEME_SYM_VAL and SCHEME_BYTE_STR_VAL Fix symbol-name lookup bug ('make check' now runs!) Makefile: Add 'make stress' target to test PLT v372 Switch libs/plt to v372 Search for standard PLT library collections in several places PLT v372: Rudimentary support for building with MSVC++ Benchmarking results: 50% to 200% faster than PLT v360 application.halyard: Update number of files in project Build PLT v372 using MS Visual Studio Re-enable compilation of *.ss files Merge branch 'plt-v372' Rakefile: Add clean_scheme target Restore support for trusting precompiled *.zo files Portability: Test for always-treat-zo-and-so-as-newer correctly 0.5.4 - 9 April 2008 Eric has begun work to port Common to g++ under Mac OS X, using MacPorts libraries and GNU autotools. This work should also be relevant for any future Linux porting work. Other work: * Make halyard-test run again (bug introduced in 0.5.3) * Migrated to Git * Updated build system for Git * Break release tarballs into source, libs, and media * Benchmarking libraries for mizzen * Replace Ogg Theora test card with "Duck and Cover" version Brian Campbell (6): Rakefile: remove tag AS=x.y.z command Add mizzen unit tests to command line test runner buildfile.rb: Add support for doing builds from Git Update HACKING.txt to reflect current Git workflow and build procedure Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard Merge branch 'master' of ssh://imlsrc.dartmouth.edu/var/lib/git/halyard Eric Kidd (32): Make halyard-test run again Ignore "compiled" directories autotools: Update to modern versions, and build libs/sha1 Make CommonHeaders.h compile with GCC autotools: Add macros from autoconf-archive ax_boost_filesystem: Switch to C++ before calling AC_CHECK_LIB autotools: Check for some of the libraries we need autotools: Add macro to check for __attribute__ support Common: Some unit tests now pass on MacOS X Common: Build TTextTransform, Typography, TVectorDiff, TStyleSheet Common: Build CaptionList and TTextConv Common: Build TDeveloperPrefs and CommandLine Build fix: Replace preprocessor error in CommandLine.cpp with exception autotools: Some more notes on the libraries and versions we need Common: Make TestAll run on MacOS X with some tests disabled Common: Small portability fixes for TValue.cpp Added 'make check' target to run TestAll autotools: More version information for libs/ Benchmarking library for mizzen Add tools/git-ls-submodules application.halyard: Update number of Scheme files in test script Add Ogg versions of "Bert the Turtle" and "Quackery" videos Add standard .gitignore entires to submodules Replace Ogg Theora test card with "Duck and Cover" version Replace implicit TValue conversions with tvalue_cast(...) g++: Specialize tvalue_cast from within Halyard namespace Update HACKING.txt for current git setup Remove REGISTER_PRIMITIVE forward-declaration grik Common: Build files depending on TValue.cpp autotools: Build libs/sqlite3-plus Common: Build ScriptEditorDB.cpp and fix non-virtual destructor bugs Rough draft of a CREDITS.txt file 0.5.3 - 3 April 2008 - brian, emk, tryon [This build has a number of bugs. In particular, halyard/test does not run.] In this release, we break our object model out into its own collection, mizzen. This allows it to be run in MzScheme or DrScheme, independent of the engine. This shouldn't affect script level code at all, but it means that the Runtime/halyard code is slightly rearranged. * (lib "language.ss" "halyard") -> (lib "mizzen.ss" "mizzen") * In many cases, util.ss no longer needs to be required, as it is provided by default by mizzen.ss. * You can run mizzen code in MzScheme or DrScheme by ensurign that mizzen is in your collections path, and creating modules using the language (lib "mizzen.ss" "mizzen"). * There is now a text-based test runner, that you run by calling (run-tests (list %test1% %test2%)). mizzen: Add a bare-bones README.txt mizzen: Use relative paths instead of library paths in includes mizeen: Rename language.ss to mizzen.ss Runtime: Addd prologues to scheme files in halyard and mizzen mizzen: Update fix-prologues.pl to understand Scheme files mizzen: Add a copy of the LGPL to mizzen direcotry mizzen: Add text mentioning mizzen in LICENSE.txt mizzen: Build and release a mizzen tarball Move ruby-objects documentation diagrams to mizzen folder mizzen: Move ruby-objects-test.ss into mizzen mizzen: Move unit test system test cases into mizzen mizzen: Text-based test case runner mizzen: Split unit test system into mizzen and halyard components mizzen: Move FN from halyard/api.ss to mizzen/util.ss mizzen: Provide various utilities from language.ss mizzen: Revert Swindle provide patch, moving provide swizzling into mizzen miszen: Move ruby-objects.ss, language.ss, and dependencies into mizzen mizzen: Split util.ss into engine dependent and independent portions Sequencing of cards has been completely redesigned. This is a work in progress, and further changes are to be expected in the next release. * There are no longer separate GROUP and SEQUENCE declarations; whether or not something is a sequence is a class variable (which means it can also be set on the static node). * Groups default to being ordered, but you can specify that they are unordered by passing :ordered? #f when declaring them. * The algorithm for computing next and previous cards has also changed. It should now be more robust, and be able to handle empty sequences. * You can now call .card-next and .card-prev on any static or running card, to find the next or previous card that should be jumped to. Examples: (sequence foo/bar/baz (%bing%)) -> (group foo/bar/baz (%bing%)) (group foo/bar/baz (%bing%)) -> (group foo/bar/baz (%bing% :ordered? #f)) Substitutions you will need to make when porting: sequence -> group %card-sequence% -> %card-group% card-sequence? -> card-group? + .ordered? Rewrite .FIND-NEXT & .FIND-PREV on %card-group% using new support code Add methods to %group-member% to return flattened lists of group members Adding pass-through methods for .card-next and .card-prev Add .card-next and .card-prev as methods on the static %card% class Merge %card-sequence% into %card-group% card-sequence.ss: Remove local wrapper functions Halyard has switched to a standard of always using LF delimited lines, instead of some files being LF delimited and some being CRLF delimited. The Scintilla editor has been updated to handle this appropriately, and we have added scripts for audition to ensure that no files wind up with a mix of line endings. Fix line endings in test-elements.ss Convert CRLF to LF where obviously safe Run checkfiles in tools directory Fix files with mixed CRLF / LF endings Default to using LF line endings in empty buffers Automatically convert all line endings to consistent style when saving Add line-ending style detection to script editor Script to call checkfiles for our *.ss, *.cpp and *.h files Fixed inconsistent EOL characters in nodes.ss Add tools/checkfiles, which performs style checks Strip extra CR characters from halyard-unit-test.ss Add a new mechanism for writing unit tests involving elements. * %element-test-case% class for tests involving elements * %element-test-suite% card class for running tests involving elements, including an interface for pulling up the elements created by one test at time. * TEST-ELEMENTS is now deprecated, and will be removed in the next release. Add test case for .RUN-TEST-METHOD-INNER Better bounds for temporary element parent in %element-test-case% Factor BELOW and TO-THE-RIGHT-OF into elements.ss Allow interacting with unit test elements manually Move TEST-ELEMENTS and support into separate file Add a simple API for proxying initializer keywords and methods to a child element: (define-class %foo-wrapper% (%box%) (proxy-initialize-and-methods foo %foo%) (setup (.add-child-initializer! :message "Hello, world!") (.create-child-element))) And a few helper methods: symbol->keyword Convert 'foo to :foo setter-name? Return true for symbols of form 'set-foo! setter-name->keyword Convert symbols of form 'set-foo! to :foo rect-shape Eqv to (move-rect-left-top-to r (point 0 0)) Code review cleanups for child element proxying Proxy initializer keywords and methods to child elements Switched to using SYNTAX-PARAMETERIZE to handle SELF and SUPER instead of the old MAKE-CAPTURE-VAR/ELLIPSES system. This has two main effects: 1) It makes it much easier to define macros that expand into METHOD declarations attached to a particular object. Instead of having to use SYNTAX-CASE and MAKE-SELF, you can simply write the obvious SYNTAX-RULES expansion. 2) It is possible to accidentally shadow SELF without realizing it. If you write the following: (let [[self 'hello]] (instance-exec foo (method () (send self 'bar)))) you will get an error, as it will be trying to send a message to 'hello, not foo. SELF is only ever bound in the top level, and while METHOD parameterizes it at expansion time to a different value, if the original binding is shadowed (as in the example), you will still only see the inner binding. Use SYNTAX-PARAMETERIZE to 'bind' SELF and SUPER instead of MAKE-SELF Fix TEST-ELEMENTS to have the appropriate SELF in scope Several bugfixes in the Scintilla lexer and auto-indenter. editor: Start lexing at line boundaries when indenting Lex selection before auto-indenting Fix Scintalla off-by-one error when lexing |# Various build and Git cleanups. Add ignore lines for gpgv.exe, baseq2 and testq2, and gc.log Refactor .gitignore to speed up 'git status' Rakefile: Removed fallback code for missing termios Remove $(WXWIN) environment variable Rename and open-source release cleanup. Replace outdated LICENSE.txt and README in halyard/test Remove last remaining reference to 5L from test/Runtime/halyard Rename 5L-Loader -> loader Rename #%fivel-engine -> #%engine-primitives Bug fixes. Allow whitespace-only strings to be drawn into 0-width boxes Fix failing errortrace test case 0.5.2 - 17 March 2008 - emk, brian * F#3028: Port unit test system to new object model. - (define-test-case () ...) -> (define-class %foo% (%test-case%) ...) - [[slot1 val1] [slot2 val2] ...] -> (attr slot1 val1 :writable? #t) (attr slot2 val2 :writable? #t) ... - (slot-name self) -> (.slot-name) - (setup ...) -> (setup-test ...) - (teardown ...) -> (teardown-test ...) 0.5.1 - 12 March 2008 - emk, brian * F#1856: Further rename work, including: - tamale-unit.ss is now halyard-unit.ss. - Fixed name in LICENSE.txt to refer to Halyard. - Various other edits to Halyard in strings and comments. * F#2620: Renamed SEND% -> SEND, exported it, and removed .SEND. 0.5.0 - 11 March 2008 - tryon, emk, brian Renaming Tamale to Halyard (F#1856): * The executable Tamale*.exe is now Halyard*.exe. * The string "TamaleProgram" in data.tam should now be "HalyardProgram". You'll need to update this in three places manually. * The file data.tam has been renamed to application.halyard. * The file 5L.prefs has been renamed to developer.prefs. * The file tamale.el has been renamed to halyard.el. * The directory Runtime/5L has been renamed to Runtime/halyard. - The file tamale.ss has been renamed to elements.ss. - The file 5l.ss has been renamed to halyard.ss. Individual changes: * F#1341: Cleaning up caution statements to Debug.log by correcting types on several primitives. String arguments passed in as symbols will now throw an error. * F#963: Fixed infinite-recursion in to-string when reporting an "unexpected node property initializer" message. Also added some other protective code. * F#1390: Implemented .SEAL-METHOD! and .UNSEAL-METHOD!, which are used to prevent accidental overriding of ATTRs. * F#2116: Refactored ATTR so that we can override getter and setter behavior without messing around with unsealing/resealing. * F#1402: Factored out various checks from the standard setter method so they can be reused more easily. * F#1390: Made ATTR raise an error if it will clobber any methods that are already defined. * F#1390: Do not allow ON handlers to be defined twice at the same level. * F#1980: Add meta-. support for ruby-style classes. * F#2518: Moved tamale_test into 5L/test. Note that this means we'll need to update various 'rake copy_runtime' targets in other projects. * Added support for iterating over assoc lists using (FOREACH [(CONS k v) alist] ...). * Added a reload timer to the Tamale GUI. * F#2207: Fixed the ScriptEditorDB to not scan .svn, CVS or compiled subdirectories of the source tree. * F#2207: Fixed the ScriptEditor to update the ScriptEditorDB only once per reload, rather than once per reload per tab. This also means that when opening a new tab, it doesn't rescan, so opening new tabs is faster. * F#2207: Optimized ScriptEditorDB update scan. * F#2211: Removed ancient WITH-HANDLERS statement left over from r11673, where Brian was fixing the restricted user account on XP support to give a more useful error (and hard-quit the engine). This code is no longer needed since we added support for Vista. * F#1360: Deleted extra (IDLE) in %kernel-run that caused occasional bogus card repaints. * F#2868: Removed ELEM-OR-NAME hack and deprecated.ss. * F#1909: Deprecated old WAIT function (with a :FRAME keyword argument) in favor of new .WAIT function (with an optional FRAME argument). This makes it possible to create proxy objects wrapping a movie. * F#979: MOUSE-ENTER and MOUSE-LEAVE are now sent only during event processing, and not during element creating and deletion. This is accomplished by delaying the recalculation of the current element. Note that this change may have programmer-visible consequences! There's some risk here, because this is a far-reaching change, and 5L/test may not stress every possible corner case. * F#1375: Added CHAR events to %edit-box%, and provided a very primitive protocol for handling tab order. - Added EVENT-MODIFIERS-AND-CHARACTER to make it easier to match specific key command sequences. - Backported a tab-handling fix from HEAD of wxWidgets. * F#2869: Deprecated NODE-FULL-NAME in favor of .FULL-NAME method. * F#2869: Separated out the path code into paths.ss. * F#2886: Fixed .FIND-ELEM and ELEM helper accessor to not use relative searches when the elements can't be found. * F#2901: Split off CARD-NEXT, CARD-PREV and %SEQUENCE% into a separate file to make them easier to redesign and clean up. * F#2316: Send .IDLE messages to all elements, even if they are nested within other elements. * F#2202: Removed < and > from editor's list of brace characters. * F#2993: Added better error reporting for bad number of arguments passed to a method. * F#2830: Added backtrace support using PLT's errortrace library. This slows the engine down considerably, so it is toggleable from the developer interface. There is a bug button that when selected, will cause the next reload to use the errortrace compiler. * F#2993: Include method names of methods not defined with DEF in arity errors. * F#2993: Include method names and appropriate arity error information for methods that are called using INSTANCE-EXEC or modified using ADVISE. Massive restructuring on the node system, to take much better advantage of ruby-style classes (F#928): * Removed DEFINE-ELEMENT-TEMPLATE, DEFINE-CARD-TEMPLATE, etc, in favor of just DEFINE-CLASS. * Changed syntax of CARD, GROUP, SEQUENCE, etc., to be a thin wrapper over DEFINE-CLASS. * Removed CREATE in favor of .NEW. * Removed ON in favor of DEF, including: - Add support for automagic registration of expensive events and mouse events on DEF. - DEF handlers do not propagate by default! Only predefined events continue to mimic the old behavior. - ON PROP-CHANGE has been removed, in favor of ordinary setter attributes. * IDLE events no longer take a (useless) parameter. * Removed various forms of SEND and PROP. * Split the existing node "run body" phase into separate SETUP and RUN phases. The former creates child elements, etc., and the later does things like playing movies that we would not actually want to happen in a future GUI editor. * It is now mandatory, when overriding SETUP, SETUP-FINISHED, RUN, and EXIT, to call (SUPER). This is enforced by the runtime. * Changed %nocreate protocol on %custom-element%. See the source. * The :SHAPE argument of %CUSTOM-ELEMENT% _must_ have an origin of 0,0. If you want the old behavior, use :BOUNDS instead. * Added new (SHAPE width height) function which calls (RECT 0 0 width height), for use with :SHAPE initializers (just to keep the code clean). * Added ADVISE special form, which works in a fashion similar to Lisp's DEFADVICE, but for object methods in ruby-objects.ss. * F#2368: Turned report-test-results into an object method so it can be overridden by code that wants to know whether the tests succeeded. * Updated tamale.el to syntax highlight and indent the new object model reasonably well. * Added AFTER-UPDATING macro which can be used to run a snippet of code whenever any one of several slots change. * Refactored event-handling code from nodes.ss to events.ss. * Added %node% .ALWAYS-PROPAGATE function which can be used to set up event-like propagation. * Added %node% .PROPAGATE function which can propagate one-off command-style messages without having to modify the methods on %node%. * Added %basic-button% .BUTTON-STATE, which returns the state symbol needed by .DRAW. * Added macros SETUP and RUN to abbreviate the common DEFs. These macros also include SUPER, to prevent the common error of leaving it out. * F#2517: Made SAFE-TO-STRING and %node% .INITIALIZE more robust in the presence of INITIALIZE methods which forget to call SUPER. * Added HAS-SLOT? macro for use within Ruby-style objects. * Added support for passing ":foo"-style keyword initializers to CARD and other macros, like before. * F#1392: Implemented nested ELEM form that can be used to statically-declare elements on a node. This means that far fewer calls to SETUP will be needed. * F#1392: ELEM now declares helper methods for accessing the elements it creates. * Replaced DRAW-BUTTON with DRAW + BUTTON-STATE combo on %basic-button%. * Added support for :COMMAND to %basic-button%. Feel free to use either :COMMAND or CLICK as suits your fancy. * F#2619: Added a DEFINE-NODE-HELPER function which abbreviates ELEM forms and their keyword arguments. * F#2619: Added %RECTANGLE-OUTLINE%. * F#2619: Added element definition helpers: BOX, CLICKABLE-ZONE, TEXT-BOX, TEXT, GRAPHIC, RECTANGLE, RECTANGLE-OUTLINE, SPRITE, BROWSER, EDIT-BOX, GEIGER-AUDIO, SINE-WAVE, VORBIS-AUDIO and MOVIE. * Added .INITIALIZE-SLOT as a convenient way to set up initialization for a bare slot. * The %ANSWER% class now uses a standard DRAW method. * Added FIND-ELEM to node to make it easier to find child elements that are not created using ELEM. * Removed: - LOAD-PATH-INTERNAL on %browser% - F#2320: EXTENDS-TEMPLATE? backward compatibility glue * Renamed: - ON SET-VOLUME! -> .SET-CHANNEL-VOLUME! on %movie% - POLYGON-BOUNDS -> POLYGON-BOUNDING-BOX - BOUNDS -> BOUNDING-BOX - ON BOUNDS -> .BOUNDING-BOX on %element% - .BOUNDS -> .DRAG-BOUNDS on %simple-draggable-object% - ATTR-VALUE -> VALUE - ATTR-DEFAULT -> DEFAULT - ON BUTTON-CLICKED (event) -> DEF (CLICK) on %basic-button% - BOX -> NEW-BOX - CLICKABLE-ZONE -> NEW-CLICKABLE-ZONE - TEXT-BOX -> NEW-TEXT-BOX - TEXT -> NEW-TEXT - GRAPHIC -> NEW-GRAPHIC - RECTANGLE -> NEW-RECTANGLE - RECTANGLE-OUTLINE -> NEW-RECTANGLE-OUTLINE - SPRITE -> NEW-SPRITE - BROWSER -> NEW-BROWSER - EDIT-BOX -> NEW-EDIT-BOX - GEIGER-AUDIO -> NEW-GEIGER-AUDIO - GEIGER-SYNTH -> NEW-GEIGER-SYNTH - SINE-WAVE -> NEW-SINE-WAVE - VORBIS-AUDIO -> NEW-VORBIS-AUDIO - MOVIE -> NEW-MOVIE 0.4.7 - 20 Dec 2007 - emk, brian * F#1145: We added support for clipping around movies and other heavyweight elements during Stage redraws, and during transitions. * F#940: Turn on wxCLIP_CHILDREN for StageBackground so we don't redraw the background color before redrawing the screen, which causes black flashes in full screen mode. 0.4.6 - 6 Dec 2007 - emk * F#1107: The UpdateInstaller now tries to cope with locked source files during the update. This is an attempt to work around some occasionally-seen problems on Vista. 0.4.5 - 5 Dec 2007 - emk Making this release earlier than planned, mostly so that I have new *.exe and *.dll files to help debug the updater problems in F#1107. * F#888: Include correct updater log in crash report. In general, the patch for F#888 was pretty broken. 0.4.4 - 3 Dec 2007 - emk * F#1108: Fixed UpdateInstaller to launch from correct directory. 0.4.3 - 2 Dec 2007 - emk More updater improvements. * F#878: Made DOWNLOAD-VERIFIED have the same overwrite behavior as DOWNLOAD, to fix a bug where an aborted update would prevent future updates from running. * F#889: Disabled logging in UpdateInstaller.exe during uninstallation. * F#1002: UpdateInstaller checks for bogus target directory. * F#879: Support for changing the official name of the program without changing the name of the directory where it stores preferences. * F#888: Added a SCRIPT-USER-LOCAL-DATA-DIRECTORY, and modified the updater to use it. This will keep us from storing huge files in a user's roaming profile. * F#1028: Added engine version number to update installer. * F#1026: Show a more appropriate message dialog if the update fails. 0.4.2 - 1 Dec 2007 - emk Preliminary support for digital signatures in the updater. * F#876: Fixed caption on "Update Installed" window. * F#878: Added GPG-SIGNATURE-VALID? function which calls out to a gpgv.exe file to perform signature validation. * F#878: Added SHA1 library from http://xyssl.org/code/source/sha1/ . * F#878: Added SHA1-FILE function in updater.ss. * F#878: Check signature on downloaded release.spec. * F#878: Check integrity of MANIFEST.* files. * F#878: Check integrity of content files in update. 0.4.1 - 30 Nov 2007 - emk, brian * #4779: Workaround for inappropriate calls to mouse-enter/mouse-leave: Don't try to redraw custom elements that don't exist. * F#857: Restored loading progress bar when TRUST-PRECOMPILED is present. * Added preliminary TortiseSVN bug tracker integration (svn properties only). * Fix reading in of data files that are corrupted so we don't crash the program and we still parse any valid lines after the corrupted line. * F#876: Converted UpdaterInstaller from command-line program to standalone Win32 program. There is still more work to be done here--the progress bar and error dialogs aren't hooked up yet--but it passes all our test suites. * F#876: Hooked up progress bar and error dialogs in UpdaterInstaller. * F#877: For security and correctness reasons, the udpater no longer relaunches the application under Vista. * F#876: Fixed new UpdateInstaller project to statically link against C runtime. * F#949: Include release.spec and updater log (if they exist) in crash reports. * F#949: UpdateInstaller now uses lock file when modifying the destination directory. * F#949: The engine now checks for the updater lock file before it attempts to load the script, and gives a nice error message. This won't help if the engine is corrupted by an update, but it will help with broken scripts and users who relaunch the engine too quickly. 0.4.0 - 14 Nov 2007 - emk * Added support for signing the *.exe and *.dll files produced by the build process. * Removed "(Development)" flag from version number. This is now a release engine. 0.3.20 - 13 Nov 2007 - emk * Do not attempt to run updater from restricted pre-Vista accounts, but do always run it on Vista. Added back old DIR-WRITABLE? function as UNSAFE-DIRECTORY-WRITEABLE?, with a warning message to be very careful about using it only on non-Vista systems. 0.3.19 - tryon, emk IMPORTANT: You must manually delete all compiled/ directories when upgrading to this engine--we had to modify PLT's startup.ss, which breaks anything compiled under the old version of startup.ss. * Removing tabs from tamale.el. Updating indentation for new functions. * Adding syntax WITH-TEMPORARY-PARENT * Adding form TEST-ELEMENTS to unit-testing framework. * The %BROWSER% element now has a SET!able location property. * CHECK-FILE now calls ERROR rather than THROW. * #4406: THROW replaced with ERROR everywhere except kernel.ss, where it has been renamed ERROR-WITH-EXTRA-DIALOG. * #4418: Making the PATH property on %GRAPHIC% settable. * Adding a more descriptive error message to %CLASS%.DEFINE-MESSAGE. * ASSERT-RAISES-MESSAGE now matches against a regexp instead of a string. Better Vista support: * Support for trusting precompiled *.zo files (for use with installer on Vista systems). To use, make sure your *.zo files are fully up-to-date, and create an empty file named "TRUST-PRECOMPILED" in the top-level of your program directory. NOT YET TESTED: * Added a manifest to UpdateInstaller, with requireAdministrator flag set. * Added a CommandLine::ExecAsync function which calls ShellExececute internally, so that we can use UAC privilege escalation. * Removed all the DIR-WRITABLE? code. It appears to be unwise to believe the return values on Vista, so I'm not going to leave it around to tempt people. * Moved the Updates directory into the user's script data directory, where the user is guaranteed to have write privileges. * We no longer attempt to copy UpdateInstaller.exe directly into program files, because we're not guaranteed to have sufficient privileges. Instead, we make a copy in a staging area, and let it copy itself in once it has obtained the necessary privileges. 0.3.18 - 01 Oct 2007 - emk * Re-ordered PLAYBACK-TIMER and MEDIA-FINISHED events so that the media-finished event always comes later. This appears to prevent crashes in elements that call delete in MEDIA-FINISHED, though there may still be related problems. 0.3.17 - 28 Sep 2007 - tryon, emk * Adding better error-handling to NODE-FULL-NAME. * Adding assertion ASSERT-RAISES-MESSAGE. * #3954: Change made to report incorrect rect value in %CUSTOM-ELEMENT%. * Added CHECK_THROWN_MESSAGE to TestCase.cpp. * Added better error-handling to TValue so that primitives will throw much more descriptive error messages. * Added REFRESH to ANIMATE, to eliminate stuttering caused by Windows' failure to send repaint events in a timely fashion. 0.3.16 - 21 Sep 2007 - tryon, emk * #3954: Adding checks to prevent %custom-element%s from having a negative-sized shape. * In ON-PROP-CHANGE, the veto function message now includes the vetoed value. * ASSERT-EQUAL changed to ASSERT-EQUALS; now uses EQUALS? internally. * Card template %TEST-SUITE% now displays the name of the current card. * #3954: Making the %CUSTOM-ELEMENT% shape-checking even better. * #4105: Correcting 'with' -> 'without' typo. * Added a "playback timer" system which can be used to notify a media object once a specified timecode has been reached. 0.3.15 - 14 Sep 2007 - emk, tryon * %EDIT-BOX% no longer focuses automatically. * All heavyweight elements (edit boxes, QuickTime movies, etc.) now have an ON FOCUS handler. This has been tested with %EDIT-BOX%. * New %EDIT-BOX% handlers: SET-TEXT!, SET-INSERTION-POINT!, SET-FOCUS!. * %EDIT-BOX% now receives ON TEXT-CHANGED events. These will be triggered whenever the contents of the edit box change. * #1707: Adding better error-handling if CREATE is passed a non-symbol. 0.3.14 - 5 Sep 2007 - emk, tryon * Major performance improvement: Ported ruby-objects.ss to use DEFINE-STRUCT instead of Swindle's DEFCLASS. This way, we implement our featureful-but-slow object system using the limited-but-fast struct support in PLT (instead of relying on Eli's own featureful-but-slow object system). * Class functions OBJECT? CLASS? INSTANCE-OF? SUBCLASS? now work on both Ruby and Swindle objects/classes. The old functions are available as SWINDLE-OBJECT? SWINDLE-CLASS? SWINDLE-INSTANCE-OF? SWINDLE-SUBCLASS?. * ATTR and node properties now support passing Ruby types to :TYPE. * Better print output for backtrace code. 0.3.13 - 4 Sep 2007 - emk * Added a cache to speed up method dispatch. * Better labeling for backtrace in logs. 0.3.12 - 30 Aug 2007 - emk, brian, tryon * Integrating new path system. - Copied over %node-path% class from tamale_test staging area. - Added ugly DEFINE-NODE-CLASS wrapper to help ease transition. - Added instance predicate support to DEFINE-NODE-CLASS. - @* now takes a string as an argument, and no longer supports :IF-NOT-FOUND. If you need the latter, see %NODE-PATH% RESOLVE-PATH. - @* now returns a %NODE-PATH% (and not an element). This node path may be used more or less everywhere an element could be used. - Added RESOLVE function, which will turn paths into nodes and pass nodes unchanged. Use this to resolve paths that might be used in inner loops or other performance-critical code. - Fixed performance regressions in animator library. * Porting nodes.ss to new object system - Removed ELEMENT special form. - Groups and sequences are now distinct parts of the class hierarchy. This may require rare code changes. - Added MAKE-RUBY-INSTANCE-OF?-PREDICATE function. - Fixed major bug in SEND%. - Added dubious .AUTO-DEFAULT-ATTR method. - Ported nodes.ss from Swindle to Ruby objects. The changes are huge and the new code is ugly and slow. In fact, we're basically emulating the old object system by kludgy metaclass programming on top of the new one. More changes planned very soon. - Removed DEFINE-NODE-CLASS macro. - Major performance regression on features/mask/light in tamale_test. - Moderate performance regression on features/animation. - CommonTest test suite is currently broken. - Replaced with %engine%. * Don't instantiate nodes until they're actually run - Removed remaining support for non-temporary element silliness. - Made sure that certain functions could only be called on running nodes. - FIND-NODE now takes an argument that specifies whether the node found is expected to be running or not (or whether we don't care). This API will change again soon. - Other node-finding functions also distinguish between running and non-running nodes. - Removed overridden versions of ENTER-NODE and EXIT-NODE, moving their features into various other places. - Redesigned RUN-CARD to have fewer dubious dependencies on the rest of nodes.ss in preparation for the class/instance split. - FIND-NODE now searches either a static node table or a running node table, depending on the value of its argument. - Replaced .AUTO-DEFAULT-ATTR with support for transparently defaulting ATTRs defined on classes after those classes are initialized. - Split ROOT-NODE into RUNNING-ROOT-NODE and STATIC-ROOT-NODE. - Modified DEFINE-NODE, CREATE, RUN-CARD, ENTER-NODE and EXIT-NODE to treat declared nodes as classes and instantiate them when they're run. - Removed now useless NODE-CHILDREN from API. Use .ELEMENTS or .MEMBERS instead. - Fixed bugs in .RESOLVE-PATH, CARD-PREV, CARD-NEXT and related methods. * Replaced old PROP implementation with ordinary ATTR members. * Improvements to new object model - Added :type argument to ATTR. * Performance tuning - Turned on optimization for PNG/bitmap/image subsystems in wxWidgets, even in debug builds. - Turned on optimizer for mzscheme, even in debug builds. * Top-level ON handlers must now be wrapped with the form (WITH-INSTANCE (ROOT-NODE) ...). * Updating HACKING.txt instructions. * Support for external captions. - Added CaptionList class with a basic parser. - Added support for embedded XML in captions. - Integrated external caption support with MediaElement and Scheme API. - Cleaned up MediaElement API. - Made sure CALL-NEXT-HANDLER is called everywhere it is needed. * Small refactoring in SashFrame. * Added a *NODE-DEFINED-HOOK* for backwards compatibility with a branch of 0.3.11 (which we haven't made yet). * Removed old PrevCardName function (which wasn't being used anymore). * Exported LAST-CARD-VISISTED to prevent people from messing with *engine*. * Fixed bug in EXTENDS-TEMPLATE?. * Added FIND-RUNNING-NODE and FIND-STATIC-NODE as public versions of FIND-NODE. * Added JUMP-CURRENT and better error handling for attempts to jump to a running node. * Exported RUBY-CLASS?. * Better error handling if the engine attempts to access a node of the wrong type. * Renamed %NODE% .STATE to %NODE% .NODE-STATE to prevent name collisions with template properties named STATE. * Fixed bug in DELETE-ELEMENT-INTERNAL which left deleted nodes visible in their parent's .ELEMENTS lists. * Removed ENTER-NODE and EXIT-NODE wrapper functions. 0.3.11 - 6 June 2007 - emk * Upgraded to FreeType 2.3.4. - Disabled dejavu-serif-condensed, dejavu-sans-condensed and dejavu-sans-light, because the new FreeType now maps them to the base font name plus style bits. * Merged in ruby-objects.ss code from tamale_test. - Renamed lispish.ss -> language.ss. - Empty function calls with no function and no arguments are no longer legal. Neither () nor [] may appear in ordinary runnable code. - The rarely-used WHILE macro no longer supports internal DEFINE forms, because it has been reverted to the Swindle version. - A bunch of low-level library dependencies in Runtime have been shuffled. 0.3.10 - 8 May 2007 - brian, emk, tryon * Made Tamale default to opening the program in the current directory, if one exists, otherwise falling back to the last opened project as before. * Allowed fonts to be organized into subdirectories, because we'll soon be adding a large number of GPL'd fonts. * Major overhaul of Fonts directory with many new fonts. All of these fonts are from Debian. See the appropriate directories for licensing information. * #3969: Fixed bug where the displayed cursor wouldn't update if a the mouse was over an element while its cursor was changing. * #3968: Fixed a bug where a cursor would initially display in the wrong position, because its coordinates weren't translated from screen to stage coordinates. * #3970: Fixed a bug where the engine would crash if you created a cursor element with the name of the currently active cursor. * Added FIT-TO-CHILDREN! method to %CUSTOM-ELEMENT%. 0.3.9 - 1 May 2007 - emk * #3961: Added RAISE-TO-TOP! method to %ELEMENT%. * Added CENTER-ON-PARENT! method to %ELEMENT%. 0.3.8 - 27 April 2007 - emk, brian * Implemented IMMEDIATELY, FINALLY and QUANTIZE for improving animation performance. Also tweaked INTERPOLATE to avoid setting properties to their current values, so that QUANTIZE actually results in a performance improvement in typical cases. * Fixed divide-by-zero bug in AFTER. * Fixed bug which caused file load counts in data.tam to drift by 1. * Renamed START in Common/planet/planet.ss to START* to avoid conflict on M-. on start card. * Support for element-based cursors: - Created an abstract Cursor class to wrap cursors. - Modified elements to refer to cursors by name, not by keeping copies of the objects. - Modified Stage to deal with new cursor interface. - Added CursorElement class (a subclass of Overlay). - Added %CURSOR-ELEMENT% template in Scheme. - Made Cursor ownership protocol explicit, and stop using smart pointers to manage cursors. The smart pointers were hiding quite a few ways to lose, and it's better to get all the tricky bits out in the daylight. 0.3.7 - 18 Apr 2007 - emk, brian * Renamed STRINGS -> PREFIX-AND-SUFFIX, PLAY -> PLAY-SPRITE and TRANSFORM -> SLIDE-AND-RESHAPE. * Turned AFTER into a macro and added some braces to the syntax. * Added support for highlighting and indenting functions as though they were syntax, using DEFINE-SYNTAX-INDENT. This may slightly slow down opening files in the editor; please report any serious degradations in performance. * Improved syntax-highlighting and indentation of animations in both the integrated editor and in Emacs. 0.3.6 - 17 Apr 2007 - emk, brian * Moved drag.ss and q-and-a.ss into Runtime/5L directory. * Added ON PROP-CHANGE handlers for %TEXT%. * Ported various animation functions up from iml libs, and refactored as combinator library. See Runtime/5L/tamale-doc.txt for details on how to use the new library. * Added AFTER animation combinator, for performing animations in sequence. * Ported various shape manipulation functions from iml libs to Runtime/5L. * Wrote documentation for animation, which can be found in Runtime/5L/tamale-doc.txt. * Added ON PROP-CHANGE handlers for %RECTANGLE%. * Cleaned up newly-added shape-manipulation functions. Still more cleanup and refactoring of animation features will be needed. * Modified %BASIC-BUTTON% to suppress immediate redraws on MOUSE-ENTER and MOUSE-LEAVE events. This fixes a number of problems with premature screen updates. * Added ELEM-MAP and ELEM-MAP-2, which allow mapping over our built-in "collection" types. ELEM-MAP, in particular, is equivalent to Haskell's FMAP. * Added a Dylan-style CURRY function (not to be confused with Haskell's CURRY function). * Moved animator code to animate.ss. 0.3.5 - 21 March 2007 - emk, brian * #2856: Fixed the slow-loading bug which caused each reload to take O(MN), where M is the number of modules in the program, and N is the number of loads since first startup. This was caused by sloppy installation of our custom compiled-zo handler. * Updated tamale.el to handle proposed object syntax. * Adding support for MASK operation. * Added :SHOWN? flags to as much of the API as possible. * #3841: Added a debug-log statement when we encounter an error loading a file. The program still quits, but now you can see the actual error by looking at the debug log instead of having to experiement to find it. * Added preliminary documentation to the %ANIMATED-GRAPHIC% template. 0.3.4 - 20 Dec 2006 - emk, brian * Fixed bug in STRING->XML. * Added ON BOUNDS handler to %element% and subclasses. * Added :PARENT argument to element creation helper functions. * #2493: Fixed MEASURE-TEXT to return a bounding box based on the line width calculated by the line-breaking algorithm, not by the drawing algorithm. This should guarantee that MEASURE-TEXT and DRAW-TEXT agree about where the line breaks should go. * #2078: Changed ascender and descender calculation to consider more letters. Also added fallback code to catch overlong ascenders and descenders, such as the ones which may appear on the integral sign (U+222B). * Modified Typography library to use std::vector instead of std::deque. * #2493: Fixed bug where we'd sometimes clip a single pixel off the the left-most edge of the text. We do this by indenting all text by enough pixels to handle the smallest negative left bearing of any character in the text. This may cause left-edge alignment problems under certain circumstances, but not by more than a pixel. * #2061: Fixed DRAW-TEXT and MEASURE-TEXT to include drop shadows when calculating line lengths and bounding boxes. From now on, any drawn text which falls outside the bounding box returned by MEASURE-TEXT will automatically cause an assertion failure. * #3818: Added PROGRAM-RELEASE-ID function (in the updater module) which can be used to get the release ID of a Tamale script. * #3829: Moved all top-level *.png graphics used by the engine (splash screens, progress bars, etc.) to the Graphics/script directory. * Added new MOVE-RECT-RIGHT-TO, MOVE-RECT-BOTTOM-TO, and MOVE-RECT-LEFT-TOP-TO functions to shapes.ss. * #3166: Creating a movie element and pausing it immediately should now work. Please report any remaining pause-related bugs. * #2096: We now sanity-check the names of cards, elements and other nodes. * #3811: %EDIT-BOX% is actually a useful class now. It supports specifying the text size, detecting enter events, and retrieving the text typed by the user. This should make %EDIT-BOX% an acceptable replacement for the old INPUT command. * #3834: Added OPEN-IN-BROWSER command, which opens a URL in an external web browser. * #3832: Upgraded to PLT Scheme v360. This makes Scheme case sensitive, and adds preliminary backtrace support. Backtraces are written to Debug.log. See deprecated.ss for more notes on the upgrade. * #3830: Made %CUSTOM-ELEMENT% instances resizable--SHAPE is now a settable property. Note that changing the shape of a custom element will clear the associated overlay, which isn't any problem for code using the new ON DRAW interface. 0.3.3 - 7 Dec 2006 - emk, tryon * #3792: Added support for QuickTime movies with a ::GetMovieBox that is offset from 0,0. MacTech says that this can happen, and I'm seeing it in QuickTime movies with a text track, which we need for captions. * #3792: Added support for MEDIA-CAPTION events. By default, we make the first QuickTime text track invisible, and report the captions to the script as they arrive using MEDIA-CAPTION events. (It's possible to override this behavior, of course, and display the text track normally.) * #3810: Added support for changing the style and text of a %TEXT-BOX%, and fixed TEXT-BOX to have the same argument order as other functions. These changes make TEXT-BOX elements usable for captioning. * #3828: Nodes.ss now provides , CARD-GROUP?, , CARD-SEQUENCE?. * #3812: Changed text formatting language from legacy punctuation system to regular XML. Supported tags include: I, EM, CITE, B, STRONG, and the non-standard H ("highlight"). 0.3.2 - 29 Nov 2006 - emk * #3807: Removed minimal support for "real time" (i.e., non-consing) state-db listeners, since we didn't actually need it in our last major project (which made aggressive use of the state-db), and there's no need to keep an extra Scheme interpreter hanging around for no good reason. * #3808: Replaced several top-level functions with ON handlers, in an effort to make our API more object-oriented. See deprecated.ss for the full list. * #3809: The functions WAIT, DELETE-ELEMENT and DELETE-ELEMENTS no longer accept symbols in place of actual elements. (To get the old behavior, call ENABLE-DEPRECATED-FEATURES! at script load time.) * #3810: More API cleanup in tamale.ss. Most element templates no longer have "-element%" in their names (except for abstract templates near the top of the hierarchy), and the NAME argument for most element creation helpers has been made a keyword argument (finally). ddc and brian both seemed to think this change was plausible; let's see how it works in practice. * #3792: Added very preliminary accessibility support. We now expose all the elements on the Stage via wxAccessible (and thus MSAA), although we don't yet provide any useful information about them. * #3813: Added %BOX%, %TEXT-BOX%, %GRAPHIC% and %RECTANGLE% elements (and corresponding helper functions). These should be used in place of the regular drawing calls to help make 508 support easier (and to help ease our migration to a future GUI editor). * #3810: More API cleanup in tamale.ss. Renamed *-PICTURE to *-GRAPHIC, changed the argument order of DRAW-TEXT and DRAW-GRAPHIC, renamed %ZONE% to %CUSTOM-ELEMENT%, and rewrote templates to support ON handlers for DRAW, ERASE-BACKGROUND, and INVALIDATE (which will help us to support a future screen editor). 0.3.1 - 27 Nov 2006 - emk * #3806: The engine now uses 1-3% of the CPU while idling, and 6-20% when playing QuickTime, instead of 100% (at least as measured on my machine). This fix depends on #3783, the NAP and TIMEOUT fix. * #3810: Massive cleanup of Runtime directory, including reorganization and deprecation. See Runtime/5L/deprecated.ss for a list of renamed and removed functions. 0.3.0 - 21 Nov 2006 - brian, emk * #3647: Fixed update installer to build parent directories for new files correctly. * #3683: Removed PNG of stage from script crash reports--it made the crash reports too big, and we hadn't used it much. * #3691: The update installer now checks if it can write to the destination paths before copying files, and will keep trying for 10 seconds if it cannot write to a file, in case it is run before the engine has fully quit. * #3692: Update installer now touches each file that it installs, so PLT (and any other tools that care) will have appropriately up-to-date timestamps on all files. * #3783: Replaced NAP with a much simpler implementation, and removed TIMEOUT entirely (pending reimplementation). These were not especially nice bits of code, because they predated much of the modern engine's design. * #3784: Replaced CALL-AT-SAFE-TIME with RUN-DEFERRED (thus affecting DEFERRED-CALLBACK). Callbacks are now postponed until *after* the card body has run completely. We've also fixed a bug that could cause deferred code to be lost if *other* deferred code called JUMP, and provided a way to automatically clean up deferred callbacks when exiting a card or a sequence. * #3798: Removed support for "backgrounds" from the GUI. Since this support didn't actually do anything, we don't particularly need it. * #3798: Removed support for modal text input, which should be implemented using regular input elements. * #3786: Added support for skipping to the end of a Vorbis stream. * #3789: Events and deferred thunks are now visible in Debug.log, but the installation of ON handlers is no longer recorded. * #3791: If Debug.log is not created at startup, maintain an internal list of recent log entries. If a crash occurs, write the entries to disk. Also, other cleanup of TLogger. * Switched to Visual Studio 2005 for official Windows build. * Removed preinstaller from build, because we don't currently need it. * Dealt with various warnings introduced by Visual Studio 2005, at the Common and 5L project levels. There's a lot more warning work still to go. This particular change included updading boost's visualc.hpp configuration header to the latest version. 0.2.3 - 23 Oct 2006 - emk, brian * #3503: The preinstaller now confirms quit requests with the user, and shows an "Installing..." label when running the QuickTime installer. This should help prevent problems during the long pause while the QuickTime installer launches. * #3503: Fixed silly bug when preinstaller showed the "confirm exit" window when quiting itself normally. * #3510: We no longer poll for the installed QuickTime version when our preinstaller window is in the background, to prevent the QuickTime installer from trying to quit our preinstaller because it "uses QuickTime." * #3168: UpdateInstaller now has do-nothing "--uninstall" option, which will allow us to improve our uninstall options in the future. This is a "add it now or never" hook. * #3168: "UpdateInstaller --uninstall ." can now create the directories required for its log file. * #3581: Modified how preinstaller launches QuickTime installer, and added a dialog box warning QuickTime Pro users. * #1760, #3591: Fixed crash that occurred when drawing to DrawingArea objects with an area of zero. * #3576, #3508: Added a "fatal error without crash report" routine for use in fixing these two bugs (and others). * #1712: Once a crash has been detected, supress further display of wxWidgets-originated error messages, and just log them. This prevents several common non-fatal error conditions in the crash reporter (no network, misconfigured server, etc.) from looping back into the crash reporter. * #3612: Fixed bug which caused engine redraws to occur even when the drawing calls had been fully clipped. This should prevent flicker in a few places that use heavyweight (i.e., native GUI) elements near overlays. * #3167: Added basic support for progress bar in the updater. This updates once per file downloaded. * #3508: Add error checking to scheme file loader that will allow it to detect the case when a limited user tries to run the program before an administrator has run it, and displays a nice error message prompting the user about what to do. 0.2.2 - 20 Sep 2006 - emk, brian * #2930: Implemented a "preinstaller" which can be used as an autorun.exe. The preinstaller walks the user through installing QuickTime, which is helpful, since the latest version of the QuickTime installer is both (a) asynchronous once launched and (b) legally unmodifiable under the standard distribution agreement. For now, the "preinstaller" is hard-coded for use with our latest project, but it should be easy to parameterize for other projects. * #3467: Applied a band-aid to the crash-handling logic so that it will generally restore the system task bar for all but the worst crashes. We could benefit from more work in this area, but a more complete fix would destabilize the engine. * #3466: Send crashes to a different server by default. * #3461: Disable screen saver a bit more thoroughly in full-screen mode, even if the user has a password protected screen saver turned on. * The update installer now correctly detects unwritable directories. 0.2.1 - 17 Sep 2006 - emk, brian * #3162: MOVIE-RESUME will no longer cause a finished movie to loop. * #3042: Quake 2 console access now turned off by default. To restore, run the command (quake2-command "bind ` toggleconsole"). * Changes to UpdateInstaller and related code. 0.2.0 - 9 Sep 2006 - emk, brian * Fixed bug in UpdateInstaller.exe that prevented it from working with Windows pathnames. * Fixed UpdateInstaller.exe to not try and replace itself as it was running. * Made downloader honor redirects (max of 10 redirects). * Replaced "volatile" with "IntuitiveVolatile" in multithreaded code, in an effort to prevent race conditions on a future version of the x86 architecture (and possibly the current version). * #1875, #2305, #3005: Deiconization bugs (and related crashes during screen resizing) fixed. This fix, unlike the first, seems to cover all the edge cases I could reproduce. * #2958: Added a hook to detect engine-trigged shutdowns, etc., so programs have an opportunity to save prefs, section timing data, etc. * #1875: Partial fixes for background "cursor theft". These seem to work very well in full-screen mode, but still have issues in developer mode, thanks to some interesting behavior with wxTopLevelWindow::IsActive and wxWindow::SetFocus. * Removed "Control-Q" accelerator for quiting, because it wasn't a standard Windows accelerator, and because (like the still-remaining Alt-F4) it didn't go through EXIT-SCRIPT. * Added some comments with more information about recent bugs. 0.0.63 - 2 Aug 2006 - emk, brian * #2894: Made it possible to slide along walls in Quake 2 at a lower-than-normal walking speed. This makes invisible guidewalls much more effective when moving at a "realistic" pace. There seems to be a slight asymmetry in wall friction, which worries me slightly, but this is a minimally invasive fix for the problem. * More updater changes from Brian. * Updated copyright messages for 2006 release. * Added Rakefile to clean, build and test the engine. This is the first of many steps towards improving our project automation. * Centralized version-number handling in TVersion.h. 0.0.62 - 26 July 2006 - emk, brian Internal release for UpdateInstaller testing. * Added placeholder code for launching the UpdateInstaller. * Added watchdir/unwatchdir to Quake 2 to support detecting when the user looks in a specified direction (#2893). * Suppress splash-screen on reload so scripters can visually see the change from the old version of a card to the new one (#2921). 0.0.61 - 30 Jun 2006 - emk, brian * Created Downloader class, for downloading a file specified by a URL to the local disk. * Changed error handling of wxWidgets errors to make better use of the TLogger class and not use the default error handlers. * Moved DoIdle from TSchemeInterpreter to TInterpreter. * Fixed up code so we can compile under Visual Studio .NET 2005, and updated HACKING.txt to include instructions for how to set up VS.NET 2005. * Modified CARD-PREV to find the previous *card*, not just the previous *sequence*, in order to make "back" buttons in do the right thing in nested sequences (bug #2315). * Added HIDE-CURSOR-UNTIL-MOUSE-MOVED! function (#2467). * Preliminary splash-screen progress bar support (#2856). 0.0.60 - 20 Oct 2005 - emk * Turned off wxCLIP_CHILDREN to allow our QuickTime playback code to work the way it did before wxWidgets 2.6.0 (bug #2014). * Log files are now stored in C:\Documents and Settings\\Application Data\Tamale (bug #1847). * User data files are stored in subdirectories of the log directory (bug #1847). * Fonts/cache.dat is now Application Data\Tamale\