请教这段C++代码怎么译成DELPHI的。

请问这段C++代码如何译成DELPHI的。。
C/C++ code

/*
by Flea
*/
int LZSSDecode(unsigned char * in,unsigned char * out,int szin,int szout)
{
        szin = szin > 0? szin: 0x7fffffff;
    int  i, j, k, r = 0, pr, pi = 0,po = 0;
    unsigned int  flags = 0;
        unsigned char buf[0x100F], c;
    for (i = 0; i < 0x100F; buf[i] = 0x20, i++);
    while (pi < szin && po < szout)
        {
        if (((flags >>= 1) & 256) == 0)
                {
                        if(pi >= szin)break;
                c = in[pi++];
            flags = c | 0xff00;
        }
        if (flags & 1)
                {
                        if(pi >= szin || po >= szout)break;
                        c = in[pi++];
                        out[po++] = c;
                        buf[r++] = c;
                        r &= 0xfff;
        } else
                {
                        if(pi + 1 >= szin)break;
            i = in[pi++];
            j = in[pi++];
            i |= (j & 0xf0) << 4;
                        j  = (j & 0x0f) + 2;
                        pr = r;
             for (k = 0; k <= j; k++)
                        {
                c = buf[(pr - i + k) & 0xfff];
                                if(po >= szout)break;
                    out[po++] = c;
                                buf[r++] = c;
                                r &= 0xfff;
            }
        }
    }
    return pi;
}






------解决方案--------------------
FUNCTION LZSSDecode(cin, cout: pbytearray; szin, szout: integer): integer;
VAR i, j, k, r, pr, pi, po: Integer;
flags : INTEGER;
buf : ARRAY[0..$100F] OF byte;
c : byte;
BEGIN

IF szin <= 0 THEN
szin := $7FFFFFFF;
r := 0;
pi := 0;
po := 0;
flags := 0;
i:=0;
while(i<$100F) DO
BEGIN
buf[i] := $20;
WHILE (pi < szin) AND (po < szout) DO
BEGIN
IF (((flags SHR 1) AND 256) = 0) THEN
BEGIN
IF (pi >= szin) THEN break;
c := cin[pi];
pi := pi + 1;
flags := c OR $FF00;
END;
IF ((flags AND 1) <> 0) THEN
BEGIN
IF (pi >= szin) OR (po >= szout) THEN break;
c := cin[pi];
pi := pi + 1;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END
ELSE
BEGIN
IF (pi + 1 >= szin) THEN break;
i := cin[pi];
pi := pi + 1;
j := cin[pi];
pi := pi + 1;
i := i OR (j AND $F0) SHL 4;
j := (j AND $0F) + 2;
pr := r;
FOR k := 0 TO j DO
BEGIN
c := buf[(pr - i + k) AND $FFF];
IF (po >= szout) THEN break;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END;
END;
i:=i+1;
END;
result := pi;
END;
END;

这里粗略翻翻可能有问题在自己检查下
------解决方案--------------------
FUNCTION LZSSDecode(cin, cout: pbytearray; szin, szout: integer): integer;
VAR i, j, k, r, pr, pi, po: Integer;
flags : INTEGER;
buf : ARRAY[0..$100F] OF byte;