// Main.java
package net.sf.gogui.tools.adapter;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import net.sf.gogui.go.GoPoint;
import net.sf.gogui.util.ErrorMessage;
import net.sf.gogui.util.Options;
import net.sf.gogui.util.StringUtil;
import net.sf.gogui.version.Version;
/** Adapter main function. */
public final class Main
{
/** Adapter main function. */
public static void main(String[] args)
{
try
{
String options[] = {
"config:",
"fillpasses",
"gtpfile:",
"help",
"log:",
"lowercase",
"noscore",
"name:",
"size:",
"verbose",
"version",
"version1"
};
Options opt = Options.parse(args, options);
if (opt.contains("help"))
{
printUsage(System.out);
return;
}
if (opt.contains("version"))
{
if (opt.getArguments().size() > 0)
throw new ErrorMessage("No arguments allowed with"
+ " option -version");
System.out.println("gogui-adapter " + Version.get());
return;
}
boolean verbose = opt.contains("verbose");
boolean noScore = opt.contains("noscore");
boolean version1 = opt.contains("version1");
boolean fillPasses = opt.contains("fillpasses");
boolean lowerCase = opt.contains("lowercase");
String name = opt.get("name", null);
String gtpFile = opt.get("gtpfile", null);
ArrayList<String> arguments = opt.getArguments();
int size = opt.getInteger("size", 19, 1, GoPoint.MAX_SIZE);
if (arguments.size() != 1)
{
printUsage(System.err);
System.exit(1);
}
PrintStream log = null;
if (opt.contains("log"))
{
File file = new File(opt.get("log"));
log = new PrintStream(file);
}
String program = arguments.get(0);
Adapter adapter = new Adapter(program, log, gtpFile, verbose,
noScore, version1, fillPasses,
lowerCase, size);
if (name != null)
adapter.setName(name);
adapter.mainLoop(System.in, System.out);
adapter.close();
if (log != null)
log.close();
}
catch (Throwable t)
{
StringUtil.printException(t);
System.exit(1);
}
}
/** Make constructor unavailable; class is for namespace only. */
private Main()
{
}
private static void printUsage(PrintStream out)
{
String helpText =
"Usage: gogui-adapter program\n" +
"\n" +
"-config config file\n" +
"-fillpasses fill non-alternating moves with pass moves\n" +
"-gtpfile file with GTP commands to send at startup\n" +
"-help print help and exit\n" +
"-log file log GTP stream to file\n" +
"-lowercase translate move commands to lowercase\n" +
"-noscore hide score commands\n" +
"-resign score resign if estimated score is below threshold\n" +
"-size accept only this board size\n" +
"-verbose log GTP stream to stderr\n" +
"-version print version and exit\n" +
"-version1 report GTP version 1 in protocol_version\n";
out.print(helpText);
}
}