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

⟦83b6d3d17⟧ TextFile

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

Derivation

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

TextFile

basemove=algol connect.no,
; xref.yes list.yes bossline.yes blocks.yes survey.yes

begin
   comment program for moving the entry bases of all entries with
   a given base to another base without changing the content of the entry
   in any other way. Program call:
   basemove  from.<l. lim>.<u. lim>  to.<l. lim><u. lim>
   The program scans the catalog, and whenever it finds an entry where
   the base exactly corresponds to the from-base, an attempt is made to move 
   the bases of that entry.  A message is issued for each entry found. This
   message states the result of the attempted moving.
   When the whole catalog has been scanned, a message containing the number
   of entries found, and - if any - the number of entries which could not be
   moved of various reasons.
   Alarm messages:
   call err 1       The from parameters cannot be found.
   call err 2       The to parameters cannot be found.
   base err 0       The std base of the process in which this
   program runs does not contain both sets of bases.
   base err 1       Something wrong with the from bases.
   base err 2       Something wrong with the to bases
   In case of any of these alarms, no base moving will be made at all.;
   
   \f


   
   
   
   integer i, j, entries, notmoved, parno, result, sepleng;
   integer array frombase, tobase(1:2), procbase(1:8);
   long array progname, outfile, chainname (1:2);
   real array param, areaname(1:2);
   integer field first;
   integer array field base;
   long array field name;
   zone cat(128, 1, eod), entry(1, 1, stderror);
   boolean single, move, explain;
   
   procedure eod(z, s, b);
   zone z;
   integer s, b;
   if s extract 1 = 1 then stderror(z, s, b) else goto endcat;
   
   procedure callerror;
   begin
      if outfile(1)<>long <::> then
      unstack_current_output;
      write (out, "nl", 1, <:***:>, progname, <: call error:>,
      "nl", 2, 
      <:        call :

                (<outfile> =) 
                                                                00
                basemove from.<lower>.<upper> to.<lower>.<upper>
                                                                1

                or

                basemove name.<area> from.<low>.<up> to.<low>.<up>

      :>, "nl", 1);
      errorbits := 3;
      goto exit;
   end;
   
   \f


   
   
   
   
   integer
   procedure stack_current_output (file_name);
   long array                      file_name ;
   begin
      integer                       result ;
      result := 2;
      <*1<1 <=> 1 segment, preferably disc*>
      
      fp_proc (29,      0, out, chain_name);
      <*stack c o*>
      fp_proc (28, result, out, file__name);
      <*connect  *>
      
      if result <> 0 then
      fp_proc (30,    0, out, chain_name);
      <*unstack  *>
      
      stack_current_output := result;
      
   end stack_current_output;
   
   procedure unstack_current_output ;
   begin
      fp_proc (34, 0, out,         25);
      <*close  up*>
      fp_proc (79, 0, out,          0);
      <*terminate*>
      fp_proc (30, 0, out, chain_name);
      <*unstack  *>
      
   end unstack_current_output;
   
   \f


   
   
   
   trapmode := 1 shift 10;
   <*no end alarm written*>
   
   system (4, 0, out_file);
   sepleng :=
   system (4, 1, progname);
   
   if sepleng shift (-12) <> 6 <*=*> then
   begin <*noleft side, progname is param after programname*>
      for i := 1, 2 do
      begin
         prog_name (i) := out_file (i);
         out__file (i) := long <::>   ;
         parno         := 1           ;
      end;
   end <*no left side*> 
   else
   parno           := 2;
   
   if out_file (1) <> long <::> then
   begin <*stack current out and connect*>
      result := stack_current_output (out_file);
      
      if result <> 0 then
      begin
         write (out, "nl", 1, <:***:>, progname, "sp", 1, <:connect :>, outfile,
         "sp", 1, case result of (
         <:no resources:>,
         <:malfunction:>,
         <:not user, not exist:>,
         <:convention error:>,
         <:not allowed:>,
         <:name format error:>  ));
         
         out_file (1) := long <::>;
      end;
   end <*stack current out and connect*>;
   explain:=true;
   
   \f


   
nextparam:
   single:=false;
   move:=true;
   param(1):=0;
   entries := notmoved := 0;
   first := base := 2;
   name := 6;
   
   i := system (4) fpparam :(parno, param);
   
   if i = 0 then
   begin 
      if explain then callerror else 
      goto stop
   end
   else
   if i <> 4 shift 12 + 10 then
   callerror;
   explain:=false;
   if param(1)=real <:name:> then
   begin
      i:=system(4, parno+1, areaname);
      if i<> 8 shift 12 + 10 then callerror;
      parno:=parno+2;
      single:=true;
      move:=false;
   end 
   else
   if param(1)<>real<:from:> then
   callerror;
   
   
   for i := 1, 2 do
   begin
      if system (4) fpparam :(parno+i, param ) <> 8 shift 12 + 4 then
      callerror;
      frombase (i) := round param (1);
   end;
   
   system(4)fpparam:(parno+3, param);
   if param(1)<>real<:to:> then callerror;
   
   for i := 1, 2 do
   begin
      if system (4) fpparam :(parno+i+3, param) <. 8 shift 12 + 4 then
      callerror;
      tobase (i) := round param (1);
   end;
   
   system(11)catbases:(0, procbase);
   i := tobase(1);
   if i > frombase(1) then i := frombase(1);
   j := tobase(2);
   if j < frombase(2) then j := frombase(2);
   if procbase(3) > i or
   procbase(4) < j then 
   begin
      write(out, <:<10>***:>, progname,<: base error<10>:>);
      write(out, <:entry base outside process base<10>:>,
      <<-dddddddd>, <:entry base :>, i,j, <:<10>:>,
      <:proc base  :>, procbase(3), procbase(4), <:<10>:>);
      errorbits := 3;
      goto stop;
   end;
   
   open(cat, 4, <:catalog:>, 1 shift 18);
   open(entry, 0, <::>, 0);
   monitor(72)setcatbase:(entry, 0, frombase);
   
   for i := inrec6(cat, 34) while true do
   if cat.first shift(-12) <> 4095 then
   begin
      if cat.base(1) = frombase(1) and
      cat.base(2) = frombase(2) then
      begin
         close(entry, false);
         j:=1;
         open(entry, 0, cat.name(increase(j)), 0);
         if single then 
         begin
            if areaname(1) shift (-24) extract 24 = cat.name(1) shift (-24) extract 24
            and
            areaname(1) extract 24 = cat.name(1) extract 24
            and
            areaname(2) shift (-24) extract 24 = cat.name(2) shift (-24) extract 24
            and
            areaname(2) extract 24 = cat.name(2) extract 24
            then
            begin
               move:=true;
            end
            else 
            begin 
               move:=false;
            end;
         end;
         if move then
         begin
            entries:=entries+1;
            j := monitor(74)setentrybase:(entry, 0, tobase);
            if j <> 0 then notmoved := notmoved + 1;
            write(out, true, 12, cat.name, true, 28, case j+1 of
            (<:  bases moved properly:>,
            <:  undefined base error:>,
            <:  catalog io error:>,
            <:  not found/name conflict:>,
            <:  protected/base illegal:>,
            <:  entry in use:>,
            <:  name format illegal:>,
            <: maincat not present:>),
            "sp", 1, <<ddddddd>, <:from.:>, frombase (1), frombase (2), 
            <: to.:>, tobase (1), tobase (2),
            if j > 0 then <: not moved<10>:> else <:<10>:>);
         end;
      end;
   end;
   
endcat:
   write(out, entries, if entries >1 then <: entries found:> else <: entry found:>);
   if notmoved = 0 then write(out, <: and moved ok<10>:>)
   else
   write(out, <:<10>***:>, notmoved,
   if notmoved >1 then <: entries :> else <: entry :>, <:not moved, see above!<10>:>);
   close(entry, false);
   open(entry, 0, <::>, 0);
   monitor(72)setcatbase:(entry, 0, procbase);
   parno:=parno+6;
   close (entry, true);
   close (cat,true);
   errorbits := 2;
   <*warning.yes*>
   goto nextparam;
stop:
   
   if outfile (1) <> long <::> then
   unstack_current_output;
exit:
   
end

scope login basemove
finis
▶EOF◀