From d14e7d54bb2beb162a659e0058f233cbdf78ad3d Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 10 May 2020 00:48:49 -0500 Subject: [PATCH] Update: add boostrap.sh stub and add readme.txt document --- build/scripts/bootstrap.sh | 9 ++++ documents/readme.txt | 39 +++++++++++++++ documents/todo.txt | 122 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 build/scripts/bootstrap.sh create mode 100644 documents/readme.txt create mode 100644 documents/todo.txt diff --git a/build/scripts/bootstrap.sh b/build/scripts/bootstrap.sh new file mode 100644 index 0000000..c6e32c8 --- /dev/null +++ b/build/scripts/bootstrap.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# license: lgpl-2.1 +# programmer: Kevin Day +# +# The purpose of this script is to provide an example on how to bootstrap this project using command line arguments. +# Unlike the other scripts, this is not inteded to be run as if it were a program. +# Instead this provides a functional example on what commands to perform to perform the bootstrap. + +# @todo diff --git a/documents/readme.txt b/documents/readme.txt new file mode 100644 index 0000000..63be49f --- /dev/null +++ b/documents/readme.txt @@ -0,0 +1,39 @@ +# fss-003 +# +# This readme file is inteded to provide a basic introduction to the Featureless Linux Library (FLL). +# + +Installation: + The FLL provides two installation types\: + - The bootstrap scripts. + - The Featureless Make program. + + The bootstrap scripts provide a way to build and compile the entire FLL project, without the Fake program. + This is done because the Fake program is actually part of the FLL project. + This solves the problem that if you don't already have Fake installed, then you cannot install Fake. + + The bootstrap scripts also provide a way to convert the source code of the FLL into packages for compiling and/or releasing. + The source code needs to be packaged before it can be compiled by either the bootstrap scripts or by the Fake program. + + The Fake program is not intended to be used as an installer, so the bootstrap scripts also provide an install script. + This install script is intended to be used only by the FLL. + Future versions of the FLL may include an install equivalent to the Fake program (and there may possibly be a package generation equivalent as well). + + The bootstrap scripts are as follows\: + - bootstrap.sh + - generate.sh + - install.sh + - package.sh + + The boostrap.sh script is intended to be a functional example of the command line arguments that should be used to generate, compile, and install the entire FLL. + + The generate.sh script is intended to take the FLL source code and compile it into appropriate binaries on the system, particularly when the Fake program is not installed. + This is analogous to the GNU Make program and the FLL Fake progam. + + The install.sh script is intended to install the FLL onto the system. + This script very loosely follows a small amount of the logic of configure scripts. + + The package.sh script is intended to convert the FLL source code from the source code repository structure into a packaged structure. + This should be used regadless of whether or not Fake or the generate.sh is used to build/compile the FLL (or any of its parts). + Of particular note is that there are multiple ways to package the FLL, such as each package as its own program, each package by level, or each package as a monolithic library. + diff --git a/documents/todo.txt b/documents/todo.txt new file mode 100644 index 0000000..eebce3d --- /dev/null +++ b/documents/todo.txt @@ -0,0 +1,122 @@ +This file contains FLL-wide todo notes. + +- The FSS processing code uses 64-bit data types for string lengths. + This puts a hard limit on the size of files supported. + Expand this to support larger ranges. + Possible options include a second 64-bit type, such that the size is 128-bit. + This could also be two 128-bit types, resulting in a range of 256-bit. + Ultimately research needs to be done on how other open-source projects handle this and a good examples will be filesystems, like the e2fsutils project or compression tools like tar and bz2. + +- Custom language support needs to be looked into to allow for the project to support multiple languages. + Given that this project focuses on KISS principles, the project is targeted towards programs for specific users. + In which case, the language can be hardcoded in as a single language. + Later versions after this first locale support will then consider supporting multiple languages not necessarily compiled in. + +- Implement support for new standard parameter "+e"/"++exit_code", which designates that the exit code is to be stored in the following environment variable. + This allows storing the full error code, which is not generally suppoted by bash. + +- Implement "%llu" defines so that when number is of a different type, the correct '%llu' equivalent can be used. + There needs to be an '%lllu' equivalent fo 128-byte. + A better approach might be to define a custom printf()/fprintf() replacement functions that handle a new set of parameters, including color codes. + Example: + f_print(context, "%f1 Something %nu %fr$fn", number_type); + Where context can be NULL to do nothing on color prints, %f1 could be some color, %fr is color reset, %fn is newline, and %nu is the number (unsigned) to print. + This is just a random example and does not reflect the codes to be used. + +- Create an fss simple content type (such that data->contents.array[at].start can be used instead of data->contents.array[at].array[0].start). + +- FSS needs to allow escaping of comments, "\# " would escape a comment, every backslash after that would be literal. + +- status_code and fss_status_code should be able to distinguish a number and a non-number string. + This will allow for auto-detecting whether or not something is a code to print the string or a string to print the code. + When this is done, then the --number parameter can be removed. + (Also add --help Note: pointing out that f, -w, and -e only apply to numeric codes and will result in 0 (false) for all strings.) + +- byte_dump needs to handle a pipe, checkout what the fss_basic_read and similar projects are doing. + +- investigate static executables in how valgrind reports errors. + +- consider updating byte_dump to support multiple --first and multiple parameters such all --first parameters are effectively added together. + What this does is allow skipping a file using counters greater than the max_int size. + The --last position, should therefore be rewritten to be relative to the --first position. + alternatively, implement a --skip parameter that skips past the max_int number of bytes X number of times (--skip X) would skip X*max_int bytes. + alternatively, implement support for specifying metric unit symbols (such as 100m for 100 megabytes). + +- implement the "time" functonality to represent a unit of time (unlike the normal system, this unit of time is say milliseconds in any given year that can continue on until max_int). + +- implement the "data" unit that using the metric system more appropriately, such that a data is a single byte. + 1 megadata in base 10 is (10^6)*8 = # of bits, and 1 megadata in base 16 s (16^6)*8 = # of bits. + +- console processing code needs to ignore unknown codes (namely, negative/positive numbes like: -3 or +4) (do not consider these parameters). + +- rename f_not_equal_to to f_equal_to_not (and do similar changes). + +- Research/Implement optimizaton by using pointers to reduce the complecity of processing multi-depth structures, such as fss_nest: + this: + nests->array[nests->used].array[index].array[0] = xxx; + could become: + *current = nests->array[nests->used].array[index].array; + current->array[0] = xxx; + The idea is that in the first case, thee is a lot more dereferencing needing to be performed whereas the second case, the massive dereferencing happens only the first time and then all subsequent calls have simpler dereferencing. + +- Add support for truncating whitespace before and after the name: + 1) When selecting by object name 'ex ample' could then match ' ex ample '. + 2) When printing the object name by itself, 'ex ample' would be printed instead of ' ex ample '. + 3) Use -T/--trim to remove whitespace both before and after for all FSS read programs (just like PHP trim). + 4) The leading whitespace on newlines that are to support such need not be trimmed automatically unless -T/--trim is passed. + +- Add support for printing line numbers, including when printing objects. + - Consider adding support for printing selection identifiers, such as the second object will have an id of 2, even if it is 100 lines down. + +- The leading and trailing whitespaces in names should be ignored when selecting and printing. + +- Update level-3 code to use the newly minted color2 function where appropriate. + +- byte_dump has a bug where offsets are not entirely selected correctly OR the output is wrong. + - byte_dump -tpw 24 /bin/bash -fl 0x4b 0x7d vs byte_dump -tpw 24 /bin/bash | head + - look at how the -fl results in 3 placeholders at start, this is incorrect. + - 0x48 is an interesting start point, but the start line should be more like the head variant for row 3. + + + + + * Programs to create: + * - fake: the project is compiled. + * - document: the documentation is built/processed/generated. + * - generate: special scripts are run for the purpose of generating any build-time code/scripts/files. + * - finish: the project is installed. + * - package: the project is turned into a package (tarballed, etc..). + * - coverage: the project has tests run against it. + + + +- consider redesigning console parameters to use three sets of arrays instead of one (short, long, and other). + - this would increase performance, but is it worth the complexity of the structure? + - it may simplify the design in other ways. + + +- F_STATUS_XX could be the error code for the program on exit, such that +s, ++status is a new standard parameter for specifying the variable name. + Variable name will be made uppercase and will be only alphabetic or underscore. + + +A new wiki-like syntax meant to be simpler: + - url:"http:// a b c/" + - code:" code goes here" + - quote:"This is a quote" + - var:"some_variable_name" + - emphasis:"This text is important" + + Escaping only neds to be done like these two cases: + 1) escaping main syntax: + - url\:"http:// a b c/" + - after the first '\:', every '\' is a literal '\'. + - url\\\\\:"http:// a b c/" would be read as: 'url\\\\:"http:// a b c/"'. + 2) escaping the quoted part + - quote:"This is a \"quote\"" + - There is no way to know the terminating '"' so all quotes inside must be escaped. + - after the first '\"', every '\' is a literal '\'. + - quote:"" would be read as: 'url\\\\:"http:// a b c/"'. + - Create this as a new FSS format, FSS-Text (FSS-000D). + +Go though all source code and ensure that, for all non-exceptional cases, any dynamic strings appends to existing buffers instead of overwriting them (based on buffer->used). +Then document this behavior. -- 1.8.3.1