1 /* Daniel dos Santos Marques 071xxxx */
2 /* Pedro Grojsgold 0712051 */
11 enum Code
{utf8
, utf32
, latin1
};
14 int decodeLatin1(int);
17 int encodeLatin1(int);
22 void error (const char *fmt
, ...) {
25 vfprintf(stderr
, fmt
, argp
);
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
);
41 int main (int argc
, char *argv
[]) {
43 enum Code codein
, codeout
;
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");
51 error("não foi possível abrir arquivo '%s'\n", argv
[3]);
52 out
= fopen(argv
[4], "wb");
54 error("não foi possível abrir arquivo '%s'\n", argv
[4]);
60 charCode
= decodeLatin1(c
[0]);
61 printf("c[0]:%c c[0]:%d cC:%d\n", c
[0], c
[0], charCode
);
64 charCode
= decodeUtf8(0);
67 charCode
= decodeUtf32(0);
77 fputc(encodeLatin1(charCode
), out
);
94 int decodeLatin1(int code
) {
95 if(code
>= 0 && code
<= 127) {
103 int decodeUtf8(int code
) {
104 if(code
>= 0 && code
<= 127) {
112 int decodeUtf32(int code
) {
113 if(code
>= 0 && code
<= 127) {
121 int encodeLatin1(int code
) {
122 if(code
>= 0 && code
<= 255/*TODO: Verificar se pode estar entre 127 e 255*/) {
130 int encodeUtf8(int code
) {
134 int encodeUtf32(int code
) {