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);
StrFirstRem(doc_e->tag," ",st);

for (i=3;i>=0;i--) {
StrFirstRem(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;