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

⟦a67cdfc6c⟧ TextFile

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

Derivation

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

TextFile



;       multi-program         * page 1    5 01 82, 13.09;  

if listing.yes
char nl ff nl

multiprog=set 1
multiprog=algol connect.no
;  multi program generering
begin
<*
Programmet laver en jobfil til 'multi-program generering',
dvs. en jobfil, der udtrækker en række programtekster fra
en contractfil og oversætter dem i et stort algolprogram.

Kald:
<wrk>=multiprog from.<con-fil> (scope.<scope>(.<doc>)) ,
_  (<start.(start-fil>)1-50)  (slut.(<slut-fil>)1-50)   (connect.(yes!no)) ,
_ <main>  (<subentry>)1-49

<con-fil> er navnet på en contract fil.
<scope> er det scope det oversatte program skal ligge på
<doc> er det document hvorpå det skal ligge
(std. scope.temp.disc)

<start-fil> er navnet på en (eller flere) filer, der indeholder
fælles erklæringer, procedurer eller initaliseringskode. 
<start-fil> skal ligge synligt for jobbet, der
oversætter. <start-fil> lægges ind forrest i det oversatte program,
og kan evt. afsluttes med noget fælles initialiserings-kode.

<slut-fil> er navnet på en fil, der bliver lagt ind i programmet,
lige før det sidste 'end'. Den skal være synlig for jobbet der oversætter.

connect.no giver oversættelse med connect.no (dvs. 1. parameter efter
programnavnet IKKE er navnet på 'current input').
(std.   connect.yes).

<main> er navnet på det oversatte program
<subentry> er det's pseudonymer

De tekstfiler, hvorfra programteksten samles SKAL have navn
på formen:  <de første max 9 tegn af oversat navn>tx
fx. fromstreg -> fromstregtx
_   selectlines -> selectlintx

Selve oversættelsen fås ved at skrive fp-kommandoen 'i <wrk>',
der slutter af med at fjerne filen <wrk>.

Hvis der er sket fejl under oversættelsen, sættes 
modebit 0
*>

\f



comment multi-program         * page 2    5 01 82, 13.09
0 1 2 3 4 5 6 7 8 9 ;  

real array
_ start_name,     <* entry navne, procedurer etc. *>
_ slut_name,      <* entry navne, afslutning *>
_ name,          <* entry navne, oversatte programmer *>
_ name_tx(1:100), <*    do.      tekster *>
_ scope_doc(1:4), <* scope og dokument *>
_ con_fil,        <* contract_file_navn *>
_ wrk_name(1:2);  <* <wrk>'s navn *>

boolean
_ connect;  _      <* connect.(yes!no) *>

integer
_ i,              <* hjælpe var. *>
_ ant_start,      <* 8*antal entries til procedurer etc. *>
_ ant_slut,       <* 8*antal entries til afslutning *>
_ max;  _         <* 8*antal entries *>

long array field
_ n_f,            <* bruges til at løbe igennem name og name_tx *>
_ f_f,            <* peger på de første 2 elementer af et array *>
_ scope_f,        <* scope fra scope_doc *>
_ doc_f;  _       <* doc   fra scope_doc *>

zone
_ z(128, 1, stderror);  <* til wrk *>

procedure isæt_tx(n, n_tx);  
long array        n, n_tx;  
begin
  integer pos;  
  <* proceduren indsætter 'tx' i halen på navnet i 'n' *>
  putchar(n_tx, 1, 'nul', 12);  <* p.g.a. fejl i algol *>
  pos:= 1;  
  puttext(n_tx, pos, n, -9);  
  putchar(n_tx, pos, 't');  
  putchar(n_tx, pos, 'x');  
  putchar(n_tx, pos, 'nul');  
write(out,"nl",1,n,"sp",4,ntx);
end <**isæt_tx**>;  

\f



comment multi-program         * page 3    5 01 82, 13.09
0 1 2 3 4 5 6 7 8 9 ;  

begin <* blok til fp *>
  integer array desc(1:51);  
  integer item;  

  if -, check_fp_call(item) then system(9, item, <:<10>fp-err:>);  

  <* <wrk>= *>
  if -, fp_res_file(wrk_name) then
  _ system(9, 0, <:<10>-wrk:>);  

  <* from.<con_fil> *>
  if -, fp_name_param(<:fr:>, con_fil, <::>) or con_fil(1)=real <::> then
  _ system(9, 0, <:<10>-from:>);  

  <* scope.<scope>(.<doc>) *>
  if -, fp_param(<:sc:>, desc, scope_doc) then
  begin <* std. værdier *>
    movestring(scope_doc, 1, <:temp:>);  
    movestring(scope_doc, 3, <:disc:>);  
  end
  else if desc(1)<>1 and desc(1)<>2 then
  _ system(9, desc(1), <:<10># of scope:>)
  else
  begin
    for i:= 1 step 1 until desc(1) do
    _ if desc(i+1)<>2 then system(9, i, <:<10>scope type:>);  
    if desc(1)=1 then movestring(scope_doc, 3, <:disc:>);  
  end;  

  <* start.<start-fil>....  *>
  if -, fp_param(<:start:>, desc, start_name) then ant_start:= -1
  else if desc(1)<0 then system(9, 0, <:<10># of start:>) else
  begin
    for i:= 2 step 1 until desc(1)+1 do
    _ if desc(i) <> name_type then
    _ _ system(9, i-1, <:<10>start type:>);  
    ant_start:= desc(1)*8 - 8;  
  end;  

  <* slut.<slutfil>..... *>
  if -, fp_param(<:slut:>, desc, slut_name) then ant_slut:= -1
  else if desc(1)<=0 then system(9, 0, <:<10># of slut:>) else
  begin
    for i:= 2 step 1 until desc(1)+1 do
    _  if desc(i)<>name_type then
    _  _ system(9, i-1, <:<10>slut type:>);  
    ant_slut:= desc(1)*8 - 8;  
  end;  

  <* connect *>
  if -, fp_bool_param(<:con:>, connect, true) then
  _  system(9, 0, <:<10>connect:>);  

  <* <main>  (<subentry>) *>
  max:= fp_free_names(name, false);  
  if max<0 then system(9, -max, <:<10>free-names:>);  
  max:= max*8 - 8;  

end <* fp *>;  

\f



comment multi-program         * page 4    5 01 82, 13.09
0 1 2 3 4 5 6 7 8 9 ;  

<* lav 'tx' udgaver af navne *>
for n_f:= 0 step 8 until max do   
begin
integer pos;
putchar(name_tx.n_f,1,0,12);
pos := 1;
puttext(name_tx.n_f,pos,name.n_f,-9);
putchar(name_tx.n_f,pos,'t');
putchar(name_tx.n_f,pos,'x');
putchar(name_tx.n_f,pos,0);
end;

<* initialiser de øvrige felter *>
f_f:= scope_f:= 0;  
doc_f:= 8;  

open_output(z, wrk_name, 0);  

<* contract filer ud af con_file *>
write(z, "nl", 1, <:contract set.:>, con_fil.f_f);  
for n_f:= 0 step 8 until max do
_ write(z, "sp", 1, name_tx.n_f);  
for n_f:= 0 step 8 until ant_start do
_  write(z, "sp", 1, start_name.n_f);
for n_f:= 0 step 8 until ant_slut do
_  write(z, "sp", 1, slut_name.n_f);

<* opret oversat program *>
write(z, "nl", 1, name.f_f, <: = set 1 :>, scope_doc.doc_f, 
_        "nl", 1, <:if 0.no:>,
_        "nl", 1, name.f_f, <: = algol :>, 
_         if connect then <::> else <:connect.no:>);  

<* lav algol programmet *>
write(z, "nl", 1, <:begin:>, 
_        "nl", 1, <:integer prnr;:>);  

<* læg procedurer etc. ind *>
for n_f:= 0 step 8 until ant_start do
_ write(z, "nl", 1, <:algol copy.:>, start_name.n_f, ";", 1);  

<* selve kroppen (en stor case_sætning) *>
write(z, "nl", 1, <:case progentry(prnr,:>, max//8+1, <:, case prnr of (:>);  
for n_f:= 0 step 8 until max do
_ write(z, "nl", 1, "<", 1, ":", 1, name.n_f, ":", 1, ">", 1, 
_      ",", if n_f=max then 0 else 1);  
write(z, "nl", 1, <: )) of:>, 
_        "nl", 1, <:begin:>);  
for n_f:= 0 step 8 until max do
_ write(z, "nl", 1, <:algol copy.:>, name_tx.n_f, ";", 1);  
write(z, "nl", 1, <:end;:>);  

<* afslutning *>
for n_f:= 0 step 8 until ant_slut do
write(z, "nl", 1, <:algol copy.:>, slut_name.n_f, ";", 1);  
write(z, "nl", 1, <:trapmode:= 1 shift 10;:>, 
_        "nl", 1, <:outchar(out, 'nl');:>, 
_        "nl", 1, <:end;:>);  

write(z, "nl", 1, <:if warning.yes:>, 
_        "nl", 1, <:   mode 0.yes:>, 
_        "nl", 1, <:if ok.no:>, 
_        "nl", 1, <:   mode 0.yes:>);  

\f



comment multi-program         * page 5    5 01 82, 13.09
0 1 2 3 4 5 6 7 8 9 ;  

<* fjern text-entries *>
write(z, "nl", 2, <:clear temp :>);  
for n_f:= 0 step 8 until max do
_ write(z, ",", 1, "nl", 1, name_tx.n_f);  
for n_f:= 0 step 8 until ant_start do
_ write(z, ",", 1, "nl", 1, start_name.n_f);
for n_f:= 0 step 8 until ant_slut do
_ write(z, ",", 1, "nl", 1, slut_name.n_f);

<* opret subentries til programmet *>
write(z, "nl", 1, <:if 0.no:>, 
_        "nl", 1, <:(:>);  
for n_f:= 8 step 8 until max do
_ write(z, "nl", 1, name.n_f, <:= assign :>, name.f_f);  

<* scope alle entries *>
write(z, "nl", 2, <:scope :>, scope_doc.scope_f, <:.:>, scope_doc.doc_f);  
for n_f:= 0 step 8 until max do
_ write(z, "sp", 1, name.n_f);  

<* 'lookup' *>
write(z, "nl", 2, <:lookup:>);  
for n_f:= 0 step 8 until max do
_ write(z, "sp", 1, name.n_f);  

write(z, "nl", 2, <:message:>, max//8+1, <: programs translated:>);  

<* evt fejl-udskrift *>
write(z, "nl", 1, <:):>, 
_        "nl", 2, <:if 0.yes:>, 
_        "nl", 1, <: message fejl i :>, name.f_f);  

<* ryd op!!! *>
write(z, "nl", 2, <:( clear temp :>, wrk_name.f_f,  
_        "nl", 1, <:end):>, "nl", 1, "em", 3);  

close(z, true);  

trapmode:= 1 shift 10;  
outchar(out, 'nl');  
end;  

scope project multiprog
end
▶EOF◀