Merge branch 'master' into gh-pages

This commit is contained in:
Jeff Parsons 2017-06-23 09:42:27 -07:00
commit b3865738d1
39 changed files with 3335 additions and 3009 deletions

View file

@ -11,7 +11,7 @@ machines:
path: /disks/pcx86/dos/ibm/1.10/PCDOS110.json
B:
path: /apps/pcx86/1982/ratbas/RATBAS213.json
autoType: \r\rb:\rrt\r\xff\xf0test;\r
autoType: $date\r$time\rb:\rrt\r\xff\xf0test;\r
---
RatBas (1982)

View file

@ -11,7 +11,7 @@ machines:
path: /disks/pcx86/dos/ibm/1.00/PCDOS100.json
B:
path: /apps/pcx86/1983/adventmath/ADVENTMATH100.json
autoType: 8-10-81\rb:\ra:basica castle\r
autoType: $date\rb:\ra:basica castle\r
---
Adventures in Math (1983)

View file

@ -0,0 +1,11 @@
---
layout: page
title: IBM PC (Model 5150, 64Kb) with Color Display and Debugger
permalink: /devices/pcx86/machine/5150/cga/64kb/debugger/
machines:
- type: pcx86
id: ibm5150
debugger: true
---
{% include machine.html id="ibm5150" %}

View file

@ -4,19 +4,20 @@ title: SuperCalc2 1.00
permalink: /disks/pcx86/apps/other/sc2/1.00/
machines:
- type: pcx86
id: ibm5150-256kb
id: ibm5150-sc2
config: /devices/pcx86/machine/5150/cga/256kb/machine.xml
autoMount:
A:
path: /disks/pcx86/dos/ibm/2.00/PCDOS200-DISK1.json
B:
path: /disks/pcx86/apps/other/sc2/1.00/SC2_V100.json
autoType: $date\r$time\rb:\rsc2\r
---
SuperCalc2 v1.00
-----------------
----------------
{% include machine.html id="ibm5150-256kb" %}
{% include machine.html id="ibm5150-sc2" %}
### Directory of SuperCalc2 v1.00

View file

@ -4,7 +4,7 @@ title: SuperCalc3 1.00
permalink: /disks/pcx86/apps/other/sc3/1.00/
machines:
- type: pcx86
id: ibm5160-640kb
id: ibm5160-sc3
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
autoMount:
A:
@ -14,9 +14,77 @@ machines:
---
SuperCalc3 v1.00
-----------------
----------------
{% include machine.html id="ibm5160-640kb" %}
{% include machine.html id="ibm5160-sc3" %}
### Directory of SuperCalc3 v1.00
### Directory of SuperCalc3 v1.00 Setup Disk
Volume in drive A has no label
Directory of A:\
AUTOBW BAT 16 01-01-80 1:00a
CCM84 BAT 384 01-01-80 1:00a
ERASC3 BAT 415 01-01-80 1:00a
FX100 BAT 128 01-01-80 1:00a
FX80 BAT 128 01-01-80 1:00a
GOPC BAT 128 01-01-80 1:00a
HARDDISK BAT 144 01-01-80 1:00a
HP BAT 384 01-01-80 1:00a
HP7475 BAT 128 01-01-80 1:00a
IBM BAT 128 01-01-80 1:00a
IBM749 BAT 128 01-01-80 1:00a
MX100 BAT 128 01-01-80 1:00a
MX80 BAT 128 01-01-80 1:00a
NONE BAT 128 01-01-80 1:00a
SC3 BAT 29 01-01-80 1:00a
SC3BACK BAT 512 01-01-80 1:00a
STARTUP BAT 128 01-01-80 1:00a
SCREENS CAL 5504 01-01-80 1:00a
TENMIN CAL 3584 01-01-80 1:00a
CLS COM 10 01-01-80 1:00a
COLOR COM 256 01-01-80 1:00a
DRIVER COM 1920 01-01-80 1:00a
ECHO COM 16 01-01-80 1:00a
MONO COM 256 01-01-80 1:00a
MSG COM 896 01-01-80 1:00a
SC3 COM 40448 01-01-80 1:00a
FONT DAT 46336 01-01-80 1:00a
SC3 HLP 36352 01-01-80 1:00a
SC3 OVL 33920 01-01-80 1:00a
SG1 OVL 3968 01-01-80 1:00a
SG2 OVL 12416 01-01-80 1:00a
SG3 OVL 5632 01-01-80 1:00a
SG4 OVL 1536 01-01-80 1:00a
SG5 OVL 1280 01-01-80 1:00a
SG6 OVL 896 01-01-80 1:00a
SG7 OVL 2048 01-01-80 1:00a
SG8 OVL 6528 01-01-80 1:00a
SG9 OVL 41216 01-01-80 1:00a
SC3MSG PRN 6193 01-01-80 1:00a
39 file(s) 254375 bytes
80896 bytes free
### Directory of SuperCalc3 v1.00 Utility Disk
Volume in drive A has no label
Directory of A:\
HARDDISK BAT 384 01-01-80 1:00a
STARTUP BAT 128 01-01-80 1:00a
BRKEVN CAL 4992 01-01-80 1:00a
BUDGET CAL 2304 01-01-80 1:00a
PAYROLL CAL 4352 01-01-80 1:00a
SAMPLE CAL 5120 01-01-80 1:00a
CLS COM 10 01-01-80 1:00a
ECHO COM 16 01-01-80 1:00a
INSTALLS COM 7296 01-01-80 1:00a
MAINTAIN COM 14080 01-01-80 1:00a
MSG COM 896 01-01-80 1:00a
SDI COM 16256 01-01-80 1:00a
SG9 EPS 41216 01-01-80 1:00a
SDI OVL 26752 01-01-80 1:00a
SG9 PEN 41600 01-01-80 1:00a
SC3MSG PRN 6528 01-01-80 1:00a
16 file(s) 171930 bytes
181248 bytes free

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2049,7 +2049,7 @@ HTMLOut.prototype.addFilesToHTML = function(asFiles, sScriptEmbed)
sTextInsert += '\n' + sIndent + sScriptEmbed;
}
if (sTextInsert) {
this.sHTML = this.sHTML.replace(sText, sText + sTextInsert);
this.sHTML = this.sHTML.replace(sText, sText + sTextInsert.replace(/\$/g, "$$$$"));
}
}
else {

View file

@ -1202,7 +1202,7 @@ MarkOut.prototype.convertMDMachineLinks = function(sBlock)
sMachineVersion = ((machine['uncompiled'] == "true")? "uncompiled" : "");
sMachineParms = machine['parms'] || "";
sReplacement = machine['name'] || "Embedded PC";
sReplacement = "[" + sReplacement + "](" + sMachineXMLFile + ' "' + sMachineType + '!' + sMachineID + '!' + sMachineXSLFile + '!!' + sMachineOptions + '!' + sMachineParms + '")';
sReplacement = "[" + sReplacement + "](" + sMachineXMLFile + ' "' + sMachineType + '!' + sMachineID + '!' + sMachineXSLFile + '!!' + sMachineOptions + '!' + sMachineParms.replace(/\$/g, "$$$$") + '")';
}
sBlock = sBlock.replace(aMatch[0].substr(1), sReplacement);
reIncludes.lastIndex = 0; // reset lastIndex, since we just modified the string that reIncludes is iterating over

View file

@ -357,14 +357,7 @@ class Computer extends Component {
*/
getMachineParm(sParm, parmsComponent)
{
/*
* When using getURLParm(), the check is allowed be a bit looser, because URL parameters are
* user-supplied, whereas most other parameters are developer-supplied. Granted, a developer
* may also be sloppy and neglect to use correct case (eg, 'automount' instead of 'autoMount'),
* but there are limits to my paranoia.
*/
var sParmLC = sParm.toLowerCase();
var value = Web.getURLParm(sParm) || Web.getURLParm(sParmLC);
var value = Web.getURLParm(sParm);
if (value === undefined && this.parmsMachine) {
value = this.parmsMachine[sParm];

View file

@ -30,6 +30,7 @@
if (NODE) {
var Str = require("../../shared/lib/strlib");
var Usr = require("../../shared/lib/usrlib");
var Web = require("../../shared/lib/weblib");
var Component = require("../../shared/lib/component");
var Keys = require("../../shared/lib/keys");
@ -400,6 +401,54 @@ class Keyboard extends Component {
if (fAllDown !== undefined) this.fAllDown = fAllDown;
}
/**
* parseAutoType(sKeys)
*
* The following special sequences are recognized:
*
* $date: converted to MM-DD-YYYY
* $time: converted to HH:MM
*
* If you want any of those sequences to be typed as-is, then you must specify two "$" (ie, "$$").
*
* WARNING: the JavaScript replace() function ALWAYS interprets "$" specially in replacement strings, even when
* the search string is NOT a RegExp, and since we build machine definitions on a page from a potentially
* indeterminate number of string replace() operations, multiple dollar signs could eventually get reduced to a
* single dollar sign BEFORE we get here.
*
* To compensate, I've attempted add 'replace(/\$/g, "$$$$")' operations where currently needed; eg, in the
* markout.js convertMDMachineLinks() function, the htmlout.js addFilesToHTML() function, and the embed.js
* parseXML() function. Unfortunately, this is something that will be extremely difficult to prevent from breaking
* down the road. So, heads up to future me....
*
* @this {Keyboard}
* @param {string|undefined} sKeys
* @return {string|undefined}
*/
parseAutoType(sKeys)
{
if (sKeys) {
var match, reSpecial = /(?:^|[^$])\$([a-z]+)/g;
while (match = reSpecial.exec(sKeys)) {
var sReplace = "";
switch (match[1]) {
case 'date':
sReplace = Usr.formatDate("n-j-Y");
break;
case 'time':
sReplace = Usr.formatDate("h:i:s");
break;
default:
this.notice("unrecognized autoType sequence: $" + match[1]);
break;
}
sKeys = sKeys.replace('$' + match[1], sReplace);
}
sKeys = sKeys.replace(/\$\$/g, "$$");
}
return sKeys;
}
/**
* setModel(sModel)
*
@ -782,7 +831,7 @@ class Keyboard extends Component {
data = [];
this.autoInject = null;
} else {
this.autoInject = this.autoType;
this.autoInject = this.parseAutoType(this.autoType);
}
this.fClock = this.fAdvance = data[i++];
this.fData = data[i];
@ -877,7 +926,7 @@ class Keyboard extends Component {
injectInit()
{
if (!this.autoInject && this.autoType) {
this.autoInject = this.autoType;
this.autoInject = this.parseAutoType(this.autoType);
this.injectKeys(this.autoInject);
}
}

View file

@ -155,6 +155,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

View file

@ -146,18 +146,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -175,9 +180,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -190,14 +207,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();

View file

@ -659,6 +659,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -667,7 +669,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**

View file

@ -122,8 +122,8 @@ function Za(a,b,c){var d,e=!c;b=b.keyCode;c&&(a.sa=b);16==b?(a.g&=-5,c&&(a.g|=4)
function $a(a,b){var c=!1;b==a.W?a.U&&(a.U.reset(!0),c=!0):(a.R&&65<=b&&90>=b&&(b+=32),bb(a,b),U(a,b,!0,0)&&(2==a.s.I?U(a,b,!1,1):(c=!1,a.v[b]&&(clearTimeout(a.v[b]),c=!0),c=ab(a,c),a.v[a.A=b]=setTimeout(function(a){return function(){U(a,b,!1,3)}}(a),c),a.u&&K(a.u,a.u.ya)&&a.u.message("keyPressSimulate("+u(b)+"): setTimeout()")),c=!0));a.u&&K(a.u,a.u.ya)&&a.u.message("keyPressSimulate("+u(b)+"): "+(c?"true":"false"));return c}
function U(a,b,c,d){var e=!1;c||(a.v[b]=null,a.A==b&&(a.A=0));var g=0,h=a.b[b];void 0===h&&(1<=b&&26>=b&&(b+=64,g=a.K),h=a.b[b]);void 0!==h&&(b=h>>12,e=h>>8&15,g||(g=h&255),c?(a.o[b]|=1<<e,a.o[0]=g==a.K?a.o[0]|64:240==g?a.o[0]|4:242==g?a.o[0]|2:a.o[0]&-71):(a.o[b]&=~(1<<e),a.o[0]&=-71,a.o[0]|=a.g&70),c=!d&&!a.L.length,a.L.push(a.o.slice()),eb(a,c),e=!0);return e}f.S=function(){};f.Ib=function(a){this.ja=this.s.S(a)^this.O;this.V++;eb(this,!1,a)};
function eb(a,b,c){var d=Sa(a.s);b||(2==a.s.I?b=void 0!==c&&32<=a.V:(b=d-a.qa,b=0>b||8192<=b));b&&(b=a.L.shift(),void 0!==b&&(a.fa=b),a.V=0,a.qa=d);for(b=d=0;8>b;b++)a.ja&1<<b&&(d|=a.fa[b]);d^=a.O;if(void 0!==c)a.a[c]=d;else if(c=a.ra,d!=a.ka)for(;c<a.jb;c++)a.a[c]=d;a.ka=d}y(function(){for(var a=G(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Ya(d);F(d,c)}});
function fb(a,b,c,d){C.call(this,"C1PVideo",a);this.ja=a.model;this.$=a.charCols;this.ba=a.charRows;this.qa=a.screenWidth;this.ra=a.screenHeight;this.B=a.charWidth;this.D=a.charHeight;gb(this);this.A=b;this.O=c;this.o=d;var e;b=["","moz","ms","webkit"];a=a.smoothing;if(!ua){c={};if(window){e||(e=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(e);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}ua=c}(e=ua.smoothing)&&(a="true"==e);
if(null!=a)for(e=0;e<b.length;e++)if(c=(c=b[e])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.O[c]){this.O[c]=a;break}}p(fb,C);f=fb.prototype;f.reset=function(a){this.Ma(this.ja);if(this.a)for(var b=this.K;b<this.R;b++)this.a[b]=a?Math.floor(256*Math.random()):32};f.T=function(a,b,c){switch(b){case "refresh":return this.H[b]=c,c.onclick=function(a){return function(){hb(a);Ha(a)}}(this),!0}return!1};
function fb(a,b,c,d){C.call(this,"C1PVideo",a);this.ja=a.model;this.$=a.charCols;this.ba=a.charRows;this.qa=a.screenWidth;this.ra=a.screenHeight;this.B=a.charWidth;this.D=a.charHeight;gb(this);this.A=b;this.O=c;this.o=d;var e;b=["","moz","ms","webkit"];a=a.smoothing;if(!ua){c={};if(window){e||(e=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(e);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}ua=c}(e=ua.smoothing||ua.smoothing)&&
(a="true"==e);if(null!=a)for(e=0;e<b.length;e++)if(c=(c=b[e])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.O[c]){this.O[c]=a;break}}p(fb,C);f=fb.prototype;f.reset=function(a){this.Ma(this.ja);if(this.a)for(var b=this.K;b<this.R;b++)this.a[b]=a?Math.floor(256*Math.random()):32};f.T=function(a,b,c){switch(b){case "refresh":return this.H[b]=c,c.onclick=function(a){return function(){hb(a);Ha(a)}}(this),!0}return!1};
f.ca=function(a,b,c,d){this.a=a;this.K=b;this.ka=c-b+1;this.R=this.K+this.ka;d&&(this.s=d,Ia(d,56832,56832,this,this.S),O(d,56832,56832,this,this.Kb));this.reset(!0)};function gb(a,b,c,d,e){a.I=void 0!==b?b:a.$;a.sa=void 0!==c?c:a.ba;a.g=a.I*a.sa;a.R=a.K+a.g;a.Z=void 0!==d?d:0;a.fa=void 0!==e?e:c;a.V=Math.floor(a.qa/a.I);a.W=Math.floor(a.ra/a.fa)}f.da=function(){this.A.focus()};
f.Ma=function(a){this.M=a;600==this.M?(gb(this,this.$,this.ba,3,25),1024==this.g&&this.s&&(this.v=this.R+this.g-1,O(this.s,this.v,this.v,this,this.Gb))):(this.l("updated video model: "+this.M),gb(this,64,32));hb(this);Ha(this)};f.ia=function(a,b){if(a&&!this.C.N&&H(this)){if(this.C.N=!0,this.u=M(b,"debugger"),this.b=M(b,"keyboard"))this.b.T("canvas","keyDown",this.A),this.b.T("canvas","keyPress",this.A),this.b.T("canvas","keyUp",this.A)}else!a&&this.C.N&&(this.C.N=!1)};
f.X=function(){this.B||(this.B=Math.floor(this.o.width/16));this.D||(this.D=Math.floor(this.o.height/16));C.prototype.X.call(this)};f.S=function(a,b){var c=this.s.S(a);void 0!==b&&this.u&&T(this.u,this,a,b,this.u.$a);this.s.a[a]=c&127|(Math.floor(Sa(this.s)/8333)&1?128:0)};f.Kb=function(a,b){void 0!==b&&this.u&&T(this.u,this,a,b,this.u.$a)};
@ -185,7 +185,7 @@ Z.prototype.start=function(){for(var a in this.Y)if("cpu"!=a)for(var b=0;b<this.
function Nb(a){var b=null,c;for(c in a.Y)for(var d=0;d<a.Y[c].length;d++){var e=a.Y[c][d];if(e){if(!H(e)){H(e,function(a){return function(){Nb(a)}}(a));return}"cpu"==c?b=e:e.ia&&e.ia(!0,a)}}a.X();a.l("C1Pjs v1.35.1\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>");b&&b.ia(!0,a)}
y(function(){for(var a=G(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=E(c),e,g={},h,l=0,k=0,m=0;m<d.modules.length;m++){var n=d.modules[m];if(!m){if("cpu"!=n.type)break;l=n.start;k=n.end;h=Array(k+1-l);for(e=l;e<h.length;e++)h[e]=0}if(e=va(n.refID,d.id)){var r=n.type;void 0===g[r]&&(g[r]=[]);g[r].push(e);e.ca&&void 0!==n.start&&e.ca(h,n.start,n.end,g.cpu[0])}else{A('no component for <module refid="'+n.refID+'">');return}}if(!h){A('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(e=va("debugger",d.id))g["debugger"]=[e],e.ca&&e.ca(h,l,k,g.cpu[0]);l=new Z(d,g);if(k=va("panel",d.id))if(g.panel=[k],k.Sa){e=d.id;d=void 0;g=[];e&&(e=0<(d=e.indexOf("."))?e.substr(0,d+1):"");for(d=0;d<D.length;d++)m=D[d],e&&m.id.indexOf(e)||g.push(m);d=g;for(g=0;g<d.length;g++)e=d[g],e!=k&&(e.Wa=k.Wa,e.l=k.l,e.Sa=k.Sa)}F(l,c);Nb(l)}});var Ob=0;function Pb(a,b,c,d,e,g){e("Loading "+a+"...");w(a,function(h,l,k){k?(l||(l="unable to load "+a+" ("+k+")"),g(l,null)):Rb(l,a,b,c,d,e,g)})}
function Rb(a,b,c,d,e,g,h){function l(a,g){if(g)h(g,null);else{c&&(L[c]&&b&&(L[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
function Rb(a,b,c,d,e,g,h){function l(a,g){if(g)h(g,null);else{c&&(L[c]&&b&&(L[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),d=d.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1C1Pjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1c1pjs$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(n){g=null,a=n.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Sb(a,g,l):l(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function Sb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");w(e,function(g,h,l){if(l||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+l+")");else{if(g=d[3])if(l=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=l[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);l[0]!=k&&(h=h.replace(l[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");

File diff suppressed because one or more lines are too long

View file

@ -959,18 +959,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -988,9 +993,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -1003,14 +1020,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();
@ -1752,6 +1772,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -1760,7 +1782,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**
@ -13790,6 +13812,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

View file

@ -26,36 +26,36 @@ function u(a,b,c){b?9<b&&(b=9):(b=Math.abs(a),b=65535>=b?4:4294967295>=b?8:9);c=
function ga(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ha(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ia(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}var ja={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"},ka=Date.now||function(){return+new Date};
function v(a,b){var c=!0,c=void 0===c?!1:c,d=0,f=null;if("object"==typeof resources&&(f=resources[a]))b&&b(a,f,d);else if(c&&"function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(d=g.status||-1),b&&b(a,f,d))});g.open("GET",
a,c);g.send();c||(f=g.responseText,200!=g.status&&(d=g.status||-1),b&&b(a,f,d))}}function w(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function la(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){y.init.push(a)}
function z(a){if(A)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){B(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function C(a){!A&&a?(A=!0,ma&&na("init"),oa&&na("show")):A=a}function na(a){y[a]&&z(y[a])}var pa=null,y={init:[],show:[],exit:[]},ma=!1,oa=!1,A=!0;la("onload",function(){ma=!0;z(y.init)});la("onpageshow",function(){oa=!0;z(y.show)});la(w("Opera")||w("iOS")?"onunload":"onbeforeunload",function(){z(y.exit)});
function D(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.exports={};this.B=this.bindings={};a=this.id.indexOf(".");0>a?this.va=this.id:(this.Ba=this.id.substr(0,a),this.va=this.id.substr(a+1));this.u={ready:!1,ra:!1,wa:!1,I:!1,ce:!1,error:!1};this.ua=null;this.u.error=!1;this.G=this.J=this.sa=null;E.push(this)}function B(a){window&&window.alert(a)}
function F(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<E.length;c++)if(E[c].id===a)return E[c]}return null}function qa(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<E.length;d++)if(c)c==E[d]&&(c=null);else if(!(a!=E[d].type||b&&E[d].id.indexOf(b)))return E[d]}return null}function G(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){B(c.message+" ("+a+")")}return b}
function H(a,b){b=I(b.parentNode,"c1pjs-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,f=0;f<d.length;f++){var g=d[f];if(1===g.nodeType){var h=g.getAttribute("class");if(h)for(var l=h.split(" "),k=0;k<l.length;k++)switch(h=l[k],h){case "c1pjs-binding":(h=G(g))&&h.binding&&a.L(h.type,h.binding,g,h.value),k=l.length}}}}
function I(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var f=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)f.test(a[b].className)&&c.push(a[b]);return c}
function ra(a){for(var b=!0,c=J[a];c&&c.length;){var d=c.splice(0,1)[0],f=d[0],g=null;0<=sa.indexOf(f)&&(g=function(){return function(){ra(a)}}());var h=ta[f];if(h)if(!g)b=h(d[1],d[2],d[3]);else{if(!h(g,d[1],d[2],d[3]))break}else{var b=!1,l=qa(d[1],a);if(l)if(h=ua[f])b=h(l,d[2],d[3]);else{var k=l.exports;if(k&&(h=k[f]))if(b=!0,!g)b=h.call(l,d[2],d[3]);else if(!h.call(l,g,d[2],d[3]))break}}if(!b){B("Script error: "+f+(h?" failed":" unrecognized"));break}}c&&!c.length&&delete J[a];return b}e=D.prototype;
function z(a){if(A)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){B(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function C(a){!A&&a?(A=!0,ma&&na("init"),oa&&na("show")):A=a}function na(a){y[a]&&z(y[a])}var D=null,y={init:[],show:[],exit:[]},ma=!1,oa=!1,A=!0;la("onload",function(){ma=!0;z(y.init)});la("onpageshow",function(){oa=!0;z(y.show)});la(w("Opera")||w("iOS")?"onunload":"onbeforeunload",function(){z(y.exit)});
function E(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.exports={};this.B=this.bindings={};a=this.id.indexOf(".");0>a?this.va=this.id:(this.Ba=this.id.substr(0,a),this.va=this.id.substr(a+1));this.u={ready:!1,ra:!1,wa:!1,I:!1,ce:!1,error:!1};this.ua=null;this.u.error=!1;this.G=this.J=this.sa=null;F.push(this)}function B(a){window&&window.alert(a)}
function G(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<F.length;c++)if(F[c].id===a)return F[c]}return null}function pa(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<F.length;d++)if(c)c==F[d]&&(c=null);else if(!(a!=F[d].type||b&&F[d].id.indexOf(b)))return F[d]}return null}function H(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){B(c.message+" ("+a+")")}return b}
function I(a,b){b=J(b.parentNode,"c1pjs-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,f=0;f<d.length;f++){var g=d[f];if(1===g.nodeType){var h=g.getAttribute("class");if(h)for(var l=h.split(" "),k=0;k<l.length;k++)switch(h=l[k],h){case "c1pjs-binding":(h=H(g))&&h.binding&&a.L(h.type,h.binding,g,h.value),k=l.length}}}}
function J(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var f=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)f.test(a[b].className)&&c.push(a[b]);return c}
function qa(a){for(var b=!0,c=K[a];c&&c.length;){var d=c.splice(0,1)[0],f=d[0],g=null;0<=ra.indexOf(f)&&(g=function(){return function(){qa(a)}}());var h=sa[f];if(h)if(!g)b=h(d[1],d[2],d[3]);else{if(!h(g,d[1],d[2],d[3]))break}else{var b=!1,l=pa(d[1],a);if(l)if(h=ta[f])b=h(l,d[2],d[3]);else{var k=l.exports;if(k&&(h=k[f]))if(b=!0,!g)b=h.call(l,d[2],d[3]);else if(!h.call(l,g,d[2],d[3]))break}}if(!b){B("Script error: "+f+(h?" failed":" unrecognized"));break}}c&&!c.length&&delete K[a];return b}e=E.prototype;
e.toString=function(){return this.name?this.name:this.id||this.type};
e.L=function(a,b,c){switch(b){case "clear":return this.B[b]||(this.B[b]=c,c.onclick=function(a){return function(){a.B.print&&(a.B.print.value="")}}(this)),!0;case "print":return this.B[b]||(this.sa=this.B[b]=c,c.value="",this.F=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),this.ta=function(a){this.F(a,this.va);return!0}),!0;default:return!1}};e.log=function(){};e.F=function(){};
e.status=function(a){this.F(this.va+": "+a)};e.ta=function(a,b,c){if(!b){var d=qa("Computer",this.id);if(d&&d.u.ce)return console.log("ignoring notice during unload: "+a),!1}c=c||this.type;b||B((c?c+": ":"")+a);return!0};function va(a,b){a.u.error=!0;a.ta(b)}function K(a,b){b&&(a.u.ready?b():a.ua=b);return a.u.ready}e.R=function(a){this.u.error||(this.u.ready=!1!==a,this.u.ready&&(a=this.ua,this.ua=null,a&&a()))};
function wa(a,b){if(a.u.wa)return a.u.ra=!1,a.u.wa=!1;if(a.u.error)return a.F(a.toString()+" error"),!1;a.u.ra=b;return a.u.ra}window&&(window.PCjs||(window.PCjs={}),window.PCjs.Machines||(window.PCjs.Machines={}),window.PCjs.Components||(window.PCjs.Components=[]),window.PCjs.Commands||(window.PCjs.Commands={}));
var L=window?window.PCjs.Machines:{},E=window?window.PCjs.Components:[],J=window?window.PCjs.Commands:{},sa=["hold","sleep","wait"],ta={alert:function(a){B(a);return!0},sleep:function(a,b){setTimeout(a,+b);return!1}},ua={select:function(a,b,c){var d=!1;if(a=a.bindings[b])for(b=0;b<a.options.length;b++)if(a.options[b].textContent==c){a.selectedIndex!=b&&(a.selectedIndex=b);d=!0;break}return d}};
e.status=function(a){this.F(this.va+": "+a)};e.ta=function(a,b,c){if(!b){var d=pa("Computer",this.id);if(d&&d.u.ce)return console.log("ignoring notice during unload: "+a),!1}c=c||this.type;b||B((c?c+": ":"")+a);return!0};function ua(a,b){a.u.error=!0;a.ta(b)}function L(a,b){b&&(a.u.ready?b():a.ua=b);return a.u.ready}e.R=function(a){this.u.error||(this.u.ready=!1!==a,this.u.ready&&(a=this.ua,this.ua=null,a&&a()))};
function va(a,b){if(a.u.wa)return a.u.ra=!1,a.u.wa=!1;if(a.u.error)return a.F(a.toString()+" error"),!1;a.u.ra=b;return a.u.ra}window&&(window.PCjs||(window.PCjs={}),window.PCjs.Machines||(window.PCjs.Machines={}),window.PCjs.Components||(window.PCjs.Components=[]),window.PCjs.Commands||(window.PCjs.Commands={}));
var M=window?window.PCjs.Machines:{},F=window?window.PCjs.Components:[],K=window?window.PCjs.Commands:{},ra=["hold","sleep","wait"],sa={alert:function(a){B(a);return!0},sleep:function(a,b){setTimeout(a,+b);return!1}},ta={select:function(a,b,c){var d=!1;if(a=a.bindings[b])for(b=0;b<a.options.length;b++)if(a.options[b].textContent==c){a.selectedIndex!=b&&(a.selectedIndex=b);d=!0;break}return d}};
Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1});Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});
Function.prototype.bind||(Function.prototype.bind=function(a){function b(){return f.apply(this instanceof c&&a?this:a,d.concat(Array.prototype.slice.call(arguments)))}function c(){}if("function"!=typeof this)throw new TypeError("Function.prototype.bind: non-callable object");var d=Array.prototype.slice.call(arguments,1),f=this;c.prototype=this.prototype;b.prototype=new c;return b});function M(a){D.call(this,"C1PPanel",a);this.u.I=!1}q(M,D);
M.prototype.L=function(a,b,c,d){return this.J&&this.J.L(a,b,c,d)||this.G&&this.G.L(a,b,c,d)||this.b&&this.b.L(a,b,c,d)?!0:D.prototype.L.call(this,a,b,c,d)};M.prototype.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.G=N(b,"cpu"),this.b=N(b,"keyboard"),xa())};function xa(){for(var a=!1,b=I(document,"c1pjs","panel"),c=0;c<b.length;c++){var d=b[c],f=G(d),g=F(f.id);g||(a=!0,g=new M(f));H(g,d);a&&g.R()}}x(xa);
function ya(a){D.call(this,"C1PCPU",a);za(this);this.u.I=!1;this.u.Z=!1;this.Aa=a.autoStart;this.K=this.ka=0;this.xa=30;this.oa=5;this.fa=8;this.za=["Slow","Fast","Max"];this.fb=["(1Mhz)","(up to "+this.fa+"Mhz)","(unlimited)"];this.S=[];this.M=[];this.la=65536;this.ma=0;this.da=65536;this.ea=0;this.v=[this.Lb,this.dd,this.Wd,this.l,this.l,this.fd,this.Bb,this.l,this.jd,this.cd,this.Ab,this.l,this.l,this.$c,this.yb,this.l,this.Kb,this.ed,this.l,this.l,this.l,this.gd,this.Cb,this.l,this.Ob,this.bd,
Function.prototype.bind||(Function.prototype.bind=function(a){function b(){return f.apply(this instanceof c&&a?this:a,d.concat(Array.prototype.slice.call(arguments)))}function c(){}if("function"!=typeof this)throw new TypeError("Function.prototype.bind: non-callable object");var d=Array.prototype.slice.call(arguments,1),f=this;c.prototype=this.prototype;b.prototype=new c;return b});function N(a){E.call(this,"C1PPanel",a);this.u.I=!1}q(N,E);
N.prototype.L=function(a,b,c,d){return this.J&&this.J.L(a,b,c,d)||this.G&&this.G.L(a,b,c,d)||this.b&&this.b.L(a,b,c,d)?!0:E.prototype.L.call(this,a,b,c,d)};N.prototype.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.G=O(b,"cpu"),this.b=O(b,"keyboard"),wa())};function wa(){for(var a=!1,b=J(document,"c1pjs","panel"),c=0;c<b.length;c++){var d=b[c],f=H(d),g=G(f.id);g||(a=!0,g=new N(f));I(g,d);a&&g.R()}}x(wa);
function xa(a){E.call(this,"C1PCPU",a);ya(this);this.u.I=!1;this.u.Z=!1;this.Aa=a.autoStart;this.K=this.ka=0;this.xa=30;this.oa=5;this.fa=8;this.za=["Slow","Fast","Max"];this.fb=["(1Mhz)","(up to "+this.fa+"Mhz)","(unlimited)"];this.S=[];this.M=[];this.la=65536;this.ma=0;this.da=65536;this.ea=0;this.v=[this.Lb,this.dd,this.Wd,this.l,this.l,this.fd,this.Bb,this.l,this.jd,this.cd,this.Ab,this.l,this.l,this.$c,this.yb,this.l,this.Kb,this.ed,this.l,this.l,this.l,this.gd,this.Cb,this.l,this.Ob,this.bd,
this.l,this.l,this.l,this.ad,this.zb,this.l,this.Bc,this.ub,this.l,this.l,this.Hb,this.wb,this.pd,this.l,this.ld,this.tb,this.od,this.l,this.Gb,this.qb,this.md,this.l,this.Ib,this.vb,this.l,this.l,this.l,this.xb,this.qd,this.l,this.Gd,this.sb,this.l,this.l,this.l,this.rb,this.nd,this.l,this.wd,this.pc,this.l,this.l,this.l,this.rc,this.Xc,this.l,this.hd,this.oc,this.Wc,this.l,this.Ac,this.lc,this.Uc,this.l,this.Mb,this.qc,this.l,this.l,this.l,this.sc,this.Yc,this.l,this.Qb,this.nc,this.l,this.l,this.l,
this.mc,this.Vc,this.l,this.xd,this.La,this.l,this.l,this.l,this.Na,this.ud,this.l,this.kd,this.Ka,this.td,this.l,this.zc,this.Ha,this.rd,this.l,this.Nb,this.Ma,this.l,this.l,this.l,this.Oa,this.vd,this.l,this.Id,this.Ja,this.l,this.l,this.l,this.Ia,this.sd,this.l,this.l,this.Md,this.l,this.l,this.Ud,this.Od,this.Rd,this.l,this.kc,this.l,this.$d,this.l,this.Td,this.Jd,this.Qd,this.l,this.Db,this.Nd,this.l,this.l,this.Vd,this.Pd,this.Sd,this.l,this.be,this.Ld,this.ae,this.l,this.l,this.Kd,this.l,this.l,
this.Rc,this.Gc,this.Mc,this.l,this.Sc,this.Ic,this.Nc,this.l,this.Yd,this.Fc,this.Xd,this.l,this.Pc,this.Cc,this.Kc,this.l,this.Eb,this.Hc,this.l,this.l,this.Tc,this.Jc,this.Oc,this.l,this.Rb,this.Ec,this.Zd,this.l,this.Qc,this.Dc,this.Lc,this.l,this.dc,this.Wb,this.l,this.l,this.ec,this.Yb,this.hc,this.l,this.yc,this.Vb,this.jc,this.l,this.cc,this.Sb,this.fc,this.l,this.Jb,this.Xb,this.l,this.l,this.l,this.Zb,this.ic,this.l,this.Pb,this.Ub,this.l,this.l,this.l,this.Tb,this.gc,this.l,this.ac,this.Ta,
this.l,this.l,this.bc,this.Va,this.vc,this.l,this.xc,this.Sa,this.Zc,this.l,this.$b,this.Pa,this.tc,this.l,this.Fb,this.Ua,this.l,this.l,this.l,this.Wa,this.wc,this.l,this.Hd,this.Ra,this.l,this.l,this.l,this.Qa,this.uc,this.l];this.eb=[7,6,0,0,0,3,5,0,3,2,2,0,0,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,3,6,0,0,3,3,5,0,4,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,5,0,3,2,2,0,3,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,5,0,4,2,2,0,5,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,0,6,0,0,
3,3,3,0,2,0,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,0,4,0,0,2,6,2,0,3,3,3,0,2,2,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,4,4,4,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0]}q(ya,D);e=ya.prototype;e.reset=function(a){this.u.Z&&O(this);za(this);this.f=this.a[65532]|this.a[65533]<<8;this.u.error=!1;a&&(!0===this.Aa||null===this.Aa&&void 0===this.B.run)&&P(this)};
e.L=function(a,b,c){a=!1;switch(b){case "run":this.B[b]=c;c.onclick=function(a){return function(){a.u.Z?O(a):P(a)}}(this);a=!0;break;case "A":case "X":case "Y":case "S":case "PC":case "C":case "Z":case "I":case "D":case "B":case "V":case "N":case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(a){return function(){Aa(a,2<=a.K?a.ka:a.K+1,!0)}}(this),a=!0}return a};e.Y=function(a,b){this.a=a;(this.Fa=b)?B("unsupported CPU address buffer offset ("+this.Fa+")"):this.R()};
e.$=function(a,b){if(a&&!this.u.I){this.J=b;if(a=N(b,"video"))this.ya=function(a){return function(){Ba(a)}}(a),this.ca=function(a){return function(){a.ca()}}(a);this.u.I=!0;this.reset(!0);this.update()}};function Ca(a,b,c,d,f){0>Da(a.S,b,c,d,f)&&(a.la>b&&(a.la=b),a.ma<c&&(a.ma=c),a.S.push([b,c,d,f]))}function Q(a,b,c,d,f){0>Da(a.M,b,c,d,f)&&(a.da>b&&(a.da=b),a.ea<c&&(a.ea=c),a.M.push([b,c,d,f]))}
3,3,3,0,2,0,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,0,4,0,0,2,6,2,0,3,3,3,0,2,2,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,4,4,4,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0]}q(xa,E);e=xa.prototype;e.reset=function(a){this.u.Z&&P(this);ya(this);this.f=this.a[65532]|this.a[65533]<<8;this.u.error=!1;a&&(!0===this.Aa||null===this.Aa&&void 0===this.B.run)&&za(this)};
e.L=function(a,b,c){a=!1;switch(b){case "run":this.B[b]=c;c.onclick=function(a){return function(){a.u.Z?P(a):za(a)}}(this);a=!0;break;case "A":case "X":case "Y":case "S":case "PC":case "C":case "Z":case "I":case "D":case "B":case "V":case "N":case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(a){return function(){Aa(a,2<=a.K?a.ka:a.K+1,!0)}}(this),a=!0}return a};e.Y=function(a,b){this.a=a;(this.Fa=b)?B("unsupported CPU address buffer offset ("+this.Fa+")"):this.R()};
e.$=function(a,b){if(a&&!this.u.I){this.J=b;if(a=O(b,"video"))this.ya=function(a){return function(){Ba(a)}}(a),this.ca=function(a){return function(){a.ca()}}(a);this.u.I=!0;this.reset(!0);this.update()}};function Ca(a,b,c,d,f){0>Da(a.S,b,c,d,f)&&(a.la>b&&(a.la=b),a.ma<c&&(a.ma=c),a.S.push([b,c,d,f]))}function Q(a,b,c,d,f){0>Da(a.M,b,c,d,f)&&(a.da>b&&(a.da=b),a.ea<c&&(a.ea=c),a.M.push([b,c,d,f]))}
function Da(a,b,c,d,f){for(var g=0;g<a.length;g++)if(a[g][0]==b&&a[g][1]==c&&a[g][2]==d&&a[g][3]==f)return g;return-1}function Aa(a,b,c){void 0!==b&&(a.K=b,a.B.setSpeed&&(a.B.setSpeed.innerHTML=a.za[2<=b?0:b+1]),a.F("running at "+a.za[b].toLowerCase()+" speed "+a.fb[b]),c&&a.ca());a.U=0;a.Ca=ka();Ea(a)}e.ya=function(){};e.ca=function(){};function R(a,b,c,d){void 0!==a.B[b]&&(void 0===d&&(d=1),c="0000"+c.toString(16),a.B[b].innerHTML=c.slice(c.length-d).toUpperCase())}
function Fa(a){R(a,"A",a.g,2);R(a,"X",a.m,2);R(a,"Y",a.o,2);var b=Ga(a);R(a,"C",b&1?1:0);R(a,"Z",b&2?1:0);R(a,"I",b&4?1:0);R(a,"D",b&8?1:0);R(a,"B",b&16?1:0);R(a,"V",b&64?1:0);R(a,"N",b&128?1:0);R(a,"S",a.s,4);R(a,"PC",a.f,4);a.B.speed&&a.N&&(a.B.speed.innerHTML=a.N.toFixed(1)+"Mhz")}
function Ea(a,b){var c=30;c<a.xa&&(c=a.xa);c<a.oa&&(c=a.oa);var d=1;b&&a.K>a.ka&&a.N&&(d=a.N);d>a.fa&&2>a.K&&(d=a.fa);a.gb=Math.round(1E3/30);a.ga=Math.floor(1E6/c*d);a.ja=Math.floor(1E6/30*d);a.Ea=Math.floor(1E6/a.xa*d);a.Da=Math.floor(1E6/a.oa*d);b||(a.T=a.ja,a.W=a.Ea,a.V=a.Da);a.na=0}function Ha(a){1E6<=a.na&&Ea(a,!0);a.ba=0;a.hb=ka()}
function Ia(a){var b=ka(),c=a.gb;a.ba&&(c=Math.round(c*a.ba/a.ja));c-=b-a.hb;if(b-=a.Ca)a.N=Math.round(a.U/(100*b))/10,864E5<=b&&Aa(a);0>c?c=0:1==a.K?a.N<=a.fa&&(c=0):2==a.K&&(c=0);a.na+=a.ba;return c}
function P(a){if(wa(a,!0)){a.u.Z||(Aa(a),a.J&&a.J.start(),a.u.Z=!0,a.B.run&&(a.B.run.innerHTML="Halt"),a.ca());Ha(a);try{do{a.step(a.ga);var b=a.O-a.H;a.U+=b;a.ba+=b;a.O=a.H=0;a.W-=a.ga;0>=a.W&&(a.W+=a.Ea,a.ya());a.V-=a.ga;0>=a.V&&(a.V+=a.Da,Fa(a));a.T-=a.ga;if(0>=a.T){a.T+=a.ja;break}}while(a.u.Z)}catch(c){O(a);a.update();wa(a,!1);va(a,c.stack||c.message);return}setTimeout(function(a){return function(){P(a)}}(a),Ia(a))}else a.update(),a.J&&a.J.stop(a.Ca,a.U)}
function za(a){if(va(a,!0)){a.u.Z||(Aa(a),a.J&&a.J.start(),a.u.Z=!0,a.B.run&&(a.B.run.innerHTML="Halt"),a.ca());Ha(a);try{do{a.step(a.ga);var b=a.O-a.H;a.U+=b;a.ba+=b;a.O=a.H=0;a.W-=a.ga;0>=a.W&&(a.W+=a.Ea,a.ya());a.V-=a.ga;0>=a.V&&(a.V+=a.Da,Fa(a));a.T-=a.ga;if(0>=a.T){a.T+=a.ja;break}}while(a.u.Z)}catch(c){P(a);a.update();va(a,!1);ua(a,c.stack||c.message);return}setTimeout(function(a){return function(){za(a)}}(a),Ia(a))}else a.update(),a.J&&a.J.stop(a.Ca,a.U)}
e.step=function(a){this.b=this.j=-1;this.O=this.H=a;do{a=this.a[this.f];this.f++;this.v[a].call(this);if(0<=this.b){if(this.b>=this.la&&this.b<=this.ma)for(var b=this.b,c=this.f,d=0;d<this.S.length;d++)b>=this.S[d][0]&&b<=this.S[d][1]&&this.S[d][3].call(this.S[d][2],b,c);this.b=-1}else if(0<=this.j){if(this.j>=this.da&&this.j<=this.ea)for(b=this.j,c=this.f,d=0;d<this.M.length;d++)b>=this.M[d][0]&&b<=this.M[d][1]&&this.M[d][3].call(this.M[d][2],b,c);this.j=-1}this.H-=this.eb[a]}while(0<this.H);return!0};
function O(a){a.u.ra&&(a.u.wa=!0);a.O-=a.H;a.H=0;a.u.Z&&(a.u.Z=!1,a.B.run&&(a.B.run.innerHTML="Run"))}e.update=function(){this.ya();Fa(this)};function Ja(a){return a.u.Z?a.U+a.O-a.H:0}e.X=function(a){return this.a[a]};function Ga(a){var b=a.c&256?1:0,b=b|(a.i&255?0:2),b=b|((a.w&255^a.D^a.w>>1)&128?64:0),b=b|(a.h&128?128:0);return a.A&60|b}
function S(a,b,c){var d=a.c&256?1:0,f=(b&15)+(c&15)+d;10<=f&&(f=f+6&15|16);f+=(b&240)+(c&240);a.D=b^c;a.w=f;a.h=f&255;160<=f&&(f+=96);512<=f&&(f-=256);a.c=f;a.i=b+c+d&255;a.H--;return f&255}function T(a,b,c){var d=a.c&256?0:1,f=(b&15)-(c&15)-d;0>f&&(f=(f-6&15)-16);f+=(b&240)-(c&240);0>f&&(f-=96);a.h=a.i=(a.c=b-c-d)&255;a.D=b^c;a.w=a.c;a.c^=256;a.H--;return f&255}function za(a){a.g=0;a.m=0;a.o=0;a.s=256;a.A=0;a.h=0;a.i=0;a.D=0;a.w=0;a.c=0;a.f=0;a.b=-1;a.j=-1;a.N=0;a.U=a.O=a.H=0}
function P(a){a.u.ra&&(a.u.wa=!0);a.O-=a.H;a.H=0;a.u.Z&&(a.u.Z=!1,a.B.run&&(a.B.run.innerHTML="Run"))}e.update=function(){this.ya();Fa(this)};function Ja(a){return a.u.Z?a.U+a.O-a.H:0}e.X=function(a){return this.a[a]};function Ga(a){var b=a.c&256?1:0,b=b|(a.i&255?0:2),b=b|((a.w&255^a.D^a.w>>1)&128?64:0),b=b|(a.h&128?128:0);return a.A&60|b}
function S(a,b,c){var d=a.c&256?1:0,f=(b&15)+(c&15)+d;10<=f&&(f=f+6&15|16);f+=(b&240)+(c&240);a.D=b^c;a.w=f;a.h=f&255;160<=f&&(f+=96);512<=f&&(f-=256);a.c=f;a.i=b+c+d&255;a.H--;return f&255}function T(a,b,c){var d=a.c&256?0:1,f=(b&15)-(c&15)-d;0>f&&(f=(f-6&15)-16);f+=(b&240)-(c&240);0>f&&(f-=96);a.h=a.i=(a.c=b-c-d)&255;a.D=b^c;a.w=a.c;a.c^=256;a.H--;return f&255}function ya(a){a.g=0;a.m=0;a.o=0;a.s=256;a.A=0;a.h=0;a.i=0;a.D=0;a.w=0;a.c=0;a.f=0;a.b=-1;a.j=-1;a.N=0;a.U=a.O=a.H=0}
e.Lb=function(){this.f++;this.a[this.s--]=this.f>>8;this.s|=256;this.a[this.s--]=this.f&255;this.s|=256;this.A|=16;this.A=Ga(this);this.a[this.s--]=this.A;this.s|=256;this.A&=239;this.b=65534;this.f=this.a[this.b]|this.a[this.b+1]<<8};e.dd=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.g|=this.a[this.b]};e.fd=function(){this.b=this.a[this.f++];this.h=this.i=this.g|=this.a[this.b]};
e.Bb=function(){this.j=this.a[this.f++];this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};e.jd=function(){this.A=Ga(this);this.a[this.s--]=this.A;this.s|=256};e.cd=function(){this.b=this.f++;this.h=this.i=this.g|=this.a[this.b]};e.Ab=function(){this.c=this.g<<1;this.h=this.i=this.g=this.c&255};e.$c=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.g|=this.a[this.b]};
e.yb=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};e.Kb=function(){this.f+=(this.h&128?0:(this.H--,this.a[this.f]<<24>>24))+1};e.ed=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.g|=this.a[this.b]};e.gd=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.g|=this.a[this.b]};
@ -99,40 +99,40 @@ e.Wa=function(){this.b=this.a[this.f++]+this.m&255;this.c=this.g-this.a[this.b]-
e.Hd=function(){this.A|=8;this.v[97]=this.mb;this.v[101]=this.ob;this.v[105]=this.lb;this.v[109]=this.ib;this.v[113]=this.nb;this.v[117]=this.pb;this.v[121]=this.kb;this.v[125]=this.jb;this.v[225]=this.Cd;this.v[229]=this.Ed;this.v[233]=this.Bd;this.v[237]=this.yd;this.v[241]=this.Dd;this.v[245]=this.Fd;this.v[249]=this.Ad;this.v[253]=this.zd};
e.Ra=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Ad=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.g=T(this,this.g,this.a[this.b])};
e.Qa=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.zd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.g=T(this,this.g,this.a[this.b])};e.uc=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};
e.Wd=function(){var a;a=this.a[this.f++];switch(a){case 0:this.F("HALT");O(this);break;case 1:a=this.f;for(var b="";a<this.a.length;){var c=this.a[a++];if(!c)break;b+=String.fromCharCode(c)}this.f=a;b=b.replace(/%A/g,u(this.g,2)).replace(/%X/g,u(this.m,2)).replace(/%Y/g,u(this.o,2));this.F(b);this.T=0;this.O-=this.H;this.H=0;break;default:this.f-=2,this.F("undefined opSim: "+u(a,2,!0)+" at "+u(this.f,4,!0)),O(this)}};
e.l=function(){var a=this.a[--this.f];this.F("undefined opcode: "+u(a,2,!0)+" at "+u(this.f,4,!0));O(this)};x(function(){for(var a=I(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new ya(d);H(d,c)}});
function U(a){D.call(this,"C1PROM",a);this.b=this.a=null;this.c=a.size;if(this.f=a.image){a=this.f;var b=ha(this.f);"json"!=b&&"hex"!=b&&(a="http://"+(window?window.location.host:"www.pcjs.org")+"/api/v1/dump?file="+this.f+"&format=bytes");var c=this;v(a,function(a,b,g){Ka(c,a,b,g)})}}q(U,D);
U.prototype.Y=function(a,b,c,d){this.a=a;this.g=b;a=c-b+1;this.c||(this.c=a);a!=this.c?va(this,"computer-specified ROM size ("+u(a,4,!0)+") does not match component-specified size ("+u(this.c,4,!0)+")"):(d&&(this.G=d,Q(d,b,c,this,this.h)),La(this))};U.prototype.$=function(a){a&&!this.u.I&&(this.u.I=!0)};U.prototype.h=function(a,b){void 0!==b&&(a-=this.g,this.a[this.g+a]=this.b?this.b[a]:0)};
e.Wd=function(){var a;a=this.a[this.f++];switch(a){case 0:this.F("HALT");P(this);break;case 1:a=this.f;for(var b="";a<this.a.length;){var c=this.a[a++];if(!c)break;b+=String.fromCharCode(c)}this.f=a;b=b.replace(/%A/g,u(this.g,2)).replace(/%X/g,u(this.m,2)).replace(/%Y/g,u(this.o,2));this.F(b);this.T=0;this.O-=this.H;this.H=0;break;default:this.f-=2,this.F("undefined opSim: "+u(a,2,!0)+" at "+u(this.f,4,!0)),P(this)}};
e.l=function(){var a=this.a[--this.f];this.F("undefined opcode: "+u(a,2,!0)+" at "+u(this.f,4,!0));P(this)};x(function(){for(var a=J(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new xa(d);I(d,c)}});
function U(a){E.call(this,"C1PROM",a);this.b=this.a=null;this.c=a.size;if(this.f=a.image){a=this.f;var b=ha(this.f);"json"!=b&&"hex"!=b&&(a="http://"+(window?window.location.host:"www.pcjs.org")+"/api/v1/dump?file="+this.f+"&format=bytes");var c=this;v(a,function(a,b,g){Ka(c,a,b,g)})}}q(U,E);
U.prototype.Y=function(a,b,c,d){this.a=a;this.g=b;a=c-b+1;this.c||(this.c=a);a!=this.c?ua(this,"computer-specified ROM size ("+u(a,4,!0)+") does not match component-specified size ("+u(this.c,4,!0)+")"):(d&&(this.G=d,Q(d,b,c,this,this.h)),La(this))};U.prototype.$=function(a){a&&!this.u.I&&(this.u.I=!0)};U.prototype.h=function(a,b){void 0!==b&&(a-=this.g,this.a[this.g+a]=this.b?this.b[a]:0)};
function Ka(a,b,c,d){if(d)a.F('Error loading ROM "'+b+'" ('+d+")");else{if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes;g?a.b=g:a.b=f}catch(h){a.F('Error processing ROM "'+b+'": '+h.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),c=0;c<b.length;c++)a.b[c]=parseInt(b[c],16);La(a)}}
function La(a){if(!K(a))if(!a.f)a.R();else if(a.b&&a.a){var b=a.b.length;if(b!=a.c)va(a,"ROM image size ("+u(b,4,!0)+") does not match component-specified size ("+u(a.c,4,!0)+")");else{for(var c=0;c<b;c++)a.a[a.g+c]=a.b[c];a.R()}}}x(function(){for(var a=I(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new U(d);H(d,c)}});function Ma(a){D.call(this,"C1PRAM",a)}q(Ma,D);Ma.prototype.Y=function(a){this.a=a;this.R()};
x(function(){for(var a=I(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Ma(d);H(d,c)}});
function Na(a){D.call(this,"C1PKeyboard",a);this.u.I=!1;this.ba=a.model;this.K=8;this.ma=10;this.la=13;this.M=27;this.ga=this.K;this.ka=this.ma;this.da=this.la;this.H=this.M;this.s=241;this.D=224;this.ea=3;this.fa=15;this.o=1;this.j={};this.j["break"]=this.D;this.j.esc=this.H;this.j["ctrl-c"]=this.ea;this.j["ctrl-o"]=this.fa;this.b=[];this.b[49]=30464;this.b[33]=30704;this.b[50]=30208;this.b[34]=30448;this.b[51]=29952;this.b[35]=30192;this.b[52]=29696;this.b[36]=29936;this.b[53]=29440;this.b[37]=
function La(a){if(!L(a))if(!a.f)a.R();else if(a.b&&a.a){var b=a.b.length;if(b!=a.c)ua(a,"ROM image size ("+u(b,4,!0)+") does not match component-specified size ("+u(a.c,4,!0)+")");else{for(var c=0;c<b;c++)a.a[a.g+c]=a.b[c];a.R()}}}x(function(){for(var a=J(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new U(d);I(d,c)}});function Ma(a){E.call(this,"C1PRAM",a)}q(Ma,E);Ma.prototype.Y=function(a){this.a=a;this.R()};
x(function(){for(var a=J(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new Ma(d);I(d,c)}});
function Na(a){E.call(this,"C1PKeyboard",a);this.u.I=!1;this.ba=a.model;this.K=8;this.ma=10;this.la=13;this.M=27;this.ga=this.K;this.ka=this.ma;this.da=this.la;this.H=this.M;this.s=241;this.D=224;this.ea=3;this.fa=15;this.o=1;this.j={};this.j["break"]=this.D;this.j.esc=this.H;this.j["ctrl-c"]=this.ea;this.j["ctrl-o"]=this.fa;this.b=[];this.b[49]=30464;this.b[33]=30704;this.b[50]=30208;this.b[34]=30448;this.b[51]=29952;this.b[35]=30192;this.b[52]=29696;this.b[36]=29936;this.b[53]=29440;this.b[37]=
29680;this.b[54]=29184;this.b[38]=29424;this.b[55]=28928;this.b[39]=29168;this.b[56]=26368;this.b[40]=26608;this.b[57]=26112;this.b[41]=26352;this.b[48]=25856;this.b[58]=25600;this.b[42]=25840;this.b[45]=25344;this.b[61]=25584;this.b[46]=22272;this.b[62]=22512;this.b[108]=22016;this.b[76]=22256;this.b[92]=22256;this.b[111]=21760;this.b[79]=22E3;this.b[this.ga]=22E3;this.b[this.ka]=21504;this.b[this.da]=21248;this.b[119]=18176;this.b[87]=18416;this.b[101]=17920;this.b[69]=18160;this.b[114]=17664;this.b[82]=
17904;this.b[116]=17408;this.b[84]=17648;this.b[121]=17152;this.b[89]=17392;this.b[117]=16896;this.b[85]=17136;this.b[105]=16640;this.b[73]=16880;this.b[115]=14080;this.b[83]=14320;this.b[100]=13824;this.b[68]=14064;this.b[102]=13568;this.b[70]=13808;this.b[103]=13312;this.b[71]=13552;this.b[104]=13056;this.b[72]=13296;this.b[106]=12800;this.b[74]=13040;this.b[107]=12544;this.b[75]=12784;this.b[91]=12784;this.b[120]=9984;this.b[88]=10224;this.b[99]=9728;this.b[67]=9968;this.b[118]=9472;this.b[86]=
9712;this.b[98]=9216;this.b[66]=9456;this.b[110]=8960;this.b[78]=9200;this.b[94]=9200;this.b[109]=8704;this.b[77]=8944;this.b[93]=8944;this.b[44]=8448;this.b[60]=8688;this.b[113]=5888;this.b[81]=6128;this.b[97]=5632;this.b[65]=5872;this.b[122]=5376;this.b[90]=5616;this.b[32]=5120;this.b[47]=4864;this.b[63]=5104;this.b[59]=4608;this.b[43]=4848;this.b[112]=4352;this.b[80]=4592;this.b[64]=4592;this.b[this.s]=1536;this.b[this.H]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}q(Na,D);
9712;this.b[98]=9216;this.b[66]=9456;this.b[110]=8960;this.b[78]=9200;this.b[94]=9200;this.b[109]=8704;this.b[77]=8944;this.b[93]=8944;this.b[44]=8448;this.b[60]=8688;this.b[113]=5888;this.b[81]=6128;this.b[97]=5632;this.b[65]=5872;this.b[122]=5376;this.b[90]=5616;this.b[32]=5120;this.b[47]=4864;this.b[63]=5104;this.b[59]=4608;this.b[43]=4848;this.b[112]=4352;this.b[80]=4592;this.b[64]=4592;this.b[this.s]=1536;this.b[this.H]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}q(Na,E);
e=Na.prototype;e.reset=function(){this.pa(this.ba);this.c=this.o;this.O=0;this.f=[this.o,0,0,0,0,0,0,0];this.v=[];if(this.g)for(var a in this.g)isNaN(+a)||this.g[a]&&clearTimeout(this.g[a]);this.g=[];this.W=this.h=0;this.S=-1;this.N=this.f;this.U=this.A=0;this.i=""};
e.L=function(a,b,c){if(void 0===this.B[b])switch(b){case "keyDown":return this.B[b]=c,c.onkeydown=function(a){return function(b){return Oa(a,b,!0)}}(this),!0;case "keyPress":return this.B[b]=c,c.onkeypress=function(a){return function(b){var c=!0;b=b||window.event;b=b.which||b.keyCode;a.i="";a.c&8?a.c&=-9:c=!Pa(a,b);return c}}(this),!0;case "keyUp":return this.B[b]=c,c.onkeyup=function(a){return function(b){return Oa(a,b,!1)}}(this),!0;case "break":return this.B[b]=c,c.onclick=function(a){return function(){a.J&&
a.J.reset(!0)}}(this),!0;default:if(void 0!==this.j[b])return this.B[b]=c,c.onclick=function(a,b,c){return function(){a.G&&a.G.ca();return!Pa(a,c)}}(this,b,this.j[b]),!0}return!1};e.Y=function(a,b,c,d){this.a=a;this.V=b;this.ja=c-b+1;this.oa=this.V+this.ja;d&&(this.G=d,Q(d,b,c,this,this.$a));this.R()};e.pa=function(a){this.m=a;this.w=255;600!=this.m&&(this.w=0,this.F("updated keyboard model: "+this.m))};e.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b)};
e.R=function(){this.T=(this.na=w("iOS"))||w("Android");D.prototype.R.call(this)};function Qa(a,b){b=b?100:250;a.G&&a.G.N&&(b/=a.G.N);return b}function Ra(a,b){!a.h||void 0!==b&&b==a.h||(clearTimeout(a.g[a.h]),V(a,a.h,!1,4))}function W(a,b,c){a.i=b;Sa(a,c||300)}function Sa(a,b){if(0<a.i.length){var c=a.i.charCodeAt(0);10==c&&(c=13);65<=c&&90>=c&&(c+=32);a.i=a.i.substr(1);Pa(a,c)}0<a.i.length&&setTimeout(function(a){return function(){Sa(a,b)}}(a),b)}
e.R=function(){this.T=(this.na=w("iOS"))||w("Android");E.prototype.R.call(this)};function Qa(a,b){b=b?100:250;a.G&&a.G.N&&(b/=a.G.N);return b}function Ra(a,b){!a.h||void 0!==b&&b==a.h||(clearTimeout(a.g[a.h]),V(a,a.h,!1,4))}function W(a,b,c){a.i=b;Sa(a,c||300)}function Sa(a,b){if(0<a.i.length){var c=a.i.charCodeAt(0);10==c&&(c=13);65<=c&&90>=c&&(c+=32);a.i=a.i.substr(1);Pa(a,c)}0<a.i.length&&setTimeout(function(a){return function(){Sa(a,b)}}(a),b)}
function Oa(a,b,c){var d,f=!c;b=b.keyCode;c&&(a.W=b);16==b?(a.c&=-5,c&&(a.c|=4),b+=224,f=!1):18==b?(a.c&=-3,c&&(a.c|=2),b+=224,f=!1):b==a.s-224?(a.c&=-65,c&&(a.c|=64),b+=224,f=!1):20==b?(c=!c,a.c&=~a.o,c&&(a.c|=a.o),b+=224,f=!1):91==b?(a.c&=-9,c&&(a.c|=8),f=!1,d=!0):d=9==b?f=!1:b==a.M||b==a.K?c?!Pa(a,b):!1:!0;f&&(a.c&=-9,a.T||b!=a.W||Ra(a));void 0===d&&(d=!V(a,b,c,2));return d}
function Pa(a,b){var c=!1;b==a.D?a.J&&(a.J.reset(!0),c=!0):(a.T&&65<=b&&90>=b&&(b+=32),Ra(a,b),V(a,b,!0,0)&&(2==a.G.K?V(a,b,!1,1):(c=!1,a.g[b]&&(clearTimeout(a.g[b]),c=!0),c=Qa(a,c),a.g[a.h=b]=setTimeout(function(a){return function(){V(a,b,!1,3)}}(a),c)),c=!0));return c}
function V(a,b,c,d){var f=!1;c||(a.g[b]=null,a.h==b&&(a.h=0));var g=0,h=a.b[b];void 0===h&&(1<=b&&26>=b&&(b+=64,g=a.s),h=a.b[b]);void 0!==h&&(b=h>>12,f=h>>8&15,g||(g=h&255),c?(a.f[b]|=1<<f,a.f[0]=g==a.s?a.f[0]|64:240==g?a.f[0]|4:242==g?a.f[0]|2:a.f[0]&-71):(a.f[b]&=~(1<<f),a.f[0]&=-71,a.f[0]|=a.c&70),c=!d&&!a.v.length,a.v.push(a.f.slice()),Ta(a,c),f=!0);return f}e.X=function(){};e.$a=function(a){this.O=this.G.X(a)^this.w;this.A++;Ta(this,!1,a)};
function Ta(a,b,c){var d=Ja(a.G);b||(2==a.G.K?b=void 0!==c&&32<=a.A:(b=d-a.U,b=0>b||8192<=b));b&&(b=a.v.shift(),void 0!==b&&(a.N=b),a.A=0,a.U=d);for(b=d=0;8>b;b++)a.O&1<<b&&(d|=a.N[b]);d^=a.w;if(void 0!==c)a.a[c]=d;else if(c=a.V,d!=a.S)for(;c<a.oa;c++)a.a[c]=d;a.S=d}x(function(){for(var a=I(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Na(d);H(d,c)}});
function Ua(a,b,c,d){D.call(this,"C1PVideo",a);this.S=a.model;this.M=a.charCols;this.N=a.charRows;this.U=a.screenWidth;this.V=a.screenHeight;this.i=a.charWidth;this.j=a.charHeight;Va(this);this.h=b;this.w=c;this.f=d;var f;b=["","moz","ms","webkit"];a=a.smoothing;if(!pa){c={};if(window){f||(f=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(f);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}pa=c}(f=pa.smoothing)&&(a="true"==f);if(null!=
a)for(f=0;f<b.length;f++)if(c=(c=b[f])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.w[c]){this.w[c]=a;break}}q(Ua,D);e=Ua.prototype;e.reset=function(a){this.pa(this.S);if(this.a)for(var b=this.s;b<this.A;b++)this.a[b]=a?Math.floor(256*Math.random()):32};e.L=function(a,b,c){switch(b){case "refresh":return this.B[b]=c,c.onclick=function(a){return function(){Wa(a);Ba(a)}}(this),!0}return!1};
function Ta(a,b,c){var d=Ja(a.G);b||(2==a.G.K?b=void 0!==c&&32<=a.A:(b=d-a.U,b=0>b||8192<=b));b&&(b=a.v.shift(),void 0!==b&&(a.N=b),a.A=0,a.U=d);for(b=d=0;8>b;b++)a.O&1<<b&&(d|=a.N[b]);d^=a.w;if(void 0!==c)a.a[c]=d;else if(c=a.V,d!=a.S)for(;c<a.oa;c++)a.a[c]=d;a.S=d}x(function(){for(var a=J(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new Na(d);I(d,c)}});
function Ua(a,b,c,d){E.call(this,"C1PVideo",a);this.S=a.model;this.M=a.charCols;this.N=a.charRows;this.U=a.screenWidth;this.V=a.screenHeight;this.i=a.charWidth;this.j=a.charHeight;Va(this);this.h=b;this.w=c;this.f=d;var f;b=["","moz","ms","webkit"];a=a.smoothing;if(!D){c={};if(window){f||(f=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(f);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}D=c}(f=D.smoothing||D.smoothing)&&(a="true"==
f);if(null!=a)for(f=0;f<b.length;f++)if(c=(c=b[f])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.w[c]){this.w[c]=a;break}}q(Ua,E);e=Ua.prototype;e.reset=function(a){this.pa(this.S);if(this.a)for(var b=this.s;b<this.A;b++)this.a[b]=a?Math.floor(256*Math.random()):32};e.L=function(a,b,c){switch(b){case "refresh":return this.B[b]=c,c.onclick=function(a){return function(){Wa(a);Ba(a)}}(this),!0}return!1};
e.Y=function(a,b,c,d){this.a=a;this.s=b;this.T=c-b+1;this.A=this.s+this.T;d&&(this.G=d,Ca(d,56832,56832,this,this.X),Q(d,56832,56832,this,this.bb));this.reset(!0)};function Va(a,b,c,d,f){a.o=void 0!==b?b:a.M;a.W=void 0!==c?c:a.N;a.c=a.o*a.W;a.A=a.s+a.c;a.K=void 0!==d?d:0;a.O=void 0!==f?f:c;a.D=Math.floor(a.U/a.o);a.H=Math.floor(a.V/a.O)}e.ca=function(){this.h.focus()};
e.pa=function(a){this.m=a;600==this.m?(Va(this,this.M,this.N,3,25),1024==this.c&&this.G&&(this.g=this.A+this.c-1,Q(this.G,this.g,this.g,this,this.Ya))):(this.F("updated video model: "+this.m),Va(this,64,32));Wa(this);Ba(this)};e.$=function(a,b){if(a&&!this.u.I&&K(this)){if(this.u.I=!0,this.b=N(b,"keyboard"))this.b.L("canvas","keyDown",this.h),this.b.L("canvas","keyPress",this.h),this.b.L("canvas","keyUp",this.h)}else!a&&this.u.I&&(this.u.I=!1)};
e.R=function(){this.i||(this.i=Math.floor(this.f.width/16));this.j||(this.j=Math.floor(this.f.height/16));D.prototype.R.call(this)};e.X=function(a){var b=this.G.X(a);this.G.a[a]=b&127|(Math.floor(Ja(this.G)/8333)&1?128:0)};e.bb=function(){};
e.pa=function(a){this.m=a;600==this.m?(Va(this,this.M,this.N,3,25),1024==this.c&&this.G&&(this.g=this.A+this.c-1,Q(this.G,this.g,this.g,this,this.Ya))):(this.F("updated video model: "+this.m),Va(this,64,32));Wa(this);Ba(this)};e.$=function(a,b){if(a&&!this.u.I&&L(this)){if(this.u.I=!0,this.b=O(b,"keyboard"))this.b.L("canvas","keyDown",this.h),this.b.L("canvas","keyPress",this.h),this.b.L("canvas","keyUp",this.h)}else!a&&this.u.I&&(this.u.I=!1)};
e.R=function(){this.i||(this.i=Math.floor(this.f.width/16));this.j||(this.j=Math.floor(this.f.height/16));E.prototype.R.call(this)};e.X=function(a){var b=this.G.X(a);this.G.a[a]=b&127|(Math.floor(Ja(this.G)/8333)&1?128:0)};e.bb=function(){};
e.Ya=function(a,b){if(void 0!==b){this.pa(540);this.b&&this.b.pa(542);a=this.G;b=a.M;var c=[],d=Da(b,this.g,this.g,this,this.Ya);if(0<=d){c.push(b[d][0]);c.push(b[d][1]);b.splice(d,1);for(var f=65536,g=0,d=0;d<b.length;d++)f>b[d][0]&&(f=b[d][0]),g<b[d][1]&&(g=b[d][1]);c.push(f);c.push(g)}4==c.length&&(a.da=c[2],a.ea=c[3])}};function Wa(a){a.v=Array(a.c);for(var b=0;b<=a.c;b++)a.v[b]=-1}
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 d=Math.floor(b/a.o);if(d>=a.K&&(d-=a.K,d<a.O)){var f=c*a.i;a.w.drawImage(a.f,f%a.f.width,Math.floor(f/a.f.width)*a.j,a.i,a.j,b%a.o*a.D,d*a.H,a.D,a.H)}a.v[b]=c}b++}}
x(function(){for(var a=I(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=G(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;H(f,c)}});
function Xa(a){D.call(this,"C1PSerialPort",a);this.u.I=!1;this.j=a.demo;this.reset(!0)}q(Xa,D);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};
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)}});
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.onsubmit=function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload=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=N(b,"keyboard"))};
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"))};
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=I(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Xa(d);H(d,c)}});
function eb(a){D.call(this,"C1PDiskController",a);this.u.I=!1;this.reset(!0)}q(eb,D);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:[]})};
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 fb(a){a.s={C:64,read:function(){},update:function(a){return function(b){void 0!==b&&(this.C=b);a.i.C&4||X(a,0,this)}}(a)};a.f={C:255,read:function(){this.update()},update:function(a){return function(b){void 0===b?b=a.f.C:gb(a,b,a.h.C);b=(b|190)&-2;if(0<=a.b&&a.c[a.b].qa.length){var c=a.c[a.b];c.cb&&(b&=-33);c.aa||(b&=-3);10>=--c.ia&&(0<c.ia?(b&=-129,hb(a)):(c.ia=100,0<=a.b&&(a.c[a.b].ha=0,ib(a))))}this.C=b;a.i.C&4&&X(a,0,this)}}(a)};a.i={C:0,read:function(){},update:function(a){return function(b){void 0!==
b&&(this.C=b&-193);X(a,1,this);a.f.update();a.s.update()}}(a)};a.v={C:255,read:function(){},update:function(a){return function(b){void 0!==b&&(this.C=b);a.j.C&4||X(a,2,this)}}(a)};a.h={C:255,read:function(){},update:function(a){return function(b){void 0===b?b=a.h.C:gb(a,a.f.C,b);if(0<=a.b&&a.b<a.c.length){var c=a.c[a.b];c.qa.length&&a.h.C&8&&!(b&8)&&(b&4?c.aa--:c.aa++,c.aa>=c.Ga&&(c.aa=c.Ga),0>c.aa&&(c.aa=0),c.ia=20,a.f.update(a.f.C|128),hb(a))}this.C=b;a.j.C&4&&X(a,2,this)}}(a)};a.j={C:0,read:function(){},
update:function(a){return function(b){void 0!==b&&(this.C=b&-193);X(a,3,this);a.h.update();a.v.update()}}(a)};a.w={C:0,read:function(){},update:function(a){return function(b){void 0!==b&&(3==(b&3)&&(a.g.C=14),this.C=b);a.g.update()}}(a)};a.g={C:14,read:function(){},update:function(a){return function(b){void 0===b&&(b=a.g.C);b&=-2;0<=a.b&&0<=a.c[a.b].ha&&(b|=1);this.C=b;X(a,16,this)}}(a)};a.o={C:0,read:function(a){return function(){ib(a)}}(a),update:function(a){return function(b){void 0!==b&&(this.C=
@ -142,17 +142,17 @@ function jb(a,b,c,d){if(d)a.F("disk load error ("+d+")");else{d=[];a.F("mounting
n=k.sectorData;Y(d,k,"sectorSig");Y(d,k,"sectorNum");Y(d,k,"sectorPages");for(m=0;m<n.length;m++)d.push(n[m]);kb(d,k,"sectorEndSig")}}else for(k=l[0],n=k.sectorData,Y(d,h,"trackLoad",2),Y(d,k,"sectorPages"),m=0;m<n.length;m++)d.push(n[m]);f[g].Xa=d}a.c[0].qa=f;a.F("mount of "+b+" complete")}else a.F("no available drives")}else a.F("no tracks: "+b);else a.F("no data: "+b)}catch(sb){a.F("disk data error: "+sb.message)}}}
function lb(a,b){b=b.trackNum;if(void 0===b)throw Error("missing bcd value: trackNum");a.push(Math.floor(b/10)<<4|b%10)}function Y(a,b,c,d){b=b[c];if(void 0===b)throw Error("missing binary value: "+c);2==d&&a.push(b>>8&255);a.push(b&255)}function kb(a,b,c){b=b[c];if(void 0===b)throw Error("missing signature: "+c);for(c=0;c<b.length;c++)a.push(b.charCodeAt(c))}
function mb(a,b,c){b&=63;16>b?b&=3:32>b&&(b&=17);switch(b){case 0:a=a.i.C&4?a.f:a.s;break;case 1:a=a.i;break;case 2:a=a.j.C&4?a.h:a.v;break;case 3:a=a.j;break;case 16:a=c?a.w:a.g;break;case 17:a=a.o;break;default:a=a.A}return a}e.X=function(a,b){void 0!==b&&mb(this,a-this.m,!1).read()};e.Za=function(a,b){void 0!==b&&(b=this.G.X(a),mb(this,a-this.m,!0).update(b))};function gb(a,b,c){var d=-1;void 0!==b&&void 0!==c&&(d=0,c&32||(d|=2),a.f.C&64||(d|=1));a.b!=d&&(a.b=d,a.g.update())}
function hb(a){0<=a.b&&(a.c[a.b].ha=-1,a.o.update(255),a.g.update())}function ib(a){var b;if(0<=a.b){b=a.c[a.b];var c=b.qa[b.aa];void 0!==c&&(0<=b.ha&&b.ha<c.Xa.length?(b.ia=100,b=c.Xa[b.ha++],a.o.update(b),a.g.update()):(b.ia=10,hb(a)))}}function X(a,b,c){a.G.a[b+a.m]=c.C}x(function(){for(var a=I(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new eb(d);H(d,c)}});function Z(a,b){D.call(this,"C1PComputer",a);this.P=b}q(Z,D);
Z.prototype.reset=function(a){var b=null,c;for(c in this.P)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.reset&&(f.reset(),"cpu"==c&&(b=f))}b&&(b.update(),a&&P(b))};Z.prototype.start=function(){for(var a in this.P)if("cpu"!=a)for(var b=0;b<this.P[a].length;b++){var c=this.P[a][b];c&&c.start&&c.start()}};Z.prototype.stop=function(a,b){for(var c in this.P)if("cpu"!=c)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.stop&&f.stop(a,b)}};
Z.prototype.L=function(a,b,c){switch(b){case "reset":return this.B[b]=c,c.onclick=function(a){return function(){a.reset()}}(this),!0}return!1};function N(a,b){return a.P[b]?a.P[b][0]:null}function nb(a){var b=null,c;for(c in a.P)for(var d=0;d<a.P[c].length;d++){var f=a.P[c][d];if(f){if(!K(f)){K(f,function(a){return function(){nb(a)}}(a));return}"cpu"==c?b=f:f.$&&f.$(!0,a)}}a.R();a.F("C1Pjs v1.35.1\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>");b&&b.$(!0,a)}
x(function(){for(var a=I(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=G(c),f,g={},h,l=0,k=0,n=0;n<d.modules.length;n++){var m=d.modules[n];if(!n){if("cpu"!=m.type)break;l=m.start;k=m.end;h=Array(k+1-l);for(f=l;f<h.length;f++)h[f]=0}if(f=F(m.refID,d.id)){var p=m.type;void 0===g[p]&&(g[p]=[]);g[p].push(f);f.Y&&void 0!==m.start&&f.Y(h,m.start,m.end,g.cpu[0])}else{B('no component for <module refid="'+m.refID+'">');return}}if(!h){B('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(f=F("debugger",d.id))g["debugger"]=[f],f.Y&&f.Y(h,l,k,g.cpu[0]);l=new Z(d,g);if(k=F("panel",d.id))if(g.panel=[k],k.sa){f=d.id;d=void 0;g=[];f&&(f=0<(d=f.indexOf("."))?f.substr(0,d+1):"");for(d=0;d<E.length;d++)n=E[d],f&&n.id.indexOf(f)||g.push(n);d=g;for(g=0;g<d.length;g++)f=d[g],f!=k&&(f.ta=k.ta,f.F=k.F,f.sa=k.sa)}H(l,c);nb(l)}});var ob=0;function pb(a,b,c,d,f,g){f("Loading "+a+"...");v(a,function(h,l,k){k?(l||(l="unable to load "+a+" ("+k+")"),g(l,null)):qb(l,a,b,c,d,f,g)})}
function qb(a,b,c,d,f,g,h){function l(a,g){if(g)h(g,null);else{c&&(L[c]&&b&&(L[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
function hb(a){0<=a.b&&(a.c[a.b].ha=-1,a.o.update(255),a.g.update())}function ib(a){var b;if(0<=a.b){b=a.c[a.b];var c=b.qa[b.aa];void 0!==c&&(0<=b.ha&&b.ha<c.Xa.length?(b.ia=100,b=c.Xa[b.ha++],a.o.update(b),a.g.update()):(b.ia=10,hb(a)))}}function X(a,b,c){a.G.a[b+a.m]=c.C}x(function(){for(var a=J(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=H(c),d=new eb(d);I(d,c)}});function Z(a,b){E.call(this,"C1PComputer",a);this.P=b}q(Z,E);
Z.prototype.reset=function(a){var b=null,c;for(c in this.P)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.reset&&(f.reset(),"cpu"==c&&(b=f))}b&&(b.update(),a&&za(b))};Z.prototype.start=function(){for(var a in this.P)if("cpu"!=a)for(var b=0;b<this.P[a].length;b++){var c=this.P[a][b];c&&c.start&&c.start()}};Z.prototype.stop=function(a,b){for(var c in this.P)if("cpu"!=c)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.stop&&f.stop(a,b)}};
Z.prototype.L=function(a,b,c){switch(b){case "reset":return this.B[b]=c,c.onclick=function(a){return function(){a.reset()}}(this),!0}return!1};function O(a,b){return a.P[b]?a.P[b][0]:null}function nb(a){var b=null,c;for(c in a.P)for(var d=0;d<a.P[c].length;d++){var f=a.P[c][d];if(f){if(!L(f)){L(f,function(a){return function(){nb(a)}}(a));return}"cpu"==c?b=f:f.$&&f.$(!0,a)}}a.R();a.F("C1Pjs v1.35.1\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>");b&&b.$(!0,a)}
x(function(){for(var a=J(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=H(c),f,g={},h,l=0,k=0,n=0;n<d.modules.length;n++){var m=d.modules[n];if(!n){if("cpu"!=m.type)break;l=m.start;k=m.end;h=Array(k+1-l);for(f=l;f<h.length;f++)h[f]=0}if(f=G(m.refID,d.id)){var p=m.type;void 0===g[p]&&(g[p]=[]);g[p].push(f);f.Y&&void 0!==m.start&&f.Y(h,m.start,m.end,g.cpu[0])}else{B('no component for <module refid="'+m.refID+'">');return}}if(!h){B('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(f=G("debugger",d.id))g["debugger"]=[f],f.Y&&f.Y(h,l,k,g.cpu[0]);l=new Z(d,g);if(k=G("panel",d.id))if(g.panel=[k],k.sa){f=d.id;d=void 0;g=[];f&&(f=0<(d=f.indexOf("."))?f.substr(0,d+1):"");for(d=0;d<F.length;d++)n=F[d],f&&n.id.indexOf(f)||g.push(n);d=g;for(g=0;g<d.length;g++)f=d[g],f!=k&&(f.ta=k.ta,f.F=k.F,f.sa=k.sa)}I(l,c);nb(l)}});var ob=0;function pb(a,b,c,d,f,g){f("Loading "+a+"...");v(a,function(h,l,k){k?(l||(l="unable to load "+a+" ("+k+")"),g(l,null)):qb(l,a,b,c,d,f,g)})}
function qb(a,b,c,d,f,g,h){function l(a,g){if(g)h(g,null);else{c&&(M[c]&&b&&(M[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),d=d.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1C1Pjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1c1pjs$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(m){g=null,a=m.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?rb(a,g,l):l(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function rb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");v(f,function(g,h,l){if(l||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+l+")");else{if(g=d[3])if(l=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=l[0],n,m=/( [a-z]+=)(['"])(.*?)\2/g;n=m.exec(g);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);l[0]!=k&&(h=h.replace(l[0],k))}else{c(a,"missing <"+d[1]+"> in "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],h);rb(a,b,c)}})}else c(a,null)}
function tb(a,b,c){function d(a){if(void 0===h){var b=g&&I(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ia(a))}function f(a){d("Error: "+a);l&&(--ob||C(!0));l=!1}var g,h,l=!0;ob++;L[a]={};try{if(g=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],m=document.createElement("style");m.type="text/css";m.styleSheet?m.styleSheet.cssText=k:m.appendChild(document.createTextNode(k));n.appendChild(m)}c||(c=
"/versions/c1pjs/1.35.1/components.xsl");k=function(h,k){k?pb(c,null,null,!1,d,function(h,l){l?(L[a]&&c&&(L[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--ob||C(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(h=new XSLTProcessor,h.importStylesheet(l),(l=h.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--ob||C(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(h)}):f(h)};"<"!=b.charAt(0)?pb(b,a,void 0,!0,d,k):qb(b,null,a,void 0,!1,d,k)}else f("missing machine element: "+a)}catch(p){f(p.message)}return l}window.embedC1P=function(a,b,c){C(!1);return tb(a,b,c)};window.findMachineComponent=function(a,b){return qa(b,a+".machine")};
window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!J[a]){for(var c=!0,d=J,f=a,g=b.length,h=[],l=[],k="",n=null,m=0;m<g;m++){var p=b[m];if('"'==p||"'"==p)n&&p!=n?k+=p:(n?n=null:n=p,k&&(l.push(k),k=""));else{if(!n){if("\r"==p||"\n"==p)p=";";if(" "==p||"\t"==p||";"==p){k&&(l.push(k),k="");";"==p&&l.length&&(h.push(l),l=[]);continue}}k+=p}}k&&l.push(k);l.length&&h.push(l);d[f]=h;ra(a)||(c=!1)}return c};window.enableEvents=C;window.sendEvent=na;})();//# sourceMappingURL=/versions/c1pjs/1.35.1/c1p.map
function tb(a,b,c){function d(a){if(void 0===h){var b=g&&J(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ia(a))}function f(a){d("Error: "+a);l&&(--ob||C(!0));l=!1}var g,h,l=!0;ob++;M[a]={};try{if(g=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],m=document.createElement("style");m.type="text/css";m.styleSheet?m.styleSheet.cssText=k:m.appendChild(document.createTextNode(k));n.appendChild(m)}c||(c=
"/versions/c1pjs/1.35.1/components.xsl");k=function(h,k){k?pb(c,null,null,!1,d,function(h,l){l?(M[a]&&c&&(M[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--ob||C(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(h=new XSLTProcessor,h.importStylesheet(l),(l=h.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--ob||C(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(h)}):f(h)};"<"!=b.charAt(0)?pb(b,a,void 0,!0,d,k):qb(b,null,a,void 0,!1,d,k)}else f("missing machine element: "+a)}catch(p){f(p.message)}return l}window.embedC1P=function(a,b,c){C(!1);return tb(a,b,c)};window.findMachineComponent=function(a,b){return pa(b,a+".machine")};
window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!K[a]){for(var c=!0,d=K,f=a,g=b.length,h=[],l=[],k="",n=null,m=0;m<g;m++){var p=b[m];if('"'==p||"'"==p)n&&p!=n?k+=p:(n?n=null:n=p,k&&(l.push(k),k=""));else{if(!n){if("\r"==p||"\n"==p)p=";";if(" "==p||"\t"==p||";"==p){k&&(l.push(k),k="");";"==p&&l.length&&(h.push(l),l=[]);continue}}k+=p}}k&&l.push(k);l.length&&h.push(l);d[f]=h;qa(a)||(c=!1)}return c};window.enableEvents=C;window.sendEvent=na;})();//# sourceMappingURL=/versions/c1pjs/1.35.1/c1p.map

File diff suppressed because one or more lines are too long

View file

@ -46,9 +46,10 @@ f,e))});if(b&&"object"==typeof b){var k="",p;for(p in b)b.hasOwnProperty(p)&&(k&
function Ga(a,b){var c,d={la:null,ra:null,Qa:null,Ia:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,f,g;if("<"==b.substr(0,1))throw Error(b);g=0>b.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.Qa=g.load;d.Ia=g.exec;if(e=g.bytes)d.la=e;else if(e=g.words)for(d.la=Array(2*e.length),f=c=0;c<e.length;c++)d.la[f++]=e[c]&255,d.la[f++]=e[c]>>8&255;else if(e=g.longs)for(d.la=Array(4*e.length),f=c=0;c<e.length;c++)d.la[f++]=
e[c]&255,d.la[f++]=e[c]>>8&255,d.la[f++]=e[c]>>16&255,d.la[f++]=e[c]>>24&255;else(e=g.data)?d.Of=e:d.la=g;d.la&&(d.la.length?1==d.la.length&&(r(d.la[0]),d=null):(r("Empty resource: "+a),d=null));d.ra=g.symbols}catch(h){r("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){r("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.la=e)}return d}
function ta(){return"http://"+(window?window.location.host:"www.pcjs.org")}function Ha(){return window?window.navigator.userAgent:""}function Ia(){if(null==Ja){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Ja=a}return Ja}function Ka(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function La(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Oa(a){if(window){var b=Ha();return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function Pa(a){if(!Qa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Qa=c}return Qa[a]}
function Ra(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}function Sa(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function Ta(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}
function Ua(a){Va.init.push(a)}function Wa(a){if(Xa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ya("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Za(a){!Xa&&a?(Xa=!0,$a&&db("init"),eb&&db("show")):Xa=a}function db(a){Va[a]&&Wa(Va[a])}var Qa=null,Va={init:[],show:[],exit:[]},$a=!1,eb=!1,Xa=!0,Ja=null;Ta("onload",function(){$a=!0;Wa(Va.init)});Ta("onpageshow",function(){eb=!0;Wa(Va.show)});
function La(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Oa(a){if(window){var b=Ha();return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Pa(a){if(!Qa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Qa=c}return Qa[a]||Qa[a.toLowerCase()]}function Ra(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Sa(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function Ta(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ua(a){Va.init.push(a)}
function Wa(a){if(Xa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ya("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Za(a){!Xa&&a?(Xa=!0,$a&&db("init"),eb&&db("show")):Xa=a}function db(a){Va[a]&&Wa(Va[a])}var Qa=null,Va={init:[],show:[],exit:[]},$a=!1,eb=!1,Xa=!0,Ja=null;Ta("onload",function(){$a=!0;Wa(Va.init)});Ta("onpageshow",function(){eb=!0;Wa(Va.show)});
Ta(Oa("Opera")||Oa("iOS")?"onunload":"onbeforeunload",function(){Wa(Va.exit)});function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.wc=b.comment;this.Bd=b;this.exports={};this.P=this.bindings={};a=this.id.indexOf(".");0>a?this.cb=this.id:(this.eb=this.id.substr(0,a),this.cb=this.id.substr(a+1));this.F={ready:!1,mb:!1,Ib:!1,ja:!1,Rb:!1,error:!1};this.zb=null;this.F.error=!1;this.ha=c||0;this.K=this.w=this.I=this.R=this.ua=null;fb.push(this)}
function gb(a,b,c){hb[a]&&b&&(hb[a][b]=c)}function ib(){return Date.now()||+new Date}function Ya(a,b,c){b||r((c?c+": ":"")+a)}function r(a){window&&window.alert(a)}function jb(a){var b=!1;window&&(b=window.confirm(a));return b}function kb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<fb.length;b++){var d=fb[b];a&&d.id.indexOf(a)||c.push(d)}return c}function lb(a){if(void 0!==a){var b;for(b=0;b<fb.length;b++)if(fb[b].id===a)return fb[b]}return null}
function mb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<fb.length;d++)if(c)c==fb[d]&&(c=null);else if(!(a!=fb[d].type||b&&fb[d].id.indexOf(b)))return fb[d]}return null}function ob(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}
@ -91,7 +92,7 @@ function Rc(a,b,c){var d=!1;if(void 0!==b){.8>a.Y/a.Z?b=1:d=!0;a.U=b;b=a.Ta*a.U;
l.tb=function(a){if(Bb(this,!0)){if(!this.F.ma){Rc(this);this.R&&this.R.start(this.W,Qc(this));this.F.ma=!0;this.F.Qb=!0;this.V&&this.V.start();var b=this.P.run;b&&(b.textContent="Halt");this.R&&(Yc(this.R,!0),a&&this.R.Za(!0))}this.Va>=this.Aa&&Tc(this,!0);this.Da=0;this.Ma=ib();this.ba&&(a=this.Ma-this.ba,a>this.jb&&(this.W+=a,this.W>this.Ma&&(this.W=this.Ma)));try{do{for(var c,d=this.F.Wa?1:this.Na,e=this.T.length-1;0<=e;e--){var f=this.T[e];0>f[0]||d>f[0]&&(d=f[0])}c=d;this.Eb(c);c=Xc(this,!0);
this.Da+=c;this.X+=c;Pc(this,c);a=c;for(var g=this.T.length-1;0<=g;g--){var h=this.T[g];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.ta-=c;if(0>=this.ta){this.ta+=this.Na;++this.kb>=Zc&&(this.R&&Yc(this.R),this.kb=0);break}}while(this.F.ma)}catch(k){this.ea();Oc(this);this.R&&this.R.stop(ib(),Qc(this));Bb(this,!1);xb(this,k.stack||k.message);return}c=setTimeout;d=this.Db;this.ba=ib();e=this.jb;this.Da&&(e=Math.round(e*this.Da/this.Na));e-=this.ba-this.Ma;if(f=this.ba-this.W)this.Y=Math.round(this.X/
(10*f))/100,864E5<=f&&(this.ka=0,Rc(this));if(0>e||this.Y<this.Z)-1E3>e&&(this.W-=e),e=0;this.Va+=this.Da;this.ba+=e;c(d,e)}else Oc(this),this.R&&this.R.stop(ib(),Qc(this))};l.Eb=function(){return 0};l.ea=function(a){Ab(this,!0);Xc(this);Sc(this,this.X);this.X=0;if(this.F.ma){this.F.ma=!1;this.V&&this.V.stop();var b=this.P.run;b&&(b.textContent="Run")}this.F.complete=a};function Oc(a,b){if(a.R){for(var c=a.R,d=0;d<c.A.length;d++)$c(c.A[d],b);Yc(a.R,b)}}var Uc=30,Zc=15,Ic=["power","reset"];
function ad(a){var b=+a.model||8080;Hc.call(this,a,1E6);this.xb=b;this.gb=bd;Kc(this);this.F.complete=this.F.Ad=!1;this.ib=0;this.La=[];this.hb=0;od(this)}aa(ad,Hc);function pd(a,b){a.La.push(b)}l=ad.prototype;l.reset=function(){this.F.ma&&this.ea();od(this);Kc(this);this.F.error=!1;Hc.prototype.reset.call(this)};function od(a){a.g=0;a.u=0;a.A=0;a.B=0;a.C=0;a.D=0;a.G=0;a.M=0;A(a,a.hb);qd(a,0);a.S=0}function rd(a,b){a.hb=b;A(a,b)}
function ad(a){var b=+a.model||8080;Hc.call(this,a,1E6);this.xb=b;this.gb=bd;Kc(this);this.F.complete=this.F.Ad=!1;this.ib=0;this.La=[];this.hb=0;cd(this)}aa(ad,Hc);function pd(a,b){a.La.push(b)}l=ad.prototype;l.reset=function(){this.F.ma&&this.ea();cd(this);Kc(this);this.F.error=!1;Hc.prototype.reset.call(this)};function cd(a){a.g=0;a.u=0;a.A=0;a.B=0;a.C=0;a.D=0;a.G=0;a.M=0;A(a,a.hb);qd(a,0);a.S=0}function rd(a,b){a.hb=b;A(a,b)}
l.Fc=function(){var a=this.g+this.u+this.A+this.B+this.C+this.D+this.G|0;return a=a+this.M+this.j+sd(this)|0};l.save=function(){var a=new td(this);a.set(0,[this.g,this.u,this.A,this.B,this.C,this.D,this.G,this.M,this.j,sd(this)]);a.set(1,[this.S,this.ka,this.U]);a.set(2,Zb(this.I));return a.data()};
l.restore=function(a){var b=a[0];this.g=b[0];this.u=b[1];this.A=b[2];this.B=b[3];this.C=b[4];this.D=b[5];this.G=b[6];this.M=b[7]&65535;A(this,b[8]);qd(this,b[9]);b=a[1];this.S=b[0];this.ka=b[1];Rc(this,b[3]);a:{b=this.I;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.O){for(var f=0,g=Array(b.O),h=0;h<e.length-1;)for(var k=e[h++],p=e[h++];k--;)g[f++]=p;e=g}f=b.b[d];if(!f||!f.restore(e)){r("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
l.da=function(a,b,c){switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.P[b]=c;this.ib++;a=!0;break;default:a=Hc.prototype.da.call(this,a,b,c)}return a};function ud(a){return a.u<<8|a.A}function vd(a,b){a.u=b>>8&255;a.A=b&255}function wd(a){return a.B<<8|a.C}function xd(a,b){a.B=b>>8&255;a.C=b&255}function D(a){return a.D<<8|a.G}
@ -254,12 +255,12 @@ a.i("\tbl\tlist all breakpoints"),a.i("\tbn [n]\tbreak after [n] instruction(s)"
"i"==T?a.i("breakpoint "+($b(a.I,L.J)?"enabled":"cleared")+": port "+w+" (input)"):"o"==T?a.i("breakpoint "+(dc(a.I,L.J)?"enabled":"cleared")+": port "+w+" (output)"):null!=L.J&&(Zg(a,L,C),"p"==T?a.Pa(a.j,L):"r"==T?a.Pa(a.M,L):"w"==T?a.Pa(a.B,L):a.i("unknown breakpoint command: "+T))}}}break;case "c":a.ua&&(a.ua.value="");break;case "d":a:{var ja,ua=f[0],na=f[1],Ma=f[2],hc=f[3];if("?"==na){var Pb="";for(ja in Hb)a.ka[ja]&&(Pb&&(Pb+=","),Pb+=ja);Pb+=",state,symbols";a.i("dump memory commands:");a.i("\tdb [a] [#] dump # bytes at address a");
a.i("\tdw [a] [#] dump # words at address a");a.i("\tdd [a] [#] dump # dwords at address a");a.i("\tdh [#] [#] dump # instructions from history");Pb.length&&a.i("dump extension commands:\n\t"+Pb)}else if("state"==na){var re=ei(a.R,!0);"console"==Ma?console.log(re):(a.ua&&(a.ua.value=""),re&&a.i(re))}else if("symbols"==na)for(var se=0;se<a.C.length;se++){var te=a.C[se],Qb;for(Qb in te.ra)if("."!=Qb.charAt(0)){var zg=te.ra[Qb].o;if(void 0!==zg){var Ag=te.ra[Qb].l;Ag&&(Qb=Ag);a.i($g(zg)+" "+
Qb)}}}else{if("d"==ua){for(ja in Hb)if(f[1]==ja){var Bg=a.ka[ja];Bg?(f.shift(),f.shift(),Bg(f)):a.i("no dump registered for "+na);break a}na||(ua=a.Da||"db")}else a.Da=ua;if("dh"==ua){var Cg=na,Dg=Ma,Eg="",Fg=0,Na=a.V,ab=a.H;if(ab.length){var Ba=+Cg||a.xa,mc=+Dg||10;isNaN(Ba)?Ba=mc:Eg="more ";Ba>ab.length&&(a.i("note: only "+ab.length+" available"),Ba=ab.length);Na-=Ba;0>Na&&(null==ab[ab.length-1].J?(Ba=Na+Ba,Na=0):Na+=ab.length);var ue=[];"call"==Dg&&(mc=1E5,ue=["CALL"]);for(void 0!==Cg&&a.i(Ba+
" instructions earlier:");0<mc&&Na!=a.V;){var Gg=ab[Na++];if(null==Gg.J)break;var nc=qg(Gg.J),Ii=Ba--,Hg=Dh(a,nc,"history",Ii);(!ue.length||0<=Hg.indexOf(ue[0]))&&a.i(Hg);nc.Jb&&(Na+=nc.Jb,mc-=nc.Jb,Ba-=nc.Jb);Na>=ab.length&&(Na=0);a.xa=Ba;Fg++;mc--}}Fg||(a.i("no "+Eg+"history available"),a.xa=void 0)}else{var cd=wg(a,na);if(cd){var dd=0;Ma&&("l"==Ma.charAt(0)&&(Ma=Ma.substr(1)||hc),dd=eg(a,Ma)>>>0,65536<dd&&(dd=65536));for(var oc="",ed="dd"==ua?4:"dw"==ua?2:1,fd=ed*dd||128,Ji=fd+15>>4||1;Ji--&&0<
fd;){var gd=0,ve=0,pc,we="",Ig="",na=$g(cd.J);for(pc=16;0<pc&&0<fd;pc--){var hd=a.Ha(cd,1),gd=gd|hd<<(ve++<<3);ve==ed&&(we+=n(gd,2*ed),we+=1==ed?9==pc?"-":" ":" ",gd=ve=0);Ig+=32<=hd&&128>hd?String.fromCharCode(hd):".";fd--}oc&&(oc+="\n");oc+=na+" "+we+(pc?"":" "+Ig)}oc&&a.i(oc);a.sa=cd}}}}break;case "e":if("else"==f[0])break;var id=1,Jg=255,Kg=a.Ha,Lg=a.Yb;"ew"==f[0]&&(id=2,Jg=65535,Kg=a.Gb,Lg=a.Rc);var Mg=id<<1,Ng=f[1];if(null==Ng)a.i("edit memory commands:"),a.i("\teb [a] [...] edit bytes at address a"),
a.i("\tew [a] [...] edit words at address a");else{var jd=wg(a,Ng);if(jd)for(var kd=2;kd<f.length;kd++){var qc=kg(a,f[kd]);if(void 0===qc){a.i("unrecognized value: "+f[kd]);break}qc&~Jg&&a.i("warning: "+n(qc)+" exceeds "+id+"-byte value");var Ki=Kg.call(a,jd);a.i("changing "+$g(jd.J)+" from "+n(Ki,Mg,!0)+" to "+n(qc,Mg,!0));Lg.call(a,jd,qc,id)}}break;case "f":Zh(a,f[1]);break;case "g":a:{var Og=f[1],Li=b;if(void 0!==Og){var xe=wg(a,Og,!0);if(!xe)break a;Zg(a,xe,Li);a.Pa(a.j,xe,!0)}uh(a,!0)||c||a.i("cpu busy or unavailable, run command ignored")}break;
case "h":a:{var ye;if(a.F.ma)ye="halting",a.ea();else{if(Ab(a,!0))break a;ye="already halted"}c||a.i(ye)}break;case "i":if("if"==f[0]){var ze;var rc=b.substr(2),rc=ya(rc);kg(a,rc)?(c||a.i("true: "+rc),ze=!0):(c||a.i("false: "+rc),ze=!1);ze||(d=!1);break}if("int"==f[0]){var ld;var Mi=f[1];if(a.w.N&512){var Ae=kg(a,Mi);null==Ae?ld=!1:(a.i("requesting interrupt level "+Ae),Rd(a.w,Ae),ld=!0)}else a.i("interrupts disabled (use rif=1 to enable)"),ld=!1;ld||(d=!1);break}var Be=f[1];if(Be&&"?"!=Be){var Ce=
eg(a,Be);if(void 0!==Ce){var Ni=bc(a.I,Ce);a.i(q(Ce)+": "+pa(Ni))}}else a.i("input commands:"),a.i("\ti [p]\tread port [p]"),a.i("warning: port accesses can affect hardware state");break;case "k":var Oi=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var De=0,Pg=qg(),sc=qg(a.w.M);for(a.i("stack trace for "+$g(sc.J));10>De;){for(var vb=null,Pi=256;65536>sc.J>>>0;){Pg.J=a.Gb(sc,2);if(null==sc.J||!Pi--)break;for(var Qi=a,md=Pg,
Qg=null,tc=md.J,Rg=tc,Ee=1;6>=Ee&&tc;Ee++){if(2<Ee){md.J=tc;var nd=Dh(Qi,md);if(0<=nd.indexOf("CALL")){var Sg=nd.indexOf(" ");if(tc+(nd.indexOf(" ",Sg+1)-Sg-1)/2==Rg){Qg=nd;break}}}tc--}md.J=Rg;if(vb=Qg)break}if(!vb||null==vb)break;var Tg=null;if("ks"==Oi){var Ug=vb.match(/[0-9A-F]+$/);Ug&&(Tg=ai(a,Ug[0]))}vb=xa(vb,50)+" ;"+(Tg||"stack="+$g(sc.J));a.i(vb);De++}De||a.i("no return addresses found")}break;case "l":"ln"==f[0]&&ai(a,f[1],!0);break;case "m":a:{var bb,cb=null,ba=f[1];"?"==ba&&(ba=void 0);
" instructions earlier:");0<mc&&Na!=a.V;){var Gg=ab[Na++];if(null==Gg.J)break;var nc=qg(Gg.J),Ii=Ba--,Hg=Dh(a,nc,"history",Ii);(!ue.length||0<=Hg.indexOf(ue[0]))&&a.i(Hg);nc.Jb&&(Na+=nc.Jb,mc-=nc.Jb,Ba-=nc.Jb);Na>=ab.length&&(Na=0);a.xa=Ba;Fg++;mc--}}Fg||(a.i("no "+Eg+"history available"),a.xa=void 0)}else{var dd=wg(a,na);if(dd){var ed=0;Ma&&("l"==Ma.charAt(0)&&(Ma=Ma.substr(1)||hc),ed=eg(a,Ma)>>>0,65536<ed&&(ed=65536));for(var oc="",fd="dd"==ua?4:"dw"==ua?2:1,gd=fd*ed||128,Ji=gd+15>>4||1;Ji--&&0<
gd;){var hd=0,ve=0,pc,we="",Ig="",na=$g(dd.J);for(pc=16;0<pc&&0<gd;pc--){var id=a.Ha(dd,1),hd=hd|id<<(ve++<<3);ve==fd&&(we+=n(hd,2*fd),we+=1==fd?9==pc?"-":" ":" ",hd=ve=0);Ig+=32<=id&&128>id?String.fromCharCode(id):".";gd--}oc&&(oc+="\n");oc+=na+" "+we+(pc?"":" "+Ig)}oc&&a.i(oc);a.sa=dd}}}}break;case "e":if("else"==f[0])break;var jd=1,Jg=255,Kg=a.Ha,Lg=a.Yb;"ew"==f[0]&&(jd=2,Jg=65535,Kg=a.Gb,Lg=a.Rc);var Mg=jd<<1,Ng=f[1];if(null==Ng)a.i("edit memory commands:"),a.i("\teb [a] [...] edit bytes at address a"),
a.i("\tew [a] [...] edit words at address a");else{var kd=wg(a,Ng);if(kd)for(var ld=2;ld<f.length;ld++){var qc=kg(a,f[ld]);if(void 0===qc){a.i("unrecognized value: "+f[ld]);break}qc&~Jg&&a.i("warning: "+n(qc)+" exceeds "+jd+"-byte value");var Ki=Kg.call(a,kd);a.i("changing "+$g(kd.J)+" from "+n(Ki,Mg,!0)+" to "+n(qc,Mg,!0));Lg.call(a,kd,qc,jd)}}break;case "f":Zh(a,f[1]);break;case "g":a:{var Og=f[1],Li=b;if(void 0!==Og){var xe=wg(a,Og,!0);if(!xe)break a;Zg(a,xe,Li);a.Pa(a.j,xe,!0)}uh(a,!0)||c||a.i("cpu busy or unavailable, run command ignored")}break;
case "h":a:{var ye;if(a.F.ma)ye="halting",a.ea();else{if(Ab(a,!0))break a;ye="already halted"}c||a.i(ye)}break;case "i":if("if"==f[0]){var ze;var rc=b.substr(2),rc=ya(rc);kg(a,rc)?(c||a.i("true: "+rc),ze=!0):(c||a.i("false: "+rc),ze=!1);ze||(d=!1);break}if("int"==f[0]){var md;var Mi=f[1];if(a.w.N&512){var Ae=kg(a,Mi);null==Ae?md=!1:(a.i("requesting interrupt level "+Ae),Rd(a.w,Ae),md=!0)}else a.i("interrupts disabled (use rif=1 to enable)"),md=!1;md||(d=!1);break}var Be=f[1];if(Be&&"?"!=Be){var Ce=
eg(a,Be);if(void 0!==Ce){var Ni=bc(a.I,Ce);a.i(q(Ce)+": "+pa(Ni))}}else a.i("input commands:"),a.i("\ti [p]\tread port [p]"),a.i("warning: port accesses can affect hardware state");break;case "k":var Oi=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var De=0,Pg=qg(),sc=qg(a.w.M);for(a.i("stack trace for "+$g(sc.J));10>De;){for(var vb=null,Pi=256;65536>sc.J>>>0;){Pg.J=a.Gb(sc,2);if(null==sc.J||!Pi--)break;for(var Qi=a,nd=Pg,
Qg=null,tc=nd.J,Rg=tc,Ee=1;6>=Ee&&tc;Ee++){if(2<Ee){nd.J=tc;var od=Dh(Qi,nd);if(0<=od.indexOf("CALL")){var Sg=od.indexOf(" ");if(tc+(od.indexOf(" ",Sg+1)-Sg-1)/2==Rg){Qg=od;break}}}tc--}nd.J=Rg;if(vb=Qg)break}if(!vb||null==vb)break;var Tg=null;if("ks"==Oi){var Ug=vb.match(/[0-9A-F]+$/);Ug&&(Tg=ai(a,Ug[0]))}vb=xa(vb,50)+" ;"+(Tg||"stack="+$g(sc.J));a.i(vb);De++}De||a.i("no return addresses found")}break;case "l":"ln"==f[0]&&ai(a,f[1],!0);break;case "m":a:{var bb,cb=null,ba=f[1];"?"==ba&&(ba=void 0);
if(void 0!==ba){var nb=0;if("all"==ba)nb=1878917119,ba=null;else if("on"==ba)cb=!0,ba=null;else if("off"==ba)cb=!1,ba=null;else{"keys"==ba&&(ba="key");"kbd"==ba&&(ba="keyboard");for(bb in Hb)if(ba==bb){nb=Hb[bb];cb=!!(a.ha&nb);break}if(!nb){a.i("unknown message category: "+ba);break a}}if(nb)if("on"==f[2])a.ha|=nb,cb=!0;else if("off"==f[2]&&(a.ha&=~nb,cb=!1,1073741824==nb)){for(var Fe=0;Fe<a.Z.length;Fe++)a.i(a.Z[Fe]);a.Z=[]}}var Ri=0,uc="";for(bb in Hb)if(!ba||ba==bb){var Si=!!(a.ha&Hb[bb]);if(null===
cb||cb==Si)uc&&(uc+=","),++Ri%10||(uc+="\n\t"),"key"==bb&&(bb="keys"),uc+=bb}void 0===ba&&a.i("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.i((null!==cb?cb?"messages on: ":"messages off: ":"message categories:\n\t")+(uc||"none"));sg(a)}break;case "o":var Ge=f[1],Ti=f[2];if(Ge&&"?"!=Ge){var He=eg(a,Ge,"port #"),Ie=eg(a,Ti);void 0!==He&&void 0!==Ie&&(fc(a.I,He,Ie),a.i(q(He)+": "+pa(Ie)))}else a.i("output commands:"),a.i("\to [p] [b]\twrite byte [b] to port [p]"),a.i("warning: port accesses can affect hardware state");
break;case "p":if("print"==f[0]){ci(a,b.substr(5));break}var Vg="pr"==f[0]?1:0,Ui=1+Vg;if(a.O)a.i("step in progress");else{var Je=qg(a.w.j);switch(a.Ha(Je)){case 205:a.O=Ui,yg(Je,3)}a.O?(a.Pa(a.j,Je,!0),uh(a)||(a.R&&a.R.Za(),a.O=0)):di(a,Vg?"tr":"t")}break;case "r":if("reset"==b){a.R&&a.R.reset();break}wh(a,f);break;case "s":bi(a,f);break;case "t":di(a,f[0],f[1]);break;case "u":xh(a,f[1],f[2],8);break;case "v":if("var"==f[0]){$h(a,b.substr(3))||(d=!1);break}a.i("PC8080 version 1.35.1 ("+a.w.xb+",RELEASE"+
@ -297,11 +298,11 @@ Va.exit.push(function(){for(var a=qb(document,"pc8080","computer"),b=0;b<a.lengt
function pi(a,b){return b?(a.g=b,a.w=!0,a.I=!1,!0):a.w?!0:Ia()&&(b=Ka(a.key))?(a.g=b,a.w=!0):!1}function ui(a){var b=!0;if(!a.I)try{a.b=JSON.parse(a.g),a.I=!0}catch(c){r(c.message||c),b=!1}return b}function Ci(a){var b=!0;if(Ia()){var c=JSON.stringify(a.b);La(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}l.toString=function(){return this.b?JSON.stringify(this.b):this.g};function Bi(a,b){a.g="";a.b={};a.w=a.I=!1;b&&a.set("parms",b)}
l.clear=function(a){Bi(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Yi(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Zi=0;
function $i(a,b,c,d,e,f){e("Loading "+a+"...");Fa(a,null,!0,function(g,h,k){k?(h||(h="unable to load "+a+" ("+k+")"),f(h,null)):aj(h,a,b,c,d,e,f)})}
function aj(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{c&&(gb(c,b,a),(f=b)&&0>f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+f+'"}',"object"==typeof resources&&(f=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(f?' url="'+f+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PC8080$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));f=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(u){f=null,a=u.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,f)}}a?e?bj(a,f,h):h(a,null):g("no data"+(b?" for file: "+b:""),
null)}
function bj(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");Fa(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],p,u=/( [a-z]+=)(['"])(.*?)\2/g;p=u.exec(f);)k=0>k.indexOf(p[1])?k.replace(">",p[0]+">"):k.replace(new RegExp(p[1]+"(['\"])(.*?)\\1"),p[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],g);bj(a,b,c)}})}else c(a,null)}
function aj(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{c&&(gb(c,b,a),(f=b)&&0>f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+f+'"}',"object"==typeof resources&&(f=null),d=d.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(f?' url="'+f+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PC8080$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));f=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(u){f=null,a=u.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,f)}}a?e?bj(a,f,h):h(a,null):g("no data"+(b?" for file: "+
b:""),null)}
function bj(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");Fa(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],p,u=/( [a-z]+=)(['"])(.*?)\2/g;p=u.exec(f);)k=0>k.indexOf(p[1])?k.replace(">",p[0]+">"):k.replace(new RegExp(p[1]+"(['\"])(.*?)\\1"),p[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);bj(a,b,c)}})}else c(a,null)}
function cj(a,b,c,d){function e(a){if(void 0===h){var b=g&&qb(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=va(a))}function f(a){e("Error: "+a);k&&(--Zi||Za(!0));k=!1}var g,h,k=!0;Zi++;hb[a]={};try{if(g=document.getElementById(a)){var p;if("object"==typeof resources&&(p=resources.css)){var u=document.head||document.getElementsByTagName("head")[0],v=document.createElement("style");v.type="text/css";v.styleSheet?v.styleSheet.cssText=p:v.appendChild(document.createTextNode(p));u.appendChild(v)}c||
(c="/versions/pc8080/1.35.1/components.xsl");p=function(d,h){h?$i(c,null,null,!1,e,function(d,k){k?(gb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(k=h.transformNode(k))?(g.outerHTML=k,--Zi||Za(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(k),(k=d.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(k,g),--Zi||Za(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?$i(b,a,d,!0,e,p):aj(b,null,a,d,!1,e,p)}else f("missing machine element: "+a)}catch(B){f(B.message)}return k}window.embedPC8080=function(a,b,c,d){Za(!1);return cj(a,b,c,d)};window.findMachineComponent=function(a,b){return mb(b,a+".machine")};

File diff suppressed because one or more lines are too long

View file

@ -1249,18 +1249,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -1278,9 +1283,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -1293,14 +1310,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();
@ -2042,6 +2062,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -2050,7 +2072,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**
@ -24835,6 +24857,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

View file

@ -46,7 +46,7 @@ function va(a,b){var c,d={T:null,sa:null,Aa:null,ta:null};if("["==b.charAt(0)||"
e[c]&255,d.T[f++]=e[c]>>8&255,d.T[f++]=e[c]>>16&255,d.T[f++]=e[c]>>24&255;else(e=g.data)?d.jf=e:d.T=g;d.T&&(d.T.length?1==d.T.length&&(r(d.T[0]),d=null):(r("Empty resource: "+a),d=null));d.sa=g.symbols}catch(h){r("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){r("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.T=e)}return d}
function oa(){return"http://"+(window?window.location.host:"www.pcjs.org")}function wa(){if(null==ya){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ya=a}return ya}function za(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function Aa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ba(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Ca(a){if(!Da){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Da=c}return Da[a]}function Ea(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Fa(a){Ga.init.push(a)}
function Ca(a){if(!Da){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Da=c}return Da[a]||Da[a.toLowerCase()]}function Ea(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Fa(a){Ga.init.push(a)}
function Ha(a){if(Ia)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ja("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Ka(a){!Ia&&a?(Ia=!0,La&&Ma("init"),Na&&Ma("show")):Ia=a}function Ma(a){Ga[a]&&Ha(Ga[a])}var Da=null,Ga={init:[],show:[],exit:[]},La=!1,Na=!1,Ia=!0,ya=null;Ea("onload",function(){La=!0;Ha(Ga.init)});Ea("onpageshow",function(){Na=!0;Ha(Ga.show)});
Ea(Ba("Opera")||Ba("iOS")?"onunload":"onbeforeunload",function(){Ha(Ga.exit)});function t(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Ub=b.comment;this.Vc=b;this.exports={};this.w=this.bindings={};a=this.id.indexOf(".");0>a?this.Ya=this.id:(this.Ka=this.id.substr(0,a),this.Ya=this.id.substr(a+1));this.i={ready:!1,ab:!1,nb:!1,V:!1,rb:!1,error:!1};this.eb=null;this.i.error=!1;this.J=this.m=this.u=this.D=this.pa=null;u.push(this)}
function Oa(a,b,c){Pa[a]&&b&&(Pa[a][b]=c)}function Qa(){return Date.now()||+new Date}function Ja(a,b,c){b||r((c?c+": ":"")+a)}function r(a){window&&window.alert(a)}function Ra(a){var b=!1;window&&(b=window.confirm(a));return b}function Sa(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<u.length;b++){var d=u[b];a&&d.id.indexOf(a)||c.push(d)}return c}function Ta(a){if(void 0!==a){var b;for(b=0;b<u.length;b++)if(u[b].id===a)return u[b]}return null}
@ -65,7 +65,7 @@ var db="undefined"!==typeof ArrayBuffer,eb=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function fb(a){t.call(this,"Panel",a)}l(fb,t);fb.prototype.S=function(a,b,c,d){return this.D&&this.D.S(a,b,c,d)||this.m&&this.m.S(a,b,c,d)||this.h&&this.h.S(a,b,c,d)?!0:t.prototype.S.call(this,a,b,c,d)};fb.prototype.qa=function(a,b,c,d){this.D=a;this.u=b;this.m=c;this.J=d;this.h=gb(a,"Keyboard")};fb.prototype.ca=function(a,b){b||hb();return!0};fb.prototype.ba=function(){return!0};
function hb(){for(var a=!1,b=A(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=y(d),f=Ta(e.id);f||(a=!0,f=new fb(e));Va(f,d);a&&B(f)}}Fa(hb);
function ib(a,b,c){t.call(this,"Bus",a);this.m=b;this.J=c;this.s=a.busWidth||16;this.v=Math.pow(2,this.s);this.g=this.v-1|0;this.b=(this.s>>1)+2;10>this.b&&(this.b=10);15<this.b&&(this.b=15);this.c=1<<this.b;this.A=this.c>>2;this.f=this.c-1;this.h=this.v/this.c|0;this.o=this.h-1;this.j=[];this.l=[];this.B=[];this.C=[];a=new C;jb(a,this.J);this.a=Array(this.h);for(b=0;b<this.h;b++)this.a[b]=a;B(this)}l(ib,t);ib.prototype.reset=function(){};ib.prototype.ca=function(a,b){b||this.reset();return!0};
function kb(a,b,c,d){for(var e=b,f=c,g=e>>>a.b;0<f&&g<a.a.length;){var h=a.a[g],m=g*a.c,q=a.c-(e-m);q>f&&(q=f);if(h&&h.size){if(h.type==d){if(e+f<=h.Ra)return h.ib+=h.Ra-e,h.Ra=e,!0;if(e>=h.Ra+h.ib){q=h.size-(e-m);q>f&&(q=f);h.ib=e-h.Ra+q;e=m+a.c;f-=q;g++;continue}}return lb(mb,e,f)}e=new C(e,q,a.c,d);jb(e,a.J,h);a.a[g++]=e;e=m+a.c;f-=q}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+nb[d]+" at "+p(b,4,!0)),!0):lb(ob,b,c)}function qb(a,b){return a.a[(b&a.g)>>>a.b].hb(b&a.f,b)}
function kb(a,b,c,d){for(var e=b,f=c,g=e>>>a.b;0<f&&g<a.a.length;){var h=a.a[g],m=g*a.c,q=a.c-(e-m);q>f&&(q=f);if(h&&h.size){if(h.type==d){if(e+f<=h.Ra)return h.ib+=h.Ra-e,h.Ra=e,!0;if(e>=h.Ra+h.ib){q=h.size-(e-m);q>f&&(q=f);h.ib=e-h.Ra+q;e=m+a.c;f-=q;g++;continue}}return lb(mb,e,f)}e=new C(e,q,a.c,d);jb(e,a.J,h);a.a[g++]=e;e=m+a.c;f-=q}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+nb[d]+" at "+p(b,4,!0)),!0):lb(ob,b,c)}function pb(a,b){return a.a[(b&a.g)>>>a.b].hb(b&a.f,b)}
function rb(a,b){var c=b&a.f,d=(b&a.g)>>>a.b;return c!=a.f?a.a[d].Fd(c,b):a.a[d++].Ua(c,b)|a.a[d&a.o].Ua(0,b+1)<<8}function sb(a,b,c){a.a[(b&a.g)>>>a.b].hc(b&a.f,c&255,b)}function tb(a,b,c){var d=b&a.f,e=(b&a.g)>>>a.b;d!=a.f?a.a[e].Td(d,c&65535,b):(a.a[e++].Va(d,c&255,b),a.a[e&a.o].Va(0,c>>8&255,b+1))}
function ub(a){for(var b=0,c=[],d=0;d<a.h;d++){var e=a.a[d];if(e.ja||e.$b){c[b++]=d;var f=b++;if(e=e.save()){for(var g=0,h=0,m=[];g<e.length;){for(var q=e[g],x=g+1;x<e.length&&e[x]===q;)x++;m[h++]=x-g;m[h++]=q;g=x}m.length<e.length&&(e=m)}c[f]=e}}return c}function vb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var m=+e+d;m<=g;m++)void 0!==f.j[m]?r("Input port "+p(m,4,!0)+" already registered"):f.j[m]=[h,!1]}}
function wb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var m=+e+d;m<=g;m++)void 0!==f.l[m]?r("Output port "+p(m,4,!0)+" already registered"):f.l[m]=[h,!1]}}function lb(a,b,c){r("Memory block error ("+a+": "+p(b)+","+p(c)+")");return!1}var mb=1,ob=2,xb;if(db){var yb=new ArrayBuffer(2);(new DataView(yb)).setUint16(0,256,!0);xb=256===(new Uint16Array(yb))[0]}else xb=!1;var zb=xb;
@ -171,9 +171,9 @@ function Fd(a,b,c,d){var e=8>=a.va?8:16,f=8<e?15:0,g=a.W.length/e,h=!1===d,m={M:
(x&15)*b,(x>>4)*c)}return m}k.ca=function(a,b){return b||!a||this.restore(a)?!0:!1};k.ba=function(a){return!a||this.save()};k.save=function(){var a=new E(this);a.set(0,[]);return a.data()};k.restore=function(){return!0};
k.Ha=function(){var a=!1;if(this.a){if(this.a.Ha){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.A/this.s;b>c&&(a=Math.round(c/b*100)+"%")}this.Ea?(this.o.style.width=a,this.o.style.width=a,this.o.style.display="block",this.o.style.margin="auto"):(this.a.style.width=a,this.a.style.height="auto");this.a.style.backgroundColor="black";this.a.Ha();a=!0}this.L&&this.L.focus()}return a};
function wd(a,b){!b&&a.a&&(a.Ea?a.o.style.width=a.o.style.height="":a.a.style.width=a.a.style.height="")}function yd(a,b){a.Ma=b;a.N=!1;if(void 0===a.g||a.g.length!=a.Ma)a.g=Array(a.Ma)}function Jd(a,b,c,d,e){d=a.b?(b.height-c-1)*b.width+d:c+d*b.width;e&&a.P==Ad&&(208<=c&&236>c?e=a.O+Bd:28<=c&&72>c&&(e=a.O+Cd));a=a.I[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
function bc(a,b){var c=!0;if(!b){a.ha&&(120==a.ha?a.Oa&1?(zc(a.m,2),c=!1):zc(a.m,1):zc(a.m,4));if(c&&a.N&&a.v){for(var d=a.u,e=a.v,f=!0,g=a.da>>>d.b;0<e&&g<d.a.length;)d.a[g].ja&&(d.a[g].ja=f=!1,d.a[g].$b=!0),e-=d.c,g++;f&&(c=!1)}Yb(a.m,a.Qa,1E3/Math.max(a.Pa,a.ha));a.Oa++}if(c)if(1<a.M)switch(a.P){case Dd:for(var c=a.da,d=-1,e=0,f=60==a.cc?2:5,h=g=0,m=-1;e<a.R;){var q=0,x=c,w=d,L=a.C;for(w!=Ed&&(L>>=1);;){var z=qb(a.u,x++);if((z&Kd)==Kd){var v=qb(a.u,x++),d=v&Ld,c=(v&Md)<<8|qb(a.u,x),c=c+(v&Nd?Od:
Pd);break}if(q<L)a.X[q++]=z;else break}if(f)f--;else{for(;q<a.X.length;)a.X[q++]=0;if(0<=w)for(x=a.N&&a.g[g]==L,a.g[g++]=L,L=0;L<q;L++){z=a.X[L];if(!x||z!==a.g[g]){a.g[m=g]=z;var v=a,F=a.ma,U=z&127;if(z=v.H[w][z&128?1:0]){var Z=(U&15)*z.M,U=(U>>4)*z.K,da,xa,Wa,pb,hd=z.M,ec=z.K;F?(da=L*v.M,xa=e*v.K,Wa=v.M,pb=v.K):(da=L*v.wa,xa=e*v.xa,Wa=v.wa,pb=v.xa);z.M>v.M&&(da*=2,Wa*=2);z.K>v.K&&(w==Id&&(U+=v.K),ec=v.K);F?F.drawImage(z.canvas,Z,U,hd,ec,da,xa,Wa,pb):(da+=0,xa+=0,v.c.drawImage(z.canvas,Z,U,hd,ec,
da,xa,Wa,pb))}h++}g++}e++}}a.N=!0;!b&&a.na&&1==h&&(a.g[m]=-1,h=0);a.na=!1;(h||b)&&a.ma&&a.c.drawImage(a.l,0,a.la,a.j,a.B-a.K,0,0,a.mb,a.kc)}else{e=a.da;f=e+a.v;m=h=g=0;b=a.j;q=0;c=a.B;w=d=0;x=a.ea;L=(1<<x)-1;a.Tc&&(x=-x,w=16+x);for(;e<f;){v=a.u;F=e;z=F&v.f;Z=(F&v.g)>>>v.b;v=z!=v.f?v.a[Z].fc(z,F):v.a[Z++].hb(z,F)|v.a[Z&v.o].hb(0,F+1)<<8;if(a.N&&v===a.g[g])h+=a.Na;else{a.g[g]=v;(F=w)&&(v=v>>8|(v&255)<<8);h<b&&(b=h);for(z=a.Na;z--;)Z=v>>F&L,Jd(a,a.Ga,h++,m,Z),F+=x;h>q&&(q=h);m<c&&(c=m);m>=d&&(d=m+1)}e+=
function bc(a,b){var c=!0;if(!b){a.ha&&(120==a.ha?a.Oa&1?(zc(a.m,2),c=!1):zc(a.m,1):zc(a.m,4));if(c&&a.N&&a.v){for(var d=a.u,e=a.v,f=!0,g=a.da>>>d.b;0<e&&g<d.a.length;)d.a[g].ja&&(d.a[g].ja=f=!1,d.a[g].$b=!0),e-=d.c,g++;f&&(c=!1)}Yb(a.m,a.Qa,1E3/Math.max(a.Pa,a.ha));a.Oa++}if(c)if(1<a.M)switch(a.P){case Dd:for(var c=a.da,d=-1,e=0,f=60==a.cc?2:5,h=g=0,m=-1;e<a.R;){var q=0,x=c,w=d,L=a.C;for(w!=Ed&&(L>>=1);;){var z=pb(a.u,x++);if((z&Kd)==Kd){var v=pb(a.u,x++),d=v&Ld,c=(v&Md)<<8|pb(a.u,x),c=c+(v&Nd?Od:
Pd);break}if(q<L)a.X[q++]=z;else break}if(f)f--;else{for(;q<a.X.length;)a.X[q++]=0;if(0<=w)for(x=a.N&&a.g[g]==L,a.g[g++]=L,L=0;L<q;L++){z=a.X[L];if(!x||z!==a.g[g]){a.g[m=g]=z;var v=a,F=a.ma,U=z&127;if(z=v.H[w][z&128?1:0]){var Z=(U&15)*z.M,U=(U>>4)*z.K,da,xa,Wa,qb,hd=z.M,ec=z.K;F?(da=L*v.M,xa=e*v.K,Wa=v.M,qb=v.K):(da=L*v.wa,xa=e*v.xa,Wa=v.wa,qb=v.xa);z.M>v.M&&(da*=2,Wa*=2);z.K>v.K&&(w==Id&&(U+=v.K),ec=v.K);F?F.drawImage(z.canvas,Z,U,hd,ec,da,xa,Wa,qb):(da+=0,xa+=0,v.c.drawImage(z.canvas,Z,U,hd,ec,
da,xa,Wa,qb))}h++}g++}e++}}a.N=!0;!b&&a.na&&1==h&&(a.g[m]=-1,h=0);a.na=!1;(h||b)&&a.ma&&a.c.drawImage(a.l,0,a.la,a.j,a.B-a.K,0,0,a.mb,a.kc)}else{e=a.da;f=e+a.v;m=h=g=0;b=a.j;q=0;c=a.B;w=d=0;x=a.ea;L=(1<<x)-1;a.Tc&&(x=-x,w=16+x);for(;e<f;){v=a.u;F=e;z=F&v.f;Z=(F&v.g)>>>v.b;v=z!=v.f?v.a[Z].fc(z,F):v.a[Z++].hb(z,F)|v.a[Z&v.o].hb(0,F+1)<<8;if(a.N&&v===a.g[g])h+=a.Na;else{a.g[g]=v;(F=w)&&(v=v>>8|(v&255)<<8);h<b&&(b=h);for(z=a.Na;z--;)Z=v>>F&L,Jd(a,a.Ga,h++,m,Z),F+=x;h>q&&(q=h);m<c&&(c=m);m>=d&&(d=m+1)}e+=
2;g++;if(h>=a.j&&(h=0,m++,m>a.B))break}a.N=!0;b<a.j&&(e=q-b,d-=c,a.b&&(f=b,g=e,b=c,e=d,c=a.j-(f+g),d=g),a.ma.putImageData(a.Ga,0,0,b,c,e,d),a.c.drawImage(a.l,0,0,a.l.width,a.l.height,0,0,a.A,a.s))}}var Bd=0,Cd=1,zd=2,vd=0,Ad=1,Dd=2,ud={SI1978:Ad,VT100:Dd},Ed=96,Gd=64,Hd=32,Id=0,Kd=127,Md=15,Nd=16,Ld=96,Od=8192,Pd=16384;
Fa(function(){for(var a=A(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=y(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","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(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.onresize());var f=+(d.aspect||Ca("aspect"));f&&.3<=f&&3.33>=f&&(Ea("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ba("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"),f.style.fontSize="16px");c.appendChild(f);var g=e.getContext("2d"),d=new td(d,e,g,f,c);Va(d,c)}});
@ -211,11 +211,11 @@ Ga.exit.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length
function ne(a,b){return b?(a.b=b,a.m=!0,a.u=!1,!0):a.m?!0:wa()&&(b=za(a.key))?(a.b=b,a.m=!0):!1}function se(a){var b=!0;if(!a.u)try{a.a=JSON.parse(a.b),a.u=!0}catch(c){r(c.message||c),b=!1}return b}function Ae(a){var b=!0;if(wa()){var c=JSON.stringify(a.a);Aa(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}k.toString=function(){return this.a?JSON.stringify(this.a):this.b};function ze(a,b){a.b="";a.a={};a.m=a.u=!1;b&&a.set("parms",b)}
k.clear=function(a){ze(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Ke(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Le=0;
function Me(a,b,c,d,e,f){e("Loading "+a+"...");ua(a,null,!0,function(g,h,m){m?(h||(h="unable to load "+a+" ("+m+")"),f(h,null)):Ne(h,a,b,c,d,e,f)})}
function Ne(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{c&&(Oa(c,b,a),(f=b)&&0>f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+f+'"}',"object"==typeof resources&&(f=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(f?' url="'+f+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PC8080$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));f=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(x){f=null,a=x.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,f)}}a?e?Oe(a,f,h):h(a,null):g("no data"+(b?" for file: "+b:""),
null)}
function Oe(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ua(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var m=h[0],q,x=/( [a-z]+=)(['"])(.*?)\2/g;q=x.exec(f);)m=0>m.indexOf(q[1])?m.replace(">",q[0]+">"):m.replace(new RegExp(q[1]+"(['\"])(.*?)\\1"),q[0]);h[0]!=m&&(g=g.replace(h[0],m))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],g);Oe(a,b,c)}})}else c(a,null)}
function Ne(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{c&&(Oa(c,b,a),(f=b)&&0>f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+f+'"}',"object"==typeof resources&&(f=null),d=d.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(f?' url="'+f+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PC8080$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));f=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(x){f=null,a=x.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,f)}}a?e?Oe(a,f,h):h(a,null):g("no data"+(b?" for file: "+
b:""),null)}
function Oe(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ua(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var m=h[0],q,x=/( [a-z]+=)(['"])(.*?)\2/g;q=x.exec(f);)m=0>m.indexOf(q[1])?m.replace(">",q[0]+">"):m.replace(new RegExp(q[1]+"(['\"])(.*?)\\1"),q[0]);h[0]!=m&&(g=g.replace(h[0],m))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Oe(a,b,c)}})}else c(a,null)}
function Pe(a,b,c,d){function e(a){if(void 0===h){var b=g&&A(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=pa(a))}function f(a){e("Error: "+a);m&&(--Le||Ka(!0));m=!1}var g,h,m=!0;Le++;Pa[a]={};try{if(g=document.getElementById(a)){var q;if("object"==typeof resources&&(q=resources.css)){var x=document.head||document.getElementsByTagName("head")[0],w=document.createElement("style");w.type="text/css";w.styleSheet?w.styleSheet.cssText=q:w.appendChild(document.createTextNode(q));x.appendChild(w)}c||
(c="/versions/pc8080/1.35.1/components.xsl");q=function(d,h){h?Me(c,null,null,!1,e,function(d,m){m?(Oa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(m=h.transformNode(m))?(g.outerHTML=m,--Le||Ka(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(m),(m=d.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--Le||Ka(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?Me(b,a,d,!0,e,q):Ne(b,null,a,d,!1,e,q)}else f("missing machine element: "+a)}catch(L){f(L.message)}return m}window.embedPC8080=function(a,b,c,d){Ka(!1);return Pe(a,b,c,d)};window.findMachineComponent=function(a,b){return Ua(b,a+".machine")};

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1477,18 +1477,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -1506,9 +1511,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -1521,14 +1538,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();
@ -2270,6 +2290,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -2278,7 +2300,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**
@ -44275,6 +44297,54 @@ class Keyboard extends Component {
if (fAllDown !== undefined) this.fAllDown = fAllDown;
}
/**
* parseAutoType(sKeys)
*
* The following special sequences are recognized:
*
* $date: converted to MM-DD-YYYY
* $time: converted to HH:MM
*
* If you want any of those sequences to be typed as-is, then you must specify two "$" (ie, "$$").
*
* WARNING: the JavaScript replace() function ALWAYS interprets "$" specially in replacement strings, even when
* the search string is NOT a RegExp, and since we build machine definitions on a page from a potentially
* indeterminate number of string replace() operations, multiple dollar signs could eventually get reduced to a
* single dollar sign BEFORE we get here.
*
* To compensate, I've attempted add 'replace(/\$/g, "$$$$")' operations where currently needed; eg, in the
* markout.js convertMDMachineLinks() function, the htmlout.js addFilesToHTML() function, and the embed.js
* parseXML() function. Unfortunately, this is something that will be extremely difficult to prevent from breaking
* down the road. So, heads up to future me....
*
* @this {Keyboard}
* @param {string|undefined} sKeys
* @return {string|undefined}
*/
parseAutoType(sKeys)
{
if (sKeys) {
var match, reSpecial = /(?:^|[^$])\$([a-z]+)/g;
while (match = reSpecial.exec(sKeys)) {
var sReplace = "";
switch (match[1]) {
case 'date':
sReplace = Usr.formatDate("n-j-Y");
break;
case 'time':
sReplace = Usr.formatDate("h:i:s");
break;
default:
this.notice("unrecognized autoType sequence: $" + match[1]);
break;
}
sKeys = sKeys.replace('$' + match[1], sReplace);
}
sKeys = sKeys.replace(/\$\$/g, "$$");
}
return sKeys;
}
/**
* setModel(sModel)
*
@ -44657,7 +44727,7 @@ class Keyboard extends Component {
data = [];
this.autoInject = null;
} else {
this.autoInject = this.autoType;
this.autoInject = this.parseAutoType(this.autoType);
}
this.fClock = this.fAdvance = data[i++];
this.fData = data[i];
@ -44752,7 +44822,7 @@ class Keyboard extends Component {
injectInit()
{
if (!this.autoInject && this.autoType) {
this.autoInject = this.autoType;
this.autoInject = this.parseAutoType(this.autoType);
this.injectKeys(this.autoInject);
}
}
@ -74034,14 +74104,7 @@ class Computer extends Component {
*/
getMachineParm(sParm, parmsComponent)
{
/*
* When using getURLParm(), the check is allowed be a bit looser, because URL parameters are
* user-supplied, whereas most other parameters are developer-supplied. Granted, a developer
* may also be sloppy and neglect to use correct case (eg, 'automount' instead of 'autoMount'),
* but there are limits to my paranoia.
*/
var sParmLC = sParm.toLowerCase();
var value = Web.getURLParm(sParm) || Web.getURLParm(sParmLC);
var value = Web.getURLParm(sParm);
if (value === undefined && this.parmsMachine) {
value = this.parmsMachine[sParm];
@ -75854,6 +75917,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -45,7 +45,7 @@ function Ka(a,b){var c,d={da:null,aa:null,la:null,ya:null};if("["==b.charAt(0)||
e[c]&255,d.da[f++]=e[c]>>8&255,d.da[f++]=e[c]>>16&255,d.da[f++]=e[c]>>24&255;else(e=g.data)?d.Pa=e:d.da=g;d.da&&(d.da.length?1==d.da.length&&(r(d.da[0]),d=null):(r("Empty resource: "+a),d=null));d.aa=g.symbols}catch(h){r("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){r("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.da=e)}return d}
function La(){return"http://"+(window?window.location.host:"www.pcjs.org")}function Ma(){if(null==Na){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Na=a}return Na}function Oa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function Ta(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ua(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Va(a){if(!Wa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Wa=c}return Wa[a]}function Xa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Va(a){if(!Wa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Wa=c}return Wa[a]||Wa[a.toLowerCase()]}function Xa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Ya(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function Za(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function $a(a){ab.init.push(a)}
function bb(a){if(cb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function db(a){!cb&&a?(cb=!0,eb&&fb("init"),gb&&fb("show")):cb=a}function fb(a){ab[a]&&bb(ab[a])}var Wa=null,ab={init:[],show:[],exit:[]},eb=!1,gb=!1,cb=!0,Na=null;Za("onload",function(){eb=!0;bb(ab.init)});Za("onpageshow",function(){gb=!0;bb(ab.show)});Za(Ua("Opera")||Ua("iOS")?"onunload":"onbeforeunload",function(){bb(ab.exit)});
function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Eb=b.comment;this.Vb=b;this.exports={};this.J=this.bindings={};a=this.id.indexOf(".");0>a?this.ab=this.id:(this.bb=this.id.substr(0,a),this.ab=this.id.substr(a+1));this.A={ready:!1,Va:!1,qb:!1,ba:!1,wb:!1,error:!1};this.fb=null;this.A.error=!1;this.ca=c||0;this.D=this.v=this.G=this.H=this.za=null;hb.push(this)}function ib(a,b,c){jb[a]&&b&&(jb[a][b]=c)}function pb(){return Date.now()||+new Date}
@ -80,10 +80,10 @@ function Fc(a,b,c,d){for(var e=b,f=c,g=e>>>a.i;0<f&&g<a.b.length;){var h=a.b[g],
function Ac(a,b){var c=a.b[(b&a.j)>>>a.i];a.w++;b=c.w(b&16383,b);a.w--;return b}function zc(a,b,c){var d=a.b[(b&a.j)>>>a.i];a.w++;d.D(c,b&16383,b);a.w--}function Ec(a){for(var b=0,c=[],d=0;d<a.C;d++){var e=a.b[d];if(e.sb||e.Ub){c[b++]=d;var f=b++;if(e=e.save()){for(var g=0,h=0,k=[];g<e.length;){for(var l=e[g],p=g+1;p<e.length&&e[p]===l;)p++;k[h++]=p-g;k[h++]=l;g=p}k.length<e.length&&(e=k)}c[f]=e}}return c}
m.Kb=function(a){if(!this.w)throw this.D&&Qb(this.D,4)&&Rb(this.D,"memory fault on "+L(this.D,a),!0,!0),this.v.Y(),-1;};function Gc(a,b,c){r("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Hc=1,Jc=2;function Kc(a){t.call(this,"Device",a,256)}la(Kc,t);m=Kc.prototype;m.Ma=function(a,b,c,d){this.G=b;this.H=a;this.v=c;this.D=d;Db(this)};m.Ba=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.ra=function(a){return a?this.save():!0};m.reset=function(){};
m.save=function(){return(new G(this)).data()};m.restore=function(){return!0};$a(function(){for(var a=w(document,v,"device"),b=0;b<a.length;b++){var c,d=a[b];c=u(d);switch(c.type){case "default":c=new Kc(c),ub(c,d)}}});
function Cc(a,b,c,d,e){this.H=a;this.id=Pc+=2;this.B=b;this.Xa=c;this.size=d||0;this.type=e||Qc;this.G=e==Rc;this.b=null;this.f=this.w=this.vb;this.g=this.D=this.Ya;this.i=this.v=0;Dc(this);this.sb=this.Ub=!1;if(this.size){a=this.j=Array(this.size);for(b=0;b<a.length;b++)a[b]=0;Sc(this,Tc)}else Sc(this)}m=Cc.prototype;m.save=function(){return this.j};m.restore=function(a){return a&&this.size==a.length?(this.j=a,this.sb=!0):!1};function Sc(a,b){b||(b=Uc);Vc(a,b,void 0);Wc(a,b,void 0)}
function Cc(a,b,c,d,e){this.H=a;this.id=Lc+=2;this.B=b;this.Xa=c;this.size=d||0;this.type=e||Qc;this.G=e==Rc;this.b=null;this.f=this.w=this.vb;this.g=this.D=this.Ya;this.i=this.v=0;Dc(this);this.sb=this.Ub=!1;if(this.size){a=this.j=Array(this.size);for(b=0;b<a.length;b++)a[b]=0;Sc(this,Tc)}else Sc(this)}m=Cc.prototype;m.save=function(){return this.j};m.restore=function(a){return a&&this.size==a.length?(this.j=a,this.sb=!0):!1};function Sc(a,b){b||(b=Uc);Vc(a,b,void 0);Wc(a,b,void 0)}
function Vc(a,b,c){c&&a.i||(a.f=b[0]||a.vb);if(c||void 0===c)a.w=b[0]||a.vb}function Wc(a,b,c){c&&a.v||(a.g=!a.G&&b[1]||a.Ya);if(c||void 0===c)a.D=b[1]||a.Ya}m.Sa=function(a,b){b?this.v++||Wc(this,Xc,!1):this.i++||Vc(this,Xc,!1)};function Yc(a,b){b?--a.v||(a.g=a.G?a.Ya:a.D):--a.i||(a.f=a.w)}function Dc(a,b,c){a.b=b;a.i=a.v=0;c&&((a.i=c.i)&&Vc(a,Xc,!1),(a.v=c.v)&&Wc(a,Xc,!1))}m.vb=function(a,b){this.b&&Qb(this.b,32)&&Rb(this.b,"attempt to read invalid address "+L(this.b,b),!0);this.H.Kb(b);return-1};
m.Ya=function(a,b,c){this.b&&Qb(this.b,32)&&Rb(this.b,"attempt to write "+L(this.b,a)+" to invalid addresses "+L(this.b,c),!0);this.H.Kb(c)};m.jc=function(a){return this.j[a]};m.sc=function(a,b){this.j[b]!=a&&(this.j[b]=a,this.sb=!0)};m.hc=function(a,b){if(this.b&&null!=this.B){var c=this.b;Zc(c,this.B+a,2,c.N)&&c.Y(!1)}return this.w(a,b)};m.rc=function(a,b,c){if(this.b&&null!=this.B){var d=this.b;Zc(d,this.B+b,2,d.K)&&d.Y(!1)}this.G?this.Ya(a,0,c):this.D(a,b,c)};
var Qc=0,Rc=2,Ic=["NONE","RAM","ROM"],Pc=0,Uc=[],Tc=[Cc.prototype.jc,Cc.prototype.sc],Xc=[Cc.prototype.hc,Cc.prototype.rc];
var Qc=0,Rc=2,Ic=["NONE","RAM","ROM"],Lc=0,Uc=[],Tc=[Cc.prototype.jc,Cc.prototype.sc],Xc=[Cc.prototype.hc,Cc.prototype.rc];
function $c(a,b){t.call(this,"CPU",a,1);b=+a.cycles||b;var c=+a.multiplier||1;this.kb=0;this.ob=b;this.ha=c;this.lb=Math.round(this.ob/1E4)/100;this.ga=this.lb*this.ha;this.nb=this.Ja=this.ma=this.cb=0;this.A.P=this.A.ib=!1;this.A.fa=a.autoStart;"string"==typeof this.A.fa&&(this.A.fa="true"==this.A.fa);this.A.Ua=!1;this.Ha=this.ta=0;this.Ia=+a.csStart;this.pa=+a.csInterval;this.ua=+a.csStop;this.R=[];this.Gb=this.mc.bind(this);this.W=this.M=this.V=this.N=this.L=this.Ga=this.T=this.va=this.pb=this.Z=
0;this.Oa=null;Db(this)}la($c,t);m=$c.prototype;m.Ma=function(a,b,c,d){this.H=a;this.G=b;this.D=d;this.Oa=a.j;for(a=0;a<ad.length;a++)(b=this.J[ad[a]])&&this.H.sa(null,ad[a],b);Db(this)};m.reset=function(){};m.save=function(){return null};m.restore=function(){return!1};
m.Ba=function(a,b){var c=bd(this.H,"autoStart");null!=c?this.A.fa="true"==c?!0:"false"==c?!1:!!c:null==this.A.fa&&(this.A.fa=!this.D&&void 0===this.J.run);if(!b){if(a){cd(this);if(!this.restore(a))return!1;dd(this)}else this.reset();this.D?(a=this.D,b=this.A.fa,a.Ja=!0,a.u("Type ? for help with PDPjs Debugger commands"),ed(a),b||fd(a),a.ua&&(b=a.ua,a.ua=null,gd(a,b,!0))):this.status("No debugger detected");this.A.fa||this.u("CPU will not be auto-started "+(this.Oa?"(click Run to start)":"(type 'go' to start)"))}return!0};
@ -220,15 +220,15 @@ g);jf(a.M,h.i);break;case vf:td(h,g);break;case wf:f=131072;break;case xf:f=6553
function Hg(a,b,c){if("?"==c)a.u("trace commands:"),a.u("\tt [#]\ttrace # instructions"),a.u("\ttr [#]\ttrace # instructions with register updates"),a.u("\ttc [#]\ttrace # cycles"),a.u("note: bn [#] breaks after # instructions without updates");else{var d="t"!=b;c=Ve(a,c,null,!0)||1;var e=0;"tc"==b&&(e=c,c=1);a.Da=b;Xa(c,function(){return Pb(a,!0)&&uc(a,e,d,!1)},function(){a.ma&&a.ma.stop();K(a.H,-1);Pb(a,!1)})}}
function Hf(a,b,c,d){b=nf(a,b,a.M);void 0===d&&(d=1);var e=256;if(void 0!==c)if("l"==c.charAt(0))c=Ve(a,c.substr(1)),null!=c&&(d=c);else{d=nf(a,c);if(d.B<b.B)return;e=d.B-b.B;if(256<e){a.u("range too large");return}d=-1}for(c=0;0<e&&d--;){var f=Eb(a,!1)||a.O?a.F:null,g=null!=f?"cycles":null,h=Xf(a,b),k=b.B;if(h[0]&&d&&(!c&&d||0>h[0].indexOf("+"))){var l=h[0]+":";h[2]&&(l+=" "+h[2]);a.u(l)}h[3]&&(g=h[3],f=null);h=a.ha;l=b;h.B=l.B;h.eb=l.eb;h.qa=l.qa;h.S=l.S;a.u(Jf(a,b,g,f));e-=b.B-k;c++}}
function Vf(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.u(Ff+b):(a.V&&(a.u("ended assemble at "+L(a,a.ha.B,18)),a.V=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.Z=null;if(Cb(a)&&0<b.length){a.V&&(b="a "+L(a,a.ha.B,18)+" "+b);var f=!1,g=b,h;h=void 0===h?" ":h;for(var k=[],l="",p=0,q=0;p<g.length;){var D=g[p++];l?D==l&&(l="",k.push(g.substr(q,p-q)),q=p):'"'==D||"'"==D?l=D:0<=h.indexOf(D)&&(k.push(g.substr(q,p-q-1)),q=p)}q<p&&k.push(g.substr(q,p-q));k[0]=k[0].toLowerCase();if(k&&k.length)for(var F=
k[0],J=F.charAt(0),p=1;p<F.length;p++)if(D=F.charAt(p),"?"==J||"r"==J||"a">D||"z"<D){k[0]=F.substr(p);k.unshift(F.substr(0,p));break}switch(k[0].charAt(0)){case "a":d=$f(a,k);break;case "b":var Lc=k[0],ra=k[1],I=b;if("?"==ra)a.u("breakpoint commands:"),a.u("\tbp #\tset exec breakpoint"),a.u("\tbr #\tset read breakpoint"),a.u("\tbw #\tset write breakpoint"),a.u("\tbc #\tclear breakpoint (* to clear all)"),a.u("\tbl\tlist all breakpoints"),a.u("\tbn [#]\tbreak after # instruction(s)");else{var Pa=Lc.charAt(1);
k[0],J=F.charAt(0),p=1;p<F.length;p++)if(D=F.charAt(p),"?"==J||"r"==J||"a">D||"z"<D){k[0]=F.substr(p);k.unshift(F.substr(0,p));break}switch(k[0].charAt(0)){case "a":d=$f(a,k);break;case "b":var Mc=k[0],ra=k[1],I=b;if("?"==ra)a.u("breakpoint commands:"),a.u("\tbp #\tset exec breakpoint"),a.u("\tbr #\tset read breakpoint"),a.u("\tbw #\tset write breakpoint"),a.u("\tbc #\tclear breakpoint (* to clear all)"),a.u("\tbl\tlist all breakpoints"),a.u("\tbn [#]\tbreak after # instruction(s)");else{var Pa=Mc.charAt(1);
if("l"==Pa){var Rd;Rd=0+Uf(a,a.i);Rd+=Uf(a,a.N);(Rd+=Uf(a,a.K))||a.u("no breakpoints")}else if("n"==Pa){var bg=+ra||0;ra&&(a.pa=bg);a.u("break after "+bg+" instruction(s)")}else if(void 0===ra)a.u("missing breakpoint address");else{var ja="*"==ra?Y():nf(a,ra,a.M);"c"==Pa?null==ja.B?(ef(a),a.u("all breakpoints cleared")):Sf(a,a.i,ja)||Sf(a,a.N,ja)||Sf(a,a.K,ja)||a.u("breakpoint missing: "+L(a,ja.B,18)):null!=ja.B&&(pf(a,ja,I),"p"==Pa?a.Sa(a.i,ja):"r"==Pa?a.Sa(a.N,ja):"w"==Pa?a.Sa(a.K,ja):a.u("unknown breakpoint command: "+
Pa))}}break;case "c":a.za&&(a.za.value="");break;case "d":a:{var kb,lb=k[0],sa=k[1],Ga=k[2],Zh=k[3];if("?"==sa){var mb="";for(kb in cc)a.va[kb]&&(mb&&(mb+=","),mb+=kb);mb+=",state,symbols";a.u("dump memory commands:");a.u("\tdw [a] [n] dump n words at address a");a.u("\tds [a] [n] dump n words at address a as JSON");a.u("\tdh [p] [n] dump n instructions from history position p");mb.length&&a.u("dump extension commands:\n\t"+mb)}else if("state"==sa){var Sd=Ig(a.H,!0);"console"==Ga?console.log(Sd):
(a.za&&(a.za.value=""),Sd&&a.u(Sd))}else if("symbols"==sa)for(var Td=0;Td<a.I.length;Td++){var Ud=a.I[Td],nb;for(nb in Ud.aa)if("."!=nb.charAt(0)){var cg=Ud.aa[nb].o;if(void 0!==cg){var dg=Ud.aa[nb].l;dg&&(nb=dg);a.u(L(a,cg,18)+" "+nb)}}}else{if("d"==lb){for(kb in cc)if(k[1]==kb){var eg=a.va[kb];eg?(k.shift(),k.shift(),eg(k)):a.u("no dump registered for "+sa);break a}sa||(lb=a.Oa||"dw")}else a.Oa=lb;if("dh"==lb){var fg=sa,gg=Ga,hg="",ig=0,ka=a.W,ta=a.j;if(ta.length){var ga=+fg||a.Ca,Fb=+gg||10;isNaN(ga)?
ga=Fb:hg="more ";ga>ta.length&&(a.u("note: only "+ta.length+" available"),ga=ta.length);ka-=ga;0>ka&&(null==ta[ta.length-1].B?(ga=ka+ga,ka=0):ka+=ta.length);var Vd=[];"call"==gg&&(Fb=1E5,Vd=["CALL"]);for(void 0!==fg&&a.u(ga+" instructions earlier:");0<Fb&&ka!=a.W;){var jg=ta[ka++];if(null==jg.B)break;var Gb=Y(jg.B),$h=ga--,kg=Jf(a,Gb,"history",$h);(!Vd.length||0<=kg.indexOf(Vd[0]))&&a.u(kg);Gb.rb&&(ka+=Gb.rb,Fb-=Gb.rb,ga-=Gb.rb);ka>=ta.length&&(ka=0);a.Ca=ga;ig++;Fb--}}ig||(a.u("no "+hg+"history available"),
a.Ca=void 0)}else{var Qa=0,lg="ds"==lb,Hb=nf(a,sa,a.oa);Ga&&("l"==Ga.charAt(0)?(Ga=Ga.substr(1)||Zh,Qa=Ve(a,Ga)):Qa=nf(a,Ga).B-Hb.B,0>Qa&&(Qa=0),65536<Qa&&(Qa=65536));var ai=a.S;Hb.S&&(a.S=Hb.S);for(var mg="db"==lb?1:2,Wd=Qa||32,Xd=1==mg?1:4,bi=(Wd+Xd-1)/Xd|0||1,Ra="";bi--&&0<Wd;){for(var ua="",Yd="",sa=L(a,Hb.B,18),ng=Xd;0<ng--&&0<Wd--;){var Zd=a.Na(Hb,1);lg?(ua&&(ua+=","),ua+=Zd):(ua+=qf(a,Zd),ua+=" ");for(var Mc=29,ci=0;1==mg&&0<=Mc;ci++)var Ib=Zd/Math.pow(2,Mc)%Math.pow(2,7),ua=ua+(L(a,Ib,7)+
" "),Ib=Ib+0,Yd=Yd+(32>Ib?".":String.fromCharCode(Ib)),Mc=Mc-7}Ra&&(Ra+="\n");Ra=lg?Ra+(ua+","):Ra+(sa+": "+ua+(0>ng?" "+Yd:""))}Ra&&a.u(Ra);a.S=ai}}}break;case "e":if("else"==k[0])break;var og,pg,qg=k[0],$d=k[1];"e"==qg||"ew"==qg?(og=a.Na,pg=a.zb):$d=null;if(null==$d)a.u("edit memory commands:"),a.u("\tew [a] [...] edit words at address a");else for(var ae=nf(a,$d,a.oa),be=2;be<k.length;be++){var Jb=$e(a,k[be]);if(void 0===Jb)break;Jb=of(Jb);a.u("changing "+L(a,ae.B,18)+" from "+qf(a,og.call(a,
a.Ca=void 0)}else{var Qa=0,lg="ds"==lb,Hb=nf(a,sa,a.oa);Ga&&("l"==Ga.charAt(0)?(Ga=Ga.substr(1)||Zh,Qa=Ve(a,Ga)):Qa=nf(a,Ga).B-Hb.B,0>Qa&&(Qa=0),65536<Qa&&(Qa=65536));var ai=a.S;Hb.S&&(a.S=Hb.S);for(var mg="db"==lb?1:2,Wd=Qa||32,Xd=1==mg?1:4,bi=(Wd+Xd-1)/Xd|0||1,Ra="";bi--&&0<Wd;){for(var ua="",Yd="",sa=L(a,Hb.B,18),ng=Xd;0<ng--&&0<Wd--;){var Zd=a.Na(Hb,1);lg?(ua&&(ua+=","),ua+=Zd):(ua+=qf(a,Zd),ua+=" ");for(var Nc=29,ci=0;1==mg&&0<=Nc;ci++)var Ib=Zd/Math.pow(2,Nc)%Math.pow(2,7),ua=ua+(L(a,Ib,7)+
" "),Ib=Ib+0,Yd=Yd+(32>Ib?".":String.fromCharCode(Ib)),Nc=Nc-7}Ra&&(Ra+="\n");Ra=lg?Ra+(ua+","):Ra+(sa+": "+ua+(0>ng?" "+Yd:""))}Ra&&a.u(Ra);a.S=ai}}}break;case "e":if("else"==k[0])break;var og,pg,qg=k[0],$d=k[1];"e"==qg||"ew"==qg?(og=a.Na,pg=a.zb):$d=null;if(null==$d)a.u("edit memory commands:"),a.u("\tew [a] [...] edit words at address a");else for(var ae=nf(a,$d,a.oa),be=2;be<k.length;be++){var Jb=$e(a,k[be]);if(void 0===Jb)break;Jb=of(Jb);a.u("changing "+L(a,ae.B,18)+" from "+qf(a,og.call(a,
ae))+" to "+qf(a,Jb));pg.call(a,ae,Jb,1)}break;case "g":var rg=k[1],di=b;if(void 0!==rg){var sg=nf(a,rg);pf(a,sg,di);a.Sa(a.i,sg,!0)}Df(a,!0,c);break;case "h":a.A.P?(c||a.u("halting"),a.Y()):Eb(a,!0)||c||a.u("already halted");break;case "i":if("if"==k[0]){var ce;var Kb=b.substr(2),Kb=Ea(Kb);$e(a,Kb)?(c||a.u("true: "+Kb),ce=!0):(c||a.u("false: "+Kb),ce=!1);ce||(d=!1);break}f=!0;break;case "k":var ei=k[0];if("?"==k[1])a.u("stack trace commands:"),a.u("\tk\tshow frame addresses"),a.u("\tks\tshow symbol information");
else{var de=0,ee=Y(),Lb=Y();for(a.u("stack trace for "+L(a,Lb.B,18));10>de;){for(var Sa=null,fi=256;65536>Lb.B>>>0;){ee.B=a.Na(Lb,2);if(null==Lb.B||!fi--)break;if(!(ee.B&1)){for(var gi=a,Nc=ee,tg=null,Mb=Nc.B,ug=Mb,fe=1;6>=fe&&Mb;fe++){if(2<fe){Nc.B=Mb;var Oc=Jf(gi,Nc);if(0<=Oc.indexOf("JSR")){var vg=Oc.indexOf(" ");if(Mb+(Oc.indexOf(" ",vg+1)-vg-1)/2==ug){tg=Oc;break}}}Mb-=2}Nc.B=ug;if(Sa=tg)break}}if(!Sa||null==Sa)break;var wg=null;if("ks"==ei){var xg=Sa.match(/[0-9A-F]+$/);xg&&(wg=Fg(a,xg[0]))}Sa=
else{var de=0,ee=Y(),Lb=Y();for(a.u("stack trace for "+L(a,Lb.B,18));10>de;){for(var Sa=null,fi=256;65536>Lb.B>>>0;){ee.B=a.Na(Lb,2);if(null==Lb.B||!fi--)break;if(!(ee.B&1)){for(var gi=a,Oc=ee,tg=null,Mb=Oc.B,ug=Mb,fe=1;6>=fe&&Mb;fe++){if(2<fe){Oc.B=Mb;var Pc=Jf(gi,Oc);if(0<=Pc.indexOf("JSR")){var vg=Pc.indexOf(" ");if(Mb+(Pc.indexOf(" ",vg+1)-vg-1)/2==ug){tg=Pc;break}}}Mb-=2}Oc.B=ug;if(Sa=tg)break}}if(!Sa||null==Sa)break;var wg=null;if("ks"==ei){var xg=Sa.match(/[0-9A-F]+$/);xg&&(wg=Fg(a,xg[0]))}Sa=
Da(Sa,50)+" ;"+(wg||"stack="+L(a,Lb.B,18));a.u(Sa);de++}de||a.u("no return addresses found")}break;case "l":if("ln"==k[0]){Fg(a,k[1],!0);break}f=!0;break;case "m":a:{var va,wa=null,N=k[1];"?"==N&&(N=void 0);if(void 0!==N){var Ha=0;if("all"==N)Ha=1879046143,N=null;else if("on"==N)wa=!0,N=null;else if("off"==N)wa=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(va in cc)if(N==va){Ha=cc[va];wa=!!(a.ca&Ha);break}if(!Ha){a.u("unknown message category: "+N);break a}}if(Ha)if("on"==k[2])a.ca|=
Ha,wa=!0;else if("off"==k[2]&&(a.ca&=~Ha,wa=!1,1073741824==Ha)){for(var yg=1E3<=a.R.length?a.R.length-1E3:0;yg<a.R.length;)a.u(a.R[yg++]);a.R=[]}}var hi=0,Nb="";for(va in cc)if(!N||N==va){var ii=!!(a.ca&cc[va]);if(null===wa||wa==ii)Nb&&(Nb+=","),++hi%10||(Nb+="\n\t"),"key"==va&&(va="keys"),Nb+=va}void 0===N&&a.u("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.u((null!==wa?wa?"messages on: ":"messages off: ":"message categories:\n\t")+(Nb||"none"));ff(a)}break;case "p":if("print"==
k[0]){Gg(a,b.substr(5));break}var zg=k[0],Ag="p"==zg?0:"pr"==zg?1:-1;if("?"==k[1]||0>Ag)a.u("step commands:"),a.u("\tp\tstep over instruction"),a.u("\tpr\tstep over instruction with register update");else if(a.O)a.u("step in progress");else{var Bg=Y(a.v.i);a.Na(Bg);a.O?(a.Sa(a.i,Bg,!0),Df(a)||(a.H&&ld(a.H),a.O=0)):Hg(a,Ag?"tr":"t")}break;case "r":if("reset"==b){a.H&&a.H.reset();break}Gf(a,k);break;case "s":a:switch(k[1]){case "base":if(k[2]){var ob=+k[2];if(2==ob||8==ob||10==ob||16==ob)a.S=ob;else{a.u("invalid base: "+
@ -244,8 +244,8 @@ function Cg(a,b,c,d,e){d&&0<=d.indexOf("s")?(Lg(a,c,d,e),a.D=b.split(/(\r?\n)/),
function Ng(a){if(a.R==a.H.length)Mg(a),a.done&&a.done(a.V);else{var b=a.H[a.R];a.u("loading "+ya(b));0>b.indexOf(":")&&0<=".MAC.KLM".indexOf(b.slice(-4).toUpperCase())&&(b+=".txt");Ja(b,null,!0,function(b,d,e){if(e)a.done&&a.done(e,b);else{e=d;if(Aa(b,".html")){e="";var c;for(b=/<pre>([\s\S]*?)<\/pre>/gi;c=b.exec(d);)c=c[1],0<=c.indexOf("&")&&(c=c.replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&amp;/gi,"&")),e+=c;(c=e.match(/&[a-z]+;/i))&&Og(a,"unrecognized HTML entity '"+c[0]+"'")}d=e.split(/(\r?\n)/);
if(d.length&1){if(c=d.pop())Og(a,"unexpected line '"+c+"'"),d.push(c),d.push("")}else Og(a,"unexpected number of lines ("+d.length+")");a.D=a.D.concat(d);a.N[a.R]=d.length>>1;a.R++;setTimeout(function(){Ng(a)},0)}})}}
function Mg(a){if(0<=a.W.indexOf("p"))a.u(a.D.join(""));else{var b=bf(a.b);Pg(a,"APR",0);Pg(a,"PI",4);try{for(var c=0;c<a.D.length;c+=2){a.ia++;0<=a.W.indexOf("l")&&a.u(Qg(a)+": "+a.D[c]);if(!Rg(a,a.D[c]+"\r\n"))break;if(null!==a.J)break}a.i&&a.error("open block",a.v[a.I].ia);a.G.length&&a.error("open scope",a.G[0].ia);Sg(a);Tg(a);a.ea.forEach(function(b,c){b=Ug(a,b,void 0,c,a.Z[c]);void 0!==b&&(b+=a.U[c],a.U[c]=Vg(a,b,c))})}catch(d){a.u(d.message),a.V=-1}0>a.W.indexOf("d")&&(a.b.b=b)}}
function Rg(a,b,c,d,e){var f,g;null!=a.w&&(b=Wg(a,b));for(var h=!0,k="";h;){g=b.match(a.ha);if(!g||g[5]&&";"!=g[5].slice(0,1))return a.error("failed to parse line '"+b+"'"),!1;h=!1;k=g[2].toUpperCase();if(k==Xg||k==Yg)c=null;if(c){for(f=0;f<c.length;f++){var l=c[f],p=a.v[a.I];if(!(p&&0<=p.Qa.indexOf(l)))for(var p=d[f]||e[f]||"",q=0,D=b.length-g[5].length;q<D;){var F=b.indexOf(l,q);if(0>F)break;var q=F+1,J=F+l.length,Lc="",ra="";F&&(Lc=b[F-1]).match(/[0-9A-Z$%.]/i)||!(J>=b.length)&&(ra=b[J]).match(/[0-9A-Z$%.]/i)||
("'"==Lc&&F--,"'"==ra&&J++,b=b.substr(0,F)+p+b.substr(J),q=F+p.length,h=!0)}}c=null}if(a.i&&(1==a.i&&(f=b.indexOf(a.C),0<=f?(a.i++,b=b.substr(f+1)):a.error("expected "+a.T+" definition in '"+b+"'")),1<a.i&&(b=Zg(a,b),h=!0),a.i))return!0}d=g[1];b=g[3];c=g[4].trim();g=g[4]+g[5];d&&(d=d.slice(0,-1),Pg(a,d,a.X,$g));var I;k&&(I=c.match(/^([=:]+)(.*)/))&&(e=0,d=k,k=I[1],c=I[2],"=="==k?e|=ah:"=:"==k&&(e|=bh),Pg(a,d,c,e),k=c="");if(!k&&!c)return!0;a.T=k;if(I=ch(a,c))c=c.replace(I,dh(a,eh,ch(a,g))),b||(b=
function Rg(a,b,c,d,e){var f,g;null!=a.w&&(b=Wg(a,b));for(var h=!0,k="";h;){g=b.match(a.ha);if(!g||g[5]&&";"!=g[5].slice(0,1))return a.error("failed to parse line '"+b+"'"),!1;h=!1;k=g[2].toUpperCase();if(k==Xg||k==Yg)c=null;if(c){for(f=0;f<c.length;f++){var l=c[f],p=a.v[a.I];if(!(p&&0<=p.Qa.indexOf(l)))for(var p=d[f]||e[f]||"",q=0,D=b.length-g[5].length;q<D;){var F=b.indexOf(l,q);if(0>F)break;var q=F+1,J=F+l.length,Mc="",ra="";F&&(Mc=b[F-1]).match(/[0-9A-Z$%.]/i)||!(J>=b.length)&&(ra=b[J]).match(/[0-9A-Z$%.]/i)||
("'"==Mc&&F--,"'"==ra&&J++,b=b.substr(0,F)+p+b.substr(J),q=F+p.length,h=!0)}}c=null}if(a.i&&(1==a.i&&(f=b.indexOf(a.C),0<=f?(a.i++,b=b.substr(f+1)):a.error("expected "+a.T+" definition in '"+b+"'")),1<a.i&&(b=Zg(a,b),h=!0),a.i))return!0}d=g[1];b=g[3];c=g[4].trim();g=g[4]+g[5];d&&(d=d.slice(0,-1),Pg(a,d,a.X,$g));var I;k&&(I=c.match(/^([=:]+)(.*)/))&&(e=0,d=k,k=I[1],c=I[2],"=="==k?e|=ah:"=:"==k&&(e|=bh),Pg(a,d,c,e),k=c="");if(!k&&!c)return!0;a.T=k;if(I=ch(a,c))c=c.replace(I,dh(a,eh,ch(a,g))),b||(b=
"\t");for(;I=fh(a,c);)c=c.replace(I,I.slice(0,-1));if(!gh(a,k,c))switch(k){case hh:case ih:case jh:Wg(a,g);break;case kh:k=c;I=Ug(a,k);void 0!==I&&0<=I&&262143>=I?a.X+=I:a.error("unrecognized BLOCK expression '"+k+"'");break;case lh:k=c;b=g=0;for(c=36;I=mh(a,k);){k=k.substr(I.length).trim();d=I;if(e=I.match(/^\((.*)\)\s*(.*)$/))e[1]&&(g=Ug(a,"^D"+e[1])),d=e[2];if(g){d=d?Ug(a,d):0;if(void 0===d||0>g||36<g){a.error("unexpected BYTE operand: "+I);break}d=X(a.b,d,g,!0);c<g&&(nh(a,b),b=0,c=36);b+=d*Math.pow(2,
c-g);c-=g}else nh(a,0)}36>c&&nh(a,b);break;case oh:(k=c)?(a.J=Ug(a,k),void 0===a.J&&a.error("unrecognized END expression '"+k+"'")):a.J=a.la;break;case ph:qh(a,c);break;case rh:Sg(a);break;case sh:a.X=Ug(a,c)||0;break;case th:Tg(a);break;case uh:qh(a,c.replace(",",",,"));break;case vh:case wh:case xh:case yh:case zh:case Ah:case Bh:case Ch:case Dh:case Eh:case Fh:case Gh:case Xg:case Yg:case Hh:case Ih:dh(a,k,g);break;case Jh:k=Kh(a,c);for(I=0;I<k.length;I++)delete a.b.b[k[I]],delete a.K[k[I]];break;
case Lh:case Mh:case Nh:case Oh:case Ph:case Qh:case Rh:case Sh:break;default:qh(a,k,b,c)}return!0}
@ -293,8 +293,9 @@ ab.show.push(function(){for(var a=w(document,v,"computer"),b=0;b<a.length;b++){v
m.get=function(a){return this.b[a]||null};m.data=function(){return this.b};function ni(a,b){return b?(a.i=b,a.v=!0,a.j=!1,!0):a.v?!0:Ma()&&(b=Oa(a.key))?(a.i=b,a.v=!0):!1}function si(a){var b=!0;if(!a.j)try{a.b=JSON.parse(a.i),a.j=!0}catch(c){r(c.message||c),b=!1}return b}function Ai(a){var b=!0;if(Ma()){var c=JSON.stringify(a.b);Ta(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}m.toString=function(){return this.b?JSON.stringify(this.b):this.i};
function zi(a,b){a.i="";a.b={};a.v=a.j=!1;b&&a.set("parms",b)}m.clear=function(a){zi(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Ji(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Ki=0;
function Li(a,b,c,d,e,f,g){f("Loading "+a+"...");Ja(a,null,!0,function(h,k,l){l?(k||(k="unable to load "+a+" ("+l+")"),g(k,null)):Mi(k,a,b,c,d,e,f,g)})}
function Mi(a,b,c,d,e,f,g,h){function k(a,g){if(g)h(g,null);else{c&&(ib(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PDPjs$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?Ni(a,g,k):k(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Mi(a,b,c,d,e,f,g,h){function k(a,g){if(g)h(g,null);else{c&&(ib(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),e=e.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PDPjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?Ni(a,g,k):k(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function Ni(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ja(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Ni(a,b,c)}})}else c(a,null)}
function Oi(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&w(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Ba(a))}function g(a){f("Error: "+a);l&&(--Ki||db(!0));l=!1}var h,k,l=!0;Ki++;jb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],D=document.createElement("style");D.type="text/css";D.styleSheet?D.styleSheet.cssText=p:D.appendChild(document.createTextNode(p));q.appendChild(D)}d||

File diff suppressed because one or more lines are too long

View file

@ -1249,18 +1249,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -1278,9 +1283,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -1293,14 +1310,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();
@ -2042,6 +2062,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -2050,7 +2072,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**
@ -27534,6 +27556,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

View file

@ -42,7 +42,7 @@ function ua(a,b){var c,d={I:null,O:null,T:null,S:null};if("["==b.charAt(0)||"{"=
e[c]&255,d.I[f++]=e[c]>>8&255,d.I[f++]=e[c]>>16&255,d.I[f++]=e[c]>>24&255;else(e=g.data)?d.Y=e:d.I=g;d.I&&(d.I.length?1==d.I.length&&(q(d.I[0]),d=null):(q("Empty resource: "+a),d=null));d.O=g.symbols}catch(h){q("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){q("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.I=e)}return d}
function pa(){return"http://"+(window?window.location.host:"www.pcjs.org")}function va(){if(null==wa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}wa=a}return wa}function xa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function ya(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function za(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Aa(a){if(!Ba){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ba=c}return Ba[a]}function Ca(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Da(a){r.init.push(a)}
function Aa(a){if(!Ba){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ba=c}return Ba[a]||Ba[a.toLowerCase()]}function Ca(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Da(a){r.init.push(a)}
function Fa(a){if(Ga)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){q(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Ha(a){!Ga&&a?(Ga=!0,Ia&&Ja("init"),Ka&&Ja("show")):Ga=a}function Ja(a){r[a]&&Fa(r[a])}var Ba=null,r={init:[],show:[],exit:[]},Ia=!1,Ka=!1,Ga=!0,wa=null;Ca("onload",function(){Ia=!0;Fa(r.init)});Ca("onpageshow",function(){Ka=!0;Fa(r.show)});Ca(za("Opera")||za("iOS")?"onunload":"onbeforeunload",function(){Fa(r.exit)});
function t(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Wa=b.comment;this.jb=b;this.exports={};this.m=this.bindings={};a=this.id.indexOf(".");0>a?this.va=this.id:(this.wa=this.id.substr(0,a),this.va=this.id.substr(a+1));this.h={ready:!1,Ba:!1,Oa:!1,F:!1,Sa:!1,error:!1};this.Da=null;this.h.error=!1;this.w=this.j=this.s=this.v=this.ga=null;v.push(this)}function La(a,b,c){Ma[a]&&b&&(Ma[a][b]=c)}function Na(){return Date.now()||+new Date}
function q(a){window&&window.alert(a)}function Oa(a){var b=!1;window&&(b=window.confirm(a));return b}function w(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<v.length;b++){var d=v[b];a&&d.id.indexOf(a)||c.push(d)}return c}function Pa(a){if(void 0!==a){var b;for(b=0;b<v.length;b++)if(v[b].id===a)return v[b]}return null}
@ -185,8 +185,9 @@ r.exit.push(function(){for(var a=A(document,z,"computer"),b=0;b<a.length;b++){va
function od(a){var b=!0;if(!a.j)try{a.a=JSON.parse(a.f),a.j=!0}catch(c){q(c.message||c),b=!1}return b}function wd(a){var b=!0;if(va()){var c=JSON.stringify(a.a);ya(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}k.toString=function(){return this.a?JSON.stringify(this.a):this.f};function vd(a,b){a.f="";a.a={};a.g=a.j=!1;b&&a.set("parms",b)}
k.clear=function(a){vd(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Gd(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Hd=0;
function Id(a,b,c,d,e,f,g){f("Loading "+a+"...");p(a,null,!0,function(h,m,u){u?(m||(m="unable to load "+a+" ("+u+")"),g(m,null)):Jd(m,a,b,c,d,e,f,g)})}
function Jd(a,b,c,d,e,f,g,h){function m(a,g){if(g)h(g,null);else{c&&(La(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PDPjs$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(H){g=null,a=H.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?Kd(a,g,m):m(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Jd(a,b,c,d,e,f,g,h){function m(a,g){if(g)h(g,null);else{c&&(La(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),e=e.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PDPjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(H){g=null,a=H.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?Kd(a,g,m):m(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function Kd(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var m=h[0],u,D=/( [a-z]+=)(['"])(.*?)\2/g;u=D.exec(f);)m=0>m.indexOf(u[1])?m.replace(">",u[0]+">"):m.replace(new RegExp(u[1]+"(['\"])(.*?)\\1"),u[0]);h[0]!=m&&(g=g.replace(h[0],m))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Kd(a,b,c)}})}else c(a,null)}
function Ld(a,b,c,d,e){function f(a){if(void 0===m){var b=h&&A(h,"machine-warning");m=b&&b[0]||h}m&&(m.innerHTML=qa(a))}function g(a){f("Error: "+a);u&&(--Hd||Ha(!0));u=!1}var h,m,u=!0;Hd++;Ma[b]={};try{if(h=document.getElementById(b)){var D;if("object"==typeof resources&&(D=resources.css)){var H=document.head||document.getElementsByTagName("head")[0],Ea=document.createElement("style");Ea.type="text/css";Ea.styleSheet?Ea.styleSheet.cssText=D:Ea.appendChild(document.createTextNode(D));H.appendChild(Ea)}d||

File diff suppressed because one or more lines are too long

View file

@ -54,7 +54,7 @@ function Fa(a,b){var c,d={aa:null,ia:null,Aa:null,za:null};if("["==b.charAt(0)||
e[c]&255,d.aa[f++]=e[c]>>8&255,d.aa[f++]=e[c]>>16&255,d.aa[f++]=e[c]>>24&255;else(e=g.data)?d.sk=e:d.aa=g;d.aa&&(d.aa.length?1==d.aa.length&&(w(d.aa[0]),d=null):(w("Empty resource: "+a),d=null));d.ia=g.symbols}catch(k){w("Resource data error ("+a+"): "+k.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){w("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.aa=e)}return d}
function Ga(){return"http://"+(window?window.location.host:"www.pcjs.org")}function Ha(){if(null==Ja){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Ja=a}return Ja}function Ka(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function La(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ma(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Na(a){if(!Oa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Oa=c}return Oa[a]}function Pa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Na(a){if(!Oa){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Oa=c}return Oa[a]||Oa[a.toLowerCase()]}function Pa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Qa(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function Ra(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Sa(a){Ta.init.push(a)}
function Ya(a){if(Za)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){w(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function $a(a){!Za&&a?(Za=!0,ab&&bb("init"),cb&&bb("show")):Za=a}function bb(a){Ta[a]&&Ya(Ta[a])}var Oa=null,Ta={init:[],show:[],exit:[]},ab=!1,cb=!1,Za=!0,Ja=null;Ra("onload",function(){ab=!0;Ya(Ta.init)});Ra("onpageshow",function(){cb=!0;Ya(Ta.show)});Ra(Ma("Opera")||Ma("iOS")?"onunload":"onbeforeunload",function(){Ya(Ta.exit)});
function x(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Wd=b.comment;this.wf=b;this.exports={};this.H=this.bindings={};a=this.id.indexOf(".");0>a?this.Mb=this.id:(this.vb=this.id.substr(0,a),this.Mb=this.id.substr(a+1));this.A={ready:!1,eb:!1,xd:!1,ca:!1,Jd:!1,error:!1};this.Oc=null;this.A.error=!1;this.ja=c||0;this.D=this.f=this.F=this.J=this.Ua=null;db.push(this)}function eb(a,b,c){fb[a]&&b&&(fb[a][b]=c)}function gb(){return Date.now()||+new Date}
@ -116,16 +116,16 @@ var M={},qd=(M[61568]=[null,null,L.prototype.Xg,L.prototype.oi,"UNIMAP",64,1170]
L.prototype.Zb,"R4SET0"],M[65477]=[null,null,L.prototype.Vb,L.prototype.Zb,"R5SET0"],M[65478]=[null,null,L.prototype.sg,L.prototype.Kh,"R6KERNEL"],M[65479]=[null,null,L.prototype.vg,L.prototype.Nh,"R7KERNEL"],M[65480]=[null,null,L.prototype.Wb,L.prototype.$b,"R0SET1",1,1145],M[65481]=[null,null,L.prototype.Wb,L.prototype.$b,"R1SET1",1,1145],M[65482]=[null,null,L.prototype.Wb,L.prototype.$b,"R2SET1",1,1145],M[65483]=[null,null,L.prototype.Wb,L.prototype.$b,"R3SET1",1,1145],M[65484]=[null,null,L.prototype.Wb,
L.prototype.$b,"R4SET1",1,1145],M[65485]=[null,null,L.prototype.Wb,L.prototype.$b,"R5SET1",1,1145],M[65486]=[null,null,L.prototype.tg,L.prototype.Lh,"R6SUPER",1,1145],M[65487]=[null,null,L.prototype.ug,L.prototype.Mh,"R6USER",1,1145],M[65504]=[null,null,L.prototype.bg,L.prototype.vh,"CTRL",8,1170],M[65520]=[null,null,L.prototype.ye,L.prototype.De,"LSIZE",1,1170],M[65522]=[null,null,L.prototype.ye,L.prototype.De,"HSIZE",1,1170],M[65524]=[null,null,L.prototype.Sg,L.prototype.ji,"SYSID",1,1170],M[65526]=
[null,null,L.prototype.ag,L.prototype.uh,"ERR",1,1170],M[65528]=[null,null,L.prototype.hg,L.prototype.Bh,"MBR",1,1170],M[65530]=[null,null,L.prototype.mg,L.prototype.Eh,"PIR"],M[65532]=[null,null,L.prototype.Rg,L.prototype.ii,"SLR"],M[65534]=[null,null,L.prototype.rg,L.prototype.Jh,"PSW"],M);
Sa(function(){for(var a=A(document,y,"device"),b=0;b<a.length;b++){var c,d=a[b];c=ob(d);switch(c.type){case "default":c=new L(c);pb(c,d);break;case "pc11":c=new Cd(c);pb(c,d);break;case "rl11":c=new Dd(c);pb(c,d);break;case "rk11":c=new N(c);pb(c,d);break;case "rx11":c=new Fd(c),pb(c,d)}}});
Sa(function(){for(var a=A(document,y,"device"),b=0;b<a.length;b++){var c,d=a[b];c=ob(d);switch(c.type){case "default":c=new L(c);pb(c,d);break;case "pc11":c=new Cd(c);pb(c,d);break;case "rl11":c=new Dd(c);pb(c,d);break;case "rk11":c=new N(c);pb(c,d);break;case "rx11":c=new Ed(c),pb(c,d)}}});
function I(a,b,c,d,e,f){this.D=a;this.id=Gd+=2;this.b=null;this.K=b;this.Xb=c;this.size=d||0;this.type=e||Hd;this.j=e==Id;this.f=this.controller=null;this.Db=this.J=this.Dd;this.pa=this.B=this.Ed;this.Gb=this.F=this.Yb;this.Hb=this.C=this.Wc;this.H=this.i=0;Xc(this);this.fb=this.Gf=!1;if(this.size)if(f)this.controller=f,a=[null,0],this.b=a[0],Jd(this,f.zf);else if(Gb)this.u=new ArrayBuffer(this.size),this.w=new DataView(this.u,0,this.size),this.g=new Uint8Array(this.u,0,this.size),this.G=new Uint16Array(this.u,
0,this.size>>1),this.b=new Int32Array(this.u,0,this.size>>2),Jd(this,Kd?Ld:Md);else{a=this.b=Array(this.size>>2);for(f=0;f<a.length;f++)a[f]=0;Jd(this,Vd)}else Jd(this)}h=I.prototype;h.save=function(){var a,b;if(this.controller)a=null;else if(Gb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.w.getInt32(b<<2,!0);else a=this.b;return a};
0,this.size>>1),this.b=new Int32Array(this.u,0,this.size>>2),Jd(this,Kd?Ld:Md);else{a=this.b=Array(this.size>>2);for(f=0;f<a.length;f++)a[f]=0;Jd(this,Nd)}else Jd(this)}h=I.prototype;h.save=function(){var a,b;if(this.controller)a=null;else if(Gb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.w.getInt32(b<<2,!0);else a=this.b;return a};
h.restore=function(a){if(this.controller)return!a;if(a&&this.size==a.length<<2){var b;if(Gb)for(b=0;b<a.length;b++)this.w.setInt32(b<<2,a[b],!0);else this.b=a;return this.fb=!0}return!1};function Jd(a,b){b||(b=Wd);Xd(a,b,void 0);Yd(a,b,void 0)}function Xd(a,b,c){c&&a.H||(a.Db=b[0]||a.Dd,a.pa=b[2]||a.Ed);if(c||void 0===c)a.J=b[0]||a.Dd,a.B=b[2]||a.Ed}function Yd(a,b,c){c&&a.i||(a.Gb=!a.j&&b[1]||a.Yb,a.Hb=!a.j&&b[3]||a.Wc);if(c||void 0===c)a.F=b[1]||a.Yb,a.C=b[3]||a.Wc}
h.Bb=function(a,b){b?this.i++||Yd(this,Zd,!1):this.H++||Xd(this,Zd,!1)};function $d(a,b){b?--a.i||(a.Gb=a.j?a.Yb:a.F,a.Hb=a.j?a.Wc:a.C):--a.H||(a.Db=a.J,a.pa=a.B)}function Xc(a,b,c){a.f=b;a.H=a.i=0;c&&((a.H=c.H)&&Xd(a,Zd,!1),(a.i=c.i)&&Yd(a,Zd,!1))}h.Dd=function(a,b){this.f&&E(this.f,32)&&F(this.f,"attempt to read invalid address "+K(this.f,b),!0);this.D.Oa(b,32,2);return 255};
h.Yb=function(a,b,c){this.f&&E(this.f,32)&&F(this.f,"attempt to write "+K(this.f,b)+" to invalid addresses "+K(this.f,c),!0);this.D.Oa(c,32,4)};h.Ed=function(a,b){return this.Db(a++,b++)|this.Db(a,b)<<8};h.Wc=function(a,b,c){this.Gb(a++,b&255,c++);this.Gb(a,b>>8,c)};h.Zf=function(a){return this.b[a>>2]>>>((a&3)<<3)&255};h.dh=function(a,b){Kb&&a&1&&this.D.Oa(b,64,2);b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8};
h.sh=function(a,b){var c=a>>2;a=(a&3)<<3;this.b[c]=this.b[c]&~(255<<a)|b<<a;this.fb=!0};h.ti=function(a,b,c){Kb&&a&1&&this.D.Oa(c,64,4);c=a>>2;a=(a&3)<<3;24>a?this.b[c]=this.b[c]&~(65535<<a)|b<<a:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.fb=!0};h.Xf=function(a,b){this.f&&null!=this.K&&ae(this.f,this.K+a);return this.J(a,b)};h.Zg=function(a,b){this.f&&null!=this.K&&ae(this.f,this.K+a,2);return this.B(a,b)};
h.qh=function(a,b,c){this.f&&null!=this.K&&be(this.f,this.K+a);this.j?this.Yb(0,b,c):this.F(a,b,c)};h.ri=function(a,b,c){this.f&&null!=this.K&&be(this.f,this.K+a,2);this.j?this.Yb(0,b,c):this.C(a,b,c)};h.Wf=function(a){return this.g[a]};h.Yf=function(a,b){a=this.g[a];this.f&&E(this.f,32)&&F(this.f,"Memory.readByte("+K(this.f,b)+"): "+K(this.f,a),!0);return a};h.Yg=function(a,b){Kb&&a&1&&this.D.Oa(b,64,2);return this.w.getUint16(a,!0)};
h.bh=function(a,b){Kb&&a&1&&this.D.Oa(b,64,2);a=!Lb&&a&1?this.g[a]|this.g[a+1]<<8:this.G[a>>1];this.f&&E(this.f,32)&&F(this.f,"Memory.readWord("+K(this.f,b)+"): "+K(this.f,a),!0);return a};h.ph=function(a,b){this.g[a]=b;this.fb=!0};h.rh=function(a,b,c){this.g[a]=b;this.fb=!0;this.f&&E(this.f,32)&&F(this.f,"Memory.writeByte("+K(this.f,c)+","+K(this.f,b)+")",!0)};h.pi=function(a,b,c){Kb&&a&1&&this.D.Oa(c,64,4);this.w.setUint16(a,b,!0);this.fb=!0};
h.si=function(a,b,c){Kb&&a&1&&this.D.Oa(c,64,4);!Lb&&a&1?(this.g[a]=b,this.g[a+1]=b>>8):this.G[a>>1]=b;this.fb=!0;this.f&&E(this.f,32)&&F(this.f,"Memory.writeWord("+K(this.f,c)+","+K(this.f,b)+")",!0)};var Hd=0,id=1,Id=2,Zc=4,dd=["NONE","RAM","ROM","VID","H/W"],Gd=0,Wd=[],Vd=[I.prototype.Zf,I.prototype.sh,I.prototype.dh,I.prototype.ti],Zd=[I.prototype.Xf,I.prototype.qh,I.prototype.Zg,I.prototype.ri];
h.si=function(a,b,c){Kb&&a&1&&this.D.Oa(c,64,4);!Lb&&a&1?(this.g[a]=b,this.g[a+1]=b>>8):this.G[a>>1]=b;this.fb=!0;this.f&&E(this.f,32)&&F(this.f,"Memory.writeWord("+K(this.f,c)+","+K(this.f,b)+")",!0)};var Hd=0,id=1,Id=2,Zc=4,dd=["NONE","RAM","ROM","VID","H/W"],Gd=0,Wd=[],Nd=[I.prototype.Zf,I.prototype.sh,I.prototype.dh,I.prototype.ti],Zd=[I.prototype.Xf,I.prototype.qh,I.prototype.Zg,I.prototype.ri];
if(Gb)var Md=[I.prototype.Wf,I.prototype.ph,I.prototype.Yg,I.prototype.pi],Ld=[I.prototype.Yf,I.prototype.rh,I.prototype.bh,I.prototype.si];var ce;if(Gb){var de=new ArrayBuffer(2);(new DataView(de)).setUint16(0,256,!0);ce=256===(new Uint16Array(de))[0]}else ce=!1;var Kd=ce;
function ee(a,b){x.call(this,"CPU",a,1);b=+a.cycles||b;var c=+a.multiplier||1;this.ad=0;this.Zc=b;this.mb=c;this.md=Math.round(this.Zc/1E4)/100;this.xb=this.md*this.mb;this.nd=this.qc=this.Ab=this.zc=0;this.A.V=this.A.Tc=!1;this.A.ra=a.autoStart;"string"==typeof this.A.ra&&(this.A.ra="true"==this.A.ra);this.A.Nb=!1;this.oc=this.Qb=0;this.pc=+a.csStart;this.Ob=+a.csInterval;this.Rb=+a.csStop;this.ha=[];this.$d=this.ih.bind(this);this.nb=this.Ka=this.lb=this.b=this.ma=this.Ja=this.nc=this.kb=this.Sb=
this.od=this.wb=0;this.ta=null;D(this)}p(ee,x);h=ee.prototype;h.Ba=function(a,b,c,d){this.J=a;this.F=b;this.D=d;this.ta=a.i;for(a=0;a<fe.length;a++)(b=this.H[fe[a]])&&this.J.wa(null,fe[a],b);D(this)};h.reset=function(){};h.save=function(){return null};h.restore=function(){return!1};
@ -230,8 +230,8 @@ h.Ih=function(a){a&1&&(this.b&32768?(a&=-2,this.b&64&&nd(this.f,this.G)):(this.b
var Oh="",Yh="?",Zh="??",Ph=0,Rh=1,Qh=2,Th="readProgress",fi="pcjs-progress-bar",gi={},Wh=(gi[65384]=[null,null,Cd.prototype.qg,Cd.prototype.Ih,"PRS"],gi[65386]=[null,null,Cd.prototype.pg,Cd.prototype.Hh,"PRB"],gi[65388]=[null,null,Cd.prototype.og,Cd.prototype.Gh,"PPS"],gi[65390]=[null,null,Cd.prototype.ng,Cd.prototype.Fh,"PPB"],gi);
function hi(a,b,c){x.call(this,"Disk",{id:a.vb+".disk"+v(++ii,4)},8192);this.controller=a;this.J=a.J;this.D=a.D;this.u=b;this.Ya=b.name;this.Pa=this.Gd="";this.Ad=b.Ad;this.ba=this.la=this.fa=this.va=this.mode=0;this.b=[];this.i=null;this.j=!1;ji(this,c,b.ba,b.la,b.fa,b.va);this.g=this.w=null;D(this)}p(hi,x);h=hi.prototype;h.Ba=function(a,b,c,d){this.D=d};
function ji(a,b,c,d,e,f){a.mode=b;a.ba=c;a.la=d;a.fa=e;a.va=f;a.b=[];if("preload"!=a.mode){b=Array(a.ba);for(c=0;c<b.length;c++){d=Array(a.la);for(e=0;e<d.length;e++){f=Array(a.fa);for(var g=1;g<=f.length;g++)f[g-1]=ki(null,c,e,g,a.va,0);d[e]=f}b[c]=d}a.b=b}a.i=null}
function li(a,b,c,d,e){var f=c;if(a.g)return!0;a.Ya=b;a.Pa=c;a.Gd=ta(c);a.g=e;a.w=a.controller;if(d){var g=new FileReader;g.onload=function(){var b=g.result,c,d=b?b.byteLength:0,e=ka[d];if(e){a.ba=e[0];a.la=e[1];a.fa=e[2];a.va=e[3]||512;c=a.va>>2;var f=e=0,b=new DataView(b,0,d);a.b=Array(a.ba);for(d=0;d<a.b.length;d++)for(var t=a.b[d]=Array(a.la),r=0;r<t.length;r++)for(var z=t[r]=Array(a.fa),B=0;B<z.length;B++){for(var C=ki(null,d,r,B+1,a.va,0),J=C.data,wb=0;wb<c;wb++,f+=4)var Ed=J[wb]=b.getInt32(f,
!0),e=e+Ed&-1;C.Ma=c;z[B]=C}a.i=e;c=a}else a.T("Unrecognized disk format ("+d+" bytes)");a.g&&(a.g.call(a.controller,a.u,c,a.Ya,a.Pa),a.g=null)};g.readAsArrayBuffer(d);return!0}0>c.indexOf("/api/v1/dump")&&(b=ua(c),"json"==b||"gz"==b?f=encodeURI(c):(d="path",e="&mbhd=10",!c.indexOf("http:")||!c.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(b)?(d="disk",e="&mbhd=0"):va(c,"/")&&(d="dir"),f=Ga()+"/api/v1/dump?"+d+"="+encodeURIComponent(c)+(a.Ad?"":e)+"&format=json"));return!!Ea(f,
function li(a,b,c,d,e){var f=c;if(a.g)return!0;a.Ya=b;a.Pa=c;a.Gd=ta(c);a.g=e;a.w=a.controller;if(d){var g=new FileReader;g.onload=function(){var b=g.result,c,d=b?b.byteLength:0,e=ka[d];if(e){a.ba=e[0];a.la=e[1];a.fa=e[2];a.va=e[3]||512;c=a.va>>2;var f=e=0,b=new DataView(b,0,d);a.b=Array(a.ba);for(d=0;d<a.b.length;d++)for(var t=a.b[d]=Array(a.la),r=0;r<t.length;r++)for(var z=t[r]=Array(a.fa),B=0;B<z.length;B++){for(var C=ki(null,d,r,B+1,a.va,0),J=C.data,wb=0;wb<c;wb++,f+=4)var Fd=J[wb]=b.getInt32(f,
!0),e=e+Fd&-1;C.Ma=c;z[B]=C}a.i=e;c=a}else a.T("Unrecognized disk format ("+d+" bytes)");a.g&&(a.g.call(a.controller,a.u,c,a.Ya,a.Pa),a.g=null)};g.readAsArrayBuffer(d);return!0}0>c.indexOf("/api/v1/dump")&&(b=ua(c),"json"==b||"gz"==b?f=encodeURI(c):(d="path",e="&mbhd=10",!c.indexOf("http:")||!c.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(b)?(d="disk",e="&mbhd=0"):va(c,"/")&&(d="dir"),f=Ga()+"/api/v1/dump?"+d+"="+encodeURIComponent(c)+(a.Ad?"":e)+"&format=json"));return!!Ea(f,
null,!0,function(b,c,d){mi(a,b,c,d)})}
function mi(a,b,c,d){var e=null,f=0>d&&!!a.J&&!a.J.A.ca;a.j=!1;if(d)a.controller.T('Unable to load disk "'+a.Ya+'" (error '+d+": "+b+")",f);else{eb(a.controller.vb,b,c);try{if(0<ta(a.Gd,!0).toLowerCase().indexOf("-readonly"))a.j=!0;else{var g=c.indexOf("\n");0<g&&1024>g&&0<c.substring(0,g).indexOf("write-protected")&&(a.j=!0)}var k;"<"==c.substr(0,1)?k=["Missing disk image: "+a.Ya]:k=0>c.indexOf("0x")&&'["'!=c.substr(0,2)?JSON.parse(c.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+
c+")");if(k.length)if(1==k.length)w(k[0]);else{a.ba=k.length;a.la=k[0].length;a.fa=k[0][0].length;var l=k[0][0][0];a.va=l&&l.length||512;for(d=c=0;d<a.ba;d++)for(f=0;f<a.la;f++)for(g=0;g<a.fa;g++)if(l=k[d][f][g]){var m=l.length;void 0===m&&(m=l.length=512);var m=m>>2,n=l.pattern;void 0===n&&(n=l.pattern=0);var q=l.data;if(void 0===q){var t=l.bytes;if(void 0!==t&&t.length){for(var r=m<<2,z=t.length;z<r;z++)t[z]=n;ni(l,t)}else q=[],n=l.pattern=n|n<<8|n<<16|n<<24,l.data=q;delete l.bytes}ki(l,d,f);for(r=
@ -279,7 +279,7 @@ h.Zh=function(a){this.b=this.b&~U.Ta|a&U.Ta;this.u=this.u&60|(a&U.Za)>>U.na.Za;i
case kj.xf:c||(c="WRITE"),b||(b=this.Vc),f=this.i>>jj.na.gc,g=this.i&jj.Kc?1:0,k=this.i&jj.be,!e||f>=e.ba||k>=e.fa?this.b=this.b|hj.ab|U.hb:(a=65536-this.w&65535,e=(this.u&ij.bb)<<16|this.C,E(this)&&F(this,this.type+": "+c+"("+f+":"+g+":"+k+") "+u(e)+"--"+u(e+(a<<1)),!0,!0),a=b.call(this,d,f,g,k,a,e,2,!1,this.ef.bind(this)))}a&&(this.b=this.b|U.Fa|U.$a,this.b&U.Ib&&nd(this.f,this.Ra))}};h.Fg=function(){return this.C};h.Xh=function(a){this.C=a&mj.Ta};h.Ig=function(){return this.i};
h.$h=function(a){this.i=a};h.Jg=function(){return this.w};h.ai=function(a){this.w=a};h.Gg=function(){return this.u};h.Yh=function(a){this.u=a&ij.bb;this.b=this.b&~U.Za|(this.u&3)<<U.na.Za};
var U=Ob.hf,mj=Ob.ff,jj=Ob.jf,lj=Ob.Jc,ij=Ob.gf,hj=Ob.Sd,kj=Ob.xa,nj={},gj=(nj[63744]=[null,null,Dd.prototype.Hg,Dd.prototype.Zh,"RLCS"],nj[63746]=[null,null,Dd.prototype.Fg,Dd.prototype.Xh,"RLBA"],nj[63748]=[null,null,Dd.prototype.Ig,Dd.prototype.$h,"RLDA"],nj[63750]=[null,null,Dd.prototype.Jg,Dd.prototype.ai,"RLMP"],nj[63752]=[null,null,Dd.prototype.Gg,Dd.prototype.Yh,"RLBE"],nj);
function Fd(a){ri.call(this,"RX11",a,262144,Pb,Pb.kf,oj);this.I=this.G=this.i=this.L=this.b=this.C=0;this.j=V.Kb;this.u=0;this.w=Array(128).fill(0)}p(Fd,ri);h=Fd.prototype;h.Cb=function(a){a?(a=ia(a),this.b=a.next().value,this.C=a.next().value,this.I=a.next().value,this.G=a.next().value,this.i=a.next().value,this.L=a.next().value,this.j=a.next().value,this.u=a.next().value,this.w=a.next().value):(this.C=this.b=0,this.G=this.I=1,this.L=this.i=0,this.j=V.tb,this.u=0,td(this.f,this.Ra),pj(this));return!0};
function Ed(a){ri.call(this,"RX11",a,262144,Pb,Pb.kf,oj);this.I=this.G=this.i=this.L=this.b=this.C=0;this.j=V.Kb;this.u=0;this.w=Array(128).fill(0)}p(Ed,ri);h=Ed.prototype;h.Cb=function(a){a?(a=ia(a),this.b=a.next().value,this.C=a.next().value,this.I=a.next().value,this.G=a.next().value,this.i=a.next().value,this.L=a.next().value,this.j=a.next().value,this.u=a.next().value,this.w=a.next().value):(this.C=this.b=0,this.G=this.I=1,this.L=this.i=0,this.j=V.tb,this.u=0,td(this.f,this.Ra),pj(this));return!0};
h.Sc=function(){return[this.b,this.C,this.I,this.G,this.i,this.L,this.j,this.u,this.w]};h.xe=function(a){a||this.Cb()};function qj(a,b){b&&(a.L=b,a.C=a.i,a.b|=W.hb);a.j=V.Kb;a.b|=W.DONE;a.b&W.Ib&&nd(a.f,a.Ra)}
h.Ub=function(a,b,c,d,e,f,g,k,l){k=0;var m=a.ea,n=null,q;E(this)&&F(this,this.type+".readData("+b+":"+c+":"+d+") "+u(f)+"--"+u(f+(e<<1)),!0,!0);m||(k=a.Tb?rj.gd:rj.fd,e=0);for(;e;){if(!n){if(b>=m.ba){k=rj.Te;break}n=m.seek(b,c,d+1);if(!n){k=rj.qd;break}q=0;++d>=m.fa&&(d=0,++c>=m.la&&(c=0,++b))}var t;if(0>(a=m.read(n,q++))||0>(t=m.read(n,q++))){k=rj.pd;break}Ac(this.F,Oe(this.f,f),a|t<<8);q>=m.va&&(n=null);f+=g;e--}return l?l(k,b,c,d,e,f):k};
function pj(a){var b=0,c=a.b&W.ud?1:0,d=a.g[c],d=d&&d.ea,e=a.I&sj.bb,f=a.G&tj.bb;a.i&=~(uj.Od|uj.Yd|uj.cc|uj.Fa);if(d)if(a.i|=uj.Fa,E(a)&&F(a,a.type+".readSector("+e+":0:"+f+")",!0,!0),c=d.seek(e,0,f,!0)){e=0;for(f=a.w.length;e<f;){var g=d.read(c,e);if(0>g){b=rj.pd;break}a.w[e++]=g}c.Ff&&(a.i|=uj.cc)}else b=rj.qd;else b=c?rj.gd:rj.fd;qj(a,b)}
@ -287,7 +287,7 @@ h.Lg=function(a,b){a=this.b;if(!b)switch(a&=W.fc,this.j){case V.bd:case V.EMPTY:
h.ci=function(a){this.b=this.b&~W.Ta|a&W.Ta;if(this.b&W.INIT)this.Cb();else if(this.b&W.dc&&this.j==V.Kb)switch(this.j=this.b&W.xa,this.b&=~(W.dc|W.cb|W.DONE|W.hb),td(this.f,this.Ra),E(this)&&F(this,this.type+".processCommand("+vj[this.j>>1]+")",!0,!0),this.j){case V.bd:case V.EMPTY:case V.tb:case V.hc:case V.Mc:this.u=0;break;case V.Ye:a=this.g[this.b&W.ud?1:0];this.i&=~uj.Fa;a&&a.ea&&(this.i|=uj.Fa);this.C=this.i;qj(this);break;case V.Xe:this.C=this.L,qj(this)}else this.b&W.Ib?this.b&W.DONE&&nd(this.f,
this.Ra):td(this.f,this.Ra)};h.Mg=function(a,b){if(!b)switch(this.j){case V.EMPTY:this.b&W.cb&&(this.b&=~W.cb,this.C=this.w[this.u]&255,E(this)&&F(this,this.type+".readByte("+this.u+"): "+v(this.C,2,!0),!0,!0),++this.u>=this.w.length&&qj(this))}return this.C};
h.di=function(a){switch(this.j){case V.bd:this.b&W.cb&&(this.b&=~W.cb,this.w[this.u]=a&255,E(this)&&F(this,this.type+".writeByte("+this.u+","+v(a,2,!0)+")",!0,!0),++this.u>=this.w.length&&qj(this));break;case V.tb:case V.hc:case V.Mc:if(this.b&W.cb)switch(this.b&=~W.cb,this.u++){case 0:this.G=a;break;case 1:if(this.I=a,this.j==V.tb)pj(this);else{var b=this.j==V.Mc,c=0,d=this.b&W.ud?1:0,e=this.g[d],e=e&&e.ea,f=this.I&sj.bb,g=this.G&tj.bb;this.i&=~(uj.Od|uj.Yd|uj.cc|uj.Fa);if(e)if(this.i|=uj.Fa,E(this)&&
F(this,this.type+".writeSector("+f+":0:"+g+")",!0,!0),d=e.seek(f,0,g,!0))for(b&&(d.Ff=!0),b=0,f=this.w.length;b<f;){if(!e.write(d,b,this.w[b]&255)){c=rj.pd;break}b++}else c=rj.qd;else c=d?rj.gd:rj.fd;qj(this,c)}}}this.C=a};var W=Pb.lf,sj=Pb.pf,tj=Pb.nf,uj=Pb.mf,V=Pb.xa,rj=Pb.ERROR,vj="FILL EMPTY WRITE READ UNUSED RDSTAT WRDEL RDERR".split(" "),wj={},oj=(wj[65144]=[null,null,Fd.prototype.Lg,Fd.prototype.ci,"RXCS"],wj[65146]=[null,null,Fd.prototype.Mg,Fd.prototype.di,"RXDB"],wj);
F(this,this.type+".writeSector("+f+":0:"+g+")",!0,!0),d=e.seek(f,0,g,!0))for(b&&(d.Ff=!0),b=0,f=this.w.length;b<f;){if(!e.write(d,b,this.w[b]&255)){c=rj.pd;break}b++}else c=rj.qd;else c=d?rj.gd:rj.fd;qj(this,c)}}}this.C=a};var W=Pb.lf,sj=Pb.pf,tj=Pb.nf,uj=Pb.mf,V=Pb.xa,rj=Pb.ERROR,vj="FILL EMPTY WRITE READ UNUSED RDSTAT WRDEL RDERR".split(" "),wj={},oj=(wj[65144]=[null,null,Ed.prototype.Lg,Ed.prototype.ci,"RXCS"],wj[65146]=[null,null,Ed.prototype.Mg,Ed.prototype.di,"RXDB"],wj);
function xj(a){x.call(this,"Debugger",a);this.W=+a.base||16;this.O=["{","}"];this.ka=["[","]"];this.B=0;this.R=!1;this.w=-1;this.u=[];this.i={}}p(xj,x);xj.prototype.se=function(){return-1};xj.prototype.Bd=function(){};
function yj(a,b,c,d){if(c)if(b){0>a.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.R?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(za(b.substring(c,f))),c=f+1}}return a}
function zj(a,b,c){var d=a;b=b||32;if(c)if(32==b)d=a>>>0;else if(32>b)d=a&(1<<b)-1;else{if(b=Math.pow(2,b),0>a||a>=b)d=a%b,0>d&&(d+=b)}else 32>=b?d=a<<32-b>>32-b:(b=Math.pow(2,b-1),a>=b?(d=a%b,(a/b|0)&1&&(d-=b)):a<-b&&(d=a%b,((-a-1)/b|0)&1?d&&(d+=b):d||(d-=b)));a!=d&&(a=d);return a}
@ -343,19 +343,19 @@ function Sk(a,b,c){if("?"==c)a.v("trace commands:"),a.v("\tt [#]\ttrace # instr
function rk(a,b,c,d){if(b=Uj(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c)if("l"==c.charAt(0))c=Cj(a,c.substr(1)),null!=c&&(d=c);else{d=Uj(a,c,!0);if(!d||d.K<b.K)return;e=d.K-b.K;if(256<e){a.v("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=Eb(a,!1)||a.L?a.B:null;var g=null!=f?"cycles":null,k=Nk(a,b),l=b.K;if(k[0]&&d&&(!c&&d||0>k[0].indexOf("+"))){var m=k[0]+":";k[2]&&(m+=" "+k[2]);a.v(m)}k[3]&&(g=k[3],f=null);f=yk(a,b,g,f);a.v(f);a.I=b;e-=b.K-l;c++}}}
function xk(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.v(pk+b):(a.R&&(a.v("ended assemble at "+Xj(a,a.P)),a.I=a.P,a.R=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.U=null;if(Db(a)&&0<b.length){a.R&&(b="a "+Xj(a,a.P)+" "+b);var f=!1,g=b.replace(/ +/g," ").split(" ");g[0]=g[0].toLowerCase();if(g&&g.length)for(var k=g[0],l=k.charAt(0),m=1;m<k.length;m++){var n=k.charAt(m);if("?"==l||"r"==l||"a">n||"z"<n){g[0]=k.substr(m);g.unshift(k.substr(0,m));break}}switch(g[0].charAt(0)){case "a":var q=
Uj(a,g[1],!0);if(q)if(a.P=q,void 0===g[2])a.v("begin assemble at "+Xj(a,q)),a.R=!0,H(a.J);else{var t;a.v("not supported yet");t=[];if(t.length){for(var r=0;r<t.length;r++)a.Rd(q,t[r],1);a.v(yk(a,a.P))}}break;case "b":a:{var z=g[0],B=g[1],C=b;if("?"==B)a.v("breakpoint commands:"),a.v("\tbp #\tset exec breakpoint"),a.v("\tbr #\tset read breakpoint"),a.v("\tbw #\tset write breakpoint"),a.v("\tbc #\tclear breakpoint (* to clear all)"),a.v("\tbl\tlist all breakpoints"),a.v("\tbn [#]\tbreak after # instruction(s)");
else{var J=z.charAt(1);if("l"==J){var wb;wb=0+wk(a,a.b);wb+=wk(a,a.M);(wb+=wk(a,a.G))||a.v("no breakpoints")}else if("n"==J){var Ed=+B||0;B&&(a.ha=Ed);a.v("break after "+Ed+" instruction(s)")}else if(void 0===B)a.v("missing breakpoint address");else{var sa=X();if("*"!=B&&(sa=Uj(a,B,!0),!sa))break a;"c"==J?null==sa.K?(Lj(a),a.v("all breakpoints cleared")):uk(a,a.b,sa)||uk(a,a.M,sa)||uk(a,a.G,sa)||a.v("breakpoint missing: "+Xj(a,sa)):null!=sa.K&&(Wj(a,sa,C),"p"==J?a.Bb(a.b,sa):"r"==J?a.Bb(a.M,sa):"w"==
else{var J=z.charAt(1);if("l"==J){var wb;wb=0+wk(a,a.b);wb+=wk(a,a.M);(wb+=wk(a,a.G))||a.v("no breakpoints")}else if("n"==J){var Fd=+B||0;B&&(a.ha=Fd);a.v("break after "+Fd+" instruction(s)")}else if(void 0===B)a.v("missing breakpoint address");else{var sa=X();if("*"!=B&&(sa=Uj(a,B,!0),!sa))break a;"c"==J?null==sa.K?(Lj(a),a.v("all breakpoints cleared")):uk(a,a.b,sa)||uk(a,a.M,sa)||uk(a,a.G,sa)||a.v("breakpoint missing: "+Xj(a,sa)):null!=sa.K&&(Wj(a,sa,C),"p"==J?a.Bb(a.b,sa):"r"==J?a.Bb(a.M,sa):"w"==
J?a.Bb(a.G,sa):a.v("unknown breakpoint command: "+J))}}}break;case "c":a.Ua&&(a.Ua.value="");break;case "d":a:{var Zb,lb=g[0],Ua=g[1],mb=g[2],rl=g[3];if("?"==Ua){var $b="";for(Zb in Rb)a.ma[Zb]&&($b&&($b+=","),$b+=Zb);$b+=",state,symbols";a.v("dump memory commands:");a.v("\tda [a] dump info for address a");a.v("\tdb [a] [n] dump n bytes at address a");a.v("\tdw [a] [n] dump n words at address a");a.v("\tdd [a] [n] dump n dwords at address a");a.v("\tds [a] [n] dump n words at address a as JSON");
a.v("\tdh [p] [n] dump n instructions from history position p");$b.length&&a.v("dump extension commands:\n\t"+$b)}else if("state"==Ua){var gf=Tk(a.J,!0);"console"==mb?console.log(gf):(a.Ua&&(a.Ua.value=""),gf&&a.v(gf))}else if("symbols"==Ua)for(var hf=0;hf<a.C.length;hf++){var jf=a.C[hf],ac;for(ac in jf.ia)if("."!=ac.charAt(0)){var xi=jf.ia[ac].o;if(void 0!==xi){var yi=jf.ia[ac].l;yi&&(ac=yi);a.v(K(a,xi)+" "+ac)}}}else{if("d"==lb){for(Zb in Rb)if(g[1]==Zb){var zi=a.ma[Zb];zi?(g.shift(),g.shift(),
zi(g)):a.v("no dump registered for "+Ua);break a}Ua||(lb=a.La||"dw")}else a.La=lb;if("dh"==lb){var Ai=Ua,Bi=mb,Ci="",Di=0,Ia=a.S,Va=a.j;if(Va.length){var Ca=+Ai||a.ta,Mc=+Bi||10;isNaN(Ca)?Ca=Mc:Ci="more ";Ca>Va.length&&(a.v("note: only "+Va.length+" available"),Ca=Va.length);Ia-=Ca;0>Ia&&(null==Va[Va.length-1].K?(Ca=Ia+Ca,Ia=0):Ia+=Va.length);var kf=[];"call"==Bi&&(Mc=1E5,kf=["CALL"]);for(void 0!==Ai&&a.v(Ca+" instructions earlier:");0<Mc&&Ia!=a.S;){var Ei=Va[Ia++];if(null==Ei.K)break;var Nc=X(Ei.K),
sl=Ca--,Fi=yk(a,Nc,"history",sl);(!kf.length||0<=Fi.indexOf(kf[0]))&&a.v(Fi);Nc.yd&&(Ia+=Nc.yd,Mc-=Nc.yd,Ca-=Nc.yd);Ia>=Va.length&&(Ia=0);a.ta=Ca;Di++;Mc--}}Di||(a.v("no "+Ci+"history available"),a.ta=void 0)}else{var oa=Uj(a,Ua);if(oa)if("da"==lb){var lf=oa.Na||65535<oa.K,O=Pe(a.f,oa.K||0,lf);a.v(ya("",lf?12:19)+pa(oa.K,lf?22:17,3)+" "+u(oa.K,8));6>O.length?(2<O.length&&(a.v(" OFFSET: "+pa(O[3],13,3)+" "+u(O[3],8)),a.v("UNIMAP["+qa(O[1],2)+"]: "+pa(O[2],22,3)+" "+u(O[2],8))),a.v(" PHYSICAL: "+
pa(O[0],22,3)+" "+u(O[0],8))):(a.v(" OFFSET: "+pa(O[1],13,3)+" "+u(O[1],8)),a.v("+ "+Uk[O[2]]+"PAR"+O[3]+": "+pa(O[4],22,3)+" "+u(O[4],8)),a.v("& MMUMASK: "+pa(O[5],22,3)+" "+u(O[5],8)),a.v("= PHYSICAL: "+pa(O[0],22,3)+" "+u(O[0],8)))}else{var xb=0,mf="ds"==lb;if(mb){if("l"==mb.charAt(0))mb=mb.substr(1)||rl,xb=Cj(a,mb);else{var Gi=Uj(a,mb);Gi&&(xb=Gi.K-oa.K)}0>xb&&(xb=0);65536<xb&&(xb=65536)}var ul=a.W;oa.W&&(a.W=oa.W);for(var yb="dd"==lb?4:"db"==lb?1:2,Nd=yb*xb||128,nf=mf?
16:a.W,vl=(Nd+nf-1)/nf|0||1,zb="";vl--&&0<Nd;){for(var Ab="",of="",Ua=Xj(a,oa),Od=nf,Oc=0,Pc=0;0<Od&&0<Nd;){var bc=1,Pd=1==yb?a.Qd(oa,bc):a.Sa(oa,bc=2),Oc=Oc|Pd<<(Pc<<3),Pc=Pc+bc;Pc==yb&&(mf?(Ab&&(Ab+=","),Ab+="0x"+v(Oc,yb<<1)):(Ab+=K(a,Oc,yb<<3),Ab+=1==yb?9==Od?"-":" ":" "),Oc=Pc=0);Od-=bc;for(Nd-=bc;1==yb&&bc--;)var pf=Pd&255,of=of+(32<=pf&&128>pf?String.fromCharCode(pf):"."),Pd=Pd>>8}zb&&(zb+="\n");zb=mf?zb+(Ab+","):zb+(Ua+": "+Ab+(Od?"":" "+of))}zb&&a.v(zb);a.Ga=oa;a.W=ul}}}}break;case "e":if("else"==
g[0])break;var cc,qf,rf,sf,tf=g[0],uf=g[1];"eb"==tf?(cc=1,qf=255,rf=a.Qd,sf=a.Rd):"e"==tf||"ew"==tf?(cc=2,qf=65535,rf=a.Sa,sf=a.Me):uf=null;if(null==uf)a.v("edit memory commands:"),a.v("\teb [a] [...] edit bytes at address a"),a.v("\tew [a] [...] edit words at address a");else{var Qd=Uj(a,uf);if(Qd)for(var Rd=2;Rd<g.length;Rd++){var Qc=Hj(a,g[Rd]);if(void 0===Qc){a.v("unrecognized value: "+g[Rd]);break}Qc&~qf&&a.v("warning: "+v(Qc)+" exceeds "+cc+"-byte value");a.v("changing "+Xj(a,Qd)+(E(a,16)?
"":" from "+K(a,rf.call(a,Qd),cc<<3))+" to "+K(a,Qc,cc<<3));sf.call(a,Qd,Qc,cc)}}break;case "g":a:{var Hi=g[1],wl=b;if(void 0!==Hi){var vf=Uj(a,Hi,!0);if(!vf)break a;Wj(a,vf,wl);a.Bb(a.b,vf,!0)}nk(a,!0,c)}break;case "h":a.A.V?(c||a.v("halting"),a.da()):Eb(a,!0)||c||a.v("already halted");break;case "i":if("if"==g[0]){var wf;var Rc=b.substr(2),Rc=za(Rc);Hj(a,Rc)?(c||a.v("true: "+Rc),wf=!0):(c||a.v("false: "+Rc),wf=!1);wf||(d=!1);break}f=!0;break;case "k":var xl=g[0];if("?"==g[1])a.v("stack trace commands:"),
a.v("\tk\tshow frame addresses"),a.v("\tks\tshow symbol information");else{var xf=0,yf=X(),Sc=X(a.f.g[6]);for(a.v("stack trace for "+Xj(a,Sc));10>xf;){for(var Bb=null,yl=256;65536>Sc.K>>>0;){yf.K=a.Sa(Sc,2);if(null==Sc.K||!yl--)break;if(!(yf.K&1)){for(var zl=a,Sd=yf,Ii=null,Tc=Sd.K,Ji=Tc,zf=1;6>=zf&&Tc;zf++){if(2<zf){Sd.K=Tc;var Td=yk(zl,Sd);if(0<=Td.indexOf("JSR")){var Ki=Td.indexOf(" ");if(Tc+(Td.indexOf(" ",Ki+1)-Ki-1)/2==Ji){Ii=Td;break}}}Tc-=2}Sd.K=Ji;if(Bb=Ii)break}}if(!Bb||null==Bb)break;var Li=
pa(O[0],22,3)+" "+u(O[0],8))):(a.v(" OFFSET: "+pa(O[1],13,3)+" "+u(O[1],8)),a.v("+ "+Uk[O[2]]+"PAR"+O[3]+": "+pa(O[4],22,3)+" "+u(O[4],8)),a.v("& MMUMASK: "+pa(O[5],22,3)+" "+u(O[5],8)),a.v("= PHYSICAL: "+pa(O[0],22,3)+" "+u(O[0],8)))}else{var xb=0,mf="ds"==lb;if(mb){if("l"==mb.charAt(0))mb=mb.substr(1)||rl,xb=Cj(a,mb);else{var Gi=Uj(a,mb);Gi&&(xb=Gi.K-oa.K)}0>xb&&(xb=0);65536<xb&&(xb=65536)}var ul=a.W;oa.W&&(a.W=oa.W);for(var yb="dd"==lb?4:"db"==lb?1:2,Od=yb*xb||128,nf=mf?
16:a.W,vl=(Od+nf-1)/nf|0||1,zb="";vl--&&0<Od;){for(var Ab="",of="",Ua=Xj(a,oa),Pd=nf,Oc=0,Pc=0;0<Pd&&0<Od;){var bc=1,Qd=1==yb?a.Qd(oa,bc):a.Sa(oa,bc=2),Oc=Oc|Qd<<(Pc<<3),Pc=Pc+bc;Pc==yb&&(mf?(Ab&&(Ab+=","),Ab+="0x"+v(Oc,yb<<1)):(Ab+=K(a,Oc,yb<<3),Ab+=1==yb?9==Pd?"-":" ":" "),Oc=Pc=0);Pd-=bc;for(Od-=bc;1==yb&&bc--;)var pf=Qd&255,of=of+(32<=pf&&128>pf?String.fromCharCode(pf):"."),Qd=Qd>>8}zb&&(zb+="\n");zb=mf?zb+(Ab+","):zb+(Ua+": "+Ab+(Pd?"":" "+of))}zb&&a.v(zb);a.Ga=oa;a.W=ul}}}}break;case "e":if("else"==
g[0])break;var cc,qf,rf,sf,tf=g[0],uf=g[1];"eb"==tf?(cc=1,qf=255,rf=a.Qd,sf=a.Rd):"e"==tf||"ew"==tf?(cc=2,qf=65535,rf=a.Sa,sf=a.Me):uf=null;if(null==uf)a.v("edit memory commands:"),a.v("\teb [a] [...] edit bytes at address a"),a.v("\tew [a] [...] edit words at address a");else{var Rd=Uj(a,uf);if(Rd)for(var Sd=2;Sd<g.length;Sd++){var Qc=Hj(a,g[Sd]);if(void 0===Qc){a.v("unrecognized value: "+g[Sd]);break}Qc&~qf&&a.v("warning: "+v(Qc)+" exceeds "+cc+"-byte value");a.v("changing "+Xj(a,Rd)+(E(a,16)?
"":" from "+K(a,rf.call(a,Rd),cc<<3))+" to "+K(a,Qc,cc<<3));sf.call(a,Rd,Qc,cc)}}break;case "g":a:{var Hi=g[1],wl=b;if(void 0!==Hi){var vf=Uj(a,Hi,!0);if(!vf)break a;Wj(a,vf,wl);a.Bb(a.b,vf,!0)}nk(a,!0,c)}break;case "h":a.A.V?(c||a.v("halting"),a.da()):Eb(a,!0)||c||a.v("already halted");break;case "i":if("if"==g[0]){var wf;var Rc=b.substr(2),Rc=za(Rc);Hj(a,Rc)?(c||a.v("true: "+Rc),wf=!0):(c||a.v("false: "+Rc),wf=!1);wf||(d=!1);break}f=!0;break;case "k":var xl=g[0];if("?"==g[1])a.v("stack trace commands:"),
a.v("\tk\tshow frame addresses"),a.v("\tks\tshow symbol information");else{var xf=0,yf=X(),Sc=X(a.f.g[6]);for(a.v("stack trace for "+Xj(a,Sc));10>xf;){for(var Bb=null,yl=256;65536>Sc.K>>>0;){yf.K=a.Sa(Sc,2);if(null==Sc.K||!yl--)break;if(!(yf.K&1)){for(var zl=a,Td=yf,Ii=null,Tc=Td.K,Ji=Tc,zf=1;6>=zf&&Tc;zf++){if(2<zf){Td.K=Tc;var Ud=yk(zl,Td);if(0<=Ud.indexOf("JSR")){var Ki=Ud.indexOf(" ");if(Tc+(Ud.indexOf(" ",Ki+1)-Ki-1)/2==Ji){Ii=Ud;break}}}Tc-=2}Td.K=Ji;if(Bb=Ii)break}}if(!Bb||null==Bb)break;var Li=
null;if("ks"==xl){var Mi=Bb.match(/[0-9A-F]+$/);Mi&&(Li=Qk(a,Mi[0]))}Bb=ya(Bb,50)+" ;"+(Li||"stack="+Xj(a,Sc));a.v(Bb);xf++}xf||a.v("no return addresses found")}break;case "l":if("ln"==g[0]){Qk(a,g[1],!0);break}f=!0;break;case "m":a:{var Wa,Xa=null,T=g[1];"?"==T&&(T=void 0);if(void 0!==T){var nb=0;if("all"==T)nb=1879046143,T=null;else if("on"==T)Xa=!0,T=null;else if("off"==T)Xa=!1,T=null;else{"keys"==T&&(T="key");"kbd"==T&&(T="keyboard");for(Wa in Rb)if(T==Wa){nb=Rb[Wa];Xa=!!(a.ja&nb);break}if(!nb){a.v("unknown message category: "+
T);break a}}if(nb)if("on"==g[2])a.ja|=nb,Xa=!0;else if("off"==g[2]&&(a.ja&=~nb,Xa=!1,1073741824==nb)){for(var Ni=1E3<=a.N.length?a.N.length-1E3:0;Ni<a.N.length;)a.v(a.N[Ni++]);a.N=[]}}var Al=0,Uc="";for(Wa in Rb)if(!T||T==Wa){var Bl=!!(a.ja&Rb[Wa]);if(null===Xa||Xa==Bl)Uc&&(Uc+=","),++Al%10||(Uc+="\n\t"),"key"==Wa&&(Wa="keys"),Uc+=Wa}void 0===T&&a.v("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.v((null!==Xa?Xa?"messages on: ":"messages off: ":"message categories:\n\t")+
(Uc||"none"));Mj(a)}break;case "p":if("print"==g[0]){Rk(a,b.substr(5));break}var Cl=g[0];if("?"==g[1])a.v("step commands:"),a.v("\tp\tstep over instruction"),a.v("\tpr\tstep over instruction with register update");else{var Oi="pr"==Cl?1:0,Pi=1+Oi;if(a.L)a.v("step in progress");else{var Ud=X(a.f.g[7]),dc=a.Sa(Ud);3==dc||4==dc||34816==(dc&65280)||32256==(dc&65024)||35072==(dc&65280)?(a.L=Pi,Vj(Ud,2)):2048==(dc&65024)&&(yk(a,Ud),a.L=Pi);a.L?(a.Bb(a.b,Ud,!0),nk(a)||(a.J&&qe(a.J),a.L=0)):Sk(a,Oi?"tr":
(Uc||"none"));Mj(a)}break;case "p":if("print"==g[0]){Rk(a,b.substr(5));break}var Cl=g[0];if("?"==g[1])a.v("step commands:"),a.v("\tp\tstep over instruction"),a.v("\tpr\tstep over instruction with register update");else{var Oi="pr"==Cl?1:0,Pi=1+Oi;if(a.L)a.v("step in progress");else{var Vd=X(a.f.g[7]),dc=a.Sa(Vd);3==dc||4==dc||34816==(dc&65280)||32256==(dc&65024)||35072==(dc&65280)?(a.L=Pi,Vj(Vd,2)):2048==(dc&65024)&&(yk(a,Vd),a.L=Pi);a.L?(a.Bb(a.b,Vd,!0),nk(a)||(a.J&&qe(a.J),a.L=0)):Sk(a,Oi?"tr":
"t")}}break;case "r":if("reset"==b){a.J&&a.J.reset();break}qk(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Vc=+g[2];if(8==Vc||10==Vc||16==Vc)a.W=Vc;else{a.v("invalid base: "+Vc);break}}a.v("default base: "+a.W);break;case "cs":var Wc;void 0!==g[3]&&(Wc=+g[3]);switch(g[2]){case "int":a.f.Ob=Wc;break;case "start":a.f.pc=Wc;break;case "stop":a.f.Rb=Wc;break;default:a.v("unknown cs option");break a}void 0!==Wc&&ie(a.f);a.v("checksums "+(a.f.A.Nb?"enabled":"disabled"));break;case "sp":void 0!==
g[2]&&(ne(a.f,+g[2])||a.v("warning: using 1x multiplier, previous target not reached"));a.v("target speed: "+(a.f.xb.toFixed(2)+"Mhz")+" ("+a.f.mb+"x)");break;default:if(g[1]){a.v("unknown option: "+g[1]);break}case "?":a.v("debugger options:"),a.v("\tbase #\t\tset default base to #"),a.v("\tcs int #\tset checksum cycle interval to #"),a.v("\tcs start #\tset checksum cycle start count to #"),a.v("\tcs stop #\tset checksum cycle stop count to #"),a.v("\tsp #\t\tset speed multiplier to #")}break;case "t":Sk(a,
g[0],g[1]);break;case "u":rk(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Pk(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.v((Hb||"PDP11")+" version 1.35.1 ("+a.f.ka+",RELEASE"+(Jb?",TYPEDARRAYS":Ib?",BYTEARRAYS":",LONGARRAYS")+")");a.v(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){Rk(a,b.substr(1));break}var Af="commands:",Bf;for(Bf in Vk)Af+="\n"+ya(Bf,9)+Vk[Bf];bf(a)||(Af+="\nnote: history disabled if no exec breakpoints");a.v(Af);break;default:f=!0}f&&(a.v("unknown command: "+
@ -392,8 +392,9 @@ Ta.exit.push(function(){for(var a=A(document,y,"computer"),b=0;b<a.length;b++){v
function dl(a){var b=!0;if(!a.D)try{a.f=JSON.parse(a.b),a.D=!0}catch(c){w(c.message||c),b=!1}return b}function ll(a){var b=!0;if(Ha()){var c=JSON.stringify(a.f);La(a.key,c)||(w("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}h.toString=function(){return this.f?JSON.stringify(this.f):this.b};function kl(a,b){a.b="";a.f={};a.g=a.D=!1;b&&a.set("parms",b)}
h.clear=function(a){kl(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Fl(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Gl=0;
function Hl(a,b,c,d,e,f,g){f("Loading "+a+"...");Ea(a,null,!0,function(k,l,m){m?(l||(l="unable to load "+a+" ("+m+")"),g(l,null)):Il(l,a,b,c,d,e,f,g)})}
function Il(a,b,c,d,e,f,g,k){function l(a,g){if(g)k(g,null);else{c&&(eb(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PDPjs$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,g)}}a?f?Jl(a,g,l):l(a,null):k("no data"+(b?" for file: "+b:""),null)}
function Il(a,b,c,d,e,f,g,k){function l(a,g){if(g)k(g,null);else{c&&(eb(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),e=e.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PDPjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,g)}}a?f?Jl(a,g,l):l(a,null):k("no data"+(b?" for file: "+
b:""),null)}
function Jl(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ea(e,null,!0,function(f,g,k){if(k||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+k+")");else{if(f=d[3])if(k=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=k[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(f);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);k[0]!=l&&(g=g.replace(k[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Jl(a,b,c)}})}else c(a,null)}
function Kl(a,b,c,d,e){function f(a){if(void 0===l){var b=k&&A(k,"machine-warning");l=b&&b[0]||k}l&&(l.innerHTML=wa(a))}function g(a){f("Error: "+a);m&&(--Gl||$a(!0));m=!1}var k,l,m=!0;Gl++;fb[b]={};try{if(k=document.getElementById(b)){var n;if("object"==typeof resources&&(n=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],t=document.createElement("style");t.type="text/css";t.styleSheet?t.styleSheet.cssText=n:t.appendChild(document.createTextNode(n));q.appendChild(t)}d||

File diff suppressed because one or more lines are too long

View file

@ -1477,18 +1477,23 @@ class Usr {
* Supported identifiers in sFormat include:
*
* a: lowercase ante meridiem and post meridiem (am or pm)
* d: day of the month, 2 digits with leading zeros (01,...,31)
* g: hour in 12-hour format, without leading zeros (1,...,12)
* i: minutes, with leading zeros (00,...,59)
* j: day of the month, without leading zeros (1,...,31)
* l: day of the week ("Sunday",...,"Saturday")
* m: month, with leading zeros (01,...,12)
* s: seconds, with leading zeros (00,...,59)
* F: month ("January",...,"December")
* H: hour in 24-hour format, with leading zeros (00,...,23)
* Y: year (eg, 2014)
* d: day of the month, 2 digits with leading zeros (01,02,...,31)
* D: 3-letter day of the week ("Sun","Mon",...,"Sat")
* F: month ("January","February",...,"December")
* g: hour in 12-hour format, without leading zeros (1,2,...,12)
* h: hour in 24-hour format, without leading zeros (0,1,...,23)
* H: hour in 24-hour format, with leading zeros (00,01,...,23)
* i: minutes, with leading zeros (00,01,...,59)
* j: day of the month, without leading zeros (1,2,...,31)
* l: day of the week ("Sunday","Monday",...,"Saturday")
* m: month, with leading zeros (01,02,...,12)
* M: 3-letter month ("Jan","Feb",...,"Dec")
* n: month, without leading zeros (1,2,...,12)
* s: seconds, with leading zeros (00,01,...,59)
* y: 2-digit year (eg, 14)
* Y: 4-digit year (eg, 2014)
*
* For more inspiration, see: http://php.net/manual/en/function.date.php
* For more inspiration, see: http://php.net/manual/en/function.date.php (of which we support ONLY a subset).
*/
static formatDate(sFormat, date)
{
@ -1506,9 +1511,21 @@ class Usr {
case 'd':
sDate += ('0' + iDay).slice(-2);
break;
case 'D':
sDate += Usr.asDays[date.getDay()].substr(0, 3);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'g':
sDate += (!iHour ? 12 : (iHour > 12 ? iHour - 12 : iHour));
break;
case 'h':
sDate += iHour;
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
break;
case 'i':
sDate += ('0' + date.getMinutes()).slice(-2);
break;
@ -1521,14 +1538,17 @@ class Usr {
case 'm':
sDate += ('0' + iMonth).slice(-2);
break;
case 'M':
sDate += Usr.asMonths[iMonth - 1].substr(0, 3);
break;
case 'n':
sDate += iMonth;
break;
case 's':
sDate += ('0' + date.getSeconds()).slice(-2);
break;
case 'F':
sDate += Usr.asMonths[iMonth - 1];
break;
case 'H':
sDate += ('0' + iHour).slice(-2);
case 'y':
sDate += ("" + date.getFullYear()).slice(-2);
break;
case 'Y':
sDate += date.getFullYear();
@ -2270,6 +2290,8 @@ class Web {
/**
* getURLParm(sParm)
*
* First looks for sParm exactly as specified, then looks for the lower-case version.
*
* @param {string} sParm
* @return {string|undefined}
*/
@ -2278,7 +2300,7 @@ class Web {
if (!Web.parmsURL) {
Web.parmsURL = Web.parseURLParms();
}
return Web.parmsURL[sParm];
return Web.parmsURL[sParm] || Web.parmsURL[sParm.toLowerCase()];
}
/**
@ -31411,6 +31433,7 @@ function parseXML(sXML, sXMLFile, idMachine, sAppName, sAppClass, sParms, fResol
* Until/unless that changes, components.xsl cannot be simplified as much as I might have hoped.
*/
if (typeof resources == 'object') sURL = null; // turn off URL inclusion if we have embedded resources
sParms = sParms.replace(/\$/g, "$$$$");
sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sParms? " parms='" + sParms + "'" : "") + (sURL? ' url="' + sURL + '"' : ''));
}

View file

@ -53,7 +53,7 @@ function Aa(a,b){var c,d={L:null,ia:null,ea:null,da:null};if("["==b.charAt(0)||"
e[c]&255,d.L[f++]=e[c]>>8&255,d.L[f++]=e[c]>>16&255,d.L[f++]=e[c]>>24&255;else(e=g.data)?d.Gj=e:d.L=g;d.L&&(d.L.length?1==d.L.length&&(r(d.L[0]),d=null):(r("Empty resource: "+a),d=null));d.ia=g.symbols}catch(k){r("Resource data error ("+a+"): "+k.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){r("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.L=e)}return d}
function Ba(){return"http://"+(window?window.location.host:"www.pcjs.org")}function Ca(){if(null==Da){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Da=a}return Da}function Ea(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function Fa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ga(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function Ha(a){if(!Ia){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ia=c}return Ia[a]}function Ja(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ka(a){La.init.push(a)}
function Ha(a){if(!Ia){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ia=c}return Ia[a]||Ia[a.toLowerCase()]}function Ja(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ka(a){La.init.push(a)}
function Ma(a){if(Na)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Oa(a){!Na&&a?(Na=!0,Pa&&Qa("init"),Ra&&Qa("show")):Na=a}function Qa(a){La[a]&&Ma(La[a])}var Ia=null,La={init:[],show:[],exit:[]},Pa=!1,Ra=!1,Na=!0,Da=null;Ja("onload",function(){Pa=!0;Ma(La.init)});Ja("onpageshow",function(){Ra=!0;Ma(La.show)});Ja(Ga("Opera")||Ga("iOS")?"onunload":"onbeforeunload",function(){Ma(La.exit)});
function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.rd=b.comment;this.Je=b;this.exports={};this.o=this.bindings={};a=this.id.indexOf(".");0>a?this.ib=this.id:(this.Ua=this.id.substr(0,a),this.ib=this.id.substr(a+1));this.j={ready:!1,Ra:!1,Yc:!1,R:!1,gd:!1,error:!1};this.ic=null;this.j.error=!1;this.qd=c||0;this.D=this.c=this.v=this.A=this.ob=null;u.push(this)}function Sa(a,b,c){Ua[a]&&b&&(Ua[a][b]=c)}function Va(){return Date.now()||+new Date}
function r(a){window&&window.alert(a)}function Wa(a){var b=!1;window&&(b=window.confirm(a));return b}function Xa(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<u.length;b++){var d=u[b];a&&d.id.indexOf(a)||c.push(d)}return c}function Ya(a){if(void 0!==a){var b;for(b=0;b<u.length;b++)if(u[b].id===a)return u[b]}return null}
@ -295,8 +295,9 @@ function E(a,b,c){this.id=a.id;this.a="";this.c={};this.b=this.o=!1;this.key=Fh(
function vh(a){var b=!0;if(Ca()){var c=JSON.stringify(a.c);Fa(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}h.toString=function(){return this.c?JSON.stringify(this.c):this.a};function uh(a,b){a.a="";a.c={};a.b=a.o=!1;b&&a.set("parms",b)}
h.clear=function(a){uh(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}};function Fh(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var Gh=0;
function Hh(a,b,c,d,e,f,g){f("Loading "+a+"...");za(a,null,!0,function(k,l,m){m?(l||(l="unable to load "+a+" ("+m+")"),g(l,null)):Ih(l,a,b,c,d,e,f,g)})}
function Ih(a,b,c,d,e,f,g,k){function l(a,g){if(g)k(g,null);else{c&&(Sa(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PDPjs$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,g)}}a?f?Jh(a,g,l):l(a,null):k("no data"+(b?" for file: "+b:""),null)}
function Ih(a,b,c,d,e,f,g,k){function l(a,g){if(g)k(g,null);else{c&&(Sa(c,b,a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1<e.length&&(e+=",")):e='{state:"'+e+'",':e="{",e+='url:"'+g+'"}',"object"==typeof resources&&(g=null),e=e.replace(/\$/g,"$$$$"),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1PDPjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,g)}}a?f?Jh(a,g,l):l(a,null):k("no data"+(b?" for file: "+
b:""),null)}
function Jh(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");za(e,null,!0,function(f,g,k){if(k||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+k+")");else{if(f=d[3])if(k=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=k[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);k[0]!=l&&(g=g.replace(k[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Jh(a,b,c)}})}else c(a,null)}
function Kh(a,b,c,d,e){function f(a){if(void 0===l){var b=k&&A(k,"machine-warning");l=b&&b[0]||k}l&&(l.innerHTML=ua(a))}function g(a){f("Error: "+a);m&&(--Gh||Oa(!0));m=!1}var k,l,m=!0;Gh++;Ua[b]={};try{if(k=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],v=document.createElement("style");v.type="text/css";v.styleSheet?v.styleSheet.cssText=p:v.appendChild(document.createTextNode(p));q.appendChild(v)}d||

File diff suppressed because one or more lines are too long