(defvar *response* nil) ;; Key-Event Handler (defmethod rpm-window-key-event-handler ((win rpm-window) key) (setf *response* (string key)) ;(clear-exp-window) (when *actr-enabled-p* (proc-display))) (defun do-experiment () (reset) ;; Define experiment window which is not visible (let* ((window (open-exp-window "Experiment" :visible nil))) (setf *response* nil) (if *actr-enabled-p* ;then (progn ;; initialize window (install-device window) ;; let act-r process the window (proc-display) (run 10 :real-time t)) ;else (while (null *response*) (allow-event-manager window))) *response*)) ;; Reset Model State (clear-all) ;; Start Model Definition (define-model keyp ;; Set Trace Detail (sgp :trace-detail high) (chunk-type task state) (add-dm (initial-goal ISA task state NIL) (stop isa chunk) (key-pressed isa chunk) (start-retrieval isa chunk) (retrieve-key isa chunk)) ;;;;;;;;;;; Productions ;;;;;;;;;;;;; (p init =goal> ISA task state NIL ?manual> state free ==> =goal> state key-pressed +manual> ISA press-key key "f" ) (p ask-manual-buffer =goal> ISA task state key-pressed ?manual> state free ==> =goal> state start-retrieval +manual> ISA press-key key "f" ) (p retrieve-key =goal> ISA task state start-retrieval ==> =goal> state retrieve-key +retrieval> ISA press-key ) (p remember-key-press =goal> ISA task state retrieve-key ;?manual> ; state free =retrieval> ISA press-key ==> =goal> state stop !output! (1) ) (p not-remember-key-press =goal> ISA task state retrieve-key ;?manual> ; state free ?retrieval> state error ==> =goal> state stop !output! (2) ) (goal-focus initial-goal) )