More diagnostic output improvements

This commit is contained in:
Jeff Parsons 2017-06-28 17:51:15 -07:00 • committed by Jeff Parsons
commit 51f8440e9b
40 changed files with 4462 additions and 4398 deletions

View file

@ -22,7 +22,7 @@ You can also browse our collection of archived disks:
* [Challenger 1P Disk Library](/disks/c1p/) * [Challenger 1P Disk Library](/disks/c1p/)
* [DEC Disk Library](/disks/dec/) * [DEC Disk Library](/disks/dec/)
{% include_relative pcx86/apps.md %} {% include_relative pcx86/README.md %}
--- ---

View file

@ -1,67 +1,46 @@
--- IBM PC Application Demos
layout: page ------------------------
title: IBM PC Application Demos
permalink: /apps/pcx86/
---
{% include_relative apps.md %} Below are selected [PCx86](/docs/about/pcx86/) demos of classic IBM PC applications. In many cases,
we've had to create our own "Demo Disks", because copies of the original distribution disks are difficult
to find, and in some cases (e.g., [Executive Suite](/apps/pcx86/1982/esuite/)), the original disks were
copy-protected, so we've been forced to use a "cracked" copy of the software instead.
--- A list of all the software available to PCx86 machines can be found in the [IBM PC Disk Library](/disks/pcx86/).
### Creating IBM PC Application Demos ### 1981
Demos in our [Application Archives](/apps/) combine * [DONKEY.BAS](/apps/pcx86/1981/donkey/)
[Software Application Manifests](/apps/#software-application-manifests) with * [Microsoft Adventure](/disks/pcx86/games/microsoft/adventure/)
[Machine Configurations](/devices/pcx86/machine/). * [VisiCalc](/apps/pcx86/1981/visicalc/)
We'll use the [VisiCalc Demo](1981/visicalc/) as an example. First, we choose a machine configuration. ### 1982
For VisiCalc, we chose a Model 5150 machine with a Monochrome Display, and then inserted a link to that machine
in the demo's [manifest](1981/visicalc/manifest.xml):
```xml * [Executive Suite](/apps/pcx86/1982/esuite/)
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml"/> * [RatBas v2.13](/apps/pcx86/1982/ratbas/)
``` * [Zork I](/disks/pcx86/games/infocom/zork1/)
Next, the [manifest](1981/visicalc/manifest.xml) requires a disk image containing the VisiCalc program ### 1983
(VC.COM). We used the [DiskDump](/modules/diskdump/) module to create that disk image:
cd apps/pcx86/1981/visicalc * [Adventures in Math v1.00](/apps/pcx86/1983/adventmath/)
node ../../../../modules/diskdump/bin/diskdump --path="archive/VC.COM;../README.md" --format=json --output=disk.json --manifest * [Planetfall](/disks/pcx86/games/infocom/planet/)
* [SuperCalc2 v1.00](/disks/pcx86/apps/other/sc2/1.00/)
* [SuperCalc3 v1.00](/disks/pcx86/apps/other/sc3/1.00/)
* [Zork II](/disks/pcx86/games/infocom/zork2/)
* [Zork III](/disks/pcx86/games/infocom/zork3/)
The DiskDump command created a disk image named "disk.json" containing two files ("VC.COM" from the "archive" ### 1984
subdirectory, and "README.md" from the "archive" parent directory) and automatically added that disk image to the demo's
[manifest](1981/visicalc/manifest.xml):
```xml * [The Hitchhiker's Guide to the Galaxy](/disks/pcx86/games/infocom/hhiker/)
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pcx86/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
<file dir="../">README.md</file>
</disk>
```
Now that the manifest contains a disk image, we were able to add the manifest to our set of ### 1985
[Sample Disks](/disks/pcx86/samples.xml):
```xml * [Rogue](/apps/pcx86/1985/rogue/)
<manifest ref="/apps/pcx86/1981/visicalc/manifest.xml" disk="*"/>
```
Next, we started a version of our chosen machine that's also configured to use the Debugger, by loading ### 1987
the following **machine.xml** into a web browser (it's assumed the Node web server is already running on port 8088):
http://localhost:8088/devices/pcx86/machine/5150/mda/64kb/debugger/machine.xml * [ThinkTank v2.14](/apps/pcx86/1987/thinktank/)
Then we booted DOS, loaded the VisiCalc disk, ran VisiCalc, pressed the Debugger's "Halt" button, pressed "Clear" to ### 1992
clear the Debugger's output window, and typed the following Debugger command:
d state * [The Dungeons of Moria v5.5](/apps/pcx86/1992/moria/)
We copied-and-pasted the entire contents of the Debugger's output window into a file named "state.json", and then
updated the &lt;machine&gt; entry in the [manifest](1981/visicalc/manifest.xml):
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
```
It's important to use a state file *only* with the machine configuration it was created with; in this case, we're OK,
because the only difference between the two chosen Model 5150 machines is the addition of the Debugger.

View file

@ -1,46 +0,0 @@
IBM PC Application Demos
------------------------
Below are selected [PCx86](/docs/about/pcx86/) demos of classic IBM PC applications. In many cases,
we've had to create our own "Demo Disks", because copies of the original distribution disks are difficult
to find, and in some cases (e.g., [Executive Suite](/apps/pcx86/1982/esuite/)), the original disks were
copy-protected, so we've been forced to use a "cracked" copy of the software instead.
A list of all the software available to PCx86 machines can be found in the [IBM PC Disk Library](/disks/pcx86/).
### 1981
* [DONKEY.BAS](/apps/pcx86/1981/donkey/)
* [Microsoft Adventure](/disks/pcx86/games/microsoft/adventure/)
* [VisiCalc](/apps/pcx86/1981/visicalc/)
### 1982
* [Executive Suite](/apps/pcx86/1982/esuite/)
* [RatBas v2.13](/apps/pcx86/1982/ratbas/)
* [Zork I](/disks/pcx86/games/infocom/zork1/)
### 1983
* [Adventures in Math v1.00](/apps/pcx86/1983/adventmath/)
* [Planetfall](/disks/pcx86/games/infocom/planet/)
* [SuperCalc2 v1.00](/disks/pcx86/apps/other/sc2/1.00/)
* [SuperCalc3 v1.00](/disks/pcx86/apps/other/sc3/1.00/)
* [Zork II](/disks/pcx86/games/infocom/zork2/)
* [Zork III](/disks/pcx86/games/infocom/zork3/)
### 1984
* [The Hitchhiker's Guide to the Galaxy](/disks/pcx86/games/infocom/hhiker/)
### 1985
* [Rogue](/apps/pcx86/1985/rogue/)
### 1987
* [ThinkTank v2.14](/apps/pcx86/1987/thinktank/)
### 1992
* [The Dungeons of Moria v5.5](/apps/pcx86/1992/moria/)

67
apps/pcx86/index.md Normal file
View file

@ -0,0 +1,67 @@
---
layout: page
title: IBM PC Application Demos
permalink: /apps/pcx86/
---
{% include_relative README.md %}
---
### Creating IBM PC Application Demos
Demos in our [Application Archives](/apps/) combine
[Software Application Manifests](/apps/#software-application-manifests) with
[Machine Configurations](/devices/pcx86/machine/).
We'll use the [VisiCalc Demo](1981/visicalc/) as an example. First, we choose a machine configuration.
For VisiCalc, we chose a Model 5150 machine with a Monochrome Display, and then inserted a link to that machine
in the demo's [manifest](1981/visicalc/manifest.xml):
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml"/>
```
Next, the [manifest](1981/visicalc/manifest.xml) requires a disk image containing the VisiCalc program
(VC.COM). We used the [DiskDump](/modules/diskdump/) module to create that disk image:
cd apps/pcx86/1981/visicalc
node ../../../../modules/diskdump/bin/diskdump --dir=archive/visicalc.81 --format=json --output=VISICALC1981.json --manifest
The DiskDump command creates a disk image named **VISICALC1981.json** containing the files the archive/visicalc.81
subdirectory (ie, **VC.COM**) and automatically added that disk image to the demo's [manifest](1981/visicalc/manifest.xml):
```xml
<disk id="disk01" chs="40:1:8" dir="archive/visicalc.81" href="/apps/pcx86/1981/visicalc/VISICALC1981.json" md5="5b77efdfb86aa747edb49811db75021d" md5json="b1a45cb769cf04daa259263a92bacf16">
<name>VisiCalc (1981)</name>
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
<link href="http://www.bricklin.com/history/vclicense.htm">VisiCalc License</link>
</disk>
```
Now that the manifest contains a disk image, we were able to add the manifest to our set of
[Sample Disks](/disks/pcx86/samples.xml):
```xml
<manifest ref="/apps/pcx86/1981/visicalc/manifest.xml"/>
```
Next, we started a version of our chosen machine that's also configured to use the Debugger, by loading
the following **machine.xml** into a web browser (it's assumed the Node web server is already running on port 8088):
http://localhost:8088/devices/pcx86/machine/5150/mda/64kb/debugger/machine.xml
Then we booted DOS, loaded the VisiCalc disk, ran VisiCalc, pressed the Debugger's "Halt" button, pressed "Clear" to
clear the Debugger's output window, and typed the following Debugger command:
d state
We copied-and-pasted the entire contents of the Debugger's output window into a file named "state.json", and then
updated the &lt;machine&gt; entry in the [manifest](1981/visicalc/manifest.xml):
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
```
It's important to use a state file *only* with the machine configuration it was created with; in this case, we're OK,
because the only difference between the two chosen Model 5150 machines is the addition of the Debugger.

View file

@ -208,7 +208,7 @@
padding: 0; padding: 0;
resize: none; resize: none;
color: white; color: white;
font-size: large; font-size: medium;
background: rgba(0, 0, 0, .5); background: rgba(0, 0, 0, .5);
opacity: 0; opacity: 0;
line-height: 0; line-height: 0;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -305,11 +305,16 @@ class Computer extends Component {
if (sStatePath) this.fServerState = true; if (sStatePath) this.fServerState = true;
} }
if (!sStatePath) { this.sStateURL = sStatePath;
if (!this.sStateURL) {
this.setReady(); this.setReady();
} else { } else {
Web.getResource(sStatePath, null, true, function(sURL, sResource, nErrorCode) { var sProgress = "Loading " + this.sStateURL + "...";
Web.getResource(this.sStateURL, null, true, function(sURL, sResource, nErrorCode) {
cmp.doneLoad(sURL, sResource, nErrorCode); cmp.doneLoad(sURL, sResource, nErrorCode);
}, function(nState) {
cmp.println(sProgress, Component.TYPE.PROGRESS);
}); });
} }
@ -367,6 +372,7 @@ class Computer extends Component {
if (control) { if (control) {
control.style.opacity = "0"; control.style.opacity = "0";
control.style.lineHeight = "0"; control.style.lineHeight = "0";
control.value = "";
} }
} }
} }

View file

@ -135,12 +135,13 @@ class ROM extends Component {
*/ */
initBus(cmp, bus, cpu, dbg) initBus(cmp, bus, cpu, dbg)
{ {
var rom = this;
this.cmp = cmp; this.cmp = cmp;
this.bus = bus; this.bus = bus;
this.cpu = cpu; this.cpu = cpu;
this.dbg = dbg; this.dbg = dbg;
if (this.sFileURL) { if (this.sFileURL) {
var rom = this;
var sProgress = "Loading " + this.sFileURL + "..."; var sProgress = "Loading " + this.sFileURL + "...";
Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) { Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
rom.doneLoad(sURL, sResponse, nErrorCode); rom.doneLoad(sURL, sResponse, nErrorCode);

View file

@ -2385,15 +2385,13 @@ class Video extends Component {
* } * }
*/ */
var sFileURL = parmsVideo['fontROM']; this.sFileURL = parmsVideo['fontROM'];
if (sFileURL) {
var sFileExt = Str.getExtension(sFileURL); if (this.sFileURL) {
var sFileExt = Str.getExtension(this.sFileURL);
if (sFileExt != "json") { if (sFileExt != "json") {
sFileURL = Web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + sFileURL + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES; this.sFileURL = Web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + this.sFileURL + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES;
} }
Web.getResource(sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
video.doneLoad(sURL, sResponse, nErrorCode);
});
} }
} }
@ -2411,6 +2409,8 @@ class Video extends Component {
*/ */
initBus(cmp, bus, cpu, dbg) initBus(cmp, bus, cpu, dbg)
{ {
var video = this;
this.bus = bus; this.bus = bus;
this.cpu = cpu; this.cpu = cpu;
this.dbg = dbg; this.dbg = dbg;
@ -2457,7 +2457,6 @@ class Video extends Component {
} }
if (DEBUGGER && dbg) { if (DEBUGGER && dbg) {
var video = this;
dbg.messageDump(Messages.VIDEO, function onDumpVideo(asArgs) { dbg.messageDump(Messages.VIDEO, function onDumpVideo(asArgs) {
video.dumpVideo(asArgs); video.dumpVideo(asArgs);
}); });
@ -2495,6 +2494,15 @@ class Video extends Component {
else if (this.sTouchScreen == "keygrid") { else if (this.sTouchScreen == "keygrid") {
if (this.kbd) this.captureTouch(Video.TOUCH.KEYGRID); if (this.kbd) this.captureTouch(Video.TOUCH.KEYGRID);
} }
if (this.sFileURL) {
var sProgress = "Loading " + this.sFileURL + "...";
Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
video.doneLoad(sURL, sResponse, nErrorCode);
}, function(nState) {
video.println(sProgress, Component.TYPE.PROGRESS);
});
}
} }
/** /**

View file

@ -973,9 +973,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };

View file

@ -213,7 +213,7 @@
padding: 0; padding: 0;
resize: none; resize: none;
color: white; color: white;
font-size: large; font-size: medium;
background: rgba(0, 0, 0, .5); background: rgba(0, 0, 0, .5);
opacity: 0; opacity: 0;
line-height: 0; /* try to prevent Safari on iOS from always displaying a blinking cursor */ line-height: 0; /* try to prevent Safari on iOS from always displaying a blinking cursor */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3104,9 +3104,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -204,10 +204,13 @@
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 0;
border: 0; border: 0;
padding: 0; padding: 0;
resize: none; resize: none;
color: white;
font-size: medium;
background: rgba(0, 0, 0, .5);
opacity: 0;
line-height: 0; line-height: 0;
} }
.pcjs-reference { .pcjs-reference {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3394,9 +3394,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -204,10 +204,13 @@
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 0;
border: 0; border: 0;
padding: 0; padding: 0;
resize: none; resize: none;
color: white;
font-size: medium;
background: rgba(0, 0, 0, .5);
opacity: 0;
line-height: 0; line-height: 0;
} }
.pcjs-reference { .pcjs-reference {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3622,9 +3622,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };
@ -43177,12 +43180,13 @@ class ROM extends Component {
*/ */
initBus(cmp, bus, cpu, dbg) initBus(cmp, bus, cpu, dbg)
{ {
var rom = this;
this.cmp = cmp; this.cmp = cmp;
this.bus = bus; this.bus = bus;
this.cpu = cpu; this.cpu = cpu;
this.dbg = dbg; this.dbg = dbg;
if (this.sFileURL) { if (this.sFileURL) {
var rom = this;
var sProgress = "Loading " + this.sFileURL + "..."; var sProgress = "Loading " + this.sFileURL + "...";
Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) { Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
rom.doneLoad(sURL, sResponse, nErrorCode); rom.doneLoad(sURL, sResponse, nErrorCode);
@ -48896,15 +48900,13 @@ class Video extends Component {
* } * }
*/ */
var sFileURL = parmsVideo['fontROM']; this.sFileURL = parmsVideo['fontROM'];
if (sFileURL) {
var sFileExt = Str.getExtension(sFileURL); if (this.sFileURL) {
var sFileExt = Str.getExtension(this.sFileURL);
if (sFileExt != "json") { if (sFileExt != "json") {
sFileURL = Web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + sFileURL + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES; this.sFileURL = Web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + this.sFileURL + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES;
} }
Web.getResource(sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
video.doneLoad(sURL, sResponse, nErrorCode);
});
} }
} }
@ -48922,6 +48924,8 @@ class Video extends Component {
*/ */
initBus(cmp, bus, cpu, dbg) initBus(cmp, bus, cpu, dbg)
{ {
var video = this;
this.bus = bus; this.bus = bus;
this.cpu = cpu; this.cpu = cpu;
this.dbg = dbg; this.dbg = dbg;
@ -48968,7 +48972,6 @@ class Video extends Component {
} }
if (DEBUGGER && dbg) { if (DEBUGGER && dbg) {
var video = this;
dbg.messageDump(Messages.VIDEO, function onDumpVideo(asArgs) { dbg.messageDump(Messages.VIDEO, function onDumpVideo(asArgs) {
video.dumpVideo(asArgs); video.dumpVideo(asArgs);
}); });
@ -49006,6 +49009,15 @@ class Video extends Component {
else if (this.sTouchScreen == "keygrid") { else if (this.sTouchScreen == "keygrid") {
if (this.kbd) this.captureTouch(Video.TOUCH.KEYGRID); if (this.kbd) this.captureTouch(Video.TOUCH.KEYGRID);
} }
if (this.sFileURL) {
var sProgress = "Loading " + this.sFileURL + "...";
Web.getResource(this.sFileURL, null, true, function(sURL, sResponse, nErrorCode) {
video.doneLoad(sURL, sResponse, nErrorCode);
}, function(nState) {
video.println(sProgress, Component.TYPE.PROGRESS);
});
}
} }
/** /**
@ -74257,11 +74269,16 @@ class Computer extends Component {
if (sStatePath) this.fServerState = true; if (sStatePath) this.fServerState = true;
} }
if (!sStatePath) { this.sStateURL = sStatePath;
if (!this.sStateURL) {
this.setReady(); this.setReady();
} else { } else {
Web.getResource(sStatePath, null, true, function(sURL, sResource, nErrorCode) { var sProgress = "Loading " + this.sStateURL + "...";
Web.getResource(this.sStateURL, null, true, function(sURL, sResource, nErrorCode) {
cmp.doneLoad(sURL, sResource, nErrorCode); cmp.doneLoad(sURL, sResource, nErrorCode);
}, function(nState) {
cmp.println(sProgress, Component.TYPE.PROGRESS);
}); });
} }
@ -74319,6 +74336,7 @@ class Computer extends Component {
if (control) { if (control) {
control.style.opacity = "0"; control.style.opacity = "0";
control.style.lineHeight = "0"; control.style.lineHeight = "0";
control.value = "";
} }
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -204,10 +204,13 @@
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 0;
border: 0; border: 0;
padding: 0; padding: 0;
resize: none; resize: none;
color: white;
font-size: medium;
background: rgba(0, 0, 0, .5);
opacity: 0;
line-height: 0; line-height: 0;
} }
.pcjs-reference { .pcjs-reference {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3394,9 +3394,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3622,9 +3622,12 @@ class Component {
}(controlTextArea); }(controlTextArea);
this.println = function(component, control) { this.println = function(component, control) {
return function printlnControl(s, type, id) { return function printlnControl(s, type, id) {
if (DEBUG || type != Component.TYPE.PROGRESS) { if (!s) s = "";
s = (type != null? (type + ": ") : "") + (s || ""); if (type != Component.TYPE.PROGRESS || s.slice(-3) != "...") {
component.print(s + '\n'); if (type) s = type + ": " + s;
Component.appendControl(control, s + '\n');
} else {
Component.replaceControl(control, s, s + '.');
} }
if (!COMPILED && window && window.console) Component.println(s, type, id); if (!COMPILED && window && window.console) Component.println(s, type, id);
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long