void dots(int ipt, int dotsMode) throws ScriptException {
		viewer.loadShape(JmolConstants.SHAPE_DOTS);
		viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "init", new Integer(dotsMode));
		if (statementLength == ipt) {
			viewer.setShapeSize(JmolConstants.SHAPE_DOTS, 1);
			return;
		}
		short mad = 0;
		float radius;
		switch (statement[ipt].tok) {
		case Token.on:
		case Token.vanderwaals:
			mad = 1;
			break;
		case Token.ionic:
			mad = -1;
			break;
		case Token.off:
			break;
		case Token.plus:
			radius = floatParameter(++ipt);
			if (radius < 0f || radius > 10f)
				numberOutOfRange(0f, 2f);
			mad = (short) (radius == 0f ? 0 : radius * 1000f + 11002);
			break;
		case Token.decimal:
			radius = floatParameter(ipt);
			if (radius < 0f || radius > 10f)
				numberOutOfRange(0f, 10f);
			mad = (short) (radius == 0f ? 0 : radius * 1000f + 1002);
			break;
		case Token.integer:
			int dotsParam = intParameter(ipt);
			if (statementLength > ipt + 1 && statement[ipt + 1].tok == Token.radius) {
				viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "atom", new Integer(dotsParam));
				ipt++;
				viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "radius", new Float(floatParameter(++ipt)));
				if (statementLength > ipt + 1 && statement[++ipt].tok == Token.color)
					viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "colorRGB", new Integer(getArgbParam(++ipt)));
				if (statement[++ipt].tok != Token.bitset)
					invalidArgument();
				viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "dots", statement[ipt].value);
				return;
			}

			if (dotsParam < 0 || dotsParam > 1000)
				numberOutOfRange(0, 1000);
			mad = (short) (dotsParam == 0 ? 0 : dotsParam + 1);
			break;
		default:
			booleanOrNumberExpected();
		}
		viewer.setShapeSize(JmolConstants.SHAPE_DOTS, mad);
	}