#define WINDOWS_OS !defined(__linux__) && !defined(__unix__) && !defined(__APPLE__)
#if WINDOWS_OS
# include <fcntl.h>
# include <io.h>
#else
# include <sys/param.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if WINDOWS_OS
# if defined(__BORLANDC__)
# define _setmode(f,t) setmode((f), (t))
# define _O_BINARY O_BINARY
# endif
# define DS_CODE ('\\')
#else
# define _setmode(f,t) (0)
# define _O_BINARY
# define DS_CODE ('/')
# define _MAX_PATH MAXPATHLEN
# define _fullpath(a,r,n) realpath((r), (a))
#endif
#define ArrLen(arr) (sizeof(arr) / sizeof((arr)[0]))
#define SIZE (1000)
#define LF_CODE (0x0A)
#define CR_CODE (0x0D)
#define OUTPUT_SW ("-o")
#define ErrCheck(e) \
{ \
if (e) { \
perror(NULL); \
exit(EXIT_FAILURE); \
} \
}
#define ErrDown(m) \
{ \
usage(args[0]); \
fprintf(stderr, "Error: "); \
fprintf(stderr, m); \
exit(EXIT_FAILURE); \
}
void usage(const char arg0[]);
/* CRコードを削除する。 */
int main(int argc, char *args[]) {
int ch;
char data[SIZE + 1], out[SIZE + SIZE + 1];
int i, sz, md, j, flag;
FILE *input = NULL, *output = NULL;
char path1[_MAX_PATH + 1], path2[_MAX_PATH + 1];
if (argc > 4) {
ErrDown("a lot of argument!\n");
}
if (argc > 1) {
switch (argc) {
case 2: {
if ((strcmp(args
[1], "--help") == 0) || (strcmp(args
[1], "-h") == 0) || (strcmp(args
[1], "-?") == 0) || (strcmp(args
[1], "/?") == 0)) { usage(args[0]);
return 0;
}
input
= fopen(args
[1], "rb"); ErrCheck(input == NULL);
break;
}
case 3: {
if (strcmp(args
[1], OUTPUT_SW
) != 0) { ErrDown("syntax error!\n");
}
output
= fopen(args
[2], "wb"); ErrCheck(output == NULL);
break;
}
case 4: {
i = 1;
j = 3;
if (strcmp(args
[1], OUTPUT_SW
) == 0) { i = 3;
j = 2;
} else if (strcmp(args
[2], OUTPUT_SW
) != 0) { ErrDown("syntax error!\n");
}
if (_fullpath(path1, args[i], ArrLen(path1)) == NULL) {
ErrDown("illegal input file!\n");
}
if (_fullpath(path2, args[j], ArrLen(path2)) == NULL) {
ErrDown("illegal output file!\n");
}
if (strcmp(path1
, path2
) == 0) { ErrDown("the same input file as ouput file!\n");
}
input
= fopen(path1
, "rb"); ErrCheck(input == NULL);
output
= fopen(path2
, "wb"); ErrCheck(output == NULL);
break;
}
default: {
break;
}
}
}
if (input == NULL) {
md = _setmode(_fileno(stdin), _O_BINARY);
ErrCheck(md == -1);
input = stdin;
}
if (output == NULL) {
md = _setmode(_fileno(stdout), _O_BINARY);
ErrCheck(md == -1);
output = stdout;
}
flag = 0;
while ((sz
= fread(data
, sizeof(data
[0]), ArrLen
(data
), input
)) != 0) { j = 0;
for (i = 0; i < sz; ++i) {
if (flag == 1) {
flag = 0;
if (data[i] != LF_CODE) {
out[j] = LF_CODE;
++j;
}
}
if (data[i] == CR_CODE) {
flag = 1;
continue;
}
out[j] = data[i];
++j;
}
fwrite(out
, sizeof(out
[0]), j
, output
); }
if (input != stdin) {
}
if (output != stdout) {
}
return 0;
}
void usage(const char arg0[]) {
int i, j;
j = 0;
for (i = 0; arg0[i] != '\0'; ++i) {
if (arg0[i] == DS_CODE) {
j = i + 1;
}
}
puts("Delete CR-Code(0x0D)"); printf(" usage: %s [-o <Output File>] [<Input File>]\n", &arg0
[j
]); }
I2RlZmluZSBXSU5ET1dTX09TICFkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKF9fQVBQTEVfXykKCiNpZiBXSU5ET1dTX09TCiMgIGluY2x1ZGUgPGZjbnRsLmg+CiMgIGluY2x1ZGUgPGlvLmg+CiNlbHNlCiMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgojZW5kaWYKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2lmIFdJTkRPV1NfT1MKIyAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCiMgICAgZGVmaW5lIF9zZXRtb2RlKGYsdCkgICBzZXRtb2RlKChmKSwgKHQpKQojICAgIGRlZmluZSBfT19CSU5BUlkgICAgICAgT19CSU5BUlkKIyAgZW5kaWYKIyAgZGVmaW5lIERTX0NPREUgICAgICAgICAgICgnXFwnKQojZWxzZQojICBkZWZpbmUgX3NldG1vZGUoZix0KSAgICAgKDApCiMgIGRlZmluZSBfT19CSU5BUlkgICAgICAgICAKIyAgZGVmaW5lIERTX0NPREUgICAgICAgICAgICgnLycpCiMgIGRlZmluZSBfTUFYX1BBVEggICAgICAgICBNQVhQQVRITEVOCiMgIGRlZmluZSBfZnVsbHBhdGgoYSxyLG4pICByZWFscGF0aCgociksIChhKSkKI2VuZGlmCgojZGVmaW5lIEFyckxlbihhcnIpICAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQoKI2RlZmluZSBTSVpFICAgICAgICAgKDEwMDApCiNkZWZpbmUgTEZfQ09ERSAgICAgICgweDBBKQojZGVmaW5lIENSX0NPREUgICAgICAoMHgwRCkKI2RlZmluZSBPVVRQVVRfU1cgICAgKCItbyIpCgojZGVmaW5lIEVyckNoZWNrKGUpICAgICAgICAgICAgICBcCgl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKCQlpZiAoZSkgeyAgICAgICAgICAgICAgICAgXAoJCQlwZXJyb3IoTlVMTCk7ICAgICAgICBcCgkJCWV4aXQoRVhJVF9GQUlMVVJFKTsgIFwKCQl9ICAgICAgICAgICAgICAgICAgICAgICAgXAoJfQoKI2RlZmluZSBFcnJEb3duKG0pICAgICAgICAgICAgICAgICAgIFwKCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKCQl1c2FnZShhcmdzWzBdKTsgICAgICAgICAgICAgIFwKCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAiKTsgIFwKCQlmcHJpbnRmKHN0ZGVyciwgbSk7ICAgICAgICAgIFwKCQlleGl0KEVYSVRfRkFJTFVSRSk7ICAgICAgICAgIFwKCX0KCnZvaWQgdXNhZ2UoY29uc3QgY2hhciBhcmcwW10pOwoKLyogQ1LjgrPjg7zjg4njgpLliYrpmaTjgZnjgovjgIIgKi8KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmdzW10pIHsKCQoJaW50IGNoOwoJY2hhciBkYXRhW1NJWkUgKyAxXSwgb3V0W1NJWkUgKyBTSVpFICsgMV07CglpbnQgaSwgc3osIG1kLCBqLCBmbGFnOwoJRklMRSAqaW5wdXQgPSBOVUxMLCAqb3V0cHV0ID0gTlVMTDsKCWNoYXIgcGF0aDFbX01BWF9QQVRIICsgMV0sIHBhdGgyW19NQVhfUEFUSCArIDFdOwoJCglpZiAoYXJnYyA+IDQpIHsKCQlFcnJEb3duKCJhIGxvdCBvZiBhcmd1bWVudCFcbiIpOwoJfQoJCglpZiAoYXJnYyA+IDEpIHsKCQlzd2l0Y2ggKGFyZ2MpIHsKCQkJY2FzZSAyOiB7CgkJCQlpZiAoKHN0cmNtcChhcmdzWzFdLCAiLS1oZWxwIikgPT0gMCkKCQkJCQkJfHwgKHN0cmNtcChhcmdzWzFdLCAiLWgiKSA9PSAwKQoJCQkJCQl8fCAoc3RyY21wKGFyZ3NbMV0sICItPyIpID09IDApCgkJCQkJCXx8IChzdHJjbXAoYXJnc1sxXSwgIi8/IikgPT0gMCkpIHsKCQkJCQl1c2FnZShhcmdzWzBdKTsKCQkJCQlyZXR1cm4gMDsKCQkJCX0KCQkJCWlucHV0ID0gZm9wZW4oYXJnc1sxXSwgInJiIik7CgkJCQlFcnJDaGVjayhpbnB1dCA9PSBOVUxMKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMzogewoJCQkJaWYgKHN0cmNtcChhcmdzWzFdLCBPVVRQVVRfU1cpICE9IDApIHsKCQkJCQlFcnJEb3duKCJzeW50YXggZXJyb3IhXG4iKTsKCQkJCX0KCQkJCW91dHB1dCA9IGZvcGVuKGFyZ3NbMl0sICJ3YiIpOwoJCQkJRXJyQ2hlY2sob3V0cHV0ID09IE5VTEwpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSA0OiB7CgkJCQlpID0gMTsKCQkJCWogPSAzOwoJCQkJaWYgKHN0cmNtcChhcmdzWzFdLCBPVVRQVVRfU1cpID09IDApIHsKCQkJCQlpID0gMzsKCQkJCQlqID0gMjsKCQkJCX0gZWxzZSBpZiAoc3RyY21wKGFyZ3NbMl0sIE9VVFBVVF9TVykgIT0gMCkgewoJCQkJCUVyckRvd24oInN5bnRheCBlcnJvciFcbiIpOwoJCQkJfQoJCQkJaWYgKF9mdWxscGF0aChwYXRoMSwgYXJnc1tpXSwgQXJyTGVuKHBhdGgxKSkgPT0gTlVMTCkgewoJCQkJCUVyckRvd24oImlsbGVnYWwgaW5wdXQgZmlsZSFcbiIpOwoJCQkJfQoJCQkJaWYgKF9mdWxscGF0aChwYXRoMiwgYXJnc1tqXSwgQXJyTGVuKHBhdGgyKSkgPT0gTlVMTCkgewoJCQkJCUVyckRvd24oImlsbGVnYWwgb3V0cHV0IGZpbGUhXG4iKTsKCQkJCX0KCQkJCWlmIChzdHJjbXAocGF0aDEsIHBhdGgyKSA9PSAwKSB7CgkJCQkJRXJyRG93bigidGhlIHNhbWUgaW5wdXQgZmlsZSBhcyBvdXB1dCBmaWxlIVxuIik7CgkJCQl9CgkJCQlpbnB1dCA9IGZvcGVuKHBhdGgxLCAicmIiKTsKCQkJCUVyckNoZWNrKGlucHV0ID09IE5VTEwpOwoJCQkJb3V0cHV0ID0gZm9wZW4ocGF0aDIsICJ3YiIpOwoJCQkJRXJyQ2hlY2sob3V0cHV0ID09IE5VTEwpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgkKCWlmIChpbnB1dCA9PSBOVUxMKSB7CgkJbWQgPSBfc2V0bW9kZShfZmlsZW5vKHN0ZGluKSwgX09fQklOQVJZKTsKCQlFcnJDaGVjayhtZCA9PSAtMSk7CgkJaW5wdXQgPSBzdGRpbjsKCX0KCQoJaWYgKG91dHB1dCA9PSBOVUxMKSB7CgkJbWQgPSBfc2V0bW9kZShfZmlsZW5vKHN0ZG91dCksIF9PX0JJTkFSWSk7CgkJRXJyQ2hlY2sobWQgPT0gLTEpOwoJCW91dHB1dCA9IHN0ZG91dDsKCX0KCQoJZmxhZyA9IDA7Cgl3aGlsZSAoKHN6ID0gZnJlYWQoZGF0YSwgc2l6ZW9mKGRhdGFbMF0pLCBBcnJMZW4oZGF0YSksIGlucHV0KSkgIT0gMCkgewoJCWogPSAwOwoJCWZvciAoaSA9IDA7IGkgPCBzejsgKytpKSB7CgkJCWlmIChmbGFnID09IDEpIHsKCQkJCWZsYWcgPSAwOwoJCQkJaWYgKGRhdGFbaV0gIT0gTEZfQ09ERSkgewoJCQkJCW91dFtqXSA9IExGX0NPREU7CgkJCQkJKytqOwoJCQkJfQoJCQl9CgkJCWlmIChkYXRhW2ldID09IENSX0NPREUpIHsKCQkJCWZsYWcgPSAxOwoJCQkJY29udGludWU7CgkJCX0KCQkJb3V0W2pdID0gZGF0YVtpXTsKCQkJKytqOwoJCX0KCQlmd3JpdGUob3V0LCBzaXplb2Yob3V0WzBdKSwgaiwgb3V0cHV0KTsKCX0KCQoJaWYgKGlucHV0ICE9IHN0ZGluKSB7CgkJZmNsb3NlKGlucHV0KTsKCX0KCQoJaWYgKG91dHB1dCAhPSBzdGRvdXQpIHsKCQlmY2xvc2Uob3V0cHV0KTsKCX0KCQoJcmV0dXJuIDA7Cn0KCnZvaWQgdXNhZ2UoY29uc3QgY2hhciBhcmcwW10pIHsKCWludCBpLCBqOwoJaiA9IDA7Cglmb3IgKGkgPSAwOyBhcmcwW2ldICE9ICdcMCc7ICsraSkgewoJCWlmIChhcmcwW2ldID09IERTX0NPREUpIHsKCQkJaiA9IGkgKyAxOwoJCX0KCX0KCXB1dHMoIkRlbGV0ZSBDUi1Db2RlKDB4MEQpIik7CglwcmludGYoIiAgdXNhZ2U6ICVzIFstbyA8T3V0cHV0IEZpbGU+XSBbPElucHV0IEZpbGU+XVxuIiwgJmFyZzBbal0pOwp9Cg==