Information on older (pre-1.4) development

The primary site for chemtool is still

Please go there for screenshots, stable versions, etc.

Please contact me at

Development series for 1.4

1.4.alpha1 (29.03.01):
The bug fixes from 1.3.pre-1 , plus :
Added two new bond types, the 'left' and 'right' versions of a partial (dashed) double bond, to chemtool and cht. In 'bondtype' mode, the type of the selected bond is now changed to the current default type instead of the next type in the cyclic list. Replaced the upper button row of the GUI by a more standard menu bar (Michael Banck).
1.4.alpha2 (16.04.01):
Added the kerning and export fixes from 1.3.1. Added #ifdefs to simplify switching between the 'old' and 'new' GUI style. Made copying a marked object automatically invoke 'Move' mode instead of re-entering 'Mark' mode to prevent accidental placement of the copy on top of other geometry. Added function to draw square brackets around the marked part of a structure (currently treated as 2x3 single bonds internally). Added function to draw curves by specifying four control points - the curve runs from the first to the last point and is bounded by the other two (cubic bezier curve). Depending on the current bondtype at the time of drawing, the curve can be dotted, have a half or full arrowhead (bondtypes 12,8 or 9), be used to define a solid black object (e.g. orbital lobes, 'wide' linetype) or a simple line (all other bondtypes). This new object type is stored in a new section 'splines' in chemtool files, and converted to a xfig 'polyline' on export. In this version, it can only be added, marked and deleted - copying, moving or changing is not yet implemented.
1.4.alpha3 (23.04.01):
Fixed erratic text placement when textmode was already active at the time the text entry box was activated. Fixed broken dialog messages for Latex output. (Both bugs introduced in 1.3.1-pre2).
Fixed miscalculation of spline curve, implemented copying, moving, and mirroring of curves, moving a curves control points and changing its type. Pressing the right mouse button in curve mode cancels the incomplete curve now. Added correct 'radio button' behaviour for the 'curve' button. Corrected fill color and shape of curve arrowheads. Replaced the simple export popup with an extended file selection dialog that provides choice of filetype and automatically appends appropriate suffixes. Changed xbm export to dump only the relevant part of the drawing area if nothing is marked. Unified the export dialog handling, clarified filetypes (LaTex export was named XFig/Latex although it has no separate xfig content, XBM was erroneously described as X pixmap instead of bitmap on its tooltip).
1.4.alpha4 (2.05.01):
Exporting to eps only claimed to use filename.eps, but actually reused the name of the drawing file, potentially overwriting it. Fill style for curves was not reset correctly on export, leading to strange effects on subsequent curves. Curve control points were not hidden in xbm output. 'Half arrow' curves had an extraneous arc protruding behind the arrowhead. Added preliminary support for 'curve' objects to template system (maximum of 2 per template), added 'orbital' page to template system (currently sporting one p orbital only).
1.4.alpha5 (28.05.01):
Implemented rotating and rescaling of spline curve objects.
Limited size of arrowhead on curved arrows, added code to ensure that half arrowheads appear on the correct side of curved arrows. Added shortcut for 'curved semiarrows' to bondtype menu. (This creates a spline with two coinciding control points slightly offset from the midpoint of the line, so converting existing bonds to or from this type is not possible.)
Control points are now only shown in 'move' mode, they are larger than before and displayed for 'circle' bonds as well.
Moving the center of a circle now moves that circle without resizing it. Fixed missing break in case statement that caused label deletion to also delete any marked fragments.
Fixed bugs in xfig output - compound boxes were too short, and simple labels were exported as unterminated compound objects, leading to strange effects.
Added a drawing of the citrate cycle to demonstrate the new arrow types. Added an actual copy of the GPL to the tar archive as requested by the FSF.
1.4.alpha6 (5.6.01):
Added special treatment of wedges and greek characters in Latex export mode to work around fig2devs apparent inability to translate filled polygons and the X11 symbol font into pictex commands. Changed wavy bond to change chirality depending on direction, so that they can be linked to form longer patterns. Some documentation updates.
1.4.alpha7 (12.6.01):
Added french localisation (by Jerome Pansanel, based on 1.3). Added arbitrary scaling (via the -m ption of fig2dev) of eps and pictex output (suggested by Jerome Kieffer). Added a few example drawings provided by Michael Banck.
1.4.alpha8 (18.6.01):
Added manual page for cht. Added menu code update by Michael Banck, most menu options have Ctrl-(key) shortcuts now. Added experimental (and not yet fully functional) automatic ring generation using Ctrl-3 to Ctrl-9 for 3- to 9-membered, Ctrl-0 to Ctrl-2 for 10-, 11-, 12-membered rings. Used fewer lines for the pictex representation of wedges to avoid exceeding Latex' memory capacity even with small molecules.
1.4.alpha9 (25.6.01):
Backed out the pictex wedge changes of a8, as the real solution is to increase the value of extra_mem_bot in texmf.cnf (without it, Latex will fail when there are even just a few simple drawings, with or without wedges, in a file. This is a known feature of PicTeX). Fixed output of regular characters in pictex - it was using italics because of leftover $ characters from the earlier implementation. Changed filenames of the examples added in a7 to reflect their contents. Successful exporting is now reported in the status bar instead of the popup window. Updated README and chemtool manpage. Rewrote ring generating code (Michael Banck) so that rings are correctly attached now. Ring drawing is initiated by holding the control key while drawing a bond that serves as the first segment of the ring. Ring size is governed by the current drawing mode (5, 6 or 8 sides), but it can be preset on a per-ring basis by pressing Ctrl-3 to Ctrl-9 for 3 to 9 sides, Ctrl-0 to Ctrl2 for 10, 11 and 12-membered rings. Rings are always drawn in clockwise direction based on the direction of the initial bond, they are marked automatically and can be erased by pressing Ctrl-mouse3 immediately after drawing.
1.4.alpha10 (2.7.01):
Fixed bug that prevented the template menu from working in alpha9. Fixed passing of pointers and added type casts to improve portability on platforms with different default sizes of int and pointer. Updated Makefiles (add declaration of $MAKE for building cht on systems where the default make program is not GNU make; install cht manpage; building cht does not require the math library). Prepared menu items for localisation, updated german translation.
1.4.alpha11 (15.7.01):
Tried a different approach to solve the portability issues in main.c. Dashed wedges are now drawn without the final, widest line (M.Banck), and filled wedges adapt to the width of an adjacent wide line. Added filling of arrowheads in Pictex output. Added polish translation (Nikodem Kuznik). Added several drawings of antibiotics to the examples and several chiral auxiliaries to the templates (files provided by M.Banck), moved some of the simple examples to the templates. Added '-i / --interpret' flag to cht to allow using it from the command line (e.g. cht -i C_6H_5OH). Added a rough sketch of the citrate cycle to the examples. Added a Makefile for compiling on 64bit SGI systems (provided by Michiel Kreutzer).
1.4.alpha12 (30.7.01):
Fixed zoom bug introduced with alpha11 (zoom out did not work). Fixed calculation of 'adaptive' wedge width in the export functions. Added key sequence '@*' for the 'dot' symbol character (which is not available with regular keyboard mappings), correspondingly added '*' to the shortcuts available in drawing mode. (For radicals, and to mark the atom positions in cumulenes, ketenes, etc.) Added a new bond type, 'striped' single bond for diastereomers. Drawing a ring with the 'circle' bond type now creates a polygon with an aromatic ring inside, instead of a sequence of overlapping circles. Updated Czech translations.
1.4.alpha13 (5.8.01):
Made cht work again (the new interactive mode had an uninitialized variable that prevented normal operation). Fixed a small typographical error in the Czech translation. Added Michiel Kreutzers Makefile for older 32bit SGI workstations. Holding the control button while dragging the mouse in scale mode now does anisotropic scaling for pseudo-'3d' effects.
1.4.alpha14 (26.8.01):
Fixed locale declarations to make language support work again with new glibc. Moved declaration of locale path into the Makefile. Transformed an ugly bunch of 'if' clauses into a switch() for (slightly) faster screen drawing. Modified 'adaptive wedge' drawing code to draw a regular wedge when the angle between the wedge and the wide bond would make the wedge collapse into a thin line. Fixed a typo in the german locale file, added the trivial updates to the french localisation. Cleaned up the template menu code to fix the problem with missing template icons reported for RedHat 7.1. Added the updated polish translation provided by Nikodem Kuznik. Updated the rpm spec file in preparation for the 1.4 release.
1.4.alpha15 (5.9.01):
Modified locale path declaration in Makefile to improve portability. Changed the font initialization code to attempt a fallback to the 'fixed' font if the 'helvetica' font cannot be found. Changed export modes to export only the selected portion when a selection has been made. Cleaned up the furanose template. Clarified the section on label input in the README file. Modified the ratio of cursor movement to rotation angle to allow speedier rotation of structures.
Changes leading to 1.3 :

1.3alpha1  (20.6.00):

Fixed and restored XBM export.
Added an (almost empty) template menu (which was already hidden in 1.2a8).
Fixed kerning of mixed sub- and superscripts (as in SO_4^2^-).
Changed allocation of initial drawing area.
Changed 'Save' function to calculate the actual size of the drawing.

1.3alpha2  (3.7.00):

Added option menu for default bond type.
Added label support to template function.

1.3alpha3  (10.7.00):

Reduced the preallocated drawing area again, as the increase in 1.3a1 caused a massive slowdown at startup.
Freed unneeded pixmaps in the button setup code.
Fragment rotation is now based on a stored copy of the initial coordinates - this should fix the distortions caused by accumulated rounding errors.

1.3alpha4  (24.7.00):

Changed bond option menu to use small icons instead of longer and less intuitive text labels. Removed test for 'cursor inside marked box' condition in Move mode to allow smooth dragging. Started populating the O and N heterocycle panels of the template menu. Fixed a duplicate bond in the tcdd example, and removed some examples that have become templates.

1.3alpha5  (28.8.00):

Added keyboard shortcuts for some labels:
pressing c,n,o,s,p,i,h,d,b or r inserts the corresponding centered symbol at the last drawing position, while 'l','1','2','3' translate to the left- justified symbols 'Cl','CH','CH_2' and 'CH_3' respectively.
Fixed a GC leak in export_bitmap.

1.3alpha6  (18.10.00):

Moved the nucleoside examples to the template system. Made marker position default to last drawing position, so that the 'Add' function is now always active. Beginnings of internationalization (.mo file for German locale added). Fixed naphthalene template, added dicyclo- pentadiene. Changed Add_atom to automatically convert blanks in label input to backslashes for storage. Prepared a few drawings for later inclusion in the template system (camphor,pteridine,caffeine,glucose, fructose,mannose,galactose,neuraminic acid, spiro[4.5]decane).

1.3alpha7  (12.11.00):

Template cleanup: porphine moved to heterocycle panel, spirodecane added in its place. Glc,Fru,Man,Gal transfered to carbohydrate templates, caffeine to heterocycles. Czech translation (by Radek Liboska) added. Improved bounding box coordinates for xfig compound object (used for sub/superscripted labels) Changed export functions to remove the intermediate '.f2l' files. Changed orientation in xfig header to Portrait. Adapted xfig (and xfig-based) export modes to the new XFig default depth of 100. Changed depth of xfig text (labels) to 90 and added filled white polygons at depth 95 to hide overlapping line segments (experimental, used only for sub/superscripted text at the moment). Reset default filename to 'unnamed' when the current molecule is deleted.

1.3alpha8  (19.11.00):

Changed buttons mark/move/rotate/flip/delete/copy from text to icon to reclaim space for the text entry box (icons created by Radek Liboska). Added white polygon to clear area under normal text as well.

1.3alpha9  (26.11.00):

Added program icon. Added an interface for Radek Liboskas standalone program CHT, which calculates sum formula and molecular weight from a chemtool sketch. Corrected example drawing of brevetoxin.

1.3alpha10 (10.12.00):

Really reset mark flag when nothing was within the marker box. Allow saving only the marked region (formula weight computation only). Helper program CHT now parses those labels that are not in its internal table of common substituents; exact mass is now returned automatically. Added status line with message history.

1.3alpha11  (20.12.00):

Internationalization support made optional (define DISABLE_NLS in the Imakefile if you do not want it) to allow compiling on systems without GNU-style locale support again.
Improved ring size and position in the benzene and cyclopentadiene templates (Michael Banck). Reset all marks before loading a template. If the template menu is already open, pressing the Template button now brings it to the front. Added templates (inden,biphenyl), removed the ugly question mark placeholders.
Changed handling of windowmanager events, so that using the window decorations' CLOSE button brings up the Yes/No dialog while the chemtool window is still alive.
Changes in helper program CHT (cht011a): now recognizes Ac in complex substituents; correctly handles aromatic 'ring' in formula input; checks input file for identifier "Chemtool"; reads number of bonds from "bonds" line (to handle label-only files gracefully); exits on unattached labels instead of silently miscalculating formula and mass. Subsequently updated to Radek Liboskas current version 0.19, which already includes equivalent changes. Added list of abbreviations supported by cht.

1.3alpha12  (01.01.01):

Reset all marks before 'adding' a sketch. Adding a label on top of an existing one now replaces the old label as it should. Added a function for rescaling objects (useful for drawing reagents above the reaction arrow - but labels are not rescaled yet). Added linetype 13, a single bond with opaque background (for crossing bonds - see the bicyclooctane template). Updated the German translation.

1.3alpha13  (08.01.01):

Dropped the internal icon, as it was only causing trouble, especially with KDE. Most window managers allow specification of an external icon anyway (added chemtool.xpm for this purpose). Moved 'delete fragment' button to the end of the button row. Updated Czech translation by Radek Liboska. Added linetype 13 to the helper program CHT, made it accept any Chemtool 1.x file, not only version 1.2. Updated the 'documentation', i.e. the README file, split out an INSTALL file. Set version number in chemtool files to 1.3. Fixed bug that left a newly 'added' structure active but unable to move. Rewrote positioning logic for subscripts and right-justified text in export modes again. Changed screen display of molecule from 'fixed' fonts to helvetica as used in the export modes - previously, labels that appeared fine on screen could overlap in the final (postscript) output. Fixed 'mannose' template that showed exactly this. Added formatting option '|' for slanted characters (as in iPr,tBu).

1.3alpha14  (15.01.01):

Fixed label shortcuts for CH_2 and CH_3 that could crash chemtool (buffer overrun). Fixed scaling in export function, which had been applied to labels only. Improved label size at smallest scale. Added correction factor for sub/superscript after certain characters (the joys of proportionally-spaced fonts :-( ). Handled reopening of template menu after a close via the window manager. Updated 'About' window.

1.3alpha15  (18.01.01):

Changed canvas bitmap allocation to avoid uncovering garbled portions when the sliders are used. Fixed fragment deletion code (deletion of the marked fragment and redisplay of the modified drawing are now performed immediately). This hopefully fixes the crashes some people have been seeing with this function.

1.3, tar.gz 1.3, binary rpm 1.3, source rpm 1.3, debian package

(changes vs. 1.3.a15)
Check for no (or no selected) atoms before trying to delete a fragment. Some code cleanup: removed dead code, fixed unnecessary parameter passing between functions, tidied formatting with GNU indent. Removed Imakefile and provided regular Makefile (the build process relies on gtk-config, not xmkmf, since 1.2), added install targets for the localization files and manpage.

1.3.1(mostly) a bugfix release for 1.3 :
1.3.1, tar.gz
1.3.1, i386 binary rpm
1.3.1, source rpm
1.3.1, i386 debian package
(debian packages for other architectures may be available at

(changes vs. 1.3)
Updated src-cht to version 1.7, which now also outputs composition in mass percentages and flags duplicate bonds with an exclamation mark. Fixed string buffer overflow problem with returned values from cht. Fixed some example files that contained duplicate bonds. Added appropriate window titles for the file selection dialogues. Fixed unit flag in xfig output (was 'Centimeters', should be 'Metric'). In eps export mode, fig2dev is now called with the '-L eps' option of fig2dev-3.2.3 first, and if this fails for some reason, the old-style '-Lps' option is tried (which would create non-encapsulated postscript with more recent versions of fig2dev).
Modified the new Makefile (which was always recompiling all sources even if only one was changed). Reduced height of chemtool window by 20 pixels to keep the status line (with cht output) visible on 800x600 (laptop) screens. Modified calculation of xfig bounding box for labels - it was creating degenerate boxes (both x coordinates equal) for labels like H^+ which sometimes confused xfig. Chemtool now uses different cursor glyphs for the drawing and editing modes (Radek Liboska). An 'Add' or a failed 'Load' no longer changes the default filename. 'Delete marked fragment' is now performed by clicking the right button in 'mark' mode, the corresponding menu button is replaced by a function for cleaning up formula drawings (which removes duplicate bonds and fuses closes contacts) . Chemtool no longer draws a line from the top left corner to the first point set, and does not show the 'unsaved changes' dialog when there are no bonds or labels. Fixed button bar to correctly toggle from rotate to scale mode. Added callback to suppress insertion of labels via the hotkey function when the user wants to type into the text entry box. Fixed Latex export to not use whiteout boxes (which were obscuring the labels they were supposed to create space for), removed erroneous reference to the temporary .f2l file in the popup message. Drawing size (but not font size) was reversed in the two smallest zoom scales. Did another round of label positioning and kerning fixes in both screen and export modes. Updated alternate URL in documentation and About dialog, as the tu-darmstadt system is about to be shutdown. Added russian localisation (Michael Shigorin, based on 1.3). Updated czech localisation (Radek Liboska).