micro-utils/coreutils/echo.c
2023-12-02 20:14:41 +03:00

88 lines
1.0 KiB
C

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
void format(char *str) {
#ifdef ECHO_FANCY
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);
#endif
}
int main(int argc, char **argv) {
unsigned int n_flag = 0;
int i;
for (i = 1; i < argc; i++) {
if (argv[i][0] != '-')
break;
else if (!strcmp(argv[i], "-n"))
n_flag = 1;
}
for (; i < argc; i++) {
format(argv[i]);
if (i < argc - 1)
putchar(' ');
}
if (!n_flag)
putchar('\n');
return 0;
}