Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

6 May, 2024: The networking issue during the past two days has been identified and appears to be fixed. Will keep monitoring.


computers / alt.sys.pdp10 / disassembler for PDP-10 executables [was Re: DEC didn't understand Timesharing]

disassembler for PDP-10 executables [was Re: DEC didn't understand Timesharing]

<mddfsiu2g10.fsf_-_@panix5.panix.com>

  copy mid

https://www.novabbs.com/computers/article-flat.php?id=736&group=alt.sys.pdp10#736

  copy link   Newsgroups: alt.sys.pdp10
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!panix!.POSTED.panix5.panix.com!not-for-mail
From: new...@alderson.users.panix.com (Rich Alderson)
Newsgroups: alt.sys.pdp10
Subject: disassembler for PDP-10 executables [was Re: DEC didn't understand Timesharing]
Date: 21 Jul 2022 19:38:03 -0400
Organization: PANIX Public Access Internet and UNIX, NYC
Lines: 3685
Sender: alderson+news@panix5.panix.com
Message-ID: <mddfsiu2g10.fsf_-_@panix5.panix.com>
References: <1125343931_1847@spool6-east.superfeed.net> <aHNCf.103$c64.81@dukeread12> <ETQFf.9604$In4.6015@trnddc06> <pk7lb3-cnq.ln1@dmz.pfarrell.com> <m1n9sd.bvj.ln@via.reistad.priv.no> <093ae36e-a0e5-49ae-98d6-d38d6583d3c6n@googlegroups.com>
Injection-Info: reader2.panix.com; posting-host="panix5.panix.com:166.84.1.5";
logging-data="20089"; mail-complaints-to="abuse@panix.com"
X-Newsreader: Gnus v5.7/Emacs 22.3
 by: Rich Alderson - Thu, 21 Jul 2022 23:38 UTC

William Gallant <sigma.research@gmail.com> writes:

> William Gallant here -
> I too am looking for a TOPS-10 disassembler.
> I noticed Rich Alderson's September 2005 post which states -
> "go to PDPplanet.org and follow links to request a Toad-1 account"
> and Rich could e-mail the Pascal disassembler source.
> It is now July, 2022 and the Toad-1 is shut down for i don't know how
> long. Dear Rich, if you read this post, could you somehow make the
> disassembler source available to me? Is it located in the DECUS library somewhere?

Some of the systems at Living Computers: Museum + Labs are still kept running
(because leaving them powered off makes it much harder to power them back on
when needed or wanted), including the Toad-2 to which all Toad-1 accounts were
moved in 2015.

It's a lot easier to just put a copy of the Pascal source into a Usenet post,
because those systems which are running are behind a strong firewall which is
only opened on a case by case basis.

I tried to put this on my personal Wordpress site, but WP makes it very
difficult to cut and paste HTML to preserve formatting.

****************************************************************
Copyright 2022 Richard M. Alderson, III. Permission is freely given to copy and
use the included Pascal program source with the sole restriction that this
copyright notice must be retained in any copy.

This disassembler is designed to interpret executable files in either of two
formats from Digital Equipment Corporation:

1. The older "compressed" format used in .SAV, .LOW, .HGH, and .SHR files, and
2. The newer .EXE file format

It cannot be used for MIT AI Lab's binary format or SAIL's .DMP format,
although it would try to handle the latter to some extent.

Earliest version available, timestamped 24-Jan-1995 18:30:44 PST.
This is the latest version, timestamped 23-Nov-2004 17:18:12 PST, modified for posting.

The changes made in November 2004 revised the handling of Tops-10 UUOs, with
which I was only theoretically familiar when I wrote the initial version of
this disassembler around 1980. Note that 40+ years ago, I was a clever
programmer trying to become more clever; I make no apology for the kludges this
made inevitable in my code from that era.

Cosmetic changes for this version:

1. Multiple statement lines have been broken into multiple lines, one statement per.
2. Page breaks have been removed and multiple blank lines have been shrunk to a
doublespace.

************************* Code follows *************************

program disasm (savefile, macrofile);

const
ALFAlength = 10;
AlfaTooLong = 11;
Leave1 = 9;
Leave2 = 8;
Leave3 = 7;
Leave4 = 6;
Leave5 = 5;
Leave6 = 4;
Leave7 = 3;
Leave8 = 2;
Leave9 = 1;

CALLvalue = 040;
CALLIvalue = 047;
TTCALLvalue = 051;
JSYSvalue = 104;
JRSTvalue = 254;
JFCLvalue = 255;

TopJSYS = 777;
TopCALLI = 277;
TopAC = 17;
TopDevice = 127;
TopPage = 511;

TopDataLine = 3;
BottomDataLine = 50;
LineLength = 105;
LabelColumn = 1;
MnemonicColumn = 9;
ArgsColumn = 17;
CommentColumn = 33;
AddressColumn = 34;
LeftHWcolumn = 43;
Commacolumn = 49;
RightHWcolumn = 51;
SIXBITcolumn = 61;
ASCIIcolumn = 69;
OpcodeColumn = 81;
FlagColumn = 84;
ACcolumn = 85;
IndirectColumn = 88;
IndexColumn = 90;
OperandColumn = 93;
LastTextColumn = 98;

type
AlfaPtr = ^Alfa;
WordType = packed array [ 0..1 ] of 0..262143;
HalfType = array [ 0..1 ] of 0..262143;

PgTblPtr = ^PageTableEntry;

PageTableEntry = record
NextPTentry : PgTblPtr;
RepeatCount : integer;
ProcessAddress : integer;
end;

JmpTblPtr = ^JumpTableEntry;

JumpTableEntry = record
NextJTentry : JmpTblPtr;
BranchAddress : integer;
JumpLabel : ALFA;
end;
{ Global (or main routine) variables }
var
MacroFile : file of char;
SaveFile : file of WordType;

Instruction : array [ 0..677 ] of ALFA;
JSYS : array [ 0..TopJSYS ] of ALFA;
CALLI : array [ 0..TopCALLI ] of ALFA;
TTCALL : array [ 0..TopAC ] of ALFA;

DeviceName : array [ 0..TopDevice ] of ALFA;
RealIO : array [ 0..7 ] of ALFA;

ACnames, JRST, JFCL : array [ 0..TopAC ] of ALFA;

Named_JSYS : array [ 0..TopJSYS ] of Boolean;
Named_CALLI : array [ 0..TopCALLI ] of Boolean;
Named_TTCALL, Named_JRST, Named_JFCL : array [ 0..TopAC ] of Boolean;
Named_Device : array [ 0..TopDevice ] of Boolean;

Radix50 : array [ 0..39 ] of char;

CharLine : array [ 1..LineLength ] of char;
HeadLine, StringLine : packed array [ 1..LineLength ] of char;

HalfWord, PreviousHalfWord : HalfType;

Opcode, AC, Index, Operand, Flag, LeftHalf, PageNumber,
OutputAddress, PageLines, HeapTop, FileWdCount, StartAddress,
LastWordtoDump, EVECaddress, EVEClength, NumberOfSavedWords : integer;

IndirectBit, EndOfSaveFile, VeryFirstOutputCall, Sharable : Boolean;

LIGHTSname : ALFA;

AddressString, OpcodeString, ACstring, FlagString, IndexString,
OperandString, LeftString, RightString : AlfaPtr;

PageListTop, PageListCurrent : PgTblPtr;

JumpListTop, JumpListBottom, JumpListCurrent : JmpTblPtr;
{ Radix conversion routines }

function Octal ( Number : integer ) : integer;

var
Octo, Radix : integer;

begin;
Radix := 1;
Octo := 0;

repeat;
Octo := Octo + (Number mod 8) * Radix;
Number := Number div 8;
Radix := Radix * 10;
until Number = 0;

Octal := Octo;
end {Octal} ;

function Decimal ( Number : integer ) : integer;

var
Decem, Radix : integer;

begin;
Radix := 1;
Decem := 0;

repeat;
Decem := Decem + (Number mod 10) * Radix;
Number := Number div 10;
Radix := Radix * 8;
until Number = 0;

Decimal := Decem;
end {Decimal} ;

{TRICKY manipulation of octal & decimal representations}

function Fiddle (OctoDecimal : integer) : integer;

begin;

if odd (OctoDecimal)
then Fiddle := Decimal (OctoDecimal) * 5 - 1
else Fiddle := Decimal (OctoDecimal) * 5;

end {Fiddle};
{ Page header routines }

procedure InitHeader;

var i : integer;
Heading : ALFA;
TempHead : array [ 1..LineLength ] of char;

begin;

for i := 1 to LineLength do TempHead [ i ] := ' ';

Heading := ';label ';
unpack (Heading, TempHead, 1);

Heading := 'instructio';
unpack (Heading, TempHead, 9);
Heading := 'n stream ';
unpack (Heading, TempHead, 19);

Heading := 'addr ';
unpack (Heading, TempHead, 35);

Heading := 'halfword ';
unpack (Heading, TempHead, 45);

Heading := 'sixbit ';
unpack (Heading, TempHead, 60);

Heading := 'ascii ';
unpack (Heading, TempHead, 71);

Heading := 'compiled i';
unpack (Heading, TempHead, 79);
Heading := 'nstruction';
unpack (Heading, TempHead, 89);

pack (TempHead, 1, HeadLine);

end {InitHeader};

{ Push out a header line }

procedure PutHeader;
begin;

PageNumber := PageNumber + 1;

writeln (macrofile, chr (12) {Form Feed}) ;
write (macrofile, HeadLine);
writeln (macrofile, chr (9) {Tab}, 'Page ', PageNumber:1);
writeln (macrofile);

end {PutHeader};
{ Write out the actual contents of the line }

procedure OutputText;

var
i : integer;

begin;

{ I used to do this with "pack" and "unpack" but I want to save the extra }
{ spaces at EOLN, so use this routine instead }

{ pack (CharLine, 1, StringLine); }
{ writeln (macrofile, StringLine); }

for i := 1 to LastTextColumn do begin;

MacroFile^ := CharLine [ i ];
put (MacroFile);

end;

writeln (MacroFile);

PageLines := PageLines + 1;

end {OutputText};
{ Empty all output arrays }
procedure ClearLine;

var i : integer;

begin;
for i := 1 to LineLength do CharLine [ i ] := ' ';
pack (CharLine, 1, StringLine);
end { ClearLine };

procedure DisplayLine ( RepeatCount : integer );

var
OctalRepeat : integer;

begin;

if PageLines > BottomDataLine
then begin;
PutHeader;
PageLines := TopDataLine;
end;

OctalRepeat := Octal (RepeatCount);

if RepeatCount > 1
then begin;

if PageLines > TopDataLine
then writeln (macrofile);

writeln (macrofile, 'REPEAT ', OctalRepeat:1, ',<');

if PageLines > TopDataLine
then PageLines := PageLines + 2
else PageLines := PageLines + 1;
end;

OutputText;

if RepeatCount > 1
then begin;
writeln (macrofile, '>;END REPEAT ', OctalRepeat:1);
writeln (macrofile);
PageLines := PageLines + 2;
end;

end {DisplayLine};
{ Most basic I/O routines: Read a file, write a record... }

procedure StartOutput;
begin;

rewrite (macrofile);
PageLines := 999;
PageNumber := 1;

{ Initialize printout to usable Macro-10 code }

write (macrofile, chr (9) {Tab}, 'title disasm');
writeln (macrofile, chr (9) {Tab}, chr (9) {Tab}, '; Page ', PageNumber:1);
writeln (macrofile, chr (9) {Tab}, 'subttl macro-10 code produced by disassembly--some assembly required');
writeln (macrofile);
writeln (macrofile, chr (9) {Tab}, 'search monsym,macsym');
writeln (macrofile);
writeln (macrofile, chr (9) {Tab}, 'STDAC.');
writeln (macrofile);

InitHeader;
ClearLine;

end {StartOutput};

procedure StartInput;

begin;

reset (SaveFile);
unpack (SaveFile^, HalfWord, 0);
FileWdCount := 1;
VeryFirstOutputCall := true;

end {StartInput};

procedure ReadSaveFile;
begin;

get (SaveFile);

if eof (SaveFile)
then EndOfSaveFile := true
else begin;
unpack (SaveFile^, HalfWord, 0);
FileWdCount := FileWdCount + 1;
end;

end {ReadSaveFile} ;

{ Routine to squeeze leading blanks from a string }

function MoveLeft (StringPtr : AlfaPtr) : AlfaPtr;

var
String : array [ 1..AlfaLength] of char;
i, j : 1..AlfaTooLong;

begin;

for i := 1 to AlfaLength do String [ i ] := ' ';

j := 1;

while StringPtr^ [ j ] = ' ' do j := j + 1;

i := 1;

repeat;
String [ i ] := StringPtr^ [ j ];
j := j + 1;
i := i + 1;
until j > AlfaLength;

StringPtr^ := ' ';

for i := 1 to AlfaLength do
if String [ i ] <> ' '
then StringPtr^ [ i ] := String [ i ];

MoveLeft := StringPtr;

end {MoveLeft} ;

{ Pass over columns in output line which are non-blank }

procedure FindSpace ( var ColumnCounter : integer);

begin;

while CharLine [ ColumnCounter ] <> ' ' do ColumnCounter := ColumnCounter + 1;

end;

{ Routine to strip leading zeroes from a numeric string }

function Remove0s (StringPtr : AlfaPtr; LeadToDrop : integer) : AlfaPtr;

var
j : 1..AlfaTooLong;

begin;

if (LeadToDrop <= 0)
or (LeadToDrop > AlfaLength - 1)
then LeadToDrop := AlfaLength - 1;

j := 1;

repeat;
if StringPtr^ [ j ] = '0'
then begin;
StringPtr^ [ j ] := ' ';
j := j + 1;
end;
until (j > LeadToDrop) or (StringPtr^ [ j ] <> '0');

Remove0s := StringPtr;

end {Remove0s} ;

{ Routine to convert a number to a string }

function MakeString (n : integer) : AlfaPtr;

var
i, j : integer;
InternalPtr : AlfaPtr;

begin;

new (InternalPtr);

for j := AlfaLength downto 1 do begin;
i := n mod 10;
n := n div 10;
InternalPtr^ [ j ] := chr (i + ord ('0'));
end;

MakeString := InternalPtr;

end {MakeString} ;

{ Generate a new entry in the linked list of process pages }

procedure MakePgEntry (var PageListEntry : PgTblPtr);

begin;

new (PageListEntry);

with PageListEntry^ do begin;
NextPTentry := nil;
RepeatCount := -1;
ProcessAddress := -1;
end;

end { MakePgEntry };

{ Generate a new entry for the table of branch labels }

procedure MakeJTentry (var JTentry : JmpTblPtr);

begin;

new (JTentry);

with JTentry^ do begin;
NextJTentry := nil;
BranchAddress := maxint;
JumpLabel := 'NOT.aLabel';
end;

end {MakeJTentry};

{ Generate a branch label name with specified initial character }

function MakeLabel (Initial : integer) : AlfaPtr;

var
GenSym : AlfaPtr;

begin;

GenSym := MoveLeft (Remove0s (MakeString (Octal (Halfword [ 1 ])), Leave6));
GenSym^ [ 1 ] := chr (Initial);

MakeLabel := GenSym;

end {MakeLabel};

{ Test various opcodes and operands to determine if a label is needed }

function IsAJump ( SomeOpCode : integer ) : Boolean;

begin;

IsAJump := false or (SomeOpCode = 254) {JRST}
or (SomeOpCode = 255) {JFCL}
or (SomeOpCode = 256) {XCT}
or (SomeOpCode = 252) {AOBJP}
or (SomeOpCode = 253) {AOBJN}
or ((SomeOpCode >= 340) and
(SomeOpCode <= 347)) {AOJx}
or ((SomeOpcode >= 360) and
(SomeOpcode <= 367)) {SOJx}
or (SomeOpCode = 243) {JFFO}
or (SomeOpCode = 264) {JSR}
or (SomeOpCode = 265) {JSP}
or (SomeOpCode = 266) {JSA}
or (SomeOpCode = 267) {JRA}
or (SomeOpCode = 260) {PUSHJ}
or (SomeOpCode = 263) {POPJ} ;

end {IsAJump};

{ Test to determine if a label is needed }

function ShouldMakeLabel ( SomeOpCode, SomeOperand : integer ) : Boolean;

begin;

{ Since the ACs already have names, don't bother with them }

ShouldMakeLabel := IsAJump (SomeOpCode) and (SomeOperand > 15);

end {ShouldMakeLabel};

procedure FindLabel (SomeOperand : integer; var TempString : AlfaPtr);

begin;

TempString^ := 'NOT.aLabel';
JumpListCurrent := JumpListTop^.NextJTentry;

while JumpListCurrent <> JumpListBottom do begin;

if SomeOperand = Octal (JumpListCurrent^.BranchAddress)
then begin;
TempString^ := JumpListCurrent^.JumpLabel;
JumpListCurrent := JumpListBottom;
end
else JumpListCurrent := JumpListCurrent^.NextJTentry;

end;

end;

{ Read through the save file and set up labels for branch instructions }

procedure MakeJUMPtable;

var
LabelString : AlfaPtr;
JumpListPrev, JumpListNext : JmpTblPtr;

begin;

StartInput;

MakeJTentry (JumpListBottom);

MakeJTentry (JumpListTop);
JumpListTop^.BranchAddress := -1;
JumpListTop^.NextJTentry := JumpListBottom;

while not eof (SaveFile) do begin;

if ShouldMakeLabel (Octal (HalfWord [ 0 ] div 512), HalfWord [ 1 ])
then begin;
LabelString := MakeLabel (ord ('J') + Octal (HalfWord [ 1 ]) div 100000);
MakeJTentry (JumpListNext);
JumpListNext^.BranchAddress := HalfWord [ 1 ];
JumpListNext^.JumpLabel := LabelString^;

JumpListCurrent := JumpListTop;

while JumpListNext^.BranchAddress > JumpListCurrent^.BranchAddress do
JumpListCurrent := JumpListCurrent^.NextJTentry;

if JumpListNext^.BranchAddress <> JumpListCurrent^.BranchAddress
then begin;
JumpListNext^.NextJTentry := JumpListCurrent;
JumpListCurrent := JumpListTop;

while JumpListNext^.BranchAddress > JumpListCurrent^.BranchAddress do begin;
JumpListPrev := JumpListCurrent;
JumpListCurrent := JumpListCurrent^.NextJTentry;
end;

JumpListPrev^.NextJTentry := JumpListNext;
end;
end;

ReadSaveFile;

end;

end {MakeJUMPtable};

{ Interpret the directory section of a Sharable SaveFile directory area }

procedure DirSection ( var DirCount : integer );

var
x, z : integer; { loop variables }
Top9bits, Other27bits : integer;
PageInFile : Boolean;

begin;

MakePgEntry (PageListCurrent);
PageListTop := PageListCurrent;

writeln (macrofile, '; Directory section contains:');
writeln (macrofile);

write (macrofile, '; ', HalfWord [ 0 ]:6:O);
write (macrofile, ',,', HalfWord [ 1 ]:6:O, ' =>');

write (macrofile, ' Section id code ', Octal (HalfWord [ 0 ]):1);
write (macrofile, ' section length (in wds) ', Octal (HalfWord [ 1 ]):1);

writeln (macrofile); { close off line }

{ continued on next page }
{ continued from previous page }

z := HalfWord [ 1 ];

for x := 2 to z do begin;

writeln (macrofile); { double space }

ReadSaveFile; { get next word }

DirCount := DirCount + 1; { account for it }

Top9bits := Octal (HalfWord [ 0 ]) div 1000;
Other27bits := (Octal (HalfWord [ 0 ]) mod 1000) * 1000000 + Octal (HalfWord [ 1 ]);

write (macrofile, '; ', HalfWord [ 0 ]:6:O, ',,' , HalfWord [ 1 ]:6:O, ' => ');

if not odd (x) { Each entry is a pair of words }
then begin;

write (macrofile, ' Page access code = ', Top9bits:1);
write (macrofile, ', file page # = ', Other27bits:1);

PageInFile := Other27bits <> 0;

end
else begin;

write (macrofile, ' Repeat count - 1 = ', Top9bits:1);
write (macrofile, ', process page # = ', Other27bits:1);

if PageInFile
then begin;
with PageListCurrent^ do begin;
RepeatCount := (Decimal (Top9bits) + 1) * 512;
ProcessAddress := Decimal (Other27bits) * 512;
end;

MakePgEntry (PageListCurrent^.NextPTentry);
PageListCurrent := PageListCurrent^.NextPTentry;
end;
end;

writeln (macrofile); { close off line }

end {for-to loop} ;

writeln (macrofile); { Close off last line }

end {DirSection};

{ Interpret the entry vector section of a Sharable SaveFile directory area }

procedure EntryVector ( var WordNumber : integer);

var
x, z : integer;

begin;

writeln (macrofile);
writeln (macrofile, '; Entry vector section contains:');
writeln (macrofile);

write (macrofile, '; ', HalfWord [ 0 ]:6:O);
write (macrofile, ',,', HalfWord [ 1 ]:6:O, ' =>');

write (macrofile, ' Section id code ', Octal (HalfWord [ 0 ]):1);
write (macrofile, ', section length (in wds) ', Octal (HalfWord [ 1 ]):1);

writeln (macrofile); { close off line }

z := HalfWord [ 1 ];

for x := 2 to z do begin;

writeln (macrofile); { double space }

ReadSaveFile;
WordNumber := WordNumber + 1;

write (macrofile, '; ', HalfWord [ 0 ]:6:O);
write (macrofile, ',,', HalfWord [ 1 ]:6:O, ' => ');

if odd (x)
then begin;
EVECaddress := Octal (HalfWord [ 1 ]);
writeln (macrofile, 'Address of entry vector: ', EVECaddress:1);
end
else begin;
EVEClength := Octal (HalfWord [ 1 ]);
writeln (macrofile, 'Length (in wds) of entry vector: ', EVEClength:1);
end;

end;

writeln (macrofile); { Triple space }

end {EntryVector};

{ Interpret the program data vector section of a Sharable SaveFile directory area }

procedure PgmDataVector ( var WordNumber : integer);

var
x, z : integer;

begin;

writeln (macrofile, 'Program data vector contains:');
writeln (macrofile);

write (macrofile, '; ', HalfWord [ 0 ]:6:O, ',,', HalfWord [ 1 ]:6:O, ' => ');

write (macrofile, 'Section id code ', Octal (HalfWord [ 0 ]):1);
write (macrofile, ', section length (in wds) ', Octal (HalfWord [ 1 ]):1);

writeln (macrofile); { close off line }

for x := 2 to z do begin;

writeln (macrofile);

ReadSaveFile;
WordNumber := WordNumber + 1;

write (macrofile, '; ', HalfWord [ 0 ]:6:O);
write (macrofile, ',,', HalfWord [ 1 ]:6:O, ' => ');

write (macrofile, 'Address of program data vector: ', HalfWord [ 1 ]:1:O);
end;

writeln (macrofile);

end {PgmDataVector};

{ Process the termination section of a Sharable SaveFile directory area }

procedure CloseDirArea (EvecSeen : Boolean);

begin;

if not EvecSeen
then begin;
writeln (macrofile);
writeln (macrofile, '; Old format Sharable save file: No explicit entry vector');
writeln (macrofile);
writeln (macrofile, '; Location 120: Right half = Start Address');
writeln (macrofile);
writeln (macrofile, '; Location 124: Right half = Re-entry Address');
writeln (macrofile);
writeln (macrofile, '; Location 137: Right half = Program version');
EVECaddress := 120;
EVEClength := 0;
end;

writeln (macrofile);
writeln (macrofile, '; Terminating section contains:');
writeln (macrofile);

write (macrofile, '; ', HalfWord [ 0 ]:6:O);
write (macrofile, ',,', HalfWord [ 1 ]:6:O, ' => ');
write (macrofile, 'Section id code ', Octal (HalfWord [ 0 ]):1);
write (macrofile, ', section length (in wds) ', Octal (HalfWord [ 1 ]):1);

writeln (macrofile);

end {CloseDirArea};

procedure Announcecsave;

begin;

writeln (macrofile, '; No control pages present: Not a shareable save file.');
writeln (macrofile, '; This will be treated as a compressed save file.');

end {AnnounceCSAVE};

{ Read the directory area of a Sharable SaveFile and dispatch to interpretation routines }

function ReadDirArea : Boolean;

var
DirWdCount, SectionType : integer;
CtrlAreaPresent, EntryVecPresent, TermSecSeen : Boolean;

begin;

StartInput;

writeln (macrofile); writeln (macrofile); writeln (macrofile);

CtrlAreaPresent := true; EntryVecPresent := false; TermSecSeen := false;

DirWdCount := 1;

while not eof (SaveFile) and not TermSecSeen and CtrlAreaPresent do begin;

SectionType := Octal (HalfWord [ 0 ]);

case SectionType of

1776 : DirSection (DirWdCount);

1775 : begin; EntryVecPresent := true; EntryVector (DirWdCount); end;

1774 : PgmDataVector (DirWdCount);

1777 : begin; TermSecSeen := true; CloseDirArea (EntryVecPresent); end;

others : begin; CtrlAreaPresent := false; AnnounceCSAVE; end;

end {case of SectionType};

ReadSaveFile;
DirWdCount := DirWdCount + 1;

end {while};

while CtrlAreaPresent and not eof (SaveFile) and ((DirWdCount mod 512) <> 0) do begin;
ReadSaveFile;
DirWdCount := DirWdCount + 1;
end;

ReadDirArea := CtrlAreaPresent;

end {ReadDirArea};

{ Read the entire compressed save file to build a directory }

procedure MakeNonSharedDir;

var
i, j : integer;

begin;

StartInput; { Rewind the disk }
j := Halfword [ 0 ];

MakePgEntry (PageListCurrent);
PageListTop := PageListCurrent;

while (j > 131071) do begin;

with PageListCurrent^ do begin;
RepeatCount := 262144 - HalfWord [ 0 ];
ProcessAddress := HalfWord [ 1 ] + 1;
MakePgEntry (NextPTentry);
end;

PageListCurrent := PageListCurrent^.NextPTentry;

for i := 0 to (262144 - j) do ReadSaveFile;

j := HalfWord [ 0 ];

end;

end {MakeNonShareDir};

{ Print out the entry vector information from the last XWD in the file }

procedure NonShareEVECTOR;
begin;

writeln (macrofile);
write (macrofile, '; ', HalfWord [ 0 ]:6:O, ',,', HalfWord [ 1 ]:6:O, ' => ');

EVECaddress := Octal (HalfWord [ 1 ]);
EVEClength := Octal (HalfWord [ 0 ]);

if EVEClength = 254000
then EVEClength := 1;

write (macrofile, 'Entry vector length: ', Decimal (EVEClength):1, ', ');
write (macrofile, 'First word location: ', EVECaddress:1);
writeln (macrofile);

end {NonShareEVECTOR};

{ Make an END statement for the MACRO-10 file }

procedure MakeENDstmt;

begin;

writeln (macrofile);
write (macrofile, chr (9) {Tab}, 'END ');

if (EVEClength < 2) or (EVEClength = 254000)
then writeln (macrofile, EVECaddress:1)
else writeln (macrofile, '<', EVEClength:1, ',', EVECaddress:1, '>');

end {MakeENDstmt};

{ Make a LOC statement }

procedure MakeLOCstmt ( Address : integer );

begin;

if PageLines + 10 > BottomDataLine
then begin;
PutHeader;
PageLines := TopDataLine;
end;

if PageLines > TopDataLine
then begin;
writeln (macrofile);
PageLines := PageLines + 1;
end;

writeln (macrofile, chr (9) {Tab}, 'LOC ', Octal (Address):1);
writeln (macrofile);

PageLines := PageLines + 2;

end {MakeLOCstmt};

{ Initialize 'constant' arrays, start I/O, and so on }

procedure startup;
var
i, j : integer;
begin;

{ Initialize input and output }

StartInput;

StartOutput;

{ Initialize the RADIX50 array }

Radix50 [ 00 ] := ' ';
Radix50 [ 01 ] := '0';
Radix50 [ 02 ] := '1';
Radix50 [ 03 ] := '2';
Radix50 [ 04 ] := '3';
Radix50 [ 05 ] := '4';
Radix50 [ 06 ] := '5';
Radix50 [ 07 ] := '6';
Radix50 [ 08 ] := '7';
Radix50 [ 09 ] := '8';
Radix50 [ 10 ] := '9';
Radix50 [ 11 ] := 'A';
Radix50 [ 12 ] := 'B';
Radix50 [ 13 ] := 'C';
Radix50 [ 14 ] := 'D';
Radix50 [ 15 ] := 'E';
Radix50 [ 16 ] := 'F';
Radix50 [ 17 ] := 'G';
Radix50 [ 18 ] := 'H';
Radix50 [ 19 ] := 'I';
Radix50 [ 20 ] := 'J';
Radix50 [ 21 ] := 'K';
Radix50 [ 22 ] := 'L';
Radix50 [ 23 ] := 'M';
Radix50 [ 24 ] := 'N';
Radix50 [ 25 ] := 'O';
Radix50 [ 26 ] := 'P';
Radix50 [ 27 ] := 'Q';
Radix50 [ 28 ] := 'R';
Radix50 [ 29 ] := 'S';
Radix50 [ 30 ] := 'T';
Radix50 [ 31 ] := 'U';
Radix50 [ 32 ] := 'V';
Radix50 [ 33 ] := 'W';
Radix50 [ 34 ] := 'X';
Radix50 [ 35 ] := 'Y';
Radix50 [ 36 ] := 'Z';
Radix50 [ 37 ] := '.';
Radix50 [ 38 ] := '$';
Radix50 [ 39 ] := '%';

{ Initialize the AC name array }

ACnames [ 0 ] := 'F ';

ACnames [ 1 ] := 'T1 ';
ACnames [ 2 ] := 'T2 ';
ACnames [ 3 ] := 'T3 ';
ACnames [ 4 ] := 'T4 ';

ACnames [ 5 ] := 'Q1 ';
ACnames [ 6 ] := 'Q2 ';
ACnames [ 7 ] := 'Q3 ';

ACnames [ 10 ] := 'P1 ';
ACnames [ 11 ] := 'P2 ';
ACnames [ 12 ] := 'P3 ';
ACnames [ 13 ] := 'P4 ';
ACnames [ 14 ] := 'P5 ';
ACnames [ 15 ] := 'P6 ';

ACnames [ 16 ] := 'CX ';

ACnames [ 17 ] := 'P ';

{ Initialize the I/O instruction arrays }

realIO [ 0 ] := 'BLKI ';
realIO [ 1 ] := 'DATAI ';
realIO [ 2 ] := 'BLKO ';
realIO [ 3 ] := 'DATAO ';
realIO [ 4 ] := 'CONO ';
realIO [ 5 ] := 'CONI ';
realIO [ 6 ] := 'CONSZ ';
realIO [ 7 ] := 'CONSO ';

for i := 1 to TopDevice do begin;
DeviceName [ i ] := ' ';
Named_Device [ i ] := false;
end;

DeviceName [ 000 ] := 'APR, '; Named_Device [ 000 ] := true;

DeviceName [ 001 ] := 'PI, '; Named_Device [ 001 ] := true;

DeviceName [ 002 ] := 'PAG, '; Named_Device [ 002 ] := true;

DeviceName [ 003 ] := 'CCA, '; Named_Device [ 003 ] := true;

DeviceName [ 004 ] := 'TIM, '; Named_Device [ 004 ] := true;

DeviceName [ 005 ] := 'MTR, '; Named_Device [ 005 ] := true;

DeviceName [ 006 ] := 'ADC2, '; Named_Device [ 006 ] := true;

DeviceName [ 007 ] := 'PDC3, '; Named_Device [ 007 ] := true;

DeviceName [ 012 ] := 'DLB, '; Named_Device [ 012 ] := true;

DeviceName [ 013 ] := 'DLC, '; Named_Device [ 013 ] := true;

DeviceName [ 014 ] := 'CLK, '; Named_Device [ 014 ] := true;

DeviceName [ 015 ] := 'CLK2, '; Named_Device [ 015 ] := true;

DeviceName [ 016 ] := 'PTP, '; Named_Device [ 016 ] := true;

DeviceName [ 017 ] := 'PTR, '; Named_Device [ 017 ] := true;

DeviceName [ 018 ] := 'CDP, '; Named_Device [ 018 ] := true;

DeviceName [ 019 ] := 'CDR, '; Named_Device [ 019 ] := true;

DeviceName [ 020 ] := 'TTY, '; Named_Device [ 020 ] := true;

DeviceName [ 021 ] := 'LPT, '; Named_Device [ 021 ] := true;

DeviceName [ 022 ] := 'DIS, '; Named_Device [ 022 ] := true;

DeviceName [ 023 ] := 'DIS2, '; Named_Device [ 023 ] := true;

DeviceName [ 024 ] := 'PLT, '; Named_Device [ 024 ] := true;

DeviceName [ 025 ] := 'PLT2, '; Named_Device [ 025 ] := true;

DeviceName [ 026 ] := 'CR, '; Named_Device [ 026 ] := true;

DeviceName [ 027 ] := 'CR2, '; Named_Device [ 027 ] := true;

DeviceName [ 028 ] := 'DLB2, '; Named_Device [ 028 ] := true;

DeviceName [ 029 ] := 'DLC2, '; Named_Device [ 029 ] := true;

DeviceName [ 030 ] := 'DSK, '; Named_Device [ 030 ] := true;

DeviceName [ 031 ] := 'DSK2, '; Named_Device [ 031 ] := true;

DeviceName [ 032 ] := 'DTE, '; Named_Device [ 032 ] := true;

DeviceName [ 033 ] := 'DTE2, '; Named_Device [ 033 ] := true;

DeviceName [ 034 ] := 'DTE3, '; Named_Device [ 034 ] := true;

DeviceName [ 035 ] := 'DTE4, '; Named_Device [ 035 ] := true;

DeviceName [ 036 ] := 'PDC, '; Named_Device [ 036 ] := true;

DeviceName [ 037 ] := 'PDC2, '; Named_Device [ 037 ] := true;

DeviceName [ 039 ] := 'LPT2, '; Named_Device [ 039 ] := true;

DeviceName [ 040 ] := 'DLS, '; Named_Device [ 040 ] := true;

DeviceName [ 041 ] := 'DLS2, '; Named_Device [ 041 ] := true;

DeviceName [ 042 ] := 'DPC, '; Named_Device [ 042 ] := true;

DeviceName [ 043 ] := 'DPC2, '; Named_Device [ 043 ] := true;

DeviceName [ 044 ] := 'DPC3, '; Named_Device [ 044 ] := true;

DeviceName [ 045 ] := 'DPC4, '; Named_Device [ 045 ] := true;

DeviceName [ 046 ] := 'RMC, '; Named_Device [ 046 ] := true;

DeviceName [ 047 ] := 'RMC2, '; Named_Device [ 047 ] := true;

DeviceName [ 049 ] := 'PDC4, '; Named_Device [ 049 ] := true;

DeviceName [ 052 ] := 'DTC, '; Named_Device [ 052 ] := true;

DeviceName [ 053 ] := 'DTS, '; Named_Device [ 053 ] := true;

DeviceName [ 054 ] := 'DTC2, '; Named_Device [ 054 ] := true;

DeviceName [ 055 ] := 'DTS2, '; Named_Device [ 055 ] := true;

DeviceName [ 056 ] := 'TMC, '; Named_Device [ 056 ] := true;

DeviceName [ 057 ] := 'TMS, '; Named_Device [ 057 ] := true;

DeviceName [ 058 ] := 'TMC2, '; Named_Device [ 058 ] := true;

DeviceName [ 059 ] := 'TMS2, '; Named_Device [ 059 ] := true;

DeviceName [ 060 ] := 'RMC3, '; Named_Device [ 060 ] := true;

DeviceName [ 061 ] := 'RMC4, '; Named_Device [ 061 ] := true;

DeviceName [ 062 ] := 'RMC5, '; Named_Device [ 062 ] := true;

DeviceName [ 063 ] := 'RMC6, '; Named_Device [ 063 ] := true;

DeviceName [ 076 ] := 'DSS, '; Named_Device [ 076 ] := true;

DeviceName [ 077 ] := 'DSI, '; Named_Device [ 077 ] := true;

DeviceName [ 078 ] := 'DSS2, '; Named_Device [ 078 ] := true;

DeviceName [ 079 ] := 'DSI2, '; Named_Device [ 079 ] := true;

DeviceName [ 088 ] := 'MBC, '; Named_Device [ 088 ] := true;

DeviceName [ 089 ] := 'MBC2, '; Named_Device [ 089 ] := true;

DeviceName [ 090 ] := 'MBC3, '; Named_Device [ 090 ] := true;

DeviceName [ 091 ] := 'MBC4, '; Named_Device [ 091 ] := true;

DeviceName [ 092 ] := 'MBC5, '; Named_Device [ 092 ] := true;

DeviceName [ 093 ] := 'MBC6, '; Named_Device [ 093 ] := true;

DeviceName [ 094 ] := 'MBC7, '; Named_Device [ 094 ] := true;

DeviceName [ 095 ] := 'MBC8, '; Named_Device [ 095 ] := true;

{ Initialize the JRST and JFCL mnemonics arrays }

for i := 0 to TopAC do begin;
JRST [ i ] := 'JRST ';
Named_JRST [ i ] := false;
end;

JRST [ 01 ] := 'PORTAL '; Named_JRST [ 01 ] := true;

JRST [ 02 ] := 'JRSTF '; Named_JRST [ 02 ] := true;

JRST [ 04 ] := 'HALT '; Named_JRST [ 04 ] := true;

JRST [ 05 ] := 'XJRSTF '; Named_JRST [ 05 ] := true;

JRST [ 06 ] := 'XJEN '; Named_JRST [ 06 ] := true;

JRST [ 07 ] := 'XPCW '; Named_JRST [ 07 ] := true;

JRST [ 12 ] := 'JEN '; Named_JRST [ 12 ] := true;

JRST [ 14 ] := 'SFM '; Named_JRST [ 14 ] := true;

for i := 0 to TopAC do begin;
JFCL [ i ] := 'JFCL ';
Named_JFCL [ i ] := false;
end;

JFCL [ 01 ] := 'JFOV '; Named_JFCL [ 01 ] := true;

JFCL [ 02 ] := 'JCRY1 '; Named_JFCL [ 02 ] := true;

JFCL [ 04 ] := 'JCRY2 '; Named_JFCL [ 04 ] := true;

JFCL [ 06 ] := 'JCRY '; Named_JFCL [ 06 ] := true;

JFCL [ 10 ] := 'JOV '; Named_JFCL [ 10 ] := true;

{ Initialize the PDP-10 instruction set array }

Instruction [ 000 ] := 'Z '; {MACRO pseudo-op, but what the hell? it's not used, anyway }

{ The following op-codes, 001-031, are available only under the EXTEND instruction }
{ Otherwise, they are LUUOs }

Instruction [ 001 ] := 'CMPSL ';
Instruction [ 002 ] := 'CMPSE ';
Instruction [ 003 ] := 'CMPSLE ';
Instruction [ 004 ] := 'EDIT ';
Instruction [ 005 ] := 'CMPSGE ';
Instruction [ 006 ] := 'CMPSN ';
Instruction [ 007 ] := 'CMPSG ';
Instruction [ 010 ] := 'CVTDBO ';
Instruction [ 011 ] := 'CVTDBT ';
Instruction [ 012 ] := 'CVTBDO ';
Instruction [ 013 ] := 'CVTBDT ';
Instruction [ 014 ] := 'MOVSO ';
Instruction [ 015 ] := 'MOVST ';
Instruction [ 016 ] := 'MOVSLJ ';
Instruction [ 017 ] := 'MOVSRJ ';
Instruction [ 020 ] := 'XBLT ';
Instruction [ 021 ] := 'GSNGL ';
Instruction [ 022 ] := 'GDBLE ';
Instruction [ 023 ] := 'GDFIX ';
Instruction [ 024 ] := 'GFIX ';
Instruction [ 025 ] := 'GDFIXR ';
Instruction [ 026 ] := 'GFIXR ';
Instruction [ 027 ] := 'DGFLTR ';
Instruction [ 030 ] := 'GFLTR ';
Instruction [ 031 ] := 'GFSC ';

Instruction [ 032 ] := 'luuo32 '; writeln (macrofile, 'opdef luuo32 [32000,,0]');
Instruction [ 033 ] := 'luuo33 '; writeln (macrofile, 'opdef luuo33 [33000,,0]');
Instruction [ 034 ] := 'luuo34 '; writeln (macrofile, 'opdef luuo34 [34000,,0]');
Instruction [ 035 ] := 'luuo35 '; writeln (macrofile, 'opdef luuo35 [35000,,0]');
Instruction [ 036 ] := 'luuo36 '; writeln (macrofile, 'opdef luuo36 [36000,,0]');
Instruction [ 037 ] := 'luuo37 '; writeln (macrofile, 'opdef luuo37 [37000,,0]');

Instruction [ 040 ] := 'CALL ';
Instruction [ 041 ] := 'INIT ';

Instruction [ 042 ] := 'muuo42 '; writeln (macrofile, 'opdef muuo42 [42000,,0]');
Instruction [ 043 ] := 'muuo43 '; writeln (macrofile, 'opdef muuo43 [43000,,0]');
Instruction [ 044 ] := 'muuo44 '; writeln (macrofile, 'opdef muuo44 [44000,,0]');
Instruction [ 045 ] := 'muuo45 '; writeln (macrofile, 'opdef muuo45 [45000,,0]');
Instruction [ 046 ] := 'muuo46 '; writeln (macrofile, 'opdef muuo46 [46000,,0]');

Instruction [ 047 ] := 'CALLI ';
Instruction [ 050 ] := 'OPEN ';
Instruction [ 051 ] := 'TTCALL ';

Instruction [ 052 ] := 'PMOVE ';
Instruction [ 053 ] := 'PMOVEM ';

Instruction [ 054 ] := 'muuo54 '; writeln (macrofile, 'opdef muuo54 [54000,,0]');

Instruction [ 055 ] := 'RENAME ';
Instruction [ 056 ] := 'IN ';
Instruction [ 057 ] := 'OUT ';
Instruction [ 060 ] := 'SETSTS ';
Instruction [ 061 ] := 'STATO ';
Instruction [ 062 ] := 'STATUS ';
Instruction [ 063 ] := 'STATZ ';
Instruction [ 064 ] := 'INBUF ';
Instruction [ 065 ] := 'OUTBUF ';
Instruction [ 066 ] := 'INPUT ';
Instruction [ 067 ] := 'OUTPUT ';
Instruction [ 070 ] := 'CLOSE ';
Instruction [ 071 ] := 'RELEAS ';
Instruction [ 072 ] := 'MTAPE ';
Instruction [ 073 ] := 'UGETF ';
Instruction [ 074 ] := 'USETI ';
Instruction [ 075 ] := 'USETO ';
Instruction [ 076 ] := 'LOOKUP ';
Instruction [ 077 ] := 'ENTER ';
Instruction [ 100 ] := 'UJEN ';

Instruction [ 101 ] := 'muu101 '; writeln (macrofile, 'opdef muu101 [101000,,0]');

Instruction [ 102 ] := 'GFAD ';
Instruction [ 103 ] := 'GFSB ';

Instruction [ 104 ] := 'JSYS ';
Instruction [ 105 ] := 'ADJSP ';

Instruction [ 106 ] := 'GFMP ';
Instruction [ 107 ] := 'GFDV ';

Instruction [ 110 ] := 'DFAD ';
Instruction [ 111 ] := 'DFSB ';
Instruction [ 112 ] := 'DFMP ';
Instruction [ 113 ] := 'DFDV ';
Instruction [ 114 ] := 'DADD ';
Instruction [ 115 ] := 'DSUB ';
Instruction [ 116 ] := 'DMUL ';
Instruction [ 117 ] := 'DDIV ';
Instruction [ 120 ] := 'DMOVE ';
Instruction [ 121 ] := 'DMOVN ';
Instruction [ 122 ] := 'FIX ';
Instruction [ 123 ] := 'EXTEND ';
Instruction [ 124 ] := 'DMOVEM ';
Instruction [ 125 ] := 'DMOVNM ';
Instruction [ 126 ] := 'FIXR ';
Instruction [ 127 ] := 'FLTR ';
Instruction [ 130 ] := 'UFA ';
Instruction [ 131 ] := 'DFN ';
Instruction [ 132 ] := 'FSC ';

Instruction [ 133 ] := 'ADJBP ';
Instruction [ 138 ] := 'IBP '; { Special handling of IBP/ADJBP }

Instruction [ 134 ] := 'ILDB ';
Instruction [ 135 ] := 'LDB ';
Instruction [ 136 ] := 'IDPB ';
Instruction [ 137 ] := 'DPB ';

Instruction [ 140 ] := 'FAD ';
Instruction [ 141 ] := 'FADL ';
Instruction [ 142 ] := 'FADM ';
Instruction [ 143 ] := 'FADB ';
Instruction [ 144 ] := 'FADR ';
Instruction [ 145 ] := 'FADRI ';
Instruction [ 146 ] := 'FADRM ';
Instruction [ 147 ] := 'FADRB ';
Instruction [ 150 ] := 'FSB ';
Instruction [ 151 ] := 'FSBL ';
Instruction [ 152 ] := 'FSBM ';
Instruction [ 153 ] := 'FSBB ';
Instruction [ 154 ] := 'FSBR ';
Instruction [ 155 ] := 'FSBRI ';
Instruction [ 156 ] := 'FSBRM ';
Instruction [ 157 ] := 'FSBRB ';
Instruction [ 160 ] := 'FMP ';
Instruction [ 161 ] := 'FMPL ';
Instruction [ 162 ] := 'FMPM ';
Instruction [ 163 ] := 'FMPB ';
Instruction [ 164 ] := 'FMPR ';
Instruction [ 165 ] := 'FMPRI ';
Instruction [ 166 ] := 'FMPRM ';
Instruction [ 167 ] := 'FMPRB ';
Instruction [ 170 ] := 'FDV ';
Instruction [ 171 ] := 'FDVL ';
Instruction [ 172 ] := 'FDVM ';
Instruction [ 173 ] := 'FDVB ';
Instruction [ 174 ] := 'FDVR ';
Instruction [ 175 ] := 'FDVRI ';
Instruction [ 176 ] := 'FDVRM ';
Instruction [ 177 ] := 'FDVRB ';

Instruction [ 200 ] := 'MOVE ';
Instruction [ 201 ] := 'MOVEI ';
Instruction [ 202 ] := 'MOVEM ';
Instruction [ 203 ] := 'MOVES ';
Instruction [ 204 ] := 'MOVS ';
Instruction [ 205 ] := 'MOVSI ';
Instruction [ 206 ] := 'MOVSM ';
Instruction [ 207 ] := 'MOVSS ';
Instruction [ 210 ] := 'MOVN ';
Instruction [ 211 ] := 'MOVNI ';
Instruction [ 212 ] := 'MOVNM ';
Instruction [ 213 ] := 'MOVNS ';
Instruction [ 214 ] := 'MOVM ';
Instruction [ 215 ] := 'MOVMI ';
Instruction [ 216 ] := 'MOVMM ';
Instruction [ 217 ] := 'MOVMS ';

Instruction [ 220 ] := 'IMUL ';
Instruction [ 221 ] := 'IMULI ';
Instruction [ 222 ] := 'IMULM ';
Instruction [ 223 ] := 'IMULB ';
Instruction [ 224 ] := 'MUL ';
Instruction [ 225 ] := 'MULI ';
Instruction [ 226 ] := 'MULM ';
Instruction [ 227 ] := 'MULB ';
Instruction [ 230 ] := 'IDIV ';
Instruction [ 231 ] := 'IDIVI ';
Instruction [ 232 ] := 'IDIVM ';
Instruction [ 233 ] := 'IDIVB ';
Instruction [ 234 ] := 'DIV ';
Instruction [ 235 ] := 'DIVI ';
Instruction [ 236 ] := 'DIVM ';
Instruction [ 237 ] := 'DIVB ';

Instruction [ 240 ] := 'ASH ';
Instruction [ 241 ] := 'ROT ';
Instruction [ 242 ] := 'LSH ';
Instruction [ 243 ] := 'JFFO ';
Instruction [ 244 ] := 'ASHC ';
Instruction [ 245 ] := 'ROTC ';
Instruction [ 246 ] := 'LSHC ';

Instruction [ 247 ] := 'noop '; writeln (macrofile, 'opdef noop [247000,,0]');

Instruction [ 250 ] := 'EXCH ';
Instruction [ 251 ] := 'BLT ';

Instruction [ 252 ] := 'AOBJP ';
Instruction [ 253 ] := 'AOBJN ';
Instruction [ 254 ] := 'JRST ';
Instruction [ 255 ] := 'JFCL ';

Instruction [ 256 ] := 'XCT ';
Instruction [ 257 ] := 'MAP ';

Instruction [ 260 ] := 'PUSHJ ';
Instruction [ 261 ] := 'PUSH ';
Instruction [ 262 ] := 'POP ';
Instruction [ 263 ] := 'POPJ ';
Instruction [ 264 ] := 'JSR ';
Instruction [ 265 ] := 'JSP ';
Instruction [ 266 ] := 'JSA ';
Instruction [ 267 ] := 'JRA ';

Instruction [ 270 ] := 'ADD ';
Instruction [ 271 ] := 'ADDI ';
Instruction [ 272 ] := 'ADDM ';
Instruction [ 273 ] := 'ADDB ';
Instruction [ 274 ] := 'SUB ';
Instruction [ 275 ] := 'SUBI ';
Instruction [ 276 ] := 'SUBM ';
Instruction [ 277 ] := 'SUBB ';

Instruction [ 300 ] := 'CAI ';
Instruction [ 301 ] := 'CAIL ';
Instruction [ 302 ] := 'CAIE ';
Instruction [ 303 ] := 'CAILE ';
Instruction [ 304 ] := 'CAIA ';
Instruction [ 305 ] := 'CAIGE ';
Instruction [ 306 ] := 'CAIN ';
Instruction [ 307 ] := 'CAIG ';
Instruction [ 310 ] := 'CAM ';
Instruction [ 311 ] := 'CAML ';
Instruction [ 312 ] := 'CAME ';
Instruction [ 313 ] := 'CAMLE ';
Instruction [ 314 ] := 'CAMA ';
Instruction [ 315 ] := 'CAMGE ';
Instruction [ 316 ] := 'CAMN ';
Instruction [ 317 ] := 'CAMG ';
Instruction [ 320 ] := 'JUMP ';
Instruction [ 321 ] := 'JUMPL ';
Instruction [ 322 ] := 'JUMPE ';
Instruction [ 323 ] := 'JUMPLE ';
Instruction [ 324 ] := 'JUMPA ';
Instruction [ 325 ] := 'JUMPGE ';
Instruction [ 326 ] := 'JUMPN ';
Instruction [ 327 ] := 'JUMPG ';
Instruction [ 330 ] := 'SKIP ';
Instruction [ 331 ] := 'SKIPL ';
Instruction [ 332 ] := 'SKIPE ';
Instruction [ 333 ] := 'SKIPLE ';
Instruction [ 334 ] := 'SKIPA ';
Instruction [ 335 ] := 'SKIPGE ';
Instruction [ 336 ] := 'SKIPN ';
Instruction [ 337 ] := 'SKIPG ';
Instruction [ 340 ] := 'AOJ ';
Instruction [ 341 ] := 'AOJL ';
Instruction [ 342 ] := 'AOJE ';
Instruction [ 343 ] := 'AOJLE ';
Instruction [ 344 ] := 'AOJA ';
Instruction [ 345 ] := 'AOJGE ';
Instruction [ 346 ] := 'AOJN ';
Instruction [ 347 ] := 'AOJG ';
Instruction [ 350 ] := 'AOS ';
Instruction [ 351 ] := 'AOSL ';
Instruction [ 352 ] := 'AOSE ';
Instruction [ 353 ] := 'AOSLE ';
Instruction [ 354 ] := 'AOSA ';
Instruction [ 355 ] := 'AOSGE ';
Instruction [ 356 ] := 'AOSN ';
Instruction [ 357 ] := 'AOSG ';
Instruction [ 360 ] := 'SOJ ';
Instruction [ 361 ] := 'SOJL ';
Instruction [ 362 ] := 'SOJE ';
Instruction [ 363 ] := 'SOJLE ';
Instruction [ 364 ] := 'SOJA ';
Instruction [ 365 ] := 'SOJGE ';
Instruction [ 366 ] := 'SOJN ';
Instruction [ 367 ] := 'SOJG ';
Instruction [ 370 ] := 'SOS ';
Instruction [ 371 ] := 'SOSL ';
Instruction [ 372 ] := 'SOSE ';
Instruction [ 373 ] := 'SOSLE ';
Instruction [ 374 ] := 'SOSA ';
Instruction [ 375 ] := 'SOSGE ';
Instruction [ 376 ] := 'SOSN ';
Instruction [ 377 ] := 'SOSG ';

Instruction [ 400 ] := 'SETZ ';
Instruction [ 401 ] := 'SETZI ';
Instruction [ 402 ] := 'SETZM ';
Instruction [ 403 ] := 'SETZB ';
Instruction [ 404 ] := 'AND ';
Instruction [ 405 ] := 'ANDI ';
Instruction [ 406 ] := 'ANDM ';
Instruction [ 407 ] := 'ANDB ';
Instruction [ 410 ] := 'ANDCA ';
Instruction [ 411 ] := 'ANDCAI ';
Instruction [ 412 ] := 'ANDCAM ';
Instruction [ 413 ] := 'ANDCAB ';
Instruction [ 414 ] := 'SETM ';
Instruction [ 415 ] := 'XMOVEI ';
Instruction [ 416 ] := 'SETMM ';
Instruction [ 417 ] := 'SETMB ';
Instruction [ 420 ] := 'ANDCM ';
Instruction [ 421 ] := 'ANDCMI ';
Instruction [ 422 ] := 'ANDCMM ';
Instruction [ 423 ] := 'ANDCMB ';
Instruction [ 424 ] := 'SETA ';
Instruction [ 425 ] := 'SETAI ';
Instruction [ 426 ] := 'SETAM ';
Instruction [ 427 ] := 'SETAB ';
Instruction [ 430 ] := 'XOR ';
Instruction [ 431 ] := 'XORI ';
Instruction [ 432 ] := 'XORM ';
Instruction [ 433 ] := 'XORB ';
Instruction [ 434 ] := 'IOR ';
Instruction [ 435 ] := 'IORI ';
Instruction [ 436 ] := 'IORM ';
Instruction [ 437 ] := 'IORB ';
Instruction [ 440 ] := 'ANDCB ';
Instruction [ 441 ] := 'ANDCBI ';
Instruction [ 442 ] := 'ANDCBM ';
Instruction [ 443 ] := 'ANDCBB ';
Instruction [ 444 ] := 'EQV ';
Instruction [ 445 ] := 'EQVI ';
Instruction [ 446 ] := 'EQVM ';
Instruction [ 447 ] := 'EQVB ';
Instruction [ 450 ] := 'SETCA ';
Instruction [ 451 ] := 'SETCAI ';
Instruction [ 452 ] := 'SETCAM ';
Instruction [ 453 ] := 'SETCAB ';
Instruction [ 454 ] := 'ORCA ';
Instruction [ 455 ] := 'ORCAI ';
Instruction [ 456 ] := 'ORCAM ';
Instruction [ 457 ] := 'ORCAB ';
Instruction [ 460 ] := 'SETCM ';
Instruction [ 461 ] := 'SETCMI ';
Instruction [ 462 ] := 'SETCMM ';
Instruction [ 463 ] := 'SETCMB ';
Instruction [ 464 ] := 'ORCM ';
Instruction [ 465 ] := 'ORCMI ';
Instruction [ 466 ] := 'ORCMM ';
Instruction [ 467 ] := 'ORCMB ';
Instruction [ 470 ] := 'ORCB ';
Instruction [ 471 ] := 'ORCBI ';
Instruction [ 472 ] := 'ORCBM ';
Instruction [ 473 ] := 'ORCBB ';
Instruction [ 474 ] := 'SETO ';
Instruction [ 475 ] := 'SETOI ';
Instruction [ 476 ] := 'SETOM ';
Instruction [ 477 ] := 'SETOB ';

Instruction [ 500 ] := 'HLL ';
Instruction [ 501 ] := 'HLLI ';
Instruction [ 502 ] := 'HLLM ';
Instruction [ 503 ] := 'HLLS ';
Instruction [ 504 ] := 'HRL ';
Instruction [ 505 ] := 'HRLI ';
Instruction [ 506 ] := 'HRLM ';
Instruction [ 507 ] := 'HRLS ';
Instruction [ 510 ] := 'HLLZ ';
Instruction [ 511 ] := 'HLLZI ';
Instruction [ 512 ] := 'HLLZM ';
Instruction [ 513 ] := 'HLLZS ';
Instruction [ 514 ] := 'HRLZ ';
Instruction [ 515 ] := 'HRLZI ';
Instruction [ 516 ] := 'HRLZM ';
Instruction [ 517 ] := 'HRLZS ';
Instruction [ 520 ] := 'HLLO ';
Instruction [ 521 ] := 'HLLOI ';
Instruction [ 522 ] := 'HLLOM ';
Instruction [ 523 ] := 'HLLOS ';
Instruction [ 524 ] := 'HRLO ';
Instruction [ 525 ] := 'HRLOI ';
Instruction [ 526 ] := 'HRLOM ';
Instruction [ 527 ] := 'HRLOS ';
Instruction [ 530 ] := 'HLLE ';
Instruction [ 531 ] := 'HLLEI ';
Instruction [ 532 ] := 'HLLEM ';
Instruction [ 533 ] := 'HLLES ';
Instruction [ 534 ] := 'HRLE ';
Instruction [ 535 ] := 'HRLEI ';
Instruction [ 536 ] := 'HRLEM ';
Instruction [ 537 ] := 'HRLES ';
Instruction [ 540 ] := 'HRR ';
Instruction [ 541 ] := 'HRRI ';
Instruction [ 542 ] := 'HRRM ';
Instruction [ 543 ] := 'HRRS ';
Instruction [ 544 ] := 'HLR ';
Instruction [ 545 ] := 'HLRI ';
Instruction [ 546 ] := 'HLRM ';
Instruction [ 547 ] := 'HLRS ';
Instruction [ 550 ] := 'HRRZ ';
Instruction [ 551 ] := 'HRRZI ';
Instruction [ 552 ] := 'HRRZM ';
Instruction [ 553 ] := 'HRRZS ';
Instruction [ 554 ] := 'HLRZ ';
Instruction [ 555 ] := 'HLRZI ';
Instruction [ 556 ] := 'HLRZM ';
Instruction [ 557 ] := 'HLRZS ';
Instruction [ 560 ] := 'HRRO ';
Instruction [ 561 ] := 'HRROI ';
Instruction [ 562 ] := 'HRROM ';
Instruction [ 563 ] := 'HRROS ';
Instruction [ 564 ] := 'HLRO ';
Instruction [ 565 ] := 'HLROI ';
Instruction [ 566 ] := 'HLROM ';
Instruction [ 567 ] := 'HLROS ';
Instruction [ 570 ] := 'HRRE ';
Instruction [ 571 ] := 'HRREI ';
Instruction [ 572 ] := 'HRREM ';
Instruction [ 573 ] := 'HRRES ';
Instruction [ 574 ] := 'HLRE ';
Instruction [ 575 ] := 'HLREI ';
Instruction [ 576 ] := 'HLREM ';
Instruction [ 577 ] := 'HLRES ';

Instruction [ 600 ] := 'TRN ';
Instruction [ 601 ] := 'TLN ';
Instruction [ 602 ] := 'TRNE ';
Instruction [ 603 ] := 'TLNE ';
Instruction [ 604 ] := 'TRNA ';
Instruction [ 605 ] := 'TLNA ';
Instruction [ 606 ] := 'TRNN ';
Instruction [ 607 ] := 'TLNN ';
Instruction [ 610 ] := 'TDN ';
Instruction [ 611 ] := 'TSN ';
Instruction [ 612 ] := 'TDNE ';
Instruction [ 613 ] := 'TSNE ';
Instruction [ 614 ] := 'TDNA ';
Instruction [ 615 ] := 'TSNA ';
Instruction [ 616 ] := 'TDNN ';
Instruction [ 617 ] := 'TSNN ';
Instruction [ 620 ] := 'TRZ ';
Instruction [ 621 ] := 'TLZ ';
Instruction [ 622 ] := 'TRZE ';
Instruction [ 623 ] := 'TLZE ';
Instruction [ 624 ] := 'TRZA ';
Instruction [ 625 ] := 'TLZA ';
Instruction [ 626 ] := 'TRZN ';
Instruction [ 627 ] := 'TLZN ';
Instruction [ 630 ] := 'TDZ ';
Instruction [ 631 ] := 'TSZ ';
Instruction [ 632 ] := 'TDZE ';
Instruction [ 633 ] := 'TSZE ';
Instruction [ 634 ] := 'TDZA ';
Instruction [ 635 ] := 'TSZA ';
Instruction [ 636 ] := 'TDZN ';
Instruction [ 637 ] := 'TSZN ';
Instruction [ 640 ] := 'TRC ';
Instruction [ 641 ] := 'TLC ';
Instruction [ 642 ] := 'TRCE ';
Instruction [ 643 ] := 'TLCE ';
Instruction [ 644 ] := 'TRCA ';
Instruction [ 645 ] := 'TLCA ';
Instruction [ 646 ] := 'TRCN ';
Instruction [ 647 ] := 'TLCN ';
Instruction [ 650 ] := 'TDC ';
Instruction [ 651 ] := 'TSC ';
Instruction [ 652 ] := 'TDCE ';
Instruction [ 653 ] := 'TSCE ';
Instruction [ 654 ] := 'TDCA ';
Instruction [ 655 ] := 'TSCA ';
Instruction [ 656 ] := 'TDCN ';
Instruction [ 657 ] := 'TSCN ';
Instruction [ 660 ] := 'TRO ';
Instruction [ 661 ] := 'TLO ';
Instruction [ 662 ] := 'TROE ';
Instruction [ 663 ] := 'TLOE ';
Instruction [ 664 ] := 'TROA ';
Instruction [ 665 ] := 'TLOA ';
Instruction [ 666 ] := 'TRON ';
Instruction [ 667 ] := 'TLON ';
Instruction [ 670 ] := 'TDO ';
Instruction [ 671 ] := 'TSO ';
Instruction [ 672 ] := 'TDOE ';
Instruction [ 673 ] := 'TSOE ';
Instruction [ 674 ] := 'TDOA ';
Instruction [ 675 ] := 'TSOA ';
Instruction [ 676 ] := 'TDON ';
Instruction [ 677 ] := 'TSON ';

{ Initialize the Tops-20 JSYS array }

for i := 0 to TopJSYS do begin;
JSYS [ i ] := 'JSYS ';
Named_JSYS [ i ] := false;
end;

JSYS [ 1 ] := 'LOGIN '; Named_JSYS [ 1 ] := true;

JSYS [ 2 ] := 'CRJOB '; Named_JSYS [ 2 ] := true;

JSYS [ 3 ] := 'LGOUT '; Named_JSYS [ 3 ] := true;

JSYS [ 4 ] := 'CACCT '; Named_JSYS [ 4 ] := true;

JSYS [ 5 ] := 'EFACT '; Named_JSYS [ 5 ] := true;

JSYS [ 6 ] := 'SMON '; Named_JSYS [ 6 ] := true;

JSYS [ 7 ] := 'TMON '; Named_JSYS [ 7 ] := true;

JSYS [ 10 ] := 'GETAB '; Named_JSYS [ 10 ] := true;

JSYS [ 11 ] := 'ERSTR '; Named_JSYS [ 11 ] := true;

JSYS [ 12 ] := 'GETER '; Named_JSYS [ 12 ] := true;

JSYS [ 13 ] := 'GJINF '; Named_JSYS [ 13 ] := true;

JSYS [ 14 ] := 'TIME '; Named_JSYS [ 14 ] := true;

JSYS [ 15 ] := 'RUNTM '; Named_JSYS [ 15 ] := true;

JSYS [ 16 ] := 'SYSGT '; Named_JSYS [ 16 ] := true;

JSYS [ 17 ] := 'GNJFN '; Named_JSYS [ 17 ] := true;

JSYS [ 20 ] := 'GTJFN '; Named_JSYS [ 20 ] := true;

JSYS [ 21 ] := 'OPENF '; Named_JSYS [ 21 ] := true;

JSYS [ 22 ] := 'CLOSF '; Named_JSYS [ 22 ] := true;

JSYS [ 23 ] := 'RLJFN '; Named_JSYS [ 23 ] := true;

JSYS [ 24 ] := 'GTSTS '; Named_JSYS [ 24 ] := true;

JSYS [ 25 ] := 'STSTS '; Named_JSYS [ 25 ] := true;

JSYS [ 26 ] := 'DELF '; Named_JSYS [ 26 ] := true;

JSYS [ 27 ] := 'SFPTR '; Named_JSYS [ 27 ] := true;

JSYS [ 30 ] := 'JFNS '; Named_JSYS [ 30 ] := true;

JSYS [ 31 ] := 'FFFFP '; Named_JSYS [ 31 ] := true;

JSYS [ 32 ] := 'RDDIR '; Named_JSYS [ 32 ] := true;

JSYS [ 33 ] := 'CPRTF '; Named_JSYS [ 33 ] := true;

JSYS [ 34 ] := 'CLZFF '; Named_JSYS [ 34 ] := true;

JSYS [ 35 ] := 'RNAMF '; Named_JSYS [ 35 ] := true;

JSYS [ 36 ] := 'SIZEF '; Named_JSYS [ 36 ] := true;

JSYS [ 37 ] := 'GACTF '; Named_JSYS [ 37 ] := true;

JSYS [ 40 ] := 'STDIR '; Named_JSYS [ 40 ] := true;

JSYS [ 41 ] := 'DIRST '; Named_JSYS [ 41 ] := true;

JSYS [ 42 ] := 'BKJFN '; Named_JSYS [ 42 ] := true;

JSYS [ 43 ] := 'RFPTR '; Named_JSYS [ 43 ] := true;

JSYS [ 44 ] := 'CNDIR '; Named_JSYS [ 44 ] := true;

JSYS [ 45 ] := 'RFBSZ '; Named_JSYS [ 45 ] := true;

JSYS [ 46 ] := 'SFBSZ '; Named_JSYS [ 46 ] := true;

JSYS [ 47 ] := 'SWJFN '; Named_JSYS [ 47 ] := true;

JSYS [ 50 ] := 'BIN '; Named_JSYS [ 50 ] := true;

JSYS [ 51 ] := 'BOUT '; Named_JSYS [ 51 ] := true;

JSYS [ 52 ] := 'SIN '; Named_JSYS [ 52 ] := true;

JSYS [ 53 ] := 'SOUT '; Named_JSYS [ 53 ] := true;

JSYS [ 54 ] := 'RIN '; Named_JSYS [ 54 ] := true;

JSYS [ 55 ] := 'ROUT '; Named_JSYS [ 55 ] := true;

JSYS [ 56 ] := 'PMAP '; Named_JSYS [ 56 ] := true;

JSYS [ 57 ] := 'RPACS '; Named_JSYS [ 57 ] := true;

JSYS [ 60 ] := 'SPACS '; Named_JSYS [ 60 ] := true;

JSYS [ 61 ] := 'RMAP '; Named_JSYS [ 61 ] := true;

JSYS [ 62 ] := 'SACTF '; Named_JSYS [ 62 ] := true;

JSYS [ 63 ] := 'GTFDB '; Named_JSYS [ 63 ] := true;

JSYS [ 64 ] := 'CHFDB '; Named_JSYS [ 64 ] := true;

JSYS [ 65 ] := 'DUMPI '; Named_JSYS [ 65 ] := true;

JSYS [ 66 ] := 'DUMPO '; Named_JSYS [ 66 ] := true;

JSYS [ 67 ] := 'DELDF '; Named_JSYS [ 67 ] := true;

JSYS [ 70 ] := 'ASND '; Named_JSYS [ 70 ] := true;

JSYS [ 71 ] := 'RELD '; Named_JSYS [ 71 ] := true;

JSYS [ 72 ] := 'CSYNO '; Named_JSYS [ 72 ] := true;

JSYS [ 73 ] := 'PBIN '; Named_JSYS [ 73 ] := true;

JSYS [ 74 ] := 'PBOUT '; Named_JSYS [ 74 ] := true;

JSYS [ 75 ] := 'PSIN '; Named_JSYS [ 75 ] := true;

JSYS [ 76 ] := 'PSOUT '; Named_JSYS [ 76 ] := true;

JSYS [ 77 ] := 'MTOPR '; Named_JSYS [ 77 ] := true;

JSYS [ 100 ] := 'CFIBF '; Named_JSYS [ 100 ] := true;

JSYS [ 101 ] := 'CFOBF '; Named_JSYS [ 101 ] := true;

JSYS [ 102 ] := 'SIBE '; Named_JSYS [ 102 ] := true;

JSYS [ 103 ] := 'SOBE '; Named_JSYS [ 103 ] := true;

JSYS [ 104 ] := 'DOBE '; Named_JSYS [ 104 ] := true;

JSYS [ 105 ] := 'GTABS '; Named_JSYS [ 105 ] := true;

JSYS [ 106 ] := 'STABS '; Named_JSYS [ 106 ] := true;

JSYS [ 107 ] := 'RFMOD '; Named_JSYS [ 107 ] := true;

JSYS [ 110 ] := 'SFMOD '; Named_JSYS [ 110 ] := true;

JSYS [ 111 ] := 'RFPOS '; Named_JSYS [ 111 ] := true;

JSYS [ 112 ] := 'RFCOC '; Named_JSYS [ 112 ] := true;

JSYS [ 113 ] := 'SFCOC '; Named_JSYS [ 113 ] := true;

JSYS [ 114 ] := 'STI '; Named_JSYS [ 114 ] := true;

JSYS [ 115 ] := 'DTACH '; Named_JSYS [ 115 ] := true;

JSYS [ 116 ] := 'ATACH '; Named_JSYS [ 116 ] := true;

JSYS [ 117 ] := 'DVCHR '; Named_JSYS [ 117 ] := true;

JSYS [ 120 ] := 'STDEV '; Named_JSYS [ 120 ] := true;

JSYS [ 121 ] := 'DEVST '; Named_JSYS [ 121 ] := true;

JSYS [ 122 ] := 'MOUNT '; Named_JSYS [ 122 ] := true;

JSYS [ 123 ] := 'DSMNT '; Named_JSYS [ 123 ] := true;

JSYS [ 124 ] := 'INIDR '; Named_JSYS [ 124 ] := true;

JSYS [ 125 ] := 'SIR '; Named_JSYS [ 125 ] := true;

JSYS [ 126 ] := 'EIR '; Named_JSYS [ 126 ] := true;

JSYS [ 127 ] := 'SKPIR '; Named_JSYS [ 127 ] := true;

JSYS [ 130 ] := 'DIR '; Named_JSYS [ 130 ] := true;

JSYS [ 131 ] := 'AIC '; Named_JSYS [ 131 ] := true;

JSYS [ 132 ] := 'IIC '; Named_JSYS [ 132 ] := true;

JSYS [ 133 ] := 'DIC '; Named_JSYS [ 133 ] := true;

JSYS [ 134 ] := 'RCM '; Named_JSYS [ 134 ] := true;

JSYS [ 135 ] := 'RWM '; Named_JSYS [ 135 ] := true;

JSYS [ 136 ] := 'DEBRK '; Named_JSYS [ 136 ] := true;

JSYS [ 137 ] := 'ATI '; Named_JSYS [ 137 ] := true;

JSYS [ 140 ] := 'DTI '; Named_JSYS [ 140 ] := true;

JSYS [ 141 ] := 'CIS '; Named_JSYS [ 141 ] := true;

JSYS [ 142 ] := 'SIRCM '; Named_JSYS [ 142 ] := true;

JSYS [ 143 ] := 'RIRCM '; Named_JSYS [ 143 ] := true;

JSYS [ 144 ] := 'RIR '; Named_JSYS [ 144 ] := true;

JSYS [ 145 ] := 'GDSTS '; Named_JSYS [ 145 ] := true;

JSYS [ 146 ] := 'SDSTS '; Named_JSYS [ 146 ] := true;

JSYS [ 147 ] := 'RESET '; Named_JSYS [ 147 ] := true;

JSYS [ 150 ] := 'RPCAP '; Named_JSYS [ 150 ] := true;

JSYS [ 151 ] := 'EPCAP '; Named_JSYS [ 151 ] := true;

JSYS [ 152 ] := 'CFORK '; Named_JSYS [ 152 ] := true;

JSYS [ 153 ] := 'KFORK '; Named_JSYS [ 153 ] := true;

JSYS [ 154 ] := 'FFORK '; Named_JSYS [ 154 ] := true;

JSYS [ 155 ] := 'RFORK '; Named_JSYS [ 155 ] := true;

JSYS [ 156 ] := 'RFSTS '; Named_JSYS [ 156 ] := true;

JSYS [ 157 ] := 'SFORK '; Named_JSYS [ 157 ] := true;

JSYS [ 160 ] := 'SFACS '; Named_JSYS [ 160 ] := true;

JSYS [ 161 ] := 'RFACS '; Named_JSYS [ 161 ] := true;

JSYS [ 162 ] := 'HFORK '; Named_JSYS [ 162 ] := true;

JSYS [ 163 ] := 'WFORK '; Named_JSYS [ 163 ] := true;

JSYS [ 164 ] := 'GFRKH '; Named_JSYS [ 164 ] := true;

JSYS [ 165 ] := 'RFRKH '; Named_JSYS [ 165 ] := true;

JSYS [ 166 ] := 'GFRKS '; Named_JSYS [ 166 ] := true;

JSYS [ 167 ] := 'DISMS '; Named_JSYS [ 167 ] := true;

JSYS [ 170 ] := 'HALTF '; Named_JSYS [ 170 ] := true;

JSYS [ 171 ] := 'GTRPW '; Named_JSYS [ 171 ] := true;

JSYS [ 172 ] := 'GTRPI '; Named_JSYS [ 172 ] := true;

JSYS [ 173 ] := 'RTIW '; Named_JSYS [ 173 ] := true;

JSYS [ 174 ] := 'STIW '; Named_JSYS [ 174 ] := true;

JSYS [ 175 ] := 'SOBF '; Named_JSYS [ 175 ] := true;

JSYS [ 176 ] := 'RWSET '; Named_JSYS [ 176 ] := true;

JSYS [ 177 ] := 'GETNM '; Named_JSYS [ 177 ] := true;

JSYS [ 200 ] := 'GET '; Named_JSYS [ 200 ] := true;

JSYS [ 201 ] := 'SFRKV '; Named_JSYS [ 201 ] := true;

JSYS [ 202 ] := 'SAVE '; Named_JSYS [ 202 ] := true;

JSYS [ 203 ] := 'SSAVE '; Named_JSYS [ 203 ] := true;

JSYS [ 204 ] := 'SEVEC '; Named_JSYS [ 204 ] := true;

JSYS [ 205 ] := 'GEVEC '; Named_JSYS [ 205 ] := true;

JSYS [ 206 ] := 'GPJFN '; Named_JSYS [ 206 ] := true;

JSYS [ 207 ] := 'SPJFN '; Named_JSYS [ 207 ] := true;

JSYS [ 210 ] := 'SETNM '; Named_JSYS [ 210 ] := true;

JSYS [ 211 ] := 'FFUFP '; Named_JSYS [ 211 ] := true;

JSYS [ 212 ] := 'DIBE '; Named_JSYS [ 212 ] := true;

JSYS [ 213 ] := 'FDFRE '; Named_JSYS [ 213 ] := true;

JSYS [ 214 ] := 'GDSKC '; Named_JSYS [ 214 ] := true;

JSYS [ 215 ] := 'LITES '; Named_JSYS [ 215 ] := true;

JSYS [ 216 ] := 'TLINK '; Named_JSYS [ 216 ] := true;

JSYS [ 217 ] := 'STPAR '; Named_JSYS [ 217 ] := true;

JSYS [ 220 ] := 'ODTIM '; Named_JSYS [ 220 ] := true;

JSYS [ 221 ] := 'IDTIM '; Named_JSYS [ 221 ] := true;

JSYS [ 222 ] := 'ODCNV '; Named_JSYS [ 222 ] := true;

JSYS [ 223 ] := 'IDCNV '; Named_JSYS [ 223 ] := true;

JSYS [ 224 ] := 'NOUT '; Named_JSYS [ 224 ] := true;

JSYS [ 225 ] := 'NIN '; Named_JSYS [ 225 ] := true;

JSYS [ 226 ] := 'STAD '; Named_JSYS [ 226 ] := true;

JSYS [ 227 ] := 'GTAD '; Named_JSYS [ 227 ] := true;

JSYS [ 230 ] := 'ODTNC '; Named_JSYS [ 230 ] := true;

JSYS [ 231 ] := 'IDTNC '; Named_JSYS [ 231 ] := true;

JSYS [ 232 ] := 'FLIN '; Named_JSYS [ 232 ] := true;

JSYS [ 233 ] := 'FLOUT '; Named_JSYS [ 233 ] := true;

JSYS [ 234 ] := 'DFIN '; Named_JSYS [ 234 ] := true;

JSYS [ 235 ] := 'DFOUT '; Named_JSYS [ 235 ] := true;

JSYS [ 240 ] := 'CRDIR '; Named_JSYS [ 240 ] := true;

JSYS [ 241 ] := 'GTDIR '; Named_JSYS [ 241 ] := true;

JSYS [ 242 ] := 'DSKOP '; Named_JSYS [ 242 ] := true;

JSYS [ 243 ] := 'SPRIW '; Named_JSYS [ 243 ] := true;

JSYS [ 244 ] := 'DSKAS '; Named_JSYS [ 244 ] := true;

JSYS [ 245 ] := 'SJPRI '; Named_JSYS [ 245 ] := true;

JSYS [ 246 ] := 'STO '; Named_JSYS [ 246 ] := true;

JSYS [ 247 ] := 'ARCF '; Named_JSYS [ 247 ] := true;

JSYS [ 260 ] := 'ASNDP '; Named_JSYS [ 260 ] := true;

JSYS [ 261 ] := 'RELDP '; Named_JSYS [ 261 ] := true;

JSYS [ 262 ] := 'ASNDC '; Named_JSYS [ 262 ] := true;

JSYS [ 263 ] := 'RELDC '; Named_JSYS [ 263 ] := true;

JSYS [ 264 ] := 'STRDP '; Named_JSYS [ 264 ] := true;

JSYS [ 265 ] := 'STPDP '; Named_JSYS [ 265 ] := true;

JSYS [ 266 ] := 'STSDP '; Named_JSYS [ 266 ] := true;

JSYS [ 267 ] := 'RDSDP '; Named_JSYS [ 267 ] := true;

JSYS [ 270 ] := 'WATDP '; Named_JSYS [ 270 ] := true;

JSYS [ 272 ] := 'GTNCP '; Named_JSYS [ 272 ] := true;

JSYS [ 273 ] := 'GTHST '; Named_JSYS [ 273 ] := true;

JSYS [ 274 ] := 'ATNVT '; Named_JSYS [ 274 ] := true;

JSYS [ 275 ] := 'CVSKT '; Named_JSYS [ 275 ] := true;

JSYS [ 276 ] := 'CVHST '; Named_JSYS [ 276 ] := true;

JSYS [ 277 ] := 'FLHST '; Named_JSYS [ 277 ] := true;

JSYS [ 300 ] := 'GCVEC '; Named_JSYS [ 300 ] := true;

JSYS [ 301 ] := 'SCVEC '; Named_JSYS [ 301 ] := true;

JSYS [ 302 ] := 'STTYP '; Named_JSYS [ 302 ] := true;

JSYS [ 303 ] := 'GTTYP '; Named_JSYS [ 303 ] := true;

JSYS [ 304 ] := 'BPT '; Named_JSYS [ 304 ] := true;

JSYS [ 305 ] := 'GTDAL '; Named_JSYS [ 305 ] := true;

JSYS [ 306 ] := 'WAIT '; Named_JSYS [ 306 ] := true;

JSYS [ 307 ] := 'HSYS '; Named_JSYS [ 307 ] := true;

JSYS [ 310 ] := 'USRIO '; Named_JSYS [ 310 ] := true;

JSYS [ 311 ] := 'PEEK '; Named_JSYS [ 311 ] := true;

JSYS [ 312 ] := 'MSFRK '; Named_JSYS [ 312 ] := true;

JSYS [ 313 ] := 'ESOUT '; Named_JSYS [ 313 ] := true;

JSYS [ 314 ] := 'SPLFK '; Named_JSYS [ 314 ] := true;

JSYS [ 315 ] := 'ADVIS '; Named_JSYS [ 315 ] := true;

JSYS [ 316 ] := 'JOBTM '; Named_JSYS [ 316 ] := true;

JSYS [ 317 ] := 'DELNF '; Named_JSYS [ 317 ] := true;

JSYS [ 320 ] := 'SWTCH '; Named_JSYS [ 320 ] := true;

JSYS [ 321 ] := 'TFORK '; Named_JSYS [ 321 ] := true;

JSYS [ 322 ] := 'RTFRK '; Named_JSYS [ 322 ] := true;

JSYS [ 323 ] := 'UTFRK '; Named_JSYS [ 323 ] := true;

JSYS [ 324 ] := 'SCTTY '; Named_JSYS [ 324 ] := true;

JSYS [ 326 ] := 'OPRFN '; Named_JSYS [ 326 ] := true;

JSYS [ 336 ] := 'SETER '; Named_JSYS [ 336 ] := true;

JSYS [ 441 ] := 'PUPI '; Named_JSYS [ 441 ] := true;

JSYS [ 442 ] := 'PUPO '; Named_JSYS [ 442 ] := true;

JSYS [ 443 ] := 'PUPNM '; Named_JSYS [ 443 ] := true;

JSYS [ 500 ] := 'RSCAN '; Named_JSYS [ 500 ] := true;

JSYS [ 501 ] := 'HPTIM '; Named_JSYS [ 501 ] := true;

JSYS [ 502 ] := 'CRLNM '; Named_JSYS [ 502 ] := true;

JSYS [ 503 ] := 'INLNM '; Named_JSYS [ 503 ] := true;

JSYS [ 504 ] := 'LNMST '; Named_JSYS [ 504 ] := true;

JSYS [ 505 ] := 'RDTXT '; Named_JSYS [ 505 ] := true;

JSYS [ 506 ] := 'SETSN '; Named_JSYS [ 506 ] := true;

JSYS [ 507 ] := 'GETJI '; Named_JSYS [ 507 ] := true;

JSYS [ 510 ] := 'MSEND '; Named_JSYS [ 510 ] := true;

JSYS [ 511 ] := 'MRECV '; Named_JSYS [ 511 ] := true;

JSYS [ 512 ] := 'MUTIL '; Named_JSYS [ 512 ] := true;

JSYS [ 513 ] := 'ENQ '; Named_JSYS [ 513 ] := true;

JSYS [ 514 ] := 'DEQ '; Named_JSYS [ 514 ] := true;

JSYS [ 515 ] := 'ENQC '; Named_JSYS [ 515 ] := true;

JSYS [ 516 ] := 'SNOOP '; Named_JSYS [ 516 ] := true;

JSYS [ 517 ] := 'SPOOL '; Named_JSYS [ 517 ] := true;

JSYS [ 520 ] := 'ALLOC '; Named_JSYS [ 520 ] := true;

JSYS [ 521 ] := 'CHKAC '; Named_JSYS [ 521 ] := true;

JSYS [ 522 ] := 'TIMER '; Named_JSYS [ 522 ] := true;

JSYS [ 523 ] := 'RDTTY '; Named_JSYS [ 523 ] := true;

JSYS [ 524 ] := 'TEXTI '; Named_JSYS [ 524 ] := true;

JSYS [ 525 ] := 'UFPGS '; Named_JSYS [ 525 ] := true;

JSYS [ 526 ] := 'SFPOS '; Named_JSYS [ 526 ] := true;

JSYS [ 527 ] := 'SYERR '; Named_JSYS [ 527 ] := true;

JSYS [ 530 ] := 'DIAG '; Named_JSYS [ 530 ] := true;

JSYS [ 531 ] := 'SINR '; Named_JSYS [ 531 ] := true;

JSYS [ 532 ] := 'SOUTR '; Named_JSYS [ 532 ] := true;

JSYS [ 533 ] := 'RFTAD '; Named_JSYS [ 533 ] := true;

JSYS [ 534 ] := 'SFTAD '; Named_JSYS [ 534 ] := true;

JSYS [ 535 ] := 'TBDEL '; Named_JSYS [ 535 ] := true;

JSYS [ 536 ] := 'TBADD '; Named_JSYS [ 536 ] := true;

JSYS [ 537 ] := 'TBLUK '; Named_JSYS [ 537 ] := true;

JSYS [ 540 ] := 'STCMP '; Named_JSYS [ 540 ] := true;

JSYS [ 541 ] := 'SETJB '; Named_JSYS [ 541 ] := true;

JSYS [ 542 ] := 'GDVEC '; Named_JSYS [ 542 ] := true;

JSYS [ 543 ] := 'SDVEC '; Named_JSYS [ 543 ] := true;

JSYS [ 544 ] := 'COMND '; Named_JSYS [ 544 ] := true;

JSYS [ 545 ] := 'PRARG '; Named_JSYS [ 545 ] := true;

JSYS [ 546 ] := 'GACCT '; Named_JSYS [ 546 ] := true;

JSYS [ 547 ] := 'LPINI '; Named_JSYS [ 547 ] := true;

JSYS [ 550 ] := 'GFUST '; Named_JSYS [ 550 ] := true;

JSYS [ 551 ] := 'SFUST '; Named_JSYS [ 551 ] := true;

JSYS [ 552 ] := 'ACCES '; Named_JSYS [ 552 ] := true;

JSYS [ 553 ] := 'RCDIR '; Named_JSYS [ 553 ] := true;

JSYS [ 554 ] := 'RCUSR '; Named_JSYS [ 554 ] := true;

JSYS [ 555 ] := 'MSTR '; Named_JSYS [ 555 ] := true;

JSYS [ 556 ] := 'STPPN '; Named_JSYS [ 556 ] := true;

JSYS [ 557 ] := 'PPNST '; Named_JSYS [ 557 ] := true;

JSYS [ 560 ] := 'PMCTL '; Named_JSYS [ 560 ] := true;

JSYS [ 561 ] := 'PLOCK '; Named_JSYS [ 561 ] := true;

JSYS [ 562 ] := 'BOOT '; Named_JSYS [ 562 ] := true;

JSYS [ 563 ] := 'UTEST '; Named_JSYS [ 563 ] := true;

JSYS [ 564 ] := 'USAGE '; Named_JSYS [ 564 ] := true;

JSYS [ 565 ] := 'WILD% '; Named_JSYS [ 565 ] := true;

JSYS [ 566 ] := 'VACCT '; Named_JSYS [ 566 ] := true;

JSYS [ 567 ] := 'NODE '; Named_JSYS [ 567 ] := true;

JSYS [ 570 ] := 'ADBRK '; Named_JSYS [ 570 ] := true;

JSYS [ 571 ] := 'SINM '; Named_JSYS [ 571 ] := true;

JSYS [ 572 ] := 'SOUTM '; Named_JSYS [ 572 ] := true;

JSYS [ 573 ] := 'SWTRP% '; Named_JSYS [ 573 ] := true;

JSYS [ 574 ] := 'GETOK% '; Named_JSYS [ 574 ] := true;

JSYS [ 575 ] := 'RCVOK% '; Named_JSYS [ 575 ] := true;

JSYS [ 576 ] := 'GIVOK% '; Named_JSYS [ 576 ] := true;

JSYS [ 577 ] := 'SKED% '; Named_JSYS [ 577 ] := true;

JSYS [ 600 ] := 'MTU% '; Named_JSYS [ 600 ] := true;

JSYS [ 601 ] := 'XRIR '; Named_JSYS [ 601 ] := true;

JSYS [ 602 ] := 'XSIR '; Named_JSYS [ 602 ] := true;

JSYS [ 603 ] := 'PDVOP '; Named_JSYS [ 603 ] := true;

JSYS [ 604 ] := 'NTMAN '; Named_JSYS [ 604 ] := true;

JSYS [ 605 ] := 'XSFRK '; Named_JSYS [ 605 ] := true;

JSYS [ 606 ] := 'XGVEC '; Named_JSYS [ 606 ] := true;

JSYS [ 607 ] := 'XSVEC '; Named_JSYS [ 607 ] := true;

JSYS [ 610 ] := 'RSMAP '; Named_JSYS [ 610 ] := true;

JSYS [ 611 ] := 'XRMAP '; Named_JSYS [ 611 ] := true;

JSYS [ 612 ] := 'XGTPW '; Named_JSYS [ 612 ] := true;

JSYS [ 613 ] := 'XSSEV '; Named_JSYS [ 613 ] := true;

JSYS [ 614 ] := 'XGSEV '; Named_JSYS [ 614 ] := true;

JSYS [ 615 ] := 'QUEUE '; Named_JSYS [ 615 ] := true;

JSYS [ 616 ] := 'DYNLB '; Named_JSYS [ 616 ] := true;

JSYS [ 617 ] := 'CTSOP '; Named_JSYS [ 617 ] := true;

JSYS [ 620 ] := 'DAP '; Named_JSYS [ 620 ] := true;

JSYS [ 622 ] := 'SCS '; Named_JSYS [ 622 ] := true;

JSYS [ 623 ] := 'WSMGR '; Named_JSYS [ 623 ] := true;

JSYS [ 624 ] := 'LLMOP '; Named_JSYS [ 624 ] := true;

JSYS [ 625 ] := 'APCON '; Named_JSYS [ 625 ] := true;

JSYS [ 626 ] := 'XPEEK '; Named_JSYS [ 626 ] := true;

JSYS [ 627 ] := 'CNFIG '; Named_JSYS [ 627 ] := true;

JSYS [ 630 ] := 'NI '; Named_JSYS [ 630 ] := true;

JSYS [ 631 ] := 'LATOP '; Named_JSYS [ 631 ] := true;

JSYS [ 632 ] := 'NTINF '; Named_JSYS [ 632 ] := true;

JSYS [ 633 ] := 'INFO '; Named_JSYS [ 633 ] := true;

JSYS [ 635 ] := 'DOB '; Named_JSYS [ 635 ] := true;

JSYS [ 700 ] := 'HANDS '; Named_JSYS [ 700 ] := true;

JSYS [ 701 ] := 'IDLE '; Named_JSYS [ 701 ] := true;

JSYS [ 703 ] := 'PKOPR '; Named_JSYS [ 703 ] := true;

JSYS [ 717 ] := 'MONRD '; Named_JSYS [ 717 ] := true;

JSYS [ 720 ] := 'DBGRD '; Named_JSYS [ 720 ] := true;

JSYS [ 740 ] := 'SEND '; Named_JSYS [ 740 ] := true;

JSYS [ 741 ] := 'RECV '; Named_JSYS [ 741 ] := true;

JSYS [ 742 ] := 'OPEN '; Named_JSYS [ 742 ] := true;

JSYS [ 743 ] := 'CLOSE '; Named_JSYS [ 743 ] := true;

JSYS [ 744 ] := 'SCSLV '; Named_JSYS [ 744 ] := true;

JSYS [ 745 ] := 'STAT '; Named_JSYS [ 745 ] := true;

JSYS [ 746 ] := 'CHANL '; Named_JSYS [ 746 ] := true;

JSYS [ 747 ] := 'ABORT '; Named_JSYS [ 747 ] := true;

JSYS [ 750 ] := 'SNDIM '; Named_JSYS [ 750 ] := true;

JSYS [ 751 ] := 'RCVIM '; Named_JSYS [ 751 ] := true;

JSYS [ 752 ] := 'ASNSQ '; Named_JSYS [ 752 ] := true;

JSYS [ 753 ] := 'RELSQ '; Named_JSYS [ 753 ] := true;

JSYS [ 754 ] := 'SNDIN '; Named_JSYS [ 754 ] := true;

JSYS [ 755 ] := 'RCVIN '; Named_JSYS [ 755 ] := true;

JSYS [ 756 ] := 'ASNIQ '; Named_JSYS [ 756 ] := true;

JSYS [ 757 ] := 'RELIQ '; Named_JSYS [ 757 ] := true;

JSYS [ 760 ] := 'IPOPR '; Named_JSYS [ 760 ] := true;

JSYS [ 761 ] := 'TCOPR '; Named_JSYS [ 761 ] := true;

JSYS [ 765 ] := 'GTDOM '; Named_JSYS [ 765 ] := true;

JSYS [ 766 ] := 'METER% '; Named_JSYS [ 766 ] := true;

JSYS [ 767 ] := 'SMAP '; Named_JSYS [ 767 ] := true;

JSYS [ 770 ] := 'THIBR '; Named_JSYS [ 770 ] := true;

JSYS [ 771 ] := 'TWAKE '; Named_JSYS [ 771 ] := true;

JSYS [ 772 ] := 'MRPAC '; Named_JSYS [ 772 ] := true;

JSYS [ 773 ] := 'SETPV '; Named_JSYS [ 773 ] := true;

JSYS [ 774 ] := 'MTALN '; Named_JSYS [ 774 ] := true;

JSYS [ 775 ] := 'TTMSG '; Named_JSYS [ 775 ] := true;

JSYS [ 777 ] := 'MDDT% '; Named_JSYS [ 777 ] := true;

{ Initialize the Tops-10 TTCALL array }

for i := 0 to TopAC do begin;
TTCALL [ i ] := 'TTCALL ';
Named_TTCALL [ i ] := true;
end;

TTCALL [ 00 ] := 'INCHRW ';
TTCALL [ 01 ] := 'OUTCHR ';
TTCALL [ 02 ] := 'INCHRS ';
TTCALL [ 03 ] := 'OUTSTR ';
TTCALL [ 04 ] := 'INCHWL ';
TTCALL [ 05 ] := 'INCHSL ';
TTCALL [ 06 ] := 'GETLCH ';
TTCALL [ 07 ] := 'SETLCH ';
TTCALL [ 10 ] := 'RESCAN ';
TTCALL [ 11 ] := 'CLRBFI ';
TTCALL [ 12 ] := 'CLRBFO ';
TTCALL [ 13 ] := 'SKPINC ';
TTCALL [ 14 ] := 'SKPINL ';
TTCALL [ 15 ] := 'IONEOU ';

Named_TTCALL [ 16 ] := false;
Named_TTCALL [ 17 ] := false;

{ Initialize the Tops-10 CALLI array }

for i := 0 to TopCALLI do begin;
CALLI [ i ] := 'CALLI ';
Named_CALLI [ i ] := false;
end;

CALLI [ 000 ] := 'RESET '; Named_CALLI [ 000 ] := true;

CALLI [ 001 ] := 'DDTIN '; Named_CALLI [ 001 ] := true;

CALLI [ 002 ] := 'SETDDT '; Named_CALLI [ 002 ] := true;

CALLI [ 003 ] := 'DDTOUT '; Named_CALLI [ 003 ] := true;

CALLI [ 004 ] := 'DEVCHR '; Named_CALLI [ 004 ] := true;

CALLI [ 005 ] := 'DDTGT '; Named_CALLI [ 005 ] := true;

CALLI [ 006 ] := 'GETCHR '; Named_CALLI [ 006 ] := true;

CALLI [ 007 ] := 'DDTRL '; Named_CALLI [ 007 ] := true;

CALLI [ 010 ] := 'WAIT '; Named_CALLI [ 010 ] := true;

CALLI [ 011 ] := 'CORE '; Named_CALLI [ 011 ] := true;

CALLI [ 012 ] := 'EXIT '; Named_CALLI [ 012 ] := true;

CALLI [ 013 ] := 'UTPCLR '; Named_CALLI [ 013 ] := true;

CALLI [ 014 ] := 'DATE '; Named_CALLI [ 014 ] := true;

CALLI [ 015 ] := 'LOGIN '; Named_CALLI [ 015 ] := true;

CALLI [ 016 ] := 'APRENB '; Named_CALLI [ 016 ] := true;

CALLI [ 017 ] := 'LOGOUT '; Named_CALLI [ 017 ] := true;

CALLI [ 020 ] := 'SWITCH '; Named_CALLI [ 020 ] := true;

CALLI [ 021 ] := 'REASSIGN '; Named_CALLI [ 021 ] := true;

CALLI [ 022 ] := 'TIMER '; Named_CALLI [ 022 ] := true;

CALLI [ 023 ] := 'MSTIME '; Named_CALLI [ 023 ] := true;

CALLI [ 024 ] := 'GETPPN '; Named_CALLI [ 024 ] := true;

CALLI [ 025 ] := 'TRPSET '; Named_CALLI [ 025 ] := true;

CALLI [ 026 ] := 'TRPJEN '; Named_CALLI [ 026 ] := true;

CALLI [ 027 ] := 'RUNTIM '; Named_CALLI [ 027 ] := true;

CALLI [ 030 ] := 'PJOB '; Named_CALLI [ 030 ] := true;

CALLI [ 031 ] := 'SLEEP '; Named_CALLI [ 031 ] := true;

CALLI [ 032 ] := 'SETPOV '; Named_CALLI [ 032 ] := true;

CALLI [ 033 ] := 'PEEK '; Named_CALLI [ 033 ] := true;

CALLI [ 034 ] := 'GETLIN '; Named_CALLI [ 034 ] := true;

CALLI [ 035 ] := 'RUN '; Named_CALLI [ 035 ] := true;

CALLI [ 036 ] := 'SETUWP '; Named_CALLI [ 036 ] := true;

CALLI [ 037 ] := 'REMAP '; Named_CALLI [ 037 ] := true;

CALLI [ 040 ] := 'GETSEG '; Named_CALLI [ 040 ] := true;

CALLI [ 041 ] := 'GETTAB '; Named_CALLI [ 041 ] := true;

CALLI [ 042 ] := 'SPY '; Named_CALLI [ 042 ] := true;

CALLI [ 043 ] := 'SETNAM '; Named_CALLI [ 043 ] := true;

CALLI [ 044 ] := 'TMPCOR '; Named_CALLI [ 044 ] := true;

CALLI [ 045 ] := 'DSKCHR '; Named_CALLI [ 045 ] := true;

CALLI [ 046 ] := 'SYSSTR '; Named_CALLI [ 046 ] := true;

CALLI [ 047 ] := 'JOBSTR '; Named_CALLI [ 047 ] := true;

CALLI [ 050 ] := 'STRUUO '; Named_CALLI [ 050 ] := true;

CALLI [ 051 ] := 'SYSPHY '; Named_CALLI [ 051 ] := true;

CALLI [ 052 ] := 'FRECHN '; Named_CALLI [ 052 ] := true;

CALLI [ 053 ] := 'DEVTYP '; Named_CALLI [ 053 ] := true;

CALLI [ 054 ] := 'DEVSTS '; Named_CALLI [ 054 ] := true;

CALLI [ 055 ] := 'DEVPPN '; Named_CALLI [ 055 ] := true;

CALLI [ 056 ] := 'SEEK '; Named_CALLI [ 056 ] := true;

CALLI [ 057 ] := 'RTTRP '; Named_CALLI [ 057 ] := true;

CALLI [ 060 ] := 'LOCK '; Named_CALLI [ 060 ] := true;

CALLI [ 061 ] := 'JOBSTS '; Named_CALLI [ 061 ] := true;

CALLI [ 062 ] := 'LOCATE '; Named_CALLI [ 062 ] := true;

CALLI [ 063 ] := 'WHERE '; Named_CALLI [ 063 ] := true;

CALLI [ 064 ] := 'DEVNAM '; Named_CALLI [ 064 ] := true;

CALLI [ 065 ] := 'CTLJOB '; Named_CALLI [ 065 ] := true;

CALLI [ 066 ] := 'GOBSTR '; Named_CALLI [ 066 ] := true;

CALLI [ 071 ] := 'HPQ '; Named_CALLI [ 071 ] := true;

CALLI [ 072 ] := 'HIBER '; Named_CALLI [ 072 ] := true;

CALLI [ 073 ] := 'WAKE '; Named_CALLI [ 073 ] := true;

CALLI [ 074 ] := 'CHGPPN '; Named_CALLI [ 074 ] := true;

CALLI [ 075 ] := 'SETUUO '; Named_CALLI [ 075 ] := true;

CALLI [ 076 ] := 'DEVGEN '; Named_CALLI [ 076 ] := true;

CALLI [ 077 ] := 'OTHUSR '; Named_CALLI [ 077 ] := true;

CALLI [ 100 ] := 'CHKACC '; Named_CALLI [ 100 ] := true;

CALLI [ 101 ] := 'DEVSIZ '; Named_CALLI [ 101 ] := true;

CALLI [ 102 ] := 'DAEMON '; Named_CALLI [ 102 ] := true;

CALLI [ 103 ] := 'JOBPEK '; Named_CALLI [ 103 ] := true;

CALLI [ 104 ] := 'ATTACH '; Named_CALLI [ 104 ] := true;

CALLI [ 105 ] := 'DAEFIN '; Named_CALLI [ 105 ] := true;

CALLI [ 106 ] := 'FRCUUO '; Named_CALLI [ 106 ] := true;

CALLI [ 107 ] := 'DEVLNM '; Named_CALLI [ 107 ] := true;

CALLI [ 110 ] := 'PATH '; Named_CALLI [ 110 ] := true;

CALLI [ 111 ] := 'METER. '; Named_CALLI [ 111 ] := true;

CALLI [ 112 ] := 'MTCHR. '; Named_CALLI [ 112 ] := true;

CALLI [ 113 ] := 'JBSET. '; Named_CALLI [ 113 ] := true;

CALLI [ 114 ] := 'POKE. '; Named_CALLI [ 114 ] := true;

CALLI [ 115 ] := 'TRMNO. '; Named_CALLI [ 115 ] := true;

CALLI [ 116 ] := 'TRMOP. '; Named_CALLI [ 116 ] := true;

CALLI [ 117 ] := 'RESDV. '; Named_CALLI [ 117 ] := true;

CALLI [ 120 ] := 'UNLOK. '; Named_CALLI [ 120 ] := true;

CALLI [ 121 ] := 'DISK. '; Named_CALLI [ 121 ] := true;

CALLI [ 122 ] := 'DVRST. '; Named_CALLI [ 122 ] := true;

CALLI [ 123 ] := 'DVURS. '; Named_CALLI [ 123 ] := true;

CALLI [ 124 ] := 'XTTSK. '; Named_CALLI [ 124 ] := true;

CALLI [ 125 ] := 'CAL11. '; Named_CALLI [ 125 ] := true;

CALLI [ 126 ] := 'MTAID. '; Named_CALLI [ 126 ] := true;

CALLI [ 127 ] := 'IONDX. '; Named_CALLI [ 127 ] := true;

CALLI [ 130 ] := 'CNECT. '; Named_CALLI [ 130 ] := true;

CALLI [ 131 ] := 'MVHDR. '; Named_CALLI [ 131 ] := true;

CALLI [ 132 ] := 'ERLST. '; Named_CALLI [ 132 ] := true;

CALLI [ 133 ] := 'SENSE. '; Named_CALLI [ 133 ] := true;

CALLI [ 134 ] := 'CLRST. '; Named_CALLI [ 134 ] := true;

CALLI [ 135 ] := 'PIINI. '; Named_CALLI [ 135 ] := true;

CALLI [ 136 ] := 'PISYS. '; Named_CALLI [ 136 ] := true;

CALLI [ 137 ] := 'DEBRK. '; Named_CALLI [ 137 ] := true;

CALLI [ 140 ] := 'PISAV. '; Named_CALLI [ 140 ] := true;

CALLI [ 141 ] := 'PIRST. '; Named_CALLI [ 141 ] := true;

CALLI [ 142 ] := 'IPCFR. '; Named_CALLI [ 142 ] := true;

CALLI [ 143 ] := 'IPCFS. '; Named_CALLI [ 143 ] := true;

CALLI [ 144 ] := 'IPCFQ. '; Named_CALLI [ 144 ] := true;

CALLI [ 145 ] := 'PAGE. '; Named_CALLI [ 145 ] := true;

CALLI [ 146 ] := 'SUSET. '; Named_CALLI [ 146 ] := true;

CALLI [ 147 ] := 'COMPT. '; Named_CALLI [ 147 ] := true;

CALLI [ 150 ] := 'SCHED. '; Named_CALLI [ 150 ] := true;

CALLI [ 151 ] := 'ENQ. '; Named_CALLI [ 151 ] := true;

CALLI [ 152 ] := 'DEQ. '; Named_CALLI [ 152 ] := true;

CALLI [ 153 ] := 'ENQC. '; Named_CALLI [ 153 ] := true;

CALLI [ 154 ] := 'TAPOP. '; Named_CALLI [ 154 ] := true;

CALLI [ 155 ] := 'FILOP. '; Named_CALLI [ 155 ] := true;

CALLI [ 156 ] := 'CAL78. '; Named_CALLI [ 156 ] := true;

CALLI [ 157 ] := 'NODE. '; Named_CALLI [ 157 ] := true;

CALLI [ 160 ] := 'ERRPT. '; Named_CALLI [ 160 ] := true;

CALLI [ 161 ] := 'ALLOC. '; Named_CALLI [ 161 ] := true;

CALLI [ 162 ] := 'PERF. '; Named_CALLI [ 162 ] := true;

CALLI [ 163 ] := 'DIAG. '; Named_CALLI [ 163 ] := true;

CALLI [ 164 ] := 'DVPHY. '; Named_CALLI [ 164 ] := true;

CALLI [ 165 ] := 'GTNTN. '; Named_CALLI [ 165 ] := true;

CALLI [ 166 ] := 'GTXTN. '; Named_CALLI [ 166 ] := true;

CALLI [ 167 ] := 'ACCT. '; Named_CALLI [ 167 ] := true;

CALLI [ 170 ] := 'DTE. '; Named_CALLI [ 170 ] := true;

CALLI [ 171 ] := 'DEVOP. '; Named_CALLI [ 171 ] := true;

CALLI [ 172 ] := 'SPPRM. '; Named_CALLI [ 172 ] := true;

CALLI [ 173 ] := 'MERGE. '; Named_CALLI [ 173 ] := true;

CALLI [ 174 ] := 'UTRP. '; Named_CALLI [ 174 ] := true;

CALLI [ 175 ] := 'PIJBI. '; Named_CALLI [ 175 ] := true;

CALLI [ 176 ] := 'SNOOP. '; Named_CALLI [ 176 ] := true;

CALLI [ 177 ] := 'TSK. '; Named_CALLI [ 177 ] := true;

CALLI [ 200 ] := 'KDP. '; Named_CALLI [ 200 ] := true;

CALLI [ 201 ] := 'QUEUE. '; Named_CALLI [ 201 ] := true;

CALLI [ 202 ] := 'RECON. '; Named_CALLI [ 202 ] := true;

CALLI [ 203 ] := 'PITMR. '; Named_CALLI [ 203 ] := true;

CALLI [ 204 ] := 'ACCLG. '; Named_CALLI [ 204 ] := true;

CALLI [ 205 ] := 'NSP. '; Named_CALLI [ 205 ] := true;

CALLI [ 206 ] := 'NTMAN. '; Named_CALLI [ 206 ] := true;

CALLI [ 207 ] := 'DNET. '; Named_CALLI [ 207 ] := true;

CALLI [ 210 ] := 'SAVE. '; Named_CALLI [ 210 ] := true;

CALLI [ 211 ] := 'CMAND. '; Named_CALLI [ 211 ] := true;

CALLI [ 212 ] := 'PIBLK. '; Named_CALLI [ 212 ] := true;

CALLI [ 213 ] := 'SCS. '; Named_CALLI [ 213 ] := true;

CALLI [ 214 ] := 'SEBLK. '; Named_CALLI [ 214 ] := true;

CALLI [ 215 ] := 'CTX. '; Named_CALLI [ 215 ] := true;

CALLI [ 216 ] := 'PIFLG. '; Named_CALLI [ 216 ] := true;

CALLI [ 217 ] := 'IPCFM. '; Named_CALLI [ 217 ] := true;

CALLI [ 220 ] := 'LLMOP. '; Named_CALLI [ 220 ] := true;

CALLI [ 221 ] := 'LATOP. '; Named_CALLI [ 221 ] := true;

CALLI [ 222 ] := 'KNIBT. '; Named_CALLI [ 222 ] := true;

CALLI [ 223 ] := 'CHTRN. '; Named_CALLI [ 223 ] := true;

CALLI [ 224 ] := 'ETHNT. '; Named_CALLI [ 224 ] := true;

CALLI [ 225 ] := 'ENTVC. '; Named_CALLI [ 225 ] := true;

CALLI [ 226 ] := 'NETOP. '; Named_CALLI [ 226 ] := true;

CALLI [ 227 ] := 'DDP. '; Named_CALLI [ 227 ] := true;

CALLI [ 230 ] := 'SEGOP. '; Named_CALLI [ 230 ] := true;

{CALLI [ 777777 = -1 ] := 'LIGHTS ';}
LIGHTSname := 'LIGHTS ';

end {startup} ;

{ Slap an AC name in parens into the output line }

procedure IndexInstruction (theIndex : integer; var theColumn : integer);

var
String : ALFA;
i : integer;

begin;

FindSpace (theColumn);
CharLine [ theColumn ] := '(';

String := ACnames [ Index ];

for i := 1 to AlfaLength do
if String [ i ] <> ' '
then CharLine [ theColumn + i ] := String [ i ];

FindSpace (theColumn);
CharLine [ theColumn ] := ')';

end {IndexInstruction};

{ vanilla halfword printout -- no sign bit manipulation }

procedure ShowHalfwords (Lstring, Rstring : AlfaPtr);

var
String : ALFA;

begin;

String := Lstring^;
unpack (String, CharLine, LeftHWcolumn);

CharLine [ CommaColumn ] := ',';
CharLine [ CommaColumn + 1 ] := ',';

String := Rstring^;
unpack (String, Charline, RightHWcolumn);

end;

{ Manipulate halfword signs for insertion }

procedure doHalfword ( Value, Position : integer);

var
i, j : integer;
Negative : Boolean;
TempString : AlfaPtr;
String : array [ 1..AlfaLength ] of char;

begin;

if Value < 131072
then j := Octal (Value)
else j := Octal (262144 - Value);

TempString := MoveLeft (Remove0s (MakeString (j), Leave1));
unpack (TempString^, String, 1);

if Value < 131072
then for i := 1 to AlfaLength do CharLine [ Position + i - 1 ] := String [ i ]
else begin;
CharLine [ Position ] := '-';
for i := 1 to AlfaLength do CharLine [ Position + i ] := String [ i ];
end;

end {doHalfword} ;

{ Insert halfwords into instruction stream }

procedure PrintHalfwords;
label 1;

var
j : integer;

begin;

j := MnemonicColumn;

if (LeftHalf = 0) and (Operand = 0)
then begin;
CharLine [ j ] := '0';
goto 1;
end;

if (LeftHalf = 777777) and (Operand = 777777)
then begin;
CharLine [ j ] := '-';
CharLine [ j + 1 ] := '1';
goto 1;
end;

if (LeftHalf = 777777) and (Operand > 377777)
then begin;
doHalfword (PreviousHalfWord [ 1 ], j);
goto 1;
end;

if LeftHalf <> 0
then begin;
doHalfword (PreviousHalfWord [ 0 ], j);

FindSpace (j);

CharLine [ j ] := ',';
CharLine [ j + 1 ] := ',';
j := j + 2;
end;

doHalfword (PreviousHalfWord [ 1 ], j);

1: { Structured use of GOTO statements is to be avoided } ;

end {PrintHalfWords};

{ Insert the ASCII interpretation of a word }

procedure PrintASCII;

var
CharArray : array [ 1..5 ] of integer;
i, j : integer;
ValidString : Boolean;

begin;
CharArray [ 1 ] := PreviousHalfWord [ 0 ] div 2048;
CharArray [ 2 ] := (PreviousHalfWord [ 0 ] mod 2048) div 16;
CharArray [ 3 ] := ((PreviousHalfWord [ 0 ] mod 16) * 8)
+ (PreviousHalfWord [ 1 ] div 32768);
CharArray [ 4 ] := (PreviousHalfWord [ 1 ] div 256) mod 128;
CharArray [ 5 ] := (PreviousHalfWord [ 1 ] div 2) mod 128;

{ First, verify that only legitimate chars are in string }

ValidString := CharArray [ 1 ] <> 0;

if ValidString
then for i := 1 to 5 do begin;
ValidString := ValidString and
((CharArray [ i ] = 0) or
(CharArray [ i ] = 7) or
(CharArray [ i ] = 9) or
(CharArray [ i ] = 10) or
(CharArray [ i ] = 12) or
(CharArray [ i ] = 13) or
((CharArray [ i ] > 31) and (CharArray [ i ] < 127)));
end;

{ Next, NUL = chr (0) is only valid at end }

if ValidString
then begin;

ValidString := ValidString and

((CharArray [ 1 ] <> 0) and
(CharArray [ 2 ] <> 0) and
(CharArray [ 3 ] <> 0) and
(CharArray [ 4 ] <> 0) and
(CharArray [ 5 ] <> 0))

or ((CharArray [ 1 ] <> 0) and
(CharArray [ 2 ] <> 0) and
(CharArray [ 3 ] <> 0) and
(CharArray [ 4 ] <> 0) and
(CharArray [ 5 ] = 0))

or ((CharArray [ 1 ] <> 0) and
(CharArray [ 2 ] <> 0) and
(CharArray [ 3 ] <> 0) and
(CharArray [ 4 ] = 0) and
(CharArray [ 5 ] = 0))

or ((CharArray [ 1 ] <> 0) and
(CharArray [ 2 ] <> 0) and
(CharArray [ 3 ] = 0) and
(CharArray [ 4 ] = 0) and
(CharArray [ 5 ] = 0))

or ((CharArray [ 1 ] <> 0) and
(CharArray [ 2 ] = 0) and
(CharArray [ 3 ] = 0) and
(CharArray [ 4 ] = 0) and
(CharArray [ 5 ] = 0));

end {if};

j := ASCIIcolumn;

if ValidString
then for i := 1 to 5 do begin;
if CharArray [ i ] > 31
then begin;
CharLine [ j ] := chr (CharArray [ i ]);
j := j + 1;
end
else begin;
CharLine [ j ] := '^';
CharLine [ j + 1 ] := chr (CharArray [ i ] + 64);
j := j + 2;
end;
end;

end {PrintASCII};

{ Insert the SIXBIT interpretation of a word }

procedure Print6BIT;

var
SixBitArray : array [ 1..6 ] of 0..63;
ValidityArray : array [ 1..6 ] of Boolean;
ValidSixBit, MayBeGood : Boolean;
i, j : integer;

begin;
SixBitArray [ 1 ] := PreviousHalfWord [ 0 ] div 4096;
SixBitArray [ 2 ] := (PreviousHalfWord [ 0 ] mod 4096) div 64;
SixBitArray [ 3 ] := PreviousHalfWord [ 0 ] mod 64;
SixBitArray [ 4 ] := PreviousHalfWord [ 1 ] div 4096;
SixBitArray [ 5 ] := (PreviousHalfWord [ 1 ] mod 4096) div 64;
SixBitArray [ 6 ] := PreviousHalfWord [ 1 ] mod 64;

ValidSixBit := SixBitArray [ 1 ] <> 0;
ValidityArray [ 1 ] := ValidSixBit;

{ If all the tentative SIXBIT characters are not possible RADIX50, forget it }

if ValidSixBit
then begin;
for i := 1 to 6 do begin;

j := 0;
MayBeGood := false;

repeat;
MayBeGood := chr (SixBitArray [ i ] + 32) = Radix50 [ j ];
j := j + 1;
until MayBeGood or (j > 39);

ValidityArray [ i ] := MayBeGood;
end;

for i := 1 to 6 do ValidSixBit := ValidSixBit and ValidityArray [ i ];
end;

{ A NUL = SPACE in SIXBIT is only valid at the end of a string }

{ if ValidSixBit
then begin;
ValidSixBit := ValidSixBit and

((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] <> 0) and
(SixBitArray [ 3 ] <> 0) and
(SixBitArray [ 4 ] <> 0) and
(SixBitArray [ 5 ] <> 0) and
(SixBitArray [ 6 ] <> 0))

or ((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] <> 0) and
(SixBitArray [ 3 ] <> 0) and
(SixBitArray [ 4 ] <> 0) and
(SixBitArray [ 5 ] <> 0) and
(SixBitArray [ 6 ] = 0))

or ((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] <> 0) and
(SixBitArray [ 3 ] <> 0) and
(SixBitArray [ 4 ] <> 0) and
(SixBitArray [ 5 ] = 0) and
(SixBitArray [ 6 ] = 0))

or ((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] <> 0) and
(SixBitArray [ 3 ] <> 0) and
(SixBitArray [ 4 ] = 0) and
(SixBitArray [ 5 ] = 0) and
(SixBitArray [ 6 ] = 0))

or ((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] <> 0) and
(SixBitArray [ 3 ] = 0) and
(SixBitArray [ 4 ] = 0) and
(SixBitArray [ 5 ] = 0) and
(SixBitArray [ 6 ] = 0))

or ((SixBitArray [ 1 ] <> 0) and
(SixBitArray [ 2 ] = 0) and
(SixBitArray [ 3 ] = 0) and
(SixBitArray [ 4 ] = 0) and
(SixBitArray [ 5 ] = 0) and
(SixBitArray [ 6 ] = 0));
end {if};

{ Passed the tests, so print it }

j := SIXBITcolumn;

if ValidSixBit
then for i := 1 to 6 do begin;
CharLine [ j ] := chr (SixBitArray [ i ] + 32);
j := j + 1;
end;

end {Print6BIT};

{ Insert the RADIX50 interpretation of a word }
{ Routine is unused at this time, but kept for future expansion }
{ procedure PrintRADIX50;

var
R50array : array [ 1..6 ] of char;
Code, PackedForm, i, j : integer;

begin;

Code := PreviousHalfWord [ 0 ] div 16384;
PackedForm := (PreviousHalfWord [ 0 ] mod 16384) * 262144 + PreviousHalfWord [ 1 ];

if odd (Code)
then Code := Code * 5 - 1
else Code := Code * 5;

j := R50column;

pointer := MoveLeft (MakeString (code));
unpack (pointer^, CharLine, j);
FindSpace (j);
j := j + 1; COMMENT START insert a space between the code and the item COMMENT END

for i := 6 downto 1 do begin;
R50array [ i ] := Radix50 [ PackedForm mod 40 ];
PackedForm := PackedForm div 40;
end;

for i := 1 to 6 do begin;
CharLine [ j ] := R50array [ i ];
j := j + 1;
end;

end; {radix50}

{ The ugly stuff that Ralph hates }

procedure MachineInstruction;

var
String : ALFA;

begin;

String := OpcodeString^;
unpack (String, CharLine, OpcodeColumn);

if (Opcode = 254)
or (Opcode = 255)
or (Opcode > 677)
then begin;
String := FlagString^;
unpack (String, CharLine, FlagColumn);
end
else begin;
String := ACstring^;
unpack (String, CharLine, ACcolumn);
end;

if IndirectBit
then CharLine [ IndirectColumn ] := '1'
else CharLine [ IndirectColumn ] := '0';

String := IndexString^;
unpack (String, CharLine, IndexColumn);

String := RightString^;
unpack (String, CharLine, OperandColumn);

end {MachineInstruction};

{ Insert plain MACRO-10 instruction mnemonic into line }

procedure PlainInstruction;

var
i, j : integer;
String : ALFA;
TempString : AlfaPtr;
NeedLabel, ItISaJump : Boolean;

begin;

if OpCode = 133 { Special treatment of ADJBP vs. IBP }
then if AC = 0
then unpack (Instruction [ 138 ], CharLine, MnemonicColumn)
else unpack (Instruction [ 133 ], Charline, MnemonicColumn)
else unpack (Instruction [ OpCode ], CharLine, MnemonicColumn);

NeedLabel := IsAJump (OpCode);
ItISaJump := NeedLabel;

j := ArgsColumn;

String := ACnames [ AC ];

if (ItISaJump and (AC <> 0)) or not ItISaJump
then begin;
unpack (String, CharLine, ArgsColumn);
FindSpace (j);
CharLine [ j ] := ',';
j := j + 1;
end;

FindSpace (j);

if IndirectBit
then CharLine [ j ] := '@';

if Operand > TopAC
then i := 0
else i := Operand;

if not NeedLabel
then String := OperandString^
else String := 'NOT.aLabel';

if Operand <= TopAC
then String := ACnames [ i ];

if (Operand > TopAC) and NeedLabel
then begin;
new (TempString);
TempString^ := String;
FindLabel (Operand, TempString);
String := TempString^;
end;

if String = 'NOT.aLabel'
then String := OperandString^;

FindSpace (j);

{ We're tickling a compiler bug here, so just do it ourselves }
{ unpack (String, CharLine, j); }

for i := 1 to AlfaLength do CharLine [ j + i - 1 ] := String [ i ];

if Index > 0
then IndexInstruction (Index, j);

end {PlainInstruction};

{ Insert MACRO-10 extended JRST mnemonic into line }

procedure JRSTinsert;

label 1;

var
i, j : integer;
String : ALFA;
TempString : AlfaPtr;

begin;

if not Named_JRST [ AC ]
then begin;
PlainInstruction;
goto 1;
end
else unpack (JRST [ AC ], CharLine, MnemonicColumn);

j := ArgsColumn;

if IndirectBit
then CharLine [ j ] := '@';

String := 'NOT.aLabel';
new (TempString);
TempString^ := String;

FindLabel (Operand, TempString);

if TempString^ = 'NOT.aLabel'
then String := OperandString^
else String := TempString^;

FindSpace (j);

{ We're tickling a compiler bug here, so just do it ourselves }
{ unpack (String, CharLine, j); }

for i := 1 to AlfaLength do CharLine [ j + i - 1 ] := String [ i ];

if Index > 0
then IndexInstruction (Index, j);

1: { Structured use of GOTOs is tacky but results in cleaner code }

end {JRSTinsert};

{ Insert MACRO-10 extended JFCL mnemonic into line }

procedure JFCLinsert;

label 1;

var
i, j : integer;
String : ALFA;
TempString : AlfaPtr;

begin;

if not Named_JFCL [ AC ]
then begin;
PlainInstruction;
goto 1;
end
else unpack (JFCL [ AC ], CharLine, MnemonicColumn);

j := ArgsColumn;

if IndirectBit
then CharLine [ j ] := '@';

String := 'NOT.aLabel';
new (TempString);
TempString^ := String;

FindLabel (Operand, TempString);

if TempString^ = 'NOT.aLabel'
then String := OperandString^
else String := TempString^;

FindSpace (j);

{ We're tickling a compiler bug here, so just do it ourselves }
{ unpack (String, CharLine, j); }

for i := 1 to AlfaLength do CharLine [ j + i - 1 ] := String [ i ];

if Index > 0
then IndexInstruction (Index, j);

1: { Structured use of GOTOs is tacky but results in cleaner code }

end {JFCLinsert};

{ Insert the appropriate system-call name }

procedure Dec10CALLI (selector : integer);

var DidPlain: Boolean;
j: integer;
String: ALFA;

begin;
DidPlain := false;

if selector = 777777
then if (Index <> 0) or IndirectBit
then begin;
PlainInstruction;
DidPlain := true;
end
else unpack (LIGHTSname, CharLine, MnemonicColumn);

if (selector > TopCALLI) or (Index <> 0) or IndirectBit
then begin;
PlainInstruction;
DidPlain := true;
end
else if Named_CALLI [ selector ]
then unpack (CALLI [ selector ], CharLine, MnemonicColumn)
else begin;
PlainInstruction;
DidPlain := true;
end;

if not DidPlain
then begin;
String := ACnames [ AC ];
j := ArgsColumn;
unpack (String, CharLine, ArgsColumn);
FindSpace (j);
CharLine [ j ] := ',';
end;

end {Dec10CALLI monitor call} ;

procedure Dec10TTCALL;

label 1;

var
i, j : integer;
String : ALFA;
TempString : AlfaPtr;

begin;

if not Named_TTCALL [ AC ]
then begin;
PlainInstruction;
goto 1;
end
else unpack (TTCALL [ AC ], CharLine, MnemonicColumn);

j := ArgsColumn;

if IndirectBit
then CharLine [ j ] := '@';

String := 'NOT.aLabel';
new (TempString);
TempString^ := String;

FindLabel (Operand, TempString);

if TempString^ = 'NOT.aLabel'
then String := OperandString^
else String := TempString^;

FindSpace (j);

{ We're tickling a compiler bug here, so just do it ourselves }
{ unpack (String, CharLine, j); }

for i := 1 to AlfaLength do CharLine [ j + i - 1 ] := String [ i ];

if Index > 0
then IndexInstruction (Index, j);

1: { Structured use of GOTOs is tacky but results in cleaner code }

end {Dec10TTCALL};

procedure DEC20JSYS (selector : integer);

begin;

if (selector > TopJSYS) or (AC <> 0) or (Index <> 0) or IndirectBit
then PlainInstruction
else if Named_JSYS [ selector ]
then unpack (JSYS [ selector ], CharLine, MnemonicColumn)
else PlainInstruction;

end {DEC20JSYS monitor call} ;

{ Insert the appropriate form of an I/O instruction }

procedure IOinstruction;

label 1;

var
Operation, Device, j : integer;
String : ALFA;

begin;

Operation := (PreviousHalfWord [ 0 ] div 32) mod 8;

Device := (PreviousHalfWord [ 0 ] div 256) mod 128;

if not Named_Device [ Device ]
then begin;
doHalfWord (PreviousHalfWord [ 0 ], MnemonicColumn);

j := MnemonicColumn;
FindSpace (j);
CharLine [ j ] := ',';
CharLine [ j + 1 ] := ',';
j := j + 2;

doHalfWord (PreviousHalfWord [ 1 ], j);

goto 1;
end;

unpack (realIO [ Operation ], CharLine, MnemonicColumn);
unpack (DeviceName [ Device ], CharLine, ArgsColumn);

j := ArgsColumn;
FindSpace (j);

if IndirectBit
then CharLine [ j ] := '@';

FindSpace (j);

String := OperandString^;
unpack (String, CharLine, j);

if Index > 0
then IndexInstruction (Index, j);

1: { Structured use of GOTOs is tacky but makes for cleaner code }

end {IOinstruction} ;

{ Make strings representing all the important subparts of the word }

procedure Characterize (TheAddress : integer);

begin;

AddressString := MoveLeft (Remove0s (MakeString (Octal (TheAddress)), Leave6));

Opcode := Octal (PreviousHalfWord [ 0 ] div 512);
OpcodeString := MoveLeft (Remove0s (MakeString (Opcode), Leave3));

AC := Octal ((PreviousHalfWord [ 0 ] div 32) mod 16);
ACstring := MoveLeft (Remove0s (MakeString (AC), Leave2));
FlagString := MoveLeft (Remove0s (Makestring (Fiddle (AC)), Leave2));

IndirectBit := (odd (PreviousHalfWord [ 0 ] div 16));

Index := Octal (PreviousHalfWord [ 0 ] mod 16);
IndexString := MoveLeft (Remove0s (MakeString (Index), Leave2));

Operand := Octal (PreviousHalfWord [ 1 ]);
OperandString := MoveLeft (Remove0s (MakeString (Operand), Leave1));
RightString := MoveLeft (Remove0s (MakeString (Operand), Leave6));

LeftHalf := Octal (PreviousHalfWord [ 0 ]);
LeftString := Moveleft (Remove0s (Makestring (LeftHalf), Leave6));

end {Characterize};

{ If the address has a branch label, put it on the line }

procedure LabelAsNeeded (SomeAddress : integer);

var
j : integer;

begin;

JumpListCurrent := JumpListTop^.NextJTentry;

while JumpListCurrent <> JumpListBottom do begin;

if SomeAddress = JumpListCurrent^.BranchAddress
then begin;
unpack (JumpListCurrent^.JumpLabel, CharLine, LabelColumn);
j := LabelColumn;
FindSpace (j);
CharLine [ j ] := ':';
JumpListCurrent := JumpListBottom;
end;

if SomeAddress < JumpListCurrent^.BranchAddress
then JumpListCurrent := JumpListBottom
else JumpListCurrent := JumpListCurrent^.NextJTentry;

end;

end {LabelAsNeeded};

{ Interpret a word from a save file }

procedure InterpretContents ( Address : integer );

var
i, j : integer;
String : ALFA;

begin;
ClearLine;

LabelAsNeeded (Address);

if (Opcode > 776) or (Opcode = 0)
then PrintHalfwords;

if (Opcode >= 700) and (Opcode < 777)
then IOinstruction;

if (Opcode > 0) and (Opcode < 700)
then case Opcode of

JRSTvalue : JRSTinsert;

JFCLvalue : JFCLinsert;

JSYSvalue : DEC20JSYS (Operand);

CALLIvalue : Dec10CALLI (Operand);

TTCALLvalue : Dec10TTCALL;

others : PlainInstruction;
end;

CharLine [ CommentColumn ] := ';';

String := AddressString^;
unpack (String, CharLine, AddressColumn);

ShowHalfwords (LeftString, RightString);
Print6BIT;
PrintASCII;
MachineInstruction;

end {InterpretContents} ;

{ If not a duplicate of previous word, output previous word and start }
{ saving state again }

procedure OutputInterpretation ( Address : Integer );

begin;

if VeryFirstOutputCall
then begin;
OutputAddress := Address;
PreviousHalfWord [ 0 ] := HalfWord [ 0 ];
PreviousHalfWord [ 1 ] := HalfWord [ 1 ];
NumberOfSavedWords := 1;
VeryFirstOutputCall := false;
end
else begin;
if (HalfWord [ 0 ] = PreviousHalfWord [ 0 ])
and (HalfWord [ 1 ] = PreviousHalfWord [ 1 ])
then NumberOfSavedWords := NumberOfSavedWords + 1
else begin;
Characterize (OutputAddress);
InterpretContents (OutputAddress);
DisplayLine (NumberOfSavedWords);
PreviousHalfWord [ 0 ] := HalfWord [ 0 ];
PreviousHalfWord [ 1 ] := HalfWord [ 1 ];
NumberOfSavedWords := 1;
OutputAddress := Address;
end;
end;

end { OutputInterpretation } ;

{ Loop through the next portion of the save file, }
{ defined as starting address through some number of words }

procedure CoreImageDump ( StartAddress, LastWordToDump : integer);

var
LocalHeap, Address : integer;

begin;

mark (LocalHeap);

for Address := StartAddress to (StartAddress + LastWordtoDump) do begin;
ReadSaveFile;
(* OutputInterpretation (Address); *)

PreviousHalfWord [ 0 ] := HalfWord [ 0 ];
PreviousHalfWord [ 1 ] := HalfWord [ 1 ];

Characterize (Address);
InterpretContents (Address);
DisplayLine (1);

end;

release (LocalHeap);

end {CoreImageDump};

begin; { Main routine }

startup; { Initialize the internal data structures }

mark (HeapTop);

MakeJumpTable;

Sharable := ReadDirArea;

if not Sharable
then MakeNonSharedDir;

{ CDR down the linked list of page entries }

PageListCurrent := PageListTop;

if Sharable
then while (PageListCurrent^.RepeatCount >= 0) do begin;

MakeLOCstmt (PageListCurrent^.ProcessAddress);

CoreImageDump (PageListCurrent^.ProcessAddress,
PageListCurrent^.RepeatCount - 1);

PageListCurrent := PageListCurrent^.NextPTentry;
end
else begin;

StartInput;

while (PageListCurrent^.RepeatCount >= 0) do begin;

MakeLOCstmt (PageListCurrent^.ProcessAddress);

CoreImageDump (PageListCurrent^.ProcessAddress,
PageListCurrent^.RepeatCount - 1);

PageListCurrent := PageListCurrent^.NextPTentry;

ReadSaveFile;
end;

NonShareEVECTOR;
end;

MakeENDstmt;

end {program} .
************************** Code ends ***************************

--
Rich Alderson news@alderson.users.panix.com
Audendum est, et veritas investiganda; quam etiamsi non assequamur,
omnino tamen proprius, quam nunc sumus, ad eam perveniemus.
--Galen

SubjectRepliesAuthor
o Re: DEC didn't understand Timesharing

By: William Gallant on Tue, 19 Jul 2022

7William Gallant
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor