;;; File: app.scm ;;;---------------------------------------------------------------------------- (declare (standard-bindings) (extended-bindings) (not safe)) #| (##inline-host-declaration #<<host-code-end function js_setTimeout(thunk, timeout) { setTimeout(thunk, timeout); } function js_alert(text) { alert(text); } function js_load_js(url) { var scr = document.createElement('script'); scr.setAttribute('type', 'text/javascript'); scr.setAttribute('src', url); document.getElementsByTagName('head').item(0).appendChild(scr); } function XHR_send(callback, retry, url, data) { var req = false; function new_req() { if (window.XMLHttpRequest) { // Mozilla, Safari, ... req = new XMLHttpRequest(); if (req.overrideMimeType) { req.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { req = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { req = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {} } } } function init_req() { req.onreadystatechange = response_handler; req.open('POST', url, true); req.setRequestHeader('Content-type', 'text/plain'); req.setRequestHeader('enctype', 'text/plain'); } function send_req() { req.send(data); } function response_handler() { if (req.readyState === 4) { if (req.status === 200) { callback(req.responseText); } else if (retry) { add('retry','|r='+r+'|'); setTimeout(send_req, 5000); } else { callback(null); } } } new_req(); if (req !== false) { init_req(); send_req(); } return req; } function port_open(cont, specs) { XHR_send(cont, true, '/port_open', specs); } function port_read(cont, port_id, len) { XHR_send(cont, true, '/port_read?port_id=' + port_id + '&' + 'len=' + len, null); } function port_write(cont, port_id, data) { XHR_send(cont, true, '/port_write?port_id=' + port_id, data); } function port_close(cont, port_id) { XHR_send(cont, true, '/port_close?port_id=' + port_id, null); } function get(id) { return document.getElementById(id).innerHTML; } function set(id, content) { document.getElementById(id).innerHTML = content; } function add(id, content) { set(id, get(id) + content); } function setup() { function cont2(port_id) { function cont3(str) { function cont4(r) { add('output','|cont4 r='+r+'|'); cont2(port_id); } function cont5(r) { add('output','|cont5 r='+r+'|'); //setup(); } add('output','|cont3 str='+str+'|'); if (str === '') port_close(cont5, port_id); else cont2(port_id);//port_write(cont4, port_id, str); } add('output','|cont2 port_id='+port_id+'|'); port_read(cont3, port_id, 500); } add('output','|port_open|'); port_open(cont2, // '(open-file path: "README" direction: input)' // '(open-process path: "ls" arguments: ("../../..") direction: input)' // '(open-directory path: "../../..")' '(open-tcp-server port-number: 12345)' ); } function js_go() { setTimeout(setup,1000); } host-code-end ) (define setTimeout (##inline-host-expression "gambit_js2scm(js_setTimeout)")) (define alert (##inline-host-expression "gambit_js2scm(js_alert)")) (define load-js (##inline-host-expression "gambit_js2scm(js_load_js)")) (define go (##inline-host-expression "gambit_js2scm(js_go)")) (go) |# (declare (safe)) (println (thread-name (make-thread (lambda () (current-thread))))) (println (thread-name (make-thread (lambda () (current-thread)) 'allo))) (println (mutex-name (make-mutex))) (println (mutex-name (make-mutex 'allo))) (println (condition-variable-name (make-condition-variable))) (println (condition-variable-name (make-condition-variable 'allo))) (##trap (lambda () (eval '(println (quote a))))) (##trap (lambda () ; (println (foo 1 2 3)) (println (eval '(bar 1 2 3)))))