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