U8 key[4][256];

U0 InitKey()
{
        I64 i, j;

        for (i = 0; i < 4; i++)
        {
                for (j = 0; j < 256; j++)
                        key[i][j] = j;
                for (j = 0; j < 255; j++)
                        SwapU8(&key[i][j], &key[i][j + RandU32 % (256 - j)]);
        }
}

U0 LogScrambleFile(U8 *name)
{
        CDoc            *doc = DocRead(name, DOCF_PLAIN_TEXT | DOCF_NO_CURSOR);
        CDocEntry       *doc_e = doc->head.next;
        I64                      i;
        U32                      num;
        U8                      *st, *st2;
        "Scrambling: %s\n", name;

        while (doc_e != doc)
        {
                if (doc_e->type_u8 == DOCT_TEXT)
                {
                        st = MAlloc(StrLen(doc_e->tag) + 1);
                        st2 = MAlloc(StrLen(doc_e->tag) + 1);
                        StrFirstRemove(doc_e->tag, " ", st);

                        for (i = 3; i >= 0; i--)
                        {
                                StrFirstRemove(st, ".", st2);
                                num.u8[i] = key[i][Str2I64(st2) & 255];
                        }

                        Free(st);
                        Free(st2);

                        st = MStrPrint("%d.%d.%d.%d %s", num.u8[3], num.u8[2], num.u8[1], num.u8[0], doc_e->tag);
                        Free(doc_e->tag);
                        doc_e->tag = st;
                }
                doc_e = doc_e->next;
        }
        DocWrite(doc);
        DocDel(doc);
}
U0 WebLogScramble(U8 *files_find_mask)
{
        CDirEntry *tmpde = FilesFind(files_find_mask, FUF_RECURSE|FUF_JUST_FILES), *tmpde1 = tmpde;
        InitKey;

        while (tmpde)
        {
                LogScrambleFile(tmpde->full_name);
                tmpde = tmpde->next;
        }
        DirTreeDel(tmpde1);
}

U0 LogScrambleDemo()
{
        U8 *dirname;

        Cd(__DIR__);
        dirname = DirCur;
        ST_WARN_ST "This will scramble all .log files in '%s'.\n\n", dirname;
        Free(dirname);
        if (AreYouSure)
                WebLogScramble("*.log*");
}

LogScrambleDemo;