home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / tools / mem4 / macroguy.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  116 lines

  1. /*
  2.  * @(#)Macroguy.java    1.1 95/05/11  Mary Campione
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package java.tools.mem4;
  21.  
  22. import java.io.*;
  23.  
  24. class Macroguy {
  25.  
  26.     static final int LEN = 1024;
  27.     static final String DEFINE = "#define ";
  28.     static final String INCLUDE = "#include ";
  29.     static Dict definitions;
  30.  
  31.     Macroguy() {
  32.     if (definitions == null)
  33.         definitions = new Dict();
  34.     }
  35.  
  36.     void processFile(InputStream is) {
  37.         int c;
  38.     StringBuffer buf = new StringBuffer(LEN);
  39.  
  40.         while ((c = is.read()) != -1) {
  41.         buf.appendChar(c);
  42.             if (c == '\n') {
  43.         System.out.print(processLine(buf.toString()));
  44.         buf = new StringBuffer(LEN);
  45.         }
  46.         }
  47.     }
  48.  
  49.     String processLine(String str) {
  50.     String returnValue = "";
  51.  
  52.     if (str.startsWith(DEFINE)) {
  53.         processDefine(str.substring(DEFINE.length()));
  54.     } else if (str.startsWith(INCLUDE)) {
  55.         processInclude(str.substring(INCLUDE.length()));
  56.     } else
  57.         returnValue = parseForVars(str);
  58.     return returnValue;
  59.     }
  60.  
  61.     void processDefine(String str) {
  62.     String var, value;
  63.  
  64.     var = str.substring(0, StringUtils.findNextNonAlphaFrom(str, 0));
  65.     value = str.substring(var.length()).trim();
  66.     value = parseForVars(value);
  67.     definitions.addPair(var, value);
  68.     }
  69.  
  70.     void processInclude(String str) {
  71.         include(str.trim());
  72.     }
  73.  
  74.     String parseForVars(String str)
  75.     {
  76.     String returnValue = "";
  77.     String varname;
  78.     int i = 0, c;
  79.  
  80.     while (i < str.length()) {
  81.         // we have a variable
  82.         if ((c = str.charAt(i)) == '$') {
  83.         int j;
  84.         if (i < (str.length() - 1))    // skip $
  85.             i++;
  86.         if (str.charAt(i) == '\\') {    // false alarm
  87.             returnValue += "$";
  88.             i++;
  89.             } else {
  90.             j = StringUtils.findNextNonAlphaFrom(str, i);
  91.             varname = str.substring(i, j);
  92.             returnValue += definitions.valueOf(varname);
  93.             i = j;
  94.             }
  95.         } else {
  96.         returnValue += str.substring(i, i+1);
  97.         i++;
  98.         }
  99.     
  100.     }
  101.     return returnValue;
  102.     }
  103.  
  104.     void include(String filename) {
  105.     File f = new File(filename);
  106.     FileInputStream in;
  107.     int c;
  108.  
  109.     if (!f.exists()) return;
  110.  
  111.     in = new FileInputStream(f);
  112.     new Macroguy().processFile(in);
  113.     in.close();
  114.     }
  115. }
  116.