Ever burned a cake?
Go to file
2024-09-14 23:29:05 +00:00
source buildup to an improved improved bake 2024-09-14 23:29:05 +00:00
.gitignore bump v20240804 public domain; rewrite; new macros: @line, @name; ; added options list, select, removed expunge 2024-08-05 01:00:23 +00:00
bake.1 expunge and whatever 2024-08-31 23:05:09 +00:00
install.sh buildup to an improved improved bake 2024-09-14 23:29:05 +00:00
README expunge and whatever 2024-08-31 23:05:09 +00:00

--- README

A tool to run embedded scripts.

Bootstrap with ./shake bake.c
then compile further with ./bake,
install by running ./install.sh

---

bake [-chln] [-s <n>] <FILENAME> [ARGS...]; version 20240804

Bake is a simple tool meant to execute embedded shell commands within
any file.  It executes with /bin/sh the command after a "@BAKE " to
the end of the line (a UNIX newline: '\n').

It expands some macros,
	@NAME  - filename
	@SHORT - shortened filename
	@ARGS  - other arguments to the program
	@LINE  - line number at the selected @BAKE

All macros can be exempted by prefixing them with a backslash,
which'll be subtracted in the expansion. multi-line commands may be
done by a leading backslash, which are NOT subtracted.

It has five options, this message (-h, --help); prevents the execution
of the shell command (-n, --dry-run); disable color (-c, --color); list
(-l, --list) and select (-s<n>, --select <n>) which respectively lists
all @BAKE commands and select & run the Nth command.

It roots the shell execution in the directory of the given file.

Licensed under the public domain.

---

Shake

Bake was inspired by the Bash-based Shake utility (formerly eMake, he
liked my suggestion for a name).  It is included under authorization
of its creator.  The original version of Shake may be found at:
<http://bis64wqhh3louusbd45iyj76kmn4rzw5ysawyan5bkxwyzihj67c5lid.onion/anon/shake>

Bake includes a modified Shake, both after installation and as a
bootstrapper.  The modified version includes all features of Bake with
the exceptions of multi-line commands.  It is not a general
replacement for Bake.

Changelog

Bake was created on 2023/09/13, and is complete as of 2024/03/02.

24/08/04 - Updated version!

Bake is has been finished for a while but I thought the code could use
a checkup with GNU complexity, and this gave me a reason to rewrite
the important parts into a more sane manner. I had, at the same time,
been requested to extend Bake with the @LINE and list/select.

The changeset is large enough to possibly introduce bugs, and the last
version of Bake is, in my opinion, highly reliable. This newer version
needs to be tested a bit more to confirm full compatibility.

changes - Rewrite of the code; Removal of -x --expunge; Addition of
@LINE & @NAME, list, & select.

24/08/22 - Expunge

I decided to add expunge back in, after I went back to a project using
it, because I didn't feel like writing a regexp that would prune it.

It works the same. However it's less tested. Backslashes are reliable.
It doesn't eat characters around itself and returns a reliable string.
It does, however, cover the same space as the origin string.

Such brutal expressions as '@{\} @{\}@SHORT\}}' -> '} @{}@SHORT}'
successfully, with expunge_me correctly containing only that.

It's the same, as before. Sadly I didn't generalize the search and
replace code, that's what sed is for, and I didn't want to implement
finite automata for this simple update, so its implementation is primitive.

The implementation as a whole was meant for simplicity,
extensibility.  I, before getting it working, got a gorilla version
that removed contextless @{ } successfully, and a version that
contextually removed each @{ and it's respective } via expand.

Interesting note: Old Bake's executable is larger than new Bakes.
So, not only do we have constant memory, but I've saved space.

Note that the only real limitation is that, that we can't make a @BAKE
command the size of THIS file, or a a @BAKE command inlining all of
Bake. If you need such a feature, use the old version of Bake, or
simply extend this version. I may do such things, because the code
here is better.

This project really was never meant to be optimized, simply memory
confined. if it goes over, it'll SEGV and imply to the diligent user
to shorten his commands. If you just need enough in a simple fashion,
boosting:
#define BUFFER_SIZE (1 << 12) /* 4096 bytes; 4 KiB */
                 TO (1 << 20) /* 1048576 bytes; 1 MiB */

4 KiB is enough in 99% cases and covers 100% of usage that I am aware
of apart from the case of testing this exact faculty. If it does limit
you, you can use an external script or <Using Make!/Old Bake>

I'm not planning to update Shake with @STOP, @LINE, (-x, --expunge),
or any new bells and wistles.