/* Chesapeake TTCP
 * Copyright 1997, Chesapeake Computer Consultants, Inc.
 */

import java.awt.*;
import java.io.IOException;
import java.lang.*;

public class ttcp {

    public static void main(String args[]) {
	    int i = 0, j;
        String arg;
        char flag;
    	boolean tr = true;
    	boolean usegui = true;
    	boolean err = false;
    	ParamsClass Params;
    	TransThread Trans;
        ttcpControls thettcpControls = null;
        int bufsize = 0, numbuf = 0, port = 0;
        String host = "";

//        System.err.println("Starting ttcp, args=" + args.length);
    	if (args.length > 0) {
    	    usegui = false;

    	}
//   	    System.err.println("usegui= " + usegui);

    	if (!usegui) { // Command line args, so we aren't using the GUI
            while (i < args.length && args[i].startsWith("-")) {
                arg = args[i++];
                if (arg.equals("-l")) {  // check arguments - some require parameters
                    if (i < args.length)
                        bufsize = Integer.parseInt(args[i++]);
                    else {
                        System.err.println("-l requires a buffer length");
                        err = true;
                    }
                }
                else if (arg.equals("-n")) {
                    if (i < args.length)
                        numbuf = Integer.parseInt(args[i++]);
                    else {
                        System.err.println("-n requires a number of buffers");
                        err = true;
                    }
                }
                else if (arg.equals("-p")) {
                    if (i < args.length)
                        port = Integer.parseInt(args[i++]);
                    else {
                        System.err.println("-p requires a port number");
                        err = true;
                    }
                }
        	    else if (arg.equals("-t")) {
                    if (i < args.length)
                        host = args[i++];
                    else {
                        System.err.println("-t requires a hostname or address");
                        err = true;
                    }
                    tr = false;
                }
                else if (arg.equals("-r")) {
                    tr = true;
                }
                else if (arg.equals("-h")) {
                    System.out.println("Usage: java ttcp <options>");
                    System.out.println("  -r         Receive mode");
                    System.out.println("  -t <hostname or IP addr>   Transmit mode");
                    System.out.println("  -l #       Buffer Size (default 8192)");
                    System.out.println("  -n #       Number of Buffers (default 1024)");
                    System.out.println("  -p #       TCP Port Number (default 5001)");
                    System.out.println("  -h         Print this message");
                    System.exit(1);
                }
                else {
                    System.err.println("Invalid argument: " + arg);
                    System.exit(1);
                }
        	}
        	if (err) {
        	    System.exit(1);
        	}
/*        	System.err.println("tr= " + tr);
        	System.err.println("-l= " + bufsize);
        	System.err.println("-n= " + numbuf);
        	System.err.println("-p= " + port);
        	System.err.println("host= " + host);
*/
        }
        Params = new ParamsClass();
        if (!usegui) {
            if (bufsize != 0) Params.setBufSize(bufsize);
            if (numbuf != 0) Params.setNumBuf(numbuf);
            if (port != 0) Params.setPort(port);
            if (tr == false) Params.setTR(tr);
            if (!host.equals("")) Params.setHost(host);
        }

        if (usegui) { // If there are no args, then use the GUI
                thettcpControls = new ttcpControls(Params);
                thettcpControls.show();
                // TransThread is started from within ttcpControls
    	}
    	else { // Command line, set parameters
            Trans = new TransThread(Params, null);
            Trans.setPriority(Thread.NORM_PRIORITY);
            Trans.start();
            // Wait for thread to die, then display transfer stats
            while (Trans.isAlive()) {
                try { Thread.sleep(1000L);
                } catch (InterruptedException e) { }
            }
            System.out.println(Params.getStats());
        }

    }
}


