Work-around for serial mouse interrupts arriving too quickly

This commit is contained in:
Jeff Parsons 2015-03-18 14:45:36 -07:00 committed by jeffpar
commit bc153c3016
9 changed files with 96 additions and 41 deletions

View file

@ -585,7 +585,7 @@ La(function(){for(var a=db(window.document,"pcjs","video"),b=0;b<a.length;b++){v
function Kj(a){this.Tl=a.adapter;switch(this.Tl){case 1:this.Lk=1016;this.ih=4;break;case 2:this.Lk=760;this.ih=3;break;default:xa("Unrecognized serial adapter #"+this.Tl);return}this.ue=null;n.call(this,"SerialPort",a,Kj,2097152);var b=a.binding,c;a=Lj;b&&(void 0===c&&(c="Panel"),(c=ab(c,this.id))&&(b=c.na[b])&&this.Bb(null,a,b))}Xa(n,Kj);var Lj="buffer";k=Kj.prototype;k.ll=function(a,b){return a==this.Xg?(this.De=b,this):null};
k.Bb=function(a,b,c){var d=this;switch(b){case Lj:return this.na[b]=this.ue=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;8===b&&(a.preventDefault&&a.preventDefault(),Mj(d,[b]))},c.onkeypress=function(a){a=a||window.event;Mj(d,[a.which||a.keyCode])},!0}return!1};k.uc=function(a,b,c,d){this.fa=b;this.N=c;this.X=d;this.da=rb(a,"ChipSet");bc(b,this,Nj,this.Lk);fc(b,this,Oj,this.Lk);hb(this)};k.bc=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
k.ac=function(a){return a&&this.save?this.save():!0};k.reset=function(){this.Be()};k.save=function(){var a=new De(this),b=0,c=[];c[b++]=this.gj;c[b++]=this.rl;c[b++]=this.vf;c[b++]=this.Nh;c[b++]=this.oe;c[b++]=this.fd;c[b++]=this.xd;c[b++]=this.Qc;c[b++]=this.pl;c[b]=this.ug;a.set(0,c);return a.data()};k.restore=function(a){return this.Be(a[0])};
k.Be=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.gj=a[b++];this.rl=a[b++];this.vf=a[b++];this.Nh=a[b++];this.oe=a[b++];this.fd=a[b++];this.xd=a[b++];this.Qc=a[b++];this.pl=a[b++];this.ug=a[b];return!0};function Mj(a,b){a.ug=a.ug.concat(b);Pj(a)}function Pj(a){0<a.ug.length&&!(a.Qc&1)&&(a.gj=a.ug.shift(),a.Qc|=1);var b=-1;a.Qc&1&&a.Nh&1&&(b=4);0<=b?(a.oe&=-8,a.oe|=b,a.da&&a.ih&&Qh(a.da,a.ih)):(a.oe|=1,a.da&&a.ih&&Rh(a.da,a.ih))}
k.Be=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.gj=a[b++];this.rl=a[b++];this.vf=a[b++];this.Nh=a[b++];this.oe=a[b++];this.fd=a[b++];this.xd=a[b++];this.Qc=a[b++];this.pl=a[b++];this.ug=a[b];return!0};function Mj(a,b){a.ug=a.ug.concat(b);Pj(a)}function Pj(a){0<a.ug.length&&!(a.Qc&1)&&(a.gj=a.ug.shift(),a.Qc|=1);var b=-1;a.Qc&1&&a.Nh&1&&(b=4);0<=b?(a.oe&=-8,a.oe|=b,a.da&&a.ih&&Qh(a.da,a.ih,100)):(a.oe|=1,a.da&&a.ih&&Rh(a.da,a.ih))}
k.cp=function(a,b){var c=this.fd&128?this.vf&255:this.gj;p(this,a,null,b,this.fd&128?"DLL":"RBR",c);this.Qc&=-2;Pj(this);return c};k.Oo=function(a,b){var c=this.fd&128?this.vf>>8:this.Nh;p(this,a,null,b,this.fd&128?"DLM":"IER",c);return c};k.Po=function(a,b){var c=this.oe;p(this,a,null,b,"IIR",c);return c};k.Qo=function(a,b){var c=this.fd;p(this,a,null,b,"LCR",c);return c};k.So=function(a,b){var c=this.xd;p(this,a,null,b,"MCR",c);return c};
k.Ro=function(a,b){var c=this.Qc;p(this,a,null,b,"LSR",c);return c};k.Yo=function(a,b){var c=this.pl;p(this,a,null,b,"MSR",c);return c};k.tq=function(a,b,c){p(this,a,b,c,this.fd&128?"DLL":"THR");this.fd&128?this.vf=this.vf&-256|b:(this.rl=b,this.Qc&=-97,this.ue?(13!=b&&(8==b?this.ue.value=this.ue.value.slice(0,-1):(this.ue.value+=String.fromCharCode(b),this.ue.scrollTop=this.ue.scrollHeight)),a=!0):a=!1,a&&(this.Qc|=96))};
k.eq=function(a,b,c){p(this,a,b,c,this.fd&128?"DLM":"IER");this.fd&128?this.vf=this.vf&255|b<<8:this.Nh=b};k.fq=function(a,b,c){p(this,a,b,c,"LCR");this.fd=b};
@ -595,7 +595,7 @@ k.uc=function(a,b,c,d){this.xa=a;this.fa=b;this.N=c;this.X=d;this.video=rb(this.
k.ac=function(a){return a&&this.save?this.save():!0};k.reset=function(){this.Be()};k.save=function(){var a=new De(this);a.set(0,this.Vk());return a.data()};k.restore=function(a){return this.Be(a[0])};k.Be=function(a){var b=0;void 0===a&&(a=[!1,-1,-1,0,0,!1,!1,0]);this.setActive(a[b++]);this.ee=a[b++];this.fe=a[b++];this.xf=a[b++];this.yf=a[b++];this.ci=a[b++];this.di=a[b++];this.xd=a[b];return!0};
k.Vk=function(){var a=0,b=[];b[a++]=this.ld;b[a++]=this.ee;b[a++]=this.fe;b[a++]=this.xf;b[a++]=this.yf;b[a++]=this.ci;b[a++]=this.di;b[a]=this.xd;return b};k.qh=function(a){this.gi=a};function Qj(a,b){b&&(a.wj||(b.addEventListener("mousemove",function(b){a.$l(b)},!1),b.addEventListener("mousedown",function(b){a.nj(b.button,!0)},!1),b.addEventListener("mouseup",function(b){a.nj(b.button,!1)},!1),a.wj=!0),b.style.cursor="none")}function Rj(a){a&&(a.style.cursor="auto")}
k.$l=function(a){if(this.ld&&this.N&&this.N.ba.fb){if(0>this.ee||0>this.fe)this.ee=a.clientX,this.fe=a.clientY;this.gi?(this.xf=a.movementX||a.mozMovementX||a.webkitMovementX||0,this.yf=a.movementY||a.mozMovementY||a.webkitMovementY||0):(this.xf=a.clientX-this.ee,this.yf=a.clientY-this.fe);(this.xf||this.yf)&&Tj(this,null,a.clientX,a.clientY);this.ee=a.clientX;this.fe=a.clientY}};
k.nj=function(a,b){if(this.ld&&this.N&&this.N.ba.fb){var c;!(c=!1!==this.gi)&&(c=this.video)&&(c=this.video,c=c.bo?c.hf(!0):!1);c||(this.gi=null);switch(a){case 0:this.ci!=b&&(this.ci=b,Tj(this,"mouse button1 "+(b?"dn":"up")));break;case 2:this.di!=b&&(this.di=b,Tj(this,"mouse button2 "+(b?"dn":"up")))}}};
k.nj=function(a,b){if(this.ld&&this.N&&this.N.ba.fb){var c;!(c=!1!==this.gi)&&(c=this.video)&&(c=this.video,c=c.bo?c.hf(!0):!1);c||(this.gi=null);c="mouse button"+a+" "+(b?"dn":"up");switch(a){case 0:this.ci!=b&&(this.ci=b,Tj(this,c));break;case 2:this.di!=b&&(this.di=b,Tj(this,c))}}};
function Tj(a,b,c,d){var e=64|(a.ci?32:0)|(a.di?16:0)|(a.yf&192)>>4|(a.xf&192)>>6,f=a.xf&63,g=a.yf&63;a.ma(2097152)&&a.Ta((b?b+": ":"")+(void 0!==d?"mouse ("+c+","+d+"): ":"")+"serial packet ["+l(e)+","+l(f)+","+l(g)+"]",0,!0);Mj(a.Jg,[e,f,g]);a.xf=a.yf=0}La(function(){for(var a=db(window.document,"pcjs","mouse"),b=0;b<a.length;b++){var c=a[b],d=bb(c),d=new Sj(d);cb(d,c)}});
function Uj(a,b,c){n.call(this,"Disk",{id:a.Vl+".disk"+ ++Vj},Uj,1048576);this.V=a;this.xa=a.xa;this.X=a.X;this.Ja=b;this.Hd=b.name;this.Rf=b.Rf;this.hi=this.Sd=!1;this.create(c,b.ub,b.vb,b.zb,b.mb);this.Pe=[];this.Ch=[];this.ce=null;this.bm=0;this.Fj=!1;hb(this)}var Vj=0;Xa(n,Uj);k=Uj.prototype;k.uc=function(a,b,c,d){this.X=d};k.bc=function(a,b){b||!this.hi||this.Sd||(hb(this,!1),this.load(this.Hd,this.rf,null,this.Zn,this));return!0};k.Zn=function(){hb(this,!0)};
k.ac=function(a,b){if(this.Sd){var c,d=0;if(this.Fj&&!za("Disk writes are still in progress, shut down anyway?"))return!1;for(;c=Wj(this,!1);)if(d=c[0]){this.V.ya('Unable to save "'+this.Hd+'" (error '+d+")");break}b&&this.Sd&&(c="action=close&volume="+this.rf,c+="&machine="+this.V.Tf(),c+="&user="+this.V.ze(),va(wa()+"/api/v1/disk?"+c,!0),this.Sd=!1);!d&&a&&this.V.ya(this.Hd+" saved")}return!0};

View file

@ -559,7 +559,7 @@ za(function(){for(var a=Ra(window.document,"pcjs","video"),b=0;b<a.length;b++){v
function zi(a){this.$k=a.adapter;switch(this.$k){case 1:this.Xj=1016;this.sg=4;break;case 2:this.Xj=760;this.sg=3;break;default:m("Unrecognized serial adapter #"+this.$k);return}this.Pd=null;n.call(this,"SerialPort",a,zi);var b=a.binding,c;a=Ai;b&&(void 0===c&&(c="Panel"),(c=Oa(c,this.id))&&(b=c.la[b])&&this.Ab(null,a,b))}La(n,zi);var Ai="buffer";k=zi.prototype;k.vk=function(a,b){return a==this.yh?(this.Yd=b,this):null};
k.Ab=function(a,b,c){var d=this;switch(b){case Ai:return this.la[b]=this.Pd=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;8===b&&(a.preventDefault&&a.preventDefault(),Bi(d,[b]))},c.onkeypress=function(a){a=a||window.event;Bi(d,[a.which||a.keyCode])},!0}return!1};k.wc=function(a,b,c,d){this.ga=b;this.S=c;this.Ta=d;this.aa=bb(a,"ChipSet");Ib(b,this,Ci,this.Xj);Kb(b,this,Di,this.Xj);p(this)};k.Yb=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
k.Xb=function(a){return a&&this.save?this.save():!0};k.reset=function(){this.Wd()};k.save=function(){var a=new Pd(this),b=0,c=[];c[b++]=this.oi;c[b++]=this.Bk;c[b++]=this.Te;c[b++]=this.Wg;c[b++]=this.Kd;c[b++]=this.te;c[b++]=this.ad;c[b++]=this.Bc;c[b++]=this.zk;c[b]=this.Mf;a.set(0,c);return a.data()};k.restore=function(a){return this.Wd(a[0])};
k.Wd=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.oi=a[b++];this.Bk=a[b++];this.Te=a[b++];this.Wg=a[b++];this.Kd=a[b++];this.te=a[b++];this.ad=a[b++];this.Bc=a[b++];this.zk=a[b++];this.Mf=a[b];return!0};function Bi(a,b){a.Mf=a.Mf.concat(b);Ei(a)}function Ei(a){0<a.Mf.length&&!(a.Bc&1)&&(a.oi=a.Mf.shift(),a.Bc|=1);var b=-1;a.Bc&1&&a.Wg&1&&(b=4);0<=b?(a.Kd&=-8,a.Kd|=b,a.aa&&a.sg&&Sg(a.aa,a.sg)):(a.Kd|=1,a.aa&&a.sg&&Tg(a.aa,a.sg))}
k.Wd=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.oi=a[b++];this.Bk=a[b++];this.Te=a[b++];this.Wg=a[b++];this.Kd=a[b++];this.te=a[b++];this.ad=a[b++];this.Bc=a[b++];this.zk=a[b++];this.Mf=a[b];return!0};function Bi(a,b){a.Mf=a.Mf.concat(b);Ei(a)}function Ei(a){0<a.Mf.length&&!(a.Bc&1)&&(a.oi=a.Mf.shift(),a.Bc|=1);var b=-1;a.Bc&1&&a.Wg&1&&(b=4);0<=b?(a.Kd&=-8,a.Kd|=b,a.aa&&a.sg&&Sg(a.aa,a.sg,100)):(a.Kd|=1,a.aa&&a.sg&&Tg(a.aa,a.sg))}
k.io=function(){var a=this.te&128?this.Te&255:this.oi;this.Bc&=-2;Ei(this);return a};k.Sn=function(){return this.te&128?this.Te>>8:this.Wg};k.Tn=function(){return this.Kd};k.Un=function(){return this.te};k.Wn=function(){return this.ad};k.Vn=function(){return this.Bc};k.bo=function(){return this.zk};
k.vp=function(a,b){if(this.te&128)this.Te=this.Te&-256|b;else{this.Bk=b;this.Bc&=-97;var c;this.Pd?(13!=b&&(8==b?this.Pd.value=this.Pd.value.slice(0,-1):(this.Pd.value+=String.fromCharCode(b),this.Pd.scrollTop=this.Pd.scrollHeight)),c=!0):c=!1;c&&(this.Bc|=96)}};k.gp=function(a,b){this.te&128?this.Te=this.Te&255|b<<8:this.Wg=b};k.hp=function(a,b){this.te=b};
k.ip=function(a,b){var c=this.ad;this.ad=b;if(this.Yd&&(c^b)&3){var c=this.Yd,d=this.ad,e=3==(d&3);if(e){if(!c.Vc){var f=!1;c.ad&2||(c.reset(),c.Zb("serial mouse reset"),f=!0);c.ad&1||(c.Zb("serial mouse ID requested"),f=!0);f&&(Bi(c.$f,[77,77]),c.Zb("serial mouse ID sent"));Fi(c,c.za);c.setActive(e)}}else c.Vc&&(c.Zb("serial mouse inactive"),Gi(c.za),c.setActive(e));c.ad=d}};