%begin %include "rgs_1:util" %string(255) line, text, file %string(255) %array file name (1:3) %integer %array flags(1:3) %integer mode, files, i %on %event 3,4,9 %start close input select output(i) %and close output %for i=1,1,files -> the end %finish file = cli param open input(1, file); select input(1) mode = 0 files=0 flags(i)=0 %for i=1,1,3 %cycle line = "" line = line.to string(next symbol) %and skip symbol %until next symbol < ' ' text = line skip symbol mode=0 %if line -> ("!PROGRAMS ").line %start files=1 files = files+1 %while line -> filename(files).(",").line filename(files)=line %for i=1,1,files %cycle flags(i)=0 delete(filename(i)) %if exists(filename(i)) openoutput(i, filename(i)) %repeat %else %if line = "!PAGE" text = " {".to string(12) %else %if line = "!ALL" flags(i)=0 %for i=1,1,files %else %if line -> ("!$IF ").line %for i=1,1,files %cycle %if line -> (filename(i)) %then flags(i)=1 %else flags(i)=-1 %repeat %else %if line = "!ELSE" flags(i)=-flags(i) %for i=1,1,files %else mode = 1 %finish %for i=1,1,files %cycle ! select output(0);printstring(filename(i).": ");write(flags(1),1);newline select output(i) line=text %if mode=1 %start %if flags(i)=1 %start char no(line,1)=' ' %else %if flags(i)=-1 char no(line,1)='!' %finish %finish print string(line) newline %repeat %repeat the end: %end of program