Just for completeness, This can be easily illustrated simply in R, no C code
needed:
cat("foo\n\rbar\n")
In unix terminal:
> cat("foo\n\rbar\n")
foo
bar
In Mac-GUI:
> cat("foo\n\rbar\n")
bar
Cheers,
Simon
> On Apr 17, 2021, at 20:29, Simon Urbanek <[email protected]> wrote:
>
> Ah, so you're not using R console, you're using the R.app Mac-GUI. That one
> is not a terminal, so it has entirely different rules, because it is
> combining all four streams (stdout, stderr and WriteConsole for both output
> and message). Also for historical reasons macOS (the original) used to use \r
> as newline (unix has \n and Windows has \r\n) - for that reason your
> combination of \n\r doesn't work since it is ambiguous in the Mac context and
> treated as CR. If you want a proper newline, you can change your example to
> something like
>
> REprintf("\n Processing data chunk %d of 3\n ",k+1);
>
> Which makes sure the \n is interpreted as \r\n first and only then you follow
> with \r. I suppose we could sunset the special handling of \r since it is
> likely quite rare to see Mac line endings these days... you could file an
> issue against Mac-GUI.
>
> Cheers,
> Simon
>
>
>
>> On Apr 17, 2021, at 19:26, Morgan Morgan <[email protected]> wrote:
>>
>> Hi Simon,
>> Thank you for the feedback.
>> It is really strange that you have a different output.
>> I have attached a picture of my R console.
>> I am just trying to port some pure C code that prints progress bars to R but
>> it does not seem to be printing properly.
>> It seems I am doing something wrong with REprintf and R_FlushConsole.
>> Best regards,
>> Morgan
>>
>> On Sat, Apr 17, 2021 at 12:36 AM Simon Urbanek <[email protected]>
>> wrote:
>> Sorry, unable to reproduce on macOS, in R console:
>>
>>> dyn.load("test.so")
>>> .Call("printtest",1e4L)
>>
>> Processing data chunk 1 of 3
>> [==============================] 100%
>>
>> Processing data chunk 2 of 3
>> [==============================] 100%
>>
>> Processing data chunk 3 of 3
>> [==============================] 100%
>> NULL
>>
>> But honestly I'm not sure sure I understand the report. R_FlushConsole is a
>> no-op for terminal console and your code just prints on stderr anyway (which
>> is not buffered). All this does is just a lot of \r output (which is highly
>> inefficient anywhere but in Terminal by definition). Can you clarify what
>> the code tries to trigger?
>>
>> Cheers,
>> Simon
>>
>>
>>> On Apr 16, 2021, at 23:11, Morgan Morgan <[email protected]> wrote:
>>>
>>> Hi,
>>>
>>> I am getting a really weird behaviour with the R console.
>>> Here is the code to reproduce it.
>>>
>>> 1/ C code: ---------------------------------------------------
>>>
>>> SEXP printtest(SEXP x) {
>>> const int PBWIDTH = 30, loop = INTEGER(x)[0];
>>> int val, lpad;
>>> double perc;
>>> char PBSTR[PBWIDTH], PBOUT[PBWIDTH];
>>> memset(PBSTR,'=', sizeof(PBSTR));
>>> memset(PBOUT,'-', sizeof(PBOUT));
>>> for (int k = 0; k < 3; ++k) {
>>> REprintf("\n Processing data chunk %d of 3\n",k+1);
>>> for (int i = 0; i < loop; ++i) {
>>> perc = (double) i/(loop-1);
>>> val = (int) (perc * 100);
>>> lpad = (int) (perc * PBWIDTH);
>>> REprintf("\r [%.*s%.*s] %3d%%", lpad, PBSTR, PBWIDTH - lpad, PBOUT,
>>> val);
>>> R_FlushConsole();
>>> }
>>> REprintf("\n");
>>> }
>>> return R_NilValue;
>>> }
>>>
>>> 2/ Build so/dll: ---------------------------------------------------
>>>
>>> R CMD SHLIB
>>>
>>> 3/ Run code : ---------------------------------------------------
>>>
>>> dyn.load("test.so")
>>> .Call("printtest",1e4L)
>>> dyn.unload("test.so")
>>>
>>> 4/ Issue: ---------------------------------------------------
>>> If you run the above code in RStudio, it works well both on Mac and Windows.
>>> If you run it in Windows cmd, it is slow.
>>> If you run it in Windows RGui, it is slow but also all texts are flushed.
>>> If you run it in Mac terminal, it runs perfectly.
>>> If you run it in Mac R Console, it prints something like :
>>>> .Call("printtest",1e4L)
>>> [==============================] 100%NULL----------------------------] 0%
>>>
>>> I am using R 4.0.4 (Mac) / 4.0.5 (Windows)
>>>
>>> Is that a bug or am I doing something wrong?
>>>
>>> Thank you
>>> Best regards,
>>> Morgan
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> [email protected] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>> <Screenshot 2021-04-17.png>
>
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel