bc84d207c5ccce005513f71b15635731fa426bf1Dominik Dietrich;; Creating a new menu pane in the menu bar to the right of "Tools" menu
bc84d207c5ccce005513f71b15635731fa426bf1Dominik Dietrich;; A keymap is suitable for menu use if it has an overall prompt string, which describes the purpose of the menu.
bc84d207c5ccce005513f71b15635731fa426bf1Dominik Dietrich;; essentially: define-key map fake-key '(item command), where fake-key is of the form [menu-bar mymenu nl] and defines key nl in mymenu which must exist
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz (cons "EnCL" (make-sparse-keymap "encl menu"))
7af4df794a0e0f0cb927bd9371556ad098308983Ewaryst Schulz (cons "Match-menu" `(lambda () (interactive) (refresh-matchmenu))))
7af4df794a0e0f0cb927bd9371556ad098308983Ewaryst Schulz (cons "Eval-menu" `(lambda () (interactive) (refresh-evalmenu))))
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich;; extract all spec definitions
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich (push (buffer-substring-no-properties p1 (point)) specs)
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich;; extract all imports
d3ea4ab5527bc4bd7381d39ecbc4af2199f54341Ewaryst Schulz (push (buffer-substring-no-properties p1 (point)) specs)
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich ;; comma separated lisp
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich (while (string= (buffer-substring-no-properties (point) (+ 1 (point))) ",")
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich (push (buffer-substring-no-properties p1 (point)) specs)
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz ((entries (reverse (sort (append (extractspecs) (extractgets)) 'string<)))
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich ;; delete the match menu
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich ;; generate match menu
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz (define-key-after global-map [menu-bar enclmenu eval] (cons "Evaluate" (make-sparse-keymap)))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz; (refresh-specmenu entries menusym runfun runlist)
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym) (cons item (make-sparse-keymap)))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym (gensym))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz (cons item2 `(lambda () (interactive) (,runfun ,item ,item2))))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz; (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym (gensym)) (cons "--" nil))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz; (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym (gensym)) (cons "Select design spec" nil))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz ((entries (reverse (sort (append (extractspecs) (extractgets)) 'string<)))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz ;; delete the match menu
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz ;; generate match menu
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key-after global-map [menu-bar enclmenu match] (cons "Match" (make-sparse-keymap)) 'kill-buffer)
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (refresh-specmenu entries 'match 'run-match '("Show match" "Export parameter"))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz(defun refresh-specmenu (entries menusym runfun runlist)
7af4df794a0e0f0cb927bd9371556ad098308983Ewaryst Schulz;; (interactive)
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz ;; generate subentries
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym) (cons item (make-sparse-keymap)))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym currentsym2) (cons item2 (make-sparse-keymap)))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym currentsym2 (gensym))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (cons item3 `(lambda () (interactive) (,runfun ,item ,item2 ,item3))))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym (gensym)) (cons "--" nil))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym currentsym (gensym)) (cons "Select design spec" nil))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym (gensym)) (cons "--" nil))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (define-key global-map (vector 'menu-bar 'enclmenu menusym (gensym)) (cons "Select pattern spec" nil))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (with-current-buffer buff (delete-region (point-min) (point-max)))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (message "Matching selected pattern with the design spec")
d3ea4ab5527bc4bd7381d39ecbc4af2199f54341Ewaryst Schulz;; example command
d3ea4ab5527bc4bd7381d39ecbc4af2199f54341Ewaryst Schulz;; matchcad /tmp/flange.het -sMatch -pFlangePattern -dComponent
f54cbc3b567482a53e417faff9cd2583bfdc47dfDominik Dietrich; (message (concatenate 'string "asd" (buffer-file-name (current-buffer))))
d3ea4ab5527bc4bd7381d39ecbc4af2199f54341Ewaryst Schulz; (call-process "/bin/ls" nil (get-buffer-create "*Match-Result*") t "-lh" "/tmp/")
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (call-process "matchcad" nil (prepare-buffer "*Match-Result*") t
d3ea4ab5527bc4bd7381d39ecbc4af2199f54341Ewaryst Schulz (switch-to-buffer (get-buffer "*Match-Result*"))
0f541fef46255a09d1143a9cbf3e2dbafb610923Ewaryst Schulz (set-visited-file-name (concatenate 'string (make-temp-file "flangeParams") ".het"))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz;; (message "selected %s and %s and %s" spec1 spec2 trans)
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz;; example command
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz;; matchcad /tmp/flange.het -sMatch -pFlangePattern -dComponent
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz; (message (concatenate 'string "asd" (buffer-file-name (current-buffer))))
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz; (message "Evaluating EnCL spec")
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz (let ((buff (prepare-buffer "*Eval-Result*"))
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz (insert "Starting evaluation of EnCL specification.\n")
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz; (call-process "evalspec" nil buff t "-s" spec1 "-t10" "-v2" (if (string= symbolic "Symbolic") "-S" "") fp)
08b27f5b9b0623b02b57a994437086b4dac9b8aaEwaryst Schulz (start-process "evaluation of EnCL specification" buff "evalspec" "-C" encl-cas "-s" spec1 "-t25" "-v" encl-verb (if (string= symbolic "Symbolic") "-S" "") fp)
105837926c174394ac05c02471215fb6d68a780fEwaryst Schulz;; (insert "\n\nEvaluation of EnCL specification finished.\n")
6a5011fab59ec9893a2b339268797662b22ae97bEwaryst Schulz;; (start-process-shell-command "evalproc" buff (concatenate 'string "evalspec -s " spec1 " " fp))
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz '((refresh-evalmenu "Refreshes the EnCL evaluation menu based on the specification in the current buffer.")
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz (refresh-matchmenu "Refreshes the EnCL matching menu based on the specification in the current buffer.")
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz (setmaple "Selects the computer algebra system Maple for the evaluation.")
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz (setmathematica "Selects the computer algebra system Mathematica for the evaluation.")
8fca4d8a078d799b2faded300d6b97c2f7761103Ewaryst Schulz (concatenate 'string (format "%s:\n%s\n" (nth 0 x) (nth 1 x)))