Fixed recent problems introduced with my switch to addEventListener

This commit is contained in:
Jeff Parsons 2017-06-27 17:39:20 -07:00 committed by Jeff Parsons
commit 743511d5db
14 changed files with 70 additions and 88 deletions

View file

@ -661,7 +661,7 @@ Gv.prototype.yj=function(a,b){var c=null;if(this.pd)for(var d in this.pd){var e=
function Ov(a){pb.call(this,"FDC",a,524288);this.dmaRead=Ov.prototype.kl;this.dmaWrite=Ov.prototype.ll;this.dmaFormat=Ov.prototype.Dl;this.L=Pv(a.autoMount);this.J=a.sortBy||"name";"none"==this.J&&(this.J=null);this.B=[];this.M=!Wa("Mobi")&&window&&"FileReader"in window}ba(Ov,pb);l=Ov.prototype; function Ov(a){pb.call(this,"FDC",a,524288);this.dmaRead=Ov.prototype.kl;this.dmaWrite=Ov.prototype.ll;this.dmaFormat=Ov.prototype.Dl;this.L=Pv(a.autoMount);this.J=a.sortBy||"name";"none"==this.J&&(this.J=null);this.B=[];this.M=!Wa("Mobi")&&window&&"FileReader"in window}ba(Ov,pb);l=Ov.prototype;
l.Cb=function(a,b,c){var d=this;switch(b){case "listDisks":this.na[b]=c;if(this.J){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.J?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.na.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){kb("FDC option error: "+h.message)}b=g.desc;void 0=== l.Cb=function(a,b,c){var d=this;switch(b){case "listDisks":this.na[b]=c;if(this.J){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.J?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.na.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){kb("FDC option error: "+h.message)}b=g.desc;void 0===
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.na[b]=c,c.onchange=function(){var a=oa(c.value,10);null!=a&&Qv(d,a)},!0;case "loadDisk":return this.na[b]=c,c.onclick=function(){var a=d.na.listDisks;a&&Rv(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.na[b]=c;c.onclick=function(){var a=d.na.listDrives;a&&a.options&&d.A&&((a=d.A[oa(a.value, b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.na[b]=c,c.onchange=function(){var a=oa(c.value,10);null!=a&&Qv(d,a)},!0;case "loadDisk":return this.na[b]=c,c.onclick=function(){var a=d.na.listDisks;a&&Rv(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.na[b]=c;c.onclick=function(){var a=d.na.listDrives;a&&a.options&&d.A&&((a=d.A[oa(a.value,
10)||0])?(a=a.sa)?(a=Za(Mv(a),"octet-stream",!0,a.Lg.replace(".json",".img")),kb(a)):d.Da("No diskette loaded in drive."):d.Da("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Rv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; 10)||0])?(a=a.sa)?(a=Za(Mv(a),"octet-stream",!0,a.Lg.replace(".json",".img")),kb(a)):d.Da("No diskette loaded in drive."):d.Da("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Rv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1};
l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.W=Zb(a,"ChipSet");Pv(Bd(this.pa,"autoMount"),this.L);Sv(this);Qc(b,this,Tv);Uc(b,this,Uv);Vv(this,"None","",!0);this.M&&Vv(this,"Local Disk","?");Vv(this,"Remote Disk","??");Wv(this)||Lb(this)};function Pv(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){kb("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a} l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.W=Zb(a,"ChipSet");Pv(Bd(this.pa,"autoMount"),this.L);Sv(this);Qc(b,this,Tv);Uc(b,this,Uv);Vv(this,"None","",!0);this.M&&Vv(this,"Local Disk","?");Vv(this,"Remote Disk","??");Wv(this)||Lb(this)};function Pv(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){kb("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a}
l.Xb=function(a,b){if(!b){if(!a){if(this.reset(),this.pa.O){this.B=[];for(a=0;a<this.A.length;a++)Xv(this,a,!0);Wv(this,!0)}}else if(!this.restore(a))return!1;if(a=this.na.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.N;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.N&&(a.value="0",Qv(this,0))}}return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){Sv(this)}; l.Xb=function(a,b){if(!b){if(!a){if(this.reset(),this.pa.O){this.B=[];for(a=0;a<this.A.length;a++)Xv(this,a,!0);Wv(this,!0)}}else if(!this.restore(a))return!1;if(a=this.na.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.N;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.N&&(a.value="0",Qv(this,0))}}return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){Sv(this)};
l.save=function(){var a=new Zf(this);a.set(0,Yv(this));return a.data()};l.restore=function(a){return Sv(this,a[0])}; l.save=function(){var a=new Zf(this);a.set(0,Yv(this));return a.data()};l.restore=function(a){return Sv(this,a[0])};
@ -672,8 +672,8 @@ function Yv(a){var b=0,c=[];c[b++]=a.Va;c[b++]=0;c[b++]=a.fa;c[b++]=a.F;c[b++]=a
l.jj=function(a){var b;a=this.A[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};l.bl=function(a,b,c){if(a.sa){var d=a.sa.info(),e=d[2],f=d[1]*e;if(b+c<=d[0]*f)return a.Gb=Math.floor(b/f),b%=f,a.Za=Math.floor(b/e),a.nb=b%e+1,a.vb=c*d[3],a.sb=fw,!0}return!1}; l.jj=function(a){var b;a=this.A[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};l.bl=function(a,b,c){if(a.sa){var d=a.sa.info(),e=d[2],f=d[1]*e;if(b+c<=d[0]*f)return a.Gb=Math.floor(b/f),b%=f,a.Za=Math.floor(b/e),a.nb=b%e+1,a.vb=c*d[3],a.sb=fw,!0}return!1};
function Wv(a,b){b||(a.K=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.na.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.na.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=ta(e,!0)}!bw(a,f,d||"Unknown",e,!0)&&b&&Lb(a,!1)}else a.Da("Incorrect auto-mount settings for drive "+ function Wv(a,b){b||(a.K=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.na.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.na.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=ta(e,!0)}!bw(a,f,d||"Unknown",e,!0)&&b&&Lb(a,!1)}else a.Da("Incorrect auto-mount settings for drive "+
c+" ("+JSON.stringify(d)+")")}return!!a.K} c+" ("+JSON.stringify(d)+")")}return!!a.K}
function Rv(a,b,c,d){var e,f=a.na.listDrives;if(f&&!isNaN(e=oa(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.Da('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=ta(c)}for(;0>bw(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Xv(a,e,!1, function Rv(a,b,c,d){var e,f=a.na.listDrives;if(f&&!isNaN(e=oa(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.Da('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=ta(c)}for(;0>bw(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk and discard any changes.");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Xv(a,e,!1,!0)}}else Xv(a,e);else a.Da("Unable to load the selected drive")}
!0)}}else Xv(a,e);else a.Da("Unable to load the selected drive")}function bw(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.ue.toLowerCase()!=d.toLowerCase())){Xv(a,b,e,!0);if(g.Ne)return a.Da("Drive "+b+" busy"),0;g.Ne=!0;e&&(g.le=!0,a.K++,t(a)&&Ob(a,"loading diskette '"+c+"'"));g.Pe=!!f;return(new Zu(a,g,"preload")).load(c,d,f,a.nj)?1:0}return-1} function bw(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.ue.toLowerCase()!=d.toLowerCase())){Xv(a,b,e,!0);if(g.Ne)return a.Da("Drive "+b+" busy"),0;g.Ne=!0;e&&(g.le=!0,a.K++,t(a)&&Ob(a,"loading diskette '"+c+"'"));g.Pe=!!f;return(new Zu(a,g,"preload")).load(c,d,f,a.nj)?1:0}return-1}
l.nj=function(a,b,c,d,e){var f;a.Ne=!1;b&&(f=b.info(),b&&f[0]>a.rb||f[1]>a.kb)&&(this.Da('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Va)),b=null);b?(a.sa=b,a.al=c,a.ue=d,cw(this,c,d,b),f=b.info(),this.G|=gw,this.Da('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Va),a.le||e),a.wg=f[0],a.Bf=f[1],a.Cf=f[2],this.pa&&this.pa.nd()):a.Pe=!1;a.le&&(a.le=!1,--this.K||Lb(this));Qv(this,a.Va)}; l.nj=function(a,b,c,d,e){var f;a.Ne=!1;b&&(f=b.info(),b&&f[0]>a.rb||f[1]>a.kb)&&(this.Da('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Va)),b=null);b?(a.sa=b,a.al=c,a.ue=d,cw(this,c,d,b),f=b.info(),this.G|=gw,this.Da('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Va),a.le||e),a.wg=f[0],a.Bf=f[1],a.Cf=f[2],this.pa&&this.pa.nd()):a.Pe=!1;a.le&&(a.le=!1,--this.K||Lb(this));Qv(this,a.Va)};
function Vv(a,b,c,d){if((a=a.na.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}} function Vv(a,b,c,d){if((a=a.na.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}}
function Qv(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.na.listDisks;a=a.na.listDrives;if(d&&a&&d.options&&a.options&&(a=oa(a.value,10),c=c.Pe?"?":c.ue,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Xv(a,b,c,d){var e=a.A[b];e.sa&&(ew(a,e.ue,e.sa),e.al="",e.ue="",e.sa=null,e.Pe=!1,a.G|=gw,d||a.Da("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Qv(a,b))} function Qv(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.na.listDisks;a=a.na.listDrives;if(d&&a&&d.options&&a.options&&(a=oa(a.value,10),c=c.Pe?"?":c.ue,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Xv(a,b,c,d){var e=a.A[b];e.sa&&(ew(a,e.ue,e.sa),e.al="",e.ue="",e.sa=null,e.Pe=!1,a.G|=gw,d||a.Da("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Qv(a,b))}

View file

@ -609,7 +609,7 @@ k.toJSON=function(){var a;a=0;for(var b;b=qs(this,a++);)ys(b);a=JSON.stringify(t
function ys(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}var hs=0;function zs(a){t.call(this,"FDC",a);this.dmaRead=zs.prototype.ak;this.dmaWrite=zs.prototype.bk;this.dmaFormat=zs.prototype.rk;this.L=As(a.autoMount);this.K=a.sortBy||"name";"none"==this.K&&(this.K=null);this.B=[];this.M=!Ka("Mobi")&&window&&"FileReader"in window}ba(zs,t);k=zs.prototype; function ys(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}var hs=0;function zs(a){t.call(this,"FDC",a);this.dmaRead=zs.prototype.ak;this.dmaWrite=zs.prototype.bk;this.dmaFormat=zs.prototype.rk;this.L=As(a.autoMount);this.K=a.sortBy||"name";"none"==this.K&&(this.K=null);this.B=[];this.M=!Ka("Mobi")&&window&&"FileReader"in window}ba(zs,t);k=zs.prototype;
k.xb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ia[b]=c;if(this.K){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.K?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.ia.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){r("FDC option error: "+h.message)}b=g.desc;void 0=== k.xb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ia[b]=c;if(this.K){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.K?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.ia.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){r("FDC option error: "+h.message)}b=g.desc;void 0===
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ia[b]=c,c.onchange=function(){var a=na(c.value,10);null!=a&&Bs(d,a)},!0;case "loadDisk":return this.ia[b]=c,c.onclick=function(){var a=d.ia.listDisks;a&&Cs(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.ia[b]=c;c.onclick=function(){var a=d.ia.listDrives;a&&a.options&&d.A&&((a=d.A[na(a.value, b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ia[b]=c,c.onchange=function(){var a=na(c.value,10);null!=a&&Bs(d,a)},!0;case "loadDisk":return this.ia[b]=c,c.onclick=function(){var a=d.ia.listDisks;a&&Cs(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.ia[b]=c;c.onclick=function(){var a=d.ia.listDrives;a&&a.options&&d.A&&((a=d.A[na(a.value,
10)||0])?(a=a.sa)?(a=Na(xs(a),"octet-stream",!0,a.rh.replace(".json",".img")),r(a)):d.wa("No diskette loaded in drive."):d.wa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.ia[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Cs(d,pa(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; 10)||0])?(a=a.sa)?(a=Na(xs(a),"octet-stream",!0,a.rh.replace(".json",".img")),r(a)):d.wa("No diskette loaded in drive."):d.wa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.ia[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Cs(d,pa(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1};
k.ic=function(a,b,c,d){this.ma=b;this.U=c;this.Ea=d;this.na=a;this.V=zb(a,"ChipSet");As(Pc(this.na,"autoMount"),this.L);Ds(this);nc(b,this,Es);qc(b,this,Fs);Gs(this,"None","",!0);this.M&&Gs(this,"Local Disk","?");Gs(this,"Remote Disk","??");Hs(this)||pb(this)};function As(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){r("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a} k.ic=function(a,b,c,d){this.ma=b;this.U=c;this.Ea=d;this.na=a;this.V=zb(a,"ChipSet");As(Pc(this.na,"autoMount"),this.L);Ds(this);nc(b,this,Es);qc(b,this,Fs);Gs(this,"None","",!0);this.M&&Gs(this,"Local Disk","?");Gs(this,"Remote Disk","??");Hs(this)||pb(this)};function As(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){r("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a}
k.Ob=function(a,b){if(!b){if(!a){if(this.reset(),this.na.O){this.B=[];for(a=0;a<this.A.length;a++)Is(this,a,!0);Hs(this,!0)}}else if(!this.restore(a))return!1;if(a=this.ia.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.O;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.O&&(a.value="0",Bs(this,0))}}return!0};k.Nb=function(a){return a?this.save():!0};k.reset=function(){Ds(this)}; k.Ob=function(a,b){if(!b){if(!a){if(this.reset(),this.na.O){this.B=[];for(a=0;a<this.A.length;a++)Is(this,a,!0);Hs(this,!0)}}else if(!this.restore(a))return!1;if(a=this.ia.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.O;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.O&&(a.value="0",Bs(this,0))}}return!0};k.Nb=function(a){return a?this.save():!0};k.reset=function(){Ds(this)};
k.save=function(){var a=new Te(this);a.set(0,Js(this));return a.data()};k.restore=function(a){return Ds(this,a[0])}; k.save=function(){var a=new Te(this);a.set(0,Js(this));return a.data()};k.restore=function(a){return Ds(this,a[0])};
@ -619,8 +619,8 @@ q[y++];g.Ra=null;g.sa||(g.Sd="");var z=q[y++];102==z&&(z=!1);"boolean"==typeof z
function Js(a){var b=0,c=[];c[b++]=a.La;c[b++]=0;c[b++]=a.Y;c[b++]=a.G;c[b++]=a.D;c[b++]=a.C;c[b++]=a.I;for(var d=b++,e=0,f=[],g=0;g<a.A.length;g++){var h=e++,l=a.A[g],m=0,q=[];q[m++]=l.hb;q[m++]=[l.name,l.fb,l.gb,l.Za,l.lb,l.oe,l.Nf,l.Re,l.Se];q[m++]=l.Sa;q[m++]=l.sd+100;q[m++]=l.ub;q[m++]=l.kb;q[m++]=l.td;q[m++]=l.tb;q[m++]=l.Pa;q[m++]=l.ne;q[m++]=l.Sj;q[m]=l.Sd;f[h]=q}c[d]=f;d=b++;for(e=0;e<a.A.length;e++)f=a.A[e],f.sa&&Qs(a,f.Sd,f.sa);c[d]=a.B;c[b++]=a.H;c[b]=a.F;return c} function Js(a){var b=0,c=[];c[b++]=a.La;c[b++]=0;c[b++]=a.Y;c[b++]=a.G;c[b++]=a.D;c[b++]=a.C;c[b++]=a.I;for(var d=b++,e=0,f=[],g=0;g<a.A.length;g++){var h=e++,l=a.A[g],m=0,q=[];q[m++]=l.hb;q[m++]=[l.name,l.fb,l.gb,l.Za,l.lb,l.oe,l.Nf,l.Re,l.Se];q[m++]=l.Sa;q[m++]=l.sd+100;q[m++]=l.ub;q[m++]=l.kb;q[m++]=l.td;q[m++]=l.tb;q[m++]=l.Pa;q[m++]=l.ne;q[m++]=l.Sj;q[m]=l.Sd;f[h]=q}c[d]=f;d=b++;for(e=0;e<a.A.length;e++)f=a.A[e],f.sa&&Qs(a,f.Sd,f.sa);c[d]=a.B;c[b++]=a.H;c[b]=a.F;return c}
function Hs(a,b){b||(a.J=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.ia.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.ia.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=pa(e,!0)}!Ns(a,f,d||"Unknown",e,!0)&&b&&pb(a,!1)}else a.wa("Incorrect auto-mount settings for drive "+ function Hs(a,b){b||(a.J=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.ia.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.ia.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=pa(e,!0)}!Ns(a,f,d||"Unknown",e,!0)&&b&&pb(a,!1)}else a.wa("Incorrect auto-mount settings for drive "+
c+" ("+JSON.stringify(d)+")")}return!!a.J} c+" ("+JSON.stringify(d)+")")}return!!a.J}
function Cs(a,b,c,d){var e,f=a.ia.listDrives;if(f&&!isNaN(e=na(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.wa('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=pa(c)}for(;0>Ns(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Is(a,e,!1, function Cs(a,b,c,d){var e,f=a.ia.listDrives;if(f&&!isNaN(e=na(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.wa('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=pa(c)}for(;0>Ns(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk and discard any changes.");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Is(a,e,!1,!0)}}else Is(a,e);else a.wa("Unable to load the selected drive")}
!0)}}else Is(a,e);else a.wa("Unable to load the selected drive")}function Ns(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.Sd.toLowerCase()!=d.toLowerCase())){Is(a,b,e,!0);if(g.le)return a.wa("Drive "+b+" busy"),0;g.le=!0;e&&(g.Gd=!0,a.J++);g.ne=!!f;return(new gs(a,g,"preload")).load(c,d,f,a.li)?1:0}return-1} function Ns(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.Sd.toLowerCase()!=d.toLowerCase())){Is(a,b,e,!0);if(g.le)return a.wa("Drive "+b+" busy"),0;g.le=!0;e&&(g.Gd=!0,a.J++);g.ne=!!f;return(new gs(a,g,"preload")).load(c,d,f,a.li)?1:0}return-1}
k.li=function(a,b,c,d,e){var f;a.le=!1;b&&(f=b.info(),b&&f[0]>a.fb||f[1]>a.gb)&&(this.wa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.La)),b=null);b?(a.sa=b,a.Sj=c,a.Sd=d,Os(this,c,d,b),f=b.info(),this.H|=Rs,this.wa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.La),a.Gd||e),a.Nf=f[0],a.Re=f[1],a.Se=f[2],this.na&&bd(this.na)):a.ne=!1;a.Gd&&(a.Gd=!1,--this.J||pb(this));Bs(this,a.La)}; k.li=function(a,b,c,d,e){var f;a.le=!1;b&&(f=b.info(),b&&f[0]>a.fb||f[1]>a.gb)&&(this.wa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.La)),b=null);b?(a.sa=b,a.Sj=c,a.Sd=d,Os(this,c,d,b),f=b.info(),this.H|=Rs,this.wa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.La),a.Gd||e),a.Nf=f[0],a.Re=f[1],a.Se=f[2],this.na&&bd(this.na)):a.ne=!1;a.Gd&&(a.Gd=!1,--this.J||pb(this));Bs(this,a.La)};
function Gs(a,b,c,d){if((a=a.ia.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}} function Gs(a,b,c,d){if((a=a.ia.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}}
function Bs(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.ia.listDisks;a=a.ia.listDrives;if(d&&a&&d.options&&a.options&&(a=na(a.value,10),c=c.ne?"?":c.Sd,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Is(a,b,c,d){var e=a.A[b];e.sa&&(Qs(a,e.Sd,e.sa),e.Sj="",e.Sd="",e.sa=null,e.ne=!1,a.H|=Rs,d||a.wa("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Bs(a,b))} function Bs(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.ia.listDisks;a=a.ia.listDrives;if(d&&a&&d.options&&a.options&&(a=na(a.value,10),c=c.ne?"?":c.Sd,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Is(a,b,c,d){var e=a.A[b];e.sa&&(Qs(a,e.Sd,e.sa),e.Sj="",e.Sd="",e.sa=null,e.ne=!1,a.H|=Rs,d||a.wa("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Bs(a,b))}

View file

@ -103,7 +103,7 @@ class C1PSerialPort extends Component {
* @this {C1PSerialPort} * @this {C1PSerialPort}
* @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea") * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea")
* @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listSerial") * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listSerial")
* @param {HTMLElement} control is the HTML control DOM object (eg, HTMLButtonElement) * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
* @param {string} [sValue] optional data value * @param {string} [sValue] optional data value
* @return {boolean} true if binding was successful, false if unrecognized binding request * @return {boolean} true if binding was successful, false if unrecognized binding request
*/ */
@ -120,7 +120,7 @@ class C1PSerialPort extends Component {
case "loadSerial": case "loadSerial":
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function(event) { control.onclick = function onClickLoadSerial(event) {
if (serial.bindings["listSerial"]) { if (serial.bindings["listSerial"]) {
var sFile = serial.bindings["listSerial"].value; var sFile = serial.bindings["listSerial"].value;
// serial.println("loading " + sFile + "..."); // serial.println("loading " + sFile + "...");
@ -137,18 +137,16 @@ class C1PSerialPort extends Component {
*/ */
if (!Web.isMobile() && window && 'FileReader' in window) { if (!Web.isMobile() && window && 'FileReader' in window) {
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
/* /*
* Enable "Mount" button only if a file is actually selected * Enable "Mount" button only if a file is actually selected
*/ */
control.addEventListener('change', function() { control.onchange = function onChangeMountSerial() {
var fieldset = control.children[0]; var fieldset = control.children[0];
var files = fieldset.children[0].files; var files = fieldset.children[0].files;
var submit = fieldset.children[1]; var submit = fieldset.children[1];
submit.disabled = !files.length; submit.disabled = !files.length;
}); };
control.onsubmit = function onSubmitMountSerial(event) {
control.addEventListener('submit', function(event) {
var file = event.currentTarget[1].files[0]; var file = event.currentTarget[1].files[0];
var reader = new FileReader(); var reader = new FileReader();
@ -162,7 +160,7 @@ class C1PSerialPort extends Component {
* Prevent reloading of web page after form submission * Prevent reloading of web page after form submission
*/ */
return false; return false;
}); };
} }
else { else {
if (DEBUG) this.log("Local file support not available"); if (DEBUG) this.log("Local file support not available");

View file

@ -207,12 +207,12 @@ class FDC extends Component {
setBinding(sHTMLType, sBinding, control, sValue) setBinding(sHTMLType, sBinding, control, sValue)
{ {
var fdc = this; var fdc = this;
var controlSelect = /** @type {HTMLSelectElement} */ (control);
switch (sBinding) { switch (sBinding) {
case "listDisks": case "listDisks":
this.bindings[sBinding] = control; this.bindings[sBinding] = controlSelect;
/* /*
* Since binding is a one-time initialization operation, it's also the perfect time to * Since binding is a one-time initialization operation, it's also the perfect time to
* perform whatever sorting (if any) is indicated by the FDC component's "sortBy" property. * perform whatever sorting (if any) is indicated by the FDC component's "sortBy" property.
@ -235,8 +235,8 @@ class FDC extends Component {
* we have a special function, displayDiskette(), that will be called at LEAST once during * we have a special function, displayDiskette(), that will be called at LEAST once during
* initialization, ensuring that selectedIndex is set correctly. * initialization, ensuring that selectedIndex is set correctly.
*/ */
for (i = 0; i < control.options.length; i++) { for (i = 0; i < controlSelect.options.length; i++) {
aOptions.push(control.options[i]); aOptions.push(controlSelect.options[i]);
} }
aOptions.sort(function(a, b) { aOptions.sort(function(a, b) {
/* /*
@ -256,16 +256,15 @@ class FDC extends Component {
/* /*
* TODO: Determine why this line blows up in IE8; are the properties of an options object not settable in IE8? * TODO: Determine why this line blows up in IE8; are the properties of an options object not settable in IE8?
*/ */
control.options[i] = aOptions[i]; controlSelect.options[i] = aOptions[i];
} catch(e) { } catch(e) {
break; break;
} }
} }
} }
controlSelect.onchange = function onChangeListDisks(event) {
control.onchange = function onChangeListDisks(event) {
var controlDesc = fdc.bindings["descDisk"]; var controlDesc = fdc.bindings["descDisk"];
var controlOption = control.options[control.selectedIndex]; var controlOption = controlSelect.options[controlSelect.selectedIndex];
if (controlDesc && controlOption) { if (controlDesc && controlOption) {
var dataValue = {}; var dataValue = {};
var sValue = controlOption.getAttribute("data-value"); var sValue = controlOption.getAttribute("data-value");
@ -287,22 +286,21 @@ class FDC extends Component {
case "descDisk": case "descDisk":
case "listDrives": case "listDrives":
this.bindings[sBinding] = control; this.bindings[sBinding] = controlSelect;
/* /*
* I tried going with onclick instead of onchange, so that if you wanted to confirm what's * I tried going with onclick instead of onchange, so that if you wanted to confirm what's
* loaded in a particular drive, you could click the drive control without having to change it. * loaded in a particular drive, you could click the drive control without having to change it.
* However, that doesn't seem to work for all browsers, so I've reverted to onchange. * However, that doesn't seem to work for all browsers, so I've reverted to onchange.
*/ */
control.onchange = function onChangeListDrives(event) { controlSelect.onchange = function onChangeListDrives(event) {
var iDrive = Str.parseInt(control.value, 10); var iDrive = Str.parseInt(controlSelect.value, 10);
if (iDrive != null) fdc.displayDiskette(iDrive); if (iDrive != null) fdc.displayDiskette(iDrive);
}; };
return true; return true;
case "loadDisk": case "loadDisk":
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function onClickLoadDisk(event) {
control.onclick = function onClickLoadDrive(event) {
var controlDisks = fdc.bindings["listDisks"]; var controlDisks = fdc.bindings["listDisks"];
if (controlDisks) { if (controlDisks) {
var sDisketteName = controlDisks.options[controlDisks.selectedIndex].text; var sDisketteName = controlDisks.options[controlDisks.selectedIndex].text;
@ -330,10 +328,8 @@ class FDC extends Component {
control.parentNode.removeChild(/** @type {Node} */ (control)); control.parentNode.removeChild(/** @type {Node} */ (control));
return false; return false;
} }
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function onClickSaveDisk(event) {
control.onclick = function onClickSaveDrive(event) {
var controlDrives = fdc.bindings["listDrives"]; var controlDrives = fdc.bindings["listDrives"];
if (controlDrives && controlDrives.options && fdc.aDrives) { if (controlDrives && controlDrives.options && fdc.aDrives) {
var iDriveSelected = Str.parseInt(controlDrives.value, 10) || 0; var iDriveSelected = Str.parseInt(controlDrives.value, 10) || 0;
@ -371,20 +367,17 @@ class FDC extends Component {
control.parentNode.removeChild(/** @type {Node} */ (control)); control.parentNode.removeChild(/** @type {Node} */ (control));
return false; return false;
} }
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
/* /*
* Enable "Mount" button only if a file is actually selected * Enable "Mount" button only if a file is actually selected
*/ */
control.addEventListener('change', function() { control.onchange = function onChangeMountDisk() {
var fieldset = control.children[0]; var fieldset = control.children[0];
var files = fieldset.children[0].files; var files = fieldset.children[0].files;
var submit = fieldset.children[1]; var submit = fieldset.children[1];
submit.disabled = !files.length; submit.disabled = !files.length;
}); };
control.onsubmit = function onSubmitMountDisk(event) {
control.onsubmit = function(event) {
var file = event.currentTarget[1].files[0]; var file = event.currentTarget[1].files[0];
if (file) { if (file) {
var sDiskettePath = file.name; var sDiskettePath = file.name;
@ -1147,7 +1140,7 @@ class FDC extends Component {
if (DEBUG) this.println("loading disk " + sDiskettePath + "..."); if (DEBUG) this.println("loading disk " + sDiskettePath + "...");
while (this.loadDrive(iDrive, sDisketteName, sDiskettePath, false, file) < 0) { while (this.loadDrive(iDrive, sDisketteName, sDiskettePath, false, file) < 0) {
if (!window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)")) { if (!window.confirm("Click OK to reload the original disk and discard any changes.")) {
return; return;
} }
/* /*
@ -1524,7 +1517,7 @@ class FDC extends Component {
addDiskHistory(sDisketteName, sDiskettePath, disk) addDiskHistory(sDisketteName, sDiskettePath, disk)
{ {
var i; var i;
this.assert(!!sDiskettePath); // this.assert(!!sDiskettePath);
for (i = 0; i < this.aDiskHistory.length; i++) { for (i = 0; i < this.aDiskHistory.length; i++) {
if (this.aDiskHistory[i][1] == sDiskettePath) { if (this.aDiskHistory[i][1] == sDiskettePath) {
var nChanges = disk.restore(this.aDiskHistory[i][2]); var nChanges = disk.restore(this.aDiskHistory[i][2]);

View file

@ -132,8 +132,8 @@ function Ha(a){var b=0;if(a.C.N)for(;b<a.g;){var c=a.a[a.K+b];if(a.L[b]!=c){var
y(function(){for(var a=G(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=E(c),e=document.createElement("canvas");if(!e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","c1pjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.setAttribute("contenteditable","true");e.setAttribute("autocapitalize","off");e.setAttribute("autocorrect","off");e.style.backgroundColor=d.screenColor; y(function(){for(var a=G(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=E(c),e=document.createElement("canvas");if(!e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","c1pjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.setAttribute("contenteditable","true");e.setAttribute("autocapitalize","off");e.setAttribute("autocorrect","off");e.style.backgroundColor=d.screenColor;
e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(e.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight));c.appendChild(e);var g=new Image,h=e.getContext("2d"),e=new fb(d,e,h,g);g.onload=function(a){return function(){a.X()}}(e,d.charSet);g.src=d.charSet;F(e,c)}}); e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(e.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight));c.appendChild(e);var g=new Image,h=e.getContext("2d"),e=new fb(d,e,h,g);g.onload=function(a){return function(){a.X()}}(e,d.charSet);g.src=d.charSet;F(e,c)}});
function ib(a){C.call(this,"C1PSerialPort",a);this.C.N=!1;this.D=a.demo;this.reset(!0)}p(ib,C);f=ib.prototype;f.reset=function(a){if(a||this.o!=jb){this.v=-1;this.A=0;this.g="";if(this.D){a=1;if(this.nb){var b=this.nb.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.g='10 PRINT "HELLO OSI #'+a+'"\n'}this.B=!0;this.o=kb}};f.start=function(){this.b&&this.D&&(cb(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.o=lb;cb(a.b,"LOAD\n")}}(this),12E3));this.D=!1}; function ib(a){C.call(this,"C1PSerialPort",a);this.C.N=!1;this.D=a.demo;this.reset(!0)}p(ib,C);f=ib.prototype;f.reset=function(a){if(a||this.o!=jb){this.v=-1;this.A=0;this.g="";if(this.D){a=1;if(this.nb){var b=this.nb.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.g='10 PRINT "HELLO OSI #'+a+'"\n'}this.B=!0;this.o=kb}};f.start=function(){this.b&&this.D&&(cb(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.o=lb;cb(a.b,"LOAD\n")}}(this),12E3));this.D=!1};
f.T=function(a,b,c){var d=this;switch(b){case "listSerial":return this.H[b]=c,!0;case "loadSerial":return this.H[b]=c,c.onclick=function(){d.H.listSerial&&w(d.H.listSerial.value,function(a,b,c){mb(d,a,b,c)})},!0;case "mountSerial":return!x("Mobi")&&window&&"FileReader"in window?(this.H[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.addEventListener("submit",function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload= f.T=function(a,b,c){var d=this;switch(b){case "listSerial":return this.H[b]=c,!0;case "loadSerial":return this.H[b]=c,c.onclick=function(){d.H.listSerial&&w(d.H.listSerial.value,function(a,b,c){mb(d,a,b,c)})},!0;case "mountSerial":return!x("Mobi")&&window&&"FileReader"in window?(this.H[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload=function(){mb(d,b.name,c.result.toString(),
function(){mb(d,b.name,c.result.toString(),0)};c.readAsText(b);return!1})):c.parentNode.removeChild(c),!0}return!1};f.ca=function(a,b,c,d){this.a=a;this.M=b;this.K=c-b+1;this.I=this.M+this.K;if(this.s=d)Ia(d,b,c,this,this.S),O(d,b,c,this,this.Jb);this.X()};f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.U=b,this.b=M(b,"keyboard"),this.u=M(b,"debugger"))}; 0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};f.ca=function(a,b,c,d){this.a=a;this.M=b;this.K=c-b+1;this.I=this.M+this.K;if(this.s=d)Ia(d,b,c,this,this.S),O(d,b,c,this,this.Jb);this.X()};f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.U=b,this.b=M(b,"keyboard"),this.u=M(b,"debugger"))};
function mb(a,b,c,d){if(c){a.A=0;a.g=c;a.B=!0;a.o=kb;if(-1!==b.indexOf(".json",b.length-5))try{d="";var e=eval("("+c+")").bytes;for(c=0;c<e.length;c++)d+=String.fromCharCode(e[c]);a.g=d;a.B=!1}catch(g){a.l('Error processing file "'+b+'": '+g.message);return}a.U&&a.b&&a.s.C.oa?(a.l("auto-loading "+b),a.s.da(),"."!=a.g.charAt(0)?(a.o=lb,cb(a.b,"NEW\nLOAD\n")):(a.o=jb,a.U.reset(!0),cb(a.b,"ML"))):a.l(b+" ready to load")}else a.l('Error loading file "'+b+'" ('+d+")")} function mb(a,b,c,d){if(c){a.A=0;a.g=c;a.B=!0;a.o=kb;if(-1!==b.indexOf(".json",b.length-5))try{d="";var e=eval("("+c+")").bytes;for(c=0;c<e.length;c++)d+=String.fromCharCode(e[c]);a.g=d;a.B=!1}catch(g){a.l('Error processing file "'+b+'": '+g.message);return}a.U&&a.b&&a.s.C.oa?(a.l("auto-loading "+b),a.s.da(),"."!=a.g.charAt(0)?(a.o=lb,cb(a.b,"NEW\nLOAD\n")):(a.o=jb,a.U.reset(!0),cb(a.b,"ML"))):a.l(b+" ready to load")}else a.l('Error loading file "'+b+'" ('+d+")")}
f.S=function(a,b){void 0!==b&&(a&1?nb(this):this.g&&!this.A&&nb(this))};f.Jb=function(a,b){void 0!==b&&this.u&&T(this.u,this,a,b,this.u.Ke,!0)};function nb(a){if(void 0!==a.g){a.v=-1;if(a.A<a.g.length){var b=a.g.charCodeAt(a.A++)&255;a.B&&10==b&&(b=13);a.v=b}else a.g="",a.A=0,a.o==lb&&a.b&&cb(a.b," \nRUN\n"),a.o=kb;for(b=a.M+0;b<a.I;b+=2)a.a[b]=0<=a.v?ob:pb;for(b=a.M+1;b<a.I;b+=2)a.a[b]=0<=a.v?a.v:0}}var pb=0,ob=1,kb=0,lb=1,jb=2; f.S=function(a,b){void 0!==b&&(a&1?nb(this):this.g&&!this.A&&nb(this))};f.Jb=function(a,b){void 0!==b&&this.u&&T(this.u,this,a,b,this.u.Ke,!0)};function nb(a){if(void 0!==a.g){a.v=-1;if(a.A<a.g.length){var b=a.g.charCodeAt(a.A++)&255;a.B&&10==b&&(b=13);a.v=b}else a.g="",a.A=0,a.o==lb&&a.b&&cb(a.b," \nRUN\n"),a.o=kb;for(b=a.M+0;b<a.I;b+=2)a.a[b]=0<=a.v?ob:pb;for(b=a.M+1;b<a.I;b+=2)a.a[b]=0<=a.v?a.v:0}}var pb=0,ob=1,kb=0,lb=1,jb=2;
y(function(){for(var a=G(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new ib(d);F(d,c)}});function qb(a){C.call(this,"C1PDiskController",a);this.C.N=!1;this.reset(!0)}p(qb,C);f=qb.prototype;f.reset=function(a){rb(this);this.b=-1;a&&(this.g=[],this.g[0]={Te:0,mb:40,Nb:!0,Ba:20,na:0,Aa:-1,Ra:[]})}; y(function(){for(var a=G(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new ib(d);F(d,c)}});function qb(a){C.call(this,"C1PDiskController",a);this.C.N=!1;this.reset(!0)}p(qb,C);f=qb.prototype;f.reset=function(a){rb(this);this.b=-1;a&&(this.g=[],this.g[0]={Te:0,mb:40,Nb:!0,Ba:20,na:0,Aa:-1,Ra:[]})};

File diff suppressed because one or more lines are too long

View file

@ -9608,7 +9608,7 @@ class C1PSerialPort extends Component {
* @this {C1PSerialPort} * @this {C1PSerialPort}
* @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea") * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea")
* @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listSerial") * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listSerial")
* @param {HTMLElement} control is the HTML control DOM object (eg, HTMLButtonElement) * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
* @param {string} [sValue] optional data value * @param {string} [sValue] optional data value
* @return {boolean} true if binding was successful, false if unrecognized binding request * @return {boolean} true if binding was successful, false if unrecognized binding request
*/ */
@ -9625,7 +9625,7 @@ class C1PSerialPort extends Component {
case "loadSerial": case "loadSerial":
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function(event) { control.onclick = function onClickLoadSerial(event) {
if (serial.bindings["listSerial"]) { if (serial.bindings["listSerial"]) {
var sFile = serial.bindings["listSerial"].value; var sFile = serial.bindings["listSerial"].value;
// serial.println("loading " + sFile + "..."); // serial.println("loading " + sFile + "...");
@ -9642,18 +9642,16 @@ class C1PSerialPort extends Component {
*/ */
if (!Web.isMobile() && window && 'FileReader' in window) { if (!Web.isMobile() && window && 'FileReader' in window) {
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
/* /*
* Enable "Mount" button only if a file is actually selected * Enable "Mount" button only if a file is actually selected
*/ */
control.addEventListener('change', function() { control.onchange = function onChangeMountSerial() {
var fieldset = control.children[0]; var fieldset = control.children[0];
var files = fieldset.children[0].files; var files = fieldset.children[0].files;
var submit = fieldset.children[1]; var submit = fieldset.children[1];
submit.disabled = !files.length; submit.disabled = !files.length;
}); };
control.onsubmit = function onSubmitMountSerial(event) {
control.addEventListener('submit', function(event) {
var file = event.currentTarget[1].files[0]; var file = event.currentTarget[1].files[0];
var reader = new FileReader(); var reader = new FileReader();
@ -9667,7 +9665,7 @@ class C1PSerialPort extends Component {
* Prevent reloading of web page after form submission * Prevent reloading of web page after form submission
*/ */
return false; return false;
}); };
} }
else { else {
if (DEBUG) this.log("Local file support not available"); if (DEBUG) this.log("Local file support not available");

View file

@ -128,8 +128,8 @@ function Ba(a){var b=0;if(a.u.I)for(;b<a.c;){var c=a.a[a.s+b];if(a.v[b]!=c){var
x(function(){for(var a=J(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=H(c),f=document.createElement("canvas");if(!f||!f.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}f.setAttribute("class","c1pjs-canvas");f.setAttribute("width",d.screenWidth);f.setAttribute("height",d.screenHeight);f.setAttribute("contenteditable","true");f.setAttribute("autocapitalize","off");f.setAttribute("autocorrect","off");f.style.backgroundColor=d.screenColor; x(function(){for(var a=J(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=H(c),f=document.createElement("canvas");if(!f||!f.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}f.setAttribute("class","c1pjs-canvas");f.setAttribute("width",d.screenWidth);f.setAttribute("height",d.screenHeight);f.setAttribute("contenteditable","true");f.setAttribute("autocapitalize","off");f.setAttribute("autocorrect","off");f.style.backgroundColor=d.screenColor;
f.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(f.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,f,d.screenWidth,d.screenHeight));c.appendChild(f);var g=new Image,h=f.getContext("2d"),f=new Ua(d,f,h,g);g.onload=function(a){return function(){a.R()}}(f,d.charSet);g.src=d.charSet;I(f,c)}}); f.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(f.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,f,d.screenWidth,d.screenHeight));c.appendChild(f);var g=new Image,h=f.getContext("2d"),f=new Ua(d,f,h,g);g.onload=function(a){return function(){a.R()}}(f,d.charSet);g.src=d.charSet;I(f,c)}});
function Xa(a){E.call(this,"C1PSerialPort",a);this.u.I=!1;this.j=a.demo;this.reset(!0)}q(Xa,E);e=Xa.prototype;e.reset=function(a){if(a||this.f!=Ya){this.g=-1;this.h=0;this.c="";if(this.j){a=1;if(this.Ba){var b=this.Ba.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.c='10 PRINT "HELLO OSI #'+a+'"\n'}this.i=!0;this.f=Za}};e.start=function(){this.b&&this.j&&(W(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.f=$a;W(a.b,"LOAD\n")}}(this),12E3));this.j=!1}; function Xa(a){E.call(this,"C1PSerialPort",a);this.u.I=!1;this.j=a.demo;this.reset(!0)}q(Xa,E);e=Xa.prototype;e.reset=function(a){if(a||this.f!=Ya){this.g=-1;this.h=0;this.c="";if(this.j){a=1;if(this.Ba){var b=this.Ba.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.c='10 PRINT "HELLO OSI #'+a+'"\n'}this.i=!0;this.f=Za}};e.start=function(){this.b&&this.j&&(W(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.f=$a;W(a.b,"LOAD\n")}}(this),12E3));this.j=!1};
e.L=function(a,b,c){var d=this;switch(b){case "listSerial":return this.B[b]=c,!0;case "loadSerial":return this.B[b]=c,c.onclick=function(){d.B.listSerial&&v(d.B.listSerial.value,function(a,b,c){ab(d,a,b,c)})},!0;case "mountSerial":return!w("Mobi")&&window&&"FileReader"in window?(this.B[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.addEventListener("submit",function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload= e.L=function(a,b,c){var d=this;switch(b){case "listSerial":return this.B[b]=c,!0;case "loadSerial":return this.B[b]=c,c.onclick=function(){d.B.listSerial&&v(d.B.listSerial.value,function(a,b,c){ab(d,a,b,c)})},!0;case "mountSerial":return!w("Mobi")&&window&&"FileReader"in window?(this.B[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload=function(){ab(d,b.name,c.result.toString(),
function(){ab(d,b.name,c.result.toString(),0)};c.readAsText(b);return!1})):c.parentNode.removeChild(c),!0}return!1};e.Y=function(a,b,c,d){this.a=a;this.m=b;this.s=c-b+1;this.o=this.m+this.s;if(this.G=d)Ca(d,b,c,this,this.X),Q(d,b,c,this,this.ab);this.R()};e.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.b=O(b,"keyboard"))}; 0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};e.Y=function(a,b,c,d){this.a=a;this.m=b;this.s=c-b+1;this.o=this.m+this.s;if(this.G=d)Ca(d,b,c,this,this.X),Q(d,b,c,this,this.ab);this.R()};e.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.b=O(b,"keyboard"))};
function ab(a,b,c,d){if(c){a.h=0;a.c=c;a.i=!0;a.f=Za;if(-1!==b.indexOf(".json",b.length-5))try{d="";var f=eval("("+c+")").bytes;for(c=0;c<f.length;c++)d+=String.fromCharCode(f[c]);a.c=d;a.i=!1}catch(g){a.F('Error processing file "'+b+'": '+g.message);return}a.J&&a.b&&a.G.u.Z?(a.F("auto-loading "+b),a.G.ca(),"."!=a.c.charAt(0)?(a.f=$a,W(a.b,"NEW\nLOAD\n")):(a.f=Ya,a.J.reset(!0),W(a.b,"ML"))):a.F(b+" ready to load")}else a.F('Error loading file "'+b+'" ('+d+")")} function ab(a,b,c,d){if(c){a.h=0;a.c=c;a.i=!0;a.f=Za;if(-1!==b.indexOf(".json",b.length-5))try{d="";var f=eval("("+c+")").bytes;for(c=0;c<f.length;c++)d+=String.fromCharCode(f[c]);a.c=d;a.i=!1}catch(g){a.F('Error processing file "'+b+'": '+g.message);return}a.J&&a.b&&a.G.u.Z?(a.F("auto-loading "+b),a.G.ca(),"."!=a.c.charAt(0)?(a.f=$a,W(a.b,"NEW\nLOAD\n")):(a.f=Ya,a.J.reset(!0),W(a.b,"ML"))):a.F(b+" ready to load")}else a.F('Error loading file "'+b+'" ('+d+")")}
e.X=function(a,b){void 0!==b&&(a&1?bb(this):this.c&&!this.h&&bb(this))};e.ab=function(){};function bb(a){if(void 0!==a.c){a.g=-1;if(a.h<a.c.length){var b=a.c.charCodeAt(a.h++)&255;a.i&&10==b&&(b=13);a.g=b}else a.c="",a.h=0,a.f==$a&&a.b&&W(a.b," \nRUN\n"),a.f=Za;for(b=a.m+0;b<a.o;b+=2)a.a[b]=0<=a.g?cb:db;for(b=a.m+1;b<a.o;b+=2)a.a[b]=0<=a.g?a.g:0}}var db=0,cb=1,Za=0,$a=1,Ya=2;x(function(){for(var a=J(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new Xa(d);I(d,c)}}); e.X=function(a,b){void 0!==b&&(a&1?bb(this):this.c&&!this.h&&bb(this))};e.ab=function(){};function bb(a){if(void 0!==a.c){a.g=-1;if(a.h<a.c.length){var b=a.c.charCodeAt(a.h++)&255;a.i&&10==b&&(b=13);a.g=b}else a.c="",a.h=0,a.f==$a&&a.b&&W(a.b," \nRUN\n"),a.f=Za;for(b=a.m+0;b<a.o;b+=2)a.a[b]=0<=a.g?cb:db;for(b=a.m+1;b<a.o;b+=2)a.a[b]=0<=a.g?a.g:0}}var db=0,cb=1,Za=0,$a=1,Ya=2;x(function(){for(var a=J(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new Xa(d);I(d,c)}});
function eb(a){E.call(this,"C1PDiskController",a);this.u.I=!1;this.reset(!0)}q(eb,E);e=eb.prototype;e.reset=function(a){fb(this);this.b=-1;a&&(this.c=[],this.c[0]={de:0,Ga:40,cb:!0,ia:20,aa:0,ha:-1,qa:[]})}; function eb(a){E.call(this,"C1PDiskController",a);this.u.I=!1;this.reset(!0)}q(eb,E);e=eb.prototype;e.reset=function(a){fb(this);this.b=-1;a&&(this.c=[],this.c[0]={de:0,Ga:40,cb:!0,ia:20,aa:0,ha:-1,qa:[]})};

File diff suppressed because one or more lines are too long

View file

@ -661,7 +661,7 @@ Gv.prototype.yj=function(a,b){var c=null;if(this.pd)for(var d in this.pd){var e=
function Ov(a){pb.call(this,"FDC",a,524288);this.dmaRead=Ov.prototype.kl;this.dmaWrite=Ov.prototype.ll;this.dmaFormat=Ov.prototype.Dl;this.L=Pv(a.autoMount);this.J=a.sortBy||"name";"none"==this.J&&(this.J=null);this.B=[];this.M=!Wa("Mobi")&&window&&"FileReader"in window}ba(Ov,pb);l=Ov.prototype; function Ov(a){pb.call(this,"FDC",a,524288);this.dmaRead=Ov.prototype.kl;this.dmaWrite=Ov.prototype.ll;this.dmaFormat=Ov.prototype.Dl;this.L=Pv(a.autoMount);this.J=a.sortBy||"name";"none"==this.J&&(this.J=null);this.B=[];this.M=!Wa("Mobi")&&window&&"FileReader"in window}ba(Ov,pb);l=Ov.prototype;
l.Cb=function(a,b,c){var d=this;switch(b){case "listDisks":this.na[b]=c;if(this.J){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.J?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.na.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){kb("FDC option error: "+h.message)}b=g.desc;void 0=== l.Cb=function(a,b,c){var d=this;switch(b){case "listDisks":this.na[b]=c;if(this.J){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.J?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.na.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){kb("FDC option error: "+h.message)}b=g.desc;void 0===
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.na[b]=c,c.onchange=function(){var a=oa(c.value,10);null!=a&&Qv(d,a)},!0;case "loadDisk":return this.na[b]=c,c.onclick=function(){var a=d.na.listDisks;a&&Rv(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.na[b]=c;c.onclick=function(){var a=d.na.listDrives;a&&a.options&&d.A&&((a=d.A[oa(a.value, b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.na[b]=c,c.onchange=function(){var a=oa(c.value,10);null!=a&&Qv(d,a)},!0;case "loadDisk":return this.na[b]=c,c.onclick=function(){var a=d.na.listDisks;a&&Rv(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.na[b]=c;c.onclick=function(){var a=d.na.listDrives;a&&a.options&&d.A&&((a=d.A[oa(a.value,
10)||0])?(a=a.sa)?(a=Za(Mv(a),"octet-stream",!0,a.Lg.replace(".json",".img")),kb(a)):d.Da("No diskette loaded in drive."):d.Da("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Rv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; 10)||0])?(a=a.sa)?(a=Za(Mv(a),"octet-stream",!0,a.Lg.replace(".json",".img")),kb(a)):d.Da("No diskette loaded in drive."):d.Da("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Rv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1};
l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.W=Zb(a,"ChipSet");Pv(Bd(this.pa,"autoMount"),this.L);Sv(this);Qc(b,this,Tv);Uc(b,this,Uv);Vv(this,"None","",!0);this.M&&Vv(this,"Local Disk","?");Vv(this,"Remote Disk","??");Wv(this)||Lb(this)};function Pv(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){kb("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a} l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.W=Zb(a,"ChipSet");Pv(Bd(this.pa,"autoMount"),this.L);Sv(this);Qc(b,this,Tv);Uc(b,this,Uv);Vv(this,"None","",!0);this.M&&Vv(this,"Local Disk","?");Vv(this,"Remote Disk","??");Wv(this)||Lb(this)};function Pv(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){kb("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a}
l.Xb=function(a,b){if(!b){if(!a){if(this.reset(),this.pa.O){this.B=[];for(a=0;a<this.A.length;a++)Xv(this,a,!0);Wv(this,!0)}}else if(!this.restore(a))return!1;if(a=this.na.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.N;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.N&&(a.value="0",Qv(this,0))}}return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){Sv(this)}; l.Xb=function(a,b){if(!b){if(!a){if(this.reset(),this.pa.O){this.B=[];for(a=0;a<this.A.length;a++)Xv(this,a,!0);Wv(this,!0)}}else if(!this.restore(a))return!1;if(a=this.na.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.N;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.N&&(a.value="0",Qv(this,0))}}return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){Sv(this)};
l.save=function(){var a=new Zf(this);a.set(0,Yv(this));return a.data()};l.restore=function(a){return Sv(this,a[0])}; l.save=function(){var a=new Zf(this);a.set(0,Yv(this));return a.data()};l.restore=function(a){return Sv(this,a[0])};
@ -672,8 +672,8 @@ function Yv(a){var b=0,c=[];c[b++]=a.Va;c[b++]=0;c[b++]=a.fa;c[b++]=a.F;c[b++]=a
l.jj=function(a){var b;a=this.A[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};l.bl=function(a,b,c){if(a.sa){var d=a.sa.info(),e=d[2],f=d[1]*e;if(b+c<=d[0]*f)return a.Gb=Math.floor(b/f),b%=f,a.Za=Math.floor(b/e),a.nb=b%e+1,a.vb=c*d[3],a.sb=fw,!0}return!1}; l.jj=function(a){var b;a=this.A[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};l.bl=function(a,b,c){if(a.sa){var d=a.sa.info(),e=d[2],f=d[1]*e;if(b+c<=d[0]*f)return a.Gb=Math.floor(b/f),b%=f,a.Za=Math.floor(b/e),a.nb=b%e+1,a.vb=c*d[3],a.sb=fw,!0}return!1};
function Wv(a,b){b||(a.K=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.na.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.na.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=ta(e,!0)}!bw(a,f,d||"Unknown",e,!0)&&b&&Lb(a,!1)}else a.Da("Incorrect auto-mount settings for drive "+ function Wv(a,b){b||(a.K=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.na.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.na.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=ta(e,!0)}!bw(a,f,d||"Unknown",e,!0)&&b&&Lb(a,!1)}else a.Da("Incorrect auto-mount settings for drive "+
c+" ("+JSON.stringify(d)+")")}return!!a.K} c+" ("+JSON.stringify(d)+")")}return!!a.K}
function Rv(a,b,c,d){var e,f=a.na.listDrives;if(f&&!isNaN(e=oa(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.Da('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=ta(c)}for(;0>bw(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Xv(a,e,!1, function Rv(a,b,c,d){var e,f=a.na.listDrives;if(f&&!isNaN(e=oa(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.Da('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=ta(c)}for(;0>bw(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk and discard any changes.");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Xv(a,e,!1,!0)}}else Xv(a,e);else a.Da("Unable to load the selected drive")}
!0)}}else Xv(a,e);else a.Da("Unable to load the selected drive")}function bw(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.ue.toLowerCase()!=d.toLowerCase())){Xv(a,b,e,!0);if(g.Ne)return a.Da("Drive "+b+" busy"),0;g.Ne=!0;e&&(g.le=!0,a.K++,t(a)&&Ob(a,"loading diskette '"+c+"'"));g.Pe=!!f;return(new Zu(a,g,"preload")).load(c,d,f,a.nj)?1:0}return-1} function bw(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.ue.toLowerCase()!=d.toLowerCase())){Xv(a,b,e,!0);if(g.Ne)return a.Da("Drive "+b+" busy"),0;g.Ne=!0;e&&(g.le=!0,a.K++,t(a)&&Ob(a,"loading diskette '"+c+"'"));g.Pe=!!f;return(new Zu(a,g,"preload")).load(c,d,f,a.nj)?1:0}return-1}
l.nj=function(a,b,c,d,e){var f;a.Ne=!1;b&&(f=b.info(),b&&f[0]>a.rb||f[1]>a.kb)&&(this.Da('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Va)),b=null);b?(a.sa=b,a.al=c,a.ue=d,cw(this,c,d,b),f=b.info(),this.G|=gw,this.Da('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Va),a.le||e),a.wg=f[0],a.Bf=f[1],a.Cf=f[2],this.pa&&this.pa.nd()):a.Pe=!1;a.le&&(a.le=!1,--this.K||Lb(this));Qv(this,a.Va)}; l.nj=function(a,b,c,d,e){var f;a.Ne=!1;b&&(f=b.info(),b&&f[0]>a.rb||f[1]>a.kb)&&(this.Da('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Va)),b=null);b?(a.sa=b,a.al=c,a.ue=d,cw(this,c,d,b),f=b.info(),this.G|=gw,this.Da('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Va),a.le||e),a.wg=f[0],a.Bf=f[1],a.Cf=f[2],this.pa&&this.pa.nd()):a.Pe=!1;a.le&&(a.le=!1,--this.K||Lb(this));Qv(this,a.Va)};
function Vv(a,b,c,d){if((a=a.na.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}} function Vv(a,b,c,d){if((a=a.na.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}}
function Qv(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.na.listDisks;a=a.na.listDrives;if(d&&a&&d.options&&a.options&&(a=oa(a.value,10),c=c.Pe?"?":c.ue,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Xv(a,b,c,d){var e=a.A[b];e.sa&&(ew(a,e.ue,e.sa),e.al="",e.ue="",e.sa=null,e.Pe=!1,a.G|=gw,d||a.Da("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Qv(a,b))} function Qv(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.na.listDisks;a=a.na.listDrives;if(d&&a&&d.options&&a.options&&(a=oa(a.value,10),c=c.Pe?"?":c.ue,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Xv(a,b,c,d){var e=a.A[b];e.sa&&(ew(a,e.ue,e.sa),e.al="",e.ue="",e.sa=null,e.Pe=!1,a.G|=gw,d||a.Da("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Qv(a,b))}

File diff suppressed because one or more lines are too long

View file

@ -59172,12 +59172,12 @@ class FDC extends Component {
setBinding(sHTMLType, sBinding, control, sValue) setBinding(sHTMLType, sBinding, control, sValue)
{ {
var fdc = this; var fdc = this;
var controlSelect = /** @type {HTMLSelectElement} */ (control);
switch (sBinding) { switch (sBinding) {
case "listDisks": case "listDisks":
this.bindings[sBinding] = control; this.bindings[sBinding] = controlSelect;
/* /*
* Since binding is a one-time initialization operation, it's also the perfect time to * Since binding is a one-time initialization operation, it's also the perfect time to
* perform whatever sorting (if any) is indicated by the FDC component's "sortBy" property. * perform whatever sorting (if any) is indicated by the FDC component's "sortBy" property.
@ -59200,8 +59200,8 @@ class FDC extends Component {
* we have a special function, displayDiskette(), that will be called at LEAST once during * we have a special function, displayDiskette(), that will be called at LEAST once during
* initialization, ensuring that selectedIndex is set correctly. * initialization, ensuring that selectedIndex is set correctly.
*/ */
for (i = 0; i < control.options.length; i++) { for (i = 0; i < controlSelect.options.length; i++) {
aOptions.push(control.options[i]); aOptions.push(controlSelect.options[i]);
} }
aOptions.sort(function(a, b) { aOptions.sort(function(a, b) {
/* /*
@ -59221,16 +59221,15 @@ class FDC extends Component {
/* /*
* TODO: Determine why this line blows up in IE8; are the properties of an options object not settable in IE8? * TODO: Determine why this line blows up in IE8; are the properties of an options object not settable in IE8?
*/ */
control.options[i] = aOptions[i]; controlSelect.options[i] = aOptions[i];
} catch(e) { } catch(e) {
break; break;
} }
} }
} }
controlSelect.onchange = function onChangeListDisks(event) {
control.onchange = function onChangeListDisks(event) {
var controlDesc = fdc.bindings["descDisk"]; var controlDesc = fdc.bindings["descDisk"];
var controlOption = control.options[control.selectedIndex]; var controlOption = controlSelect.options[controlSelect.selectedIndex];
if (controlDesc && controlOption) { if (controlDesc && controlOption) {
var dataValue = {}; var dataValue = {};
var sValue = controlOption.getAttribute("data-value"); var sValue = controlOption.getAttribute("data-value");
@ -59252,22 +59251,21 @@ class FDC extends Component {
case "descDisk": case "descDisk":
case "listDrives": case "listDrives":
this.bindings[sBinding] = control; this.bindings[sBinding] = controlSelect;
/* /*
* I tried going with onclick instead of onchange, so that if you wanted to confirm what's * I tried going with onclick instead of onchange, so that if you wanted to confirm what's
* loaded in a particular drive, you could click the drive control without having to change it. * loaded in a particular drive, you could click the drive control without having to change it.
* However, that doesn't seem to work for all browsers, so I've reverted to onchange. * However, that doesn't seem to work for all browsers, so I've reverted to onchange.
*/ */
control.onchange = function onChangeListDrives(event) { controlSelect.onchange = function onChangeListDrives(event) {
var iDrive = Str.parseInt(control.value, 10); var iDrive = Str.parseInt(controlSelect.value, 10);
if (iDrive != null) fdc.displayDiskette(iDrive); if (iDrive != null) fdc.displayDiskette(iDrive);
}; };
return true; return true;
case "loadDisk": case "loadDisk":
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function onClickLoadDisk(event) {
control.onclick = function onClickLoadDrive(event) {
var controlDisks = fdc.bindings["listDisks"]; var controlDisks = fdc.bindings["listDisks"];
if (controlDisks) { if (controlDisks) {
var sDisketteName = controlDisks.options[controlDisks.selectedIndex].text; var sDisketteName = controlDisks.options[controlDisks.selectedIndex].text;
@ -59295,10 +59293,8 @@ class FDC extends Component {
control.parentNode.removeChild(/** @type {Node} */ (control)); control.parentNode.removeChild(/** @type {Node} */ (control));
return false; return false;
} }
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
control.onclick = function onClickSaveDisk(event) {
control.onclick = function onClickSaveDrive(event) {
var controlDrives = fdc.bindings["listDrives"]; var controlDrives = fdc.bindings["listDrives"];
if (controlDrives && controlDrives.options && fdc.aDrives) { if (controlDrives && controlDrives.options && fdc.aDrives) {
var iDriveSelected = Str.parseInt(controlDrives.value, 10) || 0; var iDriveSelected = Str.parseInt(controlDrives.value, 10) || 0;
@ -59336,20 +59332,17 @@ class FDC extends Component {
control.parentNode.removeChild(/** @type {Node} */ (control)); control.parentNode.removeChild(/** @type {Node} */ (control));
return false; return false;
} }
this.bindings[sBinding] = control; this.bindings[sBinding] = control;
/* /*
* Enable "Mount" button only if a file is actually selected * Enable "Mount" button only if a file is actually selected
*/ */
control.addEventListener('change', function() { control.onchange = function onChangeMountDisk() {
var fieldset = control.children[0]; var fieldset = control.children[0];
var files = fieldset.children[0].files; var files = fieldset.children[0].files;
var submit = fieldset.children[1]; var submit = fieldset.children[1];
submit.disabled = !files.length; submit.disabled = !files.length;
}); };
control.onsubmit = function onSubmitMountDisk(event) {
control.onsubmit = function(event) {
var file = event.currentTarget[1].files[0]; var file = event.currentTarget[1].files[0];
if (file) { if (file) {
var sDiskettePath = file.name; var sDiskettePath = file.name;
@ -60112,7 +60105,7 @@ class FDC extends Component {
if (DEBUG) this.println("loading disk " + sDiskettePath + "..."); if (DEBUG) this.println("loading disk " + sDiskettePath + "...");
while (this.loadDrive(iDrive, sDisketteName, sDiskettePath, false, file) < 0) { while (this.loadDrive(iDrive, sDisketteName, sDiskettePath, false, file) < 0) {
if (!window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)")) { if (!window.confirm("Click OK to reload the original disk and discard any changes.")) {
return; return;
} }
/* /*
@ -60489,7 +60482,7 @@ class FDC extends Component {
addDiskHistory(sDisketteName, sDiskettePath, disk) addDiskHistory(sDisketteName, sDiskettePath, disk)
{ {
var i; var i;
//
for (i = 0; i < this.aDiskHistory.length; i++) { for (i = 0; i < this.aDiskHistory.length; i++) {
if (this.aDiskHistory[i][1] == sDiskettePath) { if (this.aDiskHistory[i][1] == sDiskettePath) {
var nChanges = disk.restore(this.aDiskHistory[i][2]); var nChanges = disk.restore(this.aDiskHistory[i][2]);

View file

@ -609,7 +609,7 @@ k.toJSON=function(){var a;a=0;for(var b;b=qs(this,a++);)ys(b);a=JSON.stringify(t
function ys(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}var hs=0;function zs(a){t.call(this,"FDC",a);this.dmaRead=zs.prototype.ak;this.dmaWrite=zs.prototype.bk;this.dmaFormat=zs.prototype.rk;this.L=As(a.autoMount);this.K=a.sortBy||"name";"none"==this.K&&(this.K=null);this.B=[];this.M=!Ka("Mobi")&&window&&"FileReader"in window}ba(zs,t);k=zs.prototype; function ys(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}var hs=0;function zs(a){t.call(this,"FDC",a);this.dmaRead=zs.prototype.ak;this.dmaWrite=zs.prototype.bk;this.dmaFormat=zs.prototype.rk;this.L=As(a.autoMount);this.K=a.sortBy||"name";"none"==this.K&&(this.K=null);this.B=[];this.M=!Ka("Mobi")&&window&&"FileReader"in window}ba(zs,t);k=zs.prototype;
k.xb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ia[b]=c;if(this.K){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.K?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.ia.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){r("FDC option error: "+h.message)}b=g.desc;void 0=== k.xb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ia[b]=c;if(this.K){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.K?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)try{c.options[a]=b[a]}catch(e){break}}c.onchange=function(){var a=d.ia.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){r("FDC option error: "+h.message)}b=g.desc;void 0===
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ia[b]=c,c.onchange=function(){var a=na(c.value,10);null!=a&&Bs(d,a)},!0;case "loadDisk":return this.ia[b]=c,c.onclick=function(){var a=d.ia.listDisks;a&&Cs(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.ia[b]=c;c.onclick=function(){var a=d.ia.listDrives;a&&a.options&&d.A&&((a=d.A[na(a.value, b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ia[b]=c,c.onchange=function(){var a=na(c.value,10);null!=a&&Bs(d,a)},!0;case "loadDisk":return this.ia[b]=c,c.onclick=function(){var a=d.ia.listDisks;a&&Cs(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.ia[b]=c;c.onclick=function(){var a=d.ia.listDrives;a&&a.options&&d.A&&((a=d.A[na(a.value,
10)||0])?(a=a.sa)?(a=Na(xs(a),"octet-stream",!0,a.rh.replace(".json",".img")),r(a)):d.wa("No diskette loaded in drive."):d.wa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.ia[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Cs(d,pa(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; 10)||0])?(a=a.sa)?(a=Na(xs(a),"octet-stream",!0,a.rh.replace(".json",".img")),r(a)):d.wa("No diskette loaded in drive."):d.wa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.ia[b]=c,c.onchange=function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length},c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Cs(d,pa(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1};
k.ic=function(a,b,c,d){this.ma=b;this.U=c;this.Ea=d;this.na=a;this.V=zb(a,"ChipSet");As(Pc(this.na,"autoMount"),this.L);Ds(this);nc(b,this,Es);qc(b,this,Fs);Gs(this,"None","",!0);this.M&&Gs(this,"Local Disk","?");Gs(this,"Remote Disk","??");Hs(this)||pb(this)};function As(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){r("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a} k.ic=function(a,b,c,d){this.ma=b;this.U=c;this.Ea=d;this.na=a;this.V=zb(a,"ChipSet");As(Pc(this.na,"autoMount"),this.L);Ds(this);nc(b,this,Es);qc(b,this,Fs);Gs(this,"None","",!0);this.M&&Gs(this,"Local Disk","?");Gs(this,"Remote Disk","??");Hs(this)||pb(this)};function As(a,b){if(a){if("string"==typeof a)try{a=eval("("+a+")")}catch(d){r("FDC auto-mount error: "+d.message+" ("+a+")"),a={}}}else a={};for(var c in a)b&&(b[c]=a[c]);return a}
k.Ob=function(a,b){if(!b){if(!a){if(this.reset(),this.na.O){this.B=[];for(a=0;a<this.A.length;a++)Is(this,a,!0);Hs(this,!0)}}else if(!this.restore(a))return!1;if(a=this.ia.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.O;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.O&&(a.value="0",Bs(this,0))}}return!0};k.Nb=function(a){return a?this.save():!0};k.reset=function(){Ds(this)}; k.Ob=function(a,b){if(!b){if(!a){if(this.reset(),this.na.O){this.B=[];for(a=0;a<this.A.length;a++)Is(this,a,!0);Hs(this,!0)}}else if(!this.restore(a))return!1;if(a=this.ia.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.O;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.O&&(a.value="0",Bs(this,0))}}return!0};k.Nb=function(a){return a?this.save():!0};k.reset=function(){Ds(this)};
k.save=function(){var a=new Te(this);a.set(0,Js(this));return a.data()};k.restore=function(a){return Ds(this,a[0])}; k.save=function(){var a=new Te(this);a.set(0,Js(this));return a.data()};k.restore=function(a){return Ds(this,a[0])};
@ -619,8 +619,8 @@ q[y++];g.Ra=null;g.sa||(g.Sd="");var z=q[y++];102==z&&(z=!1);"boolean"==typeof z
function Js(a){var b=0,c=[];c[b++]=a.La;c[b++]=0;c[b++]=a.Y;c[b++]=a.G;c[b++]=a.D;c[b++]=a.C;c[b++]=a.I;for(var d=b++,e=0,f=[],g=0;g<a.A.length;g++){var h=e++,l=a.A[g],m=0,q=[];q[m++]=l.hb;q[m++]=[l.name,l.fb,l.gb,l.Za,l.lb,l.oe,l.Nf,l.Re,l.Se];q[m++]=l.Sa;q[m++]=l.sd+100;q[m++]=l.ub;q[m++]=l.kb;q[m++]=l.td;q[m++]=l.tb;q[m++]=l.Pa;q[m++]=l.ne;q[m++]=l.Sj;q[m]=l.Sd;f[h]=q}c[d]=f;d=b++;for(e=0;e<a.A.length;e++)f=a.A[e],f.sa&&Qs(a,f.Sd,f.sa);c[d]=a.B;c[b++]=a.H;c[b]=a.F;return c} function Js(a){var b=0,c=[];c[b++]=a.La;c[b++]=0;c[b++]=a.Y;c[b++]=a.G;c[b++]=a.D;c[b++]=a.C;c[b++]=a.I;for(var d=b++,e=0,f=[],g=0;g<a.A.length;g++){var h=e++,l=a.A[g],m=0,q=[];q[m++]=l.hb;q[m++]=[l.name,l.fb,l.gb,l.Za,l.lb,l.oe,l.Nf,l.Re,l.Se];q[m++]=l.Sa;q[m++]=l.sd+100;q[m++]=l.ub;q[m++]=l.kb;q[m++]=l.td;q[m++]=l.tb;q[m++]=l.Pa;q[m++]=l.ne;q[m++]=l.Sj;q[m]=l.Sd;f[h]=q}c[d]=f;d=b++;for(e=0;e<a.A.length;e++)f=a.A[e],f.sa&&Qs(a,f.Sd,f.sa);c[d]=a.B;c[b++]=a.H;c[b]=a.F;return c}
function Hs(a,b){b||(a.J=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.ia.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.ia.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=pa(e,!0)}!Ns(a,f,d||"Unknown",e,!0)&&b&&pb(a,!1)}else a.wa("Incorrect auto-mount settings for drive "+ function Hs(a,b){b||(a.J=0);for(var c in a.L){var d=a.L[c],e;if(!(e=d.path))a:{if(e=d.name){var f=a.ia.listDisks;if(f&&f.options)for(var g=0;g<f.options.length;g++){var h=f.options[g];if(h.text==e){e=h.value;break a}}}e=""}if(e)if(f=c.charCodeAt(0)-65,0<=f&&f<a.A.length){if(!(d=d.name))a:{if((d=a.ia.listDisks)&&d.options)for(g=0;g<d.options.length;g++)if(h=d.options[g],h.value==e){d=h.text;break a}d=pa(e,!0)}!Ns(a,f,d||"Unknown",e,!0)&&b&&pb(a,!1)}else a.wa("Incorrect auto-mount settings for drive "+
c+" ("+JSON.stringify(d)+")")}return!!a.J} c+" ("+JSON.stringify(d)+")")}return!!a.J}
function Cs(a,b,c,d){var e,f=a.ia.listDrives;if(f&&!isNaN(e=na(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.wa('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=pa(c)}for(;0>Ns(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Is(a,e,!1, function Cs(a,b,c,d){var e,f=a.ia.listDrives;if(f&&!isNaN(e=na(f.value,10))&&0<=e&&e<a.A.length)if(c)if("?"==c)a.wa('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=pa(c)}for(;0>Ns(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk and discard any changes.");){var f=a,g=c,h;for(h=0;h<f.B.length;h++)if(f.B[h][1]==g){f.B.splice(h,1);break}Is(a,e,!1,!0)}}else Is(a,e);else a.wa("Unable to load the selected drive")}
!0)}}else Is(a,e);else a.wa("Unable to load the selected drive")}function Ns(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.Sd.toLowerCase()!=d.toLowerCase())){Is(a,b,e,!0);if(g.le)return a.wa("Drive "+b+" busy"),0;g.le=!0;e&&(g.Gd=!0,a.J++);g.ne=!!f;return(new gs(a,g,"preload")).load(c,d,f,a.li)?1:0}return-1} function Ns(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.Sd.toLowerCase()!=d.toLowerCase())){Is(a,b,e,!0);if(g.le)return a.wa("Drive "+b+" busy"),0;g.le=!0;e&&(g.Gd=!0,a.J++);g.ne=!!f;return(new gs(a,g,"preload")).load(c,d,f,a.li)?1:0}return-1}
k.li=function(a,b,c,d,e){var f;a.le=!1;b&&(f=b.info(),b&&f[0]>a.fb||f[1]>a.gb)&&(this.wa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.La)),b=null);b?(a.sa=b,a.Sj=c,a.Sd=d,Os(this,c,d,b),f=b.info(),this.H|=Rs,this.wa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.La),a.Gd||e),a.Nf=f[0],a.Re=f[1],a.Se=f[2],this.na&&bd(this.na)):a.ne=!1;a.Gd&&(a.Gd=!1,--this.J||pb(this));Bs(this,a.La)}; k.li=function(a,b,c,d,e){var f;a.le=!1;b&&(f=b.info(),b&&f[0]>a.fb||f[1]>a.gb)&&(this.wa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.La)),b=null);b?(a.sa=b,a.Sj=c,a.Sd=d,Os(this,c,d,b),f=b.info(),this.H|=Rs,this.wa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.La),a.Gd||e),a.Nf=f[0],a.Re=f[1],a.Se=f[2],this.na&&bd(this.na)):a.ne=!1;a.Gd&&(a.Gd=!1,--this.J||pb(this));Bs(this,a.La)};
function Gs(a,b,c,d){if((a=a.ia.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}} function Gs(a,b,c,d){if((a=a.ia.listDisks)&&a.options){for(var e=0;e<a.options.length;e++)if(a.options[e].value==c)return;e=document.createElement("option");e.text=b;e.value=c;d&&a.childNodes[0]?a.insertBefore(e,a.childNodes[0]):a.appendChild(e)}}
function Bs(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.ia.listDisks;a=a.ia.listDrives;if(d&&a&&d.options&&a.options&&(a=na(a.value,10),c=c.ne?"?":c.Sd,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Is(a,b,c,d){var e=a.A[b];e.sa&&(Qs(a,e.Sd,e.sa),e.Sj="",e.Sd="",e.sa=null,e.ne=!1,a.H|=Rs,d||a.wa("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Bs(a,b))} function Bs(a,b){if(0<=b&&b<a.A.length){var c=a.A[b],d=a.ia.listDisks;a=a.ia.listDrives;if(d&&a&&d.options&&a.options&&(a=na(a.value,10),c=c.ne?"?":c.Sd,!isNaN(a)&&a==b)){for(b=0;b<d.options.length;b++)if(d.options[b].value==c){d.selectedIndex!=b&&(d.selectedIndex=b);break}b==d.options.length&&(d.selectedIndex=0)}}}function Is(a,b,c,d){var e=a.A[b];e.sa&&(Qs(a,e.Sd,e.sa),e.Sj="",e.Sd="",e.sa=null,e.ne=!1,a.H|=Rs,d||a.wa("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||Bs(a,b))}

File diff suppressed because one or more lines are too long