|
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: 34560 (0x8700) Types: TextFile Names: »timctest «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer └─⟦f546e193b⟧ └─⟦this⟧ »timctest «
limctest = set 1 disc1 o limctest head iso ( oimctest=algol list.yes blocks.yes ix.no connect.no , xref.yes survey.yes , list.on copy.timctest1 list.off if ok.yes if warning.yes ( o c message kikset visfejl limctest finis ) o c message ok scope user oimctest end ) begin procedure help; begin <* udskriver syntaksen for programmet *> writeint (out, <: jsc d. 8/12-1988 program: oimctest v.:>, <<d.d>, rel, vers, 1, <: formål: belastning af rclan kald: (ud=)oimctest (a.<antconnect>.<antio> (b.<buf>) , (c(.<j/n>)) (d(.<j/n>)) , (f.<fil>) (h.<host>) , (i.<inc>(.<idx>)) (m.<j/n>) , (r.<j/n>) (s.<sh>) , (w.<j/n>) (t.<j/n>) , (l.<no>) (p.<txt>) ; UD ::= udskriftsfil Antal ::= antal connect før afslut, default=10 antal io-operationer pr connect default=100 ved positiv laves random, ved negativ benyttes tallets absolutte værdi Buflgd ::= antal tegn pr io, default=maxsendsize Check ::= alle data checkes default=nej Duplex ::= både read og write default=nej Fil ::= io til fra fil default=ingen fil Host ::= hostname for remote default=egen host Inc ::= incarnationer, index default=0.0 max 9.99 dog max inc*idx=99 Lanno ::= lokalnetnummer default=1 Makelink ::= makelink udføres til remotehost default=ja Print ::= text til udskrift ved tidsmåling default=ingen Read ::= read eller write default=ja Shares ::= antal shares overfor imc default=1 Test ::= testudskrifter default=nej Write ::= write eller read default=nej hvis duplex laver første port read (ell write), anden det modsate osv. hvis inc<1 benyttes ikke activities og idx := 0 der oprettes en port pr incarnation og et connectionindex pr index hvis inc<1 benyttes ikke activities og der benyttes et index hvis idx<1 sættes til et index hvis eget hostname er "balsys" gælder følgende defaultværdier: host.balsu1 read.ja hvis eget hostname er "balsu1" gælder følgende defaultværdier: host.balsys write.ja Rettelser: v.1.0D jsc d.27/2-1989: fejl i imc-sense rettet :>); end procedure help; integer rel, fp, buf, res, nr, idx, inc, i, j, k, monrel, lanno, buflgd, buflgd_hw, maxio, anttest, maxinc, maxidx, shares; boolean vers, input, output, duplex, online, test, link, datacheck, fil, ok, coroutine; long reason; integer array ia (1 : 20); long array la, filnavn, name_lan, name_imc, name_local, name_remote, name_l, name_r (1 : 2), txt (1 : 14); real cpu_ialt, tid_ialt, begin_cpu, begin_tid; long bytes_ialt, io_ialt; long array field laf2; zone zhlp, zlan (1, 1, xstderror); procedure x_ldsense (z, hostname); zone z; long array hostname; begin <* lav sense på mainprocessen og returner eget navn *> integer array ia (1 : 12); long array field laf8; laf8 := 8; getshare6 (z, ia, 1); ia (3 + 1) := 0 shift 12 + 1; <* sense operation *> setshare6 (z, ia, 1); if monitor (16, z, 1, ia) = 0 then system (9, 6, <:<10>break:>) else i := monitor (18, z, 1, ia); tofrom (hostname, ia.laf8, 6); end procedure x_ldsense; \f rel := 1 0; <* release * 10 *> vers := "D"; <* små bogstaver for testversioner, store for rettelser *> laf2 := 2; fp := if xconnectout then 2 else 1; getzone6 (out, ia); online := ia (1) <> 4; if system (4, fp, la) = 0 then begin <* help og så slut *> help; goto trap_heltyt; <* slut *> end; lanno := 1; anttest := 10; buflgd := 0; datacheck := false; fil := false; maxio := 100; maxinc := 0; maxidx := 0; input := output := false; duplex := false; test := false; link := true; shares := 1; name_local (1) := name_local (2) := long <::>; name_remote (1) := name_remote (2) := long <::>; txt (1) := long <::>; filnavn (1) := long <::>; system (5, 64, ia); <* get monitor version *> monrel := ia (1); \f for j := system (4, fp, la) while j <> 0 do if j shift (- 12) <> 4 or j extract 12 < 10 then system (9, fp, <:<10>***call:>) else begin <* text *> if la (1) shift (- 40) extract 8 = 'a' then begin <* a.<antalconnect>(.<antalio>) *> if system (4, fp + 1, la) = 8 shift 12 + 4 then anttest := la (1) else system (9, fp, <:<10>***call:>); j := system (4, fp + 2, la); if j = 8 shift 12 + 4 then maxio := la (1); fp := fp + (if j = 8 shift 12 + 4 then 3 else 2); end anttest else if la (1) shift (- 40) extract 8 = 'b' then begin <* b.<buflgd> *> if system (4, fp + 1, la) = 8 shift 12 + 4 then buflgd := la (1) else system (9, fp, <:<10>***call:>); fp := fp + 2; end buflgd else if la (1) shift (- 40) extract 8 = 'c' then begin <* check(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then datacheck := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then datacheck := false else system (9, fp, <:<10>***call:>); fp := fp + (if j shift (- 12) = 8 then 2 else 1); end check else if la (1) shift (- 40) extract 8 = 'd' then begin <* duplex(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then duplex := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then duplex := false else system (9, fp, <:<10>***call:>); fp := fp + (if j shift (- 12) = 8 then 2 else 1); end duplex else if la (1) shift (- 40) extract 8 = 'h' then begin <* h.<remotehost> *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 then tofrom (name_remote, la, 8) else system (9, fp, <:<10>***call:>); name_remote (2) := name_remote (2) shift (- 32) shift 32; <* max 8 char *> fp := fp + 2; end host else if la (1) shift (- 40) extract 8 = 'f' then begin <* fil.<filnavn> *> fil := true; j := system (4, fp + 1, la); if j = 8 shift 12 + 10 then tofrom (filnavn, la, 8) else system (9, fp, <:<10>***call:>); fp := fp + 2; end fil else if la (1) shift (- 40) extract 8 = 'i' then begin <* i.<inc>(.<idx>) *> if system (4, fp + 1, la) = 8 shift 12 + 4 then maxinc := la (1) else system (9, fp, <:<10>***call:>); j := system (4, fp + 2, la); if j = 8 shift 12 + 4 then maxidx := la (1); fp := fp + (if j = 8 shift 12 + 4 then 3 else 2); end inc else if la (1) shift (- 40) extract 8 = 'l' then begin <* lanno *> if system (4, fp + 1, la) = 8 shift 12 + 4 then lanno := la (1) else system (9, fp, <:<10>***call:>); fp := fp + 2; end lanno else if la (1) shift (- 40) extract 8 = 'm' then begin <* makelink(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then link := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then link := false else system (9, fp, <:<10>***call:>); fp := fp + (if j shift (- 12) = 8 then 2 else 1); end makelink else if la (1) shift (- 40) extract 8 = 'p' then begin <* print.<txt> *> j := system (4, fp + 1, txt); if j shift (- 12) = 8 and j extract 12 >= 10 then fp := fp + 2 else system (9, fp, <:<10>***call:>); end write else if la (1) shift (- 40) extract 8 = 'r' then begin <* read(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then input := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then input := false else system (9, fp, <:<10>***call:>); output := not input; fp := fp + (if j shift (- 12) = 8 then 2 else 1); end read else if la (1) shift (- 40) extract 8 = 's' then begin <* s.<shares> *> if system (4, fp + 1, la) = 8 shift 12 + 4 then shares := la (1) else system (9, fp, <:<10>***call:>); fp := fp + 2; end shares else if la (1) shift (- 40) extract 8 = 't' then begin <* test(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then test := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then test := false else system (9, fp, <:<10>***call:>); fp := fp + (if j shift (- 12) = 8 then 2 else 1); end test else if la (1) shift (- 40) extract 8 = 'w' then begin <* write(.<janej>) *> j := system (4, fp + 1, la); if j = 8 shift 12 + 10 and (la (1) shift (- 40) extract 8 = 'j' or la (1) shift (- 40) extract 8 = 'y') or j shift (- 12) <> 8 then output := true else if j = 8 shift 12 + 10 and la (1) shift (- 40) extract 8 = 'n' then output := false else system (9, fp, <:<10>***call:>); input := not output; fp := fp + (if j shift (- 12) = 8 then 2 else 1); end write else system (9, fp, <:<10>***call:>); end pr fp; if shares < 1 then shares := 1; if maxinc > 10 then maxinc := 10; if maxinc < 1 then begin maxinc := 1; coroutine := false; end else coroutine := true; if maxidx < 1 then maxidx := 1 else if maxidx > 99 then maxidx := 99; if maxidx * maxinc > 99 then maxidx := 99 // maxinc; if monrel shift (- 12) < 15 then movestring (name_lan, 1, <:ifpmain:>) else movestring (name_lan, 1, <:lanmain:>); name_lan (2) := name_lan (2) shift (- 40) shift 40 + extend (lanno mod 10 + '0') shift 32; open (zlan, 0 shift 12 + 0, name_lan, 1 shift 9); <* mode=0 => kun mig som user *> if monrel shift (- 12) < 15 then xhost (name_local) else x_ldsense (zlan, name_local); name_local (2) := name_local (2) shift (- 32) shift 32; <* max 8 char *> name_remote (2) := name_remote (2) shift (- 32) shift 32; <* max 8 char *> if name_remote (1) <> long <::> then begin <* parameter indsat *> if input == output then begin <* beregn input/output *> input := name_local (1) < name_remote (1) or name_local (1) = name_remote (1) and name_local (1) extract 8 <> 0 and name_local (2) < name_remote (2); if name_local (1) = name_remote (1) and name_local (2) = name_remote (2) then output := input else output := not input; end beregn; end parameter else if name_local (1) = long <:balsu:> add '1' and name_local (2) = long <::> then begin <* specielle defaultparametre for balsu1 *> movestring (name_remote, 1, <:balsys:>); input := false; output := true; end else if name_local (1) = long <:balsy:> add 's' and name_local (2) = long <::> then begin <* specielle defaultparametre for balsys *> movestring (name_remote, 1, <:balsu1:>); input := true; output := false; end else tofrom (name_remote, name_local, 8); if input == output then system (9, 8, <:<10>r/w?:>); \f begin <* extra *> zone array zimc (maxinc, 1, 1, xstderror); <* statusinformation *> real array sidst_rørt (1 : maxinc * maxidx); integer array antal_io (1 : maxinc * maxidx); integer first_buf, last_buf; procedure fejl (nr, idx, txt, tal); value tal; integer nr, idx; string txt; integer tal; begin errorbits := 1 shift 0 + 1 shift 1; wr_test (nr, idx, txt, tal); end procedure fejl; procedure fejl_reason (nr, idx, txt, la, reason); value reason; integer nr, idx; string txt; long array la; long reason; begin integer i; fejl (nr, idx, txt, - 1); write (out, 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); system (9, 8, <:<10>break:>); end procedure fejl_reason; procedure wr_test (nr, idx, txt, tal); value tal; integer nr, idx; string txt; integer tal; begin writeint (out, <<d>, "nl", 1, nr, ".", 1, idx, ":", 1, <<zddd.dd>, xkl, ":", 1, txt, "sp", 1); if tal <> - 1 then write (out, <<d>, tal, "sp", 1); if online then setposition (out, 0, 0); end procedure wr_test; procedure wr_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 wr_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 write_status (z); zone z; begin <* udskriv status for aktiviteter *> integer nr, i, j, k; long array la (1 : 2); real kl; integer array ia (1 : 20); zone zhlp (1, 1, xstderror); systime (5, 0, kl); writeint (z, "nl", 1, <:Aktivitetsstatus kl. :>, <<zddd.dd>, round (kl), <: bufferinterval :>, <<d>, first_buf, ".", 2, last_buf, "nl", 1, <: rørt:>, <: read/write:>, <: antio:>, <: waitbuf:>, <: status:>); for nr := 1 step 1 until maxinc * maxidx do begin systime (4, sidst_rørt (nr), kl); system (12, nr, ia); writeint (z, "nl", 1, <<zddd.dd>, round (kl), "sp", 1, true, 10, if if not duplex or nr extract 1 = 1 then input else output then <:read:> else <:write:>, <<bdddddd>, antal_io (nr), <<bddddddd>, ia (1), "sp", 1, (case ia (8) + 1 of (<:empty:>, <:expl pas:>, <:impl pas:>, <:activate:>))); end; write (z, "nl", 1, <:eventkø::>); j := 0; repeat i := monitor (66, zhlp, j, ia); if i = 0 then write (z, <: mess:>) else if i > 0 then write (z, <<dddddddd>, j); until i < 0; write (z, "nl", 1); getzone6 (z, ia); if ia (1) <> 4 then setposition (z, 0, 0); end procedure write_status; \f procedure latest_answer (z, nr, idx, buf); zone z; integer nr, idx, buf; begin integer array ia (1 : 20); integer i, j; system (5, buf + 8, ia); write (z, "nl", 1, <<d>, nr, ".", 1, idx, ":", 1, <: latest answer, buf.:>, buf, "nl", 1); for i := 1 step 1 until 8 do begin write (z, <<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 (z, <<-ddd>, ia (i) shift j extract 8) else write (z, "sp", 3, false add (ia (i) shift j extract 8), 1); write (z, "sp", 2); for j := 0 step 1 until 23 do write (z, "sp", if j mod 6 <> 0 then 0 else 1, if ia (i) shift (j - 23) extract 1 = 0 then "." else "1", 1); write (z, "nl", 1); end; getzone6 (z, ia); if ia (1) <> 4 then setposition (z, 0, 0); end procedure latest_answer; procedure vent (tid); value tid; long tid; begin <* vent i tid 0.0001 sekunder *> integer array ia (1 : 20); zone z (1, 1, xstderror); 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; \f procedure regret (z, sh); zone z; integer sh; begin <* proceduren sender en regret på sidste message udført i z's share sh *> integer array ia (1 : 12); getshare6 (z, ia, sh); if ia (1) > 1 <* buffer ude *> and ia (4) shift (- 12) extract 1 = 0 <* ulige operation *> then monitor (82, z, sh, ia); end procedure regret; boolean procedure imc_sense (z, index, reason); zone z; integer index; long reason; begin <* proceduren udfører en imc-sense *> integer i; integer array ia (1 : 12); getshare6 (z, ia, 1); ia (4) := 0; <* sense operation *> ia (5) := ia (6) := 0; ia (7) := index; <* hvis index = 0 så portstate ellers connectionstate *> setshare6 (z, ia, 1); if test then begin wr_test (nr, idx, <:sense:>, - 1); write (out, <: index=:>, <<d>, index, <: segm=:>, segm (z), "sp", 1); end test; 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; if test then wr_test_reason (reason); imc_sense := i = 1; end procedure imc_sense; boolean procedure test_imc_connection (z, index, reason); zone z; integer index; long reason; begin <* proceduren udfører en række imc-sense for at kontrolere connection *> while imc_sense (z, index, reason) and (reason shift (- 12) extract 12 = 1 <* accepting *> or reason shift (- 12) extract 12 = 2) <* connecting *> do vent (0 2500); test_imc_connection := reason shift (- 12) extract 12 = 3; <* connected *> if test then outchar (out, 'nl'); end procedure test_imc_connection; boolean procedure x_vent_imc_connect (z, index, name, reason); zone z; integer index; long array name; long reason; begin <* afventer en connection på ubestemt tid *> boolean ok; integer forsøg; if test then wr_test (nr, idx, <:x-vent-imc-connect, index=:>, index); forsøg := 0; repeat forsøg := forsøg + 1; ok := x_imc_connect (z, index, name, reason); if not ok then vent (if forsøg <= 5 then 0 5000 else if forsøg <= 10 then 1 0000 else if forsøg <= 25 then 2 5000 else 10 0000); <* antal 1/10000 sek imellem forsøgene *> until ok; x_vent_imc_connect := ok; end procedure x_vent_imc_connect; boolean procedure x_lav_imc_connect (zimc, index, local, remote, reason); zone zimc; integer index; long array local, remote; long reason; begin <* proceduren afventer connection for index portindex på følgende vis: porten med laveste værdi af navn laver getconnect, den anden connect *> if local (1) < remote (1) or local (1) = remote (1) and local (2) < remote (2) then x_lav_imc_connect := x_imc_getconnect (zimc, index, reason) else x_lav_imc_connect := x_vent_imc_connect (zimc, index, remote, reason); end procedure x_lav_imc_connect; boolean procedure x_imc_connect (z, index, name, reason); zone z; integer index; long array name; long reason; begin <* udfører connect og afventer ok *> boolean ok, connected; integer gem_index; gem_index := index; ok := connected := false; if test then begin wr_test (nr, idx, <:imcconnect, index=:>, index); write (out, <: index=:>, <<d>, index, "sp", 1); end test; if imcconnect (z, index, name, reason) then begin <* connect *> if test then write (out, <:imcconnect=true, index=:>, <<d>, index, "sp", 1); ok := true; if index = 0 or index <> gem_index and gem_index <> 0 or segm (z) <> index then system (9, nr * 100 + idx, <:<10>index?:>); if test_imc_connection (z, index, reason) then begin <* connection ok *> if test then write (out, <:imcconnect=true, connect=ok, index=:>, <<d>, index, "sp", 1); connected := true; end connection ok else begin <* connection ej ok *> if test then write (out, <:imcconnect=true, connect=ej-ok, index=:>, <<d>, index, "sp", 1); imcdisconn (z, reason); connected := false; end connection ej ok; end connect ok else begin <* connect ej ok *> if test then write (out, <:imcconnect=false, index=:>, <<d>, index, "sp", 1); ok := connected := false; imcdisconn (z, reason); end connect ej ok; if test then wr_test_reason (reason); if index <> gem_index and gem_index <> 0 then system (9, nr * 100 + idx, <:<10>index??:>); x_imc_connect := ok and connected; end procedure x_imc_connect; boolean procedure x_imc_getconnect (z, index, reason); zone z; integer index; long reason; begin <* udfører getconnect og afventer ok *> boolean ok, connected; integer gem_index; gem_index := index; ok := connected := false; repeat if test then begin wr_test (nr, idx, <:imcgetconn, index=:>, index); write (out, <: index=:>, <<d>, index, "sp", 1); end test; if imcgetconn (z, index, reason) then begin <* getconnect *> if test then write (out, <:imcgetconn=true, index=:>, <<d>, index, "sp", 1); ok := true; if index = 0 or index <> gem_index and gem_index <> 0 or segm (z) <> index then system (9, nr * 100 + idx, <:<10>index?:>); if test_imc_connection (z, index, reason) then begin <* connection ok *> if test then write (out, <:imcgetconn=true, connect=ok, index=:>, <<d>, index, "sp", 1); connected := true; end connection ok else begin <* connection ej ok *> if test then write (out, <:imcgetconn=true, connect=ej-ok, index=:>, <<d>, index, "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 *> if test then write (out, <:imcgetconn=false, index=:>, <<d>, index, "sp", 1); ok := connected := false; imcdisconn (z, reason); end getconnect ej ok; if test then wr_test_reason (reason); until connected or not ok; if index <> gem_index and gem_index <> 0 then system (9, nr * 100 + idx, <:<10>index??:>); x_imc_getconnect := ok and connected; end procedure x_imc_getconnect; \f algol copy.1; \f system (5, 86, ia); <* first/last buf *> first_buf := ia (1); last_buf := ia (2); system (5, system (6, 0, la) + 26, ia); <* get bufferclaim *> i := 2 + (maxinc * maxidx) * (if duplex then shares + 1 else shares); <* wanted bufs *> if ia (1) shift (- 12) < i then system (9, i, <:<10>bufs:>); trap (trap_død); cpu_ialt := tid_ialt := 0; bytes_ialt := io_ialt := 0; xnulstil (antal_io); if buflgd = 0 then begin <* benyt maxsendsize *> i := - 1; <* første frie device *> reason := 1; <* antal imc bufs *> ldlink (zlan, i, <::>, 2, <::>, reason); <* lav link for at få maxsend *> buflgd := reason shift (- 32) extract 16; <* maxsendsize *> ldunlink (zlan, i, <::>, reason); <* fjern link *> end maxsendsize; if fil then begin anttest := 1; buflgd := buflgd // 6 // 128 * 128 * 6; maxidx := 1; maxinc := 1; coroutine := false; end fil; buflgd := buflgd // 6 * 6; buflgd_hw := buflgd // 6 * 4; if maxinc <= 1 then duplex := false; if coroutine then activity (maxinc * maxidx); inc := maxinc * maxidx; write (out, <<d>, "nl", 1, "-", 70, "nl", 1, ";", 1, <: Antal.:>, anttest, ".", 1, maxio, <: Buflgd.:>, buflgd, if datacheck then <: Check.ja:> else <::>, if duplex then <: Duplex.ja:> else <::>, if fil then <: Fil.:> else <::>, filnavn, <: Hostremote.:>, name_remote, <: Inc.:>, maxinc, ".", 1, maxidx, "nl", 1, ";", 1, <: Lanno.:>, lanno, if not link then <: Makelink.nej:> else <::>, if input then <: Read.ja:> else <::>, if output then <: Write.ja:> else <::>, <: Shares.:>, shares, if test then <: Test.ja:> else <::>, "nl", 1, ";", 1, if coroutine then <::> else <: ingen:>, <: activities:>, "nl", 1, "-", 70, "nl", 1); if online then setposition (out, 0, 0); buf := 0; for res := monitor (66, zhlp, buf, ia) while res <> - 1 do if res = 0 then begin <* fjern gamle messages *> monitor (20, zhlp, buf, ia); <* get message *> ia (9) := 2; <* rejected *> monitor (22, zhlp, buf, ia); <* send answer *> getzone6 (zhlp, ia); write (out, <<d>, "nl", 1, <:returner message fra :>, ia.laf2); if online then setposition (out, 0, 0); buf := 0; <* forfra *> end fjern message; for nr := 1 step 1 until maxinc do begin idx := 0; name_imc (1) := long <::> + extend (if input then 'r' else 'w') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_imc.laf2, name_local, 6); name_l (1) := long <::> + extend (if input then 'i' else 'o') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_l.laf2, name_local, 6); name_r (1) := long <::> + extend (if output then 'i' else 'o') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_r.laf2, name_remote, 6); open (zimc (nr), 20, name_imc, 1 shift 9); if link then ldunlink (zlan, 0, name_imc, reason); <* fjern evt gammelt link *> i := - 1; <* første frie device *> j := maxidx * shares + (if duplex then maxidx else 0) + 1; <* antal imc bufs *> reason := j; if test and link then wr_test (nr, idx, <:ldlink:>, - 1); if (if link then not ldlink (zlan, i, name_imc, 2, <::>, reason) else false) then fejl_reason (nr, idx, <:ldlink:>, name_imc, reason); if link and reason shift (- 24) extract 8 < j then begin <* for få buffere skaffet *> wr_test (nr, idx, <:bufs wanted=:>, j); wr_test (nr, idx, <:bufsunused=:>, reason shift (- 24) extract 8); fejl_reason (nr, idx, <:ldlink:>, name_imc, reason); end for få; if link then begin wr_test (nr, idx, <:deviceno=:>, i); wr_test (nr, idx, <:maxsendsize=:>, reason shift (- 32) extract 16); wr_test (nr, idx, <:bufsunused=:>, reason shift (- 24) extract 8); end link; if test then wr_test (nr, idx, <:imcopenport:>, - 1); if not imcopenport (zimc (nr), 3, name_l, reason) then fejl_reason (nr, idx, <:imcopenport:>, name_imc, reason); if not coroutine then begin <* ej activities *> nr := 1; idx := 1; systime (1, 0, sidst_rørt ((nr - 1) * maxidx + idx)); io_proc (1, nr, idx, input, name_imc, name_l, name_r) end not coroutine else begin <* start activities *> for idx := 1 step 1 until maxidx do begin <* start coroutiner *> systime (1, 0, sidst_rørt ((nr - 1) * maxidx + idx)); i := newactivity ((nr - 1) * maxidx + idx, 0, io_proc, (nr - 1) * maxidx + idx, nr, idx, if not duplex or nr extract 1 = 1 then input else output, name_imc, name_l, name_r) extract 24; if i <= 0 then system (9, i, <:<10>error:>); <* fejlet i opstarten *> end start; end start activities; end for nr; if coroutine then begin <* kør activities *> begin_cpu := systime (1, 0, begin_tid); while inc > 0 do begin <* reaktiver *> buf := 0; for res := w_activity (buf) while res < 0 do if test then write (out, <<d>, "nl", 1, <:w-activity=:>, res, <: buf.:>, buf); if res = 0 then begin <* skriv status *> zone z (128, 1, stderror); monitor (20, zhlp, buf, ia); <* get message *> ia (9) := 2; <* rejected *> monitor (22, zhlp, buf, ia); <* send answer *> getzone6 (zhlp, ia); open (z, ia (1), ia.laf2, 0); write_status (z); close (z, false); end fjern message else begin <* answer *> nr := res; if datacheck then begin <* check korrekt buffer *> system (12, nr, ia); if ia (1) <> buf then begin <* forkert buf *> latest_answer (out, nr, idx, buf); system (9, 8, <:<10>break:>); end forkert buf; end datacheck; comment write (out, <<d>, <:activate (:>, nr, <:) buf.:>, buf, "sp", 1); systime (1, 0, sidst_rørt (nr)); i := activate (nr) extract 24; if i > 0 then <* pasivated activity *> else if i = 0 then inc := inc - 1 <* afsluttet activity *> else system (9, nr, <:<10>activity:>); <* fejlet activity *> end answer; end while inc > 0; cpu_ialt := systime (1, begin_tid, tid_ialt) - begin_cpu; end kør activities; if cpu_ialt > 0 then begin write (out, <<d>, "nl", 1, "-", 70, "nl", 1, ";", 1, <: Antal.:>, anttest, ".", 1, maxio, <: Buflgd.:>, buflgd, if datacheck then <: Check.ja:> else <::>, if duplex then <: Duplex.ja:> else <::>, if fil then <: Fil.:> else <::>, filnavn, <: Hostremote.:>, name_remote, <: Inc.:>, maxinc, ".", 1, maxidx, "nl", 1, ";", 1, <: Lanno.:>, lanno, if not link then <: Makelink.nej:> else <::>, if input then <: Read.ja:> else <::>, if output then <: Write.ja:> else <::>, <: Shares.:>, shares, if test then <: Test.ja:> else <::>, "nl", 1, ";", 1, if coroutine then <::> else <: ingen:>, <: activities:>, "nl", 1, "-", 70, "nl", 1); if txt (1) <> long <::> then write (out, "nl", 1, "-", 70, "nl", 1, txt); write (out, "nl", 1, "-", 70, "nl", 1, <:Hastighedsmålinger:>, "nl", 1, <:Local host :>, "sp", 10 - xtextlgd (name_local), name_local, "nl", 1, <:Remote host :>, "sp", 10 - xtextlgd (name_remote), name_remote, "nl", 1, <:Lokalnet :>, "sp", 10 - xtextlgd (name_lan), name_lan, "nl", 1, <:Bufferlængde :>, <<dd ddd ddd>, buflgd, <: byte:>, "nl", 1, <:Porte :>, <<dd ddd ddd>, maxinc, "nl", 1, <:Connections pr port :>, <<dd ddd ddd>, maxidx, "nl", 1, <:Shares pr connect :>, <<dd ddd ddd>, shares, "nl", 1, <:Transmiteret :>, <<dd ddd ddd>, bytes_ialt // 1024, <: kbyte:>, "nl", 1, <:Antal buffere :>, <<dd ddd ddd>, io_ialt, <: io:>, "nl", 1, <:Realtidsforbrug :>, <<dd ddd.ddd>, tid_ialt, <: sek:>, "nl", 1, <:Kbyte/sek :>, <<dd ddd ddd>, bytes_ialt / 1024 / tid_ialt, "nl", 1, "-", 70, "nl", 1); end; if false then trap_død: begin <* fejlet *> comment write_status (out); end; trap (trap_yt); for nr := 1 step 1 until maxinc do begin name_imc (1) := long <::> + extend (if input then 'r' else 'w') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_imc.laf2, name_local, 6); name_l (1) := long <::> + extend (if input then 'i' else 'o') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_l.laf2, name_local, 6); name_r (1) := long <::> + extend (if output then 'i' else 'o') shift 40 + extend ('0' + nr // 10 mod 10) shift 32 + extend ('0' + nr // 1 mod 10) shift 24; tofrom (name_r.laf2, name_remote, 6); if test then wr_test (nr, idx, <:imccloseprt:>, - 1); imccloseprt (zimc (nr), reason); if test and link then wr_test (nr, idx, <:ldunlink:>, - 1); if (if link then not ldunlink (zlan, 0, name_imc, reason) else false) then fejl_reason (nr, idx, <:ldunlink:>, name_imc, reason); close (zimc (nr), true); end closeport; close (zlan, true); if false then trap_yt: begin <* fejlet *> comment write_status (out); fejl (0, 0, <:programnedgang:>, - 1); end; end extra; trap_heltyt: outchar (out, 'nl'); xconnectout; trapmode := 1 shift 10; end ▶EOF◀