From 046857dfb88f05e6b310fe9ef07b9f2d3ac5922d Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Thu, 20 Feb 2014 22:42:56 +0100 Subject: Restructure project, make names more clear --- src/export/map_coords.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/export/map_coords.c (limited to 'src/export/map_coords.c') diff --git a/src/export/map_coords.c b/src/export/map_coords.c new file mode 100644 index 0000000..b46f1cf --- /dev/null +++ b/src/export/map_coords.c @@ -0,0 +1,62 @@ +#define _WITH_GETLINE +#include "mystdlib.h" +#include +#include +#include +#include + +int find_offset( const void *key, const void *line ) +{ + size_t l = strlen( (char*)key ); + return strncmp( (char*)key, *(char**)line, l ); +} + +int qsort_cmp( const void *a, const void *b ) +{ + return strcmp( *(char**)a, *(char**)b ); +} + +int main( int argc, char ** args ) +{ + MAP coords = map_file( args[1], 1 ); + int i, l, lines; + char *p, **offsets, *input = malloc(1024); + ssize_t ll; + size_t input_length = 1024; + + if( !coords ) exit( 111 ); + p = (char *)coords->addr; + for ( i=0, lines=0; isize; ++i ) + if( p[i] == 0x00 ) + ++lines; + + offsets = malloc( lines * sizeof(char*)); + if( !offsets ) exit( 111 ); + + offsets[0] = p; l = 1; + for ( i=0; isize; ++i ) + if( p[i] == 0x00 ) + offsets[l++] = p+i+1; + + l--; qsort(offsets, l, sizeof(char*), qsort_cmp ); + + while( ( ll = getline( &input, &input_length, stdin ) ) >= 0 ) + { + char **coord_line; + input[ll-1]='\t'; + coord_line = bsearch( input, offsets, l, sizeof(char*), find_offset ); + if( !coord_line && ll > 2 && isalpha( input[ll-2] ) ) + { + input[ll-2] = '\t'; input[ll-1]=0; + ll--; + coord_line = bsearch( input, offsets, l, sizeof(char*), find_offset ); + } + + if( coord_line ) + printf( "%s\n", *coord_line + ll ); + else + puts( "\t" ); + } + + return 0; +} -- cgit v1.2.3