* Remove 64Kb limitation for FPC by Gabor

This commit is contained in:
pierre 2000-02-07 11:47:25 +00:00
parent e779ae43b4
commit 32004746f0

View File

@ -133,14 +133,14 @@ type
TTopic = object
HelpCtx : THelpCtx;
FileOfs : longint;
TextSize : word;
TextSize : sw_word;
Text : PByteArray;
LinkCount : word;
LinkCount : sw_word;
Links : PKeywordDescriptors;
LastAccess : longint;
FileID : word;
Param : PString;
function LinkSize: word;
function LinkSize: sw_word;
end;
PTopicCollection = ^TTopicCollection;
@ -224,7 +224,7 @@ type
const TopicCacheSize : sw_integer = 10;
HelpStreamBufSize : sw_integer = 4096;
HelpFacility : PHelpFacility = nil;
MaxHelpTopicSize : sw_word = 65520;
MaxHelpTopicSize : sw_word = MaxBytes;
function NewTopic(FileID: byte; HelpCtx: THelpCtx; Pos: longint; Param: string): PTopic;
procedure DisposeTopic(P: PTopic);
@ -242,7 +242,7 @@ uses
{$ifdef Win32}
windows,
{$endif Win32}
WUtils,WHTMLHlp;
WUtils,WViews,WHTMLHlp;
Function GetDosTicks:longint; { returns ticks at 18.2 Hz, just like DOS }
@ -332,7 +332,7 @@ begin
end;
end;
function TTopic.LinkSize: word;
function TTopic.LinkSize: sw_word;
begin
LinkSize:=LinkCount*SizeOf(Links^[0]);
end;
@ -407,10 +407,11 @@ var T: PTopic;
begin
T:=SearchTopic(HelpCtx);
if (T<>nil) then
if T^.Text=nil then
if T^.Text=nil then
begin
MaintainTopicCache;
if ReadTopic(T)=false then T:=nil;
if ReadTopic(T)=false then
T:=nil;
if (T<>nil) and (T^.Text=nil) then T:=nil;
end;
if T<>nil then
@ -562,8 +563,10 @@ var OK: boolean;
R: TRecord;
I: longint;
LastTag,S: string;
CurPtr,HelpCtx: word;
CurPtr: sw_word;
HelpCtx: THelpCtx;
LenCode,CopyCnt,AddLen: byte;
type pword = ^word;
begin
if IndexTableRead then OK:=true else
begin
@ -579,7 +582,7 @@ begin
AddLen:=LenCode and $1f; CopyCnt:=LenCode shr 5;
S[0]:=chr(AddLen); Move(PByteArray(@Entries)^[CurPtr+1],S[1],AddLen);
LastTag:=copy(LastTag,1,CopyCnt)+S;
Move(PByteArray(@Entries)^[CurPtr+1+AddLen],HelpCtx,2);
HelpCtx:=PWord(@PByteArray(@Entries)^[CurPtr+1+AddLen])^;
IndexEntries^.Insert(NewIndexEntry(LastTag,ID,HelpCtx));
Inc(CurPtr,1+AddLen+2);
end;
@ -631,7 +634,7 @@ begin
end;
function TOAHelpFile.ReadTopic(T: PTopic): boolean;
var SrcPtr,DestPtr: word;
var SrcPtr,DestPtr,TopicSize: sw_word;
NewR: TRecord;
function ExtractTextRec(var R: TRecord): boolean;
function GetNextNibble: byte;
@ -644,7 +647,8 @@ begin
end;
procedure AddChar(C: char);
begin
PByteArray(NewR.Data)^[DestPtr]:=ord(C);
if Assigned(NewR.Data) then
PByteArray(NewR.Data)^[DestPtr]:=ord(C);
Inc(DestPtr);
end;
var OK: boolean;
@ -677,8 +681,19 @@ begin
ctNone : ;
ctNibble :
begin
NewR.SClass:=0;
NewR.Size:=0;
NewR.Data:=nil;
SrcPtr:=0; DestPtr:=0;
while SrcPtr<(R.Size*2) do
begin
C:=GetNextChar;
AddChar(C);
end;
TopicSize:=DestPtr;
NewR.SClass:=R.SClass;
NewR.Size:=MaxHelpTopicSize; { R.Size*2 <- bug fixed, i didn't care of RLL codings }
NewR.Size:=Min(MaxHelpTopicSize,TopicSize);
GetMem(NewR.Data, NewR.Size);
SrcPtr:=0; DestPtr:=0;
while SrcPtr<(R.Size*2) do
@ -699,7 +714,7 @@ begin
end;
var OK: boolean;
TextR,KeyWR: TRecord;
I: word;
I: sw_word;
begin
OK:=T<>nil;
if OK and (T^.Text=nil) then
@ -848,9 +863,10 @@ begin
Lines^.Insert(NewStr(S));
end;
procedure RenderTopic;
var Size,CurPtr,I: word;
var Size,CurPtr,I: sw_word;
S: string;
function CountSize(P: PString): boolean; {$ifndef FPC}far;{$endif} begin Inc(Size, length(P^)+1); CountSize:=Size>65200; end;
function CountSize(P: PString): boolean; {$ifndef FPC}far;{$endif}
begin Inc(Size, length(P^)+1); CountSize:=Size>MaxHelpTopicSize-300; end;
begin
Size:=0; Lines^.FirstThat(@CountSize);
T^.TextSize:=Size; GetMem(T^.Text,T^.TextSize);
@ -917,7 +933,7 @@ begin
begin
KW:=Keywords^.At(I);
AddKeyword(KW^.Tag^);
T^.Links^[I].Context:=KW^.HelpCtx; T^.Links^[I].FileID:=KW^.FileID;
T^.Links^[I].Context:=longint(KW^.HelpCtx); T^.Links^[I].FileID:=KW^.FileID;
end;
FlushLine;
AddLine('');
@ -954,7 +970,10 @@ end;
END.
{
$Log$
Revision 1.16 2000-01-03 14:59:03 marco
Revision 1.17 2000-02-07 11:47:25 pierre
* Remove 64Kb limitation for FPC by Gabor
Revision 1.16 2000/01/03 14:59:03 marco
* Fixed Linux code that got time of day. Removed Timezone parameter
Revision 1.15 1999/08/16 18:25:29 peter