/* retconv.c - convert return code from/to DOS/Mac/UNIX */ #include #define LF 0 #define CR 1 #define CRLF 2 int main(int argc, char *argv[]) { int c, i; int convmode = LF, prevchar = 0; for (i = 1; i < argc; i++) { if (*argv[i] == '-') { switch (c = *(argv[i] + 1)) { case 'd': /* to DOS */ convmode = CRLF; break; case 'm': /* to Mac */ convmode = CR; break; case 'u': /* to UNIX */ convmode = LF; break; case 'h': fprintf(stderr, "Usage: %s [-dmu] < infile > outfile\n", argv[0]); exit(1); default: fprintf(stderr, "invalid option -- %c\n", c); exit(1); } } } while ((c = fgetc(stdin)) != EOF) { switch (c) { case '\r': case '\n': /* return code from DOS */ if (prevchar == '\r' && c == '\n') break; switch (convmode) { case LF: fputc('\n', stdout); break; case CR: fputc('\r', stdout); break; case CRLF: fputc('\r', stdout); fputc('\n', stdout); break; } break; default: fputc(c, stdout); } prevchar = c; } return 0; }