anchor.diff:  begin
     result := 0;
     if (FEOF) then exit;
  -  if (FData.Position = FData.Size) then InternalRead;
  +  try
  +    if (FData.Position = FData.Size) then InternalRead;
  +  except
  +    on E: Exception do raise UE3PPException.Create(currentLine, linePos, e);
  +  end;
     if (FEOF) then exit;
     result := FData.Read(buffer, Count);
   end;
  
positive.code:     if (P^ = CALL_MACRO_CHAR) then begin
        SetString(res, StartP, P-StartP);
        result := result+res;
        Inc(P);
        result := result+ProcMacro();
        StartP := P;
      end
      else begin
        Inc(P);
      end;
    end;
    if (P <> StartP) then begin
  
negative.code:     // no args
      exit;
    end;
    IncP;
    idx := 0;
    while (not (P^ in [')', #0])) do begin
      arg := ConsumeTokensTill([',', ')']);
  