DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦62bfa9bae⟧ TextFile

    Length: 22400 (0x5780)
    Types: TextFile
    Names: »NEWEOSLD.SA«

Derivation

└─⟦909f4eb2b⟧ Bits:30009789/_.ft.Ibm2.50006622.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »NEWEOSLD.SA« 
└─⟦e12db5ad4⟧ Bits:30009789/_.ft.Ibm2.50007357.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »NEWEOSLD.SA« 

TextFile

 
æ*****************************************************************
                        Copyright 1984 by
                        NCR Corporation
                        Dayton, Ohio  U.S.A.
                        All Rights Reserved
******************************************************************
                        EOS Software produced by:
                        NCR Systems Engineering - Copenhagen
                        Copenhagen
                        DENMARK
*****************************************************************å
 
OBJECT PROGRAM EosLoad;
æ$H=0  no heap spaceå
 
CONST
  ProcId = 'EosLoad  vers  3.02  83-12-08 ';
 
æ
 
 
                    E O S - L O A D
 
Changes:
  vers. 3.00  83-11-29, EAR  change from VERSAdos to EOS pascal
  vers. 3.01  83-12-01, EAR  error when option without '-'
  vers. 3.02  83-12-08, EAR  bsMax = dataSize + nullSize
 
 
This EOS program transforms a compiled and linked EOS Pascal program or
EOS C program into a loadable EOS module
 
Program Call:
 
         eosload   Æ-p <programName>Å
                   Æ-c <programName>Å
                   Æ-u <unixUtil fileName>Å
                   Æ-m <moduleName>Å
                    -o <EOS module fileName>
                   Æ-t <extra tempBytes>Å
 
Option Explanation:
 
         -c        specifies the total file name of an input UNIX C program
 
         -p        specifies the total file name of an input Pascal program
 
         one of the options -p or -c must be specified
 
         -u        specifies the total file name of an EOS pascal program
                   defining the EOS environment of a unix C program
                   (default = 'versafs/eos:0..unixutil.lo')
 
         -m        specifies the internal module name to be inserted in
                   the output EOS module
 
         -o        specifies the total file name of the ouotput EOS module;
                   this option cannot be omitted
 
         -t        specifies the number of additional temp bytes to be
                   used by the program (default = 5000)
 
å
 
CONST
  ResultId = 'EOSLOAD: sNo OrgSy Au Ar OrgNo Fa Ma';
  OrgSys   = 7011;
 
æ$Eå
æ$L-å
æ$F=FAMILY.UNIV.IDå
æ$F=FAMILY.KNEL.IDå
æ$F=FAMILY.ALLOC.IDå
æ$F=FAMILY.SCHED.IDå
æ$F=FAMILY.OBJDIR.IDå
æ$F=FAMILY.IOSYS.IDå
æ$F=FAMILY.APPLI.IDå
 
æ$F=PASINCLU.CHKPROCS.SAå
æ$F=PASINCLU.TERMTOOL.SAå
 
æ$L+å
æ*****     Local pointers     *****å
 
TYPE
 
  eolLocals = RECORD
      code     : ^^;
      pobjDir  : ^^ObjDir;
      stdIn    : faoRefType;
      stdOut   : faoRefType;
      stdError : faoRefType;
    END;  æeolLocalså
 
æ$Eå
 
PROGRAM iEosLoad OBJECT Application WITH eolLocals;
 
ENTRY Run  æfileEnnv, jobSys ; progId Æ, options...Åå
  WITH RECORD
         t : ^^;
         pFs  : iosysRefType;
         pFao : faoRefType;
         cFs  : iosysRefType;
         cFao : faoRefType;
         oFs  : iosysRefType;
         oFao : faoRefType;
       END;
 
æ$Eå
 
CONST
  spRel = 0;
  epRel = 8;
  dsRel = 0;
  ssRel = 11;
  nlRel = 13;
  lsRel = 16;
 
  maxNameLength = 50;
  versaPageSize = 256;
 
æprivate error causeså
  privFam = -1;
 
  nameTooLong      = 1;
  missParam        = 2;
  missInProg       = 3;
  missOutProg      = 4;
  optSyntax        = 5;
  optUnknown       = 6;
  nonLoadFormat    = 7;
  illPdAddr        = 8;
  illSegAddr       = 9;
  cTooSmall        = 10;
  pTooSmall        = 11;
 
 
TYPE
 
  longtype = (single, double, four);
  informtype = (pascal, unixC);
 
  longfield = RECORD
      CASE longtype OF
        single : (l : long);
        double : (w : packed array Æ1..2Å of word);
        four   : (b : packed array Æ1..4Å of byte);
    END; ælongfieldå
 
  rectype = (librec, eoshead1, eoshead2, code, unixrec);
 
  sad = RECORD
      rsv, atr : word;
      segname  : packed array Æ1..4Å of char;
      segstart : longfield;
      segsize  : longfield;
    END;
 
  mid = RECORD
      first   : word;
      last    : word;
    END;
 
  progrec = RECORD
      CASE rectype OF
        librec:
          (head1 : packed array Æ1..22Å of byte;
           entpt : longfield;
           head2 : packed array Æ1..22Å of byte;
           sads  : array Æ1..8Å  of sad;
           mids  : array Æ1..20Å of mid);
        eoshead1:
          (headsize : word;
           progsize : long;
           progkind : word;
           progadr  : word;
           objName  : packed array Æ1..16Å of char;
           dummy    : packed array Æ13..127Å of word);
        eoshead2:
          (eos      : packed array Æ0..127Å of word);
        code :
          (data     : packed array Æ0..255Å of byte);
        unixrec:
         (magic     : long ;
          textSz    : long ;
          dataSz    : long ;
          bssSz     : long ;
          symSz     : long ;
          trelSz    : long ;
          drelSz    : long ;
          entptPoint: long ;
          dummy1    : packed array Æ8..63Å of long);
    END; æprogrecå
 
  fName = array Æ1..maxNameLengthÅ of char;
 
VAR
  iName, oName, prName, uName : fName;
  mName : array Æ1..16Å of char;
  line  : array Æ1..90Å of char;
 
  prog, lib, unixHead, nulr : progrec;
 
  loadSize, segSize, noTmpB : longfield;
  inForm                    : informtype;
  terminate, stop           : boolean;
  res                       : resultType;
  option, param             : fullId;
 
  i, j, bytes, count, pdAddr, segAddr, paramNo, recno,
  o, pc, cUsed, oUsed, pUsed                           : integer;
 
  aEntryPoint, aDesSize, aLoadSize, aNoLoads, aNoLocP,
  aNoTmpB1, aNoTmpB2, aNoTmpP, aSegPtr, aSegSize,
  noLoads, noLocP, noOfSegs, noTmpP, segRel            : word;
 
  curPos, pEof,
  extraBss, bssSize, codesize, copySize, dataSize,
  eossize, nullSize, pascalSize, totalsize             : long;
 
 
æ$Eå
 
PROCEDURE putLongHex (line : shortId;
                      lng  : longField;
                      width: integer   );
  VAR
    i, j, pos, val : integer;
 
BEGIN
  pos := getLength (line);
æ*b*  pss ('putLongHex, pos = ', pos);  *e*å
  FOR i := 1 TO width-9 DO
  BEGIN
    pos := pos+1; lineÆposÅ := ' ';
  END;
  pos := pos+1; lineÆposÅ := '$';
  FOR i:= 1 TO 4 DO
  BEGIN
    val := lng.bÆiÅ;
    IF val < 0 THEN val := val + 256;
    pos := pos+2;
    lineÆpos-1Å := hex (val DIV 16);
    lineÆposÅ   := hex (val MOD 16);
  END; æiå
æ*b*  pss ('end putLongHex, last pos = ', pos);  *e*å
  putLength (line, pos);
END; æputLongHexå
 
 
PROCEDURE printLine (line : shortId;
                     txt  : shortId);
BEGIN
  clearText (line);
  putText (line, txt);
  putNl (line);
  xCheck ( termIo (stdOut, WriteSeq, line));
END;  æprintLineå
 
 
 
FUNCTION copyRec : boolean;
BEGIN
æ*b*  ps ('copyRec ');  *e*å
  xCheck ( oFao.WriteSeq ( VAR IN OUT prog ; OUT bytes));
  xCheck ( pFao.ReadSeq  ( VAR IN OUT prog ; OUT bytes));
  IF bytes <> 0 THEN recNo := recNo + 1;
  copyRec := bytes = 0;
æ*b*  pss ('end copyRec, bytes = ', bytes);  *e*å
END;  æcopyrecå
 
 
PROCEDURE insertLong (VAR adr : word;
                          lng : longfield);
BEGIN
æ*b*  printVar ('insertLong: adr = ', adr);  *e*å
 
  IF adr > 127 THEN  æinsert in later sectorå
  ELSE
  IF adr = 127 THEN  æinsert 1st word into this sectorå
    prog.eosÆadrÅ := lng.wÆ1Å
  ELSE
  IF adr >= 0 THEN   æinsert both words into this sectorå
  BEGIN
    prog.eosÆadrÅ   := lng.wÆ1Å;
    prog.eosÆadr+1Å := lng.wÆ2Å;
  END
  ELSE
  IF adr = -1 THEN   æinsert 2nd word into this sectorå
    prog.eosÆ0Å := lng.wÆ2Å;
  æELSE field has been inserted previouslyå
 
  adr := adr - 128;
END;  æinsertLongå
 
 
 
PROCEDURE insertWord (VAR adr   : word;
                          value : word );
BEGIN
æ*b*  printVar ('insertWord: adr = ', adr);
      printVar ('word = ', value);            *e*å
 
  IF adr > 127 THEN    æinsert in later sectorå
  ELSE
  IF adr >= 0 THEN     æinsert in this sectorå
    prog.eosÆadrÅ := value;
  æELSE  word inserted previouslyå
  adr := adr - 128;
END;  æinsertWordå
 
 
 
PROCEDURE getWord (VAR adr   : word;
                   VAR value : word );
BEGIN
  IF adr > 127 THEN    æget from later sectorå
  ELSE
  IF adr >= 0 THEN     æget from this sectorå
    value := prog.eosÆadrÅ;
  æELSE  field got previouslyå
  adr := adr - 128;
END;  ægetWordå
 
 
PROCEDURE takeName (fileName : fullId);
  VAR
    i, j, k : integer;
BEGIN
  IF nextValArg (param) THEN
  BEGIN
    paramNo := paramNo + 1;
    j := elements(param);
    k := elements(fileName);
    IF k < j THEN
      exception (makeRes (nameTooLong, privFam, -paramNo, 0));
    FOR i := 1   TO j DO fileNameÆiÅ := paramÆiÅ;
    FOR i := j+1 TO k DO fileNameÆiÅ := chr(0);
  END
  ELSE
    exception (makeRes (missParam, privFam, -paramNo, 0));
END;  ætakeNameå
 
 
PROCEDURE takeval (val : integer);
  VAR
    p : ^integer;
BEGIN
  IF nextValArg (p) THEN
  BEGIN
    paramNo := paramNo + 1;
    val := p^;
  END
  ELSE
    exception (makeRes (missParam, privFam, -paramNo, 0));
END;  ætakeValå
 
 
 
 
BEGIN
æ*b*   PS ('Start of EOS-LOAD ');   *e*å
 
  IN
    res := OkResult;
    xCheck ( Copy (fileEnv^^Æ1Å, stdIn));
    xCheck ( Copy (fileEnv^^Æ2Å, stdOut));
    xCheck ( Copy (fileEnv^^Æ3Å, stdError));
 
    æ Wellcome message on terminalå
    printLine (line, procId);
 
    æ Init default parameters å
    inform := unixC;
    uName := 'versafs/eos:0..unixutil.lo';
    mName := 'module';
    extraBss := 5000;
    pc := 0;
    o  := 0;
    paramNo := 1;
 
    æ Take program parameters å
    REPEAT
      IF nextValArg (option) THEN stop := elements(option) = 0
                             ELSE stop := true;
      IF not stop THEN
      BEGIN
        paramNo := paramNo + 1;
        IF optionÆ1Å = '-' THEN
        BEGIN
          IF elements(option) <> 2 THEN
            exception ( makeRes (optSyntax, privFam, -paramNo, 0));
          CASE optionÆ2Å OF
            'c': BEGIN
                   æ*b*  PS ('-c option ');  *e*å
                   inform := unixC;
                   pc := pc + 1;
                   takeName (prName);
                 END;
            'p': BEGIN
                   æ*b*  PS ('-p option ');  *e*å
                   inform := pascal;
                   pc := pc + 1;
                   takeName (prName);
                 END;
            'o': BEGIN
                   æ*b*  PS ('-o option ');  *e*å
                   o := o + 1;
                   takeName (oName);
                 END;
            'm': takeName (mName);
            'u': takeName (uName);
            't': takeVal (extraBss);
            OTHERWISE
                 exception (makeRes (optUnknown, privFam, -paramNo, 0));
          END;  æcaseå
        END   æoption = '-'å
        ELSE
          exception (makeRes (optUnknown, privFam, -paramNo, 0));
      END;  ænor stopå
    UNTIL stop;
 
    æ Check parameters å
    IF pc <> 1 THEN exception (makeRes (missInProg, privFam, 0, 0));
    IF o  <> 1 THEN exception (makeRes (missOutProg, privFam, 0, 0));
 
    æ Open input- and output files å
    IF inform = unixC THEN iName := uName
                      ELSE iName := prName;
    æ Open PascalFile / UnixUtil å
    æ*b*  ps ('open pascal file ');
          printVar ('iName = ', iName);   *e*å
    xCheck ( pObjDir.GetRef (OUT pFs ; IN iName, OUT pUsed, OUT i));
    xCheck ( pFs.Assign (OUT pFao ;
                         IN iNameÆpUsed+1..maxNameLengthÅ,
                         IN ReadRight, IN OldFile ));
 
    æ Open output EOS Object File å
    æ*b*  ps ('open EOS object file ');
          printVar ('oName = ', oName);  *e*å
    xCheck ( pObjDir.GetRef (OUT oFs ; IN oName, OUT oUsed, OUT i));
    xCheck ( oFs.Assign (OUT oFao ;
                         IN oNameÆoUsed+1..maxNameLengthÅ,
                         IN WriteRight, IN NewOrOld));
    xCheck ( oFao.DataSize ( ; 0));
 
    æ Open UNIX C file å
    IF inform = unixC THEN
    BEGIN
      æ*b*  ps ('open UNIX C file ');
            printVar ('uName = ', uName);   *e*å
      xCheck ( pObjDir.GetRef (OUT cFs ; IN prName, OUT cUsed, OUT i));
      xCheck ( cFs.Assign (OUT cFao ;
                           IN prNameÆcUsed+1..maxNameLengthÅ,
                           IN ReadRight, IN OldFile ));
    END; æunixCå
 
    æ Read PascalFile / UnixUtil å
    xCheck ( pFao.ReadRandom (VAR IN OUT lib ;
                              OUT bytes, IN 0, OUT i));
    xCheck ( pFao.Seek ( ; IN FromEnd, IN 0, OUT pEof));
    pascalSize := lib.sadsÆ1Å.segSize.l;
    eosSize    := lib.sadsÆ2Å.segSize.l;
    æ*b*  pss ('pascalSize = ', pascalSize);
          pss ('eosSize = ', eosSize);        *e*å
 
    IF inform = pascal THEN
    BEGIN
      codeSize  := pascalSize;
      totalSize := codeSize + eosSize;
      bssSize   := 0;
      dataSize  := 0;
      nullSize  := 0;
      noOfSegs  := 1;
 
      IF (totalSize > pEof)                   OR
         (lib.sadsÆ1Å.segName <> 'SEG1')      OR
         (lib.sadsÆ2Å.segName <> 'SEG2')      OR
         (lib.sadsÆ2Å.segStart.l <> codeSize) OR
         (lib.sadsÆ3Å.segSize.l > 0 )
      THEN
        exception (makeRes (nonLoadFormat, privFam, 0, 0));
    END  æpascalå
    ELSE
    BEGIN  æunixCå
      xCheck ( cFao.ReadRandom (VAR IN OUT unixHead ;
                                OUT bytes, IN 0, OUT i));
      codeSize := 32 + unixHead.textSz;
      dataSize  := unixHead.dataSz;
      bssSize   := unixHead.bssSz;
      nullSize  := bssSize + extraBss;
      totalSize := (eosSize + codeSize + dataSize + nullSize
                      + 255) DIV 256 * 256;
      noOfSegs  := 2;
      lib.entpt.l:= 32; æ unix header is present in run time text å
 
      printLine (line,
          'UnixHeader: magic  textSize  dataSize   bssSize');
      clearText (line);
      putInt (line, unixHead.magic, 16);
      putInt (line, unixHead.textSz, 10);
      putInt (line, unixHead.dataSz, 10);
      putInt (line, unixHead.bssSz, 10);
      putNl  (line);
      xCheck ( termIo (stdOut, WriteSeq, line));
    END;
æ*b*  pss ('codeSize = ', codeSize);
      pss ('dataSize = ', dataSize);
      pss ('bss Size = ', bssSize);
      pss ('nullSize = ', nullSize);
      pss ('totalSize = ', totalSize);
      pss ('entryPoint = ', lib.entpt.l);   *e*å
 
    æ Copy EOS head to output file:
        insert headSize,totalSize, and moduleName
        find addr of ProgDescrAdd                    å
    xCheck ( pFao.ReadRandom (VAR IN OUT prog ;
                  OUT bytes, IN pascalSize + versaPageSize, OUT i));
æ*b*  printVar ('eosHead = ', prog);  *e*å
    recno := 1;
    prog.headSize := eosSize;
    prog.progSize := totalSize;
    IF inform = unixC THEN prog.objName := mName;
 
    æfind addr of prog-descrå
    pdAddr := prog.progAdr;
    IF (pdAddr < 0) OR (ODD (pdAddr)) THEN
      exception (makeRes (illPdAddr, privFam, 0, 0));
    pdAddr := pdAddr DIV 2;
                æfrom now all addresses in eosHead are word addresseså
 
    æ Copy ProgDescription:
        insert entptPoint
        find addrFirstSegDescr, noSegDescr, and no.of pointers/bytes å
    aSegPtr     := pdAddr + spRel;
    aNoLocP     := aSegPtr + 1;
    aNoTmpP     := aNoLocP + 1;
    aNoTmpB1    := aNoTmpP + 1;
    aNoTmpB2    := aNoTmpB1 + 1;
    aEntryPoint := pdAddr + epRel;
    terminate   := false;
 
    REPEAT
      insertLong (aEntryPoint, lib.entpt);
      getWord    (aSegPtr, segRel);
      getWord    (aNoLocP, noLocP);
      getWord    (aNoTmpP, noTmpP);
      getWord    (aNoTmpB1, noTmpB.wÆ1Å);
      getWord    (aNoTmpB2, noTmpB.wÆ2Å);
      IF aEntryPoint >= 0 THEN terminate := copyRec;
    UNTIL  (aEntryPoint < 0) OR terminate;
    IF terminate THEN
      exception (makeRes (pTooSmall, privFam, 0, 1));
 
    æ Print Pointer Values å
    printLine (line,
      'No. of LocalPointers  TempPointers  TempBytes   EntryPoint');
    clearText (line);
    putInt (line, noLocP, 16);
    putInt (line, noTmpP, 13);
    putInt (line, noTmpB.l, 13);
    putLongHex (line, lib.entpt, 16);
    putNl (line);
    xCheck ( termIo (stdOut, WriteSeq, line));
 
    æ Copy SegmentDescription:
        insert segmentSize,loadSize
        find addr of next SegDescr å
    printLine (line, '');
    printLine (line,
       'EOS segno      Segment size  Pages          Load Size  Pages');
    segAddr := pdAddr;
    FOR i := 1 TO noOfSegs DO
    BEGIN
      IF odd (segRel) THEN
        exception (makeRes (illSegAddr, privFam, 0, 2));
 
      segAddr   := segAddr + (segRel DIV 2);
      aDesSize  := segAddr + dsRel;
      aSegSize  := segAddr + ssRel;
      aNoLoads  := segAddr + nlRel;
      aLoadSize := segAddr + lsRel;
 
      IF i = 1 THEN
      BEGIN
        segSize.l  := codeSize;
        loadSize.l := codeSize;
      END
      ELSE
      IF i = 2 THEN  æonly inform UNIX.  OBS! Modif.Descr. is destroyedå
      BEGIN
        segSize.l  := dataSize + nullSize;
        loadSize.l := segSize.l - extraBss;
        noLoads    := 1;
      END;
 
      REPEAT
        insertLong (aSegSize, segSize);
        IF i = 2 THEN  insertWord (aNoLoads, noLoads);
        insertLong (aLoadSize, loadSize);
        getWord (aDesSize, segRel);
        IF aLoadSize >= 0 THEN  terminate := copyRec;
      UNTIL  (aMoadSize < 0) OR terminate;
 
      clearText  (line);
      putInt     (line, i, 8);
      putLongHex (line, segSize, 13);
      putInt     (line, segSize.l, 8);
      putInt     (line, (segSize.l+versaPageSize-1)DIV 256, 5);
      putLongHex (line, loadSize, 13);
      putInt     (line, loadSize.l, 8);
      putInt     (line, (loadSize.l+versaPageSize-1)DIV 256, 5);
      putNl (line);
      xCheck (termIo (stdOut, WriteSeq, line));
 
      IF (terminate AND (i < noOfSegs)) OR (aLoadSize >= 0) THEN
        exception (makeRes (pTooSmall, privFam, 0, 3));
    END;  æfor iå
 
    æ Copy last sectors if anyå
    WHILE not terminate DO  terminate := copyRec;
 
 
 
    æ Copy Pascal code Segment or Unix C program to output file å
    IF inform = unixC THEN
    BEGIN
      FOR i:= 0 TO 255 DO nulr.dataÆiÅ:= 0;
 
      xCheck ( cFao.ReadRandom (VAR IN OUT prog ;
                                OUT bytes, IN 0, OUT i));
      prog.symSz:= dataSize + nullSize; æcommunicate bsmax to runtime systemå
      xCheck ( oFao.WriteSeq (VAR IN OUT prog ; OUT j));
      count := bytes;
      copySize := codeSize + dataSize;
      WHILE count < copySize DO
      BEGIN
        xCheck ( cFao.ReadRandom (VAR IN OUT prog ;
                                  OUT bytes, IN 0, OUT i));
        IF bytes = 0 THEN
          exception (makeRes (cTooSmall, privFam, 0, 4));
        xCheck ( oFao.WriteSeq (VAR IN OUT prog ; OUT j));
        count := count + bytes;
      END;
 
      copySize := copySize + bssSize;
      WHILE count < copySize DO
      BEGIN
        xCheck ( oFao.WriteSeq (VAR IN OUT nulR ; OUT bytes));
        count := count + bytes;
      END;
    END  æunixCå
    ELSE
    BEGIN  æ copy Pascal code segment å
      count := 0;
      xCheck ( pFao.Seek ( ; FromStart, 256, OUT curPos ));
      WHILE count < codeSize DO
      BEGIN
        xCheck ( pFao.ReadSeq (VAR IN OUT prog ; OUT bytes));
        IF bytes = 0 THEN
          exception (makeRes (pTooSmall, privFam, 0, 5));
        xCheck ( oFao.WriteSeq (VAR IN OUT prog ; OUT j));
        count := count + bytes;
      END;
    END;  æpascalå
  DO
    BEGIN
      res := GetException;
æ*b*   ps ('eosload error '); pr (res);   *e*å
      IF res.family = privFam THEN
      BEGIN
        clearText (line);
        putText (line, '*** ');
        CASE res.main OF
          1: BEGIN
               putText (line, param);
               putText (line, ': file name too long');
               putInt  (line, paramNo, 4);
             END;
          2: BEGIN
               putText (line, 'missing parameter');
               putInt  (line, paramNo, 4);
             END;
          3: putText (line, 'no input program name specified (-p/-c)');
          4: putText (line, 'no output program name specified (-o)');
          5: BEGIN
               putText (line, 'syntax error in option list');
               putInt  (line, paramNo, 4);
             END;
          6: BEGIN
               putText (line, 'unknown option');
               putInt  (line, paramNo, 4);
             END;
          7: BEGIN
               putText (line, iName);
               putText (line, ' not correct load format');
             END;
          8: BEGIN
               putText (line, iName);
               putText (line, ' illegal pd-addr');
               putInt  (line, pdAddr, 4);
             END;
          9: BEGIN
               putText (line, iName);
               putText (line, ' illegal seg-addr');
               putInt  (line, segRel, 4);
             END;
         10: BEGIN
               putText (line, prName);    æC programå
               putText (line, ' file too small');
             END;
         11: BEGIN
               putText (line, iName);    æPascal programå
               putText (line, ' file too small');
             END;
         otherwise
             BEGIN
               putText (line, 'unknown error');
               putInt  (line, res.main, 4);
             END;
        END;  æcaseå
        putNl (line);
        res.main := ok;
      END  æfamily = privFam, own error codeså
      ELSE
        putError (line, res, '', 0);
 
      res := call( termIo (stdError, writeSeq, line));
æ*b*   printVar ('error msg line = ', line);   *e*å
      ObjReturn (res);
    END;
END;  æentry Runå
 
OTHERWISE  unknown
  with record t : ^^; end;
BEGIN
  exception (makeRes (-EntryIllegal, Universal, 0, 0));
END;
 
END;  æprogram eosloadå
 
INITIALIZE
  iEosLoad 'eosload' :
  pObjDir  'objdir'
 
END.  æ eosLoad å
 
«eof»