From b1d066634b4ad459a58ea8cdf05aee42680ba2b2 Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Tue, 18 Jan 2005 05:07:17 +0000 Subject: herbst 2004 --- src/backen.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/decompress.c | 52 ++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 src/backen.c create mode 100644 src/decompress.c (limited to 'src') diff --git a/src/backen.c b/src/backen.c new file mode 100644 index 0000000..d97f743 --- /dev/null +++ b/src/backen.c @@ -0,0 +1,101 @@ +#include +#include "mystdlib.h" + +int mystrcmp( void *a, void *b ) { + return strncmp( a, *(char**)b, strlen( a )); +} + +int mystrcmp2( void *a, void *b ) { + return strcmp( *(char**)a, *(char**)b); +} + +int main( int argc, char **argv ) { + char path[32]; /* files/file_XXXXX */ + int streetnum = 0, geomapnum = 0, geomahnum = 0, d = 0, i, j, k, run = 1; + char *geomaps[1000000]; + char *geomahs[14000000]; + char *streets[400000]; + MAP maps[11]; int mapoffs[11]; + MAP streetf = map_file( "lists/streetlist", 1); + MAP geomapf = map_file( "lists/geolist", 1); + MAP geomahf = map_file( "lists/geohnrlist", 1); + unsigned char lookup[1024], **geokord; /* PLZ, Streetname, Hnr */ + + streets[streetnum++] = streetf->addr; + for( i=0; isize; ++i ) + if( streetf->addr[i] == 0 ) streets[streetnum++] = streetf->addr+i+1; + + geomaps[geomapnum++] = geomapf->addr; + for( i=0; isize; ++i ) + if( geomapf->addr[i] == 0 ) geomaps[geomapnum++] = geomapf->addr+i+1; + + geomahs[geomahnum++] = geomahf->addr; + for( i=0; isize; ++i ) + if( geomahf->addr[i] == 0 ) geomahs[geomahnum++] = geomahf->addr+i+1; + + qsort( geomaps, geomapnum, sizeof(char*), mystrcmp2 ); + qsort( geomahs, geomahnum, sizeof(char*), mystrcmp2 ); + + i = 0; + while( run ) { + for(j=0; j<11; ++j) { + sprintf( path, "files/file_%05X", i++); + maps[j] = map_file( path, 1 ); mapoffs[j] = 0; + } + for(j=0;jsize;++j) { + for( k=0; k<11; ++k) { + unsigned char *end; + int sid; + switch(k) { + case 0: + printf( "%02X\t", maps[k]->addr[mapoffs[k]++]); + break; + case 5: + sid = strtol( maps[k]->addr+mapoffs[k], &end, 10); + if( end > maps[k]->addr+mapoffs[k] ) { + printf( "%s\t%s\t", streets[sid], end+1 ); + end = lookup + 6 + sprintf( lookup+6, "%s\t%s", streets[sid], end + 1 ); + while( isalpha( (int)end[-1] )) *--end = 0; + *++end = '\t'; *++end = 0; + } else { + printf( "\t\t" ); lookup[6] = lookup[7] = '\t'; lookup[8] = 0; + } + while( maps[k]->addr[mapoffs[k]++]); + break; + case 10: + if( !maps[k]->addr[mapoffs[k]] ) + printf( "\t\t" ); + else if( !strchr(maps[k]->addr+mapoffs[k], 9)) + printf("%s\t\t", maps[k]->addr+mapoffs[k] ); + else + printf("%s\t", maps[k]->addr+mapoffs[k] ); + while( maps[k]->addr[mapoffs[k]++]); + break; + case 7: + memcpy( lookup, ".....\t", 6 ); + sprintf( lookup, "%s", maps[k]->addr+mapoffs[k] ); + lookup[5] = '\t'; + default: + printf( "%s\t", maps[k]->addr+mapoffs[k] ); + while( maps[k]->addr[mapoffs[k]++]); + break; + } + } + /* postprocessing */ +// printf( "\nLOOKUP: %s\n", lookup ); + + if( (geokord = (char**)bsearch( lookup, geomahs, geomahnum, sizeof(char *), mystrcmp ) ) ) { +// printf( "\nGEOKOORD: %s\n", *geokord ); + printf( "%s", *geokord+strlen(lookup)+1 ); + } else { + putchar('\t'); putchar('\t'); + } + putchar( 10 ); + } + for(j=0; j<11; ++j) unmap_file( &maps[j] ); + } + unmap_file( &streetf ); + unmap_file( &geomapf ); + unmap_file( &geomahf ); + return 0; +} diff --git a/src/decompress.c b/src/decompress.c new file mode 100644 index 0000000..dea2bca --- /dev/null +++ b/src/decompress.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +#define XORLEN (29) +#define HUGEBLOCK (1024*1024) + +int main(int argc, char **argv) { +// int infile = open("/Volumes/DasTelefonbuch/atb/phonebook.db", O_RDONLY); + + int infile = open( argv[1], O_RDONLY); + printf( "%i\n", infile ); + + unsigned const char xorkey [XORLEN] = "Just for Fun. Linus Torvalds."; + unsigned char input [HUGEBLOCK]; + unsigned char output [HUGEBLOCK]; + unsigned char respath[32]; /* file_XXXXX\0 */ + int i, offs = 0, zres = 0, filenum = 0, resfile, avail=1; + z_stream z; memset( &z, 0, sizeof(z)); + + while( avail ) { + do { + lseek( infile, offs, SEEK_SET ); + avail = read( infile, input, HUGEBLOCK ); + if( !avail) break; + for( i=0; i