<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sciteco, branch master-fmsbw-ci</title>
<subtitle>Scintilla-based Text Editor and COrrector</subtitle>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/'/>
<entry>
<title>added check for pow() in libm</title>
<updated>2026-11-10T21:25:50+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-10T21:25:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=bf93dcc5ec5eb010287a5dcf1c4ce989963f8d67'/>
<id>bf93dcc5ec5eb010287a5dcf1c4ce989963f8d67</id>
<content type='text'>
Some platforms could require an explicit `-lm` for functions from the
math library, while others export these symbols in libc.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some platforms could require an explicit `-lm` for functions from the
math library, while others export these symbols in libc.
</pre>
</div>
</content>
</entry>
<entry>
<title>test suite: fixed check for very large floating point constant</title>
<updated>2026-11-10T21:20:54+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-10T21:20:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=03922ba0e3f2a46ebf09f2582333abcce023f596'/>
<id>03922ba0e3f2a46ebf09f2582333abcce023f596</id>
<content type='text'>
This was failing on aarch64 and ppc64 (via OBS) because they are
rounding to another approximation than amd64.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was failing on aarch64 and ppc64 (via OBS) because they are
rounding to another approximation than amd64.
</pre>
</div>
</content>
</entry>
<entry>
<title>updated TODO</title>
<updated>2026-11-09T23:31:57+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-09T23:31:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=ac064a4e60b139f334ea67881fc072c63b8d2980'/>
<id>ac064a4e60b139f334ea67881fc072c63b8d2980</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>rewrote number parsing: convert only completely parsed numbers</title>
<updated>2026-11-09T23:15:22+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-09T23:15:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=6abc1299927860a3d433119c9632cf780ac79c7b'/>
<id>6abc1299927860a3d433119c9632cf780ac79c7b</id>
<content type='text'>
* We are now buffering until the end of the number constant before converting
  it to an integer or float.
* This way, the integer part of a floating point number does not necessarily
  have to fit into an teco_int_t -- floats can approximate very large numbers.
  When detecting a floating point number, we're parsing into floats from the
  very beginning.
  The behavior has been compared with Lua 5.4 and a test case has been added.
* Also, integers constants are now checked for overflows.
  Otherwise, constants could be arbitrarily long and the result would
  be unpredictable.
  Operations on integers are still not checked for overflows, though, since
  you might want to rely on it, e.g. for overlapping integers. But that
  might actually be pretty useless, especially with signed integers, so we
  might want to change that in the future.
* Having both overflow checks and increased floating point constant range
  is the reason we cannot practically immediately parse into a number,
  not even if we kept both an integer and float accumulator at the same time.
* Also fixes a memory corruption issue that existed since
  4aa2b717f9e050783b567540d9bb0193d692e3e9.
  You must emit undo tokens for fields in state machines only if
  ctx-&gt;parent.must_undo, i.e. if the state machine is not temporary as
  during a macro call.
  A test case has been added.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* We are now buffering until the end of the number constant before converting
  it to an integer or float.
* This way, the integer part of a floating point number does not necessarily
  have to fit into an teco_int_t -- floats can approximate very large numbers.
  When detecting a floating point number, we're parsing into floats from the
  very beginning.
  The behavior has been compared with Lua 5.4 and a test case has been added.
* Also, integers constants are now checked for overflows.
  Otherwise, constants could be arbitrarily long and the result would
  be unpredictable.
  Operations on integers are still not checked for overflows, though, since
  you might want to rely on it, e.g. for overlapping integers. But that
  might actually be pretty useless, especially with signed integers, so we
  might want to change that in the future.
* Having both overflow checks and increased floating point constant range
  is the reason we cannot practically immediately parse into a number,
  not even if we kept both an integer and float accumulator at the same time.
* Also fixes a memory corruption issue that existed since
  4aa2b717f9e050783b567540d9bb0193d692e3e9.
  You must emit undo tokens for fields in state machines only if
  ctx-&gt;parent.must_undo, i.e. if the state machine is not temporary as
  during a macro call.
  A test case has been added.
</pre>
</div>
</content>
</entry>
<entry>
<title>use __builtin_add_overflow() for checking memory usage overflows</title>
<updated>2026-11-09T21:51:28+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-09T21:51:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=427c9da3281950f3e37011e31b30985332c95345'/>
<id>427c9da3281950f3e37011e31b30985332c95345</id>
<content type='text'>
We don't have g_size_checked_add(), but these are just wrappers
around the GCC/Clang intrinsics anyway.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We don't have g_size_checked_add(), but these are just wrappers
around the GCC/Clang intrinsics anyway.
</pre>
</div>
</content>
</entry>
<entry>
<title>refactored several commands and states related to numbers into number-commands.c</title>
<updated>2026-11-01T19:44:46+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-11-01T19:08:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=5a4537cb67c77daba87d820ddcb4bd7574a8080d'/>
<id>5a4537cb67c77daba87d820ddcb4bd7574a8080d</id>
<content type='text'>
This includes teco_state_number, `\`, all operators, braces, comma,
`^_`, `^O`, `^D`, `^R`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This includes teco_state_number, `\`, all operators, braces, comma,
`^_`, `^O`, `^D`, `^R`.
</pre>
</div>
</content>
</entry>
<entry>
<title>fnkeys.tes: guard against non-decimal radixes</title>
<updated>2026-10-31T22:01:40+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-10-31T21:25:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=1975c0d93373c41f9aef943980cb783188603e6d'/>
<id>1975c0d93373c41f9aef943980cb783188603e6d</id>
<content type='text'>
After setting a non-decimal radix (e.g. 16^R), all of the fnkeys.tes
command-line editing macros would be broken.
Sometimes this can happen by accident.
It would be very tricky to write these macros in a way that works with any
currently configured radix.
So instead we now insert all of the ^T macros via :M, preserving the original radix.
As the first thing we call :M#^T^R, which checks the radix against 10 and throws
an error (currently division by zero, but this will be changed once we have
proper error handling constructs).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
After setting a non-decimal radix (e.g. 16^R), all of the fnkeys.tes
command-line editing macros would be broken.
Sometimes this can happen by accident.
It would be very tricky to write these macros in a way that works with any
currently configured radix.
So instead we now insert all of the ^T macros via :M, preserving the original radix.
As the first thing we call :M#^T^R, which checks the radix against 10 and throws
an error (currently division by zero, but this will be changed once we have
proper error handling constructs).
</pre>
</div>
</content>
</entry>
<entry>
<title>support floating point numbers</title>
<updated>2026-10-31T20:13:19+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-10-31T12:46:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=4aa2b717f9e050783b567540d9bb0193d692e3e9'/>
<id>4aa2b717f9e050783b567540d9bb0193d692e3e9</id>
<content type='text'>
* Extends the SciTECO type system. A number on the expression stack
  or in a Q-register can be either an integer or a float.
* Floating point constants begin with a digit (like all other
  numbers), are followed by a `.` and an optional fractional part.
  Exponents cannot currently be written.
  E.g. `1.` == `1.0`. But `.0` would still be `.,0`.
  (!) To push an integer followed by dot, you must now write e.g. `1,.` or `1 .`.
* All of the basic arithmetic operators operate like this:
  If both operands are integers, the result is also an integer (integer arithmetics).
  If at least one of the operands is a float, the result is also a float (float arithmetics).
* All of the binary operators (AND, OR, XOR) always cast all
  operands to integer and the result is always an integer as well.
* You can "cast" integers to float by `*1.` or `/1.`.
  You can "cast" floats to integers using `#0`.
* Most commands still accept only integers. Floats are implicitly casted to integers.
  Float-aware commands are: =, \, ^W, Qq, Uq, %q and the conditionals.
* `%q` will not change the current type of register q.
* Numeric part of "lexer.font" is now a float (in points).
* You cannot currently print octal and hexadecimal floats.
  `==` and `===` are identical to `=` on floats.
* `===` is now printing hex integers in lower case.
  This is because SciTECO's coding style for hex constants is also lower case.
* `--with-teco-integer` renamed to `--with-teco-number`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Extends the SciTECO type system. A number on the expression stack
  or in a Q-register can be either an integer or a float.
* Floating point constants begin with a digit (like all other
  numbers), are followed by a `.` and an optional fractional part.
  Exponents cannot currently be written.
  E.g. `1.` == `1.0`. But `.0` would still be `.,0`.
  (!) To push an integer followed by dot, you must now write e.g. `1,.` or `1 .`.
* All of the basic arithmetic operators operate like this:
  If both operands are integers, the result is also an integer (integer arithmetics).
  If at least one of the operands is a float, the result is also a float (float arithmetics).
* All of the binary operators (AND, OR, XOR) always cast all
  operands to integer and the result is always an integer as well.
* You can "cast" integers to float by `*1.` or `/1.`.
  You can "cast" floats to integers using `#0`.
* Most commands still accept only integers. Floats are implicitly casted to integers.
  Float-aware commands are: =, \, ^W, Qq, Uq, %q and the conditionals.
* `%q` will not change the current type of register q.
* Numeric part of "lexer.font" is now a float (in points).
* You cannot currently print octal and hexadecimal floats.
  `==` and `===` are identical to `=` on floats.
* `===` is now printing hex integers in lower case.
  This is because SciTECO's coding style for hex constants is also lower case.
* `--with-teco-integer` renamed to `--with-teco-number`.
</pre>
</div>
</content>
</entry>
<entry>
<title>numbers are separate parser states and there are syntactic octal and hexadecimal constants now</title>
<updated>2026-10-25T10:38:05+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-10-25T01:39:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=e0bf13622b0922252439e3fa8b43df9877678d75'/>
<id>e0bf13622b0922252439e3fa8b43df9877678d75</id>
<content type='text'>
* Instead of every digit being a stack-modifying standalone
  command, there is a single continuous parser state (teco_state_number)
  now - even though it has certain unique characteristics.
  They are consequently documented in the ARITHMETICS AND
  EXPRESSIONS chapter of sciteco(7).
* A number will therefore be rubbed out entirely by CTRL+W,
  including a possible @-modifier.
* (!) Spaces within constants are no longer ignored, but will push
  separate numbers to the stack instead (`1 2 3` pushes 3 numbers).
  The significance of the `,` operator is thus further reduced.
* (!) You can no longer "append" to numbers on the stack as in
  `Qa001` - this was never actually used and caused more confusion.
* (!) Digits outside the current radix are no longer accepted.
  E.g. digit 2 after `2^R`. This feature was also never used.
* (!) Octal constants are supported with leading zeros as in C.
  This works regardless of the current radix set via `8^R` or `^O`.
  It remains to see whether this is actually useful or is rather
  annoying (since every constant beginning with 0 is automatically
  octal, you cannot left-pad arbitrary numbers with 0).
* Hexadecimal constants are supported by at-modifying them as in
  `@0ff`. They must still begin with a digit 0-9 and since A-F are
  valid SciTECO commands, you may need additional spaces to separate
  hexadecimal constants from regular commands as in `@0ff D`.
  During syntax highlighting the number style is extended back to the
  at-sign.
  Note: Hexadecimal constants couldn't have been realized via
  `16^R` (or some shortcut) since that depends on runtime state, but
  we must know during parsing whether symbols A-F are part of the
  number of regular SciTECO commands.
* The new hexadecimal constants are used in the color schemes now.
  Thanks to them, we no longer need workarounds like the "color.rgb"
  macro.
* Since numbers don't have a dedicated terminator character, but any
  letter may terminate it, the number state must behave similar to a
  start state. Consequently, hexadecimal constants will currently be
  auto-case-folded if you enabled this feature.
  I recommend not to write hex constants in upper-case, though.
  Perhaps this should be worked around with a custom process_edit_cmd()
  callback.
* Test suite updated
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Instead of every digit being a stack-modifying standalone
  command, there is a single continuous parser state (teco_state_number)
  now - even though it has certain unique characteristics.
  They are consequently documented in the ARITHMETICS AND
  EXPRESSIONS chapter of sciteco(7).
* A number will therefore be rubbed out entirely by CTRL+W,
  including a possible @-modifier.
* (!) Spaces within constants are no longer ignored, but will push
  separate numbers to the stack instead (`1 2 3` pushes 3 numbers).
  The significance of the `,` operator is thus further reduced.
* (!) You can no longer "append" to numbers on the stack as in
  `Qa001` - this was never actually used and caused more confusion.
* (!) Digits outside the current radix are no longer accepted.
  E.g. digit 2 after `2^R`. This feature was also never used.
* (!) Octal constants are supported with leading zeros as in C.
  This works regardless of the current radix set via `8^R` or `^O`.
  It remains to see whether this is actually useful or is rather
  annoying (since every constant beginning with 0 is automatically
  octal, you cannot left-pad arbitrary numbers with 0).
* Hexadecimal constants are supported by at-modifying them as in
  `@0ff`. They must still begin with a digit 0-9 and since A-F are
  valid SciTECO commands, you may need additional spaces to separate
  hexadecimal constants from regular commands as in `@0ff D`.
  During syntax highlighting the number style is extended back to the
  at-sign.
  Note: Hexadecimal constants couldn't have been realized via
  `16^R` (or some shortcut) since that depends on runtime state, but
  we must know during parsing whether symbols A-F are part of the
  number of regular SciTECO commands.
* The new hexadecimal constants are used in the color schemes now.
  Thanks to them, we no longer need workarounds like the "color.rgb"
  macro.
* Since numbers don't have a dedicated terminator character, but any
  letter may terminate it, the number state must behave similar to a
  start state. Consequently, hexadecimal constants will currently be
  auto-case-folded if you enabled this feature.
  I recommend not to write hex constants in upper-case, though.
  Perhaps this should be worked around with a custom process_edit_cmd()
  callback.
* Test suite updated
</pre>
</div>
</content>
</entry>
<entry>
<title>fixed rubbing out radix changes (^O/^D/^R)</title>
<updated>2026-10-20T23:24:58+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-10-20T23:17:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=c4146a9e57a897c5393e1c4999110fd95208f43f'/>
<id>c4146a9e57a897c5393e1c4999110fd95208f43f</id>
<content type='text'>
This was missing the undoing after the refactoring
in a53fa85dabdfc2c47ec0c9e6626ddda2379a8e38.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was missing the undoing after the refactoring
in a53fa85dabdfc2c47ec0c9e6626ddda2379a8e38.
</pre>
</div>
</content>
</entry>
</feed>
