|
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: 26880 (0x6900) Types: TextFile Names: »mainstat3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »mainstat3tx «
begin message: mainstat, 1984.10.08; comment: mainstat (jr, eli, fgs). mainstat is a diagnostic tool for printing statistical informa- tion and testoutput from the fpa , ida or ifp main processses (rc8000) or the scc processes (rc4000). mainstat may as well print directly from the core as from a file containing a core picture. when printing directly from core the generation of testoutput is disabled for a moment. mainstat is called in the following way: <outfile> = mainstat <proc spec> <function> <proc spec> ::= core8000.<name(fpa/ida/ifp mainproc)> core4000.<name(scc mainproc)> dump8000.<dump file>.<proc desc addr(fpa/ida/ifp mainproc)> dump4000.<dump file>.<proc desc addr(scc proc)> <function> ::= <empty> test.yes test.no the <proc spec> field is used to define the type of the computer (rc8000/rc4000) and where the statistical informations shall be printed from (core or a core dump). the <function> field is used to specify whether the test records shall be printed, - the default value is 'test.no'. mainstat may terminate with the error messages: ***mainstat, error in call the call does not follow the syntax ***mainstat, no testbuffer the process specified has no testbuffer ***mainstat, mainprocess unknown the fpa- or scc-process specified does not exist ***mainstat, mainprocess not found the fpa- or scc-process specification didnt lead to a main process \f ; procedure error (errortype); value errortype; integer errortype; begin write(out, <:<10>***:>, progname, <:, :>, case errortype of ( <*1*> <:error in call:>, <*2*> <:no testbuffer:>, <*3*> <:mainprocess unknown:>, <*4*> <:mainprocess not found:>), <:<10>:>); if errortype = 1 then write (out, "nl", 2, <: call : (<outfile>=) mainstat <procspec> <function> <procspec> = core8000.<name fpa, ida or ifp main proc> core4000.<name scc main proc> dump8000.<area>.<addr fpa, ida or ifp main proc> dump4000.<area>.<addr scc main proc> <function> = <empty> test.yes test.no (default) :>, "nl", 1); errorbits := 3; goto stop; end procedure error; procedure fparecout(kind, buf, addr); value kind; integer array buf; integer kind, addr; begin comment: prints the testrecord stored in <buf> starting at index <addr>. at return, <addr> points to the first index after the record; own boolean notfirst; own long oldtime; integer type, length, last, i, j; long time; real day,hms; long field t; procedure inittexts (kind, texts); value kind; integer kind; real array texts; begin comment: initializes textinformation corresponding to testrecord-type; integer i; for i:= 0 step 1 until 95 do texts(i):= real <::>; oldtime:=0; comment: individual texts may be inserted here; \f if -,flag4000 then for i:=1 step 1 until 95 do texts (i) := if kind = 80 <*fpa main*> then real (case i of ( <* 1 *> <:main: message buffer received:>, <* 2 *> <:main: master clear received:>, <* 3 *> <:main: call receiver(start):>, <* 4 *> <:main: call transmitter(transmit):>, <* 5 *> <:main: call transmitter(master clear):>, <* 6 *> <:main: call receiver(master clear):>, <* 7 *> <:main: stop testput:>, <* 8 *> <:main: start receive:>, <* 9 *> <:main: check receive result:>, <* 10 *> <::>, <* 11 *> <::>, <* 12 *> <:main: start transmit:>, <* 13 *> <:main: check transmit result:>, <* 14 *> <::>, <* 15 *> <::>, <* 16 *> <:enter subprocess:>, <* 17 *> <:return from subprocess:>, <* 18 *> <::>, <* 19 *> <::>, <* 20 *> <::>, <* 21 *> <::>, <* 22 *> <::>, <* 23 *> <::>, <* 24 *> <:rec: start io (io function):>, <* 25 *> <:rec: start wait:>, <* 26 *> <:rec: start io (channel program):>, <* 27 *> <:rec: after receive (channel program):>, <* 28 *> <:rec: interrupt:>, <* 29 *> <:rec: error:>, <* 30 *> <:rec: after receive (header):>, <* 31 *> <:rec: return to mainproc:>, <* 32 *> <:trm: execute message received:>, <* 33 *> <:trm: start transmit receive:>, <* 34 *> <:trm: start wait:>, <* 35 *> <:trm: after transmit (channel program):>, <* 36 *> <:trm: interrupt:>, <* 37 *> <:trm: after transmit (various):>, <* 38 *> <:trm: after transmit (header):>, <* 39 *> <:trm: return to mainproc:>, <* 40 *> <::>, <* 41 *> <::>, <* 42 *> <::>, <* 43 *> <::>, <* 44 *> <::>, <* 45 *> <::>, <* 46 *> <::>, <* 47 *> <::>, <* 48 *> <::>, <* 49 *> <::>, <* 50 *> <::>, \f <* 51 *> <::>, <* 52 *> <::>, <* 53 *> <::>, <* 54 *> <::>, <* 55 *> <::>, <* 56 *> <::>, <* 57 *> <::>, <* 58 *> <::>, <* 59 *> <::>, <* 60 *> <::>, <* 61 *> <::>, <* 62 *> <::>, <* 63 *> <::>, <* 64 *> <::>, <* 65 *> <::>, <* 66 *> <::>, <* 67 *> <::>, <* 68 *> <::>, <* 69 *> <::>, <* 70 *> <::>, <* 71 *> <::>, <* 72 *> <:host: entry0 (message):>, <* 73 *> <:host: lookup process (input area:>, <* 74 *> <:host: entry1 (message):>, <* 75 *> <:host: entry1 (output buffer):>, <* 76 *> <:host: entry2 (host proc desc):>, <* 77 *> <::>, <* 78 *> <::>, <* 79 *> <::>, <* 80 *> <:host: entry3 (message):>, <* 81 *> <::>, <* 82 *> <::>, <* 83 *> <::>, <* 84 *> <:host: entry4 (rec area in main):>, <* 85 *> <:host: entry4, create (proc desc):>, <* 86 *> <:host: entry4, create (trm area in main):>, <* 87 *> <:host: entry4, error:>, <* 88 *> <:host: entry4, remove (sub proc desc):>, <* 89 *> <:host: entry4 (message):>, <* 90 *> <:host: linkup local (message):>, <* 91 *> <::>, <* 92 *> <::>, <* 93 *> <::>, <* 94 *> <:host: remove subprocess:>, <* 95 *> <::> )) else \f real (case i of ( <* 1 *> <::>, <* 2 *> <::>, <* 3 *> <::>, <* 4 *> <::>, <* 5 *> <::>, <* 6 *> <::>, <* 7 *> <::>, <* 8 *> <::>, <* 9 *> <::>, <* 10 *> <::>, <* 11 *> <::>, <* 12 *> <::>, <* 13 *> <::>, <* 14 *> <::>, <* 15 *> <::>, <* 16 *> <::>, <* 17 *> <::>, <* 18 *> <::>, <* 19 *> <::>, <* 20 *> <::>, <* 21 *> <::>, <* 22 *> <::>, <* 23 *> <::>, <* 24 *> <::>, <* 25 *> <::>, <* 26 *> <::>, <* 27 *> <::>, <* 28 *> <::>, <* 29 *> <::>, <* 30 *> <::>, <* 31 *> <::>, <* 32 *> <::>, <* 33 *> <::>, <* 34 *> <::>, <* 35 *> <::>, <* 36 *> <::>, <* 37 *> <::>, <* 38 *> <::>, <* 39 *> <::>, <* 40 *> <::>, <* 40 *> <::>, <* 41 *> <::>, <* 42 *> <::>, <* 43 *> <::>, <* 44 *> <::>, <* 45 *> <::>, <* 46 *> <::>, <* 47 *> <::>, <* 48 *> <::>, <* 49 *> <::>, <* 50 *> <::>, \f <* 51 *> <::>, <* 52 *> <::>, <* 53 *> <::>, <* 54 *> <::>, <* 55 *> <::>, <* 56 *> <::>, <* 57 *> <::>, <* 58 *> <::>, <* 59 *> <::>, <* 60 *> <::>, <* 61 *> <::>, <* 62 *> <::>, <* 63 *> <::>, <* 64 *> <::>, <* 65 *> <::>, <* 66 *> <::>, <* 67 *> <::>, <* 68 *> <::>, <* 69 *> <::>, <* 70 *> <::>, <* 71 *> <::>, <* 72 *> <::>, <* 73 *> <::>, <* 74 *> <::>, <* 75 *> <::>, <* 76 *> <::>, <* 77 *> <::>, <* 78 *> <::>, <* 79 *> <::>, <* 80 *> <::>, <* 81 *> <::>, <* 82 *> <::>, <* 83 *> <::>, <* 84 *> <::>, <* 85 *> <::>, <* 86 *> <::>, <* 87 *> <::>, <* 88 *> <::>, <* 89 *> <::>, <* 90 *> <::>, <* 91 *> <::>, <* 92 *> <::>, <* 93 *> <::>, <* 94 *> <::>, <* 95 *> <::> )); end inittexts; \f if -,notfirst then begin inittexts (kind, texts); notfirst:= true; end; type:= buf(addr) shift (-12); length:= (buf(addr) extract 12) shift (-1); if type<>0 then begin comment: not dummy record; t:= 2*addr+4; if oldtime=0 then oldtime:=buf.t; time:= buf.t mod 10000; day := systime(2,buf.t/10000,hms); write(out, <:<10>type: :>, <<dd>, type, <:, time::>, << dd dd dd>, day, hms, <<__zdd.d>, time/10, <<__+dddd.d>, (buf.t-oldtime)/10, <:, :>, string texts(type), <:<10>:>); oldtime:=buf.t; last:= addr+length-1; for i:= addr+3 step 1 until last do outword(buf(i)); end type<>0; addr:= addr+length; end fparecout; procedure outword(word); value word; integer word; begin integer i; comment: prints <word> as 24-, 12-, 8- and 3-bit integers; write(out, false add 32, 5, <<_-ddddddd>, word, false add 32, 4, <<__dddd>, word shift (-12), word extract 12, false add 32, 4, <<__ddd>, word shift (-16), word shift (-8) extract 8, word extract 8,<: :>); for i:=-7 step 1 until 0 do write( out, <<d>,word shift(3*i) extract 3); write(out,<:<10>:>); end outword; \f procedure write_stat_rec ( z, proc_descr_addr, ia ); value proc_descr_addr ; integer proc_descr_addr ; zone z ; integer array ia ; begin write (z, <<dddd>, <:<10>statistics of receiver, proc descr addr : :>, proc_descr_addr, <:<10> blocklength errors : :>, ia (0) extract 12 , <:<10> parity errors : :>, ia (1) shift (-12), <:<10> time out (transmit) : :>, ia (1) extract 12 , <:<10> time out (monitor ) : :>, ia (2) shift (-12), <:<10> abnormal termination : :>, ia (2) extract 12 , <:<10> master clear received : :>, ia (3) shift (-12), <:<10> accept master clear received : :>, ia (3) extract 12 , <:<10> block number errors : :>, ia (4) shift (-12), <:<10>:>); end write_stat_rec; procedure write_stat_tr ( z, proc_descr_addr, ia ); value proc_descr_addr ; integer proc_descr_addr ; zone z ; integer array ia ; begin write (z, <<dddd>, <:<10>statistics of transmitter, proc descr addr: :>, proc_descr_addr , <:<10> blocklength errors : :>, ia (0) extract 12 , <:<10> parity errors : :>, ia (1) shift (-12), <:<10> time out (transmit) : :>, ia (1) extract 12 , <:<10> time out (monitor ) : :>, ia (2) shift (-12), <:<10> abnormal termination : :>, ia (2) extract 12 , <:<10> parity errors (rec ) : :>, ia (3) shift (-12), <:<10> blocklength errors (rec) : :>, ia (3) extract 12 , <:<10> waitprogram terminated : :>, ia (4) shift (-12), <:<10>:> , <<d ddd ddd>, <:<10> execution times (in millisecs) : :>, <:<10> 00 - 05 : :>, ia ( 7), <:<10> 06 - 10 : :>, ia ( 8), <:<10> 11 - 20 : :>, ia ( 9), <:<10> 21 - 40 : :>, ia (10), <:<10> 41 - 80 : :>, ia (11), <:<10> 81 - : :>, ia (12), <:<10><10>:>); end write_stat_tr; \f procedure write_stat_main (z, proc_descr_addr, ia); value proc_descr_addr ; zone z ; integer proc_descr_addr ; integer array ia ; begin long total; total := (extend ia (1)) shift 24 add ia (2); write (z, <<d ddd ddd ddd ddd>, <:<10>statistics of main process, process descr address : :>, proc_descr_addr, <:<10> no of times controller not able to receive : :>, ia (0), <:<10> total number of operations to controller : :>, total, <:<10> number of chained operations to controller : :>, ia (3), <:<10>:>); end write_stat_main; \f comment: start of program; integer i, j, l, call, mpd, rpd, tpd, dl, inx, oldinx, mainkind; boolean testpr, flag4000, coredump; integer array descr(1:3), oldtestmask(1:5), mess(1:12); real array dumparea(1:2), mainname(1:2), texts (0:95); long array progname, outfile , chain_name (1:2); zone z(1, 1, stderror), dz(256, 1, stderror); integer procedure stack_current_output (file_name); long array file_name ; begin integer result ; result := 2; <*1<1 <=> 1 segment, preferably disc*> fp_proc (29, 0, out, chain_name); <*stack c o*> fp_proc (28, result, out, file__name); <*connect *> if result <> 0 then fp_proc (30, 0, out, chain_name); <*unstack *> stack_current_output := result; end stack_current_output; procedure unstack_current_output ; begin fp_proc (34, 0, out, 25); <*close up*> fp_proc (79, 0, out, 0); <*terminate*> fp_proc (30, 0, out, chain_name); <*unstack *> end unstack_current_output; procedure enable; begin integer i; getshare (z, mess, 1); mess (4) := 12 shift 12; for i := 1 step 1 until 5 do mess ( i+4 ) := oldtestmask (i); setshare (z, mess, 1); monitor (16, z, 1, mess); <*send message*> monitor (18, z, 1, mess); <*wait answer*> end enable; \f comment: check and interprete parameters in call; begin integer paramno, sepleng, result; real array param(1:2); trapmode := 1 shift 10; <*no end alarm written*> system (4, 0, out_file); sepleng := system (4, 1, progname); if sepleng shift (-12) <> 6 <*=*> then begin <*noleft side, progname is param after programname*> for i := 1, 2 do begin prog_name (i) := out_file (i); out__file (i) := long <::> ; param_no := 1 ; end; end <*no left side*> else param_no := 2; if out_file (1) <> long <::> then begin <*stack current out and connect*> result := stack_current_output (out_file); if result <> 0 then begin write (out, "nl", 1, <:***:>, progname, "sp", 1, <:connect :>, outfile, "sp", 1, case result of ( <:no resources:>, <:malfunction:>, <:not user, not exist:>, <:convention error:>, <:not allowed:>, <:name format error:> )); out_file (1) := long <::>; end; end <*stack current out and connect*>; if system(4, increase (param_no), param) <> 4 shift 12 + 10 then error(1); call:=0; if param(1)=real <:core8:> add 48 then call:=1; if param(1)=real <:core4:> add 48 then call:=2; if param(1)=real <:dump8:> add 48 then call:=3; if param(1)=real <:dump4:> add 48 then call:=4; if call=0 then error(1); \f testpr:=false; flag4000:=if call=1 or call=3 then false else true; coredump:=if call<3 then false else true; if system(4, increase (param_no), param) <> 8 shift 12 + 10 then error(1); if coredump then begin real array ra(1:2); if system(4, increase (param_no), ra) <> 8 shift 12 + 4 then error(1); mpd:=ra(1); dumparea(1):=param(1); dumparea(2):=param(2); end; begin real array ra(1:2); i := system(4, increase (paramno), ra); if i<>0 then begin if i<>4 shift 12 + 10 or ra(1)<>real <:test:> then error(1); if system(4, paramno, ra) <> 8 shift 12 + 10 then error(1); if ra(1)=real <:yes:> then testpr:=true else if ra(1)=real <:no:> then testpr:=false else error(1); end; end; if coredump then begin integer array ia (1:10); integer field kind; real field name; i:=1; rpd := tpd := 0; open(dz,4,string dumparea(increase(i)),0); ia (1) := 0; if monitor (42, dz, 1, ia) <> 0 or mpd//512 >= ia (1) <*size*> then error (4); setposition(dz, 0, mpd//512); inrec6(dz, mpd mod 512); inrec6(dz, 10); kind := 2; main_kind := dz.kind; if main_kind <> 80 <*fpa main*> and main_kind <> 20 <*ida main*> and main_kind <> 26 <*ifp main*> then error (4); \f name:=6 ; mainname(1):=dz.name; name:=10; mainname(2):=dz.name; if -,flag4000 then begin integer field ifi; integer array ia(0:1); setposition(dz, 0, 1200//512); <*some monitor addresses area save in address 1200 ff.*> <*for coredump purposes *> <*1200 : name table start *> <*1202 : first device in name table *> <*1204 : first area in name table *> inrec6 (dz, 1200 mod 512); inrec6(dz, 8); ifi:=4; ia(0):=dz.ifi; ifi:=6; ia(1):=dz.ifi; setposition(dz, 0, ia(0)//512); inrec6(dz, ia(0) mod 512); ifi:=2; for i:=0 step 2 until ia(1)-ia(0)-2 do begin inrec6(dz, 2); if dz.ifi=mpd then begin inrec6(dz, 2); rpd:=dz.ifi; inrec6(dz, 2); tpd:=dz.ifi; i := ia (1) - ia (0); end; end; if rpd = 0 <*mpd not found in name table*> then error (4); end <*not flag4000*>; end <*coredump*> else \f begin <*core*> integer array ia(0:1); i:=1; open(z,0,string param(increase(i)),0); mpd:=monitor(4,z,0,ia); close(z,true); if mpd > 0 then system (5, mpd, ia) else ia (0) := 0; <*mpd > 0 => ia (0) := kind, mpd = 0 => ia (0) := 0;*> main_kind := ia (0); if main_kind <> 80 <*fpa main*> and main_kind <> 20 <*ida main*> and main_kind <> 26 <*ifp main*> then error (4); mainname(1):=param(1); mainname(2):=param(2); if -,flag4000 then begin system(5,74,ia); begin integer array devnametable(0:(ia(1)-ia(0))/2); system(5,ia(0),devnametable); for i:=0 step 1 until (ia(1)-ia(0))/2 do if devnametable(i)=mpd then begin rpd:=devnametable(i+1); tpd:=devnametable(i+2); end; end; end; end; end; \f comment: print statistics; i:=1; write(out,<:<10><10>:>, case call of ( if mainkind = 80 then <:core8000, fpa:> else if mainkind = 20 then <:core8000, ida:> else <:core8000, ifp:>, <:core4000, scc:>, if mainkind = 80 then <:dump8000, fpa:> else if mainkind = 20 then <:dump8000, ida:> else <:dump8000, ifp:>, <:dump4000, scc:>), <: testprint:>, <:<10>name of main process : :>, string mainname (increase (i)), <:, process description address: :>, mpd, <:<10><10>:>); case call of begin begin <*core rc8000*> integer array core(0:12); if main_kind = 80 <*fpa main*> then begin system(5,rpd+54,core); write_stat_rec (out, rpd, core); system(5,tpd+54,core); write_stat_tr (out, tpd, core); end else begin <*ida/ifp*> system (5, mpd + 80, core); write_stat_main (out, mpd, core); end; end; <*core rc4000*> write (out, <:<10><10>***:>,prog_name, <:, statistics scc mainproc:>, <: not implemented<10><10>:>); begin <*dump rc8000*> integer array field iaf; iaf := 2; if main_kind = 80 <*fpa main*> then begin setposition (dz, 0, (rpd+54) // 512); inrec6 (dz, (rpd+54) mod 512); inrec6 (dz, 10 ); write_stat_rec (out, rpd, dz.iaf); setposition (dz, 0, (tpd+54) // 512); inrec6 (dz, (tpd+54) mod 512); inrec6 (dz, 26 ); write_stat_tr (out, tpd, dz.iaf); end else begin <*ida/ifp*> setposition (dz, 0, (mpd + 80) // 512); inrec6 (dz, (mpd + 80) mod 512); inrec6 (dz, 8); write_stat_main (out, mpd, dz.iaf); end; end <*dump rc8000*>; <*dump rc4000*> write (out, <:<10><10>***:>, prog_name, <:, statistics scc mainproc:>, <: not implemented<10><10>:>); end; \f comment: get buffer pointers, from the dumparea or from core; if coredump then begin integer field tbuffirst, tbuftop, tbufcur, ifi; tbufcur:=24; tbuftop:=26; tbuffirst:=if flag4000 then 38 else 28; setposition(dz, 0, mpd//512); inrec6(dz, mpd mod 512); inrec6(dz, 40); descr(1):=dz.tbufcur; descr(2):=dz.tbuftop; descr(3):=dz.tbuffirst; i:=1; if flag4000 then begin for ifi:=28 step 2 until 34 do begin oldtestmask(i):=dz.ifi; i:=i+1; end; end else begin for ifi:=32 step 2 until 38 do begin oldtestmask(i):=dz.ifi; i:=i+1; end; end; end else begin comment: get pointers from core; i:=1; open(z, 0, string mainname(increase(i)), 0); \f comment: get old testmask and disable generation of testoutput while the testbuffer and -pointers are inspected; if flag4000 then system(5, mpd+26, oldtestmask) else system(5, mpd+30, oldtestmask); if mainkind<> 80 then begin <*ida/ifp*> for i := 3 step 1 until 5 do old_testmask (i) := 0; end; end <*get pointers from core*>; write (out, "nl", 2, <:testmask : :>, "nl", 1); for i := 1 step 1 until (if main_kind = 20 then 2 else 4) do begin write (out, "sp", 19); l := old_testmask (i); for j := -23 step 1 until 0 do write (out, if l shift j extract 1 = 1 then "1" else ".", 1); write (out, "nl", 1); end; write (out, "nl", 1); if -,testpr then goto stop; if -, coredump then begin <*core*> getshare(z, mess, 1); mess(4):= 12 shift 12; for i := 5 step 1 until 9 do mess (i) := 0; <*clear testmask*> setshare(z, mess, 1); monitor(16, z, 1, mess); monitor(18, z, 1, mess); trap (enable2); <*in case of alarm the test mask must be reset*> \f system(5, mpd+22, descr); if flag4000 then begin integer array ia(1:1); system(5, mpd+36, ia); descr(3):=ia(1); end; goto skip_enable2; enable2: <*traproutine to enable generation of testoutput*> enable; goto stop; skip_enable2: trap (enable1); <*in case of alarm the test mask must be reset*> end <*core*>; \f comment: get and print testbuffer; if descr(2)-descr(3) <= 0 then error(2); <*testoutput bliver ikke enabled igen, men testbufferen eksisterer*> <*jo heller ikke *> write(out, <:<10><10><10>:>, <:testbuffer:<10> :>, <:bufferpointers:<10> :>, <:first: :>, descr(3), <:, last: :>, descr(2), <:, next: :>, descr(1), <:<10><10>:>); dl:=(descr(2)-descr(3)) shift (-1); goto skip_enable1; enable1: <*traproutine to reset test mask*> enable; goto stop; skip_enable1: begin integer array core(0:dl-1); if -,coredump then trap (enable3); comment: read from bs-area into array 'core'; if coredump then begin integer field ifi; ifi:=2; setposition(dz, 0, descr(3)//512); inrec6(dz, descr(3) mod 512); for i:=0 step 1 until dl-1 do begin inrec6(dz, 2); core(i):=dz.ifi; end; close (dz, true); end else begin <*-,coredump*> system(5, descr(3), core); \f comment: now testoutput may be enabled again; trap (0); <*reset traplabel*> enable; goto skip_enable3; enable3: <*traproutine to reset test mask*> enable; goto stop; skip_enable3: end; comment: find first usable entry; oldinx:= (descr(1)-descr(3)) shift (-1); for inx:= oldinx step 1 until dl-1 do begin integer type; i:= j:= inx; l:= 0; type:=0; for j:= j, j+l while (j<dl and l<>0 and l<512 and type<96) do begin type:=core(j) shift (-12); l:= core(j) extract 12 shift (-1); end; if j=dl then inx:= dl; end; if inx<>dl then inx:=i; comment: print out all testrecords; for i:= inx while i<dl, 0, inx while i<>oldinx do begin inx:= i; fparecout (main_kind, core, inx); end; end; stop: if out_file (1) <> long <::> then unstack_current_output; end; ▶EOF◀