-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScreamDecoder.c
122 lines (109 loc) · 2.49 KB
/
ScreamDecoder.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
struct config {
char one;
char zero;
};
void readConfig(struct config* config);
void wait(int delay);
int readBinary(FILE* fp, FILE* pOut, struct config config);
int main(int argc, char* argv[]) {
FILE* pIn;
char inputFile[] = "input.txt";
FILE* pOut;
char outputFile[] = "output.txt";
int failure = 0;
char c = '0';
int i = 0;
struct config config;
config.zero = '0';
config.one = '1';
readConfig(&config);
pIn = fopen(inputFile, "r");
if (pIn == NULL) {
printf("Failed to open %s for reading.\n", inputFile);
failure = 1;
}
pOut = fopen(outputFile, "w");
if (pOut == NULL) {
printf("Failed to open %s for reading.\n", outputFile);
failure = 1;
}
if (failure) {
exit(1);
}
printf("Decoded text:\n\"");
while (c != EOF) {
c = readBinary(pIn, pOut, config);
if (c != EOF) {
i++;
fprintf(pOut, "%c", c);
printf("%c", c);
}
}
printf("\"\n\n");
printf("%d character(s) decoded.\n", i);
fclose(pIn);
fclose(pOut);
wait(5);
return 0;
}
int readBinary(FILE* fp, FILE* pOut, struct config config) {
char c;
int i;
int j;
int binArray[] = { 0,0,0,0,0,0,0,0 };
int output = 0;
for (i = 0; i < 8; i++) {
c = fgetc(fp);
if (!(isspace(c)) && c != EOF) {
if (c == config.zero) {
binArray[i] = 0;
}
else if (c == config.one) {
binArray[i] = 1;
}
else {
printf("\n\nUnknown character encountered. Please clean up your input file or set up your configuration file to include such characters.\n");
fprintf(pOut, "\nUnknown character encountered. Please clean up your input file or set up your configuration file to include such characters.");
wait(5);
exit(1);
}
}
else if (isspace(c)){
i--;
}
}
for (i = 7, j = 1; i > 0; i--) {
output = output + binArray[i] * j;
j = j * 2;
}
if (c == EOF){
output = EOF;
}
return output;
}
void readConfig(struct config* config) {
FILE* pConfig;
char configFile[] = "config.txt";
pConfig = fopen(configFile, "r");
if (pConfig == NULL) {
printf("Failed to open %s for reading.\n", configFile);
exit(1);
}
config->zero = fgetc(pConfig);
config->one = fgetc(pConfig);
fclose(pConfig);
}
void wait(int delay) {
time_t t;
time_t startTime;
time_t currentTime;
startTime = time(&t);
currentTime = startTime;
while (currentTime != (startTime + delay)) {
currentTime = time(&t);
}
}