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