dmolony-DiskBrowser/src/com/bytezone/diskbrowser/infocom/StringManager.java

82 lines
2.8 KiB
Java
Raw Permalink Normal View History

2015-06-01 09:35:51 +00:00
package com.bytezone.diskbrowser.infocom;
import java.util.Map;
import java.util.TreeMap;
import com.bytezone.diskbrowser.applefile.AbstractFile;
2016-02-24 21:11:14 +00:00
import com.bytezone.diskbrowser.utilities.HexFormatter;
2015-06-01 09:35:51 +00:00
2020-02-09 13:02:48 +00:00
// -----------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
class StringManager extends AbstractFile
2020-02-09 13:02:48 +00:00
// -----------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
Header header;
Map<Integer, ZString> strings = new TreeMap<Integer, ZString> ();
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
StringManager (String name, byte[] buffer, Header header)
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
super (name, buffer);
this.header = header;
int ptr = header.stringPointer;
int max = header.fileLength;
while (ptr < max)
{
2019-04-22 04:35:50 +00:00
ZString zs = new ZString (header, ptr);
2015-06-01 09:35:51 +00:00
if (zs.value == null)
2019-04-22 04:35:50 +00:00
break; // used when eof not known or correct - fix!!
2015-06-01 09:35:51 +00:00
strings.put (ptr, zs);
ptr += zs.length;
}
}
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
public boolean containsStringAt (int address)
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
return strings.containsKey (address);
}
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
public String stringAt (int address)
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
if (strings.containsKey (address))
return strings.get (address).value;
return "String not found at : " + address;
}
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
@Override
public String getText ()
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
StringBuilder text = new StringBuilder ();
int count = 0;
text.append (" # Start String\n");
text.append ("--- ----- --------------------------------------------------------"
2019-04-22 04:35:50 +00:00
+ "-------------------\n");
2015-06-01 09:35:51 +00:00
for (ZString s : strings.values ())
{
String s2 = s.value.replace ("\n", "\n ");
text.append (String.format ("%3d %05X \"%s\"%n", ++count, s.startPtr, s2));
}
if (text.length () > 0)
text.deleteCharAt (text.length () - 1);
return text.toString ();
}
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
@Override
public String getHexDump ()
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
int size = header.fileLength - header.stringPointer;
return HexFormatter.format (buffer, header.stringPointer, size);
}
}