blob: 495e24bfabcd000b7d3b08e94b3928499cc32bbb [file] [log] [blame]
package xdc.rov;
import java.io.IOException;
import xdc.rta.IOFReader;
/*
* ======== StringReader ========
*/
public class StringReader implements IOFReader {
MemoryImage memReader;
/*! In fetchString, number of characters to read at a time. */
public int nChars = 64;
/*! In fetchString, maximum number of characters to read. */
public int maxChars = 128;
/*
* ======== Constructor ========
*/
public StringReader(MemoryImage mem)
{
this.memReader = mem;
}
/*
* ======== findString ========
* Retrieves a string from the given address, reading until it reaches a
* null char or until it has read 'maxChars'.
*/
public String findString(long addr, boolean addrCheck)
{
/* String to return. */
String res = "";
/*
* Read characters, nChars at a time, until we reach a null character
* or maxChars.
*/
for (long a = addr; a < addr + maxChars; a += nChars) {
int[] buf = null;
/* Read nChars */
try {
buf = memReader.readMaus(a, nChars, addrCheck);
}
catch (Exception e) {
return (res);
}
/* Decode each char */
for (int i = 0; i < nChars; i++) {
int b = buf[i];
if (b == 0) {
return (res);
}
res += (char)b; /* TODO: use StringBuffer not +=! */
}
}
return (res);
}
/*
* ======== findString ========
* findString API to satisfy the IOFReader interface.
* This API simply calls findString with 'false' for the address check.
*/
public String findString(long addr)
{
return (findString(addr, false));
}
/*
* ======== parse ========
* (non-Javadoc)
* @see xdc.rta.IOFReader#parse(java.lang.String)
*/
public String parse(String arg0) throws IOException
{
return null;
}
/*
* ======== close ========
* (non-Javadoc)
* @see xdc.rta.IOFReader#close()
*/
public void close() throws IOException
{
}
public static IOFReader getOFReaderByName(String className)
throws Exception
{
Class c = Class.forName(className);
return ((IOFReader) c.newInstance());
}
}