[fpc-devel] Questions regarding m68k-atari target

Tomas Hajny XHajT03 at hajny.biz
Sat Jan 29 16:03:32 CET 2022


On 2022-01-29 15:05, Thorsten Otto via fpc-devel wrote:
> On Samstag, 29. Januar 2022 14:55:30 CET Karoly Balogh wrote:
> 
>> Yes, but changing this is not trivial in platform independent code,
> 
> It doesn't have to, if it can be fixed in fpc_readln_end().
> 
>> Maybe Sven or someone can say more about the Windows analogy, I'm
>> not familiar there.
> 
> Thats something i have to check. Normally win32 should suffer from the
> same problem. The C-runtime (MSVCRT) whould handle that, but not the
> Windows ReadFile() function. Maybe that is some magic in the console
> mode of windows.

This isn't something specific to Atari and Win32, CRLF is equally used 
for several other targets (starting with the first one implemented in 
FPC, which is 32-bit DOS with extender, continuing with the second one, 
OS/2, and several other). The implementation in the previously mentioned 
include file shared for all FPC targets allows any of CR, LF or CRLF as 
end of line. You can see that at the end of fpc_readln_end():

    if (prev=#13) then
      { is there also a #10 after it? }
      begin
        if (TextRec(f).BufPtr^[TextRec(f).BufPos]=#10) then
          { yes, skip that one as well }
          inc(TextRec(f).BufPos);
        exit;
      end;

If there's #13 (CR), the implementation just checks whether #10 follows 
(if so, it skips this character), but it stops reading regardless from 
the result. Again, there's nothing wrong to be "fixed" here.


>> Also then I don't understand why it still works and
> 
>> returns after pressing it 3 times
> 
> I don't understand that either ;)

I know absolutely nothing about Atari, but if I should guess, I'd 
suggest having a look at how does the function gemdos_fread behave in 
case of console input - does it return individual characters, or does it 
return the whole line at once (the latter being the case for other FPC 
targets as far as I know)? Maybe this is something that needs to be 
handled specifically when reading from devices (i.e. the console in case 
of Atari) in the implementation of do_read in rtl/atari/sysfile.inc? I 
don't know whether there's a reasonable debugging possilibity for Atari, 
but even if there isn't, you can simply compile a program calling 
gemdos_fread directly for the stdInput handle and check the exact 
behaviour this way.

Tomas


More information about the fpc-devel mailing list