From: <ha...@us...> - 2008-07-17 15:07:11
|
Revision: 9608 http://jmol.svn.sourceforge.net/jmol/?rev=9608&view=rev Author: hansonr Date: 2008-07-17 15:06:52 +0000 (Thu, 17 Jul 2008) Log Message: ----------- version=11.5.48_dev # bug fix: queue thread termination when applets are off screen Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-17 14:20:19 UTC (rev 9607) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-17 15:06:52 UTC (rev 9608) @@ -2,6 +2,8 @@ # add it on line starting with # below the "version=..." line version=11.5.48_dev + +# 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 Modified: trunk/Jmol/src/org/jmol/viewer/ScriptManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptManager.java 2008-07-17 14:20:19 UTC (rev 9607) +++ trunk/Jmol/src/org/jmol/viewer/ScriptManager.java 2008-07-17 15:06:52 UTC (rev 9608) @@ -298,4 +298,11 @@ commandWatcherThread = null; } } + + void interruptQueueThreads() { + for (int i = 0; i < queueThreads.length; i++) { + if (queueThreads[i] != null) + queueThreads[i].interrupt(); + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-17 14:20:19 UTC (rev 9607) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-17 15:06:52 UTC (rev 9608) @@ -1438,6 +1438,7 @@ haltScriptExecution(); transformManager.setSpinOn(false); scriptManager.startCommandWatcher(false); + scriptManager.interruptQueueThreads(); g3d.destroy(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-07-21 13:30:05
|
Revision: 9620 http://jmol.svn.sourceforge.net/jmol/?rev=9620&view=rev Author: hansonr Date: 2008-07-21 13:29:55 +0000 (Mon, 21 Jul 2008) Log Message: ----------- 11.5.49 VERSION (b) # 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.] Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Token.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-07-21 06:52:13 UTC (rev 9619) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-07-21 13:29:55 UTC (rev 9620) @@ -1083,7 +1083,7 @@ calculate(); break; case Token.dots: - dots(1, JmolConstants.SHAPE_DOTS); + dots(JmolConstants.SHAPE_DOTS); break; case Token.strands: proteinShape(JmolConstants.SHAPE_STRANDS); @@ -1147,7 +1147,7 @@ polyhedra(); break; case Token.geosurface: - dots(1, JmolConstants.SHAPE_GEOSURFACE); + dots(JmolConstants.SHAPE_GEOSURFACE); break; case Token.centerAt: centerAt(); @@ -1236,15 +1236,15 @@ aatoken[Math.abs(pt)][0].intValue = ptNext; break; case Token.elsecmd: - checkStatementLength(1); + checkLength(1); if (pt < 0 && !isSyntaxCheck) pc = -pt - 1; break; case Token.endifcmd: - checkStatementLength(1); + checkLength(1); break; case Token.end: //if, for, while - checkLength2(); + checkLength(2); isForCheck = (tokAt(1) == Token.forcmd); isOK = (tokAt(1) == Token.ifcmd); break; @@ -1257,7 +1257,7 @@ if (!isSyntaxCheck) pc = aatoken[pt][0].intValue; if (statementLength > 1) { - checkLength2(); + checkLength(2); intParameter(1); } break; @@ -1266,7 +1266,7 @@ if (!isSyntaxCheck) pc = pt - 1; if (statementLength > 1) { - checkLength2(); + checkLength(2); intParameter(1); } break; @@ -2085,23 +2085,23 @@ * ============================================================== */ - private void checkStatementLength(int length) throws ScriptException { - checkStatementLength(length, 0); + private void checkLength(int length) throws ScriptException { + if (length >= 0) + checkLength(length, 0); + //max + if (statementLength <= -length) + return; + iToken = -length; + error(ERROR_badArgumentCount); } - private void checkStatementLength(int length, int errorPt) throws ScriptException { + private void checkLength(int length, int errorPt) throws ScriptException { if (statementLength == length) return; iToken = errorPt > 0 ? errorPt : statementLength; error(errorPt > 0 ? ERROR_invalidArgument : ERROR_badArgumentCount); } - private void checkLength34() throws ScriptException { - iToken = statementLength; - if (statementLength < 3 || statementLength > 4) - error(ERROR_badArgumentCount); - } - private int checkLength23() throws ScriptException { iToken = statementLength; if (statementLength < 2 || statementLength > 3) @@ -2109,18 +2109,12 @@ return statementLength; } - private void checkLength2() throws ScriptException { - checkStatementLength(2, 0); + private void checkLength34() throws ScriptException { + iToken = statementLength; + if (statementLength < 3 || statementLength > 4) + error(ERROR_badArgumentCount); } - private void checkLength3() throws ScriptException { - checkStatementLength(3, 0); - } - - private void checkLength4() throws ScriptException { - checkStatementLength(4, 0); - } - private int modelNumberParameter(int index) throws ScriptException { int iFrame = 0; boolean useModelNumber = false; @@ -2296,7 +2290,7 @@ private boolean booleanParameter(int i) throws ScriptException { if (statementLength == i) return true; - checkStatementLength(i + 1); + checkLength(i + 1); switch (getToken(i).tok) { case Token.on: return true; @@ -2521,7 +2515,7 @@ private int getSetAxesTypeMad(int index) throws ScriptException { if (index == statementLength) return 1; - checkStatementLength(index + 1); + checkLength(index + 1); switch (getToken(index).tok) { case Token.on: return 1; @@ -2553,7 +2547,7 @@ private int getArgbParamLast(int index, boolean allowNone) throws ScriptException { int icolor = getArgbParam(index, allowNone); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); return icolor; } @@ -2910,17 +2904,17 @@ case Token.right: pt.set(0, -1, 0); i++; - checkStatementLength(i); + checkLength(i); break; case Token.top: pt.set(1, 0, 0); i++; - checkStatementLength(i); + checkLength(i); break; case Token.bottom: pt.set(-1, 0, 0); i++; - checkStatementLength(i); + checkLength(i); break; default: //X Y Z deg @@ -3177,6 +3171,7 @@ } private void bondorder() throws ScriptException { + checkLength(-3); short order = 0; switch (getToken(1).tok) { case Token.integer: @@ -3236,9 +3231,9 @@ pt.z = floatParameter(4); } else if (isCenterParameter(2)) { pt = centerParameter(2); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); } else { - checkLength2(); + checkLength(2); } if (!isSyntaxCheck) viewer.setCenterAt(relativeTo, pt); @@ -3271,12 +3266,12 @@ } switch (getToken(i).tok) { case Token.on: - checkLength2(); + checkLength(2); iToken = 1; state = " on"; break; case Token.off: - checkLength2(); + checkLength(2); iToken = 1; stereoMode = JmolConstants.STEREO_NONE; state = " off"; @@ -3310,7 +3305,7 @@ } } setFloatProperty("stereoDegrees", degrees); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); if (isSyntaxCheck) return; if (colorpt > 0) { @@ -3363,7 +3358,7 @@ switch (getToken(i).tok) { case Token.on: case Token.off: - checkLength2(); + checkLength(2); if (!isSyntaxCheck) viewer.rebond(); return; @@ -3409,9 +3404,9 @@ if (cmd.equalsIgnoreCase("pdb")) { boolean isAuto = (optParameterAsString(2).equalsIgnoreCase("auto")); if (isAuto) - checkLength3(); + checkLength(3); else - checkLength2(); + checkLength(2); if (isSyntaxCheck) return; viewer.setPdbConectBonding(isAuto); @@ -3641,7 +3636,7 @@ return; case Token.range: case Token.absolute: - checkLength4(); + checkLength(4); float min = floatParameter(2); float max = floatParameter(3); if (!isSyntaxCheck) @@ -3694,7 +3689,7 @@ } if (argb == 0) error(ERROR_colorOrPaletteRequired); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); if (str.equalsIgnoreCase("axes")) { setStringProperty("axesColor", Escape.escapeColor(argb)); return; @@ -3805,7 +3800,7 @@ if (theTok == Token.translucent && isFloatParameter(index + 1)) translucentLevel = floatParameter(++index); } - //checkStatementLength(index + 1); + //checkLength(index + 1); //iToken = index; } } else if (shapeType == JmolConstants.SHAPE_LCAOCARTOON) { @@ -3899,7 +3894,7 @@ index++; } colorvalue = new Byte((byte) pid); - checkStatementLength(index); + checkLength(index); } if (isSyntaxCheck || shapeType < 0) return; @@ -4138,6 +4133,7 @@ } private void message() throws ScriptException { + checkLength(2); String text = parameterAsString(1); if (isSyntaxCheck) return; @@ -4224,7 +4220,7 @@ // modelName = parameterAsString(1); if (modelName.equals("menu")) { - checkLength3(); + checkLength(3); if (!isSyntaxCheck) viewer.setMenu(parameterAsString(2), true); return; @@ -4718,6 +4714,7 @@ } private void reset() throws ScriptException { + checkLength(-2); if (isSyntaxCheck) return; if (statementLength == 1) { @@ -5007,6 +5004,7 @@ private void script(boolean isJavaScript) throws ScriptException { if (isJavaScript) { + checkLength(2); if (!isSyntaxCheck) viewer.eval(parameterAsString(1)); return; @@ -5054,7 +5052,7 @@ else error(ERROR_invalidArgument); } - checkStatementLength(i); + checkLength(i); if (isSyntaxCheck && !isScriptCheck) return; if (isScriptCheck) @@ -5116,6 +5114,7 @@ private void sync() throws ScriptException { //new 11.3.9 + checkLength(-3); String text = ""; String applet = ""; switch (statementLength) { @@ -5154,7 +5153,7 @@ } if (pt == 2) { // set history n; n' = -2 - n; if n=0, then set history OFF - checkLength3(); + checkLength(3); int n = intParameter(2); if (n < 0) error(ERROR_invalidArgument); @@ -5162,7 +5161,7 @@ viewer.getSetHistory(n == 0 ? 0 : -2 - n); return; } - checkLength2(); + checkLength(2); switch (getToken(1).tok) { // pt = 1 history ON/OFF/CLEAR case Token.on: @@ -5212,7 +5211,7 @@ for (int i = 1; i < statementLength; i++) switch (tokAt(i)) { case Token.clear: - checkLength2(); + checkLength(2); if (isSyntaxCheck || minimizer == null) return; minimizer.setProperty("clear", null); @@ -5225,7 +5224,7 @@ float targetValue = 0; int[] aList = new int[5]; if (tokAt(i) == Token.clear) { - checkLength2(); + checkLength(2); } else { while (n < 4 && !isFloatParameter(i)) { aList[++n] = BitSetUtil.firstSetBit(expression(i)); @@ -5233,7 +5232,7 @@ } aList[0] = n; targetValue = floatParameter(i++); - checkStatementLength(i); + checkLength(i); } if (!isSyntaxCheck) getMinimizer().setProperty("constraint", @@ -5243,7 +5242,7 @@ case Token.identifier: String cmd = parameterAsString(i).toLowerCase(); if (cmd.equals("stop") || cmd.equals("cancel")) { - checkLength2(); + checkLength(2); if (isSyntaxCheck || minimizer == null) return; minimizer.setProperty(cmd, null); @@ -5255,7 +5254,7 @@ BitSet bsFixed = expression(++i); if (BitSetUtil.firstSetBit(bsFixed) < 0) bsFixed = null; - checkStatementLength(iToken + 1, 1); + checkLength(iToken + 1, 1); if (!isSyntaxCheck) getMinimizer().setProperty("fixed", bsFixed); return; @@ -5338,7 +5337,7 @@ Object v = tokenSetting(0).value; if (!(v instanceof BitSet)) error(ERROR_invalidArgument); - checkStatementLength(++iToken); + checkLength(++iToken); bs = (BitSet) v; } else { bs = expression(1); @@ -5388,7 +5387,7 @@ } else if (type.equalsIgnoreCase("hkl")) { plane = hklParameter(2); } - checkStatementLength(iToken + 1, 1); + checkLength(iToken + 1, 1); if (plane == null && pt == null) error(ERROR_invalidArgument); if (isSyntaxCheck) @@ -5404,6 +5403,7 @@ } private void translate() throws ScriptException { + checkLength(3); float percent = floatParameter(2, -100, 100); if (getToken(1).tok == Token.identifier) { String str = parameterAsString(1); @@ -5561,6 +5561,7 @@ } private void gotocmd() throws ScriptException { + checkLength(2); String strTo = null; strTo = parameterAsString(1); int pcTo = -1; @@ -5631,7 +5632,7 @@ else switch (getToken(1).tok) { case Token.integer: - checkLength2(); + checkLength(2); int percent = intParameter(1); if (!isSyntaxCheck) if (isDepth) @@ -5640,22 +5641,22 @@ viewer.slabToPercent(percent); return; case Token.on: - checkLength2(); + checkLength(2); TF = true; // fall through case Token.off: - checkLength2(); + checkLength(2); setBooleanProperty("slabEnabled", TF); return; case Token.reset: - checkLength2(); + checkLength(2); if (isSyntaxCheck) return; viewer.slabReset(); setBooleanProperty("slabEnabled", true); return; case Token.set: - checkLength2(); + checkLength(2); if (isSyntaxCheck) return; viewer.setSlabDepthInternal(isDepth); @@ -5699,8 +5700,7 @@ private void ellipsoid() throws ScriptException { int mad = 0; int i = 1; - int tok = (statementLength == 1 ? Token.on : getToken(i).tok); - switch (tok) { + switch (getToken(1).tok) { case Token.on: mad = 50; break; @@ -5735,7 +5735,7 @@ value = Boolean.FALSE; } else if (key.equalsIgnoreCase("delete")) { value = Boolean.TRUE; - checkLength3(); + checkLength(3); } else if (key.equalsIgnoreCase("center")) { value = centerParameter(++i); i = iToken; @@ -5792,7 +5792,7 @@ private void setAtomShapeSize(int shape, int defOn) throws ScriptException { //halo star spacefill int mad = 0; - int tok = (statementLength == 1 ? Token.on : tokAt(1)); + int tok = tokAt(1); switch (tok) { case Token.on: mad = defOn; @@ -5866,10 +5866,10 @@ case Token.bitset: case Token.expressionBegin: bs = expression(2); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); break; default: - checkLength2(); + checkLength(2); } if (isSyntaxCheck) return; @@ -5920,7 +5920,7 @@ viewer.addStateScript("select", null, viewer.getSelectionSet(), null, "configuration", true, false); } else { - checkLength2(); + checkLength(2); if (isSyntaxCheck) return; int n = intParameter(1); @@ -5940,6 +5940,7 @@ private void vector() throws ScriptException { int mad = 1; + checkLength(-3); switch (iToken = statementLength) { case 1: break; @@ -5967,7 +5968,6 @@ setFloatProperty("vectorScale", floatParameter(2, -10, 10)); return; } - error(ERROR_invalidArgument); } setShapeSize(JmolConstants.SHAPE_VECTORS, mad); } @@ -6118,19 +6118,20 @@ } private void vibration() throws ScriptException { + checkLength(-3); float period = 0; switch (getToken(1).tok) { case Token.on: - checkLength2(); + checkLength(2); period = viewer.getVibrationPeriod(); break; case Token.off: - checkLength2(); + checkLength(2); period = 0; break; case Token.integer: case Token.decimal: - checkLength2(); + checkLength(2); period = floatParameter(1); break; case Token.identifier: @@ -6138,12 +6139,12 @@ if (cmd.equalsIgnoreCase("scale")) { setFloatProperty("vibrationScale", floatParameter(2, -10, 10)); return; - } else if (cmd.equalsIgnoreCase("period")) { + } + if (cmd.equalsIgnoreCase("period")) { setFloatProperty("vibrationPeriod", floatParameter(2)); return; - } else { - error(ERROR_invalidArgument); } + error(ERROR_invalidArgument); default: period = -1; } @@ -6159,7 +6160,7 @@ } private void animationDirection() throws ScriptException { - checkStatementLength(4); + checkLength(4); boolean negative = false; getToken(2); if (theTok == Token.minus) @@ -6210,21 +6211,21 @@ } BitSet bsSelected = (iToken + 1 < statementLength ? expression(++iToken) : viewer.getSelectionSet()); - checkStatementLength(++iToken); + checkLength(++iToken); if (isSyntaxCheck) return; viewer.calculateSurface(bsSelected, (isFrom ? Float.MAX_VALUE : -1)); return; case Token.identifier: if (parameterAsString(1).equalsIgnoreCase("AROMATIC")) { - checkLength2(); + checkLength(2); if (!isSyntaxCheck) viewer.assignAromaticBonds(); return; } break; case Token.hbond: - checkLength2(); + checkLength(2); if (isSyntaxCheck) return; viewer.autoHbond(null); @@ -6244,17 +6245,14 @@ "aromatic? hbonds? polymers? straightness? structure? surfaceDistance FROM? surfaceDistance WITHIN?"); } - private void dots(int ipt, int iShape) throws ScriptException { + private void dots(int iShape) throws ScriptException { if (!isSyntaxCheck) viewer.loadShape(iShape); setShapeProperty(iShape, "init", null); - if (statementLength == ipt) { - setShapeSize(iShape, 1); - return; - } int mad = 0; float radius; - switch (getToken(ipt).tok) { + int ipt = 1; + switch (getToken(1).tok) { case Token.on: case Token.vanderwaals: mad = 1; @@ -6359,7 +6357,7 @@ case Token.identifier: String str = parameterAsString(1); if (str.equalsIgnoreCase("fps")) { - checkLength3(); + checkLength(3); setIntProperty("animationFps", intParameter(2)); break; } @@ -6369,6 +6367,7 @@ } private void file() throws ScriptException { + checkLength(2); int file = intParameter(1); if (isSyntaxCheck) return; @@ -6405,7 +6404,7 @@ if (getToken(offset).tok == Token.minus) { ++offset; - checkStatementLength(offset + 1); + checkLength(offset + 1); if (getToken(offset).tok != Token.integer || intParameter(offset) != 1) error(ERROR_invalidArgument); if (!isSyntaxCheck) @@ -6423,7 +6422,7 @@ switch (getToken(i).tok) { case Token.all: case Token.times: - checkStatementLength(offset + (isRange ? 2 : 1)); + checkLength(offset + (isRange ? 2 : 1)); isAll = true; break; case Token.minus: //ignore @@ -6432,7 +6431,7 @@ isHyphen = true; break; case Token.none: - checkStatementLength(offset + 1); + checkLength(offset + 1); break; case Token.decimal: useModelNumber = false; @@ -6458,7 +6457,7 @@ isRange = true; break; default: - checkStatementLength(offset + 1); + checkLength(offset + 1); frameControl(i, false); return; } @@ -6559,7 +6558,7 @@ } private void frameControl(int i, boolean isSubCmd) throws ScriptException { - checkStatementLength(i + 1); + checkLength(i + 1); int tok = getToken(i).tok; if (isSyntaxCheck) switch (tok) { @@ -6760,7 +6759,7 @@ // deprecated to other parameters case Token.spin: - checkLength4(); + checkLength(4); setSpin(parameterAsString(2), (int) floatParameter(3)); return; case Token.ssbond: //ssBondsBackbone @@ -7127,7 +7126,7 @@ String val; if ((theTok = tokAt(2)) == Token.jmol || theTok == Token.rasmol) { val = parameterAsString(2).toLowerCase(); - checkLength3(); + checkLength(3); } else { val = stringSetting(2, false).toLowerCase(); } @@ -7981,10 +7980,6 @@ private void axes(int index) throws ScriptException { //axes or set axes - if (statementLength == 1) { - setShapeSize(JmolConstants.SHAPE_AXES, 1); - return; - } String type = optParameterAsString(index).toLowerCase(); if (statementLength == index + 1 && Parser.isOneOf(type, "window;unitcell;molecular")) { @@ -8049,11 +8044,6 @@ } private void unitcell(int index) throws ScriptException { - if (statementLength == 1) { - if (!isSyntaxCheck) - viewer.setObjectMad(JmolConstants.SHAPE_UCCAGE, "unitcell", (short) 1); - return; - } if (statementLength == index + 1) { if (getToken(index).tok == Token.integer && intParameter(index) >= 111) { if (!isSyntaxCheck) @@ -8092,7 +8082,7 @@ } private void setBondmode() throws ScriptException { - checkLength3(); + checkLength(3); boolean bondmodeOr = false; switch (getToken(2).tok) { case Token.opAnd: @@ -8107,14 +8097,8 @@ } private void selectionHalo(int pt) throws ScriptException { - if (pt == statementLength) { - setBooleanProperty("selectionHalos", true); - return; - } - if (pt + 1 < statementLength) - checkLength3(); boolean showHalo = false; - switch (getToken(pt).tok) { + switch (pt == statementLength ? Token.on : getToken(pt).tok) { case Token.on: case Token.selected: showHalo = true; @@ -8135,7 +8119,7 @@ //set echo xxx switch (getToken(2).tok) { case Token.off: - checkLength3(); + checkLength(3); echoShapeActive = false; propertyName = "allOff"; break; @@ -8143,7 +8127,7 @@ echoShapeActive = false; //fall through case Token.all: - checkLength3(); + checkLength(3); //fall through case Token.left: case Token.right: @@ -8315,7 +8299,7 @@ if (str.equals("toggle")) { iToken = 1; BitSet bs = (statementLength == 2 ? null : expression(2)); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); if (!isSyntaxCheck) viewer.togglePickingLabel(bs); return true; @@ -8340,7 +8324,7 @@ return false; } BitSet bs = (iToken + 1 < statementLength ? expression(++iToken) : null); - checkStatementLength(iToken + 1); + checkLength(iToken + 1); if (isSyntaxCheck) return true; if (bs == null) @@ -8353,7 +8337,7 @@ private void setMonitor() throws ScriptException { //on off here incompatible with "monitor on/off" so this is just a SET option. boolean showMeasurementNumbers = false; - checkLength3(); + checkLength(3); switch (tokAt(2)) { case Token.on: showMeasurementNumbers = true; @@ -8380,7 +8364,7 @@ //what possible good is this? //set property foo bar is identical to //set foo bar - checkLength4(); + checkLength(4); if (getToken(2).tok != Token.identifier) error(ERROR_propertyNameExpected); String propertyName = parameterAsString(2); @@ -8417,7 +8401,7 @@ } private void setSsbond() throws ScriptException { - checkLength3(); + checkLength(3); boolean ssbondsBackbone = false; //viewer.loadShape(JmolConstants.SHAPE_SSSTICKS); switch (tokAt(2)) { @@ -8433,7 +8417,7 @@ } private void setHbond() throws ScriptException { - checkLength3(); + checkLength(3); boolean bool = false; switch (tokAt(2)) { case Token.backbone: @@ -8478,7 +8462,7 @@ } break; default: - checkLength3(); + checkLength(3); } String str = parameterAsString(i); switch (getToken(i).tok) { @@ -8520,7 +8504,7 @@ i = 3; break; default: - checkLength3(); + checkLength(3); } String str = parameterAsString(i); switch (getToken(i).tok) { @@ -8984,6 +8968,7 @@ String value = null; String str = parameterAsString(1); String msg = null; + checkLength(-3); int len = 2; if (statementLength == 2 && str.indexOf("?") >= 0) { showString(viewer.getAllSettings(str.substring(0, str.indexOf("?")))); @@ -8997,7 +8982,6 @@ showString(viewer.getDefaultVdw(-1)); return; } - checkLength3(); int iMode = JmolConstants.getVdwType(parameterAsString(2)); if (iMode < 0) error(ERROR_invalidArgument); @@ -9010,7 +8994,7 @@ showString(getFunctionCalls(optParameterAsString(2))); return; case Token.set: - checkLength2(); + checkLength(2); if (!isSyntaxCheck) showString(viewer.getAllSettings(null)); return; @@ -9306,7 +9290,7 @@ value = "?"; break; } - checkStatementLength(len); + checkLength(len); if (isSyntaxCheck) return; if (msg != null) @@ -10379,7 +10363,7 @@ private boolean listIsosurface(int iShape) throws ScriptException { if (getToken(1).value instanceof String[]) // not just the word "list" return false; - checkLength2(); + checkLength(2); if (!isSyntaxCheck) showString((String) viewer.getShapeProperty(iShape, "list")); return true; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-21 06:52:13 UTC (rev 9619) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-21 13:29:55 UTC (rev 9620) @@ -5,6 +5,7 @@ # 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 Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2008-07-21 06:52:13 UTC (rev 9619) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2008-07-21 13:29:55 UTC (rev 9620) @@ -251,7 +251,7 @@ final static int end = 9 | flowCommand | noeval; final static int animation = command | 1; - final static int axes = command | 2 | setparam; + final static int axes = command | 2 | setparam | defaultON; final static int backbone = command | 3 | predefinedset | defaultON; final static int background = command | 4 | setparam; final static int bondorder = command | 5; @@ -264,19 +264,19 @@ final static int console = command | 11 | defaultON; //final static int data see mathfunc final static int delay = command | 12 | defaultON; - final static int depth = command | 13; + final static int depth = command | 13 | defaultON; final static int dipole = command | 14; - final static int dots = command | 15; + final static int dots = command | 15 | defaultON; final static int draw = command | 16; - final static int ellipsoid = command | 17; + final static int ellipsoid = command | 17 | defaultON; final static int exit = command | 18 | noArgs; //final static int file see mathfunc final static int font = command | 19; final static int frame = command | 20; final static int frank = command | 21 | setparam | defaultON; - final static int geosurface = command | 22; + final static int geosurface = command | 22 | defaultON; final static int gotocmd = command | 23; - final static int halo = command | 24; + final static int halo = command | 24 | defaultON; final static int hbond = command | 25 | setparam | expression | defaultON; final static int history = command | 26 | setparam; final static int initialize = command | 27 | noArgs; @@ -289,7 +289,7 @@ final static int minimize = command | 33; final static int mo = command | 34; //final static int model see mathfunc - final static int monitor = command | 35 | setparam | expression; + final static int monitor = command | 35 | setparam | expression | defaultON; final static int move = command | 36; final static int moveto = command | 37; final static int navigate = command | 38; @@ -303,24 +303,24 @@ final static int restore = command | 45; final static int ribbon = command | 46 | defaultON; final static int rocket = command | 47 | defaultON; - final static int rotate = command | 48; + final static int rotate = command | 48 | defaultON; final static int rotateSelected = command | 49; final static int save = command | 50; //final static int script see mathfunc final static int selectionHalo = command | 51 | setparam | defaultON; final static int show = command | 52; - final static int slab = command | 53; - final static int spacefill = command | 54; - final static int spin = command | 55 | setparam; + final static int slab = command | 53 | defaultON; + final static int spacefill = command | 54 | defaultON; + final static int spin = command | 55 | setparam | defaultON; final static int ssbond = command | 56 | setparam | defaultON; - final static int star = command | 57; - final static int stereo = command | 58; + final static int star = command | 57 | defaultON; + final static int stereo = command | 58 | defaultON; final static int strands = command | 59 | setparam | defaultON; final static int sync = command | 60; final static int trace = command | 61 | defaultON; final static int translate = command | 62; final static int translateSelected = command | 63; - final public static int unitcell = command | 64 | setparam | expression | predefinedset; + final public static int unitcell = command | 64 | setparam | expression | predefinedset | defaultON; final static int vector = command | 65; final static int vibration = command | 66; final static int wireframe = command | 67 | defaultON; @@ -455,7 +455,7 @@ final public static int fracXyz =10 | mathproperty | settable; final public static int vibXyz =11 | mathproperty | settable; final static int property =12 | mathproperty | setparam | settable; - final public static int boundbox =13 | mathproperty | setparam | command; + final public static int boundbox =13 | mathproperty | setparam | command | defaultON; final public static int adpmax =14 | mathproperty; final public static int adpmin =15 | mathproperty; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-07-21 15:12:33
|
Revision: 9623 http://jmol.svn.sourceforge.net/jmol/?rev=9623&view=rev Author: hansonr Date: 2008-07-21 15:12:30 +0000 (Mon, 21 Jul 2008) Log Message: ----------- version=11.5.49 (d) # bug fix: strange "scripted: ?" message with measurements removed Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-21 14:21:43 UTC (rev 9622) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-21 15:12:30 UTC (rev 9623) @@ -3,6 +3,7 @@ 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] = .... Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-21 14:21:43 UTC (rev 9622) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-21 15:12:30 UTC (rev 9623) @@ -2718,7 +2718,6 @@ setShapeProperty(JmolConstants.SHAPE_MEASURES, (isDelete ? "deleteVector" : isOn ? "showVector" : isOff ? "hideVector" : "defineVector") + (isAll ? "_All" : ""), monitorExpressions); - setStatusMeasuring("scripted", 1, "?"); } public void deleteMeasurement(int i) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-07-23 20:47:20
|
Revision: 9634 http://jmol.svn.sourceforge.net/jmol/?rev=9634&view=rev Author: hansonr Date: 2008-07-23 20:47:17 +0000 (Wed, 23 Jul 2008) Log Message: ----------- version=11.5.50_dev # bug fix: vibration thread not closing down for applet destroy when applet is off-screen Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-23 20:45:50 UTC (rev 9633) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-07-23 20:47:17 UTC (rev 9634) @@ -3,6 +3,7 @@ version=11.5.50_dev +# 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 Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-23 20:45:50 UTC (rev 9633) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-07-23 20:47:17 UTC (rev 9634) @@ -1437,6 +1437,7 @@ clearScriptQueue(); haltScriptExecution(); transformManager.setSpinOn(false); + transformManager.setVibrationPeriod(0); scriptManager.startCommandWatcher(false); scriptManager.interruptQueueThreads(); g3d.destroy(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-10-11 15:34:20
|
Revision: 10056 http://jmol.svn.sourceforge.net/jmol/?rev=10056&view=rev Author: hansonr Date: 2008-10-11 15:34:14 +0000 (Sat, 11 Oct 2008) Log Message: ----------- version=11.7.3_dev # new feature: load APPEND "[topolopy file]" COORD ... # new feature: load TRAJECTORY {first,last,stride} # new feature: load APPEND TRAJECTORY Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-10-11 15:18:52 UTC (rev 10055) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-10-11 15:34:14 UTC (rev 10056) @@ -4305,6 +4305,10 @@ i = 2; loadScript.append(" " + modelName); isAppend = (modelName.equalsIgnoreCase("append")); + if (isAppend && optParameterAsString(2).equalsIgnoreCase("trajectory")) { + modelName = "trajectory"; + loadScript.append(" " + modelName); + } if (modelName.equalsIgnoreCase("trajectory")) { params[0] = -1; if (isPoint3f(i)) { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-10-11 15:18:52 UTC (rev 10055) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-10-11 15:34:14 UTC (rev 10056) @@ -3,7 +3,9 @@ version=11.7.3_dev -# bug fix: append with topology nonfunctional. +# new feature: load APPEND "[topolopy file]" COORD ... +# new feature: load TRAJECTORY {first,last,stride} +# new feature: load APPEND TRAJECTORY # ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-11-18 23:03:16
|
Revision: 10340 http://jmol.svn.sourceforge.net/jmol/?rev=10340&view=rev Author: hansonr Date: 2008-11-18 23:03:07 +0000 (Tue, 18 Nov 2008) Log Message: ----------- version=11.7.13_dev # bug fix: negative number in range involving ^ fails: select 10^P -17^P Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-11-18 23:02:38 UTC (rev 10339) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-11-18 23:03:07 UTC (rev 10340) @@ -577,6 +577,10 @@ char insertionCode = script.charAt(ichToken + cchToken - 1); if (insertionCode == '^') insertionCode = ' '; + if (seqNum < 0) { + seqNum = -seqNum; + addTokenToPrefix(Token.tokenMinus); + } int seqcode = Group.getSeqcode(seqNum, insertionCode); addTokenToPrefix(new Token(Token.seqcode, seqcode, "seqcode")); continue; @@ -1302,6 +1306,8 @@ ch = '^'; ++ichT; } else { + if (script.charAt(ichT) == '-') + ++ichT; while (ichT < cchScript && Character.isDigit(ch = script.charAt(ichT))) ++ichT; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-11-18 23:02:38 UTC (rev 10339) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-11-18 23:03:07 UTC (rev 10340) @@ -3,6 +3,7 @@ version=11.7.13_dev +# bug fix: negative number in range involving ^ fails: select 10^P -17^P # code: better allocateViewer method # # ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-11-25 22:03:24
|
Revision: 10369 http://jmol.svn.sourceforge.net/jmol/?rev=10369&view=rev Author: hansonr Date: 2008-11-25 22:03:13 +0000 (Tue, 25 Nov 2008) Log Message: ----------- 11.7.13 VERSION (and save XXXX DELETE) Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/StateManager.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-11-25 21:49:46 UTC (rev 10368) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-11-25 22:03:13 UTC (rev 10369) @@ -8904,7 +8904,7 @@ } } error(ERROR_what, "SAVE", - "bonds? coords? orientation? selection? state? structure?"); + "bonds? coordinates? orientation? selection? state? structure?"); } private void restore() throws ScriptException { Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-11-25 21:49:46 UTC (rev 10368) +++ trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-11-25 22:03:13 UTC (rev 10369) @@ -169,7 +169,22 @@ return names; } + private void deleteSaved(String type) { + Enumeration e = saved.keys(); + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + if (name.startsWith(type)) { + saved.remove(name); + Logger.debug("deleted " + name); + } + } + } + void saveSelection(String saveName, BitSet bsSelected) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("Selected_"); + return; + } saveName = lastSelected = "Selected_" + saveName; saved.put(saveName, BitSetUtil.copy(bsSelected)); } @@ -187,6 +202,10 @@ } void saveState(String saveName) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("State_"); + return; + } saveName = lastState = "State_" + saveName; saved.put(saveName, viewer.getStateInfo()); } @@ -210,6 +229,10 @@ } */ void saveStructure(String saveName) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("Shape_"); + return; + } saveName = lastShape = "Shape_" + saveName; saved.put(saveName, viewer.getStructureState()); } @@ -221,6 +244,10 @@ } void saveCoordinates(String saveName, BitSet bsSelected) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("Coordinates_"); + return; + } saveName = lastCoordinates = "Coordinates_" + saveName; saved.put(saveName, viewer.getCoordinateState(bsSelected)); } @@ -237,6 +264,10 @@ } void saveOrientation(String saveName) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("Orientation_"); + return; + } Orientation o = new Orientation(); o.saveName = lastOrientation = "Orientation_" + saveName; saved.put(o.saveName, o); @@ -307,6 +338,10 @@ } void saveBonds(String saveName) { + if (saveName.equalsIgnoreCase("DELETE")) { + deleteSaved("Bonds_"); + return; + } Connections b = new Connections(); b.saveName = lastConnections = "Bonds_" + saveName; saved.put(b.saveName, b); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-11-27 13:13:35
|
Revision: 10378 http://jmol.svn.sourceforge.net/jmol/?rev=10378&view=rev Author: hansonr Date: 2008-11-27 13:13:29 +0000 (Thu, 27 Nov 2008) Log Message: ----------- version=11.7.14_dev select() and script termination error # 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 Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-11-27 13:12:20 UTC (rev 10377) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-11-27 13:13:29 UTC (rev 10378) @@ -7420,9 +7420,8 @@ Hashtable localVars, String localVar) throws ScriptException { Object v; - boolean isSelectX = (pt == 0); - boolean isOneExpressionOnly = (pt < 0); boolean isImplicitAtomProperty = (localVar != null); + boolean isOneExpressionOnly = (pt < 0); if (isOneExpressionOnly) pt = -pt; int nParen = 0; @@ -7434,8 +7433,6 @@ v = null; int tok = getToken(i).tok; if (isImplicitAtomProperty && tokAt(i + 1) != Token.dot) { - - Token token = getBitsetPropertySelector(i, false); if (token == null) { getToken(i); @@ -7448,43 +7445,34 @@ rpn.addOp(Token.tokenLeftParen); rpn.addOp(Token.tokenRightParen); } - i = iToken; - continue; } -/* if (theTok == Token.identifier - && compiler.isFunction((String) theToken.value)) { - rpn.addX((Token) localVars.get(localVar)); - if (!rpn.addOp(new Token(Token.function, theToken.value))) { - //iToken--; - error(ERROR_invalidArgument); - } - } else if (Token.tokAttr(theTok, Token.atomproperty)) { - rpn.addX((Token) localVars.get(localVar)); - if (!rpn.addOp(new Token(Token.propselector, theTok, - parameterAsString(i).toLowerCase()))) - error(ERROR_invalidArgument); - continue; - } -*/ } + } switch (tok) { case Token.select: - String dummy = "_x"; - if (!isSelectX) { + boolean isSelectFunction = (pt > 0); + // it is important to distinguish between the select command: + // select {atomExpression} (mathExpression) + // and the select(dummy;{atomExpression};mathExpression) function: + // select {*.ca} (phi < select(y; {*.ca}; y.resno = _x.resno + 1).phi) + String dummy; + if (isSelectFunction) { if (getToken(++i).tok != Token.leftparen || getToken(++i).tok != Token.identifier) error(ERROR_invalidArgument); dummy = parameterAsString(i); if (getToken(++i).tok != Token.semicolon) error(ERROR_invalidArgument); + } else { + dummy = "_x"; } v = tokenSetting(-(++i)).value; if (!(v instanceof BitSet)) error(ERROR_invalidArgument); BitSet bsAtoms = (BitSet) v; i = iToken; - if (!isSelectX && getToken(i++).tok != Token.semicolon) + if (isSelectFunction && getToken(i++).tok != Token.semicolon) error(ERROR_invalidArgument); BitSet bsSelect = new BitSet(); BitSet bsX = new BitSet(); @@ -7493,18 +7481,20 @@ if (localVars == null) localVars = new Hashtable(); localVars.put(dummy, t = new Token.Token2(Token.bitset, 0, bsX)); + // one test just to check for errors and get iToken + parameterExpression(i, -1, null, false, 0, localVars, isSelectFunction ? null : dummy); + if (isSelectFunction && tokAt(iToken) != Token.rightparen) + error(ERROR_invalidArgument); for (int j = 0; j < atomCount; j++) if (bsAtoms.get(j)) { bsX.clear(); bsX.set(j); t.intValue2 = j; if (((Boolean) parameterExpression(i, -1, null, false, j, - localVars, isSelectX ? dummy : null)).booleanValue()) + localVars, isSelectFunction ? null : dummy)).booleanValue()) bsSelect.set(j); - if (!isSelectX && tokAt(iToken) != Token.rightparen) - error(ERROR_invalidArgument); } - if (isSelectX) + if (!isSelectFunction) return bitsetTokenVector(bsSelect); i = iToken; v = bsSelect; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-11-27 13:12:20 UTC (rev 10377) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-11-27 13:13:29 UTC (rev 10378) @@ -3,6 +3,8 @@ version=11.7.14_dev +# 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 # new feature: jmolGetPropertyAsString("errorMessage") # new feature: out-of-memory "Java heap error" trapping in scripts and image creation # bug fix: build javax package does not include AxisAngle4d.class, Matrix4d.class Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-11-27 13:12:20 UTC (rev 10377) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-11-27 13:13:29 UTC (rev 10378) @@ -3525,7 +3525,8 @@ if (isScriptFile && writeInfo != null) createImage(writeInfo); } else { - scriptStatus(strErrorMessage); + statusManager.setScriptStatus("Jmol script terminated", + strErrorMessage, 1); } if (checkScriptOnly) { if (strErrorMessage == null) @@ -6500,9 +6501,9 @@ try { err = statusManager.createImage(file, type, text_or_bytes, quality); } catch (Exception e) { - Logger.error(setErrorMessage("Error creating image: " + e.getMessage())); + Logger.error(setErrorMessage("ERROR creating image: " + e.getMessage())); } catch (Error er) { - Logger.error(setErrorMessage("error creating image: "+ er.getMessage())); + Logger.error(setErrorMessage("ERROR creating image: "+ er.getMessage())); } creatingImage = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-12-04 16:51:32
|
Revision: 10429 http://jmol.svn.sourceforge.net/jmol/?rev=10429&view=rev Author: hansonr Date: 2008-12-04 16:51:28 +0000 (Thu, 04 Dec 2008) Log Message: ----------- 11.7.16 VERSION Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Eval.java Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-12-04 14:16:02 UTC (rev 10428) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-12-04 16:51:28 UTC (rev 10429) @@ -2550,7 +2550,8 @@ } static { - setErrorMessages(); + if (errors == null) + setErrorMessages(); } private boolean commandExpected() { Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-04 14:16:02 UTC (rev 10428) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-04 16:51:28 UTC (rev 10429) @@ -11461,7 +11461,8 @@ } static { - setErrorMessages(); + if (errors == null) + setErrorMessages(); } static final String SCRIPT_COMPLETED = "Script completed"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-12-06 23:21:56
|
Revision: 10449 http://jmol.svn.sourceforge.net/jmol/?rev=10449&view=rev Author: hansonr Date: 2008-12-06 23:21:49 +0000 (Sat, 06 Dec 2008) Log Message: ----------- version=11.7.17_dev # bug fix: ignoreError -- need not get error string # bug fix: write image does not set mustRender Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-06 23:21:05 UTC (rev 10448) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-06 23:21:49 UTC (rev 10449) @@ -11397,8 +11397,8 @@ void error(int iError, String value, String more, String more2, boolean warningOnly) throws ScriptException { - String strError = errorString(iError, value, more, more2, true); - String strUntranslated = (GT.getDoTranslate() ? errorString(iError, value, more, more2, false) : null); + String strError = ignoreError ? null : errorString(iError, value, more, more2, true); + String strUntranslated = (!ignoreError && GT.getDoTranslate() ? errorString(iError, value, more, more2, false) : null); if (!warningOnly) evalError(strError, strUntranslated); showString(strError); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-12-06 23:21:05 UTC (rev 10448) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-12-06 23:21:49 UTC (rev 10449) @@ -3,6 +3,8 @@ version=11.7.17_dev +# 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 Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-06 23:21:05 UTC (rev 10448) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-06 23:21:49 UTC (rev 10449) @@ -3299,6 +3299,7 @@ public String generateOutput(String type, String fileName, int width, int height) { + mustRender = true; saveState("_Export"); int saveWidth = dimScreen.width; int saveHeight = dimScreen.height; @@ -3622,8 +3623,10 @@ if (!isQuiet) scriptStatus("Jmol script terminated", strErrorMessage, 1 + eval.getExecutionWalltime(), strErrorMessageUntranslated); - if (isScriptFile && writeInfo != null) + if (writeInfo != null) { writeImage(writeInfo); + writeInfo = null; + } } else { scriptStatus(strErrorMessage); scriptStatus("Jmol script terminated", @@ -3635,7 +3638,7 @@ else Logger.error("--script check error\n" + strErrorMessageUntranslated); } - if (isScriptFile && autoExit) { + if (autoExit) { System.out.flush(); System.exit(0); } else if (checkScriptOnly) @@ -6948,6 +6951,7 @@ int saveWidth = dimScreen.width; int saveHeight = dimScreen.height; if (quality != Integer.MIN_VALUE) { + mustRender = true; resizeImage(width, height, true, false, false); setModelVisibility(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-12-09 17:46:59
|
Revision: 10474 http://jmol.svn.sourceforge.net/jmol/?rev=10474&view=rev Author: hansonr Date: 2008-12-09 17:46:54 +0000 (Tue, 09 Dec 2008) Log Message: ----------- version=11.7.18_dev # new feature: new command "exitJmol" does just that Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-09 17:39:40 UTC (rev 10473) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-12-09 17:46:54 UTC (rev 10474) @@ -5241,8 +5241,9 @@ return; String name = (String) getToken(0).value; if (compiler.getFunction(name) == null) { - if (!isSyntaxCheck && !viewer.isApplet() - && name.equalsIgnoreCase("exitjmol")) { + if (name.equalsIgnoreCase("exitjmol")) { + if (isSyntaxCheck || viewer.isApplet()) + return; Logger.debug("exitJmol -- exiting"); System.out.flush(); System.exit(0); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-09 17:39:40 UTC (rev 10473) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-09 17:46:54 UTC (rev 10474) @@ -198,10 +198,6 @@ private String strOSName; private String htmlName = ""; - public boolean isApplet() { - return (htmlName.length() > 0); - } - private String fullName = ""; private String syncId = ""; private String appletDocumentBase = ""; @@ -301,6 +297,11 @@ private boolean isSilent = false; private boolean isApplet = false; + + public boolean isApplet() { + return isApplet; + } + private boolean isPreviewOnly = false; boolean isPreviewOnly() { @@ -3574,10 +3575,6 @@ pauseScriptExecution(); return true; } - if (!isApplet() && str.startsWith("exitJmol")) { - System.out.flush(); - System.exit(0); - } if (str.startsWith("exit")) { haltScriptExecution(); clearScriptQueue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-01-30 22:39:52
|
Revision: 10594 http://jmol.svn.sourceforge.net/jmol/?rev=10594&view=rev Author: hansonr Date: 2009-01-30 22:39:47 +0000 (Fri, 30 Jan 2009) Log Message: ----------- version=11.7.23_dev load PACKED # 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} Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-01-30 18:13:57 UTC (rev 10593) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-01-30 22:39:47 UTC (rev 10594) @@ -4376,8 +4376,13 @@ htParams.put("modelNumber", new Integer(modelNumber)); tok = tokAt(++i); } - if (tok == Token.leftbrace || tok == Token.point3f) { - Point3f lattice = getPoint3f(i, false); + Point3f lattice = null; + if (tok == Token.leftbrace || tok == Token.point3f) + lattice = getPoint3f(i, false); + else if (tok == Token.identifier + && parameterAsString(i).equalsIgnoreCase("packed")) + lattice = new Point3f(555,555,-1); + if (lattice != null) { i = iToken + 1; htParams.put("lattice", lattice); sOptions += " {" + (int) lattice.x + " " + (int) lattice.y + " " Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-01-30 18:13:57 UTC (rev 10593) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-01-30 22:39:47 UTC (rev 10594) @@ -3,7 +3,11 @@ version=11.7.23_dev -# new feature: load {ijk i'j'k' -1} load crystal structure and packs unit cell +# 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-03-28 20:12:34
|
Revision: 10747 http://jmol.svn.sourceforge.net/jmol/?rev=10747&view=rev Author: hansonr Date: 2009-03-28 20:12:29 +0000 (Sat, 28 Mar 2009) Log Message: ----------- version=11.7.31_dev # bug fix -- animation/spin while script is rendering can cause Exception Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/RepaintManager.java trunk/Jmol/src/org/jmol/viewer/TransformManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java 2009-03-28 19:55:47 UTC (rev 10746) +++ trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java 2009-03-28 20:12:29 UTC (rev 10747) @@ -24,6 +24,8 @@ package org.jmol.viewer; +//import java.util.Date; + import org.jmol.api.JmolExportInterface; import org.jmol.api.JmolRendererInterface; import org.jmol.g3d.*; @@ -46,11 +48,12 @@ this.viewer = viewer; } - void render(Graphics3D g3d, ModelSet modelSet) { //, Rectangle rectClip + void render(Graphics3D g3d, ModelSet modelSet) { // , Rectangle rectClip if (modelSet == null || !viewer.mustRenderFlag()) return; - //System.out.println("Frame: rendering viewer "+ viewer + " thread " + Thread.currentThread()); + // System.out.println("Frame: rendering viewer "+ viewer + " thread " + + // Thread.currentThread()); logTime = viewer.getTestFlag1(); viewer.finalizeTransformParameters(); @@ -58,16 +61,27 @@ if (logTime) Logger.startTimer(); - g3d.renderBackground(null); - for (int i = 0; i < JmolConstants.SHAPE_MAX && g3d.currentlyRendering(); ++i) { - Shape shape = modelSet.getShape(i); + // System.out.println(" render 1"); - if (shape == null) - continue; - - //System.out.println("FrameRenderer: " + i + " " + JmolConstants.getShapeClassName(i)); - getRenderer(i, g3d).render(g3d, modelSet, shape); //, rectClip + try { + g3d.renderBackground(null); + for (int i = 0; i < JmolConstants.SHAPE_MAX && g3d.currentlyRendering(); ++i) { + Shape shape = modelSet.getShape(i); + + if (shape == null) + continue; + + // System.out.println("FrameRenderer: " + i + " " + + // JmolConstants.getShapeClassName(i)); + getRenderer(i, g3d).render(g3d, modelSet, shape); // , rectClip + } + + } catch (Exception e) { + Logger.error("rendering error -- perhaps use \"set refreshing FALSE/TRUE\" ? "); } + + // System.out.println((new Date()).getTime() + " render 2"); + if (logTime) Logger.checkTimer("render time"); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-03-28 19:55:47 UTC (rev 10746) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-03-28 20:12:29 UTC (rev 10747) @@ -3,6 +3,14 @@ version=11.7.31_dev +# 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. Modified: trunk/Jmol/src/org/jmol/viewer/RepaintManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2009-03-28 19:55:47 UTC (rev 10746) +++ trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2009-03-28 20:12:29 UTC (rev 10747) @@ -79,6 +79,7 @@ viewer.restoreModelRotation(formerModelIndex); } } + //System.out.println("set trajectory " + currentModelIndex); viewer.setTrajectory(currentModelIndex); if (currentModelIndex == -1 && clearBackgroundModel) setBackgroundModelIndex(-1); @@ -210,6 +211,8 @@ } void render(Graphics3D g3d, ModelSet modelSet) {//, Rectangle rectClip + if (!viewer.getRefreshing()) + return; frameRenderer.render(g3d, modelSet); //, rectClip Rectangle band = viewer.getRubberBandSelection(); if (band != null && g3d.setColix(viewer.getColixRubberband())) @@ -495,6 +498,7 @@ Thread.sleep(sleepTime); boolean isFirst = true; while (!isInterrupted() && animationOn) { + //System.out.println(" anim thread " + currentModelIndex + " " + framePointer); if (currentModelIndex == framePointer) { targetTime += firstFrameDelayMs; sleepTime = targetTime @@ -518,7 +522,11 @@ targetTime += (1000 / animationFps); sleepTime = targetTime - (int) (System.currentTimeMillis() - timeBegin); - refresh(); + + while(!isInterrupted() && animationOn && !viewer.getRefreshing()) { + Thread.sleep(10); + } + viewer.refresh(1, "animationThread"); sleepTime = targetTime - (int) (System.currentTimeMillis() - timeBegin); if (sleepTime > 0) Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2009-03-28 19:55:47 UTC (rev 10746) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2009-03-28 20:12:29 UTC (rev 10747) @@ -1889,34 +1889,37 @@ boolean isInMotion = viewer.getInMotion(); if (isInMotion) sleepTime += 1000; - if (refreshNeeded && spinOn && !isInMotion) { - float angle = 0; - if (isSpinInternal || isSpinFixed) { - angle = (isSpinInternal ? internalRotationAxis - : fixedRotationAxis).angle - / myFps; - if (isSpinInternal) { - rotateAxisAngleRadiansInternal(angle, bsAtoms); - } else { - rotateAxisAngleRadiansFixed(angle, bsAtoms); + try { + if (refreshNeeded && spinOn && !isInMotion) { + float angle = 0; + if (isSpinInternal || isSpinFixed) { + angle = (isSpinInternal ? internalRotationAxis + : fixedRotationAxis).angle + / myFps; + if (isSpinInternal) { + rotateAxisAngleRadiansInternal(angle, bsAtoms); + } else { + rotateAxisAngleRadiansFixed(angle, bsAtoms); + } + nDegrees += Math.abs(angle / twoPI * 360f); + } else { // old way: Rx * Ry * Rz + if (spinX != 0) { + rotateXRadians(spinX * radiansPerDegree / myFps, null); + } + if (spinY != 0) { + rotateYRadians(spinY * radiansPerDegree / myFps, null); + } + if (spinZ != 0) { + rotateZRadians(spinZ * radiansPerDegree / myFps); + } } - nDegrees += Math.abs(angle / twoPI * 360f); - } else { // old way: Rx * Ry * Rz - if (spinX != 0) { - rotateXRadians(spinX * radiansPerDegree / myFps, null); + while (!isInterrupted() && !viewer.getRefreshing()) { + Thread.sleep(10); } - if (spinY != 0) { - rotateYRadians(spinY * radiansPerDegree / myFps, null); - } - if (spinZ != 0) { - rotateZRadians(spinZ * radiansPerDegree / myFps); - } + viewer.refresh(1, "TransformationManager:SpinThread:run()"); + if (nDegrees >= endDegrees - 0.00001) + setSpinOn(false); } - viewer.refresh(1, "TransformationManager:SpinThread:run()"); - if (nDegrees >= endDegrees - 0.00001) - setSpinOn(false); - } - try { Thread.sleep(sleepTime); } catch (InterruptedException e) { break; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-03-28 19:55:47 UTC (rev 10746) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-03-28 20:12:29 UTC (rev 10747) @@ -57,6 +57,7 @@ import java.awt.Rectangle; import java.awt.Component; import java.awt.Event; +//import java.util.Date; import java.util.Hashtable; import java.util.BitSet; import java.util.Properties; @@ -2905,6 +2906,7 @@ //from RepaintManager if (display == null) return; + //System.out.println((new Date()).getTime() + " viewer.repaint "); display.repaint(); } @@ -3179,8 +3181,10 @@ // so we bypass Eval and mainline on the other viewer! // refresh(-1) is used in stateManager to force no repaint) // refresh(3) is used by operations to ONLY do a repaint -- no syncing - if (repaintManager == null) + if (repaintManager == null || !refreshing) return; + //System.out.println(" viewer.refresh " + strWhy); + //System.out.flush(); if (mode > 0) repaintManager.refresh(); if (mode % 3 != 0 && statusManager.doSync()) @@ -6015,6 +6019,7 @@ int connectOperation, BitSet bsA, BitSet bsB, BitSet bsBonds, boolean isBonds) { //eval + //System.out.println((new Date()).getTime() + " connect" + minDistance + " " + maxDistance); clearModelDependentObjects(); clearAllMeasurements(); // necessary for serialization return modelSet.makeConnections(minDistance, maxDistance, order, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-04-17 16:57:52
|
Revision: 10813 http://jmol.svn.sourceforge.net/jmol/?rev=10813&view=rev Author: hansonr Date: 2009-04-17 16:57:09 +0000 (Fri, 17 Apr 2009) Log Message: ----------- version=11.7.33_dev # bug fix: rotate -x n rotates wrong direction Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-04-16 20:25:19 UTC (rev 10812) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-04-17 16:57:09 UTC (rev 10813) @@ -5087,6 +5087,8 @@ else { endDegrees = degrees; degrees = floatParameter(i); + if (endDegrees * degrees < 0) + degrees = -degrees; isSpin = true; } continue; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-04-16 20:25:19 UTC (rev 10812) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-04-17 16:57:09 UTC (rev 10813) @@ -3,10 +3,11 @@ version=11.7.33_dev +# 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 +# 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-04 02:53:12
|
Revision: 10952 http://jmol.svn.sourceforge.net/jmol/?rev=10952&view=rev Author: hansonr Date: 2009-06-04 01:56:47 +0000 (Thu, 04 Jun 2009) Log Message: ----------- version=11.7.40 # bug fix: various tweaks of atom properties business. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Function.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-06-04 00:49:05 UTC (rev 10951) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-06-04 01:56:47 UTC (rev 10952) @@ -7219,7 +7219,7 @@ if (getContextVariableAsToken(key) != null || !setParameter(key, val, isJmolSet, showing)) { int tok2 = (tokAt(1) == Token.expressionBegin ? 0 : tokAt(2)); - setVariable((statement[0].intValue == '=' && tok2 != Token.opEQ? 0 : tok2 == Token.opEQ ? 3 : 2), 0, key, showing, statement[0].intValue); + setVariable((statement[0].intValue == '=' && !key.equals("return") && tok2 != Token.opEQ? 0 : tok2 == Token.opEQ ? 3 : 2), 0, key, showing, statement[0].intValue); if (!isJmolSet) return; } @@ -12094,18 +12094,21 @@ } boolean addX(Token x) throws ScriptException { + if (logMessages) { + dumpStacks(); + Logger.info("\naddX: " + x); + } if (xPt + 1 == maxLevel) stackOverflow(); if (wasX && x.tok == Token.integer && x.intValue < 0) { addOp(Token.tokenMinus); - xStack[++xPt] = Token.intToken(-x.intValue); + x = Token.intToken(-x.intValue); } else if (wasX && x.tok == Token.decimal && ((Float) x.value).floatValue() < 0) { addOp(Token.tokenMinus); - xStack[++xPt] = new Token(Token.decimal, new Float(-Token.fValue(x))); - } else { - xStack[++xPt] = x; + x = new Token(Token.decimal, new Float(-Token.fValue(x))); } + xStack[++xPt] = x; if (logMessages) Logger.info("addX token " + xStack[xPt]); return wasX = true; Modified: trunk/Jmol/src/org/jmol/viewer/Function.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Function.java 2009-06-04 00:49:05 UTC (rev 10951) +++ trunk/Jmol/src/org/jmol/viewer/Function.java 2009-06-04 01:56:47 UTC (rev 10952) @@ -67,7 +67,7 @@ } s.append (");\n"); s.append(script); - if (script.length() > 0 && script.charAt(script.length() - 1) != '\n') + if (script == null || script.length() > 0 && script.charAt(script.length() - 1) != '\n') s.append("\n"); s.append("end function;\n\n"); return s.toString(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-08 20:41:01
|
Revision: 10973 http://jmol.svn.sourceforge.net/jmol/?rev=10973&view=rev Author: hansonr Date: 2009-06-08 20:40:36 +0000 (Mon, 08 Jun 2009) Log Message: ----------- version=11.7.40 FOR RELEASE # {atomno=3}.radius += 0.1 Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-08 19:59:41 UTC (rev 10972) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-08 20:40:36 UTC (rev 10973) @@ -1077,8 +1077,12 @@ needRightParen = true; return CONTINUE; } - tokenAndEquals = Token.getTokenFromName(ident.substring(0, 1)); - cchToken = 1; + if (tokCommand == Token.set) { + tokenAndEquals = Token.getTokenFromName(ident.substring(0, 1)); + setEqualPt = ichToken; + return OK; + } + // otherwise ignore return CONTINUE; } @@ -2127,53 +2131,49 @@ } tokenCommand = (Token) ltoken.firstElement(); tokCommand = tokenCommand.tok; - - isImplicitExpression = Token.tokAttr(tokCommand, Token.mathExpressionCommand); + + isImplicitExpression = Token.tokAttr(tokCommand, + Token.mathExpressionCommand); isSetOrDefine = (tokCommand == Token.set || tokCommand == Token.define); isCommaAsOrAllowed = Token.tokAttr(tokCommand, Token.atomExpressionCommand); int size = ltoken.size(); int tok; if (size == 1 && Token.tokAttr(tokCommand, Token.defaultON)) { addTokenToPrefix(Token.tokenOn); - } else if (tokCommand == Token.set && size > 2 + } else if (tokCommand == Token.set + && size > 2 && ((tok = ((Token) ltoken.get(size - 1)).tok) == Token.plusPlus || tok == Token.minusMinus)) { ltoken.removeElementAt(size - 1); addTokenToPrefix(Token.tokenEquals); for (int i = 1; i < size - 1; i++) - addTokenToPrefix((Token)ltoken.elementAt(i)); - addTokenToPrefix(tok == Token.minusMinus ? Token.tokenMinus : Token.tokenPlus); + addTokenToPrefix((Token) ltoken.elementAt(i)); + addTokenToPrefix(tok == Token.minusMinus ? Token.tokenMinus + : Token.tokenPlus); addTokenToPrefix(Token.intToken(1)); - if(((Token) ltoken.get(2)).tok == Token.leftsquare) + if (((Token) ltoken.get(2)).tok == Token.leftsquare) ltoken.setElementAt(Token.tokenSetArray, 0); } if (tokenAndEquals != null) { int j; int i = 0; - boolean haveEquals = true;// !(((Token)ltoken.elementAt(0)).intValue == '='); - if (haveEquals) { - for (i = 1; i < size; i++) { - if (((Token)ltoken.elementAt(i)).tok == Token.opEQ) + for (i = 1; i < size; i++) { + if ((j = ((Token) ltoken.elementAt(i)).tok) == Token.andequals) break; - } - size = i; - i++; - } else { - i = 1; - size = 2; } + size = i; + i++; if (ltoken.size() < i) { System.out.println("COMPILER ERROR! - andEquals "); } else { for (j = 1; j < size; j++, i++) - ltoken.insertElementAt((Token)ltoken.elementAt(j), i); - if (!haveEquals) - i++; + ltoken.insertElementAt((Token) ltoken.elementAt(j), i); + ltoken.setElementAt(Token.tokenEquals, size); ltoken.insertElementAt(tokenAndEquals, i); ltoken.insertElementAt(Token.tokenLeftParen, ++i); addTokenToPrefix(Token.tokenRightParen); } } - + atokenInfix = new Token[size = ltoken.size()]; ltoken.copyInto(atokenInfix); if (logMessages) { @@ -2186,19 +2186,24 @@ Logger.debug("-------------------------------------"); } - //compile expressions + // compile expressions - isEmbeddedExpression = (tokCommand != Token.nada && tokCommand != Token.function && tokCommand != Token.end - && !Token.tokAttrOr(tokCommand, Token.atomExpressionCommand, Token.implicitStringCommand)); - boolean checkExpression = isEmbeddedExpression || (Token.tokAttr(tokCommand, Token.atomExpressionCommand)); + isEmbeddedExpression = (tokCommand != Token.nada + && tokCommand != Token.function && tokCommand != Token.end && !Token + .tokAttrOr(tokCommand, Token.atomExpressionCommand, + Token.implicitStringCommand)); + boolean checkExpression = isEmbeddedExpression + || (Token.tokAttr(tokCommand, Token.atomExpressionCommand)); - // $ at beginning disallow expression checking for center, delete, hide, or display commands - if (tokAt(1) == Token.dollarsign && Token.tokAttr(tokCommand, Token.atomExpressionCommand)) + // $ at beginning disallow expression checking for center, delete, hide, or + // display commands + if (tokAt(1) == Token.dollarsign + && Token.tokAttr(tokCommand, Token.atomExpressionCommand)) checkExpression = false; if (checkExpression && !compileExpression()) return false; - //check statement length + // check statement length size = atokenInfix.length; @@ -2218,7 +2223,7 @@ if ((isNewSet || isSetBrace) && size < ptNewSetModifier + 2) return commandExpected(); - return (size == 1 || !Token.tokAttr(tokCommand, Token.noArgs) ? true + return (size == 1 || !Token.tokAttr(tokCommand, Token.noArgs) ? true : error(ERROR_badArgumentCount)); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-08 19:59:41 UTC (rev 10972) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-08 20:40:36 UTC (rev 10973) @@ -3,6 +3,8 @@ version=11.7.40 +# {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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-09 06:44:24
|
Revision: 10983 http://jmol.svn.sourceforge.net/jmol/?rev=10983&view=rev Author: hansonr Date: 2009-06-09 06:44:16 +0000 (Tue, 09 Jun 2009) Log Message: ----------- 11.7.40 -- FINAL Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-09 06:05:07 UTC (rev 10982) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-09 06:44:16 UTC (rev 10983) @@ -234,6 +234,12 @@ isNewSet = isSetBrace = false; ptNewSetModifier = 1; isShowScriptOutput = false; + + + + logMessages = true;Logger.setLogLevel(Logger.LEVEL_DEBUG) ; + + lltoken = new Vector(); ltoken = new Vector(); tokCommand = Token.nada; @@ -287,8 +293,12 @@ if (isEndOfCommand) { isEndOfCommand = false; - if (!processTokenList(iLine)) + switch (processTokenList(iLine)) { + case CONTINUE: + continue; + case ERROR: return false; + } if (ichToken < cchScript) continue; aatokenCompiled = new Token[lltoken.size()][]; @@ -490,7 +500,7 @@ return (nTokens == 0 ? OK2 : CONTINUE); } - private boolean processTokenList(short iLine) { + private int processTokenList(short iLine) { if (nTokens > 0 || comment != null) { if (nTokens == 0) { // just a comment @@ -511,12 +521,11 @@ tokenCommand = lastFlowCommand; ltoken.removeElementAt(0); } - if (bracketCount > 0 || setBraceCount > 0 || parenCount > 0) - return error(nTokens == 1 ? ERROR_commandExpected - : ERROR_endOfCommandUnexpected); - if (braceCount == 1 && !checkFlowStartBrace(true)) - return error(nTokens == 1 ? ERROR_commandExpected - : ERROR_endOfCommandUnexpected); + if (bracketCount > 0 || setBraceCount > 0 || parenCount > 0 + || braceCount == 1 && !checkFlowStartBrace(true)) { + error(nTokens == 1 ? ERROR_commandExpected : ERROR_endOfCommandUnexpected); + return ERROR; + } if (needRightParen) { addTokenToPrefix(Token.tokenRightParen); needRightParen = false; @@ -524,7 +533,7 @@ if (ltoken.size() > 0) { if (!compileCommand()) - return false; + return ERROR; if (logMessages) { Logger.debug("-------------------------------------"); } @@ -569,7 +578,7 @@ isEndOfCommand = true; cchToken = 0; lineCurrent--; - return true; + return CONTINUE; } } } @@ -583,16 +592,16 @@ tokCommand = 1; switch (checkFlowEndBrace()) { case ERROR: - return false; + return ERROR; case CONTINUE: isEndOfCommand = true; cchToken = 0; - return true; + return CONTINUE; } ichToken = cchScript; - return true; //main loop exit + return OK; //main loop exit } - return true; + return OK; } private boolean compileCommand() { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-09 06:05:07 UTC (rev 10982) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-09 06:44:16 UTC (rev 10983) @@ -1,7 +1,7 @@ # Developers: to add a description of changes you have made, # add it on a line starting with # below the "version=..." line -version=11.7.40 IGNORE.. still a bug! +version=11.7.40 # bug fix: setting commandOptions "" in Viewer.setAppletContext() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-10 13:18:15
|
Revision: 10994 http://jmol.svn.sourceforge.net/jmol/?rev=10994&view=rev Author: hansonr Date: 2009-06-10 13:17:52 +0000 (Wed, 10 Jun 2009) Log Message: ----------- version=11.7.41 complete Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-10 12:14:05 UTC (rev 10993) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2009-06-10 13:17:52 UTC (rev 10994) @@ -1656,15 +1656,27 @@ char ch; while (ichT < cchScript && !eol(ch = script.charAt(ichT)) && ch != '}') ++ichT; + boolean isMath = false; if (ichT > ichToken && script.charAt(ichToken) == '@' - && (ichT <= ichToken + 1 || script.charAt(ichToken + 1) != '{')) + && (ichT <= ichToken + 1 || !(isMath = script.charAt(ichToken + 1) == '{'))) return false; + if (isMath) { + int nP = 1; + ichT = ichToken + 1; + while (++ichT < cchScript && nP > 0) + switch(script.charAt(ichT)) { + case '{': + nP++; + break; + case '}': + nP--; + break; + } + return (cchToken = ichT - ichToken) > 0; + } while (--ichT > ichToken && Character.isWhitespace(script.charAt(ichT))) { } - cchToken = ++ichT - ichToken; - if (logMessages) - Logger.debug("lookingAtSpecialString cchToken=" + cchToken); - return cchToken > 0; + return (cchToken = ++ichT - ichToken) > 0; } private float lookingAtExponential() { Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-06-10 12:14:05 UTC (rev 10993) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2009-06-10 13:17:52 UTC (rev 10994) @@ -1464,7 +1464,7 @@ tempStatement = statement; statement = code; } - Rpn rpn = new Rpn(64, false, false); + Rpn rpn = new Rpn(false, false); Object val; int comparisonValue = Integer.MAX_VALUE; boolean refreshed = false; @@ -7613,7 +7613,7 @@ if (isOneExpressionOnly) pt = -pt; int nParen = 0; - Rpn rpn = new Rpn(64, isArrayItem, asVector); + Rpn rpn = new Rpn(isArrayItem, asVector); if (pt == 0 && ptMax == 0) // set command with v[...] = .... pt = 2; if (ptMax < pt) @@ -12101,17 +12101,21 @@ } } - /// Reverse Polish Notation Engine for IF, SET, and %{...} -- Bob Hanson 2/16/2007 - /// Just a simple RPN processor that can handle - /// boolean, int, float, String, Point3f, and BitSet + /** + * Reverse Polish Notation Engine for IF, SET, and %{...} -- Bob Hanson 2/16/2007 + * Just a simple RPN processor that can handle + * boolean, int, float, String, Point3f, and BitSet + * + */ class Rpn { - private Token[] oStack; - private Variable[] xStack; + private Token[] oStack = new Token[8]; + private Variable[] xStack = new Variable[8]; + private char[] ifStack = new char[8]; + private int ifPt = -1; private int oPt = -1; private int xPt = -1; - private int maxLevel; private int parenCount; private int squareCount; private int braceCount; @@ -12122,13 +12126,10 @@ private int ptid = 0; private int ptx = Integer.MAX_VALUE; - Rpn(int maxLevel, boolean isArrayItem, boolean asVector) { + Rpn(boolean isArrayItem, boolean asVector) { this.isArrayItem = isArrayItem; - this.maxLevel = maxLevel; this.asVector = asVector || isArrayItem; wasX = isArrayItem; - oStack = new Token[maxLevel]; - xStack = new Variable[maxLevel]; if (logMessages) Logger.info("initialize RPN"); } @@ -12167,6 +12168,32 @@ return null; } + private void putX(Variable x) { + //System.out.println("putX skipping : " + skipping + " " + x); + if (skipping) + return; + if (++xPt == xStack.length) + xStack = (Variable[]) ArrayUtil.doubleLength(xStack); + if (logMessages) { + Logger.info("\nputX: " + x); + } + xStack[xPt] = x; + ptx = ++ptid; + } + + private void putOp(Token op) { + if (++oPt >= oStack.length) + oStack = (Token[]) ArrayUtil.doubleLength(oStack); + oStack[oPt] = op; + ptid++; + } + + private void putIf(char c) { + if (++ifPt >= ifStack.length) + ifStack = (char[]) ArrayUtil.doubleLength(ifStack); + ifStack[ifPt] = c; + } + boolean addX(Variable x) throws ScriptException { if (xPt >= 0 && xStack[xPt].tok == Token.expressionEnd) return wasX = true; //skipping @@ -12190,19 +12217,6 @@ return wasX = true; } - private void putX(Variable x) { - if (skipping) - return; - if (xPt + 1 == maxLevel) - stackOverflow(); - if (logMessages) { - //S("putX " + x); - Logger.info("\nputX: " + x); - } - xStack[++xPt] = x; - ptx = ++ptid; - } - boolean addX(boolean x) { return addX((Object) Variable.getVariable(x ? Boolean.TRUE : Boolean.FALSE)); } @@ -12256,17 +12270,17 @@ if (logMessages) { - //dumpStacks("addOp entry\naddOp: " + op + " oPt=" + oPt + " skipping=" - // + skipping + " wasX=" + wasX); + //dumpStacks("addOp entry\naddOp: " + op + " oPt=" + oPt + " ifPt = " + ifPt + // + " skipping=" + skipping + " wasX=" + wasX); } // are we skipping due to a ( ? : ) construct? int tok0 = (oPt >= 0 ? oStack[oPt].tok : 0); - int tokX = (xPt >= 1 ? xStack[xPt - 1].tok : 0); - if (tokX == Token.expressionEnd) { + skipping = (ifPt >= 0 && ifStack[ifPt] == 'F'); + if (skipping) { switch (op.tok) { case Token.leftparen: - oStack[++oPt] = op; + putOp(op); return true; case Token.colon: //dumpStacks("skipping -- :"); @@ -12274,8 +12288,7 @@ return true; // ignore if not a clean opstack // no object here because we were skipping // set to flag end of this parens - xStack[xPt - 1] = (new Variable(Token.tokenExpressionBegin)); - xStack[xPt] = (new Variable(Token.tokenExpressionBegin)); + ifStack[ifPt] = 'T'; wasX = false; //dumpStacks("(..False...? .skip.. :<--here.... )"); skipping = false; @@ -12287,17 +12300,15 @@ } //dumpStacks("skipping -- )"); if (tok0 != Token.colon) { - oStack[++oPt] = op; + putOp(op); return true; } wasX = true; - // shift object because it came from the first part - xStack[xPt - 2] = xStack[xPt]; - // and remove all evidence - xPt -= 2; + // and remove markers + ifPt--; oPt -= 2; - //dumpStacks("(..True...? ... : ...skip...)<--here "); skipping = false; + //dumpStacks("(..True...? ... : ...skip...)<--here "); return true; default: return true; @@ -12369,6 +12380,7 @@ case Token.opNot: case Token.leftparen: isLeftOp = true; + // fall through default: if (isMathFunc) { if (!isDotSelector && wasX && !isArgument) @@ -12397,7 +12409,7 @@ + Token.getPrecedence(tok0) + " pending op=\"" + Token.nameOf(op.tok) + "\" prec=" + Token.getPrecedence(op.tok)); - //dumpStacks("operating"); + dumpStacks("operating"); } // ) and ] must wait until matching ( or [ is found if (op.tok == Token.rightparen && tok0 == Token.leftparen) { @@ -12446,43 +12458,39 @@ //System.out.println("---------IF---------"); boolean isFirst = Variable.bValue(getX()); putOp(Token.tokenColon); - putX(new Variable(isFirst ? Token.expressionBegin : Token.expressionEnd)); - putX(new Variable(isFirst ? Token.expressionBegin : Token.expressionEnd)); + putIf(isFirst ? 'T' : 'F'); skipping = !isFirst; wasX = false; //dumpStacks("(.." + isFirst + "...?<--here ... :...skip...) "); return true; case Token.colon: + //System.out.println("----------:----------"); if (tok0 != Token.colon) return false; - //System.out.println("----------:----------"); - //dumpStacks("(..True...? ... :<--here ...skip...) "); - // switch off - // shift object because it came from the first part - xStack[xPt - 2] = xStack[xPt - 1] = (new Variable(Token.tokenExpressionEnd)); + if (ifPt < 0) + return false; + ifStack[ifPt] = 'F'; wasX = false; skipping = true; + //dumpStacks("(..True...? ... :<--here ...skip...) "); return true; case Token.rightparen: //System.out.println("----------)----------"); - //dumpStacks("(..False...? ...skip... : ...)<--here "); wasX = true; - oPt--; if (parenCount-- <= 0) return false; + if (tok0 == Token.colon) { + // remove markers + ifPt--; + oPt--; + //dumpStacks("(..False...? ...skip... : ...)<--here "); + } + oPt--; if (oPt < 0) return true; if (isOpFunc(oStack[oPt]) && !evaluateFunction()) return false; - if (tok0 == Token.colon) { - // shift object because it came from the second part - xStack[xPt - 2] = xStack[xPt--]; - // and remove all evidence - xPt--; - oPt--; - //dumpStacks("(..True...? ... : ...skip...)DONE "); - } - skipping = (xPt > 0 && xStack[xPt - 1].tok == Token.expressionEnd); + skipping = (ifPt >= 0 && ifStack[ifPt] == 'X'); return true; case Token.comma: wasX = false; @@ -12526,13 +12534,6 @@ return true; } - private void putOp(Token op) { - if (++oPt >= maxLevel) - stackOverflow(); - oStack[oPt] = op; - ptid++; - } - private boolean doBitsetSelect() { if (xPt < 0 || xPt == 0 && !isArrayItem) { return false; @@ -12559,6 +12560,7 @@ for (int i = 0; i <= oPt; i++) Logger.info("o[" + i + "]: " + oStack[i] + " prec=" + Token.getPrecedence(oStack[i].tok)); + Logger.info(" ifStack = " + (new String(ifStack)).substring(0, ifPt + 1)); System.out.flush(); } @@ -13574,7 +13576,7 @@ if (!isSyntaxCheck && !x2.increment(incrementX)) return false; wasX = true; - xPt++; + xPt++; //reverse getX() return true; } @@ -14086,15 +14088,5 @@ } return null; } - - void stackOverflow() { - oStack = (Token[]) ArrayUtil.doubleLength(oStack); - xStack = (Variable[]) ArrayUtil.doubleLength(xStack); - maxLevel *= 2; - return; - // - //evalError(GT._("too many parentheses")); - } - } } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-10 12:14:05 UTC (rev 10993) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-10 13:17:52 UTC (rev 10994) @@ -1,7 +1,7 @@ # Developers: to add a description of changes you have made, # add it on a line starting with # below the "version=..." line -version=11.7.41_DEV +version=11.7.41 # # OK, this version basically turns Jmol scripting language into a subset of JavaScript. @@ -52,6 +52,8 @@ # # ----------------------------------------------------------------------------- # +# bug fix: echo @{.... .... .... } not counting braces +# #version=11.7.40 # # bug fix: setting commandOptions "" in Viewer.setAppletContext() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-13 03:46:02
|
Revision: 11015 http://jmol.svn.sourceforge.net/jmol/?rev=11015&view=rev Author: hansonr Date: 2009-06-13 03:46:00 +0000 (Sat, 13 Jun 2009) Log Message: ----------- version=11.7.42_dev # 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)... Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/FileManager.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java trunk/Jmol/src/org/jmol/viewer/Token.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/FileManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/FileManager.java 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/FileManager.java 2009-06-13 03:46:00 UTC (rev 11015) @@ -344,11 +344,12 @@ /** * - * @param data [0] initially path name, but returned as full path name; [1]file contents (directory listing for a ZIP/JAR file) or error string + * @param data [0] initially path name, but returned as full path name; [1]file contents (directory listing for a ZIP/JAR file) or error string + * @param nBytesMax * @return true if successful; false on error */ - boolean getFileDataOrErrorAsString(String[] data) { + boolean getFileDataOrErrorAsString(String[] data, int nBytesMax) { data[1] = ""; String name = data[0]; if (name == null) @@ -362,7 +363,10 @@ BufferedReader br = (BufferedReader) t; StringBuffer sb = new StringBuffer(8192); String line; - while ((line = br.readLine()) != null) { + int n; + while ((n = sb.length()) < nBytesMax && (line = br.readLine()) != null) { + if (nBytesMax < n - 1 + line.length()) + line = line.substring(0, nBytesMax - n - 1); sb.append(line); sb.append('\n'); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-13 03:46:00 UTC (rev 11015) @@ -2,8 +2,12 @@ # add it on a line starting with # below the "version=..." line version=11.7.42_dev -# -# new feature: print {xxx}.label("",true) -- forces array even if only one atom (like "all") + +# 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 # Modified: trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-13 03:46:00 UTC (rev 11015) @@ -534,7 +534,7 @@ debugScript); String[] data = new String[2]; data[0] = filename; - if (!viewer.getFileAsString(data)) { + if (!viewer.getFileAsString(data, Integer.MAX_VALUE)) { setErrorMessage("io error reading " + data[0] + ": " + data[1]); return false; } Modified: trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-13 03:46:00 UTC (rev 11015) @@ -1250,12 +1250,13 @@ } private boolean evaluateLoad(ScriptVariable[] args, int tok) { - if (args.length != 1) + if (args.length > 2 || args.length < 1) return false; if (isSyntaxCheck) return addX(""); String file = ScriptVariable.sValue(args[0]); - return addX(tok == Token.load ? viewer.getFileAsString(file) : viewer + int nBytesMax = (args.length == 2 ? ScriptVariable.iValue(args[1]) : Integer.MAX_VALUE); + return addX(tok == Token.load ? viewer.getFileAsString(file, nBytesMax) : viewer .getFullPath(file)); } Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2009-06-13 03:46:00 UTC (rev 11015) @@ -559,7 +559,6 @@ // xxx(a) - final static int load = 1 | 1 << 9 | mathfunc | command; final static int substructure = 2 | 1 << 9 | mathfunc; final static int javascript = 3 | 1 << 9 | mathfunc | implicitStringCommand; final static int sin = 4 | 1 << 9 | mathfunc; @@ -585,8 +584,9 @@ // xxx(a,b) final static int cross = 1 | 2 << 9 | mathfunc; - final static int random = 2 | 2 << 9 | mathfunc; - final static int script = 3 | 2 << 9 | mathfunc | command; + final static int load = 2 | 2 << 9 | mathfunc | command; + final static int random = 3 | 2 << 9 | mathfunc; + final static int script = 4 | 2 << 9 | mathfunc | command; // ___.xxx(a,b) Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-12 20:46:07 UTC (rev 11014) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-13 03:46:00 UTC (rev 11015) @@ -2000,12 +2000,16 @@ } public String getFileAsString(String name) { + return getFileAsString(name, Integer.MAX_VALUE); + } + + public String getFileAsString(String name, int nBytesMax) { if (name == null) return getCurrentFileAsString(); String[] data = new String[2]; data[0] = name; // ignore error completely - getFileAsString(data); + getFileAsString(data, nBytesMax); return data[1]; } @@ -2013,8 +2017,8 @@ return fileManager.getFullPath(name, false); } - boolean getFileAsString(String[] data) { - return fileManager.getFileDataOrErrorAsString(data); + boolean getFileAsString(String[] data, int nBytesMax) { + return fileManager.getFileDataOrErrorAsString(data, nBytesMax); } String[] getFileInfo() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-16 21:34:16
|
Revision: 11040 http://jmol.svn.sourceforge.net/jmol/?rev=11040&view=rev Author: hansonr Date: 2009-06-16 21:33:42 +0000 (Tue, 16 Jun 2009) Log Message: ----------- version=11.7.42_dev # default change: load trajectory "myfile.top" COORD {first,last,stride} "mdcrd::myfile.trj" defaults to last = -1 ("load all trajectories") not "load one trajectory" Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-16 21:07:07 UTC (rev 11039) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-16 21:33:42 UTC (rev 11040) @@ -3,6 +3,7 @@ version=11.7.42_dev +# 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 # Modified: trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-16 21:07:07 UTC (rev 11039) +++ trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-16 21:33:42 UTC (rev 11040) @@ -4535,7 +4535,8 @@ while (i < statementLength) { switch (tokAt(i)) { case Token.identifier: - if (parameterAsString(i).equalsIgnoreCase("filter")) { + String s = parameterAsString(i); + if (s.equalsIgnoreCase("filter")) { String filter = stringParameter(++i); htParams.put("filter", filter); loadScript.append(" FILTER ").append(Escape.escape(filter)); @@ -4548,7 +4549,7 @@ htParams.remove("isTrajectory"); if (firstLastSteps == null) { firstLastSteps = new Vector(); - pt = new Point3f(0, 0, 1); + pt = new Point3f(0, -1, 1); } if (isPoint3f(++i)) { pt = getPoint3f(i, false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-18 20:33:39
|
Revision: 11048 http://jmol.svn.sourceforge.net/jmol/?rev=11048&view=rev Author: hansonr Date: 2009-06-18 20:33:17 +0000 (Thu, 18 Jun 2009) Log Message: ----------- function command debugging. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java trunk/Jmol/src/org/jmol/viewer/ScriptVariable.java Modified: trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-18 19:30:47 UTC (rev 11047) +++ trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-18 20:33:17 UTC (rev 11048) @@ -334,7 +334,7 @@ int ichT = ichToken; while (ichT < cchScript && isSpaceOrTab(script.charAt(ichT))) ++ichT; - if (isLineContinuation(ichT, tokCommand == Token.set)) + if (isLineContinuation(ichT, tokCommand == Token.set || tokCommand == Token.print)) ichT += 1 + nCharNewLine(ichT + 1); cchToken = ichT - ichToken; return cchToken > 0; @@ -342,13 +342,13 @@ private boolean isLineContinuation(int ichT, boolean checkSet) { boolean isEscaped = (ichT + 2 < cchScript && script.charAt(ichT) == '\\' && nCharNewLine(ichT + 1) > 0 - || checkSet && lookingAtSetContinuation(ichT)); + || checkSet && lookingAtMathContinuation(ichT)); if (isEscaped) lineCurrent++; return isEscaped; } - private boolean lookingAtSetContinuation(int ichT) { + private boolean lookingAtMathContinuation(int ichT) { int n; if (ichT >= cchScript || (n = nCharNewLine(ichT)) == 0 || lastToken.tok == Token.leftbrace) return false; Modified: trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java 2009-06-18 19:30:47 UTC (rev 11047) +++ trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java 2009-06-18 20:33:17 UTC (rev 11048) @@ -61,8 +61,9 @@ int nParams = (params == null ? 0 : params.size()); for (int i = names.size(); --i >= 0;) { String name = ((String) names.get(i)).toLowerCase(); - contextVariables.put(name, (i < nParameters && i < nParams ? params - .get(i) : (new ScriptVariable(Token.string, "")).setName(name))); + contextVariables.put(name, (i < nParameters && i < nParams ? + new ScriptVariable().set((ScriptVariable) params.get(i)) + : (new ScriptVariable(Token.string, "")).setName(name))); } contextVariables.put("_retval", ScriptVariable.intVariable(0)); } Modified: trunk/Jmol/src/org/jmol/viewer/ScriptVariable.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptVariable.java 2009-06-18 19:30:47 UTC (rev 11047) +++ trunk/Jmol/src/org/jmol/viewer/ScriptVariable.java 2009-06-18 20:33:17 UTC (rev 11048) @@ -57,7 +57,6 @@ ScriptVariable() { tok = string; value = ""; - } ScriptVariable(int tok) { @@ -754,6 +753,6 @@ } public String toString() { - return super.toString() + "[" + name + "] index =" + index; + return super.toString() + "[" + name + "] index =" + index + " hashcode=" + hashCode(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-19 02:28:43
|
Revision: 11052 http://jmol.svn.sourceforge.net/jmol/?rev=11052&view=rev Author: hansonr Date: 2009-06-19 02:28:38 +0000 (Fri, 19 Jun 2009) Log Message: ----------- # 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) Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-19 00:43:21 UTC (rev 11051) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-19 02:28:38 UTC (rev 11052) @@ -12,9 +12,12 @@ # # 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 [ at triggers continuation +# 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 Modified: trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-19 00:43:21 UTC (rev 11051) +++ trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-19 02:28:38 UTC (rev 11052) @@ -335,15 +335,15 @@ int ichT = ichToken; while (ichT < cchScript && isSpaceOrTab(script.charAt(ichT))) ++ichT; - if (isLineContinuation(ichT, tokCommand == Token.set || tokCommand == Token.print)) + if (isLineContinuation(ichT, true)) ichT += 1 + nCharNewLine(ichT + 1); cchToken = ichT - ichToken; return cchToken > 0; } - private boolean isLineContinuation(int ichT, boolean checkSet) { + private boolean isLineContinuation(int ichT, boolean checkMathop) { boolean isEscaped = (ichT + 2 < cchScript && script.charAt(ichT) == '\\' && nCharNewLine(ichT + 1) > 0 - || checkSet && lookingAtMathContinuation(ichT)); + || checkMathop && lookingAtMathContinuation(ichT)); if (isEscaped) lineCurrent++; return isEscaped; @@ -353,8 +353,12 @@ int n; if (ichT >= cchScript || (n = nCharNewLine(ichT)) == 0 || lastToken.tok == Token.leftbrace) return false; - if (parenCount > 0 || bracketCount > 0 || lastToken.tok == tokLastMath) + if (parenCount > 0 || bracketCount > 0) return true; + if (tokCommand != Token.set && tokCommand != Token.print) + return false; + if (lastToken.tok == tokLastMath) + return true; ichT += n; while (ichT < cchScript && isSpaceOrTab(script.charAt(ichT))) ++ichT; @@ -556,7 +560,7 @@ } lineNumbers[iCommand] = iLine; lineIndices[iCommand][0] = ichCurrentCommand; - lineIndices[iCommand][1] = (ichEnd == ichCurrentCommand ? ichToken : ichEnd); + lineIndices[iCommand][1] = Math.min(cchScript, ichEnd == ichCurrentCommand ? ichToken : ichEnd); lltoken.addElement(atokenInfix); iCommand = lltoken.size(); } @@ -1933,9 +1937,11 @@ } tokLastMath++; break; + case '/': + if (ichT < cchScript && script.charAt(ichT) == '/') + break; case '\\': // leftdivide case '*': - case '/': case '!': if (ichT < cchScript && script.charAt(ichT) == '=') ++ichT; Modified: trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java 2009-06-19 00:43:21 UTC (rev 11051) +++ trunk/Jmol/src/org/jmol/viewer/ScriptFunction.java 2009-06-19 02:28:38 UTC (rev 11052) @@ -90,9 +90,6 @@ s.append(") {\n"); if (script != null) s.append(script); - if (script == null || script.length() > 0 - && script.charAt(script.length() - 1) != '\n') - s.append("\n"); s.append("}\n\n"); return s.toString(); } @@ -103,7 +100,7 @@ int cmdpt0 = function.cmdpt0; int chpt0 = function.chpt0; int nCommands = pt - cmdpt0; - function.script = script.substring(chpt0, ichCurrentCommand); + function.setScript(script.substring(chpt0, ichCurrentCommand)); Token[][] aatoken = function.aatoken = new Token[nCommands][]; function.lineIndices = new int[nCommands][]; function.lineNumbers = new short[nCommands]; @@ -125,4 +122,10 @@ } } + private void setScript(String s) { + script = s; + if (script != null && script != "" && !script.endsWith("\n")) + script += "\n"; + } + } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-19 00:43:21 UTC (rev 11051) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-19 02:28:38 UTC (rev 11052) @@ -6970,7 +6970,8 @@ * the command to add */ void addCommand(String command) { - commandHistory.addCommand(TextFormat.replaceAllCharacters(command, "\r\n\t", " ")); + if (!autoExit) + commandHistory.addCommand(TextFormat.replaceAllCharacters(command, "\r\n\t", " ")); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-19 03:51:18
|
Revision: 11053 http://jmol.svn.sourceforge.net/jmol/?rev=11053&view=rev Author: hansonr Date: 2009-06-19 03:51:17 +0000 (Fri, 19 Jun 2009) Log Message: ----------- monsterscript testing Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java trunk/Jmol/src/org/jmol/viewer/TransformManager11.java Modified: trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-06-19 02:28:38 UTC (rev 11052) +++ trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-06-19 03:51:17 UTC (rev 11053) @@ -374,10 +374,9 @@ default: if (Token.tokAttr(tok, Token.atomproperty)) { int itemp = itokenInfix; - boolean isOK = clauseComparator(); - if (isOK || !Token.tokAttr(tok, Token.predefinedset)) + boolean isOK = clauseComparator(Token.tokAttr(tok, Token.predefinedset)); + if (isOK || itokenInfix != itemp) return isOK; - itokenInfix = itemp; } if (tok != Token.integer && !Token.tokAttr(tok, Token.predefinedset)) break; @@ -690,11 +689,17 @@ return true; } - private boolean clauseComparator() { + private boolean clauseComparator(boolean isOptional) { Token tokenAtomProperty = tokenNext(); Token tokenComparator = tokenNext(); - if (!tokenAttr(tokenComparator, Token.comparator)) - return error(ERROR_tokenExpected, "== != < > <= >="); + if (!tokenAttr(tokenComparator, Token.comparator)) { + if (!isOptional) + return error(ERROR_tokenExpected, "== != < > <= >="); + if (tokenComparator != null) + returnToken(); + returnToken(); + return false; + } if (tokenAttr(tokenAtomProperty, Token.strproperty) && tokenComparator.tok != Token.opEQ && tokenComparator.tok != Token.opNE) return error(ERROR_tokenExpected, "== !="); Modified: trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-19 02:28:38 UTC (rev 11052) +++ trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-19 03:51:17 UTC (rev 11053) @@ -10079,6 +10079,9 @@ havePoints = true; break; } + case Token.reverse: + propertyName = "reverse"; + break; case Token.rightsquare: if ((isSavedState = !isSavedState) == (theTok == Token.rightsquare)) error(ERROR_invalidArgument); @@ -10172,10 +10175,6 @@ propertyName = "vertices"; break; } - if (str.equalsIgnoreCase("REVERSE")) { - propertyName = "reverse"; - break; - } if (str.equalsIgnoreCase("NOHEAD")) { propertyName = "nohead"; break; Modified: trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-19 02:28:38 UTC (rev 11052) +++ trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-19 03:51:17 UTC (rev 11053) @@ -1687,7 +1687,7 @@ String s; ScriptVariable x1 = getX(); if (isSyntaxCheck) - return addX(ScriptVariable.sValue(x1)); + return addX(new ScriptVariable(x1)); switch (op.tok) { case Token.opAnd: if (x1.tok == Token.bitset && x2.tok == Token.bitset) { Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager11.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager11.java 2009-06-19 02:28:38 UTC (rev 11052) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager11.java 2009-06-19 03:51:17 UTC (rev 11053) @@ -737,11 +737,14 @@ float getNavigationDepthPercent() { calcCameraFactors(); //current - return 50 * (1 + (modelCenterOffset - referencePlaneOffset) / modelRadiusPixels); + return (modelRadiusPixels == 0 ? 0 : + 50 * (1 + (modelCenterOffset - referencePlaneOffset) / modelRadiusPixels)); } float getNavigationOffsetPercent(char XorY) { transformPoint(navigationCenter, navigationOffset); + if (width == 0 || height == 0) + return 0; return (XorY == 'X' ? (navigationOffset.x - width / 2f) * 100f / width : (navigationOffset.y - height / 2f) * 100f / height); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-22 23:19:36
|
Revision: 11078 http://jmol.svn.sourceforge.net/jmol/?rev=11078&view=rev Author: hansonr Date: 2009-06-22 23:19:35 +0000 (Mon, 22 Jun 2009) Log Message: ----------- version=11.7.44_dev # bug fix: select(x;{xxx};...) or for(x;{xxx};...) when {xxx} is empty returns incorrect result Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java trunk/Jmol/src/org/jmol/viewer/Token.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-22 21:55:54 UTC (rev 11077) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-22 23:19:35 UTC (rev 11078) @@ -3,8 +3,7 @@ version=11.7.44_dev -# new feature: show mo energies -- lists molecular orbitals for all files. - +# 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. @@ -12,6 +11,8 @@ # bug fix: GAMESS reader now ignores orbitals in UHF calculations as it does not yet read them properly. # Added appropriate logger message. Will replace once fixed. +# new feature: show mo energies -- lists molecular orbitals for all files. + # ----------------------------------------------------------------------------- #version=11.7.43 @@ -1147,7 +1148,8 @@ # bug fix: XML readers broken in 11.7.1 # bug fix: AMBER molecular dynamics topology file misreads P atoms # -# new feature: select within(atomType,"ATOMTYPE1,ATOMTYPE1,...") +# 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. Modified: trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-06-22 21:55:54 UTC (rev 11077) +++ trunk/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-06-22 23:19:35 UTC (rev 11078) @@ -195,12 +195,14 @@ private int tokPeek() { if (itokenInfix >= atokenInfix.length) return Token.nada; + System.out.println("peeking at " + Token.nameOf(atokenInfix[itokenInfix].tok)); return atokenInfix[itokenInfix].tok; } private boolean tokPeek(int tok) { if (itokenInfix >= atokenInfix.length) return false; + System.out.println("peeking at " + Token.nameOf(atokenInfix[itokenInfix].tok)); return (atokenInfix[itokenInfix].tok == tok); } @@ -303,6 +305,9 @@ haveString = false; if (!clauseAnd()) return false; + if (isEmbeddedExpression && lastToken.tok == Token.expressionEnd) + return true; + //for simplicity, giving XOR (toggle) same precedence as OR //OrNot: First OR, but if that makes no change, then NOT (special toggle) int tok; @@ -321,6 +326,8 @@ private boolean clauseAnd() { if (!clauseNot()) return false; + if (isEmbeddedExpression && lastToken.tok == Token.expressionEnd) + return true; while (tokPeek(Token.opAnd)) { addNextToken(); if (!clauseNot()) @@ -522,20 +529,20 @@ case Token.branch: allowComma = false; //fall through + case Token.atomType: + case Token.atomName: case Token.boundbox: case Token.chain: case Token.coord: case Token.element: case Token.group: + case Token.hkl: case Token.model: case Token.molecule: case Token.plane: case Token.site: + case Token.structure: case Token.string: - case Token.structure: - case Token.type: - case Token.atomType: - case Token.atomName: key = (String) theValue; break; case Token.identifier: Modified: trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-22 21:55:54 UTC (rev 11077) +++ trunk/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-06-22 23:19:35 UTC (rev 11078) @@ -1545,6 +1545,7 @@ break; case Token.string: rpn.addX(new ScriptVariable(instruction)); + //note that the compiler has changed all within() types to strings. if (((String) value).equals("hkl")) { rpn.addX(new ScriptVariable(Token.point4f, hklParameter(pc + 2))); pc = iToken; @@ -5936,12 +5937,11 @@ plane = planeParameter(2); } break; + case Token.hkl: + plane = (getToken(2).tok == Token.none ? null : hklParameter(2)); + break; case Token.identifier: str = parameterAsString(1); - if (str.equalsIgnoreCase("hkl")) { - plane = (getToken(2).tok == Token.none ? null : hklParameter(2)); - break; - } if (str.equalsIgnoreCase("reference")) { // only in 11.2; deprecated return; @@ -7765,24 +7765,28 @@ } int p = 0; int jlast = 0; - for (int j = 0; j < atomCount; j++) - if (bsAtoms.get(j)) { - if (jlast >= 0) - bsX.clear(jlast); - jlast = j; - bsX.set(j); - t.index = j; - res = parameterExpression(i, pt2, (isFor ? "XXX" : null), isFor, j, - false, localVars, isFunctionOfX ? null : dummy); - if (isFor) { - if (res == null || ((Vector) res).size() == 0) - error(ERROR_invalidArgument); - sout[p++] = ScriptVariable.sValue((ScriptVariable) ((Vector) res) - .elementAt(0)); - } else if (((Boolean) res).booleanValue()) { - bsSelect.set(j); + if (BitSetUtil.firstSetBit(bsAtoms) < 0) { + iToken = pt2 - 1; + } else { + for (int j = 0; j < atomCount; j++) + if (bsAtoms.get(j)) { + if (jlast >= 0) + bsX.clear(jlast); + jlast = j; + bsX.set(j); + t.index = j; + res = parameterExpression(i, pt2, (isFor ? "XXX" : null), isFor, j, + false, localVars, isFunctionOfX ? null : dummy); + if (isFor) { + if (res == null || ((Vector) res).size() == 0) + error(ERROR_invalidArgument); + sout[p++] = ScriptVariable.sValue((ScriptVariable) ((Vector) res) + .elementAt(0)); + } else if (((Boolean) res).booleanValue()) { + bsSelect.set(j); + } } - } + } if (isFor) { v = sout; } else if (isFunctionOfX) { @@ -7798,12 +7802,33 @@ case Token.integer: rpn.addXNum(ScriptVariable.intVariable(theToken.intValue)); break; - case Token.decimal: - rpn.addXNum(new ScriptVariable(theToken)); + // these next are for the within() command + case Token.plane: + if (tokAt(iToken + 1) == Token.leftparen) { + if (!rpn.addOp(theToken, true)) + error(ERROR_invalidArgument); + break; + } + rpn.addX(new ScriptVariable(theToken)); break; + case Token.atomName: + case Token.atomType: + case Token.branch: + case Token.boundbox: + case Token.chain: + case Token.coord: + case Token.element: + case Token.group: + case Token.hkl: + case Token.model: + case Token.molecule: + case Token.site: + case Token.structure: + // case Token.on: case Token.off: case Token.string: + case Token.decimal: case Token.point3f: case Token.point4f: case Token.bitset: @@ -11123,6 +11148,13 @@ if (!isSyntaxCheck) setShapeProperty(iShape, "center", viewer.getAtomPoint3f(iAtom)); break; + case Token.hkl: + // miller indices hkl + planeSeen = true; + propertyName = "plane"; + propertyValue = hklParameter(++i); + i = iToken; + break; case Token.lcaocartoon: surfaceObjectSeen = true; String lcaoType = parameterAsString(++i); @@ -11421,14 +11453,6 @@ propertyName = "gridPoints"; break; } - if (str.equalsIgnoreCase("HKL")) { - // miller indices hkl - planeSeen = true; - propertyName = "plane"; - propertyValue = hklParameter(++i); - i = iToken; - break; - } if (str.equalsIgnoreCase("ID")) { setShapeId(iShape, ++i, idSeen); isWild = (viewer.getShapeProperty(JmolConstants.SHAPE_DRAW, "ID") == null); Modified: trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-22 21:55:54 UTC (rev 11077) +++ trunk/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-06-22 23:19:35 UTC (rev 11078) @@ -1428,7 +1428,7 @@ isSequence = !Parser .isOneOf( withinStr.toLowerCase(), - "atomname;type;atomtype;element;site;group;chain;structure;molecule;model;boundbox"); + "atomname;atomtype;element;site;group;chain;structure;molecule;model;boundbox"); } else if (isDistance) { distance = ScriptVariable.fValue(args[0]); if (i < 2) @@ -1451,8 +1451,7 @@ return addX(isSyntaxCheck ? bs : viewer.getAtomBits(Token.atomName, ScriptVariable.sValue(args[1]))); // within (atomType, "XX,YY,ZZZ") - if (withinStr.equalsIgnoreCase("atomType") - || withinStr.equalsIgnoreCase("type")) + if (withinStr.equalsIgnoreCase("atomType")) return addX(isSyntaxCheck ? bs : viewer.getAtomBits(Token.atomType, ScriptVariable.sValue(args[1]))); break; Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2009-06-22 21:55:54 UTC (rev 11077) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2009-06-22 23:19:35 UTC (rev 11078) @@ -659,6 +659,7 @@ final public static int frontlit = misc | 19; final public static int frontonly = misc | 20; final public static int fullylit = misc | 21; + final static int hkl = misc | 120; final static int image = misc | 121; //11.5.53 final public static int info = misc | 122; final static int jmol = misc | 23; @@ -1074,6 +1075,7 @@ "groupIndex", new Token(groupindex), "hetero", new Token(hetero), "hidden", new Token(hidden), + "hkl", new Token(hkl), "hydrogen", new Token(hydrogen), "hydrogens", null, "identify", new Token(identify), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-06-24 01:14:34
|
Revision: 11096 http://jmol.svn.sourceforge.net/jmol/?rev=11096&view=rev Author: hansonr Date: 2009-06-24 00:24:02 +0000 (Wed, 24 Jun 2009) Log Message: ----------- version=11.7.45_dev # bug fix: unmatched { in quotes in @{ } not properly treated: echo @{" testing}"} Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-23 23:09:15 UTC (rev 11095) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2009-06-24 00:24:02 UTC (rev 11096) @@ -3,6 +3,7 @@ version=11.7.45_dev +# bug fix: unmatched { in quotes in @{ } not properly treated: echo @{" testing}"} # new feature: strings may start with ' or ", like JavaScript # cd, echo, gotocmd, help, hover, javascript, label, message, and pause # all are implicitly strings. You CAN use "..." but you don't have to, Modified: trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-23 23:09:15 UTC (rev 11095) +++ trunk/Jmol/src/org/jmol/viewer/ScriptCompiler.java 2009-06-24 00:24:02 UTC (rev 11096) @@ -235,7 +235,7 @@ isNewSet = isSetBrace = false; ptNewSetModifier = 1; isShowScriptOutput = false; - + iHaveQuotedString = false; lltoken = new Vector(); ltoken = new Vector(); tokCommand = Token.nada; @@ -803,7 +803,7 @@ } else if ((bs = lookingAtBitset()) != null) { addTokenToPrefix(new Token(Token.bitset, bs)); return CONTINUE; - } else if (!iHaveQuotedString && lookingAtSpecialString()) { + } else if (!iHaveQuotedString && lookingAtImpliedString()) { String str = script.substring(ichToken, ichToken + cchToken); int pt = str.indexOf(" "); if (pt > 0) { @@ -815,7 +815,7 @@ return CONTINUE; } } else if (tokCommand == Token.script) { - if (!iHaveQuotedString && lookingAtSpecialString()) { + if (!iHaveQuotedString && lookingAtImpliedString()) { String str = script.substring(ichToken, ichToken + cchToken); int pt = str.indexOf(" "); if (pt > 0) { @@ -835,7 +835,7 @@ // write filename if (nTokens == 2 && lastToken.tok == Token.frame) iHaveQuotedString = true; - if (nTokens > 2 && !iHaveQuotedString && lookingAtSpecialString()) { + if (nTokens > 2 && !iHaveQuotedString && lookingAtImpliedString()) { String str = script.substring(ichToken, ichToken + cchToken); if (str.startsWith("@{")) { iHaveQuotedString = true; @@ -849,7 +849,7 @@ } if (Token.tokAttr(tokCommand, Token.implicitStringCommand) && !(tokCommand == Token.script && iHaveQuotedString) - && lookingAtSpecialString()) { + && lookingAtImpliedString()) { String str = script.substring(ichToken, ichToken + cchToken); addTokenToPrefix(new Token(Token.string, str)); return CONTINUE; @@ -1671,34 +1671,76 @@ return true; } - private boolean lookingAtSpecialString() { + /** + * An "implied string" is a parameter that is not quoted + * but because of its position in a command is implied to + * be a string. First we must exclude @xxxx. Then we consume + * the entire math syntax @{......} or any set of characters + * not involving white space. + * + * @return true or false + */ + private boolean lookingAtImpliedString() { int ichT = ichToken; char ch; + // look ahead to \n, \r, terminal ;, or } while (ichT < cchScript && !eol(ch = script.charAt(ichT)) && ch != '}') ++ichT; boolean isMath = false; + // if we have @{ then this is not an implied string look ahead to \n, \r, terminal ;, or } if (ichT > ichToken && script.charAt(ichToken) == '@' && (ichT <= ichToken + 1 || !(isMath = script.charAt(ichToken + 1) == '{'))) return false; if (isMath) { - int nP = 1; - ichT = ichToken + 1; - while (++ichT < cchScript && nP > 0) - switch(script.charAt(ichT)) { - case '{': - nP++; - break; - case '}': - nP--; - break; - } - return (cchToken = ichT - ichToken) > 0; + ichT = ichMathTerminator(script, ichToken + 1, cchScript); + if (ichT == cchScript) + return false; + return ((cchToken = ichT + 1 - ichToken) > 0); } while (--ichT > ichToken && Character.isWhitespace(script.charAt(ichT))) { } return (cchToken = ++ichT - ichToken) > 0; } + /** + * For @{....} + * + * @param script + * @param ichT + * @param len + * @return position of "}" + */ + static int ichMathTerminator(String script, int ichT, int len) { + int nP = 1; + char chFirst = '\0'; + char chLast = '\0'; + while (nP > 0 && ++ichT < len) { + char ch = script.charAt(ichT); + if (chFirst != '\0') { + if (chLast == '\\') { + ch = '\0'; + } else if (ch == chFirst) { + chFirst = '\0'; + } + chLast = ch; + continue; + } + switch(ch) { + case '\'': + case '"': + chFirst = ch; + break; + case '{': + nP++; + break; + case '}': + nP--; + break; + } + } + return ichT; + } + private float lookingAtExponential() { if (ichToken == cchScript) return Float.NaN; //end Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-23 23:09:15 UTC (rev 11095) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2009-06-24 00:24:02 UTC (rev 11096) @@ -6403,21 +6403,9 @@ while ((i = text.indexOf("@{")) >= 0) { i++; int i0 = i + 1; - if (text.indexOf("}", i0) < 0) - return text; - int nBrace = 1; int len = text.length(); - while (nBrace > 0 && ++i < len) { - switch (text.charAt(i)) { - case '{': - nBrace++; - break; - case '}': - nBrace--; - break; - } - } - if (nBrace != 0) + i = ScriptCompiler.ichMathTerminator(text, i, len); + if (i >= len) return text; name = text.substring(i0, i); if (name.length() == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |