import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class domtrans extends Applet implements TextListener {
   static long	maxVal = (long) Integer.MAX_VALUE * 2 + 1;

   Label	inLabel;
   TextField	inText;
   Label	outLabel;
   TextField	outText;

   public void init() {

      // create user interface items
      inLabel = new Label  ("Domain as large number:");
      inText = new TextField ("", 10);
      outLabel = new Label ("Domain as dotted quad: ");
      outText = new TextField ("", 12);

      // add items into applet
      setLayout (new GridLayout (2, 2));
      add (inLabel);
      add (inText);
      add (outLabel);
      add (outText);

      // register event handlers
      inText.addTextListener (this);

      // request that input get focus
      inText.requestFocus();

      // paint in initial config
      repaint();
   }


   public void textValueChanged (TextEvent e) {
      long	domain;
      int	quad;
      String	s = "";

      // get the domain, watching for errors
      try {
	 domain = Long.parseLong (inText.getText());

	 // if too big, say so
	 if (domain > maxVal) { s = "max = " + maxVal; }
	 // else
	 else {
	    // for each quad, LEAST SIGNIFICANT FIRST
	    for (quad = 0; quad < 4; quad++) {

	       // if we already have any bytes, separate with dot
	       if (0 != s.length()) s = "." + s;

	       // convert quad to decimal string
	       s = Long.toString (domain % 256) + s;

	       // remove current quad
	       domain /= 256;
	    }
	 }
      }

      // if we got an invalidly formatted number
      catch (NumberFormatException x) {

	 // if actually anything there, complain
	 if (0 < inText.getText().length()) {
	    s = "Invalid integer format";
	 }
	 // else just empty output
	 else { s = ""; }
      }

      // put new text in output field
      outText.setText (s);
   }

}
