Well it's something I also noticed in the past, a lot of the reading material on Pascal is not necessarily outdated but dated. It very often mostly considering the programming style from the 90s/00s mostly focusing on the big boilerplate heavy OOP style.
There are so many tools in the language, function pointers, generics, operator overloading, advanced records, enumerators, management operators, anonymous functions, and so much more, that allows for so much more, yet it is barely covered.
Take for example this very simple way of utilizing the type system:
type
TVector2D = record
X, Y: Integer;
end;
TPosition = type TVector2D;
TSize = type TVector2D;
procedure DrawRect(pos: TPosition; size: TSize);
var
p: TPosition;
s: TSize;
begin
DrawRect(s, p); // Error because type mismatch
end.
This allows you to add semantics to your data by reintroducing the same type as a different symbol. This way the compiler catches if you by accident pass the wrong argument for the field.
Even though it's a very basic and fundamental feature of the typesystem, you usually don't see it covered in most material aimed at teaching FreePascal, and even many seasond pascal programmers don't know about this