Groupies working hard! :D
This commit is contained in:
33
A0/file.c
33
A0/file.c
@ -8,12 +8,15 @@ enum FileType{ASCII, ISO, UTF, data};
|
||||
|
||||
bool is_utf8(FILE* f) {
|
||||
rewind(f);
|
||||
char byte;
|
||||
unsigned char byte;
|
||||
int char_length = -1;
|
||||
for (;;) {
|
||||
if (fread(&byte, 1, 1, f) == 0) {
|
||||
break;
|
||||
}
|
||||
if (byte == 0){
|
||||
return false;
|
||||
}
|
||||
for (int j = 0 ; j <= 8 ; j++) {
|
||||
if (byte >> 7 == 0) {
|
||||
char_length = j;
|
||||
@ -40,7 +43,7 @@ bool is_iso8859(FILE* f) {
|
||||
for (int i = 0 ; i < 7 ; i++) {
|
||||
iso8859_CHARACTERS[i] = i+7;
|
||||
}
|
||||
iso8859_CHARACTERS[7] = 27;
|
||||
iso8859_CHARACTERS[7] = 27;
|
||||
for (int i = 0 ; i < 94 ; i++) {
|
||||
iso8859_CHARACTERS[i+8] = i+32;
|
||||
}
|
||||
@ -48,23 +51,23 @@ bool is_iso8859(FILE* f) {
|
||||
for (int i = 0 ; i < 95 ; i++) {
|
||||
iso8859_CHARACTERS[i+102] = i+160;
|
||||
}
|
||||
char byte;
|
||||
bool is_iso8859;
|
||||
unsigned char byte;
|
||||
bool iso_byte;
|
||||
for (;;) {
|
||||
if (fread(&byte, 1, 1, f) == 0) {
|
||||
break;
|
||||
}
|
||||
is_iso8859 = false;
|
||||
for (int i = 0 ; i < 95 ; i++) {
|
||||
iso_byte = false;
|
||||
for (int i = 0 ; i < 197 ; i++) {
|
||||
if (byte == iso8859_CHARACTERS[i]) {
|
||||
is_iso8859 = true;
|
||||
iso_byte = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (! is_iso8859) {
|
||||
if (! iso_byte) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -81,7 +84,7 @@ bool is_ascii(FILE* f) {
|
||||
ASCII_CHARACTERS[i+8] = i+32;
|
||||
}
|
||||
|
||||
char byte;
|
||||
unsigned char byte;
|
||||
bool ascii_byte;
|
||||
for (;;) {
|
||||
if (fread(&byte, 1, 1, f) == 0) {
|
||||
@ -97,10 +100,10 @@ bool is_ascii(FILE* f) {
|
||||
if (! ascii_byte) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
int print_error(char* path, int errnum) {
|
||||
@ -115,7 +118,7 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
|
||||
FILE* f = fopen(argv[1], "r");
|
||||
|
||||
|
||||
if (f == NULL) {
|
||||
print_error(argv[2], errno);
|
||||
}
|
||||
@ -126,9 +129,11 @@ int main(int argc, char* argv[]) {
|
||||
fprintf(stdout, "%s: ASCII text\n", argv[1]);
|
||||
} else if (is_iso8859(f)) {
|
||||
fprintf(stdout, "%s: ISO-8859 text\n", argv[1]);
|
||||
} else if (is_utf8(f)) {
|
||||
fprintf(stdout, "%s: UTF-8 Unicode text\n", argv[1]);
|
||||
} else {
|
||||
fprintf(stdout, "%s: data\n", argv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
return EXIT_SUCCESS;
|
||||
|
Reference in New Issue
Block a user