Модуль "Flash_SHX" (часть 10) - CG_Add

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 171
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TfrmFlash_SHX.CG_Add(ASMGFName: TFileName; AStartAddr: dword; ACGNum: integer): integer;  //255 - если ошибка
var
  fHandle: integer;
  fSize: integer;
  xBuffer: pbytearray;
  idx: integer;
  k: integer;
  CRC: word;

begin
  result:= 255;
  fHandle:= FileOpen(ASMGFName, fmOpenRead);
  if fHandle = -1 then exit;
  try
    fSize:= GetFileSize(fHandle, nil);
    idx:= ACGNum + 2;
    ArrCGCreateFile[idx].smgfilename:= ASMGFName;
    ArrCGCreateFile[idx].smgfilesize:= fSize;
    ArrCGCreateFile[idx].StartAddr:= AStartAddr;
    ArrCGCreateFile[idx].CGNumber:= ACGNum;
    FileRead(fHandle, ArrCGCreateFile[idx].Signature, 16);
    xBuffer:= AllocMem(fSize);
    CRC:= 0;
    FileRead(fHandle, xBuffer^, fsize);
    k:= 0;
    while k <= (fSize-1) do begin CRC:= CRC + xBuffer[k]; inc(k); end;
    ArrCGCreateFile[idx].CRCsmgfile:= CRC;
    CGStartAddrFName[2, idx]:= ASMGFName;
    if ACGNum = -2
      then CGStartAddrFName[1, idx]:= 'RamDownLoader'
      else CGStartAddrFName[1, idx]:= 'CG' + AddSymbol(inttostr(ACGNum), '0', 2); 
    CGStartAddr[1, idx]:= AStartAddr;
    CGStartAddr[2, idx]:= AStartAddr + fSize - 1;
    CGStartAddrState[1, idx]:= 1;
    CGStartAddrState[2, idx]:= 1;
    result:= idx;
  finally
    FileClose(fHandle);
    FreeMem(xBuffer);
  end;  
end;
Rambler's Top100