diff --git a/echo/Makefile b/echo/Makefile index d82b837..05c4ebb 100644 --- a/echo/Makefile +++ b/echo/Makefile @@ -2,19 +2,10 @@ TARGETS = echo prompt all: $(TARGETS) -echo: echo.c +%: %.c $(CC) -o $@ $@.c -prompt: echo.c - $(CC) -DPROMPT -o $@ echo.c - clean: rm -f $(TARGETS) -sane: echo.c ../sysexits/sysexits.h - $(CC) -DDONT_USE_SYSTEM_SYSEXITS -o echo echo.c - -../sysexits/sysexits.h: - $(MAKE) -C ../sysexits sysexits.h - -.PHONY: all clean sane +.PHONY: all clean diff --git a/echo/echo.c b/echo/echo.c index 36bf746..c60107e 100644 --- a/echo/echo.c +++ b/echo/echo.c @@ -1,25 +1,16 @@ +#include /* NULL, fprintf(3), putc(3) */ +#include /* stdout */ #include /* EX_OK */ -#include /* NULL */ -#include /* write(2) */ int main(int argc, char **argv){ - int i; - if(*argv == NULL) - goto blank; - - ++argv; - - while(--argc){ - for(i = 0; argv[0][i] != '\0'; ++i); - write(1, *(argv++), i); - if(argc > 1) - write(1, " ", 1); + if(*argv == NULL || *++argv == NULL){ + argc = 1; + putc('\n', stdout); } -blank: -#ifndef PROMPT - write(1, "\n", 1); -#endif + while(--argc) + fprintf(stdout, "%s%c", *(argv++), argc > 1 ? ' ' : '\n'); + return EX_OK; } diff --git a/echo/prompt.c b/echo/prompt.c new file mode 100644 index 0000000..82081e8 --- /dev/null +++ b/echo/prompt.c @@ -0,0 +1,17 @@ +#include /* NULL, fprintf(3), putc(3) */ +#include /* stdout */ +#include /* EX_OK */ + +int main(int argc, char **argv){ + + if(*argv == NULL || *++argv == NULL) + argc = 1; + + while(--argc){ + fprintf(stdout, "%s", *(argv++)); + if(argc > 1) + putc(' ', stdout); + } + + return EX_OK; +}