function XStrStream_Move_u7bit(this: PStrStreamRec; const Count: XInt): XBool; xcc;
type
PSrcType = PCharInt1;
TSrcType = XCharInt1;
var
P: PSrcType;
EP: XBool;
FP: PSrcType;
LP: PSrcType;
Err: XResult;
label
Leave;
var
Tmp: XInt;
begin
Tmp := Count;
EP := False;
FP := this^.First;
LP := this^.Last;
P := this^.Pos;
if Tmp = XMaxInt then
begin
P := LP;
this^.PosIndex := this^.LastIndex;
Err := xsOk;
goto Leave;
end;
if Tmp = XMinInt then
begin
P := FP;
this^.PosIndex := 0;
Err := xsOk;
goto Leave;
end;
while Tmp > 0 do
begin
if XUInt(P) < XUInt(LP) then
Inc(P)
else
EP := True;
if EP then Break;
Inc(this^.PosIndex);
Dec(Tmp);
end;
while Tmp < 0 do
begin
if XUInt(P) > XUInt(FP) then
Dec(P)
else
EP := True;
if EP then Break;
Dec(this^.PosIndex);
Inc(Tmp);
end;
Err := xsOk;
Leave:
this^.Pos := P;
Result := (Err = xsOk) and not EP;
end;