DiskDump updates

This commit is contained in:
Jeff Parsons 2017-06-17 09:54:32 -07:00 committed by Jeff Parsons
commit b2d6e254ac
7 changed files with 61 additions and 45 deletions

File diff suppressed because one or more lines are too long

View file

@ -18,33 +18,36 @@ RatBas (1982)
The RatBas Translator was a preprocessing utility created in 1982 by William F. Sharpe and Brent D. Weaver that The RatBas Translator was a preprocessing utility created in 1982 by William F. Sharpe and Brent D. Weaver that
could translate a structured dialect of BASIC into code compatible with IBM BASIC. It was described extensively could translate a structured dialect of BASIC into code compatible with IBM BASIC. It was described extensively
in a [PC Magazine (October 1982)](#article-from-pc-magazine-october-1982) article. in a [PC Magazine (October 1982)](#article-from-pc-magazine-october-1982) article. NOTE: The article refers to
the program as "RatBAS", but we use the distribution name "RatBas".
The only copy of RatBas we've been able to locate is version 2.13 from a The only copy of RatBas we've been able to locate is version 2.13 from a
shareware CD-ROM titled "[PC-SIG Library Eighth Edition From PC-SIG (April 1990)](http://cd.textfiles.com/pcsig08/)" shareware CD-ROM titled "[PC-SIG Library Eighth Edition From PC-SIG (April 1990)](http://cd.textfiles.com/pcsig08/)"
on [DISK0003](http://cd.textfiles.com/pcsig08/001_100/DISK0003/). on [DISK0003](http://cd.textfiles.com/pcsig08/001_100/DISK0003/).
We have archived it as [RatBas 2.13](#directory-listing-of-ratbas-213). It has been loaded into drive B: in We have archived it as [RatBas 2.13](#directory-listing-of-ratbas-213). It has been loaded into drive B: in
the machine below. the machine below, which is running [PC-DOS 1.10](/disks/pcx86/dos/ibm/1.10/), the most recent version of PC-DOS
at the time of this RatBas release.
{% include machine.html id="ibm5150" %} {% include machine.html id="ibm5150" %}
Directory Listing of RatBas 2.13 Directory Listing of RatBas 2.13
-------------------------------- --------------------------------
Volume in drive A is RATBAS21 Volume in drive B is RATBAS 213
Directory of A:\ Directory of B:\
CRC TXT 980 11-08-84 11:29p CRC TXT 980 11-08-84 11:29p
CRCK4 COM 1536 10-21-82 12:54p CRCK4 COM 1536 10-21-82 12:54p
RATBAS TXT 30080 8-13-82 5:00p RATBAS TXT 30080 08-13-82 5:00p
RATBAS UM 9856 8-09-82 5:00p RATBAS UM 9856 08-09-82 5:00p
RT EXE 35456 11-05-82 1:48a RT EXE 35456 11-05-82 1:48a
RT UM 3328 10-29-82 4:32a RT UM 3328 10-29-82 4:32a
SORT INC 896 10-29-82 4:42a SORT INC 896 10-29-82 4:42a
TEST BAS 5632 11-04-82 4:21p TEST BAS 5632 11-04-82 4:21p
TEST RAT 2304 11-01-82 1:30a TEST RAT 2304 11-01-82 1:30a
9 File(s) 68608 bytes free 9 file(s) 90068 bytes
68608 bytes free
Here's the output of CRCK4: Here's the output of CRCK4:
@ -292,8 +295,8 @@ To solve this problem RatBAS includes an alternative IF structure. The syntax i
. .
IFEND] IFEND]
The <condition> may be any expression that will evaluate to true or false; <statement> may be any legal BASIC The &lt;condition&gt; may be any expression that will evaluate to true or false; &lt;statement&gt; may be any legal
(or RatBAS) statement. BASIC (or RatBAS) statement.
Although not required, program readability is greatly enhanced if levels of logic are portrayed by indentation. Although not required, program readability is greatly enhanced if levels of logic are portrayed by indentation.
@ -329,9 +332,9 @@ RatBAS provides an additional structure not present in BASIC. Its syntax is:
. .
CEND] CEND]
<lhs> may be anything that can be placed on the left side of the equality in an IF statement; <rhs> may be anything &lt;lhs&gt; may be anything that can be placed on the left side of the equality in an IF statement; &lt;rhs&gt; may be
that can be placed on the right side of the equality. Optionally, <rhs> may be composed of two or more such anything that can be placed on the right side of the equality. Optionally, &lt;rhs&gt; may be composed of two or more
expressions, separated by commas. If OTHERWISE) is omitted, an implicit OTHERWISE) with no statements is assumed. such expressions, separated by commas. If OTHERWISE) is omitted, an implicit OTHERWISE) with no statements is assumed.
CASE name$ OF] CASE name$ OF]
"Bill","BILL" :] "Bill","BILL" :]

View file

@ -10,7 +10,7 @@
<publisher>Wells Fargo Investment Advisors</publisher> <publisher>Wells Fargo Investment Advisors</publisher>
<releaseDate>1982</releaseDate> <releaseDate>1982</releaseDate>
<machine href="/devices/pcx86/machine/5150/cga/256kb/machine.xml" state=""/> <machine href="/devices/pcx86/machine/5150/cga/256kb/machine.xml" state=""/>
<disk id="disk01" chs="40:1:8" dir="archive/ratbas213" href="/apps/pcx86/1982/ratbas/RATBAS213.json" md5="6652781f426964186ddb580dcd97a99a" md5json="e5106a311963fb7eefa8eefd401ce28c"> <disk id="disk01" chs="40:1:8" dir="archive/ratbas.213" href="/apps/pcx86/1982/ratbas/RATBAS213.json" md5="e7d98dd3d0de9121fbb56fb2af72d1c7" md5json="7bcaa7519192850f3186335860b41e81">
<name>RatBas 2.13</name> <name>RatBas 2.13</name>
<file size="980" time="1984-11-08 23:29:03" attr="0x20" md5="3b52aae896f7f61d6d13634783009a6f">CRC.TXT</file> <file size="980" time="1984-11-08 23:29:03" attr="0x20" md5="3b52aae896f7f61d6d13634783009a6f">CRC.TXT</file>
<file size="1536" time="1982-10-21 12:54:21" attr="0x20" md5="2860a82e8371c406bf3e17020f5baa8e">CRCK4.COM</file> <file size="1536" time="1982-10-21 12:54:21" attr="0x20" md5="2860a82e8371c406bf3e17020f5baa8e">CRCK4.COM</file>

File diff suppressed because one or more lines are too long

View file

@ -151,18 +151,19 @@ those files:
Here's a directory listing of the resulting 160Kb disk image: Here's a directory listing of the resulting 160Kb disk image:
Volume in drive A is PCJS ORG Volume in drive A is ADVEMATH100
Directory of A:\ Directory of A:\
ADVENTUR BAS 18688 8-11-83 12:00p ADVENTUR BAS 18688 08-11-83 12:00p
CASTLE BAS 11904 8-11-83 12:00p CASTLE BAS 11904 08-11-83 12:00p
EXIT BAS 6400 8-11-83 12:00p EXIT BAS 6400 08-11-83 12:00p
HELP BAS 4992 8-11-83 12:00p HELP BAS 4992 08-11-83 12:00p
MAZE1 1418 8-11-83 12:00p MAZE1 1418 08-11-83 12:00p
MAZE2 2179 8-11-83 12:00p MAZE2 2179 08-11-83 12:00p
MAZE3 3892 8-11-83 12:00p MAZE3 3892 08-11-83 12:00p
SN 13 8-11-83 12:00p SN 13 08-11-83 12:00p
8 File(s) 108544 bytes free 8 file(s) 49486 bytes
108544 bytes free
This disk has now been added to the PCjs [IBM PC Disk Library](/disks/pcx86/) as "Adventures in Math (1983)". This disk has now been added to the PCjs [IBM PC Disk Library](/disks/pcx86/) as "Adventures in Math (1983)".

View file

@ -9,7 +9,7 @@
<publisher>IBM</publisher> <publisher>IBM</publisher>
<releaseDate>1983</releaseDate> <releaseDate>1983</releaseDate>
<machine href="/devices/pcx86/machine/5150/cga/64kb/machine.xml" state=""/> <machine href="/devices/pcx86/machine/5150/cga/64kb/machine.xml" state=""/>
<disk id="disk01" chs="40:1:8" dir="archive/adventmath" href="/apps/pcx86/1983/adventmath/ADVENTMATH100.json" md5="896676add6fedf5220f30084f40aebb1" md5json="3d69f485fcbfe0ac7f0af070c43f944f"> <disk id="disk01" chs="40:1:8" dir="archive/advemath.100" href="/apps/pcx86/1983/adventmath/ADVENTMATH100.json" md5="fb1c4d22b2488a971118d656423036d5" md5json="587fbf3d04963b12c11d5cd53dc9e483">
<name>Adventures in Math 1.00</name> <name>Adventures in Math 1.00</name>
<file size="18688" time="1983-08-11 12:00:12" attr="0x20" md5="79d17f58ca8232b7173b80dd05b13b70">ADVENTUR.BAS</file> <file size="18688" time="1983-08-11 12:00:12" attr="0x20" md5="79d17f58ca8232b7173b80dd05b13b70">ADVENTUR.BAS</file>
<file size="11904" time="1983-08-11 12:00:14" attr="0x20" md5="fb1ec8042448618b7bdf3ce996b1daa8">CASTLE.BAS</file> <file size="11904" time="1983-08-11 12:00:14" attr="0x20" md5="fb1ec8042448618b7bdf3ce996b1daa8">CASTLE.BAS</file>

View file

@ -407,7 +407,7 @@ DiskDump.sUsage = "Usage: " + DiskDump.sAPIURL + "?" + DumpAPI.QUERY.PATH + "={u
* PCJS_LABEL is our default label, used whenever a more suitable label (eg, the disk image's folder name) * PCJS_LABEL is our default label, used whenever a more suitable label (eg, the disk image's folder name)
* is not available or not supplied, and PCJS_OEM is inserted into any DiskDump-generated diskette images. * is not available or not supplied, and PCJS_OEM is inserted into any DiskDump-generated diskette images.
*/ */
DiskDump.PCJS_LABEL = "PCJS.ORG"; DiskDump.PCJS_LABEL = "PCJS";
DiskDump.PCJS_OEM = "PCJS.ORG"; DiskDump.PCJS_OEM = "PCJS.ORG";
/** /**
@ -1688,10 +1688,10 @@ DiskDump.prototype.readDir = function(sDir, fRoot, done)
if (obj.isTextFile(fileInfo.FILE_NAME)) { if (obj.isTextFile(fileInfo.FILE_NAME)) {
fs.readFile(fileInfo.FILE_PATH, {encoding: "utf8"}, function doneReadDirEntry(err, sData) { fs.readFile(fileInfo.FILE_PATH, {encoding: "utf8"}, function doneReadDirEntry(err, sData) {
if (!err) { if (!err) {
sData = sData.replace(/\n/g, "\r\n").replace(/\r+/g, "\r"); var sNew = sData.replace(/\n/g, "\r\n").replace(/\r+/g, "\r");
console.log("warning: replaced line endings in " + fileInfo.FILE_NAME + " (size changed from " + fileInfo.FILE_SIZE + " to " + sData.length + " bytes)"); if (sNew != sData) console.log("warning: replaced line endings in " + fileInfo.FILE_NAME + " (size changed from " + fileInfo.FILE_SIZE + " to " + sNew.length + " bytes)");
fileInfo.FILE_DATA = sData; fileInfo.FILE_DATA = sNew;
fileInfo.FILE_SIZE = sData.length; fileInfo.FILE_SIZE = sNew.length;
} else { } else {
if (!errSave) errSave = err; if (!errSave) errSave = err;
} }
@ -1819,10 +1819,10 @@ DiskDump.prototype.readPath = function(sPath, done)
if (obj.isTextFile(fileInfo.FILE_NAME)) { if (obj.isTextFile(fileInfo.FILE_NAME)) {
DiskDump.readFile(sFilePath, "utf8", function doneReadPathEntry(err, sData) { DiskDump.readFile(sFilePath, "utf8", function doneReadPathEntry(err, sData) {
if (!err) { if (!err) {
sData = sData.replace(/\n/g, "\r\n").replace(/\r+/g, "\r"); var sNew = sData.replace(/\n/g, "\r\n").replace(/\r+/g, "\r");
console.log("warning: replaced line endings in " + fileInfo.FILE_NAME + " (size changed from " + fileInfo.FILE_SIZE + " to " + sData.length + " bytes)"); if (sNew != sData) console.log("warning: replaced line endings in " + fileInfo.FILE_NAME + " (size changed from " + fileInfo.FILE_SIZE + " to " + sNew.length + " bytes)");
fileInfo.FILE_DATA = sData; fileInfo.FILE_DATA = sNew;
fileInfo.FILE_SIZE = sData.length; fileInfo.FILE_SIZE = sNew.length;
// obj.addManifestInfo(fileInfo); // obj.addManifestInfo(fileInfo);
} else { } else {
if (!errSave) errSave = err; if (!errSave) errSave = err;
@ -1892,6 +1892,10 @@ DiskDump.prototype.buildVolLabel = function(sDir)
var fileInfo = null; var fileInfo = null;
if (sDir) { if (sDir) {
sVolume = path.basename(sDir); sVolume = path.basename(sDir);
/*
* UPDATE: This all seems overly restrictive. I don't even remember what I was thinking
* here anymore. Let's just build a frickin' label.
*
if (sVolume == sVolume.toUpperCase()) { if (sVolume == sVolume.toUpperCase()) {
var i = sVolume.indexOf('-'); var i = sVolume.indexOf('-');
if (i > 0) { if (i > 0) {
@ -1902,11 +1906,17 @@ DiskDump.prototype.buildVolLabel = function(sDir)
sVolume = sVolume.substr(i+1); sVolume = sVolume.substr(i+1);
} }
} }
*/
} }
if (!sVolume || sVolume.toLowerCase() == "archive" || sVolume.toLowerCase() == "disk") { if (!sVolume || sVolume.toLowerCase() == "archive" || sVolume.toLowerCase() == "disk") {
/*
* UPDATE: If I was lazy and just dumped all the files for this disk image into a folder
* generically named either "archive" or "disk", then let's give it more meaningful name for
* the outside world (ie, the name of this project).
*/
sVolume = DiskDump.PCJS_LABEL; sVolume = DiskDump.PCJS_LABEL;
} }
if (sVolume && sVolume.length <= 11) { if (sVolume) {
fileInfo = {}; fileInfo = {};
fileInfo.FILE_NAME = this.buildName(sVolume); fileInfo.FILE_NAME = this.buildName(sVolume);
fileInfo.FILE_ATTR = DiskDump.ATTR_VOLUME; fileInfo.FILE_ATTR = DiskDump.ATTR_VOLUME;
@ -1914,8 +1924,10 @@ DiskDump.prototype.buildVolLabel = function(sDir)
* I used to initialize the volume label's date with a simple "new Date()", but because that results * I used to initialize the volume label's date with a simple "new Date()", but because that results
* in a different disk image every time we run DiskDump, I've opted for a hard-coded date/time (ie, the * in a different disk image every time we run DiskDump, I've opted for a hard-coded date/time (ie, the
* day the IBM PC was introduced, August 12, 1981, with an arbitrary time of 12pm). * day the IBM PC was introduced, August 12, 1981, with an arbitrary time of 12pm).
*
* UPDATE: I'm not sure I care about that anymore. Time-stamping the created disk image seems more useful.
*/ */
fileInfo.FILE_TIME = fNormalize? new Date(1981, 7, 12, 12) : new Date(); fileInfo.FILE_TIME = /* fNormalize? new Date(1981, 7, 12, 12) : */ new Date();
this.validateTime(fileInfo.FILE_TIME); this.validateTime(fileInfo.FILE_TIME);
fileInfo.FILE_SIZE = 0; fileInfo.FILE_SIZE = 0;
} }