Merge branch 'master' into gh-pages
This commit is contained in:
commit
1fe9cb68b2
3 changed files with 50799 additions and 0 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -17,4 +17,5 @@
|
||||||
<control type="switches" label="SW2" binding="sw2" left="0px"/>
|
<control type="switches" label="SW2" binding="sw2" left="0px"/>
|
||||||
<control type="description" binding="swdesc" left="0px"/>
|
<control type="description" binding="swdesc" left="0px"/>
|
||||||
</chipset>
|
</chipset>
|
||||||
|
<serial id="com1" adapter="1" binding="print" tabsize="8"/>
|
||||||
</machine>
|
</machine>
|
||||||
|
|
|
||||||
117
modules/diskdump/bin/disklist
Normal file
117
modules/diskdump/bin/disklist
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Node command-line XML extraction tool
|
||||||
|
* @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
|
||||||
|
* @version 1.0
|
||||||
|
* Created 2017-Jun-20
|
||||||
|
*
|
||||||
|
* Copyright © 2012-2017 Jeff Parsons <Jeff@pcjs.org>
|
||||||
|
*
|
||||||
|
* This file is part of PCjs, a computer emulation software project at <http://pcjs.org/>.
|
||||||
|
*
|
||||||
|
* PCjs is free software: you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation, either version 3
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
|
||||||
|
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with PCjs. If not,
|
||||||
|
* see <http://www.gnu.org/licenses/gpl.html>.
|
||||||
|
*
|
||||||
|
* You are required to include the above copyright notice in every modified copy of this work
|
||||||
|
* and to display that copyright notice when the software starts running; see COPYRIGHT in
|
||||||
|
* <http://pcjs.org/modules/shared/lib/defines.js>.
|
||||||
|
*
|
||||||
|
* Some PCjs files also attempt to load external resource files, such as character-image files,
|
||||||
|
* ROM files, and disk image files. Those external resource files are not considered part of PCjs
|
||||||
|
* for purposes of the GNU General Public License, and the author does not claim any copyright
|
||||||
|
* as to their contents.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var fs = require("fs");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* println(s)
|
||||||
|
*
|
||||||
|
* @param {*} s
|
||||||
|
*/
|
||||||
|
function println(s)
|
||||||
|
{
|
||||||
|
console.log(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function processManifest(sManifest)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
var sXML = fs.readFileSync(sManifest, 'utf-8');
|
||||||
|
} catch(err) {
|
||||||
|
println("error: unable to read manifest: " + sManifest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var aMatchDisks = sXML.match(/<disk[^>]*>[\S\s]*?<\/disk>/g);
|
||||||
|
if (!aMatchDisks) {
|
||||||
|
println("warning: no disks found in: " + sManifest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (var iDisk = 0; iDisk < aMatchDisks.length; iDisk++) {
|
||||||
|
var sDisk = aMatchDisks[iDisk];
|
||||||
|
var matchDir = sDisk.match(/dir="(.*?)"/);
|
||||||
|
var matchLink = sDisk.match(/href="(.*?)"/);
|
||||||
|
var matchDiskName = sDisk.match(/<name>(.*?)<\/name>/);
|
||||||
|
var aMatchFiles = sDisk.match(/<file[^>]*>[\S\s]*?<\/file>/g);
|
||||||
|
var sDiskName = matchDiskName && matchDiskName[1];
|
||||||
|
if (!aMatchFiles || !sDiskName) {
|
||||||
|
println("warning: no files in disk: " + sDiskName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
println("### Directory of PCSIG08: " + sDiskName + "\n");
|
||||||
|
println("\t Volume in drive A " + (matchDiskName? ("is " + matchDiskName[1]) : "has no label"));
|
||||||
|
println("\t Directory of A:\\\n\t");
|
||||||
|
for (var iFile = 0; iFile < aMatchFiles.length; iFile++) {
|
||||||
|
var sFile = aMatchFiles[iFile];
|
||||||
|
var matchSize = sFile.match(/size="([0-9]*)"/);
|
||||||
|
var matchTime = sFile.match(/time="([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9]) ([0-9][0-9]):([0-9][0-9]):([0-9][0-9])"/);
|
||||||
|
var matchFileName = sFile.match(/>(.*?)</);
|
||||||
|
if (!matchSize || !matchTime || !matchFileName) {
|
||||||
|
println("warning: file entry #" + iFile + " incomplete");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Here's our template, from PC-DOS 2.00:
|
||||||
|
*
|
||||||
|
* COMMAND COM 17664 3-08-83 12:00p
|
||||||
|
*/
|
||||||
|
var sSize = matchSize[1];
|
||||||
|
var sTime = matchTime[1];
|
||||||
|
var sFileName = matchFileName[1].replace(/&/g, "&");
|
||||||
|
var sBaseName = sFileName;
|
||||||
|
var sExtension = "";
|
||||||
|
var i = sFileName.lastIndexOf('.');
|
||||||
|
if (i >= 0) {
|
||||||
|
sBaseName = sFileName.substr(0, i);
|
||||||
|
sExtension = sFileName.substr(i + 1);
|
||||||
|
}
|
||||||
|
sBaseName = (sBaseName + " ").substr(0, 9);
|
||||||
|
sExtension = (sExtension + " ").substr(0, 3);
|
||||||
|
sSize = (" " + sSize).slice(-9);
|
||||||
|
var iMonth = +matchTime[2];
|
||||||
|
var sDate = (" " + iMonth).slice(-4) + '-' + matchTime[3] + '-' + matchTime[1].substr(2);
|
||||||
|
var iHour = +matchTime[4];
|
||||||
|
var sSuffix;
|
||||||
|
if (iHour < 12) {
|
||||||
|
sSuffix = "a";
|
||||||
|
if (!iHour) iHour = 12;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sSuffix = "p";
|
||||||
|
if (iHour > 12) iHour -= 12;
|
||||||
|
}
|
||||||
|
var sTime = (" " + iHour).slice(-4) + ':' + matchTime[5] + sSuffix;
|
||||||
|
println("\t" + sBaseName + sExtension + sSize + sDate + sTime);
|
||||||
|
}
|
||||||
|
println("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
processManifest("../../../disks/pcx86/shareware/pcsig08/manifest.xml");
|
||||||
Loading…
Reference in a new issue