(loop
:for str := (cffi:with-foreign-pointer-as-string (str 255) (wgetnstr *cli* str 255))
:while str
- :while (and (string/= str "q") (string/= str "Q"))
:do (print-command-and-response str (execute str)))
(endwin)
(sb-ext:exit :abort t))
implementation of NetLogo.
You can enter in various netlogo commands below,
- or use q to quit the program.
+ or use :q to quit the program.
See http://github.com/frankduncan/clnl for more
information about CLNL and to keep apprised of
DESCRIPTION:
PRIMS returns the primitives used in the CLI extension."
- nil)
+ (list
+ (list :name :q :type :command :func #'shut-down)))
+
+(defun shut-down ()
+ (cl-charms/low-level:endwin)
+ (sb-ext:exit :abort t))
(sb-thread:make-thread #'clnl-cli:run)
(clnl-interface:run))
+(defvar *callback* nil)
+
(defun boot (&optional file headless-mode)
"BOOT &optional FILE HEADLESS-MODE => RESULT
((netlogoed-lisp
(model->single-form-lisp
(if file (with-open-file (str file) (clnl-model:read-from-nlogo str)) (clnl-model:default-model))
- :initialize-interface (not headless-mode)))
+ :initialize-interface (not headless-mode)
+ :netlogo-callback (lambda (f) (setf *callback* f))))
(*package* *model-package*))
(eval netlogoed-lisp)))
RUN-COMMANDS will take NetLogo commands, put them through the various
stages need to turn them into Common Lisp code, and run it."
- (clnl-nvm:with-stop-handler (eval (clnl-transpiler:transpile (clnl-parser:parse (clnl-lexer:lex cmds))))))
+ (clnl-nvm:with-stop-handler
+ (funcall *callback* cmds)))
(defun run-reporter (reporter)
"RUN-REPORTER REPORTER => RESULT