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

⟦445ceec0d⟧ TextFile

    Length: 6144 (0x1800)
    Types: TextFile
    Names: »linkcentral«, »linkcntr4tx «

Derivation

└─⟦4ee9f7d29⟧ Bits:30008158 SW8002/2
    └─⟦1aff65501⟧ 
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦1aff65501⟧ »ncp4pack    « 
            └─⟦0af7ac4b3⟧ 
                └─⟦this⟧ »linkcentral« 
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »linkcntr4tx « 

TextFile


begin
  <*linkcentral*>
  integer array zdescr(1:20),shdescr(1:12);
  zone z(6,1,stderror),p(1,1,stderror),px(1,1,stderror);
  integer bsmkind,bsbufs,bsbufsize,counter,
  twmkind,twbufs,twbufsize,
  ptrmkind,ptrbufs,ptrbufsize,
  ptpmkind,ptpbufs,ptpbufsize,
  lptmkind,lptbufs,lptbufsize,
  cdrmkind,cdrbufs,cdrbufsize,
  mtmkind,mtbufs,mtbufsize,
  fdmkind,fdbufs,fdbufsize,
  address;
  boolean newname;



  procedure bs(devno,devname);
  integer devno;
  string devname;
  linkup(bsmkind,bsbufs,bsbufsize,devno,devname);



  procedure tw(devno,devname);
  integer devno;
  string devname;
  linkup(twmkind,twbufs,twbufsize,devno,devname);



  procedure ptr(devno,devname);
  integer devno;
  string devname;
  linkup(ptrmkind,ptrbufs,ptrbufsize,devno,devname);



  procedure ptp(devno,devname);
  integer devno;
  string devname;
  linkup(ptpmkind,ptpbufs,ptpbufsize,devno,devname);



  procedure lpt(devno,devname);
  integer devno;
  string devname;
  linkup(lptmkind,lptbufs,lptbufsize,devno,devname);



  procedure cdr(devno,devname);
  integer devno;
  string  devname;
  linkup(cdrmkind,cdrbufs,cdrbufsize,devno,devname);



  procedure mt(devno,devname);
  integer devno;
  string devname;
  linkup(mtmkind,mtbufs,mtbufsize,devno,devname);



  procedure fd(devno,devname);
  integer devno;
  string devname;
  linkup(fdmkind,fdbufs,fdbufsize,devno,devname);



  procedure host(hostno,hostid,homereg,netid);
  integer hostno,hostid,homereg,netid;
  begin
    shdescr(7):=hostno;
    shdescr(8):=hostid;
    shdescr(9):=homereg shift 12 + netid;
    counter:=counter+1;
  end host;



  procedure name(devicename);
  string devicename;
  begin
    open(px,0,devicename,0);
    counter:=counter+1;
    newname:=true;
  end name;


  procedure sendrelease(address);
  integer address;
   begin
     integer i, j, tries, maxtries; integer array help(1:12), help1(1:20);
     maxtries:=50;
     tries:=0;
     for i:=1 step 1 until 12 do
        help(i):=shdescr(i);
     getzone6(z,help1);
     shdescr(4):=2 shift 12 + 1;
     shdescr(7):=address;
     setshare6(z,shdescr,1);
     monitor(16,z,1,shdescr);
     monitor(18,z,1,shdescr);
testready:
     for i:=1 step 1 until 12 do
       shdescr(i):=help(i);
     shdescr(4):=1 shift 12 + 1 shift 2 + 1;
     shdescr(5):=zdescr(19) + 1;
     shdescr(6):=zdescr(19) + 1 + 20;
     shdescr(7):=address;
     setshare6(z,shdescr,1);
     monitor(16,z,1,shdescr);
     tries:=tries+1;
     i:=monitor(18,z,1,shdescr); 
     j:=shdescr(1) shift (-12) extract 3;
     if i=1 and (j=1 or j=2) and tries<maxtries then
       goto testready;
     for i:=1 step 1 until 12 do
       shdescr(i):=help(i);
     setzone6(z,help1);
     setshare6(z,shdescr,1);
  end sendrelease;


  procedure releaselink(devname);
   string devname;
   begin
     zone zz(1,1,stderror);
     integer array ia(1:2);
     integer i;
     counter:=counter+1;
     open(zz,0,devname,0);
     address:=monitor(4,zz,i,ia);
     if address<>0 then
     sendrelease(address);
     close(zz,true);
   end releaselink;



  procedure linkup(mkind,bufno,bufsize,devno,devname);
  integer mkind,bufno,bufsize,devno;
  string devname;
  begin
    integer i,j;
    integer array field iaf;
    integer array name(1:20);
    counter:=counter+1;
    open(p,0,devname,0);
    getzone6(p,name);
    close(p,true);
    iaf:=0;
    shdescr(4):=1 shift 12 + 7 shift 1 +0;
    shdescr(5):=zdescr(19)+1;
    shdescr(6):=zdescr(19)+1+20;
    setshare6(z,shdescr,1);
    zdescr(14):=zdescr(19);
    zdescr(15):=zdescr(19)+zdescr(20);
    zdescr(16):=24;
    setzone6(z,zdescr);
    begin
      integer array start,stop(1:2);
      integer pheripherals;
      system(5,74,start);
      system(5,76,stop);
      pheripherals:=(stop(1)-start(1))/2-1;
      begin
        integer array nametable(0:pheripherals);
        integer array field iaf;

        iaf := -2;

        system(5,start(1),nametable.iaf);
         if devno<=pheripherals then
         sendrelease(nametable(devno));
      end;
    end;
    z.iaf(1):=mkind;
    z.iaf(2):=bufno;
    z.iaf(3):=bufsize;
    for i:=4 step 1 until 7 do
    z.iaf(i):=name(i-2);
    z.iaf(8):=devno;
    monitor(16,z,1,shdescr);
    if monitor(18,z,1,name)=1 then
    begin
      if newname then
      begin
        if name(1) extract 12 = 0 then
        begin
          if monitor(54,px,devno,shdescr)<>0 then
          write(out,<:<10>error in call no.:>,<<dddd>,
               counter-1,<:<10>***devname:>);
        end;
        newname:=false;
        close(px,true);
      end;
      if name(1) extract 12 =-1 then
      write(out,<:<10>error in call no.:>,<<dddd>,counter,<:<10>***operation rejected:>)
      else
      if name(1) extract 12<>0 then
      write(out,<:<10>error in call no.:>,<<dddd>,counter,
           case name(1) extract 12 of
           (<:<10>***device trouble :>,
           <:<10>***device reserved:>,
           <:<10>***no resources:>));
    end
    else
  begin
    write(out,<:<10>error in call no.:>,<<dddd>,counter,
         <:<10>***unintelligible:>);
    close(px,true);
  end;
  end linkup;



  newname:=false;
  counter:=0;
  bsmkind:=6;
  bsbufs:=1;
  bsbufsize:=768;
  twmkind:=8;
  twbufs:=1;
  twbufsize:=128;
  ptrmkind:=2 shift 12 +10;
  ptrbufs:=1;
  ptrbufsize:=128;
  ptpmkind:=2 shift 12 +12;
  ptpbufs:=1;
  ptpbufsize:=172;
  lptmkind:=14;
  lptbufs:=1;
  lptbufsize:=172;
  cdrmkind:=10 shift 12+16;
  cdrbufs:=1;
  cdrbufsize:=256;
  mtmkind:=18;
  mtbufs:=1;
  mtbufsize:=4*768+18;
  fdmkind:=22;
  fdbufs:=1;
  fdbufsize:=342*3//2;
  open(z,0,<:host:>,0);
  getzone6(z,zdescr);
  getshare6(z,shdescr,1);
  algol copy.1;
end;
▶EOF◀