| 
									
										
										
										
											2009-05-02 14:45:38 -04:00
										 |  |  | ! Copyright (C) 2003, 2009 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2011-11-30 19:02:37 -05:00
										 |  |  | USING: accessors alien.strings assocs continuations fry init | 
					
						
							|  |  |  | io.encodings.utf8 io.files io.pathnames kernel kernel.private | 
					
						
							|  |  |  | namespaces parser parser.notes sequences source-files | 
					
						
							| 
									
										
										
										
											2011-12-07 13:52:58 -05:00
										 |  |  | source-files.errors splitting system vocabs.loader ;
 | 
					
						
							| 
									
										
										
										
											2008-04-26 12:28:08 -04:00
										 |  |  | IN: command-line | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | SYMBOL: user-init-errors | 
					
						
							|  |  |  | SYMBOL: +user-init-error+ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-28 22:30:20 -04:00
										 |  |  | TUPLE: user-init-error error path line# asset ;
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <user-init-error> ( error -- error' )
 | 
					
						
							|  |  |  |     [ ] [ error-file ] [ error-line ] tri
 | 
					
						
							|  |  |  |     f user-init-error boa ; inline
 | 
					
						
							| 
									
										
										
										
											2015-07-28 22:30:20 -04:00
										 |  |  | M: user-init-error error-file path>> ;
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | M: user-init-error error-line line#>> ;
 | 
					
						
							|  |  |  | M: user-init-error error-type drop +user-init-error+ ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-23 11:12:31 -05:00
										 |  |  | SYMBOL: executable | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  | SYMBOL: script | 
					
						
							|  |  |  | SYMBOL: command-line | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 00:08:18 -05:00
										 |  |  | : (command-line) ( -- args )
 | 
					
						
							| 
									
										
										
										
											2011-11-02 15:54:31 -04:00
										 |  |  |     OBJ-ARGS special-object sift [ alien>native-string ] map ;
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-16 20:15:51 -05:00
										 |  |  | : rc-path ( name -- path )
 | 
					
						
							|  |  |  |     home prepend-path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | : try-user-init ( file -- )
 | 
					
						
							|  |  |  |     "user-init" get swap '[ | 
					
						
							|  |  |  |         _ [ ?run-file ] [ | 
					
						
							|  |  |  |             <user-init-error> | 
					
						
							|  |  |  |             swap user-init-errors get set-at
 | 
					
						
							|  |  |  |             notify-error-observers | 
					
						
							|  |  |  |         ] recover
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] when ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | : run-bootstrap-init ( -- )
 | 
					
						
							|  |  |  |     ".factor-boot-rc" rc-path try-user-init ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | : run-user-init ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  |     ".factor-rc" rc-path try-user-init ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  | : load-vocab-roots ( -- )
 | 
					
						
							|  |  |  |     "user-init" get [ | 
					
						
							| 
									
										
										
										
											2011-05-15 01:05:34 -04:00
										 |  |  |         ".factor-roots" rc-path dup exists? [ | 
					
						
							| 
									
										
										
										
											2010-06-04 15:17:07 -04:00
										 |  |  |             utf8 file-lines harvest [ add-vocab-root ] each
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  |         ] [ drop ] if
 | 
					
						
							| 
									
										
										
										
											2016-03-03 14:24:54 -05:00
										 |  |  |         "roots" get [ | 
					
						
							|  |  |  |             os windows? ";" ":" ?
 | 
					
						
							|  |  |  |             split [ add-vocab-root ] each
 | 
					
						
							|  |  |  |         ] when*
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  |     ] when ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : var-param ( name value -- ) swap set-global ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : bool-param ( name -- ) "no-" ?head not var-param ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  | : param ( param -- )
 | 
					
						
							|  |  |  |     "=" split1 [ var-param ] [ bool-param ] if* ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-01 17:10:48 -05:00
										 |  |  | : run-script ( file -- )
 | 
					
						
							| 
									
										
										
										
											2011-09-06 19:29:15 -04:00
										 |  |  |     t parser-quiet? [ | 
					
						
							| 
									
										
										
										
											2011-08-18 00:29:02 -04:00
										 |  |  |         [ run-file ] | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  |         [ path>source-file main>> [ execute( -- ) ] when* ] bi
 | 
					
						
							| 
									
										
										
										
											2011-08-18 00:29:02 -04:00
										 |  |  |     ] with-variable ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-25 15:02:23 -04:00
										 |  |  | : (parse-command-line) ( args -- )
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         unclip "-" ?head [ | 
					
						
							|  |  |  |             [ param ] [ "run=" head? ] bi
 | 
					
						
							|  |  |  |             [ command-line set ] | 
					
						
							|  |  |  |             [ (parse-command-line) ] if
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							| 
									
										
										
										
											2012-08-13 19:42:56 -04:00
										 |  |  |             script set command-line set
 | 
					
						
							|  |  |  |         ] if
 | 
					
						
							| 
									
										
										
										
											2014-09-25 15:02:23 -04:00
										 |  |  |     ] unless-empty ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-14 00:06:57 -04:00
										 |  |  | : parse-command-line ( args -- )
 | 
					
						
							| 
									
										
										
										
											2014-09-25 15:02:23 -04:00
										 |  |  |     command-line off
 | 
					
						
							|  |  |  |     script off
 | 
					
						
							| 
									
										
										
										
											2014-12-23 11:12:31 -05:00
										 |  |  |     unclip executable set
 | 
					
						
							| 
									
										
										
										
											2014-09-25 15:02:23 -04:00
										 |  |  |     (parse-command-line) ;
 | 
					
						
							| 
									
										
										
										
											2012-08-14 00:06:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | SYMBOL: main-vocab-hook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : main-vocab ( -- vocab )
 | 
					
						
							|  |  |  |     embedded? [ | 
					
						
							|  |  |  |         "alien.remote-control" | 
					
						
							|  |  |  |     ] [ | 
					
						
							| 
									
										
										
										
											2009-03-17 03:19:50 -04:00
										 |  |  |         main-vocab-hook get [ call( -- vocab ) ] [ "listener" ] if*
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : default-cli-args ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-10-13 20:21:59 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         "e" off
 | 
					
						
							|  |  |  |         "user-init" on
 | 
					
						
							|  |  |  |         main-vocab "run" set
 | 
					
						
							| 
									
										
										
										
											2011-10-13 20:21:59 -04:00
										 |  |  |     ] with-global ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-23 20:36:51 -05:00
										 |  |  | [ | 
					
						
							|  |  |  |     H{ } user-init-errors set-global
 | 
					
						
							|  |  |  |     default-cli-args | 
					
						
							|  |  |  | ] "command-line" add-startup-hook | 
					
						
							| 
									
										
										
										
											2011-11-27 14:45:28 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | { "debugger" "command-line" } "command-line.debugger" require-when |