Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Скремблирование / Source / Scr
.cpp#include"math.h"
#include"Scr.h"
CScr::CScr(void)
{
i1 = 3;
i2 = 5;
Cnt = 0;
ProcPcn = 0;
ScrBuff = NULL;
PB = NULL;
Memo = NULL;
}
void CScr::DeleteBuff(void)
{
DWORD ci;
if(ScrBuff)
{
for(ci = 0; ci < Cnt; ci++)
if(ScrBuff[ci].Buff) delete []ScrBuff[ci].Buff;
delete []ScrBuff;
}
}
BYTE CScr::GetBit(BYTE byValue, BYTE Digit)
{
if(byValue & (BYTE)pow(2, Digit)) return 1; else return 0;
}
void CScr::ScrStrim(TMemo *Strs, DWORD Count)
{
DeleteBuff();
Cnt = Count;
AnsiString gh;
BYTE gch, gchr, *B = new BYTE[i2], cm = 0, cn = 0, cl = 0;
DWORD ci, cj, ck;
BYTE F = 1;
ScrBuff = new stScrBuff[Count];
for(ci = 0; ci < Count; ci++)
{
ProcPcn = ci*20/Count;
if(PB) PB->Position = ProcPcn;
gh = Strs->Lines->Strings[ci];
ScrBuff[ci].Buff = new BYTE[gh.Length()];
ScrBuff[ci].Length = gh.Length();
for(cj = 0; cj < gh.Length(); cj++)
{
gch = (BYTE)gh[cj+1];
gchr = 0;
for(ck = 0; ck < 8; ck++)
{
if(F >= 1 && F <= i1)
B[cm] = GetBit(gch, 7-ck);
if(F >= i1+1 && F <= i2)
B[cm] = GetBit(gch, 7-ck)^B[cn];
if(F > i2)
B[cm] = GetBit(gch, 7-ck)^B[cn]^B[cl];
gchr |= B[cm]<<(7-ck);
if(F < i2+1) F++; else F = i2+1;
if(cm < i2-1) cm++; else cm = 0;
if(cm == i1) cn = 0; else cn++;
if(cn == i2-i1) cl = 0; else cl++;
}
ScrBuff[ci].Buff[cj] = gchr;
}
}
delete []B;
if(Memo) Memo->Clear();
for(ci = 0; ci < Count; ci++)
{
ProcPcn = 20+ci*80/Count;
if(PB) PB->Position = ProcPcn;
gh.SetLength(ScrBuff[ci].Length);
for(cj = 1; cj <= ScrBuff[ci].Length; cj++)
gh[cj] = ScrBuff[ci].Buff[cj-1];
Strs->Lines->Add(gh);
}
if(PB) PB->Position = 0;
}
void CScr::DeScrStrim(TMemo *Strs, DWORD Count)
{
AnsiString gh;
BYTE gch, gchr, *B = new BYTE[i2], *C = new BYTE[i2], cm = 0, cn = 0, cl = 0;
DWORD ci, cj, ck;
BYTE F = 1;
Memo->Clear();
for(ci = 0; ci < Cnt; ci++)
{
ProcPcn = ci*100/Count;
if(PB) PB->Position = ProcPcn;
gh.SetLength(ScrBuff[ci].Length);
for(cj = 0; cj < ScrBuff[ci].Length; cj++)
{
gch = ScrBuff[ci].Buff[cj];
gchr = 0;
for(ck = 0; ck < 8; ck++)
{
if(F >= 1 && F <= i1)
{
C[cm] = GetBit(gch, 7-ck);
B[cm] = GetBit(gch, 7-ck);
}
if(F >= i1+1 && F <= i2)
{
C[cm] = GetBit(gch, 7-ck)^B[cn];
B[cm] = GetBit(gch, 7-ck);
}
if(F > i2)
{
C[cm] = GetBit(gch, 7-ck)^B[cn]^B[cl];
B[cm] = GetBit(gch, 7-ck);
}
gchr |= C[cm]<<(7-ck);
if(F < i2+1) F++; else F = i2+1;
if(cm < i2-1) cm++; else cm = 0;
if(cm == i1) cn = 0; else cn++;
if(cn == i2-i1) cl = 0; else cl++;
}
gh[cj+1] = (char)gchr;
}
Strs->Lines->Add(gh);
}
if(PB) PB->Position = 0;
delete []B;
delete []C;
}
CScr::~CScr(void)
{
DeleteBuff();
}
Соседние файлы в папке Source