defs/Defs.java

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. Defs
  2. getValueByEnum
  3. getDOM
  4. validate
  5. printDF_attribute_aliases
  6. printDF_attribute_aliases_map
  7. printDF_attribute_codes
  8. printDF_attribute_enum
  9. printDF_attribute_inv_attr_mask
  10. printDF_attribute_names
  11. printDF_class_aliases
  12. printDF_class_aliases_map
  13. printDF_class_codes
  14. printDF_class_dbase_code_map
  15. printDF_class_enum
  16. printDF_class_mask
  17. printDF_class_names
  18. printQI_queries
  19. printUD_queries
  20. printTemplates
  21. printDF_class_templates
  22. printDF_class_templates_v
  23. printTemplatesV
  24. printDiagrams
  25. printDF_radix_load
  26. main

   1 import java.io.*;
   2 import java.util.*;
   3 import com.sun.xml.parser.*;
   4 import com.sun.xml.tree.*;
   5 import org.xml.sax.*;
   6 import org.w3c.dom.*;
   7 
   8 /**
   9  * RIPE classes generated from Data Object Models.
  10  *
  11  * @author ottrey@ripe.net
  12  * @version $Version$
  13  *
  14  */
  15 public class Defs {
     /* [<][>][^][v][top][bottom][index][help] */
  16 
  17 
  18   private Hashtable ripeAttributes;
  19   private Vector ripeAttributeCodes; 
  20   private Vector ripeClasses;
  21   private Vector ripeAttributeAliases;
  22   private Vector ripeAttributeAliasesMap;
  23   private Vector ripeClassAliases;
  24   private Vector ripeClassAliasesMap;
  25   private Vector ripeQueries;
  26 
  27 
  28   // -----------------oOo-----------------
  29   //              Constructors
  30   // -----------------oOo-----------------
  31   public Defs(boolean normalize) {
  32     // Create a normalized DOM from the xml file for the attributes.
  33     XmlDocument attrDOM = getDOM("attributes.xml", "ripe_attribute", normalize);
  34 
  35     // Initialize.
  36     ripeAttributes = new Hashtable();
  37     ripeAttributeCodes = new Vector();
  38     ripeAttributeAliases = new Vector();
  39     ripeAttributeAliasesMap = new Vector();
  40     ripeClassAliases = new Vector();
  41     ripeClassAliasesMap = new Vector();
  42     ripeQueries = new Vector();
  43 
  44     // Recurse through node tree
  45     NodeList attrNodes = attrDOM.getElementsByTagName("ripe_attribute");
  46     for (int i=0; i < attrNodes.getLength(); i++) {
  47       // (Checking if the attribute is valid)
  48       if (validate("attribute", attrNodes.item(i))) {
  49         AttributeDef ad = new AttributeDef(attrNodes.item(i));
  50         
  51         // and each attribute,
  52         ripeAttributes.put(ad.getCode(), ad);
  53 
  54         // and it's code.
  55         ripeAttributeCodes.addElement(ad.getCode());
  56 
  57         // and it's aliases.
  58         // also map the alias to the attribute index.
  59 
  60         // set the index to map to.
  61         Integer mapIndex = new Integer(ripeAttributeCodes.size()-1);
  62 
  63         //  first the code.
  64         ripeAttributeAliases.addElement(ad.getCode());
  65         ripeAttributeAliasesMap.addElement(mapIndex);
  66 
  67         //  then the name.
  68         ripeAttributeAliases.addElement(ad.getName());
  69         ripeAttributeAliasesMap.addElement(mapIndex);
  70 
  71         if (ad.getAltName().length() > 1) {
  72           //  then the altName.
  73           ripeAttributeAliases.addElement(ad.getAltName());
  74           ripeAttributeAliasesMap.addElement(mapIndex);
  75         }
  76       }
  77     }
  78 
  79     // Create a normalized DOM from the xml file for the classes.
  80     XmlDocument objDOM = getDOM("classes.xml", "ripe_class", normalize);
  81 
  82     // Create a vector to store the classes.
  83     ripeClasses = new Vector();
  84 
  85     // Recurse through node tree
  86     NodeList objNodes = objDOM.getElementsByTagName("ripe_class");
  87     for (int i=0; i < objNodes.getLength(); i++) {
  88       // Check if the class is valid
  89       if (validate("class", objNodes.item(i))) {
  90         ClassDef od = new ClassDef(objNodes.item(i), ripeAttributes);
  91         
  92         // Add the class.
  93         ripeClasses.addElement(od);
  94 
  95         // set the index to map to.
  96         Integer mapIndex = new Integer(ripeClasses.size()-1);
  97 
  98         //  first the code.
  99         ripeClassAliases.addElement(od.getCode());
 100         ripeClassAliasesMap.addElement(mapIndex);
 101 
 102         //  then the name.
 103         ripeClassAliases.addElement(od.getName());
 104         ripeClassAliasesMap.addElement(mapIndex);
 105 
 106       }
 107     }
 108     
 109     // replace class/attribute variables in queries
 110     
 111 
 112 
 113   } // Defs()
 114     
 115     public String getValueByEnum(String name) {
     /* [<][>][^][v][top][bottom][index][help] */
 116         Enumeration e = ripeClasses.elements();
 117         for( int i = 0; e.hasMoreElements();  i++) {
 118             ClassDef d = (ClassDef)e.nextElement();
 119             String a = d.getEnum();
 120             
 121             //System.out.println( d );
 122             
 123             if( name.equals(a) ) {
 124                 return (new Integer(i)).toString();
 125             }
 126         }
 127         System.out.println("ERROR: cannot resolve variable name " + name );
 128         System.exit(-1);
 129         
 130         return ""; // bloody idiot, the compiler
 131     }
 132             
 133             
 134 
 135   /** 
 136    * Creates a Data Object Model from the RIPE classes defined
 137    * in the XML document.
 138    *               
 139    * @author ottrey@ripe.net
 140    * @version $Version$
 141    *               
 142    * @param xmlDocName The URI of the XML document.
 143    * @param ripeClass  The class to be created from.
 144    * @param normalize  Return a normalized DOM.
 145    *
 146    */
 147     private XmlDocument getDOM(String xmlDocName, String ripeClass, boolean normalize) {
     /* [<][>][^][v][top][bottom][index][help] */
 148 
 149     // Convert filename to an input source.
 150     InputSource inSrc= new InputSource();
 151     try {
 152       inSrc = Resolver.createInputSource(new File(xmlDocName));
 153     }
 154     catch (IOException e) {
 155       System.err.println("Failed to convert filename: " + xmlDocName +
 156                          "to an input source" + e);
 157       e.printStackTrace();  System.exit(-1);
 158     }
 159 
 160     // Create and validate a DOM.
 161     XmlDocument dom=null;
 162     try {
 163       dom = XmlDocument.createXmlDocument(inSrc, true);
 164     }
 165     catch (SAXException e) {
 166       System.err.println("Failed to create DOM & validate." + e);
 167       e.printStackTrace();  System.exit(-1);
 168     }
 169     catch (IOException e) {
 170       System.err.println("Failed to create DOM & validate." + e);
 171       e.printStackTrace();  System.exit(-1);
 172     }
 173 
 174     // Normalize the document.
 175     if (normalize) {
 176       dom.getDocumentElement().normalize();
 177     }
 178 
 179     return dom;
 180 
 181   } // getDOM()
 182 
 183   private boolean validate(String type, Node obj) {
     /* [<][>][^][v][top][bottom][index][help] */
 184     boolean result=false;
 185     String status = obj.getAttributes().getNamedItem("status").getNodeValue(); 
 186     String name   = obj.getAttributes().getNamedItem("name").getNodeValue();
 187 
 188     if (status.equals("valid")) {
 189       result=true;
 190     }
 191     else {
 192       System.err.println("Warning: " + type + " " + name + " is " + status);
 193     }
 194 
 195     return result;
 196   } // validClass()
 197 
 198 
 199   // -----------------oOo-----------------
 200   //              Print Methods
 201   // -----------------oOo-----------------
 202   private void printDF_attribute_aliases() {
     /* [<][>][^][v][top][bottom][index][help] */
 203     System.out.println("char * const Attribute_aliases[] = {");
 204     Enumeration e = ripeAttributeAliases.elements();
 205     while (e.hasMoreElements()) {
 206       String a = (String)e.nextElement();
 207       System.out.println("  \"" + a + "\",");
 208     }
 209     System.out.println("  " + "NULL" + "\n" + "}; /* Attribute_aliases */");
 210   } // printDF_attribute_aliases()
 211 
 212   private void printDF_attribute_aliases_map() {
     /* [<][>][^][v][top][bottom][index][help] */
 213     System.out.println("int const Attribute_aliases_map[] = {");
 214     Enumeration e = ripeAttributeAliasesMap.elements();
 215     while (e.hasMoreElements()) {
 216       Integer am = (Integer)e.nextElement();
 217       System.out.println("  " + am + ",");
 218     }
 219     System.out.println("  " + "NULL" + "\n" + "}; /* Attribute_aliases_map */");
 220   } // printDF_attribute_aliases_map()
 221 
 222   private void printDF_attribute_codes() {
     /* [<][>][^][v][top][bottom][index][help] */
 223     System.out.println("char * const Attribute_codes[] = {");
 224     Enumeration e = ripeAttributeCodes.elements();
 225     while (e.hasMoreElements()) {
 226       String ac = (String)e.nextElement();
 227       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 228 
 229       // If the attribute has status="valid".
 230       if (ad.getStatus().equals("valid")) {
 231         // Output the attribute code.
 232         System.out.println("  \"" + ad.getCode() + "\",");
 233       }
 234     }
 235     System.out.println("  " + "NULL" + "\n" + "}; /* Attribute_codes */");
 236   } // printDF_attribute_codes()
 237 
 238   private void printDF_attribute_enum() {
     /* [<][>][^][v][top][bottom][index][help] */
 239     System.out.println("typedef enum _A_Type_t {");
 240 
 241     // Enumerate through the attribute codes.
 242     Enumeration e = ripeAttributeCodes.elements();
 243     while (e.hasMoreElements()) {
 244       String ac = (String)e.nextElement();
 245       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 246 
 247       // If the attribute has status="valid".
 248       if (ad.getStatus().equals("valid")) {
 249         // Output the attribute enum.
 250         System.out.println("  " + ad.getEnum() + ",");
 251       }
 252     }
 253 
 254     System.out.println("  " + "A_END" + "\n" + "} A_Type_t;");
 255   } // printDF_attribute_enum()
 256 
 257   private void printDF_attribute_inv_attr_mask() {
     /* [<][>][^][v][top][bottom][index][help] */
 258     System.out.print("#define INV_ATTR_MASK ");
 259 
 260     // Enumerate through the attribute codes.
 261     Enumeration e = ripeAttributeCodes.elements();
 262     while (e.hasMoreElements()) {
 263       String ac = (String)e.nextElement();
 264       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 265 
 266       // If the attribute has status="valid".
 267       if (ad.getStatus().equals("valid") && ad.getInverse()) {
 268         // Output the attribute enum.
 269         System.out.print(ad.getEnum() + ", ");
 270       }
 271     }
 272 
 273     System.out.println("MA_END");
 274   } // printDF_attribute_inv_attr_mask()
 275 
 276   private void printDF_attribute_names() {
     /* [<][>][^][v][top][bottom][index][help] */
 277     System.out.println("char * const Attribute_names[] = {");
 278     Enumeration e = ripeAttributeCodes.elements();
 279     while (e.hasMoreElements()) {
 280       String ac = (String)e.nextElement();
 281       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 282 
 283       // If the attribute has status="valid".
 284       if (ad.getStatus().equals("valid")) {
 285         // Output the attribute name.
 286         System.out.println("  \"" + ad.getName() + "\",");
 287       }
 288     }
 289     System.out.println("  " + "NULL" + "\n" + "}; /* Attribute_names */");
 290   } // printDF_attribute_names()
 291 
 292   private void printDF_class_aliases() {
     /* [<][>][^][v][top][bottom][index][help] */
 293     System.out.println("char * const Class_aliases[] = {");
 294     Enumeration e = ripeClassAliases.elements();
 295     while (e.hasMoreElements()) {
 296       String a = (String)e.nextElement();
 297       System.out.println("  \"" + a + "\",");
 298     }
 299     System.out.println("  " + "NULL" + "\n" + "}; /* Class_aliases */");
 300   } // printDF_class_aliases()
 301 
 302   private void printDF_class_aliases_map() {
     /* [<][>][^][v][top][bottom][index][help] */
 303     System.out.println("int const Class_aliases_map[] = {");
 304     Enumeration e = ripeClassAliasesMap.elements();
 305     while (e.hasMoreElements()) {
 306       Integer am = (Integer)e.nextElement();
 307       System.out.println("  " + am + ",");
 308     }
 309     System.out.println("  " + "NULL" + "\n" + "}; /* Class_aliases_map */");
 310   } // printDF_class_aliases_map()
 311 
 312   private void printDF_class_codes() {
     /* [<][>][^][v][top][bottom][index][help] */
 313     System.out.println("char * const Class_codes[] = {");
 314     Enumeration e = ripeClasses.elements();
 315     while (e.hasMoreElements()) {
 316       ClassDef od = (ClassDef)e.nextElement();
 317       System.out.println("  \"" + od.getCode() + "\",");
 318     }
 319     System.out.println("  " + "NULL" + "\n" + "}; /* Class_codes */");
 320   } // printDF_class_codes()
 321 
 322   private void printDF_class_dbase_code_map() {
     /* [<][>][^][v][top][bottom][index][help] */
 323     System.out.println("int const Class_dbase_code_map[] = {");
 324     Enumeration e = ripeClasses.elements();
 325     while (e.hasMoreElements()) {
 326       ClassDef cd = (ClassDef)e.nextElement();
 327       System.out.println("  " + cd.getDbaseCode() + ",");
 328     }
 329     System.out.println("  " + "NULL" + "\n" + "}; /* Class_dbase_code_map */");
 330   } // printDF_class_dbase_code_map()
 331 
 332   private void printDF_class_enum() {
     /* [<][>][^][v][top][bottom][index][help] */
 333     System.out.println("typedef enum _C_Type_t {");
 334     Enumeration e = ripeClasses.elements();
 335 
 336     System.out.println("  C_ANY = -1, ");
 337     while (e.hasMoreElements()) {
 338       ClassDef od = (ClassDef)e.nextElement();
 339       System.out.println("  " + od.getEnum() + ",");
 340     }
 341     System.out.println("  " + "C_END" + "\n" + "} C_Type_t;");
 342   } // printDF_class_enum()
 343 
 344   private void printDF_class_mask() {
     /* [<][>][^][v][top][bottom][index][help] */
 345     System.out.print("#define CLASS_MASK ");
 346     Enumeration e = ripeClasses.elements();
 347     while (e.hasMoreElements()) {
 348       ClassDef cd = (ClassDef)e.nextElement();
 349       System.out.print(cd.getEnum() + ", ");
 350     }
 351     System.out.println("MA_END");
 352   } // printDF_class_mask()
 353 
 354   private void printDF_class_names() {
     /* [<][>][^][v][top][bottom][index][help] */
 355     System.out.println("char * const Class_names[] = {");
 356     Enumeration e = ripeClasses.elements();
 357     while (e.hasMoreElements()) {
 358       String a = ((ClassDef)e.nextElement()).getName();
 359       System.out.println("  \"" + a + "\",");
 360     }
 361     System.out.println("  " + "NULL" + "\n" + "}; /* Class_names */");
 362   } // printDF_class_names()
 363 
 364   private void printQI_queries() {
     /* [<][>][^][v][top][bottom][index][help] */
 365     System.out.println(Query.startDoc());
 366     Enumeration e1 = ripeAttributes.elements();
 367     while (e1.hasMoreElements()) {
 368       AttributeDef ad = (AttributeDef)e1.nextElement();
 369       Enumeration e2 = ad.getQueries().elements();
 370       while (e2.hasMoreElements()) {
 371         Query q = (Query)e2.nextElement();
 372         System.out.println(q.getStruct("  ", this));
 373       }
 374     }
 375     System.out.println(Query.endDoc());
 376   } // printQI_queries()
 377 
 378   private void printUD_queries() {
     /* [<][>][^][v][top][bottom][index][help] */
 379 
 380     Enumeration e;
 381 
 382     System.out.println("UD_query Insert[] = {");
 383     e = ripeAttributeCodes.elements();
 384     while (e.hasMoreElements()) {
 385       String ac = (String)e.nextElement();
 386       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 387       System.out.println("  {" + ad.getInsertQ_type() + ", " + "\"" +  ad.getInsert() + "\"},");
 388     }
 389     System.out.println("  " + "{0, NULL}" + "\n" + "}; /* Insert */\n");
 390 
 391 
 392     System.out.println("UD_query Update[] = {");
 393     e = ripeAttributeCodes.elements();
 394     while (e.hasMoreElements()) {
 395       String ac = (String)e.nextElement();
 396       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 397       System.out.println("  {" + ad.getUpdateQ_type() + ", " + "\"" +  ad.getUpdate() + "\"},");
 398     }
 399     System.out.println("  " + "{0, NULL}" + "\n" + "}; /* Update */\n");
 400 
 401     System.out.println("UD_query Dummy[] = {");
 402     e = ripeAttributeCodes.elements();
 403     while (e.hasMoreElements()) {
 404       String ac = (String)e.nextElement();
 405       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 406       System.out.println("  {" + ad.getDummyQ_type() + ", " + "\"" +  ad.getDummy() + "\"},");
 407     }
 408     System.out.println("  " + "{0, NULL}" + "\n" + "}; /* Dummy */\n");
 409 
 410     System.out.println("UD_query Select[] = {");
 411     e = ripeAttributeCodes.elements();
 412     while (e.hasMoreElements()) {
 413       String ac = (String)e.nextElement();
 414       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 415       System.out.println("  {" + ad.getSelectQ_type() + ", " + "\"" +  ad.getSelect() + "\"},");
 416     }
 417     System.out.println("  " + "{0, NULL}" + "\n" + "}; /* Select */\n");
 418 
 419   } // printUD_queries()
 420 
 421   private void printTemplates() {
     /* [<][>][^][v][top][bottom][index][help] */
 422     Enumeration e = ripeClasses.elements();
 423     while (e.hasMoreElements()) {
 424       ClassDef cd = (ClassDef)e.nextElement();
 425       System.out.println(cd.getName() + "\n");
 426       System.out.println(cd.getTemplate(false) + "\n");
 427     }
 428   } // printTemplates()
 429 
 430   private void printDF_class_templates() {
     /* [<][>][^][v][top][bottom][index][help] */
 431     Enumeration e = ripeClasses.elements();
 432     System.out.println("const char *Templates[] = {");
 433     while (e.hasMoreElements()) {
 434       ClassDef cd = (ClassDef)e.nextElement();
 435       System.out.print(cd.getTemplate(true));
 436       System.out.println(",");
 437     }
 438     System.out.println("NULL");
 439     System.out.println("}; /* Templates */");
 440   } // printDF_class_templates()
 441 
 442   private void printDF_class_templates_v() {
     /* [<][>][^][v][top][bottom][index][help] */
 443     Enumeration e = ripeClasses.elements();
 444     System.out.println("const char *Templates_v[] = {");
 445     while (e.hasMoreElements()) {
 446       ClassDef od = (ClassDef)e.nextElement();
 447       System.out.print(od.getTemplateV(true));
 448       System.out.println(",");
 449     }
 450     System.out.println("NULL");
 451     System.out.println("}; /* Templates_v */");
 452   } // printDF_class_templates_v()
 453 
 454   private void printTemplatesV() {
     /* [<][>][^][v][top][bottom][index][help] */
 455     Enumeration e = ripeClasses.elements();
 456     while (e.hasMoreElements()) {
 457       ClassDef od = (ClassDef)e.nextElement();
 458       System.out.println(od.getName() + "\n");
 459       System.out.println(od.getTemplateV(false) + "\n");
 460     }
 461   } // printTemplatesV()
 462 
 463   private void printDiagrams() {
     /* [<][>][^][v][top][bottom][index][help] */
 464     int maxWidth=0;  // Widest diagram
 465     Hashtable foreigns = new Hashtable();
 466 
 467     Enumeration e1 = ripeClasses.elements();
 468     while (e1.hasMoreElements()) {
 469       ClassDef od = (ClassDef)e1.nextElement();
 470       if (maxWidth < od.getWidth()) {
 471         maxWidth = od.getWidth();
 472       }
 473 
 474       Hashtable foriegnAttrs = od.getForeignAttrs();
 475       if (foriegnAttrs != null) {
 476         Enumeration e2 = foriegnAttrs.keys();
 477         while (e2.hasMoreElements()) {
 478           String key = (String)e2.nextElement();
 479           if (!foreigns.containsKey(key)) {
 480             foreigns.put(key, foriegnAttrs.get(key));
 481           }
 482         }
 483       }
 484     }
 485 
 486     System.out.print("Classes:");
 487     for (int i=0; i < maxWidth; i++) {
 488       System.out.print(" ");
 489     }
 490     System.out.println("Foreign keys:");
 491 
 492     Enumeration e3 = ripeClasses.elements();
 493     while (e3.hasMoreElements()) {
 494       ClassDef od = (ClassDef)e3.nextElement();
 495       System.out.print(od.getDiagram(maxWidth, foreigns));
 496     }
 497   } // printDiagrams()
 498 
 499   private void printDF_radix_load() {
     /* [<][>][^][v][top][bottom][index][help] */
 500     System.out.print("DF_Load_t DF_radix_load[] = \n{\n");
 501 
 502     // Enumerate through the attribute codes.
 503     Enumeration e = ripeAttributeCodes.elements();
 504     while (e.hasMoreElements()) {
 505       String ac = (String)e.nextElement();
 506       AttributeDef ad = (AttributeDef)ripeAttributes.get(ac);
 507 
 508       // If the attribute has status="valid".
 509       if (ad.getFamily() != null) {
 510           String ip4 = ad.getV4Load() != null 
 511               ? "\"" + ad.getV4Load() + "\"" : "NULL";
 512           String ip6 = ad.getV6Load() != null 
 513               ? "\"" + ad.getV6Load() + "\"" : "NULL";
 514 
 515           System.out.print("  { " +  ad.getEnum() 
 516                            + ", "   + ad.getFamily() 
 517                            + ",\n\t"  + ip4.replace('\n',' ')
 518                            + ",\n\t"  + ip6.replace('\n',' ')
 519                            + "\n  },\n");
 520       }
 521     } // while more
 522 
 523 
 524     System.out.println("  { -1, -1, NULL, NULL }\n};");
 525   } // printDF_radix_load() 
 526 
 527   // -----------------oOo-----------------
 528   //            Unit test driver
 529   // -----------------oOo-----------------
 530   public static void main (String argv[]) {
     /* [<][>][^][v][top][bottom][index][help] */
 531     int n=0;
 532     boolean err=true;
 533     boolean normalize=false;
 534 
 535     if (argv.length > 0) {
 536       try {
 537         n = Integer.parseInt(argv[0]);
 538         err=false;
 539       }
 540       catch (NumberFormatException e) {
 541       }
 542       if (argv.length == 2) {
 543         if (argv[1].equals("normalize")) {
 544           normalize = true;
 545         }
 546       }
 547     }
 548 
 549     if (!err) {
 550       Defs rc = new Defs(normalize);
 551 
 552       switch (n) {
 553         case  1: rc.printDF_attribute_aliases();          break; 
 554         case  2: rc.printDF_attribute_aliases_map();      break; 
 555         case  3: rc.printDF_attribute_codes();            break; 
 556         case  4: rc.printDF_attribute_enum();             break; 
 557         case  5: rc.printDF_attribute_inv_attr_mask();    break; 
 558         case  6: rc.printDF_attribute_names();            break; 
 559         case  7: rc.printDF_class_aliases();              break; 
 560         case  8: rc.printDF_class_aliases_map();          break; 
 561         case  9: rc.printDF_class_codes();                break; 
 562         case 10: rc.printDF_class_dbase_code_map();       break; 
 563         case 11: rc.printDF_class_enum();                 break; 
 564         case 12: rc.printDF_class_mask();                 break; 
 565         case 13: rc.printDF_class_names();                break; 
 566         case 14: rc.printQI_queries();                    break; 
 567         case 15: rc.printUD_queries();                    break; 
 568         case 16: rc.printDF_class_templates();            break; 
 569         case 17: rc.printDF_class_templates_v();          break; 
 570         case 18: rc.printDiagrams();                      break; 
 571         case 19: rc.printTemplates();                     break; 
 572         case 20: rc.printTemplatesV();                    break; 
 573         case 21: rc.printDF_radix_load();                 break; 
 574         default:
 575           err=true;
 576       }
 577     }
 578 
 579     if (err) {
 580       System.err.println("Usage: makedefs n (Where n = a number 1..21)");
 581     }
 582 
 583   } // main()
 584   // -----------------oOo-----------------
 585 
 586 } // Defs

/* [<][>][^][v][top][bottom][index][help] */