В модуле HostFiles я немного изменил способ определения ошибок. Считаю верным определять успешное получение дескриптора файла не по ненулевому дескриптору, а по успешности выполнения последней операции, сверяя LastError() с нулём.
## Код:
```
PROCEDURE LastError (): INTEGER;
      VAR err: INTEGER; Pres: Libc.PInt;
   BEGIN
      Pres := Libc.geterrno();
      err := Pres[0];
      Pres[0] := 0; (* reset last error *)
      RETURN err
   END LastError;
   
   PROCEDURE NewFileRef (state: INTEGER; VAR name: FullName; VAR ref, res: INTEGER);
      VAR n: ShortName;
   BEGIN
      n := SHORT(name$);
      IF state = create THEN (* Create should fail if file already exists *)
         IF ExistingFile(n) THEN
            res := fileExistsErr
         ELSE
            ref := Libc.fopen(n, "w+"); res := LastError()
         END
      ELSIF state = shared THEN
         ref := Libc.fopen(n, "r"); res := LastError()
      ELSE
         ref := Libc.fopen(n, "r+"); res := LastError()
      END
   END NewFileRef;
   
   PROCEDURE OpenFile (state: INTEGER; VAR name: FullName; VAR ref, res: INTEGER);
   BEGIN
      NewFileRef(state, name, ref, res);
      IF res = tooManyOpenFilesErr THEN
         Kernel.Collect;
         NewFileRef(state, name, ref, res);
         IF res = tooManyOpenFilesErr THEN
            SearchFileToClose;
            NewFileRef(state, name, ref, res)
         END
      END
   END OpenFile;
```


> -- Цитата:
> Что такое FPC?
В контексте форума паскалеподобных языков программирования оно может означать лишь известный компилятор одного известного диалекта Паскаля,
googel: fpc
В случае необходимости это можно добавить в ЧаВО.