import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;

class TelnetThread extends Thread {
  Socket mySocket;
  int counter;

  TelnetThread(Socket i, int c) {
    mySocket=i;
    counter=c;
  }

  public void run() {
    try {
      BufferedOutputStream bOut=new
        BufferedOutputStream(mySocket.getOutputStream());
      DataInputStream in=new DataInputStream(mySocket.getInputStream());

      PrintStream pOut=new PrintStream(mySocket.getOutputStream());
      Runtime r=Runtime.getRuntime();
      Process p;  

      boolean done=false;
      while(!done) {
        try {
          String str=in.readLine();
 System.out.println("in:"+str);
          if(str==null)
            done=true;
          else if(str.trim().equals("exit"))
            done=true;
          else {
            p=r.exec("command.com /c "+str);

 //           PrintStream pPOut=new PrintStream(p.getOutputStream());
            DataInputStream pIn=new DataInputStream(p.getInputStream());
 //           pPOut.println(str);       //issue command to process
pOut.println("waiting ...");
//            p.waitFor();
pOut.println("running ...");
            int len,retries=0;
            while((len=pIn.available())>0 || retries++<5)
              if(len>0)
                pOut.println(pIn.readLine());
              else
                sleep(1000);
pOut.println("Done.");


/*         System.out.println(pIn.readLine());
            byte []buf=new byte[512];
            int len;
pOut.println("read output 1");
            for(int i=0;i<10;i++) {
              while(pIn.available()>0) {
pOut.println("write output");
                len=pIn.read(buf);
                bOut.write(buf,0,len);
System.out.println("read output");
              }
              sleep(1000);
            }
            bOut.flush();
*/
System.out.println("done with output");
    //        done=true;
          }
        }
        catch(Exception e) {
          System.out.println(e);
        }
      }
//      sleep(2000);
      mySocket.close();
System.out.println("closing:"+counter);
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }
}

class TelnetServer {
  public static void main(String[] args) {
    int i=1;
    try {
      ServerSocket s=new ServerSocket(23);
      while(true) {
        Socket aSocket=s.accept();
        InputStream sIn=aSocket.getInputStream();
        OutputStream sOut=aSocket.getOutputStream();
      
        System.out.println("starting "+i);
        Process p=Runtime.getRuntime().exec("command.com");
        InputStream in=p.getInputStream();
        InputStream err=p.getErrorStream();
        OutputStream out=p.getOutputStream();

        new StreamPipe(in,sOut,i).start();
        new StreamPipe(err,sOut,i).start();
        new StreamPipe(sIn,out,i).start();
        i++;
      }
    }
    catch (Exception e) {
      System.out.println(e);
    }
  }
}

