Yes, OUT means destination. It depends however on the type of output.
In your example the output is a memory buffer and if it has been pre-alocated then there is no reason to use a dot.
Also, it is a pointer which implies the use of a
*
However, if it is a pre-allocated buffer, then the variable that points to it is already a pointer, so no need for the
*
Check the entire call:
System::Alloc ${NSIS_MAX_STRLEN}
Pop $R0
System::Call 'user32::GetKeyboardLayoutList(i ${NSIS_MAX_STRLEN}, i R0)i.r0'
The first part allocates a portion of memory equal to
${NSIS_MAX_STRLEN} and then the buffer location is popped into $R0. So when the second call occurs, $R0 is already a pointer to a buffer, so it is referenced as
iR0 rather than
*iR0 or
*i.R0.
Hope this helps,
CF