%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
