diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/export/extract_version_1.c | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/src/export/extract_version_1.c b/src/export/extract_version_1.c index be6aa1b..8daec76 100644 --- a/src/export/extract_version_1.c +++ b/src/export/extract_version_1.c | |||
@@ -35,15 +35,12 @@ void act_on_record( int flag, uint8_t *page, uint16_t record_off ) | |||
35 | uint8_t outbuf[8192], * out_dest = outbuf; | 35 | uint8_t outbuf[8192], * out_dest = outbuf; |
36 | int num_entries = *(uint16_t*)record; | 36 | int num_entries = *(uint16_t*)record; |
37 | 37 | ||
38 | printf( " Found record with %d entries at %04x.\n", num_entries, record_off ); | 38 | /* printf( " Found record with %d entries at %04x.\n", num_entries, record_off ); */ |
39 | if( record_off > 0x1fff ) { | 39 | if( record_off > 0x1fff ) |
40 | printf( "NEG!!!" ); | 40 | return; /* Ignore deleted entries */ |
41 | record_off ^= 0xffff; | ||
42 | record_off++; | ||
43 | } | ||
44 | 41 | ||
45 | if( !flag ) | 42 | if( !flag ) |
46 | { | 43 | { /* Flags says whether page has a prefix row */ |
47 | record += 2; | 44 | record += 2; |
48 | if( *(uint16_t*)record ) | 45 | if( *(uint16_t*)record ) |
49 | { | 46 | { |
@@ -52,8 +49,8 @@ void act_on_record( int flag, uint8_t *page, uint16_t record_off ) | |||
52 | } | 49 | } |
53 | } | 50 | } |
54 | 51 | ||
55 | /* ignore prefix for now */ | ||
56 | decode_7bit_string( record + 2, out_dest ); | 52 | decode_7bit_string( record + 2, out_dest ); |
53 | /* XXX TODO: Split record in 12 chunks each, mark continuation, if num_entries > 1 */ | ||
57 | puts( (char*)outbuf ); | 54 | puts( (char*)outbuf ); |
58 | } | 55 | } |
59 | 56 | ||
@@ -70,8 +67,10 @@ void act_on_page( uint8_t *page, int page_nr ) | |||
70 | if( blob_len ) | 67 | if( blob_len ) |
71 | { | 68 | { |
72 | uint8_t outbuf[8192]; | 69 | uint8_t outbuf[8192]; |
73 | printf( "-------- PAGE IS BLOB --------" ); | 70 | /* printf( "-------- PAGE IS BLOB --------" ); */ |
71 | |||
74 | decode_7bit_string( page + 0x6, outbuf ); | 72 | decode_7bit_string( page + 0x6, outbuf ); |
73 | /* XXX TODO: Split record in 12 chunks each, mark continuation */ | ||
75 | puts( (char *)outbuf ); | 74 | puts( (char *)outbuf ); |
76 | } else | 75 | } else |
77 | for( record = 0; record < num_records; ++record ) | 76 | for( record = 0; record < num_records; ++record ) |
@@ -87,7 +86,7 @@ void act_on_file( uint8_t *file, size_t len ) | |||
87 | char *zip = ort + 1 + strlen(ort); | 86 | char *zip = ort + 1 + strlen(ort); |
88 | char *vorwahl = zip + 1 + strlen(zip); | 87 | char *vorwahl = zip + 1 + strlen(zip); |
89 | 88 | ||
90 | printf( "Working on a %04d page and %06d records file, city: %4s %-32s with prefix %s\n", num_pages, num_records, zip, ort, vorwahl ); | 89 | /* printf( "Working on a %04d page and %06d records file, city: %4s %-32s with prefix %s\n", num_pages, num_records, zip, ort, vorwahl ); */ |
91 | 90 | ||
92 | for( page = 0; page < num_pages; ++page ) | 91 | for( page = 0; page < num_pages; ++page ) |
93 | act_on_page( file + 0x800 + 0x2000 * page, page ); | 92 | act_on_page( file + 0x800 + 0x2000 * page, page ); |
@@ -102,19 +101,3 @@ int main( int args, char **argv ) | |||
102 | unmap_file( &f ); | 101 | unmap_file( &f ); |
103 | return 0; | 102 | return 0; |
104 | } | 103 | } |
105 | |||
106 | /* | ||
107 | int main() | ||
108 | { | ||
109 | uint8_t chars[2048], in[1024], out[2048]; | ||
110 | int i = 0; | ||
111 | fgets( chars, sizeof(chars), stdin ); | ||
112 | |||
113 | while( chars[i*2] > 32 && chars[i*2+1] > 32 ) | ||
114 | { | ||
115 | in[i] = ( fromhex( chars[i*2] ) << 4 ) + fromhex( chars[i*2+1] ); | ||
116 | i++; | ||
117 | } | ||
118 | decode_7bit_string( in, i, out ); | ||
119 | printf( "%s\n", out ); | ||
120 | } */ | ||