Code archives/File Utilities/Recursive CRC-32 file builder
This code has been declared by its author to be Public Domain code.
Download source code
| Takes a directory and recursively calculates crc-32 for all files and stores it in a file. Great for online game patchers. Simply use the tool to build a list, and your patcher can download patchlist.txt and see if the CRC of any game files have changed and if so, download the new one. NOTE: It's hardcoded to the path the exe file is in, and it skips patchlist.txt and buildcrc.exe due to obvious reasons :) |
; Recursive directory list CRC-32 builder by Odin Jensen (www.furi.dk) ; Setup CRC stuff Dim CRC32_table(255) CRC32_init() Global outfile = WriteFile("patchinfo.dat") Print("CRC-32 list builder by Odin Jensen") Print("----------------------------------") Print("") BuildList("./") CloseFile(outfile) Print("") Print("Done.") ; Build list function Function BuildList(From_$) Local MyDir, MyFile$ MyDir = ReadDir(From_$) MyFile$ = NextFile$(MyDir) MyFile$ = NextFile$(MyDir) Repeat MyFile$ = NextFile$(MyDir) If MyFile$ = "" Then Exit If FileType(From_$ + "\" + MyFile$) = 2 Then BuildList(From_$ + "\" + MyFile$) Else temp$ = Replace(From_$ + "\" + MyFile$, "./\", "") If ((Not Right(temp, 13) = "patchinfo.dat") And (Not Right(temp, 12) = "buildcrc.exe")) crc32% = CRC32_FromFile(temp) WriteLine(outfile, temp + "," + Str(Hex(crc32))) Print("> CRC32 for file '" + temp + "' is " + Str(Hex(crc32))) End If End If Forever CloseDir(MyDir) End Function ; CRC init function Function CRC32_Init() Local i Local j Local value For i=0 To 255 value=i For j=0 To 7 If (value And $1) Then value=(value Shr 1) Xor $EDB88320 Else value=(value Shr 1) EndIf Next CRC32_table(i)=value Next End Function ; Function to get CRC-32 value from a file Function CRC32_FromFile(name$) Local byte Local crc Local file crc=$FFFFFFFF file=ReadFile(name$) If file=0 Then Return While Not Eof(file) byte=ReadByte(file) crc=(crc Shr 8) Xor CRC32_table(byte Xor (crc And $FF)) Wend Return ~crc End Function |