You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(20) |
Dec
(17) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(39) |
Feb
(21) |
Mar
(33) |
Apr
(135) |
May
(53) |
Jun
(88) |
Jul
(47) |
Aug
(59) |
Sep
(207) |
Oct
(40) |
Nov
(7) |
Dec
(26) |
| 2003 |
Jan
(49) |
Feb
(39) |
Mar
(117) |
Apr
(50) |
May
(62) |
Jun
(6) |
Jul
(19) |
Aug
(24) |
Sep
(11) |
Oct
(11) |
Nov
(49) |
Dec
(9) |
| 2004 |
Jan
(29) |
Feb
(123) |
Mar
(32) |
Apr
(53) |
May
(52) |
Jun
(19) |
Jul
(33) |
Aug
(10) |
Sep
(76) |
Oct
(86) |
Nov
(171) |
Dec
(163) |
| 2005 |
Jan
(147) |
Feb
(121) |
Mar
(120) |
Apr
(126) |
May
(120) |
Jun
(213) |
Jul
(76) |
Aug
(79) |
Sep
(140) |
Oct
(83) |
Nov
(156) |
Dec
(202) |
| 2006 |
Jan
(181) |
Feb
(171) |
Mar
(157) |
Apr
(98) |
May
(96) |
Jun
(97) |
Jul
(193) |
Aug
(76) |
Sep
(130) |
Oct
(63) |
Nov
(196) |
Dec
(253) |
| 2007 |
Jan
(256) |
Feb
(293) |
Mar
(276) |
Apr
(258) |
May
(181) |
Jun
(91) |
Jul
(108) |
Aug
(69) |
Sep
(107) |
Oct
(179) |
Nov
(137) |
Dec
(121) |
| 2008 |
Jan
(124) |
Feb
(129) |
Mar
(192) |
Apr
(201) |
May
(90) |
Jun
(86) |
Jul
(115) |
Aug
(142) |
Sep
(49) |
Oct
(91) |
Nov
(95) |
Dec
(218) |
| 2009 |
Jan
(230) |
Feb
(149) |
Mar
(118) |
Apr
(72) |
May
(77) |
Jun
(68) |
Jul
(102) |
Aug
(72) |
Sep
(89) |
Oct
(76) |
Nov
(125) |
Dec
(86) |
| 2010 |
Jan
(75) |
Feb
(90) |
Mar
(89) |
Apr
(121) |
May
(111) |
Jun
(66) |
Jul
(75) |
Aug
(66) |
Sep
(66) |
Oct
(166) |
Nov
(121) |
Dec
(73) |
| 2011 |
Jan
(74) |
Feb
|
Mar
|
Apr
(14) |
May
(22) |
Jun
(31) |
Jul
(53) |
Aug
(37) |
Sep
(23) |
Oct
(25) |
Nov
(31) |
Dec
(28) |
| 2012 |
Jan
(18) |
Feb
(11) |
Mar
(32) |
Apr
(17) |
May
(48) |
Jun
(37) |
Jul
(23) |
Aug
(54) |
Sep
(15) |
Oct
(11) |
Nov
(19) |
Dec
(22) |
| 2013 |
Jan
(11) |
Feb
(32) |
Mar
(24) |
Apr
(37) |
May
(31) |
Jun
(14) |
Jul
(26) |
Aug
(33) |
Sep
(40) |
Oct
(21) |
Nov
(36) |
Dec
(84) |
| 2014 |
Jan
(23) |
Feb
(20) |
Mar
(27) |
Apr
(24) |
May
(31) |
Jun
(27) |
Jul
(34) |
Aug
(26) |
Sep
(21) |
Oct
(45) |
Nov
(23) |
Dec
(73) |
| 2015 |
Jan
(33) |
Feb
(8) |
Mar
(24) |
Apr
(45) |
May
(27) |
Jun
(19) |
Jul
(21) |
Aug
(51) |
Sep
(43) |
Oct
(29) |
Nov
(61) |
Dec
(86) |
| 2016 |
Jan
(99) |
Feb
(52) |
Mar
(80) |
Apr
(61) |
May
(24) |
Jun
(23) |
Jul
(36) |
Aug
(30) |
Sep
(41) |
Oct
(43) |
Nov
(27) |
Dec
(46) |
| 2017 |
Jan
(57) |
Feb
(34) |
Mar
(40) |
Apr
(31) |
May
(78) |
Jun
(49) |
Jul
(72) |
Aug
(33) |
Sep
(26) |
Oct
(82) |
Nov
(69) |
Dec
(29) |
| 2018 |
Jan
(43) |
Feb
(9) |
Mar
|
Apr
(40) |
May
(34) |
Jun
(49) |
Jul
(45) |
Aug
(8) |
Sep
(51) |
Oct
(75) |
Nov
(103) |
Dec
(80) |
| 2019 |
Jan
(153) |
Feb
(78) |
Mar
(47) |
Apr
(48) |
May
(63) |
Jun
(54) |
Jul
(10) |
Aug
(7) |
Sep
(17) |
Oct
(24) |
Nov
(29) |
Dec
(17) |
| 2020 |
Jan
(22) |
Feb
(74) |
Mar
(47) |
Apr
(48) |
May
(12) |
Jun
(44) |
Jul
(13) |
Aug
(18) |
Sep
(26) |
Oct
(36) |
Nov
(25) |
Dec
(23) |
| 2021 |
Jan
(28) |
Feb
(25) |
Mar
(58) |
Apr
(76) |
May
(72) |
Jun
(70) |
Jul
(25) |
Aug
(67) |
Sep
(17) |
Oct
(24) |
Nov
(30) |
Dec
(30) |
| 2022 |
Jan
(51) |
Feb
(39) |
Mar
(72) |
Apr
(65) |
May
(30) |
Jun
(72) |
Jul
(129) |
Aug
(44) |
Sep
(45) |
Oct
(30) |
Nov
(48) |
Dec
(275) |
| 2023 |
Jan
(235) |
Feb
(232) |
Mar
(68) |
Apr
(16) |
May
(52) |
Jun
(87) |
Jul
(143) |
Aug
(32) |
Sep
(26) |
Oct
(15) |
Nov
(20) |
Dec
(74) |
| 2024 |
Jan
(119) |
Feb
(32) |
Mar
(64) |
Apr
(68) |
May
(30) |
Jun
(50) |
Jul
(37) |
Aug
(32) |
Sep
(10) |
Oct
(27) |
Nov
(47) |
Dec
(36) |
| 2025 |
Jan
(94) |
Feb
(68) |
Mar
(79) |
Apr
(66) |
May
(46) |
Jun
(21) |
Jul
(134) |
Aug
(134) |
Sep
(53) |
Oct
(24) |
Nov
(69) |
Dec
(3) |
|
From: willisbl <wil...@us...> - 2025-12-01 10:51:08
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 75f8ae061eed8946514a5df97fded10ac14a7358 (commit)
from 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 75f8ae061eed8946514a5df97fded10ac14a7358
Author: Barton Willis <wi...@un...>
Date: Mon Dec 1 04:50:53 2025 -0600
Update ChangeLog for fix for bug #4636
diff --git a/ChangeLog b/ChangeLog
index f2410ec59..c043af3d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,7 @@ Bug fixes for numbered bugs:
* \#4603: Control stack regression with abs_integrate / 5.48.0
* \#4619: limit(inf = inf) causes stack overflow
* \#4633: integrate(exp(- t) log(t), t, 0, 1) --> integral nounform
+ * \#4636: signum(ind) is an error
Changes in the Windows installer:
---------------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
1 file changed, 1 insertion(+)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2025-12-01 10:39:26
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8 (commit)
from 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8
Author: Barton Willis <wi...@un...>
Date: Mon Dec 1 04:39:11 2025 -0600
Fix for #4636 signum(ind) is an error
- In the signum simplifier, catch errors from the call to `csign`. This allows `signum(ind)` to return a `signum` nounform.
- Added a test to `rtest_signum.mac` for this bug, along with additional tests for overflow and underflow in signum expressions.
- Updated a few other tests in `rtest_signum.mac`.
No unexpected failures in the testsuite or share testsuite with SBCL 2.4.7 or Clozure 1.13.
diff --git a/src/simp.lisp b/src/simp.lisp
index 28ec6502a..1a1b97d41 100644
--- a/src/simp.lisp
+++ b/src/simp.lisp
@@ -1868,7 +1868,9 @@
x)
(t
- (setq sgn ($csign x))
+ ;; Let's catch errors from $csign. Doing so allows signum(ind) to return a signum nounform, for example.
+ (setq sgn (car (let (($errormsg nil) (errcatch t) (errset nil)) (errset ($csign x)))))
+
(cond ((eq sgn '$neg) -1)
((eq sgn '$zero) 0)
((eq sgn '$pos) 1)
diff --git a/tests/rtest_signum.mac b/tests/rtest_signum.mac
index 213182dfb..c6736c8a9 100644
--- a/tests/rtest_signum.mac
+++ b/tests/rtest_signum.mac
@@ -48,17 +48,17 @@ signum(x^2 + 1);
(declare(z, complex),0);
0$
-signum(z);
-signum(z)$
+block([ans : signum(z)], [op(ans), args(ans)]);
+[signum,[z]]$
signum(%i);
-signum(%i)$
+%i$
signum(%i - 6);
-signum(%i - 6)$
+%i/sqrt(37)-6/sqrt(37)$
-signum(z^2 + 1);
-signum(z^2 + 1)$
+block([ans : signum(z^2 + 1)],[op(ans), args(ans)]);
+[signum,[z^2+1]]$
(assume(p > 0, n < 0, pz >= 0, nz <= 0),0);
0$
@@ -227,3 +227,54 @@ b^2$
integrate(mod(x,b),x,0,42*b);
21*b^2$
+
+/* \# 4636 signum(ind) is an error */
+block([ans : signum(ind)], [op(ans),args(ans)]);
+[signum, [ind]]$
+
+block([ans : signum(infinity)], [op(ans),args(ans)]);
+[signum, [infinity]]$
+
+block([ans : signum(und)], [op(ans),args(ans)]);
+[signum, [und]]$
+
+/* overflow/underflow cases also reported in \# 4636 */
+signum(1e-170);
+1.0$
+
+signum(-1e-170);
+-1.0$
+
+signum(1e308);
+1.0$
+
+signum(-1e308);
+-1.0$
+
+signum(1e-170 + %i*1e-170);
+0.7071067811865475*%i + 0.7071067811865475$
+
+signum(1e170 + %i*1e+170);
+0.7071067811865475 * %i + 0.7071067811865475$
+
+signum(1e170);
+1.0$
+
+/* complex numbers */
+signum(5+%i*7);
+(7*%i)/sqrt(74)+5/sqrt(74)$
+
+signum(3.4 + %i);
+0.28216632399155017*%i+0.9593655015712705$
+
+signum(3.4 + %i/15);
+0.019604074934445576*%i+0.9998078216567245$
+
+signum(3.4b0 + %i/15);
+1.96040749344455786124536b-2*%i+9.99807821656724509235131b-1$
+
+facts();
+[]$
+
+contexts;
+[initial, global]$
\ No newline at end of file
-----------------------------------------------------------------------
Summary of changes:
src/simp.lisp | 4 +++-
tests/rtest_signum.mac | 63 +++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 60 insertions(+), 7 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-01 06:23:24
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, dodier-iterate-over-hash-tables-take-2 has been created
at 93a890f26c1ed97facd712f1a44b980e4afd0b2c (commit)
- Log -----------------------------------------------------------------
commit 93a890f26c1ed97facd712f1a44b980e4afd0b2c
Author: Robert Dodier <rob...@so...>
Date: Sun Nov 30 22:22:12 2025 -0800
Documentation for iterating over key-value pairs of hash table;
also documentation for iterating over arguments of a general expression,
and expand documentation for iterating over elements of a list.
diff --git a/doc/info/Program.texi b/doc/info/Program.texi
index 13bcd99b6..e4350ecc2 100644
--- a/doc/info/Program.texi
+++ b/doc/info/Program.texi
@@ -311,6 +311,10 @@ form of the @code{do} statements maxima supports is:
unless @var{condition} do @var{body}}
@item
@code{for @var{variable} in @var{list} do @var{body}}
+@item
+@code{for @var{variable} in @var{expr} do @var{body}}
+@item
+@code{for @var{variable} in @var{hash_table} do @var{body}}
@end itemize
If the loop is expected to generate a list as output the command
@@ -318,7 +322,7 @@ If the loop is expected to generate a list as output the command
@xref{Performance considerations for Lists}.
@var{initial_value}, @var{increment}, @var{limit}, and @var{body} can be any
-expression. @var{list} is a list. If the increment is 1 then "@code{step 1}"
+expression. If the increment is 1 then "@code{step 1}"
may be omitted; As always, if @code{body} needs to contain more than one command
these commands can be specified as a comma-separated list surrounded
by parenthesis or as a @mrefdot{block}
@@ -560,39 +564,126 @@ be returned as the value of the @code{do}. The @code{block} is exited and this
value of the @code{do} is returned as the value of the @code{block} because the
@code{do} is the last statement in the block.)
-One other form of the @code{do} is available in Maxima. The syntax is:
+A @code{for} loop can also iterate over the contents of lists, general expressions, and hash tables, as follows.
@example
for @var{variable} in @var{list} @var{end_tests} do @var{body}
+
+for @var{variable} in @var{expr} @var{end_tests} do @var{body}
+
+for @var{variable} in @var{hash_table} @var{end_tests} do @var{body}
@end example
-The elements of @var{list} are any expressions which will successively
-be assigned to the @code{variable} on each iteration of the
-@var{body}. The optional termination tests @var{end_tests} can be
-used to terminate execution of the @code{do}; otherwise it will
-terminate when the @var{list} is exhausted or when a @code{return} is
-executed in the @var{body}. (In fact, @code{list} may be any
-non-atomic expression, and successive parts are taken.)
+In each case,
+@var{body} is evaluated once for @var{variable} assigned
+each element of @var{list},
+each argument of @var{expr},
+or each key-value pair of @var{hash_table},
+respectively.
+If present,
+@var{end_tests} terminate the loop if any test evaluates to @code{true};
+otherwise the loop terminates when the elements of @var{list},
+the arguments of @var{expr},
+or the key-value pairs of @var{hash_table}
+are exhausted,
+or when @code{return} is executed in @var{body}.
+
+@var{hash_table} may be an undeclared array,
+either as a symbol property (created with @code{use_fast_arrays} equal to @code{false})
+or a value (created with @code{use_fast_arrays} equal to @code{true}),
+or a hash table created by @code{make_array(hashed, ...)}.
+
+Values are assigned to @var{variable} using the general assignment operator @code{":"}.
+Therefore any assignment to a symbol (not a subscripted expression) which is possible via @code{":"}
+is also permissible for iterating over the contents of expressions.
+In particular,
+destructuring assignments are recognized;
+these may be useful to work with the key-value pairs of a hash table.
+
+Examples:
+
+A @code{for} loop can iterate over the elements of a list.
@c ===beg===
-@c for f in [log, rho, atan] do ldisp(f(1))$
-@c ev(%t3,numer);
+@c for f in [log, rho, atan] do ldisp (f(1)) $
@c ===end===
@example maxima
@group
-(%i1) for f in [log, rho, atan] do ldisp(f(1))$
+(%i1) for f in [log, rho, atan] do ldisp (f(1)) $
(%t1) 0
(%t2) rho(1)
%pi
-(%t3) ---
+(%t3) ───
4
+@end group
+@end example
+
+A @code{for} loop can iterate over the arguments of a general expression.
+@c ===beg===
+@c e: a + 1/2 + %pi*2;
+@c for v in e do ldisp (v) $
+@c ===end===
+@example maxima
+@group
+(%i1) e: a + 1/2 + %pi*2;
+ 1
+(%o1) a + 2 %pi + ─
+ 2
+(%i2) for v in e do ldisp (v) $
+(%t2) a
+
+(%t3) 2 %pi
+
+ 1
+(%t4) ─
+ 2
@end group
+@end example
+
+A @code{for} loop can iterate over the key-value pairs of hash tables.
+In this case, the hash table is an undeclared array.
+
+@c ===beg===
+@c (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+@c for p in hh do ldisp (p);
+@c ===end===
+@example maxima
+@group
+(%i1) (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+
+(%i2) for p in hh do ldisp (p);
+(%t2) [[bar], 222]
+
+(%t3) [[baz], 777]
+
+(%t4) [[foo], 444]
+
+(%o4) done
+@end group
+@end example
+
+Destructuring assignments are recognized;
+these may be useful to work with the key-value pairs of a hash table.
+
+@c ===beg===
+@c (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+@c for [[k], v] in hh do disp (printf (false, "Key ~a --> value ~a", k, v));
+@c ===end===
+@example maxima
@group
-(%i4) ev(%t3,numer);
-(%o4) 0.7853981633974483
+(%i1) (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+
+(%i2) for [[k], v] in hh do disp (printf (false, "Key ~a --> value ~a", k, v));
+ Key bar --> value 222
+
+ Key baz --> value 777
+
+ Key foo --> value 444
+
+(%o2) done
@end group
@end example
commit fd048bb89333049a38d9026d7324997c507b9d00
Author: Robert Dodier <rob...@so...>
Date: Sat Nov 29 10:43:06 2025 -0800
Additional tests for iterating over hash tables; one loop variable, no destructuring.
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index 531dad995..4ca02d4bf 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -253,6 +253,18 @@ true;
a: 100;
100;
+block ([L: []], for a in aa1 do push ([a[2], a[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+a;
+100;
+
+block ([L: []], for b in aa1 do push ([b[2], b[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
@@ -273,6 +285,18 @@ block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
?hash\-table\-p (aa2);
true;
+block ([L: []], for a in aa2 do push ([a[2], a[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+a;
+100;
+
+block ([L: []], for b in aa2 do push ([b[2], b[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
@@ -302,6 +326,14 @@ true;
[b, a];
[-2, 100];
+block ([L: []], for b in aa3 do push ([b[1], b[2]], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+b;
+-2;
+
block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
[[["fgh", 3*u*v, giraffe], rhino*elephant],
[["glorble", 7*x, emu], 6/cricket],
@@ -340,6 +372,12 @@ true;
(f: 199, g: 200);
200;
+block ([L: []], for g in hh1 do push ([g[2], g[1]], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+g;
+200;
+
block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
@@ -366,6 +404,14 @@ true;
0);
0;
+block ([L: []], for y in hh2 do push ([y[1], y[2]], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+y;
+y;
+
block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
[[[456, cos(w)], sin(u) - cos(v)],
[[678, "blurf"], 876 - mumble],
@@ -396,6 +442,14 @@ true;
0);
0;
+block ([L: []], for q in hh3 do push ([q[1], q[2]], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+q;
+q;
+
block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
[[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
@@ -431,6 +485,12 @@ false;
arrays;
[bb1];
+block ([L: []], for v in bb1 do push ([v[2], v[1]], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+v;
+v;
+
block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
@@ -454,6 +514,12 @@ arrays;
w: 321;
321;
+block ([L: []], for w in bb2 do push ([w[1], w[2]], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+w;
+321;
+
block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
@@ -480,6 +546,14 @@ block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
arrays;
[bb1, bb2, bb3];
+block ([L: []], for v in bb3 do push ([v[1], v[2]], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+v;
+v;
+
block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
[[[hjk, "mumble", cos(y) - x], cot(a - b)],
[[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
commit 2ca5be5d9f7110c1be52660b4e9c99352f79ca21
Author: Robert Dodier <rob...@so...>
Date: Fri Nov 28 21:17:11 2025 -0800
Extend "for" loop syntax to iterate over hash tables.
The basic syntax is: for [k, v] in hh do ...
where hh is a undeclared array, "fast" array (i.e., a hash table created
with use_fast_arrays: true), or created by make_array(hashed, ...).
[k, v] is a key/value pair. The pairs are processed in the order
of keys as returned by arrayinfo.
k is always a list, even if the hash table has only one key
and therefore the list has exactly one element.
Destructuring assignment is recognized, e.g.:
for [[k], v] in hh1 do ...
for [[k1, k2], v] in hh2 do ...
for [[k1, k2, k3], v] in hh3 do ...
where hh1, hh2, and hh3 are hash tables which have,
respectively, one, two, and three keys.
Destructuring assignment also applies to the existing loop syntax
for iterating over lists, e.g.:
for [x, y] in [[11, 12], [13, 9], [19, 29]] do ...
This is a freebie -- it would be more work to apply destructuring
assignment only to hash tables, so I let it stand.
There is one bug of which I'm aware: when destructuring assignment is
applied and one of the loop variables is restricted by an ASSIGN helper
to non-symbol values (e.g., linel, which has an ASSIGN helper to
restrict assigned values to integers), *and* the variable is unbound
in the Lisp sense (i.e., BOUNDP returns NIL) before starting the
iteration, then there is an error at the end of the iteration.
From what I can tell, there are no such variables in Maxima, and it's
not easy to create one. Such a variable can be created by Lisp
programming (to create an assignment helper and attach it via the
ASSIGN property), or the following Maxima incantation:
define_variable (foo, 1111, integer);
remvalue (foo);
foo has an ASSIGN property (created by define_variable) and it is
unbound by remvalue. Now the following loop triggers the bug:
for [foo] in [[11], [22], [33]] do print (foo);
From reading the reference manual, it appears that mode_declare plus
mode_checkp, and followed by remvalue, might also work, although it
appears mode_checkp has no effect, from what I can tell.
I will devote time to fixing the bug, but it seems like a not too
serious problem, given the obscurity of the way to trigger it.
diff --git a/src/mlisp.lisp b/src/mlisp.lisp
index e9a0bcdc0..8bdf53d20 100644
--- a/src/mlisp.lisp
+++ b/src/mlisp.lisp
@@ -448,6 +448,18 @@ is EQ to FNNAME if the latter is non-NIL."
;; option variable $errormsg is used as a local variable in a block.
(defvar *$errormsg-value* nil)
+(defun symbol-values-in (expr)
+ (if (atom expr)
+ (if (symbolp expr)
+ (if (boundp expr)
+ ;; Do not take the actual value of $errormsg. It is
+ ;; always NIL at this point, but the value which
+ ;; is stored in *$errormsg-value*.
+ (if (eq expr '$errormsg) *$errormsg-value* (symbol-value expr))
+ munbound)
+ expr)
+ (cons (car expr) (mapcar 'symbol-values-in (cdr expr)))))
+
(defun mbind-doit (lamvars fnargs fnname)
"Makes a new frame where the variables in the list LAMVARS are bound
to the corresponding elements in FNARGS. Note that these elements are
@@ -471,16 +483,9 @@ wrapper for this."
(cons (ncons fnname) lamvars))
(cons '(mlist) fnargs)))))
(let ((var (car vars)))
- (if (not (symbolp var))
+ (when (not (every 'symbolp (cdr ($listofvars var))))
(merror (intl:gettext "Only symbols can be bound; found: ~M") var))
- (let ((value (if (boundp var)
- (if (eq var '$errormsg)
- ;; Do not take the actual value of $errormsg. It is
- ;; always NIL at this point, but the value which
- ;; is stored in *$errormsg-value*.
- *$errormsg-value*
- (symbol-value var))
- munbound)))
+ (let ((value (symbol-values-in var)))
(mset var (car args))
(psetq bindlist (cons var bindlist)
mspeclist (cons value mspeclist))))))
@@ -493,7 +498,7 @@ wrapper for this."
;; At this point store the value of $errormsg in a global. The macro
;; with-$error sets the value of $errormsg to NIL, but we need the
;; actual value in the routine mbind-doit.
- (setq *$errormsg-value* $errormsg)
+ (setq *$errormsg-value* (if (boundp '$errormsg) $errormsg munbound))
(unwind-protect
(prog1
(with-$error (mbind-doit lamvars fnargs fnname))
@@ -522,13 +527,33 @@ wrapper for this."
(finish-output)
(values))
+(defun munbind-makunbound (var)
+ (makunbound var)
+ (setf $values (delete var $values :count 1 :test #'eq)))
+
(defun munbind (vars)
- (dolist (var (reverse vars))
- (cond ((eq (car mspeclist) munbound)
- (makunbound var)
- (setf $values (delete var $values :count 1 :test #'eq)))
- (t (let ((munbindp t)) (mset var (car mspeclist)))))
- (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist))))
+ (let ((foo))
+ (dolist (var (reverse vars))
+ ;; This is a bit of a mess. We should avoid assigning MUNBOUND
+ ;; and instead call MUNBIND-MAKUNBOUND, because some variables
+ ;; cannot be assigned MUNBOUND due to declarations or custom setters.
+ ;; It is easy to detect these cases when VAR is just a symbol,
+ ;; but I don't see a straightforward way to handle it when VAR is
+ ;; a nonatomic expression, so the code for the non-symbol branch
+ ;; will fail if the expression contains a symbol for which
+ ;; MUNBOUND cannot be assigned.
+ (if (symbolp var)
+ (if (eq (car mspeclist) munbound)
+ (munbind-makunbound var)
+ (mset var (car mspeclist)))
+ (progn
+ (let ((munbindp t))
+ (mset var (car mspeclist)))
+ (mapcar (lambda (x) (push x foo)) (cdr ($listofvars var)))))
+ (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist)))
+ (dolist (var foo)
+ (when (and (boundp var) (eq (symbol-value var) munbound))
+ (munbind-makunbound var)))))
;;This takes the place of something like
;; (DELETE (ASSOC (NCONS VAR) $DEPENDENCIES) $DEPENDENCIES 1)
@@ -2229,11 +2254,31 @@ wrapper for this."
(merror (intl:gettext "do loop: illegal 'return': ~M") (car val)))
(t (return (car val))))))))
+(defun key-value-pairs-given-key-lists (x key-lists)
+ (mapcar (lambda (l) (list '(mlist) l (mfuncall '$arrayapply x l))) key-lists))
+
+(defun key-value-pairs-for-hashed-array (x)
+ (let*
+ ((1-d-hash-table (gethash 'dim1 x))
+ (info (mfuncall '$arrayinfo x))
+ (keys-raw (cdddr info))
+ (key-lists (if 1-d-hash-table (mapcar (lambda (y) (cons '(mlist) (list y))) keys-raw) keys-raw)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
+(defun key-value-pairs-for-undeclared-array (x)
+ (let*
+ ((info (mfuncall '$arrayinfo x))
+ (key-lists (cdddr info)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
(defmspec mdoin (form)
(setq form (cdr form))
(funcall #'(lambda (mdop my-var set test action)
(setq set (if ($atom (setq set (format1 (meval (cadr form)))))
- (merror (intl:gettext "do loop: 'in' argument must be a nonatomic expression; found: ~M") set)
+ (cond
+ ((hash-table-p set) (key-value-pairs-for-hashed-array set))
+ ((safe-mget set 'hashar) (key-value-pairs-for-undeclared-array set))
+ (t (merror (intl:gettext "do loop: atomic 'in' argument must be a hashed or undeclared array; found: ~M") set)))
(margs set))
test (list '(mor)
(if (car (cddddr form))
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index ac4fe99c1..531dad995 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -228,3 +228,370 @@ chain weld bucket;
subst (f = "foo", f(x));
foo(x);
+
+/* tests for iterating over hash tables
+ * verify both value hash tables ("fast arrays" or created by make_array)
+ * and named hash tables ("undeclared arrays").
+ */
+
+kill (all);
+done;
+
+/* value hash tables: "fast arrays" */
+
+use_fast_arrays: true;
+true;
+
+/* one key */
+
+(aa1["baz"]: 333, aa1["bar"]: 222, aa1["quux"]: 444, aa1["foo"]: 111, 0);
+0;
+
+?hash\-table\-p (aa1);
+true;
+
+a: 100;
+100;
+
+block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+[a, b];
+[100, b];
+
+block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
+[[111, "foo"], [222, "bar"], [333, "baz"], [444, "quux"]];
+
+[a, b];
+[100, b];
+
+/* two keys */
+
+(aa2[xx, 99]: %pi, aa2[cc, 1099]: %phi, aa2[jj, 543]: %e, 0);
+0;
+
+?hash\-table\-p (aa2);
+true;
+
+block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+[a, b];
+[100, b];
+
+(a2: 300, b: -2);
+-2;
+
+block ([L: []], for [[a1, a2], b] in aa2 do push ([b, a2, a1], L), sort (L));
+[[%e, 543, jj], [%phi, 1099, cc], [%pi, 99, xx]];
+
+[a1, a2, b];
+[a1, 300, -2];
+
+/* three keys */
+
+(aa3["mno", "pqr", 1 - 2*u]: bessel_j (2, 1 - sqrt(x)),
+ aa3["fgh", 3*u*v, giraffe]: rhino*elephant,
+ aa3["glorble", 7*x, emu]: 6/cricket,
+ 0);
+0;
+
+?hash\-table\-p (aa3);
+true;
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [[a1, a2, b], a] in aa3 do push ([a1, a2, b, a], L), sort (L));
+[["fgh", 3*u*v, giraffe, rhino*elephant],
+ ["glorble", 7*x, emu, 6/cricket],
+ ["mno", "pqr", 1 - 2*u, bessel_j (2, 1 - sqrt(x))]];
+
+[a1, a2, b, a];
+[a1, 300, -2, 100];
+
+arrays;
+[];
+
+(reset (use_fast_arrays), kill (all));
+done;
+
+/* value hash tables: created by make_array */
+
+/* one key */
+
+(hh1: make_array (hashed, 1), 0);
+0;
+
+?hash\-table\-p (hh1);
+true;
+
+(hh1[1 + x]: sin(z), hh1[3 - y]: cos(w), hh1[1/(1 + z)]: tan(x), 0);
+0;
+
+(f: 199, g: 200);
+200;
+
+block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+[f, g];
+[199, 200];
+
+block ([L: []], for [[f], g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), 3 - y], [tan(x), 1/(1 + z)], [sin(z), 1 + x]];
+
+[f, g];
+[199, 200];
+
+/* two keys */
+
+(hh2: make_array (hashed, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh2);
+true;
+
+(hh2[678, "blurf"]: 876 - mumble,
+ hh2[987, "sdf"]: 777*zxy,
+ hh2[456, cos(w)]: sin(u) - cos(v),
+ 0);
+0;
+
+block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+[x, y];
+[x, y];
+
+block ([L: []], for [[x1, x2], y] in hh2 do push ([x1, x2, y], L), sort (L));
+[[456, cos(w), sin(u) - cos(v)],
+ [678, "blurf", 876 - mumble],
+ [987, "sdf", 777*zxy]];
+
+[x1, x2, y];
+[x1, x2, y];
+
+/* three keys */
+
+(hh3: make_array (hashed, 1, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh3);
+true;
+
+(hh3[hgf, fds, jhg]: cos(trwq),
+ hh3[asdfg, 1 - rewq, 2*treww]: sin(poiur) - cos(kjghds),
+ hh3[ewq, 2 - jdssaaq, 3*cxmmz]: sqrt(ytre),
+ 0);
+0;
+
+block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+[p, q];
+[p, q];
+
+block ([L: []], for [[p1, p2, p3], q] in hh3 do push ([p1, p2, p3, q], L), sort (L));
+[[asdfg, 1 - rewq, 2*treww, sin(poiur) - cos(kjghds)],
+ [ewq, 2 - jdssaaq, 3*cxmmz, sqrt(ytre)],
+ [hgf, fds, jhg, cos(trwq)]];
+
+[p1, p2, p3, q];
+[p1, p2, p3, q];
+
+arrays;
+[];
+
+kill (all);
+done;
+
+/* named hash tables: "undeclared arrays" */
+
+/* one key */
+
+(bb1["mumble"]: 123, bb1["blarf"]: 234, bb1["blurf"]: 999, bb1["blarg"]: 345, 0);
+0;
+
+?hash\-table\-p (bb1);
+false;
+
+arrays;
+[bb1];
+
+block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+[u, v];
+[u, v];
+
+block ([L: []], for [[u], v] in bb1 do push ([v, u], L), sort (L));
+[[123, "mumble"], [234, "blarf"], [345, "blarg"], [999, "blurf"]];
+
+[u, v];
+[u, v];
+
+/* two keys */
+
+(bb2["pqr", 1 + %pi]: sin(k*%pi), bb2["zxy", 2*%pi]: cos(m*%pi), bb2["hgfedc", 3 - blurf]: tan(n*%pi), 0);
+0;
+
+arrays;
+[bb1, bb2];
+
+w: 321;
+321;
+
+block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+[v, w];
+[v, 321];
+
+v2: 432;
+432;
+
+block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
+[["hgfedc", 3 - blurf, tan(n*%pi)], ["pqr", 1 + %pi, sin(k*%pi)], ["zxy", 2*%pi, cos(m*%pi)]];
+
+[v1,v2, w];
+[v1, 432, 321];
+
+/* three keys */
+
+(bb3[zxy, "blah", cos(a) + cos(b)]: tan(a + b),
+ bb3[hjk, "mumble", cos(y) - x]: cot(a - b),
+ bb3[uvw, "qwerty", foo(z) + q]: sec(2*b - a),
+ 0);
+0;
+
+arrays;
+[bb1, bb2, bb3];
+
+block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+[w, v];
+[321, v];
+
+block ([L: []], for [[v1, v2, w], v] in bb3 do push ([v1, v2, w, v], L), sort (L));
+[[hjk, "mumble", cos(y) - x, cot(a - b)],
+ [uvw, "qwerty", foo(z) + q, sec(2*b - a)],
+ [zxy, "blah", cos(a) + cos(b), tan(a + b)]];
+
+
+[v1, v2, w, v];
+[v1, 432, 321, v];
+
+/* additional tests for MUNBIND */
+
+kill (all);
+done;
+
+(a: "foo", b: "bar", c: "baz", 0);
+0;
+
+(blurf (a, b, c, d, e, f) := (a + b + c)*(d + e + f),
+ blurf (1, 2, 3, 4, 5, 6));
+90;
+
+[a, b, c, d, e, f];
+["foo", "bar", "baz", d, e, f];
+
+(x1: 123,
+ mumble (a, b, [L]) := (a + b) * lsum (x1, x1, L),
+ mumble (7, 8, 9, 10, 11));
+450;
+
+[a, b, L, x1];
+["foo", "bar", L, 123];
+
+(harrumph (b, 'c, d) := b*c*d,
+ harrumph (111, x1, %pi));
+111*x1*%pi;
+
+[b, c, d];
+["bar", "baz", d];
+
+(blarg[x, b] := x^b,
+ blarg[1 - u, 1 - k]);
+(1 - u)^(1 - k);
+
+[b, x];
+["bar", x];
+
+(y: 999,
+ hurfgh[c](x, y) := (x + y)*c,
+ hurfgh[n](4, 2*w));
+n*(2*w + 4);
+
+[c, x, y];
+["baz", x, 999];
+
+block ([L: []], for b: 10 thru 20 do push (b, L), L);
+[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10];
+
+[L, b];
+[L, "bar"];
+
+sum (b^2, b, 3, 5);
+50;
+
+b;
+"bar";
+
+product (c/2, c, 6, 8);
+42;
+
+c;
+"baz";
+
+'sum (b^2, b, 3, 5);
+'sum (b^2, b, 3, 5);
+
+b;
+"bar";
+
+'product (c/2, c, 6, 8);
+'product (c/2, c, 6, 8);
+
+c;
+"baz";
+
+block ([d, c, b, a: 111], b: 2, c: 3, a*b*c*d);
+666*d;
+
+[a, b, c, d];
+["foo", "bar", "baz", d];
+
+lambda ([c, f, g, b], (c + f)*(g + b))(x1, 1 - u, %e, %pi);
+(124 - u)*(%e + %pi);
+
+[b, c, f, g];
+["bar", "baz", f, g];
+
+lambda ([a,'b], a^b)(11, x1);
+11^x1;
+
+[a, b, x1];
+["foo", "bar", 123];
+
+lambda ([a,b,[c]], lsum(c1^2, c1, c)^(a^b))(%pi, %e, x1, y, u);
+(u^2 + 1013130)^(%pi^%e);
+
+[a, b, c, c1];
+["foo", "bar", "baz", c1];
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 22:06:54
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba (commit)
from 431b5586128ebf6bd4fe289ec3c5e86627939641 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 23:06:14 2025 +0100
Windows installer: Update SBCL.
diff --git a/crosscompile-windows/sbcl/CMakeLists.txt b/crosscompile-windows/sbcl/CMakeLists.txt
index 2672adc47..6407e5132 100644
--- a/crosscompile-windows/sbcl/CMakeLists.txt
+++ b/crosscompile-windows/sbcl/CMakeLists.txt
@@ -11,8 +11,8 @@
# updated setup-file automatically.
if(BUILD_64BIT)
- set(SBCLVERSION "2.5.10")
- set(SBCL_MD5 "a2cab608e33ba0a28aa4898e6af3e7e4")
+ set(SBCLVERSION "2.5.11")
+ set(SBCL_MD5 "8227761b167a94813e21c978dcc8e0d1")
set(SBCL_INSTALLERNAME "sbcl-${SBCLVERSION}-x86-64-windows-binary.msi")
else()
set(SBCLVERSION "2.3.2")
-----------------------------------------------------------------------
Summary of changes:
crosscompile-windows/sbcl/CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 16:05:06
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 431b5586128ebf6bd4fe289ec3c5e86627939641 (commit)
from f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 431b5586128ebf6bd4fe289ec3c5e86627939641
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 17:03:51 2025 +0100
Windows: Update TCL/TK to 9.0.3.
And remove an unknown ./configure option --disable-zipfs.
diff --git a/crosscompile-windows/tcltk/CMakeLists.txt b/crosscompile-windows/tcltk/CMakeLists.txt
index c1ffe9641..244e69f38 100644
--- a/crosscompile-windows/tcltk/CMakeLists.txt
+++ b/crosscompile-windows/tcltk/CMakeLists.txt
@@ -10,11 +10,11 @@
# If no further patches are needed, you should get a
# updated setup-file automatically.
-set(TCLVERSION "9.0.2")
-set(TKVERSION "9.0.2")
+set(TCLVERSION "9.0.3")
+set(TKVERSION "9.0.3")
-set(TCL_MD5 "5f5924db555be43ab3625dc16bf3f796")
-set(TK_MD5 "30b9e13f6dd016f672513ab03143224b")
+set(TCL_MD5 "820aeed1e4e1a89038d0302d2f839e84")
+set(TK_MD5 "72f9c4005eaaf3b9c994bda74324c28e")
set(TCL_URL "https://prdownloads.sourceforge.net/tcl/tcl${TCLVERSION}-src.tar.gz")
set(TK_URL "https://prdownloads.sourceforge.net/tcl/tk${TKVERSION}-src.tar.gz")
@@ -25,7 +25,7 @@ externalproject_add(tcl
URL "${TCL_URL}"
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads
URL_MD5 ${TCL_MD5}
- CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --disable-zipfs --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
+ CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
BUILD_COMMAND $(MAKE)
COMMAND $(MAKE) install
)
@@ -36,7 +36,7 @@ externalproject_add(tk
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads
URL_MD5 ${TK_MD5}
DEPENDS tcl
- CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tk-prefix/src/tk/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --disable-zipfs --with-tcl=${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl-build/${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}/lib --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
+ CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tk-prefix/src/tk/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --with-tcl=${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl-build/${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}/lib --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
BUILD_COMMAND $(MAKE)
COMMAND $(MAKE) install
)
-----------------------------------------------------------------------
Summary of changes:
crosscompile-windows/tcltk/CMakeLists.txt | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 15:52:48
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43 (commit)
from 405962febb9dec529a0e34e1946db47ba4db9fb7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 16:52:18 2025 +0100
Remove SCL from README-lisps.md.
diff --git a/README-lisps.md b/README-lisps.md
index dfdf7eceb..29ee8b5ff 100644
--- a/README-lisps.md
+++ b/README-lisps.md
@@ -1,8 +1,8 @@
Notes on Lisp implementations for Maxima:
=========================================
-Clisp, CMUCL, Scieneer Common Lisp (SCL), GCL (ANSI-enabled only),
-ECL, ABCL and SBCL can compile and execute Maxima.
+Clisp, CMUCL, GCL (ANSI-enabled only), ECL, ABCL and SBCL
+can compile and execute Maxima.
Allegro Common Lisp (ACL) and CCL might also work, but have not
been fully tested.
@@ -77,19 +77,6 @@ There are CMUCL implementations only for Unix-like systems
(not MS Windows).
-Scieneer Common Lisp (SCL) <https://web.archive.org/web/20171014210404/http://www.scieneer.com/scl/>
-----------------------------------------------------------------------------------------------------
-
-Scieneer Common Lisp (SCL) is a fast option for Maxima for a
-range of Linux and Unix platforms. The SCL 1.2.8 release and later
-are supported. SCL offers a lower case, case sensitive, version which
-avoids the Maxima case inversion issues with symbol names. Tested
-front end options are: Maxima emacs mode available in the
-interfaces/emacs/ directory, the Emacs imaxima mode available from
-<https://sites.google.com/site/imaximaimath/>, and TeXmacs available from
-<https://www.texmacs.org>
-
-
GCL <https://www.gnu.org/software/gcl/>
---------------------------------------
-----------------------------------------------------------------------
Summary of changes:
README-lisps.md | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 15:48:08
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 405962febb9dec529a0e34e1946db47ba4db9fb7 (commit)
from c3ccccdfe4155e2dee307791ce50af2525750035 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 405962febb9dec529a0e34e1946db47ba4db9fb7
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 16:44:03 2025 +0100
SBCL (not SCL) code was removed in commit 5e51fb89.
Already committed on the branch rtoy-remove-scl as
commit [6c6d82] - don't know why that change was not
included in the merge...
But that's SBCL - not SCL - related, that's sure.
diff --git a/configure.ac b/configure.ac
index 72e902142..abef6b000 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1429,6 +1429,14 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
+if test x"${sbcl}" = xtrue ; then
+ echo "Compiling a maxima image using \"${SBCL_NAME}\""
+ if test x"${sbcl_exec}" = xtrue ; then
+ echo "sbcl executable image enabled for maxima."
+ else
+ echo Use "--enable-sbcl-exec to build a standalone executable instead."
+ fi
+fi
if test x"${gcl}" = xtrue ; then
echo "Compiling a maxima image using \"${GCL_NAME}\""
if test x"${gcl_alt_link}" = xtrue ; then
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 8 ++++++++
1 file changed, 8 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-11-29 18:43:45
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, dodier-iterate-over-hash-tables has been updated
via f15e78140817d544ca99187da4499ea87fb89f0f (commit)
from 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f15e78140817d544ca99187da4499ea87fb89f0f
Author: Robert Dodier <rob...@so...>
Date: Sat Nov 29 10:43:06 2025 -0800
Additional tests for iterating over hash tables; one loop variable, no destructuring.
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index 531dad995..4ca02d4bf 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -253,6 +253,18 @@ true;
a: 100;
100;
+block ([L: []], for a in aa1 do push ([a[2], a[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+a;
+100;
+
+block ([L: []], for b in aa1 do push ([b[2], b[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
@@ -273,6 +285,18 @@ block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
?hash\-table\-p (aa2);
true;
+block ([L: []], for a in aa2 do push ([a[2], a[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+a;
+100;
+
+block ([L: []], for b in aa2 do push ([b[2], b[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
@@ -302,6 +326,14 @@ true;
[b, a];
[-2, 100];
+block ([L: []], for b in aa3 do push ([b[1], b[2]], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+b;
+-2;
+
block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
[[["fgh", 3*u*v, giraffe], rhino*elephant],
[["glorble", 7*x, emu], 6/cricket],
@@ -340,6 +372,12 @@ true;
(f: 199, g: 200);
200;
+block ([L: []], for g in hh1 do push ([g[2], g[1]], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+g;
+200;
+
block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
@@ -366,6 +404,14 @@ true;
0);
0;
+block ([L: []], for y in hh2 do push ([y[1], y[2]], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+y;
+y;
+
block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
[[[456, cos(w)], sin(u) - cos(v)],
[[678, "blurf"], 876 - mumble],
@@ -396,6 +442,14 @@ true;
0);
0;
+block ([L: []], for q in hh3 do push ([q[1], q[2]], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+q;
+q;
+
block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
[[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
@@ -431,6 +485,12 @@ false;
arrays;
[bb1];
+block ([L: []], for v in bb1 do push ([v[2], v[1]], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+v;
+v;
+
block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
@@ -454,6 +514,12 @@ arrays;
w: 321;
321;
+block ([L: []], for w in bb2 do push ([w[1], w[2]], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+w;
+321;
+
block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
@@ -480,6 +546,14 @@ block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
arrays;
[bb1, bb2, bb3];
+block ([L: []], for v in bb3 do push ([v[1], v[2]], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+v;
+v;
+
block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
[[[hjk, "mumble", cos(y) - x], cot(a - b)],
[[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
-----------------------------------------------------------------------
Summary of changes:
tests/rtest6.mac | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-29 15:12:42
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via c3ccccdfe4155e2dee307791ce50af2525750035 (commit)
via 8fe0ee85530ed3cdebe33153da6428dd3f432182 (commit)
via 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
via ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
from d931b3374b5d60ebfaaaafda050e042a571c881c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c3ccccdfe4155e2dee307791ce50af2525750035
Merge: d931b3374 8fe0ee855
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:12:04 2025 -0800
Merge branch 'rtoy-remove-scl'
Removed scl support from Makefiles
-----------------------------------------------------------------------
Summary of changes:
src/Makefile.am | 39 ---------------------------------------
tests/Makefile.am | 9 ---------
2 files changed, 48 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-29 15:08:28
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-highlightjs-example-maxima-blocks-texi-dev has been updated
via 72cb52f47d84cfa8a9c890868e7e77f8a9b6c67f (commit)
via 81b23f2191a6764016610ac93dbd74edba0045d1 (commit)
via c92b19a8a86c7fb1f2c7898647da045421a47083 (commit)
via d931b3374b5d60ebfaaaafda050e042a571c881c (commit)
via 5e51fb893730956af2d7664bfe4950b0c0d7e0e6 (commit)
via 9987caa266f49eb1c2af201880c5d8a5214cf961 (commit)
via 53ae7d628a859fe44f4df908245a270f502c1f97 (commit)
via 1ecb9bcc5643f302b56e5cb87de65245eefee3c7 (commit)
via 4bfce99888373c3a98f28d070b7e03136d446877 (commit)
via a4546c9094c8d35c9d59e5374285652aec63293d (commit)
via 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3 (commit)
via c380557ab485e0d5fc5b4c775216081f686214df (commit)
via bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
via 4e3369868f0e9eab00d57fb011f9c7824a93927c (commit)
via 6e49a965367ebb5410dcfa195147d433e92d0012 (commit)
via 5c0df12aadf24e0ed8bf0a9dcaf654a295fea9bf (commit)
via ac7f321aa11bfc2eb0aa98f1f9ebdd1468fc5028 (commit)
via 71ff3c56185e723a9d0bacfecdb6f96b732d99f2 (commit)
via d2edf1daed08af4ea45ddd7d1ae79604a7e15d28 (commit)
via 7b0ca10415d19903d8e65e88f3293a1ddf38f0bc (commit)
via 7f57f45cce15f7fbf3119227a6025845c110ba99 (commit)
from 6be27cc3d78d7b20357bd426a5cb73d6a4664c7f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 72cb52f47d84cfa8a9c890868e7e77f8a9b6c67f
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:07:42 2025 -0800
Add pygments.custom.css
This is the pgyments stuff that was in manual.css.
diff --git a/doc/info/pygments.custom.css b/doc/info/pygments.custom.css
new file mode 100644
index 000000000..077c3ffbd
--- /dev/null
+++ b/doc/info/pygments.custom.css
@@ -0,0 +1,32 @@
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * Pygments uses a line height of 125%, which seems too small compared
+ * to what we used to do.
+ */
+div.highlight pre {
+ line-height: normal !important;
+}
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
+.example.user-maxima {
+ overflow-x: auto
+}
+
+.highlight.pre {
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
+ */
+ line-height: normal !important;
+}
commit 81b23f2191a6764016610ac93dbd74edba0045d1
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:04:52 2025 -0800
Move pygments css from manual.css to another file
To simplify manual.css a bit, move the customatizations for pygments
to another css file (pygments.custom.css) that's loaded only if
pygments is specified. This file is included by texi2html.init.in.
Configure is updated to insert the new file into texi2html2.init.in
diff --git a/configure.ac b/configure.ac
index a72ed3276..8b8a68af8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -928,6 +928,9 @@ EOF
type="text/css"
href="pygments.dark.css"
media="(prefers-color-scheme: dark)">
+<link rel="stylesheet"
+ type="text/css"
+ href="pygments.custom.css">
EOF
)"
fi
diff --git a/doc/info/manual.css b/doc/info/manual.css
index ab87f4411..72cec2427 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -135,35 +135,3 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/*
- * CSS customizations for pygment highlighting
- */
-
-/*
- * Pygments uses a line height of 125%, which seems too small compared
- * to what we used to do.
- */
-div.highlight pre {
- line-height: normal !important;
-}
-
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
-.example.user-maxima {
- overflow-x: auto
-}
-
-.highlight.pre {
- /*
- * Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
- */
- line-height: normal !important;
-}
commit c92b19a8a86c7fb1f2c7898647da045421a47083
Merge: 6be27cc3d d931b3374
Author: Raymond Toy <toy...@gm...>
Date: Fri Nov 28 13:49:53 2025 -0800
Merge branch 'master' into rtoy-highlightjs-example-maxima-blocks-texi-dev
diff --cc doc/info/manual.css
index c65a29667,98ffcfbb4..ab87f4411
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@@ -101,14 -118,14 +118,6 @@@ div.header, div.nav-panel
padding: 3px 10px;
}
--/*
-- * Pygments uses a line height of 125%, which seems too small compared
-- * to what we used to do.
-- */
--div.highlight pre {
-- line-height: normal !important;
--}
--
/* Reduce the indentation of lists and descriptions */
ul,ol { padding-left: 1em }
dd { margin-left: 0.5em }
@@@ -125,35 -142,20 +134,28 @@@
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
- @media (prefers-color-scheme: dark) {
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
- div.textbox, div.titlebox, div.synopsisbox { color: black;}
+
+ /*
+ * CSS customizations for pygment highlighting
+ */
+
++/*
++ * Pygments uses a line height of 125%, which seems too small compared
++ * to what we used to do.
++ */
++div.highlight pre {
++ line-height: normal !important;
++}
++
+ /*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+ div.highlight {
+ background-color: var(--example-background-color) !important;
}
- /* CSS for pygment highlighting */
.example.user-maxima {
overflow-x: auto
}
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 108 +-----------------
doc/info/Bugs.texi | 6 +-
doc/info/Input.texi | 4 +-
doc/info/draw.texi | 2 +
doc/info/manual.css | 125 ++++++++-------------
doc/info/pygments.custom.css | 32 ++++++
maxima-local.in | 15 +--
.../gentran/test/compare_var_translations.mac | 81 +++++++++++++
share/contrib/gentran/test/foo-fortran.template | 20 ++++
share/contrib/gentran/test/foo-ratfor.template | 15 +++
share/draw/gnuplot.lisp | 26 ++++-
share/draw/grcommon.lisp | 3 +-
src/command-line.lisp | 3 -
src/globals.lisp | 3 +-
src/init-cl.lisp | 61 ++++++----
src/maxima-build.lisp | 3 +-
src/mload.lisp | 16 ++-
17 files changed, 292 insertions(+), 231 deletions(-)
create mode 100644 doc/info/pygments.custom.css
create mode 100644 share/contrib/gentran/test/compare_var_translations.mac
create mode 100644 share/contrib/gentran/test/foo-fortran.template
create mode 100644 share/contrib/gentran/test/foo-ratfor.template
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-11-29 07:44:47
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, dodier-iterate-over-hash-tables has been created
at 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7 (commit)
- Log -----------------------------------------------------------------
commit 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7
Author: Robert Dodier <rob...@so...>
Date: Fri Nov 28 21:17:11 2025 -0800
Extend "for" loop syntax to iterate over hash tables.
The basic syntax is: for [k, v] in hh do ...
where hh is a undeclared array, "fast" array (i.e., a hash table created
with use_fast_arrays: true), or created by make_array(hashed, ...).
[k, v] is a key/value pair. The pairs are processed in the order
of keys as returned by arrayinfo.
k is always a list, even if the hash table has only one key
and therefore the list has exactly one element.
Destructuring assignment is recognized, e.g.:
for [[k], v] in hh1 do ...
for [[k1, k2], v] in hh2 do ...
for [[k1, k2, k3], v] in hh3 do ...
where hh1, hh2, and hh3 are hash tables which have,
respectively, one, two, and three keys.
Destructuring assignment also applies to the existing loop syntax
for iterating over lists, e.g.:
for [x, y] in [[11, 12], [13, 9], [19, 29]] do ...
This is a freebie -- it would be more work to apply destructuring
assignment only to hash tables, so I let it stand.
There is one bug of which I'm aware: when destructuring assignment is
applied and one of the loop variables is restricted by an ASSIGN helper
to non-symbol values (e.g., linel, which has an ASSIGN helper to
restrict assigned values to integers), *and* the variable is unbound
in the Lisp sense (i.e., BOUNDP returns NIL) before starting the
iteration, then there is an error at the end of the iteration.
From what I can tell, there are no such variables in Maxima, and it's
not easy to create one. Such a variable can be created by Lisp
programming (to create an assignment helper and attach it via the
ASSIGN property), or the following Maxima incantation:
define_variable (foo, 1111, integer);
remvalue (foo);
foo has an ASSIGN property (created by define_variable) and it is
unbound by remvalue. Now the following loop triggers the bug:
for [foo] in [[11], [22], [33]] do print (foo);
From reading the reference manual, it appears that mode_declare plus
mode_checkp, and followed by remvalue, might also work, although it
appears mode_checkp has no effect, from what I can tell.
I will devote time to fixing the bug, but it seems like a not too
serious problem, given the obscurity of the way to trigger it.
diff --git a/src/mlisp.lisp b/src/mlisp.lisp
index e9a0bcdc0..8bdf53d20 100644
--- a/src/mlisp.lisp
+++ b/src/mlisp.lisp
@@ -448,6 +448,18 @@ is EQ to FNNAME if the latter is non-NIL."
;; option variable $errormsg is used as a local variable in a block.
(defvar *$errormsg-value* nil)
+(defun symbol-values-in (expr)
+ (if (atom expr)
+ (if (symbolp expr)
+ (if (boundp expr)
+ ;; Do not take the actual value of $errormsg. It is
+ ;; always NIL at this point, but the value which
+ ;; is stored in *$errormsg-value*.
+ (if (eq expr '$errormsg) *$errormsg-value* (symbol-value expr))
+ munbound)
+ expr)
+ (cons (car expr) (mapcar 'symbol-values-in (cdr expr)))))
+
(defun mbind-doit (lamvars fnargs fnname)
"Makes a new frame where the variables in the list LAMVARS are bound
to the corresponding elements in FNARGS. Note that these elements are
@@ -471,16 +483,9 @@ wrapper for this."
(cons (ncons fnname) lamvars))
(cons '(mlist) fnargs)))))
(let ((var (car vars)))
- (if (not (symbolp var))
+ (when (not (every 'symbolp (cdr ($listofvars var))))
(merror (intl:gettext "Only symbols can be bound; found: ~M") var))
- (let ((value (if (boundp var)
- (if (eq var '$errormsg)
- ;; Do not take the actual value of $errormsg. It is
- ;; always NIL at this point, but the value which
- ;; is stored in *$errormsg-value*.
- *$errormsg-value*
- (symbol-value var))
- munbound)))
+ (let ((value (symbol-values-in var)))
(mset var (car args))
(psetq bindlist (cons var bindlist)
mspeclist (cons value mspeclist))))))
@@ -493,7 +498,7 @@ wrapper for this."
;; At this point store the value of $errormsg in a global. The macro
;; with-$error sets the value of $errormsg to NIL, but we need the
;; actual value in the routine mbind-doit.
- (setq *$errormsg-value* $errormsg)
+ (setq *$errormsg-value* (if (boundp '$errormsg) $errormsg munbound))
(unwind-protect
(prog1
(with-$error (mbind-doit lamvars fnargs fnname))
@@ -522,13 +527,33 @@ wrapper for this."
(finish-output)
(values))
+(defun munbind-makunbound (var)
+ (makunbound var)
+ (setf $values (delete var $values :count 1 :test #'eq)))
+
(defun munbind (vars)
- (dolist (var (reverse vars))
- (cond ((eq (car mspeclist) munbound)
- (makunbound var)
- (setf $values (delete var $values :count 1 :test #'eq)))
- (t (let ((munbindp t)) (mset var (car mspeclist)))))
- (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist))))
+ (let ((foo))
+ (dolist (var (reverse vars))
+ ;; This is a bit of a mess. We should avoid assigning MUNBOUND
+ ;; and instead call MUNBIND-MAKUNBOUND, because some variables
+ ;; cannot be assigned MUNBOUND due to declarations or custom setters.
+ ;; It is easy to detect these cases when VAR is just a symbol,
+ ;; but I don't see a straightforward way to handle it when VAR is
+ ;; a nonatomic expression, so the code for the non-symbol branch
+ ;; will fail if the expression contains a symbol for which
+ ;; MUNBOUND cannot be assigned.
+ (if (symbolp var)
+ (if (eq (car mspeclist) munbound)
+ (munbind-makunbound var)
+ (mset var (car mspeclist)))
+ (progn
+ (let ((munbindp t))
+ (mset var (car mspeclist)))
+ (mapcar (lambda (x) (push x foo)) (cdr ($listofvars var)))))
+ (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist)))
+ (dolist (var foo)
+ (when (and (boundp var) (eq (symbol-value var) munbound))
+ (munbind-makunbound var)))))
;;This takes the place of something like
;; (DELETE (ASSOC (NCONS VAR) $DEPENDENCIES) $DEPENDENCIES 1)
@@ -2229,11 +2254,31 @@ wrapper for this."
(merror (intl:gettext "do loop: illegal 'return': ~M") (car val)))
(t (return (car val))))))))
+(defun key-value-pairs-given-key-lists (x key-lists)
+ (mapcar (lambda (l) (list '(mlist) l (mfuncall '$arrayapply x l))) key-lists))
+
+(defun key-value-pairs-for-hashed-array (x)
+ (let*
+ ((1-d-hash-table (gethash 'dim1 x))
+ (info (mfuncall '$arrayinfo x))
+ (keys-raw (cdddr info))
+ (key-lists (if 1-d-hash-table (mapcar (lambda (y) (cons '(mlist) (list y))) keys-raw) keys-raw)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
+(defun key-value-pairs-for-undeclared-array (x)
+ (let*
+ ((info (mfuncall '$arrayinfo x))
+ (key-lists (cdddr info)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
(defmspec mdoin (form)
(setq form (cdr form))
(funcall #'(lambda (mdop my-var set test action)
(setq set (if ($atom (setq set (format1 (meval (cadr form)))))
- (merror (intl:gettext "do loop: 'in' argument must be a nonatomic expression; found: ~M") set)
+ (cond
+ ((hash-table-p set) (key-value-pairs-for-hashed-array set))
+ ((safe-mget set 'hashar) (key-value-pairs-for-undeclared-array set))
+ (t (merror (intl:gettext "do loop: atomic 'in' argument must be a hashed or undeclared array; found: ~M") set)))
(margs set))
test (list '(mor)
(if (car (cddddr form))
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index ac4fe99c1..531dad995 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -228,3 +228,370 @@ chain weld bucket;
subst (f = "foo", f(x));
foo(x);
+
+/* tests for iterating over hash tables
+ * verify both value hash tables ("fast arrays" or created by make_array)
+ * and named hash tables ("undeclared arrays").
+ */
+
+kill (all);
+done;
+
+/* value hash tables: "fast arrays" */
+
+use_fast_arrays: true;
+true;
+
+/* one key */
+
+(aa1["baz"]: 333, aa1["bar"]: 222, aa1["quux"]: 444, aa1["foo"]: 111, 0);
+0;
+
+?hash\-table\-p (aa1);
+true;
+
+a: 100;
+100;
+
+block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+[a, b];
+[100, b];
+
+block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
+[[111, "foo"], [222, "bar"], [333, "baz"], [444, "quux"]];
+
+[a, b];
+[100, b];
+
+/* two keys */
+
+(aa2[xx, 99]: %pi, aa2[cc, 1099]: %phi, aa2[jj, 543]: %e, 0);
+0;
+
+?hash\-table\-p (aa2);
+true;
+
+block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+[a, b];
+[100, b];
+
+(a2: 300, b: -2);
+-2;
+
+block ([L: []], for [[a1, a2], b] in aa2 do push ([b, a2, a1], L), sort (L));
+[[%e, 543, jj], [%phi, 1099, cc], [%pi, 99, xx]];
+
+[a1, a2, b];
+[a1, 300, -2];
+
+/* three keys */
+
+(aa3["mno", "pqr", 1 - 2*u]: bessel_j (2, 1 - sqrt(x)),
+ aa3["fgh", 3*u*v, giraffe]: rhino*elephant,
+ aa3["glorble", 7*x, emu]: 6/cricket,
+ 0);
+0;
+
+?hash\-table\-p (aa3);
+true;
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [[a1, a2, b], a] in aa3 do push ([a1, a2, b, a], L), sort (L));
+[["fgh", 3*u*v, giraffe, rhino*elephant],
+ ["glorble", 7*x, emu, 6/cricket],
+ ["mno", "pqr", 1 - 2*u, bessel_j (2, 1 - sqrt(x))]];
+
+[a1, a2, b, a];
+[a1, 300, -2, 100];
+
+arrays;
+[];
+
+(reset (use_fast_arrays), kill (all));
+done;
+
+/* value hash tables: created by make_array */
+
+/* one key */
+
+(hh1: make_array (hashed, 1), 0);
+0;
+
+?hash\-table\-p (hh1);
+true;
+
+(hh1[1 + x]: sin(z), hh1[3 - y]: cos(w), hh1[1/(1 + z)]: tan(x), 0);
+0;
+
+(f: 199, g: 200);
+200;
+
+block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+[f, g];
+[199, 200];
+
+block ([L: []], for [[f], g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), 3 - y], [tan(x), 1/(1 + z)], [sin(z), 1 + x]];
+
+[f, g];
+[199, 200];
+
+/* two keys */
+
+(hh2: make_array (hashed, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh2);
+true;
+
+(hh2[678, "blurf"]: 876 - mumble,
+ hh2[987, "sdf"]: 777*zxy,
+ hh2[456, cos(w)]: sin(u) - cos(v),
+ 0);
+0;
+
+block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+[x, y];
+[x, y];
+
+block ([L: []], for [[x1, x2], y] in hh2 do push ([x1, x2, y], L), sort (L));
+[[456, cos(w), sin(u) - cos(v)],
+ [678, "blurf", 876 - mumble],
+ [987, "sdf", 777*zxy]];
+
+[x1, x2, y];
+[x1, x2, y];
+
+/* three keys */
+
+(hh3: make_array (hashed, 1, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh3);
+true;
+
+(hh3[hgf, fds, jhg]: cos(trwq),
+ hh3[asdfg, 1 - rewq, 2*treww]: sin(poiur) - cos(kjghds),
+ hh3[ewq, 2 - jdssaaq, 3*cxmmz]: sqrt(ytre),
+ 0);
+0;
+
+block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+[p, q];
+[p, q];
+
+block ([L: []], for [[p1, p2, p3], q] in hh3 do push ([p1, p2, p3, q], L), sort (L));
+[[asdfg, 1 - rewq, 2*treww, sin(poiur) - cos(kjghds)],
+ [ewq, 2 - jdssaaq, 3*cxmmz, sqrt(ytre)],
+ [hgf, fds, jhg, cos(trwq)]];
+
+[p1, p2, p3, q];
+[p1, p2, p3, q];
+
+arrays;
+[];
+
+kill (all);
+done;
+
+/* named hash tables: "undeclared arrays" */
+
+/* one key */
+
+(bb1["mumble"]: 123, bb1["blarf"]: 234, bb1["blurf"]: 999, bb1["blarg"]: 345, 0);
+0;
+
+?hash\-table\-p (bb1);
+false;
+
+arrays;
+[bb1];
+
+block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+[u, v];
+[u, v];
+
+block ([L: []], for [[u], v] in bb1 do push ([v, u], L), sort (L));
+[[123, "mumble"], [234, "blarf"], [345, "blarg"], [999, "blurf"]];
+
+[u, v];
+[u, v];
+
+/* two keys */
+
+(bb2["pqr", 1 + %pi]: sin(k*%pi), bb2["zxy", 2*%pi]: cos(m*%pi), bb2["hgfedc", 3 - blurf]: tan(n*%pi), 0);
+0;
+
+arrays;
+[bb1, bb2];
+
+w: 321;
+321;
+
+block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+[v, w];
+[v, 321];
+
+v2: 432;
+432;
+
+block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
+[["hgfedc", 3 - blurf, tan(n*%pi)], ["pqr", 1 + %pi, sin(k*%pi)], ["zxy", 2*%pi, cos(m*%pi)]];
+
+[v1,v2, w];
+[v1, 432, 321];
+
+/* three keys */
+
+(bb3[zxy, "blah", cos(a) + cos(b)]: tan(a + b),
+ bb3[hjk, "mumble", cos(y) - x]: cot(a - b),
+ bb3[uvw, "qwerty", foo(z) + q]: sec(2*b - a),
+ 0);
+0;
+
+arrays;
+[bb1, bb2, bb3];
+
+block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+[w, v];
+[321, v];
+
+block ([L: []], for [[v1, v2, w], v] in bb3 do push ([v1, v2, w, v], L), sort (L));
+[[hjk, "mumble", cos(y) - x, cot(a - b)],
+ [uvw, "qwerty", foo(z) + q, sec(2*b - a)],
+ [zxy, "blah", cos(a) + cos(b), tan(a + b)]];
+
+
+[v1, v2, w, v];
+[v1, 432, 321, v];
+
+/* additional tests for MUNBIND */
+
+kill (all);
+done;
+
+(a: "foo", b: "bar", c: "baz", 0);
+0;
+
+(blurf (a, b, c, d, e, f) := (a + b + c)*(d + e + f),
+ blurf (1, 2, 3, 4, 5, 6));
+90;
+
+[a, b, c, d, e, f];
+["foo", "bar", "baz", d, e, f];
+
+(x1: 123,
+ mumble (a, b, [L]) := (a + b) * lsum (x1, x1, L),
+ mumble (7, 8, 9, 10, 11));
+450;
+
+[a, b, L, x1];
+["foo", "bar", L, 123];
+
+(harrumph (b, 'c, d) := b*c*d,
+ harrumph (111, x1, %pi));
+111*x1*%pi;
+
+[b, c, d];
+["bar", "baz", d];
+
+(blarg[x, b] := x^b,
+ blarg[1 - u, 1 - k]);
+(1 - u)^(1 - k);
+
+[b, x];
+["bar", x];
+
+(y: 999,
+ hurfgh[c](x, y) := (x + y)*c,
+ hurfgh[n](4, 2*w));
+n*(2*w + 4);
+
+[c, x, y];
+["baz", x, 999];
+
+block ([L: []], for b: 10 thru 20 do push (b, L), L);
+[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10];
+
+[L, b];
+[L, "bar"];
+
+sum (b^2, b, 3, 5);
+50;
+
+b;
+"bar";
+
+product (c/2, c, 6, 8);
+42;
+
+c;
+"baz";
+
+'sum (b^2, b, 3, 5);
+'sum (b^2, b, 3, 5);
+
+b;
+"bar";
+
+'product (c/2, c, 6, 8);
+'product (c/2, c, 6, 8);
+
+c;
+"baz";
+
+block ([d, c, b, a: 111], b: 2, c: 3, a*b*c*d);
+666*d;
+
+[a, b, c, d];
+["foo", "bar", "baz", d];
+
+lambda ([c, f, g, b], (c + f)*(g + b))(x1, 1 - u, %e, %pi);
+(124 - u)*(%e + %pi);
+
+[b, c, f, g];
+["bar", "baz", f, g];
+
+lambda ([a,'b], a^b)(11, x1);
+11^x1;
+
+[a, b, x1];
+["foo", "bar", 123];
+
+lambda ([a,b,[c]], lsum(c1^2, c1, c)^(a^b))(%pi, %e, x1, y, u);
+(u^2 + 1013130)^(%pi^%e);
+
+[a, b, c, c1];
+["foo", "bar", "baz", c1];
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-28 21:44:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via d931b3374b5d60ebfaaaafda050e042a571c881c (commit)
via 5e51fb893730956af2d7664bfe4950b0c0d7e0e6 (commit)
via 9987caa266f49eb1c2af201880c5d8a5214cf961 (commit)
via 53ae7d628a859fe44f4df908245a270f502c1f97 (commit)
via 1ecb9bcc5643f302b56e5cb87de65245eefee3c7 (commit)
via 4bfce99888373c3a98f28d070b7e03136d446877 (commit)
from a4546c9094c8d35c9d59e5374285652aec63293d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d931b3374b5d60ebfaaaafda050e042a571c881c
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:27:46 2025 -0800
Remove SCL conditionals
Just removed some of the simpler cases with SCL conditionals. There
are many, many more.
diff --git a/src/command-line.lisp b/src/command-line.lisp
index 16eb423fb..9c7413dff 100644
--- a/src/command-line.lisp
+++ b/src/command-line.lisp
@@ -166,9 +166,6 @@
ext::*command-line-application-arguments*
(rest ext:*command-line-strings*))
- #+scl
- (rest ext:*command-line-strings*)
-
#+sbcl
(rest sb-ext:*posix-argv*)
diff --git a/src/globals.lisp b/src/globals.lisp
index 322961fdb..76644e4d4 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -1692,7 +1692,6 @@
(defvar *maxima-lispname*
#+clisp "clisp"
#+cmu "cmucl"
- #+scl "scl"
#+sbcl "sbcl"
#+gcl "gcl"
#+allegro "acl"
@@ -1700,7 +1699,7 @@
#+abcl "abcl"
#+lispworks "lispworks"
#+ecl "ecl"
- #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
+ #-(or clisp cmu sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
;;; Locations of various types of files. These variables are discussed
;;; in more detail in the file doc/implementation/dir_vars.txt. Since
diff --git a/src/maxima-build.lisp b/src/maxima-build.lisp
index 817f2dcec..3376886ad 100644
--- a/src/maxima-build.lisp
+++ b/src/maxima-build.lisp
@@ -23,11 +23,10 @@
#+sbcl (sb-ext:save-lisp-and-die "binary-sbcl/maxima.core" :toplevel (symbol-function 'cl-user::run))
#+gcl (si:save-system "binary-gcl/maxima")
#+cmu (extensions:save-lisp "binary-cmucl/maxima.core" :init-function 'cl-user::run)
- #+scl (extensions:save-lisp "binary-scl/maxima.core" :init-function 'cl-user::run)
#+allegro (excl:dumplisp :name "binary-acl/maxima.dxl")
#+lispworks (hcl:save-image "binary-lispworks/maxima" :restart-function 'cl-user::run)
#+(and openmcl (not 64-bit-target)) (ccl:save-application "binary-openmcl/maxima" :toplevel-function 'cl-user::run)
#+(and openmcl 64-bit-target) (ccl:save-application "binary-ccl64/maxima" :toplevel-function 'cl-user::run)
- #-(or clisp sbcl gcl cmu scl allegro lispworks ccl)
+ #-(or clisp sbcl gcl cmu allegro lispworks ccl)
(format t "Sorry, I don't know how to dump an image on this Lisp"))
commit 5e51fb893730956af2d7664bfe4950b0c0d7e0e6
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:21:02 2025 -0800
Remove support for scl in configure.ac
Scl has not been available for a long time now. Remove support for
scl from configure.ac.
diff --git a/configure.ac b/configure.ac
index 310fb7070..72e902142 100644
--- a/configure.ac
+++ b/configure.ac
@@ -260,58 +260,6 @@ if test x"${cmucl}" = xtrue ; then
fi
fi
-dnl n.b. scl_default_name is hardcoded in "with" message
-scl_default_name=scl
-SCL_RUNTIME=lisp
-AC_ARG_ENABLE(scl,
- [AS_HELP_STRING([--enable-scl],
- [Use SCL])],
- [case "${enableval}" in
- yes) scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true ;;
- no) scl=false ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --enable-scl) ;;
- esac
- explicit_lisp=true],
- [scl=false])
-AC_ARG_WITH(scl,
- [AS_HELP_STRING([--with-scl=<prog>],
- [Use SCL executable <prog> (default scl)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true
- if test "$withval" = "yes"; then
- SCL_NAME="${scl_default_name}"
- else
- SCL_NAME="$withval"
- fi],
- [SCL_NAME=${scl_default_name}])
-AC_ARG_WITH(scl-runtime,
- [AS_HELP_STRING([--with-scl-runtime=<path>],
- [Use SCL runtime <path> (default
- file://library/../bin/lisp)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- SCL_RUNTIME_PATH="$withval"
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`],
- [])
-if test x"${scl}" = xtrue ; then
- if test `echo "$SCL_NAME" | sed 's/\(.\).*/\1/'` = "/" ; then
- if test -x "$SCL_NAME" ; then
- scl_found=true
- else
- scl_found=false
- fi
- else
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- fi
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- if test x"${scl_found}" = xfalse ; then
- AC_MSG_WARN(scl executable ${SCL_NAME} not found in PATH)
- fi
-fi
-
dnl n.b. sbcl_default_name is hardcoded in "with" message
sbcl_default_name=sbcl
AC_ARG_ENABLE(sbcl,
@@ -1027,7 +975,6 @@ if test x"${explicit_lisp}" = xfalse ; then
AC_CHECK_PROG(clisp_found,${clisp_default_name},true,false)
AC_CHECK_PROG(gcl_found,${gcl_default_name},true,false)
AC_CHECK_PROG(cmucl_found,$CMUCL_NAME,true,false)
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
AC_CHECK_PROG(sbcl_found,$SBCL_NAME,true,false)
AC_CHECK_PROG(acl_found,$ACL_NAME,true,false)
AC_CHECK_PROG(openmcl_found,$OPENMCL_NAME,true,false)
@@ -1046,10 +993,6 @@ if test x"${explicit_lisp}" = xfalse ; then
cmucl=true
lisps_enabled="${lisps_enabled} cmucl"
fi
- if test x"${scl_found}" = xtrue ; then
- scl=true
- lisps_enabled="${lisps_enabled} scl"
- fi
if test x"${sbcl_found}" = xtrue ; then
sbcl=true
lisps_enabled="${lisps_enabled} sbcl"
@@ -1063,7 +1006,7 @@ if test x"${explicit_lisp}" = xfalse ; then
lisps_enabled="${lisps_enabled} ecl"
fi
if test x"${lisps_enabled}" = x; then
- AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${scl_default_name}(SCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
+ AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
fi
fi
@@ -1073,7 +1016,6 @@ AM_CONDITIONAL(CLISP_EXEC, test x$clisp_exec = xtrue)
AM_CONDITIONAL(GCL, test x$gcl = xtrue)
AM_CONDITIONAL(CMUCL, test x$cmucl = xtrue)
AM_CONDITIONAL(CMUCL_EXEC, test x${cmucl_exec} = xtrue)
-AM_CONDITIONAL(SCL, test x$scl = xtrue)
AM_CONDITIONAL(SBCL, test x$sbcl = xtrue)
AM_CONDITIONAL(SBCL_EXEC, test x$sbcl_exec = xtrue)
AM_CONDITIONAL(ACL, test x$acl = xtrue)
@@ -1137,30 +1079,6 @@ flag.)
fi
fi
-if test x"${scl}" = xtrue; then
- if test x"${SCL_RUNTIME_PATH}" = x"" ; then
- SCL_RUNTIME_PATH=`${SCL_NAME} -noinit -nositeinit -quiet -batch -eval '(progn (enumerate-pathname-translations (pathname "file://library/../bin/lisp") (when (probe-file pathname) (format t "~A~%" (unix-namestring pathname)))) (quit))'`
- fi
- if test -x "${SCL_RUNTIME_PATH}" ; then
- echo "scl runtime is \"${SCL_RUNTIME_PATH}\""
- else
-dnl last chance: find SCL_NAME in path. Use it if it doesn't appear to
-dnl be a shell script.
- scl_path=`type -p "${SCL_NAME}"`
- if test x"`grep -c '#!.*bin.*sh.*' ${scl_path}`" = x"0" ; then
- SCL_RUNTIME_PATH="${scl_path}"
- else
- AC_MSG_ERROR([Unable to determine SCL runtime path.
-The best guess for SCL runtime, "${SCL_RUNTIME_PATH}", is not
-an executable. Use the argument
- --with-scl-runtime=<path>
-to set the actual SCL executable. If the SCL lisp command is a shell
-script the SCL executable is the program exec'd by that shell script.])
- fi
- fi
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`
-fi
-
if test x"${gcl}" = xtrue; then
AC_MSG_CHECKING([if gcl version >= 2.6.14])
dnl Check gcl version
@@ -1227,13 +1145,6 @@ AC_ARG_WITH(default-lisp,
AC_MSG_ERROR(cmucl not enabled)
fi
;;
- scl)
- if test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
- else
- AC_MSG_ERROR(scl not enabled)
- fi
- ;;
sbcl)
if test x"${sbcl}" = xtrue ; then
DEFAULTLISP=sbcl
@@ -1291,8 +1202,6 @@ AC_ARG_WITH(default-lisp,
DEFAULTLISP=sbcl
elif test x"${cmucl}" = xtrue ; then
DEFAULTLISP=cmucl
- elif test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
elif test x"${clisp}" = xtrue ; then
DEFAULTLISP=clisp
elif test x"${gcl}" = xtrue ; then
@@ -1520,18 +1429,6 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
-if test x"${scl}" = xtrue ; then
- echo "SCL enabled, using \"${SCL_NAME}\""
- echo "SCL runtime is \"${SCL_RUNTIME_PATH}\""
-fi
-if test x"${sbcl}" = xtrue ; then
- echo "Compiling a maxima image using \"${SBCL_NAME}\""
- if test x"${sbcl_exec}" = xtrue ; then
- echo "sbcl executable image enabled for maxima."
- else
- echo Use "--enable-sbcl-exec to build a standalone executable instead."
- fi
-fi
if test x"${gcl}" = xtrue ; then
echo "Compiling a maxima image using \"${GCL_NAME}\""
if test x"${gcl_alt_link}" = xtrue ; then
commit 9987caa266f49eb1c2af201880c5d8a5214cf961
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 07:03:19 2025 -0800
Move pygment CSS stuff together
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 016c5978f..98ffcfbb4 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -93,15 +93,6 @@ pre.example, pre.example-preformatted {
overflow: auto;
}
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
@@ -152,14 +143,27 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/* CSS for pygment highlighting */
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
.example.user-maxima {
overflow-x: auto
}
.highlight.pre {
- /* Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
*/
line-height: normal !important;
}
commit 53ae7d628a859fe44f4df908245a270f502c1f97
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:58:54 2025 -0800
Remove @media dark mode CSS that's not used anymore
This has all been replaced with variables for dark-mode colors, so
this @media isn't used. Remove it.
Also add a comment about div.textbox and friends apparently not being
used anywhere. We comment them out for now, but they should
eventually be removed if not used.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 22b096742..016c5978f 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -61,6 +61,11 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
+ * What are these used for? I (rtoy) can't find these anywhere.
+ * Commenting these out for now, but they should be removed if they're
+ * not really used anywhere.
+ */
/*
div.textbox {
border: solid;
@@ -78,6 +83,7 @@ div.synopsisbox {
background: var(--div-synopsisbox-background-color);
}
*/
+
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
@@ -145,38 +151,6 @@ dd { margin-left: 0.5em }
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
-@media (prefers-color-scheme: dark) {
-/*
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
-*/
-/*
- div.textbox, div.titlebox, div.synopsisbox {
- color: var(--div-titlebox-background-color);}
-*/
-}
/* CSS for pygment highlighting */
.example.user-maxima {
commit 1ecb9bcc5643f302b56e5cb87de65245eefee3c7
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:46:31 2025 -0800
Comment out CSS for textbox, titlebox, and synposisbox
These don't seem to be used anywhere so comment them out.
Also do some minor cleanups and add some comments.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 2947b0145..22b096742 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,7 +1,7 @@
-/* Define variable for background color for examples */
+/* Define colors for light and dark mode */
:root {
/* Default light mode colors */
- --background-color: #ffffff; /* White background */
+ --background-color: white;
--text-color: black;
--example-background-color: rgb(238,238,255);
--link-color: #00f;
@@ -61,6 +61,7 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
div.textbox {
border: solid;
border-width: thin;
@@ -76,6 +77,7 @@ div.synopsisbox {
padding-top: 1em 2em;
background: var(--div-synopsisbox-background-color);
}
+*/
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
commit 4bfce99888373c3a98f28d070b7e03136d446877
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:15:11 2025 -0800
Use CSS variables to set the colors for light and dark mode
Instead of having a completely separate @media section for dark mode,
use variables to define the colors for light and dark modes.
This makes the CSS file smaller and hopefully, it will be easier set
colors for the different modes since all the info is in basically one
place instead of duplicating all the different elements into a
separate @media for dark mode.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 674e23ae7..2947b0145 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,10 +1,36 @@
/* Define variable for background color for examples */
:root {
+ /* Default light mode colors */
+ --background-color: #ffffff; /* White background */
+ --text-color: black;
--example-background-color: rgb(238,238,255);
+ --link-color: #00f;
+ --link-visited-color: #a0a;
+ --hover-background-color: #555753;
+ --hover-color: #cdf;
+ --nav-panel-background-color: #CDCCDD;
+ --div-titlebox-background-color: rgb(200,255,255);
+ --div-synopsisbox-backgraound-color: rgb(255,220,255);
+ --pre-example-border: 1px solid rgb(180,180,180);
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #fdf6e3;
}
@media (prefers-color-scheme: dark) {
:root {
+ /* Dark Mode Overrides */
+ --background-color: #444;
+ --text-color: #eee;
--example-background-color: #aab;
+ --link-color: #9df;
+ --link-visited-color: #9fd;
+ --hover-background-color: #ddd;
+ --hover-color: #55f;
+ --nav-panel-background-color: #555;
+ --div-titlebox-background-color: black;
+ --div-synopsisbox-backgraound-color: black;
+ --pre-example-border: 1px solid black;
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #544;
}
}
@@ -17,8 +43,8 @@ div.example {
/* end of overrides */
body {
- color: black;
- background: white;
+ color: var(--text-color);
+ background: var(--background-color);
margin-left: 5px;
margin-right: 5px;
font-family: Arial, Verdana, Helvetica, sans-serif
@@ -28,12 +54,12 @@ h2 { font-size: 125% }
h3 { font-size: 110% }
a:link {
text-decoration: none;
- color: #00f
+ color: var(--link-color);
}
-a:visited {color: #a0a }
+a:visited {color: var(--link-visited-color) }
a:hover, span.button:hover {
- background-color: #555753;
- color: #cdf;
+ background-color: var(--hover-background-color);
+ color: var(--hover-color);
}
div.textbox {
border: solid;
@@ -43,15 +69,16 @@ div.textbox {
div.titlebox {
border: none;
padding-top: 1em 2em;
- background: rgb(200,255,255)
+ background: var(--div-titlebox-background-color);
}
div.synopsisbox {
border: none;
padding-top: 1em 2em;
- background: rgb(255,220,255)
+ background: var(--div-synopsisbox-background-color);
}
pre.example, pre.example-preformatted {
- border: 1px solid rgb(180,180,180);
+ border: var(--pre-example-border);
+ color: var(--text-color);
padding: 5px;
background-color: var(--example-background-color);
/* Add scrollbar for examples for narrow windows */
@@ -70,9 +97,9 @@ div.highlight {
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
- border: 1px solid gray;
+ border: var(--div-categorybox-border);
padding: 1em;
- background: #fdf6e3
+ background: var(--div-categorybox-background-color);
}
img {
max-width:80%;
@@ -88,7 +115,7 @@ tt, code { font-family: "Courier New", "DejaVu Sans Mono", monospace }
* Texinfo 7.1 and later uses div.nav-panel. 6.8 uses div.header.
*/
div.header, div.nav-panel {
- background-color: #CDCCDD;
+ background-color: var(--nav-panel-background-color);
padding: 3px 10px;
}
@@ -117,6 +144,7 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
@media (prefers-color-scheme: dark) {
+/*
body {
background: #444;
color: #eee
@@ -141,7 +169,11 @@ dd { margin-left: 0.5em }
background-color: var(--example-background-color) !important;
}
div.categorybox { background-color: #544 }
- div.textbox, div.titlebox, div.synopsisbox { color: black;}
+*/
+/*
+ div.textbox, div.titlebox, div.synopsisbox {
+ color: var(--div-titlebox-background-color);}
+*/
}
/* CSS for pygment highlighting */
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 105 +---------------------------------------------
doc/info/manual.css | 114 ++++++++++++++++++++++++++++----------------------
src/command-line.lisp | 3 --
src/globals.lisp | 3 +-
src/maxima-build.lisp | 3 +-
5 files changed, 66 insertions(+), 162 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-27 22:56:57
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-manual-css-more-vars has been updated
via 1a50e6fa3d066e3952933c9558a0bae6e67c5586 (commit)
via c0d34bc2c6d906b84786284345b9c8717fa87d54 (commit)
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
via ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
via c380557ab485e0d5fc5b4c775216081f686214df (commit)
via bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
from d9e825f93c06d0092373599bc7e9836b316f9af2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 1a50e6fa3d066e3952933c9558a0bae6e67c5586
Merge: d9e825f93 c0d34bc2c
Author: Raymond Toy <toy...@gm...>
Date: Thu Nov 27 14:56:35 2025 -0800
Merge branch 'master' into rtoy-manual-css-more-vars
commit c0d34bc2c6d906b84786284345b9c8717fa87d54
Merge: c380557ab 015e5cc90
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:55:17 2025 -0800
Merge branch 'rtoy-remove-scl'
This removes scl support from configure.ac and a few other places.
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 105 +--------------------
doc/info/Bugs.texi | 6 +-
doc/info/Input.texi | 4 +-
.../gentran/test/compare_var_translations.mac | 81 ++++++++++++++++
share/contrib/gentran/test/foo-fortran.template | 20 ++++
share/contrib/gentran/test/foo-ratfor.template | 15 +++
src/command-line.lisp | 3 -
src/globals.lisp | 3 +-
src/maxima-build.lisp | 3 +-
9 files changed, 124 insertions(+), 116 deletions(-)
create mode 100644 share/contrib/gentran/test/compare_var_translations.mac
create mode 100644 share/contrib/gentran/test/foo-fortran.template
create mode 100644 share/contrib/gentran/test/foo-ratfor.template
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-27 20:35:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-scl has been updated
via 8fe0ee85530ed3cdebe33153da6428dd3f432182 (commit)
from 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8fe0ee85530ed3cdebe33153da6428dd3f432182
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Nov 27 21:34:58 2025 +0100
Remove SCL code from src/Makefile.am and tests/Makefile.am.
Now ./bootstrap works without errors.
diff --git a/src/Makefile.am b/src/Makefile.am
index 2e878b950..1d8920956 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -197,45 +197,6 @@ clean-cmucl:
rm -rf binary-cmucl
CLEAN_TARGETS += clean-cmucl
-## SCL #########################################################################
-if SCL
-
-scllibdir = $(verpkglibdir)/binary-scl
-
-EXECUTESCL = $(SCL_NAME) -noinit -batch
-BUILT_FILES += binary-scl/maxima.core
-scllib_DATA = binary-scl/maxima.core
-
-scl: binary-scl/maxima.core
-
-binary-scl/maxima.core:
- $(MAKE) bd
- (echo '$(QUIET) $(LOADDEFSYSTEM) $(DEFSYSTEMCOMPILE)' | $(EXECUTESCL)) && \
- (echo '$(LOADDEFSYSTEM) $(DEFSYSTEMLOAD) (ext:save-lisp "binary-scl/maxima.core")' | $(EXECUTESCL))
-
-## Just like with clisp, we install an extra copy of SCL. No, I don't
-## understand either. Also, I just read the SCL license agreement. Is
-## the user even allowed to do this?!
-WEIRD_INSTALL_TARGETS += install-scl-copy
-WEIRD_UNINSTALL_TARGETS += uninstall-scl-copy
-install-scl-copy:
- $(mkinstalldirs) $(DESTDIR)$(scllibdir)
- $(INSTALL_PROGRAM) @SCL_RUNTIME_PATH@ "$(DESTDIR)$(scllibdir)/@SCL_RUNTIME@"
-uninstall-scl-copy:
- rm -f "$(DESTDIR)$(scllibdir)/@SCL_RUNTIME@"
-
-scl-depends.mk: maxima.system Makefile *.lisp
- echo $(call MAKE_DEPENDS,"binary-scl/maxima.core",scl-depends.mk.tmp) | $(EXECUTESCL)
- sed -e "s#\\\\#/#g" < scl-depends.mk.tmp > scl-depends.mk
-
--include scl-depends.mk
-
-endif
-
-clean-scl:
- rm -rf binary-scl
-CLEAN_TARGETS += clean-scl
-
## ACL #########################################################################
if ACL
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ebbeae3bd..df509f300 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -24,15 +24,6 @@ cmucl-test.sh: test.sh Makefile
chmod +x "$@"
endif
-if SCL
-TESTS += scl-test.sh
-CLEANFILES += scl-test.sh scl.log scl_share.log
-scl-test.sh: test.sh Makefile
- echo "#!/bin/sh" > $@
- echo "./test.sh scl" >> $@
- chmod +x "$@"
-endif
-
if SBCL
TESTS += sbcl-test.sh
CLEANFILES += sbcl-test.sh sbcl.log sbcl_share.log
-----------------------------------------------------------------------
Summary of changes:
src/Makefile.am | 39 ---------------------------------------
tests/Makefile.am | 9 ---------
2 files changed, 48 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-27 20:30:46
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-scl has been updated
via 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
from 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6c6d825bdf4fad8235ccc790b5e1e47f41109a75
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Nov 27 21:28:49 2025 +0100
SBCL (not SCL) code was removed in commit ea4518bc2.
diff --git a/configure.ac b/configure.ac
index 72e902142..abef6b000 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1429,6 +1429,14 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
+if test x"${sbcl}" = xtrue ; then
+ echo "Compiling a maxima image using \"${SBCL_NAME}\""
+ if test x"${sbcl_exec}" = xtrue ; then
+ echo "sbcl executable image enabled for maxima."
+ else
+ echo Use "--enable-sbcl-exec to build a standalone executable instead."
+ fi
+fi
if test x"${gcl}" = xtrue ; then
echo "Compiling a maxima image using \"${GCL_NAME}\""
if test x"${gcl_alt_link}" = xtrue ; then
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 8 ++++++++
1 file changed, 8 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: l_butler <l_b...@us...> - 2025-11-27 18:34:27
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via a4546c9094c8d35c9d59e5374285652aec63293d (commit)
via 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3 (commit)
from c380557ab485e0d5fc5b4c775216081f686214df (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a4546c9094c8d35c9d59e5374285652aec63293d
Author: Atri Bhattacharya <bad...@op...>
Date: Thu Nov 27 12:27:25 2025 -0600
Draw: add support for standalone cairolatex pdf terminal.
Part 2 of 2.
Patch supplied by Atri Bhattacharya <bad...@op...>.
Includes update to documentation.
Ref: https://sourceforge.net/p/maxima/mailman/message/59265356
diff --git a/doc/info/draw.texi b/doc/info/draw.texi
index bdd888d17..0929c79dd 100644
--- a/doc/info/draw.texi
+++ b/doc/info/draw.texi
@@ -1129,6 +1129,7 @@ points in each direction. If they are not integers, they are rounded.
With terminals @code{eps}, @code{epslatex}, @code{epslatex_standalone},
@code{eps_color}, @code{multipage_eps}, @code{multipage_eps_color},
+@code{cairolatex_pdf}, @code{cairolatex_pdf_standalone},
@code{pdf}, @code{multipage_pdf}, @code{pdfcairo},
@code{multipage_pdfcairo}, @code{tikz}, and @code{tikz_standalone}, both
numbers represent hundredths of cm, which means that, by default,
@@ -2726,6 +2727,7 @@ Default value: @code{screen}
Selects the terminal to be used by Gnuplot; possible values are:
@code{screen} (default), @code{png}, @code{pngcairo}, @code{jpg}, @code{gif},
+@code{cairolatex_pdf}, @code{cairolatex_pdf_standalone},
@code{eps}, @code{eps_color}, @code{epslatex}, @code{epslatex_standalone},
@code{svg}, @code{canvas}, @code{dumb}, @code{dumb_file}, @code{pdf}, @code{pdfcairo},
@code{wxt}, @code{animated_gif}, @code{multipage_pdfcairo}, @code{multipage_pdf},
diff --git a/share/draw/gnuplot.lisp b/share/draw/gnuplot.lisp
index 831b5715c..f35129912 100644
--- a/share/draw/gnuplot.lisp
+++ b/share/draw/gnuplot.lisp
@@ -1,7 +1,7 @@
;;; COPYRIGHT NOTICE
;;;
;;; Copyright (C) 2007-2016 Mario Rodriguez Riotorto
-;;; Time-stamp: "2025-11-27 12:22:21 Leo Butler"
+;;; Time-stamp: "2025-11-27 12:27:02 Leo Butler"
;;;
;;; This program is free software; you can redistribute
;;; it and/or modify it under the terms of the
@@ -2857,7 +2857,7 @@
(setf plotcmd
(concatenate 'string
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf)))
+ (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf $cairolatex_pdf_standalone)))
(format nil "set obj 1 fc rgb '~a' fs solid 1.0 noborder ~%"
(get-option '$background_color)) )
(if (equal (get-option '$proportional_axes) '$none)
@@ -3344,6 +3344,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name)))
+ ($cairolatex_pdf_standalone (format cmdstorage "set terminal cairolatex pdf standalone ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
(($pdf $multipage_pdf) (format cmdstorage "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
@@ -3488,7 +3493,7 @@
(format cmdstorage "~%set size ~a, ~a~%" size1 size2)
(format cmdstorage "set origin ~a, ~a~%" origin1 origin2)
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf)))
+ (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf $cairolatex_pdf_standalone)))
(format cmdstorage "set obj 1 rectangle behind from screen ~a,~a to screen ~a,~a~%"
origin1 origin2 (+ origin1 size1 ) (+ origin2 size2))) ))
(setf is1stobj t
@@ -3686,7 +3691,12 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name))))
- ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color colortext size ~acm, ~acm~%set out '~a.tex'"
+ ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
+ ($cairolatex_pdf_standalone (format str "set terminal cairolatex pdf standalone ~a color size ~acm, ~acm~%set out '~a.tex'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
diff --git a/share/draw/grcommon.lisp b/share/draw/grcommon.lisp
index 85f6f7d43..934d4c6d6 100644
--- a/share/draw/grcommon.lisp
+++ b/share/draw/grcommon.lisp
@@ -984,7 +984,7 @@
$dumb $dumb_file $pdf $pdfcairo $wxt $animated_gif $windows
$multipage_pdfcairo $multipage_pdf $multipage_eps
$multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply
- $cairolatex_pdf)))
+ $cairolatex_pdf $cairolatex_pdf_standalone)))
(cond
((member val terms)
(when (and (eq val '$png) $draw_use_pngcairo)
commit 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3
Author: Atri Bhattacharya <bad...@op...>
Date: Thu Nov 27 12:24:29 2025 -0600
Draw: Add support for cairolatex pdf terminal
Part 1 of 2.
Patch supplied via the mailing list by Atri Bhattacharya
<bad...@op...>.
Ref: https://sourceforge.net/p/maxima/mailman/message/59265356
diff --git a/share/draw/gnuplot.lisp b/share/draw/gnuplot.lisp
index de004eb6e..831b5715c 100644
--- a/share/draw/gnuplot.lisp
+++ b/share/draw/gnuplot.lisp
@@ -1,7 +1,7 @@
;;; COPYRIGHT NOTICE
;;;
;;; Copyright (C) 2007-2016 Mario Rodriguez Riotorto
-;;; Time-stamp: "2024-11-28 17:39:24 Leo Butler"
+;;; Time-stamp: "2025-11-27 12:22:21 Leo Butler"
;;;
;;; This program is free software; you can redistribute
;;; it and/or modify it under the terms of the
@@ -2857,7 +2857,7 @@
(setf plotcmd
(concatenate 'string
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone)))
+ (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf)))
(format nil "set obj 1 fc rgb '~a' fs solid 1.0 noborder ~%"
(get-option '$background_color)) )
(if (equal (get-option '$proportional_axes) '$none)
@@ -3339,6 +3339,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name)))
+ ($cairolatex_pdf (format cmdstorage "set terminal cairolatex pdf ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
(($pdf $multipage_pdf) (format cmdstorage "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
@@ -3483,7 +3488,7 @@
(format cmdstorage "~%set size ~a, ~a~%" size1 size2)
(format cmdstorage "set origin ~a, ~a~%" origin1 origin2)
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($epslatex $epslatex_standalone)))
+ (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf)))
(format cmdstorage "set obj 1 rectangle behind from screen ~a,~a to screen ~a,~a~%"
origin1 origin2 (+ origin1 size1 ) (+ origin2 size2))) ))
(setf is1stobj t
@@ -3681,6 +3686,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name))))
+ ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color colortext size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
($pdf (setf str (format nil "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
diff --git a/share/draw/grcommon.lisp b/share/draw/grcommon.lisp
index 513a06074..85f6f7d43 100644
--- a/share/draw/grcommon.lisp
+++ b/share/draw/grcommon.lisp
@@ -983,7 +983,8 @@
$epslatex $epslatex_standalone $svg $tikz $tikz_standalone $x11 $qt
$dumb $dumb_file $pdf $pdfcairo $wxt $animated_gif $windows
$multipage_pdfcairo $multipage_pdf $multipage_eps
- $multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply)))
+ $multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply
+ $cairolatex_pdf)))
(cond
((member val terms)
(when (and (eq val '$png) $draw_use_pngcairo)
-----------------------------------------------------------------------
Summary of changes:
doc/info/draw.texi | 2 ++
share/draw/gnuplot.lisp | 26 +++++++++++++++++++++++---
share/draw/grcommon.lisp | 3 ++-
3 files changed, 27 insertions(+), 4 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-26 15:03:41
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-manual-css-more-vars has been updated
via d9e825f93c06d0092373599bc7e9836b316f9af2 (commit)
via 4f004058ae370c216242632a2f5128109a61b170 (commit)
via 81041bd8c03bddb7cd7c55c90b42552bf8a57f40 (commit)
from 021ea6918064b38f86b38e219538ec255edf6e6e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d9e825f93c06d0092373599bc7e9836b316f9af2
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 07:03:19 2025 -0800
Move pygment CSS stuff together
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 016c5978f..98ffcfbb4 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -93,15 +93,6 @@ pre.example, pre.example-preformatted {
overflow: auto;
}
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
@@ -152,14 +143,27 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/* CSS for pygment highlighting */
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
.example.user-maxima {
overflow-x: auto
}
.highlight.pre {
- /* Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
*/
line-height: normal !important;
}
commit 4f004058ae370c216242632a2f5128109a61b170
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:58:54 2025 -0800
Remove @media dark mode CSS that's not used anymore
This has all been replaced with variables for dark-mode colors, so
this @media isn't used. Remove it.
Also add a comment about div.textbox and friends apparently not being
used anywhere. We comment them out for now, but they should
eventually be removed if not used.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 22b096742..016c5978f 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -61,6 +61,11 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
+ * What are these used for? I (rtoy) can't find these anywhere.
+ * Commenting these out for now, but they should be removed if they're
+ * not really used anywhere.
+ */
/*
div.textbox {
border: solid;
@@ -78,6 +83,7 @@ div.synopsisbox {
background: var(--div-synopsisbox-background-color);
}
*/
+
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
@@ -145,38 +151,6 @@ dd { margin-left: 0.5em }
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
-@media (prefers-color-scheme: dark) {
-/*
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
-*/
-/*
- div.textbox, div.titlebox, div.synopsisbox {
- color: var(--div-titlebox-background-color);}
-*/
-}
/* CSS for pygment highlighting */
.example.user-maxima {
commit 81041bd8c03bddb7cd7c55c90b42552bf8a57f40
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:46:31 2025 -0800
Comment out CSS for textbox, titlebox, and synposisbox
These don't seem to be used anywhere so comment them out.
Also do some minor cleanups and add some comments.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 2947b0145..22b096742 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,7 +1,7 @@
-/* Define variable for background color for examples */
+/* Define colors for light and dark mode */
:root {
/* Default light mode colors */
- --background-color: #ffffff; /* White background */
+ --background-color: white;
--text-color: black;
--example-background-color: rgb(238,238,255);
--link-color: #00f;
@@ -61,6 +61,7 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
div.textbox {
border: solid;
border-width: thin;
@@ -76,6 +77,7 @@ div.synopsisbox {
padding-top: 1em 2em;
background: var(--div-synopsisbox-background-color);
}
+*/
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
-----------------------------------------------------------------------
Summary of changes:
doc/info/manual.css | 66 +++++++++++++++++++----------------------------------
1 file changed, 23 insertions(+), 43 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-25 16:03:46
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-scl has been updated
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
from ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 015e5cc9072906c6f3133aaeee860ae0bbc3b503
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:27:46 2025 -0800
Remove SCL conditionals
Just removed some of the simpler cases with SCL conditionals. There
are many, many more.
diff --git a/src/command-line.lisp b/src/command-line.lisp
index 16eb423fb..9c7413dff 100644
--- a/src/command-line.lisp
+++ b/src/command-line.lisp
@@ -166,9 +166,6 @@
ext::*command-line-application-arguments*
(rest ext:*command-line-strings*))
- #+scl
- (rest ext:*command-line-strings*)
-
#+sbcl
(rest sb-ext:*posix-argv*)
diff --git a/src/globals.lisp b/src/globals.lisp
index 322961fdb..76644e4d4 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -1692,7 +1692,6 @@
(defvar *maxima-lispname*
#+clisp "clisp"
#+cmu "cmucl"
- #+scl "scl"
#+sbcl "sbcl"
#+gcl "gcl"
#+allegro "acl"
@@ -1700,7 +1699,7 @@
#+abcl "abcl"
#+lispworks "lispworks"
#+ecl "ecl"
- #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
+ #-(or clisp cmu sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
;;; Locations of various types of files. These variables are discussed
;;; in more detail in the file doc/implementation/dir_vars.txt. Since
diff --git a/src/maxima-build.lisp b/src/maxima-build.lisp
index 817f2dcec..3376886ad 100644
--- a/src/maxima-build.lisp
+++ b/src/maxima-build.lisp
@@ -23,11 +23,10 @@
#+sbcl (sb-ext:save-lisp-and-die "binary-sbcl/maxima.core" :toplevel (symbol-function 'cl-user::run))
#+gcl (si:save-system "binary-gcl/maxima")
#+cmu (extensions:save-lisp "binary-cmucl/maxima.core" :init-function 'cl-user::run)
- #+scl (extensions:save-lisp "binary-scl/maxima.core" :init-function 'cl-user::run)
#+allegro (excl:dumplisp :name "binary-acl/maxima.dxl")
#+lispworks (hcl:save-image "binary-lispworks/maxima" :restart-function 'cl-user::run)
#+(and openmcl (not 64-bit-target)) (ccl:save-application "binary-openmcl/maxima" :toplevel-function 'cl-user::run)
#+(and openmcl 64-bit-target) (ccl:save-application "binary-ccl64/maxima" :toplevel-function 'cl-user::run)
- #-(or clisp sbcl gcl cmu scl allegro lispworks ccl)
+ #-(or clisp sbcl gcl cmu allegro lispworks ccl)
(format t "Sorry, I don't know how to dump an image on this Lisp"))
-----------------------------------------------------------------------
Summary of changes:
src/command-line.lisp | 3 ---
src/globals.lisp | 3 +--
src/maxima-build.lisp | 3 +--
3 files changed, 2 insertions(+), 7 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-25 15:22:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-scl has been created
at ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
- Log -----------------------------------------------------------------
commit ea4518bc2b5a01fc8c876bde2313cdee425035d6
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:21:02 2025 -0800
Remove support for scl in configure.ac
Scl has not been available for a long time now. Remove support for
scl from configure.ac.
diff --git a/configure.ac b/configure.ac
index 310fb7070..72e902142 100644
--- a/configure.ac
+++ b/configure.ac
@@ -260,58 +260,6 @@ if test x"${cmucl}" = xtrue ; then
fi
fi
-dnl n.b. scl_default_name is hardcoded in "with" message
-scl_default_name=scl
-SCL_RUNTIME=lisp
-AC_ARG_ENABLE(scl,
- [AS_HELP_STRING([--enable-scl],
- [Use SCL])],
- [case "${enableval}" in
- yes) scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true ;;
- no) scl=false ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --enable-scl) ;;
- esac
- explicit_lisp=true],
- [scl=false])
-AC_ARG_WITH(scl,
- [AS_HELP_STRING([--with-scl=<prog>],
- [Use SCL executable <prog> (default scl)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true
- if test "$withval" = "yes"; then
- SCL_NAME="${scl_default_name}"
- else
- SCL_NAME="$withval"
- fi],
- [SCL_NAME=${scl_default_name}])
-AC_ARG_WITH(scl-runtime,
- [AS_HELP_STRING([--with-scl-runtime=<path>],
- [Use SCL runtime <path> (default
- file://library/../bin/lisp)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- SCL_RUNTIME_PATH="$withval"
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`],
- [])
-if test x"${scl}" = xtrue ; then
- if test `echo "$SCL_NAME" | sed 's/\(.\).*/\1/'` = "/" ; then
- if test -x "$SCL_NAME" ; then
- scl_found=true
- else
- scl_found=false
- fi
- else
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- fi
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- if test x"${scl_found}" = xfalse ; then
- AC_MSG_WARN(scl executable ${SCL_NAME} not found in PATH)
- fi
-fi
-
dnl n.b. sbcl_default_name is hardcoded in "with" message
sbcl_default_name=sbcl
AC_ARG_ENABLE(sbcl,
@@ -1027,7 +975,6 @@ if test x"${explicit_lisp}" = xfalse ; then
AC_CHECK_PROG(clisp_found,${clisp_default_name},true,false)
AC_CHECK_PROG(gcl_found,${gcl_default_name},true,false)
AC_CHECK_PROG(cmucl_found,$CMUCL_NAME,true,false)
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
AC_CHECK_PROG(sbcl_found,$SBCL_NAME,true,false)
AC_CHECK_PROG(acl_found,$ACL_NAME,true,false)
AC_CHECK_PROG(openmcl_found,$OPENMCL_NAME,true,false)
@@ -1046,10 +993,6 @@ if test x"${explicit_lisp}" = xfalse ; then
cmucl=true
lisps_enabled="${lisps_enabled} cmucl"
fi
- if test x"${scl_found}" = xtrue ; then
- scl=true
- lisps_enabled="${lisps_enabled} scl"
- fi
if test x"${sbcl_found}" = xtrue ; then
sbcl=true
lisps_enabled="${lisps_enabled} sbcl"
@@ -1063,7 +1006,7 @@ if test x"${explicit_lisp}" = xfalse ; then
lisps_enabled="${lisps_enabled} ecl"
fi
if test x"${lisps_enabled}" = x; then
- AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${scl_default_name}(SCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
+ AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
fi
fi
@@ -1073,7 +1016,6 @@ AM_CONDITIONAL(CLISP_EXEC, test x$clisp_exec = xtrue)
AM_CONDITIONAL(GCL, test x$gcl = xtrue)
AM_CONDITIONAL(CMUCL, test x$cmucl = xtrue)
AM_CONDITIONAL(CMUCL_EXEC, test x${cmucl_exec} = xtrue)
-AM_CONDITIONAL(SCL, test x$scl = xtrue)
AM_CONDITIONAL(SBCL, test x$sbcl = xtrue)
AM_CONDITIONAL(SBCL_EXEC, test x$sbcl_exec = xtrue)
AM_CONDITIONAL(ACL, test x$acl = xtrue)
@@ -1137,30 +1079,6 @@ flag.)
fi
fi
-if test x"${scl}" = xtrue; then
- if test x"${SCL_RUNTIME_PATH}" = x"" ; then
- SCL_RUNTIME_PATH=`${SCL_NAME} -noinit -nositeinit -quiet -batch -eval '(progn (enumerate-pathname-translations (pathname "file://library/../bin/lisp") (when (probe-file pathname) (format t "~A~%" (unix-namestring pathname)))) (quit))'`
- fi
- if test -x "${SCL_RUNTIME_PATH}" ; then
- echo "scl runtime is \"${SCL_RUNTIME_PATH}\""
- else
-dnl last chance: find SCL_NAME in path. Use it if it doesn't appear to
-dnl be a shell script.
- scl_path=`type -p "${SCL_NAME}"`
- if test x"`grep -c '#!.*bin.*sh.*' ${scl_path}`" = x"0" ; then
- SCL_RUNTIME_PATH="${scl_path}"
- else
- AC_MSG_ERROR([Unable to determine SCL runtime path.
-The best guess for SCL runtime, "${SCL_RUNTIME_PATH}", is not
-an executable. Use the argument
- --with-scl-runtime=<path>
-to set the actual SCL executable. If the SCL lisp command is a shell
-script the SCL executable is the program exec'd by that shell script.])
- fi
- fi
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`
-fi
-
if test x"${gcl}" = xtrue; then
AC_MSG_CHECKING([if gcl version >= 2.6.14])
dnl Check gcl version
@@ -1227,13 +1145,6 @@ AC_ARG_WITH(default-lisp,
AC_MSG_ERROR(cmucl not enabled)
fi
;;
- scl)
- if test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
- else
- AC_MSG_ERROR(scl not enabled)
- fi
- ;;
sbcl)
if test x"${sbcl}" = xtrue ; then
DEFAULTLISP=sbcl
@@ -1291,8 +1202,6 @@ AC_ARG_WITH(default-lisp,
DEFAULTLISP=sbcl
elif test x"${cmucl}" = xtrue ; then
DEFAULTLISP=cmucl
- elif test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
elif test x"${clisp}" = xtrue ; then
DEFAULTLISP=clisp
elif test x"${gcl}" = xtrue ; then
@@ -1520,18 +1429,6 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
-if test x"${scl}" = xtrue ; then
- echo "SCL enabled, using \"${SCL_NAME}\""
- echo "SCL runtime is \"${SCL_RUNTIME_PATH}\""
-fi
-if test x"${sbcl}" = xtrue ; then
- echo "Compiling a maxima image using \"${SBCL_NAME}\""
- if test x"${sbcl_exec}" = xtrue ; then
- echo "sbcl executable image enabled for maxima."
- else
- echo Use "--enable-sbcl-exec to build a standalone executable instead."
- fi
-fi
if test x"${gcl}" = xtrue ; then
echo "Compiling a maxima image using \"${GCL_NAME}\""
if test x"${gcl_alt_link}" = xtrue ; then
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-24 21:17:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-manual-css-more-vars has been created
at 021ea6918064b38f86b38e219538ec255edf6e6e (commit)
- Log -----------------------------------------------------------------
commit 021ea6918064b38f86b38e219538ec255edf6e6e
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:15:11 2025 -0800
Use CSS variables to set the colors for light and dark mode
Instead of having a completely separate @media section for dark mode,
use variables to define the colors for light and dark modes.
This makes the CSS file smaller and hopefully, it will be easier set
colors for the different modes since all the info is in basically one
place instead of duplicating all the different elements into a
separate @media for dark mode.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 674e23ae7..2947b0145 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,10 +1,36 @@
/* Define variable for background color for examples */
:root {
+ /* Default light mode colors */
+ --background-color: #ffffff; /* White background */
+ --text-color: black;
--example-background-color: rgb(238,238,255);
+ --link-color: #00f;
+ --link-visited-color: #a0a;
+ --hover-background-color: #555753;
+ --hover-color: #cdf;
+ --nav-panel-background-color: #CDCCDD;
+ --div-titlebox-background-color: rgb(200,255,255);
+ --div-synopsisbox-backgraound-color: rgb(255,220,255);
+ --pre-example-border: 1px solid rgb(180,180,180);
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #fdf6e3;
}
@media (prefers-color-scheme: dark) {
:root {
+ /* Dark Mode Overrides */
+ --background-color: #444;
+ --text-color: #eee;
--example-background-color: #aab;
+ --link-color: #9df;
+ --link-visited-color: #9fd;
+ --hover-background-color: #ddd;
+ --hover-color: #55f;
+ --nav-panel-background-color: #555;
+ --div-titlebox-background-color: black;
+ --div-synopsisbox-backgraound-color: black;
+ --pre-example-border: 1px solid black;
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #544;
}
}
@@ -17,8 +43,8 @@ div.example {
/* end of overrides */
body {
- color: black;
- background: white;
+ color: var(--text-color);
+ background: var(--background-color);
margin-left: 5px;
margin-right: 5px;
font-family: Arial, Verdana, Helvetica, sans-serif
@@ -28,12 +54,12 @@ h2 { font-size: 125% }
h3 { font-size: 110% }
a:link {
text-decoration: none;
- color: #00f
+ color: var(--link-color);
}
-a:visited {color: #a0a }
+a:visited {color: var(--link-visited-color) }
a:hover, span.button:hover {
- background-color: #555753;
- color: #cdf;
+ background-color: var(--hover-background-color);
+ color: var(--hover-color);
}
div.textbox {
border: solid;
@@ -43,15 +69,16 @@ div.textbox {
div.titlebox {
border: none;
padding-top: 1em 2em;
- background: rgb(200,255,255)
+ background: var(--div-titlebox-background-color);
}
div.synopsisbox {
border: none;
padding-top: 1em 2em;
- background: rgb(255,220,255)
+ background: var(--div-synopsisbox-background-color);
}
pre.example, pre.example-preformatted {
- border: 1px solid rgb(180,180,180);
+ border: var(--pre-example-border);
+ color: var(--text-color);
padding: 5px;
background-color: var(--example-background-color);
/* Add scrollbar for examples for narrow windows */
@@ -70,9 +97,9 @@ div.highlight {
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
- border: 1px solid gray;
+ border: var(--div-categorybox-border);
padding: 1em;
- background: #fdf6e3
+ background: var(--div-categorybox-background-color);
}
img {
max-width:80%;
@@ -88,7 +115,7 @@ tt, code { font-family: "Courier New", "DejaVu Sans Mono", monospace }
* Texinfo 7.1 and later uses div.nav-panel. 6.8 uses div.header.
*/
div.header, div.nav-panel {
- background-color: #CDCCDD;
+ background-color: var(--nav-panel-background-color);
padding: 3px 10px;
}
@@ -117,6 +144,7 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
@media (prefers-color-scheme: dark) {
+/*
body {
background: #444;
color: #eee
@@ -141,7 +169,11 @@ dd { margin-left: 0.5em }
background-color: var(--example-background-color) !important;
}
div.categorybox { background-color: #544 }
- div.textbox, div.titlebox, div.synopsisbox { color: black;}
+*/
+/*
+ div.textbox, div.titlebox, div.synopsisbox {
+ color: var(--div-titlebox-background-color);}
+*/
}
/* CSS for pygment highlighting */
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-24 20:42:09
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-highlightjs-example-maxima-blocks-texi-dev has been updated
via 6be27cc3d78d7b20357bd426a5cb73d6a4664c7f (commit)
via ed8c8819d4f337f72d93e052ad798da342c6e467 (commit)
from 7ae65db9239f3325615db30dc57cf3d57197a5e3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6be27cc3d78d7b20357bd426a5cb73d6a4664c7f
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 12:40:48 2025 -0800
Use pgyments option -O classprefix=pyg-
When running makeinfo for custom-pygments, be sure to add the option
`-O classprefix=pyg-` to prefix the classes. This is important since
the CSS files now have the prefix.
diff --git a/doc/info/build_html.sh.in b/doc/info/build_html.sh.in
index 318dacdf6..e8899137d 100755
--- a/doc/info/build_html.sh.in
+++ b/doc/info/build_html.sh.in
@@ -225,14 +225,14 @@ set -x
# TEXIOPT because shell quoting is all wrong that way. Make sure we
# use the same pygmentize options here and below for the singlepage
# version.
-@MAKEINFO@ $FORCE ${SET_CUSTOM:+-c HIGHLIGHT_SYNTAX='pygmentize -f html -l %l'} --split=chapter --no-node-files --output="$languagedestdir" $TEXIOPT maxima.texi
+@MAKEINFO@ $FORCE ${SET_CUSTOM:+-c HIGHLIGHT_SYNTAX='pygmentize -O classprefix=pyg- -f html -l %l'} --split=chapter --no-node-files --output="$languagedestdir" $TEXIOPT maxima.texi
rc=$?
if [ $rc -ne 0 ]; then
echo Failed to build multi-page html docs
exit $rc
fi
-@MAKEINFO@ $FORCE ${SET_CUSTOM:+-c HIGHLIGHT_SYNTAX='pygmentize -f html -l %l'} --no-split --output="$languagedestdir/maxima_singlepage.html" $TEXIOPT maxima.texi
+@MAKEINFO@ $FORCE ${SET_CUSTOM:+-c HIGHLIGHT_SYNTAX='pygmentize -O classprefix=pyg- -f html -l %l'} --no-split --output="$languagedestdir/maxima_singlepage.html" $TEXIOPT maxima.texi
rc=$?
if [ $rc -ne 0 ]; then
echo Failed to build single page html doc
commit ed8c8819d4f337f72d93e052ad798da342c6e467
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 12:38:59 2025 -0800
Use pgyments option -O classprefix=pyg-
To prevent clashes with other HTML classes, tell pygments to use a
prefix of "pyg-" for the classes it uses. Update the comment in
configure.ac about how to generate the CSS files.
Update the pygments CSS files with the class prefix.
diff --git a/configure.ac b/configure.ac
index 555c8dc0a..45104dace 100644
--- a/configure.ac
+++ b/configure.ac
@@ -966,16 +966,18 @@ EOF
dnl To create these style sheets, do
dnl
- dnl pygmentize -S default -f html > pygments.light.css
- dnl pygmentize -S rrt -f html > pygments.dark.css
+ dnl pygmentize -O classprefix=pyg- -S default -f html > pygments.light.css
+ dnl pygmentize -O classprefix=pyg- -S rrt -f html > pygments.dark.css
dnl
dnl Change "default" and "rrt" to choose different styles
dnl for light and dark modes, respectively.
CUSTOM_PYGMENTS_CSS="$(cat | tr -s '\n' ' ' <<EOF
<link rel="stylesheet"
+ type="text/css"
href="pygments.light.css"
media="(prefers-color-scheme: light)">
<link rel="stylesheet"
+ type="text/css"
href="pygments.dark.css"
media="(prefers-color-scheme: dark)">
EOF
diff --git a/doc/info/pygments.dark.css b/doc/info/pygments.dark.css
index e18586d29..bf1b86d99 100644
--- a/doc/info/pygments.dark.css
+++ b/doc/info/pygments.dark.css
@@ -4,81 +4,81 @@ span.linenos { color: inherit; background-color: transparent; padding-left: 5px;
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.hll { background-color: #0000ff }
-.c { color: #0F0 } /* Comment */
-.err { color: #DDD } /* Error */
-.esc { color: #DDD } /* Escape */
-.g { color: #DDD } /* Generic */
-.k { color: #F00 } /* Keyword */
-.l { color: #DDD } /* Literal */
-.n { color: #DDD } /* Name */
-.o { color: #DDD } /* Operator */
-.x { color: #DDD } /* Other */
-.p { color: #DDD } /* Punctuation */
-.ch { color: #0F0 } /* Comment.Hashbang */
-.cm { color: #0F0 } /* Comment.Multiline */
-.cp { color: #E5E5E5 } /* Comment.Preproc */
-.cpf { color: #0F0 } /* Comment.PreprocFile */
-.c1 { color: #0F0 } /* Comment.Single */
-.cs { color: #0F0 } /* Comment.Special */
-.gd { color: #DDD } /* Generic.Deleted */
-.ge { color: #DDD } /* Generic.Emph */
-.ges { color: #DDD } /* Generic.EmphStrong */
-.gr { color: #DDD } /* Generic.Error */
-.gh { color: #DDD } /* Generic.Heading */
-.gi { color: #DDD } /* Generic.Inserted */
-.go { color: #DDD } /* Generic.Output */
-.gp { color: #DDD } /* Generic.Prompt */
-.gs { color: #DDD } /* Generic.Strong */
-.gu { color: #DDD } /* Generic.Subheading */
-.gt { color: #DDD } /* Generic.Traceback */
-.kc { color: #F00 } /* Keyword.Constant */
-.kd { color: #F00 } /* Keyword.Declaration */
-.kn { color: #F00 } /* Keyword.Namespace */
-.kp { color: #F00 } /* Keyword.Pseudo */
-.kr { color: #F00 } /* Keyword.Reserved */
-.kt { color: #EE82EE } /* Keyword.Type */
-.ld { color: #DDD } /* Literal.Date */
-.m { color: #F0F } /* Literal.Number */
-.s { color: #87CEEB } /* Literal.String */
-.na { color: #DDD } /* Name.Attribute */
-.nb { color: #DDD } /* Name.Builtin */
-.nc { color: #DDD } /* Name.Class */
-.no { color: #7FFFD4 } /* Name.Constant */
-.nd { color: #DDD } /* Name.Decorator */
-.ni { color: #DDD } /* Name.Entity */
-.ne { color: #DDD } /* Name.Exception */
-.nf { color: #FF0 } /* Name.Function */
-.nl { color: #DDD } /* Name.Label */
-.nn { color: #DDD } /* Name.Namespace */
-.nx { color: #DDD } /* Name.Other */
-.py { color: #DDD } /* Name.Property */
-.nt { color: #DDD } /* Name.Tag */
-.nv { color: #EEDD82 } /* Name.Variable */
-.ow { color: #F00 } /* Operator.Word */
-.pm { color: #DDD } /* Punctuation.Marker */
-.w { color: #DDD } /* Text.Whitespace */
-.mb { color: #F0F } /* Literal.Number.Bin */
-.mf { color: #F0F } /* Literal.Number.Float */
-.mh { color: #F0F } /* Literal.Number.Hex */
-.mi { color: #F0F } /* Literal.Number.Integer */
-.mo { color: #F0F } /* Literal.Number.Oct */
-.sa { color: #87CEEB } /* Literal.String.Affix */
-.sb { color: #87CEEB } /* Literal.String.Backtick */
-.sc { color: #87CEEB } /* Literal.String.Char */
-.dl { color: #87CEEB } /* Literal.String.Delimiter */
-.sd { color: #87CEEB } /* Literal.String.Doc */
-.s2 { color: #87CEEB } /* Literal.String.Double */
-.se { color: #87CEEB } /* Literal.String.Escape */
-.sh { color: #87CEEB } /* Literal.String.Heredoc */
-.si { color: #87CEEB } /* Literal.String.Interpol */
-.sx { color: #87CEEB } /* Literal.String.Other */
-.sr { color: #87CEEB } /* Literal.String.Regex */
-.s1 { color: #87CEEB } /* Literal.String.Single */
-.ss { color: #87CEEB } /* Literal.String.Symbol */
-.bp { color: #DDD } /* Name.Builtin.Pseudo */
-.fm { color: #FF0 } /* Name.Function.Magic */
-.vc { color: #EEDD82 } /* Name.Variable.Class */
-.vg { color: #EEDD82 } /* Name.Variable.Global */
-.vi { color: #EEDD82 } /* Name.Variable.Instance */
-.vm { color: #EEDD82 } /* Name.Variable.Magic */
-.il { color: #F0F } /* Literal.Number.Integer.Long */
+.pyg-c { color: #0F0 } /* Comment */
+.pyg-err { color: #DDD } /* Error */
+.pyg-esc { color: #DDD } /* Escape */
+.pyg-g { color: #DDD } /* Generic */
+.pyg-k { color: #F00 } /* Keyword */
+.pyg-l { color: #DDD } /* Literal */
+.pyg-n { color: #DDD } /* Name */
+.pyg-o { color: #DDD } /* Operator */
+.pyg-x { color: #DDD } /* Other */
+.pyg-p { color: #DDD } /* Punctuation */
+.pyg-ch { color: #0F0 } /* Comment.Hashbang */
+.pyg-cm { color: #0F0 } /* Comment.Multiline */
+.pyg-cp { color: #E5E5E5 } /* Comment.Preproc */
+.pyg-cpf { color: #0F0 } /* Comment.PreprocFile */
+.pyg-c1 { color: #0F0 } /* Comment.Single */
+.pyg-cs { color: #0F0 } /* Comment.Special */
+.pyg-gd { color: #DDD } /* Generic.Deleted */
+.pyg-ge { color: #DDD } /* Generic.Emph */
+.pyg-ges { color: #DDD } /* Generic.EmphStrong */
+.pyg-gr { color: #DDD } /* Generic.Error */
+.pyg-gh { color: #DDD } /* Generic.Heading */
+.pyg-gi { color: #DDD } /* Generic.Inserted */
+.pyg-go { color: #DDD } /* Generic.Output */
+.pyg-gp { color: #DDD } /* Generic.Prompt */
+.pyg-gs { color: #DDD } /* Generic.Strong */
+.pyg-gu { color: #DDD } /* Generic.Subheading */
+.pyg-gt { color: #DDD } /* Generic.Traceback */
+.pyg-kc { color: #F00 } /* Keyword.Constant */
+.pyg-kd { color: #F00 } /* Keyword.Declaration */
+.pyg-kn { color: #F00 } /* Keyword.Namespace */
+.pyg-kp { color: #F00 } /* Keyword.Pseudo */
+.pyg-kr { color: #F00 } /* Keyword.Reserved */
+.pyg-kt { color: #EE82EE } /* Keyword.Type */
+.pyg-ld { color: #DDD } /* Literal.Date */
+.pyg-m { color: #F0F } /* Literal.Number */
+.pyg-s { color: #87CEEB } /* Literal.String */
+.pyg-na { color: #DDD } /* Name.Attribute */
+.pyg-nb { color: #DDD } /* Name.Builtin */
+.pyg-nc { color: #DDD } /* Name.Class */
+.pyg-no { color: #7FFFD4 } /* Name.Constant */
+.pyg-nd { color: #DDD } /* Name.Decorator */
+.pyg-ni { color: #DDD } /* Name.Entity */
+.pyg-ne { color: #DDD } /* Name.Exception */
+.pyg-nf { color: #FF0 } /* Name.Function */
+.pyg-nl { color: #DDD } /* Name.Label */
+.pyg-nn { color: #DDD } /* Name.Namespace */
+.pyg-nx { color: #DDD } /* Name.Other */
+.pyg-py { color: #DDD } /* Name.Property */
+.pyg-nt { color: #DDD } /* Name.Tag */
+.pyg-nv { color: #EEDD82 } /* Name.Variable */
+.pyg-ow { color: #F00 } /* Operator.Word */
+.pyg-pm { color: #DDD } /* Punctuation.Marker */
+.pyg-w { color: #DDD } /* Text.Whitespace */
+.pyg-mb { color: #F0F } /* Literal.Number.Bin */
+.pyg-mf { color: #F0F } /* Literal.Number.Float */
+.pyg-mh { color: #F0F } /* Literal.Number.Hex */
+.pyg-mi { color: #F0F } /* Literal.Number.Integer */
+.pyg-mo { color: #F0F } /* Literal.Number.Oct */
+.pyg-sa { color: #87CEEB } /* Literal.String.Affix */
+.pyg-sb { color: #87CEEB } /* Literal.String.Backtick */
+.pyg-sc { color: #87CEEB } /* Literal.String.Char */
+.pyg-dl { color: #87CEEB } /* Literal.String.Delimiter */
+.pyg-sd { color: #87CEEB } /* Literal.String.Doc */
+.pyg-s2 { color: #87CEEB } /* Literal.String.Double */
+.pyg-se { color: #87CEEB } /* Literal.String.Escape */
+.pyg-sh { color: #87CEEB } /* Literal.String.Heredoc */
+.pyg-si { color: #87CEEB } /* Literal.String.Interpol */
+.pyg-sx { color: #87CEEB } /* Literal.String.Other */
+.pyg-sr { color: #87CEEB } /* Literal.String.Regex */
+.pyg-s1 { color: #87CEEB } /* Literal.String.Single */
+.pyg-ss { color: #87CEEB } /* Literal.String.Symbol */
+.pyg-bp { color: #DDD } /* Name.Builtin.Pseudo */
+.pyg-fm { color: #FF0 } /* Name.Function.Magic */
+.pyg-vc { color: #EEDD82 } /* Name.Variable.Class */
+.pyg-vg { color: #EEDD82 } /* Name.Variable.Global */
+.pyg-vi { color: #EEDD82 } /* Name.Variable.Instance */
+.pyg-vm { color: #EEDD82 } /* Name.Variable.Magic */
+.pyg-il { color: #F0F } /* Literal.Number.Integer.Long */
diff --git a/doc/info/pygments.light.css b/doc/info/pygments.light.css
index 8e6fbf1b4..fd0d7ab1c 100644
--- a/doc/info/pygments.light.css
+++ b/doc/info/pygments.light.css
@@ -4,71 +4,71 @@ span.linenos { color: inherit; background-color: transparent; padding-left: 5px;
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.hll { background-color: #ffffcc }
-.c { color: #3D7B7B; font-style: italic } /* Comment */
-.err { border: 1px solid #F00 } /* Error */
-.k { color: #008000; font-weight: bold } /* Keyword */
-.o { color: #666 } /* Operator */
-.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
-.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
-.cp { color: #9C6500 } /* Comment.Preproc */
-.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
-.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
-.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
-.gd { color: #A00000 } /* Generic.Deleted */
-.ge { font-style: italic } /* Generic.Emph */
-.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
-.gr { color: #E40000 } /* Generic.Error */
-.gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.gi { color: #008400 } /* Generic.Inserted */
-.go { color: #717171 } /* Generic.Output */
-.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
-.gs { font-weight: bold } /* Generic.Strong */
-.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.gt { color: #04D } /* Generic.Traceback */
-.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
-.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
-.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
-.kp { color: #008000 } /* Keyword.Pseudo */
-.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
-.kt { color: #B00040 } /* Keyword.Type */
-.m { color: #666 } /* Literal.Number */
-.s { color: #BA2121 } /* Literal.String */
-.na { color: #687822 } /* Name.Attribute */
-.nb { color: #008000 } /* Name.Builtin */
-.nc { color: #00F; font-weight: bold } /* Name.Class */
-.no { color: #800 } /* Name.Constant */
-.nd { color: #A2F } /* Name.Decorator */
-.ni { color: #717171; font-weight: bold } /* Name.Entity */
-.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
-.nf { color: #00F } /* Name.Function */
-.nl { color: #767600 } /* Name.Label */
-.nn { color: #00F; font-weight: bold } /* Name.Namespace */
-.nt { color: #008000; font-weight: bold } /* Name.Tag */
-.nv { color: #19177C } /* Name.Variable */
-.ow { color: #A2F; font-weight: bold } /* Operator.Word */
-.w { color: #BBB } /* Text.Whitespace */
-.mb { color: #666 } /* Literal.Number.Bin */
-.mf { color: #666 } /* Literal.Number.Float */
-.mh { color: #666 } /* Literal.Number.Hex */
-.mi { color: #666 } /* Literal.Number.Integer */
-.mo { color: #666 } /* Literal.Number.Oct */
-.sa { color: #BA2121 } /* Literal.String.Affix */
-.sb { color: #BA2121 } /* Literal.String.Backtick */
-.sc { color: #BA2121 } /* Literal.String.Char */
-.dl { color: #BA2121 } /* Literal.String.Delimiter */
-.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
-.s2 { color: #BA2121 } /* Literal.String.Double */
-.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
-.sh { color: #BA2121 } /* Literal.String.Heredoc */
-.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
-.sx { color: #008000 } /* Literal.String.Other */
-.sr { color: #A45A77 } /* Literal.String.Regex */
-.s1 { color: #BA2121 } /* Literal.String.Single */
-.ss { color: #19177C } /* Literal.String.Symbol */
-.bp { color: #008000 } /* Name.Builtin.Pseudo */
-.fm { color: #00F } /* Name.Function.Magic */
-.vc { color: #19177C } /* Name.Variable.Class */
-.vg { color: #19177C } /* Name.Variable.Global */
-.vi { color: #19177C } /* Name.Variable.Instance */
-.vm { color: #19177C } /* Name.Variable.Magic */
-.il { color: #666 } /* Literal.Number.Integer.Long */
+.pyg-c { color: #3D7B7B; font-style: italic } /* Comment */
+.pyg-err { border: 1px solid #F00 } /* Error */
+.pyg-k { color: #008000; font-weight: bold } /* Keyword */
+.pyg-o { color: #666 } /* Operator */
+.pyg-ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.pyg-cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.pyg-cp { color: #9C6500 } /* Comment.Preproc */
+.pyg-cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.pyg-c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.pyg-cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.pyg-gd { color: #A00000 } /* Generic.Deleted */
+.pyg-ge { font-style: italic } /* Generic.Emph */
+.pyg-ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
+.pyg-gr { color: #E40000 } /* Generic.Error */
+.pyg-gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.pyg-gi { color: #008400 } /* Generic.Inserted */
+.pyg-go { color: #717171 } /* Generic.Output */
+.pyg-gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.pyg-gs { font-weight: bold } /* Generic.Strong */
+.pyg-gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.pyg-gt { color: #04D } /* Generic.Traceback */
+.pyg-kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.pyg-kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.pyg-kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.pyg-kp { color: #008000 } /* Keyword.Pseudo */
+.pyg-kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.pyg-kt { color: #B00040 } /* Keyword.Type */
+.pyg-m { color: #666 } /* Literal.Number */
+.pyg-s { color: #BA2121 } /* Literal.String */
+.pyg-na { color: #687822 } /* Name.Attribute */
+.pyg-nb { color: #008000 } /* Name.Builtin */
+.pyg-nc { color: #00F; font-weight: bold } /* Name.Class */
+.pyg-no { color: #800 } /* Name.Constant */
+.pyg-nd { color: #A2F } /* Name.Decorator */
+.pyg-ni { color: #717171; font-weight: bold } /* Name.Entity */
+.pyg-ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.pyg-nf { color: #00F } /* Name.Function */
+.pyg-nl { color: #767600 } /* Name.Label */
+.pyg-nn { color: #00F; font-weight: bold } /* Name.Namespace */
+.pyg-nt { color: #008000; font-weight: bold } /* Name.Tag */
+.pyg-nv { color: #19177C } /* Name.Variable */
+.pyg-ow { color: #A2F; font-weight: bold } /* Operator.Word */
+.pyg-w { color: #BBB } /* Text.Whitespace */
+.pyg-mb { color: #666 } /* Literal.Number.Bin */
+.pyg-mf { color: #666 } /* Literal.Number.Float */
+.pyg-mh { color: #666 } /* Literal.Number.Hex */
+.pyg-mi { color: #666 } /* Literal.Number.Integer */
+.pyg-mo { color: #666 } /* Literal.Number.Oct */
+.pyg-sa { color: #BA2121 } /* Literal.String.Affix */
+.pyg-sb { color: #BA2121 } /* Literal.String.Backtick */
+.pyg-sc { color: #BA2121 } /* Literal.String.Char */
+.pyg-dl { color: #BA2121 } /* Literal.String.Delimiter */
+.pyg-sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.pyg-s2 { color: #BA2121 } /* Literal.String.Double */
+.pyg-se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.pyg-sh { color: #BA2121 } /* Literal.String.Heredoc */
+.pyg-si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.pyg-sx { color: #008000 } /* Literal.String.Other */
+.pyg-sr { color: #A45A77 } /* Literal.String.Regex */
+.pyg-s1 { color: #BA2121 } /* Literal.String.Single */
+.pyg-ss { color: #19177C } /* Literal.String.Symbol */
+.pyg-bp { color: #008000 } /* Name.Builtin.Pseudo */
+.pyg-fm { color: #00F } /* Name.Function.Magic */
+.pyg-vc { color: #19177C } /* Name.Variable.Class */
+.pyg-vg { color: #19177C } /* Name.Variable.Global */
+.pyg-vi { color: #19177C } /* Name.Variable.Instance */
+.pyg-vm { color: #19177C } /* Name.Variable.Magic */
+.pyg-il { color: #666 } /* Literal.Number.Integer.Long */
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 6 +-
doc/info/build_html.sh.in | 4 +-
doc/info/pygments.dark.css | 156 ++++++++++++++++++++++----------------------
doc/info/pygments.light.css | 136 +++++++++++++++++++-------------------
4 files changed, 152 insertions(+), 150 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-11-24 06:05:26
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via c380557ab485e0d5fc5b4c775216081f686214df (commit)
from bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c380557ab485e0d5fc5b4c775216081f686214df
Author: Robert Dodier <rob...@so...>
Date: Sun Nov 23 21:32:21 2025 -0800
Package gentran: create test cases which output C, Fortran, and Ratfor code for a given expression.
In each case, the expected values, as calculated by Maxima, are baked
into the generated code, and the values calculated by the translated
code are compared to those.
Command lines: to generate the translated code,
$ maxima -b compare_var_translations.mac
where maxima is a recent enough (post-109691d) version.
To compile and run the code for each one,
$ gcc foomain.c -o foomain-c -lm
$ ./foomain-c
$ f77 foomain.f -o foomain-f
$ ./foomain-f
$ ratfor foomain.rat > foomain-rat.f
$ f77 foomain-rat.f -o foomain-rat
$ ./foomain-rat
with:
* gcc 9.4.0
* f77 reporting its version as "GNU Fortran (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010"
* ratfor built from https://github.com/arnoldrobbins/ratfor as of commit 419cf3
diff --git a/share/contrib/gentran/test/compare_var_translations.mac b/share/contrib/gentran/test/compare_var_translations.mac
new file mode 100644
index 000000000..2742a881b
--- /dev/null
+++ b/share/contrib/gentran/test/compare_var_translations.mac
@@ -0,0 +1,81 @@
+var:-((sqrt(m_piM^4+W^8*cost^2-W^8+4*P0^2*W^6)+((cost^2-1)*m_nuc^2+W^2*cost^2-W^2)*m_piM^4+sqrt(m_piM^2+P0^2)*(4*W^2*m_nuc*m_piM^2-4*W^2*m_nuc^3+4*W^4*m_nuc)+((2-2*cost^2)*m_nuc^4-4*W^2*cost^2*m_nuc^2-2*W^4*cost^2-2*W^4)*m_piM^2+(cost^2-1)*m_nuc^6+(W^2-W^2*cost^2)*m_nuc^4+(W^4-W^4*cost^2)*m_nuc^2+W^6*cost^2-W^6)/((cost^2-1)*m_piM^4+((2-2*cost^2)*m_nuc^2-2*W^2*cost^2-2*W^2)*m_piM^2+(cost^2-1)*m_nuc^4+(2*W^2-2*W^2*cost^2)*m_nuc^2+W^4*cost^2-W^4));
+
+/* should find that translated functions produce same results as original */
+
+freevars: listofvars (var);
+
+implicit_integer (varname) :=
+ block ([S1: charat (string (varname), 1)],
+ is (member (S1, ["i", "j", "k", "l", "m", "n", "I", "J", "K", "L", "M", "N"]) # false));
+
+make_type_decls (l) :=
+ block ([l1, l2a, l2b],
+ l1: makelist (if implicit_integer (x) then ['integer, x] else ['real, x], x, l),
+ [l2_real, l2_integer]: partition (l1, 'integer),
+ [ funmake (type, cons ('real, map (second, l2_real))),
+ funmake (type, cons ('integer, map (second, l2_integer))) ]);
+
+type_decls: cons (type (real, foo), make_type_decls (freevars));
+
+define (funmake (foo, freevars), buildq ([var, type_decls], block (splice (type_decls), return (var))));
+
+random_for (x, lower_limit, upper_limit) :=
+ if implicit_integer (x)
+ then lower_limit + random (upper_limit - lower_limit)
+ else lower_limit + random (float (upper_limit - lower_limit));
+
+random_values_for (l) := map (lambda ([x], random_for (x, 1, 4)), l);
+
+random_values_for_freevars: makelist (random_values_for (freevars), 20);
+
+foo_values: map (lambda ([l], apply (foo, l)), random_values_for_freevars);
+
+load (gentran);
+
+translated_foos: makelist (concat ('translated_foo, i), i, 1, length (random_values_for_freevars));
+original_foos: makelist (concat ('original_foo, i), i, 1, length (random_values_for_freevars));
+
+block ([gentranlang: 'fortran], gentranin ("foo-fortran.template", ["foomain.f"]));
+block ([gentranlang: 'ratfor, ratlinelen: 1000],
+ gentranin ("foo-ratfor.template", ["foomain.rat"]));
+
+/* need explicit type declarations for C, but gentranin disables type declaration output,
+ * so output boilerplate via printf to C output file instead of working with template.
+ */
+
+gentranlang: 'c;
+
+S: openw ("foomain.c");
+printf (S, "
+#include <stdio.h>
+#include <math.h>
+
+typedef float real;
+typedef int integer;
+");
+
+gentranpush (S);
+gentran (eval (fundef (foo)));
+
+printf (S, "
+int main (int argc, char** argv) {
+");
+
+for i thru length (random_values_for_freevars)
+ do (gentran (type (real, eval (translated_foos[i]), eval (original_foos[i])),
+ eval (translated_foos[i]): eval (funmake ('foo, random_values_for_freevars[i])),
+ eval (original_foos[i]): eval (foo_values[i]),
+ printf ("original foo%d = %g\\n", eval (i), eval (original_foos[i])),
+ printf ("translated foo%d = %g\\n", eval (i), eval (translated_foos[i])),
+ if eval (translated_foos[i]) = eval (original_foos[i])
+ then printf ("same\\n")
+ else printf ("DIFFERENCE = %g\\n", eval (translated_foos[i] - original_foos[i]))));
+
+printf (S, "
+ return (0);
+}
+");
+
+close (S);
+
+gentranpop (false);
diff --git a/share/contrib/gentran/test/foo-fortran.template b/share/contrib/gentran/test/foo-fortran.template
new file mode 100644
index 000000000..96885645d
--- /dev/null
+++ b/share/contrib/gentran/test/foo-fortran.template
@@ -0,0 +1,20 @@
+ program foomain
+
+<<
+ for i thru length (random_values_for_freevars)
+ do (gentran (eval (translated_foos[i]): eval (funmake ('foo, random_values_for_freevars[i]))),
+ gentran (eval (original_foos[i]): eval (foo_values[i])),
+ gentran (print ("original foo", eval (i), "=", eval (original_foos[i]))),
+ gentran (print ("translated foo", eval (i), "=", eval (translated_foos[i]))),
+ gentran (if eval (translated_foos[i]) = eval (original_foos[i])
+ then print ("same")
+ else print ("DIFFERENCE =", eval (translated_foos[i]) - eval (original_foos[i]))));
+>>
+
+ stop
+ end
+
+<<
+ gentran (eval (fundef (foo)));
+>>
+
diff --git a/share/contrib/gentran/test/foo-ratfor.template b/share/contrib/gentran/test/foo-ratfor.template
new file mode 100644
index 000000000..a8ddfb942
--- /dev/null
+++ b/share/contrib/gentran/test/foo-ratfor.template
@@ -0,0 +1,15 @@
+<<
+ gentran (eval (fundef (foo)));
+
+ for i thru length (random_values_for_freevars)
+ do (gentran (eval (translated_foos[i]): eval (funmake ('foo, random_values_for_freevars[i]))),
+ gentran (eval (original_foos[i]): eval (foo_values[i])),
+ gentran (print ("original foo", eval (i), "=", eval (original_foos[i]))),
+ gentran (print ("translated foo", eval (i), "=", eval (translated_foos[i]))),
+ gentran (if eval (translated_foos[i]) = eval (original_foos[i])
+ then print ("same")
+ else print ("DIFFERENCE =", eval (translated_foos[i]) - eval (original_foos[i]))));
+>>
+
+ stop
+ end
-----------------------------------------------------------------------
Summary of changes:
.../gentran/test/compare_var_translations.mac | 81 ++++++++++++++++++++++
share/contrib/gentran/test/foo-fortran.template | 20 ++++++
share/contrib/gentran/test/foo-ratfor.template | 15 ++++
3 files changed, 116 insertions(+)
create mode 100644 share/contrib/gentran/test/compare_var_translations.mac
create mode 100644 share/contrib/gentran/test/foo-fortran.template
create mode 100644 share/contrib/gentran/test/foo-ratfor.template
hooks/post-receive
--
Maxima CAS
|
|
From: l_butler <l_b...@us...> - 2025-11-21 21:42:17
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
from 4e3369868f0e9eab00d57fb011f9c7824a93927c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit bb404ea5eeb2a3bae0d3cea46708d36992124b09
Author: Leo Butler <l_b...@us...>
Date: Fri Nov 21 15:39:20 2025 -0600
batch_answers_from_file: correct the texinfo documentation
The references in doc/info/{Input,Bugs}.texi produced non-sensical
constructs, because @mrefdot behaves different compared to @ref.
diff --git a/doc/info/Bugs.texi b/doc/info/Bugs.texi
index a5c38ed36..69442f3cf 100644
--- a/doc/info/Bugs.texi
+++ b/doc/info/Bugs.texi
@@ -156,9 +156,9 @@ these additional tests are run as a part of the testsuite. If
Of course, the actual set of test that are run can be controlled by
the @code{tests} option. The default is @code{false}.
@item answers_from_file
-Read answers to interactive questions from the source file
-@mrefdot{batch_answers_from_file} May only be @code{false} or
-@code{true} (default).
+Read answers to interactive questions from the source file. May only be
+@code{false} or @code{true} (default). See also
+@mrefdot{batch_answers_from_file}
@end table
For example @code{run_testsuite(display_known_bugs = true, tests=[rtest5])}
diff --git a/doc/info/Input.texi b/doc/info/Input.texi
index 16747981c..03aae6bec 100644
--- a/doc/info/Input.texi
+++ b/doc/info/Input.texi
@@ -156,7 +156,7 @@ expressions. @code{batch} evaluates every input expression in the file
unless there is an error. If user input is requested (by @mref{asksign}
or @mrefcomma{askinteger} for example) @code{batch} pauses to collect
the requisite input and then continue; if @code{batch_answers_from_file}
-is @code{true}, the input is read from the file itself
+is @code{true}, the input is read from the file itself. See also
@mrefdot{batch_answers_from_file}
@c CTRL-C BREAKS batch IN CMUCL, BUT CLISP (ALTHOUGH IT SHOWS "User break")
@@ -266,7 +266,7 @@ result.
The command-line option @code{--batch-string} binds
@code{batch_answers_from_file} to @code{true}. The @code{run_testsuite}
function, as a default, also binds @code{batch_answers_from_file} to
-@code{true}. @mref{command_line_options} and @mrefdot{run_testsuite}
+@code{true}. See also @mref{command_line_options} and @mrefdot{run_testsuite}
@opencatbox{Categories:}
@category{File input}
-----------------------------------------------------------------------
Summary of changes:
doc/info/Bugs.texi | 6 +++---
doc/info/Input.texi | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-21 15:11:31
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 4e3369868f0e9eab00d57fb011f9c7824a93927c (commit)
via 6e49a965367ebb5410dcfa195147d433e92d0012 (commit)
via 5c0df12aadf24e0ed8bf0a9dcaf654a295fea9bf (commit)
via ac7f321aa11bfc2eb0aa98f1f9ebdd1468fc5028 (commit)
via 71ff3c56185e723a9d0bacfecdb6f96b732d99f2 (commit)
via d2edf1daed08af4ea45ddd7d1ae79604a7e15d28 (commit)
via 7b0ca10415d19903d8e65e88f3293a1ddf38f0bc (commit)
via 7f57f45cce15f7fbf3119227a6025845c110ba99 (commit)
from c3b58349472a8103ff571fc6d59836bcb317b870 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 4e3369868f0e9eab00d57fb011f9c7824a93927c
Merge: c3b583494 6e49a9653
Author: Raymond Toy <toy...@gm...>
Date: Fri Nov 21 07:11:14 2025 -0800
Merge branch 'rtoy-lisp-list-avail-consistently'
-----------------------------------------------------------------------
Summary of changes:
maxima-local.in | 15 ++++----------
src/init-cl.lisp | 61 ++++++++++++++++++++++++++++++++++++++------------------
src/mload.lisp | 16 +++++++++++----
3 files changed, 58 insertions(+), 34 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-21 15:10:56
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-lisp-list-avail-consistently has been updated
via 6e49a965367ebb5410dcfa195147d433e92d0012 (commit)
via 5c0df12aadf24e0ed8bf0a9dcaf654a295fea9bf (commit)
via ac7f321aa11bfc2eb0aa98f1f9ebdd1468fc5028 (commit)
via 71ff3c56185e723a9d0bacfecdb6f96b732d99f2 (commit)
from d2edf1daed08af4ea45ddd7d1ae79604a7e15d28 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6e49a965367ebb5410dcfa195147d433e92d0012
Author: Raymond Toy <toy...@gm...>
Date: Fri Nov 21 07:09:42 2025 -0800
Let lisp handle --list-avail
This script handled --list-avail if it was the first arg. That's
weird if it's not. Remove this and let lisp handle all of the
command-line args as usual.
diff --git a/maxima-local.in b/maxima-local.in
index ceb735c08..a819dc770 100755
--- a/maxima-local.in
+++ b/maxima-local.in
@@ -17,17 +17,6 @@ export MAXIMA_HTMLDIR
MAXIMA_LOCAL=yes
export MAXIMA_LOCAL
-# report the compiled in Lisp versions
-if [ x"$1" = "x--list-avail" ]; then
- V="@VERSION@"
- echo "Available versions:"
- for i in src/binary-* ; do
- L=`echo $i | sed s/src.binary-//`
- echo "version $V, lisp $L"
- done;
- exit;
-fi;
-
# quick fix for plotting with plot_format=openmath (bug 3052)
if [ ! -d "@abs_top_srcdir@/bin" ]; then
mkdir -p "@abs_top_srcdir@/bin"
commit 5c0df12aadf24e0ed8bf0a9dcaf654a295fea9bf
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 19 07:31:22 2025 -0800
Add more info to unix-like-dirname docstring
I expect was expecting "a/b/c/" to return "a/b/c", but it doesn't. It
returns "a/b". Add that as an example, even though it's fairly clear
from the dirname manpage that that is the expected answer.
diff --git a/src/mload.lisp b/src/mload.lisp
index 5f737548c..b39e5706f 100644
--- a/src/mload.lisp
+++ b/src/mload.lisp
@@ -44,7 +44,8 @@
(defun unix-like-dirname (path)
"A Lisp equivalent of the Unix program dirname. This strips the last
component from the given PATH. The last non-slash component and
- trailing slashes are removed."
+ trailing slashes are removed. In particular for \"a/b/c/\", this
+ returns \"a/b\", not \"a/b/c/\"."
(let* ((pathstring (namestring path))
(len (length pathstring)))
(when (equal (subseq pathstring (- len 1) len) "/")
commit ac7f321aa11bfc2eb0aa98f1f9ebdd1468fc5028
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 19 07:25:52 2025 -0800
Update get-dirs to support cmucl and add some comments
`get-dirs` was returning all the files in the given `path` for cmucl
because a trailing slash was not appended. Append the slash.
Also add some docstrings and comments to `get-dirs`.
Finally, add comments to `unix-like-dirname` because I was confused on
what `unix-like-dirname` was returning. It is doing what the program
`dirname` does.
diff --git a/src/mload.lisp b/src/mload.lisp
index dfce018e4..5f737548c 100644
--- a/src/mload.lisp
+++ b/src/mload.lisp
@@ -21,11 +21,15 @@
(errset (pathname x))))
(defun get-dirs (path &aux (ns (namestring path)))
+ "Find all the directories in the directory given by PATH. We do not
+ descend into the subdirectories."
+ ;; Basically get a directory listing from "<path>/*/". The last
+ ;; slash tells DIRECTORY to return just the directories in PATH.
(directory (concatenate 'string
ns
(if (eql #\/ (char ns (1- (length ns)))) "" "/")
"*"
- #+(or :clisp :sbcl :ecl :openmcl :gcl) "/")
+ #+(or :clisp :sbcl :ecl :openmcl :gcl :cmucl) "/")
#+openmcl :directories #+openmcl t))
(defun unix-like-basename (path)
@@ -38,16 +42,19 @@
(position #\\ pathstring :from-end t) -1)) len)))
(defun unix-like-dirname (path)
+ "A Lisp equivalent of the Unix program dirname. This strips the last
+ component from the given PATH. The last non-slash component and
+ trailing slashes are removed."
(let* ((pathstring (namestring path))
(len (length pathstring)))
(when (equal (subseq pathstring (- len 1) len) "/")
(decf len)
(setf pathstring (subseq pathstring 0 len)))
(let ((last-slash (or (position #\/ pathstring :from-end t)
- (position #\\ pathstring :from-end t))))
+ (position #\\ pathstring :from-end t))))
(if last-slash
- (subseq pathstring 0 last-slash)
- "."))))
+ (subseq pathstring 0 last-slash)
+ "."))))
(defmfun $filename_merge (&rest file-specs)
(when (or (null file-specs) (cddr file-specs))
commit 71ff3c56185e723a9d0bacfecdb6f96b732d99f2
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 19 07:13:05 2025 -0800
Use get-dirs to get directories and add some comments
Use `get-dirs` to get a list of directories instead of calling
`directory` ourselves.
Add some more comments about regexp pattern.
diff --git a/src/init-cl.lisp b/src/init-cl.lisp
index c5ab0a2de..771897d8d 100644
--- a/src/init-cl.lisp
+++ b/src/init-cl.lisp
@@ -332,7 +332,8 @@ maxima [options] --batch-string='batch_answers_from_file:false; ...'
(let ((maxima-dir (maxima-getenv "MAXIMA_PREFIX"))
;; I (rtoy) am lazy. Just use regexp to match
;; "src/binary-foo" which is the directory containing the
- ;; build using lisp "foo".
+ ;; build using lisp "foo". Since it's a directory, the
+ ;; pattern should not include the slash.
(pattern (pregexp:pregexp "src/binary-([^/]+)")))
;; maxima-local MUST define MAXIMA_PREFIX envvar so we know where we are.
(unless maxima-dir
@@ -341,7 +342,7 @@ maxima [options] --batch-string='batch_answers_from_file:false; ...'
(bye))
(setf maxima-dir (combine-path maxima-dir "src"))
(format t "Available versions:~%")
- (dolist (p (directory (concatenate 'string maxima-dir "/*")))
+ (dolist (p (get-dirs (concatenate 'string maxima-dir "/*")))
(destructuring-bind (&optional whole-match lisp-name)
(pregexp:pregexp-match pattern (namestring p))
(declare (ignore whole-match))
@@ -360,11 +361,7 @@ maxima [options] --batch-string='batch_answers_from_file:false; ...'
(format t "Available versions:~%")
(unless (equal (subseq maxima-verpkglibdir (- len 1) len) "/")
(setf maxima-verpkglibdir (concatenate 'string maxima-verpkglibdir "/")))
- (format t "maxima-verpkglibdir = ~A~%" maxima-verpkglibdir)
- (format t "unix-like-dirname = ~A~%" (unix-like-dirname maxima-verpkglibdir))
- (format t "get-dirs = ~A~%" (get-dirs (unix-like-dirname maxima-verpkglibdir)))
(dolist (version (get-dirs (unix-like-dirname maxima-verpkglibdir)))
- (format t "version = ~A~%" version)
(dolist (lisp (get-dirs version))
(setf lisp-string (unix-like-basename lisp))
(when (search "binary-" lisp-string)
-----------------------------------------------------------------------
Summary of changes:
maxima-local.in | 11 -----------
src/init-cl.lisp | 9 +++------
src/mload.lisp | 16 ++++++++++++----
3 files changed, 15 insertions(+), 21 deletions(-)
hooks/post-receive
--
Maxima CAS
|