What's New in COGENT Version 1.10.04?
Version 1.10.04 (Thu Jan 21 19:04:24 1999)
- Found and fixed serious bug in table redrawing (that was causing
infinite looping when redrawing tables containing non-table elements).
- Found and fixed minor bug introduced in correction to canvas resizing code
(in version 1.10.02). Previous code was causing harmless warnings when
switching between property and description views of compound subobject
canvases. This warning are no longer produced.
- Fixed potentially fatal bug in generation of HTML for rules with no actions.
(Such rules are pointless are should not be present.)
- Fixed vertical alignment in HTML output of rules.
- Improved portability of OOS between Unix and Windows.
- Fixed portability of OOS to SWI Prolog version 3.1.
- Found and fixed minor bug in paste (incorrectly fixed in version
- Added further options in the initial state/rule definition windows,
allowing an element to be moved up or down (equivalent to cutting and then
pasting, but with one mouse click).
- Added new box type: interactive activation network.
- Added new option for specifying the position of the box/arrow edit
buttons. They may now appear either above or below the main canvas.
- Compound objects now make their external objects snap to the same grid as
their internal objects. (This means that it is now possible to get perfectly
straight lines between internal and external objects on a compound.)
- Modified OOS treatment of floating point numbers to improve efficiency.
- Modified redrawing of COGENT canvases during execution of OOS so that
redrawing is only attempted when the file changes (hopefully). Canvases
corresponding to files that don't change on successive cycles will not be
redrawn on each cycle.
- Found and fixed over-sight in script execution. Running a script
was not first ensuring the model was saved. (This behaviour was
at variance with other interaction with OOS.) Models are now automatically
saved on execution of a script.
Version 1.10.03 (Mon Nov 16 08:48:09 1998)
- Fixed bug in model copying (reported by MR on 11/11/98).
- Found and fixed bug in replace callback.
- Found and fixed bug in paste introduced in version 1.10.02.
- Disabled replace callback (because it is undocumented, incomplete,
and has irreversible consequences).
Version 1.10.02 (Wed Nov 11 22:58:13 1998)
- Found and fixed potentially fatal bug (introduced in version 1.10.01) in generating
the rule action editor menu for rules within recurrent processes.
- Found and fixed potentially fatal bug in delete box. (The code was buggy for some
time, but the bug was never reported!)
- Found and fixed potentially fatal bug in the rule editor. If a process was writing
to a box of unknown class, editing the actions of rules in that process would
result in a crash.
- Found and fixed minor bug in syntax checking (resulting in the temporary
addition of unnecessary recurrent arrows to buffers containing condition
- Found and fixed minor bug in PostScript printing of certain properties
(specifically properties with bounded real values).
- Fixed minor bug in resizing subobject canvases. Often resizing didn't cause
redrawing but redrawing is necessary for those canvases with arrows to external
- Altered default value of analogue buffer Dimensionality.
Previously the default was one, but the vast majority of applications use the
value two, so the default has been switched.
- Altered default value of network Weight Parameter A from 0 to
-1. This ensures that weights in the default network configuration are
symmetrically distributed about 0, which is consistent with the default
- Altered positioning of popup sub-element editors. These are now centreed
on the screen, rather than offset from their parent window (because once
popped-up they should be filled in and closed).
- Altered PostScript printing of boxes of unknown class. The class field of
such boxes is now printed, with a value of UNKNOWN.
- Altered PostScript printing of boxes of unknown name. The name field of
such boxes is now printed, with a value of UNNAMED.
- Replaced delete functionality with a global
clipboard. Previously, each class had its own clipboard. This was fine
when the types of elements within boxes of each class were disjoint. The
proliferation of classes and the inclusion of elements of the same type in
different class definitions has made this less useful, however. With the
global clipboard, any items (including complete boxes) that are deleted from a
model are placed in a central store. They can then be pasted back from this
store into any box provided they are of the correct type for that box. (So it
is now possible to delete conditions from processes and paste them into
- Improved documentation for the script
Version 1.10.01 (Mon Nov 9 13:15:45 1998)
- Added user definable properties. It is now possible for the user to define
his/her own properties, and use these properties to control the behaviour of
process and buffer boxes. When a box is displayed in property mode you will
notice three new buttons above the properties: add property, edit property,
and delete property. These buttons allow the user to extend the basic property
set associated with an object. Behaviour can be keyed to property values by
the condition "get value of property".
- Added new colours for use within analogue buffers: brown, violet, grey,
orange, and yellow.
- Modified drawing of the contents of analogue buffers. These are now drawn
(when the buffer is in Current Image mode) in the order in which they
were added to the buffer. This means that in 2-d buffers newer objects are
drawn on top of older objects.
- Fixed potentially fatal bug in use of the increment/decrement buttons on the numeric
text widgets within the OOS run windows (which was causing crashes under some
versions of XView). This was initially thought to be an XView problem, but it
wasn't, it was a programmer error, and has now been fixed.
- Found and fixed several potentially fatal bugs in the handling of boxes of unknown
class. Specifically, syntax checking and opening of such boxes no longer cause
COGENT to crash. Of course, boxes of unknown class should not occur with
normal function, but they may arise if the user fiddles about with COGENT's
model files and directories.
- Removed the property view of compounds. This did show the properties and
their values of boxes within a compound, but the code is dodgy and so the
feature has been temporarily removed.
- Added new properties: X Drift and Y drift. These properties allow the
user to correct window placement when the window manager puts borders around
the window. Basically XView cannot reliably determine the width of such
borders, and so windows can drift. The problem is most noticable with the
window managers distributed with Redhat Linux (e.g., fvwm2). These new
properties allow the user to correct the problem by specifying the natural
drift of windows (which COGENT can then use to prevent such drift). A good
value (XDrift, YDrift) for olvwm is (0,1). For fvwm2, try (5,23).
Version 1.10.00 (Mon Sep 14 14:04:32 1998)
- Improved Prolog code, using SWI modules. This ensures that conditions
which are defined within a process are encapsulated within that process (as
they should be), and prevents the user from accidently redefining system
- SICStus Prolog is no longer supported.
- Conditions may now be defined within buffers. This gives buffers some
inferencing power. See the customisation help file
for more details.
- OOS has been separated into two main components: the execution engine, and
a set of files which define the behaviour of each box (sub)class. This is in
preparation for allowing user-defined subclasses, and for supporting
alternative class hierarchies (such as BioCOGENT). See the customisation help file for more details.
- It is now possible to over-ride the default behaviour of buffers by
specifying replacement procedures for buffer element addition, matching, and
decay. See the customisation help file for more
- Facilities to allow objects to have boolean properties (i.e., properties
with true/false values indicated by a check box) have been added. There are
currently no objects which use these kind of properties, but they have been
added in preparation for the impending addition of user-defined
- The buggy behaviour of uninstantiated variables in buffers has been
- It is now possible to send a process a stop trigger. Receipt of such a
trigger will cause the process to stop attempting to fire autonomous rules, and
to ignore any other triggers on the same or subsequent cycles. The process will
remain in this stopped state until the end of the trial. (As requested by ME
- When the system reaches quiescence ("All data processed"), a special
trigger consisting of the string 'system_quiescent', is now sent to each
process box. If any rules are capable of responding to that trigger, they will
then fire. Such rules should generally be refracted, to permit eventual true
termination. (As requested by ME on 30/09/96.)
- Detection of the end of processing should now work properly even for rules
that involve arbitrary randomness....
- ...but the cost is that the cycle has been reorganised. Now buffer state
is updated after rules etc fire, so an element added to a buffer will enter it
on the same cycle as it is sent.
- This help system now includes a bug report
mechanism (as requested by JF).
- The sigmoid and tanh network activation functions have been replaced by a
single sigmoidal activation function. This is because the other network
parameters which allow scaling of the activation space render the sigmoid and
tanh functions identical. At the same time bugs in the calculation of these
functions (which were failing to correctly use maximum and minimum activation
scaling) have been corrected.
- The problem of learning in NULL network connections (whereby unconnected
nodes within a network with less than complete connectivity could obtain
a non-zero weight, and hence a connection, through learning) has been resolved.
NULL network connections are now shown in the output as '---'.
- The buttons on the top of OOS windows (for trial/block/script) have been
reordered, and an Initialise menu has been added for scripts.
- The Stop function did not work when an embedded script was
running. That is, Stop would stop the embedded script, but not
the external script, so OOS would in fact continue running. This has been
- When you select File|Open... in the scripting interface, but then
cancel the selection dialog, incorrect behaviour was occurring: the default or
user-selected script file was not being loaded into the editor (which was
correct), but the Execute button action was being changed to execute
the canceled script. Similarly, the Execute button would retain the
script name across script execution sessions (within one COGENT session), so
that Execute could invoke a script when no script had been loaded.
This has now all been fixed to behave sensibly: the currently displayed script
is always the one to which Execute applies, and Execute only
works when a script is loaded.
- It is no longer possible to use the condition editor to construct
conditions with names which violate Prolog syntax. The editor now ignores
illegal characters (such as brackets and Prolog punctuation characters) typed
in the field specifying the condition's functor.
- It is now possibly to query the value of a box's properties by conditions
declared within that box. Thus, a process can query its firing rate, and use
that information to affect the rules. More usefully, a condition defined
within a buffer can query the buffer's properties. This condition can then be
called by the "call in module" primitive. Both of these functions are
available from the standard condition menu.
- A new, optional third argument of graphical objects in analogue
buffers can now be used to specify secondary (ie non-geometrical)
properties for these objects. Currently supported secondary properties
include colour, line weight and style, and filled/outlined 2-d
- Window positions and sizes, and any user defined script files, are
now preserved when a new version of a model is created from the
- Fixed problem with archive extraction: redundant tar files are
now correctly removed after archive extraction.
Version 1.09.00 (Mon Jun 1 09:16:28 1998)
- "Directories" on the options panel has been renamed "File Locations".
- Added explicit setting of history window width so that the window will
always initialise to 640 pixels wide, regardless of font.
- Added a guard in project create and rename functions to ensure that all
putative project names are valid (i.e., don't contain "/" characters).
- New boxes now snap to the grid as soon as they are drawn. Previously if a
box was drawn and not repositioned it would not be forced to the underlying
- Fixed minor bug in PostScript printing of Research Programme history
diagrams. Previously, special PostScript characters (such as "(") which
occurred in a model name were not being printed correctly.
- Archive creation now checks that an archive doesn't already exist before
attempting to create the archive, and gives the user the chance to abort if one
- Added new property to allow setting of the colour used to highlight
- Added code to remember window sizes (as well as window positions) as
requested by DG.
- Rules are now numbered in the current contents view. These numbers are
also used in the message log view of processes to simplify tracing of rule
firings (as requested some time ago by ME & PB).
- Several new conditions have been added, including: dot product
(for calculating the dot product of two vectors, and accessed under the list
processing/arithmetic menu); random/integer (for generating a random
integer within a specified range, and accessed under the arithmetic menu);
others added by Pete?
- The Message Matrix view of compounds now appears in all printouts (and in
all formats) when "Show current contents?" is checked.
- Scrollbars on the Message Matrix and Table views are now automatically
attached to the canvas if and only if the message matrix/table is bigger than
the canvas. The buttons to allow switching on and off of scrollbars have been
- Removed bounding rectangle from compound subboxes and altered drawing of
external objects to include a hatched outline of their box icon (based
strongly on WinCOGENT).
- Altered drawing of boxes of unknown class. They are now drawn as a big
- Altered the default line break behaviour of description subwindows, so
that long lines are now clipped (i.e., not shown). The user now must insert
explicit line breaks when they are required. This ensures that the PostScript
generated when printing a box's description matches the screen display.
- Replaced black disks on the programme manager with little black COGENT
"brain" icons, as used by WinCOGENT. Printing out a project now also uses
these icons instead of the disks to represent COGENT models.
- The Create Model function (which is called from the history canvas and
simply creates a copy of the selected model) now only works when the selected
model is closed (so there is no question of copying unsaved edits of the
selected model) and automatically renames the copied model as "Copy of ..."
(as suggested by RMY). In addition, it only copies files which are strictly
part of the model, thus removing the proliferation of miscellaneous files
and directories that used to occur.
- Modified behaviour of the delete arrow function accessed from a compound's
canvas' arrow menu. If there are arrows of multiple types connecting two
boxes, delete arrow will now only delete arrows of one type (not all arrows
between the boxes). This behaviour is analogous to the other arrow
manipulation functions available from that menu.
- Facilities to convert COGENT models to the files necessary for WebCogent
have been added. On the project manager, select webify from the menu that
appears when you right-click on a model to create all the necessary
- Added HTML as another printer output format. In doing this, many of the
internal printing functions were reorganised in order to simplify the addition
of further printing formats in the future. Note that HTML output may contain
references to image files (all currently in xbm format). These files are
placed in the output directory and have names of the form img_*.xbm, and must
be stored in the same directory as the HTML root file if they are to be found
by most browsers.
- Printing in all formats (ASCII, HTML and PostScript) of alternate views of
the current contents of all box classes (including table sinks and analogue
buffers, as well as two new objects described below: stack buffers and table
buffers) is now supported.
- The print file's extension now changes automatically depending on the
output format (".txt" for ASCII, ".ps" for PostScript, ".html" for HTML).
- Extensive modifications have been made to many of the internal functions,
aimed at simplifying the process of extending/modifying the class hierarchy.
The user should not notice much, but 1) the items beneath the Add Action menu
have changed; and 2) the various network message types have been removed.
Network messages should now take the form of simple send messages, whose
content may be a vector or a vector pair for training of the form
"train(Input, Output)". This approach to special messages is the same as that
used for analogue buffers and stacks.
- Altered the palette so that all icons are shown half-size and without
class labels. Footer messages which appear when the cursor moves over the
icons now describe the various classes. Arrow buttons also appear on the
palette (and work). Arrows can now be drawn either by selecting the
appropriate arrow class (from the palette), left clicking on the source and
dragging to the target, or by middle clicking on the source and dragging to
the target (as before). In the latter case, if an arrow class on the palette
is selected, then that class will be picked up by the arrow. Otherwise the
arrow will default to a write/send arrow (as before). All this has involved
yet another reworking of the way mouse events on the main canvas are handled
(and has hopefully not introduced any bugs).
- Added new object class: Stack. Stacks are buffers whose top-most element
can be matched and which can only be sent messages of the form "push(X)" or
- Added new object class: Table buffer. This uses the same syntax as Table
Sink, with Analogue Buffer style directional access.
- A new property (similar to the refract property) has been added to rules
which allows rules to be marked as firing just once per cycle. When set,
the first appropriate instantiation of a rule will be found and fired
on each cycle. If a rule is also refracted, this mechanism can be used to
fire successive instantiations of the rule on successive cycles.
- Changed help files to html and help callback to fire-up Netscape on the
appropriate help files. If Netscape is already running, the relevant page will
be directed to the existing Netscape process. If not, a new Netscape process
will be started. If Netscape is not on the user's path, nothing will happen.
The help directory has also been replaced by a help URL, giving added
flexibility over the display of help information. Thus, if you're using
Netscape 3.2 or later and the help URL is set to
file:/usr/.../COGENT/help/index.html?main=, then (thanks to Pete's
you set your help URL to file:/usr/.../COGENT/help/, then you get the
specific section of help requested (but no index frameset).
- All help files have been converted to HTML, standardised, updated to
version 1.09.00, and, where necessary, rewritten. Some features (and bugs)
still remain undocumented. Notable examples include the replace
function and the property view of compounds.
- Added a "property" view of compounds, which shows the properties of all
the children of a compound. At present this is read only (i.e., you can't set
properties from here).
- The button layout on the Run windows has been altered so that
initialisation and randomisation functions are hidden under a single menu
button, with initialise or run block being the default options. At the same
time, a minor bug in the randomisation function which prevented the random
seed from being displayed if OOS was randomised before being initialised has
- Numerous modifications to the execution model have been made in order to
provide support for levels beyond trial and block. The
execution model now incorporates notions of subject and
experiment, and most box types can be set to initialise at any level
(i.e., each trial, block, subject, or experiment). This has necessitated a
change to the numbering scheme which is used to label the current state of
boxes (to accommodate experiment/subject/block and trial numbers). These
features may need further refinement as we experiment with further
- Other important changes to the execution side of things include the
storage and retrieval of current contents of boxes, which now persist between
invocations of COGENT. It is thus possible to run several blocks (or several
subjects), terminate COGENT, and come back another time to finish the
computational experiment. Accompanying this change is the addition of a
Stop button which allows OOS to be safely stopped at any stage in its
processing. OOS can then be restarted (even if COGENT is stopped and
restarted) without having to reinitialise the model and run from scratch.
Version 1.08.02 (Mon Mar 30 17:26:58 1998)
- Fixed bug in archive extraction which stopped re-compression of archives
which were extracted but not deleted.
- Fixed minor bug in help/what's new functions: if help was open on
the top-most frame when What's new was selected (and the help screen
was the top-most window in the stacking order), then the What's new
file wasn't displayed until the help window was refreshed.
- Changed legend display of analogue buffers so that non-image elements in
such buffers are no longer listed.
- Changed analogue buffer drawing to give a slight (perhaps unnoticable)
efficiency improvement when displaying buffer contents.
- Changed the location of Check Syntax from beneath the File
menu to a new Edit menu.
- Changed the code for dumping output of the various boxes during execution
to improve efficiency. The improvement is dramatic: there now appears to be
little if any performance decrement over multiple blocks.
- Added new display option for analogue buffers: colour (yes/no), which
determines if the image is drawn in colour (with a legend) or in black and
white (without a legend).
- Added a partial implementation of Edit/Replace facility to
allow global replacement of terms. Currently, this facility will allow
replacement of atoms and numbers, but not compound terms, and it doesn't check
the syntax of find/replace terms. It should be used with extreme caution!
- Updated description of printing properties in the print help file.
Version 1.08.01 (Mon Feb 23 11:11:07 1998)
- Fixed minor bug in printing ASCII output which caused some residual
PostScript to occasionally get mixed up in the text.
- Fixed bug in Prolog printing routines that caused a crash when terms that
were defined as operators were (legitimately) used as functors. A typical
manifestation of the bug would be a crash occurring when a box whose elements
were terms containing operator-like functors was opened.
- Fixed potentially potentially fatal bug in duplicate testing within buffers.
- Fixed bug in change_class function which prevented the function from
working when it was called from the menu button beside a box's class
- Changed display and printing of tables so that rows/columns are sorted
alphabetically. That is, a row labelled "A" will now always appear above one
labeled "B". Previously, rows and columns would automatically reorder
themselves whenever a new element was added to the table.
- Changed the default behaviour for Print Confirmation option. By default,
confirmation is now required before the print file will be sent to the
printer. This is safer for users with print quotas.
- Changed reading of .Xdefaults so that (hopefully) COGENT won't
get confused by default entries containing wild cards.
- Added code for memory deallocation for table labels which were not being
deallocated when the table was destroyed. (Thanks to DS for pointing this
- Added configuration parameter for scrolling of rule/element windows so
that scrolling is now switchable between smooth scroll and jump scroll. With
jump scroll, each scroll moves one line (instead of one pixel). On servers
that call the canvas repaint proc on each redraw (as in SGI, but not as in
Linux and Solaris) this helps prevent lots of screen flicker when scrolling
reasonable distances. It also seems reasonable to scroll line by line (rather
than pixel by pixel) on these windows.
Version 1.08.00 (Mon Nov 3 19:45:38 1997)
- Added message matrix view for compounds. This view shows messages passing
to/from subboxes within a compound.
Version 1.07.03 (Fri Oct 31 14:53:18 1997)
- Redirected output from the trace qualifier to the message log of the box
containing the condition being traced.
- Changed Xdefault PopupCopy to PopupCreate.
- Added description of archive directory to new-user welcome screen.
- The line spacing in the options screens has been increased by a couple of
- Selecting a box now highlights it in red, instead of inverting it.
- The "Edit" and "View" options on the history window canvas have been
merged into a separate submenu of "Open". This emphasises the commonalities
between their functions.
- Altered duplicate checking in OOS buffer loading, so that elements which
are clearly not duplicates (i.e., which don't unify) are compared (as they
- Replaced ln/2 with log/2 in the maths menu within the condition editor.
This now matches OOS which always seemed to know the function by the name
log/2 (and not ln/2).
- Improved output of the trace qualifier, so that failed calls are also
- Added two new built-in arithmetic functions: maximum value and minimum
value, which work with lists of values.
- Re-arranged list-based arithmetic into a separate sub-menu, now accessible
both from the list processing functions and the arithmetic functions. The
arithmetic term comparison functions are now also accessible via two routes
through the submenu network (term comparison/arithmetic and arithmetic/term
- Fixed minor formating bug in tables/graphs/etc which prevented embedded
canvases from being resized when their containing window was resized.
- Added optional scrollbars to tables.
Version 1.07.02 (Mon Oct 6 11:13:50 1997)
- In previous versions, the default behaviour when an rule/buffer element
was copied was to open the appropriate editor on that object. This could be
turned off by setting the appropriate option. This has now been reversed. The
default is simple to copy the object, and the user must open the editor as a
separate operation. The logic is that new users don't want windows popping up
when they copy something. They want to see the copy appear beside the
original. They can then open the editor manually. More experienced users can
get the same behaviour by just setting the option.
- The popup-on-copy option (referenced in 1) has been extended to include
copying of complete models when a new version of a model is created. By
default, the copy will be created but the model won't open, but this can be
changed by setting the popup-on-copy option.
- Improved the output format used by the export function, and extended the
import side of things so that it is now possible to export from any box type
and import to any box type except compounds. All box sub-items (including
comments and ignored sub-items) are correctly handled on the import and
export. Note that it is possible to put elements of the wrong type in a box
(e.g., rules into buffers) by importing the elements of one box into a second
box of a different class. I see this as a feature, not a bug, although it does
not appear to be a useful feature. Perhaps import should do some checking of
the imported elements.
- Fixed bug in rule/condition editor whereby Change Condition failed to
produce a correct condition when the intended target was findall/3. Also fixed
a related bug in the code for deleting rule editor widgets which failed to
calculate the correct height for findall/3 clauses when the second argument
wasn't a list (as it should be). (Bug reported by CPB on 02/10/97.)
- Fixed long-standing bug in rule edit widget redraw that meant lines got
out of sync when the "Insert Condition After" option was used within an
embedded (i.e., qualified or findall) condition. (Reported by PGY sometime in
- Fixed redraw of palette buttons so if a button is selected it will be
highlighted. Selected buttons were not previously being highlight, and this
could cause problems if you selected a box and then did something else (that
might cause a screen refresh) before drawing the object. (Reported by CPB on
- Found and fixed unreported bug in the interaction between messages and
comments within data sources that resulted in the cycle number of source
elements being indicated incorrectly on the source's data panel.
- Altered sink output format so it is pretty to read. The output is still
valid Prolog (using ':' as an operator), so can still be fed into some kind of
Prolog post processor if required. This change actually reverses a change made
in May 1996.
- Boxes are now highlighted (drawn in inverse video) during drag operations
and when they are selected by right-clicking on them.
- The separate paste menu which used to appear after right clicking in the
background of a box/arrow diagram has now been merged with the menu that
appears when the user right-clicks on a box. Inappropriate buttons are greyed
out in each case.
- Arrow drawing has been improved so that when multiple arrows (of different
types) connect the same two boxes, only one arrow stem is drawn. This means
that all arrows to/from a box now stay visible when dragging the box. Such
arrows are drawn by inverting the intermediate pixels, and this led to the
arrows disappearing when an even number of arrows were present between two
boxes (because the stems would be inverted an even number of times, with no
- Added "Scaling:" checkbox to the history diagram window to allow easy
switching on/off of history scaling (as suggested by PGY during September
- Fixed drawing of arrows from external objects of compound objects, which
got well messed up at some stage.
- Added confirmation of model deletion from the project window. (Wasn't this
there before? If so, what happened to it?)
Version 1.07.01 (Mon Sep 29 10:52:03 1997)
- Improved terminology by un-overloading the use of "condition". "Condition"
is retained to describe the elements which must be satisfied for a rule to
fire, but the other elements of rule-based processes (previously also termed
conditions) are now termed "Condition Definitions". (Thanks to DS for
realising the potential confusion and suggesting a sensible remedy.)
- "sort(X, Y)" now appears on the rule editor as "Y results from sorting X"
(after prompting from CPB).
- Big changes to what happens when a research programme is created. Now, the
history window is displayed, but it remains blank. There is a new button on
the history window for creation of root nodes. Creating the first model in a
research programme is done by clicking on this button. New models are then
opened in the standard way. This button means that we can create multi-rooted
projects. A further change, that shouldn't be noticed by the user, is that
project history information is now stored in a slightly different way, so that
it is possible to have an empty research programme (i.e., no models) but still
have a comment/description for that research programme.
- Found and fixed an unreported bug in research programme creation that
could cause crashes if a new research programme was created when an existing
programme was open.
- Fixed checking of new research programme name in project creation (which
was being correctly checked in project renaming and deletion, but not
creation) so that if the user fails to type a name the system doesn't try to
create a project with an empty name.
- The "randomise" condition has been removed from the condition menus as it
isn't really a condition -- it is semantically an action. However, we don't
want to make it an action because then 1) we wouldn't be able to randomise at
the beginning of the first cycle; 2) there is no point resetting the random
number generator part way through a trial. In order to retain the
functionality that randomise was intended to capture, a "Randomise" button has
been added to the run window, so it is now possible to randomise independently
of the model (as should be the case). Note that there is still no point in
randomising twice in a run. Also note that randomise remains available as an
action callable from the scripting language. Randomise now also prints the
value of the random seed to the output trace.
- The "Once" value of the "Initialise:" property (in buffers, networks, and
tables) has been renamed "Each Session". COGENT should automatically convert
old instances of the property, so the user should notice very little.
- Added an "Ignore Edits" option to the Done button on box windows, so it is
now possible to close without saving or confirming save of edits. Confirm Save
is only available as an active menu option when the box being closed is a
compound, when (conceivably) one might want to save edits to some subset of
subboxes of the compound.
Version 1.07.00 (Fri Sep 5 10:28:05 1997)
- Added new project management functions: archive and extract. These are
intended to work in conjunction with the web-based COGENT resources. Basically
the functions just automate the processes of putting a project into a single
file (archiving: tar cf followed gzip) and extracting a project from a single
file (extracting: gunzip followed by tar xf).
- Added server grabs/releases around the project management function
callbacks, so now when you, for example, select "Rename" you have to respond
to the rename pop-up before you can continue.
- Added similar server grabs/releases around the import/export
- Modified mechanism for setting the filename associated with pagable canvas
files to prevent COGENT from crashing when the filename associated with a
pagable canvas is modified (as happens when "Help" is pressed when the help
window is already open).
- Fixed a bug in script file scanning which caused a crash when "Open" was
attempted on an empty script directory.
Version 1.06.01 (Fri Jul 18 15:19:39 1997)
- Modified mechanisms for copying deleted files to/from the waste directory.
This should fix problem with cutting and pasting boxes.
- The option "Warn on system commands" has been removed as it was
- Modified change_class command so it again allows the class of unopened
boxes to be changed from the boxes' parent canvas.
- Fixed bug in table drawing that causes problems when multiple tables were
- Improved OOS efficiency by adding a flag that means buffer contents etc.
are only dumped to their corresponding output files (and hence output is only
updated) when the contents change (instead of on every cycle).
Version 1.06.00 (Sat Jul 12 11:11:28 1997)
- Raw comment subobjects are now allowed within buffers/processes/etc (as
suggested by PGY on 30/06/97).
- Bitmaps are now used for icons. This ensures that PostScript output
matches the screen output and should make extending the class hierarchy
- New subtype of sink: table. Messages of the form data(R, C, V) sent to
such objects are presented as values within a 2-dimensional table. This is
still very experimental. Any suggested modifications will be seriously
considered. (Note: PostScript output of tables is also available.)
- PostScript output from analogue buffers is now available: printing current
contents will now print both textual and graphical representations where
appropriate. The graphical output doesn't attempt to capture colour (by, for
example, using shading) and doesn't include the legend. It also doesn't
- Fixed spacing bug in TwoUp PostScript output.
- Fixed insignificant bug in recalling TwoUp page style from Xdefaults.
- The recursive print option has been moved to a checkbox on the print
options interface. A further boolean Xdefault which governs recursive printing
has also been created, to parallel other print options which are stored as
Version 1.05.09 (Tue May 20 13:10:54 1997)
- Extended the default size of the argument field for "call" conditions to
50 characters. (Suggested by PGY on 12/05/97.)
- Fixed allocation errors in the parser that were creating 2 byte memory
leaks every time a comma was parsed. (Spotted by DS on 12/05/97.)
- Fixed parser failures when operators are used as stand-alone arguments
(e.g., "term(+, -, >)." didn't parse properly).
- Fixed parser failures when infix operators are followed immediately by a
bracketed argument. (Reported by PGY on 13/05/97.)
- Altered legend drawing for analogue buffer output. Only items actually on
the canvas are now listed in the legend (as argued for by PGY for several
- Fixed minor bug in destroying the paste menu after pasting into a compound
- Improved memory deallocation when freeing boxes (as spotted by DS on
12/05/97) and when reading files of Prolog (as spotted by DS on
- Further improvements in memory management, including correct deallocation
of object properties, correct deallocation of the Prolog operator table,
correct allocation of space when loading box files; correct deallocation of
the colour table associated with analogue buffer graphical output.
Version 1.05.08 (Mon May 12 11:11:11 1997)
- Switched FIFO/LIFO access procedures, which somewhere in the mists of time
got reversed. (Spotted by PGY on 29/04/97.)
- Fixed bad memory deallocation on exit. (Spotted by DS on 09/05/97.)
- Removed unnecessary memory allocation in Prolog scanning routines.
(Spotted by DS on 09/05/97.)
- Added new property to data sinks to specify whether output should be
stored locally (and hence inaccessible to all but the most persistent of
hackers) or in the standard I/O directory. The default is local storage. Note
that if this is changed to I/O directory, the user may need to check that if
he/she has multiple data sinks they aren't all connected to the same file. A
future option may allow a third possible location: global to the research
programme (but inaccessible from other research programmes).
Version 1.05.07 (Tue May 6 10:06:31 1997)
- Project selection routines have been substantially rewritten to make
various bits of code more maintainable.
- Included PGY's new syntax for lines in analogue buffers: line and interval
now have new alternative syntaces line(Name, Point1 to Point2) and
interval(Name, Start to Finish). The old versions still work too. This brings
all object types into line with the overall syntax
- Include select/3 in sicstus/oos.pl, corresponding to the built-in select/3
in SWI Prolog.
- The code for handling mouse double clicks has been revised (on both
programme history canvases and compound box canvases), so that a double click
now corresponds to the default menu action. The default behaviour is as
before, but it is now possible for the user to configure double clicking to
correspond to any menu action (by setting that menu action to be the default
in the normal XView way -- holding the required menu button down and pressing
- It is now possible to open any box in edit or view mode, independently of
the mode of its parent. Previously, if you opened a model in view mode, all
boxes and subboxes would necessarily be opened in view mode (and similarly for
edit mode). The default is now to maintain the parent object's mode, but a
submenu item allows this to be overridden.
- The mechanisms for preventing modification of data displayed in widgets in
view mode has been improved. Previously, it was possible to make changes which
were then ignored. Now it is no longer possible to modify the widgets'
Version 1.05.06 (Sun Apr 27 19:55:41 1997)
- Routines for maintaining a research programme's history have been
rewritten. It is now possible to have multi-routed RPs, to delete the root
node of an RP, and to drag models around the RP history canvas (though
positions of models are not remembered between invocations).
- Changed all abort() calls to exit(-1) so that when users exit after a bug
the doesn't crash (though forced crashing is useful for locating bugs).
- Fixed bug in getting buffer dimensionality which would crash if the
relevant box wasn't a buffer.
- The version is now recorded in the init file so COGENT knows when you are
using a new version and can advise of any changes. (Suggested by RC
- COGENT now creates an init file if one does not exist. (Suggested by RC
- COGENT now also creates project and io directories if they do not exist.
(Suggested by RC 11/96.)
- The arguments of conditions/actions are retained (if possible) when the
functor of the condition/action is changed. (Suggested by JF on
- If the current version isn't the one with which configuration information
(i.e., which boxes were open, where the boxes were positioned, and what info
they were showing) was created, then be careful about using that information.
In particular, don't use any information whose representation may have
changed. (Suggested by RC 24/04/97.)
- Added primitive facility for tracing conditions. The facility works via a
new "qualifier", that can be put in front of any condition. trace(X) succeeds
just in case X succeeds, but has the additional side-effect of printing any
successful instantiations of X on the output log. (Suggested by RC 27/04/97 in
response to query from JF.)
Version 1.05.05 (Tue Apr 22 12:47:25 1997)
- Incorporated more functions from PGY for analogue buffers (2D scanning;
the x_mark object)
- Incorporated Pete's release notes as a help file for analogue
- Added better colour support for analogue buffers, such that objects retain
their colours. A legend is also drawn in the top right of the graphical
- Fixed bug reported by MR which caused occasional crashing when closing
- Fixed bug in creation of sibling models from the project manager
- Fixed printing of ';' operator so that quotes are no longer included.
- Added new list processing conditions: replace and replace_all.
- Fixed bug in recurrent processing checking that caused a crash when rules
were edited after changing the containing processes recurrent status.
- Altered routines for drawing/scaling the history window. When scaling is
on, time intervals between are represented by a constant y displacement.
- Changed name of "Project Manager" to "Research Programme Manager".
- Changed name of "History" to "Family Tree". I'm not sure if this is
- When printing an entire research programme, individual modes are now
printed in a sensible order.
Version 1.05.04 (Wed Apr 16 12:35:03 1997)
- Fixed bug in warning of syntax errors in the rule/condition editors.
(Reported by MR's student)
- Generalised mechanism for setting defaults on menus with inactive
- Added X/Y scale locking to scalable canvases. (Suggested by PGY on
- Fixed bug in handling boxes with NULL classes introduced in version
- Fixed silly bug in reading empty Prolog files that crashed on Sun 4s.
Version 1.05.03 (Sun Apr 13 23:23:38 1997)
- Revised code for pagable canvases, improving the modularisation and
putting it in xv_extensions.c.
- Added new extended widget: scalable canvas, especially for analogue buffer
output. The widget consists of a canvas with sliders for X and Y scale. Will
probably need to clean up the code a lot if this is to be a reusable
Version 1.05.02 (Fri Apr 11 16:49:54 1997)
- Added Pete's code for circles in 2D analogue buffers
- Added initial version of colour code to give colourful output of analogue
Version 1.05.01 (Wed Apr 9 11:28:59 1997)
- Added further print option to suppress printing of initial contents.
- Included PGY's code for displaying polygons within analogue buffers.
Version 1.05.00 (Mon Apr 7 13:16:34 1997)
- Added primitive script editor/running facilities.
- Added print confirmation window showing all print options before printing
- Made print options inactive when they are not relevant (both in print
confirmation and in the Options panel).
- Added options for print formats: PostScript or Plain Text (i.e., ASCII).
- Added landscape mode for PostScript printing (and revised interface for
setting "Two pages per sheet" (i.e., two-up) mode).
- Fixed bug in font size when printing PostScript in two-up mode.
- Buffers can now contain Prolog conditions (but don't use them!).
- Added graphical output for one-dimensional objects in analogue
- New (more efficient and more portable) method of generating random seeds
in SWI version of OOS. (Fix due to PGY.)
Version 1.04.04 (Fri Feb 28 17:37:38 1997)
- Added a new condition "trial X of Y" so the user can determine which trial
is currently being run, and how many trials there are in the current
- Fixed one (of many) memory leak, in which space used by X font information
wasn't being freed when it should have been, resulting in potential linear
growth in RAM requirements if displaying contents whilst the model was
running. Further memory leaks remain (e.g., when closing boxes) and should be
Version 1.04.03 (Tue Feb 18 12:19:43 1997)
- Subtle change in the menu generated under Add Condition/Prolog. The first
(and default) entry is now call/1. Other user-defined conditions are listed
- Added new list-processing condition: sort/2 which is just an interface to
the standard Prolog list sorting routine.
- Added new condition: randomise/0, which uses the current date and time to
reset the random number generator.
- Grouped miscellaneous conditions (current cycle, randomise, cut) under a
single menu in the Add/Modify Conditions functions.
- Fixed a couple of printing problems: when printing compounds, COGENT would
occasionally incorrectly calculate the height of those boxes and hence
over-write some bits of the page; when printing bits of Prolog containing
special characters (like backslash), COGENT wasn't marking those characters as
special so PostScript was ignoring them (or trying to interpret them
- Added new property to control the number of lines displayed in the Prolog
half of the OOS window.
- Fixed bugs in rule commitment which caused crashes when a rule was edited
and the rule's box was set to show the box's properties before the rule's
editor was closed.
- Fixed parallel bug in box reloading that caused crashes when a box was
reloaded when it was set to show its properties.
Version 1.04.02 (Wed Jan 8 22:06:16 1997)
- Fixed bug in project disposal which was causing a crash whenever you
deleted an entire project.
- Made modes box-specific, so, for examples, processes can be viewed in
rule, description, message log, or property mode, and compounds can be viewed
in diagram mode (instead of using generic mode names like "initial
Version 1.04.01 (Mon Jan 6 10:46:15 1997)
- Altered presentation of property information so that it too is shown on a
separate subwindow of a box (i.e., there is now a "property" mode as well as
modes for "description", "initial contents", etc.). This is in preparation for
allowing the addition of instance specific properties.
- Moved all the syntax checking etc to a callback under the File menu. This
speeds up model loading and makes puts syntax checking under the user's
- Added a further phase to syntax checking which removes any outdated files.
This includes old backup files (which were never much use) and any directories
for boxes which are no longer part of the model.
- Added a project clean up phase on project loading which removes any models
that are no longer part of a project. I'm not sure how such files might get
left around, but I found a few in the JDM project, so it seemed useful, but
this might get removed if it isn't actually used again.
Version 1.04.00 (Mon Dec 30 19:32:37 1996)
- Removed use of single quotes around special punctuation characters (; and
,) when used as principal functors in a clause
- Add arrow checking when loading a model. If, on loading, COGENT discovers
an arrow of the wrong type leading from a box, or an arrow of the right type
without a corresponding return arrow, the arrows will be automatically
adjusted to ensure that the complete model is consistent and complete.
- Add checking of rules etc. to ensure that all messages and matches have
- Fixed bug preventing double click in view mode from opening a box. This
now works. Also prevented edited box elements from being committed to an
- Typing an integer into the cycles/step or trials/block fields now sets
those fields immediately. Previously they were not set until or was
- On the Mode menu of the Run window, the current mode is now inactive
(because it doesn't make sense to switch to the current mode), and the other
mode is the default. Thus, clicking on the menu button is now enough to switch
- Fixed printing of (spatially) large models such that they are scaled to
fit onto the page, regardless of their size (as requested by ME).
- Added printing of project history/description/models.
- Fixed bug in printing: was occasionally crashing when printing empty
descriptions due to bad code for calculating the length of a null string.
Version 1.03.05 (Fri Dec 20 13:24:15 1996)
- Fixed bug in subobject editor which was causing user-entered terms to
occasionally be misread and overwrite existing data, usually leading to a
- Fixed typos in some parser warning messages.
Version 1.03.04 (Thu Dec 19 18:05:34 1996)
- Fixed long-standing undesirable behaviour in change_class, such that now
changing a box's class only deletes the contents of that box if the old and
new classes are incompatible (e.g., buffer and process). JF first complained
about this on 10/04/96.
- Removed warning message from configuration read process, so missing boxes
(which might arise legitimately when a new model is created) no longer result
in puzzling warnings.
- Fixed bug in rule editor which was making all ports into output ports, and
possibly causing crashes due to incoherent arrow information.
Version 1.03.03 (Wed Dec 18 17:35:59 1996)
- Recursive copy box fully implemented (finally!)
- Added code to update old-style internal box references. Previously
messages were addressed to boxes by name. This meant than changing a box's
name would mess up any messages targeted at that box. Some time ago this was
changed so that all new messages would be addressed using an internal
reference which was independent of the box name. Old-style references were
inherited from previous models, and COGENT/OOS didn't mind mixing them. This
fix will update all references when you load a model, ensuring that only
internal references are used. Once the fix has propagated to all models, it
will be removed and OOS will be updated so as not to understand the old-style
NOTE 1: Internal errors will arise if a reference cannot be updated.
This will only occur if COGENT cannot translate from a stored old-style box
name to the box's internal reference. This in turn should only happen if you
have messages which reference boxes that either no longer exist or that have
their names spelt incorrectly within the message.
NOTE 2: While updating the references, COGENT also takes the
opportunity to get rid of any excess uses of "call" wrapped around rules'
NOTE 3: Given the above, it is highly recommended to open and
recursively save each and every model in your project directory. If I had time
I'd write a little routine to automagically do this.
Version 1.03.02 (Mon Dec 16 11:14:18 1996)
- Fixed bug in locating external objects of compounds when presenting the
options within a rule's menus (reported by ME, 10/12/96).
- Improved reporting of syntax errors in user-entered Prolog terms: report
now shows string being parsed.
- Partially implemented copy of compounds (but I wouldn't use it yet!)
Version 1.03.01 (Wed Dec 11 22:30:09 1996)
- Slight alterations to project history diagram (discs instead of squares,
plus black GC instead of inverse GC, plus slight increase in sensitive area
around individual models).
- Slight modification to some error/warning messages.
- Reverse the specific properties of analogue buffers to make the order more
- Fix insidious bug in OOS concerning addition of variables to buffers.
Version 1.03.00 (Wed Nov 27 00:22:47 1996)
- Box state (open/closed) are now remembered with position information. This
information is not currently used on start-up.
- Altered condition menus to include any user defined conditions (as
suggested by PGY).
- Sink output now goes to the io directory if a file is nominated. If no
file is specified (under the sink's properties) output is sent to
"data.current" in the sink's directory (as before).
Version 1.02.00 (Sun Nov 24 10:56:51 1996)
- Fix bug in parsing terms containing multiple unbracketed operators.
- Fix OOS so that variables in sink output are translated into more sensible
upper-case-initial identifies (e.g., _193032 will appears as something like
- Added code to remember window positions and modes across sessions.
- Added Boolean option to control whether window positions/modes are
remembered across sessions.
- Added "is" to list of mathematical conditions in rules.
Version 1.01.01 (Wed Nov 20 15:43:39 1996)
- Fixed Linux bug in directory creation (was preventing creation of top-level
boxes on some machines).
Version 1.01.00 (Mon Nov 18 19:15:18 1996)
- Start version numbers with clear criteria for incrementing such
- Added "What's New" subwindow.
- Merged Limited & Unlimited Buffer subclasses.
- Added code to automatically update outdated file formats.
- Updated OOS to handle the modified class hierarchy.
- Fixed bug in OOS causing duplicate printing of trace initialisation
Version 1.0 (Mon Nov 11 15:37:24 1996)
- Fix "stop" action which broke when message logging was added.
- Allow view of message log for compounds.
Version 1.0 (Sat Nov 9 17:33:05 1996)
- Make the import/export dialogue box remember the last import/export file
- Replace "Recursive" by "Recurrent" in processes
Version 1.0 (Mon Nov 4 15:21:42 1996)
- Fixed two non-NULL-terminated xv_set commands, correcting the bug
(reported by Mike Ramscar) which sometimes caused crashes when opening
Version 1.0 (Sun Nov 3 16:54:00 1996)
- Added help button/frame on run window.
- Fixed bug in use of help frames: previously frame accounting failed when
the parent was destroyed. Now frame handles are attached to parents and hence
destroyed with parents.
- Fixed bug in setting frame labels: long names where causing crashes when
string space ran out.
- Added new boolean option to control scrollbars on diagrams: "Scrollable
- Removed redundant option: "Create tracefile?"