outputStream method
void
outputStream()
Implementation
void outputStream() {
//Debugger.verbose('${pcHex(-1)} [output_stream]');
var operands = visitOperandsVar(2, true);
var stream = MathHelper.toSigned(operands[0].value!);
switch (stream.abs()) {
case 1:
outputStream1 = !(stream < 0);
break;
case 2:
outputStream2 = !(stream < 0);
break;
case 3:
if (stream < 0) {
if (Z.memoryStreams.isEmpty) return;
//write out to memory
var addr = Z.memoryStreams.last!;
Z.memoryStreams.removeLast();
var data = Z.sbuff.toString();
Z.sbuff.clear();
//Debugger.debug('(streams: ${Z._memoryStreams.length}}>>> Writing "$data"');
mem.storew(addr, data.length);
addr += 2;
for (int i = 0; i < data.length; i++) {
mem.storeb(addr++, ZSCII.charToZChar(data[i]));
}
//if the output stream queue is empty then
if (Z.memoryStreams.isEmpty) {
outputStream3 = false;
}
} else {
//adding a buffer location to the output stream stack
outputStream3 = true;
Z.sbuff.clear();
Z.memoryStreams.add(operands[1].value);
// Debugger.debug('>>>> Starting Memory Stream: ${Z.sbuff}');
if (Z.memoryStreams.length > 16) {
//(ref 7.1.2.1)
throw GameException('Maximum memory streams (16) exceeded.');
}
}
break;
case 4:
outputStream3 = !(stream < 0);
break;
}
}