source: abuse/trunk/src/crc.cpp @ 585

Last change on this file since 585 was 585, checked in by Sam Hocevar, 11 years ago

tool: compute and display SPEC item CRCs.

File size: 1.1 KB
RevLine 
[56]1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
[494]4 *  Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net>
[56]5 *
6 *  This software was released into the Public Domain. As with most public
[555]7 *  domain software, no warranty is made or implied by Crack dot Com, by
8 *  Jonathan Clark, or by Sam Hocevar.
[56]9 */
10
[555]11#if defined HAVE_CONFIG_H
12#   include "config.h"
13#endif
[56]14
[481]15#include "crc.h"
[2]16
[585]17uint16_t calc_crc(void *buf, size_t len)
[2]18{
[585]19    uint8_t *data = (uint8_t *)buf;
20    uint8_t c1 = 0, c2 = 0;
21
22    while (len--)
23        c2 += (c1 += *data++);
24
25    return (c2 << 8) | c1;
[2]26}
27
28
[124]29
[17]30uint32_t crc_file(bFILE *fp)
[2]31{
[17]32  uint8_t crc1=0,crc2=0,crc3=0,crc4=0;
[2]33
34  int size=0x1000;
[129]35  uint8_t *buffer=(uint8_t *)malloc(size),*c;
[2]36  long l=fp->file_size();
37  long cur_pos=fp->tell();
38  fp->seek(0,0);
39  while (l)
40  {
41    int nr=fp->read(buffer,size);
42    if (nr==0) l=0;
43    else
44    {
45      l-=nr;
[494]46      for (c=buffer; nr; nr--,c++)
[124]47      {
48    crc1+=*c;
49    crc2+=crc1;
50    crc3+=crc2;
51    crc4+=crc3;
[2]52      }
53    }
54  }
55  fp->seek(cur_pos,0);
[129]56  free(buffer);
[2]57  return (crc1|(crc2<<8)|(crc3<<16)|(crc4<<24));
58}
Note: See TracBrowser for help on using the repository browser.