a question about POSIX fgetc

Jose E. Marchesi jemarch@gnu.org
Fri Jul 3 15:53:49 GMT 2026


Isn't this a typo in the documentation?

  fgetc = (int fd) char

Is what is implemented.  We don't need to fallback to integers like with
8bit chars.

> On Thu, Jul 2, 2026, at 10:29 PM, chris hermansen wrote:
>> Good evening all;
>>
>> At https://gcc.gnu.org/onlinedocs/ga68/POSIX-string-transput.html I see 
>> fgetc defined as:
>>
>> Procedure: *fgetc* `= (*int* fd) *int*` 
>> <https://gcc.gnu.org/onlinedocs/ga68/POSIX-string-transput.html#index-fgetc>
>> Read a character from the file with descriptor `fd`. This procedure 
>> yields the read character in case a valid Unicode character got 
>> successfully read. If an unrecognizable or unknown character is found 
>> then this procedure yields `replacement char`. In case of end of file 
>> this procedure yields `eof char`. 
>>
>> However when I look in libga68/posix.a68 I see:
>>
>> pub proc(int)char        fgetc = nest C "_libga68_posixfgetc";
>>
>> Digging further into libga68/ga68-posix.c I see that 
>> _libga68_posixfgetc returns uint32_t and the values can be 
>> EOF_PSEUDO_CHARACTER (== -1), REPLACEMENT_CHARACTER (0xFFFD) or the 
>> successfully decoded uint32_t "res".
>>
>> My C ignorance is showing here but I'm having difficulty understanding 
>> what -1 or 0xFFFD look like when returned as unit32_t and what those 
>> values end up looking like in GNU Algol 68.
>
> We use UTF-32 for chars, so the C unit32_t will be a regular char on the A68 side.
> 0xFFFD is the “question mark in a box” (�).
> -1 will become 0xFFFFFF, since we use an unsigned type.
>
>> Should I be doing something like
>>
>> int ic = REPR fgetc(fd) so that I can check to see if I've hit end of 
>> file or a replacement character?
>
> You can use the “string break” notation "'(uhhhh)" or "'(Uhhhhhhhh)”\
>
> https://gcc.gnu.org/onlinedocs/gcc-16.1.0/ga68/String-breaks.html
>
>> Please advise!
>
> Hope that helps.
>
> pietro
>
>> -- 
>> Chris Hermansen · clhermansen "at" gmail "dot" com
>>
>> C'est ma façon de parler.


More information about the Algol68 mailing list