diff options
author | Dirk Engling <erdgeist@erdgeist.org> | 2015-04-30 20:32:16 +0200 |
---|---|---|
committer | Dirk Engling <erdgeist@erdgeist.org> | 2015-04-30 20:32:16 +0200 |
commit | ead065ba63899034fefc28d04a8496025c15508e (patch) | |
tree | 602fead95590a5b6dc1f0731c987a55c11567ece | |
parent | 19361ed933b4f1ccbb865520e5e5f3bf24cbd063 (diff) |
Fix broken lines and a too short conversion table for cp437
-rw-r--r-- | src/export/extract_version_1.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/export/extract_version_1.c b/src/export/extract_version_1.c index 8ab3190..c138784 100644 --- a/src/export/extract_version_1.c +++ b/src/export/extract_version_1.c | |||
@@ -32,6 +32,8 @@ static uint8_t cp437_to_iso8859_1_table[] = { | |||
32 | 0xc9, 0xe6, 0xc6, 0xf4, 0xf6, 0xf2, 0xfb, 0xf9, 0xff, 0xd6, 0xdc, 0xa2, 0xa3, 0xa5, 0x2e, 0x2e, | 32 | 0xc9, 0xe6, 0xc6, 0xf4, 0xf6, 0xf2, 0xfb, 0xf9, 0xff, 0xd6, 0xdc, 0xa2, 0xa3, 0xa5, 0x2e, 0x2e, |
33 | 0xe1, 0xed, 0xf3, 0xfa, 0xf1, 0xd1, 0xaa, 0xba, 0xbf, 0x2e, 0xac, 0xbd, 0xbc, 0xa1, 0xab, 0xbb, | 33 | 0xe1, 0xed, 0xf3, 0xfa, 0xf1, 0xd1, 0xaa, 0xba, 0xbf, 0x2e, 0xac, 0xbd, 0xbc, 0xa1, 0xab, 0xbb, |
34 | 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, | 34 | 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, |
35 | 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, | ||
36 | 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, | ||
35 | 0x2e, 0xdf, 0x2e, 0x2e, 0x2e, 0x2e, 0xb5, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, | 37 | 0x2e, 0xdf, 0x2e, 0x2e, 0x2e, 0x2e, 0xb5, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, |
36 | 0x2e, 0xb1, 0x2e, 0x2e, 0x2e, 0x2e, 0xf7, 0x2e, 0xb0, 0x2e, 0xb7, 0x2e, 0x2e, 0xb2, 0x2e, 0xa0 | 38 | 0x2e, 0xb1, 0x2e, 0x2e, 0x2e, 0x2e, 0xf7, 0x2e, 0xb0, 0x2e, 0xb7, 0x2e, 0x2e, 0xb2, 0x2e, 0xa0 |
37 | }; | 39 | }; |
@@ -63,32 +65,39 @@ again: | |||
63 | static void split_to_files( uint8_t *entries, int num_entries ) | 65 | static void split_to_files( uint8_t *entries, int num_entries ) |
64 | { | 66 | { |
65 | int entry = 0, column; | 67 | int entry = 0, column; |
66 | char *e = (char*)entries; | 68 | char *end, *e = (char*)entries; |
67 | 69 | ||
68 | for( entry = 0; entry < num_entries; ++entry ) | 70 | for( entry = 0; entry < num_entries; ++entry ) |
69 | { | 71 | { |
70 | /* mimic flags from telefonbuch v3 */ | ||
71 | memcpy( g_state.outbuf[0 ] + g_state.outfill[0 ], entry ? "02\n" : ( num_entries > 1 ? "01\n" : "00\n" ), 3 ); g_state.outfill[0] += 3; | ||
72 | memcpy( g_state.outbuf[12] + g_state.outfill[12], g_state.ort, g_state.ort_len ); g_state.outfill[12] += g_state.ort_len; | ||
73 | memcpy( g_state.outbuf[13] + g_state.outfill[13], g_state.zip, g_state.zip_len ); g_state.outfill[13] += g_state.zip_len; | ||
74 | |||
75 | for( column = 0; column < 11; ++column ) | 72 | for( column = 0; column < 11; ++column ) |
76 | { | 73 | { |
77 | char * end = strchr( e, '\n' ); | 74 | end = strchr( e, '\n' ); |
78 | if( !end ) { | 75 | if( !end ) { |
79 | fprintf( stderr, "Unexpected end of line in city: %s", g_state.ort ); | 76 | fprintf( stderr, "Unexpected end of line in city: %s", g_state.ort ); |
80 | /* fprintf( stderr, "Failing String, (%d of %d entries, column %d): ###%s\n", entry, num_entries, column, entries ); */ | 77 | /* fprintf( stderr, "Failing String, (%d of %d entries, column %d): ###%s\n", entry, num_entries, column, entries ); */ |
81 | if( column ) for( ; column < 11; ++column) { | 78 | if( !column ) |
82 | memcpy( g_state.outbuf[column+1] + g_state.outfill[column+1], "#\n", 2 ); | 79 | return; |
83 | g_state.outfill[column+1] += 2; | 80 | |
84 | } | 81 | for( ; column < 11; ++column) { |
85 | return; | 82 | memcpy( g_state.outbuf[column+1] + g_state.outfill[column+1], "#\n", 2 ); |
83 | g_state.outfill[column+1] += 2; | ||
84 | } | ||
85 | break; | ||
86 | } | 86 | } |
87 | 87 | ||
88 | if( column == 9 && *e >= '0' && *e <= '9' ) *--e = '0'; /* Augment Vorwahl */ | 88 | if( column == 9 && *e >= '0' && *e <= '9' ) |
89 | memcpy( g_state.outbuf[column+1] + g_state.outfill[column+1], e, (size_t)(++end - e) ); g_state.outfill[column+1] += end - e; | 89 | *--e = '0'; /* Augment Vorwahl */ |
90 | memcpy( g_state.outbuf[column+1] + g_state.outfill[column+1], e, (size_t)(++end - e) ); | ||
91 | g_state.outfill[column+1] += end - e; | ||
90 | e = end; | 92 | e = end; |
91 | } | 93 | } |
94 | |||
95 | /* mimic flags from telefonbuch v3 */ | ||
96 | memcpy( g_state.outbuf[0 ] + g_state.outfill[0 ], entry ? "02\n" : ( num_entries > 1 ? "01\n" : "00\n" ), 3 ); g_state.outfill[0] += 3; | ||
97 | memcpy( g_state.outbuf[12] + g_state.outfill[12], g_state.ort, g_state.ort_len ); g_state.outfill[12] += g_state.ort_len; | ||
98 | memcpy( g_state.outbuf[13] + g_state.outfill[13], g_state.zip, g_state.zip_len ); g_state.outfill[13] += g_state.zip_len; | ||
99 | if( !end ) | ||
100 | return; | ||
92 | } | 101 | } |
93 | } | 102 | } |
94 | 103 | ||
@@ -152,7 +161,7 @@ static void act_on_file( uint8_t *file ) | |||
152 | char *vorwahl = zip + 1 + strlen(zip); | 161 | char *vorwahl = zip + 1 + strlen(zip); |
153 | 162 | ||
154 | for(i=0; ort[i]; ++i ) | 163 | for(i=0; ort[i]; ++i ) |
155 | g_state.ort[i] = (char)cp437_to_iso8859_1_table[((uint8_t*)ort)[i]]; | 164 | g_state.ort[i] = (char)cp437_to_iso8859_1_table[(uint8_t)((uint8_t*)ort)[i]]; |
156 | g_state.ort[i++] = '\n'; | 165 | g_state.ort[i++] = '\n'; |
157 | g_state.ort[i] = 0; | 166 | g_state.ort[i] = 0; |
158 | g_state.ort_len = i; | 167 | g_state.ort_len = i; |