This commit is contained in:
g1n 2021-11-22 21:12:55 +02:00
parent ef7be623a9
commit 8b79ec4168
2 changed files with 68 additions and 2 deletions

View File

@ -1,6 +1,6 @@
CC= gcc
SRCFILES= cat.c touch.c yes.c mkdir.c
OBJFILES= cat touch yes mkdir
SRCFILES= cat.c touch.c yes.c mkdir.c echo.c
OBJFILES= cat touch yes mkdir echo
CFLAGS= -Wall -Wextra
.PHONY: all clean
@ -10,6 +10,7 @@ all:
$(CC) $(CFLAGS) touch.c -o touch
$(CC) $(CFLAGS) yes.c -o yes
$(CC) $(CFLAGS) mkdir.c -o mkdir
$(CC) $(CFLAGS) echo.c -o echo
clean:
@rm ${OBJFILES}

65
src/echo.c Normal file
View File

@ -0,0 +1,65 @@
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main(int argc, char *argv[]) {
bool newline = true; // Enables newline in the end (to disable use arg -n)
bool escapes = false; // Enables backslash-escaped characters (to enable use arg -e)
for (int i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-n")) {
newline = false;
} else if (!strcmp(argv[i], "-e")) {
escapes = true;
} else if (!strcmp(argv[i], "-E")) {
escapes = false;
} else {
if (escapes) {
for (size_t j = 0; j < strlen(argv[i]); j++) {
if (argv[i][j] == '\\') {
j++;
switch(argv[i][j]) {
case 'b':
printf("\b");
break;
case 'c':
return 0;
case 'e':
printf("\e");
break;
case 'f':
printf("\f");
break;
case 'n':
printf("\n");
break;
case 'r':
printf("\r");
break;
case 't':
printf("\t");
break;
case 'v':
printf("\v");
break;
case '\\':
printf("\\");
break;
default:
printf("\\%c", argv[i][j]);
}
} else {
printf("%c", argv[i][j]);
}
}
} else {
printf("%s", argv[i]);
}
if (i < argc - 1)
printf(" ");
}
}
if (newline) {
printf("\n");
}
return 0;
}