Processing seems to take a lot of time (~4 hours for 1 state) so I may need some help.. or it's gonna take some time to complete...
For now, I dumped a few processed county files here:
http://glockdancers.com/mapthis/
The boundry lookup file will look something like following:
36001,-74263978+42408347,-73680062+42819977
36003,-78309280+41998386,-77724801+42521658
36005,-73932213+40797995,-73781458+40912978
36007,-76129742+41997837,-75362599+42415484
36009,-79061271+41999239,-78308161+42533515
36011,-76736701+42618903,-76265611+43413902
36013,-79762144+41998292,-79059231+42569354
36015,-76965986+42000688,-76537438+42294387
36017,-75886765+42194990,-75296533+42744192
36019,-74022779+44438450,-73352603+45009862
36021,-73908313+41980556,-73362064+42507634
Format: [county code], [minlon+minlat],[maxlon+maxlat]
You'll have to divide values by 1,000,000 to get the correct coordinate values...
So, your application would go through the lookup file, pick and download the counties that match your map's coordinates, unzip the zipcodes in to some directory and then compress them back with algorithm, given in compr.c program, generating geodata.dat file...
NOTE:
In theory, 2 or more counties can share area with same zipcode(s), ie you may get the same zipcode filename in 2 different county zipfiles. In this case you'll have to merge the zipcode files with a same name and sort the data inside of them alphabetically by street name.
Let me know if you have any questions abou it..