# NOTE: This is not the development trunk. It is the release branch.
# NOTE: Generally only bug fixes should be entered here. 
# NOTE: New features should be introduced in the trunk version 12.3.x

version=12.2.18

# bug fix: allow for alternating list/hash entry:
#   for example: print getproperty("jspecview","##TITLE")["items"][1]["spectra"][1]["id"]
#   instead of:  print ((getproperty("jspecview","##TITLE")["items"][1])["spectra"][1])["id"]
# bug fix: GaussianReader not reading "Natural Orbitals" section from  
#          B3LYP 6-31g sp gfprint pop(full,NO)
# bug fix: support for file reading with BOM UTF-8, UTF-16, or UTF-32
# bug fix: script processor not recognizing UTF-8 Binary Order Mark at start of script
# bug fix: (undocumented) POLYHEDRA {...} to {...} with COLOR or TRANSLUCENT fails
# bug fix: POLYHEDRA command or COLOR POLYHEDRA can change selection
# bug fix: PDB reader doesn't recognize 16 LINK records at start of file
# bug fix: script xxxx(xxx)xxx/xx.xxx fails at "(" due to revision 16201 2011-10-02
 
# ------------------------------------------------------------------------------

#version=12.2.17

# bug fix: jvxl issue when color PHASE and translucent
#   -- upon reading JVXL doesn't handle translucency right
#   -- upon writing SPT doesn't preserve colors
# bug fix: user variable lower case "x" not cleared by "X = none"
# bug fix: draw HELIX fails for residue numbers < 0

# ------------------------------------------------------------------------------

#version=12.2.16

# bug fix: GAMESS-US reader error reading NBOs
# bug fix: first attempt to fix macromolecular ellipsoids -- PDB ANISOU records
# bug fix: print [2, 3, 4].mul([3,4,5]) fails

# ------------------------------------------------------------------------------

#version=12.2.15

# bug fix: SLAB unit cell not showing all lines
# bug fix: CRYSTAL reader needs to change to MOLECULAR when X(ANGSTROMS) found (fullerene slab)
# bug fix: Popup Menu item hbond calculate should not require PDB

# ------------------------------------------------------------------------------

#version=12.2.14

# bug fix: state after frame RANGE or frame 0 not saved properly (state saves "frame all" instead of "frame 0")
# bug fix: frame n  does not work properly after load APPEND
# bug fix: measurement units may appear as full word "nanometers" instead of "nm"
# bug fix: user bindings do not access _atomPicked
#  -- solution is to add _ATOM _BOND _POINT _OBJECT to user binding actions

# ------------------------------------------------------------------------------

#version=12.2.13

# bug fix: getProperty("bondinfo",[{13}]) gets info for atom 13 instead of bond 13 
# bug fix: bind xxx _select does not work in conjunction with bind yyy _atomPicking
# bug fix: {*}.atomno and related expressions broken
# bug fix: isosurface offset does not change boundbox or zoom/center points

# ------------------------------------------------------------------------------

#version=12.2.12

# bug fix: show spacegroup not working
# bug fix: lcaocartoon for allene central carbon py incorrect
# bug fix: antialiasdisplay (and image writing) not compatible with scaleAngstromsPerInch
# bug fix: cannot write JPG images
# bug fix: last group of protein cartoon will not display if it is not helix and not sheet

# ------------------------------------------------------------------------------

#version=12.2.11

# bug fix: changes in defaultDistanceLabel not always preserved in state correctly
# bug fix: parameters can be set to invalid values using xxx = ... instead of set xxx ...
# bug fix: (Application) proper Edit...Preferences dialog action

# ------------------------------------------------------------------------------

#version=12.2.10

# bug fix: script @{x} fails
# bug fix: lcaoCartoon dual color p orbitals giving white for one lobe
# bug fix: after "ZAP; LOAD append"  show orientation will have incorrect zyz script  
# bug fix: function call with @x or @1 in parameters fails
# bug fix: H5T should not be used as a lead atom ever, because of set showHydrogens FALSE
# bug fix: adding H atoms to mol2 file faulty

# ------------------------------------------------------------------------------

#version=12.2.9

# bug fix: set isKiosk should:
#      (a) not be reversible
#      (b) not allow file saves other than logging
#      (c) not allow prompt dialogs
#      (d) not allow console or popup menu or ScriptEditor
# bug fix: background colors saved to state can be off very slightly
# bug fix: draw PLANE with three vertices problems after save -- four-atom planes, not three
# bug fix: x = file("?") fails on Cancel
# bug fix: delay not allowed within try{...}

# ------------------------------------------------------------------------------

#version=12.2.8

# bug fix: set picking DRAW does not work on polygon sets
# bug fix: set picking DRAW does not report position change
# bug fix: CifReader (molecular type, with GEOM_BOND records) adds 
#          extra atoms when embedded in JMOL or PNGJ file or part load FILES command
#                       
# bug fix: PdbReader -- crystallographic non-PDB files not checking special positions

# ------------------------------------------------------------------------------

#version=12.2.7

# bug fix: show orientation shows incorrect zyz format if reset uses file-based orientation matrix (smol, Sygress)
# bug fix: isosurface plane xy map mep
# bug fix: user variables should not be rest by INITIALIZE in an spt file
# bug fix: x3d/vrml outputting unnecessary spheres
#  -- bond caps within opaque atoms removed (not precisely correct to do that)
# bug fix: minimization broken
# bug fix: contact command hbond/clash cutoff not sensitive to H-O/N vs O/N-O/N
#   -- set to -1.2 for H-N/O, -1.0 for N/O-N/O
# bug fix: contact command default probe radius should be 0.0 except for VDW (0.25) 

# ------------------------------------------------------------------------------

#version=12.2.6

# bug fix: minimize constraint CLEAR  broken
# bug fix: constraints not reported in show minimization
# bug fix: set measures off broken
# bug fix: contact color density broken
# bug fix: contact volume report not correct for color density
# bug fix: MO HOMO not set properly when using LUMO = "lowest E > 0" (GAMESS-US reader)
# bug fix: zSlab settings not stored properly in parameters; should have default zSlab = 50

# ------------------------------------------------------------------------------

#version=12.2.5

# bug fix: isosurface scale 0.5 plane... broken if no atoms present
# bug fix: isosurface color density broken
# bug fix: set PdbAddHydrogens does not transfer C atomSymmetry to H atoms
# bug fix: contact() function not working when typed from console
# bug fix: set axesOrientationRasmol not working properly (since 11.5.51)
# bug fix: frame x.y - y.z not working 

# ------------------------------------------------------------------------------

#version=12.2.4

# bug fix: with antialiasDisplay, dragMolecule goes 1/2 speed of cursor
# bug fix: nucleic acid residues with HO5' may render last group strangely (since 12.0.RC16, 6/6/2010)
# bug fix: workaround for weird Mac Point3i(Point3i pt) class initializer bug
# bug fix: MO readers can fail if inappropriate filter "TLS" is given
# bug fix: array.bin(low,high,binSize) not documented and can cause exception

# ------------------------------------------------------------------------------

#version=12.2.3

# bug fix: CRYSTAL reader not properly setting model properties
# bug fix: userFunction(x,@y) should operate as per all math 
#  -- parens - value of variable pointed to by y
#  -- x = myfunc(x, @y) same action as just myfunc(x, @y)
# bug fix: userFunction x @y  
#  -- no parens - should operate as value of x and value of y
#  -- @ is unnecessary but allowed
# bug fix: reading of JVXL files for color density fails to color properly
# bug fix: .... vdw 100.0%  --- should be OK with float there, even if it rounds.
# bug fix: load append twice can cause zap to be in wrong place in state file
# bug fix: for (x IN {*}) ... makes x a bitset and leads to array[1] for x.atomName
# bug fix: for (x IN {*}.bonds) does not work

# ------------------------------------------------------------------------------

#version=12.2.2

# bug fix: POV-Ray export of cartoons broken
# bug fix: script javascript:xxxx()  broken

# ------------------------------------------------------------------------------

#version=12.2.1

# bug fix: SMILES comparison when the number of stereocenters is not the same is wrong
# new feature: compare("XXX","XXXX","ISOMER") comparison now includes "AMBIGUOUS STEREOCHEMISTRY!"
# code: popup/modelkit refactoring to isolate awt/Swing references
# bug fix: connection deletion removes all measurements -- can't imagine why...
# bug fix: H2,H3 connected to terminal N of protein not backbone
# bug fix: select PROTEIN selects non-PDB atoms
# bug fix: Molden reader does not read "Sym=X" (missing space after '=')
# bug fix: Molden reader does not read angstrom units
# bug fix: color isosurface {atomset} <color>  does not work if isosurface has not already been mapped.
# bug fix: PDB reader not reading Rasmol-style files with multiple bonding
#  CONECT   1  2  2
#    or
#  CONECT   1  2      
#  CONECT   1  2 
#     means for Rasmol double bond between atoms 1 and 2

# bug fix: Molden file reader error with [5D] flag before [GTO]

# ------------------------------------------------------------------------------

# version=12.2.0

# October 3, 2011

# ------------------------------------------------------------------------------

# bug fix: MO overlaying orbitals
# bug fix: PDB reader not reading Rasmol-style files with multiple bonding
#  -- CONECT   1  2  2      means for Rasmol double bond between atoms 1 and 2

# 224 new features

# summary of feature changes between Jmol 12.0 and 12.2:

# FEATURE CHANGE: "ligand" definition changed to 
#    !(protein,nucleic,water,UREA)"
#        instead of "hetero and not solvent"
# FEATURE CHANGE: default zShadePower set to 3
# FEATURE CHANGE: undocumented a[13] = 3  (where a is a matrix, for a[1][3]) removed
# FEATURE CHANGE:  DSSP default for "calculate structure" 
#    -- old way is now "calculate structure RAMACHANDRAN"
# FEATURE CHANGE:  DSSP default for LOAD of PDB file with no header.
#   in previous versions, Jmol used a ramachandran-angle-based calculation
#   for secondary structure determination when a PDB file had no HELIX or SHEET records.
#   It just seems reasonable to use the industry-standard DSSP method instead.

# new feature: JmolSmilesApplet method (smiles1)
# new feature: JmolSmilesApplet method getRelationship(smiles1, smiles2)
# new feature: The Jmol application can now communicate via sockets
#   with other Jmol applications or specialized servers. 
#   The SYNC command has been expanded to make this very easy: 
#
#     sync -nnnn   starts a server on local port nnnn accepting only local connections
#     sync nnnn "background white" (from another app, generally) would execute that 
#                                command on the app acting as a server
#
#   You can also do this from one app frame to another, because they are independent
#   instances of Jmol.
#
#   Jmol can provide server service to other apps using:
#
#   sync -3000
#   [start other app, connecting on 3000]
#   sync 3000 .....
#
#   Because once the server is started and another app has connected, 
#   Jmol will send messages to that other app, not itself. 
#   
#   To test the service within one application, just create the server and send 
#   commands to itself using a negative port number:
#
#   sync -3000;sync -3000 'Mouse: rotateZBy 30'
#
#   Note that in this context the "server" is the one getting commands from the "client"
#   But the server can also send commands to the client provided the client has given the
#   appropriate handshake: {"magic":"JmolApp","event":"out"}
#
# Sent from Jmol (via outSocket): 
# 
#   {"magic" : "JmolApp", "role" : "out"}  (socket initialization for messages TO jmol)
#   {"magic" : "JmolApp", "role" : "in"}   (socket initialization for messages FROM jmol)
#   {"type" : "script", "event" : "done"}  (script completed)
#   
# Sent to Jmol (via inSocket):
# 
#   {"type" : "banner", "visibility" : "ON" or "OFF" }   (set banner for kiosk)
#   {"type" : "banner", "text" : bannerText }      (set banner for kiosk)
#   {"type" : "command", "command" : command }  (script command request)
#   {"type" : "content", "id" : id }            (load content request)
#   {"type" : "move", "style" : (see below) }   (mouse command request)
#   {"type" : "quit" }                          (shut down request)
#   {"type" : "sync", "sync" : (see below) }    (sync command request)
#   {"type" : "touch",                          (a raw touch event)
#        "eventType" : eventType,
#        "touchID"   : touchID,
#        "iData"     : idata,
#        "time"      : time,
#        "x" : x, "y" : y, "z" : z }
#    
#   For details on the "touch" type, see org.jmol.viewer.ActionManagerMT::processEvent
#   Content is assumed to be in a location determined by the Jmol variable
#   nioContentPath, with %ID% being replaced by some sort of ID number of tag provided by
#   the other half of the system. That file contains more JSON code:
#   
#   {"startup_script" : scriptFileName, "banner_text" : text } 
#   
#   An additional option "banner" : "off" turns off the title banner.
#   The startup script must be in the same directory as the .json file, typically as a .spt file
#   
#   Move/sync commands include:
#   
#   {"type" : "move", "style" : "rotate", "x" : deltaX, "y", deltaY }
#   {"type" : "move", "style" : "translate", "x" : deltaX, "y", deltaY }
#   {"type" : "move", "style" : "zoom", "scale" : scale }  (1.0 = 100%)
#   {"type" : "sync", "sync" : syncText }
#   
#   Note that all these moves utilize the Jmol sync functionality originally intended for
#   applets. So any valid sync command may be used with the "sync" style. These include 
#   essentially all the actions that a user can make with a mouse, including the
#   following, where the notation <....> represents a number of a given type. These
#   events interrupt any currently running script, just as with typical mouse actions.
#   
#   "centerAt <int:x> <int:y> <float:ptx> <float:pty> <float:ptz>"
#      -- set {ptx,pty,ptz} at screen (x,y)
#   "rotateMolecule <float:deltaX> <float:deltaY>"
#   "rotateXYBy <float:deltaX> <float:deltaY>"
#   "rotateZBy <int:degrees>"
#   "rotateZBy <int:degrees> <int:x> <int:y>" (with center reset)
#   "rotateArcBall <int:x> <int:y> <float:factor>"
#   "spinXYBy <int:x> <int:y> <float:speed>"
#      -- a "flick" gesture
#   "translateXYBy <float:deltaX, float:deltaY>"
#   "zoomBy <int:pixels>"
#   "zoomByFactor <float:factor>"
#   "zoomByFactor <float:factor> <int:x> <int:y>" (with center reset)
# 
# new feature: preliminary QuantumEspresso XML reader
# new feature: Jmol Application flags  -k and -P
#  -- -k kiosk mode: like applet, but with a banner across the top
#  -- -P <port> JSON NIO client mode over port <port>
#  -- for JSON NIO, use -J or -j to set nioContentPath and nioTerminatorMessage
#     to the desired values. For example:
#  Jmol -k -P 31461 -j "nioContentPath='./%ID%/%ID%.json';nioTerminatorMessage='SCRIPT_DONE'"
#
# new feature: Jmol.js adds jmolSwitchToSignedApplet().
#        This needed a new <span> tag that is now inserted around the applet.
# new feature: filter "_Xx" for filtering element Xx

# bug fix: MO SLAB n never implemented
# bug fix: MOLDEN reader not reading spherical basis functions
# bug fix: contact command not symmetric
#   Set A should generally be the ligand. However, consider note:
#        // check for O--H...N or O...H--N and not considering
#        // hydrogens and still have a filter
#        // a bit of asymmetry here: set A may or may not have H atoms added.
#        // This is particularly important for amines
#    The issue here is that we do not assume that hydrogens have been
#    added to ligands. So we make some allowances there.
#
# bug fix: SMILES [#6]-[#6] should not match bonds in benzene, only biphenyl
# bug fix: in SMARTS matching of SMILES string, aromatic ring conditions were not matched
# bug fix: null pointer exceptions when model with unit cell is appended to model without unit cell
# bug fix: CIF reader not implemented with filter "CONF n"
# bug fix: unit cell not turned off in state for PDB files loaded with biomolecule
# bug fix: mo points 1000  broken
# bug fix:   xxx = {*}; xxx.property_x = 3   improperly parsed as a script command
# bug fix: getproperty minimizationInfo returns JSON instead of readable string 
# bug fix: JaguarReader not reading D6 MOs properly
#
# code: all references to java.awt and javax.swing isolated to 
#   org.jmol.awt, rg.jmol.export, and org.jmol.multitouch
# code: refactored Jmol core Swing classes restricted to 
#        applet, console, export, modelkit, multitouch, popup
# TODO: Question about what c=c should do. For now, changing that to NOT match C=C of benzene 
# --------------------------------------------------------------

#version=12.2.RC7

# new feature: load TRAJECTORY now loads vibrations as trajectories

# bug fix: SMILES [#6A] and [#6a] should be distinct
# bug fix: load SMILES should not allow 2D return
# bug fix: load SMILES not saved properly in state
# bug fix: set isosurfaceKey not displaying key for planar contour plot
# bug fix: GAUSSIAN reader cannot read MOs when more than 1000 orbitals
# new feature: CASTEP reader for .md and .geom trajectories
# bug fix: atomic orbitals should be assigned 0 if |psi| < 1e-7
# bug fix: load TRAJECTORY does not assign model names

# --------------------------------------------------------------

#version=12.2.RC6

# new feature: transparent background PNG images with WRITE PNGT xxxx.png
#  -- set ANTIALIASEIMAGES false to avoid slight trim issue
#  -- use an unusual color, such as [x010101] for the background
# new feature: preliminary CASTEP .phonon frequency file reader
#  -- preliminary only
#  -- reads q=0 and q#0 points
#  -- use load ... SUPERCELL  to select out a specific q-point
#  -- for example:
#   load c60.phonon {1 1 1} SUPERCELL {2 1 2} # will select for q = (0.5 0 0.5)
#   load c60.phonon -5 {1 1 1} SUPERCELL {2 1 2} # and only mode 5 for q = (0.5 0 0.5)
#   load c60.phonon -5 {2 2 2} SUPERCELL {-4 1 2} # eight supercells; mode 5 only for q=(-0.25 0 0.5)

# new feature: unitcell {xxx yyy z} where z is negative fills entire (standard) xxx yyy space with unit cells of size z
# new feature: forgotten feature: load "xxxx.xxx" [ list of models to load ]
#  -- for example:   load "cyclohexane_movie.xyz" [ 1 6 11 26 ]
# new feature: set minPixelSelRadius
# new feature: CRYSTAL reader reads property files for tensor quantities
#  -- displayed as ELLIPSOID
#  -- note that scale is set using ELLIPSOID N  where N is a percent; default 50; max 100
# new feature: unitcell {xxx yyy scale}
#  -- allows for display of a block of unit cells in 444 555 notation
#  -- cleared by   unitcell {0 0 0}
# feature change: contact full/trim returned to simpler original non-paired idea
# new feature: UNDO/REDO 
#  -- console-only commands same as buttons
#  -- full file reload (saving of full state)
# new feature: undoMove/redoMove 
#  -- script commands
#  -- act like CTRL-Z/(CTRL-SHIFT-Z or CTRL-Y)
#  -- just move atoms; no file loading (just atom positions saved)
#              UNDOMOVE/UNDOMOVE 1 # undo last movement
#              UNDOMOVE n      # undo last n movements
#              UNDOMOVE 0/UNDOMOVE ALL  # undo all movements
#              REDOMOVE/REDOMOVE 1 # redo last movement
#              REDOMOVE n      # redo last n movements
#              REDOMOVE 0/REDOMOVE ALL  # redo all movements
#              UNDOMOVE -1     # clear UNDO history
#              REDOMOVE -1     # clear REDO history
#              REDOMOVE -2/UNDOMOVE -2 # clear both histories
#
# bug fix: load PACKED SUPERCELL produces red0undant atoms 
# bug fix: AtomSetChooser set up too late -- can override embedded jmolScript vibration/vector scale commands
# bug fix: set naviationPeriodic while navigating should disallow unit cell and standard axes
# bug fix: MO LIST broken
# bug fix: linear combination of MOs broken in 12.1.49
# bug fix: Crystal reader not handling CONV option properly
# bug fix: CIF reader not reading isotopes such as D and T
# bug fix: load slab/polymer with PACKED does not work
# bug fix: imines SMILES may cause null pointer exception
# bug fix: SOE added to carbohydrate list (L-sorbose in pyranose form; SOL is the open form, 3AI3.pdb)
# bug fix: setting DOTS off can cause null pointer exception
# bug fix: saving state of contact broken
# bug fix: contact SLAB n not working
# bug fix: deleting of the first model in a set that has load APPEND will not produce the correct state
# bug fix: deletion of models having a		toms with dots can generate null pointer exception 
# bug fix: QuantumEspresso reader not reading ALAT/A_0 files correctly
# bug fix: measurements, picking not allowed to FIXED atoms
# bug fix: (contact) ligand nitrogens not protonated and become hbond acceptors
#  -- solution for now is to consider all N/O HETATM atoms "ambiguous"
# bug fix: undocumented "redo" "undo" application-only commands changed to "redocmd" "undocmd"

# --------------------------------------------------------------

#version=12.2.RC5

# new feature: set isosurfaceKey ON|OFF
#  -- creates a vertical hoverable key on the left
#  -- only the most recent and visible isosurface
#  -- is not exported
# bug fix: "$phosphorus pentoxide" label %[shape] indicates AX4E not AX4 hybridization on phosphorus
# bug fix: show colorscheme "high"   causes exception 

# --------------------------------------------------------------

#version=12.2.RC4

# new feature: selection of surfaces in SurfaceTool
#
# bug fix: setting a timeout should reset the timer of a running timeout with the same ID
# bug fix: contact translucent carries over to next contact command
# bug fix: modelKit increase/decrease charge not working
# bug fix: show SMILES|CHEMICAL NAME broken
# bug fix: for(x in...) where x is not defined causes exception
# bug fix: CONTINUE in switch within  for or while loops infinitely
# bug fix: zap; load append ... ignores the zap!

# --------------------------------------------------------------

#version=12.2.RC3

# bug fix: color broken in 12.2.RC2
# bug fix: isosurface pmesh INLINE broken
# bug fix: 1jgq phosphorus-only default rendering disabled

# --------------------------------------------------------------

#version=12.2.RC2

# FEATURE CHANGE: "ligand" definition changed to 
#    !(protein,nucleic,water,UREA)"
#        instead of "hetero and not solvent"
# new feature: contact VDW shows clash-contacts with equal-volume
#  -- combination with CLASH gives bulls-eyes -- plane only
# new feature: real-time docking with visual scoring test:
#  set pdbAddHydrogens
#  load caffeine.xyz;load append 1crn.pdb
#  frame *
#  select protein;wireframe only
#  select none
#  set picking dragMolecule
#  timeout "t1" -1000 "contact {selected} {!selected} color type"
# new feature x = compare({1.1}, {2.1}, "MAP", {1.1}.find("smiles"))
#  -- MAP returns a set of correlations between set 1.1 and set 2.1 based on the given smiles string
#  -- format is an array of arrays of [i,j] 
#    
# bug fix: select deuterium, HOH, _1H, _H1 isotope business messed up
# bug fix: timeouts not waiting for their own completion
# bug fix: !quit not interrupting timeouts
# bug fix: command line -M sparshui  not working
# bug fix: isosurface color density not picking up last yz points
# bug fix: 12.2.RC1 doesn't allow for isosurface color XXX t.jvxl 
# bug fix: Old legacy Chime *.C for _C in non PDB files -- only when one model, and it is not a PDB file
# bug fix: setting VDW radius after creating isosurfaces or contacts should delete that
#          surface if set of atoms involved in surface intersects set of changed vdw radii
# bug fix: H-bond contact to water O categorized as clash
# bug fix: MO for multi-model file does not save state properly
# bug fix: GROMACS reader should not use sorbital group 3 name SOL for water -- changed to WAT
# bug fix: SOL considered solvent, but is sorbitol; SOL added to carbohydrate list instead
#
# code: better-protected Binary Sorted Tree Forest invalidation
# code: enum class for Structure
# code: enum class for Vdw and RadiusData
# code: enum class for file load state
# code: enum class for color palettes
# code: enum class for stereoMode
# code: enum class for animationMode
# code: enum class for quantum shells -- less than ideal!
# code: enum class for draw
# code: enum class for Callbacks 
#   -- NOTE: THIS AFFECTS ALL EMBEDDED APPLICATIONS 
#   -- WITH CALLBACKS (in a good and simple way!)
# code: enum class for axes modes

# --------------------------------------------------------------

#version=12.2.RC1

# new feature: Surface Tool now does capping. Surface Tool layout rearrangement.
# new feature; CONTACT command -- generates contact surfaces
#   CONTACT {setA} {setB} [contact options] [contact type] [display option] [display type] [color options] 
#   
#   where we have:
#
#   {setA}    the only required parameter, the set of atoms around which to show contacts
#   {setB}    the surrounding set (default: "all other atoms in this model")
#   [contact options]
#   within <distance>
#   resolution <points per angstrom>
#   +/-x.x  
#   intermolecular
#   intramolecular
#   parameters [cutoff,....]
#   [contact type]
#   hbond
#   clash
#   vdw
#   nci    
#   [display options]        
#   slab ....
#   minset
#   [display type]        
#   full
#   trim
#   plane
#   connect
#   cap
#   surface
#   [color options]
#   color <color>
#   (color) DENSITY <dotSize, default: 0.15>
#   color TYPE     
#
#  --examples
#  contact {ligand}
#  contact {ligand} color type
#  contact {:A} {:B}
#  contact {2001:A} NCI
# 
# new feature: set VDW JMOL --- resets any user-set vdw radii
# new feature: set VDW PROBE  --- sets VDW radii as follows
#   as per Word, et al, J. Mol. Biol. (1999) 285, 1711-1733
#       {_H}.vdw = 1.0;
#       {_H and connected(_C) and not connected(within(smiles,'[r6]'))}.vdw = 1.17;
#       {_C}.vdw = 1.75;
#       {_C and connected(3) and connected(_O)}.vdw = 1.65;
#       {_N}.vdw = 1.55;
#       {_O}.vdw = 1.4;
#       {_P}.vdw = 1.8;
#       {_S}.vdw = 1.8;
#
# new feature: zoom 0     default zoom for visible atoms
# bug fix: H atom attachment fixed at 1.1 Angstroms, which is fine for C, but
#  a bit high for O,N (1.0) and low for third row (1.3)
# bug fix: isosurface parameters @x  does not work even when x is an array 
# new feature: ISOSURFACE Kinemage file reader (for contact/clash dots)
#  -- colors are set from the kin file
#  -- parameters [cutoff, valueMin, valueMax, pointType]
#  -- valueMin -- minimum value to display
#  -- valueMax -- maxiumum value to display
#       color.equals("greentint") ? 4f        H-bond
#         : color.equals("blue") ? 0.35f       wide contact
#         : color.equals("sky") ? 0.25f        almost wide contact 
#         : color.equals("sea") ? 0.15f        close contact
#         : color.equals("green") ? 0.0f       contact
#         : color.equals("yellowtint") ? -0.1f small overlap
#         : color.equals("yellow") ? -0.2f     small overlap
#         : color.equals("orange") ? -0.3f     small overlap
#         : color.equals("red") ? -0.4f        almost bad overlap
#         : -0.5f);                            bad overlap
#  -- pointType:
#       0   all points
#   	1	'M' {McMc contacts}
#  		2   'S' {ScSc contacts}
#       3   'P' {McSc contacts}
#       4   'O' {Hets contacts}
#
#  -- dot size controllable via "set dotscale"
#  -- example:
#
#    isosurface 2bxaH-multi.kin  # all overlaps
#    isosurface parameters [0 -1 -0.1] 2bxaH-multi.kin # just non-H-bond overlaps
#    isosurface slab within 3.0 {2001:A}; display group contact(2001:A); zoom {displayed} 0
#   
# new feature: slab/cap for MO
# new feature: contact() function
#  -- selects atoms with VDW overlap 
#  -- examples:
#  display group contact(2001:A) # groups involving contacts at vdw 100%
#  select contact(110, 2001:A)   # just the atoms in contact at vdw 110%
#  print contact(0.4, {2001:A}) # vdw + 0.4
#  print contact(0.4, {2001:A and _O}, {_N})  # specific cross-interactions
# new feature: Surface Tool GUI -- just slicing so far and does all surfaces rather
#		then selected. (Jonathan Gutow)
# --  Many angle units (degree, radians, gradians, fraction of circle, factors of pi
# --  pmesh and isosurface slicing
# --  adjustments to generalize what can be sliced.
# new feature: select within(x.x, VDW, aaaa)
#  -- selects atoms that have overlapping VDW surfaces with set aaaa
#  -- if x.x is present, BOTH interacting atom radii are adjusted:
#  -- if x.x > 10, then this is assumed to be a percent, such as 110%, 100%, 90%
#  -- if x.x <= 10, then this is assumed to be a distance to be added to the VDW radii
#  -- so, for example, select within(1.4, VDW, aaaa) selects groups with overlapping solvent-accessible surfaces
# new feature: getProperty isosurfaceInfo
# -- includes vertexCount, polygonCount, vertices, vertexValues, and polygons
# new feature: isosurface atomicOrbital <n> <l> <m> <z> POINTS <radius> <seed>
#  -- new default cutoff of 0.04 corresponds to factoring in 1/2sqrtPI
#  -- <radius> is new 
#    -- must be a decimal number to distinguish it from the seed. 
#    -- specifies a given radius 
# new feature: getProperty ligandInfo
#  -- treatment of ligands as individually covalently bonded units
#     INDEPENDENTLY of how they are bonded to other atoms such as proteins
#  -- delivers a Hashtable
#     "ligands" ArrayList
#         "reslist" "2001-2003:A/1.1"
#         "atoms"   ({....})
#         "groupNames"  "NAG-NAM-NAG"
#
# bug fix: for(y in x) when x is an array can give odd results when y[i] is then used 
# bug fix: ++ipt not working
# bug fix: zap of model with measurements causes exception
# bug fix: DATA "append @xxx" fails
# bug fix: MOL-2D files loaded then saved to PNG do not reload hydrogen atoms
# bug fix: MOPAC (LINUX) not recognized
# bug fix: NWCHEM reader problems when multiple models
# bug fix: isosurface slab of isosurface MO causes null pointer exception
# bug fix: isosurface slab translucent of translucent isosurfaces causes problems
#  -- isosurface slab translucent ---> will now turn isosurface opaque first
#  -- isosurface slab translucent without a color ---> will now take on current color of isosurface rather than white
#  -- color isosurface translucent of translucent-slabbed isosurface will remove ALL slabbing
# bug fix: WebExport not getting Jmol Icon for title bar.
# bug fix: PDB reader may read bfactors off by 0.01 
# bug fix: NWChem reader without input deck but with frequencies fails to load
# bug fix: 12.1.51 breaks isosurface... colorscheme...
# bug fix: 12.1.51 breaks mo reading from Chem3D XML, which was not working anyway, but now is.
# bug fix: isosurface slab -@xxxx... will negate variable xxxx if it is a plane
# bug fix: contact {setA} {setB} should not allow overall of setA and setB unless NCI.
# bug fix: contact FULL set to minimum resolution 10 (pairwise)
# bug fix: isosurface intersection .... function "..." ignores function and just does "a-b"
# bug fix: SUBSET command not resetting properly

# code: super-fast "micro-isosurface" merging for CONTACT. Wow!
# -- set pdbAddHydrogens; load =2bxa; contact {:A} {:A} 
# -- merges 2341 microisosurfaces in 325 ms on BH laptop!
# code: fast pointilist atomic orbitals. THANK YOU, Pshemak Maslak, Brian Hardock, Rob Caldwell, and Tom Stitt!
# code: new iterator for multimodel sets

# --------------------------------------------------------------

#version=12.1.51

# new feature: contact CAP (for Art Olson)
# new feature: isosurface ... COLORSCHEME (or just COLOR) <color1> TO <color2> n
# new feature: color isosurface <color1> TO <color2> n
#  -- for example, isosurface molecular map property atomno colorScheme red to white
#  -- optional n defaults to 35 distinct colors
# new feature: drag/drop into application offers resize option (# preferredWidthHeight in state script)
# new feature: plane({three-atom atomset})
# new feature: "@" for "atomno="
#  -- both in Jmol math and atom expressions
#  -- select @42 or @52
#  -- print @42.xyz
#  -- @42.xyz = {1,2,3}
# new feature: {atomset}.x?
#  -- creates an associative array of atom properties with names starting with "x"
#  -- print @1.?  lists ALL atom properties
#  -- print {atomno < 3}.?  creates an associative array of arrays  
#  -- for example:
#       $ load caffeine.xyz;print @1.atom?
#	atomID	:	0
#	atomIndex	:	0
#	atomName	:	H1
#	atomType	:	H1
#	atomX	:	-3.380413
#	atomY	:	-1.1272367
#	atomZ	:	0.5733036
#	atomno	:	1
#
#       $ show @{{atomno < 3}.atomn?}
#   { "atomName":["H1","N2"], "atomno":[1,2] }
#
# new feature: set measurementUnits VDW
#  -- percent VDW (in relation to sum of two VDW radii)
# new feature: select/display/hide [ADD|REMOVE] ...
#  -- must be first parameter
#  -- applies appropriate logic:
#  -- "select ADD" means "select selected or"
#  -- "display REMOVE" means "display displayed and not"
# new feature: select/display/hide GROUP
#  -- applies within(group,...) to the expression
#  -- similar to the PyMOL "byres" option
#  -- must be first parameter, unless ADD|REMOVE present, then must be second parameter 
#  -- examples:
#       display add group @22
#       select remove group picked
# new feature PICKED variable
#  -- accumulates recently picked atoms into a set
#  -- cleared using "SET PICKING"
#  -- may be set/cleared by user
# new feature: select within(VDW, aaaa)
#  -- selects atoms that have overlapping VDW surfaces with set aaaa
# new feature: measure {aaaa} {bbbb} vdw nnn%
#  -- intermolecular by default
#  -- adjustable size
# new feature:  measure INTRAMOLECULAR ....
#  -- only measure intramolecular distances
# new feature:  measure INTERMOLECULAR ....
#  -- only measure intermolecular distances
# new feature: set ligandLoadFormat
# new feature: set pdbAddHydrogens
#   -- for file loading
#   -- adds 3 H to terminal N of chains.
#   -- adds hydrogens to ALL groups, including HET groups
#   -- unlike PDB2PQR, then, ligands are properly shown
#   -- also adds all multiple bonds to PDB files
#   -- for altlocs you should use load option FILTER "CONF 1" (or some other specific configuration)
#   -- atom numbers are appended to maximum number in file
# new feature: CIF reader for Ligand CIF files (e.g. http://www.rcsb.org/pdb/files/ligand/AMU.cif)
# new feature: calculate HYDROGEN now works for standard amino acids and nucleic acids
#  -- adds "GROUP" option to connect -- puts new atoms in group of previous
#  -- saves connection in state with negative first atom -- indicating that we need to assign the group
# new feature: LOAD command reports header/title for PDB files
#   -- specifically when scriptLevel = 0 (typed entry)
# new feature: isosurface SLAB OFF  -- for SLAB n, this turns that slabbing off.
# new feature: isosurface FUNCTIONXY = "x * y" and  isosurface FUNCTIONXYZ = "x * x + y + z"
#  -- default is from -10 to 10 every 0.25 Angstroms
# new feature: CONTACT {xxx} TRIM
# new feature: CONTACT {xxx} MISC, and redefinition of HYDROPHOBIC
# new feature: CONTACT {xxx} VDW
#  -- just maps a VDW isosurface with distances to another VDW isosurface
# new feature: CONTACT command (Erik Wyatt/Bob Hanson 6/22/2011)
#  -- creates an object of a variety of forms that
#     indicates nonbonding interactions
#  -- can be a planar disk perpendicular to the interaction,
#     or a cigar-shaped connector
#  -- HBOND (just between O and/or N)
#  -- HYDROPHOBIC (not between O and/or N)
#  -- percent of van der Waals distance
#
#  -- works by doing a sum or difference of two complementary
#     van der Waals surfaces (PLANAR) or by showing the 
#     intersection of the two surfaces (FULL) or by doing an NCI
#     (noncovalent interaction) PROMOLECULAR calculation. 
#
#  -- DENSITY x.x (spot size) option does rough volume rendering.
#       
#
#  contact 
#
#  -- parameters
#
#  required:
#          {setA}
#  optional:
#          ID aaaa (if present, must be the very FIRST parameter
#          ON/OFF/DELETE/LIST (if present must be the only parameter other than ID
#          {setB} 
#          DENSITY x.x
#          COLOR DENSITY
#          IGNORE {ignoreSet} 
#          DISTANCE x.x
#          PARAMETERS [....] 
#          FULL|PLANAR|CONNECT|NCI|ISOSURFACE
#          HYDROPHOBIC|HBOND
#          INTRAMOLECULAR|INTERMOLECULAR
#          nnn%
#          COLOR ...
#          TRANSLUCENT/OPAQUE/MESH/NOMESH, etc...  (must be last parameters)
#
# new feature: show LIGHTING

# bug fix: try {} does not pass VAR variables into its context.
# bug fix: PovRAY starting with antialiasDisplay does not work properly. 
# bug fix: isosurface ORBITAL slightly off in probability -- at the cost of speed
# -- uses abs(PSI) not PSI^2 for probability -- this is not quite right
# -- adding option SQUARED to use PSI^2 instead -- but this may take a LONG time to process
# bug fix: catch(err) not setting variable "err"
# bug fix: select within(@n,...) does not work (distance implied)
# bug fix: probability "pointilist" atomic orbitals (isosurface ORBITAL 3 2 1 points 10000) does not predict max value close enough
# bug fix: important to temporarily set pdbAddHydrogens OFF for state being read without "set pdbAddHydrogens" command ("pdbNoHydrogens in htParams)
# bug fix: isosurface mapping of properties will not be smoothed well due to "fix" in 12.1.50
# bug fix: writing state for isosurfaces that span multiple frames will fail to display isosurface when reloaded
# bug fix: no slabbing for atomic orbitals; not saving phase color for atomic orbitals
# new feature: isosurface slab TRANLSUCENT 0.6 red x=3
#  -- translucent slabbing
#  -- JVXL, PovRay, state -- done 

# TODO: isosurface vdw map mep; isosurface slab none slab translucent 0.6 within range 0 -0.05
# TODO: load =1hiv
#select protein
#color yellow
#wireframe only
#contact resolution 8 {[1zk]} {![1zk]} cap
#contact slab translucent 0.1 red within range -100 0

# bug fix: CIF file reading may miss molecules in highly angled triclinic systems.
# bug fix: over 2047 colors can overrun colix storage 
# new feature: with slab ON, the right-side zooming runs the slabbing plane, same as (ALT_CTRL_SHIFT_LEFT)
# bug fix: CML files with atoms starting with both aNN and aNN_ will not bond correctly 
# bug fix: polyhedra on/off does not work.
# bug fix: set defaultVDW user not working
# bug fix: _smilesString variable not being cleared when a PDB file is loaded
# bug fix: isosurface VDW mapping onto plane now has somewhat different coloration, 
#           and properly slabs to the VDW radius. This is just a SLAB option that can
#           be removed like all others using isosurface SLAB NONE
# TODO: contours from saved JVXL planar isosurfaces does not seem to be correct. 
# bug fix: WebMO reader fails to read HOMO/LUMO business.
# bug fix: AMU added (NAM-NAG sequences)
# bug fix: NDG added (epimer of NAG)
# bug fix: definition of CARBOHYDRATE was updated:
#  -- [A2G],[NGA],[SIA],[SLB],[LBT] added (GalNAc, NeuNAc, lactose)
#  -- [ASF],[NAM] removed, they are not carbohydrates
#  -- a few existing ones are deprecated by PDB; they are left for compatibility 
#       but are now listed as such (maybe remove them in future).
# bug fix: This obscure fix: http://jmol.svn.sourceforge.net/viewvc/jmol/trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java?r1=13502&r2=13525
#          broke Jmol reading of the Epcot hemoglobin file. Only relevant to sequential or trajectory PDB files that do not have MODEL statements. 
#          So then any version starting with 12.0.RC_24 (7/8/2010) through now (7/2/2011) will read the files
#          correctly -- not missing the first atom -- but that messes up earlier scripts. Unfortunately the Epcot business
#          (Touch-A-Molecule) was written using 12.9.23 (1/24/2010), so that is affected. 
#          This fix only affects states written prior to 12.0.RC_1 and just makes it so that they display correctly (though missing that one atom)
#          when they involve PDB trajectories of file without MODEL records separating models. Pretty sure this is just that one file. 
# bug fix: contact fULL followed by contact HBOND can cause exception
# bug fix: set fontScaling does not scale offset with font
# bug fix: application Help menu item no long pushed right.
# bug fix: @{} (empty Jmol math braces) can call exception
# bug fix: pdbAddHydrogens should not add H of CO2H, SO4H, PO3H2 
# bug fix: PDB reader may misread X in GLX/ASX as xenon
# bug fix: error message clarifications: web export not clear about not finding Jmol.js
#      jmolApplet.jar.
# bug fix: export to web was looking for JmolApplet0.jar when jmoljarpath = "."
# bug fix: plane(r, theta, phi) script function was measuring phi from -Y not +X.
# bug fix: Bad Jmol.js
# bug fix: draw pointgroup fixed to first model

# code: better CONTACT MISC algorithm  
# code: refactored ModelLoader and org.jmol.modelsetbio.Resolver
#  -- moves all PDBaddHydrogen business to modelsetbio
#  -- makes class ModelLoader only temporarily instantiated
# code: much more efficient plane creation and mapping
# code: work on isosurface, JVXL, plane mapping
# code: Viewer passes stateScriptVersionInt on to file readers

# --------------------------------------------------------------

#version=12.1.50

# new feature: .count and .count(x)
#  -- .count equivalent to .size -- length of array, string, or atom/bond set
#  -- .count() operating on an array gives an array of [value, count] pairs
#  -- .count(x) gives the number of "x" in the array or string
#  -- examples:
#
#       print {*}.radius.all.count()
#       print {*.ca}.label("%m").count("Q")
#       print {*}.find("SMILES").count("(")
#
# new feature: tab completion on $... or first word after DRAW or ISOSURFACE 
#
# new feature: JVXL files now save and return color and colorscheme information
#              as well as rending (mesh, fill, front/back/fullylit)
#
# new feature:  isosurface origin {...} steps {...} points {...} 
#  -- allows specific origin, steps, and counts (x, y, z axes assumed)
#     for an isosurface that is not from a CUBE file. 
#  -- allows matching other data or fine-tuning a calculation
#
# new feature:  isosurface origin {...} steps {...} points {...} FUNCTIONXY = "function of x, y"
# new feature:  isosurface origin {...} steps {...} points {...} FUNCTIONXYX = "function of x, y, z"
#  -- simple rendering of functions based on an origin, steps, and counts
#  -- origin, steps, counts are all required. 
#  -- examples (note that all angles in Jmol are in degrees):
#
#   isosurface origin {-5 -5 -5} steps {0.2 0.2 0.2} points {50 50 50} functionxy "x * y * cos(x * 100)"
#   isosurface origin {-5 -5 -5} steps {0.2 0.2 0.2} points {50 50 50} functionxyz "x * y * cos(z * 100)"
#   isosurface cutoff 2.0 origin {-5 -5 -5} steps {0.2 0.2 0.2} points {50 50 50} functionxyz "x * y * cos(z*100)" map functionxy "x * y"
#
# new feature:  isosurface INTERSECTION {atomset1}  (Bob Hanson and Erik Wyatt, 6/17/2011)
#
#  -- produces a nice plot of noncovalent interaction regions between atomset1
#     and nearby atoms.
#  -- generates an isosurface that is the result of applying a function, to
#     two VDW data sets.
#  -- full command: isosurface INTERSECTION {atomset1} {atomset2} function "XXX" VDW 100% 
#  -- The Jmol function will be of the form:  function fname(a, b) { return XXX }
#
#   isosurface INTERSECTION {ligand} {protein} function "a-b" VDW 100%
#   isosurface slab within range -100 0
#
#   -- default:
#       -- "within(5.0, atomset1) and not within(molecule,atomset1)"
#       -- function a-b
#       -- "VDW 100%"        
#       -- "slab within range -100 0"
#
# new feature: color isosurface {atom expression} <color>
#  -- specific to surface types (vdw, molecular, sasurface)
#  -- similar to PyMOL command "set surface_color, (color), (selection)"
#  -- allows painting of specific atom-related isosurface areas specific colors
#  -- example:   isosurface molecular; color isosurface {hydrophobic} white 
#
# new feature: super-fast isosurface MAP PROPERTY when isosurfacePropertySmoothing = false
#
# new feature: within(distance, $surfaceID)
# new feature: isosurface slab [point array]
#   -- for example: isosurface slab within 5.0 {3}
#
# new feature: set defaultLabelPDB "%m%r" -- for set picking LABEL (typically labeling groups)
# new feature: set defaultLabelXYZ "%a"   -- for set picking LABEL (typically labeling atoms)
#
# new feature: reversible isosurface SLAB  (Bob Hanson and Erik Wyatt, 6/13/2011)
#   isosurface slab x=2 slab -x=2 sphere 5.0
#   isosurface slab y=2
#   -- any number of slabs either in the instruction or after it
#   -- isosurface slab NONE removes slabs
#   -- any number of CAP as well, but those must be in the statement
#      that creates the isosurface, not in a later statement,
#      and they may not work as expected, as they are quite minimal
#
# new feature: isosurface parameters [0 1] NCI "density.cube" (discrete SCF NCI with intramolecular option)
# new feature: isosurface parameters [0 2] NCI "density.cube" (discrete SCF NCI with intermolecular option)
# new feature: isosurface parameters [0 -1] NCI "grad.cube" MAP "dens.cube" (intramolecular filtering of NCIPLOT cubes)
# new feature: isosurface parameters [0 -2] NCI "grad.cube" MAP "dens.cube" (intermolecular filtering of NCIPLOT cubes)
#
# new feature: plane(r, theta, phi)  
#   - spherical coordinates
#   - plane through a point distance r from the origin perpendicular to the vector:
#     R[z,theta]R[x,phi]{0 0 1}
#   - angles in degrees
#
# bug fix: for (Var x in y){ {x}.xxxx =  ...} does not work properly
# bug fix: for (Var x in y){...} did not work unless y is enclosed in { }
# bug fix: (application) Jmol console not receiving echo messages
# bug fix: UFF full listing (set loglevel 6;minimize steps 0;show minimization) missing n and cosNphi0 in torsions
# bug fix: isosurface SLAB not saved in JVXL; (now as vertex data only)
# note: {*}.find("MF") was not documented (Jmol 12.0)
# bug fix: isosurface slab within 5.0 {3} -- should be ALL those atoms, not just center
#   -- as opposed to the CENTER using  isosurface slab within 5.0 @{{3}.xyz}
# bug fix: PQR reader allowing < 0.9 radius for H
# bug fix: PQR reader mistaking " HD3" as deuterium
# bug fix: pointilist isosurfaces do not respond to "color isosurface red"
# bug fix: isosurface select {x} only VDW MAP select {!x} VDW 
#   -- now allows mapping of a VDW (or SA, not molecular) surface 
#      with values that are the exact minimum distance of that point
#      to atoms of another set. This can directly pinpoint contact regions
# bug fix: throwing script parsing error on correct "isosurface slab within [4 elements
#         representing the slab box]" (was losing last "]").
# bug fix: on Mac systems, not finding local files to include in .jmol file (was losing first "/").
#
# code: Renderers made entirely independent
#
# unimplemented: slice command provides for simple two sided slicing of isosurfaces
#         syntax: slice <isosurface name> angleXY anglefromZ position thickness
#                         all numerical parameters must be decimals.
#                    angleXY-angle in XY plane (decimal in radians)
#                    anglefromZ- angle from Z axis (decimal in radians)
#                         these angles specify the direction vector perpendicular
#                         to the slice.
#                    position - 0-100 (% in decimal) specifies the position along the 
#                          vector as a percent of the boundbox diagonal.  50% is origin.
#                    thickness  - slice thickness as a percentage of the boundbox
#                           diagonal (0-100 in decimal format).
#                 slice left on - creates a transparent plane at the left of the slice.
#                 slice right on - creates the right plane
#                 slice right|left off - turns them off.
# implemented: isosurface slab [several options, see above] does all of the above
#              except left/right transparent planes, which I think could be implemented
#              differently. 

# --------------------------------------------------------------

#version=12.1.49

# new feature: set zSlab {atom expression or point}; set zShade ON 
#  -- sets the front of the shading to be at a position in space 
#  -- very nice for ligands!
# FEATURE CHANGE: default zShadePower set to 3

# bug fix: MarchingCubes not reading last plane of data
# code: isosurface NCI (promolecular) reads progressively
 
# new feature: isosurface NCI (noncovalent interactions) -- Henry Rzepa suggested incorporating this
#
#   -- NCIPLOT promolecule calculation for reduced density.
#      Plots reduced density mapped with ABS(rho)*SIGN(lambda2)
#      where lambda2 is the middle eigenvalue of the Hessian matrix of
#      promolecular electron density. Innovates a discrete SCF option not
#      available in NCIPLOT itself.
#
#      default is "promolecular" approximation
#
#        isosurface NCI
#
#      DISCRETE SCF -- starting with standard CUBEGEN file
#
#        isosurface NCI "dens.cube"  
#
#      DISCRETE SCF -- starting with NCIPLOT's xx-nci-dens.cube file        
#
#        isosurface parameters [0 0 0 0 0 0.01] NCI "dens.cube"
# 
#      Extended to all volume file formats, including
#            ABPS, CUBE, Jaguar, MRC, OMAP, CCP4, XPLOR  
#
#      Isosurface parameters [cutoff, p1, p2, p3, p4] NCI ...
#
#         -- p1 = 0(all, default), 1(intramolecular), 2(intermolecular)
#         -- p2 = rhoMin   (min rho cutoff to remove very low density points)
#         -- p3 = rhoPlot  (cutoff used to remove covalent density, default 0.07 for promolecular, 0.05 for SCF)
#         -- p4 = rhoParam (fraction of total rho that defines intramolecular, default 0.95)
#         -- p5 = dataScaling (default 1, but set to 0.01 to read back in NCIPLOT -dens.cube file)
#
#  references: 
#
#   "Revealing Noncovalent Interactions", 
#   Erin R. Johnson, Shahar Keinan, Paula Mori-Sanchez, Julia Contreras-Garcia, Aron J. Cohen, and Weitao Yang, 
#   J. Am. Chem. Soc., 2010, 132, 6498-6506. email to julia.contreras@duke.edu
# 
#   "NCIPLOT: A Program for Plotting Noncovalent Interaction Regions"
#   Julia Contreras-García, Erin R. Johnson, Shahar Keinan, Robin Chaudret, Jean-Philip Piquemal, David N. Beratan, and Weitao Yang,
#   J. of Chemical Theory and Computation, 2011, 7, 625-632

# new feature: quaternion() with no parameters gives "current molecular quaternion" -- same as quaternion(script("show rotation"))

# bug fix: POVRAY export of mapped surfaces fails

# new feature: isosurface PARAMETERS [cutoff, p1, p2, p3...]
#   -- allows passing parameters to an isosurface generator
#   -- if parameters are 0, then some default value is used instead

# bug fix: isosurface cavity algorithm error makes cavity too large
# bug fix: 12.1.48 feature MO/ORBITAL POINTS delivers twice the number of desired points
# bug fix: (not fixed in 12.0) set picking label requires picking of ATOM, not its label. 
# bug fix: load "xxxx" filter "biomolecule 1" broken
# bug fix: font labels 16 bold   does not work (i.e. missing face)

# new feature: color atoms property VECTORSCALE
# new feature: isosurface slab n  -- Erik Wyatt idea

# --------------------------------------------------------------

#version=12.1.48

# new feature: atomMovedCallback parameter: BitSet of atoms moved
# new feature: appletReadyCallback parameters: htmlName, TRUE/FALSE 
#  -- fired ONCE upon applet ready, once upon applet destroyed
# new feature: load spacegroup "" loads data with current file's space group
# new feature: load unitcell "" loads data with current file's unit cell and offset
#  set appendNew false 
#  LOAD DATA "append"
#  1
#  testing
#  Na 0.5 0 0.5 
#  end "append" {1 1 1} spacegroup "P4/mmm" unitcell ""

# new feature: draw ARROW [ATOM {aa} | BOND {bb} {cc}] [ATOM {aa} | BOND {bb} {cc}]
#  -- allows easy creation of curved mechanistic arrows from atoms to bonds, 
#     bonds to atoms, atoms to atoms, or bonds to bonds.
#  -- when atoms are moved, these arrows follow the atoms. 
 
# new feature: isosurface CONNECT {xxx}
#  -- connects an isosurface to an atom (only the first in the set) so that
#     If that atom is moved, then entire isosurface is moved. 
#  -- STATE ISSUE: From the state, all isosurfaces are created AFTER atoms are moved, 
#     so an isosurface such as a molecular surface will not be recreated properly from the state

# new feature: show state FILE "filename"  --- show embedded state from file (for example, an image)

# new feature: MO POINTS / AO POINTS mapping onto a plane
#   for (var i = -5;i < 5;i += 0.2) {isosurface color range -1.0 1.0 plane x= @i map atomicorbital 4 3 1 points 1000;refresh}

# bug fix: set appendNew false; load =1q0y; load APPEND =1crn causes exception
# bug fix: lcaoCartoon does not get hidden when atom deleted
# bug fix: isosurface mesh incompatible with fullylit and frontonly
# bug fix: isosurface SELECT should also set model index
# bug fix: navigate broken
# bug fix: modelKit dragMinimizeAtom broken in 12.0.43
# bug fix: dragMinimize should select all non-fixed atoms if there are fixed atoms
# bug fix: write @{"xxxx"} fails
# bug fix: xmlns designations for jvxl and cml added to JVXL file creation 
# bug fix: isosurface ... map VDW -- mapping not saved in state
# bug fix: CRYSTAL reader does not read vibrations for atoms with two-character symbols
# bug fix: cartoons with hermite level do not reposition for atom position changes or trajectories
# bug fix: isosurface plane x=-1 (with no spaces) not accepted 
# bug fix: x = write("VRML") should give VRML contents and not write to disk
# bug fix: third oxygen atom in 5'-terminal phosphate was not assigned to backbone (e.g. 4tna.pdb)
# bug fix: update in Jmol.js: Java version detection got broken in Mac Firefox 4.0.1 (part of browser compatibility test)

# --------------------------------------------------------------

#version=12.1.47

# new feature: MO POINTS npts seed   -- displays MOs as pointilist objects
#     load c6h6.smol
#     mo points 5000
#     mo homo
#     mo points 3000 13  # optional random number seed reproduces previous results
#
# new feature: isosurface atomicOrbital n l m [zeff] [ POINTS npts seed]
#       allows Monte Carlo type orbital display, as for http://stolaf.edu/people/hansonr/origami/WIN/orbital1.zip
#       (see http://stolaf.edu/people/hansonr/orbital), e.g.:
#
#         isosurface phase atomicOrbital 3 2 1 POINTS 5000
#
#       optional random number seed reproduces previous results
#
# new feature: contoured planes and 3D objects can be remapped and recontoured using ISOSURFACE MAP
#
# new feature: set dotScale applies to isosurface points in pointilist objects
#
# new feature: SCALE parameter implemented for atomic orbitals.
#
# bug fix: remapping of a contoured isosurface fails
# bug fix: user-defined @ atom sets should be saved in state
# bug fix: defined @ atom sets not indicating changes when models are deleted
# bug fix: parameter setting of Jmol integer parameters with float values may not set variables
#    example: set dotScale 3.0   does set that variable, but there is no effect. (not fixed in 12.0)

# --------------------------------------------------------------

#version=12.1.46

# new feature: set partialDots  -- partial bonds rendered with dots rather than dashes
# new feature: set PICKING dragSelected
#   -- like dragMolecule; must be over an atom (any atom)
#   -- use ALT to rotate selected atoms
#
# note: For dragging and rotating atoms, chains, and molecules
#       there are several parameters that govern the process 
#       because there are several different ways of going about it. 
#
#       -- You can specify a set of atoms to FIX in place and not allow movement: FIX
#       -- You can specify whether or not to allow rotation of atoms when dragging: set allowRotateSelected
#       -- You can specify to move preselected atoms only, and you can specify the atoms
#          either with SELECT commands using set picking dragSelected
#          or by clicking on them (using set picking SELECT...)
#
#        set dragSelected (12.0)
#             Allows dragging of selected atoms but, by itself, no rotation.
#             pressing ALT shows selected atoms that will be moved   
#             ALT-SHIFT-LEFT moves, CTRL-Z undos, CTRL-SHIFT-Z or CTRL-Y redos  
#             along with set picking SELECT x
#             where x is one of: atom, group, chain, molecule, polymer, structure, model
#             You can also use set picking extendedSelect for Rasmol-style picking, where
#             you get one group at a time only; the default is to toggle selections on and off
#
#        set dragSelected; set allowRotateSelected (12.0)
#             AllowRotateSelected by itself does nothing, but with set dragSelected 
#               also allows rotation.
#             Rotations, though allowed, are carried out on FULL MOLECULES ONLY.
#             pressing ALT shows selected atoms that will be moved   
#             ALT-LEFT rotates, ALT-SHIFT-LEFT moves, CTRL-Z undos, CTRL-SHIFT-Z or CTRL-Y redos
#  
#        set allowMoveAtoms TRUE (12.2)
#             A setting that enables/disables dragSelected and allowRotateSelected
#             and also allows rotation of atoms within molecules. 
#             pressing ALT shows selected atoms that will be moved   
#             ALT-LEFT rotates, ALT-SHIFT-LEFT moves, CTRL-Z undos, CTRL-SHIFT-Z or CTRL-Y redos
#  
#        set allowMoveAtoms FALSE (12.2)
#             turns off dragSelected, allowRotateSelected, and itself, forcing selected rotations
#             to act on complete molecules 
#
#        set picking dragSelected (12.2, new)
#             (requires set allowMoveAtoms;set allowRotateSelected)
#             Based on those currently selected atoms, simple access to drag/rotate: 
#             LEFT (on those atoms) moves, ALT-LEFT (on those atoms) rotates, 
#             CTRL-Z undos, CTRL-SHIFT-Z or CTRL-Y redos  
#
# bug fix: no ALT-x menu action in application
# bug fix: FIX command not working properly
# bug fix: CTRL-SHIFT-Z not working for "redo"
# bug fix: select within(chain, atomno=xxx) will not select all desired atoms
#          if the chain is spread out over multiple regions of the file (1gzx)
# bug fix: undo (CTRL-Z) and redo (CTRL-Y) not implemented for dragSelected
# bug fix: set dragselected may not turn off transient selection halos 
# bug fix: molecules incorrectly assigned for covalently attached cofactors, such as HEM (1gzx)
#       What about hydrogen bonding? 

# bug fix: set picking dragMolecule then use of SHIFT after rotate COMPARE will result in unwanted translation

# --------------------------------------------------------------

#version=12.1.45

# new feature: NBO second-order data saved in modata:
#   Var x = getProperty("auxiliaryInfo.models[2].moData.secondOrderData")
#   show x
#   >> x = [[69.0,115.0,1.2800001,0.044],[69.0,134.0,0.67,0.026],...[mo1, mo2, E(2), f(i,j),...]
#   where mo1 and mo2 are indexes into the MO list (Note that they are floats, not integers.)
#   and E(2) and f(i,j) are the E(2) value calculated by genNBO.

# bug fix: quaternion N frame off slightly due to bisection error.
#   -- also affects Rasmol hydrogen bond calculation
# bug fix: select a will not select P-only DNA adenosines (1jgq)
# bug fix: select A and select a  may be different for P-only DNA strands (1jgq)
# bug fix: help needs to add version to http call
# bug fix: properties of type float[][] not saved as ScriptVariable lists
# bug fix: AIMS reader upgrade to include atom/atom_frac line mix
# bug fix: PSI3 reader for WebMO
# bug fix: NWChem reader skips vibration info; set to skip only translation/rotation models
# bug fix: data connect can cause null pointer exception if data statement has white-space-only lines

# --------------------------------------------------------------

#version=12.1.44

# bug fix: MOs broken in 12.1.43
# bug fix: drawpicking fails for drawn polyhedra. (turned off for now)

# --------------------------------------------------------------

#version=12.1.43

# new feature: show chemical name
# new feature: show chemical InChI
# new feature: show chemical InChIKey
# new feature: set echo ID "xxxx"
# new feature: show drawing  (2D line drawing, from NIH)
# new feature: isosurfaces can be remapped.
#   isosurface molecular map property temperature
#   isosurface map property partialcharge
#   isosurface vdw
#   isosurface map mep

# bug fix: { echo testing } causes compiler error
# bug fix: { echo "testing" } causes compiler error
# bug fix: cannot access site_xxx definitions created by PDB file read
# bug fix: echo myecho ... after echo ALL still does ALL
# bug fix: cube file reader (load command) does not convert z coordinates to Angstroms.
# bug fix: isosurface CAVITY cannot be mapped
# bug fix: isosurface CAVITY broken
# bug fix: application load menu unnecessarily creates new frame and loses current script processing

# code: setEcho rewrite

# --------------------------------------------------------------

#version=12.1.42

# new feature: for (var x in [....]) {...}
#  -- array option
# code: Swing class instantiation failure caught
# bug fix: set picking identifyBond  not implemented
# bug fix: leaving modelKitMode does not leave bondPickingMode "ident"

# --------------------------------------------------------------

#version=12.1.41

# new feature: for (var x in {...}) {...} 
#  -- for example:
#  for (x in {selected}) { print x }
# new feature: x = {*}.mass.sum   (and .max, .min, etc.)
#  -- note, like other atom properties, {*}.mass by itself is an AVERAGE of masses of all atoms
#  -- accounts for isotopes, but otherwise just uses average masses. Source: John Moore/Jon Holmes, J. Chem. Educ. 
# new feature: x = plane(<point>, <vector>, true)

# bug fix: for(_x...) not disallowed
# bug fix: Spartan .smol files: default for charges is now ESPCHARGES (what SpartanStudent reports), not MULLIKEN
#  -- filter "MULLIKEN" now reads those charges
# bug fix: {*}.resno, .atomno, etc. where the property is an integer returns sum, not average
# bug fix: closing a prompt dialog with ESCAPE can cause crash; should return "null"
# bug fix: conflicting (Edit) selectMenu removed
#  -- can't have two menus with exactly the same name, or language will only update one
# bug fix: miscalculating distances for atom exclusion in CifReader molecular option
# bug fix: image creation does not lock out mouse or system refreshes
# bug fix: select {*} (color=...) fails (specifically math functions doubling as atom properties)
# bug fix: cross-applet script output from print script("show ...", "B") not working 
# bug fix: synchronize command broken 
# bug fix: "string"%-n right-side truncation one character short

# code: MouseManager14, ActionManager simplifications

# --------------------------------------------------------------

#version=12.1.40

# new feature: frame title @someArray
# -- for example:
#  x = getproperty("modelinfo.models.energy")
#  y = x.sub(x.min).mul(2625.5)  # relative energies, in kJ
#  frame *;frame title @y
# new feature: write butane.xyzvib # write simple multimodel xyz file

# bug fix: within(xxx, <only first atom in a model>) will fail
# bug fix: Crystal09 reader upgrade
# bug fix: VASP outcar atom naming error
# bug fix: adaptation for improperly CONECTed PDB files such as 1W7R
# bug fix: select *y defaults to select {*}(y) instead of select {:y}
# bug fix: cml bug fix for bonds not applied to symmetry
# bug fix: newer cml format for crystal information
# bug fix: vibration ON  not saved in state
# bug fix: not reading MOPAC 6, 7, or 2009 files

# --------------------------------------------------------------

#version=12.1.39

# new feature: load MENU -- if user-defined menu label is "null" then that menu item is removed
#  -- for example:  labelName | null      or      labelMenu | null
# new feature: write COORD XYZVIB filename
#  -- writes multimodel xyz file, with vibrational frequencies if present
# new feature draw ARROW..... BARB
#  -- fish-hook "radical" arrows
#  -- included in POVRAY exporter only
#
# bug fix: write of stereo image only shows one half of dual display
# bug fix: application does not update menus properly
# bug fix: Jaguar reader not reading vibrations correctly
# bug fix: write JMOL (instead of write xxx.jmol) not implemented
# bug fix: Jaguar reader not reading vibrations correctly

# --------------------------------------------------------------

#version=12.1.38

# new feature: isosurface... map property x WITHIN x.y
#  -- allows a maximum distance to be defined; speeds up calculation
#  -- defaults to 5.0 when set isosurfacePropertySmoothing FALSE
#
# bug fix: load of model when animation is on may cause animation NEXT to fail
# bug fix: isosurface VDW can ignore H2O
# bug fix: load FILES <series of PDB files> incorrectly autobonds CONECTed atoms
# bug fix: (signed applet only) write FRAMES multiple calls to file dialog 
# bug fix: draw/show pointGroup not correct when {0 0 0} is not center of model
# bug fix: draw pointGroup deletes all draw objects, not just of this model's point group
# bug fix: multimodel show pointGroup does not reset when frame is changed

# --------------------------------------------------------------

#version=12.1.37

# new feature: (relevant to Macintosh only) COMMAND-SHIFT-LEFT-DRAG same as CTRL-SHIFT-LEFT-DRAG
# new feature: you can put element numbers in place of element symbols in XYZ files,
#              and you can have a sixth column that is radius e.g.
#    elemno x y z charge radius
#              or (for just the radius with no charge)
#    elemno x y z - radius
#              note that charge can be formal (integer) or partial (decimal)
#
# bug fix: set PICKING OFF  nonfunctional	
# bug fix: unnecessary moveto commands in state 
# bug fix: CTRL-SHIFT-LEFT on Macintosh must be pressed with LEFT first. go figure... (Old, old problem fixed)
#   -- problem was that CTRL-SHIFT-LEFT-DRAG specifically was delivered as CTRL-SHIFT-MOVE
#   -- specifically relates to changing the slab after slab ON
# bug fix: isosurface for trajectory not working
# bug fix: Var x in function x() not recognized
# bug fix: Var data followed by data++ causes syntax error
# bug fix: isosurface .... map select {...} not saved properly in state
# bug fix: MO HOMO should select highest non-negative value if no occupancy info
# bug fix: Spartan reader not reporting HOMO
# bug fix: load xxxx.top should default to xxxx.trj for coord files

# --------------------------------------------------------------

#version=12.1.36

# new feature: preliminary DCD file format reader
#  --   load trajectory "c:/temp/t.pdb" coord "c:/temp/t.dcd" 
# new feature: mo -n  -- switches phase of orbital
#
# bug fix: set bondPicking deletes bond
# new feature: Molden reader filter options VIBONLY, OPTONLY, NOOPT, NOVIB
# bug fix: Molden reader does not read optimizations
# bug fix: Molden reader nonfunctional
# bug fix: Spartan reader fails when no MO calculation
# bug fix: Spartan MO d6/f10 reader problems
# bug fix: QuantumEspresso reader first-model not read as Cartesian coordinates
# bug fix: load ? broken in 12.1.34
# bug fix: getProperty  by itself does not return SORTED list of properties
#
# code: binary model file reading capability added 
# code: JPEG encoder stores state in APP1 (FFE1) tag set instead of comment field
# code: MOCalculation streamlined

# --------------------------------------------------------------

#version=12.1.35

# new feature: linear combinations of molecular orbitals
#   -- any number of orbitals may be combined: mo [c1, mo1, c2, mo2, c3, mo3...], for example:
#      mo [0.5, 20, 0.5, 21]
#   -- coefficients will automatically be normalized such that SUM_i(c_i*c_i) = 1.00
#   -- if variables are involved, one needs @{...}:
#      load c6h6.smol; for (f = 0; f <= 10; f++) { mo @{[f/10.0, 20, (10-f)/10.0, 21]}; refresh }
  
# bug fix: SMILES generator error for cationic aromatic nitrogen
# bug fix: application with file name does not run jmolscript: embedded scripts
# bug fix: isosurface x.xx should default to "isosurface CUTOFF x.xx" for legacy compatibility
# bug fix: {xxx}.label = "xxx" does not allow saving state
# bug fix: {xxx}.element = "B" only assigns "B" to first atom in set

# --------------------------------------------------------------

#version=12.1.34

# new feature: CTRL-V "dropping" of a url into Jmol loads the model found at that URL.

# bug fix: {xxx}.element = "B" does not work
# bug fix: JavaScript getPropertyAsArray("auxiliaryInfo.models") will fail for crystal structures 
# bug fix: undocumented select within(hkl,...) and select within(plane,...) missing
# bug fix: message @x   should replace x with a variable; "message @x is the value of x" should not
# bug fix: older syntax MESSAGE %{x} for variable value missing
# bug fix: variable pointers such as @x = 3 and y = 3 + @x not working 
# bug fix: subtle label off bug leaves atom "clickable"
# bug fix: subtle bond deletion bug leaves atoms with bonds unclickable
# bug fix: AMBER CYX not recognized in @cystine definition
# bug fix: MD topology/coord file loading problems; general trajectory problems
# bug fix: write xxx.obj upgrade
# bug fix: drag/drop CUBE files should use isosurface sign red blue $FILENAME$

# --------------------------------------------------------------

#version=12.1.33

# new feature: write xxx.OBJ -- WaveFront OBJ file writing
# new feature: isosurface MRC keyword indicates file is MRC type (for nonstandard MRC files)

# bug fix: CIF reader not reading files with multiple models involving GEOM_BOND
# bug fix: scriptLevelMax 20 too small -- changed to 100
# bug fix: for/while local variables improperly localized in iterative functions
# bug fix: 12.1.32 should not have changed <string> + <array> to be <array> 

# --------------------------------------------------------------

#version=12.1.32

# new feature: simple embedded application version of evalStringWaitStatus
#              that returns output from print/message/echo commands
#  -- see TestScriptOutput:
#     http://jmol.svn.sourceforge.net/viewvc/jmol/trunk/Jmol/examples/basic/org/jmol/TestScriptOutput.java?content-type=text%2Fplain
# new feature: preliminary NWChem orbital reading
#   -- still not normalized correctly
#   -- d and f orbitals not checked
#   -- UHF alpha/beta not checked
# new feature: <array1> | x
#   -- IN PLACE concatenation
#   -- array1 will be appended to
#   -- if x is an array of length n, then n  elements will be added
#   -- works as    a |= b
#   -- to append a full array as one element, use   a |= [x]
#   -- to append with creating a NEW array, use a + x or a + [x] instead
# new feature: "unset" command same as "reset"
#   -- for example:
#       a = array([1,2,3],[4,5,6],[7,8,9])
#       y = a[3]
#       unset a
#       show variables
#         y = [7,8,9];
#   -- just looks better for variables
#   -- good to use this if just a small part of a large array
#      or hashtable is wanted and the rest can be discarded
# new feature: sort/reverse does array sorting IN PLACE, not by copying
#   -- for example:
#        y = x.sort
#      x is sorted, and y is a copy of that
#   -- still need x = x.sort in general, because "x.sort" is not a command
# new feature: array assignment is always by reference, as for JavaScript and Java 
#   -- y = x[3], if x[3] = [3, 4, 5], assigns y to [3, 4, 5], so if later
#      one uses y[4] = "new", then at that point x[3] = [3, 4, 5, "new"] 
#   -- y == x[3] distinction removed
# new feature: x = intersection(plane, plane)
# new feature: x = intersection(pt, plane) (i.e. line perp to plane through pt)
# new feature: x = intersection(ptLine, vLine, plane)
# new feature: x = intersection(ptLine, vLine, point) (i.e. plane perp to line through point -- projection of point onto line)
# new feature: draw polygon @x @y where @x and @y are arrays of points and faces, respectively

# bug fix: a = {} initialized as bitset, not associative array
# bug fix: <bitset> | <integer> should set bit <integer>
# bug fix: <bitset> | <array> should set bits indicated in <array>
# bug fix: <bitset> & <integer> should return true if bit <integer> is set
# bug fix: <bitset> % n when n < 0 should do "last n + 1"
# bug fix: <array> | [a,b,c] should append elements to array -- IN PLACE
# bug fix: animation incompatible with spin for largish structures
# bug fix: _modelFile variable incorrect for file read from zip file
# bug fix: If a script such as "test.spt" creates a function 
#          test(), then the next implicit script command "test.spt" will fail
# bug fix: implicit script command XXXX.xxx loses case of filename
# bug fix: array appending appends string values  
# bug fix: frame 0.0 does NOT enable all frames; breaks "quaternion" command
# bug fix: isosurface fragment fix
# bug fix: cartesian exporter capping cylinders flat and spherical both
# bug fix: Jmol logo was missing from the Help>What's New window.
# bug fix (improvement): the Help>User Guide window was too narrow.
# bug fix: echo @x when x is an associative array
# bug fix: write t.jvxl does not work for new solvent/molecular surfaces business

# code:  ArrayList X ... --> List X 
# code: ScriptVariable simplified
#   -- ScriptVariable[]objects --> (ArrayList<ScriptVariable>)value

# --------------------------------------------------------------

#version=12.1.31

# feature change: undocumented a[13] = 3  (where a is a matrix, for a[1][3]) removed

# new feature: MOL reader reads > <PUBCHEM_MMFF94_PARTIAL_CHARGES>
# new feature: load FILTER "*.CA,/=5" 
#   -- every 5th alpha carbon
#   -- note comma before /=
# new feature: write xxxx.OBJ 
#   -- Wavefront OBJ files
#   -- export/_ObjExporter written by Ken Evans 
# new feature: write xxxx.XYZRN  
#   -- input for MSMS
#   -- suggest first using   set DEFAULTVDW BABEL 
# new feature: multidimensional array assignment: a[1][2] = 10
#   -- allows setting of a specific element of a multidimensional array	
#   -- value can be anything -- a number, an array, an hashtable, a bitset, etc.
#   -- allowed also for matrices, but if the value is not a number, or
#      the row/column pointers are outside the range 1-3 or 1-4, then 
#      the matrix is turned into an array automatically
#   -- for an array, when not a direct assignment, you need parentheses:
#        x = (a[1])[2]; if ((a[1])[2] == 3)....
#      because in general a[1][2] means "array a, elements 1 through 2"
#   -- for a matrix, you can use a[1][2] anywhere -- this is a difference between matrices and arrays 
# new feature: y == x[3]  (double "=" in context of assignment) (removed in 12.1.32)
#   -- y is now an alias for x[3], not a copy
#   -- allows, for example:
#        y = x[3]; y[2] = 6; 
#        equivalent to (x[3])[2] = 6 (which is not a valid syntax)
# new feature: x.sort(n)
#   -- array sorting by nth object 1 - arrayLength; 0 == last, -1 = next to last, etc.
# new feature: load 1blu.pdb filter "*.CA | HETATM,![HOH]"
#  - "|" means "OR", so this reads:
#     load only alpha carbons OR (HETATM and not HOH)

# bug fix: Jmol 11.9.24+ will read states created by prior versions incorrectly
#   -- fixed by adding "legacyAutoBonding" setting
# bug fix: loading a file on command line does not allow 
#          for write xxxx.jmol to include model file in zip file
# bug fix: fails:  load 1mbo.cif; isosurface select(not solvent) ignore(none) sasurface;  
# bug fix: passing an array to a function does not correctly pass by reference
# bug fix: dot function included in array  x = [(whatever).something...]   fails
# bug fix: array sorting for objects
# bug fix: creating arrays from variables does not copy variable value
# bug fix: draw .... @s  does not work for title, but @{s} does
# bug fix: ZAP should not set appendNew TRUE
# bug fix: load APPEND after ZAP inserts ZAP into state after load command
# bug fix: write MOL writes incorrect charge

# code: overhaul of ScriptVariable
#   -- "list" type renamed "varray" 
#   -- value = null now for varray
#   -- way more efficient use of arrays
#   -- may have introduced problems, but they should all be catastrophic.

# --------------------------------------------------------------

#version=12.1.30

# new feature: Finnish translation

# bug fix: isosurface POCKET broken
# bug fix: isosurface MOLECULAR or SETS with DOTS gives too many dots
# bug fix: draw TRIANGLES not working
# bug fix: annoying tic label side-switching removed
# bug fix: set measurementLabels off not working for ticks
# bug fix: isosurface color mesh blue   not working
# bug fix: (modelkit) load $PCl5; assign atom ({2}) "C"  fails to place H atoms correctly
# bug fix: not all translated html text was escaped in web export widgets

# code: Commentized WebMaker.java in prep for complete removal.  Fixes to Widgets javadocs.
# code: isosurface MOLECULAR efficiencies

# --------------------------------------------------------------

#version=12.1.29

# new feature: isosurface SLAB within x.y {point}
#   -- smooth circular slabbing
#   -- negative x.y --> "not within" (creates a circular hole at this position)

# bug fix: isosurface molecular/solvent improvements
# bug fix: logFile/logCommands/logGestures should not be saved in state
# bug fix: log file cannot be turned off by setting value to ""
# bug fix: user-defined function calls should be able to look like Jmol commands, without ()

# code: isosurface MOLECULAR/SOLVENT x.y completed; "FULL" option removed
# code: (new concept) nonlinear Marching Cubes for IsoSolventReader

# --------------------------------------------------------------

#version=12.1.28

# bug fix: 12.1.27 writing of script lists # /*file*/ inappropriately.
# bug fix: 12.1.27 isosurface area is 1/3 actual.
# bug fix: isosurface molecular/solvent better version, adds tripod-test logging
# bug fix: write xxx.jmol can fail if the same file is used twice in two different contexts

# --------------------------------------------------------------

#version=12.1.27

# new feature: isosurface molecular FULL
# new feature: isosurface solvent [optionalRadius default:1.2] FULL
#    -- very fast solvent excluded surface
#    -- FULL option does reduced-surface analysis, 
#    -- uses Marching Cubes to create the surface
#    -- very close fit to MSMS; slightly smaller area and volume
#    -- replaces work from 12.1.24
#    -- use isosurface SET 1 generally
#    -- irrelevant inner surface removed due to negative volume.
#       TODO: test for this with cavities
# new feature: isosurface MSMS xxxx.vert  -- creates isosurface from MSMS output files
#   -- implies xxxx.face is also present in the same directory as xxxx.vert.
#   -- if only .vert are present, only dots will be generated
# new feature: QuantumEspresso reader
# new feature: GULP reader  
# new feature: isosurface/draw .length (also added to 12.0.26)

# bug fix: isosurface sets not sorted by number of vertices 
# bug fix: failure to create atomicOrbital does not clear that isosurface
# bug fix: popup menu does not show load {1 1 1} options correctly
# bug fix: draw intersection/polygon without vertices does not clear existing object
# bug fix: isosurface slab for plane not working
# bug fix: space before [ not recognized as significant when following $xxx or {...}
# bug fix: undocumented $isosurface1[3] fixed
# bug fix: isosurface set 0  does not display all sets

# --------------------------------------------------------------

#version=12.1.26

# new feature: write SDF creates multi-model SDfile based on models of selected atoms
# new feature: write V3000 creates V3000 file; see http://www.symyx.com/downloads/public/ctfile/ctfile.pdf
# new feature: the list of languages in the popup menu  
#   -- is ordered by language code
#   -- displays each language name both in the current language and in the native language
#   -- is updated adding a new language if this is chosen via script (or maybe by the OS default)
# new feature: plane(pt1, pt2) -- returns bisecting plane
# new feature: draw SLAB $draw1 PLANE @{plane({...} {....})}
#   -- clips a drawn polygon based on a plane
#   -- $draw1 must be a draw POLYGON definition
#   -- draw draw1 SLAB $draw1... is allowed
#   -- for example:
#   draw p4 polygon 4 {1 2 3} {2 3 4} {4 5 6} {7 8 9} 2 [0 1 2 0] [2 3 0 0]
#   draw p4 slab $p4 PLANE @{plane({0 0 0}, {10 0 0})}
# new feature: measure list  -- same as show measurements

# bug fix: GenNBO reader does not read MOs properly
# bug fix: GenNBO reader does not read UHF data
# bug fix: GenNBO reader does not read xxx.31 file P orbitals not in X Y Z order
# bug fix: applying unit cell in LOAD command to XYZ file containing multiple models 
#          does not convert later model coordinates to fractional ones.
# bug fix: Web Export and write xx.jmol fail for load XXX:: forcing file type
# bug fix: write MOL creates V2000 file
# bug fix: over-run of SDF, MOL/V2000 reports error
# bug fix: assigning array elements using x[i] = pt, where pt is a 
#          variable that is a cartsian point or a plane does not copy variable
# bug fix: SMILES generator in certain cases may not return stereochem (c-C(OH)(H)-c)
# bug fix: mistyped command such as measure LIST (with LIST present) crashes Jmol
# bug fix: pop-up menu after zap 1.1 in set of two models crashes Jmol

# code: V3000Reader integrated into MolReader
# code: JUnit test for file reading GenNBO and CIF files lacks viewer object

# --------------------------------------------------------------

#version=12.1.25

# new feature: default for loading of CIF files with GEOM_BOND records is to load them
#   -- as full molecules (symop=1 or connected to such (or within autobonding range of such)
#   -- without unit cell 
#   -- Cartesian coordinates
#   -- similar to the way CCDC Mercury loads these files
#   -- attaches H atoms and otherwise respects GEOM_BOND designations explicitly
# new feature: CIF load FILTER "MOLECULAR" 
#   -- does molecular load even when no GEOM_BOND records
#   -- defaults to {1 1 1}
# new feature: pop-up menu includes load "" FILTER "MOLECULAR" option (under SYMMETRY...)

# bug fix: failure to read properly data "connect_atoms" from state 
#          when struts or hbonds turned OFF
# bug fix: 12.1.16-24 fail to write state properly -- saved settings not saved
# bug fix: CIF reader does not recognize -1 for _atom_site_disorder_group
# bug fix: VaspOutcarReader misreads file with line containing "Therefore set LREAL=.FALSE. in the  INCAR file"

# code: rename VaspReader VaspOutcarReader

# --------------------------------------------------------------

#version=12.1.24

# new feature: streamlined STATE for appended files
# new feature: Jmol SMILES generation includes stereochemistry 
#              for octahedr	al and trigonal bipyramidal 

# bug fix: isosurface t.obj should be discernable as OBJ if created by PyMOL
# bug fix: set drawPicking does not pick visible isosurfaces
# bug fix: draw * translucent does nothing
# bug fix: isosurface on frame other than first will be incorrect
# bug fix: draw with multiple models can fail to save state
# bug fix: SMILES check for c=c can fail.
# bug fix: Mopac MGF reader upgrade allows orbital subset
# bug fix: Mopac MGF reader upgrade allows filter "alpha", filter "beta"
# bug fix: isosurface OBJ pymol.obj not reading Pymol output
# bug fix: appending data to models with unit cells can cause odd results
# bug fix: JME load append does not get saved properly in state
# bug fix: bond set variables [{1 2 3}] incorrectly shown as atom bitsets ({1 2 3}) 
# bug fix: xxx.yyy when "yyy" has been defined as a local variable using VAR fails
# bug fix: find("SMILES", smilesString) does not find Jmol atomIndex == 0
# bug fix: find("SMILES", smilesString) does not find [2H]
# bug fix: slightly better response to command line input errors (complete command in history)
# new feature: print point(3.5) -- rounds down (toward 0) to nearest integer
# bug fix: IDTF exporter inverts rotation matrix from pt1, pt2, for dx = dy = 0
# bug fix: Linux file completion from LOAD "  improperly lowers the case of file names
 
# --------------------------------------------------------------

#version=12.1.23

# bug fix: labels OFF broken in 12.1.22

# --------------------------------------------------------------

#version=12.1.22

# new feature: P2N reader -- see http://q4md-forcefieldtools.org/
#    -- adds "altName" auxiliary data
#    -- allows FILTER "altName"
#    -- allows label %{altName}
# new feature: label %{dataName}  -- UNDOCUMENTED
#    -- allows reading values from a DATA array.
#    -- case-sensitive
#    -- data are read sequencially as string data, one per data line.
#    -- if data of that name are not found, looks for data in auxiliaryInfo of that name.
#         and bases the index as atom index relative to the model.
# new feature: Edit...Preferences...Clear History 
#    -- resets window positions and clear all history. 
#    -- thank you, Tami Caraballo!
# bug fix: zap 1.1 when models have cartoons or other bioshapes crashes Jmol
# bug fix: Ramachandran approximation of P straightness off by a few percent
# bug fix: SMILES matching string with ".[C@H]" reads stereochemistry incorrectly
# bug fix: load SMILES with %nn fails 
# bug fix: Jmol creating possibly ambiguous aromatic amine SMILES
#          1-H-4-methylimidazole was: n1cnc(C)c1; now: [nH]1c[n]c(C)c1 
# bug fix: {*}.find("SMILES",smilesString) does not include aromatic H
# bug fix: Smiles MF calculation for aromatic atoms N and C in error.
#    NOTE: Jmol may undercount the number of hydrogen atoms
#          for aromatic amines where the ring bonding to N is 
#          not explicit. Each "n" will be assigned a bonding count
#          of two unless explicitly indicated as -n-.
#          Thus, we take the position that "n" is the 
#          N of pyridine unless otherwise indicated.
#         
#          For example:
#            $ print "c1ncccc1C".find("SMILES","MF")
#            H 7 C 5 N 1   (correct)
#            $ print "c1nc-n-c1C".find("SMILES","MF")
#            H 6 C 4 N 2   (correct)
#          but
#            $ print "c1ncnc1C".find("SMILES","MF")
#            H 5 C 4 N 2   (incorrect)

# code: efficiencies in LabelToken

# --------------------------------------------------------------

#version=12.1.21

# new feature: set allowMoveAtoms
#    -- automatically sets/unsets allowRotateSelected and dragSelected
#    -- ALT-left --> rotates selected set
#    -- ALT-SHIFT-left --> drags selected set

# bug fix: popup submenu "file" only enabled for application or signed applet 
# bug fix: load xxx.jmol broken in 12.1.17
# bug fix: write JMOL missing from popup menu

# --------------------------------------------------------------

#version=12.1.20

# bug fix: WRITE PDB not padding to 80 char
# TODO: WRITE PDB not adding TER records
# bug fix: PDB reader not flagging models as PDB properly when all groups are same amino acid

# --------------------------------------------------------------

# version=12.1.19

# new feature: (Application) toolbar "set picking center"

# bug fix: bad build of 12.1.18 for distribution

# --------------------------------------------------------------

# version=12.1.18

# bug fix: 12.1.17 breaks popup menu
# bug fix: relaxing single-model requirement for isosurface
#          as long as only a single model's atoms are selected

# --------------------------------------------------------------

# version=12.1.17

# new feature: "getPopupMenu" added to JmolViewer.getProperty("DATA_API","getPopupMenu","current"|null)
#    -- null --> java.awt.Container
#    -- "current" --> current menu
# new feature: isosurface ROTATE <quaternion>
#    -- rotates an isosurface based on a quaternion
#    -- a display property, like OFFSET or SCALE3D
#    -- useful if model coordinates are changed and an isosurface is present
#    -- rotations are cumulative.
#    -- rotations are about {0 0 0}, not the centroid of the isosurface
#    -- ROTATE NONE removes the rotation
#    -- for example:
# 
#          isosurface sasurface ROTATE @{quaternion({1 0 0}, 90)}
#          isosurface ROTATE @{quaternion({1 0 0}, 90)} ROTATE @{quaternion({0 0 1}, 90)}
# new feature: reset STRUCTURE -- resets structure to author's after calculate STRUCTURE
# new feature: load OFFSET {x y z} 
#    --follows UNITCELL parameter, if present
#    --offsets the atoms in the file by a given amount
#    --may be fractional
#    --added to allow for shifts in origin for nonstandard CIF files
#    --applicable to ALL readers
#    --for example:
#         load quartz.cif {1 1 1} spacegroup "ignoreoperators" offset{0 0 2/3}
#         load caffeine.xyz offset {8.0 0 0}
#              

# bug fix: no callback for ZAP model=1
# bug fix: compare(...) with @SP, @OH, @TB gives null pointer exception
# bug fix: set picking invert stereo/delete atom  not sending pick callback
# bug fix: Argus .agl reader not setting viewpoint transform
# bug fix: load xxx where x is a flawed data file can try to load file as a script or isosurface
# new feature: VASP OUTCAR reader (xtal/VaspReader)
# bug fix: compiler function(){{ double brace error
# bug fix: compiler context { var chain=3;print chain } not recognizing context variable for "chain"
# bug fix: PDB reader not reading files with empty group name field
# bug fix: popup menu does not include measure SEQUENCE
# new feature: auxiliaryInfo.models[1].infoUnitCell
#    -- 17-element array
#    -- a, b, c, alpha, beta, gamma
#    -- Va, Vb, Vc
#    -- dimension = 1 (polymer), 2 (slab), 3 (standard)
#    -- volume (Angstrom^3)
#
# bug fix: set picking measure SEQUENCE not reporting to application console
# bug fix: (application only) distance picking not being reported in console
# bug fix: set picking chain, then mouse click does not report number of atoms selected
# bug fix: LINUX file dropper returning \r\n with name
# bug fix: DRAW $xxx reverses order of points
# bug fix: load PACKED for slab/polymer does not work 
# bug fix: load "" does not work after loading a SET of models using load DATA
# bug fix: CIF reader cannot read files with _space_group_symop_operation_xyz field

# --------------------------------------------------------------

#version=12.1.16

# new feature: function calls can look like Jmol commands (also added to 12.0):
#      function myfunc(a, b, c, d){....}
#      myfunc a b c d
#      -- these are MATHEMATICAL commands 
#      -- use just a b, not @a @b
#
# new feature: custom overloading of Jmol commands (also added to 12.0)
#      function measure(a, b) { print "measuring " + a + " " + b; measure @a @b }
#      measure {atomno=2} {atomno=3}
#      -- within function X, command X is standard Jmol; 
#      -- outside the function, it is a reference to that function
#      -- overloaded functions are not saved in the state
#
# new feature: load xxx.pdb filter "CONF 1" does a front-end filter of just
#          the first alt-loc atoms within a given residue. This leads to proper
#          formation of polymers in certain cases (2BLN, 2CI1).

# bug fix: naming functions or variables after Jmol token names fails or acts unexpectedly
#          (fixing this bug required script compiler changes, and that lead to the
#           two new features below)
# bug fix: User variables and functions removed from state because they are 
#          no longer necessary and also indeterminant in terms of the "state".
#          Originally these were needed because ECHO and DEFINE can be dynamic
#          -- which is still true -- and because certain commands such as ISOSURFACE
#          were being saved in the state just as their strings instead of their 
#          intepreted code. But that was changed for 12.0, and this fix also changes 
#          ECHO to be saved in its current state, not its dynamic state. While 
#          dynamic DEFINE types may include variables, they aren't really
#          part of the "state" per se and aren't needed to recreate the state. So
#          they are dropped from the state with this fix as well. 
# bug fix: array variable elements cannot be changed
# bug fix: "var chains" does not work -- i.e. a name of a "within" option. 
#          solution was to allow var ANYTHING, understanding that if you 
#          use "var CARTOONS" for instance, then CARTOONS ON is no longer
#          a command within the scope of that assignment.
# bug fix: cartoon helix in 1TF6 broken by DSSP HHHGGG run
# bug fix: not loading MOL files having no bonds
# bug fix: load append INLINE ... not working
# bug fix: max for Rasmol/chime units 499 -- should be 1000
# bug fix: show state/xxxx incorrectly case-sensitive

# code: undocumented load RANGE [i, j, k,...] removed (see load MODELS)
# code: load FILTER clean-up, standardization

# --------------------------------------------------------------

#version=12.1.15

# feature change:  DSSP default for "calculate structure" 
#    -- old way is now "calculate structure RAMACHANDRAN"
# feature change:  DSSP default for LOAD of PDB file with no header.
#   in previous versions, Jmol used a ramachandran-angle-based calculation
#   for secondary structure determination when a PDB file had no HELIX or SHEET records.
#   It just seems reasonable to use the industry-standard DSSP method instead.
# new feature: PDB and CIF readers read helix subtypes alpha, 3/10, and pi  
# new feature: atom property substructure includes helixalpha(8), helix310(7) and helixpi(9)
# new feature: defaultStructureDSSP  (default TRUE)
#   --setting this FALSE gives previous behavior (see above)
#   --for the CALCULATE STRUCTURE and LOAD commands
#   --in the case of LOAD, only relevant when PDB header is missing HELIX/SHEET records
#
# bug fix: QCHEM reader fails
# bug fix: CRYSTAL reader fails to read formico_opt.out
# bug fix: CIF reader not reading insertion codes (since forever!)
# bug fix: set appendNew FALSE fails
# bug fix: getproperty IMAGE (returning JPG64) doubles font size with set antialiasDisplay true
# bug fix: "configuration 1" should select all if no alternative locations
# bug fix: load FILTER does not include %x for PDB files
# bug fix: conformation n  definition changed for PDB files to be consistent with DSSP
# bug fix: isosurface "xxxx.jvxl" colorscheme "rwb" does not work (jvxl files specifically)

# code: http://jmol.svn.sourceforge.net/viewvc/jmol/trunk/Jmol-datafiles/dssp/cullpdb_pc20_res1.6_R0.25_d101001_chains1769
#         was used for DSSP validation along with checkdssp.spt in that same directory
#

# --------------------------------------------------------------

#version=12.1.14

# new feature: "xxxx"%9999 == "to upper case"; "xXxX"%-9999 == "to lower case"
# new feature: Accurate DSSP structure determination should be identical to DSSP
#              using CALCULATE STRUCTURE DSSP
#
#   Also available is a version that takes into account already-determined
#   amide hydrogen positions using SET dsspCalculateHydrogenAlways FALSE
#
#   DSSP details available using SHOW DSSP
#   DSSP debugging available with SET DEBUG
#   DSSP structure-determining hydrogen bonds available with CALCULATE HBONDS STRUCTURE
#   DSSP substructure (helix310 and helixPI) available with SELECT HELIX310 and SELECT HELIXPI
#         -- for an example of helixPI (>>555<<), see 2JC9
#
# new feature: show state/xxxxx   where xxxxx is any phrase. Does a line-by-line filter of the
#              state script for xxxxx. So, for example:
#
#   show state/load
#   show state/isosurface
#   show state/hbond
#   show state/draw
#   show state/measure
#   show state/connect
#        
# new feature: STRUCTURE HELIX310 ....
# new feature: STRUCTURE HELIXPI ....
#
# new feature: calculate hbonds STRUCTURE (only those that define the DSSP "HGITEB" markings)
# new feature: set dsspCalculateHydrogenAlways (default TRUE -- standard DSSP; set to FALSE
#              to ensure that file-based NH atoms are used instead of rough approximations)
# new feature: show DSSP  (just produces a report)
# new feature: calculate structure DSSP
# new feature: load reports model count and overall number and model number for MOs 
# new feature: helix310 and helixPI structures may be set using the STRUCTURE command
# new feature: select helix310 and select helixPI -- provided those have been set. 
#              Note that select HELIX only selects "4-turn" aka "alpha" helices, as previously.
#
# new feature: load SUPERCELL "2x, x+y, 2z"
#              load SUPERCELL {2 2 2}
#              load {20 20 2} SUPERCELL {2 2 2}
# new feature: new 5th parameter for measureCallback is actual, unrounded value
#

# bug fix: conformation n  definition changed for PDB files to be consistent with DSSP
# bug fix: hetero group protein check should not care about C CA N O file order (1YC5)
# bug fix: conformation not working when an alternate location is for key atoms such as N, C, O, CA
# bug fix: loading a multi-structure PDB file with CONECT bonding may not autobond (2q3t)
# bug fix: undocumented save STRUCTURE not working for initial structure state
# bug fix: calculate structure only works with last model loaded
# bug fix: calculate structure after zap x.y fails
# bug fix: GAMESS reader (US) not reading full atom name such as "MOLYBDENUM"
# bug fix: load append after calculating structure recalculates structure for other models
# bug fix: calculate structure does not target selected model
# bug fix: bioshapes not clearing automatically after calculate STRUCTURE
# bug fix: switch DEFAULT not working
# bug fix: label %1 will cause exception
# bug fix: load '@x' not saved properly in state
# bug fix: arrays of hashtables and other more complex variables not being saved or created in usable form
# bug fix: isosurface MEP with multiple frames fails on second isosurface
# bug fix: //comments not searched properly for GOTO operation
# bug fix: data "connect_atoms" does not update bond diameter, order, or energy
# bug fix: %8.4VALUE still truncating in set defaultdistancelabel

# code: removal of unnecessary structure class in ModelCollection
# code: Efficient Java bitset-based DSSP calculation based solely on a careful reading of
#       W. Kabsch and C. Sander, Biopolymers, vol 22, 1983, pp 2577-2637
#       with detailed quote-based comments from the article explaining the process.
#       Includes options to create the structures, just make a report, or just deliver a set of
#       hydrogen bonds. (MUCH appreciated permission by Gert Vriend to implement DSSP as open-
#       source Java code in Jmol.)
#
# --------------------------------------------------------------

#version=12.1.13

# new feature: hide/display bonds
# new feature: hide/display [{bond set}]
# new feature: set STRUCTURE HELIX|SHEET|TURN [a, b, c, d, a1, b1, c1, d1,...]
#    allows customization of Jmol's phi/psi-based structure calculation
#    phi >= a && phi <= b && psi >= c && psi <= d 
#  || phi >= a1 && phi <= b1 && psi >= c1 && psi <= d1 
#  etc.

# bug fix: unbind unknownName unbinds LEFT mouse!
# bug fix: Safari slideZoom issue upon leaving and returning to applet (mouse MOVE not issued by OS)
# bug fix: naming a variable after a function name such as "color" should be allowed
# bug fix: "smilesString" changed to "_smilesString" and properly set
# bug fix: Application filename for $xxxx not properly set
# bug fix: language changing doesn't set tool tips
# bug fix: MEP menu item is using MOLECULAR with default range; should be using VDW with range ALL
# bug fix: unescaped spaces in load "$ethyl ether" cause fault at NIH.
# bug fix: error writing isosurface color density JVXL file
# bug fix: catch without catch(e) causes exception
# bug fix: isolated H atoms when calculating hydrogen bonds causes exception
# bug fix: Spartan reader not reading INPUT file coord -- adding filter "INPUT"
# bug fix: calculate structure requiring {xxx}

# code: deprecated "commandOption" shape property removed

# --------------------------------------------------------------

#version=12.1.12

# bug fix: reading unmapped isosurface from JVXL files broken in 12.0.13

# code: JmolViewer interface Component display --> Container display (JPanel, JFrame, JDialog)
# code: consoles work
# code: examples get proper termination upon window closing

# --------------------------------------------------------------

#version=12.1.11

# new feature: set multipleBondRadiusFactor 0.75
# new feature: multipleBondSpacing
#   set multipleBondSpacing = -1 (default, varies with viewing angle)
#   set multipleBondSpacing = -0.5 (half that distance; varies with viewing angle)
#   set multipleBondSpacing = 0.35 (positive ==> fixed multiple bond spacing)
# new feature: set isosurfacePropertySmoothingPower
#   0 (no property smoothing)
#  10 (very strong smoothing)
#   7 (default, same as Jmol 11.8)
# new feature: AppletConsole allows embedding in larger applications
# new feature: smooth on-the-fly language changes in applet and application
# new feature: integrated AppConsole for embedded Jmol -- see Integration.java

# bug fix: MO NOPLANE not working
# bug fix: SmarterJmolAdapter should not read zip bytes it doesn't have to 
# bug fix: spacefill JMOL does not work
# bug fix: Jmol 12 does not read old 11.1 isosurface commands from states
# bug fix: load {i j k} RANGE x.x not expanding load box by 1 in each direction
# bug fix: applet console does not display startup message
# bug fix: console buttons do not change with new language
# bug fix: undo/redo problems in AppConsole
# bug fix: crystal reader can't read selected model
# bug fix: 3.5E+0.0 read as "3.5 0.0"
# bug fix: navY/navy color issue
# bug fix: write PDB for nonPDB files incorrect

# code: streamlined AppConsole and AppletConsole
# code: GuiMap/JmolConsole AbstractButton methods merged
# code: AppConsole now implements JmolCallbackListener, called by JmolPanel.notifyCallback

# --------------------------------------------------------------

#version=12.1.10

# new feature: Spartan reader filter "ESPCHARGES" for ESP charges, if available, instead of Mulliken charges
# new feature: reset SPIN
# new feature: set slabRange 5.0 -- a zoom-independent slabbing plane

# bug fix: JavaScript jmolScriptWait() can fail
# bug fix: mep color range error (12.1.9, 12.0.11)
# bug fix: color structure for carbohydrate fails
# bug fix: reset should not reset spin (introduced in 11.7.47); new RESET SPIN includes reset spinning
# bug fix: SMILES generator allowing sp3 center in aromatic
# bug fix: storing atom properties from CrystalReader messes up model atom bitset 
# bug fix: non PDB large molecule should not change default rendering 
# bug fix: PDB large molecule default rendering flaws

# --------------------------------------------------------------

#version=12.1.9

# new feature: label %[shape]
# new feature: lcaoCartoons sp3d (a,b,c,d,e), sp3d2 (a,b,c,d,e,f)

# bug fix: set usercolorscheme not working. 
# bug fix: color label none when already none and after rendering for multi-line labels or with antialiasdisplay crashes Jmol
# bug fix: lcaoCartoon p orbitals for CO2
# bug fix: isosurface ISSQUARED
# bug fix: PLOT command broken (Parser.parseStringInfestedFloatArray)
# bug fix: color PROPERTY x   with set rangeSelected does not work
# bug fix: isosurface contour colors
# bug fix: #....... #.... two # in one line with first in first character fails
# bug fix: isosurface plane problems
# bug fix: set drawHover isosurface hover error kills hover watcher
# bug fix: isosurface "t.jvxl" map property temperature nonfunctional
# bug fix: isosurface PROPERTY ("VDW 100%" implied) not working
# bug fix: WRITE xxx should do SHOW not clipboard for application
# bug fix: % at end of line acts as a line continuation
# bug fix: "sp3a" not "first bonded atom"
# bug fix: failure to read old-style JVXL files. 
# bug fix: reading nth model from a file within a ZIP collection not possible

# code: AtomPropertyMapper isolated from IsoSolventReader
# code: rewrite of calculateHydrogen/hybridization code

# --------------------------------------------------------------

#version=12.1.8

# bug fix: LcaoCartoon capping/slabbing not saved in state
# bug fix: isosurface planar mapping, contours, atomic orbital speed and scaling problems
# bug fix: oops; isosurface atomicOrbital REALLY not scaling well

# --------------------------------------------------------------

#version=12.1.7

# new feature: load SMILES to use http://cactus.nci.nih.gov/chemical/structure/..../file?format=sdf&get3d=True
# new feature: zSlab, zDepth -- default 0,0 meaning "use slab and depth" settings
# new feature: slab and depth are variables and can be read and set as for any other
# new feature: Vasp reader shows enthalpy and Gibbs energy in model name
# new feature: getProperty can drill down a list for a hashtable entry:
#   print getProperty("shapeInfo.isosurface.id")
#     s2
#     isosurface1

# bug fix: isosurface atomicOrbital not scaling well
# bug fix: undo and smilesurlformat tokens missing
# bug fix: isosurface ... map SQUARED ... nonfunctional
# bug fix: exit, quit are stopping spinning -- should just be stopping moveTo
#          unless !exit or !quit.
# bug fix: associative array problems with some auxiliaryInfo data saving to state
# bug fix: binary map files within zip directories cannot be read
# bug fix: mouse-based slab does not refresh
# bug fix: JME reader misreading "Br+"
# bug fix: Writing PDB file with residue number > 9999 trashes file. Now writes "0000" "0001" etc. 

# --------------------------------------------------------------

#version=12.1.6

# bug fix: very first start of Jmol, with no history, fails.
# bug fix: QChem reader not indicating symmetry A B properly
# bug fix: QChem reader filter "BETA" fails
# bug fix: obscure error when array variable is in place of required expression
# bug fix: ColorEncoder not allowing for override of BW and WB palette
# bug fix: GAMESS reader UHF caught on reading orbitals with LZ VALUE line

# code: ColorEncoder cleaner, no inappropriately static classes

# --------------------------------------------------------------

#version=12.1.5

# new feature: color() function:
#   color("") -- full details on current propertyColorScheme
#   color("$someID") -- full details on isosurface ID "someID" color scheme
#   color("xxx") -- full details for a named scheme where "xxx" is "rwb", for instance
#   color("myscale = [xFF0000] [	x00FF00] [x0000FF]") creation of a scheme and return of details
#   color("roygb", n) -- nth color of a standard color scheme
#   color("", x.y) -- color for a property value x.y
#   color("$someID", x.y) -- color for isosurface ID "someID" value x.y
#   color("roygb", min, max) -- color/value pairs (two arrays)
#   color("roygb", min, max, value) -- color for specific value
#   print color("myscale = [xFF0000] [x00FF00] [x0000FF]")
# colors	:
# {255.0 0.0 0.0}
# {0.0 255.0 0.0}
# {0.0 0.0 255.0}
# 
# max	:	4.0
# min	:	1.0
# name	:	myscale
# reversed	:	false
# values	:
# 1.0
# 2.0
# 3.0
# 4.0
#
# print color("myscale = [xFF0000] [x00FF00] [x0000FF]", 0, 10, 0)
# {255.0 0.0 0.0}
#
# The scheme is constructed, so it can be used later:
#
# print color("myscale", 0, 10, 5)
# {0.0 255.0 0.0}
# 
# new feature: getProperty shapeInfo reports colorKey for isosurfaces:
#   getproperty shapeInfo.isosurface[1].colorKey
#
# shapeinfo.isosurface[1].colorkey.colors	*List[31]	
# shapeinfo.isosurface[1].colorkey.colors[1]	{255.0 0.0 0.0}
# shapeinfo.isosurface[1].colorkey.colors[2]	{255.0 0.0 0.0}
# ...
# shapeinfo.isosurface[1].colorkey.colors[31]	{16.0 16.0 255.0}
# shapeinfo.isosurface[1].colorkey.color	{255.0 165.0 0.0}
# shapeinfo.isosurface[1].colorkey.values	*float[32]	[50.0,48.387096,46.774193,...,0.0]
# shapeinfo.isosurface[1].colorkey.name     "roygb"
# shapeinfo.isosurface[1].colorkey.max      31
# shapeinfo.isosurface[1].colorkey.min      1

# bug fix: set defaults RASMOL broken
# bug fix: CRYSTAL reader FREQUENCY needs fragment numbers sorted
# bug fix: rotation QUATERNION broken by 11.9.36, Mar 25, 2009 - Does not rotation about {0 0 0}
# bug fix: CURSOR_WAIT hourglass not turning off automatically after set picking JmolScript operation
# bug fix: associative array function .keys should report sorted key list
# bug fix: associative arrays as ScriptVariables must be checked for type
# bug fix: associative array key sorting, new line for arrayed values
# bug fix: isosurface color range should not carry over to general "color property"  
# bug fix: isosurface colorscheme TRANSLUCENT "xxx" fillTriangle error
# bug fix: should not allow isosurface ... map colorscheme "xxx" TRANSLUCENT
# bug fix: CRYSTAL reader FREQUENCY when input deck is missing VIBRATION record

# --------------------------------------------------------------

#version=12.1.4

# new feature: isosurface display within 2.0 {atomset} -- renderable subset of isosurface
# new feature: isosurface display all

# bug fix: CRYSTAL reader not allowing {555 555 0} load
# bug fix: CRYSTAL reader orientation error
# bug fix: show info not showing molecule info
# bug fix: isosurface LATTICE {x y z} should be relative to current UNITCELL
# bug fix: broken selectExtended mode
# bug fix: some isosurface display properties not generalized to wildcard
# bug fix: Parallel processing not creating process-specific copies of shapes
# bug fix: load unitcell for slab/polymer should allow 0, not just -1
# bug fix: diastereomer check still checking stereochemistry 
# bug fix: SMILES generator should not produce stereochemistry for RX2R'

# --------------------------------------------------------------

#version=12.1.3

# new feature: load "myfile.xxx" {1 1 1} unitcell [ax ay az  bx by bz  cx cy cz]
# new feature: x = compare({atomset1}, {atomset2}, "ISOMER")
# new feature: x = compare(smilesString1, smilesString2, "ISOMER")

# bug fix: set picking invertStereo not working for non-ring stereocenters
# bug fix: "CCCC".find("SMILES","CCCC") should return 1 (other returns 0 and -1)
# bug fix: "CCCC".find("SMARTS","CCC") should return [1,5,8,11] (other returns [] and "?"
# bug fix: SmilesGeneration stereochemistry error 
# bug fix: "smilesString".find("smarts","pattern") should return "?" upon parsing error
# bug fix: proper "false AND"/"true OR" action where second operand is skipped

# --------------------------------------------------------------

#version=12.1.2

# new feature: Application Display menu item "resize" (also added to 12.0)

# bug fix: SmilesGeneration fails for double bond stereochemistry
# bug fix: documented within("SMILES",...) missing and required for SmilesGenerator
# bug fix: select within(branch,{},{}) exception
# bug fix: "sheet" token missing, so select within(sheet) fails
# bug fix: struts not restored from state
# bug fix: color STRUTS also colors hbonds
# bug fix: draw CYLINDER n ... where n is an integer does not give flat ends
# bug fix: PNG file state for multiple file load cannot be read
# bug fix: Jmol application not accepting -g
# bug fix: "no atoms found returns wrong error message
# bug fix: XYZ reader fails with load "filename" 3
# bug fix: "[1,3,4,5]" can be translated to [1,3,4] 
# bug fix: slab/depth mouse action does not automatically refresh

# code: Java 1.5 upgrade -- many generics still have warnings

# --------------------------------------------------------------

#version=12.1.1

# bug fix: measure search("...{X}....{X}...") does not work
# bug fix: draw arrows are being FIXED in state
# bug fix: if ( )....; single-line syntax broken
# bug fix: try/catch in functions not implemented correctly
# bug fix: SMILES nested $(...) broken
# bug fix: binary pmesh reader broken
# bug fix: better coding for isosurface file typer
# bug fix: print write("ramachandran")
# bug fix: reading background images from PNG images within zip files
# bug fix: write xxxx.jmol zip sets cannot be read
# bug fix: binary surface readers map and ccp4 can misread file type
# bug fix: isosurface "=xxx" missing check for isSyntaxCheck
# bug fix: isosurface slab for polymer/slab symmetry

# --------------------------------------------------------------

# version=12.1.0

# July 28, 2010

#version=12.0.50_dev

# bug fix: AtomSetChooser set up too late -- can override embedded jmolScript vibration/vector scale commands

# --------------------------------------------------------------

#version=12.0.49

# bug fix: show colorscheme "high"   causes exception 
# bug fix: CONTINUE in switch within  for or while loops infinitely
# bug fix: select deuterium, HOH, _1H, _H1 isotope business messed up
# bug fix: isosurface parameters @x  does not work even when x is an array 
# bug fix: ++ipt; not working
# bug fix: zap of model with measurements causes exception
# bug fix: PDB reader may read bfactors off by 0.01 
# bug fix: isosurface slab -@xxxx... will negate variable xxxx if it is a plane

# --------------------------------------------------------------

#version=12.0.48

# bug fix: try {} does not pass VAR variables into its context.
# bug fix: catch(err) not setting variable "err"
# bug fix: CML files with atoms starting with both aNN and aNN_ will not bond correctly 
# bug fix: set fontScaling does not scale offset with font
# bug fix: application Help menu item no long pushed right.

# --------------------------------------------------------------

#version=12.0.47

# bug fix: definition of CARBOHYDRATE was updated:
#  -- [A2G],[NGA],[SIA],[SLB],[LBT],[NDG],[AMU] added (GalNAc, NeuNAc, lactose, GlcNAc, MurNAc)
#  -- [ASF],[NAM] removed, they are no longer carbohydrates
#  -- a few existing ones are deprecated by PDB; they are left for compatibility 
#       but are now listed as such (maybe remove them in future).
# bug fix: Bad Jmol.js
# bug fix: draw pointgroup fixed to first model

# --------------------------------------------------------------

#version=12.0.46

# bug fix: _smilesString variable not being cleared when a PDB file is loaded
# bug fix: WebMO reader fails to read HOMO/LUMO business.
# bug fix: throwing script parsing error on correct "isosurface slab within [4 elements
#         representing the slab box]" (was losing last "]").
# bug fix: (application) Jmol console not receiving echo messages
# bug fix: UFF full listing (set loglevel 6;minimize steps 0;show minimization) missing n and cosNphi0 in torsions
# bug fix: PQR reader mistaking " HD3" as deuterium

# --------------------------------------------------------------

#version=12.0.45

# bug fix: isosurface cavity algorithm error makes cavity too large
# bug fix: font labels 16 bold   does not work (i.e. missing face)

# --------------------------------------------------------------

#version=12.0.44

# bug fix: set appendNew false; load =1q0y; load APPEND =1crn causes exception
# bug fix: lcaoCartoon does not get hidden when atom deleted
# bug fix: isosurface SELECT should also set model index
# bug fix: isosurface mesh incompatible with fullylit and frontonly
# bug fix: navigate broken
# bug fix: modelKit dragMinimizeAtom broken in 12.0.43
# bug fix: dragMinimize should select all non-fixed atoms if there are fixed atoms
# bug fix: write @{"xxxx"} fails
# bug fix: isosurface ... map VDW -- mapping not saved in state
# bug fix: CRYSTAL reader does not read vibrations for atoms with two-character symbols
# bug fix: third oxygen atom in 5'-terminal phosphate was not assigned to backbone (e.g. 4tna.pdb)
# bug fix: cartoons with hermite level do not reposition for atom position changes or trajectories
# bug fix: isosurface plane x=-1 (with no spaces) not accepted 
# bug fix: x = write("VRML") should give VRML contents and not write to disk
# bug fix: defined @ variables not indicating changes when models are deleted
# bug fix: calculate structure RAMACHANDRAN broken in 12.0.18
# bug fix: update in Jmol.js: Java version detection got broken in Mac Firefox 4.0.1 (part of browser compatibility test)

# --------------------------------------------------------------

#version=12.0.43

# bug fix: undocumented "redo" "undo" application-only commands changed to "redocmd" "undocmd"
# bug fix: transcient halos not always transient for dragSelected
# bug fix: FIX command not working properly
# bug fix: select within(chain, atomno=xxx) will not select all desired atoms
#          if the chain is spread out over multiple regions of the file (1gzx)
# bug fix: set dragselected may not turn off transient selection halos 
# bug fix: undo (CTRL-Z) and redo (CTRL-SHIFT-Z/CTRL-Y) not implemented for dragSelected
# bug fix: molecules incorrectly assigned for covalently attached cofactors, such as HEM (1gzx)
# bug fix: set picking dragMolecule then use of SHIFT after rotate COMPARE will result in unwanted translation

# --------------------------------------------------------------

#version=12.0.42

# bug fix: quaternion N frame off slightly due to bisection error.
#   -- also affects Rasmol hydrogen bond calculation
# bug fix: select a will not select P-only DNA adenosines (1jgq)
# bug fix: select A and select a  may be different for P-only DNA strands (1jgq)
# bug fix: properties of type float[][] not saved as ScriptVariable lists
# bug fix: AIMS reader upgrade to include atom/atom_frac line mix
# bug fix: PSI3 reader for WebMO
# bug fix: data connect can cause null pointer exception if data statement has white-space-only lines

# --------------------------------------------------------------

#version=12.0.41

# bug fix: { echo testing } causes compiler error
# bug fix: { echo "testing" } causes compiler error
# bug fix: cannot access site_xxx definitions created by PDB file read
# bug fix: echo myecho ... after echo ALL still does ALL
# bug fix: isosurface CAVITY cannot be mapped
# bug fix: PDB load filter mix of (CONF or BIOMOLECULE) and chain filter such as *:A will include additional chains ("C", "O", "N", "S", etc.) 
# bug fix: application load menu unnecessarily creates new frame and loses current script processing

# --------------------------------------------------------------

#version=12.0.40

# bug fix: set picking identifyBond  not implemented
# bug fix: leaving modelKitMode does not leave bondPickingMode "identifyBond"

# --------------------------------------------------------------

#version=12.0.39

# bug fix: menu labels incorrect in 12.0.38

# --------------------------------------------------------------

#version=12.0.38

# bug fix: for(_x...) not disallowed
# bug fix: Spartan .smol files: default for charges is now ESPCHARGES (what SpartanStudent reports), not MULLIKEN
#  -- filter "MULLIKEN" now reads those charges
# bug fix: {*}.resno, .atomno, etc. where the property is an integer returns sum, not average
# bug fix: closing a prompt dialog with ESCAPE can cause crash; should return "null"
# bug fix: conflicting (Edit) selectMenu removed
#  -- can't have two menus with exactly the same name, or language will only update one
# bug fix: image creation does not lock out mouse or system refreshes
# bug fix: select {*} (color=...) fails (specifically math functions doubling as atom properties)
# bug fix: cross-applet script output from print script("show ...", "B") not working 
# bug fix: synchronize command broken 
# bug fix: "string"%-n right-side truncation one character short

# code: MouseManager14, ActionManager simplifications

# --------------------------------------------------------------

#version=12.0.37

# bug fix: within(xxx, <only first atom in a model>) will fail
# bug fix: Crystal09 reader upgrade
# bug fix: adaptation for improperly CONECTed PDB files such as 1W7R
# bug fix: select *y defaults to select {*}(y) instead of select {:y}
# bug fix: newer cml format for crystal information
# bug fix: vibration ON  not saved in state
# bug fix: not reading MOPAC 6, 7, or 2009 files

# --------------------------------------------------------------

#version=12.0.36

# new feature: load MENU -- if user-defined menu label is "null" then that menu item is removed
#  -- for example:  labelName | null      or      labelMenu | null

# bug fix: write of stereo image only shows one half of dual display
# bug fix: application does not update menus properly
# bug fix: Jaguar reader not reading vibrations correctly
# bug fix: write JMOL (instead of write xxx.jmol)		 not implemented

# --------------------------------------------------------------

#version=12.0.35

# new feature: (fixing property smoothing) isosurface... map property x WITHIN x.y
#  -- allows a maximum distance to be defined; speeds up calculation
#  -- defaults to 5.0 when set isosurfacePropertySmoothing FALSE

# bug fix: load of model when animation is on may cause animation NEXT to fail
# bug fix: isosurface VDW can ignore H2O
# bug fix: load FILES <series of PDB files> incorrectly autobonds CONECTed atoms
# bug fix: draw LIST broken
# bug fix: (signed applet only) write FRAMES multiple calls to file dialog 
# bug fix: draw/show pointGroup not correct when {0 0 0} is not center of model
# bug fix: draw pointGroup deletes all draw objects, not just of this model's point group
# bug fix: multimodel show pointGroup does not reset when frame is changed

# --------------------------------------------------------------

#version=12.0.34

# new feature: (relevant to Macintosh only) COMMAND-SHIFT-LEFT-DRAG same as CTRL-SHIFT-LEFT-DRAG

# bug fix: set PICKING OFF nonfunctional
# bug fix: unnecessary moveto commands in state 
# bug fix: CTRL-SHIFT-LEFT on Macintosh must be pressed with LEFT first. go figure... (Old, old problem fixed)
#   -- problem was that CTRL-SHIFT-LEFT-DRAG specifically was delivered as CTRL-SHIFT-MOVE
#   -- specifically relates to changing the slab after slab ON
# bug fix: isosurface for trajectory not working
# bug fix: Var x in function x() not recognized
# bug fix: Var data followed by data++ causes syntax error
# bug fix: isosurface .... map select {...} not saved properly in state
# bug fix: MO HOMO should select highest non-negative value if no occupancy info
# bug fix: Spartan reader not reporting HOMO
# bug fix: load xxxx.top should default to xxxx.trj for coord files

# --------------------------------------------------------------

#version=12.0.33

# new feature: Molden reader filter options INPUT, NOOPT

# bug fix: set bondPicking deletes bond
# bug fix: Molden reader does not read optimizations
# bug fix: Molden reader nonfunctional
# bug fix: Spartan reader fails when no MO calculation
# bug fix: Spartan MO d6/f10 reader problems
# bug fix: load ? broken in 12.0.31
# bug fix: getProperty  by itself does not return SORTED list of properties

# --------------------------------------------------------------

#version=12.0.32

# bug fix: SMILES generator error for cationic aromatic nitrogen
# bug fix: application with file name does not run jmolscript: embedded scripts
# bug fix: isosurface x.xx should default to "isosurface CUTOFF x.xx" for legacy compatibility
# bug fix: {xxx}.label = "xxx" does not allow saving state
# bug fix: {xxx}.element = "B" only assigns "B" to first atom in set

# --------------------------------------------------------------

#version=12.0.31

# bug fix: {xxx}.element = "B" does not work
# bug fix: JavaScript getPropertyAsArray("auxiliaryInfo.models") will fail for crystal structures 
# bug fix: undocumented select within(hkl,...) and select within(plane,...) missing
# bug fix: message @x   should replace x with a variable; "message @x is the value of x" should not
# bug fix: older syntax MESSAGE %{x} for variable value missing
# bug fix: variable pointers such as @x = 3 and y = 3 + @x not working 
# bug fix: AMBER CYX not recognized in @cystine definition
# bug fix: MD topology/coord file loading problems; general trajectory problems
# bug fix: drag/drop CUBE files should use isosurface sign red blue $FILENAME$

# --------------------------------------------------------------

#version=12.0.30

# bug fix: scriptLevelMax 20 too small -- changed to 100
# bug fix: for/while local variables improperly localized in iterative functions
# bug fix: 12.0.29 should not have changed <string> + <array> to be <array> 

# --------------------------------------------------------------

#version=12.0.29

# new feature: <array1> | x (for consistency with 12.1)
#   -- IN PLACE concatenation
#   -- array1 will be appended to
#   -- if x is an array of length n, then n  elements will be added
#   -- works as    a |= b
#   -- to append a full array as one element, use   a |= [x]
#   -- to append with creating a NEW array, use a + x or a + [x] instead

# bug fix: a = {} initialized as bitset, not associative array
# bug fix: <bitset> | <integer> should set bit <integer>
# bug fix: <bitset> | <array> should set bits indicated in <array>
# bug fix: <bitset> & <integer> should return true if bit <integer> is set
# bug fix: <bitset> % n when n < 0 should do "last n + 1"
# bug fix: <array> | [a,b,c] should append elements to array -- IN PLACE
# bug fix: animation incompatible with spin for largish structures
# bug fix: _modelFile variable incorrect for file read from zip file
# bug fix: drag/drop file typer null pointer error when not recognized
# bug fix: If a script such as "test.spt" creates a function 
#          test(), then the next implicit script command "test.spt" will fail
# bug fix: implicit script command Test.spt loses case of filename
# bug fix: array appending appends string values
# bug fix: array appending of strings should not split them by line  
# bug fix: frame 0.0 does NOT enable all frames; breaks "quaternion" command
# bug fix: isosurface fragment fix
# bug fix: cartesian exporter capping cylinders flat and spherical both
# bug fix: Jmol logo was missing from the Help>What's New window.
# bug fix (improvement): the Help>User Guide window was too narrow.

# code: isosurface/color mapping upgraded to 12.1 level
# code: ScriptVariable simplified
#   -- ScriptVariable[]objects --> (ArrayList<ScriptVariable>)value
# code: Vector --> List/ArrayList

# --------------------------------------------------------------

#version=12.0.28

# bug fix: Jmol 12.0.23+ does not allow load xxx.xxx 1  (single-model load) 
# bug fix: Jmol 11.9.24+ will read states created by prior versions incorrectly
#   -- fixed by adding "legacyAutoBonding" setting
# bug fix: loading a file on command line does not allow 
#          for write xxxx.jmol to include model file in zip file
# bug fix: passing an array to a function does not correctly pass by reference
# bug fix: dot function included in array  x = [(whatever).something...]   fails
# bug fix: array sorting for objects
# bug fix: creating arrays from variables does not copy variable value
# bug fix: draw .... @s  does not work for title, but @{s} does
# bug fix: ZAP should not set appendNew TRUE
# bug fix: load APPEND after ZAP inserts ZAP into state after load command

# --------------------------------------------------------------

#version=12.0.27

# bug fix: write MOL writes incorrect charge
# bug fix: isosurface SETS or POCKET with DOTS gives too many dots
# bug fix: set measurementLabels off not working for ticks
# bug fix: draw TRIANGLES not working
# new feature: Finnish translation
# bug fix: isosurface color mesh blue   not working
# bug fix: (modelkit) load $PCl5; assign atom ({2}) "C"  fails to place H atoms correctly
# bug fix: isosurface sets not sorted by number of vertices 
# bug fix: logFile/logCommands/logGestures should not be saved in state
# bug fix: log file cannot be turned off by setting value to ""
# bug fix: user-defined function calls should be able to look like Jmol commands, without ()

# --------------------------------------------------------------

#version=12.0.26

# bug fix: load ... filter "BIOMOLECULE 1" ... broken in 12.0.19
# bug fix: write xxx.jmol can fail if the same file is used twice in two different contexts
# bug fix: obj/pmesh file reading problems
# bug fix: failure to create atomicOrbital does not clear that isosurface
# bug fix: popup menu does not show load {1 1 1} options correctly
# bug fix: draw intersection/polygon without vertices does not clear existing object
# bug fix: isosurface slab for plane not working
# bug fix: space before [ not recognized as significant when following $xxx or {...}
# new feature: isosurface/draw .length (also added to 12.1.27)
# bug fix: undocumented $isosurface1[3] fixed
# bug fix: set echo myecho [x y] after set echo myecho {3 3 3} does not work
# bug fix: isosurface set 0  does not display all sets

# code: parameterExpression cleanup

# --------------------------------------------------------------

#version=12.0.25

# new feature: (part of write MOL bug fix) write SDF creates multi-model SDfile based on models of selected atoms
# new feature: (part of write MOL bug fix) write V3000 creates V3000 file; see http://www.symyx.com/downloads/public/ctfile/ctfile.pdf

# bug fix: write MOL creates V2000 file
# bug fix: over-run of SDF, MOL/V2000 reports error
# bug fix: Web Export and write xx.jmol fail for load XXX:: forcing file type
# bug fix: GenNBO reader does not read MOs properly
# bug fix: GenNBO reader does not read xxx.31 file P orbitals not in X Y Z order
# bug fix: applying unit cell in LOAD command to XYZ file containing multiple models 
#          does not convert later model coordinates to fractional ones.
# bug fix: assigning array elements using x[i] = pt, where pt is a 
#          variable that is a cartsian point or a plane does not copy variable
# bug fix: SMILES generator in certain cases may not return stereochem (c-C(OH)(H)-c)
# bug fix: pop-up menu after zap 1.1 in set of two models crashes Jmol

# code: V3000Reader integrated into MolReader
# code: JUnit test for file reading GenNBO and CIF files lacks viewer object

# --------------------------------------------------------------

#version=12.0.24

# bug fix: failure to read properly data "connect_atoms" from state 
#          when struts or hbonds turned OFF
# bug fix: 12.0.19-22 fail to write state properly -- saved settings not saved
# bug fix: CIF reader does not recognize -1 for _atom_site_disorder_group

# --------------------------------------------------------------

#version=12.0.23

# bug fix: isosurface t.obj should be discernable as OBJ if created by PyMOL
# bug fix: set drawPicking does not pick visible isosurfaces
# bug fix: draw * translucent does nothing
# bug fix: isosurface on frame other than first will be incorrect
# bug fix: draw with multiple models can fail to save state
# bug fix: SMILES check for c=c can fail.
# bug fix: Mopac MGF reader upgrade allows orbital subset
# bug fix: Mopac MGF reader upgrade allows filter "alpha", filter "beta"
# bug fix: isosurface OBJ pymol.obj not reading Pymol output
# bug fix: appending data to models with unit cells can cause odd results
# bug fix: JME load append does not get saved properly in state
# bug fix: relaxing single-model requirement for isosurface for SELECT option
#          as long as only a single model's atoms are selected
#          (Jmol 12.1 goes further, allowing for this for preselected atoms)
# bug fix: bond set variables [{1 2 3}] incorrectly shown as atom bitsets ({1 2 3}) 
# bug fix: xxx.yyy when "yyy" has been defined as a local variable using VAR fails
# bug fix: find("SMILES", smilesString) does not find Jmol atomIndex == 0
# bug fix: find("SMILES", smilesString) does not find [2H]

# --------------------------------------------------------------

#version=12.0.22

# bug fix: Jmol SMILES generation does not include stereochemistry 
#              for octahedral and trigonal bipyramidal 
# bug fix: IDTF exporter inverts rotation matrix from pt1, pt2, for dx = dy = 0
# bug fix: Linux file completion from LOAD "  improperly lowers the case of file names
# bug fix: zap 1.1 when models have cartoons or other bioshapes crashes Jmol (broken in 12.0.RC8)
# bug fix: Ramachandran approximation of P straightness off by a few percent
# bug fix: SMILES matching string with ".[C@H]" reads stereochemistry incorrectly
# bug fix: load SMILES with %nn fails 
# bug fix: Jmol creating possibly ambiguous aromatic amine SMILES
#          1-H-4-methylimidazole was: n1cnc(C)c1; now: [nH]1c[n]c(C)c1 
# bug fix: {*}.find("SMILES",smilesString) does not include aromatic H
# bug fix: Smiles MF calculation for aromatic atoms N and C in error.
#    NOTE: Jmol may undercount the number of hydrogen atoms
#          for aromatic amines where the ring bonding to N is 
#          not explicit. Each "n" will be assigned a bonding count
#          of two unless explicitly indicated as -n-.
#          Thus, we take the position that "n" is the 
#          N of pyridine unless otherwise indicated.
#         
#          For example:
#            $ print "c1ncccc1C".find("SMILES","MF")
#            H 7 C 5 N 1   (correct)
#            $ print "c1nc-n-c1C".find("SMILES","MF")
#            H 6 C 4 N 2   (correct)
#          but
#            $ print "c1ncnc1C".find("SMILES","MF")
#            H 5 C 4 N 2   (incorrect)

# --------------------------------------------------------------

#version=12.0.21

# bug fix: popup submenu "file" only enabled for application or signed applet 
# bug fix: load xxx.jmol broken in 12.0.20
# bug fix: write JMOL missing from popup menu

# --------------------------------------------------------------

#version=12.0.20

# bug fix: WRITE PDB not padding to 80 char
# TODO: WRITE PDB not adding TER records
# bug fix: PDB reader not flagging models as PDB properly when all groups are same amino acid
# bug fix: no callback for ZAP model=1
# bug fix: set picking invert stereo/delete atom  not sending pick callback
# bug fix: Argus .agl reader not setting viewpoint transform
# bug fix: load xxx where x is a flawed data file can try to load file as a script or isosurface
# bug fix: compiler function(){{ double brace error
# bug fix: compiler context { var chain=3;print chain } not recognizing context variable for "chain"
# bug fix: PDB reader not reading files with empty group name field
# bug fix: popup menu does not include measure SEQUENCE
# bug fix: set picking measure SEQUENCE not reporting to application console
# bug fix: set picking chain, then mouse click does not report number of atoms selected
# bug fix: LINUX file dropper returning \r\n with name
# bug fix: DRAW $xxx reverses order of points
# bug fix: load PACKED for slab/polymer does not work 

# --------------------------------------------------------------

#version=12.0.19

# bug fix: load "" does not work after loading a SET of models using load DATA
# bug fix: CIF reader cannot read files with _space_group_symop_operation_xyz field
# bug fix: naming functions or variables after Jmol token names fails or acts unexpectedly
#          (fixing this bug required script compiler changes, and that lead to the
#           two new features below)
#
# bug fix: "var chains" does not work -- i.e. a name of a "within" option. 
#          solution was to allow var ANYTHING.
#
# bug fix: User variables and functions removed from state because they are 
#          no longer necessary and also indeterminant in terms of the "state".
#          Originally these were needed because ECHO and DEFINE can be dynamic
#          -- which is still true -- and because certain commands such as ISOSURFACE
#          were being saved in the state just as their strings instead of their 
#          intepreted code. But that was changed for 12.0, and this fix also changes 
#          ECHO to be saved in its current state, not its dynamic state. While 
#          dynamic DEFINE types may include variables, they aren't really
#          part of the "state" per se and aren't needed to recreate the state. So
#          they are dropped from the state with this fix as well. 
#
# new feature: function calls can look like Jmol commands (also added to 12.1.16):
#      function myfunc(a, b, c, d){....}
#      myfunc a b c d
#      -- these are MATHEMATICAL commands 
#      -- use just a b, not @a @b
#
# new feature: custom overloading of Jmol commands (also added to 12.1.16)
#      function measure(a, b) { print "measuring " + a + " " + b; measure @a @b }
#      measure {atomno=2} {atomno=3}
#      -- within function X, command X is standard Jmol; 
#      -- outside the function, it is a reference to that function
#      -- overloaded functions are not saved in the state
#
# new feature: load xxx.pdb filter "CONF 1" does a front-end filter of just
#          the first alt-loc atoms within a given residue. This leads to proper
#          formation of polymers in certain cases (2BLN, 2CI1). (necessary for DSSP)

# bug fix: cartoon helix in 1TF6 broken by DSSP HHHGGG run
# bug fix: not loading MOL files having no bonds
# bug fix: load append INLINE ... not working
# bug fix: max for Rasmol/chime units 499 -- should be 1000
# bug fix: show state/xxxx incorrectly case-sensitive

# code: undocumented load RANGE [i, j, k,...] removed (see load MODELS)
# code: load FILTER clean-up, standardization

# --------------------------------------------------------------

#version=12.0.18

# bug fix: QCHEM reader fails
# bug fix: CRYSTAL reader fails to read formico_opt.out
# bug fix: CIF reader not reading insertion codes (since forever!)
# bug fix: set appendNew FALSE fails
# bug fix: getproperty IMAGE (returning JPG64) doubles font size with set antialiasDisplay true
# bug fix: "configuration 1" should select all if no alternative locations
# bug fix: isosurface "xxxx.jvxl" colorscheme "rwb" does not work (jvxl files specifically)
#
# note: exception made to rule of not adding new features -- DSSP is just too good!
#
# code: addition of DSSP from 12.1.15_dev
# code: removal of unnecessary structure class in ModelCollection
#
# new feature: Accurate DSSP structure determination should be identical to DSSP
#
#   calculate structure               # default DSSP -- new way
#   calculate structure RAMACHANDRAN  # old way
#   calculate HBONDS STRUCTURE        # DSSP structure-determining hydrogen bonds only
#
#   save structure s1    # for example, save the authors' structure assignment
#   restore structure s1
#
#   color cartoons STRUCTURE          # additional hues for helix310 and helixPI 
#
#   show DSSP -- DSSP report
#   set DEBUG -- verbose DSSP calculation
#
#   set defaultStructureDSSP
#     --default TRUE 
#     --on load, if PDB file has no HELIX/SHEET records, use DSSP to calculate
#     --for calculate structure, with no arguments, use DSSP
#     --setting this FALSE gives previous behavior (Jmol Ramachandran calculation)
#   set dsspCalculateHydrogenAlways 
#     --default TRUE -- standard DSSP, ignoring all file backbone amide H atoms
#     --set to FALSE to ensure that file-based NH atoms are used instead of rough approximations
#
#   select helix310
#   select helixalpha
#   select helixpi          # try this with 2JC9 for a DSSP >>555<< run
#   select substructure = 7 # DSSP "G" -- 3/10 helices
#   select substructure = 8 # DSSP "H" -- alpha helices
#   select substructure = 9 # DSSP "I" -- pi helices
#
#   label {*.ca} %[substructure]
#
#   STRUCTURE HELIXALPHA ....
#   STRUCTURE HELIX310 ....
#   STRUCTURE HELIXPI ....
#
#   PDB and CIF readers read helix types 1 (alpha), 3 (pi), and 5 (3/10)
#
# feature change:  DSSP default for "calculate structure" 
#    -- old way is now "calculate structure RAMACHANDRAN"
# feature change:  DSSP default for LOAD of PDB file with no header.
#   in previous versions, Jmol used a ramachandran-angle-based calculation
#   for secondary structure determination when a PDB file had no HELIX or SHEET records.
#   It just seems reasonable to use the industry-standard DSSP method instead.
#
# --------------------------------------------------------------

#version=12.0.17

# bug fix: s = x[i]   list variables all broken
# bug fix: load FILTER does not include %x for PDB files
# bug fix: conformation n  definition changed for PDB files to be consistent with DSSP

# --------------------------------------------------------------

#version=12.0.16

# bug fix: hetero group protein check should not care about C CA N O file order (1YC5)
# bug fix: conformation not working when an alternate location is for key atoms such as N, C, O, CA
# bug fix: loading a multi-structure PDB file with CONECT bonding may not autobond (2q3t)
# bug fix: undocumented save STRUCTURE not working for initial structure state
# bug fix: measure search("...{X}....{X}...") does not work
# bug fix: calculate structure only works with last model loaded
# bug fix: calculate structure after zap x.y fails
# new feature: load reports model count and overall number and model number for MOs 
# bug fix: GAMESS reader (US) not reading full atom name such as "MOLYBDENUM"
# bug fix: load append after calculating structure recalculates structure for other models
# bug fix: calculate structure does not target selected model
# bug fix: bioshapes not clearing automatically after calculate STRUCTURE
# bug fix: switch DEFAULT not working
# bug fix: label %1 will cause exception
# bug fix: load '@x' not saved properly in state
# bug fix: arrays of hashtables and other more complex variables not being saved or created in usable form
# bug fix: isosurface MEP with multiple frames fails on second isosurface
# bug fix: //comments not searched properly for GOTO operation
# bug fix: data "connect_atoms" does not update bond diameter, order, or energy
# bug fix: %8.4VALUE still truncating in set defaultdistancelabel
# new feature: (simple enough to add this here) new 5th parameter for measureCallback is actual, unrounded value

# --------------------------------------------------------------

#version=12.0.15

# bug fix: unbind unknownName unbinds LEFT mouse!
# bug fix: Safari slideZoom issue upon leaving and returning to applet (mouse MOVE not issued by OS)
# bug fix: naming a variable after a function name such as "color" should be allowed
# bug fix: "smilesString" changed to "_smilesString" and properly set
# bug fix: Application filename for $xxxx not properly set
# bug fix: MEP menu item is using MOLECULAR with default range; should be using VDW with range ALL
# bug fix: unescaped spaces in load "$ethyl ether" cause fault at NIH.
# bug fix: switch to    String smilesUrlFormat = "http://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&get3d=True"; 
# bug fix: error writing isosurface color density JVXL file
# bug fix: catch without catch(e) causes exception
# bug fix: isolated H atoms when calculating hydrogen bonds causes exception
# bug fix: Spartan reader not reading INPUT file coord -- adding filter "INPUT"
# bug fix: calculate structure requiring {xxx}

# code: deprecated "commandOption" shape property removed

# --------------------------------------------------------------

#version=12.0.14

# bug fix: reading unmapped isosurface from JVXL files broken in 12.0.13

# --------------------------------------------------------------

#version=12.0.13

# two new features added retroactively:
# new feature: set multipleBondRadiusFactor 0.75
# new feature: multipleBondSpacing
#   set multipleBondSpacing = -1 (default, varies with viewing angle)
#   set multipleBondSpacing = -0.5 (half that distance; varies with viewing angle)
#   set multipleBondSpacing = 0.35 (positive ==> fixed multiple bond spacing)

# bug fix: MO NOPLANE not working
# bug fix: isosurface map MEP not as accurate as could be
# bug fix: SmarterJmolAdapter should not read zip bytes it doesn't have to 
# bug fix: spacefill JMOL does not work
# bug fix: Jmol 12 does not read old 11.1 isosurface commands from states
# bug fix: load {i j k} RANGE x.x not expanding load box by 1 in each direction
# bug fix: applet console does not display startup message
# bug fix: undo/redo problems in AppConsole
# bug fix: crystal reader can't read selected model
# bug fix: 3.5E+0.0 read as "3.5 0.0"
# bug fix: navY/navy color issue
# bug fix: write PDB for nonPDB files incorrect

# --------------------------------------------------------------

#version=12.0.12

# code: StatusManager update
# bug fix: mep color range error (12.1.9, 12.0.11)
# color structure for carbohydrate fails
# new feature: reset SPIN
# bug fix: reset should not reset spin (introduced in 11.7.47); new RESET SPIN includes reset spinning
# bug fix: SMILES generator allowing sp3 center in aromatic
# bug fix: storing atom properties from CrystalReader messes up model atom bitset 
# bug fix: non PDB large molecule should not change default rendering 
# bug fix: PDB large molecule default rendering flaws

# --------------------------------------------------------------

#version=12.0.11

# bug fix: color label none when already none and after rendering for multi-line labels or with antialiasdisplay crashes Jmol
# bug fix: lcaoCartoon p orbitals for CO2
# bug fix: isosurface ISSQUARED
# bug fix: PLOT command broken (Parser.parseStringInfestedFloatArray)
# bug fix: color PROPERTY x   with set rangeSelected does not work
# bug fix: isosurface contour colors
# bug fix: #....... #.... two # in one line with first in first character fails
# bug fix: isosurface plane problems
# bug fix: set drawHover isosurface hover error kills hover watcher
# code: AtomPropertyMapper isolated from IsoSolventReader
# bug fix: isosurface "t.jvxl" map property temperature nonfunctional
# bug fix: isosurface PROPERTY ("VDW 100%" implied) not working
# code: rewrite of calculateHydrogen/hybridization code
# bug fix: WRITE xxx should do SHOW not clipboard for application
# bug fix: % at end of line acts as a line continuation
# new feature: lcaoCartoons dsp3 (a,b,c,d,e), d2sp3 (a,b,c,d,e,f)
#   (added because it is just an extension of lcaoCartoons and has been
#    asked for repeatedly)
# bug fix: "sp3a" not "first bonded atom"
# bug fix: failure to read old-style JVXL files. 

# --------------------------------------------------------------

#version=12.0.10

# bug fix: reading nth model from a file within a ZIP collection not possible
# bug fix: LcaoCartoon capping/slabbing not saved in state
# bug fix: zip file reading broken in 12.0.9
# bug fix: isosurface planar mapping, contours, atomic orbital speed and scaling problems
# code: MarchingSquares total rewrite
# bug fix: oops; isosurface atomicOrbital REALLY not scaling well

# --------------------------------------------------------------

#version=12.0.9

# bug fix: isosurface atomicOrbital not scaling well
# bug fix: undo and smilesurlformat tokens missing
# bug fix: isosurface ... map SQUARED ... nonfunctional
# bug fix: exit, quit are stopping spinning -- should just be stopping moveTo
#          unless !exit or !quit.
# bug fix: associative array problems with some auxiliaryInfo data saving to state
# bug fix: binary map files within zip directories cannot be read
# bug fix: mouse-based slab does not refresh
# bug fix: JME reader misreading "Br+"
# bug fix: Writing PDB file with residue number > 9999 trashes file. Now writes "0000" "0001" etc. 

# --------------------------------------------------------------

#version=12.0.8

# bug fix: very first start of Jmol, with no history, fails. 
# bug fix: QChem reader not indicating symmetry A B properly
# bug fix: QChem reader filter "BETA" fails
# bug fix: obscure error when array variable is in place of required expression
# bug fix: ColorEncoder not allowing for override of BW and WB palette
# bug fix: GAMESS reader UHF caught on reading orbitals with LZ VALUE line

# --------------------------------------------------------------

#version=12.0.7

# bug fix: set defaults RASMOL broken
# bug fix: CRYSTAL reader FREQUENCY needs fragment numbers sorted
# bug fix: rotation QUATERNION broken by 11.9.36, Mar 25, 2009 - Does not rotation about {0 0 0}
# bug fix: CURSOR_WAIT hourglass not turning off automatically after set picking JmolScript operation
# bug fix: associative array function .keys should report sorted key list
# bug fix: associative arrays as ScriptVariables must be checked for type
# bug fix: isosurface color range should not carry over to general "color property"  
# bug fix: isosurface colorscheme TRANSLUCENT "xxx" fillTriangle error
# bug fix: should not allow isosurface ... map colorscheme "xxx" TRANSLUCENT
# bug fix: CRYSTAL reader FREQUENCY when input deck is missing VIBRATION record

# --------------------------------------------------------------

#version=12.0.6

# bug fix: CRYSTAL reader orientation error
# bug fix: show info not showing molecule info
# bug fix: isosurface LATTICE {x y z} should be relative to current UNITCELL
# bug fix: broken selectExtended mode
# bug fix: some isosurface display properties not generalized to wildcard 
# bug fix: Parallel processing not creating process-specific copies of shapes
# bug fix: load unitcell for slab/polymer should allow 0, not just -1
# bug fix: SMILES generator should not produce stereochemistry for RX2R'

# --------------------------------------------------------------

#version=12.0.5

# bug fix: set picking invertStereo not working for non-ring stereocenters
# bug fix: SmilesGeneration stereochemistry error 
# bug fix: "CCCC".find("SMILES","CCCC") should return 1 (other returns 0 and -1)
# bug fix: "CCCC".find("SMARTS","CCC") should return [1,5,8,11] (other returns [] and "?"
# bug fix: proper "false AND"/"true OR" action where second operand is skipped

# --------------------------------------------------------------

#version=12.0.4

# bug fix: SmilesGeneration fails for double bond stereochemistry
# bug fix: documented within("SMILES",...) missing and required for SmilesGenerator
# bug fix: select within(branch,{},{}) exception
# bug fix: "sheet" token missing, so select within(sheet) fails

# --------------------------------------------------------------

#version=12.0.3

# bug fix: struts not restored from state
# bug fix: color STRUTS also colors hbonds
# new feature: Application Display menu item "resize"
# bug fix: draw CYLINDER n ... where n is an integer does not give flat ends
# bug fix: PNG file state for multiple file load cannot be read
# bug fix: Jmol application not accepting -g
# bug fix: "no atoms found returns wrong error message
# bug fix: XYZ reader fails with load "filename" 3
# bug fix: "[1,3,4,5]" can be translated to [1,3,4] 
# bug fix: slab/depth mouse action does not automatically refresh

# --------------------------------------------------------------

#version=12.0.2

# bug fix: draw arrows are being FIXED in state
# bug fix: try/catch in functions not implemented correctly
# bug fix: SMILES nested $(...) broken
# bug fix: binary pmesh reader broken
# bug fix: better coding for isosurface file typer
# bug fix: print write("ramachandran")
# bug fix: reading background images from PNG images within zip files
# bug fix: write xxxx.jmol zip sets cannot be read
# bug fix: binary surface readers map and ccp4 can misread file type
# bug fix: isosurface "=xxx" missing check for isSyntaxCheck

# --------------------------------------------------------------

#version=12.0.1

# July 29, 2010
# bug fix: isosurface slab for polymer/slab symmetry

# --------------------------------------------------------------

#version=12.0.RC29

# bug fix: VRML/X3D ellipsoids
# code: IDTF/VRML/X3D writing of ellipsoid arcs and fill made more efficient
# bug fix: .....@{"text" ...} not read as exprssion
# bug fix: hover OFF not turning off bond hover

# --------------------------------------------------------------

#version=12.0.RC28

# bug fix: Jmol Model Kit broken :{
# bug fix: PROMPT command need not require @{...}
# bug fix: a = {}  needs to default to ({}) (empty bitset)
# bug fix: alternative select @b[a]
# bug fix: allowance for b["test"][1][3]

# --------------------------------------------------------------

#version=12.0.RC27

# new feature: prompt(label,data,asButtons)
#    x = prompt("testing") # just shows an OK box
#    x = prompt("testing","defaultInput") # returns user input or "null"
#    x = prompt("testing","yes|no|cancel", true) # returns "yes" "no" or "cancel"
#    x = prompt("testing",["yes","no","cancel") # returns 1, 2, or 3
#
# new feature: associative arrays:
#
#   b = {"test" : 34, "test2" : 45}
#   b["test"] = 35
#   b["test3"] =[2, 3, 4, 5]
#   print b["test"]
#
# 35
#
#   show b
#
# b = { "test3":[2, 3, 4, 5],"test2":45,"test":35 }
#
#   b -= "test3"
#   show b
#   
# b = { "test2":45,"test":35 }
#
# 
# bug fix: SELECT logic error with ! in front of a chain specification
#          such as * and ! 56:B%1. This was tranlating to 
#            * and ! 56 and :B and %1
#          but then ! has higher precidence then and, so
#          this was "* and (! 56) and :B and %1" instead of
#                   "* and ! (56 and :B and %1"
#          solution is to add a very high-precidence AND
#          that trumps NOT. Discovered by Paul Pillot.

# new feature: fux, fuy, fuz, fuxyz, and set fractionalRelative
# bug fix: dots 150%
# new feature: failed file loading with try/catch is caught

# new feature: try/catch:
# load quartz.cif
# refresh
# var x = 1
# print "outside, x = " + x
# while(true) {  # has its own local variables
# 	print "  inside while, x = " + x
# 	x = 2
#	print "  setting x = " + x
# 	try{  # has its own local variables
# 		print "    inside try, x = " + x
# 		var x = 3
# 		print "    setting x = " + x
# 		print "TEST1"
# 		load "adfkjd" # will be caught
# 	}
# 	catch(e) {  # has its own local variables
# 		print "    inside catch, x = " + x
# 		var x = 4
# 		print "    setting x = " + x
# 		prompt @e
#		break       # from WHILE
# 	}
# 	print "  after catch, x = " + x
# 	x = 5
# 	print "  setting x = " + x
# 	print "out"
# 	break;
# }
# print "way out"
# print "outside, x = " + x

# bug fix: inconsistent unitcell coordinate operations 
#            {1 1 1/2} should be absolute
#            {...}.fxyz should be absolute
#            select cell=555 should be absolute
#            {...}.uxyz should be relative to current UNITCELL
#            .... hkl {h k l} should be relative current UNITCELL
#            select UNITCELL should be relative current UNITCELL
#            draw intersection UNITCELL... should be relative current UNITCELL
#            isosurface LATTICE {x y z} should be relative to current UNITCELL
# 
# bug fix: RC15 connect DELETE may malfunction when two sets of atoms intersect
# bug fix: minor isosurface tweaks -- triangles, gridlines, hover, click
# bug fix: hover OFF -- should not prevent hoverCallback
# bug fix: x = {*:} causes error
# new feature: SWITCH/CASE 
#  -- more like JavaScript than Java
#  -- like JavaScript, doesn't need constants
#  -- like JavaScript, evaluations can be made in the cases
#  -- really just a simpler form of IF/ELSEIF/ELSE
#  -- expressions are evaluated only as necessary from the top down
#  -- DEFAULT may appear anywhere. 
#
#  switch(x) {
#  case 0:
#  case 1:
#    spacefill only
#    break;
#  default:
#  case 2:
#    wireframe only
#    break;
#  case 3:
#    wireframe only;wireframe reset;spacefill reset
#    break;
#  }

# --------------------------------------------------------------

#version=12.0.RC26

# bug fix: pause/resume cause multiple unnecessary refreshes
# bug fix: pause/resume can fail if user enters a script command error
# bug fix: deleted atoms and atoms not in subset might be included in certain operations
#  such as coloring, {..}.select = ..., and more
# bug fix: "halos ON" should always default to "just larger than current spacefill size" and
#  adjust size with spacefill size in that case
# new feature: PROMPT command  with 0 or 1 arguments
#
# new feature in JmolColorPicker.js--jmolColorPickerBox now accepts object inplace of script
#    to allow execution of another function rather than a Jmol Script (much like Jmol.js
#    functions).
# completion of refactoring of JmolColorPicker.js (and corresponding changes in Widgets.java).
# code: IDTF,VRML,X3D export all simplified camera calculations
# TODO: Still have not discovered how to install the right light for a model
# new feature: JMOL IN PDF FILES :)
# new feature: write t.idtf ---> t.itdf and t.idtf.tex 
#  In order to create U3D files, we start with IDTF, which is an ASCII-based format
#  The sequence is:
#  JMOL: write t.idtf
#  SHELL: idtfconverter.exe -input t.idtf -output t.u3d
#  SHELL: pdfLatex t.idtf.tex t.pdf 
#   (not sure about that last syntax -- I'm using the GUI MikTex TeXworks interface
#    to load the t.idtf.tex file and run it.
#  In general, users will not need t.idtf.tex, because they will want to integrate
#  the model into some other document, but this file serves as a template and model
#  should they need that, and it is excellent for testing purposes
# bug fix: nucleic acid rendering for VRML and IDTF/U3D missing bases and connectors
# bug fix: polyhedra rendering can end up with reversed normals
# bug fix: wireframe 0 rendering too small in VRML and IDTF/U3D


# --------------------------------------------------------------

#version=12.0.RC25

# new feature: isosurface MAP MEP ... VARIABLE x  applies variable data to MEP mapping
# new feature: "load =xxxx AS ."   "." means "into the default directory; same name"
# bug fix: "large molecule" PDB files need stars for unconnected atoms
# new feature: load =xxxx defaults to read pdb.gz; load =xxxx.pdb reads .pdb file
# bug fix: Jmol could not read its own CML output
# bug fix: %5.-5i overflow off by one digit in precision
# new feature: SMILES /nostereo/ /noaromatic/, not just SMARTS
# bug fix: TestSmiles incorrectly assigning bonds in ...[C@H]1...
# bug fix: write PDB not correctly justifying atom names
# new feature: auxiliaryInfo.compndSource for PDB files
# bug fix: console cleared at end of script with set debugScript
# bug fix: load $CCCC or =xxxx AS file.name not working without quotes
# bug fix: polyhedra miscalculation in VRML and IDTF export
# bug fix: multiple-model data statement with ~~~ broken
# new feature: data "model..." and data "append..." command 
#     deprecated and merged with load command:
#     load data "model xyz".....end "model xyz" ... 
#     allows full parameterization of data loading
 
# new feature: clickCallback adds parameter mode:
#  // for status messages:
#  public final static int DRAGGED = 1;
#  public final static int CLICKED = 2;
#  public final static int WHEELED = 3;
#  public final static int PRESSED = 4;
#  public final static int RELEASED = 5;
# new feature: loadStructCallback adds parameters previousCurrentModelNumberDotted and lastLoadedModelNumberDotted
# new feature: spartan loader adds filter "noMo" but that isn't particularly useful, probably.
# bug fix: isosurface color density not quite getting desired points plotted
# bug fix: do nothing after widget checkbox click if no instances (fixes array out of bounds).
# bug fix: loading using append with appendNew false may not make bonds
# bug fix: SMARTS searching of "or" type primitive nested groups fails
# new feature: 3D-SEARCH /noStereo/ flag
# bug fix: SMARTS searching with || and measures can fail
# new feature: plot PROPERTIES propertyX propertyY [propertyZ] [[min {x y z}] [max {x y z}]]
#              added min/max allows for truncation of data
# new feature: applet console also reports version in title
# bug fix: STATE button in console problem in that in some browsers, you cannot clip from
# new feature: data model can accept filter=xxx, as in data "model filter=2D" ...
# bug fix: It was a mistake to comment out set defaultLoadFilter in the state
#          as this is needed for inline string state saving.
# bug fix: {xxx}.trace = {xxxx}.property_xxxx.all not working
# bug fix: connect...auto also creates HBONDS
# new feature: preliminary write ... http://....

# --------------------------------------------------------------

#version=12.0.RC24

# bug fix: write("COORDS","PDB") and other cases -- can't recognized upper-case first parameter
# bug fix: x = write("PDB") when the file is not a PDB file crashes Jmol
# new feature: within("SMILES"...) REMOVED
# new feature: within("SMARTS"...) REMOVED
# bug fix: SMILES string self comparison could give wrong stereochemistry 
# bug fix: PDB files without MODEL command can lose first atom
# new feature: set dotScale
# new feature: show SMILES
# new feature: set defaultLoadFilter works with JavaScript loadInline()
# bug fix: SMILES not showing stereochemistry involving H
# bug fix: "...".find("SMARTS", "/noaromatic/...") not working
# bug fix: much speedier mapProperty when all three properties are numeric
# bug fix: 3D-SMARTS search combining variable number of atoms [$(...)m-n] and distance
#            check (.d:min-max)...(.d) fails
# bug fix: load FILES does not properly set full path name to files. 
# bug fix: ramachandran R plot not writing extra straightness measure properly
# bug fix: javascript command broken
# bug fix: "file 0; mo homo; file 1; animation on" does not generate MO animation
# bug fix: Spartan smol reader skips first ("output") section. 

# --------------------------------------------------------------

#version=12.0.RC23

# feature change: quaternionFrame 'A' now 'B'
# bug fix: documented quaternionFrame 'Q' returned (though not useful)
# bug fix: readers might shift center of mass (normalize)
#          when CIF file models are loaded without a unit cell indication.
#          now set to not do that. You wouldn't notice it particularly unless you
#          later turned on the unit cell and noticed that the atoms were off
#          or you know the file data coordinates and notice that picked atoms have
#          different ones. 
# new feature: eta/theta atom properties -- nucleic acid conformation
#   Carlos M. Duarte, Leven M. Wadley, and Anna Marie Pyle
#   RNA structure comparison, motif search and discovery using a reduced 
#   representation of RNA conformational space
#   Nucleic Acids Research, 2003, Vol. 31, No. 16 4755-4761
#     eta (C4_i-1 - P_i - C4_i - P_i+1) 
#   theta (P_i - C4_i - P_i+1 - C4_i+1)
#
# new feature: PLOT PROPERTY propertyX  propertyY  (optional propertyZ)
#   makes a graph for the currently selected atom set
#   also equivalent for quaternion and ramachandran commands, but preferred for 
#
#     plot quaternion...
#     plot ramachandran...
#
# deprecated: quaternion, ramachandran
#
# new feature: mapProperty {atomSetFrom}.property1 {atomSetTo}.property2 (optional propertyKey)
#   Allows mapping of property data from one set of atoms to another 
#   based on a key such as atomno or resno (default atomno). 
#   Property2 must be "settable".
#   also mapProperty SELECTED {atomSet} key
#     same as mapProperty {selected}.selected {atomSet}.selected key
#   For example, creating a quaternion map, then mapping that data
#   with straightness, and then selecting a very specific subset of 
#   the quaternion data and using that selection to select data 
#   in the original model:
#
#  load 3cc2.pdb
#  calculate straightness
#  set quaternionframe 'B'
#  quaternion r difference
#  display {rna}
#  mapProperty  {1.1 and *.P}.straightness {2.1 and rna}.property_x resno
#  select 2.1 and rna; color property_x;spacefill 0.1
#  select 2.1 and rna and within(2.0,{1.7700001 -0.49 2.62})
#  mapProperty selected {1.1 and *.P}
#
# new feature: quaternionFrame "B" for nucleic C4'/P/C4'
#
# feature change: quaternionFrame "C" for nucleic acids now 
#                 set as per:
#    Sarver M, Zirbel CL, Stombaugh J, Mokdad A, Leontis NB. 
#    FR3D: finding local and composite recurrent structural motifs in RNA 3D structures. 
#    J. Math. Biol. (2006) 215-252
#
# new feature: print {selected}.find("SEQUENCE")
#   returns 1-letter sequence for selected atoms
# new feature: print {selected}.find("SEQUENCE", true)
#   returns 1-letter sequence for selected atoms, with cross-links:
#
# $ load 1crn.pdb
# $ show sequence
# 
# Model 1
# Chain A:
# [THR]1    [THR]2    [CYS]3    [CYS]4    [PRO]5    
# [SER]6    [ILE]7    [VAL]8    [ALA]9    [ARG]10   
# [SER]11   [ASN]12   [PHE]13   [ASN]14   [VAL]15   
# [CYS]16   [ARG]17   [LEU]18   [PRO]19   [GLY]20   
# [THR]21   [PRO]22   [GLU]23   [ALA]24   [ILE]25   
# [CYS]26   [ALA]27   [THR]28   [TYR]29   [THR]30   
# [GLY]31   [CYS]32   [ILE]33   [ILE]34   [ILE]35   
# [PRO]36   [GLY]37   [ALA]38   [THR]39   [CYS]40   
# [PRO]41   [GLY]42   [ASP]43   [TYR]44   [ALA]45   
# [ASN]46   
# 
# $ print {*}.find("sequence")
# 
# //* chain A protein 1 *// ~p~TTCCPSIVARSNFNVCRLPGTPEAICATYTGCIIIPGATCPGDYAN //* 46 *//
#
# $ print {*}.find("sequence", true)
# 
# //* chain A protein 1 *// ~p~TTC:1C:2PSIVARSNFNVC:3RLPGTPEAIC:3ATYTGC:2IIIPGA
#   TC:1PGDYAN //* 46 *//
#
# bug fix: state save for quaternion/ramachandran data frames fails
# bug fix: Spartan reader not reading MOs when there is only one atom (AOs, that is)
# bug fix: bioSMARTS search including first group
# bug fix: MOReader (Gaussian, GAMESS) fix for NBO cartesian D/F orbitals 
# bug fix: atom deletion can result in array length error
# bug fix: Application rubber-band selection mode not allows atom pick to be selection toggle

# --------------------------------------------------------------

#version=12.0.RC22

# bug fix: bioSMILES "~C:1.~G:1" fails
# new feature: axes center {x y z}
# new feature: data "connect_atoms" (for state with large number of connections)
# new feature: set picking measure sequence
# bug fix: rotate symop not functional for some symops
# bug fix: phosphorus-only polymer quaternions not operational
# bug fix: 3D-SMARTS multiple nesting
# new feature: 3D-SMARTS [$(...)n]
# new feature: 3D-SMARTS [$(...)nMin-nMax]
# new feature: 3D-SMARTS pattern1 || pattern2
# new feature: data "property_atom.xxxx" can be used like "property_xxxx" but xxxx must be a
#    settable atom property, which it will set.
# bug fix: 11.6.RC15 introduced {*}.property_x same as {*}.x. But that is
# not documented, and those are supposed to be different. The proper way to do this is:
#    data "property_x" 
#      ...
#    end "property_x"
#    {*}.partialcharge = data("property_x")

# --------------------------------------------------------------

#version=12.0.RC21

# new feature: set cartoonBaseEdges
#                 displays nucleic acid bases as triangles 
#                 Red:sugar edge, Green:Watson-Crick edge, Blue:Hoogsteen edge
#                 see Nasalean L, Strombaugh J, Zirbel CL, and Leontis NB in 
#                 Non-Protein Coding RNAs, Nils G. Walter, Sarah A. Woodson, Robert T. Batey, Eds.
#                 Chapter 1, p 6.
#                 http://books.google.com/books?hl=en&lr=&id=se5JVEqO11AC&oi=fnd&pg=PR11&dq=Non-Protein+Coding+RNAs&ots=3uTkn7m3DA&sig=6LzQREmSdSoZ6yNrQ15zjYREFNE#v=onepage&q&f=false  
# bug fix: NOS (inosine) not given 1-letter code I                 
# bug fix: quaternion({atom expression}) returning array
# new feature: (undocumented) quaternion({atom expression}, nMax) 
#    - returns array of values. 
# bug fix: state preserved for modelkitmode
# new feature: bioSEQUENCE () indicates "not cross-linked": select search("~r~C()~")
# new feature: bioSEQUENCE subsets ~p~, ~n~, ~r~, ~d~
# new feature: bioSEQUENCE wildcards N (same as * for ~n~, ~r~, or ~d~) 
#                                    R (same as [A,G] for ~n~, ~r~, or ~d~)
#                                    Y (same as [C,T,U] for ~n~, ~r~, or ~d~)

# bug fix: acceptance of curly " from Microsoft Word text clipping in scripts
# bug fix: lcaocartoon cap broken
# bug fix: isosurface boundbox not read from state
# bug fix: translucent isosurface colorscheme saved but not read from state
# new feature: modelkit mode invert ring stereochemistry	
# bug fix: application select-atoms toolbar button nonfunctional 
# new feature: set picking symmetry (undocumented)

# --------------------------------------------------------------

#version=12.0.RC20

# bug fix: JVXL XML reader error with "/>" in data attribute
# bug fix: select within(5.0, {0 0 0}) nonfunctional
# bug fix: MO fix for df order in model sets containing NBO and non-NBO orbitals
# bug fix: font MEASUREMENTS ...
# bug fix: QChem reader MO fix
# bug fix: G orbital skipping
# bug fix: WebExport creates directories in directories
# bug fix: SMARTS C(CCCCN1)1 fix. 
# bug fix: removing rule that a SMILES string cannot end with a branch.
# bug fix: log "NOW" changed to log "$NOW$"
# bug fix: log "$CLEAR$" clears the log file
# bug fix: syntax "else { [eol]" not functional

# --------------------------------------------------------------

#version=12.0.RC19

# bug fix: QChem reader MO fix
# bug fix: MO using cartesian instead of spherical D orbitals.
# bug fix: modelKitMode replacing atoms with H
# bug fix: bioSMARTS X:Y problem
# bug fix: set logLevel (with no arguments)/show logLevel
# bug fix: alas, MEP mapping has been in Bohr, not Angstroms. Values are actually 1.89x prev. calculation
#            default range set to -0.1 to 0.1 for MEP and MLP.
# new feature: atomic lipophilicity mapping (MLP) and generalized MEP:
#   isosurface sasurface map MLP|MEP [function type (integer 0 to 3)] [resource fileName]
#   isosurface sasurface map MLP|MEP [function type (integer 0 to 3)] [property_xxxx]
#   isosurface sasurface map MLP|MEP [function type (integer 0 to 3)] [property propertyName]
# The defaults are:
#   isosurface sasurface map MEP 0 property partialCharge
#   isosurface sasurface map MLP 3 "http://jmol.svn.sourceforge.net/viewvc/jmol/trunk/Jmol/src/org/jmol/quantum/atomicLipophilicity.txt"

# Implemented here is a flexible way of mapping atomic potential data onto 
# a surface. Given a set of atoms, we assign numbers to the atoms from:
# 
# a) a resource in this package and based on atom names, or
# b) a table of data read from a file and based on atom names, or
# c) an array of properties assigned to the atoms. 
# 
# In addition, once those potentials are assigned, we can apply a variety 
# of functions of distance:
# 
# (0)   Coulomb's law distance function (same as rasmol potential distance function)
# (1)   f * e^(-d/2)
#         Gaillard, P., Carrupt, P.A., Testa, B. and Boudon, A., J.Comput.Aided Mol.Des. 8, 83-96 (1994)
# (2)   f/(1 + d)
#         Audry, E.; Dubost, J. P.; Colleter, J. C.; Dallet, P. A new approach to structure-activity relations: the "molecular lipophilicity potential". Eur. J. Med. Chem. 1986, 21, 71-72.
# (3)   f * e^(-d)
#         Fauchere, J. L.; Quarendon, P.; Kaetterer, L. Estimating and representing hydrophobicity potential. J. Mol. Graphics 1988, 6, 203-206.

# from http://www.life.illinois.edu/crofts/bc1_in_chime/chime_talk/chimescript2.html

# The difference between MEP and MLP is simply the defaults for resource and function:
#
# a) the default resource is property partialCharge for MEP and atomicLipophilicity.txt for MLP
# b) the default function is Coulomb for MEP and Fauchere for MLP

# bug fix: make WebExport Widgets compatible with IE6 through 8 
# bug fix: isosurface vdw map ... not working
# new feature: preliminary molecular lipophilic potential. 
#    isosurface vdw map MLP
# new feature: bioSMARTS indicates all cross-linking for carbohydrates
# bug fix: name conflicts in WebExport Widgets js files.
# bug fix: table now wide enough for colorpicker popup in WebExport.
# bug fix: angstroms measurement unit not showing up as proper A symbol. 
# new feature:  measure search("Ocnc")
#            or measure search "Ocnc"
#      - operates on previously selected atoms
# bug fix: application -- set modelkitmode does not feedback to buttons

# SMILES/SMARTS options summary:
#
# examples:
#
# selecting atoms using SMARTS:
#
# select search("CC")               // selects ALL matching atoms  using SMARTS notation
# select search("CC", 1.1)          // same as above, but within model 1.1
# select smarts("CC")               // would match ethane, exclusively
#
# assigning variables based on SMARTS:
#
# x = {1.1}.find("CC")              // assigns a single bitset to all matching atoms
# x = {1.1}.find("CC", true)        // same as above, but returns an array of pattern matches
# n = {1.1}.find("CC", true).length // counts the number of matches
#
# SMILES string comparison and searching:
#
# x = "CC(C)CC".find("smiles","CCC(C)C")    // smiles matching -- returns an array of length=1
# x = "CC(C)CC".find("smarts","CCCC")       // returns a bitset containing all atoms
# x = "CC(C)CC".find("smarts","CCCC", true) // returns an array of bitsets containing the pattern
#
# generating SMILES and bioSMILES strings:
#
# x = {1.1}.find("SMILES")          // get the SMILES string for the model 1.1
# x = {1.1}.find("SMILES", true)    // get the bioSMILES string for the model 1.1

# - use select search(...) to do SMARTS substructure searching
# - use the find function to assign variables.
# - use TRUE with the find function to retrieve and count matches
# - use find(..).length to count the number of matches
# - use find to get the SMILES or bioSMILES string for a structure

# deprecated/unnecessary:

# select substructure("..")         // same as  select smarts(...
# select within(smarts...)          // same as  select smarts(...
# select within(smiles...)          // same as  select smiles(..., but not recommended
# x = within("smarts", "CC")        // same as {*}.find("CC")  REMOVED in RC25
# x = within("smiles", "CC")        // same as {*}.find("smiles", "CC") REMOVED in RC25

# bug fix: SMILES errors should be reported but not cause script failure
# bug fix: select within("smarts","Cn",all,atomno=19) does not properly 
#          restrict set to only those patterns that include atomno=19
# bug fix: select substructure(...) now synonymous with select SMARTS(), not select SMILES()
#                 as would be expected for substructure searches.  
# bug fix: modelkit connection doesn't modify bonds automatically
# new feature: assign CONNECT {a} {b}  
#           -- does a simple connection, but then,
#              like assign atom and assign bond, fixes hydrogens

# --------------------------------------------------------------

#version=12.0.RC18

# bug fix: set drawPicking/drawHover inconsistent regarding isosurfaces 
# bug fix: exiting modelkitmode does not reset picking/hover settings
# new feature: SMILES/SMARTS C^C and C^^C or C!^C (SMARTS) -- atropisomer (dihedral angle) check
# new feature; SMILES and/or BIOSMILES with /double bond/ stereochemistry 
# new feature: {*}.find("SMILES", asBioSmiles), with asBioSmiles default FAlSE
#    so simply {*}.find("SMILES") gives STANDARD SMILES (noncanonical)
# bug fix: WebExport now defaults to loading split applet
#          when pages are running from server.
# new feature: SMILES reading proposed [C@]=C
# bug fix: SmilesGenerator double bonds
# new feature: Widgets in WebExport
#		Spin on/off checkbox
#		Open Console button
#		Background Color Picker
#		Stereo Viewing Mode Control
#		Animation Control

# --------------------------------------------------------------

#version=12.0.RC17

# bug fix: RC16 probably has chirality errors.
# bug fix: square planar SP3 chirality inverted
# new feature: BIOSMARTS note that for DNA, ":" marks crossing, 
#              and since then the strand sequence reverses, we
#              can then show double helix simply as:
#                select nucleic and smarts("~TGTCCT:AGGACA")
#              or, even simpler:
#                select nucleic and smarts("~TGTCCT:******")
#
# new feature: BIOSMILES format. Examples:

# $ load 1d66.pdb
# $ print {*}.find("SMILES")
# //* Jmol BIOSMILES 12.0.RC16  2010-06-03 21:47 1 *//
# //* chain D dna *// ~CCGGAGGACAGTCCTCCGG.
# //* chain E dna *// ~CCGGAGGACTGTCCTCCGG.
# //* chain A protein *// ~EQACDICRLKKLKCSKEKPKCAKCLKNNWECRYSPKTKRSPLTRAHLTEVESRLERL.
# //* chain B protein *// ~EQACDICRLKKLKCSKEKPKCAKCLKNNWECRYSPKTKRSPLTRAHLTEVESRLERL.
# [Cd][Cd].
# [O]
#
#    Note that the multiple waters are not duplicated here. 
#    After calculating hydrogen bonds, the 
#    base pairing is included in the BIOSMILES. The
#    code for "base pair" is a colon, ":". 
#    //* ... *// are comment allowed by the specification.
#
# $ calculate hbonds
# 108 hydrogen bonds
# $ print {*}.find("SMILES")
# //* Jmol BIOSMILES 12.0.RC16  2010-06-03 21:47 1 *//
# //* chain D dna *// ~C:1C:2G:3G:4A:5G:6G:7A:8C:9A:%10G:%11T:%12C:%13C:%14T:%15C:%16C:%17G:%18G:%19.
# //* chain E dna *// ~C:%19C:%18G:%17G:%16A:%15G:%14G:%13A:%12C:%11T:%10G:9T:8C:7C:6T:5C:4C:3G:2G:1.
# //* chain A protein *// ~EQACDICRLKKLKCSKEKPKCAKCLKNNWECRYSPKTKRSPLTRAHLTEVESRLERL.
# //* chain B protein *// ~EQACDICRLKKLKCSKEKPKCAKCLKNNWECRYSPKTKRSPLTRAHLTEVESRLERL.
# [Cd][Cd].
# [O]
#
#   Jmol will also create a SMILES string for non-bio molecules, but there is no 
#   stereochemistry set yet. That's the next task. (THis model has some extra
#   isotopes just to check that. Note that we use "ring"-bond connected
#   .-separated fragments. This is accepted at the Daylight site. However
#   DEPICT cannot fathom this particular coding for caffeine.
#
# $ load caffeine.xyz
# $ print {*}.find("SMILES")
# //* Jmol BIOSMILES 12.0.RC16  2010-06-03 21:47 caffeine *//
# Cn1[c]([O])[13c]2n(C)[cH][n][c]2[15n](C)[c]([O])1

# --------------------------------------------------------------

#version=12.0.RC16

# new feature: print {*}.find("smiles")  creates BIOSMARTS for structure -- bio only.
# new feature: BIOSMARTS can search strings and includes base-pairing.
#        - print "~CAAGAG".find("smarts","~AGA")
#        - print "~C(G)A(T)G",find("smarts","~A(T)")
# new feature: BIOSMARTS initial "~" indicates 1-character sequence search
#        - just 1-letter codes
#        - "+" bonding implied
#                 select smarts("~AT[Y,C]")
# new feature: BIOSMARTS [.] --> [*.*]
# new feature: BIOSMARTS [ALA.*,O] and [*.0] (lead atom -- P, CA, O)
# new feature: BIOSMARTS -- [RES.ATOM]+[RES.ATOM] etc. 
#    select smarts("[ALA.*]+{[PRO.*]}")  # select all prolines that are after alanine 
#    select smarts("[ALA.*]+{[PRO.C]}")  # select all proline carbonyl carbons that are after alanine 
# bug fix: "backbone" included asp/glu carboxyl groups (RC3)
# bug fix: hyperchem reader does not require FIRST line to start with "mol 1"
# code: JmolMolecule class
# feature change: set rocketBarrels also removes arrow heads for sheets (rockets only, not cartoons)
# new feature: print "CC".find("SMILES"/"SMARTS","MF")  -- molecular formula for SMILES/SMARTS string
# bug fix: rocketBarrels not fully smooth barrels.
# new feature: SMARTS update -- adds full bond logic: 
#  select search("C=,-;!@C")  -- C-C double or single bonds (C=,-C) that are also(;) non-ring(!@) 

# --------------------------------------------------------------

#version=12.0.RC15

# new feature Jmol reads SMILES --> 3D  from http://cheminfo.informatics.indiana.edu/rest/thread/d3.py/SMILES
#       see http://cheminfo.wikispaces.com/smi23d
# new feature: load SMILES "smilesstring"
# new feature: load $smilesString

# code: file reading clean-up in Viewer
# bug fix: 12.0.RC6 (4/17) inadvertantly left in "false &&" in if statement in atom iterator broke:
#         polyhedra 2.0, geosurface, dots, and slows isosurface molecular more than 2-fold 
# new feature: FIX command takes argument like display or select. But ensures no atoms of this 
#   set will be moved or dragged anywhere accidentally.

# bug fix: isosurface selecting 2nd model while two are displayed produces no surface
# new feature: set picking dragMinimizeMolecule (docking)
#   Using the model kit, you can load two models and then
#   use "drag and minimize molecule (docking) to move a model around and 
#   watch how it responds to its fixed environment (within 5.0 A). If you have a ligand and a receptor,
#   if you move the ligand, it will minimize; if you move the receptor, it will minimize.
#   You can undo any change using CTRL-Z and redo it with CTRL-Y.
# code: BitSetUtil.setBit()
# bug fix: within() with the all-molecules flag was not working.
# bug fix: isosurace PMESH inline not working 
# new feature: allowModelKit
# new feature: modelkitmode expanded; "all frames" icon added in application
# bug fix: improper/incomplete deletion of atoms   
#   NOTE: Jmol 11.9 should not be considered ready for atom deletion
# code: refactoring for proper deleted atoms processing
# code: circle-drawing simplified; better highlight; POV-Ray halos fixed
# new feature: assign ATOM {atom} "Symbol or Pl or Mi"
#    -- changes the type of {atom} to the given symbol or changes the charge up (Pl) or down (Mi) by one
#    -- adjusts valence with hydrogens as necessary
#    -- for example:   assign ATOM {atomno=3} "C"
# new feature: assign ATOM {atom} "type" {x y z}
#    -- creates a new atom at {x y z} of the given type, connected to {atom}
# new feature: assign BOND {bond} "2"
#    -- modifies the bond and fixes valences at the two ends using hydrogen atoms

# bug fix: synchronized (function) does not allow mouse-based function calling
#
# TODO: Model Kit icons for atom/bond menus, rings, rotation
#
# new feature: set picking assignAtom_+/- changed to assignAtom_Plus/Minus
# new feature: set picking assignBond_+/- changed to assignBond_Plus/Minus
# new feature: set modelkitMode
#       -- establishes three context menus -- atom, bond, and modelkit
#       -- allows extensive and easy modification of structures
# TRIAL CHANGE: JmolApplet.jar and JmolAppletSigned.jar do not contain translations
#         for translations, use JmolApplet0.jar and JmolAppletSigned0.jar
#         this saves almost 30% in file size. Otherwise all the translations for
#         all languages are included in every download to every browser.
#         Point being that one should not use JmolApplet.jar or JmolAppletSigned.jar
#         in "production" mode -- they are just too big!
# bug fix: after deleting atoms, connections can be found to deleted atoms

# --------------------------------------------------------------

#version=12.0.RC14

# bug fix: draw xx* delete -- does not recognize xx* as wild
# bug fix: restore coord does not recalculate shapes
# new feature: set highlight {atom set}  or set highlight OFF
# new feature: set picking assignAtom_Xx where Xx is an element
#                  assigns the picked atom to that element and
#                  bonds nearby atoms if present to form rings
# new feature: set picking assignAtom_+  # increments charge
# new feature: set picking assignAtom_- # decrements charge
#                  all three adjust valence accordingly using hydrogen atoms 
# new feature: set bondPicking -- independent of atom picking
# new feature: set picking assignBond_+  # increments bonding
# new feature: set picking assignBond_- # decrements bonding
# new feature: set picking assignBond_0|1|2|3  # sets bonding
#                  all three adjust valence accordingly using hydrogen atoms 
 
# new feature: CTRL-V will load file in clipboard or fail gracefully
# new feature: CTRL-Z single undo of deletion/modification actions
# new feature: set picking invertStereo
# bug fix: minimization after atom deletion

# --------------------------------------------------------------

#version=12.0.RC13

# new feature: application title changes with animation frame change
# new feature: file system directory clip file name(s), then CTRL-V into Jmol --> loads files
# bug fix: Crystal reader broken
# bug fix: AtomSetChooser not producing heirarchy of models
# bug fix: within(BASEPAIR) incorrect logic check
# code: ActionManagerMT and associated interfaces moved to org.jmol.multitouch
# bug fix: smiles, mac problem with latest pre-release build
# new feature: set picking dragMinimize -- drags and minimizes all atoms in the molecule containing the picked atom
# new feature: set picking dragAtom -- drags the atom picked to a new location
# code: TransformManager removing pointT
# bug fix: dragSelected could be off by 1 pixel
# bug fix: working on the 1.5/1.4 problem -- all unnecessary 1.5 coding switched back to 1.4 format
#   including String.contains; parallel processing Executor class isolated from Viewer
# bug fix: select within(SMILES,@x) not working

# code: adding org/jmol/smiles/package.html
# bug fix: About Jmol HTML does not change language

# --------------------------------------------------------------

#version=12.0.RC12

# bug fix: set measurements 0.05 not saved in state
# bug fix: SMILES business not working outside of first frame
# new feature: m = compare({2.1},{1.1} [,"SMARTS" (default)|"SMILES"],"smartsString..." [,"stddev"])
#              does a MATCH of atoms, then a compare 
# new feature: compare {2.1} {1.1} "[OH]ccOC" translate rotate
#              SMARTS implied, but keyword SMILES or SMARTS can be used as well:
#              correlates and moves model 2.1 to best fit for 1.1 based
#              on the mapping of atoms from the SMARTS string

# --------------------------------------------------------------

#version=12.0.RC11

# code: addX(x) where x is Float.NaN should use the string "NaN"
# new feature: compare function with STDDEV option returns "NaN" if a comparison is not possible
# new feature: load @x where x is an array of filenames
# bug fix: @x not allowed in strictly STRING context such as select search(@x)
# bug fix: 12.0.RC3 breaks select *.O1
# new feature: 3D-Search "d" -- non-hydrogen connections
# new feature: 3D-SEARCH $XXX="SMARTS-code"; .... [$XXX] ... 
#              select search(' \
#				$Aro1="[a&!$(aC)]" (i.e. aromatic not attached to aliphatic carbon); \
#               $CarbonylO="O"; \
#               {[$CarbonylO]}[$Aro1] \
#				')
# new feature: 3D-SEARCH allows white space
# bug fix: state involving JME files not properly loaded
# bug fix: load FILTER not saved in state when not involving a lattice
# bug fix: "axesScale" saved in state as "axisScale"
# bug fix: messageStyleChime needs #xxx reports 
# bug fix: restrict cell={2 2 2} position depends upon current unit cell	
# refactoring with JmolNode, JmolEdge, and Elements
# new feature: JmolSmilesApplet.jar -- just checks SMILES strings 
# new feature: "xxxx".find("smiles","yyyy") will match ALL types of stereochemistry, 
#              including cis/trans -- for example, all of these return "1":
# print "O[C@](F)(Cl)I".find("smiles","O[C@](F)(Cl)I")
# print "O[C@](F)(Cl)I".find("smiles","[C@](O)(F)(Cl)I")
# print "O[C@](F)(Cl)I".find("smiles","[C@@](O)(Cl)(F)I")
# print "OC(Cl)=[C@]=C(C)F".find("smiles","OC(Cl)=[C@AL1]=C(C)F")
# print "OC(Cl)=[C@]=C(C)F".find("smiles","OC(Cl)=[C@AL2]=C(F)C")
# print "F[Po@SP1](Cl)(Br)I".find("smiles","F[Po@SP1](Cl)(Br)I")
# print "F[Po@SP1](Cl)(Br)I".find("smiles","F[Po@SP2](Br)(Cl)I")
# print "S[As@@](F)(Cl)(Br)C#O".find("smiles","S[As@@](F)(Cl)(Br)C#O")
# print "S[As@@](F)(Cl)(Br)C#O".find("smiles","O#C[As@](F)(Cl)(Br)S")
# print "S[Co@@](F)(Cl)(Br)(I)C#O".find("smiles","S[Co@@](F)(Cl)(Br)(I)C#O")
# print "S[Co@@](F)(Cl)(Br)(I)C#O".find("smiles","O#C[Co@](F)(Cl)(Br)(I)S")
# print "F/C=C/F".find("smiles","F/C=C/F")
# print "F/C=C/F".find("smiles","F\\C=C\\F")
# print "C(/F)(Cl)=C/F".find("smiles","C(/Cl)(F)=C\\F")
# print "C(/F)(Cl)=C/F".find("smiles","C(\\F)=C(/Cl)F")

# bug fix: JME load can place H in wrong side if SP2 is detected
# bug fix: atom.bonds may be null
# new feature: { } in search string selects only that subset of atoms within the braces
# new feature: smarts() function changed to search()
# new feature: full implementation of 3D-SEARCH
# code: org.jmol.smiles.SmilesAromatic.java 
# new feature: select search("searchString", {selectedAtoms})
#                allows determining aromatic rings that are connected to metals

# --------------------------------------------------------------

#version=12.0.RC10

# bug fix: isosurface sigma x.x not properly implemented
#          "sigma 3.0" means "3.0 times the cutoff associated with sigma = 1.0"
#          this to be consistent with the Aztex viewer sliders that set the value of
#          1.0 to be "1.0 sigma" and then scale based on that.
# new feature: "3D-SEARCH" -- search("a") assigns aromatic based on 3D geometry --
#                 -- flat ring of 3-7 atoms with all substituents directly in plane
#              true, not the official designation, but far more practical than checking bonds
#              -- will pick out rings in HIS, TYR, TRP, nucleic acid bases, etc.
# new feature: full set of allenic, tetrahedral, square planar, trigonal pyramidal,
#              and octahedral smiles/search/substructure stereochemistry
#              tested against all structures described at 
#              http://www.daylight.com/dayhtml/doc/theory/theory.smiles.html#RTFToC24
# new feature: smiles/search/substructure adds allene stereochemistry:
#     select search("C(Cl)(C)=[C@@]=C(F)[H]")
# new feature: smiles/search/substructure adds double bond stereochemistry:
#     select search("C(O)/C=C/([CH2])C")
# new feature: "search" does not include attached hydrogens in match
# new feature: smiles/search/substructure with tetrahedral chirality
#    select search("C[C@@]([C]=O)([CH])[CH2]")
# code: Smiles refactoring and efficiencies
# note: I realize that search and smiles is a can of worms, particularly in 
#       relation to aromaticity. Ignoring that for now.
# new feature: {atomSet}.find(["SEARCH",]"searchString"[,isAll])
# new feature: {atomSet}.find("SMILES","smilesString"[,isAll])
# new feature: "smilesString".find("SEARCH","searchString" [, isAll])
# new feature: select search("searchString")
#              search does not do implied H atoms, making it much easier to
#              use for pattern matching, which it was made for. 
# new feature: select SMARTS("smilesString") alias for substructure(..)
#              more specific and relevant -- SMILES strings are supposed to 
#              be for full molecules, not substructure searching
# new feature: JME data saved in variable "jmeString" for later generation of 2D data
# new feature: "smilesString".find("SMILES","smilesString" [, isAll (FALSE)] )
# bug fix: SMILES parser not properly checking explicit double bond check
# new feature: SMILES matching expanded to aromatic types
# bug fix: Spartan reader (compound document) misread# code: frequency reading standardized -- using auxiliaryInfo.modelProperties more effectively
# code: note that then getProperty modelInfo will return constraints, energies, and vibrational frequency info
# CHANGED FEATURE: set loadDefaultOrientation retired (Sygress/CAChe and Spartan files only) in favor of FILTER "noOrient"
#                  note that this will change the default orientation for these files to be the one last
#                  saved in the actual .spartan or .csf file. 
# bug fix: undocumented obscure reference to nonstandard Hall symbols disregarded in readers
# new feature: isosurface "=nnnn" automatically loads Uppsala Electron Density Server data
# new feature: edsUrlCutoff, edsUrlFormat sets method of getting cutoff and file from electron density server
#      String edsURLFormat = "http://eds.bmc.uu.se/eds/dfs/%LC13/%LCFILE/%LCFILE.omap";
#      String edsURLCutoff = "load('http://eds.bmc.uu.se/eds/dfs/%LC13/%LCFILE/%LCFILE.sfdat').lines.find('MAP_SIGMA').split(' ')[2]";
#   LCFILE is file.toLowerCase(); LC13 is file.substring(1,3).toLowerCase()
# bug fix: state should not be saving loadFormat, edsLoadFormat, or edsLoadCutoff
# bug fix: isosurface LATTICE option not generating copies for export
# code: all exporters may write files directly  (was just POVRAY)

# --------------------------------------------------------------

#version=12.0.RC9

# bug fix: mo parameters not restored properly from state
# application: File menu "Output Console" changed to just "Console"
# code: support for Java 1.0, 1.1, 1.2, 1.4 dropped (MouseManagers and JmolPopup, Graphics3D)
# bug fix: parallel:
#   ScriptEvaluator: Given function object holds state, it can not be 
#     called from two threads at the same time. So, runFunction is wrapped in synchronized(function).
#   ParallelProcessor: Is modified to use lock object vs this as this is used in ScriptEvaluator.
#   Viewer: Change to Executor factory to use different thread executor, 
#     thus avoiding deadlock if parallel functions call parallel functions and 
#     allows parallel processes to be eligible to run.
# new feature: script level iteration max increased to 20 (still just an arbitrary number)
# new feature: "boundingBox" alias for "boundBox", also "boundingBoxColor" and "showBoundingBox"
# new feature: reading mol file stereochemistry bond types 1 and 6
# bug fix: fix for write POVRAY "xxx" not writing file for signed applet
# new feature: wait cursor for file loading and isosurface creation
# bug fix: CSF reader upgrade
# bug fix: stereochemistry addtion for JME skipping some wedges
# bug fix: writing MOL files with aromatic bonds fails
# bug fix: It is possible for PDB files (1tmv) to include non-crystallographic
#          symmetry operations. These operations do not fit the standard model of
#          Jones-Faithful operator syntax. (The symmetry in this case is a spiral)
#          In that case, the list of symmetry operations may be truncated, and though
#          all the atoms are in the correct positions, "select symop=49" might not work.
# bug fix: PDB biomolecule reading misses a set if the first is not "x,y,z" 
# code: Java 1.5 required. (this has been the actual case for some time)
# code: UFF Calcution tweak:        // added b.type == "C_2+" for cations 12.0.RC9
# bug fix: UFF calculation fails to recognize C+ and C-
# bug fix: POV-Ray exporter should not store file path in .ini file
# code: unitcell cleanup
# bug fix: boundbox {1/2 1/2 1/2} {1/2 1/2 1/2} not working
# new feature: CRYSTAL reader orients unit cell
# code: general capability to orient unit cell
# new feature: isosurface lattice {a b c}
#  -- can be applied AFTER the fact -- it is just a rendering method
#  -- best carried out with PACKED unit cells
# bug fix: major upgrade for state preservation of isosurface
#  -- no longer ;# xxxxx 
#  -- command in state reflects variable insertion
#  -- sign colors not having desired effect

# --------------------------------------------------------------

#version=12.0.RC8

# code: modelsetbio efficiencies
# new feature: axes labels "a" "b" "c" "-a" "-b" "-c"  -z- extended to 6 from 3
# bug fix: axes, boundbox, unitcell tick labels did not start properly for format ["%0.2f", ...]
# bug fix: unitcell ticks should allow fractional coordinates; "scale HKL" not implemented
# code: removal of "simple" atom option for polyhedra
# bug fix: polyhedra collapsed incorrect shading calculation
# bug fix: ParallelProcessor upgrade
# bug fix: sigma option for isosurface 1/sigma?
# bug fix: binary document reader may not read full set of bytes in byte array when using http:

# --------------------------------------------------------------

#version=12.0.RC7

# bug fix: unicode characters in filenames
# bug fix: isosurface broken in 12.0.RC6
# new feature: drag-and-drop defaults for map files and PDB files
# bug fix: VRML exporter fails to remove duplicate spheres if not same color
# bug fix: states not saving correct path to isosurface files
# new feature: spacefill, halos, stars -x.y is "ONLY" as for other shapes
# bug fix: _atomPicked not updated for centering or other non-identify actions
# new feature: model numbers can be given as "2.1" in quotes
# bug fix for parallel processing and isosurface

# --------------------------------------------------------------

#version=12.0.RC6

# new feature: MO MODEL x.y .... specifies which model to use
#
# code: atom iterators made thread safe and optimized a bit
#
# code: parallel processor in place; working; 
#       tested on dual core multiple processor Mac
#       result -- 8 sec --> 4 sec for the two molecular surfaces
#
# example PARALLEL code: see http://chemapps.stolaf.edu/jmol/docs/examples-11/data/multiProcessTest.spt
#
# parallel makeIsos{
#   process{isosurface s1 molecular}
#   process{isosurface s2 molecular; color isosurface green}
# }
# load 1crn.pdb
# t = now()
# makeIsos
# print now() - t   
#
#  parallel: 4 s, not parallel: 8 s  MacBook Pro/Windows, two processors 
# 
# print "------------------------"
# parallel showMOs(i,j) {
#   process{mo model 1.1 @i}
#   process{mo model 2.1 @j}
# }
# 
# load files "C6H6.smol" "C6H6.smol"
# showMOs(22,23)
# frame *;
#
#
#
# code: ShapeManager created; all shape[] references out of ModelSet
# code: preliminary PARALLEL {.... PROCESS {....} ....}
# code: Normix3D refactoring
# bug fix: set measureAllModels not working properly 
# bug fix: isosurface renderer subtle improvement for almost-degenerate-vertex triangles
# new feature: set monitorEnergy -- preliminary idea only
# bug fix: UFF carbonyl out-of-plane calculation coding error does not minimize carbonyl groups correctly

# --------------------------------------------------------------

#version=12.0.RC5

# new feature: multiple file drag and drop into application and signed applet
# new feature: minimize SILENT
# new feature: JME file loading uses minimize silent addhydrogens
# new feature: drag and drop into signed applet
# new feature: drag and drop from link, state-image for MSIE and Mozilla
# new feature: load INLINE "......jme data...."
#   really only for JME data, since there is no option for multiple lines
# same as 
#   x = ".....jme data...."; load "@x" (which does allow for multiple lines)
#
# code: removed unused, undocumented load DATA option
# new feature: mol file FILTER "2D" option
# new feature: within("smiles",{atomSet}[,{requiredAtoms}])
#  -- removed in RC17 -- just need search("SMARTS string",{atomSet})
# new feature: x = {}  as "empty set"
# code: jme 2D to 3D enhancement
# bug fix: resolver could consider some CUBE files to be MOL files
# bug fix: deleting atoms or bonds does not reset molecules
# bug fix: GOTO command broken within IF construct
# bug fix: restrict ... with dots ON causes NPE
# new feature: select CYSTINE
# new feature: set minimizationSilent
# code: org.jmol.api.smilesMatcherInterface
#             public abstract BitSet[] getSubstructureSetArray(String smiles)
# new feature x = within("smiles",smilesString)
#   returns ARRAY of bitsets -- all matching sets
#      $ x = within("smiles", "[C]1[C][C][C][C][C]1") # get all cyclohexane rings
#      $ print x
#      ({0 1 3 5 6})
#      ({0 2 4:6})
#   -- REMOVED in RC25
# TODO: add this to read JME cyclohexane rings better?
# new feature: JME reader reads stereochemistry and automatically adds hydrogens and does minimization
#  this can be prevented using FILTER "nominimize"
# bug fix: JME reader broken
# new feature: show within(nResidues, GROUP, {atoms})
# new feature: show basepairs
# new feature: within(sequence, "GCAUGGC")
# new feature: within(basepair)
# new feature: within(basepair, "GCAU") # canonical RNA
# bug fix: within("GC") not working

# --------------------------------------------------------------

#version=12.0.RC4

# new feature: repaintWaitMs (1000)
# bug fix: hiding of HBONDS does not work properly with set HBONDS BACKBONE
# bug fix: hiding of RNA backbone does not work properly
# bug fix: drag selected (App icon) does not work properly)
# code: better molecule calculation
# new feature: negative sizes for cartoons, rockets, trace, backbone, wireframe, etc. implies ONLY
# new feature: set rangeSelected now applies to any property, not just temperature
# new feature: much improved nucleic hydrogen bonding -- see 2qnh.pdb
# bug fix: x = {atomno < 10}; select x fails
# bug fix: subtle cartoonRenderer error involving --i > 0;
# bug fix: rockets miscalculation of sheet parameters since forever (load 1ag6.pdb;rockets on)
# bug fix: atomSite incorrectly assigned in AtomSetCollection for BIOMOLECULE generation
# code: hermite renderer did not need global integer -- causing exception when rendering threads clash
# bug fix: write PNG  does not properly indicate that it is going to the clipboard
# code: better handling of VAR local variables
# new feature: VAR variables are now local to FOR and WHILE loops, as in Java
# new feature: { } will group contexts for VAR variables:
#   x = 3
#   { var x = 10; print x } 
#   print x  # x=3 again
# real reason for this is to allow state to define commands with localized variables:
# {
#  var x1 = .....
#  var x2 = .....
#  isosurface @x1  @x2 ...
# }
#  
# code: OutputStringBuffer class -- allows optional writing to file instead of a StringBuffer
# code: better file i/o for certain write operations
# new feature: filter "#<n" where n is one more than the last biomt you wish to load. 
# bug fix: site_ definitions should be dynamic.

# --------------------------------------------------------------

#version=12.0.RC3

# code: smarter atomName save/lookup using PDB atomID
# bug fix: with unremediated PDB files, searching for *.C1' returns nothing 
# code: dispensing with specialAtomID array
# bug fix: Jmol pseudo-hydrogen bonds were sometimes between two carbonyl groups  
# bug fix: structures with 400000+ atoms may be loaded
# bug fix: calculated hbonds not retaining energy or type when saved to state
# bug fix: color hbonds ENERGY causes NPE when non-calculated HBonds are created
# code: smarter SmarterJmolAdapter deletes atoms as it goes to conserve resources
#       - allows loading of much larger models
# code: ModelLoader distinguishes between small molecules and large molecules
# bug fix: simple model appended to model having unit cell does not show axes
#
# new feature: set smallMoleculeMaxAtoms [default 40000]
#   This parameter sets the maximum number of atoms for default rendering of the model. 
#   Models with this number or fewer atoms will be rendered with the default spacefill 
#   rendering and the default bond diameter; models with more than this number of atoms 
#   will be displayed by default with <b>spacefill 0; wireframe 1</b> for chains that
#   contain bonds and <b>backbone</b> for those that do not in order to conserve resources.
#
# new feature: calculate hbonds {....} {....} for models with H atoms
#  - H atoms must be in first set; atoms to consider must be in second set.
#  - no restriction in second set as to atom type other than that H atom in that set will be ignored.

# --------------------------------------------------------------

#version=12.0.RC2

# bug fix -- recent GAMESS f-orbital read error
# bug fix -- recent MOL file read failure

# --------------------------------------------------------------

#version=12.0.RC1

# release candidate 1 for Jmol 12.0 
#
# bug fix: hbonds delete broken
#
# new feature: rotate SYMOP n {atomSet} 
#    n < 0 indicates "reverse"
# code: generalized d/f orbital order reading
# bug fix: WebMO f-orbital order fix
#
# new feature: invertSelected STEREO {center} {atomsToInvert}
#
#   Does a rotation of 180 degrees around a center about a line connecting
#   the center and the geometric center of any connected atoms not in the
#   list to invert. The results is the standard organic chemist's 
#   "stereochemical inversion" at that point -- which does not 
#   invert stereochemistry along the branches.
#
# bug fix: set minimizationCriterion, set minimizationRefresh, set minimizationSteps
# code: matrix3f/matrix4f JmolScript improvements
# bug fix: load "@x" loads model twice when the saved state is restored
# bug fix: load "@x" does not preserve load options
# bug fix: UnitCell in appended model but not first model does not display
#
# new feature: function compare({bitset1} or [{positions1}],{bitset2} or [{positions2}])
#
#   Takes either two sets of atoms or two arrays of atom positions
#   and returns a 4x4 matrix m indicating the rotation (m%1) and translation (m%2)
#   required to BEST transform set 1 into set 2. Unlike the COMPARE command,
#   No filtering is done -- every atom or position in set1 is compared with every 
#   position in set2. Optional third parameter "stddev" allows return of just 
#   the RMSD for this comparison. For example:
#
#     m = compare({2.1 and spine and 92-100}, {1.1 and spine and 27-35})
#
# new feature: %1 and %2 modulus for Matrix4:
#
#     m4%1 (rotation matrix)
#     m4%2 (translation vector)
#
#   (Note that quaternion(m4%1) then returns a quaternion equivalent of the
#   rotation matrix.)
#
# new feature: rotate [selected] COMPARE {bitset1} or [{positions1}],{bitset2} or [{positions2}]
#
#   Compares the atom positions or coordinate arrays and moves either
#   the selected atoms or the current view. So, for example:
#
#     tempcoord = {2.1}.xyz
#     compare 2 {2.1} {1.1} ROTATE TRANSLATE
#     [...later]
#     select {2.1}; rotate selected COMPARE {2.1} @tempcoord -2 
#
#   Over the course of 2 seconds ("2" would mean 2 degrees per second)
#   the atom positions of model 2.1 will be moved back to their original
#   positions that they had prior to the compare operation.
#   
# new feature: rotate [SELECTED] TRANSLATE {x y z} [extent] [rate]
#   
#   same as TRANSLATE {x y z} (SELECTED is implied), but allows for
#   an animation of the process. When not combined with a rotation,
#   the optional extent is in Angstroms and rate is in AngstromsPerSecond, 
#   otherwise extent is in degrees and rate is in degreesPerSecond.
#
# new feature: rotate [SELECTED] [HELIX] (matrix variable)
#
#   Allows rotation and translation by a 4x4 matrix. The optional
#   parameter HELIX moves the atoms along the optimal helical path.
#   For example: 
#
#     x = compare({2.1 and spine and 92-100}, {1.1 and spine and 27-35})
#     select 2.1
#     rotate selected @x -3
#
# new feature: compare nSeconds ...
#
#   Animates the compare move over a number of seconds.
#
# bug fix: compare ORIENTATION can give spurious result
#

# --------------------------------------------------------------

#version=11.9.36

# bug fix: Spartan and WebMO orbitals are already normalized!
# new feature: GenNBO file reader for xx.31-.41 files and .nbo output if in that directory
# new feature: can append gennbo data to Gamess, Gaussian, Jaguar, NWChem, Psi, or Qchem calculation
# bug fix: Gaussian04 reader unexpected lower case reading end of MO data
# bug fix: LCAOcartoon saving in state causes bug.
# bug fix: show symop  by itself AFTER show symop n does not show full list
# bug fix: GAMESS reader misreading vibrations since 11.9.32
# bug fix: load "xxx" AS "yyy" fix
# bug fix: set dragSelected; set pickingStyle drag  doesn't refresh properly

# --------------------------------------------------------------

#version=11.9.35

# new feature: quaterion(array1,array2,"relative")
# bug fix: translateSelected X .. broken
# new feature: property SELECTED float settable:
#              {atomno<10}.selected = true
#              print {*}.selected   # fraction selected
# new feature: color "rwb" [TRANSLUCENT]
# new feature: quaternionFrame "a" extended to nucleic acids (CA or P only)
#                 (changed to "B" for "backbone" in 12.0.RC23)
# bug fix: calculate hydrogens for R--N fails
# bug fix: measure() function not checking units
# bug fix: translate X broken

# new feature: compare {model1} {model2} subset {....} ...
#   just allows a somewhat cleaner command line:
# compare {2.1} {1.1} subset {*.CA} {1-20} {6-25} {25-30} {40-45}

# --------------------------------------------------------------

#version=11.9.34

# new feature: SPINE predefined set 
#        includes *.CA, *.N, *.C   and   *.P, *.O3', *.O5', *.C3', *.C4', *.C5'
#        does NOT include phosphate oxygens OP1 and OP2 (should it?)
#
# new feature: COMPARE command (was ALIGN; was default "orientation")
#
#     * see Berthold K. P. Horn,
#     * "Closed-form solution of absolute orientation using unit quaternions" J.
#     * Opt. Soc. Amer. A, 1987, Vol. 4, pp. 629-642
#     * http://www.opticsinfobase.org/viewmedia.cfm?uri=josaa-4-4-629&seq=0
#     * 
#     * and Lydia E. Kavraki, "Molecular Distance Measures"
#     * http://cnx.org/content/m11608/latest/
#
#   compare {model1} {model2} {bsAtoms1} {bsAtoms2} 
#   compare {model1} {model2} {bsAtoms1} {bsAtoms2} {bsAtoms1'} {bsAtoms2'} ... 
#   compare {model1} {model2} orientations
#   compare {model1} {model2} orientations {bsAtoms1} {bsAtoms2} 
#   compare {model1} {model2} orientations quaternionList1 quaternionList2 
#     additional options for above: ROTATE and/or TRANSLATE
# new feature: set QuaternionFrame "C" for nucleic redefined
# code: better treatment of RESTORE COORD when going back to the file default
# new feature: set QuaternionFrame "P" for nucleic (phosphorus)
#              based on center P[i], O[i-1], O[i] 
#              (note that this changes the default, since "P" is 
#              the default quaternionFrame, and that was being ignored
# bug fix: deleted atoms included in isosurface calculation
# 
# --------------------------------------------------------------

#version=11.9.33

# bug fix: black shades lost in writing (antialiased) images
# new feature: ALIGN command (but see 11.9.34 -- changed to COMPARE):
#
#  align {modelFrom} {modelTo} {atomsFrom} {atomsTo}
#
#  aligns modelFrom with modelTo based on orientations and
#  center of mass of atomsFrom and atomsTo
#
# uses quaternion mean to minimize ORIENTATIONAL difference between
# atomsFrom and atomsTo. Quaternions are created based on the setting
# of quaternionFrame; non-PDB files are not yet supported.
#
# new feature: widgets in WebExport (background colorpicker, spin on/off, stereo mode).
#     internal documentation for this is not complete.
# bug fix: isosurface cavity not working when some atoms are hidden.
# new feature: quaternion(quaternionArray1) # quaternion mean
# new feature: quaternion(quaternionArray1, quaternionarray2) # difference array
# new feature: x**y for Math.pow(x,y)
# new feature: quaterion array  .average .stddev  using SphereMean
# bug fix: using --i instead of i-- with for causes infinite loop
# new feature: .x, .y, .z all work as well as .atomx, .atomy, .atomz
# bug fix: fx, fy, fz, ux, uy, uz all fail to work
# bug fix: some problems with set picking labels and conflicting mouse actions, no refresh
# bug fix: spin $line1 when $line1 is a set of lines in different frames fails
# bug fix: spin $line1 followed by spin $line2 causes spin to stop rather than switch axes.
# bug fix: draw FIXED arc, curve, arrow -- no reason not to do this, I think.

# --------------------------------------------------------------

#version=11.9.32

# bug fix: isosurface colorscheme not always being saved properly in state
# bug fix: isosurface ;# command extension not being truncated upon state save
# bug fix: isosurface boundbox option not saved properly in state
# bug fix: hbonds after wireframe will be thin
# new feature: translateSelected X|Y|Z ....
# new feature: con		nect 80% 120% ......
#    uses percentages of bonding/ionic radii instead of static values.
# bug fix: lcaocartoon "s" is not being saved in state
# new feature: lcaocartoon scale 1.0 "cpk" // creates isosurface at current spacefill radius; 
#       can be used with slab and cap
# new feature: lcaocartoon slab/cap unitcell/boundbox
# new feature: isosurface slab/cap UNITCELL
# new feature: isosurface slab/cap BOUNDBOX
# bug fix: ADF reader not reading degenerate orbital energies properly
# code: major reader overhaul.
# new feature: GROMACS reader allows {i j k} notation and unit cell
# new feature: readers can now assign atomic data for atoms of the "property_" type
#    implemented for property_spin and property_magneticMoment in CrystalReader
#    for example:
#
#  load "crystal::full_PBE40.out"
#  select property_spin = 1;   label "\u2191"  # up arrow
#  select property_spin = -1;  label "\u2193"  # down arrow
#  select *; font labels 35
#
# bug fix: All water should be included in the 'solvent' set

# --------------------------------------------------------------

#version=11.9.31

# bug fix: select IONS broken
# bug fix: calculate hydrogens skipping atoms that already have H attached.
# bug fix: isosurface CCP4/MRC reader insideout problem
# new feature: isosurface map DSN6/O reader
# bug fix: load models {(.....)} not preserved in state
# code: simpler adapter class -- atomSetNames and atomSetProperties into atomSetAuxiliaryInfo
# new feature: frame TITLE  alone sets title to "@{_modelName}"
# new feature: vector scale range now -100 to 100
# bug fix: structure HELIX {3-4}   will cause 5-... to lose structure type
# bug fix: select 1:3.*
# new feature: Crystal output reader http://www.crystal.unito.it/ 
#  -- thanks to Pieremanuele Canepa for contributing this
# new feature: unit cells for SLAB (2D) and POLYMER (1D) periodicity 
# new feature: frame title "@{_modelName}" similar to echo "@{_....}"
#                modified upon rendering to reflect new model during animation
# new feature: frame all;frame title ... sets frame title for all visible frames

# --------------------------------------------------------------

#version=11.9.30

# bug fix: Mac opening file dialog does not read files from local drive
# bug fix: DGRID reader bug for symmetries with long descriptions: T1.g_1
# new feature: isosurface SIGMA 1.0 "filename.ccp4"  -- uses "rms" value in file assda "sigma"
#              not applicable to other file types.
# bug fix: MRC/CCP4 reader defaults set to SIGMA 1.0 (was SIGMA 2.0)
# bug fix: isosurface fragments broken by bitset upgrade
# bug fix: WebExport changing instance dimensions no longer causes wrong static image assignments
# new feature: load "filename" 0 -- loads LAST model only (usually the optimized geometry)
# bug fix: quaternion and ramachandran frames broken by bitset upgrade
# new feature: app "open Url" allows "=1crn" or just "1crn"
# code: preliminary set useArcBall -- Ken Shoemake's idea for better mouse drag action
# code: very prelminary http://www.cse.clrc.ac.uk/cmg/CRYSTAL/ output reader
# bug fix: some VASP files not readable because they contain ">vasp <" instead of ">vasp<"
# bug fix: calculate hydrogens for cumulenes -- but not for whole molecule
#          because in this case the addition of hydrogens to one atom affects the addtion to the next
#          and the calculation does only one pass. Will be a complicated fix that
#          will require incremental merging atom-by-atom.
# bug fix: after hydrogen addition, name inappropriately changes to "merge"
# bug fix: minimization not running properly as part of a larger script
# bug fix: selection after deletion includes unwanted atoms
# bug fix: minimization after atom deletion problem
# bug fix: select DNA, select RNA broken
# bug fix; applet console double-reporting information
# bug fix: [state] button in app console not showing state
# bug fix: calculate hydrogens for terminal alkenes

# --------------------------------------------------------------

#version=11.9.29

# bug fix: some problems with deleted atoms not properly deleting bonds
# bug fix: minimization not reset after changes of atom position, element, bonds

# new feature: set picking deleteAtom
# new feature: set isKiosk TRUE  -- forces focus at all 
#              times and presumes no underlying applets. 
#              This allows multi-touch to activate immediately
#              and not wait for a second click

# --------------------------------------------------------------

#version=11.9.28

# bug fix: memory leak in shape.setProperty() XML business
# bug fix: nodisplay mode could crash
# new feature: frank may be turned off by local signed applet
# new feature: _multiTouchServer and _multiTouchClient flags
# bug fix: isosurface cavity broken
# code: FastBitSet implemented for isosurface and dots
# bug fix: exit command exits Jmol instead of just the script or previous scripts
# bug fix: load sometimes not properly accounting for unique axis information
# bug fix: web export- dimension spinners now show dimensions of chosen instance
# bug fix: web export- syncLists function now works for more than two lists.
# new feature: web export- changing dimension spinners after an instance is added
#    now updates the dimensions of the selected instance.

# --------------------------------------------------------------

#version=11.9.26

# bug fix: Rasmol radii broken.

# --------------------------------------------------------------

#version=11.9.25

# bug fix: 11.9.24 IS BROKEN - DO NOT USE --- set of models from atoms totally incorrect
# bug fix: application entry of multiple-line commands without final CR causes array pointer exception

# --------------------------------------------------------------

#version=11.9.24

#
# new feature: implicit "script" command with just a filename, possibly in quotes:
#
#  test.spt
#  'testing now.spt'
#
# new feature: {xxxx}.ionicRadius = x.y
# new feature: set mouseWheelFactor 1.02  (Jmol 11.8: 1.15)
# new feature: set mouseDragFactor 1.0    (*180 degrees gives rotation across full screen)
#
# code: implicit script command: xxxxx.xxx -- "set" structure, but without equals and of length 3
# code: added 1000 ms timeout for the wait() in RepaintManager.requestRepaintAndWait()
#       to try to avoid lock-up. Fingers crossed.
# new feature: set logCommands --- logs commands to file if set logFile "somename" has been given
# new feature: set logGestures --- logs gestures (swipe, pinch, zoom, rotate)
# new feature: set waitForMoveTo --- allows asynchronous moveTo commands
# new feature: mouse binding: double-click left bound to "_stopMotion" action
# new feature: moveto STOP  -- stops asynchronous moveTo motion

# code: much clearer StateManager.GlobalSettings details; some parameter cleanup
# bug fix: drawHover status not reported properly after zap/new model loaded
# code: abstraction of FastBitSet  (SlowBitSet implemented using set testflag3 TRUE)
# code: moving of Dots to shapespecial package

# new feature: timeout command 
# new feature: set allowMultiTouch [default TRUE] can be used to disallow multi-touch gestures
# code: build.xml going to source 1.4 target 1.4 instead of source 1.3 target 1.1
# code: smarter handling of bitsets --> about 10% faster math processing
# bug fix: bfactor min/max was ignoring first atom
# bug fix: mouse/thread issues when moveTo is running
# code: ScriptEvaluator.set()/.show() clean up; all set parameters as tokens; deprecatedparam tok
# bug fix: some show parameters lost in 11.9.22
# bug fix: within molecule was using undocumented "visible" 
# new feature: set picking select structure
# new feature: set picking select polymer
# new feature: print {*}.polymer
# new feature: select within(polymer, ...)
# new feature: set pickingstyle drag makes the LEFT button a click-and-drag button
#              when associated also with:
#
#    set pickingsyle drag
#    set picking select polymer # or whatever
#    set dragSeleted TRUE

# --------------------------------------------------------------

#version=11.9.23

# new feature: set preserveState FALSE (default TRUE) --
#              for some applications it can be helpful to turn off the
#              feature of preserving the state in order to save memory
#   * This flag if set FALSE:
#   * 
#   * 1) turns UNDO off for the application
#   * 2) turns history off
#   * 3) prevents saving of inlinedata for later LOAD "" commands
#   * 4) turns off the saving of changed atom properties
#   * 5) does not guarantee accurate state representation
#   * 
#   * It is useful in situations such as web sites where 
#   * memory is an issue and there is no need for such. 
#   * 
#   * 
# new feature: set strutsMultiple (default FALSE) allows multiple struts on a given atom
# new feature: set LOGFILE "name" -- log file will be "JmolLog_" + name
#              in the Jar file directory -- note that this is not 
#              ever possible with the web-based version, even with the
#              signed applet, but signed applet or application running
#              locally can write to this file
#
#   set logFile "test"
#
# new feature: LOG command -- same as print but to the log file
#              can be prepended with nicely formatted date with "$NOW$" as the
#              first five characters
#
#   log "$NOW$\n" + getProperty("modelInfo")
#
# new feature: show state [name]
# new feature: all saved orientations now saved in state
# bug fix: isosurface ID @{xxxx} .... #ID .. #ID not overriding
# new feature: write MESH t.mesh  JVXL "vertex-only" very compact style mesh surface
# new feature: isosurface SLAB {plane definition} [optional offset]
# new feature: -{plane definition} refers to opposite-facing plane as {plane definition}
# bug fix: frame *;draw {atomno=1} {atomno=5} not working properly
# bug fix: frame ALIGN for trajectories
# bug fix: isosurface vdw broken
# new feature: PDB trajectory for concatenated PDB files (no "MODEL" line)
# bug fix: pdb reader trajectory error
# bug fix: multitouch applet activation via display.hasFocus()
#          working properly except you can't just jump from one
#          page to another if applets are producing the SparshUI server
#          be sure to go through an intermediary page, like a MAIN page

# --------------------------------------------------------------

#version=11.9.22

# bug fix: X3D exporter broken
# bug fix: MO export to cartesian exporters (VRML/X3D/Maya) should not do front-only
# code: XJVXL efficiencies -- base90+35 encoding of bitsets.
# bug fix: getproperty SHAPEINFO broken
# bug fix: PMESH reader broken in 11.9.21
# bug fix: isosurface vdw  does not use "auto"
# bug fix: isosurface vdw 100% translucent skips "translucent"

# code: refactoring of all SET parameters (Phase I) fully tokenized
# new feature: at console, set xx[tab] completes xx with all matching set parameters

# bug fix: (includes Jmol.js) -- using jmolAppletInline() with a model having "|" in it fails (namely, JVXL files)
# new feature: JVXL files for molecular orbitals readable as CML, including atom positions
# bug fix: JVXL writing way too much information
# bug fix: JVXL write invalid XML 
# bug fix: CML reader not accounting for possibility of nonunique atom names
# new feature: set picking STRUTS
# bug fix: APBS reader could hang on empty line
# bug fix: isosurface "..." AS "..." capability expanded to all readers

# --------------------------------------------------------------

#version=11.9.21

# new feature: isosurface INLINE @x
#
# new feature: for the Center for Biomolecular Modeling, Milwaukee School of Engineering
#              contributed ideas of Mark Hoeltzer for rapid prototyping.
#
# new feature: STRUTS shape -- for rapid prototyping -- these are sticks that 
#              can be connected anywhere but are not measures and are not covalent bonds
#
# new feature: calculate STRUTS  -- contributed algorithm of George Phillips
#              (phillips@biochem.wisc.edu) automates introduction of struts
#		
# new feature: set picking CONNECT  -- like measuring distances, except you get bonds.
# new feature: set picking DELETEBONDS -- opposite idea -- click two atoms generally,
#                                         or, with set BONDPICKING, click the center of the bond
#
# new feature: set strutSpacing 6  -- George's "DELTA" 
# new feature: set strutLengthMaximum 7.0 -- George's "THRESH" 
# new feature: set strutDefaultRadius 0.3 -- default rendering (will be translucent white as well)
#
# bug fix: VRML export not always getting right diameters
# bug fix: VRML export using /n instead of \n after comment
# bug fix: exporters calculate incorrect hond width
# bug fix: calculate hbonds {*} {*}  inappropriately adding Hbonds between two carbonyl groups
# 
# new feature: load/isosurface "filename" AS "myfile"  loads the file 
#       and saves it as file "myfile"
#       thus accomplishing an optional local file caching system.
#       also saves the LOCAL version in the state.
# 
# bug fix: message this is a @{test} fails
# new feature: (minimal) cloud rendering of electron density using 
#
#     isosurface color DENSITY cutoff 0 
#
#  and typically some colorscheme such as translucent bw:
#
#     isosurface  color density  cutoff 0 boundbox  colorscheme translucent bw  \
#                 color range 1.0 3.0 within 2.0 {*} "3hyd_map.ccp4" mesh nofill
#
# new feature: colorscheme TRANSLUCENT [color scheme name]
# new feature: colorschemes BW and WB (Black/white, white/black)
#
# bug fix: POV-ray not drawing isosurface mesh

# --------------------------------------------------------------

#version=11.9.20

# new feature: isosurface CENTER option for CCP4,MRC,XPLOR files
#              allows centering offsets in crystallographic grid coordinates of map file
# new feature: isosurface COLOR DENSITY option produces a point-graph of grid colored by
#              grid point value rather than an isosurface
# code: restructuring of surface readers and 	JVXL coder
# new feature: xyz files with 9th column is atom number
# bug fix: adding hydrogens does not update atom numbers
# code: JVXL reader refactoring
# bug fix: XPLOR fix/upgrade
# bug fix: MRC/CCP4 reader not accounting for unit cell dimensions
#          verified by inspection with 3hyp (Eric Martz)
#
# bug fix: application preferences have their own hardcoded defaults!
#           setting vdw to 23%
#
# code: initial progress toward XML state definition
# code: organizing of ScriptEvaluator
#
# code: refactored jvxl.data.JvxlCoder and jvxl.readers.JvxlXmlReader
#       methods to util.XmlUtil and util.XmlReader

# --------------------------------------------------------------

#version=11.9.19

# new feature: set SLABCLEANLY     no partial atoms or bonds
#          (note -- this changed to SlabByAtom in later version)
# new feature: set SLABBYMOLECULE  no partial molecules
#
# new feature: XJVXL excludedVertexData and excludedTriangleData
#              for particularly accurate rendering of isosurfaces
# new feature: ALL JVXL OUTPUT TO XJVXL FORMAT
# code: JVXL 1.0 code commented out; all writing is to XJVXL
#
# new feature: draw POLYGON 
#   really for the state after definition of an intersection
#   but also useable in principal:
# 
#  draw POLYGON nVertices {vert1} {ver2} ... 
#               nFaces [face1] [face2] [face3]
#
#  where [face1] is a triangle definition (not quadralateral)
#  consisting of either three integers:  [v1 v2 v3]
#  or four integers: [v1 v2 v3 meshCode]
#
#   v1,v2,v3 point to vertices (0-based)
#   meshCode is a bitset number 0-7 indicating which edges of the 
#   polygon are to be displayed in "mesh" format:
#
#   0  no edges
#   1  v1-v2 edge
#   2  v2-v3 edge
#   4  v3-v1 edge
#   3,5,6,7 -- combinations of the above three
#
#   if meshCode is not included, it is registered as 7 (all edges)
#
#   This be useful for objects that have very sharp edges, like cubes.
#
# new feature: calculate hydrogens (including formal charge)
# new feature: minimize ADDHYDROGENS   # minimizes and then adds hydrogen
# bug fix: delete atoms not compatible with hybridization calculation
# bug fix: connect AROMATIC not functional
# bug fix: inconsequential "COMPILER ERROR" message after  x *= y
# new feature: calculate hydrogens (including formal charge)
#
# new feature: isosurface within 2.0 {points}  
#   gives true calculation of surface within that distance 
#   of ANY atom in the set, not just the center
#    (isosurface WITHIN was introduced in Jmol 11.1.21 but not documented
#
# new feature: boundbox SCALE x.x option:
#    boundbox scale 0.5     # scales the current boundbox
#    boundbox scale 1.1 {*} # scales the boundbox to 10% larger than usual
#    boundbox scale 1.1 CORNERS {first} {second}
#    boundbox scale 1.1 {center} {cornerVector}
#    boundbox scale 1.1 $isosurface1
#
# new feature: boundbox $isosurface1
# new feature: XPLOR electron density reader
#
# code: All volume surface readers now progressive, meaning
#              they read only as much file data as necessary and 
#              run the Marching Cubes algorithm concurrently with file
#              reading -- this is more memory efficient by a POWER of 2/3.
#
# bug fix: applet cannot load inline
# bug fix: MRC (CCP4) MAP offset

# --------------------------------------------------------------

#version=11.9.18

# new feature: VASP vasprun.xml reader  http://cms.mpi.univie.ac.at/vasp/
# bug fix: load .... COORD not functional
# bug fix: connected(0, {carbon}) not working
# new feature: set slabByMolecule
# new feature: set zshadePower   -- log_2(p) in f = [(zDepth - z) / (zDepth - zSlab)]^p
#
# new feature: math function measure({exp1},{exp}[,{exp}[,{exp}]],min, max, format, units, "CONNECTED")
#    all optional after the first two expressions (or coordinates)
#    min/max in Angstroms
#    format of the sort "%a1 %a2 %5.3VALUE %UNITS"
#    units may be "pm", "nm", "au", or "angstroms"(default/unknown)
#    "CONNECTED" indicates that the atoms must be connected as well
#    for example:
#      
#      print measure({carbon}, {oxygen}, 1.2, 1.5, "%a1%i1\t%a2%i2\t%3.0VALUE\t%UNITS", "pm", "CONNECTED")
#    
# code: refactoring of measurements
#
# new feature: embedded scripts in PovRay, JPG, and PNG files stripped of local file path,
#              so will run from any directory having that file also in it.
# new feature: select configuration=1 same as "configuration 1", but with no shape updating
#
# bug fix: obscure compiler PDB bug for polyhedra, structure, frame commmands 
#            utilizing user-defined functions of the form @{xxx({n})}
# bug fix: polyhedra colors not deleted when polyhedra deleted
# bug fix: polyhedra can be lost if only a subset are colored
# code: better assignment of the per-model "isPDB" flag based on:
#    a) Is it a PDB, PQR, or mmCIF file? 
#    b) If so, are there residues other than UNK? 
#
# bug fix: popup menu ballandstick 20% -> 23%AUTO

# --------------------------------------------------------------
	
#version=11.9.17

# new feature:  spacefill AUTO
# new feature:  spacefill JMOL
# new feature:  spacefill BABEL
# new feature:  spacefill BABEL21
# new feature:  spacefill RASMOL
# new feature:  spacefill 20%JMOL
# new feature:  spacefill 23%BABEL
#   etc.
#
# default atom size changed from 20%Jmol to 23%Auto for C atom size match in small molecules
#
# new feature: update of Babel VDW forces. We had been using Babel 1.0 numbers
#  that were changed long ago; 
# new feature: set defaultVDW BABEL21  -- older 2.1 numbers previously "BABEL"
#
# bug fix: MAJOR -- proper model-based Van der Waals radii.
#   this bug has been with Jmol since its inception -- that
#   the inflated Jmol parameters for H, C, N, and O  are not
#   proper for anything but traditional "no hydrogen" PDB files
#   That "Jmol" data set should not be used with small molecules,
#   and it has long been noted that it looks incorrect. While we
#   have had the (old) Babel data set, one should not have to 
#   know to use that manually. The new feature associated with this
#   fix is
#
#      set defaultVDW AUTO (default)
#
#   So now Jmol will apply a proper Babel-based VDW set when 
#   the file has hydrogen atoms present. One can always override this
#   if desired, but I think the only reason to do that is to have
#   the identical match to an improperly defined VDW size in previous 
#   output. 
#
#   Note -- script files already in place will not be affected, 
#   as they explicitly define defaultVDW to be JMOL.
#
# code: better consistency in handling radius parameters using RadiusData
#
# new feature: draw BOUNDBOX (backlit for backside only)
# new feature: draw UNITCELL (backlit for backside only)
#   these both allow for scaling:
#              draw scale 2.0 UNITCELL MESH NOFILL
#              draw scale 0.8 BOUNDBOX POINTS NOFILL

# new feature: draw INTERSECTION BOUNDBOX HKL {h k l}
# new feature: draw INTERSECTION UNITCELL HKL {h k l}
# new feature: draw INTERSECTION BOUNDBOX PLANE {a b c d}
# new feature: draw INTERSECTION UNITCELL PLANE {a b c d}

# new feature: draw SYMOP {atom1} {atom2}
# new feature: draw SYMOP n {atom1} {atom2}
#     extends  draw SYMOP n {atom}
#     extends  draw SYMOP n

# new feature: show SYMOP {atom1} {atom2}
# new feature: show SYMOP n
# new feature: show SYMOP

# new feature: math function hkl(a,b,c)

# reorganizing readers
# new feature: isosurface OFFSET {x, y, z}
# new feature: isosurface SCALE3D x.xx    Creates a "mountain" plot from a planar map

# --------------------------------------------------------------

#version=11.9.16

# bug fix: WebMO reader broken
# bug fix: Exporters not reading normals for isosurfaces

# --------------------------------------------------------------

#version=11.9.15

# reader refactoring; applet jar for quantum merged with readersQuantum
# bug fix: MOPAC reader broken in 11.9.14.

# --------------------------------------------------------------

#version=11.9.14

# new feature: DGRID reader (http://cqb.fc.ul.pt/intheochem/nuno/data/dgrid-4.4.zip)
#              http://www.scm.com/Doc/Doc2009.01/ADF/ADFUsersGuide/page430.html
# new feature: ADF orbital reading -- MOs go into LAST model frame
# code: refactoring of readers
# bug fix: write to clipboard not working
# bug fix: TestSmarterJmolAdapter not updated for Xml type name change
# bug fix: HIN format disallowed by AIMS addition (11.9.2) 
# bug fix: label %i not working (11.9.13)
# bug fix: isosurface CUTOFF for MO not functioning (11.9.13)
# code: MO calculation efficiencies
# bug fix: select within(0.3, hkl, {1 2 3}) requires quotes: "hkl"
# new feature: write PMESH creates XJVXL file
# new feature: getproperty "shapeInfo.isosurface[1].xyzMin"
# new feature: getproperty "shapeInfo.isosurface[1].xyzMax"
# new feature: getproperty "shapeInfo.pmesh[1].xyzMin"
# new feature: getproperty "shapeInfo.pmesh[1].xyzMax"
# new feature: isosurface OFFSET {x y z}
# code: exporter efficiencies, MO calculation efficiencies
# bug fix: MO output to XJVXL
# bug fix: XJVXL skip to specific isosurface in file

# --------------------------------------------------------------

#version=11.9.13

# bug fix: PDB cryst1 record for NMR files not ignored
# new feature: set phongExponent   like set specularExponent, but se = 2^pe
# code: refactoring lighting

# code: refactoring mesh objects
# bug fix: symop in biomolecule context not recsognized by label "%[symmetry]"
# bug fix: "label %"  can cause Java exception
# new feature: optional set saveProteinStructureState usually TRUE
#              but can be set to FALSE to not write helix/sheet/turn data to state
# bug fix: long scripts in setEcho being chopped when saved in state
# bug fix: %{...} not recognized by script compiler

# new feature: color fractions as points: {0.5, 0.5, 1} or [0.5 0.5 1]
# new feature: anisotropy {scaleX scaleY scaleZ} and center now implemented
#              for all file-based and function-based isosurfaces.
#              scales are factors data coordinates are to be multiplied
#              by for display in the Jmol coordinate system. So, for example,
#
#   pmesh ANISOTROPY {0.1 1 1} center {-4 0 0} "pmesh.bin" 
# 
#              compresses the surface along x and causes data {0 0 0} to appear
#              at Jmol coordinate {-4 0 0} 
#    
# bug fix: "color background xxxx" clears background image as well
# bug fix: labels given text after containing an image have incorrect y-displacement
# bug fix: transparent pixels in images not respected
# bug fix: file name completion fix (tab key after double- or single-quote)
# bug fix: Warren Delano's idea for front-only translucency on isosurfaces (in memory of Warren Delano 1972-2009)

# --------------------------------------------------------------

#version=11.9.12

# new feature: preliminary Tachyon ray tracer support
# new feature: axes labels "x" "y" "z"
# new feature: axes labels ON
# new feature: axes labels OFF
# new feature: axes ticks [x|y|z] {major,minor,subminor} format ["%0.2f", ...] scale {x y z}|x.xx (state fixed)
# new feature: boundbox ticks [x|y|z] {major,minor,subminor} format ["%0.2f", ...] scale {x y z}|x.xx first x.xxx
# new feature: unitcell ticks ..... with special option "scale hkl" to indicate unit cell dimension scaling
# new feature: measure ticks {major,minor,subminor} format ["%0.2f", ...] scale {x y z}|x.xx first x.xxx {point1} {point2}

# bug fix: signed applet should not consider "/xxx" to be local
# bug fix: stereo mode results in zoom for entire right panel.
# bug fix: Jmol application not saving/restoring window position

# code: preliminary plot3d command
# code: better handling of syntax errors in ScriptEvaluator.isosurface
# code: reworking of measurements; adding TickInfo
# code: refactoring of org.jmol.export

# --------------------------------------------------------------

#version=11.9.11

# new feature: AMPAC reader
# new feature: zoom in; zoomTo in 
# new feature: zoom out
# new feature: -Msparshui, -Msparshui-simulated for application
#              multiTouchSparshUI=true or multiTouchSparshUI-simulated=true for applet
#              requires prior starting of JmolMultiTouchDriver.exe, currently set up
#              only for HP TouchSmart computer.
#              Uses a modified SparshUI interface over port 5946 (client) and 5947 (device).
#              Multi-touch gestures include a two-finger drag to translate and a two-finger
#              spread/pinch to zoom in/out.
#              In addition, a one-finger flick starts spinning.
#  
# bug fix: _width and _height lost after initialize
# bug fix: zshade incompatible with translucency
# bug fix: font axes not functional
# bug fix: compiler can crash on incomplete statements
# bug fix: FILTER "biomolecule ..." option broken in LOAD command. 
# bug fix: {xxx}.xxx = syntax immediately following "for ( ) {...}" causes compilation error 
# bug fix: draw: when only some models are visible, does not properly assign models to drawn object
# bug fix: zoomTo out not functioning
# code: Jmol/SparshUI multitouch refinements
# code: draw: dmesh.modelFlags not properly implemented (reset in setModelVisibility)

# --------------------------------------------------------------

#version=11.9.10

# bug fix: zoom/zoomTo does not refresh transform parameters
# new feature: -<matrix>  transpose
# new feature: matrix math with arrays as well as points
# new feature: <matrix>.row(n), <matrix>.col(n)
# bug fix: <matrix4>*<matrix4)> error
# bug fix: dot product miscalculation
# bug fix: (<array>).dot(<array>) nonfunctional
# code: JmolSparshClientAdapter allows for restarting gesture server (in the case, 
#       for example, if it was closed by an applet page being flushed).
# code: SparshUI interface extension to allow input device option to consume a
#       set of events or not. 
# bug fix: NWChem reader not reading files with lower-case-only atom names
# bug fix: code - viewer.getDisplayModelIndex() not used properly when background model is present
# new feature: draw intersection $isosurfaceID PLANE|HKL [plane definition]
# new feature: draw lineData [{pt1} {pt2}, {pt3} {pt4}, ... ]  draws line segments from point-pair data
#  this is the state form of drawn isosurface/plane intersections
#
#   for example:
#
#   isosurface s1 sasurface
#   draw diameter 0.1 intersection $s1 PLANE x=13 color red
# new feature: isosurface color mesh <color name> <surface definition>
#    colors mesh a specific color independent of isosurface color or color mapping.
# bug fix: rear mesh lines not visible on isosurface when surface also drawn
# bug fix: script APPLET * "...." does not work.
# bug fix: Export uses incorrect width/height parameters when size is not window size 
# new feature: double-click-drag translates model
# new feature: multitouch gesture antiparallel strokes: rotate at point 
# new feature: multitouch gesture spread/pinch: zoom in/out at point
# new feature: multitouch horizontal drag: next/previous frame(s)
# new feature: app command parameter [-M or --multitouch] "sparshui" or "sparshui-simulated"
#              applet jmolSetCallback("multiTouchSparshUI", "true")
#              applet jmolSetCallback("multiTouchSparshUI-simulated", "true")
#   with those variables set, Jmol will load the multitouch package and start
#   an integrated SparshUI server (if none is already started). In addition,
#   with the -simulated flag, Jmol simulates multitouch using CTRL-LEFT drag (twice)
#   This incorporation of SparshUI also demonstrates the on-the-fly loading
#   of a client gesture into the SparshUI system using an extension of the
#   SparshUI protocol that allows delivery of a class name rather than a SparshUI 
#   gesture ordinal.
# 
# code: ActionManagerMT - for multitouch
# code: preliminary org.jmol.multitouch package
# code: preliminary com.sparshui package (I've been assured this is LGPL 
#         despite the GPL license in the direcory)
#
# new feature: set timeout "name" mSecDelay "script"
#  if mSecDelay > 0, then the script runs once
#  if mSecDelay < 0, then the script runs every -mSecDelay milliseconds
#  if mSecDelay = 0 or script is "", cancels the named timeout
# new feature: set timeout "name" OFF
#  cancels the named timeout
# new feature: set timeout OFF
#  cancels all current timeouts
# new feature: show timeouts displays currently set timeout information

# bug fix: navigation key release causing unnecessary refresh
# bug fix: console command recall (up arrow) does not always return full command line
# bug fix: zShade/navigation mode incompatibility
# bug fix: navigate TRACE broken in 11.7.47
# code: JmolFrameExportJmolAdapter abandoned -- hasn't been implemented since 11.0
# bug fix: occasional null pointer error during ZAP due to continued rendering by
#          previous graphic painting thread
# code: refactoring of FileManager and clean-up of Viewer code
#       in relation to model loading.

# --------------------------------------------------------------

#version=11.9.9

# new feature: preliminary customizable mouse bindings:
#
#   bind "MOUSE-ACTION" actionName|"...some script..."
#   unbind ["MOUSE-ACTION"|all] [actionName|all|"...some script..."]
#
#   mouse actions include:
#
#     CTRL ALT SHIFT LEFT RIGHT MIDDLE WHEEL DOUBLE SINGLE
#
#   action names include:
#
#    _rotate _wheelZoom _rotateZ _rotateZorZoom _translate _slideZoom
#    _dragSelected _rotateSelected _dragLabel _dragDrawPoint _dragDrawObject
#    _swipe _spinDrawObjectCW _spinDrawObjectCCW _slab _depth _slabAndDepth
#    _popupMenu _clickFrank _navTranslate _pickAtom _pickPoint _pickLabel
#    _pickMeasure _setMeasure _pickIsosurface _pickNavigate _select
#    _selectNone _selectToggle _selectAndNot _selectOr _selectToggleOr
#    _reset
#
#   for example:
#
#   bind "CTRL-ALT-LEFT" _popupMenu
#   unbind "CTRL-ALT-LEFT" _popupMenu
#   unbind _clickFrank
#   unbind "CTRL-ALT-LEFT"
#
#   Note that by binding a script to the mouse action, you can divert
#   Jmol's action to be your own. The script can contain variables
#   _X, _Y, _DELTAX, _DELTAY, _TIME, and _MODE
#   which will be filled with data. _MODE values include:
#     0 (mouse pressed)
#     1 (mouse dragged)
#     2 (mouse released)
#     3 (mouse wheeled)
#
#   Note also that the bindings relate to the currently set value of
#   set pickingStyle
#     "toggle", "selectOrToggle", "extendedSelect"
#
#   
# new feature: getproperty mouseInfo
#    mouseinfo.bindingName	"Jmol"
#    mouseinfo.actionInfo	*String[34]	["rotate","zoom",...]
#    mouseinfo.actionNames	*String[34]	["_rotate","_wheelZoom"...]
#    mouseinfo.bindingInfo	*String[27]	["rotate\tLEFT","zoom\tWHEEL","rotate Z\tALT+LEFT, SHIFT+RIGHT"...]
#    mouseinfo.bindings	*Vector[35]	
#    mouseinfo.bindings[1]	*String[2]	["ALT+SHIFT+LEFT","_dragSelected"]
#    mouseinfo.bindings[2]	*String[2]	["RIGHT","_popupMenu"]
#    mouseinfo.bindings[3]	*String[2]	["ALT+LEFT","_dragDrawPoint"]
#    mouseinfo.bindings[4]	*String[2]	["CTRL+RIGHT","_translate"]
#    ...
# bug fix: smoother zoom using mouse wheel or Mac two-finger gesture.
# bug fix: MSIE mouse-wheel malfunction due to Jmol not consuming the wheel motion
# new feature: mouse move into right 2% of screen display zoom cursor
# new feature: LEFT vertical motion within right 2% of screen effects zoom action 
# new feature: swipe gesture: mouse released while LEFT motion of at least 10 microsteps
#   starts spinning (like Google Earth)
# new feature: set allowGestures TRUE allows swipe
# bug fix: isosurface xxx lcaocartoon ... does not always honor xxx as isosurface name
# bug fix: Hall name translator can incorrectly assign matrix for F m -3 m group
# bug fix: Gaussian '09 reader not reading "  Atom   AN" properly in frequency lists
# new feature: show mouse and show mouse xxxx (still some work to do)
#   for example, show mouse select
#
#     move selected atoms (requires SET DRAGSELECTED)	ALT+SHIFT+LEFT
#     rotate selected atoms (requires SET DRAGSELECTED)	ALT+LEFT
#     toggle selection (requires SET PICKINGSTYLE EXTENDEDSELECT/RASMOL)	SHIFT+LEFT, LEFT+double-click
#
#   or show mouse:
#
#    rotate	LEFT
#    zoom	WHEEL
#    rotate Z	ALT+LEFT, SHIFT+RIGHT
#    rotate Z (horizontal motion of mouse) or zoom (vertical motion of moouse)	SHIFT+LEFT, MIDDLE
#    translate	CTRL+ALT+LEFT, CTRL+RIGHT, SHIFT+LEFT+double-click, MIDDLE+double-click
#    zoom (along right edge of window)	LEFT
#    move selected atoms (requires SET DRAGSELECTED)	ALT+SHIFT+LEFT
#    rotate selected atoms (requires SET DRAGSELECTED)	ALT+LEFT
#    move label (requires SET PICKING LABEL)	SHIFT+LEFT
#    move specific DRAW point (requires SET PICKING DRAW)	ALT+LEFT
#    move whole DRAW object (requires SET PICKING DRAW)	SHIFT+LEFT
#    spin model (swipe and release button and stop motion simultaneously)	LEFT
#    click on two points to spin around axis clockwise (requires SET PICKING SPIN)	SHIFT+LEFT
#    click on two points to spin around axis counterclockwise (requires SET PICKING SPIN)	LEFT
#    adjust slab (front plane; requires SLAB ON)	CTRL+SHIFT+LEFT
#    adjust depth (back plane; requires SLAB ON)	CTRL+SHIFT+LEFT+double-click
#    move slab/depth window (both planes; requires SLAB ON)	CTRL+ALT+SHIFT+LEFT
#    pop up the full context menu	CTRL+LEFT, RIGHT
#    pop up recent context menu (click on Jmol frank)	LEFT
#    translate navigation point (requires SET NAVIGATIONMODE and SET PICKING NAVIGATE)	LEFT
#    pick an atom	LEFT
#    pick a DRAW point (for measurements)	LEFT
#    pick a label to toggle it hidden/displayed (requires SET PICKING LABEL)	LEFT
#    pick an atom to include it in a measurement (after starting a measurement or after SET PICKING DISTANCE/ANGLE/TORSION)	LEFT
#    pick an atom to initiate or conclude a measurement	LEFT+double-click
#    pick an ISOSURFACE point	ALT+LEFT
#    toggle selection (requires SET PICKINGSTYLE EXTENDEDSELECT/RASMOL)	SHIFT+LEFT, LEFT+double-click
#    reset (when clicked off the model)	SHIFT+LEFT+double-click, MIDDLE+double-click
#
# code: ActionManager and Binding variations (finally!) isolates 
#       key/button mouse actions and Jmol actions to allow for a generalized
#       binding of "gestures" to Jmol actions. Included are four bindings:
#       Jmol, Rasmol, Drag, and Pfaat. This is in preparation for incorporating
#       multitouch capability in Jmol
#
# new feature: expanded zoomTo:
#  zoomTo timeSeconds zoomLevel [xTrans] [yTrans]
# bug fix: moveto with {0 0 0 0} uses instead {0 0 1 0}
# bug fix: zoomto fights with user over orientation
# bug fix: AIMS files with empty lines preceding keyword lines are now recognized
# bug fix: AIMS reader not reading multipole lines describing monopoles
# bug fix: CASTEP and AIMS readers now properly load unit cells using cell vectors
#   which are not suitably aligned with the coordinate axes of the reference coordinate system
# bug fix: CASTEP reader not understanding unit specifier in .cell files

# --------------------------------------------------------------

#version=11.9.8

# new feature: labels HIDE and labels DISPLAY  do exactly that
# new feature: application console completes commands and quoted filenames with <TAB>
#
# new feature: load "xxxx.xxx" [-vibration number]
#  loads only the specific vibration model.
#
# new feature: (embedded application; org.jmol.api.JmolViewer.java method): 
#   abstract public String loadInline(Vector arrayData, boolean isAppend);
#   @param arrayData a Vector of models, where each model is either a String
#     or a String[] or a Vector<String>
#   @param isAppend TRUE to append models (no ZAP)
#   @return null or error message
#   #### NOTE: THIS METHOD DOES NOT PRESERVE THE STATE
#   #### BECAUSE IT DOES NOT SAVE THE READ DATA IN A SCRIPT COMMAND
#   #### FOR THAT FUNCTIONALITY USE loadInline(String[] modelData, boolean isAppend);
#   
# bug fix: strand count assignment error in cif/pdb readers causes failure to load 3ovo.cif
# bug fix: labels offset using set picking select label not saved in state properly;
#          added "set labelOffsetExact"
# bug fix: set picking select label shifting label causes jump and not saved in state reproducibly
# bug fix: set toggleLabel inappropriately resets label to default setting
# bug fix: moveto QUATERNION not distinguishing between orientation quaternions
#          and molecular quaternions -- MOLECULAR keyword added
# bug fix: setting perspective model stops animation in state script
# bug fix: GAMESS reader not reading all vibrational frequencies
#
# code: refactoring of readers to standardize vibration loading
# code: removed unnecessary org.jmol.applet.Jvm12.java
# code: major overhaul of Tokens -- all script options now included as
#       tokens so that tab-completion has access to the full repertoire of command
#       options. 
#       Future work might refine that to indicate only the appropriate options.
# code: clean up of (Xxxx) null -- only useful during compilation as a 
#       parameter of a method call so as to set which method to call.

# --------------------------------------------------------------

#version=11.9.7

# bug fix: GAMESS reader not reading BETA MOs.
# bug fix: A function starting with "_" originally was considered 
#          local to the applet, with all other functions being static.
#          Then, in 11.7.45, this was switched. Unfortunately,
#          that meant state functions _set... were static
#          causing applet-applet interference.
#          So for this fix I've changed that to be "static_..." for 
#          expressly static functions, and then also designated
#          "_...." functions as not generally declared when writing
#          a state or in "show functions" so that a state does not 
#          duplicate itself, and "show functions" works as before. 
# bug fix: select xxx when xxx is an array fails to do lookup of defined values
# bug fix: legacy code: Bond.getBondModelIndex returning atomIndex instead
# new feature: application file dropper for xjvxl and jvxl files into "isosurface1"
# bug fix: writing valid XML by escaping < and & using ~; and ~%
# bug fix:  water:  +", (oxygen & connected(2) & connected(2, hydrogen or deuterium or tritium), (hydrogen or deuterium or tritium) & connected(oxygen & connected(2) & connected(2, hydrogen or deuterium or tritium)))",

# code: JvxlReader/JvxlXmlReader refactoring
# new feature: Jvxl 2.1 -- XML format for JVXL files
# generated using write t.xjvxl or for files that require this feature
# isosurface test:
#
# load cH3F.smol; slab 50
# set clickcallback "jmolscript:if (_mouseModifiers == 0) {isosurface plane @{_slabPlane} map contour mep;write t.jvxl;delay 0.5;isosurface t.jvxl}" 
#
# new feature: now() function, with now(fromWhen)
#   for example:
#      i = now();
#      ...
#      print now(i); # reports milliseconds
#
# bug fix: loglevel 3 still sending messages
# 
# new feature: isosurface/pmesh commands accept unquoted file names.
# new feature: Jvxl 2.1 -- XML format for JVXL files 
#   here, initially, only being used for writing contour or triangle data
#   NOTE -- Jvxl-XML is not backward-compatible with previous versions of Jmol.
#   for now use SET testflag4 ON to enable full XML writing of JVXL files
# new feature: Jmol frank hover provides menu tip
# new feature: getproperty shapeinfo better reports contour levels
# new feature: isosurface ... map CONTOUR DISCRETE [0.5, 1.0, 1.5, 2.0]
# new feature: isosurface ... map CONTOUR INCREMENT {0.0, 1.0, 0.2}
# 
# bug fix: isosurface does not clear data after functionXY or functionXYZ
# bug fix: label %vx giving x coord, not vibration x component
# bug fix: write VAR for string array does not work.
# bug fix: GAMESS reader vibrations use wrong atom coordinates
# bug fix: PQR reader not adaptive
# bug fix: zshade now working correctly -- not tied to slab on
# bug fix: setting spacefill to a large user-defined VDW radius incorrect
# bug fix: Gaussian 09 LOG file reader upgrade for MOs
# bug fix: unitcell offset {1 1 1}; select UNITCELL
#
# code: reworking of JVXL reader classes, creation of JvxlCoder.java
# code: reworking of ASimpleJvxlWriter to utilize standard classes
# code: reworking of Parser, TextFormat, ArrayUtil, and Escape 
#       to not utilize any nonstandard Java classes (such as
#       Graphics3D or BondSet or Token), thus making these
#       classes generic and not Jmol-dependent. 
# code: StatusListener refactored as individual class

# --------------------------------------------------------------

#version=11.9.6

# bug fix: incorrect reference to jmolStatusListener for sync callback in StateManager
# bug fix: file drop needs zap prior to load for cleaner operation
# bug fix: Hall symbol translation generates incorrect Jones-Faithful operation (missing translation)
#  -- Thank you, Sarah Mattler, WUSTL!

# --------------------------------------------------------------

#version=11.9.5

# bug fix: load xxx.jmol
# bug fix: better file previewer (with signed applet, also)
#   no echo and no uccage, only first model
# bug fix: security upgrade for writing files by the signed applet
# bug fix: context menu View... broken when boundbox or unitcell are on
# bug fix: syncScript broken
# bug fix: load trajectory not working properly
# bug fix: animation/spin incompatibility problem
# bug fix: initialize does not reset antialiasDisplay or set animation off
#
# new feature: shape size setting and query:
#
#  {xxx}.cartoon = 2.5
#  print {xxx}.cartoon
#  if ({selected}.backbone)...
#
# TESTABLE shapes include: 
#
#  backbone, cartoon, dots, ellipsoid, geosurface,
#  halo, meshRibbon, ribbon, rocket, spacefill, star, trace
#
# SETTABLE shapes include:
#
#  backbone, cartoon, halo, meshRibbon, ribbon, rockets, spacefill, star, trace
#
# new feature: restrict BONDS xxxxx respects bondMode for bonds and backbone
#
# bug fix: getProperty("menu") does not work until a menu has been called up by user
# bug fix: menu item for style does not respect bondMode
# bug fix: lcaocartoon not working

# --------------------------------------------------------------

#version=11.9.4

# bug fix: select *.? not working properly
# code: better file output localization within code in viewer.createImage()
#
# new feature: write ZIP|ZIPALL "xxx.jmol" and write ZIPALL "xxx.jmol" or just
#
#    write xxx.jmol  # ZIPALL implied
#
#  creates single-file package; added "ZIPALL" includes remote files
#
# new feature: $SCRIPT_PATH$ prefix to file name uses path of script
#  file rather than default path
# bug fix: isosurface not retrieving exact reference for jvxl files in state
# bug fix: (potential) draw symop could have incorrect glide# rearrangement of a few pop-up menu entries and new ones 
# affects: File (Open+Save+Export) | About (Model+Jmol+System) | Computation:Minimize

# --------------------------------------------------------------

#version=11.9.3

# bug fix: "zapped" file does not clear menu

# new feature: symop(-n) -- use for "reverse of" n
# new feature: symop("!x..y..z..") "reverse of" "x..y..z.."
# new feature: 3x3 or 4x4 matrix element get/set:
# note that this is all 1-based.
#
#  mat[3] = [1,3,4]
#  mat[13]= 3.0
#
#  rows: [1], [2], [3], [4]
#  columns: [-1], [-2], [-3], [-4] 
#  elements: [11] [12] [13] [14] [21] [22]... [44]
#
# new feature: matrix element getting option mat[row][col]:
#
#  print mat[33]
#  print mat[3][3]
#
# just can't do this: mat[1][3] = 3.0
#
#  maybe someday....  
#
# new feature: matrix invertiion using "!":
# mat = quaternion({1 0 0}, 35)%-9;
# print !mat
#
# draw symop 3
# draw symop @{!symop(3)}
#
# new feature: x = quaternion(mat); mat = x%-9 
#   create quaternion from 3x3 matrix and return matrix from quaternion
# new feature: symop("x,y,z") or symop(n) returns matrix4f for this operator
# new feature: symop(n)*symop(m) returns matrix4f for the concatenated operation n*m (m first, then n)
# new feature: symop(mat,...), where mat is a matrix4f variable same as symop("x,y,z",...) 
# new feature: draw symop @matrixVariable
#   thus we can have:
#
#      draw symop @{symop(11)*symop(14)}
#
#   or
#
#     x = symop(11) * symop(14)
#     print symop(x,"description")
#
# new feature: symop(xxx,"[what]") where "[what]" is:
#    "xyz", "description", "translation", "center", "axispoint","axis", "angle", "matrix4f",
#    or anything else is a draw ID
#
# new feature: symop() returns array of information for symop(3,"array") or symop("x,y,z", "array")
#     *  xyz (Jones-Faithful calculated from matrix)
#     *  xyzOriginal (Provided by operation) 
#     *  description ("C2 axis", for example) 
#     *  translation vector (fractional)  
#     *  translation vector (cartesian)
#     *  inversion point 
#     *  axis point 
#     *  axis vector
#     *  angle of rotation
#     *  matrix4f representation
#
# new feature: matrix3f and matrix4f variables with basic rotational/translational multiplication
#
# bug fix: x = {255,0,0}; select color=x; #did not work
# bug fix: symop() -- can now be used without "all." 
# bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill"
# new feature:  isosurface map FULLPLANE   creates full plane instead of just around the contours.
# bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill"
	
# --------------------------------------------------------------

#version=11.9.2

# bug fix: file save from menu does not pull up dialog
# bug fix: aims/castep readers
# bug fix: "initialize" should not reset defaultDiretory
# new feature: xxxx.sum   same as xxxx.add(), but faster and more intuitive.
# new feature: print {xxx}.volume("type")  -- in Ang^3. Multiply by 0.602 for cm^3/mol
#   where "type" is "jmol" or "babel" or "rasmol" or "user" (based on data element_vdw)
#   if "type" is not given, Babel is assumed. <b>A.Bondi, J. Phys. Chem. 68, 1964, 441-451.</b>
# new feature: calculate volume  (of selected atoms)
# bug fix: compiler error for {xxx}.yy = n \n {xxx}.yy = n
# bug fix: compiler error for literal -0 or -0.0
# new feature: script LOCALPATH "xxx" and write script LOCALPATH "xxx"
#  either on reading or writing sets all LOCAL file references in script 
#  to be within the path indicated. For example, 
#
#    write script LOCALPATH "" "tx.spt" 
#
#  will create a script "tx.spt" stripping all file paths from file names -- that is, 
#  a script that assumes all files are in the current directory.
#   
#    script LOCALPATH "data" "tx.spt" 
#
#  will convert a reference "C:/temp/myfile.xyz" in script "tx.spt" to "data/myfile.xyz"
#
#  file references including the LOCALPATH will be truncated: 
#  "C:/temp/data/myfile.xyz" will become simply "data/myfile.xyz"
#
# new feature: script REMOTEPATH "xxx" and write script REMOTEPATH "xxx"
#  same as REMOTEPATH, but only changes http: https: or ftp: references
# 
# bug fix: show pointgroup can give wrong format after getproperty PointGroupInfo
# bug fix: mmCIF misreads bfactor data
# new feature: crystallographic symmetry and anisotropic ellipsoids for proteins.
# bug fix: load append of file with ellipsoids causes array out of bounds exception
# bug fix: show spacegroup can cause null exception
# new feature: getProperty command allows xxx.yyy.zzz[3] notation and has new output format
#
#   > getProperty auxiliaryInfo.models[1].symmetryOperations
#
#   auxiliaryInfo.models[1].symmetryOperations	*String[2]	["x,y,z","-x,y+1/2,-z"]
#
#   >  print getProperty("auxiliaryInfo.models[1].symmetryOperations")[2]
#
#   y+1/2,-z
#
# new feature: connect command prefers COLOR keyword prior to color designation
# code: refactoring org.jmol.viewer.Script... into org.jmol.script
#  with the result that far more viewer methods are more publicly accessible
# bug fix: animation direction -1 not functional
# bug fix: script lines 1-3 not functional

# -----------------------------------------------------------------------------

#version=11.9.1

# bug fix: 2D mesh property not cleared
# new feature: clickCallback -- returns screen x, y, modifiers, clickCount, and an int[1] array allowing for return of modified modifiers.
#  function myClickCallback(app,x,y,modifiers,clickCount,Ret){}
#    app is the applet identifier, usually "jmolApplet0"
#    x and y are screen coordinates with [0,0] in the bottom left corner
#    modifiers is a set of bits indicating what keys and mouse buttons were pressed: 
#        1(shift), 2(ctrl), 4(right), 8(alt), 16(left). 
#        If none of these bits are set, this is a "mouse-up" event
#    clickCount is the number of clicks. 
#        0 here indicates the mouse was pressed (as in the initiation of a drag operation)
#        negative numbers indicate dragging
#        positive numbers are standard clicks of the mouse
#    Ret is an array with just one element that allows returning a new modifier. 
#        Setting Ret[0]=0 cancels Jmol processing of the event.
#
# bug fix: acos, to be consistent, needs to deliver degrees, not radians
# bug fix: for MOReaders * NBO: --- note, "-" can be in column with " " causing tokenization failure
# bug fix: grp.property_x = n   can change definition of grp
# code: refactoring of Measure/Graphics3D
# bug fix: q1.dot(q2)

# -----------------------------------------------------------------------------

# version 11.8.RC6

# new feature: CASTEP (http://www.castep.org/) and AIMS readers 
# new feature: popup menu gives Symmetry operation display option
# new features for the 238th American Chemical Society National Meeting, Washington, D.C., Aug. 19, 2009
# new feature: draw ID xxx SYMOP [n or "-x,y,z"] [optional {atom or position}] 
#   draws symmetry operation for spacegroup
#   see http://chemapps.stolaf.edu/jmol/docs/examples-11/showsym.htm
# new feature: pt = all.symop(3, {atomno=3})
# new feature: sdrawCommands = all.symop(3, {atomno=3},"draw_id")
# 
# new feature: ho, ho, this is fun. Wouldn't it be nice to just drag a JPG into
#   Jmol and have it come alive? 
# write IMAGE t.jpg
# load t.jpg (Or just drag it into the Jmol window from a file directory.
# The IMAGE option instructs Jmol to add its state to the JPG image, so when it is 
# dragged in, Jmol recognizes that and loads the state. Very cool.
#
# also with PNG images; to not do this, use 
# 
#  set imagestate false
#

# bug fix: polyhedra saving in state
# bug fix: function call as statement with expression argument fails:
#
#  testing({atomno=3})
#
# bug fix: isosurface map property can create holes in isosurface
# code: dissociation of applet console from jvm12

# bug fix: Various Examples fixes
# bug fix: defaultDirectory should not be part of the state
# new feature: select structureID="xxx"  selects structures by alphanumeric id such as "S1" or "H3"
# bug fix: show structure not properly showing structure indices, IDs, or strand counts for PDB or CIF files
# code: Jmol embedded in applications can use Jmol menu and Jmol console directly (needs testing)
# code: PdfCreator incorporated into ImageCreator and outputs antialiased image

# -----------------------------------------------------------------------------

#version=11.8.RC5

# new feature: Jmol embedded in applications can use WRITE command to create all types of images and exports
# new feature: VERY COMPACT IDTF export (for U3D conversion; all except background color)
#   * after 
#   * 
#   * write t.idtf
#   * 
#   * using IDTFConverter.exe, on Windows one can turn these files into VERY COMPACT U3D files.
#   * 
#   * IDTFConverter.exe -input t.idtf -output t.u3d
#   * 
#   * see http://sourceforge.net/projects/u3d/
#   * see http://en.wikipedia.org/wiki/Universal_3D
#   * see http://www.ecma-international.org/publications/standards/Ecma-363.htm
#   * in the downloadable zip file, see docs/IntermediateFormat/IDTF Format Description.pdf
#
# bug fix: (application) delaying saveChooser load makes startup MUCH faster when loading a file
# bug fix: gaussian reader may fail to read MOs from Gaussian 03:  AM64L-G03RevC.01  3-Apr-2004

# -----------------------------------------------------------------------------

#version=11.8.RC4

# from the 2009 GORDON RESEARCH CONFERENCE ON EDUCATION:
# bug fix: DRAW point size 6 pixels (an even number) sets it just one pixel off center -- 7 is better.
# new feature (TODO): 4D extension (that's right -- FOUR dimensions)
# new feature: set picking Label now allows label offset by holding SHIFT down while dragging atom
# new feature: lone pairs and radicals -- extension of lcaoCartoon:
#
# select oxygen; lcaocartoon lonePair "sp2a" 
# select oxygen; lcaocartoon radical "sp3" 
#
# new feature: print getProperty("FileInfo","REMARK300") //was PdbInfo
# new feature: print getProperty("FileInfo","models",1,"_citation_year"); 

# TODO: load 1crn.pdb;quaternion;quaternion diff;zap 2.1 -- leaves blank model 2.1 and destroys state
# TODO: what to do about deleting models prior to current -- why statescript removed?
# bug fix: zap x.y when have measures to draw objects causes exception
# bug fix: isosurface mapping with property where property can be NaN does not render some regions
# bug fix: lcaoCartoon wildcard problems
# bug fix: undocumented rotate[selected] {pt1} {pt2} ... has pt1/pt2 backward. Should be such that:
#
#     rotate x 10
#
#   is the same as
#
#     rotate {0 0 0} {1 0 0} 10
#
# new feature: set quaternionFrame "a"  -- alpha-carbon-ONLY straightness. see 1JGQ
# bug fix: compiler error when integer typed instead of command
# bug fix: state for lcaocartoon broken
# bug fix: set picking spin for draw objects broken in 11.8.RC1
# new feature: set helixStep 0 -- relates a quaternion to the standard reference frame
# bug fix: DRAW CIRCLE size may not be correct when restored from state 
# new feature: write "xxx.X3D"
# new feature: [x,y,z].sum2 or {xx}.someProperty.sum2 -- sum of squares
# new feature: VRML export nearly full support
#  -- includes draw, ellipsoids, dots, isosurface, cartoons, stars, halos,
#     polyhedra, vectors, dipoles, etc.
#  -- no background labels
#  -- labels are not exactly the right size 
#  -- no background image
#  -- no ellipsoid quadrant cutouts
#  -- slightly irregular trace when very small diameter

# code: simplified export interfaces

# -----------------------------------------------------------------------------

# version=11.8.RC3

# code: more efficient VRML export
# new feature: set helixStep 1,2,3,...  sets step for quaternion-based analysis of structure -- see 1C4D
# bug fix: 1C4D has [FOR] -- not accepted  
# bug fix: color isosurface red translucent prior to isosurface command causes null pointer exception
# new feature: isosurface select(....) SET n
#  where n is an integer 1,2,3... that selects which set is to be displayed and
#  counted for area or volume
# bug fix: spacegroup reading when center of molecule is not in unit cell can cause bonding errors
# new feature: isosurface area for subsets -- use
# isosurface area select(oxygen) sasurface colorscheme sets
# bug fix: draw OFF in state script is not selective

# -----------------------------------------------------------------------------

# version=11.8.RC2

# bug fix: mouse-picked measurements broken in 11.8.RC1

# -----------------------------------------------------------------------------

# version=11.8.RC1

# bug fix: measurements defined using points not restricting to models
#  -- note, bug fixes in .RCx versions will not be fixed in 11.6

# -----------------------------------------------------------------------------

# version=11.7.47

# new feature: set quaternionFrame "RC" or "RP" -- ramachandran-derived straightness
# new feature: array1.add("sep", array2) adds a new column of values separated by sep, for example:
#   set quaternionFrame "P";ap = {*.ca}.straightness;
#   set quaternionFrame "C";ac = {*.ca}.straightness;
#   print {*.ca}.label("%n\t%R").add("\t",ap).add("\t",ac);
#
# bug fix: VRML balls missing; VRML/POVRAY error on partial surfaces
# new feature: NAVIGATION STOP -- sets navX, navY, navZ to 0
# new feature: navX, navY, navZ, navFPS all settable
# new feature: NAVIGATION ON/OFF now does continuous motion with arrow keys
#   SPACE to stop 
#   LEFT/RIGHT to pan left or right
#   UP/DN to move forward/back
#   ALT UP/DN to pitch up/down
#   CNTL UP/DN to increase/decrease speed in larger amounts

# code: more efficient labelGroup calculatiion
# bug fix: navigationmode not properly adapting with window resize or antialiasdisplay
# new feature: draw HELIX AXIS or quaternion HELIX AXIS, also for DNA/RNA
# code: cleaned up navigation business; an attempt at navigating a surface...Maybe not...
# new feature: GROMACS reader
# bug fix: arrays passed to functions by reference do not update if size is increased 
# new feature: by passing an array to a function, you can make that variable
#              return a value -- any value, not just an array:
# function test(a) {
#  a = "new value"
# }
# b = []
# test(b)
# print b     ==> "new value"
#
# bug fix: spacegroup "-- [--]" displayed when load command option SPACEGROUP is used
# bug fix: mol2 reader not properly allowing override of CRYSIN unit cell record
# bug fix: %r not correct label
# bug fix: quaternionFrame default now "p"
# bug fix: quaternion difference off by one group 
# bug fix: show FUNCTIONS not working
# bug fix: draw picking in multimodel context causes null pointer exception
# new feature: within("HELIX"), within("SHEET") -- helix and sheet, but not ends
# new feature: all.bin(f0, f1, df) -- binning of data to give an integer array of counts
#     for example: print {*}.straightness.all.bin(0, 1, 0.05)
# bug fix: WRITE MO does not work when no current MO is present
# new feature: draw ARC {center} {plane}
# new feature: draw ARC {center} {axisPoint}
# new feature: draw CIRCLE {center} {plane}
# new feature: draw CIRCLE {center} {axisPoint}
# new feature: draw SCALE works with CIRCLE
# bug fix: draw ARC was using radius, not diameter, for scale
# bug fix: draw RAMACHANDRAN angle arrow radii too small

# bug fix: quaternion difference draw not quite correct on axis position
# bug fix: 11.7.43 broke restoration of state having multimodel draw

# -----------------------------------------------------------------------------

#version=11.7.46

# bug fix: select model=1 does not work (since 11.6.RC17!)
# new application: JmolData.jar 
# This application completely disallows any display -- it is totally formless
# There are no Java Swing JFrames involved, no dialogs, no popup menus,
# no display, no shapes, no labels, no echos -- just the model data. 
# 
# bug fix: command-line jmol scripts not exiting jmol upon an error condition
# argh. FOR broken in 11.7.45
# new feature: helix(resno or {atomExpression},type)
#   given x = C-alpha, C-carbonyl, or N (depending upon set quaternionFrame)
#   where type =
#   "point" -- nearest point to x on local helix axis
#   "axis" -- quaternion derivative vector normal indicating local helix axis
#   "angle" -- rotation around local heix axis for resno i --> i+1
#   "radius" -- vector normal from local helix point to x
#   "draw" -- draw command for the local helix vector
# note that the axis length is the rise, radius length is the radius,
# and 360 / angle is the pitch of the helix
#  
# bugfix: gamess readers crashing if keywords missing from basis options or control options
# code: findNearestAtomPicked added to JmolViewer
# new feature: VRML exporter displays ribbons and cartoons by automatically setting 
#              hermiteLevel 1 if necessary.
# new feature: VRML exporter recognizes color and normals for isosurface

# -----------------------------------------------------------------------------

#version=11.7.45

# bug fix: load trajectory XXX.cif not applying fractional coordinates.
# bug fix: load trajectory {0 -1 1} not loading any models if first model has 0 atoms
#          (as in certain cif files)
# bug fix: dipole offsetside not working for molecular dipole (EVER!)
#
# code: refactored scriptEvaluator and Jmol.java. Now it is much simpler
# to create a truly "headless" Jmol application, where Jmol is being
# used for the investigation of the structure instead of visualization.
#
# script editor behaving properly except for a nasty SWING bug that will
# require recasting this in AWT instead of SWING. 
# See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4353673
#
# new feature: gamessUS reader now reads dipoles and partial charges.
#
# TODO script editor --  search? argh... I knew this would be a can of worms...
# script editor -- undo/redo works (CTRL-Z, then SHIFT-CTRL-Z or CTRL-Y)
#
# new feature: drag/drop and file menu-open scripts directly into editor, from where they can be checked or tested.
# code: refactored readers, allowing for more obvious initialization/finalization methods
# new feature: App and applet consoles now have "editor" buttons 
# that load scripts into a "script editor" and allow stepping through 
# scripts (and changing values during the pauses) - preliminary only
#
# opens a rough draft ScriptEditor
# new feature: Gamess file reader now translates internal basis set and calculation
#	methods representations into roughly literature standard for Pople & Dunning basis
#	sets as well as perturbation, CI and CC calculation methods.  This is dumped to
#	calculationType.
# new feature: application console buttons: PAUSE, ?, STEP
# new feature: SHOW TRACE -- reports stack trace 
# [ bug fix below NOT CORRECT -- fixed in Jmol 11.9.7 and Jmol 11.8.8
# bug fix: functions with names starting with _ were local instead of global
# bug fix: 2 pixels off in y for labels. Don't know why I thought that was necessary in Text.java::setBoxXY.
# new feature: SHOW VARIABLES now gives variable trace through function stack
# new feature: [Oh, VERY COOL!] You can now pause the app anywhere in a 
# script, do anything you want -- even within functions -- change variables,
# set parameters, anything -- and then resume with RESUME. Some of us
# have dreamt of having this with JavaScript. Very very useful!
# so, for example:
#
# function testing(i,j) {
#   n = 3
#   show variables
#   pause change any variable and then enter RESUME
#   show variables
# }
# testing(3,5)
#
# bug fix: problems with PAUSE/RESUME within App
# bug fix: "set ?" nonfunctional
# bug fix: unmatched { in quotes in @{ } not properly treated: echo @{" testing}"}
# new feature: strings may start with ' or ", like JavaScript:
#   x = 'testing'
#   print 'there are ' + all.length + ' atoms'
#   cd, echo, gotocmd, help, hover, javascript, label, message, and pause
#   all are implicitly strings. You CAN use "..." but you don't have to,
#   and you cannot use '...'. This way the introduction of single quotes 
#   as an equivalent of double quotes cannot break existing scripts. -- BH 06/2009
# new feature: print getProperty("PDBInfo","REMARK300")


# -----------------------------------------------------------------------------

#version=11.7.44

# bug fix: write FRAMES also for trajectories
# new feature: MO LIST or SHOW MO LIST display listing of orbitals for all files
# new feature: GAMESS reader now sets calculationType, orbital type, and auxiliaryInfo.calculationOptions
# bug fix: select(x;{xxx};...) or for(x;{xxx};...) when {xxx} is empty returns incorrect result
# bug fix: dipoles cannot be colored by name
# bug fix: dipole settings not accessible via wildcards
# new feature: merging of label() and format() functions -- same in all respects.
# bug fix: spartan'08 reader not reading vibrations

# -----------------------------------------------------------------------------

#version=11.7.43

# bug fix: /** comment ending line can cause odd error

# bug fix: set xxxx n where n is an integer fails.
# bug fix: GAMESS reader not properly assigning MOs 
# code: better .stddev calculation
# new feature: a = []    note that a+=2 then produces [2] -- "a+=" similar to JavaScript a.push(2)
# bug fix: a="test";a[1] = "b"  not working
# bug fix: {atomExpression}.min, .max 

# -----------------------------------------------------------------------------

#version=11.7.42

# new feature: function parameter arrays passed by reference, so, for example:
#
#   var a = [1,2,3,4]
#   function incrementA(a, i) { a[i]++ }
#   incrementA(a, 3)
#   show a
# 
# gives a = [1,2,4,4]
#
# new feature: general commands no longer restricted to single lines. 
#              any unpaired ( or [ or { triggers continuation
#  
# new feature: set or x = command no longer restricted to single lines. 
#              any binary math operator at end of line or beginning of next line
#              marks continuation, also any unpaired ( or [ or { triggers continuation
#              (same as JavaScript)
#  
# new feature: -p Jmol application command line option  --printOnly silent operation with only print command output or warnings going to the console   
#              for example:
#                java -Xmx512m -jar "Jmol.jar" -pions "myscript.spt"
#              just outputs messages from the print commands in that script
#
# bug fix: pickMeasureScriptTip not found
#
# new feature: support for extended inline if: x = (a ? this : b ? that : theother)
# default change: load trajectory "myfile.top" COORD {first,last,stride} "mdcrd::myfile.trj" defaults to last = -1 ("load all trajectories") not "load one trajectory" 
# bug fix: gzipped gzip file not read properly. (Jmol-FAH files)
# new feature: {*}.modelindex
#
# bug fix: y = q improperly defining q if q does not exist. 
# "all" equivalent to {*} 
# new feature: load ("filename", nBytesMax) --- and returns "java.io.FileNotFoundException" if file
#              does not exist when nBytesMax == 0, so is a simple test for "Local File Exists"
#              would be   if (load("filename",0).length == 0)...
# 
# new feature: print {xxx}.label.all("xxxx") -- forces array even if only one atom (like "{xxx}.label.all")
# bug fix: color.all not working properly
# bug fix: xxx.all was not forcing array when only one value 
#
# code: refactored classes -- next best thing to a separate package (they aren't really public)
#
#   CompilationTokenParser --> ScriptCompilationTokenParser
#   Compiler --> ScriptCompiler
#   Eval -> ScriptEvaluator
#   FlowContext --> ScriptFlowContext
#   Function -> ScriptFunction
#   Variable -> ScriptVariable
#
# bug fix: load @filename
# new feature: format("sprintf format", a, b, c, ...)
# new feature: {xxxx}.label("")  shows current label
# new feature: [array].sort
# new feature: [array].reverse
# new feature: [array].min
# new feature: [array].max
# new feature: [array].average
# new feature: [array].stddev
# new feature: (value).label("C++ printf format")

# bug fix: quarternion().q not working
# bug fix: Crystallographic Information File  not recognized.

# -----------------------------------------------------------------------------

#version=11.7.41

# bug fix -- bitsets not copied:  m1 = {m and selected} changes m to "m and selected"
#
# OK, this version basically turns Jmol scripting language into a subset of JavaScript. 
# Or, maybe a superset of the basic JavaScript constructs. Anyway, they are related.
#
# Similarities to JavaScript:
#
# --Jmol scripting now supports ++, --, +=, -=, *=, /=, \=, |=, &=
# --The if, for, while, and function constructs are all about the same, using braces. 
#   for example:
#
#     for (i = 1; i <= 10; i++) {print {*}[i].radius}
#     for (i = 0; ++i <= 10;) {print {*}[i].temperature}
#     if (var i < 10) {{*}[i].radius *= 2} else {spacefill off;wireframe}
#     i = 0; while (++i < 10) {select {*}[i * 2]; color red }
#
# --A relatively free typing of variables. Jmol is going to save variables as strings 
#   in terms of the Jmol "state" but in this version I introduce the Variable class that
#   subclasses Token and allows for a more organized approach to variables and sets the 
#   stage for future improvements. 
# --Commands separated by semicolons or line breaks
# --Object-like methods and fields such as {*}.xyz.all.join(" ") and {atomno=3}.radius
# --On-the-fly compilation.
#
# Differences include:
#
# --A broarder range of variable types, including boolean, integer, decimal, 
#   string, point, axis-angle/plane/quaternion, atom bitset, bond bitset, 
#   and one-dimensional array.
# --No case-sensitivity for variable names. 
# --1-based rather than 0-based arrays. (ONLY because that's the way models are numbered.)
# --Array indexing from the back to the front using n <= 0: A[0] A[-1] A[-2].
# --Array ranges [n][m], for example A[-3][0]
# --Core commands do not use commas or parentheses.
# --Visual-Basic-like IF / ELSEIF /END IF, FOR/END FOR, WHILE /END WHILE, and GOTO options.
# --A broad range of mathematical operations  
# --Of course, a whole suite of methods that relate to molecular structure.
#
#
# nested ( ... ? ... : ... ) phrases ready for testing.
#
# print (1   < 30 ? 1 : 2)
# print (1   < 30 ? (5 < 1  ? "yes" : "no") : 0)
# print (1   < 30 ? (5 < 1  ? "yes" : (6 > 20 ? "yes2" : "hmm")) : (33))
# print (100 < 30 ? (5 < 10 ? "yes" : (6 > 20 ? "yes2" : "hmm")) : (33))
# print (1   < 30 ? (5 < 10 ? "yes" : (6 >  2 ? "yes2" : "hmm")) : (33))
# print (100 < 30 ?  33 : (5 < 1  ? "yes" : (6 >  2 ? "yes2" : "hmm")))
#
# bug fix: echo @{....  .... .... } not counting braces

# -----------------------------------------------------------------------------

#version=11.7.40

# bug fix: setting commandOptions "" in Viewer.setAppletContext()

# {atomno=3}.radius += 0.1
#
# bug fix: in certain APPEND cases, binary space partitioning forest initialization is not complete
# bug fix: minimization not trapping error on viewer going null
# new feature: set useMinimizationThread T/F  nec. to be FALSE when running minimizations in scripts that require values
#
#
# code: compiler refactoring and efficiencies; 
# code: compiler continued development of advanced scripting syntax.
#
# new feature:  
#
# Jmol scripting now supports ++, --, +=, -=, *=, /=, \=, |=, &=
#
# i++
# ++i
# i += 3
#
# and basically all the standard flow syntax of Java and JavaScript:
#
#
# for (i = 1; i <= 10; i++) {print {*}[i].radius}
# for (i = 0; ++i <= 10;) {print {*}[i].temperature}
# if (i < 10) { {*}[i].radius *= 2}
# i = 0; while (++i < 10) {select {*}[i]; color red }
#
# 
#
# plus some more -- no line breaks necessary for for/if/while:
# the braces really aren't necessary; there is no ambiguity here:
#
# for (i = 1; i <= 10; i++) print {*}[i].radius
#
# if (i < 10) { {*}[i].radius *= 2}
#
# for (i = 1; i < 10; i++) print i
# if (i < 10) print i
#
# bug fix: isosurface efvet reader not displaying data properties as colors
# bug fix: select {*.ca} (_x.atomno < 100) not working
#
# code: major refactoring of variables.
#
# new feature: complete freedom from lines and "end if, end for, end while" --
#   just use standard { } notation. If no braces are used, then END must be used:
#
#   for (var x = 1; x < {*}; x = x + 1)
#   	if ({*}[x].temperature < 10)
#			({*}[x]).radius = 1
#	    else
#			({*}[x]).radius = 0
#		end if
#   end for
#
# same as:
#
#   for (var x = 1; x < {*}; x = x + 1){
#   	if ({*}[x].temperature < 10) {
#			({*}[x]).radius = 1
#	    } else {
#			({*}[x]).radius = 0
#		}
#   }
#
# same as:
#
#   for (var x = 1; x < {*}; x = x + 1){
#   	{{*}[x]}.radius = ({*}[x].temperature < 10 ? 1 : 0)
#   }
#
# same as:
#
#   for (var x = 1; x < {*}; x = x + 1){{{*}[x]}.radius = ({*}[x].temperature < 10 ? 1 : 0)}
#
# new feature: standard { ... ? ... : ... ) notation in Jmol math:
#
#  print ({*} < 100 ? "a small molecule" : "at least 100 atoms")
#
# new feature: load "@x"  -- inline load of data contained in variable x. 
#
# new feature: {*}.label = xxx and {*}.label("%[label]") and select label="xxx"
#
# new feature: An XML reader for Materials Studio .xsd files  http://accelrys.com/products/materials-studio/
#
# new feature: greatly expanded item selecting:
#
#   n = 2
#   {{atomno > 10}[n+2][n+5]}.radius = 0.3
#
# note that an outer set of {} is required when setting a property
# You cannot just do {atomno>10}[5][6].radius
#
# new feature: .length alias for .size except for x.bonds - so it can be
# used where you would use that in Java, for instance:
#
#   natoms = {*}.length
#   for (i = 1; i <= natoms; i = i + 1) 
#    ...
#   end for
#
# new feature: inline FOR(varName;{atom expression};math expression)
# 
#   ans = for(x;{*.ca};x.resno)
#
# produces a list of values
#
# new feature: .add() sums up values
#
#   ans = for(x;{*.ca};x.bonds.length).all.add() 
#
# new feature: inline IF(math expression;math if true; math if false)
#
#   ans = if (x.resno < 5 ; "low resno"; "high resno")
#
# and combined:
#
#   var ave = {*.ca}.boundcount.all.add()
#   print for(x;{*.ca};if (x.bonds.length < )
#
# bug fix: MO reader can fail setting min/max bounds
# bug fix: various tweaks of atom properties business.
# bug fix: x = array();x[1] = "testing" not working
# -----------------------------------------------------------------------------

#version=11.7.39

# bug fix: biomolecules for new PDB format

# new feature: consistent set of atom properties now accessible via:
#
#   select {xxxx = whatever}
#
# rather than the more cumbersome:
#
#   select {*} (_x.xxxx = "whatever")
#
# for example:
#
#  select insertion = "A" // see 1jgq.pdb
#  display insertion = "?" // single-character wildcard here
#  select altloc != ""    // see 1vwh.cif
#  select atomName = "O11" and cell = 555
#  select atomType = "OXT"
#  select atomName = "O*" // wildcards accepted
#  
#  This largely duplicates the current Rasmol notation but adds more of a 
#  natural language search language.
#
#  The full set of atom properties can be checked this way:
#
#  adpmax        adpmin       altloc        atomID          atomIndex     atomName
#  atomno        atomType     atomX         atomY           atomZ         bondcount
#  cell          color        covalent      element         elemno        file
#  formalCharge  fracX        fracY         fracZ           group         group1
#  groupID       groupindex   identify      insertion       ionic         model
#  molecule      occupancy    partialCharge phi             polymerLength property_xx
#  psi           radius       resno         sequence        site          spacefill
#  straightness  strucno      structure     surfacedistance symop         temperature
#  unitX         unitY        unitZ         valence         vanderwaals   vibX
#  vibY          vibZ
#
# full parameter list:
#
#{*}.xxx = y
#   	"select xxxx=yyyy"
#			"label %x"	
#				"label %[xxxx]"		
#						property
#								description	
#		yes		yes		adpmax	the maximum anisotropic displacement parameter for the selected atom
#		yes		yes		adpmin	the minimum anisotropic displacement parameter for the selected atom
#		yes	A	yes		altloc	PDB alternate location identifier
#	yes	yes		yes		atomID	special atom IDs for PDB atoms assigned by Jmol
#		yes	D	yes		atomIndex	atom 0-based index; a unique number for each atom regardless of the number of models loaded
#	yes	yes	a	yes		atomName	atom name
#		yes	i	yes		atomno	sequential number
#	yes	yes	B	yes		atomType	atom type (mol2, AMBER files) or atom name (other file types) -- Jmol 11.7.1
#	yes	yes	x	yes		atomX	Cartesian X coordinate
#	yes	yes	y	yes		atomY	Cartesian Y coordinate
#	yes	yes	z	yes		atomZ	Cartesian Z coordinate
#		yes		yes		bondcount	covalent bond count
#		yes				cell	crystallographic unit cell
#			c/s	yes		chain	protein chain							
#	yes	yes				color	the atom color
#		yes		yes		covalent	covalent bonding radius
#	yes	yes	e	yes		element	element symbol
#	yes	yes	l	yes		elemno	atomic e<b>l</b>ement number
#		yes		yes		file	file number containing this atom
#	yes	yes	C	yes		formalCharge	formal charge
#	yes			yes		fracXyz	fractional XYZ coordinates
#	yes	yes	X	yes		fX	fractional X coordinate
#	yes	yes	Y	yes		fY	fractional Y coordinate
#	yes	yes	Z	yes		fZ	fractional Z coordinate
#		yes	n	yes		group	3-letter residue code
#		yes	m	yes		group1	single-letter residue code (amino acids only)
#		yes		yes		groupID	group ID number: A unique ID for each amino acid or nucleic acid residue in a PDB file. <br /> <br /> [|| 0 | noGroup||  1-5  |ALA, ARG, ASN, ASP, CYS|| 6-10|  GLN, GLU, GLY, HIS, ILE|| 11-15|  LEU, LYS, MET, PHE, PRO|| 16-20 | SER, THR, TRP, TYR, VAL || 21-23 | ASX, GLX, UNK||  24-29|  A, +A, G, +G, I, +I || 30-35|  C, +C, T, +T, U, +U||] <br /><br />Additional unique numbers are assigned arbitrarily by Jmol and cannot be used reproducibly. 
#		yes	G	yes		groupindex	 overall group index (Jmol 11.5.35)
#		yes	U	yes		identify	for a  PDB/mmCIF file, same as [%[group]]%[sequence]:%[chain] %%%[altloc]/%[model]  #%[atomno]. For non-PDB data, same as %[atomname]/%[model]  #%[atomno]
#		yes	E	yes		insertion	protein residue insertion code
#		yes	I	yes		ionic	radius used for bonding (<b>i</b>onic radius when a formal charge is defined)
#		yes	M	yes		model	model number
#		yes	N	yes		molecule	molecule number
#	yes	yes	Q	yes		occupancy	 occupancy 0.00 - 1.00
#	yes	yes	P	yes		partialCharge	partial charge
#		yes	f	yes		phi	protein group PHI angle for atom\'s residue  (Jmol 11.3.41)
#		yes	L	yes		polymerLength	polymer length
#		yes		yes		property_xx	a property created using the DATA command
#		yes	p	yes		psi	protein group PSI angle for the atom\'s residue  (Jmol 11.3.41)
#	yes	yes	I	yes		radius	currently displayed radius -- in SELECT command comparisons ("select radius=n"), integer n implies Rasmol units 1/250 Angstroms
#		yes	R	yes		resno	PDB residue number, not including insertion code
#		yes	r	yes		sequence	PDB residue number, including insertion code
#		yes	S	yes		site	crystallographic site number
#	yes	yes		yes		spacefill	currently displayed radius
#		yes	T	yes		straightness	quaternion-derived straightness (second derivative of the quaternion describing the orientation of the residue. This quantity will have different values depending upon the setting of <b>quaternionFrame</b> as "C" (alpha-carbon based), "P" (carbonyl-carbon based), or "N" (amide-nitrogen based). The default is alpha-carbon based, which corresponds closely to the following combination of Ramachandran angles involving three consecutive residues i-1, i, and i+1: -psi<sub>i-1</sub> - phi<sub>i</sub> + psi<sub>i</sub> + phi<sub>i+1</sub>.
#		yes		yes		strucno	a unique number for each helix, sheet, or turn in a model, starting with 1.
#		yes		yes		structure	"helix", "sheet", "turn", or "none"
#		yes	u	yes		surfacedistance	shortest distance to a surface atom
#		yes				symop	symmetry operation code
#			o	yes		symmetry	list of crystallographic symmetry operators generating this atom
#	yes	yes	t	yes		temperature	temperature factor (B-factor)
#				yes		unitXyz	unit cell XYZ coordinates
#		yes		yes		uX	unit cell X coordinate normalized to [0,1)
#		yes		yes		uY	unit cell Y coordinate normalized to [0,1)
#		yes		yes		uZ	unit cell Z coordinate normalized to [0,1)
#	yes	yes		yes		valence	the valence of an atom (sum of bonds, where double bond counts as 2 and triple bond counts as 3
#	yes	yes	V	yes		vanderwaals	van der Waal radius
#	yes		v	yes		vibXyz	vibration vector, or individual components as %vx %vy %vz
#	yes	yes		yes		vibX	vibration vector X coordinate
#	yes	yes		yes		vibY	vibration vector Y coordinate
#	yes	yes		yes		vibZ	vibration vector Z coordinate
#	yes			yes		xyz	Cartesian XYZ coordinates
#			g	yes			group index in chain
#			q	yes			occupancy (0-100%)
#			W	yes			PDB residue designator with x, y, z included: [%n]%r %x %y %z (Jmol 11.3.41)


# bug fix: isosurface cavity colorscheme not applied
# bug fix: isosurface cavity colorscheme "sets" error
# code: extensive rewrite of Eval in terms of getting and setting atom properties
# code: Token.atomproperty broken down into intproperty, floatproperty, and stringproperty
# new feature: consistent set of atom properties now accessible via:
# select {xxxx = whatever}
# select {*} (_x.xxxx = "whatever")
# 
# code: removed duplication in Eval for getBitSetProperty() and atomProperty()
# code: artificial size limitations in spacefill, halo, star, dots was not
#       consistent with setting those values using {xx}.radius (for example)
# new feature: relaxed limitation on spacefill, halo, star, dots size to 16A.
# new feature: {xxx}.spacefill = n 
# new feature: {xxx}.radius = n    (same)
# new feature: print {xxx}.ionic    ionic radius 
# new feature: print {xxx}.covalent covalent radius 
#
#
# code: ver efficient and flexible atom label compiler class modelset.LabelToken
#   see Eval, Atom, Bond, and Measurement for implementation.
#
# new feature: label %[....] where .... is one of: 
#   %[altloc]		%A	  	
#   %[atomIndex]	%D		  	
#   %[atomName]		%a	  	
#   %[atomno]	    %i	
#   %[atomType]		%B	  	
#   %[atomX]        %x
#   %[atomY]        %y
#   %[atomZ]        %z
#   %[bondcount]
#   %[chain]        %c			  	
#   %[chain]        %s
#   %[element]	    %e	
#   %[elemno]	    %l	
#   %[formalCharge]	%C		  	
#   %[fxyz]
#   %[fx]           %X
#   %[fy]           %Y
#   %[fz]           %Z
#   %[group]        %n
#   %[group1]       %m
#   %[groupID]
#   %[groupIndex]	%G	
#   %[identify]     %U
#   %[insertion]	%E	
#   %[ionic]		%I	
#   %[model]	    %M	
#   %[molecule]     %N
#   %[occupancy]    %
#   %[partialCharge] %P
#   %[phi]	        %f 	
#   %[polymerlength] %L
#   %[psi]          %p
#   %[radius]
#   %[resno]        %R
#   %[sequence]     %r
#   %[site]         %S
#   %[spacefill]
#   %[straightness] %T
#   %[strucno]    (1,2,3,...)
#   %[structure]  (helix,sheet,turn,none)
#   %[surfaceDistance] %u
#   %[symmetry]     %o
#   %[temperature]  %b, %t
#   %[uxyz]
#   %[ux]           %ux
#   %[uy]           %uy
#   %[uz]           %uz
#   %[valence]
#   %[vanderwaals]  %V
#   %[vxyz]         %v
#   %[vx]           %vx
#   %[vy]           %vy
#   %[vz]           %vz
#   %[xyz]      
#
# this leaves only three label abbreviations without equivalents:
#
#                	%g	// getSelectedGroupIndexWithinChain()
#                   %q  // occupancy * 100
#                   %W  // identifier and XYZ coord

# bug fix: selected connected(hbond) not working.
# bug fix: quaternion straightness not following quaternionFrame type (was using testflag3)
# bug fix: quaternion straightness not setting end points to Float.NaN
# new feature: color hbonds energy
# new feature: application flag -L --nosplash no splash screen (For Jmol in Sun Wonderland dev. 5)
# new feature: load XYZ ...  loads just the XYZ coordinates, in sequence, based on selected atoms.
#   lots of potential uses for this:
#   --NMR files where you want just one model at a time and, once loaded, want to save the positions
#   --basically anywhere you want a "trajectory" but don't want to save all that data
# bug fix: QchemReader reading second set of MOs with spherical basis problem (at end of optimization)

# -----------------------------------------------------------------------------

#version=11.7.38

# new feature: load OCCUPANCY ...     int [0 to 255]
# new feature: load PARTIALCHARGE ... float ~[-3.4 x 10^38 to 3.4 x 10^38]
# new feature: load TEMPERATURE ...   float [-327.68 to 327.67], with 0.01 precision (stored as short)
# new feature: loadAtomDataTolerance, with default 0.01 Angstroms

# spartan smol reader broken in 11.7.37

# -----------------------------------------------------------------------------

#version=11.7.37

# new feature: load VIBRATION "filename" n .......
#   --all features of the load command, but only loads the vibrational information
#   --applies {within(loadAtomDataTolerance,xyzcoord)}.vxyz = vibcoord, so to all unit cells
#         will be checked if loadAtomDataTolerance is less than zero.
#   --optional n is just as for any load -- optional nth model
#   --operates on previously selected atoms only
#   --allows embedded jmolscript, just as for any load
#   --sets _vibrationName from file's atom set collection name
# new feature: loadAtomDataTolerance (see above)
# bug fix: load {n n n} not saved in state
# new feature: load {a b -c} packs a x b x c cells
# new feature: select within(-0.1, {1/2 1/2 1/2}) -- negative distance within selects atoms based on unitcell coordinates
# new feature: select within(-0.1, atomno=3) -- negative distance within selects atoms based on unitcell coordinates of all atoms involved
# new feature: select within(-0.1, true, atomno=3) -- negative distance within model selects atoms based on unitcell coordinates
# new feature: select ux|uy|uz < x.x  -- selection based on unit coordinates
# new feature: {x y z}.fxyz -- returns fractional from cartesian
# new feature: {x y z}.uxyz -- returns unitcell from cartesian
# new feature: {x y z}.ux, .uy, .uz similar to .fx, .fy, .fz
# new feature: {x y z}.xyz -- returns cartesian from fractional
#       note that .x .y .z does NOT do this conversion. If that is
#       intended, you need to use {x y z}.xyz.x
# if multiple models are visible, then all these just return as through there were no unit cell.
#
# new feature: {atomExpression}.uxyz, .ux, .uy, .uz -- unit cell coordinate
# The value depends upon the setting of unitcell offset. For example, if we have
#
#  unitcell 444
#
# then {x}.uxyz will be in the range {-1,-1,-1/1} (inclusive) to {0,0,0/1} (exclusive)
# Note that uxyz is not settable, but fxyz is, so one could, for example, 
# pack a unit cell using:
#
#   unitcell 555
#	n = {*}.size
#	for (var a = 1; a < n; a = a + 1) 
#		{atomno=a}.fxyz = {atomno=a}.uxyz	
#	end for

# bug fix: {atomExpression}.fxyz does not return factional value, just 0.0

# -----------------------------------------------------------------------------

#version=11.7.36

# code: better treatment of user-defined space group
# new feature: "xxxxx".find("pattern","flags") allows regular expression matching; 
#    flags include:
#         "i" (case insensitive)
#         "v" (reverse -- "true" if a string does NOT match; nonmatching elements for list)
#         "m" (without "v", returns matching phrase in string or each list element or 
#                 with "v", returns all but the matching phrase in string or on any matching list element)
#    for example:
#
#       print script("show spacegroup all").split().find("Hall symbol:").find("primitive","v")
# 
# 			Hall symbol: P 1
# 			Hall symbol: -P 1
# 			Hall symbol: P 2y
# 			Hall symbol: P 2y
# 			Hall symbol: P 2
#           ...
#
#       print script("show spacegroup all").split().find("Hall symbol:")
#						.find("primitive","v").find("Hall symbol: ","vm")
#
# 			P 1
# 			-P 1
# 			P 2y
# 			P 2y
# 			P 2
#           ...
#
# bug fix: Hall lattice operation (SHELX only) could place atoms in unexpected unit cell
# bug fix: unitCell normalization error could miss some atoms in multi-unit cell visualizations
# new feature: Wien2k reader
# bug fix: possible exception when writing large image with translucency due to caught memory overflow leaving plotting buffer null

# -----------------------------------------------------------------------------

#version=11.7.35

# bug fix: calculate hbonds can fail when group does not have O or OXT atoms
# bug fix: (applet) jmolGetPropertyAsString("image") not functional
# new feature: label %G  -- group index, like atom index, 0-based for entire collection
# new feature: ramachandran DRAW -- draws dihedral planes and angles
# bug fix: draw/isosurface *name*
# bug fix: data "append" does not set model the way load "append" does
# bug fix: application frame arrows do not work after loading multiple models

# -----------------------------------------------------------------------------

#version=11.7.34

# bug fix: isosurface incorrectly setting number of grid points for MEP surface map
# new feature: application -s - reads input from System.in (untested) 
# new feature: \? in atom name escapes ? wildcard. Still no * in names,
#   but you can use multiple ?s: select ?\? or ??\? or ???\? or ????\?

# new feature: isosurface FunctionXYZ -- same as FunctionXY, but must return float[][][]
# -- note, this involves an additional required function in interface JmolStatusListener
#   public float[][][] functionXYZ(String functionName, int nx, int ny, int nz);

# -----------------------------------------------------------------------------

#version=11.7.33

# bug fix: minimization callback does not report dE
# bug fix: minimization does not interrupt or stop in applet
# bug fix: rotate quaternion with NaN values not ignored
# bug fix: applet console not closed when web page destroyed
# bug fix: load file:///xxx.xxx (file:/// with file in root path) causes unrecoverable exception
# bug fix: signed applet JmolAppletSigned0.jar does not include minimizer in internal jar index
# bug fix: rotate -x n rotates wrong direction 
# new feature: load xxxx FILTER "NBOcharges" loads NBO charges instead of Mulliken
#   note: for NBOs you still need FILTER "NBO" so with charges that would be FILTER "NBO;NBOcharges"
# bug fix: Jaguar reader vibrations not correct
# bug fix: autoBond option in Preference menu was not writing to properties file in $HOME/.jmol
# new feature: preliminary NBO support for Gaussian and QChem needs checking
# code: subclassing Gaussian, QChem, NWChem, Gamess, Jaguar, Psi readers all into MOReader class
 
# -----------------------------------------------------------------------------

#version=11.7.32

# bug fix: reading multiple files from a ZIP file collection, Jmol was forcing autobond 
#          even when bonds were defined
# bug fix: load MANIFEST not working properly
# bug fix: V3000 reader chokes on CHG=n and does not recognize MASS=n
# bug fix: Spartan SMOL file reader failure (coded & instead of && in if statement!)
# new feature: CML "isotope" and CML "partial12" bond order.
# new feature: GAMESS reader reads NBOs using 
#  load "xxx.gamess" filter "!EIGEN"  # to only load NBOs; by default ALL MOs are loaded.
# new feature: QChem reader reads occupancy, frequencies and MOs

# -----------------------------------------------------------------------------

#version=11.7.31

# bug fix: automatic adjustment for 5D (spherical) orbitals, especially for Spartan Smol reader
# bug fix -- Spartan reader adding " in front of atom label
# new feature: frame ALIGN {atoms} -- aligns frames around designated atoms in each frame
#  for example: frame ALIGN {C2} -- align each frame on C2/n where n is a frame number
#  for example: frame ALIGN {*} -- align all frames on center for that frame
# new feature: Spartan MO-Animation files can be read
# bug fix -- animation/spin while script is rendering can cause Exception
#  in general, one needs to use 
#    set refreshing FALSE 
#    ... 
#    set refreshing TRUE
#  around code that might be running and deleting atoms or bonds while some other 
#  process is rendering

# bug fix -- trajectories with files having bonds can be a problem
# bug fix -- animation/spinning while connections are being made can cause exception
# code -- more documentation and somewhat reorganized adapter section.
# bug fix: antialiasdisplay with MO does not show correct font size.
# new feature: Spartan zip directories xxx.spardir.zip containing directory xxx.spardir can be read
# new feature: Spartan reader now reads all models in an energy profile
# new feature: MO no longer restricted to one per model set; rather, one per MODEL
# new feature: MO command operates on all models in current frame set:
#   for instance:
#     load t.spardir
#     frame *; MO HOMO
#     animation on
#   will generate highest-occupied MO for all models and run through them quickly
#   This allows for animation of molecular orbitals along a reaction pathway
# code: first attempt at Gaussian WFN file reading was unsuccessful.

# -----------------------------------------------------------------------------

#version=11.7.30

# bug fix: signed applet does not use CD to set dialog default directory
# bug fix: errorCallback not functional
# new feature: set autoLoadOrientation (default: FALSE) automatically sets "reset" orientation to that in file, if present
# new feature: restore orientation DEFAULT -- resets orientation to file's default orientation or stanadard "reset" if not present
# code: generalized setTransform() in JmolAdapter readers CSF and SpartanSmol (.spardir)
# bug fix: Spartan .spardir /input files not being read
# bug fix: draw arrow/vector slightly overshoots end point

# -----------------------------------------------------------------------------

#version=11.7.29

# bug fix: isosurface/mo FRONTONLY not operative
# new feature: draw ID xxx FRAME {center} {quaternion}
#  draws x,y,z coordinates for the frame defined by the specified quaternion at the specified center.

# bug fix: MO calculations skips d2+ orbital due to integer division.

# -----------------------------------------------------------------------------

#version=11.7.28

# bug fix: 11.7.27 does not display color for MOs; "color MO" can crash Jmol

# -----------------------------------------------------------------------------

#version=11.7.27

# bug fix: line raster not completing lines
# code: JmolCallbackListener implemented, extended by JmolStatusListener
# code: JmolViewer now includes setJmolCallbackListener
# bug fix: measure n1 n2 n3 n4  with just numbers selecting atoms in frame 1 rather than current frame.
# bug fix: toolbar icon for pickMeasure tied to tools "measurements..." item
# bug fix: (Application) meaurement table not updating properly
# bug fix: (Application) measurements toolbar icon does not stay shaded
# bug fix: very subtle code error on lines and cylinders rasterization not completing line end pixel in most cases
# bug fix: (Application) measurement icon measures angles, not distances.
# new feature: JVXL format supports polygonColixes[]
# code: polygonColixes[] to define polygon colors rather than vertex-based colors (as in OBJ file)
# new feature: isosurface points can be retrieved using $id[n] where n=0,1,2,3... similar to $draw[n]
# debugging: setTestflag2() turns on vertex labeling in isosurfaces
# new feature: isosurface OBJ file reader using
#   isosurface OBJ "myfilename" n
#   where n is an optional pointer to a specific group (starting with 1)
#
# bug fix: subtle MarchingSquares calculation error produces incorrect contours for mapped plane
# new feature: hover displays isosurface values for contour plots and planar plots
# new feature: isosurface .... map contour [n] [mep|MO homo|etc]
#   for example:   isosurface molecular map contour 10 mep
#   [n] is optional; defaults to 9
# new feature: isosurface CONTOURLINES|NOCONTOURLINES
#   displays contour lines; for planes, same as MESH|NOMESH
# new feature: default rendering for isosurfaces involving the 
#   CONTOUR keyword is CONTOURLINES NOFILL 
# new feature: hovering over isosurface contourlines displays value 
# bug fix: isosurface TRIANGLES not turning off when isosurface cleared
# bug fix: remapping colors of translucent isosurface can have incorrect colors
# bug fix: isosurface sphere 1.0 map molecular  not working
# bug fix: MO calculation with selected atoms can fail 
# bug fix: picked atoms automatically selected -- bug in 11.7.24
# new feature: very preliminary isosurface ED (RHF only) //and isosurface ESD
# bug fix: JVXL writing after reading JVXL file may not write properly
# bug fix: Jmol in other applications not initialized the same way can cause null pointer exception loading file with symmetry

# -----------------------------------------------------------------------------

#version=11.7.26

# new feature: isosurface VOLUME reports the volume of an isosurface and stores the number in variable isosurfaceVolume 
# new feature: ASimpleJvxlWriter can calculate the volume of the surface
# new feature: isosurface AREA reports the area of an isosurface and stores the number in variable isosurfaceArea
# new feature: ASimpleJvxlWriter can calculate the area of the surface
# bug fix: Spartan reader reads MOs improperly when only a partials set of MOs is included in the file
# bug fix: Some Spartan files not reading: Compound Document not properly finding root directory block
# code: rewritten code for Marching Cubes no longer requires 2D array of cube data

# -----------------------------------------------------------------------------

#version=11.7.25

# code: rewritten code for ASimpleJvxlWriter allows streaming data
# code: rewritten code for Marching Cubes no longer requires 3D array of data
# new feature: CTRL-K toggles keystrokes with display; ALT-K or CTRL_ALT_K same without display
#              color of frank displays condition -- blue (unsigned) or orange (signed) indicates keystrokes enabled
# bug fix: PDB load filter broken for ANISOU
# bug fix: isosurface plane improperly coloring nonmapped planes
# code: rewritten code for JvxlReader saves nx*ny*nz*8 bytes of memory on loading JVXL files
#       because there is no need for voxelData = float[nx][ny][nz].
# new application: org.openscience.app.jvxl.simplewriter.ASimpleJvxlWriter.java
#  -- streamlined methods for converting CUBE data to JVXL files

# -----------------------------------------------------------------------------

#version=11.7.24

# bug fix: Mopac graphf UHF files not read properly for beta orbitals, or can't read file

# new feature: character \0 at the start of an echo does screen echo only, not to callback or console
# new feature: typing into applet executed as script commands
# new feature: set showKeyStrokes
#   sets the echo to bottom left and shows the key strokes as they appear

# new feature: set dragSelected (was "set picking dragSelected")
#    
#    ALT_LEFT or CTRL_ALT_RIGHT highlights atoms and rotates them
#    ALT_SHIFT_LEFT highlights atoms and translates them

# bug fix: set picking draw can lose focus during drag operation

# -----------------------------------------------------------------------------

#version=11.7.23

# new feature: load "myfile.cif" {ijk i'j'k' -1} 
#    loads crystal structure and packs unit cell
# new feature: load "myfile.cif" PACKED
#    same as {555 555 -1}
#
# bug fix: {*}.formalCharge = 1 after {*}.formalCharge = -1 sets formal charge to -7 and exception
# bug fix: Menu File|Open does not honor "start in" directory

# -----------------------------------------------------------------------------

#version=11.7.22

# new feature: translate x|y|z x.x nm|angstroms|%

# bug fix: structure helix ({xx:yy}) compiler bug
# new feature: additional VRML support (Angel Herraez)
# new feature: u3d exporter template only -- no actual output

# -----------------------------------------------------------------------------

#version=11.7.21

# bug fix: user menu ...Text menus not translated
# bug fix: minimization broken
# bug fix: menu save ?.spt
# bug fix: write PovRay "?.pov"

# -----------------------------------------------------------------------------

#version=11.7.20

# bug fix: protein-protein hydrogen bonds not calculated across biopolymer boundaries

# -----------------------------------------------------------------------------

#version=11.7.19

# bug fix: vibrationperiod set to 0 if vibration off when state saved
# bug fix: Compilation problem with "new IOException(e)"
# bug fix: application -i option still gives message from "set xxxx"
# bug fix: recent application changes do not work with -w option

# -----------------------------------------------------------------------------

#version=11.7.18

# bug fix: 11.7.15 does not run script after loadInline applet parameter
# new feature: Alchemy/3DNA reader
#
# new feature: new command "exitJmol" does just that -- application only; 
#   can be overridden in a script by user defining the function "exitJmol" 
#
# new feature: application -d --debug sets loglevel to 5 
# new feature: application -J --jmolscript1 Jmol script BEFORE -s 
# new feature: application -j --jmolscript2 Jmol script AFTER -s not accepting values
#
# new feature: (embedded application method of JmolViewer):
#
# public Object viewer.getImageAs(String type, 
#                                 int quality,
# 								  int width,
# 								  int height, 
#                                 String filename, 
#                                 OutputStream outputStream);
#
#   allows creation of an image of a given type ("JPG", "JPEG", "JPG64", "PNG", "GIF", "PPM")
#   of a specific quality (-1 indicates default) 
#     0 to 100 for JPG (-1 = default of 75) 
#     0-9 for PNG (-1 = default of 2)
#   and specific width and height
#   and returned as byte[] (when fileName = null, os = null)
#   or sent to an output stream (os != null)
#   or set to a file (os == null, fileName != null)
#
#   return can be String if there is an error. 
#
#   command sequence, for example:
#
#     jmol.viewer.scriptWait("load =1crn;cartoons on;set antialiasdisplay");
#     Object nullOrErrorMsg = jmol.viewer.getImageAs("JPG", 75, 300, 300, "t75.jpg", null);
#     Object nullOrErrorMsg = jmol.viewer.getImageAs("JPG", 75, 300, 300, null, os);
#     Object bytesOrError = jmol.viewer.getImageAs("JPG", 75, 300, 300, null, null);
#     Object stringOrError = jmol.viewer.getImageAs("JPG64", 75, 300, 300, null, null);
#
#   this method, like WRITE IMAGE uses the antialiasImage settings
#
#   primarily, this is for writing to an OutputStream directly, but
#   the rest seemed simple to implement along with that.
#
# new feature: (embedded application method of JmolViewer):
#
# public String clipImage(String text);
#
#   sends image (null parameter) or text to clipboard

# -----------------------------------------------------------------------------

#version=11.7.17

# new feature: q = quaternion(matrixColumn1, matrixColumn2)
#   quaternion from first two columns of a 3x3 rotation matrix
# bug fix: some quaternions cannot be created from a 3x3, namely:
#   q = quaternion({1 2 -2}, {2 1 2}) = {0.57735026 0.57735026 0.0 0.57735026} (xyzw format)

# bug fix: ignoreError -- need not get error string
# bug fix: write image does not set mustRender
# bug fix: set debugscript and set loglevel do not act in script immediately 
#
# new feature: Jmol.js jmolScriptWaitOutput(script) returns all messages that would
#			   have been sent to the console.
# new feature: applet.getJmolStatus("AS_VECTOR") and applet.getJmolStatus("AS_HASHTABLE")
#              allows slightly different format for JSON return 
# new feature: measureCallback reports pending measurements as well as completed ones 
#
# code: documentation for callbacks in Viewer; refactoring of StatusManager
#
#    function myAnimFrameCallback(frameNo, fileNo, modelNo, firstNo, lastNo) {}
#    function myEchoCallback(app, message, queueState) {}
#    function myErrorCallback(app, errType, errMsg, objectInfo, errMsgUntranslated) {}
#    function myHoverCallback(strInfo, iAtom) {}
#    function myLoadStructCallback(fullPathName, fileName, modelName, errorMsg, ptLoad) {}
#    function myMeasureCallback(strMeasure, intInfo, status) {}
#    function myMinimizationCallback(app, minStatus, minSteps, minEnergy, minEnergyDiff) {}
#    function myPickCallback(strInfo, iAtom) {}
#    function myResizeCallback(width, height) {}
#    function myScriptCallback(app, status, message, intStatus, errorMessageUntranslated) {}  
#    function mySyncCallback(app, script, appletName) {
#       ...[modify script here]...
#       return newScript
#    }
#
# new feature: errorCallback and scriptCallback report untranslated errors
# new feature: when errorCallback or scriptCallback is enabled, messages are translated
# note: To get translation in message callbacks, use jmolSetTranslation(true)
# bug fix: translations of Console not implemented correctly
# bug fix: translation not disabled when messageCallback is present

# -----------------------------------------------------------------------------

#version=11.7.16

# new feature: set errorCallback -- cannot be a Jmol script!
# new feature: load xxx.gamess FILTER "natural,optimized"
# new feature: load xxx.gamess FILTER "!natural,!initial"

# bug fix: script error messages not updating when language changed (coding)
# bug fix: app -j "xxx" option not properly implemented
# bug fix: MO scale

# readers: MOLDEN reader update contributed by Albert DeFusco - adefusco
# readers: GAMESS reader update contributed by Albert DeFusco - adefusco

# -----------------------------------------------------------------------------

#version=11.7.15

# bug fix: measure allConnected broken
# bug fix: 11.7.14 has broken define ({...}) statement
# code: better handling of OutOfMemoryError conditions (2)
# code: refactoring of method names in FileManager and Viewer
# code: refactoring of method names to remove ambiguities between "openFile" and "createModelSet"
# code: fixing inappropriate calls to getOpenFileError(), which actually creates the model set. 
# new feature: applet methods jmolLoadInline, jmolLoadInlineScript, jmolLoadInlineArray, 
#  jmolAppendInlineArray, jmolAppendInlineScript all return load error message

# -----------------------------------------------------------------------------

#version=11.7.14
	
# code: efficiencies

# new feature: jmolGetPropertyAsString("errorMessage")
# new feature: out-of-memory "Java heap error" trapping in scripts and image creation
# new feature: save [bonds|coordinates|orientation|selected|state|structure] DELETE

# bug fix: write .... @{...} can fail
# bug fix: write coords CLIPBOARD broken
# bug fix: select {*.ca} (phi < select(y; {*.ca}; y.resno = _x.resno + 1).phi) fails when atomExpression is ({})
# bug fix: applet compilation error not sent in termination message
# bug fix: build javax package does not include AxisAngle4d.class, Matrix4d.class
# bug fix: compilation of myfunc({1 2 3}) fails
# bug fix: hover watcher occasional uncaught exception

# -----------------------------------------------------------------------------

#version=11.7.13

# new feature: sync * stereo
# bug fix: applet improperly reporting status of "quiet" commands
# bug fix: stereo not in state
# bug fix: stereoDegrees parameter not reported correctly
# bug fix: quaternion straightness update
# bug fix: translucency of mapped isosurfaces not saved in state 
# bug fix: Dialog look and feel for Mac
# bug fix: negative number in range involving ^ fails: select 10^P -17^P  
# code: better allocateViewer method

# -----------------------------------------------------------------------------

#version=11.7.12

# new feature: isosurface PMESH; pmesh command deprecated
# code: pmesh now a subclass of isosurface, with org.jmol.jvxl.PmeshReader doing the work.
# new feature: all options of isosurface now option for pmesh. 
# all pmesh command does is guarantee that if the pmesh data is standard pmesh ASCII data, 
#  then it will be read correctly. Binary pmesh files may be read with isosurface command.
# new feature: pmesh files and inline scripts now can be colored and saved as JVXL files
# new feature: isosurface INLINE "--pmesh data--"
#
# bug fix: .xxx broken for Jmol 11.7.11
# JVXL 2.0 format enhancements
# new feature: #xxx comments act as targets for goto as well as MESSAGE commands
# bug fix: goto xxx  with trailing white space fails to find xxx
# bug fix: goto with a # comment in the script prior to the target line fails
# bug fix: two //xxx comments in a row breaks script 
# new feature: fully remappable JVXL files
# new feature: JVXL file format version 2.0 writing and reading for general vertex/triangle file source.
# code: superfast JVXL compression/decompression
# bug fix: straightness absolute value -- values 0 (not straight) to 1 (straight)
#  load =1crn;calculate straightness;color "bwr" range 0 1;color straightness
# new feature: efvet file reader (http://ef-site.hgc.jp/eF-site)
#   isosurface color "rwb" "myfile.efvet"
# bug fix: isosurface APBS dx file reader broken (since 4/2007)
# menu: "Minimize" GT

# -----------------------------------------------------------------------------

#version=11.7.11

# bug fix: UFF.txt not included in build
# new feature: user-definable atom selector for extended select:
#
#  select {*.ca} (myfunc < 3.0)
#
# new feature: user-definable atom selector functions. 
# _x is used for the selected atom (not _atom) as for
# select {atomExpression} (property expression)
#  
#   function myFunc()
#     return _x.x + _x.y + _x.z
#   end function
#
#   print {*}.myFunc
#   print {*}.myFunc.min
#   print {*}.myFunc.max
#   print {*}.myFunc.all
#
#  parenthetical parameters are allowed provided .min, .max, .all are not used
#

# -----------------------------------------------------------------------------

#version=11.7.10

# bug fix: function definitions occurring before prior script commands are executed. 
# bug fix: message @{xxxx} in function not picking up function context variables
# new feature: set fontCaching false -- for testing of font caching issues
# bug fix: CD command not working for writing
# bug fix: Some browsers do NOT strip \n from <param> tags, necessitating changes in loadInLine()

# -----------------------------------------------------------------------------

#version=11.7.9

# bug fix:  initializeBspf(); missing in setTrajectory()
# new feature: hbonds delete
# new feature: calculate hbonds {*} {*} [not documented; not working]
#  between {O or N} and {O or N} only
# new feature: set hbondsAngleMinimum
#  if hbondsAngleMinimum is set > 0 (default 90 ?), then that angle is checked
#  for any atoms A--X- - -Y where A is attached to X, 
#  and X and Y are the two heteroatoms involved.
# new feature: set hbondsDistanceMaximum
#  maximum distance for X---Y. (default 3.25 ?)
#
# bug fix: AMBER atom type IM and IP not recognized
# bug fix: AMBER topology file reading of IFBOX=2 files 
# bug fix: antialiased fontscaling labels can appear incorrectly
# bug fix: font maximum reduced
# code: major scaled memory font savings 
# bug fix: more lenient MopacGraphF format resolving
# bug fix: "valence" not "valency" in data property_valence

# -----------------------------------------------------------------------------

#version=11.7.8

# bug fix: set antialiastranslucent false not functional
# bug fix: text color near black with antialiasdisplay becomes white
# bug fix: text antialiasing of near-black text looks very bad when antialiased

# new feature: settable atom elements, atomType, and atomName
#   {atomno=3}.element = 6  # set atom 3 to carbon
#   {atomno=3}.element = "C"
#   note -- this will reset the atom color to its standard CPK value.
#   {atomno=3}.atomType = "xxx"
#   {atomno=3}.atomName = "xxx"
# new feature: select within("atomName", "xxx,yyy")
# new feature: select within("atomType", "xxx,yyy")

# -----------------------------------------------------------------------------

#version=11.7.7

# bug fix: forcefield file UFF.prm --> UFF.txt
# bug fix: better Escape method for strings
# bug fix: connect auto not registered in state
#
# new feature: Jmol math simple array definitions using brackets: x = [3,4,5,6]  
# new feature: set atomTypes "abcd=>C;efgh=>H" for reading mol2 and mdTop files
#
# code: better algorithm for atom types in Mol2Reader
# code: faster loading -- no "pre" definition of atom sets
# code: Eval load conversion of param[] values to htParams entries

# -----------------------------------------------------------------------------

#version=11.7.6

# bug fix: draw point translucent only draws ring 
# new feature: mol2 format reads force field atom types for AMBER, CFF91, GAFF, ESFF, CHARMM, COMPASS, CVFF, CVFF_aug, PCFF force fields (rev2)
# bug fix: load string inline with multiple models fails
# code: FindBugs fixes for Eval, DrawRenderer, Isosurface, ForceFieldUFF,PdbReader
# code: ScriptWindow public: sendConsoleEcho,sendConsoleMessage,notifyScriptStart,notifyScriptTermination

# -----------------------------------------------------------------------------

#version=11.7.5

# code: ScriptWindow public: sendConsoleEcho,sendConsoleMessage,notifyScriptStart,notifyScriptTermination
# bug fix: set labelToggle malfunctioning
# bug fix: missing default background for toggled labels
# bug fix: color {oxygen} translucent blue
# bug fix: color translucent 1 blue  1-8 integer settings off by one
# bug fix: background color +/-1 adjustment removed

# -----------------------------------------------------------------------------

#version=11.7.4

# bug fix: spardir within /M... directory
# new feature: write MENU "filename.mnu"
# new feature: (Application) -c option checks without loading files; -C option checks with loading files 
# code: LOAD command ignores all nonrecognized pre-filename keywords

# -----------------------------------------------------------------------------

#version=11.7.3

# new feature: x = file("some file name") or x = file("?")  -- returns full path to file 
# new feature: (Application) Files...Export...Gaussian... Build Gaussian Input File Dialog
# new feature: (Application) command line option -j --jmolscript "script commands"
# new feature: load MODELS ({bitset})|{first,last,stride}
# new feature: load TRAJECTORY ({bitset})|{first,last,stride}
# new feature: load APPEND MODELS ({bitset})|{first,last,stride}
# new feature: load APPEND TRAJECTORY ({bitset})|{first,last,stride}
# new feature: load APPEND "[topolopy file]" COORD ({bitset})|{first,last,stride} "mdcrd::md1.crd COORD ..."
# new feature: load FILES "[topology file]" COORD ({bitset})|{first,last,stride} "mdcrd::md1.crd COORD ..."

# -----------------------------------------------------------------------------

#version=11.7.2

# new feature: independent JAR files for language localizations
# bug fix: XML readers broken in 11.7.1
# bug fix: AMBER molecular dynamics topology file misreads P atoms
#
# new feature: select within(atomName,"ATOMNAME1,ATOMNAME2,...")
# new feature: select within(atomType,"ATOMTYPE1,ATOMTYPE2,...")
# NOTE: 11.7.8 changes just "type" to "atomType"
#  selects within a set of atom types (defined currently only for mol2 and AMBER topology file types)
#  matching is case-sensitive.
#  defaults to atom name if no types are indicated
#  for example: select not within(atomType,"HW,OW")
#  
# new feature: cd command sets defaultDirectory
#  cd   # reports current directory and sets default directory to that
#  cd ? # (signed applet and app only) opens a directory
#  cd .. # moves up one directory
#  cd temp # moves to subdirectory temp
#  cd "" # resets the default directory 

# -----------------------------------------------------------------------------

#version=11.7.1

# new feature: draw LINE {...} {...} {...} {...}  draws line segments
# new feature: making Jmol movies using write frames {atomExpression} [width] [height] "movie.jpg" 
# creates a set of files movie0001.jpg, movie0002.jpg, etc. for frames in atomExpression
# these fils can then be combined using an external program of user's choice to create
# a movie from a sequence of JPEG images
#  
# write frames {*} "all.jpg"
# write frames {1.0} "firstFile.jpg"
# write frames {1.0} 200 200 "smallFile.jpg"
#
# new feature: load of molecular dynamics topology file and coordinates
#
#   load files "u.mdtop" FILTER "![WAT],![URE]" COORD {0 -1 1} "mdcrd::u.mdcrd" ;
#
#  -- mdtop file must have %FLAG and %FORMAT comments
#  -- FILTER is optional
#  -- COORD {first,last,step} is optional for each coordinate file loaded
#      first,last,step same as in VMD -- 0 for very first trajectory, last -1 meaning "all" 
#      default {0 0 1} so that just one trajectory is loaded from each file 
#  -- explicit format "mdcrd::" is required, because these files have no identifying characteristics
#  -- as many COORD keywords/coordinate files as desired can be included:
#
#   load files "u.mdtop" FILTER "![WAT],![URE]" COORD {0 -1 1} "mdcrd::u1.mdcrd"  "mdcrd::u2.mdcrd" COORD {0 300 10} "mdcrd::u3.mdcrd" ;
#
# new feature: x = quaternion({center_or_point}, {atomX_or_point}, {atomXY_or_point})
#
#  -- quaternion is created based on three atoms or coordinates 
#  -- such that X = atomX - center, Z = cross(atomXY - center, atomX), Y = cross(Z, X)
#
# new feature: x = quaternion(q, "id", {center})
#
#  -- creates DRAW sequence to draw quaternion q as three arrows red(x), green(y), blue(z) 

# -----------------------------------------------------------------------------

#version=11.6.RC19_dev

# bug fix: GIF encoder color / class not found issues
# bug fix: very thin cylinder does not appear at all viewing angles
# bug fix: load "/xxx" with unsigned remote applet loads local file instead of remote root directory
#  -- this change represents a difference in behavior between the unsigned applet and other code (signed applet or application) 
# bug fix: sulfur/sulphur always spelt as in IUPAC Red Book
# bug fix: display of aromaticSingle bond for NEW bond results in dotted bond.
# translation: English language variants no longer ignored

# -----------------------------------------------------------------------------

#version=11.6.RC18

# bug fix: fileName not reset after ZAP
# bug fix: set echo none; color echo green  null pointer exception
# bug fix: .x not recognized
# bug fix: set xxxCallback "" does not clear callback ("none" was required unnecessarily)
# bug fix: cartoons ending in helix or strand draw single dot for final amino acid
# -----------------------------------------------------------------------------

# version=11.6.RC17

# bug fix: draw scale not saved in state for arc or xy arrow
# bug fix: drag/drop not enabled on consoles
# bug fix: Jmol state command "calculate surfaceDistance WITHIN ({...})" not passing compiler
# bug fix: Swing antialiasDisplay broken due to setTransparentBackground debugging
# bug fix: trajectories not enabled
# code: if (true...)/ if (false...) code cleanup
# bug fix: select model=_modelNumber didn't differentiate between 2.10 and 2.1
# bug fix: select model=0.0 caused infinite loop

# -----------------------------------------------------------------------------

#version=11.6.RC16

# bug fix: mol2 PDB format better handling of chains and derived element types
# bug fix: save image button/menu interface broken in 11.6.RC15

# -----------------------------------------------------------------------------

#version=11.6.RC15

# new feature: MOL2 reader is PDB-enabled.
# new feature: data() and DATA expanded to allow fixed-column entry 
# bug fix: data property_partialcharge does not update atomic partialCharge data itself for MEP
#  but instead just creates a data type "property_partialcharge"
# bug fix: CML reader failst to load primitive lattice parameters when no symmetry
# note: CML reader only reads the first structure of a file
# bug fix: CML reader not assigning atom labels
# bug fix: CML files not properly loading symmetry
# bug fix: O- formal charge radius MUCH too large; N+ MUCH too small. -- REMOVED  
# code: thread control for Java Swing in applet context
#     thread creating Swing objects MUST be event thread 
#     -- using SwingUtilities.invokeAndWait() from the commandWatcher thread
# new feature: load menu items for signed applet
# new feature: save menu items for signed applet
# bug fix: applet -- setting a jmolScript callback prevents menu updates
# new feature: minimize menu item
# new feature: signed applet allows "load ?" and includes previewer
# bug fix: H-M spacegroup designations specifying nonstandard Hall symbols by default
# new feature: set currentLocalPath -- for dialogs only
 
# new feature: signed applet/application   load ?xxx  uses load dialog 
# webexport help updated to reflect ability to handle files opened with "load append"

# -----------------------------------------------------------------------------

#version=11.6.RC14

# new feature: signed applet may write file, images, scripts, variables to disk. User dialog is required.

# new feature: write GIF
# code: allows for getJpeg(quality,asString) option to return byte array instead of base64.
# bug fix: xxx.split()[3].replace  does not do selection first 
# bug fix: ramachandran and quaternion derivative not indicating structure due to dropping last atom

# -----------------------------------------------------------------------------

#version=11.6.RC13

# bug fix: set historyLevel  recording full scripts, not individual commands 
# bug fix: y-offset for echo text and images
# bug fix/new feature: HIDE/DiSPLAY/DELETE/COLOR $*xxx* extended to ECHO
# bug fix: findbugs input stream closure
# translation: add GT.escapeHTML and stricter checking for special characters in file names
#				used by web export.

# -----------------------------------------------------------------------------

#version=11.6.RC12

# bug fix: getProperty("atominfo",{atom expression}) not working for "atominfo[0].xxx
# bug fix: getProperty("modelinfo",{atom expression}) not working
# new feature: set atomPicking TRUE/FALSE
# new feature: set bondPicking TRUE/FALSE
# bug fix: draw pointgroup when principalPlane == null
# bug fix: findbugs corrections in minimize.forcefield, modelset.AtomCollection, shapespecial.DrawRenderer 
# new feature: applet parameter jmolSetCallback("maximumSize", nnn) -- sets maximum size of applet when resizing to this value 
# cml reader fix for not applying symmetry to first model
# translation: added GT._ calls for HTML templates and JS in WebExport

# -----------------------------------------------------------------------------

#version=11.6.RC11

# bug fix:   echo IMAGE and antialiasdisplay 
# bug fix: super/subscripts with antialiasdisplay
# translation: menu items in console
# bug fix: web export / language
# bug fix: draw pointgroup C2 2 not distinguished from draw pointgroup C2 1
# bug fix: d2 point groups cause null pointer exception due to missing principal axis
# bug fix: {*}.x = ....  broken

# -----------------------------------------------------------------------------

#version=11.6.RC10

# new feature: (just not documented) rotate {atom1} {atom2} 10
# new feature: moveto quaternion {resno=3} {3.ca}

# bug fix -- set picking spin, also compatibility of set picking spin and doing measurements
# bug fix -- draw pointgroup, write pointgroup draw

# -----------------------------------------------------------------------------

#version=11.6.RC9

# code: more efficient return of point group information and calculation
# new feature: getProperty PointGroupInfo
# bug fix: show pointgroup draw null pointer exception
# bug fix: print $planeA - capital letters in a draw name disallow finding it.

# -----------------------------------------------------------------------------

#version=11.6.RC8

# bug fix: ramachandran / ramachandran r navigation problem
# code: Minor refactoring and pruning. 
#    --- Core applet now 715K (JmolApplet0.jar + _Core, _Jars, _Main, _Popup, and _Viewer)
# code: Pre-Jmol.js button controls removed, saving about 10K
# new feature: script APPLET appletName "some script"
#   --allows direct inter-applet communication independent of set SYNC
#   --appletName can be * (all applets), > (other applets), . (this applet),
#     or an applet name such as "jmolApplet0" or just the extension "0" 
#     or a quoted set of applet names separated by commas.
#   --for *, the current applet always reports LAST
# new feature: x = script("some script", "appletName")
#   --same as above
#   --in addition, allows retrieval of information from another applet
#     for example:
#
#		x = script("print getProperty(\"modelInfo.modelCount\")","B")
#
#     gets the number of models loaded in applet jmolAppletB. 
# 
#		x = script("show orientation moveto","jmolApplet2")
#
#     gets the current orientation of applet jmolApplet2.
# 
#		xList = script("print getProperty(\"appletInfo.fullName\").split(\"__\")[1] + \":\" + script(\"show rotation\").trim()","*")
#
#     gets a new-line-separated list of rotational quaternions for all applets with applet names.
# 
# 
# new feature: print getProperty("modelInfo.models[3].file") syntax

# -----------------------------------------------------------------------------

#version=11.6.RC7

# new feature: draw ramachandran includes planes connecting atoms.
# bug fix: refresh for hover
# bug fix: state definition for lcaoCartoons, isosurface with IDs containing spaces
# new feature: $*xx*  double wild cards
# new feature: generally for objects (draw,pmesh,isosurface,etc.) use DISPLAY/HIDE rather than ON/OFF
#   so as to be consistent with other objects. (OFF was not deleting these)
# new feature: support for application transparent background -- "-b" command switch (testing only)
#   and setAppletContext "-b" switch as well.
# bug fix: structure helix|sheet|turn|none {atomExpression} was undocumented and had state issues 
# new feature: HIDE $xxx
# new feature: DISPLAY $xxx
# new feature: DELETE $xxx
# bug fix: adaptation for malformed PDB files (HEADER with nothing following it)
# bug fix: more language localization in webexport
# new feature: applet message regarding help and command entry

# -----------------------------------------------------------------------------

#version=11.6.RC6

# code: better navigation refreshing
# bug fix: oops, 11.6.RC5 is totally broken due to missing refreshes
# bug fix: language localization in webexport 

# -----------------------------------------------------------------------------

#version=11.6.RC5

# bug fix: set fontscaling with multiple echo texts/images at the same xyz location only scaling the first item
# bug fix: set echo xxxx 30 40
# bug fix: WAY more streamlined refreshing
# bug fix: createImage(), not getImage() in order to allow dynamic file change
# bug fix: halo size for antialiased display
# Addition of translation tags to webexport
# bug fix: write IMAGE broken for 11.6.RC2+
# bug fix: unnecessary refreshes removed from moveto/zoom with time 0
# new feature: background IMAGE "filename"
# code: viewer refactoring to simplify/remove private methods and synchronization

# -----------------------------------------------------------------------------

#version=11.6.RC4

# bug fix: select @m  throws an error
# code: refactoring shapespecial into shapespecial and shapesurface
# code: refactoring modelset.CellInfo into symmetry.SymmetryInfo
# code: realignment of applet JAR files
#  -- new _ShapeSurface.jar, which now includes org.jmol.jvxl/**
#  -- removal of _Jvxl.jar
#  -- refactoring reduces preliminary applet Jar file loading to 720K (if English)
#  -- should provide faster loading of simple models and more efficient loading of more complex ones
#  -- basic minimum load involves just JmolApplet0.jar + _Core, _Jars, _Main, _Popup, and _Viewer

# -----------------------------------------------------------------------------

#version=11.6.RC3

# bug fix: minor error in pointgroup; dimension tied to radius
# new feature: set dotDensity [-3 to 3]
# new feature: draw pointGroup [type] [index] SCALE [x]
#  where [type] is one of Cs, Ci, Cn, or Sn, where n is an integer or the character "n" 

# -----------------------------------------------------------------------------

#version=11.6.RC2

# bug fix: image background transparency

# new feature: set pointGroupDistanceTolerance (default 0.2 angstroms)
# new feature: set pointGroupLinearTolerance (default 8 degrees)

# bug fix: Cs pointgroup not found
# bug fix: set echo DEPTH/IMAGE
# bug fix: workaround for Java 1.6.0_10 diallowing popup menu
# new feature: in Java 1.6.0_10, right-click activates the console, and the 
#   console has a menubar menu item "Jmol" that is the pop-up menu.
# new feature: applet console has "help" menu item, which includes several hundred items.

# -----------------------------------------------------------------------------

#version=11.6.RC1

# bug fix: D3h point group
# bug fix: LOAD "..." nn   loading of model numbers for PDB files should read real model number, not sequentially.

# new feature: write/show pointgroup gives counts and tab-separated listing;
# new feature: write pointgroup draw delivers draw commands 
# new feature: better draw pointgroup 
# new feature: no saving of point group -- just recalculated each time
# bug fix: measures were messed up 
# new feature: echo myecho IMAGE "filename"
#  -- reads a JPG, GIF, or PNG image and displays it the
#     same as text is displayed.
# new feature: echo myecho DEPTH xx
#  -- sets the depth in percent (0% far back, 100% front) for the placement of the image
#  -- note that images can be placed in 3D, just as for text.
#  -- setting "background echo xxx" then specifies the color 
#     that is to be designated as the background color (the color that should be omitted).
#  -- using "background echo none" specifies that the first pixel 
#     of the image specifies the color that should be omitted.
 
# bug fix: 11.5.52 may have lost "true" as a keyword
# new feature: pointgroups with vibration vectors
# bug fix: more testing with pointgroups
# new feature: spacefill/dots/geosurface/cartoon/trace/etc. ONLY
#   -- show only this rendering type
#   -- same as restrict not selected; spacefill ON
# bug fix: application rubberband selecting inappropriately selects atoms not visible 
# new feature: wildcard at beginning for draw/pmesh/isosurface/etc. *xxx on/off/delete allowed
# bug fix: in draw pointGroup -- height of cylinder was too small
# bug fix: longstanding exception: isosurface fullylit --> isosurface backlit --> isosurface frontlit  

# -----------------------------------------------------------------------------

#version=11.5.52

# new feature: set selectAllModels (generally TRUE, but can be set FALSE)
# new feature: calculate pointGroup
# new feature: draw pointGroup
# new feature: write pointGroup
#  including x = script("write pointGroup")
# new feature: webexport now compresses data files over 512 MB
# new feature: calculate pointGroup  -- preliminary only -- untested

# -----------------------------------------------------------------------------

#version=11.5.51

# bug fix: 11.5.49 and 11.5.50 broken for ".max"

# new feature: PRELIMINARY aniso_beta for cif files -- has not been checked for correct Ortep type -- set to 0 for now
# new feature: application select button reinstated
# new feature: application pick button reinstated
# new feature: application measure button tied to picking style
# new feature: application [>|] button
# bug fix: ramachandran/quaternion "reset" not decoupled from model decouple
# code: model orientation saved with model.
# bug fix: set axesOrientationRasmol finally correctly implemented
# new feature: axes labels change subtly for set axesMolecular and setAxesOrientationRasmol
# bug fix: JmolViewer interface deprecated "rotateTo..." methods changed to "rotate..."
#  because that's what they really do.
# bug fix: set defaults jmol/rasmol must do reset().

# new feature: webexport now cleans up scratch files on deletion of instances and program exit.

# -----------------------------------------------------------------------------

#version=11.5.50

# bug fix: vibration thread not closing down for applet destroy when applet is off-screen
# bug fix: was reading server path for local path from history in Webexport
# bug fix: $ptx[2] notation broken in 11.5.49
# code: various cleaning/simplifying
# code: way cleaner quaternion derivative calculation code

# -----------------------------------------------------------------------------

#version=11.5.49

# bug fix: strange "scripted: ?" message with measurements removed
# bug fix: extra values in measure reporting, and wrong format
# bug fix: 11.5.48 is broken for scripts with array definitions such as
#   p = array(); p[pt] = ....
# code: simplification/unification of statement length checking AFTER allowing for variable substitution
# code: removal of unnecessary/inflexible compilation step involving color parameters
# code: major refactoring/simplification of Token
# code: refactoring/simplification of Compiler
# code: compiler flags for allowed number of parameters removed (not consistent with Jmol math)
#       (defaultON and noArgs remain)
# new feature: dipole/draw/ellipsoid/isosurface/pmesh/mo/lcaocartoon ID keyword optional
#   but without ID, one is restricted to words that are simple text and not Jmol entities. 
#   with ID, the next quantity can be anything.
# new feature: $"xxx" quotations or $@{...} allows variable definition of object id reference  
# new feature: draw {point} PLANE [plane def, including xy, yz, x, etc.]

# -----------------------------------------------------------------------------

#version=11.5.48

# new feature: mol file bond type 8 as partial
# code: compiler error reporting improved
# bug fix: PDB site definition does not ignore empty site definitions
# bug fix: DEFINE can cause compiling error, e.g. "[2MO]" in 1tmo
# bug fix: quaternion derivative DRAW arrows placed on residue i+1 instead of residue i
# bug fix: connect aromatic auto; select connected([bond type],...)
# bug fix: queue thread termination when applets are off screen
# bug fix	: sheetsmoothing not consistent among structures in multi-chain systems
# bug fix: messages not sent to messageCallback
# code: simpler matrix-->quaternion code
# bug fix: 11.5.47 shows oddly sized arrow for very first rendering
# bug fix: quaternion frame "n" after rotationSelected does not reset NH hydrogen positions 
# new feature:  // at beginning of a line marks comments

# -----------------------------------------------------------------------------

#version=11.5.47

# bug fix: Removed stray semicolons from header script comments in webexport templates.  They
#   were causing WYSIWG web editors to corrupt the code scripts.
# bug fix: 11.5.46 broke standard "spin x 30" (b)
# new feature: draw ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset}
# new feature: draw ARROW ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset}
#
#  draws a circular arc or arrow around an axis defined by {pt1} and {pt2}
#   using {ptref} as a starting point (looking down the axis, angles
#   are measured in a clockwise manner, starting with the projected position
#   of {ptref} in a plane perpendicular to the axis. This is similar (but opposite)
#   to the way dihedral angles are indicated. 
#   theta0 is the the offset angle from 0
#   nDegrees is the number of degrees of arc to draw
#   fractionalOffset is the fraction of the distance from {pt1} to {pt2} for the 
#   plane containing the arc. 
#
# new feature: draw RAMACHANDRAN  
#   draws phi and psi angles in the form of draw ARROW ARC 
# new feature: write RAMACHANDRAN draw  

# -----------------------------------------------------------------------------

#version=11.5.46

# bug fix:  remove the skipping of semicolons if parentheses or braces have been closed. (11.5.43 bug)
# bug fix:  set picking on   broken in 11.5.39
#
# new feature: measure {atomExpression or point} {atomExpression or point} ...
#  measurements to POINTS, including using the mouse (set drawPicking on)
#  will persist and can be saved in the state (11.5.38 did not allow this)
# for example:
#  measure {0 0 0} {atomno=3} {atomno=5}
#  measure  $point2 {atomno=3} $line[1]
#
# new feature: rotate branch {atom1} {atom2} ...
# new feature: select within(branch, {atom1}, {atom2})
# new feature: Jmol math within("branch", {atom1}, {atom2})
# code: refactoring of getAtomsWithin() and getAtomBits() 
#
# bug fix: array size limited
# new feature: quaternion({atom expression}) -- returns calculated 
#              frame based on quaternionFrame setting.
# bug fix: drawhover not in state
# bug fix: ramachandran for systems including nucleic acids when quaternionFrame = 'n'
# new feature: isosurface functionXY can be used for mapping.
# new feature: spacegroup/symmetry for CML files with <module> tags
#
# bug fix: 11.5.39 could break isosurface/pmesh save/write state in certain cases.
# bug fix: Popin.png in WebExport replaced, was too large, causing dialog box to default to too big on small screens.
# bug fix: zap 2.1 for quaternion frame causes exception
# bug fix: quaternion r derivative2 nonfunctional in 11.5.45
# bug fix: isosurface functionXY not working
# bug fix for 11.5.45: application not returning echos and status messages to console
 
# -----------------------------------------------------------------------------

#version=11.5.45

# new feature: show rotation    aka  show orientation rotation
# new feature: show translation aka  show orientation translation 

# code: mouse manager refactoring

# bug fix: picking off structure did not clear picking for set picking spin
# bug fix: jmolScriptWait() improperly reporting to applet console
# bug fix: too many messages to applet console 
#
#  Note: planes, axisAngles, and quaternions are all saved as Token.point4f
#  axisAngle() and quaternion() are both processed to quaternion format
#  {x y z w} where w = cos(theta/2) and {x y z} = sin(theta/2)*unitNormal
#  quaternions are always fixed so that cos(theta/2) > 0 -- that is, so that
#  the reported theta (q %-2) is in the range [0, 180]
#  This is important. One can also get a directed theta based on a 
#  specified axis using q % {x y z w}. w is ignored; x y z is the 
#  axis to dot with the quaternion normal in order to switch the
#  sign of theta if that value is negative.
#
# new feature: show atom(s)
# new feature: show group(s)
# new feature: show selected
# new feature: draw {point} {plane}
# new feature: draw vector {point} {plane}
# new feature: draw arrow {point} {plane}
# new feature: q = axisAngle({x y z}, theta)
# new feature: q = axisAngle(x, y, z, theta)
# new feature: q = axisAngle("{x y x theta}")
# new feature: q = quaternion("{x y z w}")
# new feature: rotate @{quaternion(....)}
# new feature: rotate @{axisAngle(....)}
# new feature: rotate quaternion {x y z w}
# new feature: rotate axisAngle {x y z theta}

# new feature: {point1} == {point2} if distance < 0.000001
# new feature: {quaternion} == {quaternion2} if distance < 0.000001
# new feature: float1 == float2 if |float1 - float2| < 0.000001

# code: refactoring and simplification of rotate/spin 
# code: threads named

# bug fix: hover will find atom in hidden frame. 
# bug fix: ellipsoid translucency not saved in state.
# bug fix: local assignment var x = array() followed by x[n] = ... does not work
# bug fix: f(x[i],x[j]) selects only x[j], not both x[i] and x[j]
# bug fix: quaternion frame "n" recognizes file-based H atoms on N for frame definition

# -----------------------------------------------------------------------------

#version=11.5.44

# bug fix: Java exception with write(quaternion) instead of write("quaternion")
# bug fix: set picking spin did not enable draw spin/picking
# bug fix: _applet variable not initializing properly
# bug fix: math calculation .xyz, .color averages broken in 11.5.42
# bug fix: select @x broken in 11.5.43
# bug fix: integer addition not remaining integer

# -----------------------------------------------------------------------------

#version=11.5.43

# bug fix -- if last helix is last atom, SHOW STRUCTURE fails to identify it.
#
# new feature/feature change:
#
# selectX is no longer necessary. Simply use
#
#   select {atomExpression} (property expression)
#
# with no "x." An implied variable "_x" can be used explicitly:
#
#   select {*} (straightness < 0.995) # does not round
#   select {*.ca} (atomY < atomX)
#   select {*.ca} (phi < select(y; {*.ca}; y.resno = _x.resno + 1).phi))
#
# new feature: quaterion % point4f --- "thetaDirected" -- 
#   point4f is {x, y, z, w} (w ignored), where {x y z} is a
#   preferred direction. 
#   Returns a point4f angle-Axis equivalent with x, y, z the normal for the quaternion
#   rotation and w = theta for the rotation, where the normal and theta are chosen
#   to be directed with a positive dot product between the input {x y z}
#   vector and the output {x y z}.
#
# thus, because the negative angle switches the normal:  
#
#   print quaternion({1 0 0}, -20) % 1 ==> {-1 0 0}; %1 ==> 20
#
# but % {1 0 0 0} forces the angle associated with {1 0 0} to be reported 
#
#   print quaternion({1 0 0}, -20) % {1 0 0 0} ==> {1 0 0 20}
#
# bug fix: POV-RAY output of quadrilaterals.

# new feature: Ramachandran "r" --- includes third (Z) axis quaternion r difference2 X component equivalent

# bug fix: quaternion definition with dot-product check not effective -- removed
# bug fix: quaternion construction from matrix error
#
# new feature: _applet boolean
#
# new feature: extended quaternion math
#
#   q = quaternion({x y z}, angleDegrees)
#   q = quaternion(q0, q1, q2,q3)
#   q = {qx, qy, qz, qw}
#
# returning component values: 
#
#   q.x, q.y, q.z, q.w
#
# note that the Point4f equivalent stores w LAST, even though it is "q0" 
# because the Java Quat4f() and Point4f() both do that as well. We're just
# being consistent with other Java use.
#
# Modulus operator for extended information retrieval:
#
#   (q%0) -- q0 (w)
#   (q%1) -- q1 (x)
#   (q%2) -- q2 (y)
#   (q%3) -- q3 (z)
#   (q%-1) -- the vector {q1, q2, q3}
#   (q%-2) -- theta
#   (q%-3) -- equivalent rotational frame X-axis 
#   (q%-4) -- equivalent rotational frame Y-axis 
#   (q%-5) -- equivalent rotational frame Z-axis 
#   (q%{x y z})  -- rotational transform of a point or vector based on a quaternion
#
# thus, for example, (q%{1 0 0}) is the same as (q%-3)
#
#   (!q) -- quaternion inverse
#
# 
# Quaternion right division (difference "dq"):
#
#   q2 / q1 = q2 * (!q1)
#
# Quaternion left division (relative difference n):
#
#   q2 \ q1 = (!q1) * q2
#
# Examples:
#
#   q = quaternion({1 1 1},120)
#   print "" + (q%{1 0 0}) + " " + (q%{0 1 0}) + " " + (q%{0 0 1})    
#
#   {0 1.0 0} {0 0 1.0} {1.0 0 0}
#
# new feature: Numerical left division (integer divide)
#
#   3.6 \ 2 = 1
#   3.6 \ 1.3 = 2
#
# new feature: sqrt(x)
#
# bug fix: load trajectory for cases with different atom counts.
#
# experimental: "straightness" defined as 1 - 2 * acos(normal(dq[i]%-1) dot normal(dq[i+1])) / PI
# giving a measure proportional to the difference in local helical axis angle 
# and ranging from -1 (opposite direction) to 1 (same direction) for proteins 
# -- a work in progress. See
#
#   load =1d66
#   calculate straightness;color straightness

# -----------------------------------------------------------------------------

#version=11.5.42

# code: modified Jmol encoded PDB data output

# bug fix: color of NaN float values changed from "center of color scheme" to GRAY
# bug fix: connect "_1" was inadvertently dropped in 11.5.26.
# bug fix: state script fails to save data for atoms created using the quaternion command
# bug fix: axes/boundbox/unitcell dotted not working since 11.5.6
# bug fix: spin thread not stopped for applet destroy()
# bug fix: quaternion derivative for i/i+1 assigned to i+1 instead of i; now assigned to i
# bug fix: quaternion calculation using published algorithms was giving inverted quaternions
#
# new feature: set PICKLABEL "xxx"  -- allows customized pick reports
#
#  for example: set pickLabel "%n x = %x, y = %y, z = %z"
#
# new feature: "quaternion derivative" --> "quaternion difference", which is more
# appropriate, we think, with "absolute" and "relative" qualifiers:
# 
#   quaternion absolute difference # in the molecular frame
#   quaternion relative difference # in the (local) frame of first quaternion:
#
#   dq_absolute = q2 * q1_inverse
#   dq_relative = q1_inverse * q2
#
# absolute involves un-doing q1's rotation (making it the reference frame), then applying q2.
# relative involves applying q2 (maintaining the original reference frame), then undoing q1.
# 
# new feature: quaternion [w|x|y|z|a|r] [difference][2] [draw]
# new feature: draw quaternion [w|x|y|z|a|r] [difference][2]
# new feature: write quaternion [w|x|y|z|a|r] [difference][2] [draw]
#   and with that: write("quaternion" [,"w"|"x"|"y"|"z"|"a"|"r"][,"difference"|"difference2"][,"draw"])
#
# new feature: set quaternionFrame "N" -- for solid state NMR PISEMA 15N chemical shift frame
#  using alpha = 0 and beta = 17 degrees.
#
# new feature: select whatever; quaternion draw
#  draws x,y,z and n vectors for a quaternion center
# 
# new feature: straightness, defined as:
#
#   straightness =  2*|n(dq1).dot(n(dq2))| - 1
#
# where q1 and q2 are quaternions defined generally as:
#
#     q = frame{ vA, (vC x vA), vC }
#
# using quaternionFrame "p", which I define as 
#  
# protein:
#
#     vA = C--CA
#     vB = C--N[i+1]
#
# purine:
#
#     vA = N9--C4
#     vB = N9--C8
#
# pyrimidine:
#
#     vA = N1--C2
#     vB = N1--C6
#
# Differences dq1 and dq2 are absolute quaternion differences 
# on the two sides of a residue:
#
#        dq1 === q[i] * q[i-1]_inverse  
#        dq2 === q[i+1] * q[i]_inverse
#
# and n(dq) = the normal vector associated with this quaternion.
# Range is from -1 to 1
#
# applications (note that CALCULATE must be invoked first):
#
#    calculate straightness # must be invoked first; 
#    color straightness; 
#    select straightness < 0.70;   # rounds to nearest hundredth
#    selectX {*} x.straightness < 0.995 # does not round
# 
# new feature: "%T" label format for straightness

# -----------------------------------------------------------------------------

#version=11.5.41

# new feature: xyz reader reads partial charge in 5th field
# bug fix: carbohydrate popup menu script incorrect
# new feature: "load" of Jmol state scripts works same as "script" command
#   (file recognized as SPT type and read as a script instead)
# bug fix: Jmol Embedded scripts containing script comments /* */
# new feature: getproperty menu current
# bug fix: 11.5.40 cannot read most state scripts.

# -----------------------------------------------------------------------------

#version=11.5.40

# (with corrected 40_dev draw scale)
# new feature: new command:
#
# selectX {atomExpression} booleanEvaluation
#
#   same as select() function, but simpler to implement   
#
# new feature: full math on individual atom properties using 
#  a new function:
#
#   select(x;{atomexpression};booleanEvaluation)
#
# for example:
#
#  x = select(x;{*};x.distance({atomno=3}) / 3 > x.distance({atomno=2}))
#  x = select(x;{*.ca};x.phi < select(y; {*.ca}; y.resno = x.resno + 1).phi)
#
# bug fix: H1 and H3 in DNA are NOT backbone 
# new feature: quaternion derivative2 (2nd derivative) and quaternion e derivative [experimental]
# new feature: draw Vector [x y] or [x y %] {x' y' z'}
# new feature: draw [x y] or [x y %] can be incorporated into lines, curves, arrows
# bug fix: set picking center should not zoom -- just too annoying 
# new feature: set echo myecho [x y] and set echo myecho [x y %]
# new feature: axes position [x y] and axes position [x y %] 
#  sets the axes to the x y screen position or percent indicated. 
# bug fix: echos with active script and a model designation 
#   and multiple models select even if not displayed because it is not their model
#   that is displayed. 
# bug fix: missing echocallback, scriptcallback, measurecallback "set"able variables
# bug fix: "set picking identify" should be equivalent to "set picking ident"
# bug fix: popup menu had stereo reversed
#
# new feature: signed applet shows frank "Jmol-S" which is NOT removable.
# possibly to come: signed applet will send confirmation first time it reads a local file?
# bug fix: reading .mmol (biological unit) files such as
#  http://pqs.ebi.ac.uk/pqs-doc/macmol/1j7n_1.mmol
# new feature: frank appears RED in signed applet, and popup about menu identifies the applet as signed.
# code: better handling of twin script manager threads
# new feature: /*SPLIT*/ in a command string allows it to be processed by
#   the two independent processors. (just to isolate javascript from load commands
#   for the signed applet

# -----------------------------------------------------------------------------

#version=11.5.39

# new feature: --threaded  option for command processor uses
#  a watcher thread to monitor a Vector, allowing the signed applet to open any file
#  the signed applet uses this automatically unless there is a 
#    jmolSetCallback("useCommandThread", "false")
#  which overrides the default behavior and disallows reading of files from
#  JavaScript.
#
#  NOTE a limitation: scripts intended for the signed applet that
#  contain both load/script commands or the load() function
#  CANNOT be combined with the JAVASCRIPT command. This is because
#  in that environment, the JAVASCRIPT command must run on the browser's
#  JavaScript thread, and the load command -- if crossing server boundaries --
#  must NOT run on that thread. I have configured the ScriptManager to
#  detect the presence of the word "javascript" followed by a space (exactly that case)
#  and if found, use the JavaScript thread instead of the applet thread.
#    
#  Because it might be useful to combine LOAD and JAVASCRIPT (for the equivalent of a
#  "file loaded" callback (but see set LoadStructCallback), if a script contains
#  the phrase /*SPLIT*/ in upper case, exactly like that, it will be split and then run
#  correctly as two independent scripts.
#  
# new feature: _signedApplet boolean is available:
#
#  print _signedApplet
#  if(_signedApplet); 
#     javascript alert("you are using the signed applet");
#  end if;
#
# bug fix: JmolSimpleViewer caused null pointer exception -- needed setAppletContext()
# bug fix: model-based drawing in multiple-model mode using an
#  array of points to load causes null pointer exception:
#    load cyclohexane_movie.xyz;pts = {C5}.split();print pts;draw @{pts.xyz.sub({1 0 0})} "X"
# bug fix: quaternion derivative multiplication order
# bug fix: 3D echo text not centering properly with set ECHO myEcho CENTER
# bug fix: select _Xx; select unknown
# bug fix: better reporting of script commands and comments
# new feature: reading COMPND and HEADER records of PDB file
# new features for Protein Explorer:
# new feature: set messageStyleChime  
#   -- No atoms selected!
#   -- <n> atoms selected!
#   -- atom picking:
#        Atom: xxx Group: xxx Chain: xxx Model: xxx Coordinates: x y z
#   -- script <exiting>
#   -- Chime script completed.
# new features: 
#  show info
#  show residue(s)
#  show chain(s)
#  show sequence
#  show orientation moveto  # just the moveTo; no comments
#  set pdbGetHeader TRUE  # to get the header when loading (for Protein Explorer)
# new feature: jmolSetCallback("evalCallback", "someFunction")
#  -- overrides _jmol.noEval
#  -- canNOT be set using "set evalCallback"
#  -- was necessary for Protein Explorer javascript callbacks

# -----------------------------------------------------------------------------

#version=11.5.38

# bug fix: lcaoCartoon naming for multiple centers
# bug fix: pm rounding to integer value
# bug fix: scaling of draw object for multimodel environment can cause null pointer exception
# bug fix: scaling of VECTOR was from center, not origin
# bug fix: select n-m:c  chain selection inappropriately case sensitive
# bug fix: draw ARROW {atom center} {xyz}  draws arrow the wrong way
# bug fix: draw CIRCLE for multiple models
# bug fix: application -- "make crystal..." menu item does nothing -- removed
# bug fix: zap of quaternion also zaps model inappropriately
# bug fix: zap to one model assigns -1 to currentModelIndex instead of 0
# new feature: draw CIRCLE [FILL | MESH NOFILL] more intuitive open/filling syntax
# new feature: draw VECTOR {atom center} {dx dy dz}
# new feature: draw with mixed types processes them in order
#   (11.4 does {x,y,z}, then $xxx, then {atomExpression}, then @{{atoms}.split()})
# new feature: draw .... ">xxx" first character of title ">" forces title to 
#   last point, not first
# new feature: set quaternionFrame "c" "p" "q" 
#   - "c" -- CA-C and CA-N, as per Andy Hanson
#   - "q" -- peptide plane CA-C and N'-CA' as per J.R.Quine
#   - "p" -- peptide plane CA-C and C-N'
# new feature: random(a), random(a,b)  where a is lower bound and b is upper bound
# new feature: cross(a,b)
# new feature: sin(x), cos(x)
# new feature: set pdbSequential (default FALSE) for custom PDB files
#   -- bypasses inter-group bonding check when creating polymers 
# new feature: set drawPicking now enables measuring among atoms and DRAW points
#   -- not saved -- just transient measurements (see 11.5.46)
# new feature: CIF reading of B factors for thermal ellipsoids
# new feature: [draw|pmesh|isosurface] xxx* [on|off|delete]
#   -- turns on, turns off, or deletes all objects of the type starting with "xxx"


# code: refactoring of biopolyer resolver

# -----------------------------------------------------------------------------

#version=11.5.37

# code: faster ellipsoid rendering with precalc radius factors
# bug fix: spacefill ADPMIN/ADPMAX using probability ellipsoids
#          and ellipsoid size setting (Note -- ellipsoid command
#          must be run once prior to setting spacefill 
# bug fix: reading output from "set showscript 1"
# bug fix: ellipsoids for Uiso atoms uses simple r = sqrt(value) 
# bug fix: ellipsoids for applied symmetry causes odd shapes (s8.cif)
# bug fix: security for no mayscript may cause problem with measure callback
# bug fix: rocket positions after translateselected

# -----------------------------------------------------------------------------

#version=11.5.36

# bug fix: frame titles not positioning correctly for antialiased display
# bug fix: quaternions created with extraneous atom lines
# bug fix: select symop not behaving intuitively
# code: meshrenderer debug line not removed

# new feature: (popup menu) Biomolecules submenu added within title menu

# -----------------------------------------------------------------------------

#version=11.5.35

# bug fix: proper thermal ellipsoid probability measures
# code: better garbage collection in relation to JmolAdapter class
# bug fix: load FILTER not saved in state
# bug fix: application -- undo/redo buttons not disabling
# new feature: ZAP clears undo stack

# -----------------------------------------------------------------------------

#version=11.5.34

# bug fix: biomolecule really works this time!

# -----------------------------------------------------------------------------

#version=11.5.33

# bug fix: modelLoader was assigning too much array space for chains

# new feature: more load FILTER options:
#
#     #i   a specific BIOMT transformation
#    !#i   not a specific BIOMT transformation
#  [XXX]   a specific group ID
# ![XXX]   not a specific group ID (e.g. ![HOH])
#   *.XX   an atom name, such as .CA
#   !.XX   not a specific atom name
#    *:X   a chain ID
#    !:X   not a specific chain ID
#
#  Between types, or involving NOT, options are AND'd together
#  Within a type not involving NOT, options are OR'd together
#  Within a type, a single ! implies all are NOT
#  Within a type, a single * implies all are ANY

# new feature: load [file info] FILTER "BIOMOLECULE n;NOSYMMETRY"
# FILTER "BIOMOLECULE 1" by default now reads the symmetry;
#    use load FILTER "BIOMOLECULE 1;NOSYMMETRY" to not read symmetry 
#
# bug fix: ellipsoids for navigation mode and perspective depth
# bug fix: PDB biomolecule for many-BIOMT system

# -----------------------------------------------------------------------------

#version=11.5.32

# bug fix: load FILTER "BIOMOLECULE 1;APPLY SYMMETRY" does not read second line of chain list 
# bug fix: added connections do not save properly in state
#
# application only: command undo disabled automatically if saving takes more than one second
# flag is "set undo TRUE/FALSE"
#
# new feature: load [file info] FILTER "[filter string]"
# new feature: load [file info] FILTER "BIOMOLECULE n"
# new feature: load [file info] FILTER "[filter string];BIOMOLECULE n"
#
# The first format loads only those atoms matching a specific filter or set of 
# filter terms -- only a crude filter here, only for PDB and mmCIF files:
#
#   *.XX   an atom name, such as .CA
#   *:X    a chain ID
#
# multiple matches are allowed -- implied AND:
#
#  load "1sva.pdb" FILTER "*.CA"
#
# the match IS CASE SENSITIVE; * IS required
#
# also, "BIOMOLECULE 1" automatically selects for the chains listed for biomolecule 1
# in REMARK 350, and APPLY SYMMETRY applies the symmetry as described in those REMARKS
#
# new feature: isosurface ELLIPSOID id 
#           AXES {ix iy iz} {jx jy jz} {kx ky kz} 
#           CENTER {x y z} 
#           SCALE n.m 
#           COLOR [translucent [x.y] |opaque] [color] 
#           ON|OFF
#
#   id is a REQUIRED field. AXES is required if a new ellipsoid is being defined
#   these axes must be perpendicular
#   all other parameters are optional
#
# bug fix: isosurface ELLIPSOID was disabled
# bug fix: Vector4f in Sphere3D causes applet failure, as it includes
#          an implicit Vector4d call
# bug fix: stronger wireframe for antialiased display and generator (POV-ray)
# default change: ellipsoids ball only, no axes
# code: better ellipsoid fill method
# default change: ellipsoids ball only, no axes

# Hungarian translation

# -----------------------------------------------------------------------------

#version=11.5.31

# bug fix: set picking measure distance not doing callback (from 11.5.23)
# bug fix: picking echos not working with set antialiasdisplay
# default change: ellipsoids are so fast now, can use default "set ellipsoidBall true"
# bug fix: set ellipsoidAxisDiameter [int] sets the diameter in milliAngstroms
# bug fix: sequence range for missing sequence numbers returns 0
#
# code: fast ellipsoid ball+fill - axis idea; no luck with POV-ray fill
# code: ellipsoid equation/axes conversion in Sphere3D; 
# code: POV-Ray ellipsoid generation
# code: better ellipsoid ball rendering using Shade3D.calcIntensity()
# code: 2-fold improvement in rendering ellipsoids by not using getNormix()
# code: 4-fold improvement in rendering ellipsoids by using Miguel's no-mesh idea
# code: 2-fold improvement in rendering ellipsoids by using 40x40x40 shade cache
# code: overall 20-fold improvement in rendering over mesh/normix;
# code: full POV-ray support for ellipsoids
# code: proper partial derivative normalization of ellipsoid shading
# code: refactoring of static quadric surface methods into their own class

# -----------------------------------------------------------------------------

#version=11.5.30

# bug fix: measurement labels for angles do not appear in slab mode (goes WAY back before 10.0) 
# bug fix: U_iso_or_equiv fields not read in CIF 
# bug fix: (application) writeTip GT string not defined.
# bug fix: (forwared compatibility) invalid state setting (due to later version) now ignored.
# bug fix: state for draw arrow in multimodel context delivers wrong coordinates
# 
# new feature: ellipsoid ball rendering tied to "set wireframerotation" option
# new feature: set ellipsoidAxisDiameter x.y
#
# code: better ellipsoid arc rendering using Hermite fill
# code: CifReader cleanup

# -----------------------------------------------------------------------------

#version=11.5.29

# new features for ellipsoid rendering: 
#  
#  set ellipsoidAxes     [true]
#  set ellipsoidArcs     [true]
#  set ellipsoidFill     [false]
#  set ellipsoidDots     [false]
#  set ellipsoidBall     [false]
#  set ellipsoidDotCount [200]
#
#  [dots|stars|spacefill] ADPMIN [percent]
#  [dots|stars|spacefill] ADPMAX [percent]
#  
#    /* general logic:
#     * 
#     * 
#     * 1) octant and DOTS are incompatible; octant preferred over dots
#     * 2) If not BALL, ARCS, or DOTS, the rendering defaults to AXES
#     * 3) If DOTS, then turn off ARCS and FILL
#     * 
#     * note that FILL serves to provide a cut-out for BALL and a 
#     * filling for ARCS
#     */

# -----------------------------------------------------------------------------

#version=11.5.28

# bug fix: state "set measures angstroms" does not include "select *"
# bug fix: labels can change size in returning from antialiasdisplay=true to antialiasdisplay=false
# ELLIPSOID command -- with symmetry and crude footballs, including PDB files
#  note that for now PDB file reading of ANISOU requires using {x y z} in load
#  command, but you can use {1 1 0} to load ANISOU without applying symmetry  
#
# Italian translation

# -----------------------------------------------------------------------------

#version=11.5.27

# bug fix: data CLEAR command nonfunctional
# bug fix: "....".trim("xyz") function not properly trimming ANY x,y,z
# bug fix: draw OFFSET not working properly
# bug fix: PovRAY output of draw objects -- cylinder end caps not considered
# bug fix: draw width 0.05 {...} {...} -- line does not properly render
# bug fix: data "model"...end "model" saves state without first line if first line is empty 
# bug fix: "show data types" putting comma in wrong location
# new feature: DATA "data2d_xxxxx"..... end "data2d_xxxxx"
# new feature: isosurface FunctionXY "data2d_xxxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
#   allows setting isosurface Z values using a block of data (ni rows by nj columns)
# new feature: isosurface FunctionXY "data2d_xyz_xxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
#   allows setting isosurface values using a block of x y z data, all points for which should be
#   on the surface.
# new feature: GamessUK reader
# new feature: reset VARIABLES (replaces "reset ALL")

# -----------------------------------------------------------------------------

#version=11.5.26

# bug fix: draw adds extra circle in 11.5.25
# bug fix: minimization out-of-plane energy calculation error
# bug fix: better initial minimization parameters
# bug fix: (applet) script termination callback should not be sent to message queue
# bug fix: hover appears when a load script leaves an atom very close to (0,0) in the window
# bug fix: draw width -1 or draw mesh nofill with very short cylinders creates odd jumpy effect
# bug fix: draw CIRCLE for multiple model sets
# 
#
# new feature: draw CYLINDER
#
# Korean translation

# -----------------------------------------------------------------------------

#version=11.5.25

# new feature: draw CIRCLE
#
#   A circle is a 2D object that behaves like a halo, always appearing circular
#
#   draw circle {molecule=1} mesh nofill            # around specified atoms
#   draw diameter 2.0 circle {atomno=3} mesh nofill # 2.0 angstroms; scales
#   draw diameter 100 circle {_O}[1] mesh nofill    # 100 pixels (doesn't scale)
#   draw circle {*} fill  # a solid plane in the shape of a circle

# -----------------------------------------------------------------------------

#version=11.5.24

# new feature: minimization CONSTRAINTS {xx} {xx} [{xx} [{xx}]] x.y
# new feature: minimization FIX {atom expression}
#
#  multiple constraints can be present; one per line input
#  minimization CLEAR releases constraints and fixed atoms
#  also, minimize ENERGY saves a detailed listing, which can be
#  displayed using one of the two following commands:
#
# new feature: show minimization
# new feature: x = getProperty("minimizationInfo")
#
#  to dump the info to a file:
#    minimize
#    var x = getProperty("minimizationInfo")
#    write VAR x "myfile.out"
#
# new feature: isosurface MAXSET n # removes larger fragment sets
# new feature: isosurface DOWNSAMPLE n # down-factors the number of points in a CUBE file by a factor of n

# -----------------------------------------------------------------------------

#version=11.5.23

# new feature: minimize ENERGY # no stepping
# new feature: minimize STEPS n
# new feature: minimize CRITERION x.y
# new feature: minimize CLEAR # flushes logged info and saved atom info
#
# new feature: echoCallback 
# new feature: measureCallback
# new feature: minimizationCallback
# new feature: scriptCallback
# new feature: save/restore coordinates
# new feature: getProperty minimizationInfo
#
# code: more efficient minimize calculation setup; better logging
# code: "notify" methods in JmolStatusListener consolidated
# code: Tokens organized
# 

# -----------------------------------------------------------------------------

#version=11.5.22

# bug fix: UFF torsion calculation incorrect
# bug fix: UFF.prm not properly recognizing sp2 N in N-oxides
# bug fix: minimizer for compounds containing isotopes D and T
#
# code: eval/compiler error processing update

# -----------------------------------------------------------------------------

#version=11.5.21

# new feature: minimize command -- mostly untested
#
#   set minimizationSteps 100
#   set minimizationRefresh true 
#   set minimizationCriterion 0.001
#   set loglevel 4  # for a very minimal report
#   set loglevel 5  # for a summary report
#   set loglevel 6  # for a detailed report
#   minimize
#   minimize stop
#   minimize cancel
#   
#
# for example:
#
# load caffeine.xyz
# minimizationSteps = 80
# minimizationRefresh = true
# set loglevel 4
# select connected(2) or connected(3) or oxygen and connected(1)
# connect aromatic modify
# calculate aromatic
# set measurementunits pm
# measure {_O}[1] {_O}[2]
# color measure red
# minimize
#
# new feature: set loglevel 6 allows a "debugHigh" setting 
#
# bug fix: load unitcell {a b c alpha beta gamma} not working (since 11.5.8)

# -----------------------------------------------------------------------------

#version=11.5.20

# bug fix: zap file > 2  multiple models do not properly delete

# -----------------------------------------------------------------------------

#version=11.5.19

# bug fix: null surfaceGenerator causes MO exception
# bug fix: isosurface reading/writing JVXL files having insideout keyword 

# -----------------------------------------------------------------------------

#version=11.5.18

# bug fix: zap x.y additional work -- connections, isosurfaces
# bug fix: zap x.y not correcting Eval variables
# bug fix: isosurface user VolumeData not properly loading

# -----------------------------------------------------------------------------

#version=11.5.17

# new feature: delete {atom expression} NEEDS TESTING

# bug fix: zap x.y for dots
# bug fix: zap {atom expression} for not including all atoms in a model in the selection
 
# -----------------------------------------------------------------------------

#version=11.5.16

# new feature: zap {atom expression} # zaps models associated with given atoms.
#   use "show models" to see what models are present, then zap them with their
#   file.model number:
#
#   zap 1.1,2.1  # these two models deleted
#   zap atomIndex=0 # ALL ATOMS IN FIRST MODEL deleted
#
# Note that file.model numbers do not change after this. 
# So if initially there were two files loaded
#
#   zap 1.1
#
# removes the first model and leaves the second as "2.1"
#
# NEEDS THOROUGH TESTING, particularly in regard to saving/restoring the state

# bug fix: atomChooser not updated for zap
# bug fix: isosurface model keyword does not carry on to saved state
# bug fix: lcaocartoons do not color properly or get restored from state properly
# bug fix: popup menu selection of groups and symmetry operations does not work

# menu: internationalization of "Monomer" and "Shapely" 
# bug fix: mol2 reader cannot read files with single-line comments
 
# -----------------------------------------------------------------------------

#version=11.5.15

# bug fix: CAChe CSF reader not reading partial charges
# bug fix: WebExport with http:// files fails to save file
# bug fix: WebExport with local . directory fails to save JmolApplet.jar and Jmol.js
# code: refactoring of jmol.app.webexport: adding html subdirectory

# bug fix: state saving with rotateSelected spinning spins entire model  
# bug fix: getproperty("chaininfo") for non-biological model causes null pointer exception
 
# -----------------------------------------------------------------------------

#version=11.5.14

# bug fix: rotateSelected INTERNAL not adjusting for internal rotation center
# bug fix: .max/.min not allowed in context: "select resno=@{{visible}.resno.max}"
# bug fix: Parser: "3xxx" read as 3 instead of 0; "3.5xxx" read as 3.5 instead of NaN  
# application menu: Write state moved to main export menu; Export PDF to image writing
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# bug fix: write PDB format incorrectly writes atoms with 4-length names
# bug fix: Spartan SMOL directory reader doesn't assign bonds
# new feature: Spartan archive reader now reads aromatic bonding
 
# -----------------------------------------------------------------------------

#version=11.5.13 BROKEN FOR XYZ READER

# bug fix: Parser: "3xxx" read as 3 instead of 0; "3.5xxx" read as 3.5 instead of NaN  
# application menu: Write state moved to main export menu; Export PDF to image writing
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# bug fix: write PDB format incorrectly writes atoms with 4-length names
# bug fix: Spartan SMOL directory reader doesn't assign bonds
# new feature: Spartan archive reader now reads aromatic bonding

# -----------------------------------------------------------------------------

#version=11.5.12

# new feature: four optional defaults for Van der Waals radii:
#
#  set defaultVDW jmol
#  set defaultVDW rasmol
#  set defaultVDW babel
#  set defaultVDW user
#
# To set the user variety, first set one of the other sets as a basis
# Then add a DATA statement to include the specific elements you want to give
# new radii to:
#
#  set defaultVDW babel;
#  DATA "element_vdw" 6 1.7 END "element_vdw"; 
#  DATA "element_vdw" 6 1.7; 7 1.8 END "element_vdw"; # separate using semicolons or new lines
#
# For full state compatibility, these commands should be given prior to
# model loading, as they affect all calculations involving Van der Waals 
# radii -- except default zoom.
#
# Now select the user set:
#
#  set defaultVDW user
#  spacefill on
#
# To delete all user entries:
#
#  reset VDW 
#
# If user vdw radii are currently set, then this resets the defaults to Jmol.
#
# new feature: show vdw  shows a listing of the currently set VDW radii
#
# new feature: integration of star, halo, and spacefill code so all behave the same.
# 
# stars     1.0      # set to a specific angstrom radius
# spacefill 100%     # percent of CURRENT vdw set
# stars     100%Jmol # percent of Jmol standard
# stars     50%Babel # percent of Babel standard
# spacefill 5%Rasmol # percent of Rasmol standard
# spacefill 30%User  # percent of User-defined values (or CURRENT if not defined)
# spacefill +1.2     # angstroms added to current vdw scheme
# halos     50%Jmol  # -- halos also have an added bit to make sure they are visible 
# spacefill 250      # RasMol 250 units/Angstrom units still
# spacefill -20      # neg numbers same as percentages: 20% here, using current vdw set
# stars     @{x+0.1} # math OK
# spacefill @x%      # make sure x comes out integer, otherwise % is ignored
#
# note that dots do not have a %Jmol option:
#
# dots   30     # syntax already assumes percent for dots using an integer
#
#
#
# see src/org/jmol/_documents/vdw_comparison.xls

# -----------------------------------------------------------------------------

#version=11.5.11

# bug fix: save/restore of atom data incorrect when user has set propertyAtomNumberField or propertyDataField
# bug fix: functions, save/restore state were disabled by bug in 1.5.8
# bug fix: command "test()" where test() is a user-defined function causes array-out-of-bounds error
# bug fix: undocumented .vdw atom property was equivalent to .valence
# bug fix: GAMESS reading of F orbital order incorrect

# new feature: settable Van der Waals radius using {carbon}.vanderwaals = 1.7 
#  or using DATA "property_vanderwaals"
# new feature: DATA "property_x i j" .... END "property_x i j" 
#   overrides default propertyAtomNumberField (i) and propertyDataField (j)
# new feature: State save of property_xxx  now in easily readable Jmol Data Format

# -----------------------------------------------------------------------------

#version=11.5.10

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: ISOSURFACE LIST command requires current isosurface
# bug fix: JVXL writing does not properly save pocket cavities or minsets
# bug fix: DATA command assigning property to last atom in structure fails

# -----------------------------------------------------------------------------

#version=11.5.9

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: Gaussian reader not considering possibility of cartesian D and spherical F
# bug fix: ADF reader not reading coordinates for newer ADF output

# -----------------------------------------------------------------------------

#version=11.5.8

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: lines starting with @{ redefine "{"
# bug fix: echo offsets do not correct for window position
# bug fix: menu reports too many chains
# new feature: menu includes all standard color scheme options
# new feature: inline math @{x+3} extended to all commands
# new feature: .sub(), .add(), .mul(), .div() extended to all operand types

# -----------------------------------------------------------------------------

#version=11.5.7

# bug fix: explicit "SELECT NONE" must be given for label defaults to be set

# bug fix: menu select element missing SELECT command
# bug fix: for delayed font scaling animation using the font command and antialias display

# -----------------------------------------------------------------------------

#version=11.5.6

# bug fix: HETATM atoms not automatically bonded to nearby ATOM atoms
# bug fix:  setParameterValue("perspectiveDepth",perspectiveDepth);

# bug fix: sets offset based on imageFontScaling, not overall font scaling
# bug fix: multiline labels not positioned properly with offset 0 0
# bug fix: labels not scaling properly
# new feature: label "scaleReference" if > 5.0 is taken to be a reference zoom setting
#   saying "make the font size X at a zoom of Y" 
# bug fix: labels not scaling properly when in script with file load
# bug fix: labels not appearing in contrast when given same color as background
# bug fix: fixes applet memory leak in relation to consoles

# -----------------------------------------------------------------------------

#version=11.5.5

# bug fix: fixes applet memory leak due to 
#   platform objects/delay threads not being destroyed

# new feature -- syncCallback -- intercepts messages that would otherwise go to applets for syncing
#   when syncCallback is set to a JavaScript function name, that function
#   intercepts the sync message and can pass it on (by returning it), 
#   consume it (by returning an empty string ""), or modify it as desired.
#   this allows, for example, monitoring of orientation information so that
#   zoom sliders and such can accurately portray their values

# -----------------------------------------------------------------------------

#version=11.5.4

# bug fixes -- font scaling

# new feature: Spartan input files read as Odyssey format
#
# new feature: set delayMaximumMs  sets the maximum delay that scripts will use, primarily for testing scripts
# new feature: set fontScaling TRUE/FALSE
# new feature: font [type] [size] [face] [weight] [scaleReference (Angstroms per pixel)]
#  atom labels and 3D echos then scale properly.
#  note that the current zoom affects the label size.
# bug fix: image writing does not scale fonts properly. 
# bug fix: antialias of images not functionally independent of antialias for display
# bug fix: label offset doubled for multiline labels with left/right/center alignment not specified
# bug fix: default label offsets mangled by default Front/Group

# new feature: getProperty("appletInfo") includes a key "registry" for which
#   the value is the static Hashtable htRegistry
#    //note that the following JavaScript retrieves the registry:
#        var registry = jmolGetPropertyAsJavaObject("appletInfo").get("registry")
#    // and the following code then retrieves an array of applets:
#        var AppletNames = registry.keySet().toArray()
#    // and the following sends commands to an applet in the registry:
#        registry.get(AppletNames[0]).script("background white")

# new feature: reading of Spartan spinput files (uses Odyssey reader)

# bug fix: PDB files with missing amino acid carbonyl O cause exception

# -----------------------------------------------------------------------------

#version=11.5.3

# bug fix: check if the file is CIF before PDB
# bug fix: color hbonds translucent
# bug fix: state: calculate hbonds not saved
# bug fix: state: calculate surfaceDistance WITHIN (({....}))
#  missing outermost parentheses
# bug fix: state: selection state "end function" missing semicolon
# bug fix: isosurface lcaoCartoon "pz" translucent not setting both lobes translucent 
# bug fix: color isosurface when isosurface is an lcaoCartoon only colors one lobe
# bug fix: save state for "color SelectionHalos"

# -----------------------------------------------------------------------------

#version=11.5.2

# Translation update: Estonian

# new feature: "getProperty FILECONTENTS ." in the context of
#  a zip directory defaultDirectory
# new feature: zip file reading extended to write FILE
#
# bug fix: unclosed InputStream readers in zip file accessing
#
# new feature: allows zip files to be designated as default directoriesusing
#    set defaultDirectory "myfile.zip"
#  and then using a filename
# bug fix: unclosed readers in Pmesh, FileManager, Jvxl
# new feature: pmesh BINARY "filename"
#   BINARY keyword is optional, but recommended for efficiency
#
#       *  4 bytes: P M \1 \0 
#       *  1 byte: \0 for bigEndian
#       *  3 bytes: reserved
#       *  4 bytes: (int) vertexCount
#       *  4 bytes: (int) polygonCount
#       * 64 bytes: reserved
#       *  ------------------------------
#       *  float[vertexCount*3]vertices {x,y,z}
#       *  [polygonCount] polygons 
#       *  --each polygon--
#       *    4 bytes: (int)nVertices (1,2,3, or 4)
#       *    [4 bytes * nVertices] int[nVertices]
#       *
#       * note that there is NO redundant extra vertex in this format
#
#  see little-endian example at http://chemapps.stolaf.edu/jmol/docs/misc/pmesh.bin
#  and http://chemapps.stolaf.edu/jmol/docs/misc/pmesh.bin.txt

# -----------------------------------------------------------------------------

#version=11.5.1

# bug fix: quaternion for nucleic acids
# code: inefficiencies in Quaternion code
# new feature: within(structure,atom_expression)
#  for proteins, just the helix or turn or sheet containing those atoms; 
#  for nucleic acids, just the chain

# bug fix: wing vectors for biopolymers 
#   not containing O improperly drawn for sheets 
#   and, in the case of set traceAlpha TRUE (the default), helixes
# bug fix: translateSelected/rotateSelected does not move cartoons
# bug fix: tainted occupancy not saved in state
# bug fix: biopolymers have wrong wing vectors (from 11.3.62)
# bug fix: restore of state does not reset user-defined atom properties
# code: refactoring Atom and AtomCollection 

# -----------------------------------------------------------------------------

#version=11.3.66

# bug fix: CIF reader not skipping loops with load of a specific model of a model set
# bug fix: explicit format LOAD "XXX::whatever" extended to XML variants
# code: adapter/readers/more/JmolDataReader.java removed.
# code: adapter/smarter/Resolver.java cleaned up in relation to XML and DOM options

# -----------------------------------------------------------------------------

#version=11.3.65

# full run of monster_script.spt

# bug fix: pmesh test1 "inline" "1 {2. 0. 0.} 0"  disallowed, but that should be OK
# bug fix: isosurface gridpoints "ch3cl_map.jvxl" -- gridpoints for jvxl files that are already mapped
# bug fix: isosurface lcaoCartoon "type" {atomExpression}

# files: JUnitTest for scripts -- 
#  monster script in run directory tests scripts now uses 
#    files at http://chemapps.stolaf.edu
#  all monster scripts made the same
#  tests/scripts/check_performance removed.
#  
# bug fix: better checking of scripts involving full run of all scripts
# bug fix: defaultDirectory for Jmol application not usable for http:// protocols
# bug fix: load "files" not properly loading zip files or files involving default directory

# -----------------------------------------------------------------------------

#version=11.3.64

# bug fix: version integer missing sometimes
# bug fix: isosurface with trajectories
#  interesting that if 1.1 and 1.2 are trajectories you can do
#    frame 1.2; isosurface select(*/1.1) sasurface
#  this creates an isosurface for model 1.2 that uses the atomic coordinates of model 1.1!
#
# bug fix: isosurface MEP mapped to plane not exactly reproduced in JVXL
# bug fix: isosurface COLOR RANGE by itself does nothing -- changed to use full range
# new feature: isosurface COLOR RANGE ALL added as an equivalent to COLOR RANGE with no numbers

# -----------------------------------------------------------------------------

#version=11.3.63

#  -- all functionality in new.htm, new2.htm, and new0.htm tested --

# bug fix: draw/isosurface/etc. on/off/delete should operate on all objects
# bug fix: display within(plane...)
# bug fix: select site=n  broken
# bug fix: quaternion/ramachandran/model can show up together if user issues FRAME ALL
# bug fix: frame 1.2 when file 1 only has one model displaying all files
# bug fix: quaternion x reports wrong frame number
# bug fix: selectionHalo status and color not in state
# bug fix: color selectionHalos none
# bug fix: polyhedra .... translucent 0.3 green
# bug fix: moveto alternative format missing necessary 0 rotationRadius requirement
#   moveTo ...... {atomExpression} 0 [zoomOrZoomFactor]
#   where [zoomOrZoomFactor] is n, +n, -n, *n, /n, or 0 (to indicate fill screen)
# bug fix: subsets not properly handling restrict
# bug fix: models with turns crash jmol if not first model loaded
# bug fix: quaternion command by itself not switching to most recent quaternion
# bug fix: background color off when not white and ends in "FF"
# bug fix: print {atomSet}.color  -- .color returning bounding box!
# bug fix: multiframe draw with labels different for each frame not properly saved in state
# bug fix: within upgrade for boundbox: within(boundbox), within(boundbox,atomExpression)

# -----------------------------------------------------------------------------

#version=11.3.62

# bug fix: calculate hbonds for trajectories
# code: distinction between file-derived or connected hbonds and calculated hydrogen bonds
# bug fix: calculate hbonds broken in 11.3.58 (missing model field in BioPolymer)
# bug fix: Jmol not putting structures in for all models in a PDB file
# bug fix: calculate polymers (never documented) not necessary -- calculate structure suffices
# bug fix: calculate structure updated for ignoring jmolDataFrames and using currently selected atoms
# webexport help instructions fix to be consistent for local testing.

# -----------------------------------------------------------------------------

#version=11.3.61

# bug fix: multifile cartoons improperly rendering in all frames
# bug fix: dipoleScale not saved in state
# bug fix: quaternions broken in 11.3.58
# code: Closest class deleted
# code: Quaternion class moved to modelsetbio
# code: dipoles moved to shapespecial
# bug fix: select 1.5 in trajectory context should switch to that set of coordinates
# bug fix: draw not colored
# bug fix: mousewheel too low power
# bug fix: select */4 when "4" is inappropriate returns all instead of none
# bug fix: memory leak in applet due to mouse/hoverwatcher listeners
# bug fix: applets not self-destroying when window containing them close
# bug fix: rotate commands not sent to other applets when set syncScript if OFF

# -----------------------------------------------------------------------------

#version=11.3.60

# bug fix: more work on trajectories in a multimodel context

# bug fix: quick fix for disabling popup menu under Java 7 where permissions are not granted

# bug fix: load trajectory extended to multifile context
#  in which case "select 1.3", if file 1 is a trajectory, not only
#  selects that file, but also sets the trajectory to 1.3. 
#  So a "select" of a trajectory also affects the display.
#  This makes "select" in a trajectory context similar to "display"
#  but doesn't require listing of all the models.

# -----------------------------------------------------------------------------

#version=11.3.59

# bug fix: load append not saved in state properly
# code: trajectory command (never documented) removed
# bug fix: draw ... nofill mesh  properties not processed
# bug fix: draw DIAMETER N not properly functioning for curves or arrows
# new feature: draw DIAMETER X.Y allows setting diameter of points, lines, curves, and arrows to Angstroms

# bug fix: 11.3.58 can't set bond diameters
# bug fix: with set syncMouse, target applet sets syncMouse off inappropriately

# -----------------------------------------------------------------------------

#version=11.3.58

# bug fix: set mouseSync with sync * ON disabling sync but not reenabling it
# bug fix: spin on missing in final state function.
# bug fix: select within (3.3, {-1 1 1}) does not work with negative integer coordinate
# bug fix: trajectories were not fully implemented
# code: refactoring of ModelSet and related classes for trajectories
# code: trajectories implemented as independent models
# code: debug comments in AppletRegistry

# new feature: trajectory command no longer necessary -- deprecated (was in 11.2)

# -----------------------------------------------------------------------------

#version=11.3.57

# bug fix: revised sync commands
# new feature: set syncScript; set syncMouse
# sync ON; set syncMouse false; set syncScript false    Tracks orientation only
# sync ON; set syncMouse true;  set syncScript false    Sends mouse events only
# sync ON; set syncMouse false; set syncScript true     Sends script commands only
# sync ON; set syncMouse true;  set syncScript true     Sends both mouse events and script commands
# 
# bug fix: "load trajectory" broken

# -----------------------------------------------------------------------------

#version=11.3.56

# bug fix: isosurface map of properties lost in 11.3.54
# new feature: set c?  -- displays all Jmol parameters starting with "c" or "_c"
#              set _?  -- displays all read-only variables (starting with "_")
# new feature: formatted gOpenMol formatted plt volume data reader.
# new Jmol.js for 11.4

# -----------------------------------------------------------------------------

#version=11.3.55

# bug fix: axes/unitcell improperly slabbing on internal slab
# bug fix: XOR returning OR when not a bitset
# bug fix: unary minus for planes and points 
# FEATURE CHANGE: slab REFERENCE removed -- no longer necessary
# new feature: set wireframeRotation
# code: simplified Logger.debugging flag
# bug fix: slab/depth planes not properly constructed
# new feature: _slabPlane, _depthPlane variables
# code: MUCH simpler slab plane code

# bug fix: applet.loadInline(String[] models) messes up
#  this involves the fact that Safari will deliver null pointer when it
#  mistakenly matches a String[] signature to a String, or vice-versa.
#  The solution is to use 
#
#    applet.loadInlineString(String model, String script, boolean isAppend)
#
#  and
#
#    applet.loadInlineArray(String[] model_or_models, String script, boolean isAppend)
#
#  explicitly
# code: refactoring loadInline and interfaces WrappedApplet and JmolAppletInterface
# bug fix: scroll wheel with synchronization does not track properly

# -----------------------------------------------------------------------------

#version=11.3.54

# bug fix: MRC (CCP4) electron density surface data file read with incorrect origin offset;
# bug fix: MRC files inside out
# new feature: MRC (CCP4) uses 3*rms + mean for automatic cutoff

# bug fix: JVXL writing/reading of simple plane writes precision color flag

# new feature: (isosurface) reading of XPLOR ascii electron density map data

# bug fix: reinstating "insideout" isosurface option
# bug fix: JVXL writing of lobe, sphere, ellipsoid, hydrogenOrbital
# bug fix: loadInline not properly autobonding -- causes null pointer error
# bug fix: data ... end model instead of end "model" causes null pointer exception

# -----------------------------------------------------------------------------

#version=11.3.53

# bug fix: symop=0NNN not returning all atoms with translation NNN
# code: optimization of algorithm used for load RANGE
# modification for load RANGE -x.x (within x.x Angstroms of symop=1555) to be within x.x of the 
#  box containing symop=1555, not the atoms themselves. 
# code: cleanup of readers.

# bug fix: no special atom checks for PDB symmetry files

# bug fix: HallInfo --- Hall term miscalculation OUCH! -- mistken commenting out of code in 11.1.28 March, 29, 2007. revision 7243
# bug fix: set measures 0.1 --- solid line does not move.

# bug fix: completion of set parameter clean up

# -----------------------------------------------------------------------------

#version=11.3.52

# bug fix: set of many more (but not all) parameters can accept mathematical expressions
# bug fix; set strandCount not properly handled
# new feature: set strandCountForStrands
# new feature: set strandCountForMeshRibbon
# note --- set strandCount sets BOTH, but now each is independent

# bug fix: quaternion not including chain designation
# bug fix: default connections include proper PDB CONECT records

# new feature: connect PDB       # just does PDB CONECT connections
# new feature: connect PDB AUTO  # PDB CONECT and autobonding

# -----------------------------------------------------------------------------

#version=11.3.51

# bug fix: write FILE not handling binary file formats properly

# bug fix: PDB CONECT records not creating bonds for ALL models
# bug fix: load =xxxx broken in 11.3.50
# bug fix: amino not a subset of protein
# bug fix: proteins with just C CA N not recognized as such

# code: minor refactoring in org/jmol/util
# code: minor refactoring in org/jmol/jvxl
# code: minor refactoring in org/jmol/adapter

# -----------------------------------------------------------------------------

#version=11.3.50

# new feature: MOL isotope column read; interpreted for D, T, 11C, 13C, 15N (for now) 
# bug fix: WebExport not properly accessing files in more complicated situations (pmesh, isosurface, multiple files, etc.)
# bug fix: WebExport not allowing variety of local location options

# bug fix: return command not allowed in simple context
# bug fix: setting perspective model resets unit cell on
# bug fix: debug comment in TransformManager
# bug fix: hideNotSelected not in state.

# -----------------------------------------------------------------------------

#version=11.3.49

# bug fix: set perspectiveDepth off broken in 11.3.48
# bug fix: set scaleAngstromsPerInch not turning off perspectiveDepth
# bug fix: scaleAngstromsPerInch not in state
# bug fix: _firstFrame/_lastFrame variables mess up state
# bug fix: calculate surfaceDistance broken for 11.3.48

# new feature: direct reading of MAC Spartan06 directories.
 
# -----------------------------------------------------------------------------

#version=11.3.48

#
# new feature: script "myfile.zip|xxx.spt"
#
# bug fix: scale3D not working
#
# new feature: load "myfile.zip|CH3CL.MOL"
#   loads a given named model from within a zip file.
#
# new feature: load "myfile.zip|myfile2.zip|CH3CL.MOL"
#   loads a given named model from within a zip file within a zip file.
#
# these selections override any manifest that might be in a ZIP file.

# new feature: print getProperty("fileContents","zipFileName", "subfile", "subFile",...)
#  getProperty now allows drilling down through a ZIP file. If no subfile is shown, 
#  then the directory listing is given:
#
# print getProperty("fileContents", "data/test.zip")
#
# CH3CL.MOL
# CH3CL~1.MOL
# CH3F~1.MOL
# CH3OH~1.MOL
# CH4~1.MOL
# BENZEN~1.ZIP
# ENALSP~1.ZIP
# WATERV~1.ZIP
# JmolManifest
#
# print getProperty("fileContents", "data/test.zip", "BENZEN~1.ZIP")
#
# benzenevib.spardir/
# benzenevib.spardir/_locked
# benzenevib.spardir/_spartandir
# benzenevib.spardir/Document
# benzenevib.spardir/M0001/
# benzenevib.spardir/M0001/_spartan
# benzenevib.spardir/M0001/archive
# ...
# benzenevib.spardir/SpreadSheet/
# benzenevib.spardir/SpreadSheet/SheetData

# print getProperty("fileContents", "data/test.zip", "BENZEN~1.ZIP","benzenevib.spardir/M0001/")
#
# benzenevib.spardir/M0001/
# benzenevib.spardir/M0001/_spartan
# benzenevib.spardir/M0001/archive
# benzenevib.spardir/M0001/Calculations
# benzenevib.spardir/M0001/Commands
# benzenevib.spardir/M0001/Geometry
# benzenevib.spardir/M0001/input
# benzenevib.spardir/M0001/log
# benzenevib.spardir/M0001/Molecule
# benzenevib.spardir/M0001/output
# benzenevib.spardir/M0001/parchive
# benzenevib.spardir/M0001/proparc
# benzenevib.spardir/M0001/ret_code
# benzenevib.spardir/M0001/voutput
# 
# print getProperty("fileContents", "data/test.zip", "BENZEN~1.ZIP","benzenevib.spardir/M0001/Commands")
# 
# # Verbose Mode: 1
# # version: MacSPARTAN '06 129  129 x86/Darwin
# # rootKeys: 'OPT' 'HF' '3-21G(*)' '' ''
# # new Keys: 'OPT HF 3-21G(*) FREQ '
# # ...etc....

#
# new feature: load "myfile.zip" MANIFEST "...." 
# new feature: JmolManifest in a zip file directs which files to load and in what order
#  JmolManifest is simply a list of files, one per line. 
#
#  Rules include:
#
#  1) blank lines and lines beginning with # are ignored.
#  2) file names are case-sensitive and must be complete, with full path within the ZIP file
#  3) files must be on separate lines or separated by vertical bar | marks; no whitespace around names
#  4) files may be ZIP files themselves. 
#  5) some comments are special:
#      IGNORE_ERRORS   --- process the file and do not stop if some files are not valid model files
#      IGNORE_MANIFEST --- (on the load command line) indicates that the internal ZIP file manifest should be ignored
#      EXCEPT_FILES    --- process all files EXCEPT those given
#

# new feature: show spacegroup "X,Y,Z;-X,Y,Z;..." finds space group associated with specific operations 

# bug fix: multimodel files could have connected atoms between different models.

# bug fix: application animation frame button reset always goes to frame 1

# new feature: load xxx.zip n   # where n is the desired file, starting with 1
# new feature: Spartan06 file format reader
# new feature: ZIP file reading for multiple models

# bug fix: antialiasDisplay changes during spinning (or any rendering) causes null pointer error

# -----------------------------------------------------------------------------

#version=11.3.47

# coding efficiencies in atom iterators

# vast speed up of smoothed isosurface map properties 

# deprecated: calculate surface (equates to surfaceDistance WITHIN)
# deprecated: calculate surface {...} (equates to surfaceDistance FROM)

# new feature: calculate surfaceDistance FROM {atomExpression} 
# new feature: calculate surfaceDistance WITHIN {atomExpression} 

# -----------------------------------------------------------------------------

#version=11.3.46

# new feature: calculate surface {atomExpression}

# new feature: set isosurfacePropertySmoothing # default TRUE
#  smooths the coloring for isosurface ... map property ...

# bug fix: "isosurface select() map property xxxx" array out of bounds error
# bug fix: color bonds CPK not working
# new feature: calculate polymers
# allows recalculation of polymers after connections are made/broken

# bug fix: tRNA, rRNA with abnormal distances do not connect biopolymers
# bug fix: Jmol math getProperty() doesn't pass parameter in some cases
# code: refactoring,optimizing Escape.toJSON() and Escape.toReadable()
# bug fix: isosurface CAP not turned off prior to map sasurface
# bug fix: adjustable boundbox in multimodel context not specific to model of selected atoms
# bug fix: Jmol math (x[2])[3]  indistinguishable from x[2][3]

# -----------------------------------------------------------------------------

#version=11.3.45

# bug fix: new boundbox command with small numbers of atoms
# bug fix: state not saved for coloring elements
# bug fix: state not properly representing deleted bonds
# bug fix: setColix not clearing shading in certain cases

# new feature: Jmol math {atomset}.boundbox returns list of center, vector, corner0, corner1 for this set of atoms 
# code: ModelSet.BoxInfo abstraction/refactoring

# -----------------------------------------------------------------------------

#version=11.3.44

# new feature: Jmol math getProperty() function
#  allows FULL math access to ALL getProperty types
#
#  syntax: getProperty(propertyType, qualifier, item, item, item,...)
#
# examples:
#
# print getProperty("modelInfo") 
# print getProperty("boundboxInfo") 
# print getProperty("boundboxInfo", "center") 
# print getProperty("boundboxInfo", "vector") 
# print getProperty("atomInfo",{atomno=3})
# print getproperty("bondInfo",{*},2,"atom1")
# print getProperty() # displays list of possibilities
# print getproperty("polymerinfo",{*},"models",2,"polymers",1,"monomers",39,"atomIndex2")
#
# For many property types, the qualifier is an atom set
# If the atom set is not given, those properties default to {visible}
# For "stateInfo", the qualifier is string: "fileState", "modelState", etc.
# Items may be integers or string-based keys
# Integer items follow the rules of Jmol math selectors:
#  1 first item, 0 last item, -1 next to last item, etc.
 
# code: set instead of = in measures and labels state
 
# bug fix: POVRAY and other buttons aren't enabled when there are no atoms but instead draw objects and isosurfaces
# bug fix: new label fonts not loaded when labels resized

# bug fix: nuisance "render mesh error" console report

# new feature: boundbox {atomExpression} [on|off]
# sets the bound box around the specified atom expression
# default ON/OFF is to NOT change current setting 

# new feature: boundbox {point or expression} {vector to corner} [on|off]
# sets the bound box to be centered with a given size based on a vector to a corner

# new feature: boundbox corners {point or expression} {point or expression} [on|off]
# sets the bound box to encompass the two corner points

# strangely enough this allows setting the boundbox to a 2D or 1D box

# new feature: show boundbox gives valid boundbox commands and volume

# bug fix for bioshapes visible outside of current visible frame set

# bug fix for selecting atoms of atomsets using [-n] or [0]

# isosurface POINTSPERANGSTROM synonym for RESOLUTION
#  also reported in show isosurface

# bug fix: more natural mouse SHIFT-RIGHT behavior.

# new feature: isosurface CAP [plane definition]

# caps the isosurface at the designated plane. 
# Specifically for molecular/solvent-type isosurface. 
# [plane definition] can be {x y z w} or any combination of
# three {x y z} points, draw point references, or atom expressions

# -----------------------------------------------------------------------------

#version=11.3.43
 
# bug fix: select statement comparisons of negative decimal properties to "-1" (not "-1.0") causes none found


# new feature: Back to "SET" for state definitions of Jmol parameters.

# bug fix: Strings too long in state can cause Eclipse "infinite loop" bug
#
# solution is a new feature:

# new feature: "\" at the end of a line marks a continuation of that line 

# bug fix: assigning a negative value to a dataAtomNumberField value caused BitSet.set() exception

# bug fix: Jmol parameter setting syntax too loose

# The following statement was allowed:

#   pickCallback = myfunction

# OK, so that might look good, but it evaluates to 
#
#  pickCallback = ""
#
# since the VARIABLE myfunction has not been defined.
# 
# Solution: Don't allow the syntax
#
#  [jmolParameter] = [Token.identifier]
#
# the following is OK:
#
#  [jmolParameter] = "some string"
#
# the following is preferred:
#
#   SET [jmolParameter] [value]
# 
# bug fix: antialias with translucent but antialiasTranslucent = false; labels, text, echos, hover, picking, out of alignment
# bug fix: negative formal charges

# new feature: set drawPicking TRUE
# then reports picking of draw objects as a JavaScript array:
# [  "draw","[drawID]",[modelIndex],[vertexIndex],[x],[y],[z]  ]
# this goes to the pickCallback function as the second parameter,
# with the first parameter (normally the atomIndex) being -2.

# bug fix: write coord mol   not working

# new feature: connect (...) (...) aromatic auto
# similar to calculate aromatic, except it's isolated to this set of connections; implicit modifyOnly
# can be used in place of 
#  select *; calculate aromatic
#
# code: refactoring of BondCollection.makeConnections
#
# bug fix: connect (..) (..)  # with implicit "single" causes state to use "partial 0"

# new feature: shadows can be activated again via noShadows parameter in .pov file

# -----------------------------------------------------------------------------

#version=11.3.42

# bug fix: new frame title and state

# new feature: set echo [echoID] MODEL [model number]

# bug fix: select by itself not working; oy. Since at least 11.0

# bug fix: ramachandran/quaternion fix for assignment of structure
# bug fix: isosurfaces not taking their default name properly

# new feature: frame title "this a title for THIS frame only"

# bug fix: small fix for povray cap at back side
# bug fix: overly long titles now again substringed in the popup menu.  

# bug fix: memory leak in merge -- models[i].modelSet causes modelSet to not finalize.
# bug fix: quaternion 


# bug fix: set xxxCallback not allowed

# new feature: **** Jmol Embedded Script **** recognized in /* ... */ comments and /** ... **/ super-comment blocks
# if found, ONLY this text is processed and all other text in the file is ignored.

# -----------------------------------------------------------------------------

#version=11.3.41

# bug fix: math operations with bond bitsets; % and + operating on arrays
# bug fix: _set variable definition removed

# new feature: .type math function

# new feature: Jmol math allows direct string replacement in select atom expressions:
#  x = "atomno=3"
#  select @x  #  or select @{x}
#  select @{x + 3} # selects atomno=33
#  x = array("atomno<10","atomno>20")
# select @x   # OR of the list elements
# select @{x[2]} # just element 2 of x (atomno>20)
# select @x[2]   # same as {@x}[2]


# new feature: set atom properties using an array instead of a DATA statement:
# (was introduced in 11.3.29, but not fully articulated)
# {*}.x = array(2,3,4,5,6);
# {atomno<=3}.color = array("red","green","blue")
# {*}.property_mydata = array(1.0,5.5,4.4,3.3);
# {atomno < 4}.xyz = array({3 4 5},{4 5 6},{5 6 7})
# if the array is shorter than the number of atoms selected, then 
# only that number of atoms are affected

# new feature: set atom properties from space-separated string:

# {atomno < 5}.property_mydata = "1.0 5.5 4.4 3.3";

# -----------------------------------------------------------------------------

#version=11.3.40

# new feature: Ramachandran/Model commands switch between plot and model
#  -- one Ramachandran plot per model
#  -- axes labels and special hover label for Ramachandran plots
#  -- Ramachandran saved in state

# bug fix: Overlapping CPK at a slab now correct for up to 10.000 clipped atoms.

# bug fix: @{} for within(1.0,point,@{....})

# new feature: set xxxx where xxxx is not a Jmol variable causes ERROR

# code: privatized Token to avoid null value problem in Eval.statementAsString()

# POV-Ray clipping coding minor tweak
# POV-Ray fix for number formatting width > 999

# new feature: model-based parallel array calculations:
#   x = {atomno=3}.split()  # a list, one element for each model
#   draw @{x.xyz.sub({1 0 0})} # a set of points, one per model

# new feature: point3f in array():
#  xlist = array({1,2,3}, {1,1,0});print xlist[1]+{1 0 0};
# bug fix: draw @{x - {1 0 0}}
# bug fix: antialias with set picking draw
# bug fix: draw object text not selective for frame 
# new feature: draw object title line number corresponds to model number for multi-model draw objects

# new feature: matte finish for isosurfaces
# remark: matte finish replaced by adaptable translucent finish (see below)

# bug fix: noninteger MO occupancies
# bug fix: antialias labels not fully bitmapped
# bug fix: RPN processor too limited in nesting level
# bug fix: MO processing for Gaussian and PSI3 errors

# new feature: MoldenReader (Matthew Zwier <mczwier@gmail.com>)
# new feature: MO calculations for spherical orbital basis (Matthew Zwier <mczwier@gmail.com>) 

# bug fix: slabbed atoms are now capped in povray output. 
#   Note: In CPK mode atoms overlap, but are capped at the same height.
#     there is a priority in Jmol, but not yet clear to me which. The current priority 
#     in povray is based on the signed distance from the slab to the atom center. 
# bug fix: povray output of translucent objects now have reduced glare, for 
#   clarity of the representation and better compatibility with the Jmol viewer.

# -----------------------------------------------------------------------------

#version=11.3.39

# bug fix: antialias causing image to be partial size. 
# bug fix: hover state not properly showing specific-atom hover labels.

# new feature: write FILE (text-files only)

#new feature webexport: automatic usage of a different path to the applet for local files to allow testing
#  only works for Pop-In template at present.  Required updates to JmolPopin.js and templates.
#webexport instruction updated to reflect new feature.


# bug fix: antialias adjustments for hover text and background box
# bug fix: antialias fix for text color same as background and in front of translucent surface appearing transparent
# bug fix: antialias fix for applet

# webexport instruction updates.
# bug fix: webexport scriptbutton template had erroneous script names.

# -----------------------------------------------------------------------------

#version=11.3.38

# bug fix: antialiasing with translucent/POV-ray
# new feature: set antialiasTranslucent TRUE/FALSE
#  along with antialiasDisplay and antialiasImages
#  determines the extent of antialiasing. Requires
#  antialiasDisplay or antialiasimages TRUE.

# -----------------------------------------------------------------------------

#version=11.3.37

# new feature: @{mathExpression} for echos, select, etc. where @x can be used. 
#   select atomno=@{x*2};
#   xlist = array("red", "green", "blue");
#   n = 2;
#   color atoms @{xlist[n]};

# new feature: {atomExpression}.color = "red" (or "[xff0000]" or {255,0,0}

# new feature: helixes as barrels in cartoons or rockets using
#    rocketBarrels = true

 
# bug fix: -- adds antialiasing for translucent objects
# bug fix: error in state for connect DELETE
# bug fix: 0-diameter atoms displayed as single pixels when perspectiveDepth = false

# -----------------------------------------------------------------------------

#version=11.3.36

# antialias better dots

# bug fix: inline loading not working

# POV-Ray dialog update

# set antialiasDisplay T/F (false by default)
# set antialiasImages T/F   (true by default)

# -----------------------------------------------------------------------------

#version=11.3.35

# POV-Ray  slab/depth
# POV-Ray  text -- ALL text (echos, labels, axes, etc.)

# POV-Ray cleaner for Molecular Orbitals
# bug fix: getproperty atominfo returning string to Integer()
# PDB remediated atom name upgrade -- NEEDS CAREFUL CHECKING

# -----------------------------------------------------------------------------

#version=11.3.34

# write povray [width] [height] filename

# POV-Ray for mapped isosurfaces
# POV-Ray embeds Jmol script
# POV-Ray .pov files created by Jmol can be loaded as scripts


# code: cleaning of JmolConstants specialAtomNames
# code: cleaning of TextFormat.simpleReplace
# bug fix: select [SET] or [2MO] or [DB']
# bug fix: app -c flag errors not going to Logger.Error
# bug fix: no partial charges!
# bug fix: 11.3.14+ does not write colormapped JVXL files
# bug fix: Using isosurface within 1.0 @pt1 where pt1 is a draw point save state cannot be restored  

# -----------------------------------------------------------------------------

#version=11.3.33

# code: PovRay tweaks -- multiple bonds
# code: PovRay output uses BufferedWriter

# adds support for "xx'" atom designations in PDB and variable names

# bug fix: insertion codes stored incorrectly in 11.3.32

# new feature: inline scripting allows math
#
#   script INLINE "select " + site_list[2]


# new feature: site_ support for PDB and CIF
#
# loading of PDB and CIF files containing site information 
# automatically defines variables site_xxx and defines selections site_xxx and site_n
# where xxx is the site identifier and n is the site number.
# These settings are reset each time a file is loaded. 
# They do not carry over from one file to the next.

# adds    "OP1" and "OP2" as backbone designators (new PDB designation)


# _PovrayExporter adds draw, halos, stars, dipoles, vectors, polyhedra, 
#    backbone, cartoons, meshRibbon, ribbon, rockets, strands, trace,
#    dots, geosurface, molecular orbitals, LCAO cartoons, pmesh, 
#    single-color isosurfaces

# Web Export Dialog changes: new intro tab, new minilog at bottom, instructions converted to
#   buttons which open the info in the standard Jmol Help Dialog.


# bug fix: rockets color incorrect for head groups

# -----------------------------------------------------------------------------

#version=11.3.32

# bug fix: vibration disabled in 11.3.31
# bug fix: zoomto cancels slabbing
# bug fix: zoomto (atomExpression) 0  # zooms to 2x

# new feature: getproperty stateinfo TYPE
# where TYPE is one of:
#
#   colorState
#   dataState
#   fileState
#   frameState
#   modelState
#   perspectiveState
#   selectionState
#   variableState
#   windowState
#   
# bug fix: backbone not in state

# code(I): Mmset merged into ModelSet; 
#       Viewer accesses ModelSet methods directly
#       ModelManager streamlined substantially
#
#   This basically removes two full layers of abstraction.
#   All the atoms, bonds, and models are now in ModelSet.
#
# code(II): ModelSet extends ModelCollection extends BondCollection extends AtomCollection
#
# bug fix: dipoles moved back into shape from shapespecial
# bug fix: semi missing in show orientation message, second part (zyz text)
# bug fix: select 0 selects all instead of PDB group 0
# bug fix: write t.xxx

# -----------------------------------------------------------------------------

#version=11.3.31

# bug fix: calculate aromatic for N and O refined

# new feature: valence -- sum of bond orders
#  print {atomno=3}.valence
#  {atomno=1}.valence = 3  
#  select (carbon and valence != 4)

# new feature: settable atom properties (preliminary):
#  .x, .y. .z, .xyz, 
#  .fx, .fy, .fz, .fxyz,
#  .vx, .vy, .vz, .vxyz,
#  .formalcharge, .occupancy, .partialcharge
#  .temperature, .valence 
# for example:
#   a = {atomno=30}
#   a.xyz = {1.0, 2.0, 2.3}
#   a.temperature = 3.0
#   a.formalcharge = 2

# new feature: set atom properties using {xxxx}.x = 
#
# {atomno=3}.x = 3
# {(*)[2]}.xyz = {1 2 3}
# for(var i = 1; i < 3; i = i + 1); {(*)[i]}.x = 5;end for;
# {atomno=3}.property_whatever = 2.0

# new feature: set atom properties using an array instead of a DATA statement:

# {*}.property_mydata = array(1.0,5.5,4.4,3.3);
# {*}.property_mydata = "3 4 5 6 7 8";
# {atomno < 4}.xyz = array({3 4 5},{4 5 6},{5 6 7})

# code optimization for within() and setAtomBits()

# more export generator classes

# bug fix: unitcell missing some lines when axes turned off

# -----------------------------------------------------------------------------

#version=11.3.30

# new feature: adds H/Br/Cl/I/C logic to aromatic bond assignments
# new feature: adds Oxygen/Sulfur logic to aromatic bond assignments
# new feature: adds Nitrogen logic to aromatic bond assignments
# bug fix: menu for UNITCELL 

# new feature: PovrayExporter (pim schravendijk <pimlists@googlemail.com>)

# -----------------------------------------------------------------------------

#version=11.3.29

# new feature: aromaticSingle and aromaticDouble bond order options
# new feature: "smartaromatic" bonds # turned off with "smartAromatic = false"
# new feature: calculate aromatic    # calculates reasonable aromatic double/single alternation.   
# new feature: reset aromatic        # sets all aromaticDouble and aromaticSingle back to aromatic
# new feature: select ISAROMATIC     # selects aromatic atoms
# new feature: MOL reader recognizes bond types 4,5,6,7

# new feature: isosurface/mo "squared"

# new feature: fully generalized bond order "partial n.m"
#   n = number of lines, up to 5
#   m = binary mask for dottedness, up to 31 (0x1F)
#         00001  first line of bond dotted
#         00010  second line of bond dotted
#         00011  first and second line of bond dotted, etc.    

# new feature: connect may use numeric bond orders, including "partial n.m"

# new feature: preliminary work on functionalized state
# new feature: global/local functions (to applet, for instance
#   in general, functions are global -- common to all applets.
#   first-character "_" indicates this function is a LOCAL function, private to this applet.

# -----------------------------------------------------------------------------

#version=11.3.28

# critical bug fix for color command not coloring objects properly
# new feature: bondOrders 2.5 and -2.5  PartialTriple and partialTriple2

# -----------------------------------------------------------------------------

#version=11.3.27

# critical bug fix for functions not returning values
# bug fix for atomarray[i] not selecting properly
# bug fix for write not working with VAR
# bug fix for application not accepting pastes into the
#   console consisting of multiple lines
# bug fix for bondOrder command not properly treating 4.0 or 0.5
# bug fix for decimals not represented properly in error messages 

# -----------------------------------------------------------------------------

#version=11.3.26

# new feature: _1 parameter for "first atom" in second expression of connect:
#   connect 3.0 (_H and connected(_N) (_O and not within(chain,_1)) hbond 
# new feature: better reporting of PMESH file format errors 

# code cleanup: pmesh moved to shapespecial; privatized

# bug fix within(chain,xxx) not working
# bug fix for() as first command in script or line
# bug fix we were not exporting error free xhtml 1.1.
# bug fix for WebPageMaker not writing files
# bug fix for PAUSE causes app to hang -- this is a reversion of use of SwingUtilities.invokeLater(),
#  which actually will not work in ScriptWindow. We need the direct execution in
#  order to avoid the event queue from stopping itself.

# -----------------------------------------------------------------------------

#version=11.3.25

# bug fix compiler not recognizing "axes =" or "measures = "
# bug fix for WebPageMaker creating uncompressed PNG
# bug fix for WebPageMaker not stripping \ in load file names

# -----------------------------------------------------------------------------

#version=11.3.24

# critical bug fix for 11.3.23 compiler not recognizing line endings
# bug fix for show state for draw in multi-model environment
# bug fix? for background model not available for multiple frame range (e.g. frame 2.0) or after invalid frame number
#
# new feature: within(distance,isWithinAllModels,atomExpression)
#
# allows finding atoms within a specified distance of other atoms in OTHER models:
#
#   select within(5.0,true,model=2.1)  # TRUE indicates we should check all models
#   select within(5.0,false,model=2.1) # FALSE -- only model 2.1
#   select within(5.0,model=2.1)      # default is FALSE

# -----------------------------------------------------------------------------

#version=11.3.23

# VERSION full script flow control support:

# if / else if / else / end if
# for / end for
# while / end while
# 
# var i = 4
# if (i = 3)
#   print "i=3"
# else if (i = 4)
#   print "i=4"
# else if (i = 5)
#   print "i=5"
# end if
#
# var i = 5
# while ( i > 0)
# 	print "atom " + i + " " + {atomno=i}.ident + " is at " + {atomno=i}.xyz
# 	i = i - 1
# end while
#
# n = {*}.size
# for (i = 1;    i <= n; i = i + 1)
# for (j = i + 1;j <= n; j = j + 1)
# 
# 	var dist = {atomno=i}.distance({atomno=j})
# 
# 	if (dist < 1.77)
# 		 print "i-j: " + i + "," + j + " " + dist%2
# 		 measure {atomno=i} {atomno=j}
# 	endif
# 
# end for
# end for
#
# var i = 4
# while ( i > 0)
# 	print "in while: i="+i
#	if (i = 2);print "i is 2";endif
#	i = i - 1
# end while
#
#

# -----------------------------------------------------------------------------

#version=11.3.22

# Changes to webexport package only
#	New Features: textboxes for entry of author name and title for browser window
#		persistence across launches of authorname and applet size
#		automatic gzip of large structure/quantum files.
#	Bug? fix: update the page templates to XHTML 1.1
#	Minor fixes to instruction .html files.

# tweak: using "var" keyword prevents display of global variable value 

# -----------------------------------------------------------------------------

#version=11.3.21

#
# bug fix: isosurface of MOs not properly displaying color in saved state
# bug fix: state saving of @ definitions has extra = sign.
#
# new feature: fully functional user-defined functions:
#
# MACROS (no parameters)
#
# function mymacro
# 	background red
# 	color atoms blue
# end function
# 
# function mymacro2
# 	background black
# 	color atoms cpk
# end function
# 
# background white
# delay 2
# 
# mymacro
# 
# delay 2
# 
# mymacro2
# 
#
# SUBROUTINES (parameters, but no return)
#
# function drawline(id,a,b)
#   var x = script("draw line"+ id + " {atomno=" + a + "} {atomno=" + b + "}")
# end function
#
# drawline(1,3,5)
# drawline(2,10,12)
#
#
# FUNCTIONS (parameters and returns)
#
# function d(a,b)
#	return a.distance(b)
# end function
# 
# x = d({atomno=3},{atomno=4})
# print x
#
# SHOW AND WRITE:
#
# show functions
# 
# write functions macros.spt
#

# -----------------------------------------------------------------------------

#version=11.3.20

# bug fix for arrows way too fat (introduced in 11.3.19) :(

# -----------------------------------------------------------------------------

#version=11.3.19

# bug fix: critical arrow fix of 11.3.17 for 2-point arrows
# bug fix: write PNG default was 0 compression. -q flag was OK for setting 0-9
# bug fix: ragged arrow tip 

# -----------------------------------------------------------------------------

#version=11.3.18

# critical bug fix for 11.3.17 in regard to serialization of arrays
# also introduces
#
#  reset ALL  # resets all user-created variables
#
# also "exitJmol" typed into the script window for the application does that.
#

# -----------------------------------------------------------------------------

#version=11.3.17

# bug fix: problem with unescaping comma-separated point strings "{1,2,3}" as a point.
# bug fix: drawn arrows scale improperly when zooming; arrow heads off-kilter

# new feature: set defaultDrawArrowScale # 0.5 initially
# Drawn arrows now have a head size that can be set and a dimension that
# scales with the model, so arrow head:atom size ratio remains constant
  
#
# new feature: setting Jmol,Rasmol,Shapely,Amino,Roygb,Rwb
# color schemes makes those colors the default colors for these schemes. 

# rename byResidue_jmol --> byResidue_shapely
# rename byResidue_rasmol --> byResidue_amino

# new feature: array variables saved as arrays
# prior to 11.3.17, you could not do:
# 
# x = "this is a test".split(" ")
# y = x[3]
#
# because x was only saved as a string, not an array
# now x is saved as an array, so this is no problem.
#
# new feature Jmol math point(x,y,z) function
#
# point(a,b,c) or point("{x,y,z}")
#
# x = point(y[3], y[6], y[2])
# x = point("{2,3,5}")
#
# needed because, with simple numbers, just
#
# x = {3.0,4.0,5.0} 
#
# works, but 
#
#  x = {r,g,b}
#
# does(did) not.
#
# new feature: Jmol math array element assignment:
#
# a = "2,3,4,5".split(",")
#
# a[3] = "now the 4 becomes this phrase"
# a[a[2]] = "not any more; now it's this"
# a[0] = "setting the final element"
# a[6] = "expanding the array"
# print a
#
# 2
# 3
# not any more; now it's this
# setting the final element
# 
# expanding the array
#
# works with strings as well:
#
# a = "this is a test"
# a[8] = " not"  
# print a
# >> a = "this is not a test"
#
# new feature: Jmol math x = array(a,b,,,,)
#
# x = array(3,4,5,6)
# print x[3]
# >> 5
#

# new feature: Jmol math plane(x,y,z,w) function
#
# plane(a,b,c,d) or plane("{x,y,z,w}")
# or through three points:
# plane({atomExprOrPoint},{atomExprOrPoint},{atomExprOrPoint})
# or through three points with a reference point
# plane({atomExprOrPoint},{atomExprOrPoint},{atomExprOrPoint},{atomExprOrPoint})
#
# x = plane(y[3], y[6], y[2], 3.0)
# x = plane("{2,3,5,4}")
# x = plane({_H}[1],{_H}[2],{_H}[3],{_C}[1])
# new feature: print command prints a variable expression
#
# print x
# print x * 3
# print x[4] + x[3]
# print x.split(" ")[2][0]

# new feature: aPlane.distance({some atoms})

# new feature: someArray.add("string") adds string to right of each item
# new feature: someArray.sub("string") adds string to left of each item

# colorManager clean-up

# -----------------------------------------------------------------------------

#version=11.3.16

# bug fix: Eval RPN processor for list[n] addition operator not doing selection
 
# new feature: MOPAC mgf file UHF orbital reading -- preliminary only

# new feature: byElement and byResidue color schemes allow 
# customized element and residue coloring schemes. 
# built-in include: byElement_Jmol, byElement_Rasmol,
# byResidue_Jmol (shapely) and byResidue_Rasmol (amino) 
# with abbreviations byElement == byElementJmol; byResidue == byResidue_Jmol
# color atoms "byresidue_Jmol"
# 
# Users can set up their own byElement and byResidue color schemes
# simply by preficing a name with "byElement" or "byResidue":
#
# color "byElement_Mine=[x......] [x......] [x......] ..."
#                       0(unknown)    1(H)    2(He) ...
#
# then:
#
# color atoms "byElement_Mine"
#
# RANGE min and max are ignored for byElement and byResidue schemes,
# and there is no scaling done ever, so effectively these prefixes
# make the correlated value a simple index into the array.
# This is what one would want for something that should be a given 
# for a specific element or residue
# 
# Residue indexes in order correspond to the groupID of an atom:
#
#    0  noGroup, 
#    1  ALA, ARG, ASN, ASP, CYS,
#    6  GLN, GLU, GLY, HIS, ILE,
#   11  LEU, LYS, MET, PHE, PRO,
#   16  SER, THR, TRP, TYR, VAL,
#   21  ASX, GLX, UNK,
#   24  A, +A, G, +G, I, +I,
#   30  C, +C, T, +T, U, +U
#
# so this opens the door to user-created residue coloring schemes.
#
# color "byResidue_Mine=[x......] [x......]..."
#                       nogroup   ALA    ...
#
# then 
#
# color cartoons "byResidue_Mine"

# -----------------------------------------------------------------------------

#version=11.3.15

# new feature: fully customizable popup menu -- see file jmol.mnu
#
#   load menu jmol.mnu
#
# applet parameter  param=menuFile value="jmol.mnu"
#
# application parameter -m filename
#
# mostly untested
#
# new feature: show menu
# new feature: getProperty menu
#
# These deliver the current menu (as translated) in jmol.mnu format

# -----------------------------------------------------------------------------

#version=11.3.14

# new feature: fully customizable popup menu -- see file jmol.mnu
#
#   load menu jmol.mnu
#
# applet parameter  param=menuFile value="jmol.mnu"
#
# largely untested


# bug fix: HDO not recognized as "water" 
# bug fix: rotateSelected MOLECULAR not around {0 0 0}
# bug fix: -g ignored on -n option, even if -w is present
# bug fix: unknown color palette could cause error

# new feature: %l atomic element number

# new feature: APPLICATION -q (quality) option 
# new feature: lcaoCartoon, mo, isosurface, pmesh: color [translucent [n]|opaque] [colors...]

# adjustment: setting JPG default quality to 75, not 100

# new feature: {r,g,b} can be used in place of [r,g,b] for indicating color, 
# allowing programmatic color definition:
#
#   r = 255; g = 255; b = 0;
#   background {@r,@g,@b}

# new feature: expanded color command for properties
#
#   color atoms property partialcharge "rwb" range -1.0 1.0
#
# and reverse with range inverted:
#
#   color atoms property partialcharge "rwb" range 1.0 -1.0

# new feature: unlimited user-defined color schemes:
#
#   select none;
#   color "myname=[xff00ff] [xffff00] [xff00ff]"
#
# colors must be [xRRGGBB] format for this one

# new feature: fully remappable isosurface using COLOR command:
#  
#   isosurface s1 molecular map mep
#   color $s1 "bwr"
#   color $s1 "rwb" range -0.2 0.2


# APPLICATION adjustment to console window scaling/size

# -----------------------------------------------------------------------------

#version=11.3.13

# this version introduces fully customizable color schemes
#
# new feature: .color for numbers and points delivers the
# color associated with a given value in the current 
# coloring or propertyColorScheme.
# (some number).color gives a color triple as a point {x y z}
# {x y z}.color gives a hexadecimal string [xRRGGBB]
#
#
#  select atomno=3;color yellow
#  x = {atomno=3}.color # gives {255.0, 255.0, 0.0}
#  x = {atomno=3}.color.color # gives "[xFFFF00]"
#
#  set propertyColorScheme "bwr"
#  x = {atomno=3}.partialcharge.color
#
 
# new feature: color ["schemeName"] RANGE [min] [max]
# allows setting of color range and scheme so that color
# values can be determined. This would be used for making
# a color key using positionable ECHO text boxes:
#
#  color "bwr" absolute -0.1 0.1 
#  x = (0.01).color # gives the point-color associated with that number
#  set echo myecho 100 100 # position
#  echo "    " # just some space
#  color echo @x; background echo @x  # color this bar the color of 0.01
#
# new feature: show colorscheme "schemeName"
# delivers "colorscheme = " followed by a string of color values.
# without the scheme name, returns the current colorscheme listing
# For example: show colorscheme "low" delivers:
#
# colorscheme = [xff0000] [xff2000] [xff4000] [xff6000] [xff8000] [xffa000] [xffc000] [xffe000] [xfff000] [xffff00] [xf0f000]
#
# setting an array variable to the color values:
#
#  list = script("show colorscheme \"low\"")[15][0].split(" ") 
#
# new feature: set userColorScheme [list of color names]
# creates a colorscheme referred to as "user" and its reverse, "resu"
# based on a list of color values:
#
#  set userColorScheme red green [x00FFFF] blue
#  color atoms property partialcharge "user" range -1.0 1.0

# -----------------------------------------------------------------------------

#version=11.3.12

# bug fix: zoomTo 100%
# bug fix: set language fr  needs quotes but should not
# bug fix: load multiple files inline causes null pointer exception
#
# new feature: APPLICATION:  File|Export...|Export to Web Page

# -----------------------------------------------------------------------------

#version=11.3.11

# bug fix: lcaoCartoon for sp center requires "sp2" not "sp"
# bug fix: mo not showing titles
#
# new feature: lcaoCartoon rotate [x|y|z] degrees create "px"
# new feature: adds Jaguar PLT plot file reader for isosurface
#   isosurface sign red blue "myfile.plt"

# -----------------------------------------------------------------------------

#version=11.3.10

# bug fix: script window using swing thread start not from event queue
# bug fix: state of multi-polymer protein cannot be restored
# bug fix: dots nn% not operational
# bug fix: molecular dipole and multiple frames
#
# new feature: molecular dipole for Gaussian files
#
# new feature: simple calculation of approximate dipole moment from charge distributions.
#    dipole molecular # from file value if provided
#    dipole calculate molecular # from "center of gravity" of charges calculation
#
# new feature: show frame # based on models in the current frame set, displays information about frames
#
# new feature: application option for web page export
#
# new feature: write JPG n "filename" # where n is the quality (<=100)

# -----------------------------------------------------------------------------

#version=11.3.9

# bug fix for isosurface mapping of planes by MEP (see 11.3.2)

# new feature: symmetryRange: load "someFile" {mmm nnn 1|0} range x.x   where x.x is a maximum distance away from closest atom in the base cell
# new feature: synchronization of applets using JavaScript 
# new feature: synchronization of applets using Jmol scripts:
#
# synchronize .|>|*|appletId[syncId] ON|OFF|SLAVE|command
#
# The synchronize (sync) command allows two or more applets to be synchronized in
# terms of orientation. Move one with the mouse, and the other moves as well.
# In addition, the sync command allows ANY command to be sent to one or more
# other applets directly, without the intervention of JavaScript.
#
# Applets are identified by appletId (jmolApplet0, for instance)
# along with an optional bracketed sync group identifier -- generally a random 
# number that identifies the page containing the controlling applet. If the 
# syncId is not given, then the ID for the page containing the controlling applet
# is used. This feature is important for cross-frame synchronization only. 
#
#
# .          this applet only
# >          all applets except this one
# *          all applets
# appletId   id of a specific applet
# [syncId]   (optional) a unique string of digits -- brackets included
#
# ON         sync as driver (default)
# OFF        turn sync off
# SLAVE      turn sync on, but not as driver
# command    command to send
#
# for example:
#
# sync *   # synchronize all applets as drivers
# sync jmolApplet1  #syncs this applet with jmolApplet1 both as drivers
# sync > "set echo top left;echo OK"  # sends OK to top left of all OTHER applets
# sync jmolApplet2[254678942] OFF  # turns sync off for an applet ON A DIFFERENT PAGE
#                                  # or in a different FRAME
# sync . OFF # turns sync off for this applet
#
# new Jmol.js feature: jmolGetSyncId(); jmolSetSyncId(id);
# allows control over the sync ID via javascript. jmolSetSyncId(id)
# should be called prior to jmolApplet() and should incorporate some sort of
# random digits and no space characters. (A number is good.)
# This should only be necessary for multi-frame pages. 

# -----------------------------------------------------------------------------

#version=11.3.8

# bug fix: isosurface color -- not operating for some isosurface types
# bug fix: isosurface "xxxx.cube" -- not assigning proper default colors
# bug fix: gamess reader MO fix
# bug fix: state save of STRUCTURE misplaced

# feature: adds adjustable scale for unitcell axes

# -----------------------------------------------------------------------------

#version=11.3.7

# bug fix: reading of JVXL files for orbitals loses phase information 
# bug fix: ACD/Labs nonstandard cml "builtin" property reader 
# bug fix: isosurface interior cavity was not setting meshdata surfaceSet null
# bug fix: select dna can select rna if chain is mixed hybrid dna+rna

# -----------------------------------------------------------------------------

#version=11.3.6

# bug fix: inappropriate draw pick spinning for single point
# bug fix: dots not available in multimodel mode
# bug fix: multiple isosurface cavities incorrect in a multimodel environment
# bug fix: isosurface cavity not filled completely
# bug fix: nested ifs can cause last endif to throw error
# bug fix: compiler bug working with very small real numbers 
# bug fix: Support for mol2 files with blank line after comments.

# -----------------------------------------------------------------------------

#version=11.3.5

# bug fix: ACD/Labs nonstandard cml "builtin" property reader 
#   note that xmlReader (SAX reader) is now set to ignore all DOCTYPE declarations
# bug fix: odydata fix for files with \r\n for line ending
# bug fix for PDB remediated T/DT difference of C5M/C7
# bug fix: set spin X was case-selective
# bug fix: echo text not re-orienting on resize of applet or application
# bug fix: multiple isosurface cavities in a multimodel environment
# bug fix: missing set picking ident in popup window
# bug fix: popup menu set picking label not working

# -----------------------------------------------------------------------------

#version=11.3.4

# rough export of VRML using
# 
#    write VRML "myfile.wrl"
#
# includes colored balls and sticks; uncolored isosurfaces

# -----------------------------------------------------------------------------

#version=11.3.3

# bug fix pmesh not working
# bug fix for state after calculate surface, calculate hbonds, configuration, dynamic variable definition in multimodel environment (ModelSet::addStateScript) 

# NEW FEATURES from the 2007 Gordon Research Conference on Visualization in Science and Education: 
#
# internal dataFrame concept
#
# new command: ramachandran
#
# new command: quaternion [w x y z] [derivative]
#
# TODO: frame menu
# TODO: write VMRL

# preliminary Maya export -- sets the stage for any number of export frameworks.
 
# -----------------------------------------------------------------------------

#version=11.3.2

# bug fix: set picking label
# bug fix: minus-sign "fix" in 11.3.1 broke all {x -y z} notation
# bug fix: state for phased atomic orbitals does not preserve red/blue color
# bug fix: mo opaque causing "invalid argument" when no MOs
# bug fix: isosurface cavity molecular caused exception
# feature: adds isosurface capability to map MO and MEP data onto planes

# -----------------------------------------------------------------------------

#version=11.3.1

# bug fix: debugscript on;center 3-5; "-" missing
# bug fix: zoomTo (5-7) read as "5 to -7"
# bug fix: move with time < 0.03 seconds causes molecule to disappear
# bug fix: hover interruption 
# bug fix: image offsets in creating JPG image if model has been moved by CTRL-ALT-LEFT drag
 
# -----------------------------------------------------------------------------

#version=11.3.0

# perspectiveModel 11 default
# bug fix for 3D text echo staying in window
# bug fix for draw text+translucency
# bug fix for draw text not hovering for points
# bug fix for multiple draw objects in show state
# bug fix for spin save reversed direction
# bug fix for CdkAdapter not having auxiliaryInfo data
#
# adds the ability to find the coordinate of a specific 
#   draw object vertex  using $objName[vertexId] as in 
#   draw p perp plane (atomno=1) (atomno=2)
#   x = $p[3]
#   draw pt1 $p[1]


# -----------------------------------------------------------------------------

#version=11.1.49

# bug fix for Gaussian file reader fix for very large negative MO coefficients
# bug fix for move not releasing isInMotion
# bug fix for x = "testing"[0], x = "testing"[-1], "testing".split("t")[0], and "testing".split("t")[-1]
# bug fix for select {*}[0], {*}[-1], etc., which now counts from the end back
# adds proper indents on debugscript for if/else/endif
# allows "jmolscript:" for embedded scripts and callbacks

# -----------------------------------------------------------------------------

#version=11.1.48

# bug fix for gamess reader MO fix
# bug fix for mopac GRAPHF file fix (resolver thought MOL)
# bug fix for lcaocartoon "lp" fix for AX3E and AX2E

# -----------------------------------------------------------------------------

#version=11.1.47

# bug fix for compound document reader not reading enough short segment pointers
# bug fix for Spartan reader not recognizing 5D orbital problem
# bug fix for animation skipping frames

# -----------------------------------------------------------------------------

#version=11.1.46

# bug fix for Jvxl.jar standalone application not having complete set of class files (jvxl) 
# adds inline help support for Jmol application running under Java 6 (Java 1.6.xx)
# bug fix for inappropriate pre-JVM12 menu items not disabled

# -----------------------------------------------------------------------------

#version=11.1.45

# bug fix for animFrameCallback not indicating animation direction
# bug fix for help not working and help URL not displaying (app)
# bug fix for app not writing state from File...Export menu (app)
# bug fix for retaining the last-saved file type selected for Image export (app)
# bug fix for "wait" not recognizing if it is just a syntax check (app)

# -----------------------------------------------------------------------------

#version=11.1.44

# bug fix for inability to specify fractional coordinates: adds fx, fy, fz as
#   select fx < 0.5 and fy < 0.5 and fz < 0.5
#   aveFracX = {molecule=1}.fx
# bug fix for inability to use x,y,z,fx,fy,fz with cartesian points
# bug fix for select BONDS ({...}) not preserved in state
# bug fix for geosurface not always restored from saved state
# bug fix for strandcount saved explicitly forces bioshape load

# -----------------------------------------------------------------------------

#version=11.1.43

# bug fix for labels mysteriously disappearing. Also probably taking up HUGE amounts of hashtable space.
# bug fix for hydrogen bond calculation with incomplete nucleic acid definitions.
# bug fix for "set picking draw" crashing Jmol
# bug fix for strandCount not carrying over to meshRibbon
# bug fix for geosurface/dots save/restore state exception
# bug fix for save state using "measurements off" instead of "set measurements off"

# -----------------------------------------------------------------------------

#version=11.1.42

# bug fix for lack of updating of certain variable predefined expressions
# bug fix for smiles nonfunctional

# bug fix for load append and structure commands
# bug fix for load files losing structure and cartoons
# bug fix for multiple frames displayed does not show Select...Elements menu
# bug fix for select @x not functioning where x = {atom expression} or x = "atom expression"
# bug fix for {atom expression}.ident nonfunctional

# code refactoring Frame --> ModelSet and ModelLoader
# code refactoring modelframe --> modelset package
# code refactoring shapebio --> shapebio + molsetbio packages
# code refactoring dissociates Mps.MpsShape from Mps as BioShape 
# code refactoring removes Mps.Mpsmodel
# code refactoring Mps --> BioShapeCollection
# code refactoring greatly simplifies BioShapeCollection subclasses

# -----------------------------------------------------------------------------

#version=11.1.41

# bug fix for load with explicit spacegroup not respecting normalization choice
# bug fix for symop=nijk selecting base atoms when not appropriate
# bug fix for select specialposition non-functional
# bug fix for adding atoms but mads[] going stale
# slight redefinition of "special position" 
# bug fix for structure loss on load append. (structure is supposed to be recalculated).
# adds language switching for Open / Save dialog boxes and full menuing system in Jmol application
# adds "structure" command -- structure [helix|sheet|turn|none] (atom expression)
# adds "save/restore structure" command

# -----------------------------------------------------------------------------

#version=11.1.40

# bug fix for backgroundModel and save state 
# bug fix for load append with spacegroups causing atoms to be repositioned
# bug fix for anim playrev in loop mode causing animation to stall

# -----------------------------------------------------------------------------

#version=11.1.39

# several bug fixes:
#
#  bug fix for mo data misreading in smol files
#  bug fix for lcaoCartoon "s" giving incomplete spheres
#  bug fix for select symop=3555 not giving proper atoms when load "" {444 666 0}
#  bug fix for PDB files not supplying information about residues for the popup menu.
#  bug fix in frame range 1.0 when file 1 has only one model.

# -----------------------------------------------------------------------------

#version=11.1.38

# bug fix for opaque triangles missing one pixel on right side when translucent objects are present.
# bug fix for label alignments sometimes not being saved properly in the state
# bug fix for animFrameCallback giving multiple callbacks -- still there, but identified now
#    in terms of whether animation is on or not in the 7th parameter being 1 or 0:
#
# function animFrameCallback(app,frame,fileno,modelno,firstno,lastno,isRunning){...}

# -----------------------------------------------------------------------------

#version=11.1.37

# fixes bugs in draw and unicode label state definitions
# adds simplistic <sub></sub> <sup></sup> to text, including echo, label, hover, etc.
# fixes popup menu to better deal with multiple file context
# update of Turkish translation

# -----------------------------------------------------------------------------

#version=11.1.36

# build: renames applet files JmolApplet0*.jar and JmolAppletSigned0*.jar
#
# bug fixes for isosurface in multi-file environment
#
# bug fix and additional work in relation to translations
# 
# zoomTo (atom expression) 0
# 
# with options 
# 
# zoomTo (atom expression) 0+n
# zoomTo (atom expression) 0-n
# zoomTo (atom expression) 0*n
# zoomTo (atom expression) 0/n
# 
# also 
# 
# moveTo timeSec {x y z w} (atom expression) 0 [zoom factor]
# and
# moveTo timeSec {x y z w} 0 transX transY (atom expression) 0 [zoom factor]
# 
# where [zoom factor] is x, where x > 0
# or
# [0] [[+ | - | * | /] x]
#
#
# app fix for Edit...preferences not properly refreshing for axes and boundbox

# -----------------------------------------------------------------------------

#version=11.1.35

# fix for x = {...}.resno and {...}.groupID
# fix for select resno=-1
# first version of pt_BR translation

# -----------------------------------------------------------------------------

#version=11.1.34

# language submenu

# -----------------------------------------------------------------------------

#version=11.1.33

# bug fixes -- draw state, menu not updating, language submenu

# -----------------------------------------------------------------------------

#version=11.1.32

# adds capability to define a property for selected atoms:
#
#  select xxx
#  property_x = n.m

# -----------------------------------------------------------------------------

#version=11.1.31

# adds capability to read data from selected fields (white-space delimited columns) in a file
# 
# propertyDataField = 0  # no fields -- just read tokens
# propertyDataField = 2  # data are in field 2 (second from the left)
# propertyAtomNumberField = 1 # data must match atomNo in field 1 and will be in 
#                           the field specified by propertyDataField

# -----------------------------------------------------------------------------

#version=11.1.30

# full support for switching languages, including a new "language" menu item
#
# Jmol.js:  
#
# jmolSetCallback("language", "de")
#
# Jmol scripting:
#
# language = "de"
#
# Menu:
#
# new language submenu with checkboxes.
#
# allows for efficient specific file reader options for the applet (particularly)
#
# adds _spinning variable
#
# adds LOAD xxx::myfile   xxx indicating file type xyz, mol, etc.
#
# not important generally.
#
# adds PQR reader option, at least for PDB2PQR generated output
#
# better spin control during zoomTo and moveTo
# spinning now detects that a zoomTo or moveTo operation is occurring
# or the user is manipulating the model with the mouse, and pauses 1 second
# for that operation to complete before resuming spinning
# 
# hover now is turned off during spinning or user manipulation of the model
# 
# zoomTo and moveTo the same location changed to no time delay

# -----------------------------------------------------------------------------

#version=11.1.29

# code: totally reorganized isosurface code; new org/jmol/jvxl packages
#
# adds  (1) isosurface functionxy "file:data.dat" ...
# adds  (2) isosurface functionxy "functionName" {x0 y0 z0} {-ni ...} ...
# adds  (3) isosurface functionxy "functionName" {x0 y0 z0} {-ni ...}{-nj ...} ...
#
# (1) "file:" allows reading of xy data from files for graphing f(x,y)
# (2) ni<0 indicates JavaScript functionName will return a single string that
#     should be parsed for numeric data.
# (3) ni<0, nj<0 indicates that JavaScript will fill the fourth parameter
#     of the function with an array of f[nX][nY] data values:
#
# Jmol:
#
#   isosurface s1 functionXY "xyData" {-2 -2 -2} {21 0.1 0 0} {21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (slow)
#
# function xyData(app, x, y) {
#   return func(x, y)
# }
#
# Jmol:
#
#   isosurface s2 functionXY "xyDataAsString" {-2 -2 -2} {-21 0.1 0 0} {21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (much faster)
#
# function xyDataAsString(app, nX, nY) {
#   var s
#   for (var i = 0; i < nX; i++)
#     for (var j = 0; j < nY; j++)
#       s += "x_"+i+"\ty_"+j+"\t"+func(i,j)+"\n"
#
#  //non-numeric formatting allowed but not necessary
#
#   return s
# }
#
# Jmol:
#
#   isosurface s3 functionXY "xyDataAsArray" {-2 -2 -2} {-21 0.1 0 0} {-21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (very fast)
#
# function xyDataAsArray(app, nX, nY, fxy) {
#   for (var i = 0; i < nX; i++)
#     for (var j = 0; j < nY; j++)
#       fxy[i][j] = func(i,j)
# }
#
# (2) and (3) are very fast; (1) is the original method, but it is slow.
#
# MAYSCRIPT expanded
#
# for the Wiki or any application where absolutely no JavaScript
# is to be allowed, simply remove the MAYSCRIPT parameter, which
# now covers all aspects of JavaScript interaction from within Jmol
#
#
# adds   applySymmetryToBonds  (default: FALSE)
#
# applySymmetryToBonds 
#
# When set TRUE, this flag instructs Jmol when applying symmetry
# to atoms, as in "load xxx.cif {1 1 1}", to also apply symmetry
# to the bonds indicated in the file. The flag is useful when 
# normal Jmol autobonding would not properly connect atoms, but 
# the model is "molecular" -- the base atom coordinates are correct
# for whole molecules. The flag should NOT be used in cases where
# the application of symmetry operations creates new bonds that 
# were not present in the original set, as for quartz.cif, where
# there is only one bond initially, and after applying symmetry
# new bonds are created that are between atoms that were created
# using two different symmetry operations. 
#
# adds isosurface HOMO/LUMO [+/- n]
#
# better isosurface plane rendering, especially in regard to meshes
# bug fix in isosurface contour -n going WAY back to before 10.9.60
# refactoring of all isosurface-related classes
# support for Spartan MO HOMO
#
# adds isosurface POCKET [cavity] sasurface
# adds isosurface INTERIOR [cavity] sasurface
#
# adds load TRAJECTORY -- for a single file with multiple models all with
# the same number of atoms. Atom locations can also be updated on the
# fly using the data statement. 
#
# adds TRAJECTORY n command -- like FRAME or MODEL, but never more
# than one model at a time displayed, because there is only one set
# of atoms. 
#
# adds script: option for callbacks set from within Jmol. That is, callbacks
# can either be to host page JavaScript functions or to Jmol scripts. This 
# will allow interactive sessions without external JavaScript.
#   
# set pickcallback "script: script doCallback.spt"
#
# adds resizeCallback because certain positioning of echos and sizing of the 
# structure may require method intervention after the resizing   
#
# adds translucency for echo and hover, both text and backgrounds
#
# adds echo script to defined state
#
# adds hourglass cursor during MO/Isosurface operations
#
# fixes inoperative "set pickingstyle measures on"

# -----------------------------------------------------------------------------

#version=11.1.28 

# adds
#
# a = script("some script command")
# a = javascript("some javascript")
#
# putting output into a from commands such as "show" or "getProperty", for instance.
#
# reinstates tempManager properly.
#
# adds support for CAChe CSF files with MOPAC (AM1, PM3, etc.),
# Density Functional, and Extended Huckel Gaussian/Slater-based molecular orbitals.
#
# CHANGES DEFAULT RENDERING FOR MOLECULAR ORBITALS TO: MESH NOFILL FRONTONLY
#
# adds MOPAC 2007 graphf output reader (gpt2 files, MOPAC molecular orbitals)
# based on the VERY latest version (not released yet), which includes
# "MOPAC-Graphical data" on the first line, character index 6.
#
# adds 
#
#  mo HOMO [+/- n]
#  mo LUMO [+/- n]
#
# fixes bugs found by FindBugs:
#
# labels:  default z setting for labels (set labelFront, set labelGroup, set labelAtom) 
#          was not being recorded properly
# move:    with slab or zoom was doing integer math
# GhemicalMMReader -- was incorrectly assigning aromatic to bond type 4 via fall-through of switch
#
# adds xodydata reading of "boundary" as unitcell
# enhances default axis rendering for axes unitcell
#
# adds expanded isosurface-related commands:
#
#  draw list
#  isosurface list
#  lcaocartoon list
#  (mo list) -- not particularly useful
#  pmesh list
#
# Listing gives id, number of vertices, number of polygons, visibility,
# and title (usually the command that was given that created this isosurface)
#
# CHANGED BEHAVIOR FOR ISOSURFACE COMMAND WITHOUT ID INDICATED:
#
# Now if no ID is indicated, the previous ID is used for all commands 
# EXCEPT "isosurface delete", which deletes all isosurfaces. 
#
# This is a change from Jmol 10.2 and 11.0, where if you leave
# off the ID, a new isosurface is created.
#
# This was a needed change to prevent unwanted multiple isosurfaces.
#
# CHANGED BEHAVIOR FOR ISOSURFACE DEFAULT COLOR
#
# The default isosurface color no longer changes shade among 5 possible shades.
# That was necessary only because it was easy to mistakenly make multiple
# isosurfaces that otherwise would look the same. 

# -----------------------------------------------------------------------------

#version=11.1.27

# fixes two state bugs: 
# 1) dots/geosurface not being saved properly in state
# 2) animation parameters not being saved properly in state

# -----------------------------------------------------------------------------

#version=11.1.26

# fixes two nasty bugs relating to isosurfaces and JVXL files. 
#  -- JVXL files created from molecular orbitals will show up with no color
#     in 11.1.0 - 11.1.25 because of a missing number in the definition line :(
#  -- JVXL files created from molecular orbitals will show unwanted cross-over
#     surfaces from + to -. 

# -----------------------------------------------------------------------------

#version=11.1.25

# --fully dissociates geosurface from dots; 
# --allows coloring and transparency of geosurface
#   similarly to the way stars are colored

# -----------------------------------------------------------------------------

#version=11.1.24

# refactored Geodesic3D, Dots, DotsRenderer
# independent dots/geosurface
#
# isosurface CAVITY 

# -----------------------------------------------------------------------------

#version=11.1.23

# fixes a number of bugs, some critical
#
# adds isosurface CAVITY x.xx -- a new way to depict the cavities of 
# a molecule in terms of color. 

# -----------------------------------------------------------------------------

#version=11.1.21/22

# adds 
#
# load file "=xxxx" and set loadFormat "http://....../%FILE.....
# load files .....  # just a cleaner version of loading multiple files.
# load append ..... # APPENDS the file(s) or model(s) as new frames onto the current set.
# data append ..... # same thing, but inline
#
# isosurface MODEL n
# pmesh MODEL n
# isosurface within x.x (what)
#
# Introduces "real" color translucency 
#
# color xxxx translucent N   
#
# where N is -1 to 9.
#
#                 OR     OR   
# translucent -1               same as Jmol 10.2
# translucent 0.0                opaque
#   through
# translucent 1.0                transparent (invisible)
#
# translucent 2   0.125  32    1/8 translucency (slightly translucent)
# translucent 3   0.25   64    2/8 translucency
# translucent 4   0.375  96    3/8 translucency 
# translucent 5   0.5   128    4/8 translucency (default)
# translucent 6   0.625 160    5/8 translucency 
# translucent 7   0.75  192    6/8 translucency 
# translucent 8   0.825 224    7/8 translucency (very sheer)
# translucent 9   1.00  255    8/8 transparent (invisible)

# -----------------------------------------------------------------------------

#version=11.1.20

# cleans up axes/boundbox/unitcell business
#
# allows for individually colored axes:
#
# color axis1 ... 
# color axis2 ... 
# color axis3 ... 
# color axes ... (of course)
#
# set axis1Color ...
# set axis2Color ...
# set axis3Color ...
# set axesColor ...
#
# and these objects are considered more like background -- 
# colors and sizes persist past file load
#
# to turn on and off without messing with size, just use
#
# showAxes = true
# showBoundBox = true
#
# etc.

# -----------------------------------------------------------------------------

#version=11.1.19  

# allows comparison of user-defined atom properties in SELECT:
#
# select property_myprop < 1e-5; 
#
# and 
#
# x = {carbon}[5].property_test
# x = {carbon}.property_test.min
# x = {carbon}.property_test.max
#
# etc.
#
# This is it! :)

# -----------------------------------------------------------------------------

#version=11.1.18

# introduces user-definable atom properties that can be used
# to color isosurfaces:
#
# x = load("file.dat");
# isosurface variable x   # simple 100% vdw radius mapping
#
# select 1.3
# data "property_myprop @x"
# isosurface property_myprop
#
# allows isosurface mapping of general atom properties:
#
# isosurface sasurface colorscheme bwr map property temperature
#
# adds "bwr" colorscheme as opposed to "rwb", which I think is backward.
#
# isosurface -- now supports APBS (  )
#               molecular electrostatic potential output files
#
# write -- modified to allow unquoted filename in 
#   write isosurface file.name
#
# jvxl 1.0 -- adds ANGSTROMS flag on line with # of atoms (line 3)

# -----------------------------------------------------------------------------

#version=11.1.17

# deprecation of SET
# ------------------
#
# The "SET" command is no longer necessary. Anything that could have
# been set using "SET x .... " can now be set using
#
#  x = ....
#
# This allows for a much cleaner interface because we simply make 
# settings in a normal sort of way:
#
# axes on
# axes = molecular
#
# measures = angstroms
#
# It will take a bit more to make it all consistent, but the idea
# is that there are then some special reserved variables that 
# mean something special when set, like "bondmode"
#
# This build allows for the applet to be "bare-bones" -- only the
# essential classes included in the Jar file; others never included
# or possibly in accompanying jar files, such as, perhaps, JmolPopupMenu.jar,
# JmolNavigation.jar, JmolBio.jar, Jm  olSurface.jar, JmolXtal.jar, etc. 
#
# Then a developer can slim down the download. The minimum is 697K, 
# about 58% of the full package. All that gets you is atoms, bonds, 
# and measures. 

# -----------------------------------------------------------------------------

#version=11.1.16:

# First incompatibility found:
#
# set echo myecho (atomno=3) or (atomno=5)
# 1) adds two new modifiers:
#  .min
#  .max
#
# as in:
#
#  x = {*}.bonds.length.max  #the longest bond length
#  x = {*}.atoms.max         #the last atom
#
# 2) extends find() to sets of lines. For example:
#
#  longLine={*}.bonds.label("%=, %LENGTH").lines.find({*}.bonds.length.max)
#  message @longLine
#  longest = longLine%(longLine.find(",")-1)
#  b = {*}.bonds[longest]
#  select b_set;color bonds yellow
#
# NOTE: _set removed in 11.3.41:
#  select @b;color bonds yellow
#  
# -----------------------------------------------------------------------------

#version=11.1.15:

# APPLICATION: adds undo/redo to a fixed depth of 50 commands
#
# TYPE CONVERSION
#
# We have eight different variable types now:
#    boolean    True/False 
#    integer    0, 1, 2, ....
#    decimal    3.5, 3.25E-3
#    string     "test" "3.5"
#    point      {2.3 3.4 5.6} {0 1/2 1}
#    plane      {0 1 1 0}
#    atomset    {oxygen}
#    bondset    {oxygen}.bonds

# plane and bondset are new; arithmetic operations are not fully developed.

# These can be mixed and matched to good effect. Certain relatively
# intuitive rules apply. Usually the operand on the left sets
# the overall type, allowing for easy type conversion depending upon 
# operand order:
#   int + float:
#     0 + 3.6 ==> 3    (int on left rounds float on right)
#     3.6 + 0 ==> 3.6  (float on left sets result)
#
#   int/float + string:
#     0.0 + "3.5" ==> 3.5 (string converted to float)
#     0 + "3.5"   ==> 3 (string converted to float, then int)
#     "3.5" + 0   ==> "3.50" (integer converted to string)
#     "3.5" + 0.0 ==> "3.50.0" (float converted to string)
#
#     1.0 + {carbon}.xyz     ==> 1 + distance from {0 0 0} to {carbon} center
#     {carbon}.xyz + 1       ==> {carbon} center point offset by {1 1 1}
#
#     x = {carbon}.xyz * {1 0 0} ==> (dot product)
#
#     Now x is the average x coordinate of carbon
#
#  Boolean expressions are a bit different in that the operators 
#  AND, OR, XOR, and NOT all require conversion to boolean UNLESS both
#  operands are atom expressions, in which case these operate directly on the
#  atom sets and return a new atom set, just like in SELECT.
#
#     3 and 0.5  ==> TRUE (both are nonzero)
#     false OR 2.0 ==> true (2.0 is not 0, so it is TRUE)
#     {oxygen} and {molecule=1} ==> all oxygen atoms in the first molecule
#
#     x = ({oxygen} and {molecule=1}).xyz 
#
#     x is now the center point of all oxygen atoms in the first molecule
#
#  In standard math, boolean TRUE evaluates to 1.0; FALSE evaluates to 0.0
#
#     true + 2.0 ==> 3.0 ("TRUE" evaluates to 1.0 in math operations)     
#     2 + true ==> 3 ("TRUE" evaluates to 1.0 and is then turned into an integer)     
#
#
# ATOM EXPRESSION AUTOMATIC DEFINE
#
# When you set a variable to a value, and that value is a point, plane, or atom expression,
# then Jmol automatically registers the result as follows:
#
#  points:
#    x = "{x y z}"
#
#  planes:
#    x = "{x y z w}"
#
#  atom expressions:
#    x = n
#    x_set = "({i j k ...})"
#
# NOTE: "set x" removed in 11.3.40:
# NOTE: _set removed in 11.3.41:
#
#    x = {oxygen}.xyz
#    y = {carbon}.xyz
#    draw @x
#    draw @y
#    draw line1 @x @y
#
#   and
#
#    x = {carbon}[3][5]
#    select @x
#    color green

#    x = {carbon}[3][5]
#    select @x
#    color green

#
#    x = {carbon or oxygen}.bonds
#    select BONDS @x
#    color bonds green

#
# DATA() function and variable option for DATA command
#
# x = data({atomno < 10},"xyz")
# x = data({atomno < 10},"mol")
# x = data({atomno < 10},"pdb")
#
# data "model @x"
#
# write data t.xyz
# write data t.mol
# write data t.pdb
#
#
# Better BITSET implementation 
#
# CHANGE: default string value for a bitset is now the ({n:m})
# string format, which can be used in numerous commands.
#
# To get the count within a string context, just use .size:
#
# x = "number selected is " + {selected}.size
#
# or force integer math:
#
# x = "number selected is " + (0 + {selected})
#
# merges math functions within(), connected(), substructure() into molecular math
#
# adds connected() both for finding atoms and for identifying bonds:
#  xAtoms = connected(3, {carbon})
#  xBonds = connected(1.3,2.5,"single", {carbon} {oxygen})
#
# adds
#  x.atoms
#  to go along with x.bonds   
#
# adds distance({carbon},{oxygen})
# adds angle({carbon}[4],{oxygen}[3], {nitrogen}[2])
#
# angle function accepts from three or four 
# atom expressions or XYZ coordinates and returns a decimal number for
# the distance, angle, or dihedral relating these points. 
# When more than one atom is involved, average positions are used. 
#
# Note that when more than one atom is involved in a set, 
# the following are different:
#
#  x1 = {molecule=1}.distance{molecule=2}
#  x2 = {molecule=1}.xyz - {molecule=2}.xyz
#
#  x1 is a NUMBER that is the "average distance measured 
#     from each molecule 1 atom to the average molecule 2 position"
#  x2 is a point representing the VECTOR from the "average position of molecule 2" 
#     to the "average position of molecule 1"
#
# The following are all equivalent:
#
#  x3 = {molecule=1}.xyz.distance{molecule=2}
#  x4 = 0.0 + ({molecule=1}.xyz - {molecule=2}.xyz)   
#  x5 = ({molecule=1}.xyz - {molecule=2}.xyz).distance{0 0 0}
#  x6 = distance({molecule=1} {molecule=2})
#
#  They are all the distance from the center of molecule 1
#  to the center of molecule 2
#
#
# x = load("filename")
#
# The string data in the file are loaded into the string.
# If the file does not exist, then the string contains the error message.
#
#
# Implements ({i j:k m n}) bitset option across all commands
#
# RESET varName
#
# reset varName  # clears that variable definition
#
#
# "UNSPECIFIED" and "QUADRUPLE" BOND TYPES
#
# An additional bond type is now avaiable: "UNSPECIFIED". 
# This shows up in the MOL2 reader and may be selected for and modified using, for example:
#
#  select connected(unspecified)
#  color bonds red
#
# or
#
#  select connected(unspecified)
#  connect (selected) single modify
#
# In addition, we now can depict quadruple bonds.

# -----------------------------------------------------------------------------

#version=11.1.14:

# DYNAMIC MEASUREMENTS
#
# Now that we can move atoms so easily, we don't want those measurements getting stale.
#
# set dynamicMeasurements
#
# allows measurements to be recalculated on the fly.
#
#
# MEASUREMENT FORMAT STRINGS
#
# Measurement format strings can be set using
#
# measure "format string..."
#
# where the format string may have the following keys:
#
#  %=      1-based index
#  %VALUE  the value of the measurement
#  %UNITS  the units for the measurement
#  %x1     atom property "x" for atom 1 
#  %x2     atom property "x" for atom 2
#  %x3     atom property "x" for atom 3
#  %x4     atom property "x" for atom 4
#
# for example:
#
#  measure "%a1 -- %VALUE %UNITS --- %a2"
#
#
# MATH OPERATOR PRECEDENCE AND PARENTHESES
#
# Jmol 11.1.14 supports full standard operator precedence and parentheses
# in IF, SET, and %{} expressions
#
# degUnsat = ({carbon} * 2 + {nitrogen} + 2 - {hydrogen}) / 2
#
#
# BRACES INDICATE ATOM EXPRESSIONS  
#
# Use {} in IF, SET and %{} for designating atom expressions.
# We are still using () for "embedded expressions" in all other commands.
#
#   nOxygen = {oxygen}
#   xOxygen = {oxygen}.x
#   ptOxygen = {oxygen.xyz}
#
#   a = {oxygen}.temperature
#   message %{{carbon}.x}
#   if {O22}.bondCount > 2;goto ...
#
# but
#
#   draw line1 (atomno=2) (atomno=3)
#
#
# ATOM EXPRESSION ITEM SELECTOR [n]
#
# In SET, IF, and %{ } in MESSAGE and ECHO you can now specify a subset of the 
# atom expression. 
#
#  x = {carbon}[3]  # the third carbon atom
#  x = {carbon}[3][5]  # the third through fifth carbon atoms
#  x = {carbon}[3][0]  # the third through last carbon atoms
#
# This also works in standard select expressions, but using () instead:
#
#  select (carbon)[3]  # the third carbon atom
#
# and anywhere an embedded expression might be found:
#
#  measure ((_C)[1]) ((_C)[2])
#
#
# POINTS IN IF, SET, and %{}
#
# Points in IF, SET, and %{} can be designated using the standard {x y z}
# notation WITHOUT commas. This is because we have to distinguish between
# atom expressions {1,2,3} and coordinates {x y z}, and this seems to me the
# simplest way to do it. (Comma means "or" in atom expressions.) In all other
# instances, the commas are fine, including "SET UNITCELL" and "SET DEFAULTLATTICE".  
#
#  x = {1 1 0} + {oxygen}.xyz
#
# {  }.distance ATOM PROPERTY FOR SET, IF, and %{}
#
# d = {oxygen and * /1}.distance{oxygen and * /2}
# set echo top left
# echo the O-O distance is %{{oxygen and * /1}.distance{oxygen and * /2}}
#
# message %{{atomno=3}.distance{atomno=4}}
# message %{{atomno=3}.distance{1/2 1/2 1/2}}
#
#
# {  }.label "xxxx" ATOM PROPERTY FOR IF, SET, and %{}
#
# The .label format provides a convenient means of delivering a wide range of 
# atom-based data back to the user with whatever formatting is desired. 
#
# x2 = {atomno=3).label("atom %a\t" + (atomno=3).xyz)
# xyzFile = "" + {selected}.size + "\n\n" + {selected}.label("%a %x %y %z")
#
#
# "....".lines
#
# The .lines operator splits a string into an array based on line termination. 
#
# WRITE VAR "filename" (application only)
#
# pdbAtomData = {selected and not hetero}.label("ATOM  %5i %-4a%1A%3n %1c%4R%1E   %8.3x%8.3y%8.3z%6.2Q%6.2b          %2e%2C")
# pdbHeteroData =   {selected and hetero}.label("HETATM%5i %-4a%1A%3n %1c%4R%1E   %8.3x%8.3y%8.3z%6.2Q%6.2b          %2e%2C")
# pdbFile = pdbAtomData + pdbHeteroData
# write VAR pdbFile "test.pdb"
#
# molFileData = "line1\nline2\nline3\n"+(""+{selected}.size)%-3+(""+{selected}.bonds.size)%-3+"  0  0  0\n"+{selected}.labels("%-10.4x%-10.4y%-10.4z %2e  0  0  0  0  0")+{selected}.bonds.labels("%3D1%3D2%3ORDER  0  0  0")
#
#
# GETPROPERTY "evaluate"
#
# You can now use getProperty to get expression information directly:
#
#  getproperty "evaluate" "{*}.xyz"
#
# or on a web page the following returns a valid XYZ file for molecule 1:
#
#  var info = jmolGetPropertyAsJavaObject("evaluate", '"" + {molecule=1} + "\n\n" + {molecule=1}.label("%a %x %y %z")')
#
#
# SELECTED ATOMS FROM ATOM EXPRESSIONS
#
# You can select atoms from an atom expression using [n]. 
# "[0]" means "and everything after".
#
#  x = {atom expression}[3].ident
#  x = {atom expression}[3][0].xyz   # 3 and after (average position)
#  x = {atom expression}[3][5].x     # 3-5 (average x)
#
#
# SELECTED BONDS FROM EXPRESSIONS
#
# You can select bonds from an atom expression
#
#  x = {atom expression}.bonds.ident
#  x = {atom expression}.bonds[3].ident
#
#
# BOND INFORMATION
#
# You can specify how to label a set of bonds using format strings.
# Numbers are currently in Angstroms. Keys are 
#
#  %#      sequential number
#  %=      file 1-based index
#  %ORDER  the bond order
#  %TYPE   the bond type
#  %LENGTH the bond length
#  %x1     atom property "x" for atom 1 
#  %x2     atom property "x" for atom 2
#
# The special atom properties %D1 and %D2 give sequential numbers for the
# atoms FOR THIS SET OF BONDS. This is so that a proper subfile of type MOL
# could be generated.
#
# x = {atom expression}.bonds[3].label("%# %3ORDER %TYPE %a1 %a2 %6.3LENGTH") 
#
#
# EXPANDED MODULUS % OPERATOR IN IF, SET, AND %{}
#
# Usually modulus is reserved for integer math, so we
# extend that here to add some useful "modulus-like" capability:
#
#  string modulus for trimming and padding
#    "test" %3  ==> left trim:  "tes"
#    "test" %6  ==> right pad:  "test  "
#    "test" %-3 ==> right trim: "est"
#    "test" %-6 ==> left pad:   "  test"   
#
#  float modulus for rounding and scientific notation
#    3.5456 %3 ==> "3.546"  (STRING!)
#    3545.6 %-3 ==> "3.55E+3" (STRING!)
#
#    0.0 + 3.5456 %3  ==> 3.546 (float)
#    0.0 + 3545.6 %-3 ==> 3550.0
#
#  point modulus for getting base unit cell equivalent position
#    {3/2 1/2 1/1} % 0 ==> {1/2 1/2 0}

# -----------------------------------------------------------------------------

#version=11.1.13:

# DATA "coord set"
# invertSelected POINT ....
# invertSelected PLANE ....
# invertSelected HKL ......
# rotateSelected ....
# rotateSelected spin ....
# full state support for "tainting" atom positions using translateSelected or invertSelected
#
# set allowRotateSelected # then use ALT-LEFT for rotating just the selected molecule
#
# this all definitely needs some work and discussion in terms of user interface via mouse
#
#
# write coords xxxx.spt
# load xxxx.spt # minimal -- just coord.
# script xxxx.spt # this is the full state load
#
# x = (some atom expression).atomProperty  -- takes an average if more than one atom
# for example:
#
#  x = (* /1).temperature
#  x = (C5).bondcount
#
# note that you can even say:
#  set echo top left
#  echo average position= {%{(selected).x},%{(selected).y},%{(selected).z}}
#
# and it will AUTOMATICALLY update with new values as you select different atoms.

# -----------------------------------------------------------------------------

#version=11.1.12:

# app fix for console entry messing up cursor position; 
# allows for scripting during pause or interrupt of running script using ! as first character of script
# new: within(x.x,plane,$plane1)
# fix for "draw off" not recorded in save state
# fix for within(integer,...) bug using RasMol units
# fix for _modelnumber showing up as 2001
# reconfigures _modelNumber as x.y for single models; x.x - y.y for range 
# adds _currentFileNumber
# adds _currentModelNumberInFile
# disallows user setting of variables with _ as first character
# adds @variableName in any command 
# adds frame x.x - y.y
# adds frame 0.0
# adds frame range x.x - y.y
# adds file command
# adds select file=
# tunes select model=
