1#ifdef HAVE_CONFIG_H 2#include "config.h" 3#endif /* HAVE_CONFIG_H */ 4 5#include <unistd.h> 6#include <stdlib.h> 7#include <stdio.h> 8#include <string.h> 9#include <stdint.h> 10 11#include <atalk/unicode.h> 12 13#define MACCHARSET "MAC_ROMAN" 14 15#define flag(x) {x, #x} 16 17struct flag_map { 18 int flag; 19 const char *flagname; 20}; 21 22struct flag_map flag_map[] = { 23 flag(CONV_ESCAPEHEX), 24 flag(CONV_ALLOW_COLON), 25 flag(CONV_UNESCAPEHEX), 26 flag(CONV_ESCAPEDOTS), 27 flag(CONV_IGNORE), 28 flag(CONV_FORCE), 29 flag(CONV__EILSEQ), 30 flag(CONV_TOUPPER), 31 flag(CONV_TOLOWER), 32 flag(CONV_PRECOMPOSE), 33 flag(CONV_DECOMPOSE) 34}; 35 36char buffer[MAXPATHLEN +2]; 37 38int main(int argc, char **argv) 39{ 40 int opt; 41 uint16_t flags = 0; 42 char *string; 43 char *f = NULL, *t = NULL; 44 charset_t from, to, mac; 45 int i; 46 47 while ((opt = getopt(argc, argv, ":o:f:t:")) != -1) { 48 switch(opt) { 49 case 'o': 50 for (i = 0; i < sizeof(flag_map)/sizeof(struct flag_map) - 1; i++) 51 if ((strcmp(flag_map[i].flagname, optarg)) == 0) 52 flags |= flag_map[i].flag; 53 break; 54 case 'f': 55 f = optarg; 56 break; 57 case 't': 58 t = optarg; 59 break; 60 } 61 } 62 63 if ((optind + 1) != argc) { 64 printf("Usage: test [-o <conversion option> [...]] [-f <from charset>] [-t <to charset>] <string>\n"); 65 printf("Defaults: -f: UTF8-MAC , -t: UTF8 \n"); 66 printf("Available conversion options:\n"); 67 for (i = 0; i < (sizeof(flag_map)/sizeof(struct flag_map) - 1); i++) { 68 printf("%s\n", flag_map[i].flagname); 69 } 70 return 1; 71 } 72 string = argv[optind]; 73 74 if ( (charset_t) -1 == (from = add_charset(f ? f : "UTF8-MAC")) ) { 75 fprintf( stderr, "Setting codepage %s as from codepage failed\n", f ? f : "UTF8-MAC"); 76 return (-1); 77 } 78 79 if ( (charset_t) -1 == (to = add_charset(t ? t : "UTF8")) ) { 80 fprintf( stderr, "Setting codepage %s as to codepage failed\n", t ? t : "UTF8"); 81 return (-1); 82 } 83 84 if ( (charset_t) -1 == (mac = add_charset(MACCHARSET)) ) { 85 fprintf( stderr, "Setting codepage %s as Mac codepage failed\n", MACCHARSET); 86 return (-1); 87 } 88 89 90 if ((size_t)-1 == (convert_charset(from, to, mac, 91 string, strlen(string), 92 buffer, MAXPATHLEN, 93 &flags)) ) { 94 perror("Conversion error"); 95 return 1; 96 } 97 98 printf("from: %s\nto: %s\n", string, buffer); 99 100 return 0; 101} 102