Added breadcrumbs, and UI for saving a local copy of a hard disk
This commit is contained in:
parent
477cdfe539
commit
aeea1440f0
32 changed files with 1311 additions and 1249 deletions
3
.gitattributes
vendored
Normal file
3
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
versions/c1pjs/* linguist-vendored
|
||||||
|
versions/pcjs/* linguist-vendored
|
||||||
|
_includes/google-analytics.html merge=ours
|
||||||
11
_includes/breadcrumbs.html
Normal file
11
_includes/breadcrumbs.html
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{% capture page_url_without_index_html %}{{ page.url | remove: "/index.html" | remove: "/404.html" }}{% endcapture %}
|
||||||
|
{% assign splitted_url_parts = page_url_without_index_html | split: '/' %}
|
||||||
|
{% capture forLoopMaxInt %}{{ splitted_url_parts.size | minus:1 }}{% endcapture %}
|
||||||
|
{% for i in (1..forLoopMaxInt) %}
|
||||||
|
{% capture url %}{{ url }}{{ splitted_url_parts[i] }}/{% endcapture %}
|
||||||
|
{% capture path %}{{ path }}\<a href="/{{ url }}">{{ splitted_url_parts[i] | upcase }}</a>{% endcapture %}
|
||||||
|
{% if splitted_url_parts[i] == "blog" %}
|
||||||
|
{% break %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<h4>Directory of C:\<a href="{{ site.baseurl }}/">PCJS.ORG</a>{{ path }}</h4>
|
||||||
|
|
@ -25,4 +25,8 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
{% include breadcrumbs.html %}
|
||||||
|
</div>
|
||||||
|
|
||||||
</header>
|
</header>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{% comment %}
|
{% comment %}
|
||||||
|
|
||||||
Used by pages like the one in /api/v1/dump/ to implement a client-side API.
|
Used by pages like the one in /api/v1/dump/ to simulate a client-side API.
|
||||||
|
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% for script in page.scripts %}
|
{% for script in page.scripts %}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
||||||
<debugger id="debugger" messages="fault" commands=""/>
|
<debugger id="debugger" messages="fault" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/btpanel.xml"/>
|
<panel ref="/devices/pc/panel/btpanel.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]" monitor="ega"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]" monitor="ega"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<debugger id="debugger" messages="fault" commands=""/>
|
<debugger id="debugger" messages="fault" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/wide.xml"/>
|
<panel ref="/devices/pc/panel/wide.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<control type="button" binding="reset">Reset</control>
|
<control type="button" binding="reset">Reset</control>
|
||||||
<control type="button" binding="setSpeed">Speed</control>
|
<control type="button" binding="setSpeed">Speed</control>
|
||||||
</cpu>
|
</cpu>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<mouse serial="com1"/>
|
<mouse serial="com1"/>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<debugger id="debugger" messages="fault" commands=""/>
|
<debugger id="debugger" messages="fault" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/btpanel.xml"/>
|
<panel ref="/devices/pc/panel/btpanel.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print" tabsize="8" charbol="9"/>
|
<serial id="com2" adapter="2" binding="print" tabsize="8" charbol="9"/>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<debugger id="debugger" messages="fault" commands=""/>
|
<debugger id="debugger" messages="fault" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/wide.xml"/>
|
<panel ref="/devices/pc/panel/wide.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print" tabsize="8" charbol="9"/>
|
<serial id="com2" adapter="2" binding="print" tabsize="8" charbol="9"/>
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-lockfs.xml"/>
|
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-lockfs.xml"/>
|
||||||
<fdc ref="/disks/pc/compiled/library.xml" automount='{A:{name:"PC-DOS 3.30 (Disk 1)",path:"/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B:{name:"PC-DOS 3.30 (Disk 2)",path:"/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
<fdc ref="/disks/pc/compiled/library.xml" automount='{A:{name:"PC-DOS 3.30 (Disk 1)",path:"/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B:{name:"PC-DOS 3.30 (Disk 2)",path:"/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<mouse serial="com1"/>
|
<mouse serial="com1"/>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<debugger id="debugger"/>
|
<debugger id="debugger"/>
|
||||||
<panel ref="/devices/pc/panel/wide.xml"/>
|
<panel ref="/devices/pc/panel/wide.xml"/>
|
||||||
<cpu id="cpu286" model="80286" cycles="8000000"/>
|
<cpu id="cpu286" model="80286" cycles="8000000"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<control type="button" binding="reset">Reset</control>
|
<control type="button" binding="reset">Reset</control>
|
||||||
<control type="button" binding="setSpeed">Speed</control>
|
<control type="button" binding="setSpeed">Speed</control>
|
||||||
</cpu>
|
</cpu>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<mouse serial="com1"/>
|
<mouse serial="com1"/>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<debugger id="debugger"/>
|
<debugger id="debugger"/>
|
||||||
<panel ref="/devices/pc/panel/wide.xml"/>
|
<panel ref="/devices/pc/panel/wide.xml"/>
|
||||||
<cpu id="cpu286" model="80286" cycles="8000000"/>
|
<cpu id="cpu286" model="80286" cycles="8000000"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<control type="button" binding="reset">Reset</control>
|
<control type="button" binding="reset">Reset</control>
|
||||||
<control type="button" binding="setSpeed">Speed</control>
|
<control type="button" binding="setSpeed">Speed</control>
|
||||||
</cpu>
|
</cpu>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<mouse serial="com1"/>
|
<mouse serial="com1"/>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<debugger id="debugger" messages="" commands=""/>
|
<debugger id="debugger" messages="" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/wide386.xml"/>
|
<panel ref="/devices/pc/panel/wide386.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml"/>
|
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml"/>
|
||||||
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<debugger id="debugger" messages="" commands=""/>
|
<debugger id="debugger" messages="" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/wide386.xml"/>
|
<panel ref="/devices/pc/panel/wide386.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
||||||
<parallel id="lpt1" adapter="2"/>
|
<parallel id="lpt1" adapter="2"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml"/>
|
<video ref="/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml"/>
|
||||||
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-arrows.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]"/>
|
||||||
<parallel id="lpt1" adapter="2"/>
|
<parallel id="lpt1" adapter="2"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
||||||
<debugger id="debugger" messages="fault|int" commands=""/>
|
<debugger id="debugger" messages="fault|int" commands=""/>
|
||||||
<panel ref="/devices/pc/panel/wide386.xml"/>
|
<panel ref="/devices/pc/panel/wide386.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<video ref="/devices/pc/video/ibm/vga/1986-10-27/256kb-autolockfs.xml"/>
|
<video ref="/devices/pc/video/ibm/vga/1986-10-27/256kb-autolockfs.xml"/>
|
||||||
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "COMPAQ MS-DOS 3.31 (Disk 2)", path: "/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK2.json"}, B: {name: "COMPAQ MS-DOS 3.31 (Disk 3)", path: "/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK3.json"}}'/>
|
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "COMPAQ MS-DOS 3.31 (Disk 2)", path: "/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK2.json"}, B: {name: "COMPAQ MS-DOS 3.31 (Disk 3)", path: "/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK3.json"}}'/>
|
||||||
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
<keyboard ref="/devices/pc/keyboard/us84-buttons-functions.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
<keyboard id="keyboard"/>
|
<keyboard id="keyboard"/>
|
||||||
<debugger id="debugger" messages="" commands=''/>
|
<debugger id="debugger" messages="" commands=''/>
|
||||||
<panel ref="/devices/pc/panel/wide386.xml"/>
|
<panel ref="/devices/pc/panel/wide386.xml"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<video ref="/devices/pc/video/ibm/vga/1986-10-27/256kb-autolockfs.xml"/>
|
<video ref="/devices/pc/video/ibm/vga/1986-10-27/256kb-autolockfs.xml"/>
|
||||||
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
<fdc ref="/disks/pc/compiled/library.xml" automount='{A: {name: "PC-DOS 3.30 (Disk 1)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK1.json"}, B: {name: "PC-DOS 3.30 (Disk 2)", path: "/disks/pc/dos/ibm/3.30/PCDOS330-DISK2.json"}}'/>
|
||||||
<keyboard id="keyboard"/>
|
<keyboard id="keyboard"/>
|
||||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'/>
|
<hdc ref="/disks/pc/fixed/20mb/pcdos330-empty.xml"/>
|
||||||
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
<chipset id="chipset" model="deskpro386" floppies="[1200,1200]" monitor="vga"/>
|
||||||
<serial id="com1" adapter="1"/>
|
<serial id="com1" adapter="1"/>
|
||||||
<serial id="com2" adapter="2" binding="print"/>
|
<serial id="com2" adapter="2" binding="print"/>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ layout: page
|
||||||
title: IBM PC ROMs
|
title: IBM PC ROMs
|
||||||
permalink: /devices/pc/rom/
|
permalink: /devices/pc/rom/
|
||||||
redirect_from:
|
redirect_from:
|
||||||
- /devices/pc/
|
- /devices/pc/bios/
|
||||||
---
|
---
|
||||||
|
|
||||||
IBM PC ROMs
|
IBM PC ROMs
|
||||||
|
|
|
||||||
4
disks/pc/fixed/20mb/pcdos330-empty.xml
Normal file
4
disks/pc/fixed/20mb/pcdos330-empty.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]'>
|
||||||
|
<control type="button" binding="saveHD0" padright="8px">Save HD</control>
|
||||||
|
</hdc>
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -469,6 +469,11 @@ FDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case "saveDrive":
|
case "saveDrive":
|
||||||
|
/*
|
||||||
|
* Yes, technically, this feature does not require "Local disk support" (which is really a reference
|
||||||
|
* to FileReader support), but since fLocalDisks is also false for all mobile devices, and since there
|
||||||
|
* is an "orthogonality" to disabling both features in tandem, let's just let it slide, OK?
|
||||||
|
*/
|
||||||
if (!this.fLocalDisks) {
|
if (!this.fLocalDisks) {
|
||||||
if (DEBUG) this.log("Local disk support not available");
|
if (DEBUG) this.log("Local disk support not available");
|
||||||
/*
|
/*
|
||||||
|
|
@ -484,21 +489,25 @@ FDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
|
||||||
|
|
||||||
this.bindings[sBinding] = control;
|
this.bindings[sBinding] = control;
|
||||||
|
|
||||||
control.onclick = function onClickLoadDrive(event) {
|
control.onclick = function onClickSaveDrive(event) {
|
||||||
var controlDrives = fdc.bindings["listDrives"];
|
var controlDrives = fdc.bindings["listDrives"];
|
||||||
if (controlDrives && controlDrives.options && fdc.aDrives) {
|
if (controlDrives && controlDrives.options && fdc.aDrives) {
|
||||||
var iDriveSelected = str.parseInt(controlDrives.value, 10);
|
var iDriveSelected = str.parseInt(controlDrives.value, 10);
|
||||||
var drive = fdc.aDrives[iDriveSelected];
|
var drive = fdc.aDrives[iDriveSelected];
|
||||||
if (drive) {
|
if (drive) {
|
||||||
if (drive.disk) {
|
/*
|
||||||
if (DEBUG) fdc.println("saving disk " + drive.disk.sDiskPath + "...");
|
* Note the similarity (and hence factoring opportunity) between this code and the HDC's "saveHD*" binding.
|
||||||
var sAlert = web.downloadFile(drive.disk.encodeAsBase64(), "octet-stream", true, drive.disk.sDiskFile.replace(".json", ".img"));
|
*/
|
||||||
|
var disk = drive.disk;
|
||||||
|
if (disk) {
|
||||||
|
if (DEBUG) fdc.println("saving diskette " + disk.sDiskPath + "...");
|
||||||
|
var sAlert = web.downloadFile(disk.encodeAsBase64(), "octet-stream", true, disk.sDiskFile.replace(".json", ".img"));
|
||||||
web.alertUser(sAlert);
|
web.alertUser(sAlert);
|
||||||
} else {
|
} else {
|
||||||
fdc.notice("No disk loaded in drive");
|
fdc.notice("No diskette loaded in drive.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fdc.notice("No drive selected");
|
fdc.notice("No diskette drive selected.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1749,8 +1758,8 @@ FDC.prototype.outFDCOutput = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* I'm unable to find any documentation on this so-called "D/S/P DIAGNOSTIC REGISTER" (port 0x3F1) or the "D/S/P CARD"
|
* I'm unable to find any documentation on this so-called "D/S/P DIAGNOSTIC REGISTER" (port 0x3F1) or the "D/S/P CARD"
|
||||||
* to which the ROM BIOS refers. But it seems clear that if we don't provide the expected response from the DIAGNOSTIC
|
* to which the ROM BIOS refers. But it seems clear that if we don't provide the expected response from the DIAGNOSTIC
|
||||||
* REGISTER, and there's no HDC to respond to the MULTIPLE DATA RATE CAPABLE test that follows, then an error is inevitable.
|
* REGISTER, and there's no HDC to respond to the MULTIPLE DATA RATE CAPABLE test that follows, then an error is
|
||||||
* Clearly, there is a very intimate relationship between the FDC and HDC portions of this card.
|
* inevitable. Clearly, there is a very intimate relationship between the FDC and HDC portions of this card.
|
||||||
*
|
*
|
||||||
* Here's the relevant code from the REV3 PC AT ROM BIOS (TEST2.ASM):
|
* Here's the relevant code from the REV3 PC AT ROM BIOS (TEST2.ASM):
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -286,8 +286,8 @@ HDC.aDriveTypes = [
|
||||||
* It's important to know that the MODEL_5170 BIOS has a special relationship with the "Combo Hard File/Diskette
|
* It's important to know that the MODEL_5170 BIOS has a special relationship with the "Combo Hard File/Diskette
|
||||||
* (HFCOMBO) Card" (see @F000:144C). Initially, the ChipSet component intercepted reads for HFCOMBO's STATUS port
|
* (HFCOMBO) Card" (see @F000:144C). Initially, the ChipSet component intercepted reads for HFCOMBO's STATUS port
|
||||||
* and returned the BUSY bit clear to reduce boot time; however, it turned out that was also a prerequisite for the
|
* and returned the BUSY bit clear to reduce boot time; however, it turned out that was also a prerequisite for the
|
||||||
* BIOS to write test patterns to the CYLLO port and set the "DUAL" bit (bit 0) of the "HFCNTRL" byte at 40:8Fh if
|
* BIOS to write test patterns to the CYLLO port (0x1F4) and set the "DUAL" bit (bit 0) of the "HFCNTRL" byte at 40:8Fh
|
||||||
* those CYLLO operations succeeded (now that the HDC is "ATC-aware", those ChipSet port intercepts have been removed).
|
* if those CYLLO operations succeeded (now that the HDC is "ATC-aware", the ChipSet port intercepts have been removed).
|
||||||
*
|
*
|
||||||
* Without the "DUAL" bit set, when it came time later to report the diskette drive type, the "DISK_TYPE" function
|
* Without the "DUAL" bit set, when it came time later to report the diskette drive type, the "DISK_TYPE" function
|
||||||
* (@F000:273D) would branch to one of two almost-identical blocks of code -- specifically, a block that disallowed
|
* (@F000:273D) would branch to one of two almost-identical blocks of code -- specifically, a block that disallowed
|
||||||
|
|
@ -301,6 +301,11 @@ HDC.aDriveTypes = [
|
||||||
* eg, was there Diskette-only Controller that could be installed, and if so, did it support high-capacity diskette
|
* eg, was there Diskette-only Controller that could be installed, and if so, did it support high-capacity diskette
|
||||||
* drives? Also, consider making the FDC component able to detect when the HDC is missing and provide the same minimal
|
* drives? Also, consider making the FDC component able to detect when the HDC is missing and provide the same minimal
|
||||||
* HFCOMBO port intercepts that ChipSet once provided (this is not a requirement, just a usability improvement).
|
* HFCOMBO port intercepts that ChipSet once provided (this is not a requirement, just a usability improvement).
|
||||||
|
*
|
||||||
|
* UPDATE: I later discovered that newer (ie, REV2 and REV3) 5170 ROMs are even less happy when no HDC is installed,
|
||||||
|
* *unless* an undocumented FDC "DIAGNOSTIC" register (port 0x3F1) provides a "MULTIPLE DATA RATE" response, bypassing
|
||||||
|
* the HDC port tests described above. This may also imply that those newer 5170 revisions are incompatible with FD360
|
||||||
|
* diskette drives, because if none of the "MULTIPLE DATA RATE" tests succeed, a "601-Diskette Error" always occurs.
|
||||||
*/
|
*/
|
||||||
HDC.ATC = {
|
HDC.ATC = {
|
||||||
DATA: { PORT: 0x1F0}, // no register (read-write)
|
DATA: { PORT: 0x1F0}, // no register (read-write)
|
||||||
|
|
@ -554,9 +559,31 @@ if (DEBUG) {
|
||||||
*/
|
*/
|
||||||
HDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
|
HDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
|
||||||
{
|
{
|
||||||
|
var hdc = this;
|
||||||
|
|
||||||
|
switch (sBinding) {
|
||||||
|
|
||||||
|
case "saveHD0":
|
||||||
|
case "saveHD1":
|
||||||
|
this.bindings[sBinding] = control;
|
||||||
|
control.onclick = function(iDrive) {
|
||||||
|
return function onClickSaveDrive(event) {
|
||||||
|
var drive = hdc.aDrives && hdc.aDrives[iDrive];
|
||||||
|
if (drive && drive.disk) {
|
||||||
/*
|
/*
|
||||||
* This is reserved for future use; for now, hard disk images can be specified during initialization only (no "hot-swapping")
|
* Note the similarity (and hence factoring opportunity) between this code and the FDC's "saveDrive" binding.
|
||||||
*/
|
*/
|
||||||
|
var disk = drive.disk;
|
||||||
|
if (DEBUG) hdc.println("saving disk " + disk.sDiskPath + "...");
|
||||||
|
var sAlert = web.downloadFile(disk.encodeAsBase64(), "octet-stream", true, disk.sDiskFile.replace(".json", ".img"));
|
||||||
|
web.alertUser(sAlert);
|
||||||
|
} else {
|
||||||
|
hdc.notice("Hard disk " + iDrive + " is not available.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}(+sBinding.slice(-1));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
(function(){var f;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function q(a){return"0x"+p(a,2)}function r(a){return"0x"+p(a,4)}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
(function(){var f;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function q(a){return"0x"+p(a,2)}function r(a){return"0x"+p(a,4)}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||||
var ca={"&":"&","<":"<",">":">",'"':""","'":"'"};function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var ea=Date.now||function(){return+new Date};
|
var ca={"&":"&","<":"<",">":">",'"':""","'":"'"};function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var ea=Date.now||function(){return+new Date};
|
||||||
function t(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else{var e=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");e.onreadystatechange=function(){4===e.readyState&&(d=e.responseText,200==e.status||!e.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=e.status||-1),b&&b(a,d,c))};e.open("GET",a,!0);e.send()}}function u(a){window&&window.alert(a)}
|
function t(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else if("function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var e=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");e.onreadystatechange=function(){4===e.readyState&&(d=e.responseText,200==e.status||!e.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=e.status||-1),b&&b(a,d,c))};e.open("GET",a,!0);e.send()}}
|
||||||
function v(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)?!0:!1}return!1}function fa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
function u(a){window&&window.alert(a)}function v(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)?!0:!1}return!1}function fa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||||
function ga(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,g=!1;a.onmousedown=function(){g||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);g=!0}}var w={init:[],show:[],exit:[]},ha=!1,ia=!0;function ja(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){w.init.push(a)}
|
function ga(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,g=!1;a.onmousedown=function(){g||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);g=!0}}var w={init:[],show:[],exit:[]},ha=!1,ia=!0;function ja(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){w.init.push(a)}
|
||||||
function ka(a){if(ia)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function z(a){!ia&&a?(ia=!0,ha&&la("init")):ia=a}function la(a){w[a]&&ka(w[a])}ja("onload",function(){ha=!0;ka(w.init)});ja("onpageshow",function(){ka(w.show)});ja(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){ka(w.exit)});
|
function ka(a){if(ia)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function z(a){!ia&&a?(ia=!0,ha&&la("init")):ia=a}function la(a){w[a]&&ka(w[a])}ja("onload",function(){ha=!0;ka(w.init)});ja("onpageshow",function(){ka(w.show)});ja(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){ka(w.exit)});
|
||||||
function A(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.rb=this.id.substr(0,b),this.qb=this.id.substr(b+1)):this.qb=this.id;this[a]=c;this.C={Za:!1,Ba:!1,jb:!1,M:!1,Ca:!1};this.cb=null;this.C.Ca=!1;this.H={};this.u=null;this.la=d||0;B.push(this)}var ma=void 0;
|
function A(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.rb=this.id.substr(0,b),this.qb=this.id.substr(b+1)):this.qb=this.id;this[a]=c;this.C={Za:!1,Ba:!1,jb:!1,M:!1,Ca:!1};this.cb=null;this.C.Ca=!1;this.H={};this.u=null;this.la=d||0;B.push(this)}var ma=void 0;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
(function(){var e;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}var ca={"&":"&","<":"<",">":">",'"':""","'":"'"};
|
(function(){var e;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}var ca={"&":"&","<":"<",">":">",'"':""","'":"'"};
|
||||||
function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var q=Date.now||function(){return+new Date};
|
function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var q=Date.now||function(){return+new Date};
|
||||||
function r(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else{var f=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");f.onreadystatechange=function(){4===f.readyState&&(d=f.responseText,200==f.status||!f.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=f.status||-1),b&&b(a,d,c))};f.open("GET",a,!0);f.send()}}function t(a){window&&window.alert(a)}
|
function r(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else if("function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var f=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");f.onreadystatechange=function(){4===f.readyState&&(d=f.responseText,200==f.status||!f.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=f.status||-1),b&&b(a,d,c))};f.open("GET",a,!0);f.send()}}
|
||||||
function v(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)?!0:!1}return!1}var w={init:[],show:[],exit:[]},ea=!1,x=!0;function fa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function y(a){w.init.push(a)}
|
function t(a){window&&window.alert(a)}function v(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)?!0:!1}return!1}var w={init:[],show:[],exit:[]},ea=!1,x=!0;function fa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function y(a){w.init.push(a)}
|
||||||
function z(a){if(x)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function A(a){!x&&a?(x=!0,ea&&ga("init")):x=a}function ga(a){w[a]&&z(w[a])}fa("onload",function(){ea=!0;z(w.init)});fa("onpageshow",function(){z(w.show)});fa(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){z(w.exit)});
|
function z(a){if(x)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function A(a){!x&&a?(x=!0,ea&&ga("init")):x=a}function ga(a){w[a]&&z(w[a])}fa("onload",function(){ea=!0;z(w.init)});fa("onpageshow",function(){z(w.show)});fa(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){z(w.exit)});
|
||||||
function B(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Da=this.id.substr(0,b),this.Ca=this.id.substr(b+1)):this.Ca=this.id;this[a]=c;this.u={va:!1,pa:!1,Aa:!1,H:!1,qa:!1};this.xa=null;this.u.qa=!1;this.A={};C.push(this)}var ha=void 0;if(window){ha||(ha=window.location.search.substr(1));for(var ia,ja=/\+/g,ka=/([^&=]+)=?([^&]*)/g;ia=ka.exec(ha);)ia[1].replace(ja," "),ia[2].replace(ja," ")}
|
function B(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Da=this.id.substr(0,b),this.Ca=this.id.substr(b+1)):this.Ca=this.id;this[a]=c;this.u={va:!1,pa:!1,Aa:!1,H:!1,qa:!1};this.xa=null;this.u.qa=!1;this.A={};C.push(this)}var ha=void 0;if(window){ha||(ha=window.location.search.substr(1));for(var ia,ja=/\+/g,ka=/([^&=]+)=?([^&]*)/g;ia=ka.exec(ha);)ia[1].replace(ja," "),ia[2].replace(ja," ")}
|
||||||
function la(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}function D(a){var b;b||(b=B);a.prototype=la(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var C=[],E={};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<C.length;c++)if(C[c].id===a)return C[c]}return null}
|
function la(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}function D(a){var b;b||(b=B);a.prototype=la(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var C=[],E={};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<C.length;c++)if(C[c].id===a)return C[c]}return null}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue