Adicionado teste Latin1
[sbt1.git] / converte.c
blob5cadc925022f4c3d0b3fc59dc72aa63b5d63f004
1 /* Daniel dos Santos Marques 071xxxx */
2 /* Pedro Grojsgold 0712051 */
5 #include <stdarg.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
11 enum Code {utf8, utf32, latin1};
14 int decodeLatin1(int);
15 int decodeUtf8(int);
16 int decodeUtf32(int);
17 int encodeLatin1(int);
18 int encodeUtf8(int);
19 int encodeUtf32(int);
22 void error (const char *fmt, ...) {
23 va_list argp;
24 va_start(argp, fmt);
25 vfprintf(stderr, fmt, argp);
26 va_end(argp);
27 exit(1);
31 enum Code getcode (const char *codename) {
32 if (strcmp(codename, "latin1") == 0) return latin1;
33 if (strcmp(codename, "utf8") == 0) return utf8;
34 if (strcmp(codename, "utf32") == 0) return utf32;
35 error("có́digo ’%s’ invá́lido: os có́digos aceitos são "
36 "’latin1’, ’utf8’ e ’utf32’\n", codename);
37 return 0;
41 int main (int argc, char *argv[]) {
42 FILE *in, *out;
43 enum Code codein, codeout;
44 int charCode, c[4];
45 if (argc != 5)
46 error("uso correto: %s code-in code-out file-in file-out\n", argv[0]);
47 codein = getcode(argv[1]);
48 codeout = getcode(argv[2]);
49 in = fopen(argv[3], "rb");
50 if (in == NULL)
51 error("não foi possível abrir arquivo '%s'\n", argv[3]);
52 out = fopen(argv[4], "wb");
53 if (out == NULL)
54 error("não foi possível abrir arquivo '%s'\n", argv[4]);
56 while(!feof(in)) {
57 switch(codein) {
58 case latin1:
59 c[0] = fgetc(in);
60 charCode = decodeLatin1(c[0]);
61 printf("c[0]:%c c[0]:%d cC:%d\n", c[0], c[0], charCode);
62 break;
63 case utf8:
64 charCode = decodeUtf8(0);
65 break;
66 case utf32:
67 charCode = decodeUtf32(0);
68 break;
69 default:
70 break;
72 if(-1 == charCode) {
73 continue;
75 switch(codeout) {
76 case latin1:
77 fputc(encodeLatin1(charCode), out);
78 break;
79 case utf8:
80 break;
81 case utf32:
82 break;
83 default:
84 break;
88 fclose(in);
89 fclose(out);
90 return 1;
94 int decodeLatin1(int code) {
95 if(code >= 0 && code <= 127) {
96 return code;
97 } else {
98 return -1;
103 int decodeUtf8(int code) {
104 if(code >= 0 && code <= 127) {
105 return code;
106 } else {
107 return -1;
112 int decodeUtf32(int code) {
113 if(code >= 0 && code <= 127) {
114 return code;
115 } else {
116 return -1;
121 int encodeLatin1(int code) {
122 if(code >= 0 && code <= 255/*TODO: Verificar se pode estar entre 127 e 255*/) {
123 return code;
124 } else {
125 return -1;
130 int encodeUtf8(int code) {
134 int encodeUtf32(int code) {