aboutsummaryrefslogtreecommitdiff
path: root/scheme/idest/load-module.scm
blob: 1460709a948210becc823b171be31ea599966b1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
;; This file is part of Idest
;; Copyright (C) 2011 Sergey Poznyakoff
;; Idest is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;;
;; Idest is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Idest.  If not, see <http://www.gnu.org/licenses/>.

(define-module (idest load-module))

(use-modules (guile-user))

(define-public (idest-load-module type)
  (let* ((cmd (command-line))
	 (mod-pathname #f)
	 (mod-name (list-ref cmd 1)))
       
    (set-program-arguments (list-tail cmd 1))
    
    (letrec ((module (resolve-module
		      (list 'idest type (string->symbol mod-name))))
	     (get-proc (lambda (sym)
			 (if (module-defined? module sym)
			     (let ((proc (module-ref module sym)))
			       (cond
				((procedure? proc)
				 proc)
				(else
				 (format (current-error-port)
					 "idest: ~A is defined in ~A, but is not a procedure~%"
					 sym mod-name)
				 (exit 1))))
			     #f))))

      (cond
       ((not (and module (module-public-interface module)))
	(error "no code for module" mod-name))
       ((get-proc 'idest-init) =>
	(lambda (proc)
	  (proc))))
      
      (cond
;;        ((and (eq? type 'format) (not idest-readonly))
;; 	(format (current-error-port) "idest: ~A wants to modify files!~%"
;; 		mod-pathname)
;; 	(exit 1))
       ((get-proc 'idest-main) =>
	(lambda (proc)
	  (set! idest-main proc)))
       (else
	(format (current-error-port)
		"idest: ~A does not define ~A~%" mod-name 'idest-main)
	(exit 1))))))

Return to:

Send suggestions and report system problems to the System administrator.