%SYN_CHARTOSTR

Convert C‑style character pointer to alpha

WTSupported in traditional Synergy 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