Much more Lispy(tm) Tcl/Tk 9.0
-
VERSION: 1.0
-
Currenctly only tested under:
- SBCL 2.6.4 / Linux x86_64
- libtcl9.0 (9.0.1+dfsg-2)
- libtk9.0 (9.0.1-3)
-
Suggestions, Patches, Issues and PRs are Welcomed.
...More hacks will be come, anytime soon. ;-)
- tclish
- Table of Contents
- Introduction
- Examples
- Dependencies
- Supporting
- License
- APIs
- PACKAGE:
TCLISH/CFFI - PACKAGE:
TCLISH/REDIR-TO-OUTSTREAM-CHAN- CFFI-TYPE:
CHAN-INSTANCE-COUNTER-T - CLASS:
<REDIR-TO-OUTSTREAM-CHAN> - FUNCTION:
%NEW-INSTANCE-COUNTER - FUNCTION:
%PUT-INSTANCE - FUNCTION:
%REM-INSTANCE - METHOD:
DEALLOC((CHAN <REDIR-TO-OUTSTREAM-CHAN>)) - METHOD:
REGIST((CHAN <REDIR-TO-OUTSTREAM-CHAN>) &KEY TCL-INTERP-PTR TCL-STD-CHAN-TYPE) - METHOD:
UNREGIST((CHAN <REDIR-TO-OUTSTREAM-CHAN>) &KEY TCL-INTERP-PTR) - VARIABLE:
*CHAN-INSTANCE-COUNTER* - VARIABLE:
*LOCK* - VARIABLE:
*REGISTERED-CHAN-HT*
- CFFI-TYPE:
- PACKAGE:
TCLISH- CFFI-STRUCT:
TCL-EV-QUEUE-CB-EVT-S - CFFI-TYPE:
CALL-WHEN-DELETED-CB-COUNTER-T - CFFI-TYPE:
CMD-CB-COUNTER-T - CFFI-TYPE:
INTERP-TRACE-CB-COUNTER-T - CFFI-TYPE:
TCL-EV-QUEUE-CB-COUNTER-T - CFFI-TYPE:
TCL-EV-QUEUE-CB-EVT-S-PTR - CFFI-TYPE:
TRACE-CMD-CB-COUNTER-T - CFFI-TYPE:
TRACE-VAR-CB-COUNTER-T - CLASS:
<TCL-ARRAY-LINK> - CLASS:
<TCL-CMD-TRACE> - CLASS:
<TCL-VAR-LINK-BASE> - CLASS:
<TCL-VAR-LINK> - CLASS:
<TCL-VAR-TRACE> - CLASS:
TCL-EV-QUEUE-CB-EVT-S-TCLASS - CONDITION:
<TCL-ERROR> - FUNCTION:
%CMD-CB-COUNTER-VALUE-FROM-C - FUNCTION:
%CMD-CB-COUNTER-VALUE-FROM-C - FUNCTION:
%COMPOSE-NS-FQN - FUNCTION:
%TCL-EV-QUEUE-CB-COUNTER/VALUE-FROM-C - FUNCTION:
%TCL-EV-QUEUE-CB-COUNTER/VALUE-FROM-C - FUNCTION:
->FLAGS-BITS* - FUNCTION:
->FLAGS-BITS - FUNCTION:
->TCL-STRING-OBJ% - FUNCTION:
->TCL-STRING-OBJ - FUNCTION:
<-FLAGS-BITS - FUNCTION:
<-TCL-INT-BOOL - FUNCTION:
ALIAS/GET - FUNCTION:
ALIAS/OBJ - FUNCTION:
ALIAS/STR - FUNCTION:
ALIST->TCL-DICT - FUNCTION:
APPLY-LAMBDA - FUNCTION:
CALL-WHEN-DELETED/+ADD - FUNCTION:
CALL-WHEN-DELETED/-DEL - FUNCTION:
CALL-WHEN-DELETED/ALLOC-COUNTER-CFFI - FUNCTION:
CALL-WHEN-DELETED/CB - FUNCTION:
CALL-WHEN-DELETED/CB - FUNCTION:
CALL-WHEN-DELETED/COUNTER-CFFI - FUNCTION:
CALL-WHEN-DELETED/COUNTER-CFFI - FUNCTION:
CALL-WHEN-DELETED/DEL-CB - FUNCTION:
CALL-WHEN-DELETED/FREE-COUNTER-CFFI - FUNCTION:
CALL-WHEN-DELETED/INCR-COUNT - FUNCTION:
CALL-WHEN-DELETED/REGIST-CB - FUNCTION:
CALL-WHEN-DELETED/ROUTE-BY-CLIENT-DATA - FUNCTION:
CALL-WHEN-DELETED/UNREGIST-CB - FUNCTION:
CHK-GET/SET-VAR-AS-TYPE - FUNCTION:
CMD-INFO/FREE - FUNCTION:
CMD-INFO/FROM-CMD-OBJ - FUNCTION:
CMD-INFO/FROM-CMD-OBJ - FUNCTION:
CMD-INFO/FULL-NAME - FUNCTION:
CREATE-ENSEMBLE - FUNCTION:
CREATE-OBJ-COMMAND - FUNCTION:
CREATE-STRING-COMMAND - FUNCTION:
DEF-CMD/P - FUNCTION:
DEF-CMD/PP - FUNCTION:
ENSEMBLE/EXCLUDE - FUNCTION:
ENSEMBLE/INCLUDE - FUNCTION:
ENSEMBLE/RENAME - FUNCTION:
EVAL-TCL/STR - FUNCTION:
EVAL-TCL/TCL-OBJ-LIST - FUNCTION:
EVAL-TCL/TCL-OBJV - FUNCTION:
EVAL-TCL/TCL-STRING - FUNCTION:
EVAL-TCL - FUNCTION:
FLAGS-BIT? - FUNCTION:
FREE-TCL-OBJV - FUNCTION:
GET-VAR/OBJ - FUNCTION:
GET-VAR/STR - FUNCTION:
GET-VAR - FUNCTION:
HT->TCL-DICT - FUNCTION:
INTERP-TRACE/+TRACE - FUNCTION:
INTERP-TRACE/-DELETE - FUNCTION:
INTERP-TRACE/ALLOC-COUNTER-CFFI - FUNCTION:
INTERP-TRACE/CB - FUNCTION:
INTERP-TRACE/CB - FUNCTION:
INTERP-TRACE/COUNTER-CFFI - FUNCTION:
INTERP-TRACE/COUNTER-CFFI - FUNCTION:
INTERP-TRACE/DEL-CB - FUNCTION:
INTERP-TRACE/FREE-COUNTER-CFFI - FUNCTION:
INTERP-TRACE/INCR-COUNT - FUNCTION:
INTERP-TRACE/REGIST-CB - FUNCTION:
INTERP-TRACE/ROUTE-BY-CLIENT-DATA - FUNCTION:
INTERP-TRACE/UNREGIST-CB - FUNCTION:
INTERP/ACTIVE? - FUNCTION:
INTERP/CHILD - FUNCTION:
INTERP/CREATE-CHILD - FUNCTION:
INTERP/DELETED? - FUNCTION:
INTERP/EXPOSE-CMD - FUNCTION:
INTERP/HIDE-CMD - FUNCTION:
INTERP/INTERP-PATH - FUNCTION:
INTERP/PARENT - FUNCTION:
INTERP/SAFE? - FUNCTION:
LINK/+ARRAY - FUNCTION:
LINK/+VAR - FUNCTION:
LINK/-UNLINK - FUNCTION:
LINK/ALLOC-ARRAY - FUNCTION:
LINK/ALLOC-VAR-STR - FUNCTION:
LINK/ALLOC-VAR - FUNCTION:
LINK/ARRAY-CFFI-TYPE - FUNCTION:
LINK/ARRAY-TYPE? - FUNCTION:
LINK/COMMON-TYPE? - FUNCTION:
LINK/FREE-ARRAY - FUNCTION:
LINK/FREE-VAR-STR - FUNCTION:
LINK/FREE-VAR - FUNCTION:
LINK/READ-ARRAY - FUNCTION:
LINK/READ-VAR-STR - FUNCTION:
LINK/READ-VAR - FUNCTION:
LINK/UPDATE - FUNCTION:
LINK/VAR-CFFI-TYPE - FUNCTION:
LINK/VAR-TYPE? - FUNCTION:
LINK/WRITE-ARRAY - FUNCTION:
LINK/WRITE-VAR-STR - FUNCTION:
LINK/WRITE-VAR - FUNCTION:
LISP-BOOL->C-INT - FUNCTION:
LISP-VALUE-OR-NULLPTR - FUNCTION:
LIST->TCL-LIST - FUNCTION:
LIST->TCL-STRING-LIST - FUNCTION:
MNT-ZIPFS - FUNCTION:
NULLPTR->NIL - FUNCTION:
OBJV->TCL-OBJ-LIST - FUNCTION:
PACK-TCL-ERROR - FUNCTION:
QUEUE-EVT-FUNC - FUNCTION:
REMHASH-BY-VALUE - FUNCTION:
RESULT-AS - FUNCTION:
SET-TCL-RESULT-FROM-ERROR - FUNCTION:
SET-TCL-RESULT-STRING - FUNCTION:
SET-VAR/OBJ - FUNCTION:
SET-VAR/STR - FUNCTION:
SET-VAR - FUNCTION:
STR->TCL-ALLOCED-CHARP - FUNCTION:
TCL-NS - FUNCTION:
TCL-OBJ-LIST->OBJV - FUNCTION:
TCL-OBJ-LIST->TCL-LIST - FUNCTION:
TCL-RESULT-AS-ERROR - FUNCTION:
TRACE-CMD/+TRACE - FUNCTION:
TRACE-CMD/-UNTRACE - FUNCTION:
TRACE-CMD/ALLOC-COUNTER-CFFI - FUNCTION:
TRACE-CMD/CB - FUNCTION:
TRACE-CMD/CB - FUNCTION:
TRACE-CMD/COUNTER-CFFI - FUNCTION:
TRACE-CMD/COUNTER-CFFI - FUNCTION:
TRACE-CMD/DEL-CB - FUNCTION:
TRACE-CMD/ENFORCE-FLAGS - FUNCTION:
TRACE-CMD/FREE-COUNTER-CFFI - FUNCTION:
TRACE-CMD/INCR-COUNT - FUNCTION:
TRACE-CMD/LIST-ALL - FUNCTION:
TRACE-CMD/REGIST-CB - FUNCTION:
TRACE-CMD/ROUTE-BY-CLIENT-DATA - FUNCTION:
TRACE-CMD/UNREGIST-CB - FUNCTION:
TRACE-VAR/+TRACE - FUNCTION:
TRACE-VAR/-UNTRACE - FUNCTION:
TRACE-VAR/ALLOC-COUNTER-CFFI - FUNCTION:
TRACE-VAR/CB - FUNCTION:
TRACE-VAR/CB - FUNCTION:
TRACE-VAR/COUNTER-CFFI - FUNCTION:
TRACE-VAR/COUNTER-CFFI - FUNCTION:
TRACE-VAR/DEL-CB - FUNCTION:
TRACE-VAR/ENFORCE-FLAGS - FUNCTION:
TRACE-VAR/FREE-COUNTER-CFFI - FUNCTION:
TRACE-VAR/INCR-COUNT - FUNCTION:
TRACE-VAR/LIST-ALL - FUNCTION:
TRACE-VAR/REGIST-CB - FUNCTION:
TRACE-VAR/ROUTE-BY-CLIENT-DATA - FUNCTION:
TRACE-VAR/UNREGIST-CB - FUNCTION:
UMNT-ZIPFS - FUNCTION:
UNSET-VAR - FUNCTION:
WRAP-ERROR* - FUNCTION:
WRAP-ERROR - FUNCTION:
WRAP-RESULT - MACRO:
%DEFUN-CREATE-COMMAND - MACRO:
%TCL-CMD-PROC-CFFI-CALLBACK-BODY - MACRO:
APP-MAIN - MACRO:
DEF-CMD - MACRO:
DEF-ENSEMBLE - MACRO:
DEF-TCL-CALLBACK-PATTERN - MACRO:
DO+CHK - MACRO:
NCONCF-IF - MACRO:
QUEUE-EVT - MACRO:
TRACK-DEF-CMDS - MACRO:
WITH-CMD-INFO - MACRO:
WITH-INTERP - MACRO:
WITH-TCL-ERROR/RESULT - MACRO:
WITH-TCL-ERROR/THROWN - MACRO:
WITH-TCL-OBJV - METHOD:
DESTROY((ARR-LINK <TCL-ARRAY-LINK>)) - METHOD:
DESTROY((VAR-LINK <TCL-VAR-LINK>)) - METHOD:
LINKED-VALUE-AT((ARR-LINK <TCL-ARRAY-LINK>) INDEX) - METHOD:
LINKED-VALUE-AT(NEW-VALUE (ARR-LINK <TCL-ARRAY-LINK>) INDEX) - METHOD:
LINKED-VALUE((VAR-LINK <TCL-VAR-LINK>)) - METHOD:
LINKED-VALUE(NEW-VALUE (VAR-LINK <TCL-VAR-LINK>)) - METHOD:
UNTRACE-CMD((CMD-TRACE <TCL-CMD-TRACE>)) - METHOD:
UNTRACE-VAR((VAR-TRACE <TCL-VAR-TRACE>)) - METHOD:
UPDATE((VAR-LINK <TCL-VAR-LINK-BASE>)) - VARIABLE:
*CALL-WHEN-DELETED-CB-COUNTER* - VARIABLE:
*CALL-WHEN-DELETED-CB-HT* - VARIABLE:
*CALL-WHEN-DELETED-CB-LOCK* - VARIABLE:
*DEF-CMD-NS* - VARIABLE:
*DEF-CMD-TRACKER* - VARIABLE:
*DEF-CMD-TRACKING-HT* - VARIABLE:
*DO+CHK/ERROR?* - VARIABLE:
*INTERP-TRACE-CB-COUNTER* - VARIABLE:
*INTERP-TRACE-CB-HT* - VARIABLE:
*INTERP-TRACE-CB-LOCK* - VARIABLE:
*STRINGIFY-FOR-TCL-OBJ-FUNC* - VARIABLE:
*TCL-CMD-CB-COUNTER* - VARIABLE:
*TCL-CMD-LOCK* - VARIABLE:
*TCL-CMD-OBJ-CB-HT* - VARIABLE:
*TCL-CMD-STRING-CB-HT* - VARIABLE:
*TCL-EV-QUEUE-CB-COUNTER* - VARIABLE:
*TCL-EV-QUEUE-CB-HT* - VARIABLE:
*TCL-EV-QUEUE-LOCK* - VARIABLE:
*TCL-INTERP* - VARIABLE:
*TRACE-CMD-CB-COUNTER* - VARIABLE:
*TRACE-CMD-CB-HT* - VARIABLE:
*TRACE-CMD-CB-LOCK* - VARIABLE:
*TRACE-VAR-CB-COUNTER* - VARIABLE:
*TRACE-VAR-CB-HT* - VARIABLE:
*TRACE-VAR-CB-LOCK* - VARIABLE:
*VAR-FLAGS* - VARIABLE:
+LINK/ARRAY-CFFI-TYPE-PLIST+ - VARIABLE:
+LINK/COMMON-CFFI-TYPE-PLIST+ - VARIABLE:
+LINK/VAR-CFFI-TYPE-PLIST+ - VARIABLE:
+TCL-TRACE-LEVEL-ANY+ - VARIABLE:
+TCL-TRACE-LEVEL-ONLY-TOP+ - VARIABLE:
+TCL-TRACE-LEVEL-ONLY-TOP-AND-ONE-MORE+
- CFFI-STRUCT:
- PACKAGE:
tclish is a Lisp wrapper around Tcl/Tk 9.0 C APIs, which
provides easier ways to interact with Tcl/Tk.
All with Easy and Powerful Lisp DSLs.
Interested? Please refer the "Examples" section below.
(app-main
(:tk-init? t
:tk-main-loop? t)
(eval-tcl "button .btn -text {<esc>:q!} -command {destroy .}"
"pack .btn"))- ZipFS supports builtin, your Lisp executable image is the new Starkit ⭐
- (NOTE Tk DSL will be available soon, I'm working on it😅)
(def-cmd ("AWESOME_PROC")
(format t "HI!: ~a ~a~%" interp args)
:I-AM-A-RESULT-VALUE)
(eval-tcl "AWESOME_PROC"
"puts {WAS Awesome}")A comparasion table with other great Tcl/Tk libraries for Common Lisp:
| Points | |
|---|---|
| tclish | based on complete Tcl/Tk 9.0 / CFFI Binding : raw-cffi-tcl9 |
| 😅 Need to be careful with DLLs, FFIs. | |
| 🐥 Just born yesterday | |
| 🐣 Doesn't even have a proper Tk abstrations, (not yet, working on it) | |
| 😍 Freely access internals of Tcl/Tk (a bit?) | |
| 😅 Not widely tested (not yet) | |
| 😍 Focused on integrating Tcl/Tk easily with Lisp | |
| 😍 ZipFS supports builtin | |
| 🤩 I love working with it! | |
| ltk | using wish subprocess + pipe communication, thus not Tcl 8.6/9.0 specific. |
| 😍 No need to worry about DLLs, FFIs. | |
| 😍 Very easy to writing a Tk application in Lisp. | |
| 😍 Wonderful documentation | |
| nodgui | based on ltk |
| 😍 More modern, ttk, megawidgets... | |
| 😍 Actively maintained (in 2026) | |
| 😍 Wonderful documentation | |
| 🙀 More heavier than ltk with OpenGL, SDL... | |
| cl-simple-tk | CFFI binding based. |
| 😍 Very easy to write a Tk application in Lisp. | |
| 😍 Lightweight CFFI bindings, only binds minimum C functions for writing Tk code. | |
| (not really an expert of this library) |
> (ql:quickload :tclish-examples)
> (tclish/examples/05-tk-main-loop:main-tk-main-loop)-
- Very basic usage of
app-mainandeval-tcl.
- Very basic usage of
-
- Writing new Tcl command written in Lisp.
- Getting arguments from Tcl, returning a value, or raising an error.
-
Threadin in Lisp-side, Tcl Event Queue
- Utilise thread in Lisp of custom Tcl command.
- and How to give response in thread-safe way to the main Tcl
thread, from background thread. (... by using
Tcl_ThreadQueueEvent)
-
Unstable Redirecting Tcl standard channel to Lisp stream
- Capture Tcl standard output channels (
stdout,stderr) to Lisp streams like*standard-output*
- Capture Tcl standard output channels (
-
- Creating simple Tcl/Tk application easily with
app-main-macro.
- Creating simple Tcl/Tk application easily with
-
- How to regist custom commands within Tcl namespaces with
def-cmd-macro.
- How to regist custom commands within Tcl namespaces with
-
- How to group custom macros into a Tcl ensembles with
def-ensembleanddef-cmdmacros.
- How to group custom macros into a Tcl ensembles with
-
- Invoking callback (Tcl lambda list) from custom command written in Lisp.
-
Getting, Setting, and Unsetting Tcl variables with Tcl namespaces
-
Auto-Synchronised Variables between Tcl and Lisp through Link Var/Array:
-
Unstable Tracing Tcl Variables at Lisp
-
Unstable Tracing Tcl Commands at Lisp
-
A good base to build a stepping debugger and performance profiler on:
- Put a symlink of the
.asdfile into your$HOME/common-lisp-directory, and:> (asdf:clear-configuration) > (ql:quickload :tclish)
Enjoying this project? Consider supporting its growth via the Ethereum address in my profile.
Licensed under the MIT License
Please read the ./LICENSE
- SCOPE: EXTERNAL
- CFFI NAME:
memcpy - CFFI RETURN-TYPE:
POINTER - LAMBDA LIST:
((TCLISH/CFFI::DEST :POINTER) (TCLISH/CFFI::SRC :POINTER) (TCLISH/CFFI::N :SIZE)) - SETF?
NIL
- SCOPE: EXTERNAL
- CFFI NAME:
memset - CFFI RETURN-TYPE:
POINTER - LAMBDA LIST:
((TCLISH/CFFI::DEST :POINTER) (TCLISH/CFFI::VALUE :INT) (TCLISH/CFFI::SIZE :SIZE)) - SETF?
NIL
- SCOPE: EXTERNAL
- CFFI NAME:
strlen - CFFI RETURN-TYPE:
SIZE - LAMBDA LIST:
((TCLISH/CFFI::DEST :POINTER)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::DEST TCLISH/CFFI::SRC TCLISH/CFFI::N) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::DEST TCLISH/CFFI::VALUE TCLISH/CFFI::SIZE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::PTR COUNT) - SETF?
NIL
Converts an array of C-pointers (PTR / void**) with length of COUNT into a list of CFFI pointers.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::PTR COUNT) - SETF?
NIL
Converts an array of C-strings (PTR / char**) with length of COUNT into a
list of lisp strings.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::DEST) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::CFFI-TYPE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::PTR TCLISH/CFFI::CH TCLISH/CFFI::TYPE-SPEC) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH/CFFI::PTR TCLISH/CFFI::TYPE-SPEC) - SETF?
NIL
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT16
- SCOPE: EXTERNAL
- SLOTS:
- SLOT
NAME/ TYPE:STRING- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:NAME - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:NAME) - WRITERS:
NIL
- ALLOCATION:
- SLOT
LISP-STREAM/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:LISP-STREAM - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:LISP-STREAM) - WRITERS:
NIL
- ALLOCATION:
- SLOT
TRIM/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:TRIM - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:TRIM) - WRITERS:
NIL - nil | :left | :right | :both | (func (str) -> str)
- ALLOCATION:
- SLOT
SKIP-0-LEN/ TYPE:BOOLEAN- ALLOCATION:
INSTANCE - INITFORM:
T - INITARG:
:SKIP-0-LEN - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:SKIP-0-LEN) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CHAN-TYPE-PTR/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:CHAN-TYPE-PTR) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CLIENT-DATA/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH:CLIENT-DATA) - WRITERS:
NIL
- ALLOCATION:
- SLOT
TCL-CHAN/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:TCL-CHAN) - WRITERS:
NIL
- ALLOCATION:
- SLOT
TCL-STD-CHAN-TYPE/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN:TCL-STD-CHAN-TYPE) - WRITERS:
NIL
- ALLOCATION:
- SLOT
- SUPERCLASSES:
NIL - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN::CHAN) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH/REDIR-TO-OUTSTREAM-CHAN::CHAN) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH/REDIR-TO-OUTSTREAM-CHAN::CHAN TCLISH/REDIR-TO-OUTSTREAM-CHAN:<REDIR-TO-OUTSTREAM-CHAN>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH/REDIR-TO-OUTSTREAM-CHAN::CHAN TCLISH/REDIR-TO-OUTSTREAM-CHAN:<REDIR-TO-OUTSTREAM-CHAN>) &KEY RAW-CFFI-TCL9:TCL-INTERP-PTR TCLISH/REDIR-TO-OUTSTREAM-CHAN:TCL-STD-CHAN-TYPE) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH/REDIR-TO-OUTSTREAM-CHAN::CHAN TCLISH/REDIR-TO-OUTSTREAM-CHAN:<REDIR-TO-OUTSTREAM-CHAN>) &KEY RAW-CFFI-TCL9:TCL-INTERP-PTR) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*lock*")
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- SLOTS:
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT16
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT64
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT64
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT64
- SCOPE: INTERNAL
- BASE-TYPE:
(:POINTER (:STRUCT TCLISH::TCL-EV-QUEUE-CB-EVT-S))
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT64
- SCOPE: INTERNAL
- BASE-TYPE:
:UINT64
- SCOPE: EXTERNAL
- SLOTS:
- SLOT
SIZE/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
-1 - INITARG:
:SIZE - ACCESSOR:
NIL - READERS:
(TCLISH:SIZE) - WRITERS:
NIL
- ALLOCATION:
- SLOT
INITIAL-CONTENTS/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:INITIAL-CONTENTS - ACCESSOR:
NIL - READERS:
(TCLISH:INITIAL-CONTENTS) - WRITERS:
NIL
- ALLOCATION:
- SLOT
- SUPERCLASSES:
(TCLISH:<TCL-VAR-LINK-BASE>) - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: EXTERNAL
- SLOTS:
- SLOT
CMD-NAME/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:CMD-NAME - ACCESSOR:
NIL - READERS:
(TCLISH:CMD-NAME) - WRITERS:
NIL
- ALLOCATION:
- SLOT
FLAGS/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
0 - INITARG:
:FLAGS - ACCESSOR:
NIL - READERS:
(TCLISH:FLAGS) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CB-CLOSURE/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:CB-CLOSURE - ACCESSOR:
NIL - READERS:
(TCLISH:CB-CLOSURE) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CLIENT-DATA/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH:CLIENT-DATA) - WRITERS:
NIL
- ALLOCATION:
- SLOT
- SUPERCLASSES:
NIL - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: EXTERNAL
- SLOTS:
- SLOT
PTR/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
(CFFI-SYS:NULL-POINTER) - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH:PTR) - WRITERS:
NIL
- ALLOCATION:
- SLOT
TCL-NAME/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:TCL-NAME - ACCESSOR:
NIL - READERS:
(TCLISH:TCL-NAME) - WRITERS:
NIL
- ALLOCATION:
- SLOT
VAR-TYPE/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:VAR-TYPE - ACCESSOR:
NIL - READERS:
(TCLISH:VAR-TYPE) - WRITERS:
NIL
- ALLOCATION:
- SLOT
READONLY?/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:READONLY? - ACCESSOR:
NIL - READERS:
(TCLISH:READONLY?) - WRITERS:
NIL
- ALLOCATION:
- SLOT
INITIAL-ELEMENT/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:INITIAL-ELEMENT - ACCESSOR:
NIL - READERS:
(TCLISH:INITIAL-ELEMENT) - WRITERS:
NIL
- ALLOCATION:
- SLOT
- SUPERCLASSES:
NIL - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: EXTERNAL
- SLOTS:
- SUPERCLASSES:
(TCLISH:<TCL-VAR-LINK-BASE>) - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: EXTERNAL
- SLOTS:
- SLOT
VAR-NAME/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:VAR-NAME - ACCESSOR:
NIL - READERS:
(TCLISH:VAR-NAME) - WRITERS:
NIL
- ALLOCATION:
- SLOT
ARRAY-SUBS/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:ARRAY-SUBS - ACCESSOR:
NIL - READERS:
(TCLISH:ARRAY-SUBS) - WRITERS:
NIL
- ALLOCATION:
- SLOT
FLAGS/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
0 - INITARG:
:FLAGS - ACCESSOR:
NIL - READERS:
(TCLISH:FLAGS) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CB-CLOSURE/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
:CB-CLOSURE - ACCESSOR:
NIL - READERS:
(TCLISH:CB-CLOSURE) - WRITERS:
NIL
- ALLOCATION:
- SLOT
CLIENT-DATA/ TYPE:NIL- ALLOCATION:
INSTANCE - INITFORM:
NIL - INITARG:
NIL - ACCESSOR:
NIL - READERS:
(TCLISH:CLIENT-DATA) - WRITERS:
NIL
- ALLOCATION:
- SLOT
- SUPERCLASSES:
NIL - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: INTERNAL
- SLOTS:
- SUPERCLASSES:
(CFFI::FOREIGN-STRUCT-TYPE CFFI::TRANSLATABLE-FOREIGN-TYPE) - METACLASS:
STANDARD-CLASS - DEFAULT-INITARGS:
NIL - TYPE:
NIL
- SCOPE: EXTERNAL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::C-VAL) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::NEW-VAL TCLISH::C-VAL) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::NS TCLISH::NAME) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::C-VAL) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::NEW-VAL TCLISH::C-VAL) - SETF?
T
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH:ARGS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::FLAGS-LIST) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::VAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::VAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:FLAGS TCLISH::POSSIBLE-FLAGS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::INT-VAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CHILD-CMD) - SETF?
NIL
Tcl_GetAliasObj => (LIST :target-interp CFFI-PTR :target-cmd STRING :objc NUMBER :objv (LIST TCL-OBJ-PTR))
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY TCLISH::CHILD-INTERP TCLISH::CHILD-CMD TCLISH::TGT-INTERP TCLISH::TGT-CMD TCLISH::TCL-OBJ-LIST-OBJV) - SETF?
NIL
Tcl_CreateAliasObj
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY TCLISH::CHILD-INTERP TCLISH::CHILD-CMD TCLISH::TGT-INTERP TCLISH::TGT-CMD TCLISH::ARGV) - SETF?
NIL
Tcl_CreateAlias
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH::LST) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::TCL-LAMBDA TCLISH:ARGS &KEY (TCLISH:RESULT-AS :STRING)) - SETF?
NIL
Apply ARGS on Tcl lambda-list (TCL-LAMBDA): https://www.tcl-lang.org/man/tcl/TclCmd/apply.html
:RESULT keyword parameter is (MEMBER (:STRING :OBJ) (See
RESULT-AS)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE) - SETF?
NIL
Registers Tcl interpreter deletion hook callback.
(CALL-WHEN-DELETED/+ADD closure) => client-data
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA) - SETF?
NIL
Unregisters Tcl interpreter deletion hook callback.
- SCOPE: INTERNAL
- LAMBDA LIST:
(&OPTIONAL TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE TCLISH::COUNTER) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER TCLISH::COUNTER-PTR) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA &REST TCLISH:ARGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(ITERATE:AS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD-INFO) - SETF?
NIL
Deallocates CMD-INFO(Tcl_CmdInfo *) FFI pointer.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD-OBJ) - SETF?
NIL
Gets newly allocated Tcl_CmdInfo * FFI pointer of CMD-OBJ(Tcl_Command FFI pointer)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NEW-CMD-INFO TCLISH::CMD-OBJ) - SETF?
T
Sets NEW-CMD-INFO(Tcl_CmdInfo * FFI pointer) to CMD-OBJ(Tcl_Command FFI pointer).
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD-OBJ) - SETF?
NIL
Gets FQN name string of CMD-OBJ. (Tcl_Command FFI pointer)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NS-FQN TCLISH::ENSEMBLE-MAP-HT &KEY (TCLISH:INTERP TCLISH:*TCL-INTERP*)) - SETF?
NIL
Creates a Tcl ensemble of Tcl namespace (NS-FQN) with (ENSEMBLE-CMD-NAME => CMD-FQN) mapping table (ENSEMBLE-MAP-HT).
Returns FFI pointer of the created ensemble object. (Tcl_Command)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH:CMD-NAME TCLISH::FUNC) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH:CMD-NAME TCLISH::FUNC) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY (TCLISH:CMD-NAME "p")) - SETF?
NIL
Defines CMD-NAME=p Tcl command.
Which simply prints arguments as Tcl strings to *STANDARD-OUTPUT*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY (TCLISH:CMD-NAME "pp")) - SETF?
NIL
Defines CMD-NAME=pp Tcl command.
Which simply pretty-prints arguments as Tcl strings to *STANDARD-OUTPUT*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::ENSEMBLE-NAME) - SETF?
NIL
Within DEF-ENSEMBLE, excludes subcommand(ENSEMBLE-NAME).
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::ENSEMBLE-NAME &KEY TCLISH::CMD-FQN) - SETF?
NIL
Within DEF-ENSEMBLE, used to include the other command (CMD-FQN) from outside of the namespace with subcommand name(ENSEMBLE-NAME)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::FROM-ENSEMBLE &KEY TCLISH::TO-ENSEMBLE) - SETF?
NIL
Within DEF-ENSEMBLE, renames existing subcommand(FROM-ENSEMBLE) as TO-ENSEMBLE.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD) - SETF?
NIL
Evalutes Tcl script CMD and checks the result code.
Affected by *DO+CHK/ERROR?*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD-LIST) - SETF?
NIL
Evaluates a list of Tcl string FFI pointers. (CMD-LIST)
Affected by *DO+CHK/ERROR?*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::OBJV TCLISH::OBJC) - SETF?
NIL
Evaluates an array of Tcl object pointers. (OBJV/OBJC).
Affected by *DO+CHK/ERROR?*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CMD) - SETF?
NIL
Evaluates a Tcl string FFI pointer. (CMD)
Affected by *DO+CHK/ERROR?*.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH::CMDS) - SETF?
NIL
Evaluates given Tcl commands(CMDS) sequentially and returns the last result.
-
if
CMDShas a sequence of:RESULT-AS :OBJor:RESULT-AS :STRING, returning value will be aTCL-OBJ-PTRor a Lisp string. -
each element of
CMDScan be one of:- a Lisp string.
- a Lisp list can be a form of:
(LIST :TCL-STRING TCL-STR-PTR)(LIST :TCL-OBJV OBJV-TCL-OBJ-PTR OBJC)whereOBJCis a number.- or
(LIST TCL-OBJ-PTR-1 .. TCL-OBJ-PTR-N)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NEEDLE TCLISH::HAYSTACK) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::OBJV-PTR) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME &KEY TCLISH:ARRAY-SUBS (ITERATE:AS :STRING)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH::HT) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE &KEY (TCLISH::LEVEL TCLISH:+TCL-TRACE-LEVEL-ANY+) (TCLISH:FLAGS (TCLISH:->FLAGS-BITS* RAW-CFFI-TCL9:+TCL-ALLOW-INLINE-COMPILATION+))) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TRACE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(&OPTIONAL TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE TCLISH::COUNTER) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER TCLISH::COUNTER-PTR) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA &REST TCLISH:ARGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CHILD-NAME) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CHILD-NAME TCLISH::SAFE?) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::HIDDEN-CMD-NAME TCLISH:CMD-NAME) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:CMD-NAME TCLISH::HIDDEN-CMD-NAME) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CHILD-INTERP) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::ARRAY-NAME TCLISH:VAR-TYPE TCLISH:SIZE &KEY TCLISH:READONLY? TCLISH:INITIAL-ELEMENT TCLISH:INITIAL-CONTENTS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH:VAR-TYPE &KEY TCLISH:READONLY? TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-TYPE TCLISH:SIZE &KEY TCLISH:INITIAL-CONTENTS TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-TYPE &KEY TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::ARRAY-TYPE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::ARR-TYPE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TYPE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:PTR) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE TCLISH::INDEX) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:PTR) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:VAR-TYPE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:VAR-TYPE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE TCLISH::INDEX TCLISH::NEW-VALUE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH::NEW-VALUE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:PTR TCLISH:VAR-TYPE TCLISH::NEW-VALUE) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::VAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::VAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::LST) - SETF?
NIL
(LIST lisp-value-1 tcl-obj-2 ... lisp-value-N) => (VALUES tcl-list tcl-list-length)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::LST) - SETF?
NIL
(LIST lisp-value-1 tcl-obj-2 ... lisp-value-N) => (LIST tcl-obj-1 tcl-obj-2 ... tcl-obj-N)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::ZIP-FILENAME &KEY (TCLISH::MNT-POINT "//zipfs:/app") TCLISH::ZIP-PASSWD (TCLISH::TCL-LIBRARY-PATH "/tcl_library") (TCLISH::TK-LIBRARY-PATH "/tk_library")) - SETF?
NIL
Mounts ZipFS.
:ZIP-FILENAME: A .zip filename to be mounted on:ZIPFS-MNT-POINTER. (NILmeans "Do not mount zipfs by default"):ZIP-PASSWD: Password of .zip file. (NIL= no-password):ZIPFS-MNT-POINT: ZipFS mount pointer string.:ZIPFS-TCL-LIBRARY-PATH: Tcl library path under ZipFS, overwritestcl_libraryTcl variable.:ZIPFS-TK-LIBRARY-PATH: Tk library path under ZipFS, overwritestk_libraryTcl variable.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::CVAL) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::OBJC TCLISH::OBJV-PTR) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH:ARGS &KEY (CONDITION 'TCLISH:<TCL-ERROR>) (TCLISH::THROW? TCLISH:*DO+CHK/ERROR?*) &ALLOW-OTHER-KEYS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY TCLISH:INTERP TCLISH:THREAD-ID TCLISH::EV-QUEUE-CB-FDEF (TCLISH::QUEUE-POSITION :TCL-QUEUE-TAIL) (TCLISH::THREAD-ALERT-P T)) - SETF?
NIL
Enqueues an invocation of :EV-QUEUE-CB-FDEF Lisp function value to Tcl's event queue.
:INTERP,:THREAD-ID: Tcl interpreter and the thread of interpreter is running in. (can get byTCL-GET-CURRENT-THREAD):QUEUE-POSITION, one ofTCL-QUEUE-POSITIONCFFI enum variants.:THREAD-ALERT-P, whether executesTcl_ThreadAlert()after the callback has been queued.
:EV-QUEUE-CB-FDEF is:
- takes 3-positional arguments:
(INTERP THREAD-ID CB-COUNTER) - returns the number
1. (SeeTcl_ThreadQueueEvent)
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::VAL TCLISH::HT &KEY (TCLISH::TEST #'EQ)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:RESULT-AS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::AN-ERROR) - SETF?
NIL
Sets Tcl result state with a string message of Lisp condition
AN-ERROR.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::S) - SETF?
NIL
Sets Tcl result state with Lisp string S.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH::NEW-VAL &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH::NEW-VAL &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH::NEW-VAL &KEY TCLISH:ARRAY-SUBS (ITERATE:AS :STRING)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::S) - SETF?
NIL
Lisp string => char*
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NS-FQN &KEY TCLISH::EXPORTS (TCLISH:INTERP TCLISH:*TCL-INTERP*)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::TCL-OBJ-LIST) - SETF?
NIL
(LIST tcl-obj-1 ... tcl-obj-N) => Tcl_Obj*[]
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::OBJ-LIST) - SETF?
NIL
(LIST tcl-obj-1 ... tcl-obj-N) => (VALUES tcl-list tcl-list-length)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH:ARGS) - SETF?
NIL
Extracts Tcl_GetStringResult and Converts it into a Lisp condition.
If *DO+CHK/ERROR?*=T, also raises error condition.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:CMD-NAME TCLISH::CLOSURE &KEY (TCLISH:FLAGS 0)) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:CMD-NAME TCLISH:CLIENT-DATA &KEY (TCLISH:FLAGS 0)) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(&OPTIONAL TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE TCLISH::COUNTER) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER TCLISH::COUNTER-PTR) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:FLAGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:CMD-NAME) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA &REST TCLISH:ARGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH::CLOSURE &KEY (TCLISH:FLAGS 0) TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME TCLISH:CLIENT-DATA &KEY (TCLISH:FLAGS 0) TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(&OPTIONAL TCLISH:INITIAL-ELEMENT) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE TCLISH::COUNTER) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER TCLISH::COUNTER-PTR) - SETF?
T
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:FLAGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::COUNTER-PTR) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
NIL - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::CLOSURE) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA &REST TCLISH:ARGS) - SETF?
NIL
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH:CLIENT-DATA) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY (TCLISH::MNT-POINT "//zipfs:/app")) - SETF?
NIL
Unmounts ZipFS
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:VAR-NAME &KEY TCLISH:ARRAY-SUBS) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH::ERR) - SETF?
NIL
Sets Tcl interpreter's (INTERP) error state variable (Tcl_SetErrorCode()) by ERR Lisp error condition value.
The generated error values are returned as ((LIST error-1 error-2))
where the elements are Tcl_Obj* FFI pointer.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH::ERR) - SETF?
NIL
Sets Tcl interpreter (INTERP) result state variable with Lisp error
condition value ERR, and returns +TCL-ERROR+ to indicate it has
error.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP TCLISH::VAL) - SETF?
NIL
Wraps and sets Tcl interpreter (INTERP) result state variable with
VAL Lisp value into Tcl result value.
Uses Tcl_NewStringObj and Tcl_SetObjResult C APIs.
If VAL is nil, it simply resets the Tcl result state variable using
Tcl_ResetResult.
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::DEFUN-NAME (&KEY TCLISH::FRLOCK TCLISH::COUNTER TCLISH::CB-HT TCLISH::CMD-PROC-CB (TCLISH::CMD-DEL-CB 'TCLISH::%TCL-CMD-DELETE-PROC-CB) TCLISH::TCL-CREATE-COMMAND-FN)) - SETF?
NIL
`defun-name'으로 create-command* 하는 함수를 등록.
그 함수는 `(interp cmd-name func) => (cons cmd-nr tcl-command-ptr)'
func은 `(interp args) => int'. 리턴값은 +tcl-ok+ / +tcl-error+.
- SCOPE: INTERNAL
- LAMBDA LIST:
(&KEY TCLISH::VAR-INTERP TCLISH::VAR-ARGC TCLISH::VAR-ARGV TCLISH::FRLOCK TCLISH::CB-HT TCLISH::ARGC+ARGV-CVTER) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((&KEY (TCLISH::DO+CHK/ERROR? T) (RAW-CFFI-TCL9:TCL-CREATE-INTERP '(RAW-CFFI-TCL9:TCL-CREATE-INTERP)) TCLISH::TCL-INIT-SUBSYSTEMS? TCLISH::TK-INIT? TCLISH::TK-MAIN-LOOP? TCLISH::ZIP-FILENAME TCLISH::ZIP-PASSWD (TCLISH::ZIPFS-MNT-POINT "//zipfs:/app") (TCLISH::ZIPFS-TCL-LIBRARY-PATH "/tcl_library") (TCLISH::ZIPFS-TK-LIBRARY-PATH "/tk_library") TCLISH::BEFORE-CREATE-INTERP TCLISH::BEFORE-INIT TCLISH::AFTER-INIT TCLISH::BEFORE-DEINIT TCLISH::AFTER-DEINIT TCLISH::STDOUT-STREAM TCLISH::STDERR-STREAM (TCLISH::TERMINATE-WITHOUT-DEINIT NIL)) &REST TCLISH::BODY) - SETF?
NIL
Tcl/Tk embedding macro: does initializations/deinitialization of Tcl/Tk.
- (Optional) use Tk. (use Tcl only)
- Initializes and Binds
*TCL-INTERP*special variable. - (Optional) Mounts ZipFS for Tcl/Tk deployment
- (Optional) Redirects Tcl
stdout/stderrchannels to Lisp streams. - Various "hooks" for custom initializations/deinitializations.
It evaluates as BODY.
-
:DO+CHK/ERROR?sets*DO+CHK/ERROR?*(Tcl errors as Lisp errors, instead of Lisp string results) -
:TCL-CREATE-INTERP: a Lisp form used to create newTcl_Interp *-instance. -
:TCL-INIT-SUBSYSTEMS?: AppliesTcl_InitSubsystems()during initializations. -
:TK-INIT?: Initializes Tk usingTk_Init()? -
:TK-MAIN-LOOP?: EntersTk_MainLoop()after initializations. -
:ZIP-FILENAME,:ZIP-PASSWD,:ZIPFS-MNT-POINT,:ZIPFS-TCL-LIBRARY-PATH,:ZIPFS-TK-LIBRARY-PATH: SeeMNT-ZIPFS. -
:BEFORE-CREATE-INTERP,:BEFORE-INIT,:AFTER-INIT,:BEFORE-DEINIT,:AFTER-DEINIT: Lisp form, customization hook points. -
:STDOUT-STREAM,:STDERR-STREAM: Tclstdout/stderrredirection to Lisp streams,NIL= "No redirections" -
:TERMINATE-WITHOUT-DEINIT: Skips the deinitializations.
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::NAME &KEY (TCLISH:INTERP 'TCLISH:*TCL-INTERP*) (TCLISH::LAMBDA-LIST '(TCLISH:INTERP TCLISH:ARGS)) (TCLISH::ARGS-TYPE :STRINGS) (TCLISH::NS 'TCLISH:*DEF-CMD-NS*) (TCLISH::WRAP-P T)) &REST TCLISH::BODY) - SETF?
NIL
Define new Tcl command of NAME with the BODY Lisp forms.
-
:LAMBDA-LISTlist should have exact 2 elements, positionally,(LIST INTERP ARGS). -
The
ARGSof the:LAMBDA-LISTcould be one of a LIST OF STRINGs or LIST OF TCL-OBJ-PTRs. By:ARGS-TYPE,:STRINGSor:OBJS. -
If
:WRAP-PisT, it takes the responsibility of the conversion of the result value ofBODY. -
It also takes care of Lisp error condition during evaluation of
BODYinto Tcl error state. -
If
:WRAP-Pis nil, you should set the Tcl state variables by usingTcl_SetObjResult,Tcl_SetStringResultmanually. -
Also, VERY IMPORTANTLY, the
BODYshould evaluates as one of+TCL-OK+or+TCL-ERROR+when:WRAP-P NIL. -
:NSspecifies Tcl namespace where the new command added.
This macro could be enclosed within DEF-ENSEMBLE.
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::NS-FQN &KEY (TCLISH:INTERP 'TCLISH:*TCL-INTERP*)) &REST TCLISH::BODY) - SETF?
NIL
Tcl ensemble defining DSL.
Defines new Tcl ensemble at NS-FQN by evaluating the BODY.
To define subcommands of the ensemble, enclose DEF-CMD-macros.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&KEY TCLISH::CB-PREFIX TCLISH::ONE-OFF? (TCLISH::COUNTER-CFFI-TYPE :UINT64) (TCLISH::CLOSURE-MAP-INITFORM '(MAKE-HASH-TABLE))) - SETF?
NIL
Generates definitions & codes for interacting with Tcl C callback mechanisms.
:CB-PREFIXis mandatory, and will be used to prefixing every generated definitions and functions.:ONE-OFF?indicates the registered callbak should be cleaned up once it has invoked, never meant to be used twice or more.
This macro defines:
${:CB-PREFIX}-CB-COUNTER-TCFFI type*${:CB-PREFIX}-CB-COUNTER*variable*${:CB-PREFIX}-CB-HT*variable*${:CB-PREFIX}-CB-LOCK*variable${:CB-PREFIX}/ALLOC-COUNTER-CFFIand${:CB-PREFIX}/FREE-COUNTER-CFFIfunctions${:CB-PREFIX}/COUNTER-CFFIand(SETF ${:CB-PREFIX}/COUNTER-CFFI)functions${:CB-PREFIX}/INCR-COUNTfunction${:CB-PREFIX}/CBand(SETF ${:CB-PREFIX/CB)functions${:CB-PREFIX}/DEL-CBfunction${:CB-PREFIX}/REGIST-CBand${:CB-PREFIX}/UNREGIST-CBfunctions${:CB-PREFIX}/ROUTE-BY-CLIENT-DATAfunction
Let's take an example, where the :CB-PREFIX is "CALLME" :
-
*CALLME-CB-COUNTER*keep track of last issued "callback number", this number is used to tag passed to C API and passed back from C API callbacks as "clientData" or "closure". This tag is used to find matching Lisp closure to invoke. -
(CALLME/ALLOC-COUNTER-CFFI counter)and(CALLME/FREE-COUNTER-CFFI returned-counter-ptr-from-alloc-counter-cffi)functions are used to allocate/deallocate heap memory for counter numbers. Also could assigncounter. The type of the CFFI allocated variable isCALLME-CB-COUNTER-T. -
CALLME-CB-COUNTER-Twill be a CFFI typedef, usually integer types, like:UINT64, -
(CALLME/COUNTER counter-ptr)and(SETF (CALLME/COUNTER counter-ptr) counter)reads and writes from/to heap allocated C variablecounter-ptrwithcounter. -
(CALLME/INCR-COUNT)simply returns new counter number. -
*CALLME-CB-LOCK*is used to ensure thread-safety of counter and callback registration table. -
(CALLME/CB counter)look for a registered callback in the registration table. (*CALLME-CB-HT*) -
(SETF (CALLME/CB counter) (lambda ...))assigns given function value ((lambda ...)) as thecounter, and(CALLME/DEL-CB counter)removes it from the registration table. -
(CALLME/REGIST-CB (lambda ...))registers function value to the registration table as the newly generated counter, and returns the new counter value in Lisp value and C FFI allocated pointer:(LIST :counter counter :client-data counter-ptr), In herecounter-ptris the newly allocated counter value for C APIs. -
(CALLME/UNREGIST-CB client-data)takescounter-ptror so calledclient-datareturned fromCALLME/REGIST-CB. Also deallocates the givenclient-data. -
(CALLME/ROUTE-BY-CLIENT-DATA client-data &rest args)finds and invokes the registered callback matching withclient-data. If the:ONE-OFF?wasT, doesCALLME/UNREGIST-CBas well. -
CALLME/ROUTE-BY-CLIENT-DATAsimply does(APPLY -found-func- args), not passing any other data likeclient-dataanything else.
Now, make it a bit more concrete:
- To register a callback, using
void Regist(MyCallback *callback, void *clientData)C API. - Unregister:
void Unregist(MyCallback *callback, void *clientData). - Also:
typedef void (*MyCallback)(void *clientData).
(def-tcl-callback-pattern
:cb-prefix "CALLME"
:one-off? nil)
(cffi:defcallback %My-Callback
:void ; c-return-type
((client-data :pointer)) ; c-param-types
;; body:
(CALLME/ROUTE-BY-CLIENT-DATA client-data))
(defun Do-Regist (lisp-func)
(let* ((client-data (CALLME/REGIST-CB lisp-func))
(client-data* (getf client-data :client-data)))
(cffi:foreign-funcall "Regist"
:pointer (cffi:callback %My-Callback)
:pointer client-data
:void)
;;
client-data))
(defun Do-Unregist (client-data)
(CALLME/UNREGIST-CB client-data))
;;
(setf token (Do-Regist (lambda (&rest args) (print :OH-HI!))))
(Do-Unregist token)- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::FN-NAME &KEY (TCLISH:INTERP 'TCLISH:*TCL-INTERP*) (TCLISH::TCL-OK RAW-CFFI-TCL9:+TCL-OK+) (TCLISH::ERROR? 'TCLISH:*DO+CHK/ERROR?*) (TCLISH::INCLUDE-ERROR-INFO? T)) &REST TCLISH:ARGS) - SETF?
NIL
Runs Tcl C API function (FN) and Checks its result-code.
-
ARGSis a list of arguments to be applied onFN. -
:INTERPis a Tcl interpreter runs Tcl C API function (FN). -
:TCL-OKis used to check the result-code ofFN, specifies code for "No Errors". (usually+TCL-OK+) -
:ERROR?asks raising Lisp error condition instead of just returning error message strings. -
:INCLUDE-ERROR-INFO?asks that Lisp error condition or error message strings should include the contents of TclerrorInfovariable.
- SCOPE: INTERNAL
- LAMBDA LIST:
(TCLISH::PLACE TCLISH::PRED-FORM TCLISH::LIST-TO-NCONC) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((&REST TCLISH::FWD-OPTS &KEY (TCLISH::CB-RETURN-CODE 1) (TCLISH::LAMBDA-LIST '(TCLISH:INTERP TCLISH:THREAD-ID TCLISH:CB-COUNTER)) &ALLOW-OTHER-KEYS) &REST TCLISH::BODY) - SETF?
NIL
Enqueues Tcl Event Queue with BODY.
BODY is wrapped within a function takes :LAMBDA-LIST and returns CB-RETURN-CODE.
FWD-OPTS are will be forwarded to QUEUE-EVT-FUNC, as INTERP/THREAD-ID... Consult the docstring.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH::BODY) - SETF?
NIL
Gather invocation of (FUNCALL *DEF-CMD-TRACKER* FQN :NS .. :NAME ..)
within BODY.
- SCOPE: EXTERNAL
- LAMBDA LIST:
((&KEY TCLISH::V-CMD-INFO TCLISH::CMD-OBJ TCLISH::MODIFY?) &REST TCLISH::BODY) - SETF?
NIL
Gets Tcl_CmdInfo*(bind as :V-CMD-INFO) of :CMD-OBJ(Tcl_Command), and evaluates BODY with the binding.
:MODIFY? indicates set back the :V-CMD-INFO bound Tcl_CmdInfo* by using (SETF (CMD-INFO/FROM-CMD-OBJ CMD-OBJ) ...)
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH:INTERP &REST TCLISH::BODY) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH::BODY) - SETF?
NIL
In the BODY, DO+CHK returns error message strings without raising Lisp errors.
- SCOPE: EXTERNAL
- LAMBDA LIST:
(&REST TCLISH::BODY) - SETF?
NIL
In the BODY, DO+CHK raises Lisp errors.
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::LST &KEY (TCLISH::V-TCL-OBJV 'TCLISH:TCL-OBJV) (TCLISH::V-TCL-OBJC 'TCLISH:TCL-OBJC)) &REST TCLISH::BODY) - SETF?
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::ARR-LINK TCLISH:<TCL-ARRAY-LINK>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::VAR-LINK TCLISH:<TCL-VAR-LINK>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::ARR-LINK TCLISH:<TCL-ARRAY-LINK>) TCLISH::INDEX) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NEW-VALUE (TCLISH::ARR-LINK TCLISH:<TCL-ARRAY-LINK>) TCLISH::INDEX) - SETF?
T - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::VAR-LINK TCLISH:<TCL-VAR-LINK>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
(TCLISH::NEW-VALUE (TCLISH::VAR-LINK TCLISH:<TCL-VAR-LINK>)) - SETF?
T - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::CMD-TRACE TCLISH:<TCL-CMD-TRACE>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::VAR-TRACE TCLISH:<TCL-VAR-TRACE>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: EXTERNAL
- LAMBDA LIST:
((TCLISH::VAR-LINK TCLISH:<TCL-VAR-LINK-BASE>)) - SETF?
NIL - QUALIFIERS:
NIL
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*call-when-deleted-cb-lock*")
- SCOPE: EXTERNAL
- INITIAL-VALUE:
""
- SCOPE: EXTERNAL
- INITIAL-VALUE:
NIL
- SCOPE: EXTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: EXTERNAL
- INITIAL-VALUE:
T
DO+CHK macro treats Tcl error status as raising Lisp error
conditions, not just returning error message strings. (T means raise
lisp errors))
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*interp-trace-cb-lock*")
- SCOPE: EXTERNAL
- INITIAL-VALUE:
(LAMBDA (TCLISH::V) (FORMAT NIL "~a" TCLISH::V))
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*tcl-cmd-lock*")
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*tcl-ev-queue-lock*")
- SCOPE: EXTERNAL
- INITIAL-VALUE:
NIL
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*trace-cmd-cb-lock*")
- SCOPE: INTERNAL
- INITIAL-VALUE:
0
- SCOPE: INTERNAL
- INITIAL-VALUE:
(MAKE-HASH-TABLE)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(BT2:MAKE-LOCK :NAME "*trace-var-cb-lock*")
- SCOPE: INTERNAL
- INITIAL-VALUE:
RAW-CFFI-TCL9:+TCL-LEAVE-ERR-MSG+
- SCOPE: INTERNAL
- INITIAL-VALUE:
(APPEND TCLISH::+LINK/COMMON-CFFI-TYPE-PLIST+ (LIST RAW-CFFI-TCL9:+TCL-LINK-BINARY+ :UCHAR RAW-CFFI-TCL9:+TCL-LINK-CHARS+ :CHAR))
- SCOPE: INTERNAL
- INITIAL-VALUE:
(LIST RAW-CFFI-TCL9:+TCL-LINK-INT+ :INT RAW-CFFI-TCL9:+TCL-LINK-UINT+ :UINT RAW-CFFI-TCL9:+TCL-LINK-CHAR+ :CHAR RAW-CFFI-TCL9:+TCL-LINK-UCHAR+ :UCHAR RAW-CFFI-TCL9:+TCL-LINK-SHORT+ :SHORT RAW-CFFI-TCL9:+TCL-LINK-USHORT+ :USHORT RAW-CFFI-TCL9:+TCL-LINK-LONG+ :LONG RAW-CFFI-TCL9:+TCL-LINK-ULONG+ :ULONG RAW-CFFI-TCL9:+TCL-LINK-WIDE-INT+ :TCL-WIDE-INT RAW-CFFI-TCL9:+TCL-LINK-WIDE-UINT+ :TCL-WIDE-UINT RAW-CFFI-TCL9:+TCL-LINK-FLOAT+ :FLOAT RAW-CFFI-TCL9:+TCL-LINK-DOUBLE+ :DOUBLE RAW-CFFI-TCL9:+TCL-LINK-BOOLEAN+ :BOOLEAN)
- SCOPE: INTERNAL
- INITIAL-VALUE:
(APPEND TCLISH::+LINK/COMMON-CFFI-TYPE-PLIST+ (LIST RAW-CFFI-TCL9:+TCL-LINK-STRING+ '(:POINTER :CHAR)))
- SCOPE: EXTERNAL
- INITIAL-VALUE:
0
- SCOPE: EXTERNAL
- INITIAL-VALUE:
1
- SCOPE: EXTERNAL
- INITIAL-VALUE:
2
Generated with doqumen at 2026-05-19T16:24:40.092912+09:00 by https://github.com/ageldama