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

⟦e5565ffbf⟧ TextFile

    Length: 17664 (0x4500)
    Types: TextFile
    Names: »manindextxt«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦720b7e52e⟧ »calprog« 
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦720b7e52e⟧ »calprog« 
            └─⟦this⟧ 

TextFile

; ali time 5 0
lookup indexlist
if ok.yes
mode list.yes
clear writeindex
writeindex=set 150
permanent writeindex.2
if list.yes
writeindex=algol list.yes
writeindex=algol
writeindex
14 2 77
begin
boolean array ba(1:12);
integer i,j,k,oldentries,entries,catkey,content,seg,maxkey,ck,
    page,lines,res;
boolean init,describe,manual,test,update;
integer array ia(0:3),ot,tail(1:10),t(-6:10);
integer array field entry;
integer field ow8,key,cf,segm;
real array field name,desf;
real array output,descat,newcat,sname(1:3);
zone cat(128,1,stderror);

boolean procedure findnameanddes(name,f,print,entries,fbase);
value print,entries; boolean print;
integer entries,fbase;
array f,name;
begin
integer dnr,type,page;
array field namepart;
integer array field des;
integer field nf1,nf2,n,ns;
integer di;
boolean search;
findnameanddes:=false;
n:=2;
nf1:=-12;
nf2:=(entries)*12;
di:=2;
if test then begin
  write(out,<:<10>name to search :>,string inc(name));
  end;
search:=true;
for ns:=(nf2+nf1)//24*12+di while search and di<10 do begin
  if test then begin
    namepart:=ns-di;
    write(out,<:<10>next name :>,string inc(f.namepart),
    <:     :>,nf1,<:<=:>,ns-di,<:<=:>,nf2,<:  d :>,di);
    end;
  if f.ns<name.n then nf1:=ns-di;
  if f.ns>name.n then nf2:=ns-di;
  if f.ns=name.n then
    begin
    if ns>12 and name.n<>0 then begin
    for nf1:=ns,nf1-12 while f.nf1=name.n  and nf1>0 do;
    nf1:=nf1-di;
    end;
    if ns<entries*12-12 and name.n<>0 then begin
    for nf2:=ns,nf2+12 while f.nf2=name.n and nf2<entries*12 do;
    nf2:=nf2-di;
    end;
    search:=true;
    n:=n+2;
    di:=di+2;
    end else search:=nf1+12<nf2;
  end;
if di=10 then begin
  findnameanddes:=true;
  des:=fbase:=ns-di;
  dnr:=f.des(5);
  page:=f.des(6);
  type:=dnr extract 12;
  dnr:=dnr shift (-12);
  if test then write(out,<:<10>dnr,type,page :>,dnr,type,page);
  if print then lines:=lines+describedin(dnr,type,page);
  end else fbase:=-1;
end find name and describe;

procedure writeelement(inz,desc,wrdesc);
value wrdesc; boolean wrdesc;
zone inz; array desc;
begin
  lines:=0;
  page:=1;
  write(out,<:<12><10>:>,false add 32,60,<:page 1:>);
  setposition(inz,0,0);
  for i:=1 step 1 until entries do
  begin
    inrec6(inz,64);
    for j:=1 step 1 until 17 do
    t(j-7):=inz.entry(j);
    write(out,<:<10><10>:>); if inz.segm<0 then inz.segm:=0;
    write(out,false add 32,12-write(out,string inc(inz.name)));
    if catkey<0 then write(out,<:key =:>,
      << dd>,inz.key extract 12) else
      write(out,<: :>);
    if inz.segm>0 then write(out,<:,  :>,<<dddd>,inz.segm,<: segment:>);
    if inz.segm>1 then write(out,<:s:>);
    lines:=lines+2+writestdent(t,ba);
    if wrdesc then findnameanddes(inz.name,desc,true,entries,0);
    if lines>55 and i<entries then begin 
      lines:=0; page:=page+1;
      write(out,<:<12><10>:>,false add 32,60,<:page :>,<<d>,page);
      end;
  end;
end writeelement;

  open(cat,4,<:catalog:>,0);
  generaten(sname);
  cleararray(tail); tail(1):=300;
  createentry(sname,tail);
  stackcuri;
  i:=connectcuri(sname);
  if i<>0 then alarm(<:***workarea :>,string inc(sname),i);
  setposition(in,0,0);
  for i:=1 step 1 until 12 do
  ba(i):=false; name:=6;
  entry:=seg:=0; segm:=16; cf:=34; ow8:=32; key:=2;
  oldentries:=entries:=0;
  fplist:=true;
  initfp;
  if readlsfp(output) then begin
    stackcuro;
    i:=connectcuro(output);
    if i>0 then begin
      unstackcuro;
      cleararray(ot);
      ot(1):=300;
      createentry(output,ot);
      i:=permentry(output,2);
      i:=connectcuro(output);
      if i<>0 then begin
        unstackcuro;
        alarm(<:***left side :>,string inc(output),<: unknown:>);
        end;
     end;
  end;
  test:=false;
  readbfp(<:test:>,test);
  init:=false;
  readbfp(<:init:>,init);
  update:=false;
  readbfp(<:update:>,update);
  init:=init and -,update;
  describe:=true;
  readbfp(<:describe:>,describe);
  content:=4;
  readifp(<:content:>,content);
  manual:=false or test;
  readbfp(<:manual:>,manual);
  manual:=manual and content<=4;
  describe:=describe or manual;
  catkey:=-1;
  readifp(<:catkey:>,catkey);
  maxkey:=if catkey<0 then 5 else 24;
  readifp(<:maxkey:>,maxkey);
  ia(0):=6; ia(1):=8; ia(2):=10; ia(3):=12;
  for i:=inrec(cat,0) while i<>0 do
  begin
    inrec6(cat,34);
    if cat.ow8 shift (-12)=content and cat.key<>-1 then
    begin
    ck:=cat.key extract 12;
    if ck>0 and ck<=maxkey and (ck=catkey or catkey<0) then
      begin
        outrec6(in,64);
        for j:=1 step 1 until 8 do
        in(j):=cat(j); in.cf:=cat.cf;
        if cat.segm>0 then seg:=seg+cat.segm;
        entries:=entries+1;
      end;
    end;
  end;
  setposition(in,0,0);
  if test then write(out,<:<10>entries :>,entries);
  if entries>0 then sort(sname,entries,64,ia);
  close(cat,true);

  if init or update or manual then begin
    comment a description record is
      12 bytes. 0-7 is name of procedure/variable. 8 is
      the description number (dnr). 9 is type of procedure/
      variable. 10-11 is the page number in the manual if any.;
    cleararray(descat);
    packtext(descat,case content+1 of(
      <:dtextdes:>,<:dpunchdes:>,<:dfpdes:>,<:dsysdes:>,
      <:dalgdes:>));
    i:=lookuptail(descat,tail);
    oldentries:=if init then entries else
      if i<>0 then 0 else tail(10);
    if test and oldentries>0 then write(out,
      <:<10>oldentries :>,oldentries);
    if i<>0 and (manual or update) and -,init then begin
       alarm(<:***description catalog :>,
        string inc(descat),<: unknown:>,i);
       end else if i<>0 and init then begin
         cleararray(tail);
         tail(1):=entries//32+20;
         tail(10):=entries;
         i:=createentry(descat,tail);
         i:=permentry(descat,2);
         if i<>0 then alarm(<:***description catalog :>,
           string inc(descat),<: cannot be created:>);
          cleararea(string inc(descat));
       end;
    open(cat,4,string inc(descat),0);
    setposition(in,0,0);
    end init or update or manual;
j:=if entries>oldentries then entries else oldentries;
begin
array f(1:if init or manual or update then 3*j else 1);
cleararray(f);

    if init then begin
    if init then write(out,<:<10><10>initialize catalog:>);
    setposition(cat,0,0);
    for j:=1 step 1 until entries do begin
      inrec6(in,64); outrec6(cat,12);
      for i:=1,2 do cat(i):=f(3*(j-1)+i):=in.name(i);
      cat(3):=0.0 shift (-48);
      if test then write(out,<:<10>:>,j,<:  :>,string inc(cat));
      end;
    setposition(cat,0,0);
    tail(10):=entries;
    i:=changeentry(descat,tail);
    if i<>0 then alarm(<:***changeentry descat :>,string inc(descat),i);
    end initialize else if update then begin
    if test then write(out,<:<10><10>update catalog:>);
    setposition(cat,0,0);
    for j:=1 step 1 until oldentries do begin
      inrec6(cat,12);
      for i:=1,2,3 do f(3*(j-1)+i):=cat(i);
      if test then write(out,<:<10>:>,j,<:  :>,string inc(cat));
      end;
    close(cat,true);
    cleararray(newcat);
    generaten(newcat);
    cleararray(tail);
    tail(1):=entries//32+20; tail(10):=entries;
    i:=createentry(newcat,tail);
    if i<>0 then alarm(<:***update newcat impossible :>,
     string inc(newcat),<: segments :>,tail(10),<: res :>,i);
    i:=permentry(newcat,2);
    if i<>0 then alarm(<:***update newcat impossible :>,
      string inc(newcat),<: permanent :>,i);
    open(cat,4,string inc(newcat),0);
    setposition(cat,0,0);
    setposition(in,0,0);
    if test then write(out,<:<10><10>write new catalog to bs:>);
    for j:=1 step 1 until entries do begin
      inrec6(in,64); outrec6(cat,12);
      if findnameanddes(in.name,f,test,oldentries,desf) then begin
        cat(3):=f.desf(3);
        end else cat(3):=0.0 shift (-48);
      for i:=1,2 do cat(i):=in.name(i);
      end make new newcat;
    setposition(cat,0,0);
    setposition(in,0,0);
    removeentry(descat);
    i:=renameentry(newcat,descat);
    if i<>0 then alarm(<:***rename updated catalog :>,
     string inc(newcat),<: to :>,string inc(descat),
     <: impossible :>,i);
    close(cat,true);
    open(cat,4,string inc(descat),0);
    end;
if manual then begin
   if test then write(out,<:<10><10>generate list of manuals:>);
    setposition(cat,0,0);
    for j:=1 step 1 until oldentries do begin
      inrec6(cat,12);
      for i:=1,2,3 do f(3*(j-1)+i):=cat(i);
      if test then write(out,<:<10>:>,j,<:  :>,string inc(cat));
      end read descat;
    setposition(cat,0,0);
    end manual;
    close(cat,true);
  if describe then begin
  if test then write(out,<:<10><10>describe cataloged names:>);
  if -,test then begin
  write(out,<:<12>:>,false add 10,7,
   false add 32,29,<:Index:>,false add 32,17);
  writedate(out,5,0.0);
  write(out,false add 10,7);
  if content<5 then write(out,false add 32,20,
    <:H. C. Ørsted Institute:>,false add 10,3,false add 32,24,
    <:RC4000 software:>,false add 10,4,false add 32,case content+1 of
    (25,20,22,25,10),
  case content+1 of (<:text files:>,<:punched card files:>,
    <:fp-utility programs:>,<:system programs:>,
    <:algol 6/fortran procedures and variables:>));;
  write(out,false add 10,20);
  write(out,<:<10>segments =:>,seg,<:<10>catalog entries =:>,entries);
  if catkey<0 then 
    write(out,<:<10>catalog keys 1 through :>,<<d>,maxkey) else
    write(out,<:<10>catalog key = :>,<<d>,catkey);
  end;
  writeelement(in,f,manual);
  end write descriptions;
end describe entries;

unstackcuri;
removeentry(sname);
outend(12);
if fpout then closeout;
end;
lookup indextest
if ok.yes
algind=writeindex key.2
lookup indexlist
if ok.yes
mode list.yes
clear updateindex
updateindex=set 150
permanent updateindex.2
if list.yes
updateindex=algol list.yes
updateindex=algol
updateindex
14 2 77
begin
boolean array ba(1:12);
integer i,j,k,dnr,type,entries,catkey,content,seg,ck,
    page,lines,res,char;
boolean describe,test;
integer array ot,tail(1:10),t(-6:10);
integer array field entry;
integer field cf,segm;
real array field name,desf;
real array output,descat,sname(1:3);

boolean procedure findnameanddes(name,f,print,entries,fbase);
value print,entries; boolean print;
integer entries,fbase;
array f,name;
begin
integer dnr,type,page;
array field namepart;
integer array field des;
integer field nf1,nf2,n,ns;
integer di;
boolean search;
findnameanddes:=false;
n:=2;
nf1:=-12;
nf2:=(entries)*12;
di:=2;
if test then begin
  write(out,<:<10>name to search :>,string inc(name));
  end;
search:=true;
for ns:=(nf2+nf1)//24*12+di while search and di<10 do begin
  if test then begin
    namepart:=ns-di;
    write(out,<:<10>next name :>,string inc(f.namepart),
    <:     :>,nf1,<:<=:>,ns-di,<:<=:>,nf2,<:  d :>,di);
    end;
  if f.ns<name.n then nf1:=ns-di;
  if f.ns>name.n then nf2:=ns-di;
  if f.ns=name.n then
    begin
    if ns>12 and name.n<>0 then begin
    for nf1:=ns,nf1-12 while f.nf1=name.n and nf1>0 do;
    nf1:=nf1-di;
    end;
    if ns<entries*12-12 and name.n<>0 then begin
    for nf2:=ns,nf2+12 while f.nf2=name.n and nf2<entries*12 do;
    nf2:=nf2-di;
    end;
    search:=true;
    n:=n+2;
    di:=di+2;
    end else search:=nf1+12<nf2;
  end;
if di=10 then begin
  findnameanddes:=true;
  des:=fbase:=ns-di;
  dnr:=f.des(5);
  page:=f.des(6);
  type:=dnr extract 12;
  dnr:=dnr shift (-12);
  if test then write(out,<:<10>dnr,type,page :>,dnr,type,page);
  if print then lines:=lines+describedin(dnr,type,page);
  end else fbase:=-1;
end find name and describe;

procedure writeelement(inz,desc,wrdesc);
value wrdesc; boolean wrdesc;
zone inz; array desc;
begin
integer field key;
  key:=2;
  lines:=0;
  setposition(inz,0,0);
  for i:=1 step 1 until entries do
  begin
    inrec6(inz,64);
    for j:=1 step 1 until 17 do
    t(j-7):=inz.entry(j);
    write(out,<:<10><10>:>); if inz.segm<0 then inz.segm:=0;
    write(out,false add 32,12-write(out,string inc(inz.name)));
    if catkey<0 then write(out,<:key =:>,
      << dd>,inz.key extract 12) else
      write(out,<: :>);
    if inz.segm>0 then write(out,<:,  :>,<<dddd>,inz.segm,<: segment:>);
    if inz.segm>1 then write(out,<:s:>);
    lines:=lines+2+writestdent(t,ba);
    if wrdesc then findnameanddes(inz.name,desc,true,entries,0);
  end;
end writeelement;

  for i:=1 step 1 until 12 do
  ba(i):=false; name:=6;
  entry:=seg:=0; segm:=16; cf:=34;
  entries:=0;
  if readlsfp(output) then begin
    stackcuro;
    i:=connectcuro(output);
    if i>0 then begin
      unstackcuro;
      cleararray(ot);
      ot(1):=300;
      createentry(output,ot);
      i:=permentry(output,2);
      i:=connectcuro(output);
      if i<>0 then begin
        unstackcuro;
        alarm(<:***left side :>,string inc(output),<: unknown:>);
        end;
     end;
  end;

  fplist:=true;
  initfp;
  test:=false;
  readbfp(<:test:>,test);
  describe:=false;
  readbfp(<:describe:>,describe);
  describe:=describe or test;
  content:=4;
  readifp(<:content:>,content);
    comment a description record is
      12 bytes. 0-7 is name of procedure/variable. 8 is
      the description number (dnr). 9 is type of procedure/
      variable. 10-11 is the page number in the manual if any.;
    cleararray(descat);
    packtext(descat,case content+1 of(
      <:dtextdes:>,<:dpunchdes:>,<:dfpdes:>,<:dsysdes:>,
      <:dalgdes:>));
    i:=lookuptail(descat,tail);
    entries:=if i<>0 then 0 else tail(10);
    if test and entries>0 then write(out,<:<10>entries :>,entries);
    if i<>0 then
       alarm(<:***description catalog :>,
        string inc(descat),<: unknown:>,i);
   stackcuri;
   i:=connectcuri(descat);
    setposition(in,0,0);
    begin
    array f(1:3*entries);
    cleararray(f);
    for j:=1 step 1 until entries do begin
      inrec6(in,12);
      for i:=1,2,3 do f(3*(j-1)+i):=in(i);
      end;
    setposition(in,0,0);
    unstackcuri;
    write(out,<:<10>Input name, description-, type-, and page numbers:>);
    outend(10);
    char:=0;
    for char:=char while char<>25 do begin
       cleararray(sname);
      readstring(in,sname,1); repeatchar(in);
      readchar(in,char);
      dnr:=type:=page:=0;
      if char<>25 and char<>10 then begin
        read(in,dnr); repeatchar(in);
        readchar(in,char);
        if char<>25 and char<>10 then begin
          read(in,type); repeatchar(in);
          readchar(in,char);
        if char<>25 and char<>10 then begin
          read(in,page); repeatchar(in);
          readchar(in,char);
          end;
        end;
        end read parameters;
    if dnr<=0 and type<=0 and page<=0 and char<>25 then begin
      write(out,<:<10>:>,string inc(sname),<: not changed:>);
      outend(10);
      end else if test and char<>25 then begin
      write(out,<:<10>new dnr, type, page :>,dnr,type,page);
      end;
    if char=25 then outend(10) else
    if findnameanddes(sname,f,test,entries,entry) then begin
      f.entry(5):=dnr shift 12 add type;
      f.entry(6):=page;
      if test then outend(10);
    end else begin
      write(out,<:<10>:>,string inc(sname),<: not in catalog:>);
      outend(0);
    end;
    end;
    stackcuri;
    i:=connectcuri(descat);
    if i<>0 then alarm(<:***update :>,string inc(descat));
    setposition(in,0,0);
    for j:=1 step 1 until entries do begin
      outrec6(in,12);
      for i:=1,2,3 do in(i):=f(3*(j-1)+i);
      end;
    setposition(in,0,0);
if describe then begin
    setposition(in,0,0);
    for j:=1 step 1 until entries do begin
      inrec6(in,12);
      for i:=1,2,3 do f(3*(j-1)+i):=in(i);
      if test then 
       write(out,<:<10>:>,j,<:  :>,string inc(in));
      if findnameanddes(in,f,true,entries,entry) then ;
      end read descat;
    setposition(in,0,0);
    end describe;
  end array f;

unstackcuri;
outend(12);
if fpout then closeout;
end;
lookup indextest
if ok.yes
▶EOF◀