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

⟦71dc67f84⟧ TextFile

    Length: 27648 (0x6c00)
    Types: TextFile
    Names: »retload3tx  «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »retload3tx  « 

TextFile

mode list.yes

load4tx=edit load3tx
; ignore parity error in magtape
; prepare for sizes different than the ones wanted
; connect output : segm < 2 + key

l./page ... 36/, l./message stack current output/, l-1, r/81.12.07/88.09.08/
l./result := 2;/, r/2/1 shift 2/, r/1<1/1<2/, r/preferably on drum/temporary/

l./page ...38/, l./message connect output/, l-1, r/84.04.25/88.09.08/
l./size shift 1/, r/shift 1/shift 2/, r/pref drum/temporary/

l./message decl. second level page 1;/, l-1, r/84.10.31/88.11.17/
l./boolean/, l./inc_dump/, i/
                        reading_savecat               ,
/, p-1
l./boolean array/, l./expell_zone/, i/
                        parity                        ,
/, p1

;********************************************

l./dummy,/, i/
                        speedlimit                    ,
                        monrelease                    ,
/, p1

;********************************************

l./message connect wrk or exist page 2;/, l-1, r/84.09.19/88.11.25/
l./headtail.base (1) = entry.base (1)/, d1, i/
          if headtail     .base  (1) = entry     .base  (1) and
             headtail     .base  (2) = entry     .base  (2) and <*bases*>
             headtail (1) extract 3  = entry (1) extract 3  and <*permkey*>
            (headtail     .size     >= 0                    and <*areas*>
             entry        .size     >= 0
          or headtail     .size     <  0                    and <*descr*>
             entry        .size     <  0)                  then
/, l1, p-8
l./tofrom/, i/
      if entry.size >= 0 then
/, l1, r/tofrom/  tofrom/, p-1

l./message rename wrk  /, l-1, r/84.07.10/88.02.04/
l./integer array field base/, r/;/, tail;/
l./size := 16/, i/
    tail  := 14; <* -      -    tail*>
/, p1
l./page 2/, l-1, r/84.11.09/88.02.04/
l./if result > 0 and result <> 3 then/, i#

    if result = 0 then
    begin <*reopen zone z*>
      close (z, true);
      open  (z, 0, entry_name, 0);
    end;

    if (result      = 0      <*renamed     *>
    or  result      = 3) and <*name overlap*>
        entry.size >= 0 then
    begin <*check whether or not to cut area*>
      integer result1;

      result1 := monitor (76) head and tail :(z, 1, headtail);

      if test then
      begin
        integer array zdescr (1:20);
        integer array field zname;
        zname := 2;
        getzone6 (z, zdescr);
        write (out, 
        "nl", 1, <:lookup head and tail : :>, zdescr.zname,
        "nl", 1, <:result               : :>, result1     );
      end;

      if result1      = 0              and
         entry.size  <> headtail.size then
      begin <*cut area*>
        result1 := monitor (44) change entry :(z, 1, entry.tail);

        if test then
        begin
          integer array zdescr (1:20);
          integer array field zname;
          zname := 2;
          getzone6 (z, zdescr);
          write (out,
          "nl", 1, <:change entry : :>, zdescr.zname,
          "nl", 1, <:entry.size   : :>, entry.size ,
          "nl", 1, <:result       : :>, result1);
        end;

        if result1 > 0 then
        begin <*could not be changed*>
          reset_catbase;

          monitor_alarm (out, 44, entry.name, result1);
        end;
      end <*cut area*>;
    end <*check whether ...*>;

\f



<* sw8010/2, load      entry procedures              page ... xx...

1988.02.04*>

message rename wrk             page 1a;


#, p1
l./begin <*name equivalence*>/, i/
        if entry.size <> headtail.size then
          write (out,
          "nl", 1, "*", 3, "sp", 1, true, 12, headtail.name, <:not renamed:>)
        else
/, p1


l./message monitor alarm/, 
l./page 2;/,l-1, r/85.02.06/88.02.04/
l./errorbits := 3;/, r/3/2/, r/ok.no/ok.yes/

l./procedure terminate_alarm (z/, d./end terminate_alarm;/, i#


  procedure terminate_alarm (z, text, name, val, text1, val1);
  value                                     val,        val1 ;
  zone                       z                               ;
  string                        text,            text1       ;
  long    array                       name                   ;
  integer                                   val,        val1 ;
  
  <***********************************************************>
  <*                                                         *>
  <* The procedure terminates with an invisible runtime alarm*>
  <* after having written an alarm message on the zone z.    *>
  <*                                                         *>
  <* Call: terminate_alarm (z, text, name, val, text1, val1);*>
  <*                                                         *>
  <* z     (call and return value, zone). The document, the  *>
  <*       buffering and the position of the document where  *>
  <*       to write the alarm message.                       *>
  <* text  (call value, string).                             *>
  <* text1                                                   *>
  <* name  (call value, long array).                         *>
  <* val   (call value, integer). All values which are writ- *>
  <* val1  ten on the zone z.                                *>
  <*                                                         *>
  <***********************************************************>

  begin
    write_alarm (z, text);
    write       (z, "nl", 1, "sp", 4, 
                 true, 12, name, <:  :>, val, text1, val1);

    trapmode := 1 shift 13; <*ignore output of trap alarm*>

    trap (1); <*alarm*>

  end terminate_alarm;


\f



<* sw8010/2, load      entry procedures              page ... xx...

1988.01.28*>

message continue warning       page  1;


  procedure continue_warning (z, text, name, val, text1, val1);
  value                                      val,        val1 ;
  zone                        z                  ;
  string                         text,            text1       ;
  long    array                        name      ;
  integer                                    val,        val1 ;
  
  <***********************************************************>
  <*                                                         *>
  <* The procedure continues after having written an warning *>
  <* message on the zone z. The fp mode bits are set         *>
  <* warning.yes ok.yes                                      *>
  <*                                                         *>
  <* Call: continuewarning (z, text, name, val, text1, val1);*>
  <*                                                         *>
  <* z     (call and return value, zone). The document, the  *>
  <*       buffering and the position of the document where  *>
  <*       to write the alarm message.                       *>
  <* text  (call value, string).                             *>
  <* text1                                                   *>
  <* name  (call value, long array).                         *>
  <* val   (call value, integer). All values which are writ- *>
  <* val1  ten on the zone z.                                *>
  <*                                                         *>
  <***********************************************************>

  begin
    write_alarm (z, text);
    write       (z, "nl", 1, "sp", 4, 
                 true, 12, name, <:  :>, val, text1, val1);

    errorbits := 2; <*warning.yes, ok.yes*>

  end continue_warning;

#, l1, p-5


l./message mount param page 1;/, l-1, r/81.12.04/88.08.21/
l./<********/, d, d./<*******/, i/
    <***************************************************************>
    <*                                                             *>
    <* The procedure returns the kind of the item given.           *>
    <*                                                             *>
    <* Call : mount_param (seplength, item);                       *>
    <*                                                             *>
    <* mount_param  (return value, integer). The kind of the       *>
    <*              item :                                         *>
    <*              0 seplength<> <s> or ., item not below         *>
    <*              1 seplength = <s> or ., item = mountspec       *>
    <*              2    -"-              ,  -"-   release         *>
    <*              3    -"-              ,  -"-   mt62, mtlh, mto *>
    <*              4    -"-              ,  -"-   mte             *>
    <*              5    -"-              ,  -"-   mt16, mtll, nrz *>
    <*              6    -"-              ,  -"-   nrze            *>
    <*              7    -"-              ,  -"-   mt32            *>
    <*              8    -"-              ,  -"-   mt08            *>
    <*              9    -"-              ,  -"-   mthh            *>
    <*             10    -"-              ,  -"-   mthl            *>
    <* seplength    (call value, integer). Separator < 12 +        *>
    <*              length as for system (4, ...).                 *>
    <* item         (call value, array). An item in                *>
    <*              item (1:2) as for system (4, ...).             *>
    <*                                                             *>
    <***************************************************************>
/
l./message mount param page 2;/, l-1, r/84.05.20/88.08.21/
l./for i := 1 step 1/, d./i := 8/, i/

      for i := 1 step 1 until
        (if seplength <> space_txt and
            seplength <> point_txt then 0 else 10) do
      if item (1) = real ( case i of (
        <:mount:> add 's',
        <:relea:> add 's',
        <:mt62:>         ,
        <::>             ,
        <:mt16:>         ,
        <::>             ,
        <:mt32:>         ,
        <:mt08:>         ,
        <::>             ,
        <::>             )           ) and

         item (2) = real ( case i of (
        <:pec:>          ,
        <:e:>            ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             )           )
    
      or item (1) = real ( case i of (
        <::>             ,
        <::>             ,
        <:mtlh:>         ,
        <::>             ,
        <:mtll:>         ,
        <::>             ,
        <::>             ,
        <::>             ,
        <:mthh:>         ,
        <:mthl:>         )           ) and

         item (2) = real ( case i of (
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             )           )
    
      or item (1) = real ( case i of (
        <::>             ,
        <::>             ,
        <:mto:>          ,
        <:mte:>          ,
        <:nrz:>          ,
        <:nrze:>         ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             )           ) and
 
         item (2) = real ( case i of (
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             ,
        <::>             )           ) then

      begin j := i; i := 10;             end;

/

l./message in savecat head page 2;/, l-1, r/84.10.04/87.04.29/
l./terminate_alarm/,
l2, r/);/, <: in save catalog : :>, local_maxnoofvol);/

l./procedure load_entries ( za/, l./message load entries page 5;/, 
l-1, r/86.10.10/78.04.29/
l./terminate_alarm (out/, r/terminate_alarm/continue_warning/
l./<:incorrect no of segments of part/, 
r/incorrect no of segments of/incomplete/
l1, r/segments/partcatsize/, r/);/, <: transferred : :>, abs (segments));/

l./page 6;/, l1, l./page 6;/, l-1, r/84.11.15/87.04.29/
l./setposition (za (1)/, d, i/
                  blockno (copycount) := blockno (copycount) + 1;
/, l1, p-2
l./if zpart.size  > 0/, r/and/      and/
l1, r/and/      and/
l1, r/and/      and/
l1, r/segments/abs (segments)/
l1, i/
            begin <*warning and correct zpart.size*>
/
l1, r/terminate_alarm/continue_warning/
l1, r/segments/abs (segments)/, r/<:not/
                <:warning : not/, r/else/
              else/
l1, r/<:/  <:warning : /, 
l1, r/segments/zpart.size/, r/);/, <: transferred : :>, abs (segments));/
l1, i/
              zpart.size := abs (segments);
            end <*warning and correct ...*>;
/

l./if entry_found and/, r/and/   and/
l1, r/and/   and/
l1,  r/then/   and/
l1, i/
               (segments >= 0
            or  connect      )  then
/

l./total_segm__count :=/, r/segments/abs (segments)/, l-1, r/1;/      1;/, p1
l./if load and/, r/and/   and/
l1, r/then/   and/
l1, i/
                (segments >= 0
              or connect      ) then
/

l./slice_count (discno)/, i/
                segments := abs (segments);

/

l./message list entry page 2;/, l-1, r/81.12.30/88.08.11/
l./write (z, "sp", 3, true, 7, case modekind/, d./<:mte:>/, i/
        if monrelease < 80 shift 12 + 0 then
          write (z, "sp", 3, true, 7, case modekind of (
          <:  ip:>, <:  bs:>, <:  tw:>, <: tro:>, <: tre:>, <: trn:>,
          <: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
          <: tpt:>, <:  lp:>, <: crb:>, <: crd:>, <: crc:>, <:mtlh:>,
          <: mte:>, <:mtll:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
          <:mthl:>, <:  pl:> ))
        else
          write (z, "sp", 3, true, 7, case modekind of (
          <:  ip:>, <:  bs:>, <:  tw:>, <: tro:>, <: tre:>, <: trn:>,
          <: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
          <: tpt:>, <:  lp:>, <: crb:>, <: crd:>, <: crc:>, <:mt62:>,
          <: mte:>, <:mt16:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
          <:mthl:>, <:  pl:> ));
/

l./message modekind case page 1;/, l-1, r/81.12.30/88.08.11/
l./until 24/, r/24/26/
l./<*mto, mtlh*>/, d./<*mthl*>/, i/
      1 shift 23 +  0 shift 12 + 18, <* mt62, mto, mtlh*>
      1 shift 23 +  2 shift 12 + 18, <* mte*>
      1 shift 23 +  4 shift 12 + 18, <* mt16, nrz, mtll*>
      1 shift 23 +  6 shift 12 + 18, <* nrze*>
      1 shift 23 +  8 shift 12 + 18, <* mt32*>
      1 shift 23 + 12 shift 12 + 18, <* mt08*>
      1 shift 23 +128 shift 12 + 18, <* mthh*>
      1 shift 23 +132 shift 12 + 18, <* mthl*>
/, p-8
l./i := 24/, r/24/26/

l./message open tape/, l-1, r/84.09.26/88.02.11/
l./open (z, modekind/, r/modekind extract 18, doc/
      logand (modekind, -(1 shift 19 + 1)) extract 23, <*clear speed bit*>
      doc/, p-1



l./procedure transfer (za/, 
l./message transfer page 3;/, l-1, r/84.11.12/88.02.03/
l./boolean tapemark/, r/;/, rem_parity;/
l1, r/user (1:2)/user (1:16)/
l./tapemark :=/, l1, i/
      rem_parity:= false     ;
/, p-1
l.#if (segments // segm) > 4#, d5, i#

      if modekind (i) shift 4 < 0 then
      begin <*high speed bit specified*>
        getzone6 (za (1), zdescr);

        zdescr (1) :=
          if segments   < 
             speedlimit / (if modekind (i) shift 9 < 0 then 4 else 1) then
            logand (modekind (i), -(1 shift 19 + 1)) extract 23 <*clear*>
          else
            logor  (modekind (i),   1 shift 19     ) extract 23;<*set  *>

        if test then
          write (out, 
          "nl", 1, <:speed bit = :>, zdescr (1) shift (-19) extract 1);

        setzone6 (za (1), zdescr);
      end;
#, p1
l./"sp", 2, <:n.t. addr/, i/
           "sp", 2, <:area name = :>, procname,
           "sp", 2, <:pos in area :>, file (area), block (area),
/, p1
l./if hwds > 2 then/, i/

        if parity (1) then
        begin <*parity error input tape zone*>
          parity (1) := false;
          rem_parity := true ;

          if sumsegs < segments - segments mod segm then
            segs := segm
          else
          begin
            segs := segments mod segm; <*last block*>
            if segs * 512 < hwds then
              hwds := segs * 512;
          end;

          write (out,
          "nl", 1, "sp", 4, <:loading to:>, 
          "nl", 1, "sp", 4, true, 12, procname,
          <: last :>, segs * 512 - hwds, <: halfwords of segments :>, 
          sumsegs, <: - :>, sumsegs + segs - 1, 
          if expell then <: would be:> else <: are:>, <: zeroed:>,
          "nl", 1);
        end;

/, p1

l./if segs <> segm then segments := sumsegs + segs;/, d, i/
            if segs <> segm
            or hwds =  aux_sync_length then
            begin <*data blocks expired too early*>

              if hwds = aux_sync_length then
              begin <*sync block read as last data block*>
                segs := 0; <*regret record*>
                hwds := 0; <*makes the coming changerecio regret record*>
                changerecio (za, hwds); <*regret record*>

                getposition (za (1), file (i   ), block (i   )); <*log pos before sync*>
                setposition (za (1), file (i   ), block (i   )); <*phys pos = logical*>
                getposition (za (2), file (area), block (area)); 
                setposition (za (2), file (area), block (area)); 
              end;

              segments := sumsegs + segs; <*to terminate loop*>
            end <*data blocks expired too early*>;
/, p1
l./changerecio/, r/ch/if hwds > 0 then 
            ch/

l./page 4;/, l-1, r/84.11.08/88.11.17/
l./transfer (za, i/, l-1, i/

          reading_savecat := true;
/, p-1
l./transfer (za, i/, l2, i/

          reading_savecat := false;
/, p-1
l./if j <> savecatsize/, r/j/abs (j)/
l2, r/incorrect no of segments of/incomplete/
l1, r/);/, <: transferred : :>, abs (j));/
l./page 5;/, l-1,r/1894.11.12/1988.11.17/
l./<*stop zones, maybe tap/, i/

      getzone6 (za (1), zdescr);

      if aux_sync_length > 0  and
         zdescr (16)     > 0  and
         not reading_savecat then <*record length*>
      begin
        <*sync blocks present and present record not one, *>
        <*check that next share has input a sync block and*>
        <*- if not : read on until sync block             *>
        <*- if     : leave                                *>

        integer array       sdescr1, sdescr2, sdescr3 (1:12);
        integer             used_share, next_share, reclength;

        getzone6  (za (1), zdescr);
        used_share     := zdescr (17);     <*save used share*>
        next_share     := used_share + 1;  <*save next share*>
        if next_share  >  zdescr (18) then
          next_share   := 1;              
        zdescr (17)    := next_share;

        getshare6 (za (1), sdescr1, used_share);
        getshare6 (za (1), sdescr2, next_share);

<*      if test then                                                          
        begin                                                                 
          write (out, "nl", 1, <:zone and shares before check next share ::>, 
                      "nl", 1, <:used share = :>, used_share,                 
                      "sp", 1, <:next share = :>, next_share);                
          writezone (za (1), 1);                                              
          writeshare (za (1), used_share);                                    
          writeshare (za (1), next_share);                                    
        end;                                                                  
*>
        setzone6  (za (1), zdescr); <*used share updated*>
        check     (za (1)        ); <*check it*>

        getshare6 (za (1), sdescr3, next_share); <*get checked share*>
        sdescr2   (1) :=   sdescr3  (1) :=    1; <*share.state := ready*>
        setshare6 (za (1), sdescr3, next_share); <*reset the share*>

<*      if test then                                                           
        begin                                                                  
          write (out, "nl", 1, <:zone and shares after  check next share ::>); 
          writezone (za (1), 1);                                               
          writeshare (za (1), used_share);                                     
          writeshare (za (1), next_share);                                     
        end;                                                                   
*>
          reclength := 
          sdescr3  (12)    - sdescr3  (5)  ;
          <*sh.top xferred - sh.first addr*>

        zdescr    (17)  := used_share;
        setzone6  (za (1), zdescr);              <*reset zone*>
        setshare6 (za (1), sdescr1, used_share); <*and shares*>

<*      if test then
        begin       
          integer i;
          write (out, 
                "nl", 1, <:zone and shares before set share next share ::>,
                "nl", 1, <:reclength = :>, reclength,  
                "nl", 1, <:zdescr(16)= :>, zdescr(16));
          writezone (za (1), 1);               
          writeshare (za (1), used_share);     
          writeshare (za (1), next_share);     
          write (out, "nl", 1, <:sdescr2 = :>);
          for i := 1 step 1 until 12 do        
            write (out, "nl", 1, "sp", 10, << dddddd>, sdescr2 (i));
        end;                                   
*>
        setshare6 (za (1), sdescr2, next_share);

        if reclength > aux_sync_length  then
        begin <*too many data blocks, read on until sync block*>
          getposition (za (1), file (i   ), block (i   )); <*log pos before last block*>
          getposition (za (2), file (area), block (area));
          closeinout  (za); <*terminate zones, reinit zone array*>
          block (i) := block (i) + 1; <*log pos after last block*>
          setposition (za (1), file (i   ), block (i   )); <*phys = log pos*>
          setposition (za (2), file (area), block (area));

<*        if test then
            write (out, 
            "nl", 1, <:position before transfer : :>, 
            file (i), block (i),
            "nl", 1, <:-        in area         : :>, 
            file (area), block (area));
*>
          segs :=
            transfer (za, i, copies, file, block, 8388607, endtape, expell);
            <*transfer until sync block, but expell disc zone*>

          sumsegs := sumsegs + segs;

          setposition (za (1), file (i), block (i)); <*save pos in zone*>

<*        if test then
            write (out, 
                   "nl", 1, <:position after transfer : :>, 
                   file (i), block (i),
                   "nl", 1, <:-        in area         : :>, 
                   file (area), block (area));
*>
        end <*too many full length blocks*>;

      end <*aux_sync_length > 0*>;
/, p1

l./<*stop zones, maybe/, i#

\f



<* sw8010/2, load      tape handling procedures      page ... xx...

1988.02.02*>

message transfer               page  6;


#

l./if test then/, i/

       getzone6 (za (2), zdescr);

       name_table_addr := zdescr (6);

      if zdescr (13) >= 32 then <*z.state < 32 == closeinout was here before*>
        closeinout (za); <*reallocate buffer area*>
/
l./getzone6 (za (2)/, d2
l./"nl", 1, <:proc bases/, r/));/),
        "nl", 1, <:segments           = :>, user (12));/, p-1
l./getzone_6 (za (1)/, d2
l./transfer :=/, r/sumsegs/
        if rem_parity then
          - sumsegs
        else
            sumsegs/, p-4

l./message next volume page 3;/, l-1, r/85.02.11/87.04.29/
l./terminate_alarm (/, l2, r/);/, <: block number : :>, block (index));/
l./terminate_alarm (/, l2, r/);/, <: block number : :>, block (index));/

l./procedure end_of_document (ztape,/,
l./page 2;/, l-1, r/84.10.04/87.04.24/

;**************************************
;l./if status/, i/
;       write (out,
;       "nl", 1, "*" , 3, <:blockprocedure end of doc : :>,
;       "nl", 1, "sp", 3, <:status = :>, status);
;
;/, p1
;***************************************

l./if status extract 1 = 1/, r/then/  and/, r/extract/            extract/
l1, i/
          (status shift (-22) extract 1 = 0       <*not parity*>
        or status shift (-13) extract 1 = 1) then <*read error*>
/, l1, r/;/; <*hard error, not parity or read error*>/, p-2

;l./if status shift (-18)/, 
;**********************************
;i/
;
;       write (out,
;       "nl", 1, "sp", 3, <:index  = :>, index ,
;       "nl", 1, "sp", 3, <:oper.  = :>, operation);
;
;/, p-5
;**********************************

l./if status shift (-18)/,
r/if status/if status shift (-22) extract 1 = 1 then
        begin <*parity error*>
          if operation <> 3 then
            give_up (ztape, status, hwds); <*not input*>

          getposition (ztape, i, j);

          write_alarm (out, 
            <:warning : persistent parity error in input from tape:>);

          errorbits := 2; <*warning.yes, ok.yes*>

          write (out,
          "nl", 1, "sp", 4, true, 12, zdescr.docname, 
          <: file, block no :>, i, <:, :>, j);

          parity (index) := true;
          if hwds < 4 then
            hwds := 4; <*not filemark*>
        end <*parity error*> else
        if status/, 
p-12
l./begin <*mode error*>/, l./for i := 1 step 1/, r/6/8/
l2, r/128/8, 12, 128/
l1, r/6/8/
l1, r/6/8/
l2, r/128/8, 12, 128/
l./if nextmode = startmode/, d1, i#

          getstate (ztape, i);

          if nextmode               = startmode <*all modes h been tried*>
          or i shift (-5) extract 1 =         1 <*after inoutrec/chrecio*> then
            give_up (ztape, status, hwds);
#, p-5
l./<:*mode error on/, l2, r#mtlh#mt62/mtlh#, r#mtll#mt16/mtll#, r#<:mthh:>,#
          <:mt32:>,      <:mt08:>, <:mthh:>,     #


l./message program page 2;/, l-1, r/85.01.16/88.08.11/
l./<*obtain area and buffer claim*>/, i/

    <*get monitor release*>
    system (5) move core :(64, dummyia);
    monrelease := dummyia (1); <*rel shift 12 + subrel*>
/, p-3

l./message program page 3;/, l-1, r/85.02.06/87.04.24/
l./end_of_doc/, i/
      parity     (i) :=
/,p1

;*********************************************

l./tape_param_ok :=/, l1, i/

<*write (out, "nl", 1, <:speed limit : :>, "<", 1);
*>
<*stopzone (out, false);*>
<*read (in, speedlimit);
  write (out, "nl", 1, <:speed limit : :>, speedlimit, "nl", 1);
*>
<*stopzone (out, false);*>
  
  speedlimit := 100;
  
/

;**********************************************

l./message program page 4;/, l-1, r/81.12.15/88.08.21/
l./mode_kind (copy_count) := 1 shift 23/, d./1 shift 23+132/, i/

          modekind (copycount) := 1 shift 23              + 18; <*mt62, mtlh, mto*>

          modekind (copycount) := 1 shift 23 + 2 shift 12 + 18; <*mte*>

          modekind (copycount) := 1 shift 23 + 4 shift 12 + 18; <*mt16, mtll, nrz*>

          modekind (copycount) := 1 shift 23 + 6 shift 12 + 18; <*nrze*>

          modekind (copycount) := 1 shift 23+  8 shift 12 + 18; <*mt32*>

          modekind (copycount) := 1 shift 23+ 12 shift 12 + 18; <*mt08*>

          modekind (copycount) := 1 shift 23+128 shift 12 + 18; <*mthh*>

          modekind (copycount) := 1 shift 23+132 shift 12 + 18; <*mthl*>

/

l./message prepare tapes page 1;/, l-1, r/85.02.06/87.04.29/
l./terminate_alarm/,
l2, r/);/, <: block no :>, blockno (copy_count));/

l./message prepare save-loadcat page 2;/, l-1, r/85.01.16/88.11.17/
l./transfer (ztape/, l-1, i/

          reading_savecat := true;
/, p-1
l./if segments <> savecatsize/, i/

          reading_savecat := false;
/, p-1
l./terminate_alarm/, l1, d, i/
            <:incomplete save catalog transferred from tape:>,
/
l1, d
l./savecatsize);/, r/);/, <: transferred : :>, abs (segments));/

f

end
▶EOF◀