In other words: I forgot to declare the Var for a class some times in my programming life.
That is probably what happens in most situations like the example you showed.
However, in this case you can see that the variables are declared in the function headers it is just that the compiler is unable to 'see' them.
That has to do with the fact that the function header as declared in the interface section of the unit does not match the function header as declared in the implementation section of the unit.
for example:
interface
procedure DKupperch(var inchr:char);
implementation
procedure DKupperch;
Do you note the difference in the function header ?
So, in theory that would give a possibility to say: "You are doing it wrong" and the compiler is in its right to complain about it.
Except for one minor detail and that is that some Pascal dialects actually allow you to omit the parameter declaration of a function header in the implementation section of a unit. In such cases these are 'automatically' used from the interfaced declaration of the function so that the compiler is able to make sense out of it.
It is actually a very handy feature as it saves a lot of typing. The bad thing about it is that if your have many of such declarations and forgot about the parameter list of a particular function then you would have to scroll up in your source-code to see the declaration and determine the parameter names and types (manually).
Note that such things were invented when there didn't exist all those fancy code-editors that exists today.
The second issue is an entire other one and has to do with the fact that the code as presented uses uni-code characters and that has to do with how the strings and character declarations are being treated. But that is out of scope of what I reacted to.