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

⟦9762d418d⟧ TextFile

    Length: 8448 (0x2100)
    Types: TextFile
    Names: »timctest1   «

Derivation

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

TextFile

    procedure io_proc (actno, nr, idx, input, c_nameimc, c_name_l, c_name_r);
    value actno, nr, idx, input;
    integer actno, nr, idx;
    boolean input;
    long array c_nameimc, c_name_l, c_name_r;
    begin
      <* proceduren laver io på nettet, hvis input=true læses ellers skrives

         1. ord i data = 25 => end of data

         connect og disconnect laves altid i zimc_ud, der er enkeltbufret
         dette skal gøres før close på zimc_ind for at undgå deadlock
         da close laver wait_answer ved ubesvarede inputs
      *>

      zone zimc_ind (buflgd_hw // 4 * shares, shares, xstderror),
      zimc_ud (buflgd_hw // 4, 1, xstderror);
      long array nameimc, name_l, name_r (1 : 2);
      long reason, hw;
      integer res, antio, ionr, testnr, rand, r_nr, r_idx, i, j, k;
      boolean slut, ok, error;
      real r;
      integer array sh (1 : 12), zd, ia (1 : 20);
      real begin_tid, begin_cpu, tid, cpu;
      integer array field iaf;

      procedure input_tom (z, ionr);
      zone z;
      integer ionr;
      begin
        if test then wr_test (nr, idx, <:før inrec6, io nr.:>, ionr);

        antal_io (actno) := antal_io (actno) + 1;
        inrec6 (z, buflgd_hw);

        if ionr = 1 then
        begin <* første så hent r_nr og r_idx *>
          r_nr := z (2) shift (- 40) extract 8;
          r_idx := z (2) shift (- 32) extract 8;

          wr_test (nr, idx, <:connected to:>, - 1);
          write (out, <<d>, r_nr, ".", 1, r_idx);
          if online then setposition (out, 0, 0);
        end;

        if z (1) = real <:<25><25><25><25><25>:> add 25 then slut := true;

        ok := true;
        for j := if not datacheck then 2 else buflgd_hw // 4 step - 1 until 2 do
        if z (j) <> real (extend r_nr shift 40
          + extend r_idx shift 32
          + extend (ionr extract 8) shift 24
          + j)
        then
        begin
          fejl (nr, idx, <:*** datafejl, io.:>, ionr);
          write (out, <<d>,
            <: (port.link.ionr.adr / port<40+link<32+ionr<24+adr):>,
            "nl", 1, <:ventet::>, r_nr, ".", 1, r_idx, ".", 1,
            ionr extract 8, ".", 1, j,
            <: modtaget::>, z (j) shift (- 40) extract 8, ".", 1,
            z (j) shift (- 32) extract 8, ".", 1,
            z (j) shift (- 24) extract 8, ".", 1,
            z (j) extract 24);
          if online then setposition (out, 0, 0);

          system (9, 8, <:<10>break:>);
        end fejl;
      end procedure input_tom;

      procedure output_tom (z, ionr);
      zone z;
      integer ionr;
      begin
        if test then wr_test (nr, idx, <:før outrec6, io nr.:>, ionr);

        antal_io (actno) := antal_io (actno) + 1;
        outrec6 (z, buflgd_hw);

        for j := if not datacheck then 2 else buflgd_hw // 4 step - 1 until 2 do
        z (j) := real (extend nr shift 40
          + extend idx shift 32
          + extend (ionr extract 8) shift 24
          + j);

        if ionr <> antio
        then z (1) := real <::>
        else z (1) := real <:<25><25><25><25><25>:> add 25;

        if duplex then setposition (z, 0, 0); <* tving data ud *>
      end procedure output_tom;

      xclaim (2048); <* extra program stack *>

      trap (trap_fejlet);
      error := false;

      tofrom (nameimc, c_nameimc, 8);
      tofrom (name_l, c_name_l, 8);
      tofrom (name_r, c_name_r, 8);

      systime (5, 0, r);
      wr_test (nr, idx,
        if input then <:begin input, kl.:> else <:begin output, kl.:>, r);
      write (out,
        <: m.:>, name_lan,
        <: a.:>, name_imc,
        <: p.:>, name_l, <: & :>, name_r);
      if online then setposition (out, 0, 0);

      rand := nr * 100 + idx; <* basis for random *>

      for testnr := 1 step 1 until anttest do
      begin <* pr connect *>
        xnulstil (zimc_ind);
        xnulstil (zimc_ud);

        open (zimc_ind, 20, nameimc, 1 shift 9);
        open (zimc_ud, 20, nameimc, 1 shift 9);

        wr_test (nr, idx, <:connect:>, actno);

        if x_lav_imc_connect (zimc_ud, idx, name_l, name_r, reason) then
        begin <* connect ok *>
          getzone6 (zimc_ud, ia);
          getzone6 (zimc_ind, zd);
          tofrom (zd, ia, 26); <* genbrug zd (1)..zd (13) *>
          setzone6 (zimc_ind, zd);

          trap (trap_rydop);

          ionr := 0;
          hw := 0;
          begin_cpu := systime (1, 0, begin_tid);

          if input then
          begin <* read *>
            if fil then
            begin <* skriv i fil *>
              zone z_fil (1, 1, xstderror);

              open (z_fil, 4, filnavn, 1 shift 9);
              close (z_fil, false);

              hw := xcopyzone (zimc_ind, z_fil, - 1, buflgd_hw, shares);
              ionr := (hw + (buflgd_hw - 1)) // buflgd_hw;
            end skriv i fil
            else
            begin
              slut := false;
              repeat
                ionr := ionr + 1;
                input_tom (zimc_ind, ionr);
                if duplex then output_tom (zimc_ud, ionr);
                hw := hw + buflgd_hw;

                if not datacheck
                then zimc_ind (1) := real <::>
                else xnulstil (zimc_ind);
              until slut;

              if duplex then
              begin <* gange to *>
                hw := hw * 2;
                ionr := ionr * 2;
              end duplex;
            end;
          end input
          else
          begin <* output *>
            if maxio > 0 then antio := entier (random (rand) * (maxio - 1) + 1)
            else antio := abs (maxio);

            if fil then
            begin <* læs fra fil *>
              zone z_fil (1, 1, xstderror);
              integer array ia, iax (1 : 20);

              open (z_fil, 4, filnavn, 1 shift 9);
              close (z_fil, false);

              hw := xcopyzone (z_fil, zimc_ud, - 1, buflgd_hw, shares);
              ionr := (hw + (buflgd_hw - 1)) // buflgd_hw;

              <* send em, markeret v. 4 hw, over lan *>
              getzone6 (zimc_ud, iax);
              getzone6 (z_fil, ia);
              tofrom (ia, iax, 26); <* overfør navn, kind mv. *>
              setzone6 (z_fil, ia);
              xinitoutput (z_fil, ia);
              xsetoutput (z_fil, ia, 1, 4); <* gør klar til output *>
              z_fil (1) := real <:<25><25><25><25><25>:> add 25;
              xoutput (z_fil, ia, 1, 4); <* send *>
            end læs fra fil
            else
            begin
              ionr := 0;
              repeat
                ionr := ionr + 1;
                output_tom (zimc_ud, ionr);
                if duplex then input_tom (zimc_ind, ionr);
                hw := hw + buflgd_hw;

                if not duplex then <* glem det *> else
                if not datacheck then zimc_ind (1) := real <::>
                else xnulstil (zimc_ind);
              until ionr >= antio;

              if duplex then
              begin <* gange to *>
                hw := hw * 2;
                ionr := ionr * 2;
              end duplex;
            end;
          end output;

          cpu := systime (1, begin_tid, tid) - begin_cpu;
          cpu_ialt := cpu_ialt + cpu;
          tid_ialt := tid_ialt + tid;
          bytes_ialt := bytes_ialt + hw * 3 // 2;
          io_ialt := io_ialt + ionr;

          if test then wr_test (nr, idx, <:bytes transfered=:>, hw * 3 // 2);

          if false then
trap_rydop:
          begin <* error *>
            error := true;
            xwritealarm;
          end error;

          trap (0);

          wr_test (nr, idx, <:disconnect:>, actno);

          imcdisconn (zimc_ud, reason); <* skal gøres på ud zonen og før alt andet *>
          close (zimc_ud, false);
          close (zimc_ind, false);

          if error then trap (nr);
        end connect ok
        else fejl_reason (nr, idx, <:imcconnect:>, name_r, reason);
      end pr connect;

      systime (5, 0, r);
      wr_test (nr, idx, if input then <:end input, kl.:> else <:end output, kl.:>, r);

      if false then
trap_fejlet:
      begin <* error *>
        error := true;
        xwritealarm;
      end error;

      trap (0);
      if error then trap (nr);
    end procedure io_proc;
▶EOF◀