#include "../command.h" static void print_with_escape_codes(const char* str) { size_t index = 0; while (true) { char c = str[index]; index++; if (c == '\0') break; if (c != '\\') { putchar(c); continue; } char n = str[index]; index++; switch (n) { case '\\': putchar('\\'); break; case 'b': putchar('\b'); break; case 'c': exit(EXIT_SUCCESS); case 'n': putchar('\n'); break; case 'r': putchar('\r'); break; case 't': putchar('\t'); break; case 'v': putchar('\v'); break; default: putchar(c); putchar(n); } } } COMMAND(echo) { if (argc < 1) { return EXIT_SUCCESS; } bool escape_codes = false; bool newline = true; int start = 0; if (prefix("-", argv[0])) { start = 1; for (size_t i = 0; i < strlen(argv[0] + 1); i++) { char c = argv[0][i + 1]; switch (c) { case 'e': escape_codes = true; break; case 'E': escape_codes = false; break; case 'n': newline = false; break; default: escape_codes = false; newline = true; start = 0; break; } } } for (int i = start; i < argc; i++) { if (escape_codes) { print_with_escape_codes(argv[i]); } else { printf("%s", argv[i]); } if (i + 1 != argc) { putchar(' '); } } if (newline) { putchar('\n'); } return EXIT_SUCCESS; }