|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10752 (0x2a00) Types: TextFile Names: »tstdvar«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦162d2eb5b⟧ »talgprog« └─⟦this⟧
mode list.yes clear login stdvar stdvar=set 80 disc1 scope user stdvar lookup stdlist if ok.yes mode 15.yes stdvar=algol message.no Anders Lindgård 1978 09 21 Creates standard variables for the algol system. begin boolean list,test,begcond,endcond,ok,thisok, temp,login,user,project; integer i,j,k,totbyte,byteinit,total,no,oldkind,kind, maxentry,res,del,bi,bo,startext,exti,entrypoint,c,char; real rt,time; long field lval; array r,w,entry,main(1:2); boolean field init,bval; integer field I1,I2,type,ival; integer array a,tail(1:10); integer array field ifi,byte; array field name,cur; real field rval; integer procedure readdel; begin integer c,char; readdel:=0; repeatchar(in); for c:=readchar(in,char) while char=10 or char=32do; repeatchar(in); if c=7 then begin <*delimiter*> if -,(char=44 <*,*> or char=61 <*=*> or char=59<*;*>) then write(out,"nl",1,<:delimiter1 :>,false add char,1); end else if c<7 then write(out,"nl",1,<:-delimiter:>); readdel:=char; end readdel; type:=2; name:=2; init:=12; bval:=ival:=rval:=lval:=16; readbfp(<:test:>,test,false); readbfp(<:list:>,list,true); readbfp(<:temp:>,temp,false); readbfp(<:login:>,login,false); readbfp(<:user:>,user,false); readbfp(<:project:>,project,false); readifp(<:maxentry:>,maxentry,100); begin array rec(1:4*maxentry); cleararray(rec); if -,readlsfp(main) then alarm(<:***left side missing:>); removeentry(main); res:=lookupentry(main); i:=1; if res=0 then alarm(<:***connect left side :>,string main(increase(i))); cleararray(tail); tail(1):=1; res:=createentry(main,tail); i:=1; if res<>0 then alarm(<:create :>,string main(increase(i)),<: , result :>,res); res:=if project then scope_pro(main) else if user then scope_user(main) else if login then scope_login(main) else if temp then scope_temp(main) else 0; i:=1; if res<>0 then alarm(<:permanent :>,string main(increase(i)),<: , result:>,res); kind:=0; totbyte:=byteinit:=0; ok:=true; begcond:=endcond:=false; cur:=0; del:=59; total:=no:=0; for no:=no+1 while -,endcond do begin igen: thisok:=true; if del=59 then begin cleararray(r); res:=readstring(in,r,1); if res<0 then alarm(<:***exhausted:>); repeatchar(in); readchar(in,i); if test then begin i:=1; write(out,"nl",1,<:$:>,string r(increase(i))); outendcur(i); end; j:=0; for j:=j+1 while j<7 and r(1)<>(case j of (real<:boole:> add 97, real<:integ:> add 101, real<:real:>,real<:long:>,real<:begin:>, real<:end:>,real<::>)) do; begcond:=begcond or j=5; if -,begcond or j=5 then goto igen; endcond:=j=6; if j<5 then kind:=j; if j>6 then begin thisok:=ok:=false; i:=1; write(out,"nl",1,<:declarator :>,string r(increase(i))); outendcur(0); repeatchar(in); for c:=readchar(in,char) while char<>25 and char<>59 do; repeatchar(in); end; if kind=0 and -,endcond then goto igen; repeatchar(in); for c:=readchar(in,char) while char=32 or char=10 do; repeatchar(in); if c<>6 and -,endcond then begin ok:=false; write(out,"nl",1,"*",2,<:delimiter2 :>,false add char,1); for c:=readchar(in,char) while char<>44 <*,*> and char<>25 do; repeatchar(in); end; end search for type; if -,endcond then begin res:=readstring(in,rec.cur.name,1); if res<0 or res>2 then begin i:=1; write(out,"nl",1,"*",2,<:identifierlength :>,string rec.cur.name(increase(i)), <: size (in reals):>,res); thisok:=ok:=false; end; i:=1; if test then write(out,"nl",1,"*",1, case kind of(<:b:>,<:i:>,<:r:>,<:l:>), "sp",2, string rec.cur.name(increase(i))); del:=readdel; if test then outendcur(del); if -,(del=44 or del=59 or del=61) then begin thisok:=ok:=false; write(out,"nl",1,"*",2,<:delimiter3 :>,false add del,1); end; rec.cur.type:=kind; rec.cur.init:=del=61 <*=*>; totbyte:=totbyte+(if kind<3 then 2 else 4); if rec.cur.init then begin byteinit:=byteinit+(if kind<3 then 2 else 4); case kind of begin rec.cur.bval:=readstring(in,w,1) >0 and w(1)=real <:true:>; read(in,rec.cur.ival); read(in,rec.cur.rval); read(in,rec.cur.lval); end case; if kind=1 and w(1)=real <:false:> then begin <*search for add <integer>*> repeatchar(in); for i:=readchar(in,j) while j=32 do; repeatchar(in); if i=6 then begin res:=readstring(in,w,1); if w(1)=real <:add:> then begin repeatchar(in); for i:=readchar(in,j) while j=32 do; repeatchar(in); if i=2 then begin read(in,i); if i>0 and i<=128 then rec.cur.ival:=i else begin thisok:=ok:=false; write(out,"nl",1,"*",2,<:boolean value :>,i); end; end integer else begin thisok:=ok:=false; write(out,"nl",1,"*",2,<:boolean value missing:>); end; end add else begin thisok:=ok:=false; i:=1; write(out,"nl",1,"*",2,<:delimiter :>,string w(increase(i))); end; end text after boolean; end false; del:=readdel; end initial value; if del=59 <*;*> then kind:=0 else if del<>44 <*,*> then begin thisok:=ok:=false; write(out,"nl",1,"*",2,<:delimiter4 :>,false add del,1); end else begin readchar(in,char); <* read , *> for c:=readchar(in,char) while char=32 or char=10 do; repeatchar(in); if c<>6 then begin ok:=thisok:=false; write(out,"nl",1,"*",2,<:delimiter5 :>,false add char,1); for c:=readchar(in,char) while c=7 do; repeatchar(in); end; end delimiter error; if no>maxentry then alarm(<:***maxentry exceeded:>); if thisok then begin cur:=cur+16; total:=total+1; end; end end_cond; end loop; if true then write(out, "nl",1,<:syntax check :>,if ok then <:ok:> else <:not ok:>, "nl",1,<:total variables :>,total, "nl",1,<:total own bytes :>,totbyte, "nl",1,<:bytes initialized:>,byteinit); if list then begin write(out,"nl",2,<:begin:>,"nl",1); oldkind:=cur:=0; for no:=1 step 1 until total do begin kind:=rec.cur.type; if kind<>oldkind then begin if oldkind>0 then write(out,<:;:>,"nl",1); write(out,case kind of (<:boolean :>,<:integer :>, <:real :>,<:long :>)); end else if oldkind>0 then write(out,<:, :>); i:=1; write(out,string rec.cur.name(increase(i))); if rec.cur.init then begin write(out,<:=:>); case rec.cur.type of begin if rec.cur.ival=0 or rec.cur.ival=-1 then write(out,if rec.cur.bval then <:true:> else <:false:>) else write(out,<:add:>,rec.cur.ival); write(out,<<d>,rec.cur.ival); write(out,<<d.dddddd'-ddd>,rec.cur.rval); write(out,<<d>,rec.cur.lval); end case; end initialval; oldkind:=kind; cur:=cur+16; end loop; write(out,"nl",1,<:end:>,"nl",1); end list; if ok or test then begin cur:=0; tail(1):=1 shift 23+4; for i:=1,2 do tail.name(i):=main(i); tail(8):=0; tail(9):=4 shift 12; tail(10):=1 shift 12 + totbyte; bi:=-1; bo:=byteinit-1; for no:=1 step 1 until total do begin kind:=rec.cur.type; for i:=1,2 do entry(i):=rec.cur.name(i); res:=remove_entry(entry); tail(7):=(kind+7) shift 18; if rec.cur.init then tail(6):=bi:=bi+(if kind<3 then 2 else 4) else tail(6):=bo:=bo+(if kind<3 then 2 else 4); res:=createentry(entry,tail); k:=i:=1; if test then write(out,"nl",1,<:$$:>,string entry(increase(i)),"sp",2, <:=set :>,tail(1),"sp",2, string tail.name(increase(k)),res); if res<>0 then begin i:=1; write(out,"nl",1,"*",2,<:create entry :>,string entry(increase(i)),<: , result :>,res); ok:=false; end create check; if ok and (temp or login or user or project) then begin res:=if project then scope_pro(entry) else if user then scope_user (entry) else if login then scope_login (entry) else if temp then scope_temp (entry) else 0; if res<>0 then begin i:=1; write(out,"nl",1,"*",2,<:permanent :>,string entry(increase(i)),<: , result :>,res); ok:=false; end check perm; end perm; cur:=cur+16; end loop; begin zone z(128,1,stderror); open (z,4,string main(increase(i)),0); ifi:=0; outrec6(z,512); cleararray(z); startext:=2+8; exti:=startext//2+1; entrypoint:=486; z.ifi(1):=startext shift 12 + startext; z.ifi(2):=21 shift 12 <*general alarm*>; z.ifi(3):= 8 shift 12 <*end address expression*>; z.ifi(4):=13 shift 12 <*last used*>; z.ifi(5):= 3 shift 12 <*reserve*>; z.ifi(exti):= 0 <*no of externals*>; z.ifi(exti+1):=byteinit; cur:=0; byte:=startext+4-bval; for no:=1 step 1 until total do begin if rec.cur.init then begin byte:=byte+(if rec.cur.type<3 then 2 else 4); case rec.cur.type of begin z.byte.bval:=rec.cur.bval; z.byte.ival:=rec.cur.ival; z.byte.rval:=rec.cur.rval; z.byte.lval:=rec.cur.lval; end case; end initialvalues; cur:=cur+16; end loop; ifi:=byteinit+startext+4; systime(1,0,time); z.ifi(1):=systime(2,time,rt); z.ifi(2):=rt; ifi:=entrypoint; z.ifi(1):=2953212; <*al w1 -4*> z.ifi(2):=3657248; <*jl. w3 (-480) 8*> z.ifi(3):=2887674; <*al w0 -6*> z.ifi(4):=-2289662; <*ds w1 x1+2*> z.ifi(5):=3018756; <*al w2 x2+4*> z.ifi(6):=6213142;<*rs. w2 (-490) 6*> z.ifi(7):=3460626; <*jl. (-494) 4*> z.ifi(8):=2887670; <*al w0 -10*> z.ifi(9):=3657228; <*jl. w3 (-500) 2*> z(127):=main(1); z(128):=main(2); close(z,true); cleararray(tail); tail(1):=1; tail(6):=1 shift 23+entrypoint; tail(7):=1 shift 18; tail(8):=0; tail(9):=4 shift 12 + startext; tail(10):=1 shift 12 + totbyte; res:=changetail(main,tail); if res<>0 then begin i:=1; write(out,"nl",1,"*",2,<:changetail :>,string main(increase(i)),<: , result :>); ok:=false; end changetail not ok; end initialize segment; end set catalog entries; end rec; end; (if warning.no (head 1 xzw=stdvar ) if warning.yes skip 42.1 ) begin integer poi=25,kqp=-99,aew; boolean b,c,d=9.999; real a; end; ;* mode list.no ▶EOF◀