/* echo -- version two */ /* program to print argument vector to stdout while escaping BEL, tab, backspace and others */ /* mostly SUS compliant */ #include #include #include "support.h" void escape(char c) { switch(c) { case 'a': fputc('\a', stdout); break; case 'b': fputc('\b', stdout); break; case 'c': exit(EXIT_SUCCESS); break; case 'f': fputc('\f', stdout); break; case 'n': fputc('\n', stdout); break; case 'r': fputc('\r', stdout); break; case 't': fputc('\t', stdout); break; case 'v': fputc('\v', stdout); break; case '\\': fputc('\\', stdout); break; case '0': break; default: fputc('\\', stdout); fputc(c, stdout); break; } } int main(int argc, char **argv) { char esc_state; int i, i2; esc_state = 0; i = 1; i2 = 0; for(; i < argc; i++) { for(i2 = 0; argv[i][i2] != '\0'; i2++) { if(!esc_state && '\\' == argv[i][i2]) { esc_state = 1; } else if(esc_state) { esc_state = 0; escape(argv[i][i2]); } else { fputc(argv[i][i2], stdout); } } if(esc_state) { esc_state = 0; fputc('\\', stdout); } if((i + 1) != argc) { fputc(' ', stdout); } } fputc('\n', stdout); exit(EXIT_SUCCESS); }