package nativeLib;

import code.instr.Instruction;
import code.modules.CurryModule;
import code.space.Computation;
import code.space.Space;
import code.stuff.Logger;
import code.stuff.Tracer;
import code.symbols.*;
import code.table.ModuleTable;
import code.term.Term;
import code.term.TermImplChar;
import code.type.*;
import static code.type.PredefinedTypes.*;

import java.io.*;
import java.util.*;

/**
 * @author Sunita Marathe
 * @since 8/22/2005
 */
public class IO_prim extends CurryModule {
    public static final String moduleName = "IO_prim";

    public IO_prim() {
        super(moduleName, new Vector(), null, 0, createSymbols(), false);
    }

    private static Vector createSymbols() {
        Vector v = new Vector();
        return v;
    }

    // ------------------------------------------------------------------

    public static class FileTable {

    	public static final String handleTypeName = "IO.Handle";
    	public static final TypeExpression handleType
        	= new TypeConstructor(handleTypeName);

	private static Hashtable fileTab = new Hashtable();
  
	static {
	    fileTab.put (new Integer (0),  System.in);
	    fileTab.put (new Integer (1),  System.out);
	    fileTab.put (new Integer (2),  System.err);
	}

	private static int handle = 3;

	public static int getHandle (Object stream) {
	    fileTab.put (new Integer (handle), stream);
	    return handle++;
	} 

	public static void releaseHandle (int handle) {
	    fileTab.remove (new Integer (handle));
	}

	public static Object getStream (int handle) {
	    return fileTab.get (new Integer (handle));
	}
    }
}

