Pascal as a C keyword specifies the calling convention for a function. There are essentially two things that a calling convention determines1: whether the arguments on the stack are cleaned up by the caller or by the function and whether the arguments are passed left to right or right to left. Because there are four different combinations of these choices, programmers at one time experimented with all of them, three being common to this day.
Pascal calling convention is common, at least, because it was the calling format used for callback functions in Windows versions prior to Windows 95 and Windows NT. It is, of course, the convention used by default in Pascal programs. Arguments are passed on the stack from left to right and the called procedure pops the passed arguments off of the stack. If writing in C, failing to declare callback procedures (like your WinProc) as Pascal will cause consistently bad values to be received likely causing a swift program crash. Calling a C function from a Pascal program can have similarly bad results if yor Pascal compiler doesn't recognize what you're doing and adjust accordingly.
C (or __cdecl) calling convention is the default calling convention used in the C programming language and is used by callback functions in the Linux kernel. Arguments are passed right to left and the called procedure leaves its arguments on the stack. The advantage of passing arguments in this seemingly non-intuitive fashion is that it allows variable length argument lists using the ... notation in C, such as with
printf. Leaving the passed arguments on the stack is useful if multiple functions will be called with the same arguments or if the stack happens to be a good place to store these arguments. Unfortunately, since the called procedure is free to change these values unless they are declared
const, (and they normally aren't) this isn't very useful.
Recent versions of Windows including the Windows 95, 98, ME series and the Windows NT, 2K, XP series use the WinAPI (or __stdcall) calling convention for callback functions. Arguments are passed right to left and the called procedure pops the passed arguments off of the stack. If writing in C, failure to declare your callback procedures as WinAPI will likely cause a crash as soon as your callback routine returns. A toy program with such a flaw will often run fine until it terminates, at which point it will mysteriously crash.
1 Calling convention can also determine the format of the symbol generated in the object file (prefixed with an underscore, postfixed with argument specifies, etc.), exception handling, return conventions, and passing of object pointers