;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; MODULE : init-r38.scm
;; DESCRIPTION : Initialize r38 plugin
;; COPYRIGHT : (C) 1999 Joris van der Hoeven and Andrey Grozin
;; version for CSL-based Reduce, A C Norman 2005
;;
;; This software falls under the GNU general public license and comes WITHOUT
;; ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for details.
;; If you don't have this file, write to the Free Software Foundation, Inc.,
;; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-modules (ice-9 popen))
(define r38-doc-dir "")
(define (r38-initialize myname)
(import-from (texmacs plugin plugin-convert))
(lazy-input-converter (r38-input) r38)
(lazy-menu (r38-menus) r38-help-menu)
;; If the executable for r38 refers to a file /xxx/yyy/zzz/r38 (possibly
;; via some symbolic links) I want to look for documentation in
;; /xxx/yyy/zzz/r38.doc.
;; The symbolic-link handling in guile seems to run on strings rather then
;; URLs, but the conversion backwards and forwards is unreliable in the
;; early win32 versions, so I use rather more ugly code here than you might
;; expect. Further on win32 the lstat function is not present...
(if (defined? 'lstat)
(while (eq? (stat:type (lstat (url->string myname))) 'symlink)
(set! myname (string->url (readlink (url->string myname))))))
(set! myname (url-append myname (url-parent)))
(set! r38-doc-dir (url-append myname "r38.doc"))
(menu-extend texmacs-session-help-icons
(if (and (in-r38?) (url-exists? r38-doc-dir))
|
(=> (balloon (icon "tm_help.xpm") "r38 documentation")
(link r38-help-menu)))))
(plugin-configure r38
(:require (url-exists-in-path? "r38"))
;; I KNOW now that "r38" exists in my path, so it is now reasonable
;; to resolve it to find its absolute path name.
(:initialize (r38-initialize (url-resolve-in-path "r38")))
(:launch "r38 --texmacs")
(:session "r38 (CSL)"))