]> gitweb.factorcode.org Git - factor.git/blob - extra/webapps/fjsc/www/repl.js
Switch to https urls
[factor.git] / extra / webapps / fjsc / www / repl.js
1 /* Copyright (C) 2007 Chris Double. All Rights Reserved.
2    See https://factorcode.org/license.txt for BSD license. */
3
4 var fjsc_repl = false;
5
6 function fjsc_repl_handler() {
7   var my_term = this;
8   this.newLine();
9   if(this.lineBuffer != '') {
10     factor.server_eval(
11       this.lineBuffer,
12       function(text, result) {
13         document.getElementById("compiled").value = result;
14         display_datastack();
15       },
16       function() { my_term.prompt(); });
17   }
18   else
19     my_term.prompt();
20 }
21
22 function fjsc_init_handler() {
23   this.write(
24     [
25       TermGlobals.center('********************************************************'),
26       TermGlobals.center('*                                                      *'),
27       TermGlobals.center('*       Factor to Javascript Compiler Example          *'),
28       TermGlobals.center('*                                                      *'),
29       TermGlobals.center('********************************************************')
30     ]);
31
32   this.prompt();
33 }
34
35 function startup() {
36   var conf = {
37     x: 0,
38     y: 0,
39     cols: 64,
40     rows: 18,
41     termDiv: "repl",
42     crsrBlinkMode: true,
43     ps: "( scratchpad )",
44     initHandler: fjsc_init_handler,
45     handler: fjsc_repl_handler
46   };
47   fjsc_repl = new Terminal(conf);
48   fjsc_repl.open();
49 }
50
51 function display_datastack() {
52    var html=[];
53    html.push("<table border='1'>")
54    for(var i = 0; i < factor.cont.data_stack.length; ++i) {
55       html.push("<tr><td>")
56       html.push(factor.cont.data_stack[i])
57       html.push("</td></tr>")
58    }
59    html.push("</table>")
60    document.getElementById('stack').innerHTML=html.join("");
61 }
62
63 jQuery(function() {
64   startup();
65   display_datastack();
66 });
67
68 factor.add_word("kernel", ".s", "primitive", function(next) {
69   var stack = factor.cont.data_stack;
70   var term = fjsc_repl;
71   for(var i=0; i<stack.length; ++i) {
72     term.type(""+stack[i]);
73     term.newLine();
74   }
75   factor.call_next(next);
76 });
77
78 factor.add_word("io", "print", "primitive", function(next) {
79   var stack = factor.cont.data_stack;
80   var term = fjsc_repl;
81   term.type(""+stack.pop());
82   term.newLine();
83   factor.call_next(next);
84 });
85
86 factor.add_word("io", "write", "primitive", function(next) {
87   var stack = factor.cont.data_stack;
88   var term = fjsc_repl;
89   term.type(""+stack.pop());
90   factor.call_next(next);
91 });
92
93 factor.add_word("io", ".", "primitive", function(next) {
94   var stack = factor.cont.data_stack;
95   var term = fjsc_repl;
96   term.type(""+stack.pop());
97   term.newLine();
98   factor.call_next(next);
99 });