|
16 | 16 |
|
17 | 17 | :- dynamic(disabled_init_file/0). |
18 | 18 | :- dynamic(started/0). |
| 19 | +:- dynamic(custom_toplevel/1). |
19 | 20 |
|
20 | 21 | load_scryerrc :- |
21 | 22 | ( '$home_directory'(HomeDir) -> |
|
53 | 54 | ; true |
54 | 55 | ), |
55 | 56 | (\+ disabled_init_file -> load_scryerrc ; true), |
56 | | - repl. |
| 57 | + start_toplevel. |
| 58 | + |
| 59 | +start_toplevel :- |
| 60 | + ( custom_toplevel(Goal) -> |
| 61 | + user:call(Goal) |
| 62 | + ; repl |
| 63 | + ). |
57 | 64 |
|
58 | 65 | args_consults_goals([], [], []). |
59 | 66 | args_consults_goals([Arg|Args], Consults, Goals) :- |
|
71 | 78 | args_consults_goals(Goals1, Consults, Goals), |
72 | 79 | run_goals(Consults), |
73 | 80 | run_goals(Goals), |
74 | | - repl. |
| 81 | + start_toplevel. |
75 | 82 |
|
76 | 83 | delegate_task([Arg0|Args], Goals0) :- |
77 | 84 | ( ( member(Arg0, ["-h", "--help"]) -> print_help |
78 | 85 | ; member(Arg0, ["-v", "--version"]) -> print_version |
79 | 86 | ; member(Arg0, ["-g", "--goal"]) -> gather_goal(g, Args, Goals0) |
| 87 | + ; member(Arg0, ["-t"]) -> gather_toplevel(Args, Goals0) |
80 | 88 | ; member(Arg0, ["-f"]) -> disable_init_file |
81 | 89 | ; member(Arg0, ["--no-add-history"]) -> ignore_machine_arg |
82 | 90 | ), |
|
96 | 104 | write('Print version information and exit'), nl, |
97 | 105 | write(' -g, --goal GOAL '), |
98 | 106 | write('Run the query GOAL'), nl, |
| 107 | + write(' -t GOAL '), |
| 108 | + write('Use GOAL as custom toplevel (arity 0 predicate)'), nl, |
99 | 109 | write(' -f '), |
100 | 110 | write('Fast startup. Do not load initialization file (~/.scryerrc)'), nl, |
101 | 111 | write(' --no-add-history '), |
|
117 | 127 | Gs =.. [Type, Gs1], |
118 | 128 | delegate_task(Args, [Gs|Goals]). |
119 | 129 |
|
| 130 | +gather_toplevel(Args0, Goals0) :- |
| 131 | + length(Args0, N), |
| 132 | + ( N < 1 -> print_help, halt |
| 133 | + ; true |
| 134 | + ), |
| 135 | + [TopLevel|Args] = Args0, |
| 136 | + atom_chars(Goal, TopLevel), |
| 137 | + retractall(custom_toplevel(_)), |
| 138 | + asserta(custom_toplevel(Goal)), |
| 139 | + delegate_task(Args, Goals0). |
| 140 | + |
120 | 141 | disable_init_file :- |
121 | 142 | asserta('disabled_init_file'). |
122 | 143 |
|
|
154 | 175 | Exception, |
155 | 176 | ( write_term(Goal, [variable_names(VNs),double_quotes(DQ)]), |
156 | 177 | write(' causes: '), |
157 | | - write_term(Exception, [double_quotes(DQ)]), nl % halt? |
| 178 | + write_term(Exception, [double_quotes(DQ)]), nl |
158 | 179 | ) |
159 | 180 | ) -> true |
160 | 181 | ; write('% Warning: initialization failed for: '), |
|
0 commit comments