(You could post which files to look up in the source, instead of pasting it all here, I think.)
An item's block value seems to be calculated by the formula
((10000. / (1000 + GetWeight()) + GetTHVBonus()) * GetBlockModifier() / 10000.)
where:
GetWeight is weight (based on material mostly, it seems),
GetTHVBonus is a bonus probably derived from skill level,
GetBlockModifier is an interesting piece, based on your Size times "Roundness" (a shield has 95, a banana has 15). The resulting value is then shifted with "<<". I don't know, however, how exactly "<<" works, but it MAY BE that roundness is multiplied 2^2 for shields, and 2^1 for non-shields.
Char.cpp seems to hold more on using that value, though.