home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / LIB / SHELL.EXP < prev    next >
Text File  |  1996-06-04  |  22KB  |  718 lines

  1. %    $Id: shell.exp,v 1.2 1994/12/09 00:20:58 duchier Exp $    
  2. module("shell")?
  3.  
  4. expand_load(true)?
  5.  
  6. load_exp("loader","shell_interface")?
  7.  
  8. public(shell,shell2,global_set_key,interrupt,quit)?
  9.  
  10. :-(shell,;(,(nl,,(write("  Welcome to the LIFE Shell (Version 0 Thu Jan 28 1993)"),,(nl,,(nl,,(initialize_variables,,(read_keymap_file,,(read_history_file,fail))))))),shell2)).
  11.  
  12. :-(shell2,,(trace(false,false),main_loop(@(cp_stack => [],level => 0,vars => @)))).
  13.  
  14. :-(main_loop(_A: @(level => _B)),,(=(_C,@(left => [],prompt => _D: prompt(_B),right => [])),,(=(_E,current_line_number),,(write(_D),,(cond(not(in_raw),begin_raw),,(read_line(_C,_E),,(end_raw,,(eval_line(_A),main_loop(_A))))))))).
  15.  
  16. :-(read_line(_A,_B),,(get_key_or_xevent(_C,_D),,(;(,(_D,,(setq(xeventflag,true),nl)),;(,(return_key(_C),,(setq(current_line,line2revchars(_A)),nl)),;(,(get_function_bound_to_key(_C,global_map,_E),,(&(_E,@(_A,_B,self => _C)),,(setq(line,_A),,(setq(history_ptr,_B),fail)))),read_line(line,history_ptr)))),!))).
  17.  
  18. :-(get_key_or_xevent(_A,_B),,(get_raw(_C,_D),,(;(,(_D,=(_B,true)),;(,(prefix_char(_C),get_rest_of_key_or_xevent(_A,_B,prefix => [_C])),;(,(>=(_C,128),,(=(_A,[27,-(_C,128)]),=(_B,false))),,(=(_A,_C),=(_B,false))))),!))).
  19.  
  20. :-(get_rest_of_key_or_xevent(_A,_B,prefix => _C),,(get_raw(_D,_E),,(;(,(_E,=(_B,true)),;(,(prefix_key(_F: [_D|_C]),get_rest_of_key_or_xevent(_A,_B,prefix => _F)),,(=(_A,reverse(_F)),=(_B,false)))),!))).
  21.  
  22. :-(eval_line(_A),,(:==(xeventflag,false),,(!,,(=(_B,current_line),;(,(is_empty(_B),,(!,goto_previous_level(_A))),;(,(is_dot(_B),,(!,goto_top_level(_A))),;(,(is_semicolon(_B),,(!,backtrack(_A))),,(add_to_history(_B),,(setq(current_line_number,+(current_line_number,1)),parse_line(_A,reverse(_B))))))))))).
  23.  
  24. :-(eval_line(_A: @(level => _B)),,(setq(xeventflag,false),,(cond(window_flag,,(reset_window_flag,<-(_B,+(_B,1)))),,(nl,,(write("**** Yes"),,(nl,print_vars(_A))))))).
  25.  
  26. :-(parse_line(_A,_B),,(=(_C,get_choice),,(first_shell_parse(_B,_D,_E,_F,_G),&(_F,@(_E,_C,_D,_G,_A))))).
  27.  
  28. :-(parse_line(_A),print_vars(_A)).
  29.  
  30. :-(sh_query(_A,_B,_C,_D,_E: @(cp_stack => _F,level => _G,vars => _H)),,(retract(:-(shell_query,@)),,(assert(:-(shell_query(_C,_I,_J),,(trace(trace_status,step_status),,(_A,,(trace(_I,_J),trace(false,false)))))),;(,(=(_K,get_choice),,(shell_query(_H,_L,_M),,(setq(trace_status,_L),,(setq(step_status,_M),,(=(_N,exists_choice(_K,_O: get_choice)),,(cond(_P: window_flag,reset_window_flag),,(=(_Q,copy_pointer(_F)),,(cond(or(or(_D,_N),_P),,(<-(_G,+(_G,1)),<-(_F,[,(_B,_O)|_Q])),,(set_choice(_B),,(nl,,(write("**** Yes"),,(nl,fail))))),,(nl,,(write("**** Yes"),,(nl,print_vars(_E)))))))))))),,(trace(_L,_M),,(trace(false,false),,(setq(trace_status,_L),,(setq(step_status,_M),fail)))))))).
  31.  
  32. :-(sh_query(@,_A),,(nl,,(write("**** No"),,(nl,,(set_choice(_A),fail))))).
  33.  
  34. :-(declaration(_A,_B),,(;(,(term_xpand(_A,_C),,(!,;(,(cond(:=<(_C,list),maprel(assert,_C),assert(_C)),,(!,,(nl,,(write("**** Yes"),nl)))),succeed))),,(nl,,(write("**** Error in term expansion "),,(nl,,(write("**** No"),nl))))),,(set_choice(_B),fail))).
  35.  
  36. :-(error(@,_A),,(write_parse_error,,(set_choice(_A),fail))).
  37.  
  38. :-(goto_previous_level(@(level => 0)),!).
  39.  
  40. :-(goto_previous_level(@(cp_stack => [,(_A,@)|@])),,(nl,,(write("**** No"),,(nl,,(set_choice(_A),fail))))).
  41.  
  42. :-(goto_top_level(@(level => 0)),!).
  43.  
  44. :-(goto_top_level(@(cp_stack => _A)),,(=(,(_B,@),last(_A)),,(set_choice(_B),fail))).
  45.  
  46. :-(backtrack(@(level => 0)),!).
  47.  
  48. :-(backtrack(@(cp_stack => [,(@,_A)|@])),,(set_choice(_A),,(trace(trace_status,step_status),fail))).
  49.  
  50. :-(self_insert_command(@(left => _A,right => _B),self => _C),,(put_chars([_D: last(_C)|_B]),,(backspace_over(_B),<-(_A,[_D|copy_pointer(_A)])))).
  51.  
  52. :-(beginning_of_line(@(left => [])),!).
  53.  
  54. :-(beginning_of_line(@(left => _A,prompt => _B,right => _C)),,(carriage_return,,(write(_B),,(<-(_C,join(_A,copy_pointer(_C))),<-(_A,[]))))).
  55.  
  56. :-(end_of_line(@(right => [])),!).
  57.  
  58. :-(end_of_line(@(left => _A,right => _B)),,(put_chars(_B),,(<-(_A,join(_B,copy_pointer(_A))),<-(_B,[])))).
  59.  
  60. :-(forward_char(@(right => [])),!).
  61.  
  62. :-(forward_char(@(left => _A,right => _B: [_C|_D])),,(put_chars(_C),,(<-(_A,[_C|copy_pointer(_A)]),<-(_B,_D)))).
  63.  
  64. :-(backward_char(@(left => [])),!).
  65.  
  66. :-(backward_char(@(left => _A: [_B|_C],right => _D)),,(backspace,,(<-(_A,_C),<-(_D,[_B|copy_pointer(_D)])))).
  67.  
  68. :-(forward_word(@(right => [])),!).
  69.  
  70. :-(forward_word(_A: @(left => _B,right => _C)),find_word_right(copy_pointer(_C),copy_pointer(_B),_A)).
  71.  
  72. :-(find_word_right([],_A,_B),,(!,find_end_of_word([],_A,_B))).
  73.  
  74. :-(find_word_right([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(put_chars(_A),find_end_of_word(_B,[_A|_C],_D))))).
  75.  
  76. :-(find_word_right([_A|_B],_C,_D),,(put_chars(_A),find_word_right(_B,[_A|_C],_D))).
  77.  
  78. :-(find_end_of_word([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(put_chars(_A),find_end_of_word(_B,[_A|_C],_D))))).
  79.  
  80. :-(find_end_of_word(_A,_B,@(left => _C,right => _D)),,(<-(_C,_B),<-(_D,_A))).
  81.  
  82. :-(backward_word(@(left => [])),!).
  83.  
  84. :-(backward_word(_A: @(left => _B,right => _C)),find_word_left(copy_pointer(_B),copy_pointer(_C),_A)).
  85.  
  86. :-(find_word_left([],_A,_B),,(!,find_start_of_word([],_A,_B))).
  87.  
  88. :-(find_word_left([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(backspace,find_start_of_word(_B,[_A|_C],_D))))).
  89.  
  90. :-(find_word_left([_A|_B],_C,_D),,(backspace,find_word_left(_B,[_A|_C],_D))).
  91.  
  92. :-(find_start_of_word([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(backspace,find_start_of_word(_B,[_A|_C],_D))))).
  93.  
  94. :-(find_start_of_word(_A,_B,@(left => _C,right => _D)),,(<-(_C,_A),<-(_D,_B))).
  95.  
  96. :-(next_line(@,_A),,(=(_A,current_line_number),,(!,bell))).
  97.  
  98. :-(next_line(_A: @(left => _B,right => _C),_D),,(=(+(_D,1),_E: current_line_number),,(!,,(clear_line(_A),,(<-(_B,[]),,(<-(_C,[]),<-(_D,_E))))))).
  99.  
  100. :-(next_line(_A: @(left => _B,right => _C),_D),,(=(_E,str2psi(strcon("line",int2str(_F: +(_D,1))),"shell")),,(=(_G,eval(_E)),,(clear_line(_A),,(put_chars(reverse(_G)),,(<-(_B,_G),,(<-(_C,[]),<-(_D,_F)))))))).
  101.  
  102. :-(previous_line(@,_A),,(<(-(_A,1),max(1,-(current_line_number,history_limit))),,(!,bell))).
  103.  
  104. :-(previous_line(_A: @(left => _B,right => _C),_D),,(=(_E,str2psi(strcon("line",int2str(_F: -(_D,1))),"shell")),,(=(_G,eval(_E)),,(clear_line(_A),,(put_chars(reverse(_G)),,(<-(_B,_G),,(<-(_C,[]),<-(_D,_F)))))))).
  105.  
  106. :-(beginning_of_history,,(=(current_line_number,1),,(!,bell))).
  107.  
  108. :-(beginning_of_history(_A: @(left => _B,right => _C),_D),,(=(_E,max(1,-(current_line_number,history_limit))),,(=(_F,str2psi(strcon("line",int2str(_E)),"shell")),,(=(_G,eval(_F)),,(clear_line(_A),,(put_chars(reverse(_G)),,(<-(_B,_G),,(<-(_C,[]),<-(_D,_E))))))))).
  109.  
  110. :-(end_of_history,,(=(current_line_number,1),,(!,bell))).
  111.  
  112. :-(end_of_history(_A: @(_B,left => _C,right => _D)),,(=(_E,str2psi(strcon("line",int2str(-(_F: current_line_number,1))),"shell")),,(=(_G,eval(_E)),,(clear_line(_A),,(put_chars(reverse(_G)),,(<-(_C,_G),,(<-(_D,[]),<-(_B,_F)))))))).
  113.  
  114. :-(transpose_chars(@(left => [])),!).
  115.  
  116. :-(transpose_chars(@(right => [])),!).
  117.  
  118. :-(transpose_chars(@(left => _A: [_B|_C],right => _D: [_E|_F])),,(backspace,,(put_chars(_E),,(put_chars(_B),,(<-(_A,[_B,_E|_C]),<-(_D,_F)))))).
  119.  
  120. :-(delete_backward_char(@(left => [])),!).
  121.  
  122. :-(delete_backward_char(@(left => _A: [@|_B],right => _C)),,(backspace,,(put_chars(_C),,(space,,(backspace,,(backspace_over(_C),<-(_A,_B))))))).
  123.  
  124. :-(delete_char(@(right => [])),!).
  125.  
  126. :-(delete_char(@(right => _A: [@|_B])),,(put_chars(_B),,(space,,(backspace,,(backspace_over(_B),<-(_A,_B)))))).
  127.  
  128. :-(kill_line(@(right => [])),!).
  129.  
  130. :-(kill_line(@(right => _A)),,(blank_out(_A),,(backspace_over(_A),<-(_A,[])))).
  131.  
  132. :-(kill_entire_line(@(left => [],right => [])),!).
  133.  
  134. :-(kill_entire_line(_A: @(left => _B,right => _C)),,(clear_line(_A),,(<-(_B,[]),<-(_C,[])))).
  135.  
  136. :-(kill_word(@(right => [])),!).
  137.  
  138. :-(kill_word(_A: @(right => _B)),kill_word_right(copy_pointer(_B),_A)).
  139.  
  140. :-(kill_word_right([],_A),,(!,kill_to_end_of_word([],_A))).
  141.  
  142. :-(kill_word_right([_A|_B],_C),,(alphanumeric(_A),,(!,kill_to_end_of_word(_B,_C)))).
  143.  
  144. :-(kill_word_right([@|_A],_B),kill_word_right(_A,_B)).
  145.  
  146. :-(kill_to_end_of_word([_A|_B],_C),,(alphanumeric(_A),,(!,kill_to_end_of_word(_B,_C)))).
  147.  
  148. :-(kill_to_end_of_word(_A,@(right => _B)),,(overwrite(_B,_A),,(backspace_over(_A),<-(_B,_A)))).
  149.  
  150. :-(backward_kill_word(@(left => [])),!).
  151.  
  152. :-(backward_kill_word(_A: @(left => _B,right => _C)),kill_word_left(copy_pointer(_B),copy_pointer(_C),_A)).
  153.  
  154. :-(kill_word_left([],_A,_B),,(!,kill_to_start_of_word([],_A,_B))).
  155.  
  156. :-(kill_word_left([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(backspace,kill_to_start_of_word(_B,[_A|_C],_D))))).
  157.  
  158. :-(kill_word_left([_A|_B],_C,_D),,(backspace,kill_word_left(_B,[_A|_C],_D))).
  159.  
  160. :-(kill_to_start_of_word([_A|_B],_C,_D),,(alphanumeric(_A),,(!,,(backspace,kill_to_start_of_word(_B,[_A|_C],_D))))).
  161.  
  162. :-(kill_to_start_of_word(_A,_B,@(left => _C,right => _D)),,(overwrite(_B,_D),,(backspace_over(_D),<-(_C,_A)))).
  163.  
  164. :-(rewrite_line(@(left => _A,prompt => _B,right => _C)),,(carriage_return,,(write(_B),,(put_chars(join(_A,_C)),backspace_over(_C))))).
  165.  
  166. :-(describe_key_briefly(_A),,(get_key_or_xevent(_B,_C),,(;(,(_C,,(nl,setq(xeventflag,true))),,(get_function_bound_to_key(_B,global_map,_D),;(,(=(_D,undefined_key),undefined_key(_A,self => _B)),;(,(=(_D,ignore_key),,(nl,,(write(key2name(_B)," is ignored in line edit mode"),,(nl,rewrite_line(_A))))),,(nl,,(write(key2name(_B)," runs the command ",_D),,(nl,rewrite_line(_A)))))))),!))).
  167.  
  168. :-(interrupt,,(cond(in_raw,end_raw),,(setq(aborthook,abort),abort))).
  169.  
  170. :-(quit,,(cond(in_raw,end_raw),,(write_history,halt))).
  171.  
  172. :-(undefined_key(_A,self => _B),,(nl,,(write(key2name(_B)," is not defined"),,(nl,,(bell,rewrite_line(_A)))))).
  173.  
  174. ignore_key.
  175.  
  176. :-(bad_key(self => _A),,(nl,,(write("Oops! Got a bad key ",_A),nl))).
  177.  
  178. :-(read_keymap_file,,(=(keymap_flag,false),,(exists_file(_A: ".life-keymap"),,(!,,(load(_A),,(write("**** Read keymap file .life-keymap"),,(nl,setq(keymap_flag,true)))))))).
  179.  
  180. read_keymap_file.
  181.  
  182. is_keymap(global_map).
  183.  
  184. is_keymap(esc_map).
  185.  
  186. is_keymap(esclsb_map).
  187.  
  188. is_keymap(help_map).
  189.  
  190. :-(global_set_key(_A,_B),define_key(global_map,_A,_B)).
  191.  
  192. :-(define_key(_A,_B,_C),,(is_keymap(_A),,(!,,(=([_D|@],name2asc(_B)),,(=(_E,str2psi(strcon(psi2str(_A),int2str(_D)),"shell")),,(dynamic(_E),setq(_E,_C))))))).
  193.  
  194. :-(define_key(_A),,(nl,,(write(_A," is not a known keymap"),nl))).
  195.  
  196. :-(get_function_bound_to_key(_A: int,_B,_C),,(=(_D,str2psi(strcon(psi2str(_B),int2str(_A)),"shell")),,(=(_E,eval(_D)),,(;(,(is_defined(_E),=(_C,_E)),=(_C,undefined_key)),!)))).
  197.  
  198. :-(get_function_bound_to_key([],@,undefined_key),!).
  199.  
  200. :-(get_function_bound_to_key([_A|_B],_C,_D),,(=(_E,str2psi(strcon(psi2str(_C),int2str(_A)),"shell")),,(=(_F,eval(_E)),,(;(,(is_keymap(_F),get_function_bound_to_key(_B,_F,_D)),;(,(is_defined(_F),=(_D,_F)),=(_D,undefined_key))),!)))).
  201.  
  202. :-(read_history_file,,(=(history_flag,false),,(exists_file(_A: history_file),,(!,,(open_in(_A,_B),,(read_history_lines,,(close(_B),,(write("**** Read history file ",_A),,(nl,setq(history_flag,true)))))))))).
  203.  
  204. read_history_file.
  205.  
  206. :-(read_history_lines,,(get_nonempty_line([],_A),,(!,,(add_to_history(_A),,(setq(current_line_number,+(current_line_number,1)),read_history_lines))))).
  207.  
  208. read_history_lines.
  209.  
  210. :-(get_nonempty_line(_A,_B),,(get(_C),cond(is_eol_char(_C),get_nonempty_line([],_B),cond(is_white_char(_C),get_nonempty_line([_C|_A],_B),get_line([_C|_A],_B))))).
  211.  
  212. :-(get_line(_A,_B),,(get(_C),cond(is_eol_char(_C),=(_B,_A),get_line([_C|_A],_B)))).
  213.  
  214. :-(add_to_history(_A),,(=(_B,str2psi(strcon("line",int2str(current_line_number)),"shell")),setq(_B,_A))).
  215.  
  216. :-(write_history,,(>(_A: current_line_number,1),,(!,,(open_out(_B: history_file,_C),,(=(_D,max(1,-(_A,history_limit))),,(write_history_lines(_D,_A),,(close(_C),,(setq(history_flag,true),,(write("**** Wrote history list to file ",_B),nl))))))))).
  217.  
  218. write_history.
  219.  
  220. :-(write_history_lines(_A,_A),!).
  221.  
  222. :-(write_history_lines(_A,_B),,(=(_C,str2psi(strcon("line",int2str(_A)),"shell")),,(=(_D,eval(_C)),,(write(revchars2str(_D)),,(nl,write_history_lines(+(_A,1),_B)))))).
  223.  
  224. dynamic(history_limit,history_file)?
  225.  
  226. dynamic(history_flag,keymap_flag,current_line_number,current_line,line,history_ptr)?
  227.  
  228. non_strict(not_set)?
  229.  
  230. ->(not_set(_A),not(is_function(_A))).
  231.  
  232. :-(initialize_variables,,(cond(not_set(history_limit),`(setq(history_limit,100))),,(cond(not_set(history_file),`(setq(history_file,".life-history"))),,(cond(not_set(history_flag),`(setq(history_flag,false))),,(cond(not_set(keymap_flag),`(setq(keymap_flag,false))),,(cond(not_set(current_line_number),`(setq(current_line_number,1))),,(setq(xeventflag,false),,(setq(line,@),,(setq(history_ptr,1),,(setq(trace_status,false),,(setq(step_status,false),setq(aborthook,shell2)))))))))))).
  233.  
  234. dynamic(shell_query)?
  235.  
  236. shell_query.
  237.  
  238. :-(return_key(10),!).
  239.  
  240. return_key(13).
  241.  
  242. ->(is_eol_char(10),true).
  243.  
  244. ->(is_eol_char(end_of_file),true).
  245.  
  246. ->(is_eol_char(@),false).
  247.  
  248. ->(is_white_char(9),true).
  249.  
  250. ->(is_white_char(32),true).
  251.  
  252. ->(is_white_char(@),false).
  253.  
  254. :-(alphanumeric(_A),,(>=(_A,48),,(=<(_A,57),!))).
  255.  
  256. :-(alphanumeric(_A),,(>=(_A,65),,(=<(_A,90),!))).
  257.  
  258. :-(alphanumeric(_A),,(>=(_A,97),=<(_A,122))).
  259.  
  260. :-(ctl_char(_A),<(_A,32)).
  261.  
  262. :-(single_char(_A),<(_A,127)).
  263.  
  264. :-(meta_char(_A),>(_A,127)).
  265.  
  266. :-(prefix_char(27),!).
  267.  
  268. prefix_char(8).
  269.  
  270. ->(is_empty([]),true).
  271.  
  272. ->(is_empty([9|_A]),is_empty(_A)).
  273.  
  274. ->(is_empty([32|_A]),is_empty(_A)).
  275.  
  276. ->(is_empty(@),false).
  277.  
  278. ->(is_dot([9|_A]),is_dot(_A)).
  279.  
  280. ->(is_dot([32|_A]),is_dot(_A)).
  281.  
  282. ->(is_dot([46|_A]),is_empty(_A)).
  283.  
  284. ->(is_dot(@),false).
  285.  
  286. ->(is_semicolon([9|_A]),is_semicolon(_A)).
  287.  
  288. ->(is_semicolon([32|_A]),is_semicolon(_A)).
  289.  
  290. ->(is_semicolon([59|_A]),is_empty(_A)).
  291.  
  292. ->(is_semicolon(@),false).
  293.  
  294. prefix_key([91,27]).
  295.  
  296. ->(line2revchars(@(left => _A,right => _B)),join(_B,_A)).
  297.  
  298. ->(revchars2str(_A),rc2s(_A,"")).
  299.  
  300. ->(rc2s([],_A),_A).
  301.  
  302. ->(rc2s([_A|_B],_C),rc2s(_B,strcon(chr(_A),_C))).
  303.  
  304. ->(key2name(_A: int),asc2name(_A)).
  305.  
  306. ->(key2name([]),"").
  307.  
  308. ->(key2name([_A]),asc2name(_A)).
  309.  
  310. ->(key2name([_A|_B]),strcon(strcon(asc2name(_A)," "),key2name(_B))).
  311.  
  312. ->(asc2name(0),"NUL").
  313.  
  314. ->(asc2name(9),"TAB").
  315.  
  316. ->(asc2name(10),"RET").
  317.  
  318. ->(asc2name(13),"RET").
  319.  
  320. ->(asc2name(27),"ESC").
  321.  
  322. ->(asc2name(32),"SPC").
  323.  
  324. ->(asc2name(127),"DEL").
  325.  
  326. ->(asc2name(_A),cond(<(_A,26),strcon("C-",asc2name(+(_A,96))),cond(<(_A,32),strcon("C-",asc2name(+(_A,64))),cond(>(_A,127),strcon("ESC ",asc2name(-(_A,128))),chr(_A))))).
  327.  
  328. ->(name2asc(_A),n2a(explode(_A))).
  329.  
  330. ->(n2a([]),[]).
  331.  
  332. ->(n2a(["\"|_A]),bs_seq2asc(_A)).
  333.  
  334. ->(n2a([_A|_B]),[asc(_A)|n2a(_B)]).
  335.  
  336. ->(bs_seq2asc(["b"|_A]),[8|n2a(_A)]).
  337.  
  338. ->(bs_seq2asc(["t"|_A]),[9|n2a(_A)]).
  339.  
  340. ->(bs_seq2asc(["n"|_A]),[10|n2a(_A)]).
  341.  
  342. ->(bs_seq2asc(["f"|_A]),[12|n2a(_A)]).
  343.  
  344. ->(bs_seq2asc(["r"|_A]),[13|n2a(_A)]).
  345.  
  346. ->(bs_seq2asc(["\"|_A]),[92|n2a(_A)]).
  347.  
  348. ->(bs_seq2asc(["e"|_A]),esc2asc(_A)).
  349.  
  350. ->(bs_seq2asc(["C","-"|_A]),ctl2asc(_A)).
  351.  
  352. ->(bs_seq2asc(["M","-"|_A]),meta2asc(_A)).
  353.  
  354. ->(bs_seq2asc(_A),[92|n2a(_A)]).
  355.  
  356. ->(ctl2asc([_A|_B]),cond(and(<(64,_C: asc(_A)),<(_C,96)),[-(_C,64)|n2a(_B)],cond(and(<(95,_C),<(_C,123)),[-(_C,96)|n2a(_B)],n2a(_B)))).
  357.  
  358. ->(prompt(0),">> ").
  359.  
  360. ->(prompt(_A),strcon(strcon(dashes(_A),int2str(_A)),">> ")).
  361.  
  362. ->(dashes(0),"").
  363.  
  364. ->(dashes(_A),strcon(dashes(-(_A,1)),"--")).
  365.  
  366. :-(bell,put_raw(7)).
  367.  
  368. :-(backspace,put_raw(8)).
  369.  
  370. :-(carriage_return,put_raw(13)).
  371.  
  372. :-(space,put_raw(32)).
  373.  
  374. :-(put_chars(_A: int),,(!,cond(=:=(_A,9),put_raw(32),put_raw(_A)))).
  375.  
  376. :-(put_chars([]),!).
  377.  
  378. :-(put_chars([_A|_B]),,(cond(=:=(_A,9),put_raw(32),put_raw(_A)),put_chars(_B))).
  379.  
  380. :-(blank_out([]),!).
  381.  
  382. :-(blank_out([@|_A]),,(put_raw(32),blank_out(_A))).
  383.  
  384. :-(backspace_over([]),!).
  385.  
  386. :-(backspace_over([@|_A]),,(put_raw(8),backspace_over(_A))).
  387.  
  388. :-(clear_line(@(left => _A,prompt => _B,right => _C)),,(backspace_over(_A),,(blank_out(_A),,(blank_out(_C),,(carriage_return,write(_B)))))).
  389.  
  390. :-(overwrite([],_A),,(!,put_chars(_A))).
  391.  
  392. :-(overwrite(_A: [@|@],[]),,(!,,(blank_out(_A),backspace_over(_A)))).
  393.  
  394. :-(overwrite([@|_A],[_B|_C]),,(put_chars(_B),overwrite(_A,_C))).
  395.  
  396. ->(last(_A: int),_A).
  397.  
  398. ->(last([_A]),_A).
  399.  
  400. ->(last([@|_A]),last(_A)).
  401.  
  402. ->(join([],_A),_A).
  403.  
  404. ->(join([_A|_B],_C),join(_B,[_A|_C])).
  405.  
  406. non_strict(is_defined)?
  407.  
  408. :-(is_defined(_A),or(is_function(_A),is_predicate(_A))).
  409.  
  410. ->(reverse([]),[]).
  411.  
  412. ->(reverse(_A: list),rev(_A,acc => [])).
  413.  
  414. ->(rev([],acc => _A: list),_A).
  415.  
  416. ->(rev([_A|_B],acc => _C: list),rev(_B,acc => [_A|_C])).
  417.  
  418. ->(explode(_A: string),expl(_A,strlen(_A))).
  419.  
  420. ->(expl("",int),[]).
  421.  
  422. ->(expl(_A,_B),[substr(_A,1,1)|expl(substr(_A,2,_C: -(_B,1)),_C)]).
  423.  
  424. ->(global_map0,bad_key).
  425.  
  426. ->(global_map1,beginning_of_line).
  427.  
  428. ->(global_map2,backward_char).
  429.  
  430. ->(global_map3,ignore_key).
  431.  
  432. ->(global_map4,delete_char).
  433.  
  434. ->(global_map5,end_of_line).
  435.  
  436. ->(global_map6,forward_char).
  437.  
  438. ->(global_map7,undefined_key).
  439.  
  440. ->(global_map8,help_map).
  441.  
  442. ->(global_map9,self_insert_command).
  443.  
  444. ->(global_map10,eval_line).
  445.  
  446. ->(global_map11,kill_line).
  447.  
  448. ->(global_map12,rewrite_line).
  449.  
  450. ->(global_map13,eval_line).
  451.  
  452. ->(global_map14,next_line).
  453.  
  454. ->(global_map15,undefined_key).
  455.  
  456. ->(global_map16,previous_line).
  457.  
  458. ->(global_map17,undefined_key).
  459.  
  460. ->(global_map18,undefined_key).
  461.  
  462. ->(global_map19,undefined_key).
  463.  
  464. ->(global_map20,transpose_chars).
  465.  
  466. ->(global_map21,undefined_key).
  467.  
  468. ->(global_map22,undefined_key).
  469.  
  470. ->(global_map23,kill_entire_line).
  471.  
  472. ->(global_map24,undefined_key).
  473.  
  474. ->(global_map25,undefined_key).
  475.  
  476. ->(global_map26,undefined_key).
  477.  
  478. ->(global_map27,esc_map).
  479.  
  480. ->(global_map28,undefined_key).
  481.  
  482. ->(global_map29,undefined_key).
  483.  
  484. ->(global_map30,undefined_key).
  485.  
  486. ->(global_map31,undefined_key).
  487.  
  488. ->(global_map32,self_insert_command).
  489.  
  490. ->(global_map33,self_insert_command).
  491.  
  492. ->(global_map34,self_insert_command).
  493.  
  494. ->(global_map35,self_insert_command).
  495.  
  496. ->(global_map36,self_insert_command).
  497.  
  498. ->(global_map37,self_insert_command).
  499.  
  500. ->(global_map38,self_insert_command).
  501.  
  502. ->(global_map39,self_insert_command).
  503.  
  504. ->(global_map40,self_insert_command).
  505.  
  506. ->(global_map41,self_insert_command).
  507.  
  508. ->(global_map42,self_insert_command).
  509.  
  510. ->(global_map43,self_insert_command).
  511.  
  512. ->(global_map44,self_insert_command).
  513.  
  514. ->(global_map45,self_insert_command).
  515.  
  516. ->(global_map46,self_insert_command).
  517.  
  518. ->(global_map47,self_insert_command).
  519.  
  520. ->(global_map48,self_insert_command).
  521.  
  522. ->(global_map49,self_insert_command).
  523.  
  524. ->(global_map50,self_insert_command).
  525.  
  526. ->(global_map51,self_insert_command).
  527.  
  528. ->(global_map52,self_insert_command).
  529.  
  530. ->(global_map53,self_insert_command).
  531.  
  532. ->(global_map54,self_insert_command).
  533.  
  534. ->(global_map55,self_insert_command).
  535.  
  536. ->(global_map56,self_insert_command).
  537.  
  538. ->(global_map57,self_insert_command).
  539.  
  540. ->(global_map58,self_insert_command).
  541.  
  542. ->(global_map59,self_insert_command).
  543.  
  544. ->(global_map60,self_insert_command).
  545.  
  546. ->(global_map61,self_insert_command).
  547.  
  548. ->(global_map62,self_insert_command).
  549.  
  550. ->(global_map63,self_insert_command).
  551.  
  552. ->(global_map64,self_insert_command).
  553.  
  554. ->(global_map65,self_insert_command).
  555.  
  556. ->(global_map66,self_insert_command).
  557.  
  558. ->(global_map67,self_insert_command).
  559.  
  560. ->(global_map68,self_insert_command).
  561.  
  562. ->(global_map69,self_insert_command).
  563.  
  564. ->(global_map70,self_insert_command).
  565.  
  566. ->(global_map71,self_insert_command).
  567.  
  568. ->(global_map72,self_insert_command).
  569.  
  570. ->(global_map73,self_insert_command).
  571.  
  572. ->(global_map74,self_insert_command).
  573.  
  574. ->(global_map75,self_insert_command).
  575.  
  576. ->(global_map76,self_insert_command).
  577.  
  578. ->(global_map77,self_insert_command).
  579.  
  580. ->(global_map78,self_insert_command).
  581.  
  582. ->(global_map79,self_insert_command).
  583.  
  584. ->(global_map80,self_insert_command).
  585.  
  586. ->(global_map81,self_insert_command).
  587.  
  588. ->(global_map82,self_insert_command).
  589.  
  590. ->(global_map83,self_insert_command).
  591.  
  592. ->(global_map84,self_insert_command).
  593.  
  594. ->(global_map85,self_insert_command).
  595.  
  596. ->(global_map86,self_insert_command).
  597.  
  598. ->(global_map87,self_insert_command).
  599.  
  600. ->(global_map88,self_insert_command).
  601.  
  602. ->(global_map89,self_insert_command).
  603.  
  604. ->(global_map90,self_insert_command).
  605.  
  606. ->(global_map91,self_insert_command).
  607.  
  608. ->(global_map92,self_insert_command).
  609.  
  610. ->(global_map93,self_insert_command).
  611.  
  612. ->(global_map94,self_insert_command).
  613.  
  614. ->(global_map95,self_insert_command).
  615.  
  616. ->(global_map96,self_insert_command).
  617.  
  618. ->(global_map97,self_insert_command).
  619.  
  620. ->(global_map98,self_insert_command).
  621.  
  622. ->(global_map99,self_insert_command).
  623.  
  624. ->(global_map100,self_insert_command).
  625.  
  626. ->(global_map101,self_insert_command).
  627.  
  628. ->(global_map102,self_insert_command).
  629.  
  630. ->(global_map103,self_insert_command).
  631.  
  632. ->(global_map104,self_insert_command).
  633.  
  634. ->(global_map105,self_insert_command).
  635.  
  636. ->(global_map106,self_insert_command).
  637.  
  638. ->(global_map107,self_insert_command).
  639.  
  640. ->(global_map108,self_insert_command).
  641.  
  642. ->(global_map109,self_insert_command).
  643.  
  644. ->(global_map110,self_insert_command).
  645.  
  646. ->(global_map111,self_insert_command).
  647.  
  648. ->(global_map112,self_insert_command).
  649.  
  650. ->(global_map113,self_insert_command).
  651.  
  652. ->(global_map114,self_insert_command).
  653.  
  654. ->(global_map115,self_insert_command).
  655.  
  656. ->(global_map116,self_insert_command).
  657.  
  658. ->(global_map117,self_insert_command).
  659.  
  660. ->(global_map118,self_insert_command).
  661.  
  662. ->(global_map119,self_insert_command).
  663.  
  664. ->(global_map120,self_insert_command).
  665.  
  666. ->(global_map121,self_insert_command).
  667.  
  668. ->(global_map122,self_insert_command).
  669.  
  670. ->(global_map123,self_insert_command).
  671.  
  672. ->(global_map124,self_insert_command).
  673.  
  674. ->(global_map125,self_insert_command).
  675.  
  676. ->(global_map126,self_insert_command).
  677.  
  678. ->(global_map127,delete_backward_char).
  679.  
  680. ->(esc_map60,beginning_of_history).
  681.  
  682. ->(esc_map62,end_of_history).
  683.  
  684. ->(esc_map66,backward_word).
  685.  
  686. ->(esc_map68,kill_word).
  687.  
  688. ->(esc_map70,forward_word).
  689.  
  690. ->(esc_map91,esclsb_map).
  691.  
  692. ->(esc_map98,backward_word).
  693.  
  694. ->(esc_map100,kill_word).
  695.  
  696. ->(esc_map102,forward_word).
  697.  
  698. ->(esc_map127,backward_kill_word).
  699.  
  700. ->(esclsb_map65,previous_line).
  701.  
  702. ->(esclsb_map66,next_line).
  703.  
  704. ->(esclsb_map67,forward_char).
  705.  
  706. ->(esclsb_map68,backward_char).
  707.  
  708. ->(help_map67,describe_key_briefly).
  709.  
  710. ->(help_map99,describe_key_briefly).
  711.  
  712. module("user")?
  713.  
  714. open("shell")?
  715.  
  716. open("accumulators")?
  717.  
  718.