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