///////////////////////////////////////////////////////////////////// // Letters.java -- LED Sign V1.0f // // This class parses the font file and stores // each letter in an array of boolean (on/off). // It takes care of all the storage and // retrieval of letters data structure. // // Revisions: // V1.0f: Written July 13 - 14, 1995 // // By Darrick Brown // dbrown@cs.hope.edu // http://www.cs.hope.edu/~dbrown/ // // © Copyright 1995 ///////////////////////////////////////////////////////////////////// package LED; import java.awt.*; import java.io.*; import java.net.*; // my struct :) class Index { byte ch; int width; boolean letter[][]; Index(byte b, int w, int h) { letter = new boolean[w][h]; width = w; ch = b; } } ////////////////////////////////////////////////////////////////// // The Letters Class ////////////////////////////////////////////////////////////////// class Letters { int HEIGHT,TOTAL; String let; URL baseURL; InputStream file; DataInputStream dis; int w,h,num,place,len,space,swidth; Index index[]; ////////////////////////////////////////////////////////////////// // The class constructor public Letters(URL baseURL, String URLfile, int width) throws IOException { // Set some initial variables file = (new URL(baseURL,URLfile)).openStream(); dis = new DataInputStream(file); swidth = width; initLetters(); } ////////////////////////////////////////////////////////////////// public int height() { return HEIGHT; } ////////////////////////////////////////////////////////////////// // Read in the letters void initLetters() throws IOException { int a,b,c; byte ch; // the character of the letter int i,j,k; String s; // A line in the font file boolean done; int width; // Just to make the compiler shut up about // these "may not be initialized". w = 5; h = 5; num = 100; // find the size().height done = false; while(!done) { s = dis.readLine(); if(!s.startsWith("!!")) // If is not a comment line { h = (new Integer(s)).intValue(); HEIGHT = h*5; done = true; } } // find the width done = false; while(!done) { s = dis.readLine(); if(!s.startsWith("!!")) // If is not a comment line { w = (new Integer(s)).intValue(); done = true; } } // Find the number of characters done = false; while(!done) { s = dis.readLine(); if(!s.startsWith("!!")) // If is not a comment line { num = (new Integer(s)).intValue(); done = true; } } // The "num+1" allocates the extra array position for " " (space) index = new Index[num+1]; // Ok we gots the data, lets read in the characters! for(i=0;i 0) { if(!s.startsWith("!!")) // If is not a comment line { done = true; } } else { s = " "; done = true; } } for(k=0;k=s.length()) { index[i].letter[k][j] = false; } else { if(s.charAt(k) == '#') index[i].letter[k][j] = true; else index[i].letter[k][j] = false; } } } } // end reading in the letters index[num] = new Index((byte)32,swidth,h); // close the datastreams file.close(); dis.close(); } // end of InitLetters() ////////////////////////////////////////////////////////////////// // find the LED letter and return it public Index getLetter(char c) { int j; if(c == (char)(32)) { j = num; // I know where this one is! } else { // look for it j = 0; while(c != index[j].ch && j < num) j++; } return index[j]; } // End getLetter() } // End Letters Class