diff --git a/clite/bios.js b/clite/bios.js index de45c1a..c93552c 100644 --- a/clite/bios.js +++ b/clite/bios.js @@ -46,9 +46,8 @@ var bios = { head.appendChild(script); }, file:function(name,callback) { - if (window.location.protocol == 'file:') { // this is a dirty hack and I hate it, just let me open a file: path! - //clite.term.setCustom({type:'file',callback:callback}); - //clite.term.writeLine('open file: '+name); + if (window.location.protocol == 'file:') { + bios.io.write(3,{file:name,fn:callback}); return; } @@ -92,6 +91,10 @@ var bios = { } bios.input.keybuffer.rcvr = d; break; + case 3: + bios.input.upload.data.callback = d.fn; + bios.input.upload.data.file = d.file; + bios.input.setState(2); default:; } }, @@ -143,10 +146,33 @@ var bios = { input:{ el:null, state:0, + setState:function(v) { // 1 for normal keyboard input, 2 for file access + if (bios.input.state == v) + return; + switch (bios.input.state) { + case 1: + bios.input.keyboard.disable(); + break; + case 2: + bios.input.upload.disable(); + break; + default:; + } + switch (v) { + case 2: + bios.input.upload.enable(); + break; + default: + bios.input.keyboard.enable(); + v = 1; + } + bios.input.state = v; + }, init:function() { bios.input.el = document.getElementById('input'); bios.input.keyboard.init(); - bios.input.state = 1; + bios.input.upload.init(); + bios.input.setState(1); }, keybuffer:{ rcvr:null, @@ -364,7 +390,8 @@ bios.video.graphic = { bios.input.keyboard = { data:{ - el:null + el:null, + enabled:false }, internal:{ rawDown:function(e) { @@ -495,18 +522,141 @@ bios.input.keyboard = { bios.input.keyboard.data.el = document.createElement('textarea'); bios.input.keyboard.data.el.id = 'kbd'; bios.input.keyboard.data.el.className = 'kbd'; - bios.input.keyboard.data.el.style.zIndex = '100'; + //bios.input.keyboard.data.el.style.zIndex = '100'; bios.input.keyboard.data.el.style.display = 'block'; } bios.input.keyboard.data.el.addEventListener('keydown',bios.input.keyboard.internal.rawDown); bios.input.keyboard.data.el.addEventListener('keyup',bios.input.keyboard.internal.rawUp); - bios.input.keyboard.data.el.addEventListener('focusout',bios.input.keyboard.internal.resetFocus); + if (bios.input.keyboard.data.enabled) { + bios.input.keyboard.data.el.addEventListener('focusout',bios.input.keyboard.internal.resetFocus); + bios.input.keyboard.internal.resetFocus(); + } return bios.input.keyboard.data.el; }, init:function() { var el = bios.input.keyboard.getElement(); bios.input.el.appendChild(el); - bios.input.keyboard.internal.resetFocus(); + }, + enable:function() { + bios.input.keyboard.data.enabled = true; + bios.input.keyboard.getElement(); + }, + disable:function() { + bios.input.keyboard.data.enabled = false; + bios.input.keyboard.getElement(); + bios.input.keyboard.data.el.removeEventListener('focusout',bios.input.keyboard.internal.resetFocus); + } +}; + +bios.input.upload = { + data:{ + el:null, + enabled:false, + reader:null, + callback:null, + file:null, + panel:null + }, + internal:{ + createUploadPanel:function() { + if (bios.video.mode.current != 1 || bios.input.upload.data.file == null) + return; + + var l = 28; + if (bios.input.upload.data.file.length > l) + l = bios.input.upload.data.file.length; + var w = l+4; + var h = 6; + var x = 40-(w/2); + var y = 9; + + for (var i=0; i