DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

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

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦6a5466dde⟧ TextFile

    Length: 28416 (0x6f00)
    Types: TextFile
    Names: »tsystest    «

Derivation

└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
    └─⟦f546e193b⟧ 
        └─⟦this⟧ »tsystest    « 

TextFile

clear user osystest
osystest = set 400 disc1
scope user osystest

lsystest = set 300 disc1

o lsystest
head iso
( osystest=algol list.on blocks.yes connect.no ix.no ,
  , spill.yes ,
  , survey.yes details.8.8 ,
  , xref.yes ,
  list.on copy.tsystest1 , datatestprocedurer
  list.on copy.tsystest2 , randomprocedurer
  list.on copy.tsystest3 , checkprocedurer part 1
  list.on copy.tsystest4 , checkprocedurer part 2
  list.on copy.tsystest5 , måleprocedurer part 1
  list.on copy.tsystest6 , måleprocedurer part 2
  list.on copy.tsystest7 , måleprocedurer part 3
  list.on

  if ok.yes
  if warning.yes
  ( o c
    message kikset
    visfejl lsystest
    finis
  )
  o c
  message ok
  scope user osystest

  end
)
begin
  procedure help;
  begin
    writeint (out, <:
      jsc d. 1/6-1989
      program: osystest v.:>, <<d.d>, rel, vers, 1, <:
      formål:  test af cpu mv.'s ydeevne til sammenligningsformål

      kald:     (ud = ) osystest                ,
                        (antal.<antal>)         ,
                        (bloklgd.<bloklgd>)     ,
                        (cpu.<cpuer>)           ,
                        (check.<janej>          ,
                        (disk.<disk>(.<disk>))  ,
                        (kl.<ja/nej>)           ,
                        (lock.<ja/nej>)         ,
                        (pause.<ja/nej>)        ,
                        (record.<ja/nej>)       ,
                        (segm.<segm>)           ,
                        (shares.<shares>)       ,
                        (stop.<antal>)          ,
                        (tid(.<min>).<sek>)     ,
                        (trap.<ja/nej>)         ,
                                                ,
                        (test.alle)             ,
                        (test.cpu)              ,
                        (test.disk)             ,
                        (test.ioc)              ,
                                                ,
                        (mål.alle)              ,
                        (mål.bench)             ,
                        (mål.cat)               ,
                        (mål.cpu)               ,
                        (mål.disk)              ,
                        (mål(.1)(.2)(.3)....)

      antal    ::= angiver antal gennemløb for hver måling,
                   ved disk angives antal filegennemløb
                   default er benyttelse af tid

      bloklgd  ::= antal segmenter pr io
                   default er 1, 32, 46

      check    ::= check alle data for disk/tape-io
                   hvis nej checkes 1/32'del
                   default er check.nej

      cpu      ::= angiver antal ønskede cpu'er der skal benyttes
                   default er 1 for mål og ellers alle

      disk     ::= disk benyttet for diskacces og katalogoprettelser
                   evt. kan endnu en disk angives,
                   denne vil blive benyttet som tildisk ved kopiering
                   default er uspecificeret

      kl       ::= udskriv klokkeslet hver gang klokken aflæses
                   default er kl.nej

      lock     ::= lock af programmet
                   default er lock.nej

      pause    ::= pause meddelelse til operativsystemet ved fejl
                   default er pause.nej
      
      record   ::= optag resultater til test

      segm     ::= antal segmenter afsat i filen
                   default antal segmenter til rådighed på disken

      shares   ::= antal shares benyttet ved diskacces
                   default er 1, 2

      stop     ::= stop den enkelte test ved observeret anta fejl
                   default er 10 fejl

      tid      ::= antal minutter.sekunder eller sekunder estimeret
                   forbrugt pr test på en rc8000 med cpu 823/824 samt fpu
                   default er tid.0.30

      trap     ::= fortsæt efter programfejl
                   default er trap.ja

      test:        de under mål med "*" markerede numre kan benyttes
                   til test

      test:
      -cpu     ::= udførelse af alle cpu og mem tests
      -bench   ::= udførelse af diverse benchmarks
      -disk    ::= udførelse af alle diskkrævende test
      -tape    ::= udførelse af tapetest
      -ioc     ::= udførelse af test om ioc rammer lagret
      -alle    ::= udførelse af alle test på nær tape

      mål:
      -cpu     ::= udførelse af alle cpu og mem målinger     (0..29)
      -bench   ::= udførelse af diverse benchmarks           (30..39)
      -cat     ::= udførelse af katalogbaserede målinger     (40..49)
      -disk    ::= udførelse af alle diskkrævende målinger   (50..59)
      -alle    ::= udførelse af alle test                    (0..99)

      mål.1    ::= måling af for løkke
                   der udføres for i := 1 step 1 until xx do ;

      mål.2    ::= måling af repeat
                   der udføres repeat i := i + 1 until xx;

      mål.3    ::= måling af while
                   der udføres while i < xx do i := i + 1;


*     mål.11   ::= måling af integer regning
                   der udføres plus, minus, gange, division og exponentation

*     mål.12   ::= måling af long regning
                   der udføres plus, minus, gange, division og exponentation

*     mål.13   ::= måling af real regning
                   der udføres plus, minus, gange, division og exponentation

*     mål.14   ::= måling af exponentation
                   der måles på integer, long og real


*     mål.21   ::= måling af move core vha. tofrom
                   der udføres tofrom på antal * 1k bytes

      mål.22   ::= måling af move core vha. system-5
                   der udføres system-5 på antal * 1k byte

      mål.23   ::= måling af systime-1
                   gentagne systime-1 (get-system-time)


*     mål.31   ::= sieve-benchmark v.1.0 (Byte june 1988)
                   udregning af primtal,
                   brug af: arrayindexing, sammenligning og simpel regning

*     mål.32   ::= quick-sort-benchmark (Byte june 1988)
                   kraftig brug af: rekursive procedurekald
                   brug af: arrayindexing, sammenligning og simpel regning

*     mål.33   ::= shell-sort-benchmark (Byte june 1988)
                   kraftig brug af: loop
                   brug af: arrayindexing, sammenligning og simpel regning

*     mål.34   ::= heap-sort-benchmark (Byte june 1988)
                   kraftig brug af: kald af underprocedure
                   brug af: arrayindexing, sammenligning og simpel regning

*     mål.35   ::= matrix-benchmark (Byte june 1988)
                   matrixadition, multiplikation og transportation
                   brug af: indexing og integer regning

*     mål.36   ::= matrix-benchmark med flydende tal
                   matrixadition, multiplikation og transportation
                   brug af: indexing og real regning


      mål.41   ::= måling af katalogoprettelse/sletning
                   gentagne monitor-40, 50 og 48 (create, permanent, clear)

      mål.42   ::= måling af katalogændring mht. size
                   gentagne monitor-44 (changeentry), ændret size

      mål.43   ::= måling af katalogændring mht. tail (6)
                   gentagne monitor-44 (changeentry), ændret shortclock


*     mål.51   ::= måling af disk-write seq.
                   sekventiel skrivning af givent antal filer

      mål.52   ::= måling af disk-read seq
                   sekventiel læsning af givent antal filer

      mål.53   ::= måling af disk-write random
                   random skrivning af givent antal filer

      mål.54   ::= måling af disk-read random
                   random læsning af givent antal filer

      mål.55   ::= måling af disk-read/rewrite random
                   random læsning og genskrivning af givent antal filer

*     mål.56   ::= måling af disk-write inderst/yderst stepvis mod hinanden
                   skrivning af et givent antal filer
                   skrivningen foregår blok for blok samtidig fra hver sin
                   ende af filen, fx i 8 blokke lang fil skrives blokkene
                   0, 7, 1, 6, 2, 5, 3, 4, 4, 3, 5, 2, 6, 1, 7, 0, 0, 7, 1...

      mål.57   ::= måling af disk-read inderst/yderst stepvis mod hinanden
                   skrivning af et givent antal filer
                   skrivningen foregår blok for blok samtidig fra hver sin
                   ende af filen, fx i 8 blokke lang fil skrives blokkene
                   0, 7, 1, 6, 2, 5, 3, 4, 4, 3, 5, 2, 6, 1, 7, 0, 0, 7, 1...

      mål.58   ::= måling af disk-read/write inderst/yderst stepvis
                   mod hinanden
                   skrivning af et givent antal filer
                   skrivningen foregår blok for blok samtidig fra hver sin
                   ende af filen, fx i 8 blokke lang fil skrives blokkene
                   0, 7, 1, 6, 2, 5, 3, 4, 4, 3, 5, 2, 6, 1, 7, 0, 0, 7, 1...

*     mål.59   ::= måling af disk-kopiering
                   samtidig udførelse af læse og skrive-operation på hver
                   sin fil af givent antal filer


*     mål.61   ::= test af tape
                   sekventiel skrivning af givent antal segmenter
                   krydslæsning til kontrol


*     test.71  ::= test af ioc
                   disk skrivning og læsning fra varierende adresser i lagret
                   test om lagret mappes korrekt


      generelt:    maximal tilladt afvigelse for reals er 1/20000000000
                   af den forventede værdi:>, "nl", 1)
  end procedure help;

  <*
     målinger:
       der måles på lidt af hvert, det er overordentlig svært at
       sammenligne rc8000/rc9000 med de maskiner der skrives om
       i de kulørte blade, derfor er der opstillet en række belastninger
       af cpu, mem og disk.

     check:
       aftestningen foretages henholdsvis ved at sammenligne resultater
       fra udførte beregninger med resultater fra samme beregninger
       udført på en referancemaskine, desuden udskrives kendte bitmønstre
       i memory, der derefter manipuleres og slutelig skal ende med
       det forventede.
       diskene testes ved at udskrive kendte bitmønstre sekventielt samt
       på kryds, derefter aflæses mønstrene og det forventede skulle
       gerne stå der. Til slut kopieres imellem samtlige diske, multibufret
       og i et coroutine system, således at data har en chance for at
       snuble over sig selv. Resultatfilerne checklæses sekvientielt.

  *>

  integer rel, monrel, antcpu, shares, buflgd, maxsegm, testno, målno, mtno,
  stop, antbs, antdiske, res, ownadr, maxno, algvers, algrel, algsubrel, rand,
  fp, i, j, k, i1, i2, i3, i4, i5, c;
  boolean vers, online, corelock, datawrite, datatest, datacheck,
  fejlet, kl, test, trapstop, pause, b, b1, b2;
  long sek, nr, antal, l, l1, l2, l3, l4, l5;
  long begin_tid, end_tid, tid, loop_tid, test_tid;
  real r, r1, r2, r3, r4, r5;
  integer array ia, ia1 (1 : 20);
  long array disc1, disc2, la, la1 (1 : 2);
  integer array field iaf, iaf0, iaf2;
  long array field laf, laf0, laf2;
  zone zhelp (1, 1, xstderror);

  procedure fejl (txt, tal);
  value tal;
  string txt;
  integer tal;
  begin
    fejlet := true;
    errorbits := 1 shift 0 + 1 shift 1;

    writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1, txt, "sp", 1);
    if tal <> - 1 then write (out, <<d>, tal, "sp", 1);
    if online then setposition (out, 0, 0);
  end procedure fejl;

  procedure wr_test (txt, tal);
  value tal;
  string txt;
  integer tal;
  begin
    writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1, txt, "sp", 1);
    if tal <> - 1 then write (out, <<d>, tal, "sp", 1);
    if online then setposition (out, 0, 0);
  end procedure wr_test;

  procedure skriv_tid (enhed, antal);
  value antal;
  string enhed;
  long antal;
  begin
    integer pos;

    if tid < 1 0000 and antal < 100 000
    then write (out, "nl", 1, <:*** måling udført over for kort tid:>);

    pos := writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
      <<d>, antal, "sp", 1, enhed, <: på :>, <<d.dddd>, tid, <: sek,:>) - 1;
    pos := pos + writeint (out, "sp", 10 - pos mod 10,
      <<d>, antal * 10000 // tid, "sp", 1, enhed, <: pr sek,:>);
    if tid // antal < 10
    then pos := pos + writeint (out, "sp", 10 - pos mod 10,
      <<d.ddd d>, tid * 1000 // antal, <: ms pr :>, enhed)
    else pos := pos + writeint (out, "sp", 10 - pos mod 10,
      <<d.ddd>, tid * 100 // antal, <: ms pr :>, enhed);

    if online then setposition (out, 0, 0);
  end procedure skriv_tid;

  procedure makename (no, name, extension);
  integer no, extension;
  long array name;
  begin
    <* lav navnet "wrksysxxxy"
       hvor xxx er no
       og y er tegnet angivet som extension
    *>
    name (1) := long <:wrksy:> add 's';
    name (2) := long <::>
    + extend (no // 100 mod 10 + '0') shift 40
    + extend (no // 10 mod 10 + '0') shift 32
    + extend (no // 1 mod 10 + '0') shift 24
    + extension shift 16;

    if no > maxno then maxno := no;
  end procedure makename;

  long procedure systemtid (ref, reel);
  value ref;
  long ref, reel;
  begin
    <* returnerer cputiden forbrugt i 0,1 ms
       reel returnerer den reelle tid i 0,1 ms siden ref
    *>

    long array la, la1 (1 : 1);

    repeat
      system (5, 108, la); <* get clockcell *>
      system (5, 108, la1); <* get clockcell *>
    until la (1) = la1 (1); <* så ikke under opdatering *>

    reel := la (1) - ref;
    systemtid := la (1);

    if kl then write (out, "nl", 1, <<dddddddd dddd>,
      <:kl.:>, la (1) shift 12 shift (- 12),
      <:, ref.:>, ref shift 12 shift (- 12),
      <:, reel.:>, (la (1) - ref) shift 12 shift (- 12));
  end procedure systemtid;
\f


  algol copy.1; <* div datatest *>
\f


  algol copy.2; <* div random *>
\f


  algol copy.3; <* div checkprocedurer part 1 *>
\f


  algol copy.4; <* div checkprocedurer part 2 *>
\f


  algol copy.5; <* div måleprocedurer part 1 *>
\f


  algol copy.6; <* div måleprocedurer part 2 *>
\f


  algol copy.7; <* div måleprocedurer part 3 *>
\f


  <* body *>

  rel := 1 0; <* release * 10 *>
  vers := "B"; <* små bogstaver for testversioner, store for rettelser *>

  system (13, algvers, ia);
  algrel := ia (1) shift (- 12);
  algsubrel := ia (1) extract 12;

  fejlet := false;

  iaf := iaf0 := laf := laf0 := 0;
  iaf2 := laf2 := 2;

  ownadr := system (6, i, la); <* get own adr *>

  system (5, 64, ia); <* get monitor version *>
  monrel := ia (1); <* rel < 12 + vers *>

  system (5, 92, ia); <* get ant bs-devices *>
  antbs := (ia (3) - ia (1)) // 2; <* drums and discs *>

  antdiske := 0;
  for i := 0 step 1 until antbs - 1 do
  if xclaimproc (0, i, la, 0, 0, 0) and la (1) <> long <::>
  then antdiske := antdiske + 1; <* tæl faktiske diske *>


  fp := if xconnectout then 2 else 1;
  getzone6 (out, ia);
  online := ia (1) <> 4;

  if system (4, fp, la) = 0 then
  begin <* help og så slut *>
    help;
    goto uden_param; <* slut *>
  end;

  xhost (la);
  write (out, "nl", 1, "-", 75, "nl", 1,
    <:Systemtest v.:>, <<d.d>, rel / 10, vers, 1,
    if rc8000 then <: Rc8000 :> else <: Rc9000 :>, la,
    <: d.:>, <<dddddd.dddd>, systime (5, 0, r) + r / 1 00 00 00,
    <: monitor :>, <<d>, monrel shift (- 12), ".", 1, monrel extract 12);
  if online then setposition (out, 0, 0);

  <* default *>
  antcpu := 0; <* 0 = uændret, - 1 = 1 v mål ellers alle *> <* dont touch *>
  sek := 30;
  antal := - 1;
  maxsegm := - 1;
  shares := - 1;
  buflgd := - 1;
  stop := 10;
  disc1 (1) := disc2 (1) := long <::>;
  disc1 (2) := disc2 (2) := long <::>;
  test := datawrite := datatest := false;
  datacheck := false;
  corelock := false;
  trapstop := false;
  pause := false;
  kl := false;

  initrandom (<:systestrand:>);
  mt_no := 0;
  maxno := 0;

  if corelock then lock (0, progsize - 1);

  for res := system (4, fp, la) while res <> 0 do
  begin
    if trapstop then trap (0) else trap (trap_næste_1);

    la (1) := la (1) shift (- 32) shift 32; <* kun test på 2 tegn *>

    if res extract 12 < 10
    then fejl (<:Parameterfejl, param nr.:>, fp)
    else
    if la (1) = long <:an:> then
    begin <* antal.<tal> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        antal := la (1);
        fp := fp + 1;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end antal
    else
    if la (1) = long <:bl:>
    or la (1) = long <:bu:> then
    begin <* bloklgd.<segm> eller buflgd.<segm> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        buflgd := la (1);
        fp := fp + 1;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end bloklgd
    else
    if la (1) = long <:ch:> then
    begin <* check.<ja/nej> *>
      if system (4, fp + 1, la) <> 8 shift 12 + 10
      then la (1) := long <:ja:> <* ingen <ja/nej> opfattes som ja *>
      else fp := fp + 1; <* ja/nej angivet *>

      if la (1) = long <:ja:> or la (1) = long <:yes:>
      then datacheck := true
      else
      if la (1) = long <:nej:> or la (1) = long <:no:>
      then datacheck := false
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end check
    else
    if la (1) = long <:cp:> then
    begin <* cpu.<tal> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        antcpu := la (1);
        fp := fp + 1;

        system (5, 128, ia); <* get antal cpu'er *>
        if ia (1) = antcpu then antcpu := 0; <* allerede ok *>

        if antcpu > 0 then
        begin <* sæt antal cpu'er *>
          monitor (34, zhelp, antcpu, ia); <* sæt antal cpu'er *>
          system (5, 128, ia); <* get antal cpuer *>
          if ia (1) <> antcpu
          then fejl (<:kan ikke sætte korrekt cpuantal, der er:>, ia (1));
        end sæt antal cpu'er;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end cpu
    else
    if la (1) = long <:di:> then
    begin <* disc.<disc>(.<disc>) *>
      if system (4, fp + 1, la) >= 8 shift 12 + 10 then
      begin
        tofrom (disc1, la, 8);
        fp := fp + 1;

        if system (4, fp + 1, la) >= 8 shift 12 + 10 then
        begin <* til disc *>
          tofrom (disc2, la, 8);
          fp := fp + 1;
        end
        else tofrom (disc2, disc1, 8);
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end disc
    else
    if la (1) = long <:kl:> then
    begin <* kl.<ja/nej> *>
      if system (4, fp + 1, la) <> 8 shift 12 + 10
      then la (1) := long <:ja:> <* ingen <ja/nej> opfattes som ja *>
      else fp := fp + 1; <* ja/nej angivet *>

      if la (1) = long <:ja:> or la (1) = long <:yes:>
      then kl := true
      else
      if la (1) = long <:nej:> or la (1) = long <:no:>
      then kl := false
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end kl
    else
    if la (1) = long <:lo:> then
    begin <* lock(.<ja/nej>) *>
      if system (4, fp + 1, la) <> 8 shift 12 + 10
      then la (1) := long <:ja:> <* ingen <ja/nej> opfattes som ja *>
      else fp := fp + 1; <* ja/nej angivet *>

      b := corelock;

      if la (1) = long <:ja:> or la (1) = long <:yes:> then corelock := true
      else
      if la (1) = long <:nej:> or la (1) = long <:no:> then corelock := false
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);

      if b == corelock then <* allerede etableret *> else
      if corelock then lock (0, progsize - 1)
      else progmode := - (progsize - 1); <* unlock *>
    end test
    else
    if la (1) = long <:må:> then
    begin <* mål./alle/cpu/disc/bench/<nr> *>
      write (out, "nl", 1, <:Performancemåling:>,
        if corelock then <: (corelock):> else <::>);
      if online then setposition (out, 0, 0);

      if antcpu < 0 then
      begin <* sæt antal cpu'er til 1 *>
        monitor (34, zhelp, 1, ia); <* sæt antal cpu'er *>
        system (5, 128, ia); <* get antal cpuer *>
        if ia (1) <> 1
        then fejl (<:kan ikke sætte cpuantal til en, der er:>, ia (1));
      end sæt antal cpu'er;

      for res := system (4, fp + 1, la) while res shift (- 12) = 8 do
      begin <* while mål *>
        fp := fp + 1;

        if res extract 12 < 10 then
        begin <* mål.<no> *>
          målno := la (1);
          if not mål_proc (målno) then fejl (<:ukendt måling, nr.:>, målno);
        end målno
        else
        begin <* mål.txt *>
          la (1) := la (1) shift (- 32) shift 32; <* test på 2 tegn *>

          if la (1) = long <:al:> then
          begin <* alle *>
            for målno := 0 step 1 until 99 do mål_proc (målno);
          end alle
          else
          if la (1) = long <:be:> then
          begin <* bench *>
            for målno := 30 step 1 until 39 do mål_proc (målno);
          end bench
          else
          if la (1) = long <:cp:> then
          begin <* cpu *>
            for målno := 0 step 1 until 29 do mål_proc (målno);
          end cpu
          else
          if la (1) = long <:ca:> or la (1) = long <:ka:> then
          begin <* catalog *>
            for målno := 40 step 1 until 49 do mål_proc (målno);
          end catalog
          else
          if la (1) = long <:di:> then
          begin <* disc *>
            for målno := 50 step 1 until 59 do mål_proc (målno);
          end disc
          else fejl (<:ukendt måling, parameter nr.:>, fp + 1);
        end txt;

        if online then setposition (out, 0, 0);

        if antcpu < 0 then
        begin
          i := 1;
          while monitor (34, zhelp, i, ia) = 1 do i := i + 1; <* alle cpu'er *>
        end;
      end while mål;
    end mål
    else
    if la (1) = long <:pa:> then
    begin <* pause.<ja/nej> *>
      if system (4, fp + 1, la) <> 8 shift 12 + 10
      then la (1) := long <:ja:> <* ingen <ja/nej> opfattes som ja *>
      else fp := fp + 1; <* ja/nej angivet *>

      if la (1) = long <:ja:> or la (1) = long <:yes:>
      then pause := true
      else
      if la (1) = long <:nej:> or la (1) = long <:no:>
      then pause := false
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end trap
    else
    if la (1) = long <:re:> then
    begin <* record.<ja/nej> *>
      if system (4, fp + 1, la) = 8 shift 12 + 10 then
      begin
        datatest := datawrite := la (1) = long <:ja:> or la (1) = long <:yes:>;
        fp := fp + 1;

        if datawrite then
        begin <* optadg data *>
          write (out, "nl", 1, <:Record resultater i "systestdata":>);
          if online then setposition (out, 0, 0);

          for testno := 11, 12, 13, 14, 31, 32, 33, 34, 35, 36
          do test_proc (testno);
        end write;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end record
    else
    if la (1) = long <:se:> then
    begin <* segm.<tal> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        maxsegm := la (1);
        fp := fp + 1;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end segm
    else
    if la (1) = long <:sh:> then
    begin <* shares.<tal> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        shares := la (1);
        fp := fp + 1;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end shares
    else
    if la (1) = long <:st:> then
    begin <* stop.<antal> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        stop := la (1);
        fp := fp + 1;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end stop
    else
    if la (1) = long <:te:> then
    begin <* test.ja/nej/alle/cpu/disc/tape/<nr> *>
      write (out, "nl", 1, <:Modultest:>,
        if corelock then <: (corelock):> else <::>,
        if datacheck then <: med:> else <: uden:>,
        <: fuld io-datakontrol:>);
      if online then setposition (out, 0, 0);

      datatest := true;

      for res := system (4, fp + 1, la) while res shift (- 12) = 8 do
      begin <* while test *>
        fp := fp + 1;

        if res extract 12 < 10 then
        begin <* test.<no> *>
          testno := la (1);
          if not test_proc (testno) then fejl (<:ukendt test, nr.:>, testno);
        end testno
        else
        begin <* test.txt *>
          la (1) := la (1) shift (- 32) shift 32; <* test på 2 tegn *>

          if la (1) = long <:ja:> or la (1) = long <:ye:> then
          begin <* test.ja *>
            test := true;
          end ja
          else
          if la (1) = long <:ne:> or la (1) = long <:no:> then
          begin <* test.nej *>
            test := false;
          end ja
          else
          if la (1) = long <:al:> then
          begin <* alle (undtagen tape) *>
            for testno := 11, 12, 13, 14, 21, 31, 32, 33, 34, 35, 36, 51, 56, 59
            do test_proc (testno);
          end alle
          else
          if la (1) = long <:be:> then
          begin <* bench *>
            for testno := 31, 32, 33, 34, 35, 36 do test_proc (testno);
          end alle
          else
          if la (1) = long <:cp:> then
          begin <* cpu *>
            for testno := 11, 12, 13, 14, 21 do test_proc (testno);
          end cpu
          else
          if la (1) = long <:di:> then
          begin <* disc *>
            for testno := 51, 56, 59 do test_proc (testno);
          end disc
          else
          if la (1) = long <:io:> then
          begin <* ioc *>
            for testno := 71 do test_proc (testno);
          end ioc
          else
          if la (1) = long <:ta:> then
          begin <* tape *>
            for testno := 61 do test_proc (testno);
          end tape
          else fejl (<:ukendt test, parameter nr.:>, fp + 1);
        end txt;

        if online then setposition (out, 0, 0);
      end while test;

      datatest := false;
    end test
    else
    if la (1) = long <:ti:> then
    begin <* tid(.<min>).<sek> *>
      if system (4, fp + 1, la) = 8 shift 12 + 4 then
      begin
        antal := - 1;
        sek := la (1);

        fp := fp + 1;

        if system (4, fp + 1, la) = 8 shift 12 + 4 then
        begin
          sek := sek * 60 + la (1);
          fp := fp + 1;
        end;
      end ok
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end tid
    else
    if la (1) = long <:tr:> then
    begin <* trap.<ja/nej> *>
      if system (4, fp + 1, la) <> 8 shift 12 + 10
      then la (1) := long <:ja:> <* ingen <ja/nej> opfattes som ja *>
      else fp := fp + 1; <* ja/nej angivet *>

      if la (1) = long <:ja:> or la (1) = long <:yes:>
      then trapstop := false
      else
      if la (1) = long <:nej:> or la (1) = long <:no:>
      then trapstop := true
      else fejl (<:Parameterfejl, param nr.:>, fp + 1);
    end trap
    else fejl (<:Ukendt parameter, param nr.:>, fp);

    if false then
trap_næste_1:
    begin
      xwritealarm;
      xtrapbreak;
      fejl (<:programnedgang:>, - 1);
      if not trapstop then trap (trap_heltyt);
    end;

    if not trapstop then trap (trap_heltyt);
    if online then setposition (out, 0, 0);
    fp := fp + 1;
  end while fp;

  exitrandom;

  write (out, "nl", 1, "-", 75);

  if false then
trap_heltyt:
  begin <* trapped *>
    xwritealarm;
    fejl (<:programnedgang:>, - 1);
  end trapped;

  if antcpu <> 0 then
  begin
    i := 1;
    while monitor (34, zhelp, i, ia) = 1 do i := i + 1; <* alle cpu'er *>
  end;

  if fejlet then write (out, "nl", 1, <:fejl observeret!!:>, "nl", 1, "-", 75);
  outchar (out, 'nl');
  xconnectout;

  for i := 1 step 1 until maxno do
  for c := 'nul', 'i', 'o' do
  begin <* slet wrk filer *>
    makename (i, la, c);
    open (zhelp, 0, la, 0);
    close (zhelp, true);
    monitor (48, zhelp, 0, ia); <* clear evt gammel fil *>
  end;

uden_param:
  if blocksread <= 1000 then trapmode := 1 shift 10; <* undertryk end xxx *>
end
▶EOF◀