Amulet Is No Longer Supported
Due to lack of funding, Amulet is no longer a supported
project. (Please contact email@example.com if you want to fund the
Amulet research project!) We
were never able to finish the Version 4 of the system. Some things
were finished, and many others were only partially done. The Amulet
Users community wanted to get at some of these things anyway, so we
made up a Unix tar file with the current stuff in it. Below is a
The Amulet group cannot promise to update this software nor to accept
or integrate any fixes provided by users.
Some of these features have
been added to the "OpenAmulet" version which is being developed by
Robert Muench and some other members of the Amulet users group. More
information is available at
http://www.scrap.de/html/amulet.htm. Users should still
email fixes and updates to amulet-Users@cs.cmu.edu, so the community
can benefit from them.
Downloading Amulet V4
The following Unix "tar" file contains the entire Amulet V4 source tree
as of the date indicated. This includes the source code and support
files for all platforms.
This includes a bunch of internal files we probably shouldn't be
distributing. Note that we did not check that this works, or that
it compiles on any particular platform.
Also included in the tar file are the source files for the Amulet
manual, which are prepared using Framemaker. These have not been
updated since the official V3 release. The only documentation
for the new features are the notes below.
Tar file created:
May 28, 1998. Size: 6,696 for amulet4.tar.Z and
19,296 for amulet4.tar when uncompressed.
as a compressed Unix tar file.
Things half-done in V4:
An informal list of the changes since v3 is available as a
plain text file.
- Network support: kind-of works for Unix. Doesn't work for
other platforms. No documentation. One example. We expect it
to get a little faster for Unix and have a couple of more
- Scripting support: kind-of works on all platforms. Many
commands can be scripted. Testselectionwidget and circuit have
been modified so commands can be recorded and reused in scripts.
This required lots of changes to the built-in commands and to the
- Selection handles, can move selection forward, backwards,
- A "Find" dialog box for finding graphical objects
- We added a bunch of capabilities to Gilt, but didn't finish it
and now Gilt doesn't work anymore at all. The added features were to
have supported defining constraints interactively, and adding pictures
and arbitrary graphics as the labels for buttons and other widgets.
Coming in a couple of months:
Sophisticated new debugging capabilities in the Inspector
Note: these are pretty much complete and work on all
platforms, but are not documented.
- Am_Scrolling_Menu widget:
User can select ranges of items. Press and drag to select a range.
Shift-click to extend the range. Control-click to start an
independent range (non-contiguous).
Programmers interface: set the Am_ITEMS slot of the widget to a list
like all the other button widgets. Am_VALUE of the widget can be
accessed or set to a list of the items.
Can set Am_HOW_SET, but Am_CHOICE_LIST_TOGGLE does the weird list
select; but Am_CHOICE_SET, Am_CHOICE_CLEAR and Am_CHOICE_TOGGLE do usual
kind of single select.
Note: unlike all other widgets, the DO method of commands for the
individual items are NOT called. Instead, the DO method of the widget
itself is ALWAYS called instead, even if the items have their own
commands. This is because multiple items can be selected at a time.
The Am_VALUE of the command (and the widget) will have the full
current value as a list.
- New interactor Am_Text_Create_Or_Edit_Interactor which creates and
edits a new text object if click in the background. This is now used in
- New function Am_Parse_Input_As_Type exported by debugger.h, (used by
inspector and scripting) allows inspector to parse floats and
- New function Am_Parse_Input_As_List_Of_Type for a list containing a
single type (not used by the inspector)
- defined type Am_Am_Slot_Key which is a wrapper that can be used for
slot keys when put into slots, so their names will be printed out.
then, should print with the names
- Whole new initialization mechanism:
Each file should have a global variable like the following:
Am_Initializer* buttons_init =
new Am_Initializer("Buttons", Am_Buttons_Initialize, 4.1,
where the number is the ordering (lower numbers come first)
and the cleanup procedure is optional.
New .h file: initializer.h
This theoretically would make it possible to have different
sub-sets of amulet in released versions, so applications made
with amulet could just include in the .exe file the parts that
were actually needed.
- A bunch of new methods for Am_Value_Lists to make them more
useful, including adding an association list feature.
- Added new built-in constraints:
extern Am_Formula Am_Rest_Of_Height_Above(Am_Slot_Key sibling,
int offset = 0);
put into the height slot to make the object's height be from
its top to offset above the sibling. Often, the sibling
will use Am_Bottom_Is_Bottom_Of_Owner so it will be at the
bottom of the owner.
Am_Formula Am_Bottom_Of_Sibling (Am_Object object,
int offset, float multiplier = 1.0);
Am_Formula Am_Right_Of_Sibling (Am_Object object,
int offset, float multiplier = 1.0);
Multi-Line Text Widget
We looked at the multi-line text widget, but decided the current code
was never going to work, so we abondoned the effort all together. It
is our opinion that this effort should be started over from scratch,
instead of trying to go on with the current start of an
implementation which is part of the code.
Back to the Amulet Home Page.