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

⟦221b5d8ce⟧ TextFile

    Length: 19200 (0x4b00)
    Types: TextFile
    Names: »tsystest4   «

Derivation

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

TextFile

    message de enkelte testprocedurer part 2 (tsystest4);

    integer procedure test_tape (name);
    long array name;
    begin
      integer ejok, sh, mk, bl, bu, i, j;
      zone z (1, 1, xstderror);

      procedure wseq (nr, name, mk, sh, filer, blokke, buflgd, testnr);
      long array name;
      integer nr, mk, sh, filer, blokke, buflgd, testnr;
      begin
        zone z (buflgd * 128 * sh, sh, xstderror);
        integer f, b, i, j, k;
        long l;
        long field lf;

        write (out, "nl", 1, <:write seq :>, name,
          "sp", 1, if mk shift (- 14) extract 1 = 0 then <:high:> else <:low:>,
          <: density:>,
          filer, if filer <> 1 then <: filer:> else <: fil:>,
          <: af:>, blokke, <: *:>, buflgd, <: segm,:>, sh, <:'bufret:>);
        if online then setposition (out, 0, 0);

        blok_lgd (nr) := buflgd;
        segment_nr (nr) := filer * blokke * buflgd;

        for f := 0 step 1 until filer - 1 do
        begin <* pr fil *>
          if test then wr_test (<:fil:>, f);

          xnulstil (z);
          open (z, mk, name, 1 shift 9);
          setposition (z, f, 0);

          for b := 0 step 1 until blokke - 1 do
          begin <* pr blok *>
            l := extend testnr shift 40 + extend f shift 32 + extend b shift 24;

            if test then wr_test (<:blok:>, b);

            outrec6 (z, buflgd * 512);

            for lf := 4 step if datacheck then 4 else 32 * 4 until buflgd * 512 do
            z.lf := l + lf;

            segment_nr (nr) := segment_nr (nr) - buflgd;
          end pr blok;

          close (z, false);
        end pr fil;
      end procedure wseq;

      integer procedure rseq (nr, name, mk, sh, filer, blokke, buflgd, testnr);
      long array name;
      integer nr, mk, sh, filer, blokke, buflgd, testnr;
      begin
        zone z (buflgd * 128 * sh, sh, xstderror);
        integer f, b, i, j, k, ejok;
        long l;
        long field lf;

        write (out, "nl", 1, <:read  seq :>, name,
          "sp", 1, if mk shift (- 14) extract 1 = 0 then <:high:> else <:low:>,
          <: density:>,
          filer, if filer <> 1 then <: filer:> else <: fil:>,
          <: af:>, blokke, <: *:>, buflgd, <: segm,:>, sh, <:'bufret:>);
        if online then setposition (out, 0, 0);

        ejok := 0;
        xnulstil (z);
        open (z, mk, name, 1 shift 9);

        blok_lgd (nr) := buflgd;
        segment_nr (nr) := filer * blokke * buflgd;

        for f := 0 step 1 until filer - 1 do
        begin <* pr fil *>
          if test then wr_test (<:fil:>, f);
          setposition (z, f, 0);

          for b := 0 step 1 until blokke - 1 do
          begin <* pr blok *>
            l := extend testnr shift 40 + extend f shift 32 + extend b shift 24;

            if test then wr_test (<:blok:>, b);

            inrec6 (z, buflgd * 512);

            for lf := 4 step if datacheck then 4 else 32 * 4 until buflgd * 512 do
            if z.lf <> l + lf
            then
            begin <* fejl *>
              antal_fejl (nr) := antal_fejl (nr) + 1;
              ejok := ejok + 1;
              fejl (<:Fejl ved seq read:>, - 1);
              write (out, <<d>, <:fil.:>, f, <:, blok.:>, b, <:, adr.:>, lf,
                "nl", 1, <:(nr.fil.blok.adr / nr < 40 + fil < 32 + blok < 24 + adr):>);

              wr_z_tape (l + lf, z.lf);

              if ejok >= stop then
              begin <* for mange fejl *>
                wr_test (<:for mange fejl observeret, testen stoppes:>, - 1);
                f := filer;
                b := blokke;
                lf := buflgd * 512;
              end for mange fejl;
            end fejl;

            segment_nr (nr) := segment_nr (nr) - buflgd;
          end pr blok;
        end pr fil;

        close (z, false);
        rseq := ejok;
      end procedure rseq;

      integer procedure rback (nr, name, mk, sh, filer, blokke, buflgd, testnr);
      long array name;
      integer nr, mk, sh, filer, blokke, buflgd, testnr;
      begin
        zone z (buflgd * 128 * sh, sh, xstderror);
        integer f, b, i, j, k, ejok;
        long l;
        long field lf;

        write (out, "nl", 1, <:read  backwards :>, name,
          "sp", 1, if mk shift (- 14) extract 1 = 0 then <:high:> else <:low:>,
          <: density:>,
          filer, if filer <> 1 then <: filer:> else <: fil:>,
          <: af:>, blokke, <: *:>, buflgd, <: segm,:>, sh, <:'bufret:>);
        if online then setposition (out, 0, 0);

        ejok := 0;
        xnulstil (z);
        open (z, mk, name, 1 shift 9);

        blok_lgd (nr) := buflgd;
        segment_nr (nr) := filer * blokke * buflgd;

        for f := filer - 1 step - 1 until 0 do
        begin <* pr fil *>
          if test then wr_test (<:fil:>, f);

          for b := blokke - 1 step - 1 until 0 do
          begin <* pr blok *>
            setposition (z, f, b);

            l := extend testnr shift 40 + extend f shift 32 + extend b shift 24;

            if test then wr_test (<:blok:>, b);

            inrec6 (z, buflgd * 512);

            for lf := 4 step if datacheck then 4 else 32 * 4 until buflgd * 512 do
            if z.lf <> l + lf
            then
            begin <* fejl *>
              antal_fejl (nr) := antal_fejl (nr) + 1;
              ejok := ejok + 1;
              fejl (<:Fejl ved seq read backwards:>, - 1);
              write (out, <<d>, <:fil.:>, f, <:, blok.:>, b, <:, adr.:>, lf,
                "nl", 1, <:(nr.fil.blok.adr / nr < 40 + fil < 32 + blok < 24 + adr):>);

              wr_z_tape (l + lf, z.lf);

              if ejok >= stop then
              begin <* for mange fejl *>
                wr_test (<:for mange fejl observeret, testen stoppes:>, - 1);
                f := 0;
                b := 0;
                lf := buflgd * 512;
              end for mange fejl;
            end fejl;

            segment_nr (nr) := segment_nr (nr) - buflgd;
          end pr blok;
        end pr fil;

        close (z, false);
        rback := ejok;
      end procedure rback;

      for mk := 0 shift 12 + 18, 4 shift 12 + 18 do
      begin
        write (out, "nl", 1, <:tapetest med :>,
          "sp", 1, if mk shift (- 14) extract 1 = 0 then <:high:> else <:low:>,
          <: density:>);
        if online then setposition (out, 0, 0);

        open (z, mk, name, 1 shift 9);
        setposition (z, 0, 0); <* fortæl keystone om high/low density *>
        setposition (z, 0, 0); <* fortæl keystone om high/low density *>
        close (z, false);

        wseq (1, name, mk, 3, 3, 10, 84, 1);
        ejok := rback (1, name, mk, 3, 3, 10, 84, 1)
        + rseq (1, name, mk, 3, 3, 10, 84, 1);

        sh := if shares > 0 then shares else 3;
        bu := 0;
        repeat
          bu := if buflgd > 0 and buflgd <= 84 then buflgd else
          if bu <= 0 then 1 else 84;

          bl := if maxsegm > 0 then (maxsegm + bu - 1) // bu else 100;
          if bl < 1 then bl := 1;

          wseq (1, name, mk, sh, 1, bl, bu, 1);
          ejok := ejok + rseq (1, name, mk, sh, 1, bl, bu, 1)
        until buflgd > 0 or bu >= 84;
      end;

      close (z, true);

      test_tape := antal_fejl (1);
    end procedure test_tape;
\f


    integer procedure test_ioc;
    begin
      <* skriv og læs i diskfil,
         bufferplaceringen i lagret ændres i spring på 2 over 16 halvordsadr
         segmentantallet pr io ændres fra 1 til 88 ( lidt over 64kbyte)
         der checkes om der skrives ved siden af det forventede
      *>

      integer i, j, k, adr, adr_base, adr_rel, buf_start, buf_slut, segm, ant_fejl;
      integer array tail (1 : 10), ia (1 : 20);
      long array name, disk (1 : 2);
      integer field inf;
      zone z (128 * 90, 1, xstderror);

      procedure io (z, fra, til, input);
      zone z;
      integer fra, til;
      boolean input;
      begin
        <* lav io vha z med buffer startende i fra og sluttende i til
           hvor fra og til kan opfattes som integer array fields
           hvis input er true laves input ellers output
        *>

        integer array zd (1 : 20), sh (1 : 12);
        integer i, j;

        if test then
        begin
          wr_test (if input then <:input:> else <:output:>, (til - fra) // 512);
          write (out, <: segm, fra.:>, <<d>, fra, <: til.:>, til);
        end test;

        getzone6 (z, zd);
        getshare6 (z, sh, 1);

        zd (17) := 1; <* used share *>

        sh (1) := 0; <* free share *>
        sh (2) := 1; <* first shared *>
        sh (3) := sh (2) + zd (20) * 4 - 1; <* last shared *>
        if input
        then sh (4) := 3 shift 12 + 0 <* input *>
        else sh (4) := 5 shift 12 + 0; <* output *>
        sh (5) := zd (19) + sh (2) + fra; <* first abs adr *>
        sh (6) := sh (5) + (til - fra); <* last abs adr *>
        sh (7) := 0; <* segm count *>
        sh (8) := sh (9) := sh (10) := sh (11) := 0; <* ubenyttet *>
        sh (12) := sh (5); <* top transferred *>

        setzone6 (z, zd);
        setshare6 (z, sh, 1);

        if monitor (16, z, 1, ia) = 0
        then system (9, 6, <:<10>break:>);

        i := monitor (18, z, 1, ia);
        if i <> 1 then xstderror (z, 1 shift i, 0) else
        if ia (1) <> 0 then xstderror (z, ia (1), ia (2));
      end procedure io;

      getzone6 (z, ia);
      adr_rel := (ia (19) + 2) // 2 * 2; <* første ordadr i buffer *>
      system (5, ownadr + 98, ia); <* get current base *>
      adr_base := ia (1); <* processens relative forskydning *>

      if test then
      begin
        wr_test (<:io test, adresser::>, - 1);
        write (out, <<d>,
          <: proc-base=:>, adr_base,
          <: z-rel-adr=:>, adr_rel,
          <: buf-rel-adr=:>, adr);
        if online then setposition (out, 0, 0);
      end test;

      ant_fejl := 0;

      makename (1, name, 'i');
      open (z, 4, name, 1 shift 9);
      close (z, true);
      monitor (48, z, 0, tail); <* clear evt gammel fil *>

      tail (1) := 88;
      tofrom (tail.laf2, disc1, 8);
      tail (6) := systime (7, 0, 0.0);
      tail (7) := tail (8) := tail (9) := tail (10) := 0;

      if monitor (40, z, 0, tail) <> 0 <* create fil *>
      then fejl (<:Fejl ved create entry, for få resourcer:>, - 1)
      else
      if monitor (92, z, 0, tail) <> 0 <* entry lock *>
      or monitor (8, z, 0, tail) <> 0 <* reserve *>
      then fejl (<:Fejl ved reserve:>, - 1)
      else
      begin
        for adr := 0 step 2 until 16 - 2 do <* varier startadr i buffer *>
        begin
          write (out, "nl", 1, <:io til/fra absolut lageradresse:>, adr_base + adr_rel + adr);
          if online then setposition (out, 0, 0);
          for segm := 1 step 1 until 88 do <* varier bufferlængde *>
          begin
            buf_start := 512 + adr;
            buf_slut := segm * 512 + buf_start;

            for inf := 2 step 2 until buf_start,
            buf_slut + 2 step 2 until 90 * 512
            do z.inf := - 5 592 406; <* AAAAAAh i alt udenom buf *>

            for inf := buf_start + 2 step 2 until buf_slut
            do z.inf := inf - buf_start; <* hw adr i buf *>

            io (z, buf_start, buf_slut, false); <* skriv til disk *>

            <* fyld bufferdelen af lagret med AAAAAAh *>
            for inf := buf_start + 2 step 2 until buf_slut
            do z.inf := - 5 592 406; <* AAAAAAh i buf *>

            io (z, buf_start, buf_slut, true); <* læs fra disk *>

            <* check omgivelser omkring buf *>
            for inf := 2 step 2 until buf_start,
            buf_slut + 2 step 2 until 90 * 512 do
            if z.inf <> - 5 592 406 then
            begin <* fejl *>
              ant_fejl := ant_fejl + 1;

              fejl (<:Fejl læsning til lageradr.:>, adr_base + adr_rel + inf);
              write (out, <: segm pr io:>, segm,
                "nl", 1, <:lager udenom buffer ødelagt:>,
                "nl", 1, <:forventet: :>, string xhex (- 5 592 406, 6), "H", 1,
                <: fundet: :>, string xhex (z.inf, 6), "H", 1);

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

              if pause then system (10, 1, <:<10>pause pga fejl:>); <* pause *>
            end fejl;

            <* check bufferindhold *>
            for inf := buf_start + 2 step 2 until buf_slut do
            if z.inf <> inf - buf_start then <* hw adr i buf *>
            begin <* fejl *>
              ant_fejl := ant_fejl + 1;

              fejl (<:Fejl læsning til lageradr.:>, adr_base + adr_rel + inf);
              write (out, <: segm pr io:>, segm,
                "nl", 1, <:fejlagtige data fundet:>,
                "nl", 1, <:forventet: :>, string xhex (inf, 6), "H", 1,
                <: fundet: :>, string xhex (z.inf, 6), "H", 1);

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

              if pause then system (10, 1, <:<10>pause pga fejl:>); <* pause *>
            end fejl;
          end varier segm;
        end varier adr;
      end create entry ok;

      open (z, 4, name, 1 shift 9);
      close (z, true);
      if ant_fejl = 0 then monitor (48, z, 0, tail) <* clear fil hvis ok *>
      else write (out, "nl", 1, <:pga. fejl slettes :>, name,
        <: på :>, disc1, <: ikke:>);

      test_ioc := ant_fejl;
    end procedure test_ioc;
\f


    if not trapstop then trap (trap_ud);

    antal := 1;
    test_proc := true;

    xnulstil (sidst_rørt);
    xnulstil (antal_io);
    xnulstil (blok_lgd);
    xnulstil (segment_nr);
    xnulstil (bs_nr);
    xnulstil (antal_fejl);
    xnulstil (aktivitet);

    if testno = 11 then
    begin <* integer *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Integer regning (+, -, *, //, mod):>);
      if online then setposition (out, 0, 0);
      test_integer;
    end integer
    else
    if testno = 12 then
    begin <* long *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Long regning (+, -, *, //, mod):>);
      if online then setposition (out, 0, 0);
      test_long;
    end long
    else
    if testno = 13 then
    begin <* real *>
      writeint (out, "nl", 2,  <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Real regning (+, -, *, /):>);
      if online then setposition (out, 0, 0);
      test_real;
    end real
    else
    if testno = 14 then
    begin <* exponentiation *>
      writeint (out, "nl", 2,  <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Exponentiationsberegninger (integer, long, real):>);
      if online then setposition (out, 0, 0);
      test_exp;
    end exponentiation
    else
    if testno = 21 then
    begin <* tofrom *>
      i := xmaxbuflgd (10, if corelock then 1000 else 4000, true) - 50; <* ca 50 hw til zonedescr mv *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Tofrom lagerflytninger (10 * :>, i, <: hw):>);
      if online then setposition (out, 0, 0);
      test_tofrom (i);
    end tofrom
    else
    if testno = 31 then
    begin <* sieve *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Sieve-benchmark (25000):>);
      if online then setposition (out, 0, 0);
      mål_sieve (antal, 25000);
    end sieve
    else
    if testno = 32 then
    begin <* quicksort *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Quicksort (25000 words):>);
      if online then setposition (out, 0, 0);
      mål_qsort (antal, 25 000);
    end qsort
    else
    if testno = 33 then
    begin <* shellsort *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Shellsort (25000 words):>);
      if online then setposition (out, 0, 0);
      mål_ssort (antal, 25 000);
    end ssort
    else
    if testno = 34 then
    begin <* heapsort *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Heapsort (25000 words):>);
      if online then setposition (out, 0, 0);
      mål_hsort (antal, 25 000);
    end hsort
    else
    if testno = 35 then
    begin <* matrix *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Matrixberegning (50x50 words):>);
      if online then setposition (out, 0, 0);
      mål_matrix (antal, 50);
    end matrix
    else
    if testno = 36 then
    begin <* flydende matrix *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Matrixberegning med flydende tal (50x50 reals):>);
      if online then setposition (out, 0, 0);
      mål_fmatrix (antal, 50);
    end fmatrix
    else
    if testno = 51 then
    begin <* write seq *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Disktest, seq write, cross read:>);
      if online then setposition (out, 0, 0);
      j := abs test_disk (1, antbs, antdiske);
      writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
        <:disktest slut,:>, <<-d>, j, <: fejl:>);
      if online then setposition (out, 0, 0);
    end seq
    else
    if testno = 56 then
    begin <* write cross *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Disktest, cross write, seq read:>);
      if online then setposition (out, 0, 0);
      j := abs test_disk (2, antbs, antdiske);
      writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
        <:disktest slut,:>, <<-d>, j, <: fejl:>);
      if online then setposition (out, 0, 0);
    end cross
    else
    if testno = 59 then
    begin <* copy *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Disktest, disk-disk-copy:>);
      if online then setposition (out, 0, 0);
      test_disk (3, antbs, antdiske); <* lav filer *>
      j := abs test_disk (5, antbs, antdiske); <* copy *>
      test_disk (4, antbs, antdiske); <* slet filer *>
      writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
        <:disktest slut,:>, <<-d>, j, <: fejl:>);
      if online then setposition (out, 0, 0);
    end copy
    else
    if testno = 61 then
    begin <* tape *>
      mt_no := mt_no + 1;
      makename (mt_no, la, 't');

      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:Tapetest (:>, la, <:):>);
      if online then setposition (out, 0, 0);

      j := abs test_tape (la);
      writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
        <:tapetest slut:>, <<-d>, j, <: fejl:>);
      if online then setposition (out, 0, 0);
    end tapetest
    else
    if testno = 71 then
    begin <* ioc *>
      writeint (out, "nl", 2, <<zddd.dd>, xkl, ":", 1,
        <<d>, <:IOC-test:>);
      if online then setposition (out, 0, 0);

      j := test_ioc;
      writeint (out, "nl", 1, <<zddd.dd>, xkl, ":", 1,
        <:IOC-test slut:>, <<-d>, j, <: fejl:>);
      if online then setposition (out, 0, 0);
    end ioctest
    else
    test_proc := false; <* ukendt test *>

    if false then
trap_ud:
    begin
      xwritealarm;
      xtrapbreak;
      fejl (<:programnedgang:>, - 1);
    end;
  end procedure test_proc;

▶EOF◀