FormsABC - это Вы сами подключили - его нельзя подключать
Вот эта программа зацикливается, хотя FreePascal компилирует так как и должно работать
program RGB_PWM_Mutator;
Procedure Delay_ms(i:Integer); Begin WriteLn('Delay(',i,')'); End;
Type
    Intensity = Byte;
    RGB = Record
        r,g,b:Intensity;
    End;
    Tcol = Record
        color:RGB; Delay:Byte;
    End;
Const
    Col_Sz = 6;
    Col:Array[0 .. Col_Sz] of Tcol = (
        (color:(r:255; g:  0; b:  0); Delay:3), (* 0 *)
        (color:(r:255; g: 30; b:  0); Delay:3), (* 1 *)
        (color:(r:255; g: 70; b:  0); Delay:3), (* 2 *)
        (color:(r:  0; g:  0; b:  0); Delay:3), (* 3 *)
        (color:(r: 51; g:153; b:255); Delay:3), (* 4 *)
        (color:(r:  0; g:  0; b:255); Delay:3), (* 5 *)
        (color:(r:100; g:  0; b:255); Delay:3)  (* 6 *)
    );
(* ------------------------------------------------------------------------- *)
Procedure colorSetHW(color:RGB);
Begin
    With color Do Begin
    End;
End;
(* ------------------------------------------------------------------------- *)
Function mapIntensityTo(cLimit:Intensity; var cIn:Intensity):Boolean;
Begin
    If cIn = cLimit Then mapIntensityTo := False Else Begin
        If cIn < cLimit Then cIn := cIn + 1 Else cIn := cIn - 1;
        mapIntensityTo := True
    End
End;
Function colorMutate(var color:RGB; limit:RGB):Boolean;
Var rFlag, gFlag, bFlag:Boolean;
Begin
Write(color.r,' ', color.g,' ', color.b,' ', '   ');
    rFlag := mapIntensityTo(limit.r, color.r);
    gFlag := mapIntensityTo(limit.g, color.g);
    bFlag := mapIntensityTo(limit.b, color.b);
Write(
    color.r,' = ', limit.r, ' ? ', rFlag,'   ',
    color.g,' = ', limit.g, ' ? ', gFlag,'   ',
    color.b,' = ', limit.b, ' ? ', bFlag,'   ',
'   ');
    colorMutate := rFlag OR gFlag OR bFlag
End;
(* ------------------------------------------------------------------------- *)
Var i:Byte; CurrentColor:RGB = (r:0; g:0; b:0);
Begin
  
    While True Do
    Begin
        For i := 0 To Col_Sz Do (* Main interpretation cycle *)
        Begin  
            While colorMutate(CurrentColor, Col[i].color) Do
            Begin
                colorSetHW(CurrentColor);
                Delay_ms(Col[i].Delay
                    + Col[i].Delay
                    + Col[i].Delay
                    + Col[i].Delay
                    + Col[i].Delay
                );
            End;
Break;
            Delay_ms(3000);
        End;
Break;
    End
End.
проблема в mapIntensityTo которая должна возвращать False для 255 = 255
Действительно странно, такое поведение только с типом byte. если в методе использовать integer, то отрабатывает как положено. Видимо есть какие-то особенности реализации типа byte.
Слегка сокращенный код с локализованной ошибкой.
function F(b1: byte ; var b2: byte):boolean;
begin
  F := b1 = b2;
end;
begin
  var b:byte;
  
  b:= 127;            //Старший разряд = 0
  writeln(F(b, b));   //True - правильно
  
  b:= 128;            //Старший разряд = 1
  writeln(F(b, b));   //False - ошибка
end.
//По версии DotPeek функция выглядит как-то так:
(*
public static bool F(byte b1, ref byte b2)
{
    return (int) (sbyte) b1 == (int) b2;  
}
*)
И вот это преобразование в sbyte портит результат если в старшем разряде единица, то есть для чисел [128-255]
Исправили
Скачал консольный компилятор с сайта, на пустом файле падает с исключением:
Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'SyntaxTreeConverters, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
Линукс, Моно.
Качал потому, что в какой-то из последних версий в assert'ах перестал отображаться номер строки, где упал ассёрт — может, это проверите заодно. Аналогичная проблема в WDE.
Так консольный компилятор не будете чинить? А то поработать хочется, а не на чем…
Кстати, в WDE наблюдаются странности. С одним и тем же текстом программы после копипаста можно нормально отработать, а можно получить ошибку. Более того, бывает, что можно нормально отработать, но не с первого запуска. Я бы привел картинки, но если ошибка самоустраняется, то смысл какой в этом?
Залили правильную версию. Попробуйте
Спасибо, попробую, как доберусь.
Вот ещё одна проблема: замыкания для self работают только если явно его указывать. Например.
type A = class
  
  procedure f(x:integer);
  begin
    print(x);
  end;
  
  procedure g();
  begin
    Arr(1, 2, 3).ForEach(x -> self.f(x));
  end;
end;
begin
end.
Не работает, если убрать self, причём по тексту ошибки непонятно, чего он хочет. Студенты путаются и бросают использовать лямбды, что прискорбно. Нельзя ли сделать, чтобы работало без self или хотя бы сообщение об ошибке с указанием его добавить?
function sqrtN(P,e,x0:double); Не указан возвращаемый тип функции ,но всё успешно компилируется . Подсказка ,кстати, говорит ,что это процедура. Так и должно быть ?
Полный код приведите пожалуйста
Исправили. Версия на сайте.
 program fun; 
    var P:real; 
    // Вычисление квадратного корня из P с погрешностью е при начальном приближении x0.
    function sqrtN(P,e,x0:double); 
    var x,dx,f:double; 
    begin 
    x:=x0; 
    while(true) do 
    begin 
    f:=x*x-P; 
    if(abs(f)<e) then break; 
    dx :=-f/(2.0*x); 
    x:=x+dx; 
    end; 
    sqrtN:=x; 
    end; 
    
    begin 
    writeln('Введите P'); 
    readln(P); 
    writeln('Корень из P:',sqrtN(P,0.00001,1):5:3); 
    end.У Вас какая-то старая версия. В последней версии - ошибка компиляции, что правильно.
По поводу procedure - да, в Intellisense - неточность. Постараемся исправить
Спасибо. Успехов в развитии проекта.
 Институт математики, механики и компьютерных наук ЮФУ, 2005–2021
 Институт математики, механики и компьютерных наук ЮФУ, 2005–2021