diff options
author | Graeme Geldenhuys <graeme@mastermaths.co.za> | 2009-11-27 15:45:14 +0200 |
---|---|---|
committer | Graeme Geldenhuys <graeme@mastermaths.co.za> | 2009-11-27 15:45:14 +0200 |
commit | 441add90d3183e0f5e8020442a21c9b3bf62c6ab (patch) | |
tree | 6f648c4400c170d82ac7cbaa698329deafb4e1f8 /docview/src/docdump/readstrings.pas | |
parent | ab9a941d02281b95f00dd74f69a744ac302743e3 (diff) | |
parent | a1f68b05ed682e9a3640684d99a6d228cec80a35 (diff) | |
download | fpGUI-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.pas | 56 |
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. + |