fastrepair('blahblah.scx') >>function fastrepair >>Lparameters tcDBF >>Local handle, lnFileSize, lnReccount, lnHeaderSize, lnRecordSize, ; >> lnCalculatedReccount, llHasMemo >>handle=fopen(tcDBF,12) && Opened readwrite >>lnFileSize = fseek(handle,0,2) && Get file size >>* Read header info >>With this >> lnReccount = ReadBytes(handle, 4,4) >> lnHeaderSize = ReadBytes(handle, 8,2) >> lnRecordSize = ReadBytes(handle,10,2) >> >> lnCalculatedReccount = floor((lnFileSize-(lnHeaderSize+1))/lnRecordSize) >> If lnCalculatedReccount # lnReccount && If calculated # recorded fix it >> WriteBytes(handle, 4,4,lnCalculatedReccount) >> Endif >>Endwith >>=fclose(handle) >> >>function readbytes >>Lparameters tnHandle, tnPos, tnSize, tlLR >>Local lcString, lnRetValue,ix >>=fseek(tnHandle, tnPos,0) && Go to pos >>lcString = fread(tnHandle, tnSize) && Read tnSize bytes >>lnRetValue = 0 >>For ix=0 to tnSize-1 && Convert to a number >> lnRetValue = lnRetValue + asc(substr(lcString,ix+1)) * ; >> iif(tlLR,256^(tnSize-1-ix),256^ix) >>Endfor >>Return int(lnRetValue) >> >>function WriteBytes >>Lparameters tnHandle, tnPos, tnSize, tnNumber, tlLR >>Local lcString, lnLowDword, lnHighDword,ix >>lcString='' >>If tlLR >> For ix=tnSize-1 to 0 step -1 >> lcString=lcString+chr(tnNumber/256^ix%256) >> Endfor >>Else >> For ix=0 to tnSize-1 >> lcString=lcString+chr(tnNumber/256^ix%256) >> Endfor >>Endif >>=fseek(tnHandle, tnPos,0) && Go to pos >>Return fwrite(tnHandle,lcString) >>Cetin