VMD 1.8 Development Status

  • VMD 1.8 Final Release (12/09/2002)
    • Added a "const" in front of a Fl_Menu_Item variable.
    • Completely rewrote the cb_cb function, using different Fltk calls, hopefully eliminating the Mouse menu checkbox problems on Solaris et al.
    • Fix mismatched parameter types for pick_start() method in Pickable base class.
    • Put quotes around STRIDE_BIN in the call to the stride binary.
    • Made several README changes based on comments from Justin, including two error corrections.
    • Updated the installer, got rid of some older revs of plugins.
    • Updated infolist.txt from the README file.
    • Updated windows self-extractor text messages and about box text.
    • Rewrote most of the intro text in the README file.
    • Tightened up the README file some more, less words, more to the point.
    • "molinfo 0 set top 1" now causes the GUI's to update because it goes through the VMDApp method.
    • Major cleanup of the README text.
    • Updated platform detection of html viewer to correctly handle MacOS X. Test indicate that the "open" command only works correctly with URL's as of MacOS 10.2.x however, the old open command doesn't understand them.
    • Fixed default open command on MacOS X to be /usr/bin/open for now.
    • Change the default image viewer to ImageMagick rather than xv, since ImageMagick is more open and comes on a bunch of the freeware distributions these days.
    • Use the compiled-in default VMD image viewer in LibTachyonDisplayDevice.
    • moved the render form figure into the body of the text to fix the layout.
    • minor fixes, retitled subsection, fixed a typo
    • further improvements to the graphics form text, crunched things down a bit more, removed a couple more redundancies.
    • rewrote some of the depth cueing and clipping plane text.
    • tightened up rep hiding text a bit to cure a formatting problem with a dangling word on the following page.
    • Rewrote the section documenting how files are loaded and what happens as file loading commences.
    • Rewrote the section documenting how files are loaded and what happens as file loading commences.
    • Further improvements to the molecule loading docs and file format descriptions.
    • Fixed name of sim form to match what the gui says.
    • Change long itemized list of menu names to a short textual list, and corrected and replaced old menu names with current ones.
    • Shortened and clarified the draw command intro text.
    • Joined draw_sphere text with the end of the draw_arrow text.
    • Further improvements to the draw arrow and draw sphere examples, latex fixes
    • Elminated the chapter on user-defined graphics, moving remaining documentation and links to the text command chapter.
    • Blew away the trace variable example in the graphics section since it's already in the advanced script writing section verbatim; moved the index entries to the script writing section.
    • Further compression and improvement of the quick tutorial text.
    • Moved documentation for the graphics and draw commands from the User-defined graphics chapter to the chapter on Tcl commands (preserving index entries). Deleted verbatim listing of scripts that are already in the VMD script library and added a URL reference.
    • The tutorial now directs users to download the data from the web site rather than getting into digging around in their VMD installation etc. Tightened up the text a bit more.
    • Updated graphics form docs, replaced use of the word "view" with representation so we are more self-consisent, added a new subsection documenting the new smoothing tab, and renamed the tab doc sections to include the word "tab" in them, to make it more obvious.
    • Moved text on making stereo images from the viewing modes chapter into the rendering chapter, and rewrote the text regarding stereo image exporting to provide two decent examples.
    • Rewrote the subsection on making movies, since the old material was completely out of data and bogus.
    • Better title and fixed text up a bit.
    • Lots of updates and further weeding in the sim form docs, much text was leftover from ancient versions of VMD, so that text has been dropped, and more concise text has replaced it.
    • Made the sim form docs more to-the-point, cut out unnecessary details. This section still needs a proper reference to the I3D paper.
    • updated tools form to better document the features, but much more compactly, eliminating some redundancies and organizing some of the text a bit better.
    • updated the default .vmdsensors file with new stuff for the "sballtracker" code that Paul added some time ago.
    • Eliminated much redundant information between the render form docs, and the chapter dedicated to rendering.
    • Significant updates to the documentation regarding loading of trajectory files.
    • Further improvements to main form docs, specifically regarding the animation controls.
    • Tightened up the text on user programmable hot keys.
    • Trimmed the length of the spaceball docs, tried to make it more readable and remove details which aren't really pertinent to the user at the present time.
    • Significant text compression in the mouse menu docs, eliminated redundant information, updated our terminology, and corrected the names of menus and menu items which have been changed for VMD 1.8.
    • Shorten UI chapter intro text, get rid of unnecessary detail.
    • Updated file loading info, eliminated out of date references, and redundant information.
    • Re-ordered registration, citation, and copyright info into decreasing order of our preference that users actually take the time to read them :)
    • Updated the information on TB programs, trimming length substantially.
    • shorten copyright/ref info on Tachyon and url_get.
    • cut down length of credits text, keep just the necessary details.
    • Cut down length of credits text, keep just the necessary details.
    • The old "future" plans are just another example of something that gets outdated so fast that it really belongs on the web site and not in our user's guide. In any case, it would have been better to put that in an appendix at the end rather than in intro material.
    • the future plans are really outdated, no point in listing them this way. If we want to do this, it should be on the web site, not in the manual.
    • updated the user's guide intro text
    • Clean up user manual title pages
    • Eliminated redundant use of WWW since this is pretty obvious to the average computer user these days.
    • Updated more of the user guide credits and intro text.
    • Improved text interface comments, replaced double quoted items with font usage stuff to indicate text commands and menu items more clearly.
    • Updated the load state and save state instructions to match the new version.
    • Fixed commentary on file types, webpdb loading example, etc.
    • Raster3D info updated.
    • Further tutorial updates.
    • Replaced mouse form with mouse menu, updated general mouse text stuff.
    • Updated mouse text renaming menu names appropriately here and there.
    • Significant tutorial text updates.
    • Several AutoIMD improvements.
    • Typo corrections in python code.
    • Fixed and improved the built-in help for mol clipplane
    • Eliminated compiler warnings on tcl result strings.
    • Added Todd Furlong to list of people that helped us out.
    • Made the CAVE tracker and button classes more reliable, they check to see if the display has been initialized before assuming that the CAVE library is providing good data.
    • Fixed typo.
    • Added framework for checking whether or not we are actually running in a CAVE or FreeVR before trying to use a Cave or FreeVR tracker or button device. These checks still need to be performed within the respective do_start() routines.
    • add in better checks for stereo availability in the CAVE
    • May have found a fix for Jutta Dreer's CAVE / immersadesk lighting problem, though not yet enabled.
    • clean up multisample and stereo checks.
    • Added documentation for Molecule.files() and Molecule.types(), as well as notes on saving and restoring Molecule state using pickle.
    • Make MoleculeRep store molecule id's instead of Molecule instances; it's much cleaner this way and eliminates multiple updates, errors resulting from deleting Molecule instances, and other potential problems.
    • Fixed bug in addRep whereby a rep could be added to a molecule twice if different Molecule instances were used.
    • Molecule instances can now be pickled in order to save and restore the state of individual molecules.
    • Added molecule.get_filenames() and molecule.get_filetypes() to the Python molecule module. Added corresponding files() and types() methods to the Python Molecule class. Added test for files() and types() to the Molecule unit test, update the unit test for changes to the Molecule __init__ method, and changed the paths to the test molecule files.
    • Molecule.load guesses webpdb filetype when the filename has four characters and no periods.
    • Can pass a name to Molecule.py as first argument to specify the molecule name.
    • Updates to the Sim menu.
    • No more SMD tool.
    • Updates for the new Color menu.
    • Eliminate reference to old graphics form tool selection docs now that its been removed.
    • Added notes about the atom selection macros in the Graphics menu.
    • Big revision of the Graphics form docs.
    • Updated the first half of the AutoIMD UG (intro + getting started).
    • Delete obselete stuff about non-existent buttons.
    • Improvements to description of Graphics menu; added stuff about materials.
    • Added documentation for the vmdnumpy module.
    • Doc updates for the new command line parameters.
    • No more betas, now we're onto actual VMD 1.8 release candidates, so we keep this version number until we accept a release candidate.
    • Added documentation for the Python Molecule module.
    • New AutoIMD GUI picture for the "Simulation Settings" dialog box.
    • Updated AutoIMD image to reflect new interface.
    • Automatically import vmdcallbacks and vmdnumpy into the the toplevel VMD module.
    • Made VMDApp::display_set_size() take effect immediately; removed old detail setting string constants from the Python display module.
    • Added test suite for Python display module.
    • Updated mouse form information for new existence as a submenu of the main form, and migrated atom picking information to the label form docs where this feature now resides.
    • Remove ug_form_edit docs.
    • Eliminated the remaining stuff pertaining to the old edit form.
    • Moved the amount chooser info into the molecule file browser form docs.
    • Moved documentation on saving trajectory frames into the new main form section.
    • Moved trajectory frame deletion text into the main form docs.
    • Move trajectory frame loading text from edit form description to the files form description.
    • Updated the GUI pictures used in the tool form and the display settings menu and form, and updated the description of the display settings controls.
    • Added size keyword to display.get and display.set. Also fixed up apparently broken logic in these commands; really need to write a test suite...
    • No need to capitalize Aliasing in the work Antialiasing..
    • Fixed typo in display.stereomodes().
    • Added new Python classes to the VMD module; removed the Display class since it doesn't do anything useful.
    • Further updates to the tool form docs, still needs a ton of work.
    • Corrected the name of the new version of the "files" form in the docs.
    • Renamed the tracker form and updated some of the text to correspond to the new tool controls form.
    • Updated the figures and text for the new graphics form
    • Better to make some of the main form discussions a whole subsection, but name them consistently as main form sub-components.
    • Eliminated comments about forms that are now gone
    • Rewrote and migrated text from the old animate form description into the new main form description.
    • moved contents of the mol form text into the main form text.
    • Updated the files form documentation for the new form.
    • complete reordering of the GUI interface sections to accomodate coherent discussion now that many things are rolled into the main form rather than separate mouse/display/mol/animate forms.
    • started updating GUI docs. Replacing the GUI figures one by one.
    • Fixed a problem on MACOSX where the Python interpreter somehow got an EOF as soon as the interpreter was entered for the second time.
    • New version number
  • VMD 1.8 beta 7 (12/01/2002)
    • Rolled back the Win32 version of VMD to use FLTK 1.0.10 until the 1.1.x versions are a bit more stable. Also removed the old ColorFormsObj from the compile.
    • Changed the default FLTK linkage flags to remove the -lfltk_forms library for two reasons 1) all platforms except OSX are going back to FLTK 1.0.10 for the VMD 1.8 release, barring unexpected events. 2) when we use 1.1.x for a real release, we'll undoubtably finally be rid of the -lfltk_forms library anyway, as the only thing still using it is the SimFormsObj code, which will either be rewritten or eliminated by then.
    • Reverted all platforms except OSX to FLTK 1.0.10 for the time being.
    • Took out the old render menu and the old color menu since they have been replaced for a while now.
    • Removed the old ColorFormsObj menu from the build.
    • Fixed a potential startup crash due to command line argument indexing going ahead without checking argument counts first.
    • Added documentation about using escape characters to correctly process atoms names that include special characters such as *, +, -, etc.
    • Hold off on enabling Parm radii reading until we get more input from the AMBER team.
    • Added more descriptive error messages to write_stride_record.
    • Mapped Cmd-Left Mouse Button on the Mac to Middle Mouse Button.
    • Increased the size of the Main menu on the Mac version to keep the resizing tab out of the way of the buttons. Hacked around a bug in Fltk resizing on the Mac that makes windows resizable in both directions even when they should be resizable only along y.
    • Cranked the minor version of the parm plugin after the bond fix.
    • The Parm7 reader now retrieves atom radii from the parm file rather than having VMD use its own atom radius heuristic to guess them.
    • Added new code to the parm7 reader which reads and stores the atom radii as they are read from the parm file, and provided a new parameter to the get_parm7_atom() routine to access this information.
    • fixed bad use of C++ style comment block.
    • gromacs and xyz plugins now use the MOLFILE_NOOPTIONS symbolic constant instead of "0" to clear their optflags parameters.
    • Added a new symbolic constant to use when clearing the optional flags parameter to the read_structure() plugin methods.
    • parm7 plugin wasn't previously correctly indicating that it supplies charge and mass information in addition to the 6 required data fields.
    • Added xyzplugin to the molfile plugin makefile.
    • Set xyzplugin optional data flags to zero, no optional data is supplied.
    • Fixed uninitialized atom_name buffer pointer, replaced with a local buffer in xyzplugin.
    • Fixed more formatting, used a larger fscanf string buffer, and changed to using strncpy for atom names. Also did some minor src formatting cleanup (xyzplugin).
    • Changed to use symbolic return codes rather than the old integers.
    • First rev of a plugin to read XYZ files.
    • Added a basic XYZ plugin
    • Eliminate msvc double->float conversion warning.
    • Change stereo name strings to be const char * instead of char *, and modified the OpenGLRenderer constructor to take a const char *.
    • Eliminated compiler warning about "scale" hiding Displayable->scale member.
    • Misc header file cleanup and improved a few comments here and there.
    • Renamed the MESA enumeration to "MESAGL" to prevent compilation problems.
    • Added -O2 flag to MACOSX plugin compile flags.
    • Added code to check for the ATI curved PN triangles extension, and the Sun mesh array extension. Also did some long-needed cleanup on the organization of extension availability flags in the OpenGLRenderer header file.
    • Added a static function to query function addresses for OpenGL extensions at runtime. Code exists for both GLX and WGL, but there isn't an implementation for MacOS X aglGetProcAddress() yet, as we don't have the specs on that one. There's a big difference in the behavior of the GLX and WGL routines that provide the function pointers, as the functions returned by the query routines are context-dependent on Windows, and context-indepdent on Unix (GLX). When VMD starts supporting multiple graphics windows this will become a tough problem to solve.
    • Added detection of Texture Cube Map extension, and the Sun Global Alpha extension.
    • Recognize Mesa and Microsoft software OpenGL implementations.
    • Cranked version number
  • VMD 1.8 beta 6 (11/26/2002)
    • Make the Raster3D output handle back-facing normals, so that it can correctly render the cartoon rep and/or the inside of MSMS surfaces.
    • Parm reader was skipping the last bond in a parm file due to errors in checking indices without taking into account that they are one-based.
    • Updated code for the newest rev of the glReadVideoPixels() extension.
    • Made double clicks in the graphics menu toggle the rep on and off only if the click happens in the text area, not on the scrollbar.
    • Added built-in help for the menu command.
    • Added docstrings to Python imd module.
    • Made the Mac OpenGL window force display updates when resize events come in; previously VMD wasn't getting to run its update loop until the mouse button was released. This makes window resizing look a lot nicer.
    • Removed the old "render" and "tracker" forms from the Windows build.
    • Removed the old render form from current VMD builds, and replaced tabs in the configure script with spaces, and fixed formatting of source file list.
    • Remove the old render form from current VMD builds.
    • Testing in the CAVE indicates that the CAVE-provided memory management routines (at least in the NCSA copy of CAVElib) don't work well enough to replace the SGI-only routines yet, VMD core dumps immediately if we use the CAVElib APIs, though they have worked fine for others on the Linux version of CAVElib.
    • Improved and cleaned up logging messages for guessing atoms. Names of poorly guessed atoms are now reported explicitly.
    • More friendlifying of the psfgen logging output.
    • Psfgen: More intelligent error reporting in the psfgen segment statement: if bonds, impropers, or conformations cannot be added at the beginning or end of a segment, a friendly message is printed rather than relying on the more cryptic and ominous generic warnings which are more appropriate for the case of adding patches. Angles and dihedrals still report errors the old way because I don't have a topology file that has explicit angles and dihedrals. The version number has been upped to 1.3.1.
    • Psfgen: Made local routines in topo_mol.c static.
    • Fixed the command line filename logic so that -files can be specified multiple times. Changed the -molecules flags to -m and the -files flag to -f.
    • Updated the command-line option for getting help. Also removed "-?" which is not implemented.
    • Added a --help command-line option. The user shouldn't have to read the manual to figure out how to display help!
    • Removed the old Tracker menu from the GUI.
    • Made some Tool menu labels more self-explanatory
    • Extended VMD's parsing of command line files to include any number and any kind of file. File type can be specified explicitly with -, or guessed from the filename. Files can be loaded into different molecules if the -molecule flag is given, or into the same molecule with the -files flag. File types that conflict with existing command line parameters will not be recognized. The behavior is backwards compatible with the old behavior of accepting only psf, pdb and dcd files.
    • cranked version number
  • VMD 1.8 beta 5 (11/22/2002)
    • Updated README files
    • Changed CAVE shared memory code to use newer CAVElib APIs instead of calling the SGI arena management routines.
    • feedback variable is only used when VRPN is enabled, moved it into the VRPN ifdef.
    • Feedback variable is only used when VRPN is enabled, moved it into the VRPN ifdef.
    • Updated plugin builds
    • updated version of amber plugin, with most recent changes.
    • parm7: Fixed an incorrect count that could have caused problems when reading box info (was using Nres rather than Nspm for loop) and got rid of more debugging messages.
    • new version number.
  • VMD 1.8 beta 4 (11/21/2002)
    • Fixes for other conditions that can arise where no data is dumped to the AMBER 7 parm file.
    • The PDB plugin still needs some significant work, as there are calls to assert() which can cause the whole progrma to terminate if they are called. These should be replaced by appropriate instances of return MOLFILE_ERROR instead.
    • Namdrun fixes: Fixed bug with getting PID for local jobs Fixed problems with queuing system variable names
    • Fixed source code formatting in a couple spots, and changed return codes to use new molfile return code constants.
    • Fixed some incorrect return code comments, changed all of the return codes to use the new return code constants instead of integers, and eliminated an old self-include of the ReadPARM7.h which was unnecessary.
    • Fixed an incorrect return code in one spot, changed all of the return codes to use the new return code constants instead of integers, and eliminated an old self-include of the ReadPARM.h which was unnecessary.
    • Added new symbolic return code constants for use by all of the molfile plugins. This makes the code much easier to read and helps eliminate inconsistent use of return codes.
    • AutoIMD updates: Record submitted job specs and use the new NAMDRun abortJob command to kill sims. This should finally fix the problems with millions of "orphaned" jobs (except when VMD crashes, in which case sims still have to be killed manually). Also "Discard" now works reliably AND fast (as opposed to reliably OR fast).
    • Namdrun plugin updates: Added an "abortJob" command to *REALLY* kill jobs that aren't connected All submit commands now return a "jobspec" containing info about the job's queue and process ID.
    • new version
  • VMD 1.8 beta 3 (11/20/2002)
    • Added a VMDPLUGIN_THREADSAFE and VMDPLUGIN_THREADUNSAFE constants for use by plugins, making the plugin code less opaque.
    • Misc cleanup of plugins, added comments on plugin register structures and changed integer flags for reentrancy to use a #defined constant from the vmdplugin.h header instead.
    • Updated the old parm reader code to deal with files that have large numbers of atoms that cause the 12I6 fortran formatted integer fields to run together, breaking the old parm reader code. The new code is based on changes that Zhu made to the NAMD parm reader code, but doesn't undo the other improvements already found in this code. Much more testing is still needed, but initial tests produced the same results as the previous code so I'm hoping we're in good shape. This commit also raises the minor revision of the parm reader accordingly.
    • Moved the Server menu to the main window (uglier but more user-friendly) Added a secret variable "namdoutputrate" to control NAMD's "imdfreq" Removed *ALL* prefixed "::" this time...
    • More AMBER 7 reader improvements, shortened method names, added more safety checks in the beginning of the reading process, and got rid of more of the extraneous debugging printfs.
    • Eliminated many of the unnecessary debugging printfs. Cleaned up various random parts of the parm7 plugin. Simplified a few more areas that were still using hand-coded scanning instead of the flagdata reader code.
    • Keep the same timestamps on the header files so that VMD doesn't needlessly recompile stuff unless it has to when we do a new 'make distrib' followed by a recompile/relink of VMD.
    • Keep the same timestamps on the header files so that VMD doesn't needlessly recompile stuff unless it has to when we do a new 'make distrib' followed by a recompile/re-link of VMD.
    • Added Python Label class. Also made the Molecule class return its molecule ID when cast to an int.
    • Made the Python label hide, show, and delete functions raise an exception if the label doesn't exist.
    • Eliminated the old hand coded "%FLAG" reading blocks for AMBER 7 parm files.
    • Replaced hand coded fscanf blocks with a function for reading the "%FLAG" marks in the Amber 7 file format. Found an error in the reader logic that occured when prm->Nphb is zero, and various atom records should not have been read.
    • Moved the code for adding labels from the do_execute method of CmdLabelAdd to GeometryList; added a VMDApp method for performing this action; made the toggling of the label controllable by a flag in the VMDApp method; made the Python label.add command return a dict corresponding to the referenced label. Motivation was to allow Python Label proxies to be created from the label.add method, without causing any change in the state of the label.
    • AutoIMD selections can now include quotes & double-quotes. "Save Full PDB As..." menu item works even when there is no connected simulation
    • IMD port is now stored in "imdcurrentport". "imdport" is now set by the user and can be "random" (default) or a number. This allows connecting to machines with a firewall such as Lemieux, where a fixed port must be specified. Variable name change "simdir" -> "scratchdir"
    • Added Material class to Python interface.
    • Made flag type checking optional in amber7 plugin.
    • More cleanup in the old amber reader plugin.
    • Added a new function for reading Amber 7 flag data.
    • Force use of single precision in the AMBER parm readers rather than hoping that nobody defines the token "DOUBLE" by accident.
    • Eliminated tons of ifdefs through the use of a single floating point scanf format macro, and by cleaning up some code here and there in the parm 7 reader.
    • Massive replacement of #ifdefs with a single macro for the right floating point format string for use in the parm reader.
    • remove -g flags from Amber 7 plugin compilation.
    • Removed redundant comments and old RCS headers from ReadPARM7.h
    • Brian says that the modulo arithmetic is what is causing atom types to be read incorrectly. I checked the AMBER7 manual and it looks to me like it should work, but apparently not. I think the real solution will be to add some code to do basic sanity checking for each block of data read from the parm file. For now this little hack will probably get us by a little longer.
    • Split the grid search code into two routines, one for handling a single set of atoms and one that will eventually handle only two disjoint sets of atoms. The "gridsearch1" routine only accepts one selection and is used for bond determination and the hbond and dynabond reps; "gridsearch2" is used by the measure commands without modification.
    • cranked version number
    • Made save_state store the correct molecule name (it was putting extra curly braces around the name).
  • VMD 1.8 beta 2 (11/17/2002)
    • Added the new Render form to the MSVC project.
    • Updated AutoIMD. Removed all prefixed Tcl namespace "::"s once and for all. Added a tentative CHARMM param file path name GUI editor. Minor GUI changes.
    • Fixed typose in renderer recognizer code, and enabled line antialiasing for use when drawing text in VMD.
    • Updated stereo mode change code, made it more readable, and fixed a mode change bug that occured when moving from scanline-interleaved mode into the anaglyph mode, etc.
    • Fixed a bug that prevented the scanline interleaved stereo mode change code from re-enabling antialiasing when its finished, as it ought to.
    • fixed the CRD reader plugin so that it actually works with trajectories containing box information.
    • Added new render menu and made it the default; the new menu automatically saves changes to the render command (instead of throwing them away when you change render methods like the old one did), and visibly notifies the user that rendering is in progress and if there was an error.
    • Added an alternate code path for FLTK's OpenGL window mode flags, but close inspection of the current FLTK CVS tree indicates we can't trust this yet, we need to send them some patches to use the ARB multisample extension, and to change their FL_STEREO behavior if possible.
    • cranked version number
    • Updated Windows installer and project settings.
    • MacOS X build has to use bleeding edge CVS version of FLTK until FLTK 1.1.2 is released.
    • MacOS X version now has a working OpenGL window resizing
    • Made the new color menu the default.
    • Incremental improvements to the new color menu.
    • Finished all functionality for the new color menu. Added a check for a NULL parameter in VMDApp::color_index.
    • VMD now supports parsing more than one vmdsensors file. The current behavior is to parse in order: 1. $VMDSENSORS 2. $HOME/.vmdsensors Any duplicated data is overridden by the last definition If *none* of the above files are found, VMD looks for the file: 3. $VMDDIR/.vmdsensors
    • Updated help on the vmdsensors file
    • Changed the new color menu rollers into sliders and prettified the interface.
    • The color scale offset and midpoint rollers work now, too.
    • Got a color scale picture working in the new color menu.
    • infrastructure for new color menu
  • VMD 1.8 beta 1 (11/14/2002)
    • Fixed problems where parfiles/simdir defined in .vmdrc would get overridden by autoimd-local.tcl Much more documentation in autoimd-local.tcl Added a "None" server setting for testing or just effortlessly creating reduced PSF/PDB file pairs (and created a callback to make that possible). Make background mol "top" when done Now creates soft links to param files in scratch dir so that all refs are local. This makes it possible to tar everything and send to a remote file system (e.g. Lemieux) automatically.
    • fixed a couple of uninitialized member variables used to store opengl feature settings. Found problems when testing on the Mac.
    • Fixed problems where parfiles/simdir defined in .vmdrc would get overridden by autoimd-local.tcl Much more documentation in autoimd-local.tcl Added a "None" server setting for testing or just effortlessly creating reduced PSF/PDB file pairs (and created a callback to make that possible). Psfgen does not load coords anymore (saves time/was useless) Name the autoimd molecule "AutoIMD simulation" Renamed many funtions to reflect what they actually do, and moved some code around purely in the name of logic and reason. Now always set state to "uninitialized" before returning an error; this prevents lockups. Removed the obsolete "initialized" state. Make background mol "top" when done
    • Made vmdhttpcopy use the -binary flag provided in http2.4 so that binary trajectory files get downloaded correctly.
    • Eliminated FilesFltkMenu (the 'old new' files menu). Made list_plugins store data in a passed-in list rather than a newly allocated one; it's a little more convenient this way.
    • VMD now finds and uses the plugin with the highest version number. Also fixed lies in the help output for the plugin command.
    • Added a new Color menu; getting ready to replace the old one. Plan is to implmement a set of graphs for the color scale that actually show what's going on, like the ones in the docs.
    • Added a new Color menu; getting ready to replace the old one. Plan is to implmement a set of graphs for the color scale that actually show what's going on, like the ones in the docs.
    • Added a "none" qeueing system. This basically does not send any jobs.
    • Make molecule_deleteframes not complain about 'animate delete all' when there aren't any frames.
    • Updated Windows build settings to link against new libraries required by FLTK 1.1.1.
    • Eliminated the AtomRep python classes; defined functions instead that create the strings for changing reps that VMD understands.
    • Updated MSVC build settings for new FLTK 1.1.1 libraries.
    • Move OpenGL error test into the video read pixels extension code block.
    • Get rid of numfacets variable in ribbons code.
    • Fixed MacOS X native compilation include paths relating to FLTK
    • Updated linking flags for FLTK 1.1.x
    • Change to using ifdefs for the actual FLTK version rather than checking for the particular type of VMD build in order to use the right includes for the FLTK file browser.
    • Added rep autoupdate methods to Python C API and Molecule.py class.
    • Added setFrame, dupFrame, and delFrame methods to Molecule.py.
    • Changed Molecule method names to camel-case; added new test cases.
    • Added docstrings to all Molecule methods; eliminated our special exceptions.
    • The "display depthcue on" command was being ignored, fixed.
    • fix depthcue typo in built-in display command help.
    • Added basic error checking for the video read pixels extension, in case something bad occurs when capturing the image from the framebuffer.
    • Added the mol clipplane commands to the docs. Still needs more documenting, but this is a start.
    • First version of AutoIMD that can potentially be used by anyone (on UNIX at least)! Completely overhauled the way that AutoIMD deals with custom configurations. Now the user can set all the variables/servers in his .vmdrc file. Fixed all the customization issues that popped up when using AutoIMD to give TBG demos; customization is now trivial. No more need for weird file paths to be sourced after autoimd is started. Also completely redid autoimd-local.tcl. As a result, a lot of code has been obsoleted and deleted.
    • VMD is now labeled beta 1. We are essentially in bug fix and "very minor improvements" mode, no time left for major features implementations now.
    • Cranked version number
    • AutoIMD updates: Added a minimize mode which permits on-the-fly minimization of a selection Synched NAMD variable names with internal names for easier customization Fixed small bugs: bad error message box, improved radiobuttons
  • VMD 1.8 alpha 31 (11/10/2002)
    • New version of movie maker script allows the user to keep the generated RGB, PPM and other intermediate files if they wish.
    • Eliminated slower versions of the NewRibbons rendering code that used the simpler display commands.
    • AutoIMD updates: 1) FIXED BUG: clicking Finish did not save coords to background molecule!! 2) Updated to use new atomselect macros (ion,noh) and renamed "imdballs" to "imdions" 3) Added som catches to prevent AutoIMD from getting permanently stuck if something goes wrong. 4) Do not show fixed atoms anymore; they were always in the way. 5) Only fix residues 4A away from melt (as opposed to 8A). This makes the simulations smaller and is esthetically okay because of 4.
    • Fix an offset bug in the atom selection-capable spline generation code in the NewRibbons representation.
    • Updated the membrane plugin, fixed a bug in the script (it attempted to write temp files in a directory of Ilya's, now it uses the current working directory)
    • cranked version
    • Added trajectory smoothing controls to the Graphics menu.
    • Added on-the-fly smoothing of timesteps for reps. The smoothing only affects how the reps are drawn; all other calculations involving coordinates are unaffected. The size of the smoothing window can be set by a Tcl command.
    • Don't try to load coordinate frames when the atom number has not yet been determined, and print a helpful message explaining that a structure file has to be loaded first.
  • VMD 1.8 alpha 30 (11/8/2002)
    • Added Python method for returning a zero-copy reference to the coordinates in a molecule Timestep. This is inherently unsafe but maximally efficient in terms of time and memory usage. In practice, Numeric is said to be rather copy-happy, so this optimization may not matter much; if that turns out to be the case we may choose to abolish this method in favor of get_timestep/set_timestep methods that perform a malloc and copy.
    • Added a Numeric-based atomselect command that returns its flags as a Numeric array of ints.
    • Made the VMD Numeric Python module not crash when the _numpy.so file is not available. Modules that import vmdnumpy must check for an ImportError exception.
    • Added plugins/$arch/python and plugins/noarch/python to the PYTHONPATH environment variable. No plugins currently populate that directory but we've got it if we need it.
    • Built Numeric Python version 22 for Linux and Solaris. Added NUMPY option to configure to allow VMD to compile against Numeric header files so it can return data as Numeric arrays instead of inefficient Python arrays. Numeric seems to provide only dynamic libs; we should either do a custom build of Numeric so that we can statically link against the binary component, or else set up a Python plugin system and install the dynamic libraries in there so they can be included in the distribution. The NUMPY configure option adds a simple test module that exercises the Numeric code.
    • Made the Python Molecule class use the built-in molecule methods instead of the SWIG-generated ones. It looks like there will not be time this release to complete, document and test a SWIG-based interface, but we can build a nice Python-based Molecule proxy on top of the existing interface.
    • Make molecule.read return molid instead of frames, and not raise an exception when it fails to find the file. Make molecule.ssrecalc return success.
    • Make molrep.modrep return success.
    • Added a "Sim Parameters..." dialog to set many options Added an "autoimdscript" variable to point to a user's custom autoimd settings file. Many layout changes to the main window
    • Added molecule.exists() and molecule.name() methods to the Python molecule module. Added "volsets" keyword to the molecule.read method to support reading of volumetric datasets. molecule.read() now accepts molid=-1 and creates a new molecule.
    • Added molecule.new Python method.
    • Added keyword options to the Python molrep.addrep method for specifying the rep properties (style, color, etc.). Docs updated accordingly.
    • Added molecule_dupframe method and fixed long-broken logfile text.
    • Fixed float/double mismatch in the Python interface reported by Pawel Kedzierski; fixes cone radius parsing.
    • Further cleanup and minor performance tweaks on the new ribbons code. Added more comments all around as well.
    • Major update of the cross-section generation code. The new code pre-calculates the cross section that is used to render the extruded ribbon/tube in the NewRibbons representation. The new code also avoids having to re-normalize surface normals by pre-normalizing the basis vectors and the template cross-section data ahead of time. This new code animates at about twice the speed of the old ribbons code, which is particularly useful for trajectory playback or IMD type uses. Further improvements to efficiency can definitely still be made, but this is a step in the right direction, and the code is still readable at this point.
    • Remove the safety net, no unnecessary clears of the NewRibbons memory buffers.
    • Added the template.namd file to the list of files to be copied when installing the AutoIMD plugin.
    • Made atom selections generate separate spans in the NewRibbons code. The spans presently start and end exactly on CA atoms which are the fundamental control points we use presently, but it might be more desirable to have the ribbons continue half-way to the next enabled control point rather than starting and stopping on the control points themselves. This flexibility and distinction may also become a big issue for nicer looking cartoon representations.
    • NewRibbons pay some attention to atom selections, but still needs to be taught how to separate the selections from each other when they end up having gaps, rather than connecting them as it does currently.
    • Fixed PR 235, Spaceball 3003 FLX left/right buttons were being ignored by VMD. VMD now treats them as synonymous with buttons 1 and 2.
    • Search and replace of argument mismatch in fscanf calls in ReadPARM7.
    • Display devices all handle reshape events for themselves now. The "display reshape" command has been eliminated as there is no need for it now; "display update" handles redraws as well as resizes when automatic display updating has been turned off.
    • Fixed incorrect parsing of "animate delete all top"; also changed \t into spaces for more portable reading.
    • Made molecule choosers work with names containing forward slashes. Fixes bug reported by Alexander.
    • Made significant changes to the GLX visual query code to be much more aggressive in attempting to get high-res Z-buffers and multisample buffers. The new code should do a better job of getting antialiasing on machines that didn't happen to exactly match the multisample parameters we had tried previously. The new code loops over multisample buffer sizes and depth buffer sizes, trying various combinations in order of preference.
    • Added code for the video resize extension.
    • Fixed error found by Ana Damjanovic in the "simple" script in the solvate package. This sholdn't have even been used by anybody but it's nice to be correct.
    • Added support for the Sun glReadVideoPixelsSUN() extension for getting very high quality antialiased screen snapshots back from the frame buffer.
    • Include the new soft-coded Tcl atomselect macros at startup
    • Commented out all Rasmol atomselect macros. Their definitions have been moved to the Tcl script scripts/vmd/atomselmacros.tcl. The commented code should be deleted once the new definitions have been observed to work without a hitch.
    • Added working mouse wheel code for the FLTK OpenGL display device used by the Mac.
    • Added comments to the FLTK event handling variables, and added more complete but still untested mouse wheel event handling code.
    • Improved the Windows mouse wheel handling so that a continuous mode mouse wheel won't cause excessive scaling. Action is now only taken on wheel events with zDelta values with aboluste magnitudes greater than WHEEL_DELTA / 2.
    • Added support for mouse wheel events, for quick+easy scene scaling
    • Cranked version to alpha 30
  • VMD 1.8 alpha 29 (11/1/2002)
    • Updated Windows installer
    • Added the plugin source tree to the source distribution, and fixed a bug in the attempted inclusion of compiled binary plugins in the source distribution.
    • This is a templete NAMD file used for running autoimd. Using a user-defined template file give much more control to the AutoIMD users.
    • Removed dependence on env(AUTOIMDDIR), use hard-coded path from env(VMDDIR) instead. This should allow AutoIMD to load properly again. NAMD config: changed fullelectrostaticfreq to 2 (i.e, every 4fs) Changed NAMD config file name Added some menu items
    • Got the parm7 reader working a little better. Atom name and type appear to be properly NULL-terminated now. Atom type is still bogus; could be incorrect NULL termination but is probably something else.
    • Get rid of hello/goodby/register messages in the Amber7 plugins.
    • Added the parm7 and rst7 plugins to the molfile plugin Makefile.
    • Minor fixes to the Amber7 file reader plugins so they compile on Solaris, and hopefully avoid some potential problems with uninitialized data during the structure reading phase.
    • Built up atom selection macros to replace hard-coded versions currently found in AtomSel.C.
    • Added Amber7 file reader plugins donated by Brian Bennion
    • Fixed PRs 233, and 234 regarding stereo rendering issues.
    • Fix a bug in the stencil buffer stereo rendering code and make it more robust so it works on cards that draw 2-D lines differently from the local machines we've tested on.
    • Updated the VMD installation docs.
    • The Selections tab in the Graphics menu now has a list of atom selection singlewords. The Keyword/Value browsers now only show keywords, not singlewords or functions. Atom selection macros added through the Tcl interface automatically show up in the singleword list; at present it is not possiblet to add, modify or delete macros from the GUI. Most of the other atom selection builder buttons were removed; 'and', 'or', and 'not' were kept as the remaining set of items could conceivably be used to be build atom selections using just the mouse.
    • Change type for stencil buffer check to GLint.
    • Eliminate another one of the old stereo startup messages on Windows, now it will only be listed in the renderer feature list, not as a separate item.
    • Fix OpenGL feature printing so it prints the feature list regardless.
    • Eliminated old ogl startup message code.
    • Prettied up the OpenGL messages some more and added new variables and code for the stencil buffer.
    • Significantly re-worked the X11 visual initialization code, and made changes to the way OpenGL feature messages for stereo, multisampling, and other features are printed.
    • Added an index entry for cross-eyed stereo in the docs.
    • Updated the docs on using stereo to include text about the new DTI mode, as well as the scanline interleaved stereo mode, and added new index entries.
    • Added support for the DTI stereo LCD flat panel displays.
    • Updated stereo comments, still need to fix the stereo+multisample bug found recently on the Zulu test machine.
    • Moved the selection auto-update checkbox from the Selections tab to the main styles tab and renamed it to make its function clearer. Got rid of the Close button on the Graphics menu.
    • Updated docs references to "xmgr" to reference "xmgrace" instead.
    • Changed the default graphing command in VMD from "xmgr" to "xmgrace".
    • Removed the Close button from the Labels menu, because this manu serves as a palette, not a dialog box.
    • Added an AutoIMD menubar, and turned some of the buttons into menu items. Looks a lot better, too.
    • Maxforce doesn't seem to work at the moment, causing dangerously high forces to be sent to the haptic device. Disabling for now until the reason is discovered.
    • Added "Save PDB..." button to save a (complete) PDB file using updated coordinates
    • AutoIMD now uses the same PDB files for coordinates and fixed atoms. Incidentally, this also fixes an issue where a selection referring to atoms by "index" and "residue" would not be properly submitted.
    • Fixed: the AutoIMD window now reappears after being closed and then reselected from the Extensions menu.
    • Cosmetic Changes: Consolidate functions that do the same thing, and separate parts that can be reused (will be useful later), merged: finishnokill/finish, created: killsimulation, writecompletepdb, got rid of: dialog, statustext, Temporarily removed the non-functional Cancel button
    • Updated "atomselect" usage help to include macros.
    • Cranked AutoIMD version in Makefile
    • Added FREEVR option to the 32-bit Solaris OpenGL builds for the time being, we'll see how it works out.
    • Added comment regarding clean shutdown of shared memory locks etc.
    • Added -lrt for FreeVR enabled builds of VMD on Solaris.
    • Eliminate extra calls to reshape if possible.
    • change a few comments here and there to be more descriptive.
    • Implemented a color table cache to greatly accelerate the voxel to color conversion process. New code runs many times faster than the old code did, since we avoid all of the transcendental function calls, per voxel.
    • Eliminate compiler warnings caused by float->unsigned char conversion.
    • Misc cleanup in the CaveScene code and added reader/writer locks to the FreeVR code bringing it in sync with the Cave code and the newest rev of FreeVR.
    • Updated the FreeVR interface for the latest version.
    • Cranked version to alpha 29
  • VMD 1.8 alpha 28 (10/23/2002)
    • Eliminated old debugging printf statement.
    • Help out the poor MSVC compiler with that tricky template stuff.
    • More cleaneup on ifdef logic for OpenGL extensions.
    • Prevent some OpenGL extensions from being called on Linux, since they aren't gauranteed to have correct dynamic linkage by default. More work is needed to support OpenGL extensions on Windows, Linux, and MacOS X.
    • Added support for the OpenGL compiled vertex array extension. Improved enumeration and printing of OpenGL extension support at VMD startup, and reorganized texture feature enumeration and printing. Added calls to glLockArraysEXT() before and after vertex array operations to improve vertex array rendering performance on platforms that support the extension.
    • Quiet compiler warning about possible uninitialized variable.
    • Eliminate Solaris compiler warning caused by passing function pointer with C++ linkage to pthread_create.
    • gcc doesn't implicitly invoke the JString const char * operator when required to produce one for a return value.
    • Eliminate const compiler warnings.
    • Made the new Tools menu visible in the graphics pulldown menu.
    • Controls for setting tool reps in the new Tool menu work now and are ready for beta-testing.
    • Got offset, force scaling, spring scaling, and position scaling working in the new Tool menu. The latter three don' get updated automatically in response to text commands, only when you pick a tool in the GUI. For this to change the UIVR behavior of rescaling negative scale values needs be gotten rid of and moved into the GUI's themselves.
    • Added methods to Tool for retrieving device names of tracker, feedback, and buttons specifically. Fixed the steal method so it properly updates its list of device names. Creating and deleting tools and devices in the new Tool menu seems to work now.
    • Eliminated the unused Displayable::name member. Added name to DrawMolItem so that reps can have unique names. Eliminated commands to set the name of reps; the rep name is assigned at creation of the rep and never changes. Updated docs.
    • Modified DispCmdTripStrip to take a parameter to enable or disable double-sided lighting. This will significantly improve ribbon drawing performance over the old code. Fixed the ribbon normals so they are facing the correct direction for single-sided lighting calculations. Added lighting mode switching code into the OpenGL renderer similar to what is done for the DispCmdSphereArray primitive.
    • Add more accelerator recognizer code.
    • Fixed compiler warning; apparently template functions aren't allowed to be static.
    • Fixed uninitialized springscale variable. Interesting to learn that the Phantom VRPN server will segfault and die if you send a force that's way out of range. ;)
    • Made Tools keep track of devices by the sensor name, not the name used to access the class.
    • Added set_tracker, set_feedback, and set_buttons methods to UIVR. Wired up more stuff in ToolFltkMenu.
    • Added methods for returning the names of devices that are both represented with a device class and present in the sensor config file. The old methods were returning the device types, which wasn't what we wanted.
    • The OpenGL renderer code now tries to figure out what kind of hardware its running on. For the short term during testing, it now prints the OpenGL renderer string as well. This will allow us to make more intelligent decisions in the rendering code for which rendering techniques to use depending on what graphics hardware we're dealing with.
    • Force a call to glFinish() when using WireGL to render. This prevents visible screen tearing when displaying on a 25 node tiled display, at a very minor performance cost. Without it, the screen tearing is visibly distracting.
    • Added some WireGL-specific comments regarding reshape behavior and potential problems into the OpenGLDisplayDevice code. The same problems would affect Windows and Mac, but for now there isn't an easy solution for any platform. The problem is now documented in the code, so perhaps we can address this later when there's more time.
    • Added improved code for detecting WireGL renderers with the newest versions of WireGL.
    • Moved 1 line by 1 line (oops!)
    • Reimplemented justin's change (r1.27) that got overwritten by the subsequent revision (i.e. use tk menu register v. add). Selecting the aligntool from the menu will actually show a window now.
    • Added comments to the Tracker, Feedback, and VMDTracker classes about what's going on with all the virtual functions. Got rid of the get_clone method, since all the subclass-specific initialization is done in do_start() now. Some general cleanup to improve readability.
    • Use "menu tk register" for AutoIMD, and rename the menu item to look a little nicer.
    • Made AutoIMD use the "menu tk register" system so its window doesn't pop up during VMD startup.
    • Added solvate packge to the list of default extensions.
    • Added a very minimal GUI to the solvate package; all it does right now is make an item in the extensions menu and tell the user how to get more information.
    • Solvate can now omit the psf and pdb file to just build a water box. Also improved the in-program documentation for minmax.
    • Added accessors for the tracker, feedback, and button device lists in UIVR, and wired up the corresponding choosers in the new Tool menu.
    • All sensor devices (the Tracker, Feedback, and Buttons classes) are now configured within the respective subclasses when the device is started. The devices may now be instantiated without any configuration arguments, which means that we can keep an extensible catalog of the available devices without having to read the .vmdsensors file.
    • Get rid of old stripify() method on the TriMesh dispcmd.
    • Moved sensor device instantiation from SensorConfig to UIVR, and commented out bogus error messages caused by trying to add a device that exists in the .vmdsensors file but has not been linked into VMD. The solution for this is to separate instantiation of the sensor devices from their configuration, but this will require some reworking of each device. The payoff will be a system to which new devices can be added dynamically through plugins.
    • Made the triangle mesh display command take a new parameter controlling whether or not ACTC is used to convert the geometry into triangle strips. This allowed changes to be made to the MSMS code so that MSMS reps only bother to call ACTC if they know they will keep their coloring etc for a little bit. This lets the new "throb" coloring mode run about 8 times faster for MSMS than it did when it was forcing the use of ACTC. When the coloring mode is anything other than throb, MSMS assumes its worth the wait for doing triangle consolidation and so it enables ACTC. A further optimization would be to do the same logic when we're animating a trajectory since the ACTC work is unnecessary in that case as well. Perhaps another way to do it would be to teach reps to recognize that they've been the same for more than one frame in a row, and only do ACTC calculations if they have been the same for more than one or two frames, thus raising the frame rate considerably when its worth doing the work, but not getting in the way when we're animating, changing material properties (think of Paul's opacity ramp tricks in his demos), etc.
    • Fixed segfault on exit caused by unitialized variable.
    • Fixed the file loading behavior: multiple files can be loaded in a tight Tcl loop without running the system out of file descriptors, and the waitfor option now loads all frames from all files in the queue, so that it can never fail. Docs have been appropriately updated.
    • Added a new "THROB" coloring mode which animates colors through the active color scale based on wall clock time.
    • Added a simple hue-saturation-value to RGB function for use in creating 3-D texture maps of slowly varying data. Added code for color by index, changed old code to become the new code for color by charge, and made the new HSV->RGB map the default for all other color schemes.
    • Fixed an unterminated comment block that caused setscale/getscale methods not to be included in the class definitiion.
    • Tracker, Feedback, and Button classes are now stored by UIVR in a NameList and passed to the Tools when needed. Classes are accessed by their device name, which is the same as the device name used in the .vmdsensors file. Instances of the objects associated with the device name are accessed by storing one instance of the class in an array and calling a clone() method on the Tracker, Feeback, or Button. In addition to the clone() method, each of these three device types now implement a start() method, so that instantiation of the object can be separated from assigning it to a tool and establishing a connection to the remote device.
    • Added the new ToolFltkMenu to the MSVC build.
    • Fixed a const correctness / portability problem. Its not legal to call delete [] on a const char *, since that is considered to be modifying destroying the data referenced by the pointer. Some compilers will let you get away with it, but its not portable code.
    • Added comments in volslice texturing routines.
    • Improve commenting on volume slice voxel transfer functions, and texture coordinate generation.
    • Rename positional volume texture routine to be more informative.
    • Eliminated debugging messages from the isosurface rendering code, rewrote the color mapping code again, sort of a compromise between previous attempts to make a good default color scheme. Should implement a few more color mapping schemes controlled by the VMD coloring method pulldown which would be specific to volumetric data.
    • Eliminated the Sensor class, absorbing its functionality into the Tool base class and making the Tool class responsible for (and knowledgeable about) the Tracker, Buttons, and Feedback objects.
    • Eliminated the unused buttonnum variable.
    • Moved device creation and configuration from Sensor to SensorConfig. Sensor gets its devices directly from SensorConfig, instead of creating them itself and then getting configuration later. Made many routines static instead of member functions. Also fixed the return value of VMDTracker::dimension().
    • Moved the right_rot and left_rot transformations from the Sensor class to the Tracker class, and deleted the Tcl "tool root" command as well as other code that existed just to make this Tcl command possible. The right_rot and left_rot matrices can now be obtained only from the .vmdsensors file.
    • Fixed remaining bug in the EDM reader plugin, did some minor cleanup, and made the code do some extra error checks to validate files it loads before assuming all was 'ok'.
    • Moved scale from the Sensor class to the Tracker class.
    • Moved the maxforce parameter from the Sensor class to the Feedback class.
    • Oops, missed some springscale crumbs.
    • Moved springscale from the Sensor class to the Tool class. "forcescale" is no longer a supported option in the .vmdsensors file; this is a property of the tools, not the sensors.
    • Moved offset and dim from the Sensor class into the Tracker class.
    • Started cleanup and separation of the old ribbons code from the new, since they are going to begin diverging very soon.
    • Deleted unnecessary #includes of SensorConfig.h.
    • Encapsulated the Sensor class entirely within the Tool base class.
    • The Tool menu has a list of tool types now. I can't really make any progress with the devices yet until Sensor and SensorConfig get massively rewritten.
    • Added new Tool menu, destined to replace the current Tracker menu. Nothing's wired up yet, but all the GUI elements are there, ready for developer feedback.
    • Added new Tool menu, destined to replace the current Tracker menu. Nothing's wired up yet, but all the GUI elements are there, ready for developer feedback.
    • Removed references to the old "imd pause" command
    • Tool selections work again. The syntax of the "tool rep" command changed to allow the specification of the tool to which the rep is assigned; thus, multiple tool selections should work fine.
    • Tools are now initialized with a unique serial number. Tool type names are now defined in the individual subclasses.
    • Did some minor cleanup on the volume rendering code, changed the color scale to ramp between blue and red but passing black in between. Tried gray also, but gray wasn't as visually appealing. Need to make this code much more flexible.
    • Parameterized the number of spline interpolations so that the user can control the appearance better.
    • Rewrote new ribbons code to use triangle strips rather than vertex arrays, for much improved animation performance. Average length of triangle strips also increased from 13 to 16 by hand coding the triangle strips.
    • Update the help for the imd pause command in Tcl.
    • Changed the DispCmdTriMesh::stripify() routine into a separate class and display command so that non-mesh primitives such as the new ribbons can generate triangle strip geometry directly.
    • Removed unused "namd" variable Updated to use the new "imd pause toggle"
    • Removed "imd pause" w/o any arguments "imd pause" will only display no connection err. if a valid command is issued.
    • Updated the python pause command to work with the "revamped pausing infrastructure." Pausing is still a toggle in python, i.e. on/off/toggle functionality not implemented yet.
    • Added a pause on/off/toggle functionality and associated functions.
    • Changed the pause behavior. Pause now freezes the simulation and unpause unfreezes it. (As opposed to a toggling behavior). Added a simstate member and a (getSimState accessor in case that the state can be retrieved from the simulation in the future, intead of an internal VMD variable).
    • AutoIMD is now aware of minimization timesteps (versus regular timesteps). Allow user to change minimization time through a variable
    • Implemented vertex array version of the new ribbons code.
    • Make colors match the old ribbons code by doing the half-span color ranges. The old ribbons code does some gross things with atom indexing in the coords, idx, and perps arrays, so when we get rid of that stuff there will be some cleanup to do.
    • Add basic coloring to the new ribbons representation. Still needs work in order to make coloring more useful, right now colors are assigned to an entire span of interpolated points rather than the half-span preceding and following the control point that they are nearest to, which would make more sense, and should also match the color assignments done by the old code.
    • Change default thickness value to be more ribbon-like
    • Added list of "mol new" and "mol addfile" options to the help reported by "mol".
    • Made changes to the color scale correctly update reps.
    • Allow the user to modify the cross section of the new ribbon. Setting it to a thickness of 1 results in a tube, larger numbers such as the old default value of 2 or larger values such as 4 yield something more ribbon-like.
    • Fixed normals, made a typo in the math in my last commit, forgot to force operator precedence with parenthesis around the whole expression.
    • Eliminate unused use_cyl parameter leftover from the original code. Negated the surface normals by default to fix lighting. There are still issues with normal tracking, but this is a good first step in making the rep more usable.
    • Turn off rendering of the interpolated spline points and control points.
    • Enable the solid rendering of the new ribbons. The code still needs to be able to do normal tracking and negation where there are sharp turns. At present it is so finely tesselated that the built-in normal tracking code has a difficult time and so there are kinks in the generated extrusion where there the normals should have been negated. The code runs however, and generates properly connected geometry.
    • Fixed termination code for ribbon spline, now follows exatly the same path as the old code did for the same parameterization test cases. Next step will be to test with the solid ribbon and to vectorize the spline computations. This version still does tests per control point to make sure its doing the interpolation with the correct set of 4 control points. Unrolling the control point processing loop and separating into 3 cases with a starup, main loop, and finish section will make it much faster.
    • Added "NewRibbons" representation to begin testing new ribbons code.
    • Link up the new ribbons code for initial testing.
    • Start getting the new ribbons code ready to try out inside of VMD, still getting framework setup for it.
    • Eliminated dead DisplayDetail and AltDetail class declarations.
    • Eliminated the "display depthsort" command since we don't implement transparency that way at the moment. It's rather appalling that it takes a 151 line diff to remove one stinking command.
    • Updated MSVC project to add the new bonds pick mode code.
    • Reverse ordering of CAVEConfigure and shared mem calls so that we can use the alternate memory allocation code which is independent of the SGI-specific amalloc/afree/etc calls.
    • Fix a compilation problem with the ColorScale class on AIX. The new code failed to compile due to the lack of a default routine for doing operator == for this non-intrinsic type. Apparently AIX doesn't help us out there, so adding an operator == method seems to cure compilation, now we have to see if we take a speed hit as a result.
    • Fix illegal scoping of for (int i; ....) constructs.
    • Added Tachyon support for "render aalevel" and "render format" commands. Also fixed a Tcl-level bug in the "render formats" command.
    • Added hooks for renderers to update the post-render command based on the current image settings.
    • Attained a basic level of sanity with the FileRenderer default options and related VMDApp methods by renaming methods to say what they actually do and eliminating the switcheroo action going on behind the scenes in FileRenderer.
    • Automatically generate the pdb filename (no user input)
    • Added some new user-definable flags (connectiontimeout,nprocessors)
    • Added autoconnect capabilities (so the user only clicks on connect once) Repaired the broken up-to-date timestep display (converted to picoseconds)
    • Eliminate DisplayDevice::push() and pop() and various virtual implementations in the subclasses. These calls were a relic of the days when we had push and pop DispCmds, and were used only by Cave and FreeVR (which now call glPushMatrix() and glPopMatrix() directly).
    • Make molecules disconnect themselves from any IMD connections in their destructor. Added imd_disconnect method to VMDApp.
    • Added a catch statement so that the user doesn't get locked out of VMD is something unexpected happened to the running molecule. Moved the initialization of some variables to a different location so that they are only init'd the FIRST time that the autoimd file is sourced (mostly useful for debugging). Also moved a few snippets of code around to be more elegant
    • Disable separate specular computations on MacOS X until they fix their OpenGL drivers.
    • Added a maxprocs setting (so that the max processors are displayed), but this isnot enforced.
    • Added a callback to indicate the elapsed timesteps (for now) in the status bar, when the simulation is connected.
    • Now provides support for running on the TBG short queue as well as on the user's local machine (in conjunction with autoimd 1.3)
    • AutoIMD now supports user-configurable settings, as well as the ability to select a setting from a given set (through a pop-up menu). For example, the user can have "Local" and "Remote" settings and switch between them on the fly.
    • Replaced the vmd_mol_urlload script with one that only uses Tcl.
    • Added an "initsettings" proc to initialized ::AutoIMD:: variables in preparation for custom settings (next rev.) Now looks for a user settings file ~/.vmd/autoimd-local.tcl before loading the default
    • Added PickModeAddBond, a picking mode that functions just like the pick_bond to add and remove bonds.
    • Added doc for the "timesteps" keyword of the "molinfo" command
    • AutoIMD updates: Allow the user to abort/discard a simulation that hasn't connected yet. Compatible with the new VMD "molinfo get filename/type" commands, etc. Added a status bar to notify user of progress Added a new "initialized" state, since the "ready" state was used for two different things Removed the confusing autoimdgo function, and merged the discard* and finish functions since they share the same code Minor layout changes (made fonts readable on some displays, paths are editable) Added variables for the molten selection (to permit automation), and for the initial coordinates molecule id (as opposed to "top")
    • Eliminated MSVC compiler warnings, added some small test code and preparing to try tests with new back-end ribbons code.
    • Got rid of various MSVC compiler warnings.
    • Removed the lies from the Timestep constructor.
    • Eliminated the unused dt member from Timestep.
    • Added information about the TBG queues so that TBG users can run AutoIMD right out of the box.
    • Added the initialization of the "timesteps" member to zero in the constructor and the Timestep::zerovalues() method. Before this, the "molinfo id get timestep" Tcl command would return a random value if the timestep hadn't been subsequently updated.
    • Added the "timesteps" keyword to the molinfo command. This permits the user to get/set the number of elapsed timesteps of a running IMD simulation (from Timestep.timesteps).
    • Enabled the existing OpenGL MultiDrawArrays extension on Solaris and IRIX where we don't have dynamic linkage problems like we do on Linux.
    • Enable separate specular color computations for textured surfaces on machines with OpenGL 1.2 now that some prominent vendors have fixed driver bugs. Also added checks at runtime as well as compile time for proper server version.
    • Be paranoid in wiregl and ogl version check for texturing startup code, as we seem to be calling it in the current code, even though operation precedence looked ok.
    • Prevent WireGL from enabling GL_RESCALE_NORMAL or the variuos rescaling extensions, as it doesn't appear to work reliably.
    • Made the waitfor option work correctly again; files loaded with "waitfor all" were being put in the Molecule's file queue and not updated, which blocked subsequent timestep loading because the Molecule thinks it still has incomplete files in its queue.
    • Patched the CAVE code so that the shared memory routines will work with the Linux versions of CAVElib. This code should work on all non-IRIX platforms assuming that CAVElib itself works the same everywhere. If testing shows that IRIX works too, then we'll use CAVElib to manage the shared memory instead of doing it ourselves from now on.
    • Updated the autoimd-local script in the autoimd plugin.
    • Added Ilya's HTML docs.
    • Added infrastructure for setting image size, antialiasing, and output format for file renderers.
    • FltkOpenGLDisplayDevice does picking correctly now; xOrig and yOrig weren't being updated/calculated correctly.
    • Eliminated dead rel_screen_loc_* methods.
    • Made FltkOpenGLDisplayDevice reset the last window event to zero after processing it so it doesn't continually burn cycles processing nonexistent events, and set the local screenX and screenY variables, which are needed for picking. Picking _almost_ works now.
    • Moved temp dir startup checks into the MacOS X-specific side of the startup script.
    • Make startup script check for a new Mac startup variable.
    • Updated the MSVC project to eliminate source files that have been removed.
    • Fix illegal redeclarations of 'i' in several for loops. This caused build failures on Windows.
    • Corrected the VMD command line -h help message.
    • The VMD startup script now skips opening an xterm when the -h startup flag is passed to the program.
    • Made VMD not crash instantly when a tool is created by having the tool check for a tracker before retrieving the position and orientation of the sensor.
    • Removed animate menu item.
    • Made the file chooser menu more compact.
    • Made save_state save atom selection macros.
    • Made the forward and reverse animation buttons become deselected when then animation is stopped.
    • cranked version number
  • VMD 1.8 alpha 27 (9/26/2002)
    • Don't reset the view when loading a molecule if the file doesn't contain any coordinates (like a psf file, for instance). Suggestion from Jordi.
    • Eliminated MainFormsObj, and the fltk definitions for the old animate menu.
    • Eliminated the old animate, display, and molecule menus.
    • Removed MaterialFormsObj.
    • Eliminated MouseFormsObj.
    • Got rid of extraneous "rock off" logfile entries.
    • Updated docs for new addfile option.
    • Made file loading log a "mol new" or "mol addfile" command. Eliminated the CmdAnimate command since its logging functionality is not needed anymore. Added a "molid" option to the addfile command so that molecules other than the top molecule can receive new files.
    • Make the molecule file browser set the molecule chooser pulldown to the last loaded molecule correctly. This could have been causing VMD to crash when loading molecules after deleting some first (but only for Fltk 1.0.x; 1.1 versions do more bounds checking).
    • changed mac builds to use FLTK 1.1.0rc7 instead of the older cvs copy to get the rc7 fixes, but not newer untested changes. If this version runs on 10.2 then I'll update CVS and go from there.
    • Added Python to the Mac build, and removed Python 2.1-specific cruft from the configure script; the Mac build is just like the builds now in terms of Python.
    • Added membrane package Makefile.
    • Eliminated hacks for Python 2.0.1, since we're using Python 2.2 now.
    • Finishing touches on membrane package.
    • set up command line parameter reading for membrane package
    • fixed multiple topology file reading in membrane package
    • Changed Python version to 2.2, and added libpthread to Python link flags since all versions are built with threading enabled.
    • Fixed malfunctioning pdb loading from the Fltk menu caused by a waitfor parameter of zero, which resulted in no timesteps being available to perform the distance search.
    • Added the new membrane plugin
    • Removed unnecessary include of iostream.h in Stride and Surf modules.
    • Eliminated old MoleculeGrasp include.
    • Updated Windows build configuration
    • Removed the old Grasp reader code in favor of the plugin version.
    • Eliminate lots of unnecessary type conversion warnings on Windows.
    • Re-built the documentation, fixed some latex errors here and there.
    • Updated Makefile
    • Updated README info on building and configuring VMD
    • Cranked version number
  • VMD 1.8 alpha 26 (9/17/2002)
    • Fixed minor bogosity in "mol list" discovered by valgrind.
    • Fixed UMR's in unit cell info found by valgrind.
    • Eliminated UMR found by valgrind.
    • Coordinate files can now be loaded before structure files, as long as the number of atoms in the timesteps can be determined.
    • Eliminated all molecule_load_* specializations; everything goes through molecule_load now. As a nice consequence you can now do "mol load edm foo.map pdb brH.pdb" and it works just fine.
    • Molecules that contain only volumetric datasets are now positioned and scaled so that the volumetric data appears at the origin.
    • Added a load method to the Python Molecule class. Deleted old load_structure and load_coordinates since these aren't needed anymore. Added typemaps-python.i to the dependencies for vmd_python.C.
    • Cealign; added error trapping for chains that contain no C-alpha atoms. CE cannot process chains w/o CAs...if ever move to a different alignment program, then this may be unnecessary.
    • Cealign went back to pairwise GUI. components still left in to accomodate multiple sequence alignment, but value of variable "numAlign" set to 2.
    • Eliminated molecule_load_graphics and molecule_load_volumetric by having FileChooserFltkMenu use the new molecule_load command. Fixed a bug in the save_state file caused by incorrectly parsing the output of molinfo.
    • Eliminated the import graphics commands from the Python and Tcl interfaces, since the new/addfile commands can do this already. Made "mol load" and "mol new" no longer synonymous (mol new was fortuitously not conflict with the new version of that command by virtue of checking the number of arguments). Updated docs with these changes as well as documentation for "mol new" and "mol addfile".
    • Instead of a primary and secondary file, Molecules now save all the files which have been loaded into them in a list. The filename2 and filetype2 keywords have been eliminated; the filename and filetype keywords now return a list of all the files and corresponding types for the molecule. Updated the save_state script to use "mol new" and "mol addfile" since these are the only Tcl commands that support arbitrary file types. The misnamed 'structure_file' and 'coor_file' Python methods have been eliminated; these will be replaced by wrappers around more general VMDApp methods.
    • Added volsets option to mol new and mol addfile for specifying a list of setids in the volumetric data sets being loaded.
    • Added first, last, stride, and waitfor options to mol new and mol addfile. Renamed '-type' to 'type' since it seems to be the convention in VMD commands not to use dashes (though that is the standard in Tcl/Tk...). Also fixed a bug in molecule_load caused by reusing a MolFilePlugin object that had been deleted after reading coordinate frames.
    • Added -type option to mol new and mol addfile.
    • Created a new VMDApp::molecule_load method which loads all kinds of files. Wired it up to two new Tcl commands, "mol new" and "mol addfile", which will also be able to load any kind of file as well as take optional parameters for specfying things like frames, volumetric sets, whatever. We need commands like this to implement save_state correctly, and it's much nicer to have a single VMDApp method that loads everything since you can eliminate lots of redundant code as well as opening and closing of files. Also fixed an apparent bug in the volumetric reader code that would cause it to always read the 1st dataset, even if only the 2nd or 3rd were requested.
    • Moved code for reading volumetric data from VMDApp to MolFilePlugin class.
    • Rewrote atomsel_phi and atomsel_psi to optimize for the case in which only a small number of atoms are selected. The code runs about 50% slower when all atoms are selected, but over ten times faster for small selections. This makes Ramaplot much snappier for showing Ramachandran trajectories.
    • Use "menu tk register" instead of "menu tk add".
    • Make contact map use "menu tk register" instead of "menu tk add".
    • Make timeline use "menu tk register" instead of "menu tk add".
    • Make the aligntool proc return its window handle rather than directly registering it with VMD.
    • Added "menu tk register" command to allow the registration of Tk menu extensions while deferring setup and window creation to the time that the window is first opened. Aligntool now registers itself in this way.
    • Added "menu tk register" command to allow the registration of Tk menu extensions while deferring setup and window creation to the time that the window is first opened. Aligntool now registers itself in this way.
    • Removed debugging print statement from vmdinit.tcl.
    • Cranked version number
  • VMD 1.8 alpha 25 (9/9/2002)
    • psfgen 1.3, adding regenerate [angles|dihedrals] command.
    • VMD menu extensions now get loaded after the .vmdrc file is read so that users can customize the Tcl search path and override the existing packages.
    • Replaced JString::replace() with JString::chop(), which just removes the last n characters from a string. That's all replace() was being used for anyway. I can't see a good way to test this from within VMD, but the unit test looked good and it's simpler this way anyway.
    • Replaced Jstring::gsub implementation with one that uses memmove/memcpy; appears to fix substitution problems on Solaris.
    • Fixed file copying for the old configure.options files so it should still work.
    • fixed a typo in the jmvexport script, was missing the "." in the default JMV file extension for the Tk file browser.
    • fixed a typo in the save state script.
    • Replaced the old configure.options.XXX files with a makefile performing the same function. With some more work, the top level makefile should be able to invoke any necessary sub-scripts and do the entire build.
    • Fixed the prototypes for the display_get_size() and display_get_position() routines from a recent commit.
    • Added a top level "makefile" for compilation and configuration of VMD. This new Makefile will replace the old "configure.options.xxxx" files. Binary distributions will still have a single "configure.options" file included so they know what platform they are though.
    • Added a helper function for returning a list of molecules.
    • Added contacts method to Python AtomSel class, analogous to 'measure contacts' from the Tcl interface.
    • Added a checkbox in the (renamed) Selections tab in the Graphics menu for enabling automatic updates of selections.
    • Added missing delete [].
    • Added -python command line option.
    • Added rmsd method to the atomselection module and the associated AtomSel class. Also made the AtomSel frame method return self when passed a value; this is to support a functional style of programming which makes it possible to express rmsd calculations over frames without an explicit loop construction.
    • Measure error strings are stored statically in Measure.C and exported only with a global function.
    • Added a minmax method to Python atom selections.
    • Added VMDApp method for getting display size. Replaced Python Molecule.resize with Molecule.size, which does set and get. Getting the window position doesn't work yet so this was removed from the Python class.
    • Added Python Display class and testing suite.
    • Replace "from vmd import *" with "import vmd" and fully qualify vmd methods; cleans up the Molecule module namespace considerably.
    • Made VMDApp::molecule_ssrecalc return true on success; added ssrecalc method to the Python Molecule class.
    • Made Molecule exceptions derived from Python exception base classes.
    • Added clear_reps() and del_rep(rep) methods to the Python Molecule class. Added testing for creation, deletion, and modification of reps to the test suite.
    • Added reps() method to Molecule, __str__() method to Rep, and a test harness for Molecule to the CVS tree.
    • Updated for coordinate loading API name change; converted tabs into spaces.
    • Removed EDM and MoleculeRaster3D files from the code and the build; these file types are now handled exclusively with plugins, rather than specialized Molecule classes. Removed virtual function in Molecule that was used just to initialize these classes.
    • Trivial code rearrangement and cleanup in load_timesteps().
    • Renamed the timestep and graphics file loading methods to be more consistent with the others. Made the volumetric file loading method more const-friendly.
    • Made the structure, graphics, and volumetric loading API's in VMDApp support file loading and molecule creation as an atomic operation; passing -1 as the molid for these methods creates a new molecule only if the file can be initialized. The volumetric API is new and should prevent user interfaces from having to perform these checks on their own. The molecule_load() method was eliminated, since it was equivalent to molecule_load_structure with a molid of -1.
    • Changed default image viewer on Linux to be "display %s".
    • Cranked version number
  • VMD 1.8 alpha 24 (8/30/2002)
    • BaseMolecule::init_atoms() can now be called multiple times with the same number of atoms; an error is returned if the atom number doesn't match.
    • Make the "Load in background" checkbox work correctly.
    • Eliminated the old pdbload code from vmdinit, since we now do this via the plugin instead. Soon enough we'll have a non-Perl urlload and life will be good. :)
    • Removed the color_changed variable from Scene; it was used to keep track of when color definitions but this is now handled by the Displayables themselves.
    • Reps now properly handle changes to color rgb definitions, even when their colors are stored as rgb's in their display lists instead of as indices.
    • Disable Linux PPC plugin builds until we get another Linux build box for the PowerPC platform.
    • Changed the counters on the new files menu to int inputs.
    • Fixed typo in plugin Makefile.
    • XTC files now use the first timestep to determine the number of atoms in each frame. Fixes problem with xtc plugin, which assumed that the number of atoms was being returned.
    • Make the "animate pause" command just pause, not step to the next frame. Same for the corresponding Python command.
    • Added Molecule and AtomRep Python classes. Working towards an object-oriented VMD Python interface based on the Swig-generated VMDApp API.
    • Cranked version number.
  • VMD 1.8 alpha 23 (8/23/2002)
    • Eliminated unused variable for now, until the code is complete and I'm sure I don't need it.
    • Fix the binary distributions so they also include Makefile.swig by default.
    • Updated to work with new rev of JMV saved state files, with floating point colors rather than the Java ints..
    • Changed our default build machine for the Alphas to be naiad rather than despina, since despina has been unreliable for some time now.
    • Added the 'jmvexport' plugin.
    • Added the new Makefile.swig included Makefile to the distribution.
    • Init the various Python C modules even when Swig is enabled.
    • Swig targets are now automatically built when the SWIG option is present. Also added swigclean to the list of veryclean dependencies.
    • Added ccache configure option.
    • Eliminated old python Makefile and Make.config part of configure.
    • Fixed an "extra lines" bug in scene exports to file renderers.
    • Fixed mismatched delete/delete [] found by Valgrind in Molecule.C.
    • Modified aligntool subroutines to allow to handle n sequences. Gui has been changed to allow alignment of 3 sequences. Color highlighting scheme modified as well.
    • Set the pick_value callback variable only when a label is created, as the docs already indicate, rather than every single display update. Also eliminate the useless and silly GeometryMol::sets_pick() method.
    • Moved the implementation of Python callbacks to built-in C functions for the sake of robustness. Updated the callback interface to make it easier to pass in object member functions instead of just regular functions. Still need to document these changes. Eliminated the old Python-based callback code, as well as VMDMenu, which was already obsolete in VMD 1.7.
    • Made setMap private to TclTextInterp.
    • Fixup for the pick_value callback.
    • Eliminated TextEvent.C.
    • Refactored the TextEvent classes a bit. Made all the subclasses do nothing but call a virtual function on the TextInterp object passed to them, and moved all the actual callback code to the respective interpreter classes.
    • Eliminated some global tcl vars in the vmdmovie script.
    • Added JMV export plugin to the CVS tree.
    • Have the Python interface do Tkinter updates with a hard-coded string, rather than calling a method defined elsewhere; it's less fragile this way.
    • Added get_vmdapp() method to Swig-generated Python interface.
    • Eliminated ImportGraphicsFltkMenu, since the new file chooser menu implements that interface.
    • Made Python graphics operations and graphics molecules work again.
    • Added "Load State" to the File pulldown menu; removed "Import Graphics" since this can now be done through the molecule file browser.
    • Fixed bug that caused VMD to crash on psf files containing no bonds. Should have made the plugin responsible for freeing the bond arrays like everything else...
    • cranked version number
  • VMD 1.8 alpha 22 (8/13/2002)
    • Updated the Windows installer with the latest collection of plugins and the current plugin directory hierarchy. Ready for test builds of VMD 1.8a22
    • Updated the Windows project files to match recent changes in the plugin structure and to add the new VRML 2.x scene exporter.
    • Fixed Win32 OpenGL window sizing code so it compiles again. Still needs testing since the new window sizing and positioning commands have been added.
    • Fixed flag setting in psf plugin.
    • Take the call to add_color_names out of MoleculeList()::add_molecule(). This lets us properly defer the creation of atom name information as well as the first rep until such time as structure information is loaded. The molecule_load and molecule_load_structure methods of VMDApp therefore call add_color_names for themselves after molecular structure has been loaded and analyzed.
    • Fixed a few bugs in the new file menu: check for user data in the filetype chooser because the "Convert From" item doesn't have one; update the file attribute data whenever a file is selected, even when the filetype hasn't changed, because the volumetric metadata needs to be read in.
    • Tools no longer inherit from Displayable; the base class keeps a Displayable member object and updates it in its check_event() method. Tool subclasses no longer reimplement check_event(); they implement a do_event() method which is called from the base class.
    • Make the new file chooser menu the default, and rename the old one "oldfiles".
    • When no filetype is chosen and a 4-letter filename is entered, the new file chooser assumes the users wants a pdb from the RCSB.
    • List file converter plugins in a submenu of the file type pulldown menu. Distinguishes between first-class plugins and Babel while keeping the size of the pulldown to a more manageable level.
    • Added some sanity checks to the EDM reader to prevent loading of invalid or unsupported EDM files.
    • Cosmetic touch-ups to the file chooser.
    • Eliminated unused variable warning.
    • DrawMolItem now draws isosurfaces and volume slices even when no coordinates are loaded.
    • fix missing line skip for the "0" line marking the beginning of the matrix
    • made the edm reader plugin do all of the metadata reading in the first read call rather than later.
    • made the edm reader plugin do all of the metadata reading in the first read call rather than later.
    • misc cleanup of edm plugin.
    • File chooser now loads selected volumetric datasets. For reasons yet unknown, VMD refuses to draw the isosurface unless the molecule also has atoms.
    • Eliminated DEF_VMDBABELBIN from the config.h header file and configure script.
    • Made top part of the configure script more readable, eliminated old text, simplified explanations, and tried to make it a bit more user-friendly
    • Eliminated mention of babel since the startup code doesn't pay attention to that anymore.
    • Added a browser for showing datasets in volumetric files; the metadata is displayed but datasets aren't loaded (yet ;)
    • Fix off-by-one error accessing Fltk data structures.
    • When a ToolDelete or ToolChange command was issued, UIVR was deleting the old tool in the call to act_on_command(). However, since Tools are now themselves UIOBjects, this is no longer permissible, because when Tools are removed from the array of UIObjects the size of that array is not recomputed, resulting in an array overrun. Tools are now removed in the do_execute() part of the command, so that these UIObjects are removed before act_on_command loop. Also cleaned up some unitialized variables uncovered by Purify.
    • Moved all the methods and state variables for picking atoms with tools from the UIVR class to the base Tool class. This was gratifyingly simple, requiring only cosmetic changes to both the methods themselves and to Tool subclasses, with fewer pointer dereferences and function parameters. Since picking state is now private to each Tool, it should now be possible to use multiple tools simultaneously. Tool selections are temporarily broken, only because the interface, which used to assume a single global tool selection, now needs to be generalized to indicate which Tool is to use the selection. We should take the opportunity to generalize the interface so that Tools can be assigned an arbitrary selection, not just a selection corresponding to a rep. I haven't tested multiple tools since I don't have more than one handy, but they all seem to work by themselves.
    • Moved addSpring from UIVR to SpringTool.
    • Moved get_nearby_atom() from UIVR to SpringTool.
    • Updated various plugins to correct memory leaks.
    • Made Tool a subclass of UIObject. It's still multiply derived from Displayable, but I think we can do better by having the base Tool class just keep a Displayable member object. Tools do their updates from the UIObject::check_event() method instead of the Displayable::prepare(). Working towards factoring the ad hoc functions in UIVR back into the respective tools.
    • Added a plugin for reading X-PLOR ascii format electron density map files
    • Removed dead code from UIVR.
    • Fixed volumetric plugin prototype, had to remove the const specifier since the plugin has to be able to modify the pointer to point to the array that it allocates.
    • Added a SHARED configure option for building as a shared library. Currently implemented for Linux only.
    • Added support for the tricolor primitive to MoleculeGraphics; this is needed for the tricolor primitive in the graphics part of the file reader plugins. Also created a corresponding Tcl command since this is needed for the save_state file.
    • Added a Raster3D plugin based on the MoleculeRaster3D code from VMD. Had to add a TRICOLOR graphics primitive since Raster3d seems to use it a lot and the alternative (averaging the color of each vertex) looks lousy. The primitive takes vertex, normal, and color as three floats each.
    • Moved Labels, Tracker, and Simulation items from the Tool pulldown menu to the Graphics pulldown menu (under a divider). Renamed Edit to Molecule, and renamed Tools to Extensions, since only Tk extensions appear there now.
    • fl_filename_ext() is called filename_ext() in Fltk 1.0.x.
    • Added new molecule file browser to the build. It's called "newfiles" for now and should eventually become the default file browser, but currently is not accessible from the rest of the GUI. It already does as much as the "Import Graphics" and files menus do now, in that it can handle structure, coordinate, and raw graphics files. GUI elements are in place to work with volumetric data as well, though these are not yet visible. There's space for a checkbox for "Determine bonds automatically", but this isn't visible yet either because we currently don't have a way to control this in VMD.
    • Added a molecule_structure API; it's not used yet but should eventually replace the molecule_load method. It's useful now for developing an interface that doesn't require users to load structure files before any graphics or volumetric files.
    • Reduced some include dependencies in BaseMolecule, and made the constructor take a molecule ID instead a VMDApp pointer.
    • Added parameter to read_volumetric_data for specifying which dataset to read
    • Eliminated the import graphics plugin, since its functionality has been taken over by the file reader plugins.
    • Removed import_graphics from the plugin builds.
    • Added quotes to protect from long pathnames containing spaces.
    • Make VMD use the molfile interface instead of the import graphics interface for files that contain low-level graphics primitives. I haven't updated the ABI version of vmdplugin so this will cause builds against the old versions of the plugins to bomb.
    • Added an API for importing low-level graphics primitives to the molfile interface. The import_graphics plugin type can probably be removed now. Created a grasp plugin using the molfile interface; it can be loaded like any other file (though it does not provide molecule structure of course). Also added plugin type-specific name mangling to the static plugins to prevent plugins with the same name but different type from clobbering each other when both are linked into the same application (which is what happened when a molfile grasp plugin was created when an import graphics grasp plugin already existed.
    • Changed version to be an internal file-format version number. It was previously the same as the version number of JMV.
    • Make the parm plugin return bonds with 1-based indices like it's supposed to.
    • Removed default display sizes from all the display devices. The display size is set with the init method (for OpenGL-based displays) or with a call to resize_window for the stub DisplayDevice. DisplayDevice now implements the resize_window method, which makes it possible to do file rendering without a graphics display. Some untested changes but innocent- looking were made to the Win32 display; these should be checked.
    • Made molecule loading create logfile entries. Due to API changes, it's only possible to log the loading of the structure file separately from the loading of any additional files; i.e., you will see a "mol load" line followed by an "animate read" line, rather than a single mol load line with both a structure and coordinate file. Also enclosed filenames in braces for the "mol load", "animate read", and "animate write" commands.
    • Make the molecule id show up in the picked atom info printed to the console.
    • Make the Geometry menu show molid as well as name in the picked atom data.
    • Added IA64 build flags for plugins.
    • DrawMolItem overrides Pickable::pickable_on() to allow picking only when the rep itself as well as its parent molecule are on.
    • Make the methods for molecule_load and reading/writing coordinate files look for a file converter plugin, in addition to looking for a regular file reader, before giving up and concluding that no plugin exists.
    • Scene now updates light definitions in the DisplayDevice for all lights when any light state changes, not just for the lights that are on. Fixes a problem observed at startup with lights being undefined until the first time material properties are changed.
    • Added triangles, color-per-vertex triangles, and lines to the VRML 2.0 export code.
    • Fixed vmd_file_is_executable() so it works correctly on Unix.
    • Added a new VRML 2.0 file export option. The first implementation only exports spheres and cylinders, but I expect to get the rest of the primitives working soon. This exporter already generates files which are MUCH smaller than the VRML 1.0 exporter did, and so it should be much more usable for conversions to other scene geometry formats than the existing VRML 1.0 exporter.
    • Added startvmd.py; used to run VMD in a separate thread when VMD is compiled as a loadable Python module.
    • Don't need VMDSWIG_BUILDSHARED as long as shared libraries can have have main() in them. Add missing dependency to Makefile.swig.
    • Added -ansi flag to the Linux build flags; has the effect of forbidding C++-style comments.
    • Fix illegal C++ style comment in PDB plugin.
    • Belated commits of Windows installer updates
    • The Molecule color category now keeps track of colors by unique molecule id, rather than by molecule name; this makes newly created molecules have different molecule colors again. It could be objected that it's nicer to have the molecule name show up in the color menu, but now that the molecule name can be changed, the only immutable property of the molecule is its id. There should be no confusion since, by design, all molecule browsers in the GUI show the molecule id next to the name of the molecule.
    • Added SWIG configure option. Enabling SWIG by itself does nothing; enabling SWIG and Python causes the Python interpreter to use the Swig-generated interface rather than the built-in one. The interface file wraps the public API methods of VMDApp and will eventually be able to provide wrappers for the other languages supported by Swig (still have to write typemaps for some of the VMDApp methods, unless I can find built-in typemaps). The Swig- generated interface isn't terribly nice to script with but I'm planning on writing some Python classes to wrap those functions.
    • Define the VMDHTMLVIEWER environment variable from vmdinit.tcl, using the tcl_platform variable to determine which platform we're on.
    • Updated main.c for new plugin API; still no tests for volumetric data.
    • Revised the plugin API. Notable changes include: abiversion in the header so future changes to the binary interface won't crash the program; elimination of callbacks in the file reader plugins in favor more straightforward array-based interface; factored out bond definition into a separate call since most file readers won't implement it; new API's for volumetric data; plugins are now "subtypes" of the base plugin type (inspired by Python's object system).
    • Removed Plugin.h and Plugin.C from configure.
    • Make the menu menu update when molecules are loaded, even when the coordinate file fails.
    • Move #include of CmdIMD.h so VMDApp compiles when Fltk is not enabled.
    • Make Scene delete heap-allocated color category in destructor.
    • Fix memory leak in Tcl render options command.
    • Make it safe for applications to retain just the pointer to vmdplugin_t, without making a copy of the items in the struct. Some plugins were passing the same pointer to the register callback more than one time, modifying some of the items in the struct each time. The vmdplugin header file now notes that this is not allowed.
    • Eliminated the Plugin class; all it ever did was make copies of the items in the vmdplugin_t struct, which is no longer necessary. We should consider defining inline functions or macros for accessing vmdplugin_t items, but for now it is just as easy to reference them directly, and we avoid creating and destroying Plugin instances for nothing.
    • Make atom selections use const char * instead of JString throughout. This was made possible by removing from MolInfo the last instances in which SymbolTable data of string type was returned from stack-allocated, instead of heap- allocated, memory. Now no strings are ever allocated or copied when retrieving data for an atom selection, except when actually written out to scripting language variables, resulting in significant speedups.
    • Move check for Fltk events from VMDFltkMenu::check_event to VMDupdate. This properly handles the case in which the last fltk menu is closed; Fl::wait() must be called after the menu is closed in order to actually close the window. Similarly, call Fl::wait in the VMDApp destructor so that windows are closed when VMDApp is deleted; previously, the windows would be closed only when the process exited.
    • Implement display resize and reposition commands in the VMDApp API.
    • Make ReadPARM null-terminate its atom name and atom type strings all of the time, not just some of the time. Seems to fix Markus' atom picking bug.
    • Significant cleanup of the cpk/licorice/vdw codes, got rid of all of the pick point generation code in the reps that add pick points for all atoms, the top level code call place_picks() now for each of those reps. Got rid of the old non-array point rendering code branch, and hoisted some tests outside of the bond drawing loop in the licorice/cpk code. Also updated some comments in several places in the code. Reorganization eliminated a case where pick points were potentially being generated twice when the bonds in the cpk/licorice were zero-scaled and drawn as lines. Code is generally much more readable now.
    • Eliminated the old VDW code, and removed all of the remnants of the old sphere code from the CPK/Licorice rep. Also removed pick point placement code from the the bodies of the cpk_licorice and solid sphere codes, in favor of calling the place_picks() routine from the top level, eliminating various tests and simplifying the code.
    • Made the CPK and Licorice representations use the new sphere array code rather than doing it for themselves, gives a nice factor of two performance boost on some graphics cards.
    • Added new code for non-contiguous spline control points, so that we don't have to mess with array padding or negative array subscripts in our new tube and ribbons code. I also hand tuned both the new code and the original code by manually unrolling one of the inner loops and simplifying the arithmetic, and by storing to temporaries rather than array variables until the loop is completed. This should make the spline calculations go a fair bit faster.
    • Aligntool fix to avoid divide by zero error when no C alpha atoms found in file
    • Updated version to alpha 22.
  • VMD 1.8 alpha 21 (7/18/2002)
    • Fixed problems with point and sphere array drawing. The previous commit was also incorrect. The error was caused by incrementing the atom coordinate index inside of the conditionally executed isOn part of the code instead of incrementing the coordinate index regardless, which is what it should have done. It wasn't wrong by a multiplicative factor, but rather generated incorrect results when an atom selection other than "all" was used, due to positioning of the index increment code.
    • changed to prompt user for CE directory and binary file information, with option of using sensible defaults
    • Updated aligntool plugin and cealign component.
    • Create the menus before calling uiText->read_init(); otherwise when the plugin Tk widgets are created they don't get added to the Tools pulldown menu.
    • Fixed PR 218, loading a single-atom file caused incorrect calculation of default viewing scale.
    • Moved a few of the molinfo keywords into TclMolInfo; working towards making an efficient atom selection API possible with no unnecessary copying of strings.
    • Eliminated obselete "bondlist" atom selection keyword. It's useless for doing atom selections and it's already been replace with the getbonds and setbonds atom selection methods.
    • Added an ad-hoc method for turning off event checking in UIText; this is just for experimentation with alternative interfaces and isn't used anywhere in the program.
    • MacOS X builds now use current FLTK CVS until 1.1.0 is out.
    • Split the code for the "dotted" and "VDW" reps into separate routines since the sphere array code only does solid spheres currently.
    • Enable full vertex array points by default
    • Fixed color setting code for point/sphere arrays
    • Reverted to the previous FPS behavior.
    • Further updates to sphere and point array code.
    • added a point array drawing primitive, renders about 3 times faster than individual points do.
    • Rearranged aligntool buttons to make window truly horizontal
    • Added prototype sphere array code. The code has two implementation paths in the OpenGL renderer. One is implemented via the Sun sphere array extension, and the other is implemented in plain OpenGL. Both implementations benefit from disabling two-sided lighting while drawing their spheres. Initial performance with the regular OpenGL code path is already 30% better on an XVR-1000 graphics board, even with the weak point that the current implementation calls glColor3f() on every single sphere whether it needs to or not. Eliminating the extra calls to glColor3f() should further improve performance. The new code is disabled by default since the code in DrawMolItem.C needs some reorganization to differentiate sphere drawing from point drawing. I should be able to use 90% of the same code to implement a point array primitive finally.
    • Revert last changes and eliminate deletions of const strings; these strings are copies of pointers to elements of argv and therefore need not be copied.
    • moved sphere radius scaling check outside of inner loop
    • Fixed missing resize and repositioning methods in Win32OpenGLDisplayDevice.C. They are stubs at this point, but required since this code shares the same header as the X-windows code.
    • Fixed illegal calls to delete on "const char *" data items. (Well, illegal from MSVC's point of view anyway)
    • Fixed syntax error caused by missing brace typo
    • Added a "display reposition x y" command.
    • Updated version number
  • VMD 1.8 alpha 20 (7/13/2002)
    • Special thanks go to the FLTK developers who responded to our bug reports and fixed bugs that were impacting the mouse event handling performance of VMD on MacOS X. We owe a lot to the FLTK team for developing the native MacOS version of FLTK that we use as the foundation for the native OpenGL version of VMD.
    • Added a "display resize w h" command for resizing the graphics window. Not yet implemented for Fltk (Mac OSX version) or Win32.
    • Added a new version of read_event that fixes the buggy window resizing behavior on machines running Linux with the Nvidia OpenGL drivers. The new version empties the X event queue each time it's called, rather than returning only the last event. The code should be safe for all X platforms, but is currently enabled only for Linux pending further testing.
    • Updated msvc project settings
    • Fixed missing initialize scene to NULL in the constructor.
    • Remove startup.C
    • Move startup code from startup.C to vmd.C, out of the VMDApp class and into static variables. Change shared memory allocators from a VMDApp static method to a global function pointer set during startup. Make VMDApp anal about initializing its member objects. Move much of the Cave and FreeVR startup code out of VMDinit and into the vmd.C startup sequence; same for the Cave shutdown. There are still a few gotchas resulting from certain things (display location, image viewer) having to be done early on in startup but those are well commented and overall things are easier to grok than before.
    • Added a temporary file deletion hack to the VMD startup script which is just for the native, bundled, MacOS X version. The startup tmp files are used to feed commands to the terminal app where the VMD console runs.
    • New MacOS X builds are done against updated FLTK 1.1.0 CVS code so that they include the recent event handling performance fixes. This makes the native MacOS version MUCH MUCH MUCH more responsive.
    • Added a version of the new frustum shearing stereo perspective projection code as an ifdef. It still needs work, but this code seems promising.
    • Made changes to the stereo projection code in preparation for adding frustum shearing capabilities in addition to the existing eye rotation projections.
    • Added mention of the "local" option for running NAMD.
    • Add a virtual supports_gui() method to DisplayDevice, intended to replace the DISPLAY_USES_GUI macro. Also moved initialization of the old style forms to VMDinitUI instead of at the begining of VMDinit, since even if a cave display is requested we might not get one.
    • The Tcl quit and exit callbacks can now call VMDexit directly since actual shutdown won't take place until the call to the interpreter has completed.
    • Make VMDexit just set a flag indicating that VMDupdate should return FALSE, exiting the program. Actual shutdown takes place in the VMDApp destructor.
    • Move window creation out of the OpenGLDisplayDevice constructor and into a function that returns the success of the operation; eliminates the need for VMDexit calls within that class. Also make OpenGLDisplayDevice not segfault when destructed after unsucessful window creation by checking whether a window was created.
    • Add a few display device methods to VMDApp which will be useful for setting results from processing startup options.
    • Added comments to spline evaluation code. We should probably implement a version that uses forward differences for better performance. (cuts fp ops in half, plus only fp ops are then additions, no multiplies)
    • Make spline basis comments more readable.
    • Fix incorrect use of tags and atom ids in mouse forces on residues and fragments.
    • Eliminate the unused BabelBin variable.
    • Eliminate the DataPath variable, making it a local variable in VMDreadStartup.
    • New ribbons code gets compiled in now for testing inside VMD.
    • Initialize display setting variables to compiled-in default values, then override with environment variables or command line options; this way there's no need to keep track if a variable has been set.
    • Tweaked rmsd selection method and cleaned up a bit
    • Aligntool updates: added a distance field for each pair of aligned residues, box to display rmsd value for highlighted residues, and bar graph in the multiple sequence window
    • Fixed a bug in the new ribbons code that calculates normals for non-circular ribbon cross sections.
    • First working implementation of new ribbons code, though not all possible normal/perp calculation cases are handled yet, and there's a lot to be done speed-wise still. Initial tests are very encouraging, as very nice looking tubes/ribbons can be achieved with relatively coarse granularity tessellation. This implementation emits single triangles presently, but future implementations will implement vertex arrays.
    • Added first part of new ribbons and tube drawing code, still needs several pieces before it will actually work however.
    • The PDB reader breaks when fed files that contain DOS and/or Macintosh style line breaks. Added comments describing the problem and solution, but will have to work on this at another time.
    • Updated Windows installer files.
    • Fixed incorrect Windows file mode opening bugs introduced in version 1.26 of SnapShotDisplayDevice.C. Binary files need to be opened with mode "wb" in order to be written out correctly on Windows, forgetting to open them as binary files causes all sorts of bad things to happen.
    • Make light 3 initialize properly by using DISP_LIGHTS as loop limit instead of "3".
    • Crank version number
  • VMD 1.8 alpha 19 (07/09/2002)
    • Make default Tachyon mode render with 3 samples per pixel instead of 1, since the only time people will probably use this is when they want a nice looking image.
    • Change the animation slider behavior. Dragging with the left mouse button updates the display continuously; dragging with the right mouse button updates on release. The toggle checkbox now controls zooming; in its on state, both the checkbox and the slider knob turn red. Seems to be easier to use and should surprise the user less.
    • Changed the look of the animation buttons, and fixed a compiler warning.
    • VMD now emits scenes using the new Tachyon directional lights, which gives a nice boost in rendering speed, and results in images with as close to identical shading as can be expected given that Tachyon is doing pixel-rate shading whereas OpenGL is currently only doing vertex-rate Gouraud shading.
    • Builds are now made with the newest version of Tachyon, which supports directional lights.
    • cranked version number.
  • VMD 1.8 alpha 18 (07/08/2002)
    • Enabled the new orthographic camera code now that the builds include the new version of Tachyon.
    • Added new support for the Tachyon orthographic projection modes. Before it can be turned on, we have to upgrade all of the tachyon binaries and libraries that VMD is built with. Looks great, this will make lots of users happy.
    • Aligntool is fixed so it doesn't get confused by seqres lines in PDB files
    • Fixed a bug in the "color change rgb" command introduced with the big color changes. Also fixed the text log output of the color change command.
    • Cleaned up the Displayable constructor, adding a default constructor for the root and getting rid of the third argument in the child constructor. This argument used to be used to reserve space for the size of the display list, but has been ignored for some time.
    • Stage correctly sets up its colors now.
    • No reason for Displayable::fix() to also fix all children.
    • Fixed the "fixed atoms" bug. The problem was that when reps were created, the doRot, doCent, etc. flags that they inherit from their parent were masked by the current state of the isFixed flag. The isFixed flag is turned off by unfixing the molecule, but there's no way to change the doXXX flags. Displayables now inherit the actual value of these flags from their parent when they are created.
    • The zoomseq list_pick callback now exits immediately if the window isn't open; closing the window is currently the only way to turn off pick highlighting.
    • Added a set of animate tools to the bottom of the main menu, including a slider that can be used to browse through the range of frames. Dragging the slider with the right mouse button zooms the range of the slider to 100, so that it's possible to step one-by-one through the frames when the number of frames exceeds the pixel width of the slider. Other tools are as they are in the animate menu.
    • Added CmdAnimNewNumFrames, which signals that the total number of frames in a molecule has changed, as opposed to CmdAnimNewFrame, which just signals a change in the current set of coordinates. Made the labels menu update the xyz and value for the currently selected label when the frame changes.
    • Forgot to switch off color_change flag, and moved prepare3D after set_background_color so that changes to the background color show up immediately.
    • Updated the MacOS X native version to build based on FLTK 1.1.0rc4
    • Updated the plugins used in the alpha 18 builds.
    • UIText now echoes pick information to the console; this used to be done by the Mouse menu but that menu was eliminated.
    • Cranked version, lots of little stuff to put into next alpha
  • VMD 1.8 alpha 17 (7/02/2002)
    • Updated MSVC project with new files and deleted files.
    • Updated the docs after removal of the detail level commands and functionality
    • Moved ColorList functionality into Scene. Color data is no longer stored and copied in DisplayDevice; Scene passes a pointer to color data just before rendering. Background color is also stored in Scene (as a Displayable) instead of in the DisplayDevice. Color changes should work in the Cave now since color data is stored in shared memory.
    • Removed ColorList and ColorUser.
    • Eliminated more detail_level-related rendering code from the OpenGLRenderer implementation. Also corrected some out-of-date comments I noticed while cleaning up.
    • Ripped out the old detail level handling code, but left traces in the mouse code so that if we decide to re-implement it will be easier. The old detail level system was incapable of dealing with many of the new graphical representations VMD can produce, many of which are very demanding even when drawn in wireframe mode, some representations actually performed worse when drawn in wireframe than when drawn in solid mode. A new implementation of detail levels would need to actually eliminate geometry at the DrawMolItem stage, doing it within the rendering stage is no longer helpful since we're primarily vertex transform bound, and not fill-rate bound. Eliminating geometry or greatly simplifying reps in the DrawMolItem stage would be the best way to do things. Also, when we implement multiple OpenGL windows, this is going to become a bigger issue since multiple windows will be competing for graphics accelerator resources and main processor power.
    • Eliminated the "draw color rgb" option and its associated methods in DrawMolecule and MoleculeGraphics. We still need to support it in the ImportGraphicsPlugin, at least for now.
    • Implemented a shared memory protection scheme based on the use of Reader/Writer locks instead of barrier synchronization. In theory, if we move the acquisition and release of the writer lock so that the write lock is held less frequently, the overall rendering performance could be higher than is possible using the old barrier synchronization scheme. For now we call vmd_msleep() in the main application process in order to give the renderers a chance to draw before we reacquire the write lock. More testing is needed on this code, but it does appear to work, so we'll go with it and see how it holds up. The old barrier code is still here as an alternate ifdef case.
    • Got rid of old special-case code for delaying the TEXT display devices. By changing our startup code so that the VMD title isn't run when we use dispdev text, the code no longer chews CPU by default. This makes the VMDupdate() method much cleaner and easier to read.
    • Made more NameList methods const.
    • Renderers now have the concept of whether they are a renderer process or not, so that the main application process and the slave rendering processes can now execute the same code path for the most part, with less special case code at the top level. It would still be nice to improve how we handle the text display device so that we would have minimal special code for it as well.
    • Fixed missing call to Molecule::create() after loading molecule. Fixes MoleculeRaster3D support, which had been broken since 1.8a6.
    • Made it possible to override the default number of CAVE processes since at least one 6-wall CUBE system out there ends up with 3 procs instead of the expected 6. For now this override will give us a weak way out, but the better solution will be to use Reader/Writer locks.
    • Made the FPS indicator redraw itself no faster than ten times per second, which reduces CPU utilization and makes the display more readable.
    • Lights are stored in Scene rather than in DisplayDevice. Scene keeps track of when light properties have changed and calls DisplayDevice methods to set device-specific lighting just before rendering. It also passes light information to the file renderers; previously, light info was copied from the old DisplayDevice to the new one through the operator= method in filedraw. The new code improves light state handling in three ways: (1) no need for CaveScene and FreeVRScene to copy light state around in shared memory, since Scene is already in shared memory; (2) renderers get their light state passed to them explicitly, rather than reading protected data from the parent DisplayDevice class; (3) all changes in light state for the display device happen at a single well-defined time, rather than at random points in the prepare loop.
    • Made the main molecule browser indicate A, D, or F with color changes rather than small/capital letters. T is drawn only next to the top molecule so that it's easier to tell which molecule is top. "Status" was replace with T, A, D and F drawn directly over their respective columns.
    • Made ramaplot a plugin and took it out of the core VMD scripts dir.
    • fixed contact map menu item names and output names.
    • Fix timeline window menu item names and default postscript output names.
    • more fixes to aligntool menu item names and default poscript output names.
    • fix aligntool window titles etc.
    • Got rid of the zoomseq "analyze" menu since it is now redundant.
    • Clean up timeline window, removed old analyze menu items.
    • Replaced the old materials form with a new fltk-based one.
    • Fixed messed-up background colors on our menus by not calling fl_initialize, and fixing up the upside-down old forms by hand, using the same code from forms_compatibility.cxx that was used to flip them in the first place.
    • Eliminated forms creation code for forms that no longer exist.
    • Silenced the chatty output of the timeline plugin at startup.
    • Got rid of the right-click popup menu in the main menu. Moved those menu items to the Edit pulldown menu. Moved the previous contents of the Edit menu to a new pulldown called Graphics.
    • Eliminated old XForms compatibility mode forms from the MSVC build. We are almost entirely rid of the old forms now, just a few more to go.
    • Reps in the graphics menu can now be toggled on and off by double-clicking on them. The on/off state of a rep is independent of the on/off state of the molecule: turning the molecule on or off shows or hides all its reps, but VMD still remembers the state of the individual reps. The on/off state of the molecule is reflected in all molecule choosers by appending "(off)" to the item.
    • Explicitly added more globalso the RMSD script to prevent problems.
    • Old menus that have already been replaced are no longer compiled into VMD.
    • Cleaned up aligntool plugin a bit -- removed some dead code.
    • Fixed indenting in contactmap plugin
    • Persistent forces of zero are now never sent, some force bugs have been removed, and the force is now ONLY zeroed by the Molecule class.
    • Got rid of the :nnn string that gets tacked on to every molecule name. Added a molecule id to the main molecule browser, as well as to the molecule choosers used in several of the widgets. The molecule chooser is now filled with one shared piece of code, so we know we'll be consistent.
    • Split the definitions for the GraphicsFltkRep classes into a separate file.
    • Added some double-click functionality to the main molecule browser. Double clicking on T, A, D or F toggles top, active, displayed or fixed for that molecule. Inactive states are represented by lower-case letters instead of a space. Double clicking on a molecule's frames opens up a dialog to delete frames from the molecule. Triple clicking on the molecule's name makes that molecule the only active and displayed molecule and resets the view on it (single A/D/T from the old molecule menu).
    • Force VMD to load other new plugins at startup so they populate the tools menu, and people will begin testing them.
    • Fixed the close button on the contactmap plugin, and got rid of several spurious startup messages for now. Still needs lots of cleanup.
    • Fixed various bugs in the timeline plugin so that the close button works, and got rid of spurious startup messages for now. Still needs lots of cleanup.
    • Added a hack to make the Mac mouse much more responsive, though much more work is needed.
    • Added local namd running option to namdrun package
    • Oops! Removing namdrun CVS conflict message that I accidentally left in.
    • Replaced the orthographic toggle with a pair of perspective/orthographic radio buttons.
    • Added new display menu containing just the clip plane and other display setting counters. The old display menu has been renamed "olddisplay".
    • Added readable documentation to the namdrun package.
    • Adding the namdrun package, to separate the code responsible for running NAMD out of the AutoIMD package.
    • Got rid of msvc compiler warning on Molecule.C
    • Added stereo mode selection to the display pulldown menu.
    • Added a toggle to the display pulldown menu for turning on/off orthographic projection.
    • Added stage and axes controls to the display pulldown menu.
    • Added light toggles to the display pulldown menu.
    • Added toggles for depth cueing, culling, anti-aliasing, and fps to the display pulldown menu.
    • Added the new molbrowser class to the msvc project.
    • Updated the 'timeline' plugin with tcl package handling and startup code.
    • Don't need to worry about AIX3 builds anymore, the vmd_msleep() code was the same now anyway, so eliminated alternate code branch.
    • Made the ACTC code independent of values.h, and added a commented out option which might give us longer triangle strips if we are willing to throw away triangle winding order, which would only work if two-sided lighting is guaranteed to be on.
    • Improved the contactmap plugin loading via package require and fixed a highlighting bug.
    • Added ACTC triangle consolidation to MacOS X builds of VMD.
    • Made menu callbacks pure static functions instead of class statics.
    • Added the contact map tool to the plugins directory and made it minimally function as a Tcl package.
    • Implemented the menu extensions added to the Tools submenu as an FL_SUBMENU_POINTER. We no longer need to fix up the Help menu when we add menu extensions. Also made a per-instance copy of the mouse submenu since its state gets changed with the mouse state. Added additional comments and made the rest of the menu arrays static const.
    • Factored the File, Edit, and Display menus out of the toplevel pulldown menu array.
    • Pulled the contents of the mouse submenu out of the top-level menu and made it an FL_SUBMENU_POINTER array. This makes our menus more robust since changes in the number of items before the mouse menu now won't affect the code that updates the gui in response to changes in mouse start coming from other parts of the program.
    • Made all the pulldown menu items that just raise a form use a single callback function.
    • Split off the code for the MolBrowser class from MainFltkMenu into its own file, since it is independent of the rest of the code there.
    • Added preliminary error-trapping for invalid chain selection in cealign.
    • Turned off SEQRES output in the pdb plugin; we'll write SEQRES records in the aligntool instead.
    • Fixed PR 215 - VMD no longer crashes if you give it a post-render command with more than five %s substitutions in it.
    • modifyed the correction for resNumShift in the cealign part of aligntool
    • Refactored draw_tube. Added auxiliary data structures to cache the indices of the atoms used as control points; these cached lists are determined just once (when either tube or cartoon is selected), then reused during animation, resulting in faster animation by 10-30% for 20-100,000 atom systems. Separating the caching of indices from the copying of coordinates has produced much clearer code. The draw_spline_curve method, which does the actual drawing, was not changed at all, but since there is now only one point at which that function is called it should be easier to make it faster (it does a lot of redundant work) and/or produce better-looking reps.
    • Fixed an innocuous UMR found by Purify.
    • Cranked version number
  • VMD 1.8 alpha 16 (6/21/2002)
    • Updated the Windows installer files, config, readmes, etc.
    • Autoimd cleanup. The current code fails miserably on Windows, this should slow the failure down a bit, but its still not portable yet. The autoimd code needs to use better mechanisms for finding parameter files and so on. At the very least the user should be asked to provide the parameter file until we have a real NAMD plugin. The current code has no hope of working anywhere but locally.
    • Fixed plugin build directory in the build script.
    • Updted the plugin build script so John can build all of the Windows plugins by default. Perhaps we need to figure out a better way to do this, but for now this eeks us along for distrib builds.
    • Even more cleanup of the aligntool code, and made it work as a VMD tk menu in the tools menu. Still needs lots of work, but getting better.
    • further cleanup of the aligntool code.
    • updated to the aligntool code and tcl packages.
    • The Molecule now sets forces for atoms to zero automatically when they are not applied during a given update via addForce. Also, the GeometrySpring force updates are added to prepare() so that they will work correctly. As far as I know, there are no more big IMD bugs.
    • Thanks to the new force manager, tools once again don't need to worry about what timestep it is.
    • Fixed the Tool scaling problem. Tools now start at scale 1.0, regardless of the scale of the top molecule!
    • Geometry menus now update correctly when springs are added.
    • Made the result of the Tcl "mol list" command go to the Tcl interpreter rather than to stdout.
    • Teach the VMD saved state code to put color commands inside of a proc so that they don't force display updates etc, so they should go much faster when working with large molecules.
    • Eliminated a bunch of MSVC compiler warnings.
    • Finished removing MoleculeIMD from configure, and make IMDMgr instantiate a blocking IMDSim when threads are not enabled.
    • Added replacement for rint since MSVC lacks a real math library.
    • Updated MSVC project to reflect a whole flotilla of recent changes in VMD.
    • Fixed an error in the blocking version of the IMD code, it is probably broken due to recent changes, but at least it compiles and the old byte swap length logic is fixed.
    • Further cleanup of bond search code. Eliminated an illegal call to delete on a const *. (wouldn't even compile in MSVC) The logic was left over from old code and shouldn't even have been possible since it only got run when ts was NULL, but since the new code checks for that first thing, it can't happen, so that code was eliminated altogether.
    • fixed floating point constant to eliminate compiler type conversion warnings
    • Reading timesteps puts useful defaults for unit cell information.
    • The pdb plugin now writes CRYST1 records, but uses thee unit cell information from a simulation when available.
    • Renamed the AIX target as "AIX4", since there are new versions of AIX coming soon that are not likely to be source code and compiler flag compatible. (5L is somewhat different, for example)
    • Added support in VMD for writing unit cell information to timesteps.
    • Fixed the gromacs AIX ifdefs so that they work more generally, not just for VMD.
    • PDB plugin now writes SEQRES records based on the residues for which it also has coordinates.
    • Added "display fps " Tcl command.
    • Zapped the dead CoorDCD.* and CoorFile.* files.
    • Oops - apparently forgot to recompile after removing MoleculeIMD.
    • Refactoring and revision of the IMD code. IMDMgr, now a UIObject, checks for incoming coordinates during check_event and appends them to the molecule. Forces from the mouse or tools get sent to the Molecule. If an IMD connection for that molecule is in progress, forces are written to the current timestep and sent to the IMD simulation. Mouse forces have been changed somewhat to make the applied force smoother; we still need to make it possible to change the force scaling on the mouse. The userforce and change_userforce fields have been eliminated from MolAtom; the changed_userforces atom selection keyword has been eliminated as well. The userforce keywords themselves (ufx, ufy, and ufz) are still active, though they now refer to particular timestep, like coordinates. MoleculeIMD was eliminated, so that IMD is no longer treated as an endless coordinate file. DrawForce was made a part of DrawMolecule, so that forces can be visualized when no IMD connection is established.
    • Added a psfgen safety feature - after fatal error all commands fail until resetpsf.
    • Removing the old "SMD Tool" from UIVR. It's uses a bunch of hacks that are slowing Justin down.
    • Added more fixed bugs to the README file.
    • fixed a bug in label command logging (missing space in format string).
    • Mouse mode center no longer adds a label when you select an atom. There should probably be some way to tell the user that an atom was successfully picked, but labels are intrusive and persistent, which is not needed in this case. Also got rid of the command logging that happened when the molecules were recentered.
    • Dynamically adding items to the main toolbar causes Fltk to make a private copy of the menu, which means modifying the original array doesn't work anymore. As far as I can tell, Fltk doesn't provide a way to set radio buttons in the pulldown menus, so I have to access the menu array, cast it to non-const, and modify the items myself. Ugly, but it works.
    • Cool - VMD stores atom coordinates only in the Timestep now. After fixing vmd_bond_search, nothing was reading the coordinates out of there anymore.
    • Cleanup of BondSearch. Always take coordinates from Timestep, never from atom->pos; const correctness.
    • Removed dead ReadPDB code.
    • Improved error reporting when loading autoimd and vmdmovie packages.
    • Fixed MacOS X resource fork copy test in the installation process, had broken installs for all platforms, fixed now though still inadequate to deal with MacOS X resource issue correctly.
    • Restored the IMD status messages in a way that causes nothing to be printed on startup.
    • cranked version number
  • VMD 1.8 alpha 15 (6/14/2002)
    • Fix a bug in the aligntool plugin distribution code.
    • Added a pre-calculated normal paramter to the volume slice representation so that we can do a nicer job with specular reflections etc when the time comes to improve materials handling in the 3-D texturing code. Temporarily disabled the use of the GL_SEPARATE_SPECULAR_COLOR feature until bugs are eliminated with XVR-1000, currently it looks like a device/OpenGL driver problem, but could still theoretically be a problem with our code that just happens to show up on that board.
    • Load vmdmovie and autoimd packages at startup.
    • AutoIMD now adds itself to the Tools pulldown menu.
    • Made vmdmovie add itself to the list of tk tool widgets managed by VMD. Had to change it so it doesn't ever destroy its main window.
    • RamaPlot now appears automatically in the Tools pulldown menu. Typing ramaplot from the command line still works. RamaPlot can still be started from the ZoomSeq window, though that's looking unnecessary now.
    • added aligntool and vmdmovie to the plugins list
    • Disable default rocking on startup in VMD, to make pub/sync work more nicely with BioCoRE.
    • Fixed typo preventing the internal Tachyon option from working correctly with the vmdmovie plugin.
    • Menus that register with the "menu add tk" command are now automatically added to the Tools pulldown menu. Ramaplot, VMDMovieMaker, AutoIMD, etc. should all register themselves in this way.
    • A quick script to turn doc labels into TCL commands.
    • Moved XYZ in the new labels menu up to just below Molecule.
    • Added in-program list of keywords for molinfo.
    • Made in-program help for measure a little more helpful.
    • Updated in-program help for the mol command.
    • Added NM definition for WIN32 plugin builds.
    • Fixed nm option and pattern for initial . in names on AIX plugin builds.
    • Eliminated -p option to nm for Cray T3E in the plugins Make-arch.
    • Added code to make_distrib to copy MacOS X application resource files into the distribution tar files.
    • Added special install code for MacOS X to copy the application resource files into the final VMD installation library directory.
    • Made the close button work on the new labels menu.
    • Fixed the resource compile line for MacOS X native builds so it works correctly now.
    • Turned off the -DBROKENGLU defines since we've now gotten past the GLU initialization problems.
    • Moved all of the GLU quadric initialization code out of the constructor, as this caused us serious problems with MacOS X. On MacOS X, it is illegal to call _any_ OpenGL stuff until the OpenGL context is active and bound to a window.
    • moved broken GLU defines to fltkopengl defines for MacOS X native build
    • Make MacOS X native builds use the lines version of the axes for now, until GLU starts working again. (added -DUSELINEAXES)
    • Added -DBROKENGLU for MacOS X native builds, until we get that fixed.
    • Added OpenGLRenderer ifdefs to avoid GLU calls for the native MacOS X build, since they are currently causing us problems. Looks for -DBROKENGLU to disable them.
    • MacOS X resource file, copied from FLTK for now.
    • Fixed PR 213 for alpha 14, but forgot to commit the README update previously.
    • Added code to run the Mac resource compiler on the final binary, to make it an actual Mac application.
    • Prevent inclusion of the old fltk header file for the old file browser, when buiilding on new version of FLTK.
    • Made changes to support native MacOS X builds and FLTKOpenGLDisplayDevice.
    • Added a new "FLTKOPENGL" configure option, intended solely for the Mac for now, but should be possible to use it on other platforms too if we wish to try it out. Also made quite a few changes to the MACOS X build flags to differentiate things between the X11/Mesa builds and the native FLTK/Carbon/Aqua builds.
    • added native build configuration for MacOS X, using FLTK for the graphics window, for now.
    • Fixed a message typo in "imd connect".
    • Added a check to see if the connection was made successfully.
    • Added dependencies for autoimd docs.
    • Changed IMD code so that the forces actually only get added in once per timestep, so the force arrows will not flicker.
    • Fixed a minor nit with GLint vs. int, to please the MacOS X native OpenGL builds.
    • Cranked version number
  • VMD 1.8 alpha 14 (6/12/2002)
    • Added some internal variables for the RMSD module as Tcl globals as a temporary workaround for problems described by Alexander. Long-term, the RMSD tool should be turned into a proper Tcl package.
    • Fixed a problem pointed out by Jordi, where the internal Tachyon renderer was not saving the output to the correct filename, which caused problems for the VMD movie script/plugin.
    • Temporary workaround for OpenGL extension issues on Linux. Long term, this has to be re-done to work more generally, and this only cures the problem on some machines, others will still fail at link time.
    • Fixed a crash when IMD was started on a molecule with no timesteps.
    • Condensed comments, etc, more formatting changes.
    • fixed comments in FileRenderList so they are near the code they apply to, made formatting consistent.
    • Renamed the old labels form to "oldlabels" and the new one to "labels", effectively replacing it in the main menu.
    • Swapped the position of the Browse and Add buttons near the secondary files browser so that Browse is always next to the input field.
    • Fixed PR 213, render commands weren't getting logged correctly.
    • Workaround for possible bug in ACTC 1.1, where ACTC would go one item past the end of array bounds in certain cases.
    • Fixed (avoided) a compilation problem on Tru64 due to the "inline" directive in VMDDisplayList on two const methods. Removing the inline directive cured the problem, but there's no reason it should have been incorrect afaik.
    • Fixed 32-bit IRIX6 builds so they are build -mips3 and not -mips4, so that binaries will run on older SGIs.
    • Added CAVE support to 64-bit IRIX6 builds.
    • Made the new label browser reflect show/hide correctly, and changed the hide color from cyan to "orchid", which hopefully is less ambiguous.
    • Expand the widths of the columns to fill the width of the label browser.
    • Reformatted the new label widgets to be more compact and correctly stay within their group bounding boxes.
    • Reformatted the appearance of entries in the new label browser. On and off is indicated by the color of the label. The value is printed in the picked atom information. X, Y, and Z have been merged into one field for easier cutting and pasting.
    • Added buttons to the new label menu for exporting graphs and saving the raw data.
    • Added the new "aligntool" plugin to the plugin tree.
    • updated the SDL configuration to work from VMD build areas rather than assume /usr/local.
    • Updated SDLOpenGLDisplayDevice to work with recent VMD changes.
    • Fixed the surface plotting example script in the user's guide.
    • Added docs about customizing representations to AutoIMD.
    • Made the default IMD representations a little nicer.
    • Made AutoIMD macro names more sensible.
    • Added a preview checkbutton to the new label browser; can now preview the graph by clicking on the items in the browser if preview is selected.
    • Added "mouse rocking on/off" command to enable/disable rocking with the mouse.
    • Fixed the plugin directory to be autoimdVERSION instead of just autoimd.
    • Adding some docs for autoimd. Still need to put in the pictures.
    • Misc cleanup and improvement of comments in the OpenGL rendering code.
    • Updated the strip rendering code eliminating old facet/vertex counting code in favor of the new code which pre-calculates facet pointers etc.
    • cranked version number
  • VMD 1.8 alpha 13 (6/08/2002)
    • Finished the glMultiDrawElements code for rendering triangle strip data, future versions could further improve performance by using glMultiDrawArrays() instead, as it avoids extra dereferencing at the cost of using more memory. Better yet would be to get this caching inside of display lists, which would take care of all of that for us.
    • Plugins; Fixed a problem with the distrib target. The timestamps on the static .a files were being updated by the distrib copying process. Adding the "-p" flag to the copy command to preserve file permissions and times prevents this from happening, with the added bonus that the files in the distribution directory now reflect the modification times of the sources. This was a problem for MacOS X, since their linker complains if the file timestamp on a library is newer than the archive header in the library generated when ranlib is run.
    • Differentiate between the X11 and native builds for MacOS X
    • Clicking on labels in the browser of the new label menu now puts atom information in the picked atom area.
    • Added show/hide/delete buttons to the new label menu; fixed up the colors to match the other forms.
    • More cleanup to file reader tester, and made pdb plugin more robust in case it's handed a file that isn't a pdb or is badly formatted.
    • Fixed incorrect counting of timesteps in file reader test program.
    • Fixes to the file reader test program so it compiles and doesn't segfault; and fixed pdbplugin so it sets header.numatoms to 0 before incrementing the atom count; makes the plugin not rely on the caller to set the struct members to zero. Added comments in main.c for how to compile and link to test a plugin.
    • Added GeometryFltkMenu to the source tree. It's not quite done yet but it's far enough along now that it'll be done soon and be able to replace the mouse and label menus.
    • Added check for existence of SURF_BIN environment variable before using it. Prints helpful error message if the variable is not set.
    • Added a Quake-style FPS indicator, with a toggle in the Display menu.
    • Adding AutoIMD to the standard plugins.
    • Moved CmdIMD::do_execute() code into a VMDApp method. "imd connect" and its Python analog now return errors when the connection fails.
    • Make VMD compile again when IMD is not enabled.
    • Added commands for assigning names to reps, and retrieving the id of a rep with a given name. The name is guaranteed to be unique and stays with the rep even when the repid changes. This should make it possible for zoomseq to keep track of the rep it uses for highlights.
    • Fixed blatent stack overflow error in Readdcd.h.
    • Oops - fseek doesn't return an error when it tries to seek past the end of a file. Instead, get the eof position when the dcd is first opened, and do an ftell each time a timestep is read. This also simplifies error handling later because any EOF discovered while reading is a BADEOF.
    • DCD plugin now efficiently skips past frames with fseek instead of reading in the data and throwing it away. Factor of 8 speedup seen reading from local disk for 100,000 atom frames, though the benefit is often greater since the VM isn't being thrashed.
    • DCD plugin now updates the number of frames and number of timesteps written as it goes along, like NAMD does.
    • Eliminated some of the brain-dead code replication from dcd plugin.
    • The charmm "extra block" flag in dcd files can now be any nonzero number, instead of just 1. This change allows the dcd plugin to read water-heat.dcd in the bugfiles directory properly.
    • DCD plugin handles fixed atoms now.
    • DCD plugin reads unit cell info now.
    • Changed the unit cell member name to something a bit more descriptive.
    • VMD now reads unit cell information from file reader plugins that implement the recent extension to the timestep struct.
    • Added unit cell information to the timestep struct of file reader plugins. Reading of crystal records has been implemented for pdb-format file readers (pdb, webpdb, babel). New plugins cannot be used with older versions of VMD, although new versions of VMD can use the older plugin versions.
    • Eliminated silly hack for queueing pick events; this is now done more cleanly from the PickMode class.
    • Eliminated dead CmdLabelList code.
    • cranked version number
  • VMD 1.8 alpha 12 (5/31/2002)
    • Fixed the plugin build process so that ranlib gets run on the static plugin libraries on platforms where it matters, such as MacOS X. Other BSD-derived systems also typically need ranlib. On systems that do not require ranlib, "touch" is used instead. Win32 doesn't care either way at present.
    • Updated the plugin system so that only a single compile-time define has to be changed in order for the static plugins to be built with unique linkage and with proper header files. Uses macro substitutions in vmdplugin.h
    • Fixed plugin build scripts so they work on more platforms
    • DrawMolecule's MoleculeGraphics instance is now properly unregistered when the molecule is deleted.
    • Fixed bug reported by Jim in which labels weren't properly updated when the atoms to which they referred were not drawn.
    • Made color by index actually color by index, this should fix problems found in PR 212.
    • Added missing revision control and copyright headers to the plugin source files.
    • Cranked version number
  • VMD 1.8 alpha 11 (5/30/2002)
    • Improved comments in trimesh and tristrip routines, and got rid of an extra local variable
    • Cleaned up the OpenGL triangle strip rendering code a bit more, added comments, made it generally more readable to the uninitiated.
    • Implemented triangle strip rendering code for the file renderers.
    • Added some const tags and a const accessor to NameList and ResizeArray.
    • Added the ACTC build flag to the config options for several of our main developmental platforms, to get some testing and exposure to local users during the alpha period.
    • Plugin header files are now copied to the plugin install area.
    • Guard the inclusion of the ACTC headers with extern "C", since as originally distributed, it is normally compiled with a plain C compiler.
    • Added support for automatic triangle mesh stripification using the ACTC library. If ACTC initialization fails, we fall back to using regular triangle meshes. We still need to implement the default code for the file renderers so that triangle strips get rendered by ray tracers etc. Original implementation by Todd Furlong.
    • Added TJF patches to allow multiple CAVE devices at one and multiple grabbing devices in general.
    • Added TODO list to dcdplugin code.
    • Updated plugin build scripts with multiple platforms, fixed a concurrent compilation problem on IRIX by preventing the two IRIX builds from running at the same time.
    • Eliminated priority from the plugin API. Still need to implement some sort of mechanism to handle multiple plugin versions; for now we simply use the first one we find and warn when multiple versions are present.
    • Eliminated VMDApp methods for accessing particular plugin types. Callers now use the existing list_plugins() method and sort the plugins themselves. The Plugin subclasses provide a convenient way to do this; we don't need an additional layer of abstraction in VMDApp.
    • Defined a MOLFILE_CONVERTER_PLUGIN_TYPE to be used by the babel plugins. Babel plugins implement the same molfile interface as the other plugins but register as a different type. This will replace the "priority" field in the plugin API, which was put in just to deal with babel-like things. Priority can now be based soley on the version number.
    • Made "mol file reader" and "import graphics" #define's since all plugins of a given type have to register using the same identifier.
    • Made statically-linked plugins part of the build. VMD still checks for dynamically loadable plugins as before, but now will not replace plugins that have identical metadata. The logic for whether to use a dynamically loadable plugin still needs some work.
    • Fixed C++-style for construct copied into C code.
    • Added code for reading crystal records to pdb plugin; still not implemented since the API doesn't support unit cell information yet.
    • Removed Gromacs.[Ch] from the tree; recent bug fixes have already been incorporated into the plugin.
    • Cranked version number
  • VMD 1.8 alpha 10 (05/24/2002)
    • Cave and FreeVR both seem to work well enough to use now, so I'm marking this off as alpha 10, and am keeping a source dist as well.
    • Marked PR 74 (Cave bugs) as closed, now that 90% of the problems seem to be fixed in the current source tree. Now we just have to make sure we don't break it again :-)
    • Cause the CAVE and FreeVR display devices to NOT be allocated from shared memory, and made the allocation of the color table come from shared memory, and moved the color table initialization into the pre-fork() startup code, so that the child renderers have a color table to work with. Color changes are still not being propagated to the child renderers on the fly, but we're definitely getting closer now. This build works quite well in the CAVE!!!!
    • Fixed the rest of the const changes to the multmatrix/loadmatrix/load() routines.
    • Made VMDDisplayList::isOn a member of Displayable, and made the transformation matrix "mat" a member object of VMDDisplayList instead of storing it the linked list. I'm pretty sure we used to do these weird things because back in the day the displayables and display lists were stored separately in Scene, but we don't do that anymore so we can get rid of this layer of obfuscation and indirection.
    • Newer version of the display list caching code, eliminated the #ifdefs, and it now uses environment variables instead.
    • Displayable uses the new serial number method in the VMDApp class.
    • Added a static method which provides globally unique serial numbers which are used by display lists and the OpenGL caches.
    • Cranked version number
  • VMD 1.8 alpha 9 (05/23/2002)
    • IMD force arrows work again now.
    • Removed DCD reading code from the build but not from the tree. The plugin still needs to implement fixed atoms and reading of the unit cell size.
    • Removed CoorPDB from the tree, and ReadPDB from the build. ReadPDB implements crystal record parsing, which for some reason is not in the plugin (yet).
    • Eliminated ReadPSF.
    • Eliminated BabelConvert, as well as the hard-coded structure file enums and names.
    • Removed PARM and CRD code. The corresponding plugins contain the same functionality.
    • Removed dead Gromacs code. Gromacs.C has been removed from the build but not from the source tree; the last two revisions appear to contain bug fixes that may not have been incorporated into the plugin code.
    • Working towards removing built-in file loaders and replacing them with statically-linked plugins. Removed CoorFileData, which was a base class for doing file I/O with the built-in file loaders, and the enum of coordinate file types which were defined in that file. The old file menus FilesFormsObj and EditFormsObj depended on this enum list, so they have been removed as well.
    • Got rid of lots of old configurations that outside users don't need or which are no longer supported.
    • moved DRI config options file to OpenGL, since we're phasing out the old DRI config flag.
    • Eliminated the "DRI" configuration option, since it is pretty obvious that XFree 4.x DRI is now the dominant means by which people will get hardware acceleration on Linux, the old DRI code is now used in the "OPENGL" configuration option, so that linux configs look more like the other platforms now.
    • Made the Displayable::draw() and Displayable::child() methods const.
    • Updated the User's guide ug_text_ui.tex documentation, eliminated distracting text, and better example for getting rep info.
    • Added new ifdef'ed code for wholesale caching of molecular representations as OpenGL display lists.
    • eliminated old version of the dispcmds headers from before recent CAVE fixes.
    • Replaced hard coded magic return value numbers with symbolic constants that make the code a bit easier to read. Re-added missing copyright info, and improved formatting.
    • Fixed PR 211, "measure minmax" could give an incorrect answer if the first atom in a selection was a minimum or maximum element, the minmax loop was being run from index 1 rather than index 0, this bug has been in the code since VMD 1.6, possibly earlier releases as well.
    • Fixed PR 210, unintended fall-through in a series of if statements that would cause a "label delete" from TkCon to crash/exit VMD.
    • cranked version number
  • VMD 1.8 alpha 8 (05/20/2002)
    • Fixed the "graphics 0 delete 0" crashes Paul found.
    • Fixed PR 209
    • Updated MSVC project files.
    • All Displaybles are now children of a root Displayable in Scene. The root Displayable replaces all the Register/unRegister, ResizeArray, and scene transformation methods that used to be done in the various Scene classes. The deletedMolecule hack is no longer needed since DrawMolecules are child Displayables now.
    • Renamed GeometryMol::set_name() to geom_set_name to avoid collision with Displayable::set_name().
    • Fixed Geometry objects (labels). All label objects are now independent child displayables of GeometryList. Each label also registers with the molecule(s) it is interested in and receives a notification from each molecule when the molecule has changed its coordinates or orientation. Notification triggers a recalculation of the label's display list. GeometryList no longer handles drawing, only adding and deleting labels and managing their colors. Currently, each label recomputes its value and resets its display list once for each molecule it's monitoring (e.g., dihedrals get updated four times); it's hard to see how to avoid that since the labels don't know how many updates they'll receive in any given event loop, but the overhead should not be too excessive. The good news is that Scene no longer needs to traverse its list of Displayables in reverse order.
    • Eliminated the Geometry class, merging it into GeometryMol, since there was no other subclass of Geometry.
    • Added a default constructor to the ctxt struct eliminated some UMR warnings from Purify. I'm not sure the warnings were really valid but it never hurts to trust Purify.
    • Replaced the Tcl "plugin scandirectory" command with "plugin dlopen", "plugin update", and a Tcl script to handle processing of directories.
    • Added minimal support for Spaceballs as trackers (unix only). Only the tracker part works right now, no buttons. See docs for instructions on how to use it.
    • Changed the name of the namd binary format from "namd binary" to "namdbin"; spaces are annoying.
    • Eliminate two problems with the way displayables are drawn: 1) Multiple CAVE / FreeVR drawing processes were modifying the _needUpdate flag concurrently, which could have caused some problems. 2) PR 208 - Grischa's CPU utilization problem when a molecule's displayed state is toggled, now seems to be fixed.
    • Moved the VMDApp::VMDUpdate() sleep tweak after the draw call so that it doesn't increase latency between I/O polls and rendering.
    • Improved doxygenation of several header files. Cleaned up more of the header comments.
    • Fixed solvate so it doesn't try to delete the same water three times.
    • Added Paul to the commit email logs..
    • Added an always-on plugin option to the configure script and moved the plugin header files to the plugins module.
    • Replaced a JString with a char * since the JString was for some reason not copying the string, just the pointer.
    • Fixed the VMDApp::molecule_addfile command so that it doesn't insert coordinate frames into the molecule when another trajectory is still in progress. This bug would result in trajectory frames being loaded in the wrong order if several dcd files were loaded consecutively from a script.
    • Fixed incorrect use of Tcl_WrongNumArgs in the measure commands, and improved error checking and reporting.
    • Cranked rev of test versions.
  • VMD 1.8 alpha 7 (05/10/2002)
    • Resurrected "measure rgyr", which computes the radius of gyration of a selection. The code had been in there, it just wasn't connected to any Tcl commands.
    • Added exception handling routines to protect the rest of VMD from potential zoomseq startup failures. In truth, all of the modules should be protected against in a similar way. At present only the BioCoRE and Zoomseq code are now protected. Eventually this should be done for others as well, there must be a nice clean way to do it with less ugly code than I just wrote.
    • Occasionally zoomseq would fail to create its drawing canvases due to problems with lookup of the "darkgrey" or "grey" colors referenced in the code. Replacing the use named colors with hexadecimal color codes should permanently eliminate this problem. I only saw three problem places in the code in a quick scan, but there may be others lurking still. Will also change the vmdinit code so that a failed zoomseq startup doesn't yield overall VMD startup failure.
    • Fixes for measure fit, and general cleanup of measure. Appears to fix several longstanding problems with measure fit, including incorrect use of weights and incorrectly returning matrices with negative determinants fixes PRs 201, and 202.
    • Fixed a missing call to vmd_closedir() in the plugin manager.
    • Fixed a pretty bad memory leak in the trajectory reading code (plugin interface and DCD reader plugin).
    • Bypassed int32 name conflict in the namdbin plugin on AIX
    • Added AIX, T3E, and LINUX_AXP ports of the plugins (untested).
    • Updated the plugin makefiles to work for MacOS X, added a win32staticlibs target.
    • Added "measure hbonds" command and associated documentation. Renamed "measure bondsearch" to "measure contacts". The "measure hbonds" command find hydrogen bonds according to the same algorithm as the Hbonds rep, although it is more general in that it allows the user to specify donors and acceptors independently. It is an order of magnitude than the fastest Tcl implementation I was able to write using "measure contacts", so it seems a worthwhile addition to the meausure repertoire. "measure contacts" is still useful to allow the user to define their own h-bond criteria, or to find non-bonded atoms that are too close together (a common task in modeling).
    • Fixed bug PR 198 - Made the Tcl callback triggered by the completion of trajectory file I/O take place asynchronously, when the command queue is flushed, rather than at within the Molecule method, because callbacks could delete the molecule itself.
    • Updated the README file with current information.
    • Fixed bug PR 197 - the Animation::anim_update no longer tries to advance to a new frame when there are less than two frames present.
    • The writepdb atom selection method now requires a filename; it will not return a string when no filename is provided. Documentation is suitably updated.
    • Labels now get deleted when their molecules get deleted.
    • Made the Alt-Q (quit confirm) hotkey work when the Python text interpreter is active.
    • General improvements to the Python interface and documentation. Added a VMD module (VMD.py) that imports the binary modules defined by VMD, which both makes it easier to find them and prevents them from cluttering up the namespace, as would happen if they were imported into the toplevel. The VMD module defines a method for updating Tk; this is now done by calling this method rather than through the low-level C interface as it used to be done. Errors that occur during Python callbacks that are called every time through VMD's event loop are flagged and not called again.
    • Added a "measure bondsearch" command; very handy for finding lists of hydrogen bonds. Had to fix vmd_gridsearch so that the first index in the pair is always from the first list of flags.
    • Disable the update() methods in the Cave and FreeVR builds, as they replicate work done by the VR system.
    • Fixed the ordering of the representations in the GUIs so they match the ordering of enums, etc. The current code does not make any attempt to keep track of the ordering for itself, it apparently depends on the implicit numbering of enums, which is bad. We should change the GUI code so that when new reps are added, they pass in the Enum that they match up with, so that changing the oder in AtomRep.h doesn't break everything.
    • Added FreeVR as a default build flag for IRIX6 for now.
    • Eliminated the old non-CAVE-capable display commands for trimesh, wiremesh, etc. The new code eliminates the need for explicit constructors and destructors and packages all of the data into the VMDDisplayList allocated memory, which works correctly with the CAVE, since that is allocated from shared memory.
    • Misc cleanup of the Win32 joystick code.
    • Added the DynamicBonds representation into the docs initially, very simple explanation until we mature the implementation a bit more.
    • Fixed leftover scaffolding from testing the dynamic bonds code..
    • Re-ordered all of the representations in the GUI so that they are roughly grouped together by the representation type.
    • Added new dynamic bonds rep to the the AtomRep data array
    • Added new dynamically updating distance-based bonds representation
    • Eliminated workaround code in FreeVRDisplayDevice, must be due to the initial window specification or something similar.
    • Moved biocore initialization after the plugin scan and instantiation so that BioCoRE can use plugin-based file loaders.
    • can't remember what the historical reason to prevent VMD from being built with both the CAVE and FreeVR libraries is, it seems to work fine now.
    • Added new code into the CAVE and FreeVR scenes so they can copy light positions and settings into the child renderer's via shared memory. Until we store light state in the VMDDisplayList class itself, this is probably the only decent way to accomplish this. This mechanism copies the light state every frame, but not per displayable, so its a good first implementation.
    • Fixed missing normal() method in the FreeVR subclass, which prevents the normal OpenGLRenderer::normal() method from trashing the projection matrices for each of the walls. Added in a small hack to get around a lighting and materials problem when running in FreeVR, and got FreeVR minimally running in its simulator now.
    • Cleaned up Cave display device code, added comments etc.
    • Added info to the DisplayDevice class to store the number of child rendering processes, cleaned up the CAVE and FreeVR scene classes so they are much easier to read, and share the same core drawing code. Cleaned up VMDApp quite a bit as well.
    • Added method and member variable to return the number of slave rendering processes.
    • Updated the FreeVR code to match the current implementation of the CAVE code. The FreeVR code now compiles and wants to run, but there are OpenGL state issues, the simulator window looks black presently, though the child renderer process is running along and seems to be making good OpenGL calls. More testing is needed here.
    • Eliminated global functions for determining cave configuration. This sort of stuff ought to be part of the DisplayDevice class anyway.
    • Eliminated the old "draw_flags" code that used to be used to synchronize the VMD application process with all of the CAVE and FreeVR slave drawing processes via shared memory. The new code uses POSIX threads routines to implement a barrier syncrhonization primitive in shared memory, and it actually works on the new hardware.
    • Updated the VMDDisplayList class eliminating the old non-reentrant first/next methods completely, and renaming the new ones in their place.
    • Added comments to explain the odd implementation of the way the CAVE code does its rendering. The code should be changed so that both the regular code and the CAVE code do their drawing the same way. In order to do this, the CaveScene::draw method needs to know whether the current process is a master or slave, so just a little tricky bit there. Should be doable though.
    • Make all of the renderer() methods take a const VMDDisplayList *, which will help prevent reentrancy issues with unsafe methods or similar operations.
    • Fixed several reentrancy problems in the VMDDisplayList class, though there are still a few remaining reentrancy bugs left to fix out in the rest of the code still.
    • Added the barrier sync code into the CaveScene, hoping to replace the old draw_flags code with something that actually works now. The barrier sync code does seem to work across processes, however the correct count of processes to sync with seems to be mismatched when running in the real CAVE. In the CAVE simulator, we run 1 display process and one application process, so we have two processes using the barrier, but in the CAVE we're having 4 walls and a couple other processes, though its not clear how many need to be in the same barrier sync group. In any case, the new code can be disabled by defining USEDRAWFLAGS at compile time, and it will revert to the old code.
    • Made changes to the barrier synchronization code so that it can finally be used to replace the old draw_flags in the CAVE code. The code has been tested and seems to work fine in the shared memory arena by enabling the PTHREAD_PROCESS_SHARED attributes on the mutexes and condition variables.
    • added PLUGINDIR comment in top level make output for plugin builds
    • Fixed a cut 'n paste error.
    • Fixed the mol addrep command so it doesn't bomb out when given no arguments, and brought its behavior into line with what the documentation and the behavior of modrep and delrep would suggest: it now operates on one molecule only. It also returns an error when things go wrong instead of failing silently.
    • Moved the ReadPARM code into an anonymous namespace to give it internal linkage.
    • Moved the Gromacs code into the header file and made it statically linked.
    • Made vmddir functions declared static.
    • Made all dcd library functions static and moved them into the header file.
    • Moved all readpdb.c functions into readpdb.h and made them static. We need to do this all our library functions to avoid export any symbols except the vmdplugin_ API functions. This appears to fix the problem with psfgen on 64-bit Irix, which was traced to a function in readpdb clobbering an identically-named function in psfgen.
    • Fixed mismatched delete in Molecule.C.
    • Make all Tru64 compiles dynamically linked, since we require this in order for plugins to work.
    • Psfgen_count is now stored as a malloc'ed int *, rather than casted from ClientData to int. It's unfortunate that the Tcl docs say ClientData is a word, while the source code says that it's a void * or int *.
    • Fixed 64-bit IRIX optimization flags, and cranked configure script version to 1.8a7
    • Added semi-automated build scripts to the psfgen plugin tree.
  • VMD 1.8 alpha 6 (04/23/2002)
    • Updated the build system to work better with plugins etc.
    • Added missing void arguments to _create() calls in psfgen plugin.
    • fixed mis-specified void argument to memarena_create() in psfgen sources.
    • Fixed the plugin HP-UX 11.x build flags for aCC, got rid of bad +a1 flag copied in by mistake from wrong branch of vmd's configure script.
    • fix incorrect case/break usage in pdbplugin.c
    • fix incorrect break/case syntax in webpdbplugin.c
    • Added part of biocore logging code to plugins build, but need to make this more robust before we start doing that, since not all users will have biocore etc.
    • Eliminated dead code.
    • Colors for atom name and atom type are now assigned based on the first non-numeric character, rather than simply the first character. This makes atoms named 1H3, for example, be colored the same way as othe hydrogen atoms (white), rather than green or some other color. PDB files from the RCSB often have atom names numbers as the first character, but the number carries no information as to how the atom should be colored.
    • Updated the docs for the new return behavior of load, pdbload, and urlload.
    • Made the Tcl commands "mol load", "mol pdbload", and "mol urlload" return the molid of the newly created molecule, or else return an error. Previous behavior was to return nothing and ignore all errors.
    • Fixed the default parameters for the Python molecule.delframe method.
    • Fixed Python molecule.delframe method so it works with the VMDApp API.
    • Added the waitfor option to the Python molecule.read and molecule.write commands. Also made molecule.load return the new molid, and molecule.read and .write return the number of frames processed.
    • Added documentation for the new features/behaviors of the "mol load" and "animate read/write" Tcl commands.
    • Added a waitfor option to the Tcl animate read/write commands to make them load the specified number of frames (or "all") before returning. Also made these commands return the number of frames loaded or saved.
    • Include file cleanup, eliminated unnecessary include files.
    • Misc cleanup to cave related source files, and corrected a bad CVS time stamp caused by one of the local SGI systems I did some commits on. The bad timestamp causes builds to fail miserably on compilers that do fancy template instantiation reuse tricks. Also improved the headers and comments to be more doxygen friendly.
    • Changed the volume slice rep so it will save its data in the shared memory arena used by the Cave instead of using plain new/delete.
    • Added optional waitfor parameter to VMDApp::molecule_savetrajectory that functions like the corresponding parameter in molecule_addfile. Text commands load one frame before returning, GUI commands return immediately. Also removed message displaying number of frames loaded; it's potentially confusing and better not there until we can word it better.
    • First attempt to make the new vertex array-based TriMesh and WireMesh display primitives work with the shared memory arena used by the Cave. Will want to go back and remove the #if 0 blocks of old code when we're sure that the new code doesn't have any weird memory alignment problems etc and works perfectly on all platforms.
    • Added a new parameter to molecule_addfile to specify how many timesteps to load before returning; if negative, load all frames before returning. The "mol load" Tcl command will now load all coordinate frames before returning. Coordinate files loaded from the GUI will continue to load asynchronously as before. The "animate read" command will load one frame before returning; a new option will be added to this command to allow the user to specify how many frames to load before returning.
    • Eliminated CmdMolNew. Regular file loading functionality had already been taken up by the VMDApp methods. The Windows-specific pdbload code is gone, so we now depend on a webpdb plugin for this functionality. Raster3D and EDM file support has been retained by special-case hacks in VMDApp::molcule_load. The "mol urlload command" was moved to cmd_mol, which can call Tcl directly without need of URLLoadEvent, so the URLLoadEvent class was eliminated. The "mol graphics" command is also handled by cmd_mol, which calls a VMDApp method designed for this purpose.
    • Changed Python molecule.load command to use the VMDApp API.
    • The Tcl "mol load" command now uses the VMDApp API, which has code to fall back on built-in file loaders built in, rather than trying to use fallback methods for itself.
    • fixed the projection matrix caching code so that it works right in the CAVE.
    • Reverted the CaveScene code to the previous implementation, which would have worked, except that the CaveResizeArray didn't work when it wasn't written as a standalone template.
    • Replaced CmdMolNew with VMDApp methods in startup code.
    • Made the old Files form use the new VMDApp API instead of CmdMolNew.
    • Override the normal() method in CaveDisplayDevice so it doesn't mess with the view projection given to us by the CAVE library.
    • make it possible for the CAVE code to override the set_persp() routine
    • Hacked in an extra display update to the "mol load" command to make it load one coordinate frame before returning, just as was done for the animate read/write commands. We need a better way of doing this, but at least solvate works again now.
    • Fixed broken trajectory reading logic; it wasn't loading the correct range of frames when the initial and final frames were specified.
    • Made a default implementation of the cone primitive which can be overrided by subclasses, this eliminates several duplicated polygonal cone implementations and provides an implementation for the renderers that lacked their own.
    • Gave all of the file renderers a default implementation of the square() primitive based on two triangles with correct winding order, though they can override it with a renderer-specific routine.
    • Made the animate read/write functions do one display update before returning so that single frames can be read/written in a Tcl loop without running out of file descriptors. This returns us to the behavior of VMD 1.7.1, but of course one could still run out of file descriptors if the files have more than one frame. We should make read/write return an error when the file cannot be opened.
    • Updated the build script so that it waits until all of the make jobs have completed before exiting. If an ssh session hangs or requires a password, this will wait forever, however that's a visually obvious problem when it occurs.
    • Fixed broken parsing of animate read Tcl function that resulted in VMD going into an infinite loop when "top" was the last word on the line.
    • Re-worked the plugin build system.
    • The IRIX builds behave badly with the GL_RESCALE_NORMAL feature enabled, they look washed out and the rendered images are obviously wrong. It could be that this OpenGL feature works very differently on SGI, Sun, NVidia etc. The Linux versions seem to work, so it could just be that IRIX is broken on this one. Still determining which is the case.
  • VMD 1.8 alpha 5 (04/09/2002)
    • Revved solvate to version 1.2, and replace its resetpsf command with the new psfgen psfcontext command. Using psfcontext is safer because it ensures that solvate is using its own topology files to generate the waters.
    • Fixed incorrect psfgen install path.
    • Fixed psfgen build so windows stuff is included only on Win32 builds. Also tried to make build.csh a bit more robust.
    • Refactored definitions in Make-arch a bit to make them more robust for 64-bit builds; added psfgen to the plugin tree as a shared library only (no statically-linked binaries are built at this time); parallelized the build script ;-)
    • Updated the vmdmovie plugin, migrated it to the plugin build and distribution area.
    • Eliminated unused variables in the cpk rep.
    • Create "make distrib" target to replace distrib.sh, so that plugin subdirectories can customize how they get installed in the plugin tree.
    • Atom selection macros must now be parsable before being added. This avoids syntax errors in the evaluation stage (which are difficult for VMD to handle) and also prevents non-terminating parse trees from being constructed.
    • VMD now prevents runaway recursion caused by macros that contain themselves by keeping a state variable in SymbolTable that gets incremented within each nested evaluation of a singleword or macro.
    • Eliminated dead code in the parsetree classes.
    • Renamed pcre functions so they don't conflict with libpython2.0, and eliminated the ones we don't use. We can now compile pcre.c regardless of whether Python is present or not.
    • Implemented a framework for linking plugins statically to the VMD executable and loading them (optionally) at startup. We can't actually do this yet for all the plugins because many symbols in the plugins are also in the VMD binary, but once we have the plugins statically linked there will be no reason to keep the existing VMD files anyway.
    • Added a REGISTER_ALL macro for statically-linked plugins.
    • Plugins are now built as static libraries as well as shared libraries. One static library is built for each plugin type, along with an auto-generated header file that contains entries for all defined plugin API's. Since the init and fini functions need not be defined by the plugin, the header also includes a macro that calls all defined init and fini functions. All targets except Win32 (but including MacOSX!) now build target now build the static libraries; Mac only builds the static libraries since we haven't figured out the magic way of building them with gcc yet.
    • Made BaseMolecule, Matrix4, OpenGLRenderer, VMDDisplayList, ResizeArray, Spaceball, DisplayDevice and DrawMolItem headers more doxygen-friendly. Eliminated unused OpenGLRenderer member variables.
    • Significant cleanup of the tube and spline routines.
    • General cleanup of draw_spline_curve(), make_spline_Q_matrix(), etc.
    • Rewrote make_connection() making it more efficient again since its used by tons of reps presently.
    • Added comments where we should rewrite the pickpoint insertions to use an array construct rather than lots of individual pick points.
    • Make the picking code more readable, eliminate tabs everywhere..
    • Eliminated unused PICKBOX and PICKLINE picking primitives that were never actually implemented, used, or referenced.
    • Created Python version of the atomselect macro commands; also added index entries for macros in the User's Guide.
    • renamed variables, eliminated some small loops for speed, and changed the lines, cpk/licorice, and bonds code use the same layout for their midpoint calculations.
    • eliminated unnecessary tests inside innermost loop of cpk/licorice code, improved comments some more.
    • further improvements to the readability and organization of the cpk/licorice code. May be able to increase speed again with a bit of work.
    • eliminate some unused variables, clean up the licorice/cpk code a bit more.
    • major cleanup of the bonds rep code, should also improve performance for animations.
    • Added atomselect macro command, permitting the definition of new atom selection singlewords by users. Existing singlewords (like protein or water) cannot be redefined or deleted, but we should define as many of them through macros as we can since there would be no loss in performance for many of them, which are already in effect defined as macros already. This would give users more control over atom selection definitions.
    • Eliminated duplicated code and logic for CPK and Licorice, the same code now handles both.
    • Fixed all misspellings of the word frustum...
    • eliminated unused whereis_eye() method
    • more perspective and frustum setup comments.
    • add comments on view frustum calculations to make this easier to change to allow us to vary the strength of the perspective effect.
    • eliminated unused quadric.
    • eliminate separate methods for dotted and solid VDW spheres, cleaned up more of the code. Added comments where we should consider using sphere arrays, sorted by radius and colors to eliminate on-the-fly rescaling of displayed spheres.
    • misc cleanup of ribbons code, still needs help, code is hard to read in places due to the use of negative array indexing and other bad practices used in these routines. Particularly nasty sections are now marked for rewriting
    • Rid ribbons code of "for (int xxx" constructs, since I'm working on rearranging loops and cleaning up some of the potentially salvagable pieces of ribbons code. Too bad C++ compilers don't behave consistently there.
    • Put renormalization code within its own block to please C++ compilers that don't understand how for-loop variables are scoped.
    • reversed the normal calculation loop arrangement for better memory coherency, and added pre-normalization to the ribbons code so that the ribbons geometry works correctly when we have GL_RESCALE_NORMAL turned on in the rest of the code.
    • Added built-in Tachyon rendering as an optional feature, also made a few small improvements to the startup/cleanup code in the constructor and destructors in LibTachyonDisplayDevice().
    • Added the built-in Tachyon rendering feature as a default in the Linux and Solaris builds, for now. Further testing will be needed before this is mature enough to ship in a final version.
    • Added basic directly-linked Tachyon scene rendering capability. Still needs testing and debugging, but implements the same capabilities as the Tachyon file export code does. Runs more than twice as fast even on simple scenes.
    • Significantly reduce the number and frequency of OpenGL matrix state queries, which are only needed for the text display code.
    • Use the materialtag field in the display list to aggressively cache material settings and greatly reduce OpenGL state changes related to materials and lights.
    • Added "plugin info " for obtaining information about a specified plugin. Data is returned in an array of the given name; an easy way to print out the information in the array is with the parray command.
    • Added the Tcl command "plugin list [], which returns a list of type/name pairs for the given plugin type. If type is not specified, all plugins are returned.
    • fix incorrect type for myXsize in POV3 writer
    • Make POV-Ray export use long int res values instead of int.
    • fix type mismatch on accept() length parameter, for Linux/Alpha
    • fix incorrect prototype for xtc_receiveints()
    • add typecasts for float->unsigned char conversions
    • fix missing include of string.h for sterror() on HPUX, for vmddlopen.c
    • cleanup, added brief message for plugin directory scan results.
    • Eliminated chatty plugin messages, we need an API for enumerating and managing plugins, which would take care of this need as well.
    • Fix OpenGL extension query for GL_RESCALE_NORMAL_EXT
    • Fix usage of assert() to please 64-bit compilers, assert() takes integer arguments, not pointers. Assuming that the compiler will deal with this is bad practice since the size of the pointer and the integer types are not necessarily the same.
    • Updated MSVC installers, projects, etc.
  • VMD 1.8 alpha 4 (03/26/2002)
    • Created API's for controlling animation settings, eliminating MolAction in the process. The API's are somewhat unsatisfactory from my point of view because they operate on all active molecules, rather than on a specified molecule, but there's no Tcl command we can log for a per-molecule animation setting. In any case, we get rid of the multiple layers of indirection and hiding of policy that was present in the old code: everything is explicit now.
    • Added import graphics plugins to the list of directories scanned at startup. Also made .so the filename extension scanned by all platforms, since that's the way we build the plugins, including windows.
    • Added a WIN32 build target, with suitable generalizations to the plugin Makefiles. Also made the molfile Makefile more robust by replacing the $? macro, which expands to only the most recently modified dependency, with explicit lists of object files.
    • Build system now uses a top-level Makefile and build script to build all plugin types for all platforms.
    • The "mol load" Tcl command now checks for plugins before falling back to built-in methods. save_state works for plugins as it should.
    • Create new "import graphics" plugin type to support file types like Grasp where we just load graphics primitives. Added a File->Import item to the main menu, and created a new widget for importing graphics. Had to fix const correctness in DrawMolecule and MoleculeGraphics to accommodate the plugin. We currently have only a grasp plugin implemented, and it's a bit of a step backward because there's no way to set the color except through text commands (and you'd never know which text commands unless you read the plugin code). However, I think we can integrate these graphics plugins with the Graphics menu to give the users even more control than what they used to have (it used to be that you could only set the color of a Grasp molecule before it was loaded; after that the color was immutable).
    • Created "import graphics" plugin type, with grasp as its sole current member.
    • Updates to psfgen: The new version incorporates Jim's new code for locally enhanced sampling, mutations, and extra warnings for certain cases. I've also added a 64-bit IRIX6 version to the build.
    • Force free()'d pointers to NULL to prevent double frees, and force seg faults in any potential misuses after the memory is free()'d.
    • Fixed mouse rocking by removing some changes introduced in version 1.109 for the pick callback stuff. I don't really know how to test the callbacks so this might break them, but since mouse rocking used to work this way I'll back out the changes and let Paul figure out if pick callbacks still work.
    • Make more of the Tcl/Python interfaces use VMDApp where possible.
    • Protect against ridiculous maxdist values in the HBonds representation. This got broken when grid search began being used to accelerate the bond determination. The code now prevents maxdist values smaller than 0.1 from having any effect, but the bondsearch code should clearly avoid crashing under adverse circumstances...
    • Delete the molgraphics item outside of the for loop, since there's only one per molecule. This was causing VMD to crash on exit and/or when molecules were deleted.
    • Fixed missing state change code for representations that sometimes draw as lines, and were incorrectly inheriting their line drawing state from preceding representations.
    • Added first multitexturing tests
    • Graphics primitives may now be added to any molecule, not just a "graphics" molecule. The draw command was altered to add graphics primitives to the top molecule, rather than the first "graphics" molecule. save_state saves graphics primitives from every molecule, not just "graphics" molecules. This change makes it a little bit harder for now to delete graphics primitives since you can't just delete the associated graphics molecule; we might eventually want a full-fledged GUI for dealing with these primitives so I'll leave that issue alone for now. Internally, MoleculeGraphics is now derived from Displayable instead of Molecule and is handled entirely by a parent DrawMolecule object, which duplicates the MoleculeGraphics API and forwards the methods calls. Docs are suitably updated (though that section of the docs could certainly stand some revision).
    • Improved type consistency and added typecasts where appropriate to eliminate compiler warnings and improve performance.
    • Updated the MSVC builds adding the new DrawMolItemRibbons source file. Cleaned up some of the recent code to make MSVC happy.
    • When 2-D or 3-D texturing is enabled, VMD will calculate the specular contribution of the light sources separately from the per-vertex ambient/diffuse contributions of the lights. The separate specular value is then added in after texturing is completed, yielding a much nicer looking image.
    • Eliminated O(N^2) behavior in webpdb plugin caused by repeated strlen()'s of the entire file.
    • Added a Project switching menu at the top of the pub/synch window. Added the function Biocore_getProjectList() to the API to get a list of project ids and names. TODO: Modify this code to incorporate the "Project" class. Also added a preliminary warning if the user is publishing a local file; to be modified.
    • Recalculating secondary structure now correctly forces recalculation of colors if the rep is colored by structure.
    • Fixed save_state so it shows existing .vmd files.
    • Added volumetric data method for Python in the molecule module. The syntax is: add_volumetric(molid, name, origin, xaxis, yaxis, zaxis, xsize, ysize, zsize, data) Keyword arguments can also be used as listed here. Axes must be specified as tuples, while the data must be a list. Also, VMDApp now logs a MOL_VOLUME command so that the (new) Graphics menu works correctly.
    • Made further improvements to the new Doxygen programmer info.
    • Added first prototype code for general purpose volume texturing and contouring. The contouring code could be considered ready-to-go with just a little more parameterization of its functionality. The volume texturing code has a couple of issues that will still need resolution before we can use it with full quality. Since contouring is probably most useful as an additional or separate rendering property from the base color, we can use the GL_MODULATE texturing mode to apply the contour lines on anything we like. The only tricky part is that the most sensible default color for these lines would be black, though that may not be sufficient in all cases. A more robust implementation would allow a wider diversity of colorings, which may be problematic in that GL_MODULATE can only eliminate colors, not add colors that aren't already present in the base material below the texture. Conversely, GL_REPLACE has the problem that it eliminates all of the lighting and shading work completely. The best solution long-term might involve multitexturing or multi-pass rendering. The volume texturing functionality shares some of the issues with the choice of either GL_REPLACE or GL_MODULATE, but its trickier since we would color the entire surface with the volume texture, so we either have to force the base geometry color to be "white" and use GL_MODULATE, or we would have to give up shading, and use GL_REPLACE. For an initial implementation, GL_REPLACE is probably sufficient. The GL_MODULATE solution is trickier and requires re-architecting how materials and colors interact (again), but its probably worth it when we have the time to attack this. The last tricky bit for volume texturing is making it work correctly for non-orthogonal volumetric data. In the case of the "VolumeSlice" representation, we have been able to avoid this problem by manually generating texture coordinates. In the general case, if we cannot set the S/T/R direction vectors with non-orthogonal coordinates, then we may have much more limited functionality. This remains to be tested however.
    • OpenGL renderer now caches more state in-between calls, so it doesn't blindly reset state that it doesn't have to.
    • Eliminate as many unnecessary state change operations as possible in the rendering of each displayable, starting out by working to cut back material state change frequency.
    • Started reorganizing the OpenGL renderer material handling code.
    • Added comment on the Tcl interface for loading via plugins etc, since it currently isn't complete.
    • Updated web pages.
  • VMD 1.8 alpha 3 (02/21/2002)
    • First attempt at making source comments work with the doxygen system. Seems like this can be done in a non-intrusive way for the most part. The changes are generally small, and the descriptions can be very beneficial to a new reader of the code. The process of documenting the major classes will also help us find dead code, I've already found a fair amount of crusty old code left over from the original GL-based versions of VMD that we could eliminate with a small amount of work.
    • some reorganization before changing how we deal with per-rep state changes.
    • get rid of name collision with member variables, make it more obvious to read that these are very very temporary line state variables.. (WIREGL code branch)
    • Use GL_RESCALE_NORMAL when possible.
    • Improvements to the Mouse pulldown menu. Made each submenu turn the other submenu items off when something gets picked, so that only one item in any submenu can be on. Added checkboxes to the root of each of the submenus which indicate whether the submenu contains a checked item. Removed redundant words in the submenu items.
    • Fixed logging of pick info to console; recent changes to Inform broke it.
    • File reader plugins no longer read in coordinates along with structure; coordinates are read only when timesteps are read. VMD now reads beta and occupancy from coordinate files when supported; this is to support the important case of a psf/pdb combination where the occupancy and beta values come from the PDB. Also cleaned up some error and info messages.
    • Cleanup of file reading/writing code in preparation for handling occupancy and b-factor when pdb's are loaded as coordinate files. Also fixed a memory leak that would have occurred when loading trajectories with a nonzero stride.
    • Fixed atom selections for float-valued keywords like occupancy or x; the old code failed when the keyword value was zero.
    • Made the Add button in the file loader menu look a little nicer.
    • After creating a new rep, the new rep is now selected.
    • Fixed molrep_delete: was using molid instead of molecule index, just like the addrep bug.
    • Force saving fixes. This should reduce the memory usage of non-interactive Timesteps by 50% (back to what it was before it got broken).
  • VMD 1.8 alpha 2 (02/14/2002)
    • Fixed molecule_addrep command - was passing molid instead of molecule index to MoleculeList.
    • First stab at making the pulldown menu for setting mouse mode suck less. I think it's actually correct now, in that when you select a radio button it sets the correct mode, and when you select a mode by some other means the corresponding radio button is set. We should still find a way to unset the radio buttons that aren't supposed to be set.
    • Significant reorganization of the ribbons code. Split the main routine into three smaller parts which do the proteins, nucleic acids, and the sugar/base plates as three separate cases. This will allow us to replace and/or augment them one at a time in a more controlled fashion. Also removed all of the error message code from the internal loops. Error messages are now communicated by return codes ORed together, and these are then printed exactly once, rather than filling a user's screen with warnings for one ribbon on a large structure with abnormal atom naming. This should make the inner loops tighter and should improve the behavior of VMD if it bombs on a large structure. Since the old errors did not indicate anything specific other than the type of error, we are not sacrificing any information with the new scheme. While reading this newly reorganized code again, it is clear that several significant performance optimizations can be made even to pieces of code we may ultimately wish to retain, especially in making more efficient graphical representations of the same fundamental geometry. The sugar/base drawing code could be trivially taught to use triangle fans and could also use interpolated normals instead of flat triangles.
    • Reorganized the ribbon drawing code into a new file since it is about to get redesigned and have parts replaced/added, etc. Some of the spline basis generation and interpolation functions have now been moved into the utilities.h and are marked for inlining. The spline basis array is now a member variable of DrawMolItem instead of a global variable, the spline basis is now initialized as part of the constructor, and if we wanted to, we can now tweak the spline basis dynamically, per-rep, so that users can have it be more or less curvy and in theory, the user could even change which type of spline basis is being used, if I code up a couple others. For now, we continue to use Catmull-Rom with a slope of 1.25, until I have checked to make sure that the number of points required to prime and drain the spline at the beginning and end are the same for C-R, B-splines, etc. If they are, then I may go ahead and implement the other spline bases and play with them. The new code still mirrors the old code's behavior at this time. When I split out the other chunks of "ribbon" code for the nucleic acids and the plates for the sugars and bases, then I'll start thinking about whether we want to add in more user control of this rep's display features. When I implement new/alternate code for the main protein helical ribbon trace, I'll then be able to re-use the code for drawing nucleic and sugar/base plates. We could also use a new DispCmd for Triangle fans here, it might be a nice performance improvement for people rendering DNA for example. Or, we could just use a vertex array for all of those.
    • Cleaned up the ribbon drawing code, still needs a bit of testing to make sure I didn't break anything, but should be good to go. Also cleaned up the code itself so it is much more readable. I will be breaking up the ribbon code into several pieces soon.
    • Don't clear the filename input fields just because the user changed the selected file type. In the case of secondary files, we want the displayed secondary file type to match the highlighted file, so deselect any highlighted file in the list when the user clicks on a file type.
    • Usability improvements to the file loader. Added an "Add <-" button on Jim's suggestion, since users need a button to add a file to the file list, they can't be expected to know that they have to press return. Created a popup menu for the secondary file list for removing files and setting frame ranges. The popup menu has the nice property of selecting the item under the mouse and raising the menu on the same mouse click.
    • Small fix to tracker pick highlighting - it was not being turned off correctly.
    • Position the popup in the Main menu so that the first item is under the mouse; this way the popup cannot go off the top of the screen.
    • As per Jim's suggestion, change Frame to Frames in the Main window.
    • Installed alpha 1 on local machines.
  • VMD 1.8 alpha 1 (02/11/2002)
    • The big name change: All the fltk* menus (fltkmain, fltkfiles, fltksave, fltkgraphics) lose their fltk prefix. main, files, and graphics have "old" prepended to their name.
    • Fixed ramaplot to not use deprecated molinfo source keyword.
    • Put molinfo source keyword back in and added warning message.
    • Zoomseq: Added checks for truecolor visual, degrades to default visual if no truecolor, die gracefully if can't get any qindow created. Also made changed a use of molinfo from 'source' (now deprecated) to 'filetype'.
    • Eliminated the molinfo source keyword and the underlying Molecule::str_source method. We now check to see if a molecule has user-defined graphics by looking at the filetype option, which is "graphics" for graphics molecules.
    • Eliminated more needless str_source calls. Molecule initializes its secondary filename to "" instead of NULL.
    • The molinfo filetype option now returns "graphics" for Graphics molecules, instead of an empty string.
    • Eliminated the undocumented and now unusable molinfo remote option.
    • Added "-p" flag to mkdir, which will cause it to make any missing intermediate directories on its way to making a VMD target directory. The behavior of this flag is dependent on the umask, but this is still preferable to the default behavior of failing if intermediate directories are missing.
    • Eliminated IMD_NEW remnants.
    • Added ability to rename molecules, using either Tcl "mol rename", Python "molecule.rename", or the right-click popup menu in the fltkmain menu. A new color entry in the Molecule category is created for the new molecule name with the same default color as the original molecule name. save_state also restores the new molecule name, with some changes to the "molinfo name" and "molinfo filename" commands. The molinfo changes make Graphics molecules behave more consistently with regular molecules and do not break compability with save_state files created with older versions of VMD.
    • Made vertex arrays for lines the default when OpenGL 1.1 is available.
    • Fixed a bug in graphics.cylinder that caused radius to be ignored; a variable of the wrong type was being passed to PyArgParseXXX.
    • Added table to explain single-letter secondary structure codes. It has the same text as the table that appears in the form's Help menu.
    • Changed HP compiler to aCC, and updated some compile flags.
    • New multi-platform plugin makefiles.
    • Removed the mask interface we had been using to prevent Fltk updates while the mouse was in a click-drag operation. Added ability to turn any UIObject on or off, and made inactive UIObjects no longer check for events. At some point we will also want to have inactive UIObjects no longer take receive act_on_command calls, but this is not implemented yet. All UIObjects are off by default, but VMD turns everything on at startup except the menus.
    • Revised the checks to see if user is on Windows.
    • Made the fltkgraphics menu initialize its choosers and rep controls at startup.
    • Made _needRedraw public so that FltkOpenGLDisplayDevice can work.
    • Changed FileInfo to TrajFileInfo to prevent conflict with MacOSX system include files.
    • Extended the atom selection input to take up the space where the Build... button used to be, and fixed the tabs so that neither the rep controls nor the selection builder stretch when the window resizes.
    • Made the SelectionBuilder into an Fl_Group and incorporated it into the fltkgraphics widget as a tabbed group alongside the regular draw style controls. Very little was changed except for placement of the controls; the builder itself is still a self-contained class. Also added some necessary checks on input for a few VMDApp::molrep_* methods so they don't bomb when passed a negative rep index.
    • Change the default behavior of the write_header() and write_trailer() methods so that subclasses that don't need or otherwise override these will get no extra header/trailer info.
    • typecast the GL_CLIP_PLANE0 + i to GLenum explicitly, to get rid of compiler errors.
    • Made changes to the clipping planes force a redraw of the affected rep.
    • Make the clip plane structs readable by the renderer (speed) for now, and added the basic code to enable clipping planes in the OpenGL renderer. The OpenGL renderer code also converts the clipping plane description from the VMD point+normal plane equation to the OpenGL normal+distance plane equation, though it has not been tested yet :-) The code assumes that the normal vectors are in fact normalized, and does not do any checking.
    • Added clipping planes to the Displayable class, and added Tcl commands to manipulate and query the clipping planes of individual reps.
    • Fixed addfile so it accepts -1 as the last frame.
    • Significant improvements to Win32 cursor handling, appears correct now in all of the test cases I was able to come up with so far. Also added the basic drag and drop code into the message handling loop, though we do not act on the drop requests yet, we just print an information message indicating that we're ignoring it. Also, the drag and drop code does not work correctly when multiple files are dropped, though it should, this appears to be some kind of compiler bug.
    • Moved ReadFile and WriteFile functionality that was still in CmdAnimate into the corresponding VMDApp methods. Extended addfile and savetrajectory to use the built-in file loaders as a fallback if no plugin is found.
    • Eliminated CmdAnimReadFileDelete. This was in principle used only for Babel, when Babel produced multiple output files, but in fact it was never even used for that because Babel doesn't produce multiple files when converting to pdb format (maybe it used to).
    • Added molecule_deleteframes for VMDApp for deleting timesteps.
    • Fixed ints that should be GLint.
    • Added webpdb plugin for downloading PDB's from the RCSB. Requires the Tcl http library to be present in the system.
    • The atomselect writepdb function now uses a plugin to write the pdb file instead of the built-in file writers.
    • Added plugin support for reading Gromacs xtc files. Still untested because I have no xtc files, but I'm just using Dave Norris' Gromacs code so it _should_ work.
    • Added plugin support for writing crd and crdbox files.
    • Fixed bug in fltkgraphics menu in which colorID wasn't updated properly, or removed when a rep was selected in which colorID was not the coloring method.
    • Small changes to make the highlight disappear when using a tool selection.
    • The new load molecule menu ("fltkfiles") now supports loading coordinate files into existing molecules, in addition to loading new molecules.
    • The selection builder now updates its keyword lists when you change molecules in the fltkgraphics menu; it was updating its molecule name but not the values for the keywords.
    • Added the Spring Tool.
    • Added a help button to fltkmain.
    • Updates to the new main menu: Edit->Graphics now brings up the new fltkgraphics menu; made the menus lower, then raise, so they are always brought to the front when selected; eliminated Edit->Files; renamed Display->Camera to Display->Settings.
    • Can now specify a custom title for the frame selector.
    • Created new Save Trajectory menu. All the functionality of the old Edit form has now been replaced by new menus, and file reader plugins can be load new molecules and load and save trajectories.
    • Added an entry to the popup menu in the fltkmain menu for deleting frames from a molecule. Frames are selected using the frame_selector utility function.
    • The fltkfiles menu now has a button that brings up a modal dialog for selecting which frames to load from each secondary file. The dialog is implemented as a simple function, much like the fl_file_chooser function. Frames selected in the dialog are remembered between subsequent calls to the frame selector. The frame selector itself is similar to the Edit form, with counters that wrap around when the max frame is known.
    • The pdbload command now uses the ftp module from Tcllib if present, otherwise it falls back on our old methods.
    • Added in a new NAMD restart file reader plugin, though still untested.
    • Put in stub dlopen() code for MacOS-X builds for now, and cleaned up the ifdef chain there.
    • Renderman export code improvements donated by Grischa R. Meyer. The orthographic display mode appears to work well now, and the perspective mode is definitely much closer to correct, though more testing is needed to make sure it is being calculated correctly no matter what display configuration changes the user makes from the defaults.
    • DCD plugin: open files in binary mode for Windows.
    • Made the IMD max force cutoff smooth.
    • IMD code now pulls with a force, with calculable units, rather than with an acceleration.
    • Fixed bug in Graphics form logic that was exposed by replacing asynchronous command objects with the synchronous VMDApp method calls. The form was overriding its materials chooser before it had a chance to read the new value.
    • Plugins: Added support for .trr files, and fixed a bug in the g96 reader in which the number of atoms was not being read.
    • Fixed improper deletes of array-allocated strings.
    • SnapshotDisplayDevice now sets its file handle to NULL after closing so that FileRenderer's destructor doesn't bomb when it tries to close it again. There's way too much crap that's shared between these classes.
    • Made the Tcl render command return an error when file rendering didn't work. Had to refactor SnapshotDisplayDevice a little bit so that failure in opening a file would return an error.
    • Updated the .vmdsensors file.
    • Merged VMDgetEnvironment and VMDparseCommandLine into VMDGetOptions; got rid of a bunch of VMDApp state flags which are only used at startup to parse the options.
    • Make .vmdrc file get read before any file specified with -e on the command line. This got broken when we switched to the new read_logfile API.
    • Fixed PR 182 - prevent recursive calls to TclEval and checks of stdin.
    • Fixed bug in display update command; VMDApp::display_update wasn't temporarily setting UpdateDisplay to true before calling VMDupdate.
    • The Tcl text interpreter checks if stdin is a tty. If it isn't, then the command prompt is never printed, and VMD exits on EOF. Useful for Unix-style scripting.
    • When VMD reaches the end of a coordinate file, it now continues with the next coordinate file on the same prepare cycle, rather than waiting for the next prepare to start a new file.
    • Eliminated CmdUtil.[Ch], along with its only remaining command, CmdQuit. Also removed "quit confirm" from the docs, as this has not been supported since VMD 1.5 and there's no good reason to keep it around.
    • vmdinit.tcl no longer puts env(VMDDIR)/scripts/tcl or scripts/tk into the Tcl auto_path. Tcl takes care of adding these directories to the auto_path for itself at startup when init.tcl is read. Removing these lines from vmdinit.tcl makes package loading in VMD work properly again: setting the TCLLIBPATH environment variable puts the corresponding directory in the package search path.
    • more updates to plugins and plugin code.
    • Initial import of the plugin tree into CVS.
    • Added skeletal piece of code for doing drag and drop in Windows, needs much work and matching APIs in VMDApp.
    • Inform buffer needs to be initialized to ""
    • Changed win32 stuff so plugins work on Windows.
    • Added command line option -eofexit, which causes VMD to exit when EOF on stdin is reached by the Tcl interpreter (by default, EOF on stdin is ignored).
    • Fixes to make things build on Windows: also replaced rindex (BSD) with strrchr (Posix).
    • Oops, forgot to add CmdPlugin.h to the CVS repository.
    • Renamed molfileplugin.h to molfile_plugin.h to avoid conflicts when using a certain non-case-sensitive file system.
    • Added FilesFltkMenu, a file loader widget that uses the plugin architecture exclusively.
    • Primary and secondary type for a molecule are now set as a string, rather than as a MoleculeFile or CoorFileSuffix enum value. VMD was just converting the int to a string later anyway. With this change, files loaded as plugins generate a correct save_state, since they can pass their plugin type (a string) to the Molecule as the primary and secondary type.
    • VMDApp::molecule_addfile now checks that the coordinate file contains the correct number of atoms.
    • Added file reading methods to VMDApp; these take file types as strings instead of the internal VMD enum's. Also: fixed a bug introduced with the replacement of CmdResetView with scene_resetview: need resetview to take place _after_ the loading of the first frame so that molecules can be centered properly.
    • Changes to support file reader plugins: Added a CmdPlugin class so UIObjects can get notified when new plugins are read in; added a filename extension to the file reader API so plugins can indicate their typical filename extension to the application.
    • Fixed VMDApp::color_index to accept index strings, in addition to color names.
    • Fixed bug in which the repindex wasn't properly updated before the rep browser.
    • Moved most CmdMol functionality (except CmdMolNew) into VMDApp API methods. CmdMolList was made a pure Tcl extension.
    • open_file_read and open_file_write in the molfileplugin API now take a file type argument; this should make it much easier for a plugin to register itself with multiple filetypes since otherwise it would have to have a different function pointer for each file type.
    • Added priority to the vmdplugin data.
    • When errors occur when VMD sets a trace variable (e.g., if a script contains a typo), an error message is now left in the Tcl result. It used to be that trace scripts would simply fail silently if there was a problem.
    • Added a VMDApp::save_state method, which prompts the user for a filename using the vmd_choose_file function. uiText was made private and unnecessary UIText class references were eliminated.
    • Buried the wait command deep inside TclTextInterp; the command calls a TclTextInterp method directly instead of propogating through three other classes (same approach as the echo command).
    • Stuffed the echo command deep inside TclTextInterp. Also fixed the Echo) prompt so it looks right; it was broken by changes to the Inform class.
    • Eliminated CmdLogRead and CmdLogWrite, moving their functionality into VMDApp methods.
    • Removed unnecessary #includes of ColorList.h.
    • Made ColorFormsObj use the new color API.
    • Made the user-defined graphics commands use the VMDApp API for accessing color information.
    • Pared down and merged color scale commands, and moved functionality to VMDApp methods. Also fixed a mistake in VMDApp::color_mapping() from an earlier commit.
    • Create VMDApp methods for getting default color definitions and for changing color definitions. Pared CmdColorChange down to a simple message.
    • Took the do_execute out of CmdColorName, since the functionality is now in VMDApp::color_changename.
    • Created VMDApp methods for the ColorInfo and ColorScale code.
    • Eliminated dead code from CmdUtil
    • Added command logging for scene_resetview method.
    • Moved CmdResetView functionality into VMDApp.
    • Revved to version 1.8a1
    • Eliminated CmdDisplayUpdate, now implemented in VMDApp methods.
    • Inform now does its stream processing internally.
    • Eliminated dead code from Inform class.
    • Check for plugins prior to using default built-in file loader code.
    • Added plugin methods to VMDApp.
    • Added VMDApp API methods for menu_move and menu_show, eliminated CmdMenuMove.
    • Created an API for rotate/translate/scale operations in VMDApp.
  • VMD 1.7.1 final release (December 23, 2001)

Please email any questions to vmd@ks.uiuc.edu.