Add echo
This commit is contained in:
parent
ef7be623a9
commit
8b79ec4168
|
@ -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}
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue