PROGRAM
MAP
MODULE('CLARION')
sj_CRC32(*STRING Buffer, ULONG Bytes, ULONG Start), ULONG, RAW, NAME('CLA$CRC32')
END
MODULE('WINAPI')
sj_CreateFile(*CSTRING,ULONG,ULONG,LONG,ULONG,ULONG,UNSIGNED=0),UNSIGNED,RAW,PASCAL,NAME('CreateFileA')
sj_GetFileSize(UNSIGNED,*ULONG),ULONG,PASCAL,NAME('GetFileSize')
sj_ReadFile(UNSIGNED,LONG,ULONG,*ULONG,LONG),BOOL,PASCAL,RAW,NAME('ReadFile')
sj_CloseHandle(UNSIGNED),BOOL,PASCAL,PROC,NAME('CloseHandle')
END
CalcFileCRC(STRING inpFileName),ULONG
END
GLO:FileName STRING(255)
GLO:CRCValue ULONG
Window WINDOW('Calculate CRC Value of File'),AT(,,254,36),FONT('Arial',8,,FONT:bold),CENTER,WALLPAPER('BROWN.JPG'), |
TILED,SYSTEM,GRAY
PROMPT('File to calculate CRC'),AT(3,5),USE(?GLO:FileName:Prompt),TRN
ENTRY(@s255),AT(68,5,171,10),USE(GLO:FileName),LEFT,REQ
BUTTON,AT(241,5,10,10),USE(?GLO:FileName:Lookup),ICON(ICON:Ellipsis)
PROMPT('CRC Value'),AT(3,20),USE(?GLO:CRCValue:Prompt),TRN
ENTRY(@N_18B),AT(68,20,89,10),USE(GLO:CRCValue),SKIP,RIGHT(1),READONLY
BUTTON('&Calculate CRC'),AT(161,19,90,12),USE(?CalcCRC)
END
CODE
OPEN(Window)
ACCEPT
CASE EVENT()
OF EVENT:OpenWindow
DISPLAY()
OF EVENT:CloseWindow
BREAK
OF EVENT:Accepted
CASE FIELD()
OF ?GLO:FileName:Lookup
IF FILEDIALOG('Choose File ...', GLO:FileName, , FILE:LongName)
DISPLAY(?GLO:FileName)
END
OF ?CalcCRC
GLO:CRCValue = CalcFileCRC(GLO:FileName)
DISPLAY()
END
END
END
CLOSE(Window)
RETURN
CalcFileCRC PROCEDURE(STRING inpFileName)!,ULONG
RetVal LONG
szFileName CSTRING(256)
hFile LONG
lFileSize ULONG
lBytesRead ULONG
sBuffer &STRING
lCRCValue ULONG
INVALID_HANDLE_VALUE EQUATE(-1)
GENERIC_READ EQUATE(80000000h)
OPEN_EXISTING EQUATE(3)
CODE
lCRCValue = 0
szFileName = CLIP(inpFileName)
hFile = sj_CreateFile(szFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
IF hFile <> INVALID_HANDLE_VALUE
lFileSize = sj_GetFileSize(hFile, lBytesRead)
IF lFileSize
sBuffer &= NEW (STRING(lFileSize))
RetVal = sj_ReadFile(hFile, ADDRESS(sBuffer), lFileSize, lBytesRead, 0)
IF RetVal
lCRCValue = sj_CRC32(sBuffer, SIZE(sBuffer), 0)
ELSE
MESSAGE('ERROR Reading File')
END
DISPOSE(sBuffer)
ELSE
MESSAGE('ZERO File Size')
END
sj_CloseHandle(hFile)
ELSE
MESSAGE('ERROR Opening File')
END
RETURN lCRCValue