Модуль "Flash_SHX" (часть 12) - SetCGCreateFile

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 153
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
procedure TfrmFlash_SHX.SetCGCreateFile(ACGStartAddr: TArrCGAddr; ACGStartAddrFName: TArrCGAddrFName;
                                        var AArrCGCreateFile: TArrCGCreateFile);
var
  i, j, k: integer;
  xSize: integer;
  fHandle: integer;
  xBuffer: pbytearray;
  CRC: word;
  isCG0: boolean;
  CG0_idx: integer;

begin
    CG0_idx:= 255;
    isCG0:= false;
    for i:=0 to spSkinListView1.Items.Count-1 do
      begin
        j:= integer(spSkinListView1.Items[i].Data);
        //CG00: j=2
        //CG01: j=3
        //isCG0:= false;
        if j = 2 then begin isCG0:= true; CG0_idx:= j; end;
        if (j = 3) and isCG0
          then AArrCGCreateFile[j].StartAddr:= ACGStartAddr[1, j-1]
          else AArrCGCreateFile[j].StartAddr:= ACGStartAddr[1, j];
        AArrCGCreateFile[j].CGNumber:= j-2;
        AArrCGCreateFile[j].smgfilename:= ACGStartAddrFName[2, j];
        fHandle:= FileOpen(AArrCGCreateFile[j].smgfilename, fmOpenRead or fmShareDenyNone);
        xSize:= GetFileSize(fHandle, nil);
        AArrCGCreateFile[j].smgfilesize:= xSize;
        FileRead(fHandle, AArrCGCreateFile[j].Signature, 16);
        FileSeek(fHandle, 0, 0);
        // calc CRC
        xBuffer:= AllocMem(xSize);
        CRC:= 0;
        try
          FileRead(fHandle, xBuffer^, xsize);
          k:= 0;
          //calculate smg crc (all bytes in file)
          while k <= (xSize-1) do begin CRC:= CRC + xBuffer[k]; inc(k); end;
        finally
          AArrCGCreateFile[j].CRCsmgfile:= CRC;
          FreeMem(xBuffer);
          FileClose(fHandle);
        end;
      end;
  if CG0_idx <> 255 then
    begin
      AArrCGCreateFile[CG0_idx].StartAddr:= 0;
      AArrCGCreateFile[CG0_idx].CGNumber:= $FF;
      AArrCGCreateFile[CG0_idx].smgfilename:= '';
      AArrCGCreateFile[CG0_idx].smgfilesize:= 0;
      AArrCGCreateFile[CG0_idx].CRCsmgfile:= 0;
      ACGStartAddrFName[1, CG0_idx]:= '';
      ACGStartAddrFName[2, CG0_idx]:= '';
      ACGStartAddr[1, CG0_idx]:= 0;
      ACGStartAddr[2, CG0_idx]:= 0;      
    end;
end;
Rambler's Top100