public boolean parseImageRec(DrawFrame f) {
    parseB();
    boolean bgflag;
    //        iq.printLine();
    if (iq.rString("img(")) {
      bgflag = false;
    } else if (iq.rString("bgimg(")) {
      bgflag = true;
    } else {
      return false;
    }
    parseB();
    if (!iq.rString("name(")) return false;
    StringBuffer str = iq.rStrConst();
    if (!iq.rString(").")) return false; // name(<string>)
    if (str == null) return false;
    String name = str.toString();

    if (!iq.rString("(")) return false;
    if (!rNumPair()) return false;
    if (!iq.rString(").")) return false; // (<number>,<number).
    int offx = x1;
    int offy = y1;

    if (!iq.rString("width(")) return false;
    Integer wi = iq.rInteger();
    if (!iq.rString(").")) return false; // width(<number>).
    if (wi == null) return false;
    int w = wi.intValue();

    if (!iq.rString("height(")) return false;
    Integer hi = iq.rInteger();
    if (!iq.rString(").")) return false; // height(<number>).
    if (hi == null) return false;
    int h = hi.intValue();

    boolean isFirstTime = false;
    ImageOperator img = f.imageManager.getImageOperator(name);
    if (iq.rString("create.")) {
      if (img == null) {
        isFirstTime = true;
        img = new ImageOperator(f.canvas, gui.communicationNode.getNodeSettings());
        f.imageManager.setImageOperator(name, img);
      }
      if (offx == 0 && offy == 0 && w == 10) {
        //            System.out.println("xxx");
      }
      if (!iq.rString("color(")) return false;
      Integer ci = iq.rInteger();
      if (!iq.rString(")")) return false; // color(<number>)
      if (hi == null) return false;
      int cx = ci.intValue();
      Color color = new Color(cx);

      //
      if (isFirstTime) {
        img.createNewImage(w, h);
        try {
          img.fillRect(0, 0, w, h, color);
        } catch (NullPointerException e) {
          System.out.println("img-create");
        }
        FigCanvas fc = f.canvas;
        MyImage newfig = new MyImage(fc, img, this.getNodeSettings());
        img.setMyImage(newfig);
        newfig.imageName = name;
        newfig.newFig();
        newfig.offX = offx;
        newfig.offY = offy;
        if (bgflag) {
          fc.fs.add(newfig);
          newfig.depth = 25;
          fc.fs.setStep(-10);
          //                  f.depthIndicator.setValue(newfig.depth);

        } else {
          fc.ftemp.add(newfig);
          newfig.depth = 0;
          f.depthIndicator.setValue(newfig.depth);
        }
      } else {
        img.isCreatingImage = true;
        img.imageUpdate(null, 0, offx, offy, w, h);
      }
      parseB();

      if (!iq.rString(")")) return false; // img( .... )

      //
      return true;
    } else if (iq.rString("tile.")) {
      while (true) {
        if (!iq.rString("color(")) return false;
        Integer ci = iq.rInteger();
        if (!iq.rString(")")) return false; // color(<number>)
        if (hi == null) return false;
        int cx = ci.intValue();
        Color color = new Color(cx);

        img = gui.imageManager.getImageOperator(name);
        if (img == null) return false;
        img.fillRect(offx, offy, w, h, color);
        if (!iq.rString("-")) break; // -
        offx = offx + w;
      }
      parseB();
      if (!iq.rString(")")) return false; // img( .... )
      return true;
    } else if (iq.rString("binary")) {
      img = gui.imageManager.getImageOperator(name);
      if (img == null) return false;
      img.setBinaryImage(offx, offy, w, h, this.binary);
      //		   parseB();
      if (!iq.rString(")")) return false; // img( .... )
      return true;
    } else if (iq.rString("jpeg")) {
      img = gui.imageManager.getImageOperator(name);
      if (img == null) return false;
      img.setJpegImage(offx, offy, w, h, this.binary);
      parseB();
      if (!iq.rString(")")) return false; // img( .... )
      return true;
    } else if (iq.rString("sImg(")) {
      StringBuffer sb = iq.rStrConst();
      if (sb == null) return false;
      if (!iq.rString(")")) return false;
      img = gui.imageManager.getImageOperator(name);
      if (img == null) return false;
      img.setSlowFineImage(sb.toString(), offx, offy, w, h, this.binary);
      parseB();
      if (!iq.rString(")")) return false; // img( ...)
      return true;
    } else if (iq.rString("bmp.")) {
      str = iq.rStrConst();
      if (str == null) return false;

      img = gui.imageManager.getImageOperator(name);
      if (img == null) return false;
      img.string2subImg(offx, offy, w, h, str.toString());
      parseB();
      if (!iq.rString(")")) return false; // img( .... )

      return true;
    } else return false;
    //        gui.canvas.repaint();
    //        return true;
  }