23 Commits

Author SHA1 Message Date
0fc9a6b533 Makefile, docs: programmatically generate version for docs (i got tired of doing it myself) 2024-06-23 23:47:29 -06:00
8b400d8a62 Makefile, docs: rename 2024-06-23 23:34:23 -06:00
4b3333d8d3 fop(1): record separator worky now? 2024-06-21 03:26:42 -06:00
578d947561 Merge branch 'README-clarity' 2024-06-19 23:30:03 -06:00
2e91338101 Merge branch 'makefile-posix-2024' 2024-06-19 23:29:42 -06:00
72f57ba08b Makefile: adds octal disclaimer 2024-06-19 23:29:22 -06:00
35f49a699f fop(1): fixes record separator, again 2024-06-19 15:26:46 -06:00
e1ac40e7ee docs: updates version number 2024-06-19 15:03:06 -06:00
125b4c8930 README: updated for clarity 2024-06-19 02:52:58 -06:00
f553cff096 Makefile: removes unneeded comment 2024-06-18 16:33:22 -06:00
d201f9228c Makefile: updates to use new POSIX 2024 standard features! 2024-06-18 16:32:20 -06:00
6814111ad1 dj.1: fixes many clunky sentences 2024-06-17 23:37:13 -06:00
e38dcc09b1 intcmp.1: bold 2024-06-17 23:27:19 -06:00
59eee27979 strcmp.1: or 2024-06-17 23:21:44 -06:00
bf10689606 swab.1: bold 2024-06-17 23:20:29 -06:00
266ee20d5c fop.1: removes unnecessary stdin section and adds AUTHOR 2024-06-17 23:18:45 -06:00
1b299f8ee1 rpn.1: fixes clunkiness 2024-06-17 23:16:25 -06:00
53d5a1db73 hru.1: italics and removes clunky sentences 2024-06-17 23:10:01 -06:00
ee9d42d0d4 str.1: cleanup 2024-06-17 23:02:13 -06:00
15d5761cd7 mm.1: fixes clunky sentence 2024-06-17 22:57:08 -06:00
376feb9ae9 npc.1: fixes minor details 2024-06-17 22:56:17 -06:00
314254b32f docs: hotfix 2024-06-06 13:32:54 -06:00
51421b2128 dj.1, strcmp.1, swab.1: remove nonexistent roff macros 2024-06-06 00:14:55 -06:00
16 changed files with 168 additions and 140 deletions

View File

@@ -8,11 +8,10 @@
# permitted in any medium without royalty provided the copyright notice and this # permitted in any medium without royalty provided the copyright notice and this
# notice are preserved. This file is offered as-is, without any warranty. # notice are preserved. This file is offered as-is, without any warranty.
.POSIX: # The octal escape \043 is utilized twice in this file as make(1p) will
# interpret a hash in a rule as an inline comment.
# if using BSD make(1), remove these pragmas because they break it .POSIX:
.PRAGMA: posix_202x # future POSIX standard support à la pdpmake(1)
.PRAGMA: command_comment # breaks without this?
DESTDIR ?= dist DESTDIR ?= dist
PREFIX ?= /usr/local PREFIX ?= /usr/local
@@ -30,12 +29,12 @@ RUSTLIBS = --extern getopt=build/o/libgetopt.rlib \
CFLAGS += -I$(SYSEXITS) CFLAGS += -I$(SYSEXITS)
.PHONY: all .PHONY: all
all: dj false fop hru intcmp mm npc rpn scrut str strcmp swab true all: docs dj false fop hru intcmp mm npc rpn scrut str strcmp swab true
# keep build/include until bindgen(1) has stdin support
# https://github.com/rust-lang/rust-bindgen/issues/2703
build: build:
# keep build/include until bindgen(1) has stdin support mkdir -p build/bin build/docs build/include build/lib build/o build/test
# https://github.com/rust-lang/rust-bindgen/issues/2703
mkdir -p build/bin build/include build/lib build/o build/test
.PHONY: clean .PHONY: clean
clean: clean:
@@ -44,7 +43,7 @@ clean:
dist: all dist: all
mkdir -p $(DESTDIR)/$(PREFIX)/bin $(DESTDIR)/$(PREFIX)/share/man/man1 mkdir -p $(DESTDIR)/$(PREFIX)/bin $(DESTDIR)/$(PREFIX)/share/man/man1
cp build/bin/* $(DESTDIR)/$(PREFIX)/bin cp build/bin/* $(DESTDIR)/$(PREFIX)/bin
cp docs/*.1 $(DESTDIR)/$(PREFIX)/$(MANDIR)/man1 cp build/docs/*.1 $(DESTDIR)/$(PREFIX)/$(MANDIR)/man1
.PHONY: install .PHONY: install
install: dist install: dist
@@ -55,6 +54,13 @@ test: build
tests/posix-compat.sh tests/posix-compat.sh
$(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt $(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt
.PHONY: docs
docs: docs/ build
for file in docs/*; do original="$$(sed -n '/^\.TH/p' <"$$file")"; \
title="$$(printf '%s\n' "$$original" | sed \
"s/X\.X\.X/$$(git describe --tags --long | cut -d'-' -f1)/g")"; \
sed "s/$$original/$$title/g" <"$$file" >"build/$$file"; done
.PHONY: rustlibs .PHONY: rustlibs
rustlibs: build/o/libsysexits.rlib build/o/libgetopt.rlib \ rustlibs: build/o/libsysexits.rlib build/o/libgetopt.rlib \
build/o/libstrerror.rlib build/o/libstrerror.rlib
@@ -67,9 +73,9 @@ build/o/libstrerror.rlib: build src/strerror.rs
$(RUSTC) $(RUSTFLAGS) --crate-type=lib -o $@ \ $(RUSTC) $(RUSTFLAGS) --crate-type=lib -o $@ \
src/strerror.rs src/strerror.rs
# bandage solution until bindgen(1) gets stdin support
build/o/libsysexits.rlib: build $(SYSEXITS)sysexits.h build/o/libsysexits.rlib: build $(SYSEXITS)sysexits.h
# bandage solution until bindgen(1) gets stdin support printf '\043define EXIT_FAILURE 1\n' | cat - $(SYSEXITS)sysexits.h \
printf '#define EXIT_FAILURE 1\n' | cat - $(SYSEXITS)sysexits.h \
> build/include/sysexits.h > build/include/sysexits.h
bindgen --default-macro-constant-type signed --use-core --formatter=none \ bindgen --default-macro-constant-type signed --use-core --formatter=none \
build/include/sysexits.h | $(RUSTC) $(RUSTFLAGS) --crate-type lib -o $@ - build/include/sysexits.h | $(RUSTC) $(RUSTFLAGS) --crate-type lib -o $@ -

23
README
View File

@@ -1,26 +1,27 @@
“Seek not to walk the path of the masters; seek what they sought.” “Seek not to walk the path of the masters; seek what they sought.”
Matsuo Basho Matsuo Basho
The Bonsai core utilities are the result of the careful examination of the The Bonsai harakit utilities are a replacement for standard POSIX utilities
current state of POSIX and Unix utilies. The Unix Philosophy, “do one thing and which aim to fill its niche while expanding on their capabilities. These new
do it well” is its core but these tools do not cling to the names of the past. tools are the result of the careful examination of the current state of POSIX
and Unix utilies. The Unix Philosophy of “do one thing and do it well” are their
core but they avoid clinging to the past.
The era of the original Unix tools has been long and fruitful, but they have The era of the original Unix tools has been long and fruitful, but they have
their flaws. The new, non-POSIX era of this project started with frustration their flaws. This project originated from frustrations with the way certain
with the way certain tools work and how other projects that extend POSIX dont tools work and how other projects that extend POSIX dont make anything better.
make anything better.
This project will not follow in the footsteps of GNU; extensions of POSIX will This project will not follow in the footsteps of GNU; extensions of POSIX will
not be found here. GNU extensions are a gateway to the misuse of the shell. The not be found here. GNU extensions are a gateway to the misuse of the shell. The
Bonsai core utilities will intentionally discourage use of the shell for harakit utilities will intentionally discourage use of the shell for purposes
purposes beyond its scope. beyond its scope.
See docs/ for more on the specific utilities currently implemented. See docs/ for more on the specific utilities currently implemented.
Building Building
The coreutils require a POSIX-compliant environment to compile, including a C Harakit utilities require a POSIX-compliant environment to compile, including a
compiler and preprocessor (cc(1) and cpp(1) by default), an edition 2023 Rust C compiler and preprocessor (cc(1) and cpp(1) by default), an edition 2023 Rust
compiler (rustc(1) by default), bindgen(1), and a POSIX-compliant make(1) compiler (rustc(1) by default), bindgen(1), and a POSIX-compliant make(1)
utility. utility.
@@ -38,7 +39,7 @@ To test the utilities:
$ make test $ make test
To remove all untracked files: To remove all build and distributable files:
$ make clean $ make clean

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH DJ 1 .TH DJ 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
dj \(en disk jockey dj \(en disk jockey
.\" .\"
@@ -18,41 +18,29 @@ dj
.RB [ count ]) .RB [ count ])
.RB ( -i .RB ( -i
.R [ [\fBinput file\fP])
.B input file
.R ])
.RB ( -b .RB ( -b
.R [ [\fBinput block size\fP])
.B input block size
.R ])
.RB ( -s .RB ( -s
.R [ [\fBinput offset\fP])
.B input offset
.R ])
.RB ( -o .RB ( -o
.R [ [\fBoutput file\fP])
.B output file
.R ])
.RB ( -B .RB ( -B
.R [ [\fBoutput block size\fP])
.B output block size
.R ])
.RB ( -S .RB ( -S
.R [ [\fBoutput offset\fP])
.B output offset
.R ])
.\" .\"
.SH DESCRIPTION .SH DESCRIPTION
Perform precise read and write operations on files. This utility is useful for Perform precise read and write operations on files. This utility is useful for
reading and writing binary data to and from disks, hence the name. reading and writing binary data to and from disks.
This manual page uses the terms \(lqskip\(rq and \(lqseek\(rq to refer to moving This manual page uses the terms \(lqskip\(rq and \(lqseek\(rq to refer to moving
to a specified byte by index in the input and output of the program to a specified byte by index in the input and output of the program
respectively. This language is inherited from the respectively. This language is inherited from the
.BR dd (1p) .BR dd (1p)
utility and is used here to decrease ambiguity. utility and used here to decrease ambiguity.
When seeking or skipping to a byte, writing or reading starts at the byte When seeking or skipping to a byte, writing or reading starts at the byte
immediately subsequent to the specified byte. immediately subsequent to the specified byte.
@@ -62,8 +50,8 @@ immediately subsequent to the specified byte.
.IP \fB-i\fP .IP \fB-i\fP
Takes a file path as an argument and opens it for use as an input. Takes a file path as an argument and opens it for use as an input.
.IP \fB-b\fP .IP \fB-b\fP
Takes a numeric argument as the size in bytes of the input buffer, with the Takes a numeric argument as the size in bytes of the input buffer, the default
default being 1024. being 1024.
.IP \fB-s\fP .IP \fB-s\fP
Takes a numeric argument as the number of bytes to skip into the input Takes a numeric argument as the number of bytes to skip into the input
before starting to read. If the standard input is used, bytes read to this point before starting to read. If the standard input is used, bytes read to this point
@@ -78,25 +66,25 @@ but for the output buffer.
Seeks a number of bytes through the output before starting to write from Seeks a number of bytes through the output before starting to write from
the input. If the output is a stream, null characters are printed. the input. If the output is a stream, null characters are printed.
.IP \fB-a\fP .IP \fB-a\fP
Accepts a single literal byte with which input buffer is padded in the event Accepts a single literal byte with which the input buffer is padded in the event
of an incomplete read from the input file. of an incomplete read from the input file.
.IP \fB-A\fP .IP \fB-A\fP
Specifying this option pads the input buffer with null bytes in the event of an Specifying this option pads the input buffer with null bytes in the event of an
incomplete read. Equivalent to specifying incomplete read. This is equivalent to specifying
.B -a .B -a
with a null byte instead of a character. with a null byte instead of a character.
.IP \fB-c\fP .IP \fB-c\fP
Specifies a number of reads to make. The default is zero, in which case the Specifies a number of reads to make. The default is 0, in which case the
input is read until a partial or empty read is made. input is read until a partial or empty read is made.
.IP \fB-d\fP .IP \fB-d\fP
Prints invocation information before program execution as described in the Prints invocation information before program execution as described in the
DIAGNOSTICS section below. Each invocation increments the debug level of the DIAGNOSTICS section. Each invocation increments the debug level of the
program. program.
.IP \fB-H\fP .IP \fB-H\fP
Prints diagnostics messages in a human-readable manner as described in the Prints diagnostics messages in a human-readable manner as described in the
DIAGNOSTICS section below. DIAGNOSTICS section.
.IP \fB-n\fP .IP \fB-n\fP
Retries failed reads once more before exiting. Retries failed reads once before exiting.
.IP \fB-q\fP .IP \fB-q\fP
Suppresses error messages which print when a read or write is partial or Suppresses error messages which print when a read or write is partial or
empty. Each invocation decrements the debug level of the program. empty. Each invocation decrements the debug level of the program.
@@ -106,22 +94,27 @@ empty. Each invocation decrements the debug level of the program.
The standard input shall be used as an input if no inputs are specified or if The standard input shall be used as an input if no inputs are specified or if
one or more of the input files is \(lq-\(rq. one or more of the input files is \(lq-\(rq.
.\" .\"
.SH STANDARD OUTPUT
The standard output shall be used as an output if no inputs are specified or if
one or more of the input files is \(lq-\(rq.
.\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
On a partial or empty read, a diagnostic message is printed (unless the On a partial or empty read, unless the
.B -q .B -q
option is specified) and the program exits (unless the option is specified, a diagnostic message is printed. Then, the program exits
unless the
.B -n .B -n
option is specified). option is specified.
By default, statistics are printed for input and output to the standard error in By default, statistics are printed for input and output to the standard error in
the following format: the following format:
.RS .RS
.R {records read} {ASCII unit separator} {partial records read} {records read} {ASCII unit separator} {partial records read}
.R {ASCII record separator} {records written} {ASCII unit separator} {ASCII record separator} {records written} {ASCII unit separator}
.R {partial records written} {ASCII group separator} {bytes read} {partial records written} {ASCII group separator} {bytes read}
.R {ASCII record separator} {bytes written} {ASCII file separator} {ASCII record separator} {bytes written} {ASCII file separator}
.RE .RE
This format for diagnostic output is designed to be machine-parseable for This format for diagnostic output is designed to be machine-parseable for
@@ -130,23 +123,23 @@ convenience. For a more human-readable format, the
option may be specified. In this event, the following format is used instead: option may be specified. In this event, the following format is used instead:
.RS .RS
.R {records read} '+' {partial records read} '>' {records written} {records read} '+' {partial records read} '>' {records written}
.R '+' {partial records written} ';' {bytes read} '>' {bytes written} '+' {partial records written} ';' {bytes read} '>' {bytes written}
.R {ASCII line feed} {ASCII line feed}
.RE .RE
If the If the
.B -d .B -d
option is specified, debug output will be printed at the beginning of option is specified, debug information will be printed at the beginning of
execution. This debug information contains information regarding how the program execution. This output contains information regarding how the program was
was invoked. The following example is the result of running the program with invoked. The following example is the result of running the program with
.B -d .B -d
as the only argument: as the only argument:
.RS .RS
.R argv0=dj argv0=dj
.R in=<stdin> ibs=1024 skip=0 align=ff count=0 in=<stdin> ibs=1024 skip=0 align=ff count=0
.R out=<stdout> obs=1024 seek=0 debug= 3 noerror=0 out=<stdout> obs=1024 seek=0 debug= 3 noerror=0
.RE .RE
In non-recoverable errors that don\(cqt pertain to the read-write cycle, a In non-recoverable errors that don\(cqt pertain to the read-write cycle, a
@@ -160,12 +153,12 @@ If
.B -n .B -n
is specified along with the is specified along with the
.B -c .B -c
option and a count, actual byte output may be lower than expected (the product option and a count, actual byte output is the product of the count and the input
of the count and the input block size). If the block size and therefore may be lower than expected. If the
.B -a .B -a
or or
.B -A .B -A
options are used, this could make data written nonsensical. options are specified, this could make written data nonsensical.
.\" .\"
.SH CAVEATS .SH CAVEATS

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH FALSE 1 .TH FALSE 1 2024-06-06 "Harakit X.X.X"
.SH NAME .SH NAME
false \(en do nothing, unsuccessfully false \(en do nothing, unsuccessfully
.\" .\"

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH fop 1 .TH FOP 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
fop \(en field operator fop \(en field operator
.\" .\"
@@ -18,7 +18,7 @@ fop
.\" .\"
.SH DESCRIPTION .SH DESCRIPTION
Performs operations on specified fields in input data. Performs operations on specified fields in data read from the standard input.
.\" .\"
.SH OPTIONS .SH OPTIONS
@@ -26,10 +26,6 @@ Performs operations on specified fields in input data.
Sets a delimiter by which the input data will be split into fields. The default Sets a delimiter by which the input data will be split into fields. The default
is an ASCII record separator. is an ASCII record separator.
.\" .\"
.SH STANDARD INPUT
Data will be read from the standard input.
.\"
.SH CAVEATS .SH CAVEATS
Field indices are zero-indexed, which may be unexpected behavior for some users. Field indices are zero-indexed, which may be unexpected behavior for some users.
@@ -51,6 +47,12 @@ but there was no easy way to modify the field in the ouput of
.BR ls (1p) .BR ls (1p)
without creating a new tool. without creating a new tool.
.\" .\"
.SH AUTHOR
Written by Emma Tebibyte
.MT emma@tebibyte.media
.ME .
.\"
.SH COPYRIGHT .SH COPYRIGHT
Copyright \(co 2024 Emma Tebibyte. License AGPLv3+: GNU AGPL version 3 or later Copyright \(co 2024 Emma Tebibyte. License AGPLv3+: GNU AGPL version 3 or later

View File

@@ -3,7 +3,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH HRU 1 .TH HRU 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
hru \(en human readable units hru \(en human readable units
.\" .\"
@@ -15,9 +15,9 @@ hru
Convert counts to higher units. Convert counts to higher units.
The program will read byte counts in the form of whole numbers from the standard Byte counts will be read in the form of whole numbers from the standard input
input and write to the standard output the same number converted to a higher and be written to the standard output the same number converted to a higher unit
unit of data as defined by the International System of Units. of data as defined by the \fIInternational System of Units\fP.
The program will convert the byte count to the highest unit possible where the The program will convert the byte count to the highest unit possible where the
value is greater than one. value is greater than one.
@@ -35,10 +35,8 @@ The GNU project\(cqs
.BR ls (1) .BR ls (1)
implementation contains a human-readable option (\fB-h\fP) that, when specified, implementation contains a human-readable option (\fB-h\fP) that, when specified,
makes the tool print size information in a format more immediately makes the tool print size information in a format more immediately
readable. This functionality is useful not only in the context of readable. This functionality is useful not only in this context, so the decision
.BR ls (1) was made to split it into a new tool. The original functionality from GNU\(cqs
so the decision was made to split it into a new tool. The original functionality
in GNU\(cqs
.BR ls (1) .BR ls (1)
can be emulated with can be emulated with
.BR fop (1) .BR fop (1)
@@ -46,8 +44,12 @@ combined with this program.
.\" .\"
.SH STANDARDS .SH STANDARDS
The standard unit prefixes as specified by the Bureau International des Poids The standard unit prefixes as specified by the
et Mesures (BIPM) in the ninth edition of The International System of Units (SI) .I Bureau International des Poids et Mesures
.RI ( BIPM )
in the ninth edition of
.I The International System of Units
.RI ( SI )
are utilized for the ouput of conversions. are utilized for the ouput of conversions.
.\" .\"
.SH AUTHOR .SH AUTHOR
@@ -64,4 +66,4 @@ Copyright \(co 2024 Emma Tebibyte. License AGPLv3+: GNU AGPL version 3 or later
.SH SEE ALSO .SH SEE ALSO
GNU GNU
.BR ls (1), .BR ls (1),
The International System of Units (SI) 9th Edition .I The International System of Units (SI) 9th Edition

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH INTCMP 1 .TH INTCMP 1 2024-06-06 "Harakit X.X.X"
.SH NAME .SH NAME
intcmp \(en compare integers intcmp \(en compare integers
.\" .\"
@@ -28,19 +28,23 @@ Permits a given integer to be less than the following integer.
.\" .\"
.SH EXAMPLES .SH EXAMPLES
It may help to think of the -e, -g, and -l options as equivalent to the It may help to think of the
infix algebraic \(lq=\(rq, \(lq>\(rq, and \(lq<\(rq operators respectively, with .BR -e ,
each option putting its symbol between every given integer. The following .BR -g ,
example is equivalent to evaluating \(lq1 < 2 < 3\(rq: and
.B -l
options as equivalent to the infix algebraic \(lq=\(rq, \(lq>\(rq, and \(lq<\(rq
operators respectively, with each option putting its symbol between every given
integer. The following example is equivalent to evaluating \(lq1 < 2 < 3\(rq:
\" \"
.RS .RS
.R intcmp -l 1 2 3 intcmp -l 1 2 3
.RE .RE
.\" .\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
The program will exit with a status code of 0 for a valid expression and with a The program will exit with a successfully for a valid expression and with an
code of 1 for an invalid expression. error code of 1 for an invalid expression.
In the event of an error, a debug message will be printed and the program will In the event of an error, a debug message will be printed and the program will
exit with the appropriate exit with the appropriate
@@ -49,7 +53,8 @@ error code.
.\" .\"
.SH BUGS .SH BUGS
-egl, \(lqequal to or less than or greater than\(rq, exits 0 no matter what for .BR -egl ,
\(lqequal to or less than or greater than\(rq, always exits successfully for
valid program usage and may be abused to function as an integer validator. Use valid program usage and may be abused to function as an integer validator. Use
.BR str (1) .BR str (1)
instead. instead.
@@ -57,9 +62,17 @@ instead.
.SH CAVEATS .SH CAVEATS
There are multiple ways to express compound comparisons; \(lqless than or equal There are multiple ways to express compound comparisons; \(lqless than or equal
to\(rq can be -le or -el, for example. to\(rq can be
.B -le
or
.BR -el ,
for example.
The inequality comparison is -gl or -lg for \(lqless than or greater than\(rq; The inequality comparison is
.B -gl
.B or
.B -lg
for \(lqless than or greater than\(rq;
this is elegant but unintuitive. this is elegant but unintuitive.
.\" .\"
.SH RATIONALE .SH RATIONALE

View File

@@ -3,7 +3,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH mm 1 .TH MM 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
mm \(en middleman mm \(en middleman
.\" .\"
@@ -39,8 +39,8 @@ Causes SIGINT signals to be ignored.
.\" .\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
If an output cannot be written to, an error occurs. Additional outputs are not If an output cannot be written to, an error occurs; however, exiting will be
affected and writing to them continues. deferred until writing to any other specified outputs completes.
When an error is encountered, a diagnostic message is printed and the program When an error is encountered, a diagnostic message is printed and the program
exits with the appropriate exits with the appropriate

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH NPC 1 .TH NPC 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
npc \(en show non-printing characters npc \(en show non-printing characters
.\" .\"
@@ -25,10 +25,10 @@ becomes '^?'. Characters with the high bit set (>127) are printed as 'M-'
followed by the graphical representation for the same character without the followed by the graphical representation for the same character without the
high bit set. high bit set.
.\" .\"
.SH USAGE .SH OPTIONS
.IP \fB-e\fP .IP \fB-e\fP
Prints a dollar sign ('$') before each line ending. Prints a dollar sign ('$') before each newline.
.IP \fB-t\fP .IP \fB-t\fP
Prints tab characters as '^I' rather than a literal horizontal tab. Prints tab characters as '^I' rather than a literal horizontal tab.
.\" .\"
@@ -52,8 +52,8 @@ the
.B -v .B -v
option, is the bandage solution GNU and other software suites use. option, is the bandage solution GNU and other software suites use.
This functionality is a separate tool because its usefulness extends beyond that This functionality is included in a separate tool because its usefulness extends
of beyond that of
.BR cat (1p). .BR cat (1p).
.\" .\"
.SH AUTHOR .SH AUTHOR

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH rpn 1 .TH RPN 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
rpn \(en reverse polish notation evaluation rpn \(en reverse polish notation evaluation
.\" .\"
@@ -18,12 +18,12 @@ rpn
Evaluate reverse polish notation. Evaluate reverse polish notation.
The program evaluates reverse polish notation expressions either read from the The program evaluates reverse polish notation expressions read either from the
standard input or parsed from provided arguments. See the STANDARD INPUT standard input or parsed from provided arguments. See the STANDARD INPUT
section. section.
Upon evaluation, the program will print the resulting number on the stack to the Upon evaluation, the resulting number on the stack will be printed to the
standard output. Any further specified numbers will be placed at the end of the standard output. Any further numbers specified will be placed at the end of the
stack. stack.
For information on for reverse polish notation syntax, see For information on for reverse polish notation syntax, see
@@ -31,8 +31,8 @@ For information on for reverse polish notation syntax, see
.\" .\"
.SH STANDARD INPUT .SH STANDARD INPUT
If arguments are passed, they are interpreted as an expression to be If arguments are specified, they are interpreted as an expression to be
evaluated. Otherwise, it reads whitespace-delimited numbers and operations from evaluated. Otherwise, whitespace-delimited numbers and operations are read from
the standard input. the standard input.
.\" .\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
@@ -46,11 +46,13 @@ error message and continue accepting input.
.SH CAVEATS .SH CAVEATS
Due to precision constraints and the way floats are represented in accordance Due to precision constraints and the way floats are represented in accordance
with the IEEE Standard for Floating Point Arithmetic (\fIIEEE 754\fP), with the
floating-point arithmetic has rounding errors. This is somewhat curbed by using .I IEEE Standard for Floating Point Arithmetic
the machine epsilon as provided by the Rust standard library to which to round (\fIIEEE 754\fP), floating-point arithmetic has rounding errors. This is
numbers. Because of this, variation is expected in the number of decimal places somewhat curbed by using the machine epsilon as provided by the Rust standard
the program can handle based on the platform and hardware of any given machine. library to which numbers are rounded. Because of this, variation is expected in
the number of decimal places the program can handle based on the platform and
hardware of any given machine.
.\" .\"
.SH RATIONALE .SH RATIONALE
@@ -63,8 +65,8 @@ program. A
pre-dates the standardized pre-dates the standardized
.BR bc (1p), .BR bc (1p),
the latter originally being a preprocessor for the former, and was included in the latter originally being a preprocessor for the former, and was included in
UNIX v2 onward. While it implements reverse polish notation, it still suffers Second Edition UNIX and onward. While it implements reverse polish notation, it
from being unable to accept an expression as an argument. still suffers from being unable to accept an expression as an argument.
.\" .\"
.SH AUTHOR .SH AUTHOR

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH scrut 1 .TH SCRUT 1 2024-06-06 "Harakit X.X.X"
.SH NAME .SH NAME
scrut \(en scrutinize file properties scrut \(en scrutinize file properties
.SH SYNOPSIS .SH SYNOPSIS

View File

@@ -4,9 +4,9 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH STR 1 .TH STR 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
str \(en test the character types of string arguments str \(en test string arguments
.\" .\"
.SH SYNOPSIS .SH SYNOPSIS
@@ -16,7 +16,7 @@ str
.\" .\"
.SH DESCRIPTION .SH DESCRIPTION
Test string arguments. Test the character types of string arguments.
The tests in this program are equivalent to the functions with the same names in The tests in this program are equivalent to the functions with the same names in
.BR ctype.h (0p) .BR ctype.h (0p)
@@ -24,11 +24,8 @@ and are the methods by which string arguments are tested.
.\" .\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
If all tests pass, the program will exit with an exit code of 0. If any of the If all tests pass, the program will exit successfully. If any of the tests fail,
tests fail, the program will exit unsuccessfully with an error code of 1. the program will exit unsuccessfully with an error code of 1.
An empty string will cause an unsuccessful exit as none of its contents pass any
tests.
When invoked incorrectly, a debug message will be printed and the program will When invoked incorrectly, a debug message will be printed and the program will
exit with the appropriate exit with the appropriate
@@ -37,6 +34,9 @@ error code.
.\" .\"
.SH CAVEATS .SH CAVEATS
None of an empty string\(cqs contents pass any of the tests, so the program will
exit unsuccessfully if one is specified.
There\(cqs no way of knowing which argument failed the test without re-testing There\(cqs no way of knowing which argument failed the test without re-testing
arguments individually. arguments individually.

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH STRCMP 1 .TH STRCMP 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
strcmp \(en compare strings strcmp \(en compare strings
.\" .\"
@@ -25,14 +25,14 @@ will exit with an error code of 1 if a string passed has a lesser byte value
than one of the prior strings: than one of the prior strings:
.RS .RS
.R strcmp b a strcmp b a
.RE .RE
and with an error code of 255 if it has a greater byte value than one of the or with an error code of 255 if it has a greater byte value than one of the
prior strings: prior strings:
.RS .RS
.R strcmp a b strcmp a b
.RE .RE
When invoked incorrectly, a debug message will be printed and the program will When invoked incorrectly, a debug message will be printed and the program will
@@ -54,7 +54,8 @@ been
This tool also handles integer comparisons and file scrutiny. These parts of its This tool also handles integer comparisons and file scrutiny. These parts of its
functionality have been broken out into multiple utilities. functionality have been broken out into multiple utilities.
This program\(cqs functionality may be performed on a POSIX-compliant system with This program\(cqs functionality may be performed on a POSIX-compliant system
with
.BR test (1p). .BR test (1p).
.\" .\"
.SH AUTHOR .SH AUTHOR

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH SWAB 1 .TH SWAB 1 2024-06-17 "Harakit X.X.X"
.SH NAME .SH NAME
swab \(en swap bytes swab \(en swap bytes
.\" .\"
@@ -38,13 +38,13 @@ The following
line: line:
.RS .RS
.R printf 'hello world!\(rsn' | swab printf 'hello world!\(rsn' | swab
.RE .RE
Produces the following output: Produces the following output:
.RS .RS
.R ehll oowlr!d ehll oowlr!d
.RE .RE
.\" .\"
.SH DIAGNOSTICS .SH DIAGNOSTICS
@@ -56,7 +56,9 @@ error code.
.\" .\"
.SH RATIONALE .SH RATIONALE
This program was modeled and named after the conv=swab functionality specified This program was modeled and named after the
.B conv=swab
functionality specified
in the in the
.BR dd (1p) .BR dd (1p)
utility. It additionally allows the word size to be configured. utility. It additionally allows the word size to be configured.
@@ -64,6 +66,12 @@ utility. It additionally allows the word size to be configured.
This functionality is useful for fixing the endianness of binary files produced This functionality is useful for fixing the endianness of binary files produced
on other machines. on other machines.
.\" .\"
.SH AUTHOR
Written by DTB
.MT trinity@trinity.moe
.ME .
.\"
.SH COPYRIGHT .SH COPYRIGHT
Copyright \(co 2024 DTB. License AGPLv3+: GNU AGPL version 3 or later Copyright \(co 2024 DTB. License AGPLv3+: GNU AGPL version 3 or later

View File

@@ -4,7 +4,7 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\" .\"
.TH TRUE 1 .TH TRUE 1 2024-06-06 "Harakit X.X.X"
.SH NAME .SH NAME
true \(en do nothing, successfully true \(en do nothing, successfully
.\" .\"

View File

@@ -32,7 +32,7 @@ use sysexits::{ EX_DATAERR, EX_IOERR, EX_UNAVAILABLE, EX_USAGE };
fn main() { fn main() {
let argv = args().collect::<Vec<String>>(); let argv = args().collect::<Vec<String>>();
let mut d = 0x1E.to_string(); let mut d = '\u{1E}'.to_string();
let mut arg_parser = Parser::new(&argv, "d:"); let mut arg_parser = Parser::new(&argv, "d:");
while let Some(opt) = arg_parser.next() { while let Some(opt) = arg_parser.next() {