Compare commits

..

No commits in common. "f1f5ac1788b4d148b1c783f7389fa20590d24e86" and "9093b061662fac3ad646370ff4569a2565504177" have entirely different histories.

3 changed files with 41 additions and 72 deletions

View File

@ -30,7 +30,7 @@ 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 sleep str strcmp swab true all: dj false fop hru intcmp mm npc rpn scrut str strcmp swab true
build: build:
# keep build/include until bindgen(1) has stdin support # keep build/include until bindgen(1) has stdin support
@ -119,13 +119,6 @@ scrut: build/bin/scrut
build/bin/scrut: src/scrut.c build build/bin/scrut: src/scrut.c build
$(CC) $(CFLAGS) -o $@ src/scrut.c $(CC) $(CFLAGS) -o $@ src/scrut.c
.PHONY: sleep
sleep: build/bin/sleep
build/bin/sleep: src/sleep.rs build rustlibs
$(RUSTC) $(RUSTFLAGS) \
--extern sysexits=build/o/libsysexits.rlib \
-o $@ src/sleep.rs
.PHONY: str .PHONY: str
str: build/bin/str str: build/bin/str
build/bin/str: src/str.c build build/bin/str: src/str.c build

57
README
View File

@ -1,27 +1,27 @@
For the Bonsai coreutils, a better Unix toolset, please visit “Seek not to walk the path of the masters; seek what they sought.”
<https://git.tebibyte.media/bonsai/coreutils>. Matsuo Basho
wwwww / The Bonsai core utilities are the result of the careful examination of the
wWWWWWw /_ _____ _ * "It's not a very good tree, but current state of POSIX and Unix utilies. The Unix Philosophy, “do one thing and
w|||w / \/ \ / | /\ / /|/ occasionally it bears fruit!" do it well” is its core but these tools do not cling to the names of the past.
_,|||._ _/\__/|__// /_/_|_/_//|__
bonsix : "BOHN zix" : "Bonsai" but "POSIX"
The excellent Bonsai core utilities are the result of the careful examination The era of the original Unix tools has been long and fruitful, but they have
of the current state of POSIX and Unix utilities, ironing out wrinkles in the their flaws. The new, non-POSIX era of this project started with frustration
implementations that ended up being worn by the POSIX standard. Bonsai's with the way certain tools work and how other projects that extend POSIX dont
guiding quote is this one from Matsuo Basho: make anything better.
"Seek not to walk the path of the masters; seek what they sought." 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
Bonsai core utilities will intentionally discourage use of the shell for
purposes beyond its scope.
Unlike Bonsai, Bonsix intends to walk the path of the masters, implementing a See docs/ for more on the specific utilities currently implemented.
POSIX userland under an AGPLv3 license and taking inspiration from the
practices used by Bonsai.
Building Building
Bonsix requires an existing POSIX-compliant environment to compile, including a The coreutils require a POSIX-compliant environment to compile, including a C
C compiler and preprocessor (cc(1) and cpp(1) by default) and a POSIX-compliant compiler and preprocessor (cc(1) and cpp(1) by default) with the -idirafter
flag, a Rust compiler (rustc(1) by default), bindgen(1), and a POSIX-compliant
make(1) utility. make(1) utility.
To build and install: To build and install:
@ -32,6 +32,29 @@ $ make PREFIX="/your/preferred/location" install
To build with a different compiler than the default: To build with a different compiler than the default:
$ make CC=clang $ make CC=clang
$ make RUSTC=gccrs
To test the utilities:
$ make test
To remove all untracked files:
$ make clean
Read More
An Introduction to the Unix Shell
<https://porkmail.org/era/unix/shell>
Master Foo and the Ten Thousand Lines
<http://www.catb.org/~esr/writings/unix-koans/ten-thousand.html>
Master Foo Discourses on the Unix-Nature
<http://www.catb.org/~esr/writings/unix-koans/unix-nature.html>
Shell Programming!
<https://tldp.org/LDP/abs/html/why-shell.html>
-- --
Copyright © 20232024 Emma Tebibyte <emma@tebibyte.media> Copyright © 20232024 Emma Tebibyte <emma@tebibyte.media>

View File

@ -1,47 +0,0 @@
/*
* Copyright (c) 2024 DTB <trinity@trinity.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
use std::{
env::args,
process::ExitCode,
thread::sleep,
time::Duration
};
extern crate sysexits;
use sysexits::EX_USAGE;
fn usage(s: &str) -> ExitCode {
eprintln!("Usage: {} [seconds]", s);
ExitCode::from(EX_USAGE as u8)
}
fn main() -> ExitCode {
let argv = args().collect::<Vec<String>>();
if argv.len() == 2 {
if let Ok(s) = argv[1].parse::<u64>() {
sleep(Duration::from_secs(s));
ExitCode::SUCCESS
} else {
usage(&argv[0])
}
} else {
usage(&argv[0])
}
}