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

⟦1aa93a5ea⟧ TextFile

    Length: 6144 (0x1800)
    Types: TextFile
    Names: »tgetconv«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦0b92c64d5⟧ »ctb« 
            └─⟦this⟧ 

TextFile

getconv = set 30 1
scope user getconv
getconv = algol 
begin write(out,<:<12><10> getconv versionid: 76 10 19, 3 <10>:>);
  
begin
 comment  sm 75.09.08  getconv                      ...1...                      ;

   comment the program converts areas that have been copied to magtape by the program
   saveconv.
   each area is copied from tape to disc and is then converted (by means of the standard
   procedure system(10,...).

   program call:
   getconv <tape-id>.<mode> <fileno>.<number> or
   getconv <tape-id>.<mode> or
   getconv <fileno>.<number> or
   getconv

     <tape-id> ::= mt<identifier>
        <mode> ::= mto, mte, nrz or nrze
      <fileno> ::= integer, number of the first file on the tape to be converted
      <number> ::= integer, number of files to be converted (that is until the claims
                 of the process are exceeded)

     default values: mtsaveconv.mto 1.<max>

   a log is written on current output during execution;

   integer procedure convert(index, length);
   value index, length;
   integer index, length;
   begin
      comment the procedure converts characters that are packed in 
      input(index) to an integer. the number of characters (digits)
      is specified by the parameter length;
  
      integer i, j, k;
      integer array cif(1:length);
      for i:=1 step 1 until length do
      begin
         j:=input(index) shift (-8*(length-i)) extract 8;
         for k:=0 step 1 until 9 do
         if j=48+k then
         begin
            cif(i):=k;
            goto contin;
         end;
contin:
      end i;
      j:=0;
      for i:=1 step 1 until length do j:=j*10+cif(i);
      convert:=j;
   end;
\f

  
comment sm 75.09.08  tgetconv                      ...2...                      ;
    
   zone input, area(256,2,stderror);
   integer i, j, k, number, size, paper, fileno, mode, par1, par2, par3, par4;
   real array name,param1,param2, param3, param4, tapeid(1:2);
   integer array moni, syst(1:10);
   boolean tapeok, fileok;
   procedure testtape;
   begin
      integer i;
      if param1(1) shift (-32) shift 32 <> real<:mt:> then goto endproc;
      mode:=-1;
      for i:=1 step 1 until 4 do
        if param2(1)=real(case i of (<:mto:>,<:mte:>,<:nrz:>,<:nrze:>))
          then mode:=(i-1)*2;
      if mode=-1 then goto endproc;
      tapeid(1):=param1(1);  tapeid(2):=param1(2);
      tapeok:=true;
endproc:
   end;

   procedure testfile(param1, param2);
   value param1, param2; real param1, param2;
   begin
      fileno:=param1-1;
      number:=param2;
      if fileno<=0 then fileno:=1;
      fileok:=true;
   end;

   procedure paramerr;
   begin
      write(out,<:<10>parameter error.:>);
      goto endp;
   end;
   moni(2):=long<:dis:> shift (-24) extract 24;
   moni(3):=long<:c:> shift (-24) extract 24;
   for i:=4, 5, 9 do moni(i):=0;
\f


comment sm 75.12.04  tgetconv                    ...2a...                    ;
  
   comment the parameters to the program-call (if any) are checked;
   tapeok:=false; fileok:=false;
   par1:=system(4,1,param1);
   if par1=0 then goto cont;
   par2:=system(4,2,param2);
   par3:=system(4,3,param3);
   if par3=0 then
   begin comment tapeid.mode or fileno.number;
      if par1=4 shift 12 + 10 and
         par2=8 shift 12 + 10 then testtape
      else
      if par1=4 shift 12 + 4 and
         par2=8 shift 12 + 4 then testfile(param1(1), param2(1));
      if -,tapeok and -,fileok then paramerr;
   end
   else
   begin comment tapeid.mode and fileno.number;
      par4:=system(4,4,param4);
      if par1=4 shift 12 + 10 and
         par2=8 shift 12 + 10 then testtape;
      if tapeok and
         par3=4 shift 12 + 4 and
         par4=8 shift 12 + 4 then testfile(param3(1), param4(1));
      if -,tapeok or -,fileok then paramerr;
   end;

cont:
   if -,tapeok then
   begin
      tapeid(1):=real<:mtsav:> add 101;
      tapeid(2):=real<:conv:>;
      mode:=0;
   end;
   i:=1;
   open(input,mode shift 12+18, string tapeid(increase(i)),0);
   if fileok then goto firstfile;
   fileno:=1;
   setposition(input,fileno,0);
   inrec6(input,512);
   number:=convert(4,3);
\f

  
comment sm 75.09.08  tgetconv                      ...3...                      ;
  
firstfile:
   if number<=0 then goto endprog;
   write(out,<:<10> calls of convert:<10>answer<10>     papertype<10>:>,
         <:          filename<10>:>);
   for i:=1 step 1 until number do
   begin
      fileno:=fileno+1;  setposition(input,fileno,0);
      inrec6(input,512);
      if input(2)=real<:chang:> add 101 then
      begin
         comment the current file specifies a new papertype;
         fileno:=fileno+1;  setposition(input,fileno,0);
         inrec6(input,512);
      end;
      if input(2)=real<:all f:> add 105 then goto endprog;
         comment no more files to be converted;
  
      name(1):=input(3);
      name(2):=input(4);
      paper:=convert(7,3);
      size:=convert(9,4);
      moni(1):=size+4;
      size:=size+3;
      j:=1;
      open(area,4,string name(increase(j)),0);
      monitor(40,area,0,moni);  comment create area;
      outrec6(area,512);
      comment the area is copied from tape to disc;
      for k:=1 step 1 until 128 do area(k):=input(k);
      for j:=1 step 1 until size do
      begin
         outrec6(area,512);
         inrec6(input,512);
         for k:=1 step 1 until 128 do area(k):=input(k);
      end;
      area(128):=area(128) shift (-8) shift 8 add 25;
      close(area,true);
  
      comment the parameters to the system(10...)-call are initialised;
      for j:=1 step 1 until 8 do syst(j):=case (j) of (
      30 shift 12 + 1 shift 9 + 1,
      long <:con:> shift (-24) extract 24,
      long <:v:> shift (-24) extract 24,
      paper,
      name(1) shift (-24) extract 24,
      name(1) extract 24,
      name(2) shift (-24) extract 24,
      name(2) extract 24);
      system(10,1,syst);  comment message to boss, convert area;
      j:=1;
      write(out,<:<10>:>,<<ddd>,syst(1),<<  ddd>,fileno,<:  :>,
            string name(increase(j)));
   end i;
endprog:
   setposition(out,0,0);
   close(input, true);
endp:
end
end;
▶EOF◀