%begin; !Copy
!Modded JHB 10/12/84: removed FCOMM call & replaced by COPY.
!Modded JGH 24/01/85: uses PAM values rather than always / & to use stream 0
! GDMR 28/06/85: concatenation now works (again?)

%option "-nocheck-nodiag"
%include "inc:util.imp"

%string(255)parm,in,out
%byte sep = '/'

%integer output stream

  %routine copy char by char
  %integer sym
    %on 3,9 %start
        selectoutput(0)
        %returnif event_event=9
        printstring(event_message)
        newline %unless event_message=""
        %return
    %finish
    select input (0)
    openinput(1,in) %and selectinput(1) %if in#""
    select output(output stream);  ! GDMR
    %cycle
      readsymbol(sym); printsymbol(sym)
    %repeat
  %end

  %predicate done remotely
  %integer i
    %on 3 %start
      %false
    %finish
    %falseif in="" %or out="" %or charno(in,1)=':' %or charno(out,1)=':'
    %for i = 1,1,length(in) %cycle
      %falseif charno(in,i)=','
    %repeat
    copy(in,out)
    %true
  %end

  %onevent 3,4 %start
    selectoutput(0); printline(event_message)
    %stop
  %finish

  Select input (0)
  Select output (0)
  sep = PAM_group sep %if pam_group sep >=' '
  parm = cliparam
  %if parm = "" %start
      Prompt ("Input file(s): ")
      read line (in)
      Prompt ("Output file: ")
      read line (out)
      Prompt (":")
  %else
      in = parm %and out = "" %unless parm -> in.(TO STRING(SEP)).out
  %finish

  %unless done remotely %start
    %if out = "" %start
      output stream = 0
    %else
      open output(1, out)
      output stream = 1
    %finish
    parm = in.","
    copy char by char %while parm -> in.(",").parm
  %finish
%endofprogram
