nesco писал(а):
И что там думать, посчитал CRC одного блока, подал на Init и перешел на подсчет следующего блокаТак просто? Ща попробую...
Ага. Вроде работает. Память ест сколько скажу, проц 90%, диск почти не трогает.
Но выдает неправильные crc, если больше одного просчета. Т.е. фишка с Init не работает.
Схема получается такая:
Add(MainForm,2953706,378,105)
{
Width=169
Height=66
BorderStyle=1
}
Add(MultiElementEx,1265720,294,140)
{
@Hint=#62:Вычисляет CRC32 для файла по стандартному полиному с маппингом|
link(onCRC32,5126843:doValue,[(336,146)(336,183)(191,183)(191,153)])
link(FileName,6698304:Value,[(300,132)(209,132)])
link(onProgress,13530084:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|29:onProgress=Выдает % обработки|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=489
Height=228
link(doCRC32,2606912:doEvent1,[(31,27)(31,90)])
link(CRC32,4303581:Var1,[(27,201)])
}
Add(Hub,2606912,42,84)
{
OutCount=3
link(onEvent1,2285719:doEvent1,[(69,90)(69,55)])
link(onEvent2,12437222:doOpen,[])
link(onEvent3,15201884:doFor,[(68,104)(68,160)])
}
Add(SharedStream,12437222,210,91)
{
CoreName="CRC32"
PageMem=64
Point(CountFileBlock)
Point(FileOffset)
Point(FileSize)
link(onOpen,14948633:doEvent1,[])
link(onRemapping,14948633:doEvent2,[])
link(FileName,15924144:FileName,[(216,32)(27,32)])
link(Offset,12053861:Value,[])
}
Add(Memory,12053861,224,49)
{
Default=Integer(0)
}
Add(Hub,7955653,182,70)
{
link(onEvent1,12053861:doValue,[(203,76)(203,55)])
link(onEvent2,12437222:doRemapping,[(203,83)(203,104)])
}
Add(For,15201884,77,154)
{
IncludeEnd=1
link(onEvent,9198003:doOperation,[])
link(onStop,16067870:doEvent1,[(114,167)(114,111)])
link(End,12814098:GetData,[])
}
Add(EventFromData,12814098,84,63)
{
link(onEvent,573981:doOperation,[])
}
Add(Math,573981,126,63)
{
OpType=1
Op2=1
link(onResult,12814098:doData,[(162,69)(162,58)(76,58)(76,69)])
link(Op1,12437222:CountFileBlock,[(132,41)(262,41)(262,136)(237,136)])
}
Add(CRC16_32,10763061,343,161)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
Point(Init)
link(onResult,3776194:doValue,[(383,167)(383,41)])
link(Init,5628337:Var1,[(356,152)])
}
Add(StreamConvertor,14323846,301,161)
{
link(onResult,10763061:doCalcCRC,[])
link(Data,12437222:Stream,[(307,148)(216,148)])
}
Add(Hub,16067870,182,105)
{
link(onEvent1,12437222:doClose,[])
link(onEvent2,11898230:doData,[(203,118)(203,216)])
}
Add(Memory,3776194,392,35)
{
Default=String(FFFFFFFF)
}
Add(Hub,2285719,175,49)
{
link(onEvent1,3776194:doClear,[(199,55)(199,48)])
link(onEvent2,12053861:doClear,[])
}
Add(DoData,11898230,392,210)
{
link(onEventData,15924144:onCRC32,[(495,216)(495,27)])
link(Data,4303581:Var2,[])
}
Add(Math,5760399,413,161)
{
OpType=3
link(onResult,2592977:doOperation,[])
link(Op1,9198003:Result,[(419,136)(268,136)(268,194)(125,194)])
link(Op2,12437222:FileSize,[(426,131)(251,131)])
}
Add(Math,2592977,455,161)
{
OpType=2
Op2=100
ResultType=0
link(onResult,15924144:onProgress,[(502,167)(502,34)])
}
Add(GetDataEx,4303581,392,196)
{
link(Data,5628337:Var2,[])
}
Add(GetDataEx,12545579,238,137)
{
link(Data,12437222:FileOffset,[])
}
Add(Hub,14948633,273,91)
{
InCount=2
link(onEvent1,5760399:doOperation,[(405,97)(405,167)])
link(onEvent2,7569199:doEvent,[(294,104)])
}
Add(GetDataEx,5628337,392,147)
{
link(Data,3776194:Value,[])
}
Add(Math,9198003,119,154)
{
ResultType=0
link(onResult,7955653:doEvent1,[(167,160)(167,76)])
link(Op1,12437222:SizeMMF,[(125,138)(230,138)])
link(Op2,12545579:Var1,[(132,142)])
}
Add(Debug,7569199,287,140)
{
link(onEvent,14323846:doConvert,[(294,167)])
}
END_SDK
Add(TimeCounter,16621982,252,140)
{
link(onStart,1265720:doCRC32,[])
link(onStop,8882687:doMessage,[(289,153)(289,209)])
}
Add(Message,8882687,294,203)
{
link(Message,5126843:Value,[(300,191)(209,191)])
}
Add(Button,14533549,56,91)
{
Width=160
Caption="map"
link(onClick,9905081:doStart,[])
}
Add(ODialog,9863709,161,91)
{
link(onExecute,6698304:doValue,[])
}
Add(Memory,6698304,203,91)
{
link(onData,16621982:doStart,[(243,97)(243,146)])
}
Add(Memory,5126843,203,147)
{
link(onData,16621982:doStop,[])
}
Add(GProgressBar,3563637,378,147)
{
Top=20
Width=160
Height=10
LightProgress=65280
DarkProgress=0
}
Add(Hub,13530084,350,147)
{
link(onEvent1,3563637:doPosition,[])
link(onEvent2,2953706:doCaption,[(371,160)(371,111)])
}
Add(Thread,9905081,112,91)
{
FastStop=0
link(onExec,9863709:doExecute,[])
}
64 страницы = 4мб. Если файл меньше 4мб - crc верная. Если больше - нет.
Все-таки надо думать
