Add export to common lisp form, forms
[clnl] / src / main / model.lisp
index 8aa37159b3e70ddec0cd4b228f264a0eec2f8af7..022a658625af2db43e384fb9c797db9e33a50e26 100644 (file)
@@ -27,6 +27,7 @@ DESCRIPTION:
 
   Returns the default startup model."
  (make-model
+  :code ""
   :interface (list
               (make-view :min-pxcor -5 :max-pxcor 5 :min-pycor -5 :max-pycor 5))))
 
@@ -54,7 +55,7 @@ DESCRIPTION:
           (read-sections (append section (list line))))))))
      (read-sections))))
   (make-model
-   :code (nth 0 sections)
+   :code (format nil "~{~A~^~%~}" (nth 0 sections))
    :interface (parse-interface (nth 1 sections))
    :info (nth 2 sections)
    :turtle-shapes (nth 3 sections)
@@ -221,3 +222,41 @@ DESCRIPTION:
    :xmax (view-max-pxcor view)
    :ymin (view-min-pycor view)
    :ymax (view-max-pycor view))))
+
+(defun widget-globals (model)
+ "WIDGET-GLOBALS MODEL => GLOBALS
+
+  GLOBALS: GLOBAL*
+  GLOBAL: (NAME DEFAULT)
+
+ARGUMENTS AND VALUES:
+
+  MODEL: A valid model
+  NAME: A symbol interned in the keyworkd package
+  DEFAULT: The widget default value
+
+DESCRIPTION:
+
+  Returns the globals that get declared in the model from widgets.
+  They are interned in the keyword package package set for clnl, so
+  that they can later be used for multiple purposes."
+ (remove nil
+  (mapcar
+   (lambda (widget)
+    (typecase widget
+     (slider (list (intern (string-upcase (slider-varname widget)) :keyword) (slider-default widget)))
+     (switch (list (intern (string-upcase (switch-varname widget)) :keyword) (switch-on widget)))))
+   (model-interface model))))
+
+(defun code (model)
+ "CODE MODEL => CODE
+
+ARGUMENTS AND VALUES:
+
+  MODEL: A valid model
+  CODE: The string representing the netlogo code in this model
+
+DESCRIPTION:
+
+  Returns the code from the model."
+ (model-code model))