changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: readline FFI

changeset 660: da507f0274b3
parent 659: cad61259ba57
child 661: 39170f311b8c
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 20 Sep 2024 22:18:48 -0400
files: lisp/ffi/readline/constants.lisp lisp/ffi/readline/readline.asd lisp/ffi/readline/readline.lisp
description: readline FFI
     1.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2+++ b/lisp/ffi/readline/constants.lisp	Fri Sep 20 22:18:48 2024 -0400
     1.3@@ -0,0 +1,36 @@
     1.4+("readline/readline.h")
     1.5+((:integer +rl-readline-version+ "RL_READLINE_VERSION")
     1.6+ (:integer +rl-version-major+ "RL_VERSION_MAJOR")
     1.7+ (:integer +rl-version-minor+ "RL_VERSION_MINOR")
     1.8+ (:integer +no-match+ "NO_MATCH")
     1.9+ (:integer +single-match+ "SINGLE_MATCH")
    1.10+ (:integer +mult-match+ "MULT_MATCH")
    1.11+ (:integer +rl-state-none+ "RL_STATE_NONE")
    1.12+ (:integer +rl-state-initializing+ "RL_STATE_INITIALIZING")
    1.13+ (:integer +rl-state-initialized+ "RL_STATE_INITIALIZED")
    1.14+ (:integer +rl-state-termprepped+ "RL_STATE_TERMPREPPED")
    1.15+ (:integer +rl-state-readcmd+ "RL_STATE_READCMD")
    1.16+ (:integer +rl-state-metanext+ "RL_STATE_METANEXT")
    1.17+ (:integer +rl-state-dispatching+ "RL_STATE_DISPATCHING")
    1.18+ (:integer +rl-state-moreinput+ "RL_STATE_MOREINPUT")
    1.19+ (:integer +rl-state-isearch+ "RL_STATE_ISEARCH")
    1.20+ (:integer +rl-state-nsearch+ "RL_STATE_NSEARCH")
    1.21+ (:integer +rl-state-search+ "RL_STATE_SEARCH")
    1.22+ (:integer +rl-state-numericarg+ "RL_STATE_NUMERICARG")
    1.23+ (:integer +rl-state-macroinput+ "RL_STATE_MACROINPUT")
    1.24+ (:integer +rl-state-macrodef+ "RL_STATE_MACRODEF")
    1.25+ (:integer +rl-state-overwrite+ "RL_STATE_OVERWRITE")
    1.26+ (:integer +rl-state-completing+ "RL_STATE_COMPLETING")
    1.27+ (:integer +rl-state-sighandler+ "RL_STATE_SIGHANDLER")
    1.28+ (:integer +rl-state-undoing+ "RL_STATE_UNDOING")
    1.29+ (:integer +rl-state-inputpending+ "RL_STATE_INPUTPENDING")
    1.30+ (:integer +rl-state-ttycsaved+ "RL_STATE_TTYCSAVED")
    1.31+ (:integer +rl-state-callback+ "RL_STATE_CALLBACK")
    1.32+ (:integer +rl-state-vimotion+ "RL_STATE_VIMOTION")
    1.33+ (:integer +rl-state-multikey+ "RL_STATE_MULTIKEY")
    1.34+ (:integer +rl-state-vicmdonce+ "RL_STATE_VICMDONCE")
    1.35+ (:integer +rl-state-charsearch+ "RL_STATE_CHARSEARCH")
    1.36+ (:integer +rl-state-redisplaying+ "RL_STATE_REDISPLAYING")
    1.37+ (:integer +rl-state-done+ "RL_STATE_DONE")
    1.38+ (:integer +rl-state-timeout+ "RL_STATE_TIMEOUT")
    1.39+ (:integer +rl-state-eof+ "RL_STATE_EOF"))
     2.1--- a/lisp/ffi/readline/readline.asd	Fri Sep 20 19:59:36 2024 -0400
     2.2+++ b/lisp/ffi/readline/readline.asd	Fri Sep 20 22:18:48 2024 -0400
     2.3@@ -10,9 +10,19 @@
     2.4 ;; designed to handle many of the tricky OS-specific bits for us.
     2.5 
     2.6 ;;; Code:
     2.7+(eval-when (:compile-toplevel :load-toplevel :execute)
     2.8+  (require :sb-grovel))
     2.9+
    2.10+(defpackage :readline.sys
    2.11+  (:use :cl :asdf :sb-grovel :sb-alien))
    2.12+
    2.13+(in-package :readline.sys)
    2.14+
    2.15 (defsystem :readline
    2.16-  :depends-on (:std)
    2.17-  :components ((:file "pkg"))
    2.18+  :depends-on (:std :sb-grovel)
    2.19+  :components ((:file "pkg")
    2.20+               (grovel-constants-file "constants"
    2.21+                                      :package :readline))
    2.22   :in-order-to ((test-op (test-op "readline/tests"))))
    2.23 
    2.24 (defsystem :readline/tests
     3.1--- a/lisp/ffi/readline/readline.lisp	Fri Sep 20 19:59:36 2024 -0400
     3.2+++ b/lisp/ffi/readline/readline.lisp	Fri Sep 20 22:18:48 2024 -0400
     3.3@@ -12,10 +12,80 @@
     3.4                    :list-all 63
     3.5                    :not-list-cmn-prefix 64)
     3.6 
     3.7-(define-alien-type rl-history-entry (struct rl-history-entry
     3.8+(define-alien-type rl-hist-entry (struct rl-hist-entry
     3.9                                             (line (* t))
    3.10                                             (time (* t))
    3.11                                             (data (* t))))
    3.12+
    3.13+;; HS_STIFLED
    3.14+(define-alien-type rl-history-state
    3.15+    (struct rl-history-state
    3.16+            (hist-entries (array (* rl-hist-entry)))
    3.17+            (offset int)
    3.18+            (length int)
    3.19+            (size int)
    3.20+            (flags int)))
    3.21+
    3.22+(define-alien-enum (rl-undo-code int :test eq)
    3.23+                   :delete 0
    3.24+                   :insert 1
    3.25+                   :begin 2
    3.26+                   :end 3)
    3.27+
    3.28+(define-alien-type rl-undo-list 
    3.29+  (struct rl-undo-list
    3.30+          (next (* (struct rl-undo-list)))
    3.31+          (start int)
    3.32+          (end int)
    3.33+          (text c-string)
    3.34+          (what rl-undo-code)))
    3.35+
    3.36+(define-alien-type rl-command-func
    3.37+    (function int int int))
    3.38+
    3.39+(define-alien-type rl-funmap
    3.40+  (struct rl-funmap
    3.41+          (name c-string)
    3.42+          (function (* rl-command-func))))
    3.43+
    3.44+(define-alien-type rl-keymap-entry
    3.45+    (struct rl-keymap-entry
    3.46+            (type char)
    3.47+            (function (* rl-command-func))))
    3.48+
    3.49+(define-alien-type rl-keymap (array rl-keymap-entry))
    3.50+
    3.51+(define-alien-type readline-state 
    3.52+  (struct readline-state
    3.53+          (point int)
    3.54+          (end int)
    3.55+          (mark int)
    3.56+          (buflen int)
    3.57+          (buffer c-string)
    3.58+          (ul (* rl-undo-list))
    3.59+          (prompt c-string)
    3.60+          (rlstate int)
    3.61+          (done int)
    3.62+          (kmap rl-keymap)
    3.63+          (lastfunc (* rl-command-func))
    3.64+          (insmode int)
    3.65+          (edmode int)
    3.66+          (kseq c-string)
    3.67+          (kseqlen int)
    3.68+          (pendingin int)
    3.69+          (inf (* t))
    3.70+          (outf (* t))
    3.71+          (macro c-string)
    3.72+          (catchsigs int)
    3.73+          (catchsigwinch int)
    3.74+          (entryfunc (* rl-command-func))
    3.75+          (menuentryfunc (* rl-command-func))
    3.76+          (ignorefunc (* rl-command-func))
    3.77+          (attemptfunc (* rl-command-func))
    3.78+          (wordbreakchars c-string)
    3.79+          (reserved (array char 64))))
    3.80+
    3.81+;;; Well Known Vars
    3.82 (macrolet ((def-rl-var (name var type)
    3.83              `(define-alien-variable (,name ,var) ,type)))
    3.84   (def-rl-var "rl_line_buffer" *line-buffer* c-string)
    3.85@@ -74,33 +144,196 @@
    3.86   (def-rl-var "history_base" *history-base* int)
    3.87   (def-rl-var "history_length" *history-length* int))
    3.88 
    3.89-(defvar *states*
    3.90-  '(:initializing ; 0x0000001 initializing
    3.91-    :initialized  ; 0x0000002 initialization done
    3.92-    :termprepped  ; 0x0000004 terminal is prepped
    3.93-    :readcmd      ; 0x0000008 reading a command key
    3.94-    :metanext     ; 0x0000010 reading input after ESC
    3.95-    :dispatching  ; 0x0000020 dispatching to a command
    3.96-    :moreinput    ; 0x0000040 reading more input in a command function
    3.97-    :isearch      ; 0x0000080 doing incremental search
    3.98-    :nsearch      ; 0x0000100 doing non-incremental search
    3.99-    :search       ; 0x0000200 doing a history search
   3.100-    :numericarg   ; 0x0000400 reading numeric argument
   3.101-    :macroinput   ; 0x0000800 getting input from a macro
   3.102-    :macrodef     ; 0x0001000 defining keyboard macro
   3.103-    :overwrite    ; 0x0002000 overwrite mode
   3.104-    :completing   ; 0x0004000 doing completion
   3.105-    :sighandler   ; 0x0008000 in readline sighandler
   3.106-    :undoing      ; 0x0010000 doing an undo
   3.107-    :inputpending ; 0x0020000 rl_execute_next called
   3.108-    :ttycsaved    ; 0x0040000 tty special chars saved
   3.109-    :callback     ; 0x0080000 using the callback interface
   3.110-    :vimotion     ; 0x0100000 reading vi motion arg
   3.111-    :multikey     ; 0x0200000 reading multiple-key command
   3.112-    :vicmdonce    ; 0x0400000 entered vi command mode at least once
   3.113-    :redisplaying ; 0x0800000 updating terminal display
   3.114-    :done)        ; 0x1000000 done; accepted line
   3.115-  "Possible state values for `+readline-state+'.")
   3.116+;; low-level
   3.117+(macrolet ((def-rl-int2 (&rest names)
   3.118+             `(progn
   3.119+                ,@(loop for i in names
   3.120+                        collect
   3.121+                           (std:with-gensyms (i1 i2)
   3.122+                             `(define-alien-routine ,i int (,i1 int) (,i2 int)))))))
   3.123+  (def-rl-int2 "rl_digit_argument" "rl_universal_argument" "rl_forward_byte"
   3.124+    "rl_forward_char" "rl_forward" "rl_backward_byte" "rl_backward_char" "rl_backward"
   3.125+    "rl_beg_of_line" "rl_end_of_line" "rl_forward_word" "rl_backward_word" "rl_refresh_line"
   3.126+    "rl_clear_screen" "rl_clear_display" "rl_skip_csi_sequence" "rl_arrow_keys"
   3.127+    "rl_previous_screen_line" "rl_next_screen_line"
   3.128+    "rl_insert" "rl_quoted_insert" "rl_tab_insert" "rl_newline" "rl_do_lowercase_version"
   3.129+    "rl_rubout" "rl_delete" "rl_rubout_or_delete" "rl_delete_horizontal_space" "rl_delete_or_show_completions"
   3.130+    "rl_insert_comment" "rl_upcase_word" "rl_downcase_word" "rl_capitalize_word" "rl_transpose_words"
   3.131+    "rl_transpose_chars" "rl_char_search" "rl_backward_char_search" "rl_beginning_of_history"
   3.132+    "rl_end_of_history" "rl_get_next_history" "rl_get_previous_history" "rl_operate_and_get_next"
   3.133+    "rl_fetch_history" "rl_set_mark" "rl_exchange_point_and_mark" "rl_vi_editing_mode"
   3.134+    "rl_emacs_editing_mode" "rl_overwrite_mode" "rl_re_read_init_file" "rl_dump_functions" "rl_dump_macros"
   3.135+    "rl_dump_variables" "rl_complete" "rl_possible_completions" "rl_insert_completions" "rl_old_menu_complete"
   3.136+    "rl_backward_menu_complete" "rl_kill_word" "rl_backward_kill_word" "rl_kill_line" "rl_backward_kill_line"
   3.137+    "rl_kill_full_line" "rl_unix_word_rubout" "rl_unix_line_discard" "rl_copy_region_to_kill" "rl_kill_region"
   3.138+    "rl_copy_forward_word" "rl_copy_backward_word" "rl_yank" "rl_yank_pop" "rl_yank_nth_arg" "rl_yank_last_arg"
   3.139+    "rl_bracketed_paste_begin" 
   3.140+    #+win32 "rl_paste_from_clipboard"
   3.141+    "rl_reverse_search_history" "rl_forward_search_history" "rl_start_kbd_macro" "rl_end_kbd_macro"
   3.142+    "rl_call_last_kbd_macro" "rl_print_last_kbd_macro" "rl_revert_line" "rl_undo_command" "rl_tilde_expand"
   3.143+    "rl_restart_output" "rl_stop_output" "rl_abort" "rl_tty_status" 
   3.144+    "rl_history_search_forward" "rl_history_search_backward" "rl_history_substr_search_forward"
   3.145+    "rl_history_substr_search_backward" "rl_noninc_forward_search" "rl_noninc_reverse_search"
   3.146+    "rl_noninc_forward_search_again" "rl_noninc_reverse_search_again"
   3.147+    "rl_insert_close" "rl_vi_redo" "rl_vi_undo" "rl_vi_yank_arg" "rl_vi_fetch_history" "rl_vi_search_again"
   3.148+    "rl_vi_search" "rl_vi_complete" "rl_vi_tilde_expand" "rl_vi_prev_word" "rl_vi_next_word" "rl_vi_end_word"
   3.149+    "rl_vi_insert_beg" "rl_vi_append_mode" "rl_vi_append_eol" "rl_vi_eof_maybe" "rl_vi_insertion_mode"
   3.150+    "rl_vi_insert_mode" "rl_vi_movement_mode" "rl_vi_arg_digit" "rl_vi_change_case" "rl_vi_put" "rl_vi_column" 
   3.151+    "rl_vi_delete_to" "rl_vi_change_to" "rl_vi_yank_to" "rl_vi_yank_pop" "rl_vi_rubout" "rl_vi_delete"
   3.152+    "rl_vi_back_to_indent" "rl_vi_unix_word_rubout" "rl_vi_first_print" "rl_vi_char_search" "rl_vi_match" 
   3.153+    "rl_vi_change_char" "rl_vi_subst" "rl_vi_overstrike" "rl_vi_overstrike_delete" "rl_vi_replace"
   3.154+    "rl_vi_set_mark" "rl_vi_goto_mark" 
   3.155+    ;; NOTE 2024-09-20: there are uppercase versions - fWord eWord
   3.156+    "rl_vi_fword" "rl_vi_bword" "rl_vi_eword"))
   3.157+
   3.158+;;; Well Published Functions
   3.159+(define-alien-routine "readline" c-string (prompt c-string))
   3.160+(define-alien-routine "rl_set_prompt" int (prompt c-string))
   3.161+(define-alien-routine "rl_expand_prompt" int (prompt c-string))
   3.162+(define-alien-routine "rl_initialize" int)
   3.163+;; undocument; unused by readline
   3.164+;; (define-alien-routine "rl_discard_argument" int)
   3.165+
   3.166+;; [[file:/usr/include/readline/readline.h::/* Utility functions to bind keys to readline commands. */][last]]
   3.167+(define-alien-routine "rl_add_defun" int (name c-string) (func (* rl-command-func)))
   3.168+(define-alien-routine "rl_bind_key" int (key int) (function (* rl-command-func)))
   3.169+(define-alien-routine "rl_bind_key_in_map" int (key int) (func (* rl-command-func)) (map rl-keymap))
   3.170+(define-alien-routine "rl_unbind_key" int (key int))
   3.171+(define-alien-routine "rl_unbind_key_in_map" int (key int) (map rl-keymap))
   3.172+(define-alien-routine "rl_bind_key_if_unbound" int (key int) (function (* rl-command-func)))
   3.173+(define-alien-routine "rl_bind_key_if_unbound_in_map" int (key int) (function (* rl-command-func)) (map rl-keymap))
   3.174+(define-alien-routine "rl_generic_bind" int (key int) (str c-string) (name c-string) (map rl-keymap))
   3.175+(define-alien-routine "rl_variable_value" c-string (name c-string))
   3.176+(define-alien-routine "rl_variable_bind" int (name c-string) (val c-string))
   3.177+
   3.178+(define-alien-routine "rl_read_init_file" int (file c-string))
   3.179+(define-alien-routine "rl_parse_and_bind" int (binding c-string))
   3.180+
   3.181+;; keymaps
   3.182+(define-alien-routine "rl_make_bare_keymap" rl-keymap)
   3.183+(define-alien-routine "rl_empty_keymap" int (map rl-keymap))
   3.184+(define-alien-routine "rl_copy_keymap" rl-keymap (map rl-keymap))
   3.185+(define-alien-routine "rl_make_keymap" rl-keymap)
   3.186+(define-alien-routine "rl_discard_keymap" void (map rl-keymap))
   3.187+(define-alien-routine "rl_free_keymap" void (map rl-keymap))
   3.188+(define-alien-routine "rl_set_keymap" void (map rl-keymap))
   3.189+(define-alien-routine "rl_get_keymap" rl-keymap)
   3.190+(define-alien-routine "rl_set_keymap_name" int (name c-string) (map rl-keymap))
   3.191+
   3.192+;; funmaps
   3.193+(define-alien-routine "rl_add_funmap_entry" int (name c-string) (function (* rl-command-func)))
   3.194+(define-alien-routine "rl_funmap_names" (array c-string))
   3.195+
   3.196+;; kbd macros
   3.197+(define-alien-routine "rl_push_macro_input" void (input c-string))
   3.198+
   3.199+;; undo
   3.200+(define-alien-routine "rl_add_undo" void (code rl-undo-code) (i1 int) (i2 int) (input c-string))
   3.201+(define-alien-routine "rl_free_undo_list" void)
   3.202+(define-alien-routine "rl_do_undo" int)
   3.203+(define-alien-routine "rl_begin_undo_group" int)
   3.204+(define-alien-routine "rl_end_undo_group" int)
   3.205+(define-alien-routine "rl_modifying" int (i1 int) (i2 int))
   3.206+
   3.207+;; redisplay
   3.208+(define-alien-routine "rl_redisplay" void)
   3.209+(define-alien-routine "rl_on_new_line" int)
   3.210+(define-alien-routine "rl_on_new_line_with_prompt" int)
   3.211+(define-alien-routine "rl_forced_update_display" int)
   3.212+(define-alien-routine "rl_clear_visible_line" int)
   3.213+(define-alien-routine "rl_clear_message" int)
   3.214+(define-alien-routine "rl_reset_line_state" int)
   3.215+(define-alien-routine "rl_crlf" int)
   3.216+
   3.217+;; mark and region
   3.218+(define-alien-routine "rl_keep_mark_active" void)
   3.219+(define-alien-routine "rl_activate_mark" void)
   3.220+(define-alien-routine "rl_deactivate_mark" void)
   3.221+(define-alien-routine "rl_mark_active_p" int)
   3.222+(define-alien-routine "rl_message" int)
   3.223+(define-alien-routine "rl_show_char" int (char int))
   3.224+;; undocumented
   3.225+(define-alien-routine "rl_character_len" int (i1 int) (i2 int))
   3.226+(define-alien-routine "rl_redraw_prompt_last_line" void)
   3.227+
   3.228+(define-alien-routine "rl_save_prompt" void)
   3.229+(define-alien-routine "rl_restore_prompt" void)
   3.230+
   3.231+;; text editing
   3.232+(define-alien-routine "rl_replace_line" void (line c-string) (idx int))
   3.233+(define-alien-routine "rl_insert_text" int (text c-string))
   3.234+(define-alien-routine "rl_delete_text" int (i1 int) (i2 int))
   3.235+(define-alien-routine "rl_kill_text" int (i1 int) (i2 int))
   3.236+(define-alien-routine "rl_copy_text" c-string (i1 int) (i2 int))
   3.237+
   3.238+;; tty
   3.239+(define-alien-routine "rl_prep_terminal" void (i int))
   3.240+(define-alien-routine "rl_deprep_terminal" void)
   3.241+(define-alien-routine "rl_tty_set_default_bindings" void (map rl-keymap))
   3.242+(define-alien-routine "rl_tty_unset_default_bindings" void (map rl-keymap))
   3.243+(define-alien-routine "rl_tty_set_echoing" int (val int))
   3.244+(define-alien-routine "rl_reset_terminal" int (val c-string))
   3.245+(define-alien-routine "rl_resize_terminal" void)
   3.246+(define-alien-routine "rl_set_screen_size" void (x int) (y int))
   3.247+(define-alien-routine "rl_get_screen_size" void (i1 (* int)) (i2 (* int)))
   3.248+(define-alien-routine "rl_reset_screen_size" void)
   3.249+
   3.250+(define-alien-routine "rl_get_termcap" c-string (key c-string))
   3.251+
   3.252+;; character input
   3.253+(define-alien-routine "rl_stuff_char" int (c int))
   3.254+(define-alien-routine "rl_execute_next" int (i int))
   3.255+(define-alien-routine "rl_clear_pending_input" int)
   3.256+(define-alien-routine "rl_read_key" int)
   3.257+(define-alien-routine "rl_getc" int (c (* t))) ;; NOTE: (* FILE)
   3.258+(define-alien-routine "rl_set_keyboard_input_timeout" int (val int))
   3.259+
   3.260+;;timeouts 
   3.261+(define-alien-routine "rl_set_timeout" int (n1 unsigned-int) (n2 unsigned-int))
   3.262+(define-alien-routine "rl_timeout_remaining" int (n1 (* unsigned-int)) (n2 (* unsigned-int)))
   3.263+
   3.264+;; public utils
   3.265+(define-alien-routine "rl_extend_lind_buffer" void (i int))
   3.266+(define-alien-routine "rl_ding" int)
   3.267+(define-alien-routine "rl_alphabetic" int (i int))
   3.268+(define-alien-routine "rl_free" void (o (* t)))
   3.269+
   3.270+;; signals
   3.271+(define-alien-routine "rl_set_signals" int)
   3.272+(define-alien-routine "rl_clear_signals" int)
   3.273+(define-alien-routine "rl_cleanup_after_signal" void)
   3.274+(define-alien-routine "rl_reset_after_signal" void)
   3.275+(define-alien-routine "rl_free_line_state" void)
   3.276+(define-alien-routine "rl_pending_signal" int)
   3.277+(define-alien-routine "rl_check_signals" void)
   3.278+(define-alien-routine "rl_echo_signal_char" void (c int))
   3.279+(define-alien-routine "rl_set_paren_blink_timeout" int (val int))
   3.280+
   3.281+;; history
   3.282+(define-alien-routine "rl_clear_history" void)
   3.283+(define-alien-routine "rl_maybe_save_line" int)
   3.284+(define-alien-routine "rl_maybe_unsave_line" int)
   3.285+(define-alien-routine "rl_maybe_replace_line" int)
   3.286+
   3.287+;; completion
   3.288+(define-alien-routine "rl_complete_internal" int (i int))
   3.289+(define-alien-routine "rl_display_match_list" void (list (array c-string)) (i1 int) (i2 int))
   3.290+;; (define-alien-routine "rl_completion_matches" (array c-string) (input c-string) (function (* rl-compentry-func)))
   3.291+(define-alien-routine "rl_username_completion_function" c-string (name c-string) (i int))
   3.292+(define-alien-routine "rl_filename_completion_function" c-string (name c-string) (i int))
   3.293+(define-alien-routine "rl_completion_mode" int (function (* rl-command-func)))
   3.294+
   3.295+;; history.h
   3.296+(define-alien-routine "using_history" void)
   3.297+(define-alien-routine "add_history" void (line c-string))
   3.298+(define-alien-routine "clear_history" void)
   3.299+(define-alien-routine "stifle_history" void (i int))
   3.300+(define-alien-routine "unstifle_history" int)
   3.301+(define-alien-routine "history_is_stifled" int)
   3.302+(define-alien-routine "history_list" (array (* rl-hist-entry)))
   3.303+
   3.304+(define-alien-routine "rl_save_state" int (state (* readline-state)))
   3.305+(define-alien-routine "rl_restore_state" int (state (* readline-state)))
   3.306 
   3.307 (defvar +c-buffer-size+ 256
   3.308   "How many bytes to allocate per Lisp string when converting list of
   3.309@@ -112,9 +345,6 @@
   3.310   (values (ldb (byte 8 8) version)
   3.311           (ldb (byte 8 0) version)))
   3.312 
   3.313-;; (defun decode-state (state)
   3.314-;;   "Transform Readline state STATE into list of keywords. See `+states+' for
   3.315-;; list of components that can appear in result list."
   3.316 ;;   (mapcan (lambda (index keyword)
   3.317 ;;             (when (logbitp index state)
   3.318 ;;               (list keyword)))
   3.319@@ -154,7 +384,7 @@
   3.320 PREDICATE. Return T if there is no history saved."
   3.321   (if (zerop *history-length*)
   3.322       t
   3.323-      (with-alien ((s rl-history-entry))
   3.324+      (with-alien ((s rl-hist-entry))
   3.325         (funcall predicate
   3.326                  ;; TODO 2024-09-19: does SBCL know how to conver this to a lisp string automatically?
   3.327                  (with-alien-slots
   3.328@@ -166,9 +396,6 @@
   3.329                      s
   3.330                    line)))))
   3.331 
   3.332-(define-alien-routine "readline" (* t) (prompt c-string))
   3.333-(define-alien-routine "add_history" void (line c-string))
   3.334-
   3.335 (defun rl (&key
   3.336            prompt
   3.337            already-prompted
   3.338@@ -208,12 +435,6 @@
   3.339              str)
   3.340         (free-alien ptr)))))
   3.341 
   3.342-;; (defun ensure-initialization ()
   3.343-;;   "Make sure that Readline is initialized. If it's not initialized yet,
   3.344-;; initialize it."
   3.345-;;   (unless (find :initialized *readline-state*)
   3.346-;;     (initialize)))
   3.347-
   3.348 ;; (defmacro with-possible-redirection (filename append &body body)
   3.349 ;;   "If FILENAME is not NIL, try to create C file named FILENAME,
   3.350 ;; temporarily reassign `*outstream*' to pointer to this file, perform BODY,