The "Try again" Term

"...soon afterwe!!~eft Earth over three hundred years ago."


On the first terminal on "Try again" we read the following garbaged message:


warning (#157) symbol 'enterITask' is not marked as
weak,
but its library 'ioTask' is
warning (#157) symbol 'killITask' is not marked as
weak,
but its library 'ioTask' is 
warning (#157) symbol 'newITask' is not marked as
weak,
but its library 'ioTask' is 
warning (#157) symbol 'statusITask' is not marked as
weak, 
but its library 'ioTask' is 
warning (#157) symbol 'idleITask' is not marked as
weak, 
but its library 'ioTask' is 
error (#81) symbol 'exitITask' undefined
execution of interface.cout.term.pub terminated

(*&)&
~~~~~~&>%*{The colony has been wiped out. Phhht! Just like
that.hpe~~jy658[69l[il[70l
-0oli77765~~uI%OI&%
UHL^U_3kg
he Pfhor are sla``vers.  Their trading empire``````~ rose to
prominence soon afterwe!!~eft Earth over three hundred years
ago.  ~~The Pfhor make

extensive use of subservient client races for man``u`~~~al
labor at home and as soldiers abroad.  Most of their slaves
are takenee from low-technology worlds~~~~~~~l1p, often by the
hundreds of U*^*ILJEHJ~~~~~~~asfgk]86
87;o hairless light-skinned bipeds, nearly two meters in
height, with three red eyes arranged in a triangular
patter\];POP""
];R+IP+2441`4`
thousands at a tim`~~~e, usually for sale to high-technology
races.

^(`~~~~~~hough certain client ~`races are often employed as
soldiers]\6f~fxf`~~fx!~, the Pfhor have no reluctance to
fight.

<leela.wirehead.870229//b7>

Finish the battle
<Try again (Terminal 1)>
If we remove the garbage, tidy up the remaining text and rearrange some of the lines we come up with the following suggested text.
The colony has been wiped out. Phhht! Just like that.

The Pfhor are slavers. Their trading empire rose to prominence soon after we left Earth over three hundred years ago. The Pfhor make extensive use of subservient client races for manual labor at home and as soldiers abroad. Most of their slaves are taken from low-technology worlds often by the hundreds of thousands at a time, usually for sale to high-technology races.

hairless light-skinned bipeds, nearly two meters in height, with three red eyes arranged in a triangular pattern.

Though certain client races are often employed as soldiers, the Pfhor have no reluctance to fight.

<leela.wirehead.870229//b7>

Finish the battle

Two points have already been raised about this terminal.
  1. The line "The colony has been wiped out. Phhht! Just like that." does not appear in the term resources. Indeed it was Simon Brownlee <Simon.Brownlee@jrc.it> who discovered that the text string comes from a code resource (9, offset 1798). See the Colony section for details. The reason for this is not clear. Apart from this peculiarity is the fact that the colony was not wiped out at the time we read the message. Indeed the colony was not wiped out until some three months later.
  2. The line "Their trading empire rose to prominence soon after we left Earth over three hundred years ago." appears to be incorrect. A point which is discussed in the Dates section.
Eylon Caspi <eylon@glue.umd.edu> has examined this terminal in some detail and offers some explanations and raises a number of questions.

warning (#157) symbol 'enterITask' is not marked as
weak,
but its library 'ioTask' is
warning (#157) symbol 'killITask' is not marked as
weak,
but its library 'ioTask' is 
warning (#157) symbol 'newITask' is not marked as
weak,
but its library 'ioTask' is 
warning (#157) symbol 'statusITask' is not marked as
weak, 
but its library 'ioTask' is 
warning (#157) symbol 'idleITask' is not marked as
weak, 
but its library 'ioTask' is 
error (#81) symbol 'exitITask' undefined
execution of interface.cout.term.pub terminated
<Try again (Terminal 1)>
Eylon writes:

This looks like compilation errors for a program with dynamically linked libraries. Dynamic libraries are pieces of code that can be loaded and called by a program on demand. They reside in files that are separate from the original executable, which helps keep file sizes down. Often, dynamic libraries are implemented as shared libraries, so that a single copy of the code in memory can be executed by multiple programs.

The symbols 'enterITask', 'killITask', etc. would be routines in the 'ioTask' library. "io" is input/output, and I figure the "ITask" suffix means input task. A task, by the way, typically refers to an independently-executed thread, namely a child process.

So whose errors are these? Leela's, undoubtedly. Remember that Leela gets attacked, reformatted, and reset in this chapter. She also tells us something about her child processes:


I should be more lucid now, and apologize for my earlier
rambling.  Durandal's meddling has run its course and I have
returned to normalcy.  Neither he nor the S'pht infiltrators
ever discovered my real location in the core, and though they
destroyed nearly all of my child processes, I myself am
unharmed.
<Try again (Terminal 2: 'Success' message)>

The S'pht had destroyed Leela's child processes, then reset her core logic functions. So certainly she would need to respawn child processes. The errors in the terminal may be an inconsequential part of the reset process, or they may be part of the original S'pht attack on Leela (i.e. leela being prevented from starting processes). Since they sound like compilation or initialization warnings, I tend to think that they appeared while Leela was rebooting. Warnings, incidentally, are not fatal, so they would not prevent Leela from rebooting.

Leela's dead input processes, BTW, may arise from the S'pht trying to cripple her perception of the world. To disable Leela, Durandal and the S'pht would only have to cut off her interaction with the physical world -- shut off her inputs (perceptions) and outputs (controls).

The message "execution of interface.cout.term.pub terminated" probably means that somebody cut Leela off in the middle of her garbled message. "cout" is the standard output stream in the programming language C++, and I presume that interface.cout.term.pub refers to a terminal output routine. This is probably another instance of the S'pht shutting down Leela's functions. So there is evidence either way for when the warnings were actually created (while S'pht attack Leela, or while they benevolently reboot her back to life). But it's probably not consequential.

Eylon continues:

When did the Pfhor come to power as galactic slavers? The evidence in M2 says that they've been around for many millenia. For instance, the Pfhor enslaved the S'pht about 1000 years before the Marathon adventure, i.e. around 1800 AD. Also, in the last terminal of the game, Durandal tells us that the Nakh rebelled against their Pfhor slavers some 6000 years earlier.


he Pfhor are sla``vers.  Their trading empire``````~ rose to
prominence soon afterwe!!~eft Earth over three hundred years
ago.  ~~The Pfhor make
<Try again (Terminal 1)>

The [above] passage seems to say "The Pfhor are slavers. Their trading empire rose to prominence soon after [the Marathon] left Earth over three hundred years ago". The Pfhor slaving empire is only 300 years old? Several questions arise:
  1. Where did this information come from?

    The existence of the Pfhor was supposed to be a complete surprise to the colonists. Leela had to spend a lot of time interviewing crew and analyzing specimen to learn about the Pfhor. Yet this terminal contains detailed information about Pfhor history and politics. Who could have known this? Could Leela have gathered such knowledge during the 2-day attack of the Marathon? I doubt it.

    Durandal had been in negotiation with the S'pht, and they could have taught him much about the history of the Pfhor. But the slaving empire's age of 300 years is irreconcilable with everything we learn in M2. The S'pht themselves would have known that it is incorrect.

  2. Is the information reliable?

    We learn in the Lost Network Packets that "When the Marathon was attacked, Leela began to scramble and rewrite all of the historical information for mankind." What we might be reading is Leela's scrambled history -- she could have rewritten it or just made it up. But why would Leela fake an account of Pfhor history in effort to confuse the Pfhor? Was she trying to give them the impression that mankind knew about them and was prepared for them?

  3. Who is showing us this information?

    Many other garbled terminals in the Rebellion chapter contain messages from Leela, which suggests that she tried to contact us despite her ill condition in the computer core. She may have been spewing bits of her core while trying to communicate with us at this terminal.

    Another possibility is that Durandal, who at this point has almost complete control of the Marathon computer systems, was searching through Leela's core. He had good reason to search for historical information, since his pre-launch records had been deleted before he became rampant (see "Ingue Ferroque"). It is not clear to me, however, why Durandal would splash bits of damaged core on public terminals.

    The final phrase "Finish the battle" could be a message from either Leela or Durandal.

    Could there be a clue in the tag ? Is "wirehead" an allusion of some sort? The same tag appears in the previous level ("Welcome to the Revolution...") on a terminal which seems to be a personal message from Leela. So this terminal may also be message from Leela. That does not, however, preclude the possibility of Durandal intercepting it..."

"My current opinion is that the 300 year age for the Pfhor empire originated in Leela's rewritten history. It has to be erroneous. Another possibility (for conspiracists!) is that the information originated in Earth's historical files. Since the passage is presumably dated after the launch of the Marathon, it would have had to be uploaded to the Marathon by radio shortly after the departure. But then, where would the information have come from? Jjaro sources? Why would they lie to the humans?"




So is the "Try again" terminal an attempt by Leela to confuse the Pfhor by scrabbling and rewriting Earth history?

Let me offer another possible explanation. The terminal is correct. The colony was destroyed and the Pfhor's empire did rise to prominence soon after we left Earth over three hundred years ago.

Of course the we is not us and the colony in not the human colony on Tau Ceti.

Are we reading information given to us by the S'pht concerning themselves or indeed about the Jjaro?




Eylon Caspi <eylon@glue.umd.edu> writes again concerning the above:

The S'pht on Earth, I doubt it. But we know the Jjaro were on Earth, probably for multiple visits. The formality of the message suggests that it was written by someone who had studied and analyzed the Pfhor. It doesn't sound like what a subservient S'pht would write, but it could be what an invisible Jjaro observer might write. The phrasing "after WE left earth..." indicates that the message is somehow personal. Otherwise it would probably say "after the XXXX left Earth," to be consistent with the formal tone of the passage. Well, who would have sent such a personal message? Maybe the S'pht, but more likely the Jjaro. And where would a personal Jjaro message come from?

At first I thought this might be a warning issued by the Jjaro to Earth before the launch of the Marathon, stored in Leela's memory. But the phrasing "after we left Earth" suggests that the message was not transmitted on Earth, but somewhere away from Earth.

...suppose that the message regarding the Pfhor was part of a Jjaro effort to guide the Marathon to Tau Ceti. It could be a prerecorded message left on our moon (at an ancient Jjaro outpost) or on Tau Ceti ("Jjarro were at Tau Ceti"). I like the 2nd idea better - the text "Jjarro were at Tau Ceti" suggests that someone early in Marathon knew that the Jjaro had been at Tau Ceti. I think that someone found Jjaro evidence at the planetside colony, perhaps including the Jjaro's warning about the Pfhor. This may even be where Durandal found out about the Pfhor -- he had 21 years in which to discover the Jjaro artifacts and to summon the Pfhor.


Concerning the term wirehead I believe it was coined by the sf writer Larry Niven. If somebody can correct me on this please do. [Hamish]




Matthew Smith <matthew@quest.net> writes concerning the origin of the term "wirehead":

Yes, Larry Niven. Major references in "Death By Ecstasy" in _The Long Arm of Gil Hamilton_. And the _Ringworld Engineers_. Plus other numerous short stories.

A Wirehead in the Nivenian sense is a sophont who uses direct electronic stimulation of the brain's pleasure centers to excess. In Niven's future history it was once a problem on Earth, but they solved it by doing nothing; they just let all the addicts (people who had genetic tendencies to do that kind of thing) die out.

So a wirehead is usually portrayed as a happy mindless drooling idiot getting high on house current.




Eylon Caspi <eylon@glue.umd.edu> writes concerning the following text from the first terminal on "Try again":


UHL^U_3kg
he Pfhor are sla``vers.  Their trading empire``````~ rose to
prominence soon afterwe!!~eft Earth over three hundred years
ago.  ~~The Pfhor make

extensive use of subservient client races for man``u`~~~al
labor at home and as soldiers abroad.  Most of their slaves
are takenee from low-technology worlds~~~~~~~l1p, often by the
hundreds of U*^*ILJEHJ~~~~~~~asfgk]86
87;o hairless light-skinned bipeds, nearly two meters in
height, with three red eyes arranged in a triangular
patter\];POP""
];R+IP+2441`4`
thousands at a tim`~~~e, usually for sale to high-technology
races.

^(`~~~~~~hough certain client ~`races are often employed as
soldiers]\6f~fxf`~~fx!~, the Pfhor have no reluctance to
fight.
<Try again (Terminal 1)>

I think it is, quite simply, Leela's light speed message to Earth. This is really the most obvious explanation, but it is still subject to the question... how did Leela acquire such detailed knowledge about the Pfhor? My guess - from Durandal himself.

Eylon points out that Leela did appeared to receive information about the Pfhor from Durandal before she sent her light-speed warning message to Earth.

On Defend THIS! Leela says:


I have established contact with Durandal for the first time
since the attack.  He seems to have sustained less damage than
I had previously suspected.

Durandal reports that he has been in communication with the
Aliens.  He says that the Aliens behind the invasion call
themselves the Pfhor, and that the ones attacking the computer
net are called S'pht.  But he was reluctant to share the
details of his communication and I cannot understand this.
<Defend THIS! (Terminal 1)>

and again later on:


Pfhor are generally thinner and lighter than humans and are
superbly adapted for low gravity environments.  Durandal told
me that there are many "clans" of Pfhor, each physically
distinct from each other, but my summary only includes two of them.
Defend THIS! (Terminal 4)
<Defend THIS! (Terminal 4)>

Eylon continues:

Durandal learned a lot from the aliens, and apparently he shared much information with Leela. Leela could have obtained the historical accounts of the "Try Again" terminal from him.




But what of the lines:


he Pfhor are sla``vers.  Their trading empire``````~ rose to
prominence soon afterwe!!~eft Earth over three hundred years
ago.  
<Try again (Terminal 1)>
Did the Pfhor empire only rise to prominence in the latter half of the twenty-fifth century?

Both Aaron Sommer <aaron_sommer@mail.herringn.com> and Simon Rowland <simon@eagle.ca> point out that empires can exist for long periods before rising to prominence. Thus the Pfhor empire could have existed long before it rose to prominence.

Does the phrase "afterwe!!~eft Earth" refer to us? Well the term Earth as used here may simply be an all encompassing term to include Earth and Mars. Least we forget Mars was a colony of Earth and if this is Leela's warning message to Earth then it might be acceptable to say we left Earth for the sake of simplicity or political expediency.

Thus a simplier explanation for this garbaged message is that it presents part of Leela's light-speed warning message to Earth sent from G-4 Sunbathing Landing Station. A message which in the process of her core logic reset is resurrected from her memory banks.




Jeff Eaton <eaton@ais.net> writes concerning the apparent confusion between the Pfhor's slave empire being 1000+ years old and the Pfhor's trading empire being only 300 years old.

Simple explanation: The Pfhor began a period of military conquest, perhaps to gain new territory for an expanding population, etc. They subsequently began on a period of conquest and enslavement.

This might be viewed as something *different* than the 'trading empire' referred to in the Try again terms. After having conquered loads of worlds, they may have made peaceful contact with new races, and begun engaging in profitable trading with them. After years of conquest, they would have large numbers of low-tech slave races to 'sell off,' giving them an instant reputation througout the universe as *the* place to get slave labor.

Jeff interpretation may indeed be correct. The text itself seems to refer to the Pfhor trade in slaves:

thousands at a tim`~~~e, usually for sale to high-technology races.




Richard McKeon <R.J.McKeon@durham.ac.uk> writes:

Further to Eylon Caspi's comments (see above) about dynamically loaded/shared libraries, when writing a program that uses them, you can 'weak' link to libraries, which means that your app will run even if the library isn't present. ÊIt looks like some sort of error related to this has happened when the terminal says

"warning (#157) symbol 'enterITask' is not marked as weak, but its library 'ioTask' is"

etc.




Aaron Davies <agd12@columbia.edu> writes:

I'd like first to point out that while warnings are not fatal, errors are. I'd say, therefore, that this error is probably what caused the interface task to terminate. Second, while I don't know much about C++, I am somewhat familiar with Java, and the error sounds like a procedure, exitITask, was called which had not been implemented. Finally, one question: the last line implies that the task was running not compiling. Which was it?




James Lanfear <jclanfear@presys.com> writes:

The first section is almost definitely from a compiler. The warnings are trivial, more or less, dealing with a conflict in how the library itself and its functions are defined in the program. The error, on the other hand, is quite serious: 'exitITask undefined' is the result of calling a function, 'exitITask', that doesn't exist, at least as far as the program is concerned. This would almost certainly cause a fatal error if run (though it would be almost impossible to find a compiler that would let you get that far).

As Mr. Davies pointed out, this is followed by a process, interface.cout.term.pub, being terminated, which doesn't make any sense if those are compiler warnings. One explanation is that the error is from the program itself, followed by self-termination. This would require that the program be built with a lot of debugging info included--and apparently a debugger, as well--by an extremely stupid compiler, but it could happen.

A more interesting alternative is that the terminal driver (which is what it looks like to me) was being built as it was running; at some point the programmer linked in ioTask, believing exitITask was an included function, and it blew up. While it is unusual to write applications while they are running, it very definitely can be done, e.g., in Smalltalk or Lisp environments, such as EMACS. Coincidentally (well, maybe not), those languages are often used in AI, Lisp having been virtually synonymous with AI for decades.




Sarwat Khan <sarwat@interlog.com> writes:

@collection#593!=394

OK, let's work on @collection#593. @ in Pascal means & in C. Which means "address." So @collection#593 means the address of collection#593 (not sure what the significance of #593 is, probably some kind marked offset like HTML). != means "not equal to" in C/C++/Java. So the address of the thing on the left isn't the same as the thing on the right, which looks something like an IP address.

What is it? Some kind of collection I guess. I'm sure someone else would enjoy digging up the meaning of the stuff on the right. One tip though; it looks like hexadecimal. Try converting it to decimal (base 10) and see what numbers you get. Maybe you'll see it among other references to Leela. Those are big numbers though.

warning (#157) symbol 'enterITask' is not marked as
weak,
but its library 'ioTask' is warning (#157) symbol 'killITask' is not marked as
weak,
but its library 'ioTask' is warning (#157) symbol 'newITask' is not marked as
weak,
but its library 'ioTask' is warning (#157) symbol 'statusITask' is not marked as
weak,
but its library 'ioTask' is warning (#157) symbol 'idleITask' is not marked as
weak,
but its library 'ioTask' is

These are linker errors. What's a linker? (I'm not going to vouch for the accuracy of the following)

A compiler takes hand written code like this:

int foo(x)	//function foo(x) returns an integer
{
	return x + bar(x);
	//return x plus the result of the function bar, which is given x
}
And turns it into a file that contains machine code, that looks like this:
1010101010111_bar_(x)101010

You get the idea. bar(x) is a "symbol" in that file that the compiler didn't know how to turn into machine code. So it just left the description in there.

Compiling alone doesn't make a program you can run (as you can see, the job's unfinished). You might have several files of machine code that you want to tie together to make a program (another file might contain the machine code that contains bar(x)). You use a linker to tie these together.

The linker merges a bunch of machine code files together, and where there's stuff like _bar_(x), it puts the reference to the actual 'bar(x)' machine code. If it can't find the actual machine code for 'bar(x)', it will spit out an error like "bar(x) undefined."

The merged machine code file that the linker makes can be run as a program.

So what's this stuff about weak and libraries?

First, libraries. Libraries are chunks of code that are compiled and linked, but aren't designed to run by themselves. The Mac OS has a ton of libraries, from things like the Drag And Drop Manager to QuickTime.

Programs that want to play movies don't have all the code to play movies themselves. They use the code contained in QuickTime to do the work (and, in their code, they include in their code symbols like PlayMovie(), which are defined in the QuickTime library).

Rather than linking to QuickTime when the program is built (so the QuickTime code is part of the program--those would be large programs), they dynamically link to them when the program is launched. That means that the symbol 'PlayMovie()' will still be in the linked machine code (the program), waiting to be resolved.

When the program is launched, the OS resolves all the symbols using the proper libraries. If it can't find the libraries, the program crashes and burns.

If the program is designed to run with and without the ability to play movies (it can run with and without QuickTime installed), it has to have a weak link to QuickTime when the linker builds the program. That means when the program is run, the links to QuickTime can remain unresolved, and the program is smart enough to not crash and burn in the situation. In this case, the symbol PlayMovie() is a weak link that doesn't mind being broken. In the case where it crashes and burns, it is a strong link and the program won't run if it's broken.

error (#81) symbol 'exitITask' undefined execution of interface.cout.term.pub terminated

Here, the program was launched. It contained code that called symbol 'exitITask'. This symbol is probably defined in the library ioTask (which is probably an input/output library), and wasn't weak linked. As you saw above, the library ioTask itself was weak linked. The program was launched, the operating system tried to dynamically link it to the library ioTask but it couldn't (it was probably missing), so the program crashed and burned.

The program was interface.cout.term.pub. 'cout' is the output stream in C++. If you do this:

cout << "foobar"

"foobar" gets written to the OS's command line (think Unix). So I guess this is the "public terminal output interface" program that bombed (we know from things like _Jackson that they're using Mac OS, and this is a Unix type thing they're using here. Did Bungie foresee Mac OSX)?

In fact, this whole thing looks like the error report from a command line. First, someone tried to link a program, and linker errors were reported. Then, the they tried to run it, and it bombed.

So, what did we learn? Someone was trying to rebuild part of the Marathon's computer systems that were wiped out, like the output display for that terminal. ?Or maybe it was Leela trying to rebuild herself, the part of her that communicates with terminals (obviously the output display for the terminal was working; if this is the case than it was getting Leela's error messages).



Go Back to Marathon's Story Home Page
***TRANSPORT WHEN READY***


Page maintained by Hamish Sinclair
Hamish.Sinclair123@gmail.com
Last updated Apr 13, 2004