Matt Birkholz [Sun, 5 Nov 2017 09:36:06 +0000 (02:36 -0700)]
x11-screen: Use new window class to avoid confusion with Emacs.
Borrow .desktop and icon files from core. Specify new window class
when creating x11-screens, and in the StartupWMClass key in the
.desktop file. Also fixed the .desktop file per complaints from
desktop-file-validate, deciding on one main category.
Add common integer bit string ffs, fls, ctz, and clz.
(ffs x): find first set, 1-indexed with 0 for 0
(fls x): find last set, 1-indexed with 0 for 0 (same as integer-length)
(ctz x): count trailing zeros (same as ffs)
((clz n) x): count leading zeros in n-bit word x
Matt Birkholz [Sun, 1 Oct 2017 16:42:29 +0000 (09:42 -0700)]
devops/build: Caught up "host" procedure. Order of "plugin"...
...declarations matters not. Build hosts order builds by the
timestamps on the source distributions. A Debian native package has
no Debian revision number. Putting the package install script in a
bin/ writable by the build monkey is hardly an impediment to an evil
build monkey. Commented out unimplemented source checks (copyright
notice and manual deffns).
Matt Birkholz [Sun, 1 Oct 2017 16:39:02 +0000 (09:39 -0700)]
doc/user-manual: Typo: unnumbered/unnumberedsec. More hammering.
Actually made these sections, not unnumberedsecs. Moved mention of
"pucked" (mis)feature (and "experimental code") to end (after
"Experimental Changes"). And fixed a lingering "yakkety".
Matt Birkholz [Sat, 16 Sep 2017 22:06:17 +0000 (15:06 -0700)]
runtime/syncproc: Eliminate spinning, and blocking.
The run-shell-command spins when it is copying both stdin and stdout.
E.g.
(call-with-input-string "Lorem ipsum dolor sit amet\n"
(lambda (in)
(run-shell-command "sleep 10; cat" 'input in)))
will keep your machine busy for 10 seconds.
When it is not spinning, the procedure blocks for large bufferfuls.
During the evaluation of
(run-shell-command
"i=0; while [ $i -lt 5 ]; do echo $i; i=$[$i + 1]; sleep 1; done"
'redisplay-hook flush-output-port)
you will not see 5 lines of output, one each second, but all 5 lines
at once after 5 seconds, despite the redisplay hook [Linux 4.10.0
glibc 2.24].
This new copying process eliminates the blocking AND the spinning. It
keeps stdout in nonblocking mode and uses suspend-current-thread to
block. It handles short writes too. The ports sourcing/sinking
stdin/stdout are required to block.
Print is just the renamed Debug_Print, renamed for brevity in debugger
commands. Rename do_printing to print_object and punt the detailed_p
parameter, and the gotos, and handled_p. Move the bulky compiled
entry handling to a separate function: print_compiled_entry. Punt
checking for a "closed" stack frame in verify_stack().
Matt Birkholz [Sat, 16 Sep 2017 21:38:27 +0000 (14:38 -0700)]
microcode: Do not save history_register locally.
The required change to C_call_scheme is described but not implemented.
C_call_scheme has other problems(?). Preferring a rotated history to
a broken history (broken by a GC during a callback) for now.
Matt Birkholz [Sat, 16 Sep 2017 22:19:27 +0000 (15:19 -0700)]
ffi: Follow example of C_call_scheme; eliminate aborts.
Keep callouts simple, fast. Make callbacks save/restore machine state
(last_return_code, mainly) and use RC_END_OF_COMPUTATION instead of a
special primitive (return-to-c), like C_call_scheme. Punt the
pop_return_p parameter of Interpret; instead, leave #f in EXP and
Re_Enter_Interpreter, also like C_call_scheme. Add re_enter_scheme to
pop machine state pushed by abort_to_c (used when state cannot be
saved locally, as in the glib plugin's run_glib).
Print is just the renamed Debug_Print, renamed for brevity in debugger
commands. Rename do_printing to print_object and punt the detailed_p
parameter, and the gotos, and handled_p. Move the bulky compiled
entry handling to a separate function: print_compiled_entry. Punt
checking for a "closed" stack frame in verify_stack().
Matt Birkholz [Mon, 7 Aug 2017 01:16:52 +0000 (18:16 -0700)]
ffi: Follow example of C_call_scheme and eliminate aborts.
Punt pop_return_p parameter to Interpret; instead, leave #f in EXP and
Re_Enter_Interpreter, like C_call_scheme. Keep callouts simple, fast.
Make callbacks save/restore machine state (last_return_code,
C_Frame_Pointer, C_Stack_Pointer, LEXPR_ACTUALS and PRIMITIVE) and use
RC_END_OF_COMPUTATION, also like C_call_scheme.
Matt Birkholz [Tue, 1 Aug 2017 22:21:01 +0000 (15:21 -0700)]
runtime/syncproc: Eliminate spinning, and blocking.
The run-shell-command spins when it is copying both stdin and stdout.
E.g.
(call-with-input-string "Lorem ipsum dolor sit amet\n"
(lambda (in)
(run-shell-command "sleep 10; cat" 'input in)))
will keep your machine busy for 10 seconds.
When it is not spinning, the procedure blocks for large bufferfuls.
During the evaluation of
(run-shell-command
"i=0; while [ $i -lt 5 ]; do echo $i; i=$[$i + 1]; sleep 1; done"
'redisplay-hook flush-output-port)
you will not see 5 lines of output, one each second, but all 5 lines
at once after 5 seconds, despite the redisplay hook [Linux 4.10.0
glibc 2.24].
This new copying process eliminates the blocking AND the spinning. It
keeps stdout in nonblocking mode and uses suspend-current-thread to
block. It handles short writes too. The ports sourcing/sinking
stdin/stdout are required to block.
Matt Birkholz [Sun, 30 Jul 2017 22:39:21 +0000 (15:39 -0700)]
runtime/binary-port (close-binary-output-port): Close output chan.
Close-binary-output-port was not closing the output channel of a
binary IO port when input and output channels were not the same
(e.g. when the port is the IO of a subprocess). Close-binary-input-
port seemed to have the same thinko.