+
+;; INFORMATION ABOUT MODEL
+
+(defun world-dimensions (model)
+ "WORLD-DIMENSIONS MODEL => DIMS
+
+ DIMS: (:xmin XMIN :xmax XMAX :ymin YMIN :ymax YMAX)
+
+ARGUMENTS AND VALUES:
+
+ MODEL: A valid model containing a view
+ XMIN: An integer representing the minimum patch coord in X
+ XMAX: An integer representing the maximum patch coord in X
+ YMIN: An integer representing the minimum patch coord in Y
+ YMAX: An integer representing the maximum patch coord in Y
+
+DESCRIPTION:
+
+ Returns the dimensions of MODEL. MODEL must be a valid model
+ as parsed by CLNL, and have a valid view in it."
+ (let
+ ((view (find-if #'view-p (model-interface model))))
+ (list
+ :xmin (view-min-pxcor view)
+ :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))