summaryrefslogtreecommitdiff
path: root/skribe/src/bigloo/main.scm
blob: 5b9e5e5408a020fef3cdc6baf6dc50f105100c00 (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
;*=====================================================================*/
;*    serrano/prgm/project/skribe/src/bigloo/main.scm                  */
;*    -------------------------------------------------------------    */
;*    Author      :  Manuel Serrano                                    */
;*    Creation    :  Tue Jul 22 16:51:49 2003                          */
;*    Last change :  Wed May 18 15:45:27 2005 (serrano)                */
;*    Copyright   :  2003-05 Manuel Serrano                            */
;*    -------------------------------------------------------------    */
;*    The Skribe main entry point                                      */
;*=====================================================================*/

;*---------------------------------------------------------------------*/
;*    The module                                                       */
;*---------------------------------------------------------------------*/
(module skribe_main
   
   (include "debug.sch")
   
   (import  skribe_types
	    skribe_parse-args
	    skribe_param
	    skribe_lib
	    skribe_eval
	    skribe_read
	    skribe_engine
	    skribe_evapi)
   
   (main    main))

;*---------------------------------------------------------------------*/
;*    main ...                                                         */
;*---------------------------------------------------------------------*/
(define (main args)
   (with-debug 2 'main
	       (debug-item "parse env variables...")
	       (parse-env-variables)
	       
	       (debug-item "load rc file...")
	       (load-rc)
	       
	       (debug-item "parse command line...")
	       (parse-args args)
	       
	       (debug-item "load base...")
	       (skribe-load "base.skr" :engine 'base)
	       
	       (debug-item "preload... (" *skribe-engine* ")")
	       (for-each (lambda (f)
			    (skribe-load f :engine *skribe-engine*))
			 *skribe-preload*)
	       
	       ;; Load the specified variants
	       (debug-item "variant... (" *skribe-variants* ")")
	       (for-each (lambda (x)
			    (skribe-load (format "~a.skr" x) :engine *skribe-engine*))
			 (reverse! *skribe-variants*))
	       
	       (debug-item "body..." *skribe-engine*)
	       (if (string? *skribe-dest*)
		   (cond-expand
		      (bigloo2.6
		       (try (with-output-to-file *skribe-dest* doskribe)
			    (lambda (e a b c)
			       (delete-file *skribe-dest*)
			       (let ((s (with-output-to-string
					   (lambda () (write c)))))
				  (notify-error a b s))
			       (exit -1))))
		      (else
		       (with-exception-handler
			  (lambda (e)
			     (if (&warning? e)
				 (raise e)
				 (begin
				    (delete-file *skribe-dest*)
				    (if (&error? e)
					(error-notify e)
					(raise e))
				    (exit 1))))
			  (lambda ()
			     (with-output-to-file *skribe-dest* doskribe)))))
		   (doskribe))))

;*---------------------------------------------------------------------*/
;*    doskribe ...                                                     */
;*---------------------------------------------------------------------*/
(define (doskribe)
   (let ((e (find-engine *skribe-engine*)))
      (if (and (engine? e) (pair? *skribe-precustom*))
	  (for-each (lambda (cv)
		       (engine-custom-set! e (car cv) (cdr cv)))
		    *skribe-precustom*))
      (if (pair? *skribe-src*)
	  (for-each (lambda (f) (skribe-load f :engine *skribe-engine*))
		    *skribe-src*)
	  (skribe-eval-port (current-input-port) *skribe-engine*))))