Changeset 3364


Ignore:
Timestamp:
11/12/07 12:16:05 (12 years ago)
Author:
curtis
Message:

Fill in setter method bodies; miscellaneous progress.

Location:
trunk/loci/formats/auto
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/auto/MetadataAutogen.java

    r3346 r3364  
    77Copyright (C) 2005-@year@ Melissa Linkert, Curtis Rueden, Chris Allan, 
    88Eric Kjellman and Brian Loranger. 
     9 
    910This program is free software; you can redistribute it and/or modify 
    10 it under the terms of the GNU Library General Public License as published bythe Free Software Foundation; either version 2 of the License, or 
     11it under the terms of the GNU Library General Public License as published by 
     12the Free Software Foundation; either version 2 of the License, or 
    1113(at your option) any later version. 
    1214 
     
    3032 * Automatically generates code for the MetadataStore and MetadataRetrieve 
    3133 * interfaces, as well as the implementations for various flavors of OME-XML. 
     34 * 
     35 * <dl><dt><b>Source code:</b></dt> 
     36 * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/loci/formats/auto/MetadataAutogen.java">Trac</a>, 
     37 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/loci/formats/auto/MetadataAutogen.java">SVN</a></dd></dl> 
     38 * 
    3239 * @author Curtis Rueden ctrueden at wisc.edu 
    3340 */ 
     
    7582    for (int i=0; i<nodes.size(); i++) { 
    7683      Node node = (Node) nodes.get(i); 
    77       doSetters(node); 
     84      doGetters(node); 
    7885    } 
    7986    for (int i=0; i<nodes.size(); i++) { 
    8087      Node node = (Node) nodes.get(i); 
    81       doGetters(node); 
     88      doSetters(node); 
     89    } 
     90    for (int i=0; i<nodes.size(); i++) { 
     91      Node node = (Node) nodes.get(i); 
     92      doHelpers(node); 
    8293    } 
    8394    out.closeFiles(); 
     
    200211    in.close(); 
    201212    return nodes; 
     213  } 
     214 
     215  /** Generates getter methods for each output source file. */ 
     216  private static void doGetters(Node node) throws IOException { 
     217    boolean first = true; 
     218    Enumeration e = node.paths.keys(); 
     219    while (e.hasMoreElements()) { 
     220      String key = (String) e.nextElement(); 
     221      String value = (String) node.paths.get(key); 
     222      if (first) { 
     223        // MetadataRetrieve interface 
     224        doGetters("MetadataRetrieve.java", value, node, true); 
     225        first = false; 
     226      } 
     227      // OME-XML implementations 
     228      doGetters("ome/OMEXML" + key + "Metadata.java", value, node, false); 
     229    } 
    202230  } 
    203231 
     
    219247  } 
    220248 
    221   /** Generates getter methods for each output source file. */ 
    222   private static void doGetters(Node node) throws IOException { 
    223     boolean first = true; 
     249  /** Generates helper methods for each output source file. */ 
     250  private static void doHelpers(Node node) throws IOException { 
    224251    Enumeration e = node.paths.keys(); 
    225252    while (e.hasMoreElements()) { 
    226253      String key = (String) e.nextElement(); 
    227254      String value = (String) node.paths.get(key); 
    228       if (first) { 
    229         // MetadataRetrieve interface 
    230         doGetters("MetadataRetrieve.java", value, node, true); 
    231         first = false; 
    232       } 
    233       // OME-XML implementations 
    234       doGetters("ome/OMEXML" + key + "Metadata.java", value, node, false); 
    235     } 
    236   } 
    237  
    238   /** Generates setter methods for the given node and source file. */ 
    239   private static void doSetters(String id, String path, Node node, 
    240     boolean iface) throws IOException 
    241   { 
    242     String end = iface ? ");" : ")"; 
    243     LineTracker lt = new LineTracker(); 
    244  
    245     // parse path 
    246     Vector indices = getIndices(path); 
    247     int size = node.params.size(); 
    248     int total = size + indices.size(); 
    249  
    250     // javadoc 
    251     if (iface) { 
    252       lt.add("  /**"); 
    253       lt.newline(); 
    254       lt.add("   * Sets "); 
    255       lt.addTokens(node.desc + ".", "   * "); 
    256       lt.newline(); 
    257       for (int i=0; i<total; i++) { 
    258         Param p = (Param) 
    259           (i < size ? node.params.get(i) : indices.get(i - size)); 
    260         lt.add("   * @param " + toVarName(p.name) + " "); 
    261         lt.addTokens(p.doc + ".", "   *   "); 
    262         lt.newline(); 
    263       } 
    264       lt.add("   */"); 
    265       lt.newline(); 
    266     } 
    267     else { 
    268       StringBuffer sb = new StringBuffer(); 
    269       sb.append("@see loci.formats.MetadataStore#set" + node.name + "("); 
    270       for (int i=0; i<total; i++) { 
    271         Param p = (Param) 
    272           (i < size ? node.params.get(i) : indices.get(i - size)); 
    273         sb.append(p.type); 
    274         sb.append(i < total - 1 ? ", " : ")"); 
    275       } 
    276       if (sb.length() <= 72) { 
    277         lt.add("  /* " + sb.toString() + " */"); 
    278         lt.newline(); 
    279       } 
    280       else { 
    281         lt.add("  /*"); 
    282         lt.newline(); 
    283         lt.add("   * "); 
    284         lt.addTokens(sb.toString(), "   *   "); 
    285         lt.newline(); 
    286         lt.add("   */"); 
    287         lt.newline(); 
    288       } 
    289     } 
    290     // method signature 
    291     lt.add("  "); 
    292     if (!iface) lt.add("public "); 
    293     lt.add("void set" + node.name + "("); 
    294     for (int i=0; i<total; i++) { 
    295       // parameters 
    296       StringBuffer sb = new StringBuffer(); 
    297       if (i > 0) sb.append(" "); 
    298       Param p = (Param) (i < size ? node.params.get(i) : indices.get(i - size)); 
    299       sb.append(p.type); 
    300       sb.append(" "); 
    301       sb.append(toVarName(p.name)); 
    302       sb.append(i < total - 1 ? "," : end); 
    303       lt.add(sb.toString(), "    "); 
    304     } 
    305     if (!iface) { 
    306       // opening brace 
    307       if (lt.hasWrapped()) { 
    308         lt.newline(); 
    309         lt.add(" "); 
    310       } 
    311       lt.add(" {", "  "); 
    312     } 
    313     lt.newline(); 
    314     // method body 
    315     if (!iface) { 
    316       lt.add("    // TODO"); 
    317       // closing brace 
    318       lt.newline(); 
    319       lt.add("  }"); 
    320       lt.newline(); 
    321     } 
    322     // output results 
    323     out.write(id, lt.toString()); 
     255      // OME-XML implementation 
     256      doHelpers("ome/OMEXML" + key + "Metadata.java", value, node); 
     257    } 
    324258  } 
    325259 
     
    336270    int isize = indices.size(); 
    337271 
     272    lt.add("  // -- " + node.name + " attribute retrieval methods --"); 
     273    lt.newline(); 
     274    lt.newline(); 
     275 
    338276    for (int i=0; i<psize; i++) { 
    339       Param p = (Param) node.params.get(i); 
     277      Param pi = (Param) node.params.get(i); 
    340278      if (i > 0) lt.newline(); 
    341279 
     
    345283        lt.newline(); 
    346284        lt.add("   * Gets "); 
    347         lt.addTokens(p.doc + " for a particular " + node.name + ".", "   * "); 
     285        lt.addTokens(pi.doc + " for a particular " + node.name + ".", "   * "); 
    348286        lt.newline(); 
    349287        for (int j=0; j<isize; j++) { 
     
    359297        StringBuffer sb = new StringBuffer(); 
    360298        sb.append("@see loci.formats.MetadataRetrieve#get" + 
    361           node.name + p.name + "("); for (int j=0; j<isize; j++) { 
     299          node.name + pi.name + "("); 
     300        for (int j=0; j<isize; j++) { 
    362301          Param pj = (Param) indices.get(j); 
    363302          sb.append(pj.type); 
     
    381320      lt.add("  "); 
    382321      if (!iface) lt.add("public "); 
    383       lt.add(p.type + " get" + node.name + p.name + "("); 
     322      lt.add(pi.type + " get" + node.name + pi.name + "("); 
    384323      for (int j=0; j<isize; j++) { 
    385324        // parameters 
    386         StringBuffer sb = new StringBuffer(); 
    387         if (j > 0) sb.append(" "); 
    388325        Param pj = (Param) indices.get(j); 
    389         sb.append(pj.type); 
    390         sb.append(" "); 
    391         sb.append(toVarName(pj.name)); 
    392         sb.append(j < isize - 1 ? "," : end); 
    393         lt.add(sb.toString(), "    "); 
     326        lt.add(pj.getArg(true, true, j == 0, j == isize - 1, end)); 
    394327      } 
    395328      if (!iface) { 
     
    407340        // closing brace 
    408341        lt.newline(); 
     342        lt.add("    return null;"); 
     343        lt.newline(); 
    409344        lt.add("  }"); 
    410345        lt.newline(); 
     
    412347    } 
    413348 
     349    // output results 
     350    out.write(id, lt.toString()); 
     351  } 
     352 
     353  /** Generates setter methods for the given node and source file. */ 
     354  private static void doSetters(String id, String path, Node node, 
     355    boolean iface) throws IOException 
     356  { 
     357    String end = iface ? ");" : ")"; 
     358    LineTracker lt = new LineTracker(); 
     359 
     360    // parse path 
     361    Vector indices = getIndices(path); 
     362    int psize = node.params.size(); 
     363    int isize = indices.size(); 
     364    int total = psize + isize; 
     365 
     366    // javadoc 
     367    if (iface) { 
     368      lt.add("  /**"); 
     369      lt.newline(); 
     370      lt.add("   * Sets "); 
     371      lt.addTokens(node.desc + ".", "   * "); 
     372      lt.newline(); 
     373      for (int i=0; i<total; i++) { 
     374        Param p = (Param) 
     375          (i < psize ? node.params.get(i) : indices.get(i - psize)); 
     376        lt.add("   * @param " + toVarName(p.name) + " "); 
     377        lt.addTokens(p.doc + ".", "   *   "); 
     378        lt.newline(); 
     379      } 
     380      lt.add("   */"); 
     381      lt.newline(); 
     382    } 
     383    else { 
     384      StringBuffer sb = new StringBuffer(); 
     385      sb.append("@see loci.formats.MetadataStore#set" + node.name + "("); 
     386      for (int i=0; i<total; i++) { 
     387        Param p = (Param) 
     388          (i < psize ? node.params.get(i) : indices.get(i - psize)); 
     389        sb.append(p.type); 
     390        sb.append(i < total - 1 ? ", " : ")"); 
     391      } 
     392      if (sb.length() <= 72) { 
     393        lt.add("  /* " + sb.toString() + " */"); 
     394        lt.newline(); 
     395      } 
     396      else { 
     397        lt.add("  /*"); 
     398        lt.newline(); 
     399        lt.add("   * "); 
     400        lt.addTokens(sb.toString(), "   *   "); 
     401        lt.newline(); 
     402        lt.add("   */"); 
     403        lt.newline(); 
     404      } 
     405    } 
     406    // method signature 
     407    lt.add("  "); 
     408    if (!iface) lt.add("public "); 
     409    lt.add("void set" + node.name + "("); 
     410    for (int i=0; i<total; i++) { 
     411      // parameters 
     412      Param p = (Param) 
     413        (i < psize ? node.params.get(i) : indices.get(i - psize)); 
     414      lt.add(p.getArg(true, true, i == 0, i == total - 1, end), "    "); 
     415    } 
     416    if (!iface) { 
     417      // opening brace 
     418      if (lt.hasWrapped()) { 
     419        lt.newline(); 
     420        lt.add(" "); 
     421      } 
     422      lt.add(" {", "  "); 
     423    } 
     424    lt.newline(); 
     425    // method body 
     426    if (!iface) { 
     427      String varName = toVarName(node.name); 
     428      lt.add("    " + node.name + "Node " + varName + 
     429        " = get" + node.name + "("); 
     430      for (int i=0; i<isize; i++) { 
     431        Param p = (Param) indices.get(i); 
     432        lt.add(p.getArg(true, false, i == 0, false, null), "    "); 
     433      } 
     434      lt.add(" true);", "    "); 
     435      lt.newline(); 
     436      for (int i=0; i<psize; i++) { 
     437        Param p = (Param) node.params.get(i); 
     438        lt.add("    if (" + toVarName(p.name) + " != null) {"); 
     439        lt.newline(); 
     440        lt.add("      " + varName + 
     441          ".set" + p.name + "(" + toVarName(p.name) + ");"); 
     442        lt.newline(); 
     443        lt.add("    }"); 
     444        lt.newline(); 
     445      } 
     446      // closing brace 
     447      lt.newline(); 
     448      lt.add("  }"); 
     449      lt.newline(); 
     450    } 
     451    // output results 
     452    out.write(id, lt.toString()); 
     453  } 
     454 
     455  /** Generates helper methods for the given node and source file. */ 
     456  private static void doHelpers(String id, String path, Node node) 
     457    throws IOException 
     458  { 
     459    String end = ")"; 
     460    LineTracker lt = new LineTracker(); 
     461 
     462    // parse path 
     463    Vector indices = getIndices(path); 
     464    int psize = node.params.size(); 
     465    int isize = indices.size(); 
     466 
     467    // method signature 
     468    lt.add("  // " + path); 
     469    lt.newline(); 
     470    lt.add("  private " + node.name + "Node get" + node.name + "("); 
     471    for (int i=0; i<isize; i++) { 
     472      // parameters 
     473      StringBuffer sb = new StringBuffer(); 
     474      if (i > 0) sb.append(" "); 
     475      Param p = (Param) indices.get(i); 
     476      sb.append(p.type); 
     477      sb.append(" "); 
     478      sb.append(toVarName(p.name)); 
     479      sb.append(","); 
     480      lt.add(sb.toString(), "    "); 
     481    } 
     482    lt.add(" boolean create)", "    "); 
     483    // opening brace 
     484    if (lt.hasWrapped()) { 
     485      lt.newline(); 
     486      lt.add(" "); 
     487    } 
     488    lt.add(" {", "  "); 
     489    lt.newline(); 
     490    // method body 
     491    int n = 0; 
     492    lt.add("    List list;"); 
     493    lt.newline(); 
     494    lt.add("    int ndx, count;"); 
     495    lt.newline(); 
     496    StringTokenizer st = new StringTokenizer(path, "/"); 
     497    lt.add("    // get OME node"); 
     498    lt.newline(); 
     499    lt.add("    OMENode ome = (OMENode) root;"); 
     500    lt.newline(); 
     501    String var = "ome"; 
     502    while (st.hasMoreTokens()) { 
     503      String token = st.nextToken(); 
     504      boolean multi = false; 
     505      if (token.endsWith("+")) { 
     506        multi = true; 
     507        token = token.substring(0, token.length() - 1); 
     508      } 
     509      lt.add("    // get " + token + " node"); 
     510      lt.newline(); 
     511      String varToken = toVarName(token); 
     512      String nextVar = token.equals("CustomAttributes") ? "ca" : varToken; 
     513      if (multi) { 
     514        lt.add("    ndx = i2i(" + varToken + "Index);"); 
     515        lt.newline(); 
     516        lt.add("    count = " + var + ".count" + token + "s();"); 
     517        lt.newline(); 
     518        lt.add("    if (!create && ndx >= count) return null;"); 
     519        lt.newline(); 
     520        lt.add("    for (int i=count; i<=ndx; i++) " + 
     521           "new " + token + "Node(" + var + ");"); 
     522        lt.newline(); 
     523        lt.add("    list = " + var + ".get" + token + "s();"); 
     524        lt.newline(); 
     525        lt.add("    " + token + "Node " + nextVar + 
     526          " = (" + token + "Node) list.get(ndx);"); 
     527        lt.newline(); 
     528      } 
     529      else { 
     530        lt.add("    " + token + "Node " + nextVar + 
     531          " = " + var + ".get" + token + "();"); 
     532        lt.newline(); 
     533        lt.add("    if (" + nextVar + " == null) {"); 
     534        lt.newline(); 
     535        lt.add("      if (!create) return null;"); 
     536        lt.newline(); 
     537        lt.add("      " + nextVar + " = new " + token + "Node(" + var + ");"); 
     538        lt.newline(); 
     539        lt.add("    }"); 
     540        lt.newline(); 
     541      } 
     542      var = nextVar; 
     543    } 
     544    lt.add("    return " + var + ";"); 
     545    lt.newline(); 
     546    // closing brace 
     547    lt.add("  }"); 
     548    lt.newline(); 
    414549    // output results 
    415550    out.write(id, lt.toString()); 
     
    500635  private static class Param { 
    501636    private String name, type, doc; 
     637    public String getArg(boolean doName, boolean doType, 
     638      boolean first, boolean last, String end) 
     639    { 
     640      StringBuffer sb = new StringBuffer(); 
     641      if (!first) sb.append(" "); 
     642      if (doType) sb.append(type); 
     643      if (doType && doName) sb.append(" "); 
     644      if (doName) sb.append(toVarName(name)); 
     645      sb.append(last ? end : ","); 
     646      return sb.toString(); 
     647    } 
    502648  } 
    503649 
  • trunk/loci/formats/auto/MetadataAutogenGlobal.txt

    r3345 r3364  
    22class = OMEXML2004Metadata 
    33id = OMEXML2004Metadata.java 
    4 package = org.openmicroscopy.xml 
     4basePackage = org.openmicroscopy.xml 
     5subPackage = st 
    56version = 2004 (FC) 
    67 
     
    89class = OMEXML200706Metadata 
    910id = OMEXML200706Metadata.java 
    10 package = ome.xml.r2007_06 
     11basePackage = ome.xml.r2007_06 
     12subPackage = ome 
    1113version = 2007-06 
    1214 
  • trunk/loci/formats/auto/MetadataAutogenHeaderOMEXML.txt

    r3345 r3364  
    3333package loci.formats.ome; 
    3434 
     35import ${basePackage}.*; 
     36import ${basePackage}.${subPackage}.*; 
     37import java.util.List; 
     38 
    3539/** 
    3640 * A utility class for constructing and manipulating OME-XML DOMs for the 
    37  * ${version} of OME-XML. It requires the 
    38  * ${omexml-package} packages to compile (part of ome-java.jar). 
     41 * ${version} version of OME-XML. It requires the 
     42 * ${basePackage} package to compile (part of ome-java.jar). 
    3943 * 
    4044 * <dl><dt><b>Source code:</b></dt> 
  • trunk/loci/formats/auto/MetadataAutogenNodes.txt

    r3345 r3364  
    99[Experimenter] 
    1010an experimenter in the metadata store with a particular index 
    11 2004: CA/Experimenter+ 
     112004: CustomAttributes/Experimenter+ 
    1212200706: Experimenter+ 
    1313String FirstName      the first name of the experimenter 
     
    2020[Group] 
    2121a group in the metadata store with a particular index 
    22 2004: CA/Group+ 
     222004: CustomAttributes/Group+ 
    2323200706: Group+ 
    2424String Name     the name of the group 
     
    2828[Instrument] 
    2929an instrument in the metadata store with a particular index 
    30 2004: CA/Instrument+ 
     302004: CustomAttributes/Instrument+ 
    3131200706: Instrument+ 
    3232String Manufacturer  the name of the manufacturer 
     
    3737[Dimensions] 
    3838a set of pixel dimensions in the metadata store with a particular index. Unless both values are non-null, the MetadataStore should assume pixelSizeX equals pixelSizeY (i.e., should populate the null field with the other field's value) 
    39 2004: Image+/CA/Dimensions 
     392004: Image+/CustomAttributes/Dimensions 
    4040200706: Image+ 
    4141Float PixelSizeX  size of an individual pixel's X axis in microns 
     
    4747[DisplayROI] 
    4848a 5D bounding box region of interest and a set of display options in the metadata store with a particular index 
    49 2004: Image+/CA/DisplayROI 
     492004: Image+/CustomAttributes/DisplayROI 
    5050Integer X0             the starting X coordinate 
    5151Integer Y0             the starting Y coordinate 
     
    6060[Pixels] 
    6161a pixels set in the metadata store with a particular image and pixels index 
    62 2004: Image+/CA/Pixels+ 
     622004: Image+/CustomAttributes/Pixels+ 
    6363Integer SizeX          size of an individual plane or section's X axis (width) 
    6464Integer SizeY          size of an individual plane of section's Y axis (height) 
     
    7272[StageLabel] 
    7373a stage label in the metadata store with a particular index 
    74 2004: Image+/CA/StageLabel+ 
     742004: Image+/CustomAttributes/StageLabel+ 
    7575String Name  a name for the stage label 
    7676Float X      x coordinate of the stage 
     
    8080[LogicalChannel] 
    8181a logical channel and physical channel in the metadata store for a particular pixels 
    82 2004: Image+/CA/LogicalChannel+ 
     822004: Image+/CustomAttributes/LogicalChannel+ 
    8383String Name                       the logical channel's name 
    8484Integer SamplesPerPixel           CTR TODO 
     
    116116[ImagingEnvironment] 
    117117the imaging environment for a particular image 
    118 2004: Image+/CA/ImagingEnvironment 
     1182004: Image+/CustomAttributes/ImagingEnvironment 
    119119Float Temperature  CTR TODO 
    120120Float AirPressure  CTR TODO 
     
    125125#[DisplayChannel] 
    126126#information about the specified channel for a particular image 
    127 #2004: Image+/CA/DisplayChannel+ 
     127#2004: Image+/CustomAttributes/DisplayChannel+ 
    128128#Integer ChannelNumber  CTR TODO 
    129129#Double BlackLevel      CTR TODO 
     
    133133[DisplayOptions] 
    134134various display options for a particular pixels set 
    135 2004: Image+/CA/DisplayOptions 
     1352004: Image+/CustomAttributes/DisplayOptions 
    136136Float Zoom              CTR TODO 
    137137Boolean RedChannelOn    CTR TODO 
     
    147147[LightSource] 
    148148a light source for a particular instrument 
    149 2004: CA/LightSource+ 
     1492004: CustomAttributes/LightSource+ 
    150150String Manufacturer  CTR TODO 
    151151String Model         CTR TODO 
     
    154154[Laser] 
    155155a laser for a particular instrument 
    156 2004: CA/Laser+ 
     1562004: CustomAttributes/Laser+ 
    157157String Type               CTR TODO 
    158158String Medium             CTR TODO 
     
    165165[Filament] 
    166166a filament for a particular instrument 
    167 2004: CA/Filament+ 
     1672004: CustomAttributes/Filament+ 
    168168String Type  CTR TODO 
    169169Float Power  CTR TODO 
     
    171171[Arc] 
    172172an arc for a particular instrument 
    173 2004: CA/Arc+ 
     1732004: CustomAttributes/Arc+ 
    174174String Type  CTR TODO 
    175175Float Power  CTR TODO 
     
    177177[Detector] 
    178178a detector for a particular instrument 
    179 2004: CA/Detector+ 
     1792004: CustomAttributes/Detector+ 
    180180String Manufacturer  CTR TODO 
    181181String Model         CTR TODO 
     
    188188[Objective] 
    189189an objective for a particular instrument 
    190 2004: CA/Objective+ 
     1902004: CustomAttributes/Objective+ 
    191191String Manufacturer  CTR TODO 
    192192String Model         CTR TODO 
     
    198198#[ExcitationFilter]  
    199199#an excitation filter for a particular instrument 
    200 #2004: CA/ExcitationFilter+ 
     200#2004: CustomAttributes/ExcitationFilter+ 
    201201#String Manufacturer  CTR TODO 
    202202#String Model         CTR TODO 
     
    206206[Dichroic] 
    207207a dichroic for a particular instrument 
    208 2004: CA/Dichroic+ 
     2082004: CustomAttributes/Dichroic+ 
    209209String Manufacturer  CTR TODO 
    210210String Model         CTR TODO 
     
    213213[EmissionFilter] 
    214214an emission filter for a particular instrument 
    215 2004: CA/EmissionFilter+ 
     2152004: CustomAttributes/EmissionFilter+ 
    216216String Manufacturer  CTR TODO 
    217217String Model         CTR TODO 
     
    221221[FilterSet] 
    222222a filter set for a particular instrument 
    223 2004: CA/FilterSet+ 
     2232004: CustomAttributes/FilterSet+ 
    224224String Manufacturer  CTR TODO 
    225225String Model         CTR TODO 
     
    228228[OTF] 
    229229an OTF for a particular instrument 
    230 2004: CA/OTF+ 
     2302004: CustomAttributes/OTF+ 
    231231Integer SizeX               CTR TODO 
    232232Integer SizeY               CTR TODO 
Note: See TracChangeset for help on using the changeset viewer.