|
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: 18432 (0x4800) Types: TextFile Names: »timctest «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »timctest «
limctest = set 1 disc1 ;o limctest ;head iso ;( oimctest=algol list.on blocks.yes xref.no connect.no ( oimctest=algol survey.yes connect.no if ok.yes if warning.yes ( o c message kikset visfejl limctest end ) o c message ok scope user oimctest end ) begin <* jsc d. 3/6-1988 program: oimctest formål: belastning af rclan kald: oimctest io.r/w (b.<buflgd>) (m.<maxio>) (a.<anttest>) (i.<inc>) io ::= r=>read lan, w=>write lan default=r buflgd ::= antal tegn pr io, default=768 maxio ::= maximal antal io pr connect, default=100 anttest ::= antal connect før afslut, default=4 inc ::= incarnationer default=2 hvis inc<1 benyttes ikke activities *> integer res, buf, nr, buflgd, maxio, anttest, inc, i, j; boolean input, online; integer array ia (1 : 20); long array la (1 : 2); procedure xclaim (i); value i ; integer i ; begin boolean array ba (1:i); end; procedure test (nr, txt); integer nr; string txt; begin write (out, <<d>, "nl", 1, nr, ":", 1, txt, "sp", 1); if online then setposition (out, 0, 0); end procedure test; procedure test_reason (reason); value reason; long reason; begin write (out, <<d>, <: status=:>, reason shift (- 36) extract 12, <: result=:>, reason shift (- 24) extract 12, <: portst=:>, reason shift (- 12) extract 12, <: closers=:>, reason shift (- 0) extract 12, "sp", 1); if online then setposition (out, 0, 0); end procedure test_reason; integer procedure segm (z); zone z; begin <* returnerer segmcount fra z's zonedescriptor *> integer array ia (1 : 20); getzone6 (z, ia); segm := ia (9); end procedure segm; procedure latest_answer (nr, buf); integer nr, buf; begin integer array ia (1 : 8); integer i, j; system (5, buf + 8, ia); write (out, <<d>, "nl", 2, nr, ":", 1, <:latest answer, buf.:>, buf, "nl", 1); for i := 1 step 1 until 8 do begin write (out, <<ddd>, i, ")", 1, <<-ddddddddd>, ia (i), "sp", 3, <<-dddd>, ia (i) shift (- 12), ia (i) extract 12, "sp", 3); for j := -16, -8, -0 do if ia (i) shift j extract 8 <= 32 or ia (i) shift j extract 8 >= 127 then write (out, <<-ddd>, ia (i) shift j extract 8) else write (out, "sp", 3, false add (ia (i) shift j extract 8), 1); write (out, "sp", 2); for j := 0 step 1 until 23 do write (out, "sp", if j mod 6 <> 0 then 0 else 1, if ia (i) shift (j - 23) extract 1 = 0 then "." else "1", 1); write (out, "nl", 1); end; if online then setposition (out, 0, 0); end procedure latest_answer; procedure fejl (nr, txt, la, reason); value reason; integer nr; string txt; long array la; long reason; begin integer i; write (out, "nl", 1, <<d>, nr, ":", 1, <:*** :>, txt, "sp", 1, la, <: status=:>, reason shift (- 36) extract 12, <: result=:>, reason shift (- 24) extract 12, <: portst=:>, reason shift (- 12) extract 12, <: closers=:>, reason shift (- 0) extract 12, "nl", 1); if online then setposition (out, 0, 0); end procedure fejl; procedure vent (tid); value tid; long tid; begin <* vent i tid 0.0001 sekunder *> integer array ia (1 : 20); zone z (1, 1, bp); long field lf; open (z, 2, <:clock:>, 1 shift 9); lf := 12; getshare6 (z, ia, 1); ia (3 + 1) := 2; <* antal 1/10000 sekunder *> ia.lf := tid; <* antal 1/10000 sekunder *> setshare6 (z, ia, 1); if monitor (16, z, 1, ia) = 0 then system (9, 6, <:<10>break:>) else if monitor (18, z, 1, ia) <> 1 then system (9, 6, <:<10>break:>); end procedure vent; procedure bp (z, s, b); zone z; integer s, b; begin integer array ia (1 : 20); long array field laf2; integer i; laf2 := 2; getzone6 (z, ia); write (out, "nl", 1, <:bp kaldt for :>, ia.laf2, <<d>, <: b=:>, b, <: s=:>); for i := 1 step 1 until 24 do write (out, if s shift (i - 24) extract 1 = 1 then "1" else ".", 1, "sp", if i mod 6 <> 0 then 0 else 1); outchar (out, 'nl'); if online then setposition (out, 0, 0); stderror (z, s, b); end procedure bp; \f boolean procedure imc_sense (z, idx, reason); zone z; integer idx; long reason; begin imc_sense := true; end; <* tes test *> procedure testtesttest (z, idx, reason); <* test test *> zone z; integer idx; long reason; begin <* proceduren udfører en imc-sense *> integer i; integer array ia (1 : 12); getshare6 (z, ia, 1); ia (3 + 1) := 0; <* sense operation *> ia (3 + 6) := idx; <* hvis index = 0 så portstate ellers connectionstate *> setshare6 (z, ia, 1); test (nr, <:sense:>); write (out, <: idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); if monitor (16, z, 1, ia) = 0 then system (9, 6, <:<10>break:>) else i := monitor (18, z, 1, ia); reason := extend (ia (1) extract 12) shift 36 + extend (i extract 12) shift 24 + (ia (7) extract 12) shift 12 + (ia (8) extract 12) shift 0; test_reason (reason); comment imc_sense := i = 1; end procedure imc_sense; boolean procedure test_imc_connection (z, idx, reason); zone z; integer idx; long reason; begin <* proceduren udfører en række imc-sense for at kontrolere connection *> while imc_sense (z, idx, reason) and (reason shift (- 12) extract 12 = 1 <* accepting *> or reason shift (- 12) extract 12 = 2) <* connecting *> do vent (0 1000); test_imc_connection := reason shift (- 12) extract 12 = 3 <* connected *> end procedure test_imc_connection; boolean procedure x_imc_connect (z, idx, name, reason); zone z; integer idx; long array name; long reason; begin boolean ok, connected; integer forsøg; comment trap (fejl); ok := connected := false; forsøg := 0; repeat forsøg := forsøg + 1; test (nr, <:imcconnect:>); write (out, <: idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); if imcconnect (z, idx, name, reason) then begin <* connect *> write (out, <:imcconnect=true, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); ok := true; if idx = 0 then system (9, nr, <:<10>sludder:>); if test_imc_connection (z, idx, reason) then begin <* connection ok *> write (out, <:imcconnect=true, connect=ok, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); connected := true; end connection ok else begin <* connection ej ok *> write (out, <:imcconnect=true, connect=ej-ok, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); imcdisconn (z, reason); connected := false; vent (if forsøg < 5 then 0 1000 else if forsøg < 10 then 1 0000 else if forsøg < 15 then 2 5000 else 5 0000); <* antal 1/10000 sek imellem forsøgene *> end connection ej ok; end connect ok else begin <* connect ej ok *> write (out, <:imcconnect=false, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); ok := connected := false; imcdisconn (z, reason); end connect ej ok; test_reason (reason); until connected or not ok; fejl: x_imc_connect := ok and connected; end procedure x_imc_connect; boolean procedure x_imc_getconnect (z, idx, reason); zone z; integer idx; long reason; begin boolean ok, connected; comment trap (fejl); ok := connected := false; repeat test (nr, <:imcgetconn:>); write (out, <: idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); if imcgetconn (z, idx, reason) then begin <* getconnect *> write (out, <:imcgetconn=true, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); ok := true; if idx = 0 then system (9, nr, <:<10>sludder:>); if test_imc_connection (z, idx, reason) then begin <* connection ok *> write (out, <:imcgetconn=true, connect=ok, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); connected := true; end connection ok else begin <* connection ej ok *> write (out, <:imcgetconn=true, connect=ej-ok, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); imcdisconn (z, reason); connected := false; vent (5 0000); <* 5 sek imellem forsøgene *> end connection ej ok; end getconnect ok else begin <* connect ej ok *> write (out, <:imcgetconn=false, idx=:>, <<d>, idx, <: segm=:>, segm (z), "sp", 1); ok := connected := false; imcdisconn (z, reason); end getconnect ej ok; test_reason (reason); until connected or not ok; fejl: x_imc_getconnect := ok and connected; end procedure x_imc_getconnect; \f procedure w (nr); value nr; integer nr; begin <* proceduren sender på nettet 1. ord i data = 25 => end of data *> zone zifp (1, 1, bp), zimc ((buflgd + 5) // 6, 1, bp); long array nameifp, nameimc, namein, nameout (1 : 2); long reason; integer index, rand, antio, ionr, testnr, i, j; long res; xclaim (1024); <* extra stack *> movestring (nameifp, 1, <:ifpmain1:>); nameimc (1) := namein (1) := nameout (1) := long <:imcte:> add 's'; nameimc (2) := namein (2) := nameout (2) := long <:t:>; nameimc (2) := nameimc (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'w' shift 8; namein (2) := namein (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'i' shift 8; nameout (2) := nameout (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'o' shift 8; write (out, "nl", 1, <:begin w:>, <: main.:>, nameifp, <: adpdev.:>, nameimc, <: port.:>, namein, <: & :>, nameout); open (zifp, 0 shift 12 + 0, nameifp, 1 shift 9); <* mode=0 => kun mig som user *> ldunlink (zifp, 0, nameimc, res); <* fjern evt gammelt link *> test (nr, <:ldlink:>); i := - 1; <* første frie device *> if ldlink (zifp, i, nameimc, 2, <::>, res) then begin <* makelink ok *> open (zimc, 20, nameimc, 1 shift 9); test (nr, <:imcopenport:>); if imcopenport (zimc, 3, nameout, reason) then begin <* ok *> rand := systime (7, 0, 0.0); <* basis for random *> for testnr := 1 step 1 until anttest do begin <* pr connect *> antio := entier (random (rand) * maxio); write (out, <<d>, "nl", 1, <:antio=:>, antio); comment trap (rydop); index := 0; if x_imc_getconnect (zimc, index, reason) then begin <* connect ok *> for ionr := 1 step 1 until antio do begin test (nr, <:o:>); outrec6 (zimc, (buflgd + 2) // 3 * 2); if ionr <> antio then zimc (1) := real <::> else zimc (1) := real <:<25><25><25><25><25>:> add 25; write (out, "sp", 1, <<d>, "'", 1, zimc (1) extract 8, "'", 1, ":", 1, ionr); setposition (zimc, 0, 0); end; end getconnect ok else fejl (nr, <:imcgetconn:>, namein, reason); rydop: trap (0); test (nr, <:imcdisconn:>); imcdisconn (zimc, reason); end pr connect; end imcopenport ok else fejl (nr, <:imcopenport:>, nameimc, reason); test (nr, <:imccloseprt:>); imccloseprt (zimc, reason); close (zimc, true); end makelink ok else fejl (nr, <:ldlink:>, nameimc, res); test (nr, <:ldunlink:>); if not ldunlink (zifp, 0, nameimc, res) then fejl (nr, <:ldunlink:>, nameimc, res); close (zifp, true); test (nr, <:end w:>); end procedure w; \f procedure r (nr); value nr; integer nr; begin <* proceduren læser fra nettet 1. ord i data = 25 => end of data *> zone zifp (1, 1, bp), zimc ((buflgd + 5) // 6, 1, bp); long array nameifp, nameimc, namein, nameout (1 : 2); long reason, res; integer index, ionr, testnr, i, j; xclaim (1024); <* extra stack *> movestring (nameifp, 1, <:ifpmain1:>); nameimc (1) := namein (1) := nameout (1) := long <:imcte:> add 's'; nameimc (2) := namein (2) := nameout (2) := long <:t:>; nameimc (2) := nameimc (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'r' shift 8; namein (2) := namein (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'i' shift 8; nameout (2) := nameout (2) + extend ('0' + nr // 100 mod 10) shift 32 + extend ('0' + nr // 10 mod 10) shift 24 + extend ('0' + nr // 1 mod 10) shift 16 + extend 'o' shift 8; write (out, "nl", 1, <:begin r:>, <: main.:>, nameifp, <: adpdev.:>, nameimc, <: port.:>, namein, <: & :>, nameout); open (zifp, 0 shift 12 + 0, nameifp, 1 shift 9); <* mode=0 => kun mig som user *> ldunlink (zifp, 0, nameimc, res); <* fjern evt gammelt link *> test (nr, <:ldlink:>); i := - 1; <* første frie device *> if ldlink (zifp, i, nameimc, 2, <::>, res) then begin <* makelink ok *> open (zimc, 20, nameimc, 1 shift 9); test (nr, <:imcopenport:>); if imcopenport (zimc, 0, namein, reason) then begin <* ok *> for testnr := 1 step 1 until anttest do begin <* pr connect *> comment trap (rydop); index := 0; if x_imc_connect (zimc, index, nameout, reason) then begin <* connect ok *> ionr := 0; repeat test (nr, <:i:>); setposition (zimc, 0, 0); inrec6 (zimc, (buflgd + 2) // 3 * 2); ionr := ionr + 1; write (out, "sp", 1, <<d>, "'", 1, zimc (1) extract 8, "'", 1, ":", 1, ionr); until zimc (1) = real <:<25><25><25><25><25>:> add 25; end connect ok else fejl (nr, <:imcconnect:>, nameout, reason); rydop: trap (0); test (nr, <:imcdisconn:>); imcdisconn (zimc, reason); end pr connect; end imcopenport ok else fejl (nr, <:imcopenport:>, namein, reason); test (nr, <:imccloseprt:>); imccloseprt (zimc, reason); close (zimc, true); end makelink ok else fejl (nr, <:ldlink:>, nameimc, res); test (nr, <:ldunlink:>); if not ldunlink (zifp, 0, nameimc, res) then fejl (nr, <:ldunlink:>, nameimc, res); close (zifp, true); test (nr, <:end r:>); end procedure r; \f getzone6 (out, ia); online := ia (1) <> 4; input := true; buflgd := 768; maxio := 100; anttest := 4; inc := 2; i := 1; for j := system (4, i, la) while j <> 0 do if j shift (- 12) <> 4 or j extract 12 < 10 then system (9, i, <:<10>***call:>) else begin <* text *> if la (1) = long <:io:> then begin <* io.i/o *> j := system (4, i + 1, la); if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'r' then input := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'w' then input := false else system (9, i, <:<10>***call:>); end buflgd else if la (1) shift (- 40) extract 8 = 'b' then begin <* b.<buflgd> *> if system (4, i + 1, la) = 8 shift 12 + 4 then buflgd := la (1) else system (9, i, <:<10>***call:>); end buflgd else if la (1) shift (- 40) extract 8 = 'm' then begin <* m.<maxio> *> if system (4, i + 1, la) = 8 shift 12 + 4 then maxio := la (1) else system (9, i, <:<10>***call:>); end buflgd else if la (1) shift (- 40) extract 8 = 'a' then begin <* a.<anttest> *> if system (4, i + 1, la) = 8 shift 12 + 4 then anttest := la (1) else system (9, i, <:<10>***call:>); end buflgd else if la (1) shift (- 40) extract 8 = 'i' then begin <* i.<inc> *> if system (4, i + 1, la) = 8 shift 12 + 4 then inc := la (1) else system (9, i, <:<10>***call:>); end buflgd else system (9, i, <:<10>***call:>); i := i + 2; end pr fp; write (out, <:imctest:>, <<d>, <: io.:>, if input then "r" else "w", 1, <: b.:>, buflgd, <: m.:>, maxio, <: a.:>, anttest, <: i.:>, inc, if inc < 0 then <: ; ingen activities:> else <: ; activities:>, "nl", 1); if online then setposition (out, 0, 0); if inc < 1 then begin <* ej activities *> nr := 0; if input then r (nr) else w (nr); end inc < 1 else begin <* activities *> activity (inc); for nr := 1 step 1 until inc do begin <* start coroutiner *> if input then newactivity (nr, 0, r, nr) else newactivity (nr, 0, w, nr); end start; while inc > 0 do begin <* reaktiver *> buf := 0; for res := w_activity (buf) while res <= 0 do write (out, <<d>, "nl", 1, <:w-activity=:>, res, <: buf.:>, buf); nr := res; latest_answer (nr, buf); write (out, <<d>, <:activate (:>, nr, <:) buf.:>, buf, "sp", 1); if activate (nr) extract 24 < 1 then system (9, nr, <:<10>død:>); <* inc := inc - 1; *><* afsluttet activity *> end while inc > 0; end activities; end ▶EOF◀