summaryrefslogtreecommitdiff
path: root/docview/src/docdump/readstrings.pas
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2009-11-27 15:45:14 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2009-11-27 15:45:14 +0200
commit441add90d3183e0f5e8020442a21c9b3bf62c6ab (patch)
tree6f648c4400c170d82ac7cbaa698329deafb4e1f8 /docview/src/docdump/readstrings.pas
parentab9a941d02281b95f00dd74f69a744ac302743e3 (diff)
parenta1f68b05ed682e9a3640684d99a6d228cec80a35 (diff)
downloadfpGUI-441add90d3183e0f5e8020442a21c9b3bf62c6ab.tar.xz
Merged separate DocView project as our subdirectory
Diffstat (limited to 'docview/src/docdump/readstrings.pas')
-rw-r--r--docview/src/docdump/readstrings.pas56
1 files changed, 56 insertions, 0 deletions
diff --git a/docview/src/docdump/readstrings.pas b/docview/src/docdump/readstrings.pas
new file mode 100644
index 00000000..7b397408
--- /dev/null
+++ b/docview/src/docdump/readstrings.pas
@@ -0,0 +1,56 @@
+{
+ Dump the String table data
+}
+unit readstrings;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, filestreamhelper;
+
+procedure ProcessStringsTable(AIn: TFileStream; AOut: TFileTextStream);
+
+
+implementation
+
+uses
+ readheader;
+
+procedure ProcessStringsTable(AIn: TFileStream; AOut: TFileTextStream);
+var
+ name: string;
+ pData: pointer;
+ p: pointer;
+ pLength: pByte;
+ bytes: integer;
+begin
+ AOut.WriteLn('');
+ AOut.WriteLn('Strings Data');
+
+ if eHdr.StringsSize > 0 then
+ begin
+ pData := nil;
+ AIn.Seek(eHdr.StringsOffset, soBeginning);
+ GetMem(pData, eHdr.StringsSize); // allocate temp space for data
+ AIn.Read(pData^, eHdr.StringsSize); // read all data in one shot
+ p := pData; // p is our incrementing position in the data
+ bytes := 0;
+ while bytes < eHdr.StringsSize do;
+ begin
+ pLength := p; // length byte, including itself
+ bytes := bytes + pLength^;
+ SetString(name, p+1, pLength^-1); // use length value minus the length byte to get the string length
+ AOut.WriteLn(Format(' %s', [name]));
+ inc(p, pLength^); // skip to next entry using full length (including length byte)
+ end;
+ FreeMem(pData, eHdr.StringsSize); // free allocated space
+ end
+ else
+ AOut.WriteLn(' There are no strings');
+
+end;
+
+end.
+