1
0

utilities

This commit is contained in:
dtb 2022-05-14 20:52:07 -04:00
parent 3a6762e153
commit 3334b25b77
2 changed files with 192 additions and 0 deletions

99
Makefile Normal file
View File

@ -0,0 +1,99 @@
CC=cc
CFLAGS=-I include/ -I lib/ -Wall -Werror
RM=rm -f
all: libraries programs
cleanall: clean cleanlibraries cleanprograms
clean:
$(RM) src/*.o
cleanlibraries:
$(RM) lib/libshell.o
$(RM) lib/libstr.o
cleanprograms:
$(RM) bin/add
$(RM) bin/cut
$(RM) bin/echo
$(RM) bin/eq
$(RM) bin/false
$(RM) bin/fdivide
$(RM) bin/gt
$(RM) bin/lowercase
$(RM) bin/lt
$(RM) bin/mm
$(RM) bin/multiply
$(RM) bin/nonzero
$(RM) bin/simexec
$(RM) bin/sleep
$(RM) bin/streq
$(RM) bin/stris
$(RM) bin/substitute
$(RM) bin/tail
libraries: libshell libstr stdbool sysexits
libshell: lib/libshell.c lib/libshell.h
$(CC) $(CFLAGS) -o lib/libshell.o -c lib/libshell.c
libstr: lib/libstr.c lib/libstr.h
$(CC) $(CFLAGS) -o lib/libstr.o -c lib/libstr.c
stdbool: include/stdbool.h
sysexits: src/sysexits.c
$(CC) $(CFLAGS) -o bin/sysexits src/sysexits.c
bin/sysexits >include/sysexits.h
programs: echo false nonzero simexec sleep streq stris
calculate: libstr sysexits src/calculate.c
$(CC) $(CFLAGS) -o src/calculate.o -c src/calculate.c
$(CC) $(CFLAGS) -o bin/calculate lib/libstr.o src/calculate.o
echo: sysexits src/echo.c
$(CC) $(CFLAGS) -o bin/echo src/echo.c
false: src/false.c
$(CC) $(CFLAGS) -o bin/false src/false.c
id: stdbool sysexits src/id.c
$(CC) $(CFLAGS) -o bin/id src/id.c
levenshtein: src/levenshtein.c
$(CC) $(CFLAGS) -o bin/levenshtein src/levenshtein.c
lowercase: sysexits src/lowercase.c
$(CC) $(CFLAGS) -o bin/lowercase src/lowercase.c
nonzero: src/nonzero.c
$(CC) $(CFLAGS) -o bin/nonzero src/nonzero.c
runlength: noargvzero sysexits src/runlength.c
$(CC) $(CFLAGS) -o bin/runlength src/runlength.c
simexec: noargvzero sysexits src/simexec.c
$(CC) $(CFLAGS) -o bin/simexec src/simexec.c
streq: noargvzero sysexits src/streq.c
$(CC) $(CFLAGS) -o bin/streq src/streq.c
stris: libstr src/stris.c
$(CC) $(CFLAGS) -c -o src/stris.o src/stris.c
$(CC) $(CFLAGS) -o bin/stris lib/libstr.o src/stris.o
sleep: libstr noargvzero sysexits src/sleep.c
$(CC) $(CFLAGS) -c -o src/sleep.o src/sleep.c
$(CC) $(CFLAGS) -o bin/sleep lib/libstr.o src/sleep.o
substitute: stdbool src/substitute.c
$(CC) $(CFLAGS) -c -o src/substitute.o src/substitute.c
$(CC) $(CFLAGS) -o bin/substitute src/substitute.o
which: libshell src/which.c
$(CC) $(CFLAGS) -c -o src/which.o src/which.c
$(CC) $(CFLAGS) -o bin/which lib/libshell.o src/which.o
.PHONY: all clean cleanlibraries cleanprograms noargvzero stdbool sysexits

93
man/utilities.md Normal file
View File

@ -0,0 +1,93 @@
# utilities
This project seeks to replicate all standard system utilities on UNIX-like system, implementing the features defined in [POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/).
Much of this project's layout is opinionated.
For a user installation, place `PATH="$HOME/bin/:"$PATH` in your `$HOME/.bashrc`, `mkdir -p $HOME/bin`, and then copy the desired utilities into that binaries folder.
(Yes, this doesn't work for all system configurations (it doesn't work for mine), but it works for nearly all configurations beginners would have; if you know what you're doing you don't have to refer to this).
This doesn't require root permissions and you can bypass these utilities with `/bin/[desired utility]`.
System-wide installation of these utilities isn't recommended whatsoever.
## building
You can just read the Makefile, it's a pretty simple one.
`make cleanall` - cleans
`make programs` - builds all stable utilities
`make [utility]` - builds a specific utility
It's not necessary to `make libraries` as the Makefile knows on which libraries each program depends and will build those specific libraries when needed.
## included utilities
All not mentioned in this README have proper manual pages provided in `man/`.
### abs
Not in POSIX.
Shellscript that returns the absolute value of an integer argument.
Relies on *eq*(1), *lt*(1), *multiply*(1), *printf*(1), and *stris*(1).
### ++
Shellscript that sums 1 with the first argument using *add*(1).
### --
Shellscript that subtracts 1 from the first argument using *subtract*(1).
### subtract
Shellscript that subtracts the second argument from the first.
Relies on *add*(1), *eq*(1), *multiply*(1), *printf*(1), and *stris*(1).
### cat
*cat*(1) written in POSIX shell.
Relies on *dd*(1) and *test*(1).
### eq
Compares integer arguments and exits with 0 if they're all equal or 1 if some aren't equal.
Equivalent to `test -eq`.
### fdivide
Not in POSIX.
Performs **floor division** on two **integers**.
This does not, as the name suggests, divide floating-point numbers.
### gt
Compares integer arguments and exits with 0 if the arguments are arranged in descending order.
Exits with 1 if an argument is equal or greater to a previous argument.
Equivalent to `test -gt`.
### head
An implementation of *head*(1) written in POSIX shell.
Relies on *cat*(1), *printf*(1), *sed*(1), and *stris*(1).
WIP.
### lt
Compares integer arguments and exits with 0 if the arguments are arranged in ascending order.
Exits with 1 if an argument is equal or lesser to a previous argument.
Equivalent to `test -lt`.
### man
Barebones implementation of *man*(1) written in POSIX shell.
### mod
Not in POSIX.
Prints the remainder of the first argument divided by the second to stdout.
Written in POSIX shell, relies on *eq*(1), *fdivide*(1), *multiply*(1), *printf*(1), *subtract*(1), *stris*(1).
### tail
An implementation of *tail*(1). WIP.