micro-utils/src/coreutils/echo/echo.c

94 lines
1.1 KiB
C

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
char n_flag = 0;
char e_flag = 0;
void format(char *str) {
if (e_flag) {
for (size_t i = 0; i < strlen(str); i++) {
unsigned int c = str[i];
if (c == '\\') {
switch (str[i + 1]) {
case 'a':
c = '\a';
break;
case 'n':
c = '\n';
break;
case 't':
c = '\t';
break;
case 'c':
exit(0);
case 'v':
c = '\v';
break;
case 'r':
c = '\r';
break;
case 'f':
c = '\f';
break;
case 'e':
c = '\033';
break;
case 'b':
c = '\b';
break;
default:
c = '\\';
}
i++;
}
putchar(c);
}
}
else
fputs(str, stdout);
}
int main(int argc, char **argv) {
argv++;
argc--;
for (int i = 0; i < argc; i++) {
if (argv[i][0] == '-') {
if (strstr(argv[i] + 1, "n"))
n_flag = 1;
else if (strstr(argv[i] + 1, "e"))
e_flag = 1;
argc--;
argv++;
}
}
for (int i = 0; i < argc; i++) {
format(argv[i]);
if (i < argc - 1)
putchar(' ');
}
if (!n_flag)
putchar('\n');
return 0;
}