import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.util.*;

class GraphicText 
{
  Applet applet;

  Graphics graphics;

  static final int ASCII_CHARS = 127;

  Image [] characterImage;

  int characterHeight;

  int characterWidth;

  int lineNumber;

  int characterPosition;

  GraphicText(Applet applet, String imagePath) {
    this.applet = applet;
    graphics = applet.getGraphics();
    characterImage = new Image [ASCII_CHARS];

    /* get character images */

    int idx;
    String hexName;
    for (idx = 0; idx < ASCII_CHARS; idx++) {
      if (idx >= 32)
        hexName = hexDigit(idx / 16) + hexDigit(idx % 16);
      else
        hexName = "20"; // space
      characterImage [idx] = getImageFromJAR("x" + hexName + ".gif");
    }

    setOptions(10, 6, 0, 0);
  }

  String hexDigit(int digit) {
    char ch;
    if (digit <= 9)
      ch = (char)((int)'0' + digit);
    else
      ch = (char)((int)'a' + digit - 10);
    return new Character(ch).toString();
  }

  int getLineNumber(int yPixelDimension) {
    return yPixelDimension / characterHeight;
  }

  int getCharNumber(int xPixelDimension) {
    return xPixelDimension / characterWidth;
  }

  void setOptions(
    int characterHeight,
    int characterWidth,
    int lineNumber,
    int characterPosition) {
    this.characterHeight = characterHeight;
    this.characterWidth = characterWidth;
    this.lineNumber = lineNumber;
    this.characterPosition = characterPosition;
  }

  boolean isCapsAlpha(int idx) {
    return idx >= 'A' && idx <= 'Z';
  }

  boolean isAlnum(int idx) {
    return (idx >= '0' && idx <= '9') || (idx >= 'a' && idx <= 'z');
  }

  void printResults(String string) {
    int stringIdx;
    for (stringIdx = 0; stringIdx < string.length(); stringIdx++) {
      graphics.drawImage(
        characterImage[string.charAt(stringIdx)],
        characterPosition * characterWidth,
        lineNumber * characterHeight, applet);
      characterPosition++;
    }
  }

  void displayAllAscii() {
    int idx;
    String stringChar;
    int character;

    lineNumber = 25;
    for (idx = 32; idx < ASCII_CHARS; idx++) {
      stringChar = new Character((char)idx).toString();
      printResults(stringChar);
      if (characterPosition == 24) {
        lineNumber++;
        characterPosition = 0;
      }
    }
  }

  Image getImageFromJAR(String fileName) {
    URL imageURL = getClass().getResource(fileName);
    Toolkit tk = Toolkit.getDefaultToolkit();
    Image img = null;
    try {
      img = tk.createImage(
        (java.awt.image.ImageProducer)imageURL.getContent());
    }
    catch (java.io.IOException e) {
      System.out.println(e);
    }
    return img;
  }
}
