]> Kevux Git Server - fll/log
fll
6 days agoProgress: Additional fixes based on unit tests.
Kevin Day [Fri, 16 Oct 2026 03:36:30 +0000 (22:36 -0500)]
Progress: Additional fixes based on unit tests.

8 days agoProgress: Fix problems exposed by unit tests.
Kevin Day [Wed, 14 Oct 2026 04:56:04 +0000 (23:56 -0500)]
Progress: Fix problems exposed by unit tests.

Assigning `range.start` to `newline_last` in basic list should only increment when `newline_last` is not the same value as `begin`.

The combining joiner skip code must also set the `line_stop` before continuing.

Add a comment to clarify some code that uses the found variable for a different purpose.

8 days agoBugfix: Only check for payload and set flag if a valid object is found.
Kevin Day [Wed, 14 Oct 2026 03:56:45 +0000 (22:56 -0500)]
Bugfix: Only check for payload and set flag if a valid object is found.

Remove an out of place check against a payload object in the payload content read.

9 days agoProgress: Handle basic list combining/joiner at start and fix unit test.
Kevin Day [Wed, 14 Oct 2026 02:38:51 +0000 (21:38 -0500)]
Progress: Handle basic list combining/joiner at start and fix unit test.

For lists, if the start of a line is a combining/joiner, then it must be treated as Content even if it would otherwise be a valid Object on that line.

The unit test actually has to handle when `F_okay_eos` or `F_okay_stop` is returned on content read.
The basic list doesn't know if the content is a valid object or not.
It can be assumed, but the function does not do this.

The caller must handle incrementing found.used when either `F_okay_eos` or `F_okay_stop` is returned.
Update the comment on this as well.

Properly verify that `newline_last` is in fact a new line by checking it against the `begin` position.
The basic list already has `begin`, but extended list has `begin` added to perform this check.

9 days agoProgress: Clean up and start fixing problems.
Kevin Day [Wed, 14 Oct 2026 01:40:18 +0000 (20:40 -0500)]
Progress: Clean up and start fixing problems.

Rename and restructure the fl_flags in basic list to be alphabetical.

Ensure the `___fl_flag_has_delimit_comment___` flag gets reset.
Ensure the `___fl_flag_do_escape___` flag gets reset.

Remove unnecessary assignment of `slash_count` to 0.

Remove unnecessary `> 0` check on while loop using `slash_count`.

Ensure `F_okay_eos` and `F_okay_stop` are correctly handled in tests.

11 days agoProgress: Fix some regressions and get tests working further.
Kevin Day [Sun, 11 Oct 2026 21:12:50 +0000 (16:12 -0500)]
Progress: Fix some regressions and get tests working further.

The `F_okay_eos` and `F_okay_stop` must actually be returned after all.
Add additional comments in code as well as the documentation comments on the function to clarify.

Switch to `fll_flags` from `found_data` for managing flags within a function.

12 days agoProgress: Clean ups and remove useless call.
Kevin Day [Sat, 10 Oct 2026 03:50:58 +0000 (22:50 -0500)]
Progress: Clean ups and remove useless call.

Rename `start` to `line_start` to be more consistent with other functions.
The `line_start` is also more unique.
This makes it easier to search.

The `f_fss_is_combining_joiner()` call after the space skip is not necessary.

Remove some extra, unnecessary, new lines.

13 days agoBugfix: The fl_print depends on f_console.
Kevin Day [Sat, 10 Oct 2026 03:34:44 +0000 (22:34 -0500)]
Bugfix: The fl_print depends on f_console.

13 days agoBugfix: The signal handlers are missing, preventing interrupts from working as expected.
Kevin Day [Sat, 10 Oct 2026 03:04:42 +0000 (22:04 -0500)]
Bugfix: The signal handlers are missing, preventing interrupts from working as expected.

The `fss_read` and `fss_write` have the signal handler call back on the wrong parameter resulting in interrupts being ignored.
The `iki_read` is completely missing the signal handler.

13 days agoCleanup: Remove the quotes from the last_command in the fss_read test file generator.
Kevin Day [Sat, 10 Oct 2026 03:01:29 +0000 (22:01 -0500)]
Cleanup: Remove the quotes from the last_command in the fss_read test file generator.

2 weeks agoUpdate: Add missing debug mode.
Kevin Day [Fri, 9 Oct 2026 01:35:04 +0000 (20:35 -0500)]
Update: Add missing debug mode.

2 weeks agoProgress: Add additional commented out statuses.
Kevin Day [Fri, 9 Oct 2026 00:36:10 +0000 (19:36 -0500)]
Progress: Add additional commented out statuses.

2 weeks agoProgress: Redesign the FSS identify functions.
Kevin Day [Fri, 9 Oct 2026 00:30:26 +0000 (19:30 -0500)]
Progress: Redesign the FSS identify functions.

Always reset the original used length on error.

Reduce the number of return statements.

Add a check for the combining joiner characters after the `#`.

Remove inaccurate comment about depending on `f_utf_is_combining()` from parse function.

Utilize the `f_state_t` locally to perform the necessary operations.
This is not exposed to the caller to prevent **API** and **ABI** breakage.
Future versions of **FLL** (0.9+) are expected to pass the state via the function parameter.

Switch to the new practice of using flags to manage special internal states.
This no longer guesses success based on `ids.used` being non-zero.
Using the internal flags allows accurate handling.

Add comments to functions that need `f_state_t` so that future version of **FLL** can properly handle.

2 weeks agoUpdate: Ensure f_fll_id_t.name is always NULL terminated.
Kevin Day [Fri, 9 Oct 2026 00:27:34 +0000 (19:27 -0500)]
Update: Ensure f_fll_id_t.name is always NULL terminated.

Set the normal length of `f_fll_id_name_length_d` to 63.
Then have the actual max length remain at 64 via newly added `f_fll_id_name_max_length_d`.

The `f_fll_id_name_length_d` is only used for comparisons now.
The `f_fll_id_name_max_length_d` is used on the structure.
This should prevent **API** and **ABI** breakage.

Add missing close parenthesis in documentation comment.

2 weeks agoUpdate: Add missing "medium" allocation size.
Kevin Day [Thu, 8 Oct 2026 01:26:45 +0000 (20:26 -0500)]
Update: Add missing "medium" allocation size.

This has been overlooked and is now added with a default value of 16.

2 weeks agoProgress: Get FSS embedded list content read test working.
Kevin Day [Tue, 6 Oct 2026 02:40:03 +0000 (21:40 -0500)]
Progress: Get FSS embedded list content read test working.

Include additional logic from 8d95e471986b3c6bddc323054af6da341e20246e where `F_okay_eos` and `F_okay_stop` are replaced with `F_content_found`.

The recently added function `private_f_fss_skip_past_space_previous()` is incorrectly checking against `previous` when it should be checking against `range.start` for comining characters.

2 weeks agoProgress: Work on embedded list read.
Kevin Day [Mon, 5 Oct 2026 02:18:31 +0000 (21:18 -0500)]
Progress: Work on embedded list read.

Base the combining test for embedded list content off of extended list content.

I completed the initial pass.
I need to now review the code, look for problems, and get the unit tests passing.

Fix a problem in the extended list test where I wasn't actually checking a potentially valid object opener.

2 weeks agoCleanup: Do not add single quote after printed date.
Kevin Day [Mon, 5 Oct 2026 02:03:11 +0000 (21:03 -0500)]
Cleanup: Do not add single quote after printed date.

2 weeks agoProgress: Various changes and fixes.
Kevin Day [Sun, 4 Oct 2026 00:51:17 +0000 (19:51 -0500)]
Progress: Various changes and fixes.

I decided that I needed to expand the `f_fss_skip_past_space()` into `f_fss_skip_past_space_previous()` to expose the `previous` position variable to the caller.
I must avoid breaking the **API**/**ABI**, so `f_fss_skip_past_space()` is not changed.
This should simplify the embedded read functions.

Fix documentation, adding "Must not be NULL." where it is missing.

The man pages will need to be re-generated more than likely.
Just copy the `f_fss_skip_past_space()` man page and update it manually for now.

Add missing `_di_f_utf_is_zero_width_` check on `private_f_utf_character_is_joiner()`.

2 weeks agoProgress: Update test file to be correct and remove some redundancy in the logic.
Kevin Day [Sat, 3 Oct 2026 18:37:22 +0000 (13:37 -0500)]
Progress: Update test file to be correct and remove some redundancy in the logic.

The matches for extended list combining test should all be a 2.

The `f_fss_is_combining_joiner()` already handles range and buffer checks and doesn't set error bit.
This means those checks can be removed.

2 weeks agoProgress: Continue working, focusing on extended list read.
Kevin Day [Sat, 3 Oct 2026 03:15:26 +0000 (22:15 -0500)]
Progress: Continue working, focusing on extended list read.

3 weeks agoProgress: Begin working on extended list, embedded list, and anything else.
Kevin Day [Fri, 2 Oct 2026 01:33:00 +0000 (20:33 -0500)]
Progress: Begin working on extended list, embedded list, and anything else.

3 weeks agoUpdate: Add future status codes, commented out.
Kevin Day [Fri, 2 Oct 2026 01:31:43 +0000 (20:31 -0500)]
Update: Add future status codes, commented out.

This will be potentially enabled (or removed) in 0.9.x and later.

3 weeks agoUpdate: Add space in printed error message 'for program'.
Kevin Day [Fri, 2 Oct 2026 00:06:39 +0000 (19:06 -0500)]
Update: Add space in printed error message 'for program'.

3 weeks agoMerge branch '0.8' into 0.8-combining
Kevin Day [Thu, 1 Oct 2026 03:49:37 +0000 (22:49 -0500)]
Merge branch '0.8' into 0.8-combining

3 weeks agoBugfix: Properly print program argument in fake_make_operate_process_return().
Kevin Day [Thu, 1 Oct 2026 03:46:31 +0000 (22:46 -0500)]
Bugfix: Properly print program argument in fake_make_operate_process_return().

The print should instead be `%Q` rather than `%s`.
Fix the color context as well.

3 weeks agoFeature: Print the time stamp, if possible, when the operation fails or is cancelled.
Kevin Day [Thu, 1 Oct 2026 02:54:12 +0000 (21:54 -0500)]
Feature: Print the time stamp, if possible, when the operation fails or is cancelled.

Provide additional useful information, such as time stamp.

There is currently no **FLL** wrapper for `strftime()`.

This does require bringing in a new dependency `f_time`.

This is all optional via the `_en_print_time_on_cancel_` and `_en_print_time_on_failure_` defines.
The modes `time` and `individual_time` are used to enable this.
The `time` mode is added by default.
The `f_time` is not a dependency if `time` or `individual_time` modes are not used.

Update the boot strap script to pass `time` and `individual_time` accordingly to just `fake`.

3 weeks agoBugfix: Properly print program argument in fake_make_operate_process_return().
Kevin Day [Thu, 1 Oct 2026 03:46:31 +0000 (22:46 -0500)]
Bugfix: Properly print program argument in fake_make_operate_process_return().

The print should instead be `%Q` rather than `%s`.
Fix the color context as well.

3 weeks agoFeature: Print the time stamp, if possible, when the operation fails or is cancelled.
Kevin Day [Thu, 1 Oct 2026 02:54:12 +0000 (21:54 -0500)]
Feature: Print the time stamp, if possible, when the operation fails or is cancelled.

Provide additional useful information, such as time stamp.

There is currently no **FLL** wrapper for `strftime()`.

This does require bringing in a new dependency `f_time`.

This is all optional via the `_en_print_time_on_cancel_` and `_en_print_time_on_failure_` defines.
The modes `time` and `individual_time` are used to enable this.
The `time` mode is added by default.
The `f_time` is not a dependency if `time` or `individual_time` modes are not used.

Update the boot strap script to pass `time` and `individual_time` accordingly to just `fake`.

3 weeks agoFeature: Print operation content on error.
Kevin Day [Thu, 1 Oct 2026 02:01:49 +0000 (21:01 -0500)]
Feature: Print operation content on error.

Provide additional details on error by showing the exact line (without expanding any **IKI** syntax).

This requires changes in some of the functions, which breaks **API** and **ABI**.
This only happens in the level 3, so programs.
The programs aren't as strictly required to be non-breaking changes.
(Although, non-breaking changes is highly encouraged.)
I decided the additional error information to be of more value than the breaking change aspect.

3 weeks agoFeature: Print operation content on error.
Kevin Day [Thu, 1 Oct 2026 02:01:49 +0000 (21:01 -0500)]
Feature: Print operation content on error.

Provide additional details on error by showing the exact line (without expanding any **IKI** syntax).

This requires changes in some of the functions, which breaks **API** and **ABI**.
This only happens in the level 3, so programs.
The programs aren't as strictly required to be non-breaking changes.
(Although, non-breaking changes is highly encouraged.)
I decided the additional error information to be of more value than the breaking change aspect.

4 weeks agoProgress: Remove unnecessary combining tests.
Kevin Day [Thu, 24 Sep 2026 23:41:56 +0000 (18:41 -0500)]
Progress: Remove unnecessary combining tests.

These tests are now handled using the same unit test.
The object reads and content reads directly depend on each other.
Rather than trying to ignore this, use both so that the states can be better tested and the unit test code is simpler to write.
This turns out to be better at catching problems.

4 weeks agoProgress: Finish basic list content read changes.
Kevin Day [Thu, 24 Sep 2026 01:49:20 +0000 (20:49 -0500)]
Progress: Finish basic list content read changes.

I discovered that copying the file with the combining character at the start of the line (U+0301) causes a space to be added.
This is problematic and cost me some time.

I have to then manually recreate the file and use my `utf8` program to regenerate the correct test data:
```sh
utf8 -cB U+0301 >> test.txt
```

Fix some issues with the basic list content read code.
The start should be set to `begin` and not `0`.

Finish adding the combining and joiner code.

Consistently apply the `newline_last`.

The content can be found but when it ends of EOS or stop, then it is returning the EOS or stop status codes (`F_okay_eos` and `F_okay_stop`) without setting the found structure.
The code calling this should just need to check for `F_content_found`, so change the behavior to do this and set the found position when returning EOS or stop at the end.
The start of the function should return EOS or stop as usual.
I suspect this problem is likely also in the extended read and other such code.

Consistently break out of the loop so the exit handling code gets properly called before returning on error.

4 weeks agoProgress: Work on basic list combining tests, changing test strategy.
Kevin Day [Sat, 19 Sep 2026 22:07:29 +0000 (17:07 -0500)]
Progress: Work on basic list combining tests, changing test strategy.

The previous strategies that I used were only doing a file of only **Objects** and files of only **Contents**.
This worked well for simple things.
This ideally better allowed for more isolated unit tests.

However, it is easier to write and follow tests of a complete **FSS** file.
This means doing both the **Object** and **Content** tests in the same unit test (despite being separate functions).
This provides more accurate checks, better testing, and as mentioned easier to write and follow test files.

5 weeks agoProgress: Make some of the unit tests messages more consistent.
Kevin Day [Tue, 15 Sep 2026 01:06:28 +0000 (20:06 -0500)]
Progress: Make some of the unit tests messages more consistent.

5 weeks agoProgress: Set up the initial structure for the remaining read tests for combining...
Kevin Day [Sun, 13 Sep 2026 01:43:59 +0000 (20:43 -0500)]
Progress: Set up the initial structure for the remaining read tests for combining characters.

It seems that editors make it difficult to add and manipulate combining characters.
It is possible my test files have lost combining characters without my awareness.
I might have to revisit these later on.

For now, just copy what is there to simplify the work being done.

I used commands like the following to help generate some combining characters:

```sh
echo "first valid.$(utf8 -cB U+0301)" >> basic-combining_read.txt

echo -e "  not a valid list{$(utf8 -cB U+0301)\n}" >> extended_list-combining_read.txt
```

5 weeks agoProgress: Minor tweaks in basic read and properly deallocate memory in test.
Kevin Day [Sat, 12 Sep 2026 23:59:36 +0000 (18:59 -0500)]
Progress: Minor tweaks in basic read and properly deallocate memory in test.

5 weeks agoProgress: Add extended content and object combining tests.
Kevin Day [Sat, 12 Sep 2026 22:00:42 +0000 (17:00 -0500)]
Progress: Add extended content and object combining tests.

6 weeks agoMerge branch '0.8' into 0.8-combining
Kevin Day [Mon, 7 Sep 2026 16:40:56 +0000 (11:40 -0500)]
Merge branch '0.8' into 0.8-combining

6 weeks agoUpdate: License descriptions to use the new formats and wrapped license structure.
Kevin Day [Mon, 7 Sep 2026 15:48:53 +0000 (10:48 -0500)]
Update: License descriptions to use the new formats and wrapped license structure.

6 weeks agoUpdate: Use word characters in license file name examples in the license.
Kevin Day [Mon, 7 Sep 2026 15:40:22 +0000 (10:40 -0500)]
Update: Use word characters in license file name examples in the license.

6 weeks agoUpdate: Rename license files to use word characters and avoid dashes.
Kevin Day [Mon, 7 Sep 2026 15:34:46 +0000 (10:34 -0500)]
Update: Rename license files to use word characters and avoid dashes.

This makes the licenses file names friendlier and easier to work with.
This also better allows for combining licenses where a word character, such as a minus sign `-`, can be used to designate the different parts.

6 weeks agoUpdate: Add new license Clarified 1.0 (or later).
Kevin Day [Mon, 7 Sep 2026 13:34:36 +0000 (08:34 -0500)]
Update: Add new license Clarified 1.0 (or later).

This provides a way orf adding the same protections done to the OSL1.1+ license.
This acts as a wrapping license to others so that these conditions may be provided without directly altern a wrapped license.

This essentially requires licensees to agree to terminology and applications (not as in software applications but as in "to apply") for their use to be valid and lawful.
But only within the scope of the works.

This is official as of Sep 7, 2026 (UTC).
The dates are really what designate the official date in addition to the version.
I need to make a separate license repository and make official tagged releases for each license to provide a more proper way of clearly designating official license releases.
For now, the ultimate way of doing this will need to be a public announcement on the website.

6 weeks agoUpdate: Open Standard License 1.1.
Kevin Day [Mon, 7 Sep 2026 13:31:33 +0000 (08:31 -0500)]
Update: Open Standard License 1.1.

This is an offiical update on Sep 7, 2026 (UTC) that is intended to provide more clarifications and clean it up.

I worked an another license that applies the same changes as done in the OSL 1.1.
This helped me notice more things that might need further clarification and details.

The following are some of the changes:

- Explicitly add Licenser term and use that.
- Make each top-level section using 3-letters, such as `PRL` instead of `01` to make referencing sections more distinct (like `[PRL.07.b]`).
- Further clarifiy details of "license is irrevocable unless...".
  - This must always include the "or greater" or other similar changes so add (a) and (b) to describe this.
- Follow new line spacing practices (two lines between each section and one line after each section title).
- Break apart items with long sentences into sub-items.
- Move the "When at any point in time under any ..." item underneath the item before it and update the numbering.
- Add missing parenthesis.
- Clarify the now `[PRL.16]` by:
  - Breaking part of the long sentence into more sub-items.
  - Further clarify by adding "Containing is not limited to..." sub-item.
- Clarify the now `[PRL.17]` by:
  - Adding " Machines, LCG, software, etc..." sub-item.
- Allow all of the liones to be referenced by prepending item numbers like `01)`.
  - Use the same numbering system consistently.

7 weeks agoProgress: Switch to using fl_flag defines and flag_fl variable.
Kevin Day [Mon, 31 Aug 2026 01:53:55 +0000 (20:53 -0500)]
Progress: Switch to using fl_flag defines and flag_fl variable.

This will be easier to read without exposing these defines outside the sources.

7 weeks agoProgress: Do some structural clean ups.
Kevin Day [Mon, 31 Aug 2026 00:06:55 +0000 (19:06 -0500)]
Progress: Do some structural clean ups.

The `f_fss_seek_to_eol()` returns `F_okay_eol`.
Check that instead of doing a buffer string character comparison where possible.

Improve some condition block logic regarding breaks, returns, and continues.

Change some of the status error checking to reduce return statements.
I have probably flip flopped on this problem numerous times.
Looking into how compilers and CPUs like to optimize things, I believe that reducing the return statements will be of benefit vs the probably cleaner immediate returns.
This can only be done when it is clear and when the status code being returned (or any state) is identical between calls.

8 weeks agoProgress: Beginning basic list read and do some other tweaks.
Kevin Day [Fri, 28 Aug 2026 01:12:34 +0000 (20:12 -0500)]
Progress: Beginning basic list read and do some other tweaks.

Make some consistency tweaks and clean ups in basic read as well.

This has only been tested to confirm/deny that existing tests work.
There still needs to be additional tests added for the combining and joiner characters.

8 weeks agoProgress: Update unit tests and stand alone builds.
Kevin Day [Mon, 24 Aug 2026 02:18:50 +0000 (21:18 -0500)]
Progress: Update unit tests and stand alone builds.

The `f_fss_skip_past_combining()` is replaced with `f_fss_skip_past_combining_joiner()`.

2 months agoUpdate: Finish review and finalize Open Standard License to 1.1.
Kevin Day [Thu, 20 Aug 2026 02:03:34 +0000 (21:03 -0500)]
Update: Finish review and finalize Open Standard License to 1.1.

Reviewed the license and now make it official as of August 20, 2026 (UTC).

2 months agoProgress: Wrap up the basic object read changes.
Kevin Day [Thu, 20 Aug 2026 02:04:13 +0000 (21:04 -0500)]
Progress: Wrap up the basic object read changes.

Fix a mistake where an invalid quote is being incorrectly designated as valid.

Fix mistake in `matches/basic-combining_read.txt` where content should not be found so value is 1 rather than 2.

The start of a combining or joining character in `objects/basic-combining_read.txt` is correctly not valid UTF-8 line starter.
Add a preceding space to make it valid and ensure that the test passes.
(This test happened to be correctly failing due to not having a non-combinig/non-joiner as the first character.)

Add additional status information to some tests.

Fix problem inn tests where its failing due to `getline()` reaching the end of the line.
If the EOL is reached, then the loop must end.

2 months agoUpdate: Finish review and finalize Open Standard License to 1.1.
Kevin Day [Thu, 20 Aug 2026 02:03:34 +0000 (21:03 -0500)]
Update: Finish review and finalize Open Standard License to 1.1.

Reviewed the license and now make it official as of August 20, 2026 (UTC).

2 months agoProgress: Latest changes.
Kevin Day [Wed, 5 Aug 2026 02:58:58 +0000 (21:58 -0500)]
Progress: Latest changes.

Take care of all of the to do's for the `private_fl_fss_basic_or_extended_read()`.

I need to not verify the logic and compare against the unit tests.

The other FSS functions are not yet updated/fixed.

2 months agoMerge branch '0.8' into 0.8-combining
Kevin Day [Tue, 28 Jul 2026 01:54:35 +0000 (20:54 -0500)]
Merge branch '0.8' into 0.8-combining

2 months agoUpdate: Change language in Open Standard License to 1.1 or later.
Kevin Day [Tue, 28 Jul 2026 01:46:43 +0000 (20:46 -0500)]
Update: Change language in Open Standard License to 1.1 or later.

I did a review pass and attempted to improve the language and wording.

Instead of using "combined works", use "modified works".
That seems to make more sense as "combined works" makes less sense for a standard / specification.

Break down the details a bit more.

I will likely need to do further review later on before I officially release this license update.

2 months agoMerge branch '0.8' into 0.8-combining
Kevin Day [Tue, 28 Jul 2026 00:43:15 +0000 (19:43 -0500)]
Merge branch '0.8' into 0.8-combining

2 months agoUpdate: Open Standard License to 1.1 or later.
Kevin Day [Tue, 28 Jul 2026 00:38:46 +0000 (19:38 -0500)]
Update: Open Standard License to 1.1 or later.

Address problems, misunderstandings, misrepresentations, or anything else caused by how society appears to have spontaneously forgotten how computers work and what "AI" is.
Provide the LCG terminology to help better clarify things so that "AI" can be more properly used.

2 months agoProgress: Latest changes.
Kevin Day [Mon, 27 Jul 2026 23:57:46 +0000 (18:57 -0500)]
Progress: Latest changes.

3 months agoProgress: Latest changes.
Kevin Day [Fri, 3 Jul 2026 03:59:56 +0000 (22:59 -0500)]
Progress: Latest changes.

The code has been sitting recently, so commit the changes as is.
I need to come back and resume the work and then complete everything still.

4 months agoProgress: Various updates.
Kevin Day [Sat, 20 Jun 2026 22:08:46 +0000 (17:08 -0500)]
Progress: Various updates.

The main FSS specification with clarifications.

I'm generally in favor of performing calculations once.
However, I decided to try reducing the memory allocation and deallocation cost of variables by applying the simple math operations each time for some functions where this is performed only once.
This has a cost of some code readability, however.
The affected functions are single purpose and simple making the cost rather moot.

Begin changing the logic to add a new feature to solve a problem with insufficient compliance to the Unicode standards.
The joiners need to be handled.
The combining combines into what is effectively a graph character.
Treat the joiner characters the same, even though one can join two non-printing characters.
New lines must ignore joiners (I have seen this as the standard behavior by a lot of software and decided to go with that to avoid problems).

The is_combining, is_joiner, and is_combining_joiner are new features added to help solve these problems.
A lot of the logic is incomplete as of this commit.

I didn't want to add a cost of auto-checking every character after the first.
This means that I cannot have the is_space, is_graph, or other such functions automnate this.
Therefore, the logic must be changed to check for these spaces.
The code will become more complex but this will not incur as much of a performance cost compared to checking each character 2x+ times.
I also decided not to continue on after the first combining and joiner characters.
The combining already makes something a graph.
The joiner requires more searched and is highly subjective.
Therefore, make life easier and just treat all joiners as graph-making for the purposes of processing and syntax.

4 months agoProgress: Add is joiner UTF-8 function.
Kevin Day [Thu, 11 Jun 2026 02:17:34 +0000 (21:17 -0500)]
Progress: Add is joiner UTF-8 function.

I figured this would eventually happen given my relative inexperience with UTF-8.
This adds a new feature via additional functions for explicitly checking for joiner characters.
These joiner characters are not the same as combining characters.

The is alphabetic tests need to also handle joiner characters and treat them as not alphabetic.

This requires various build settings, like stand alone builds, to be updated with one of the following source files added:
```
  fll/level_0/private-utf_joiner.c
  level_0/private-utf_joiner.c
  private-utf_joiner.c
```

This requires various `config.h` files to now support handling of:
```
  #define _di_f_utf_character_is_joiner_
  #define _di_f_utf_is_joiner_
```

I had the option of either adding this and not exposing it through the **API** or exposing it through the **API**.
Exposing it through the **API** causes this to be a new feature (which I really want to avoid in general).
However, if the code is going to be added (because it is necessary and fixes some bugs), then it makes more sense to just expose it through the **API**.

This also fixes incidental missing `_di*_` in some cases.

4 months agoProgress: Begin fixing combining logic.
Kevin Day [Mon, 1 Jun 2026 01:36:43 +0000 (20:36 -0500)]
Progress: Begin fixing combining logic.

Have to add is_combining functions to detect combining for the purpose of FSS processing.

Skip past initial place holders in the skip functions.

The initial combining returns `F_complete_not_utf_start` only for combining at the start.
This should be then handled as a combining.

Begin adding the unit tests.
These should fail because the functionality that they are testing is not implemented.

What needs to be done next is to have all FSS processing code look past the special characters (except new lines).
Check for combining characters.

4 months agoUpdate: Further clarify FSS specification in regards to Unicode combining characters.
Kevin Day [Sun, 31 May 2026 15:36:39 +0000 (10:36 -0500)]
Update: Further clarify FSS specification in regards to Unicode combining characters.

I added combining characters to a new line (which is after the new line character as per **Unicode** rules).
I discovered that the tools I tested do not combine into the new line.
Instead, they present an invalid/incomplete/partial character on the next line.

This seems incorrect to me.
I want the **FSS** to combine onto the new line and not treat it as a new line for the purposes of termination.
Update the standard to favor the current behavior that I have observed.

I am going to do further research to try and understand how **Unicode** defines how this should happen.
I will follow this up with updates as needed.

4 months agoUpdate: Invert debug mode parameter in boot strap example script.
Kevin Day [Sun, 31 May 2026 15:08:22 +0000 (10:08 -0500)]
Update: Invert debug mode parameter in boot strap example script.

I generally want debugging when using the example boot strap script.
Make the default behavior to have debug mode enabled.

The debug parameter to the boot strap example script now disables the debug mode.

4 months agoUpdate: Handle error printing of F_complete_not_utf_start.
Kevin Day [Sun, 31 May 2026 14:59:30 +0000 (09:59 -0500)]
Update: Handle error printing of F_complete_not_utf_start.

4 months agoUpdate: To Unicode 16.
Kevin Day [Fri, 29 May 2026 00:45:58 +0000 (19:45 -0500)]
Update: To Unicode 16.

This gets the code base up to date with **Unicode 16**.
I intend to follow this up with additional changes to update to **Unicode 17**.

I discovered that I accidentally had the unit tests disabled for the **Unicode** is_* functions.
Re-enable the tests and get things working.
Also add a "is_control_picture" unit tests.
I added additional logic that prints out useful information for when many of the **Unicode** related unit tests fail.
I intend to slowly add more such logic to all of me units tests over time.

I discovered that the combining characters might have marks in them that do not belong as punctuation.
I will have to follow this up with a bug fix to address all of these cases.
This will take some time.
I did not correct the unit tests within this commit to avoid doing a lot of that work right now.

I believe I also need to add is_mark functions to properly handle this and test for this.
This is will be a new feature to fix a bug.
I should also back port these changes to the 0.6.x series.

I also made some structural changes by adding some more if conditionals in situations where it seemed like there were too many checks in a given block set.

4 months agoUpdate: Build scripts to better handle white spaces.
Kevin Day [Thu, 28 May 2026 22:32:06 +0000 (17:32 -0500)]
Update: Build scripts to better handle white spaces.

The `"${@}"` will expand spaces correctly into each parameter.
The double quotes are requires as `${@}` will not work as expected.

4 months agoUpdate: The generate unicode script to accept input file parameter.
Kevin Day [Thu, 28 May 2026 22:31:38 +0000 (17:31 -0500)]
Update: The generate unicode script to accept input file parameter.

5 months agoUpdate: Remove unused `slash_count` variable.
Kevin Day [Thu, 14 May 2026 23:24:57 +0000 (18:24 -0500)]
Update: Remove unused `slash_count` variable.

The `slash_count` variable is not used for anything anymore in this specific function.

5 months agoUpdate: First copyright year is actually 2006.
Kevin Day [Mon, 11 May 2026 02:00:41 +0000 (21:00 -0500)]
Update: First copyright year is actually 2006.

I discovered that my Turtle Kevux Installation Scripts actually has a copyright of 2006 and not 2007.
This means the official first year is actually 2006 and not 2007.

The old commit where I inferred the original dat of 2007 is: e2c7d76e9ed717d18a30a3a0d6a8d3b2e2522f8f.

5 months agoUpdate: Utilize -pipe in default build flags.
Kevin Day [Sun, 10 May 2026 15:33:30 +0000 (10:33 -0500)]
Update: Utilize -pipe in default build flags.

This prevents writing to a file system directory, like `/tmp`.

Writing to `/tmp` clobbers up that directory, wastes disk I/O, and reduces the life span of drives (like solid state hard drives).
Avoid all of this by utilizing the compiler option `-pipe`.

5 months agoUpdate: Next micro version (0.8.2).
Kevin Day [Thu, 30 Apr 2026 05:46:31 +0000 (00:46 -0500)]
Update: Next micro version (0.8.2).

The following are the commands that I ran to make this change:
  # find build/ level_? specifications/ documents/ licenses/ -type f -exec sed -i -e 's|0\.8\.1|0.8.2|g' -e 's|^version_micro 0|version_micro 1|g' '{}' ';'
  # find level_3/ -name *.h -exec sed -i -e 's|_program_version_micro_s F_string_ascii_1_s|_program_version_micro_s F_string_ascii_2_s|g' -e 's|_program_version_micro_s_length F_string_ascii_1_s_length|_program_version_micro_s_length F_string_ascii_2_s_length|g' '{}' ';'
  # sed -i -e 's|version_micro 1|version_micro 2|g' build/*/settings* build/stand_alone/*.settings* level_*/*/data/build/*settings*

5 months agoBugfix: Incorrect micro version in stand alone build settings. 0.8.1
Kevin Day [Thu, 30 Apr 2026 05:09:24 +0000 (00:09 -0500)]
Bugfix: Incorrect micro version in stand alone build settings.

5 months agoBugfix: The bootstrap.sh script isn't loading build_libraries setting properly.
Kevin Day [Thu, 30 Apr 2026 04:23:39 +0000 (23:23 -0500)]
Bugfix: The bootstrap.sh script isn't loading build_libraries setting properly.

The variable for the `build_libraries` setting is just `libraries`.
The code is incorrectly saving that setting in `build_libraries` variable.
Make the code save values in `libraries` variable instead of `build_variables` variable.

Add an additional conditional logic check for when setting a variable "has" key to `no`.
If the value already exists and has a `yes` assigned, then do not set it to `no`!

Do some code cleanup up:
  - Move all of the keys into a single location for the loops (one location for single values and one location for multi values).
    - Make these read only local variables.
  - Add additional safety checks for when `${key}` might be NULL.

6 months agoBugfix: Incomplete and invalid bootstrap.sh settings.
Kevin Day [Thu, 23 Apr 2026 03:14:22 +0000 (22:14 -0500)]
Bugfix: Incomplete and invalid bootstrap.sh settings.

The build settings in `bootstrap.sh` is incomplete or invalid for various reasons.

Some of the build settings are now consistently present in the Multi value Objects array loop.

The `build_sources_script-mode` is now being loaded.

Many of the build settings are now properly being populated using the correct variable or settings names.

The `bootstrap_id()` is now being called where the `bootstrap_id()` call has been missing entirely.

Remove build settings that do not actually exist in the standard (like `defines_object_program`).

The `has-flags_library-mode` is now being properly used.

6 months agoBugfix: The bootstrap script is overwriting existing multi-valued settings.
Kevin Day [Wed, 22 Apr 2026 03:47:00 +0000 (22:47 -0500)]
Bugfix: The bootstrap script is overwriting existing multi-valued settings.

This happens when there are multiple modes specifying the same value.
The multi-valued settings must have the value appended and not overwritten or removed.

Specifically, the setting is designated as not populated when a mode specifies a setting and then is followed by another mode that does not specify this setting.

Resolve this by adding checks if the setting is already designated as specified.
If the settings is not specified, then and only then declare it as unspecified.

6 months agoBugfix: The bootstrap script improperly loads settings resulting in incorrectly faile...
Kevin Day [Wed, 22 Apr 2026 03:20:18 +0000 (22:20 -0500)]
Bugfix: The bootstrap script improperly loads settings resulting in incorrectly failed builds.

I suspect this situation happened due to various changes over time without a thorough review of everything that needs to be changed.

Reserve the variable index position of 0 to designate not found.
Update all checks to then check for `key` to not be 0 after calling `bootstrap_id()`.
This fixes problems where the position after the last valid index might get set and used as a value.
When the position after the last valid index is read, it could read these values even if it should report not found.

The index position checks are updated to more properly check and assign the index using the appropraite `has-*` and `has-*-mode` vs the normal value `*` and `*-mode`, respectively.

Update all index position checks to check the `has-*` and `has-*-mode` accordingly.
This change fixes the primary problem that is causing the build to fail due to incorrect variable loading.
The `has-*` and `has-*-mode` checks checks for existence.
Then and only then should the actual respective values be used.
In particular, the `*-mode` settings should only be assigned if the respective `has-*-mode` is set to `yes`.

This bug is observed in my **TKIS** script development where the `path_headers` is being treated as an empty string despite being designated as `fll`.
The **Featureless Make** program compiles properly but not this `bootstrap.sh` script.
The **TKIS** scripts are expected to be run on a system without the **FLL** project at all.
I have not observed this problem because I have been using the **Featureless Make** directly for years now.
The packaging and unit tests scripts provided by this project are coincidentally not triggering any obvious errors with the improper behavior.

If the existing scripts were working before then these changes might cause problems with those scripts.
I will follow this up and investigate and fix these issues.
Running the **Featureless Make** on these works and so these changes likely expose existing problems rather than causes regressions.

I would love to find a way to reduce the repetitive assignments to variables in a safe/sane manner.
This would require more research on my part, if it is even possible.
I don't plan on doing such research any time soon and so I am continuing to consider the bootstrap script design as tolerable.

Additional Changes:
  - Simplify logic in for loops for `bootstrap_id()` by combining all of the passes into a single pass (The actual index values are irrelevant and so restructuring/reordering caused by this is not a problem).
  - Ensure the key is an integer in all cases.
  - Remove unnecessary `key` variable assignments.
  - Remove some redundant assignments.

6 months agoBugfix: The fss_embedded_list_read and fss_embedded_list_write are missing from stand...
Kevin Day [Tue, 21 Apr 2026 02:18:51 +0000 (21:18 -0500)]
Bugfix: The fss_embedded_list_read and fss_embedded_list_write are missing from stand alone builds.

I apparently overlooked and completely forgot to add this.

Add the build settings and the `config.h` settings for both the read and write programs for FSS Embedded List.

6 months agoBugfix: Add missing define to private_fl_fss_list_write_object_trim().
Kevin Day [Tue, 21 Apr 2026 02:17:54 +0000 (21:17 -0500)]
Bugfix: Add missing define to private_fl_fss_list_write_object_trim().

The `fl_fss_embedded_list_object_write()` depends on `private_fl_fss_list_write_object_trim()`.

6 months agoBugfix: Out of place build settings files in stand alone builds.
Kevin Day [Tue, 21 Apr 2026 02:05:07 +0000 (21:05 -0500)]
Bugfix: Out of place build settings files in stand alone builds.

The regular files are being included in the stand alone builds.
This is confusing and can lead to build failures due to selecting invalid build settings files.

Remove the build settings files that must not exist in stand alone builds.

7 months agoBugfix: Invalid seeked value on failure in f_file_seek().
Kevin Day [Thu, 5 Mar 2026 02:57:27 +0000 (20:57 -0600)]
Bugfix: Invalid seeked value on failure in f_file_seek().

The previous commit 6dc28ff5673c86d8d6042b47538c2f66e7726717 left out the `seeked` NULL check before assigning a value.

7 months agoBugfix: Invalid seeked value on failure in f_file_seek().
Kevin Day [Wed, 4 Mar 2026 04:41:14 +0000 (22:41 -0600)]
Bugfix: Invalid seeked value on failure in f_file_seek().

The `lseek()` can return a negative value.

Use a local variable to get the `lseek()` value.
This then allows for the `seeked` to be NULL.

Change the `seeked` parameter to be optional and when set to NULL then it is not assigned.
This neither breaks API nor ABI.

The `seeked` value is only assigned when the result is `-1`.
The POSIX standard is inconsistent about negative return values.
In the case of `lseek()`, only `-1` is technically an error.

7 months agoBugfix: Missing quote in error message for invalid parameter for file error.
Kevin Day [Wed, 4 Mar 2026 03:51:52 +0000 (21:51 -0600)]
Bugfix: Missing quote in error message for invalid parameter for file error.

8 months agoBugfix: Handle more cases of IPv6 addresses not being properly identified.
Kevin Day [Fri, 30 Jan 2026 05:44:00 +0000 (23:44 -0600)]
Bugfix: Handle more cases of IPv6 addresses not being properly identified.

I learned that `::` and `::/24` addresses are valid.

Add a few more test cases.

8 months agoCleanup: Replace literal characters with defined string characters in f_network_is_ip...
Kevin Day [Thu, 29 Jan 2026 02:39:42 +0000 (20:39 -0600)]
Cleanup: Replace literal characters with defined string characters in f_network_is_ip_address().

Literal characters like `'a'` should not be used.
Instead, things like `f_string_ascii_a_s.string[0]`.

8 months agoBugfix: Invalid IPv6 addressdetection and improve IPv4 address detection in f_network...
Kevin Day [Wed, 28 Jan 2026 05:44:03 +0000 (23:44 -0600)]
Bugfix: Invalid IPv6 addressdetection and improve IPv4 address detection in f_network_is_ip_address().

The `f_network_is_ip_address()` is not properly identifying bracketed IPv6 addresses.

Digits to the left of double colons `::` should be supported.
The forward slash `/` should be allowed after double colons `::`.
Ending in a double colon `::` is in fact valid in situations, such as with `::/0`.

Make the IPv6 logic easier to follow by adding additional comments.
Also rename `count` to `digits` to further make the code logic more understandable.

Improve IPv4 detection by checking if the number is between 0 and 255, inclusively.

Add more unit tests to better catch the newly identified and now resolved problems.
Update unit tests to use the newer `macro_f_string_static_t_initialize_2()` instead of `macro_f_string_static_t_initialize_1()`.
Add additional comments to help identify rows.

8 months agoBugfix: Incorrect documentation for f_network_from_ip_string().
Kevin Day [Tue, 27 Jan 2026 02:49:06 +0000 (20:49 -0600)]
Bugfix: Incorrect documentation for f_network_from_ip_string().

The `f_network_from_ip_string()` is incorrectly referencing IPv6 bracket notation.

Make it clear that ports are not supported.

Make it clear that IPv6 bracket notation is not supported.

Clean up the `f_network_from_ip_string()`, removing unnecessary nesting.

9 months agoBugfix: Do not include private header when installing.
Kevin Day [Thu, 22 Jan 2026 03:20:12 +0000 (21:20 -0600)]
Bugfix: Do not include private header when installing.

The `private-console.h` must not be added to the `build_sources_headers` setting.
Adding it to the `build_sources_headers` sets it up to be installed.

9 months agoCleanup: The help for -D should be printing +D instead of +D in the parenthetical...
Kevin Day [Tue, 13 Jan 2026 02:14:40 +0000 (20:14 -0600)]
Cleanup: The help for -D should be printing +D instead of +D in the parenthetical comment.

9 months agoFeature: Add support for debug mode in test script.
Kevin Day [Tue, 13 Jan 2026 02:11:04 +0000 (20:11 -0600)]
Feature: Add support for debug mode in test script.

The test script should also support the debug mode.
This is not to be confused with running the build process in debug mode itself (the `+D` / `++debug` setting).

9 months agoBugfix: Static builds with '../' relative paths for objects do not build correctly.
Kevin Day [Mon, 12 Jan 2026 02:47:31 +0000 (20:47 -0600)]
Bugfix: Static builds with '../' relative paths for objects do not build correctly.

Add new function that handles converting the relative path with '../' with one that has no '../'.
Use this to build the object paths by adding the full relative directory path for the build files.

Note that this could be a problem with possible directory structure conflicts in some situations.

Utilize a new cache `cache_relative` for the processing of the relative path.

Add additional debug reporting to improve the error reporting details with the programs, like `ar`, fail.

Add note how future FLL versions (0.9 and later) should have something like `fl_path_canonical()`.

I need to also follow this commit up with an investigation to see if any of these `../` can get outside the project root.
There is a need for a project root parameter for situations where different paths are specified, such as specifying `--sources`.
Alternatively, I might have to restrict all `../` to the sources directory and then move all of my `tests/` directory files within the `sources/` directoreis for all projects.

This also gives me reason to consider adding IKI support to enhance the build settings.
I am on the fence on actually doing this or not.

9 months agoBugfix: The fl_path_canonical() is not consistently resetting canonical.used.
Kevin Day [Sun, 11 Jan 2026 22:26:48 +0000 (16:26 -0600)]
Bugfix: The fl_path_canonical() is not consistently resetting canonical.used.

The `fl_path_canonical()` is replacing the `canonical` variable rather than appending to it.
However, when `path.used` is 0, then the current path is appended without resetting `canonical.used` to 0.

Ensure that `canonical.used` is always set to 0 to enforce replacement.

Add explicit documentation comment making it clear that this function performs a replacement rather than an append.

9 months agoBugfix: Actually install man files.
Kevin Day [Sun, 11 Jan 2026 02:26:32 +0000 (20:26 -0600)]
Bugfix: Actually install man files.

I setup the man files to be used along with the `0.8.0` release.
I completely forgot to actual add the configuration to move the man files into the proper location so that they can be installed.

Add the appropriate build settings that designate the documentation file to be installed.

9 months agoFeature: Add support for debug mode in bootstrap example script.
Kevin Day [Sat, 10 Jan 2026 22:46:14 +0000 (16:46 -0600)]
Feature: Add support for debug mode in bootstrap example script.

I use this script a lot for convenience.
Add support for enabling debug mode when building via the `-D` parameter.

9 months agoBugfix: Non-debug mode error printing prints incorrectly.
Kevin Day [Sat, 10 Jan 2026 22:44:03 +0000 (16:44 -0600)]
Bugfix: Non-debug mode error printing prints incorrectly.

A character is incorrectly printed when debug mode is disabled.

If the first character in the debug string is NULL, then do not print the wrapping parenthesis.

9 months agoUpdate: Next micro version (0.8.1).
Kevin Day [Fri, 9 Jan 2026 01:11:49 +0000 (19:11 -0600)]
Update: Next micro version (0.8.1).

The following are the commands that I ran to make this change:
  # find build/ level_? specifications/ documents/ licenses/ -type f -exec sed -i -e 's|0\.8\.0|0.8.1|g' -e 's|^version_micro 0|version_micro 1|g' '{}' ';'
  # find level_3/ -name *.h -exec sed -i -e 's|_program_version_micro_s F_string_ascii_0_s|_program_version_micro_s F_string_ascii_1_s|g' -e 's|_program_version_micro_s_length F_string_ascii_0_s_length|_program_version_micro_s_length F_string_ascii_1_s_length|g' '{}' ';'
  # sed -i -e 's|version_micro 0|version_micro 1|g' build/*/settings build/stand_alone/*.settings level_*/*/data/build/*settings*

9 months agoUpdate: Use 32-bit for f_number_unsigned_t on i386, i486, i586, and i686. 0.8.0
Kevin Day [Wed, 24 Dec 2025 19:59:15 +0000 (13:59 -0600)]
Update: Use 32-bit for f_number_unsigned_t on i386, i486, i586, and i686.

This only checks the standard GNU architecture macros.
Other systems that use different means of communication architecture shall need changes.

9 months agoUpdate: The tags file.
Kevin Day [Wed, 24 Dec 2025 14:23:48 +0000 (08:23 -0600)]
Update: The tags file.

9 months agoBugfix: The FSS Read program is missing the f_directory dependency.
Kevin Day [Tue, 23 Dec 2025 17:06:49 +0000 (11:06 -0600)]
Bugfix: The FSS Read program is missing the f_directory dependency.

10 months agoBugfix: Error reporting has invalid syntax and some are the wrong errors.
Kevin Day [Fri, 19 Dec 2025 01:01:41 +0000 (19:01 -0600)]
Bugfix: Error reporting has invalid syntax and some are the wrong errors.

The Access Denied error is missing the trailing quote.
The problem appears to stem from when I added the debug printing support.
I failed to place the closing quote into the correct location.

I also noticed that the static strings array is too short!
This will result in the wrong errors being printed.

Add the missing strings.

The stand alone builds must be updated because this now uses a string that wasn't used before.
Make sure `_di_f_string_format_sentence_end_basic_s_` is available in all custom builds that rely on the error printing.

10 months agoUpdate: The f_process syscalls should return F_implement_not if not available.
Kevin Day [Thu, 18 Dec 2025 02:18:46 +0000 (20:18 -0600)]
Update: The f_process syscalls should return F_implement_not if not available.

The `f_process` is very new.
The syscalls might not be available.

Ensure that this doesn't break older software stacks by returning `F_implement_not` when the associated syscall is not available.