import Jakarta.util.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URI;
import java.util.Hashtable;
import java.util.List;
import java.util.Stack;
import java.util.EmptyStackException;
import java.util.Vector;
//**************************************************
// class AstProperties
//**************************************************
public class AstProperties {
private Hashtable table;
private PrintWriter pw = null;
private ByteArrayOutputStream baos = null;
private boolean pwStdOut = false;
public AstProperties() {
table = new Hashtable();
}
// All properties should have a string as the key, but the value
// is an object which must be cast appropriately by the caller.
public void setProperty( String key, Object value ) {
table.put( key, value );
}
public Object getProperty( String key ) {
return ( table.get( key ) );
}
public Object removeProperty( String key ) {
return ( table.remove( key ) );
}
public boolean containsProperty( String key ) {
return ( table.containsKey( key ) );
}
public void setPw( PrintWriter p ) {
pw = p;
}
public void setBaos( ByteArrayOutputStream b ) {
baos = b;
}
public static AstProperties open( Writer out ) {
AstProperties props;
PrintWriter pw = null;
props = new AstProperties();
String lineSeparator =
System.getProperties().getProperty( "line.separator" );
if ( lineSeparator.compareTo( "\n" ) != 0 )
pw = new PrintWriter( new FixDosWriter( pw ) );
else
pw = new PrintWriter( out );
props.setProperty( "output", pw );
props.setPw( pw );
return props;
}
///------------new here ----------------------
public static AstProperties open( String filename ) {
return open( null, filename );
}
public static AstProperties open( String directory, String filename ) {
AstProperties props;
PrintWriter pw;
props = new AstProperties();
pw = null;
if ( filename == null ) {
pw = new PrintWriter( System.out );
props.pwStdOut = true;
}
else {
String lineSeparator =
System.getProperties().getProperty( "line.separator" );
try {
FileOutputStream os = new FileOutputStream( new File( directory,filename ) );
if ( lineSeparator.compareTo( "\n" ) != 0 )
pw = new PrintWriter( new FixDosOutputStream( os ) );
else
pw = new PrintWriter( os );
}
catch ( IOException e ) {
System.err.print( "Cannot open " );
if ( directory != null )
System.err.print( directory + File.separator );
System.err.println( filename + e.getMessage() );
System.exit( 1 );
}
}
props.setProperty( "output", pw );
props.setPw( pw );
return props;
}
//--------------end new here--------------------
// dump reduction into string array
public static AstProperties open() {
AstProperties props;
PrintWriter pw;
ByteArrayOutputStream baos;
props = new AstProperties();
baos = new ByteArrayOutputStream();
pw = new PrintWriter( baos );
props.setProperty( "output", pw );
props.setPw( pw );
props.setBaos( baos );
return props;
}
public String close() {
// Step 1: in any case, flush
pw.flush();
// Step 2: different actions for output to file, StdOut, and bytearrays
if ( baos != null )
return baos.toString(); // return string of entire buffer
if ( !pwStdOut ) {
pw.close(); // if file, close it
}
return null; // return null if Stdout or file
}
public void print( String arg ) {
PrintWriter p = ( PrintWriter ) getProperty( "output" );
p.print( arg );
}
public void println( String arg ) {
PrintWriter p = ( PrintWriter ) getProperty( "output" );
p.println( arg );
}
public void print( AstNode n ) {
PrintWriter p = ( PrintWriter ) getProperty( "output" );
p.print( n );
}
public void println( AstNode n ) {
PrintWriter p = ( PrintWriter ) getProperty( "output" );
p.println( n );
}
}