%SYN_CHARTOSTR
Convert C-style character pointer to alpha
WSupported on Windows
|
USupported on Unix
|
VSupported on OpenVMS
|
|
length = %SYN_CHARTOSTR(pointer, alpha)
or
xcall SYN_CHARTOSTR(pointer, alpha)
Return value
length
The length of the original null-terminated string, not counting the null. (n)
Arguments
pointer
The character pointer that points to the null-terminated string you want to convert. (D_ADDR)
alpha
Returned with the converted alpha string. (a)
Discussion
%SYN_CHARTOSTR converts a C-style character pointer (char *) to a Synergy DBL alpha type. This routine can be useful for dealing with C routines that are in external DLLs or linked into the runtime. If the C routine returns a pointer to a null-terminated string, this routine can be used to copy the contents to a Synergy alpha variable. The contents of the null-terminated buffer whose address is pointer are copied into alpha. The null termination is removed from the copy, and any remaining space in alpha is blank-filled. Length may be larger than the size of the buffer into which the string was copied, although %SYN_CHARTOSTR only copies up to the size of the buffer.
Examples
main strex .align stack record kernel32 ,D_ADDR ;Handle to kernel32.dll ptr ,D_ADDR ;Pointer to environment curr ,D_ADDR ;Pointer to current entry len ,i4 ;Length of an entry buf ,a256 ;Buffer for conversion proc open(1,o,"TT:") kernel32 = %dll_open("kernel32") ; ; GetEnvironmentStrings returns a pointer to a block of memory containing ; the environment settings for the current process. This data is a series ; of null-terminated strings, with an extra null at the end. ; ptr = %dll_call(kernel32, DLL_TYPE_WINAPI, "GetEnvironmentStringsA") curr = ptr while (len = %syn_chartostr(curr, buf)) ;Zero length means the end begin writes(1, %atrim(buf)) ;Display the entry curr += len + 1 ;Advance to next, skip null end xcall dll_call(kernel32, DLL_TYPE_WINAPI, "FreeEnvironmentStringsA", ptr) xcall dll_close(kernel32) stop endmain