299 lines
5.9 KiB
C
299 lines
5.9 KiB
C
/*++
|
||
* File name:
|
||
* scfuncsa.c
|
||
* Contents:
|
||
* Ascii version of the functions exported by scfuncs.c
|
||
* Used by the perl extension
|
||
*
|
||
* Copyright (C) 1998-1999 Microsoft Corp.
|
||
*
|
||
--*/
|
||
#include <windows.h>
|
||
#include <string.h>
|
||
#include <malloc.h>
|
||
|
||
#define PROTOCOLAPI
|
||
#include "protocol.h"
|
||
#include "tclient.h"
|
||
|
||
/*
|
||
* External functions definitions
|
||
*/
|
||
#include "extraexp.h"
|
||
|
||
/*
|
||
* Internal functions definitions
|
||
*/
|
||
LPWSTR _Ascii2Wide(char *ascii);
|
||
|
||
/*++
|
||
* Function:
|
||
* SCConnectExA
|
||
* Description:
|
||
* Ascii version of SCConnectEx. Converts LPSTR params to LPWSTR
|
||
* Arguments:
|
||
* same as SCConnect
|
||
* Return value:
|
||
* the return value of SCConnect
|
||
* Called by:
|
||
* unknown (exported)
|
||
--*/
|
||
PROTOCOLAPI
|
||
LPCSTR
|
||
SMCAPI
|
||
SCConnectExA (
|
||
char *lpszServerName,
|
||
char *lpszUserName,
|
||
char *lpszPassword,
|
||
char *lpszDomain,
|
||
char *lpszShell,
|
||
int xResolution,
|
||
int yResolution,
|
||
int ConnectinFlags,
|
||
void **ppConnectData)
|
||
{
|
||
LPWSTR wszServerName, wszUserName, wszPassword, wszDomain;
|
||
LPWSTR wszShell;
|
||
LPCSTR rv = NULL;
|
||
|
||
wszServerName = _Ascii2Wide(lpszServerName);
|
||
wszUserName = _Ascii2Wide(lpszUserName);
|
||
wszPassword = _Ascii2Wide(lpszPassword);
|
||
wszDomain = _Ascii2Wide(lpszDomain);
|
||
wszShell = _Ascii2Wide(lpszShell);
|
||
|
||
if (wszServerName &&
|
||
wszUserName &&
|
||
wszPassword &&
|
||
wszDomain)
|
||
rv = SCConnectEx(wszServerName,
|
||
wszUserName,
|
||
wszPassword,
|
||
wszDomain,
|
||
wszShell, // NULL is default shell
|
||
xResolution,
|
||
yResolution,
|
||
ConnectinFlags,
|
||
ppConnectData);
|
||
else
|
||
rv = ERR_ALLOCATING_MEMORY;
|
||
|
||
if (wszServerName)
|
||
free(wszServerName);
|
||
|
||
if (wszUserName)
|
||
free(wszUserName);
|
||
|
||
if (wszPassword)
|
||
free(wszPassword);
|
||
|
||
if (wszDomain)
|
||
free(wszDomain);
|
||
|
||
if (wszShell)
|
||
free(wszShell);
|
||
|
||
return rv;
|
||
}
|
||
|
||
|
||
/*++
|
||
* Function:
|
||
* SCConnectA
|
||
* Description:
|
||
* Ascii version of SCConnect. Converts LPSTR params to LPWSTR
|
||
* Arguments:
|
||
* same as SCConnect
|
||
* Return value:
|
||
* the return value of SCConnect
|
||
* Called by:
|
||
* !tclntpll.xs
|
||
--*/
|
||
PROTOCOLAPI
|
||
LPCSTR
|
||
SMCAPI
|
||
SCConnectA (char *lpszServerName,
|
||
char *lpszUserName,
|
||
char *lpszPassword,
|
||
char *lpszDomain,
|
||
int xResolution,
|
||
int yResolution,
|
||
void **ppConnectData)
|
||
{
|
||
LPWSTR wszServerName, wszUserName, wszPassword, wszDomain;
|
||
LPCSTR rv = NULL;
|
||
|
||
wszServerName = _Ascii2Wide(lpszServerName);
|
||
wszUserName = _Ascii2Wide(lpszUserName);
|
||
wszPassword = _Ascii2Wide(lpszPassword);
|
||
wszDomain = _Ascii2Wide(lpszDomain);
|
||
|
||
if (wszServerName &&
|
||
wszUserName &&
|
||
wszPassword &&
|
||
wszDomain)
|
||
rv = SCConnect(wszServerName,
|
||
wszUserName,
|
||
wszPassword,
|
||
wszDomain,
|
||
xResolution,
|
||
yResolution,
|
||
ppConnectData);
|
||
else
|
||
rv = ERR_ALLOCATING_MEMORY;
|
||
|
||
if (wszServerName)
|
||
free(wszServerName);
|
||
|
||
if (wszUserName)
|
||
free(wszUserName);
|
||
|
||
if (wszPassword)
|
||
free(wszPassword);
|
||
|
||
if (wszDomain)
|
||
free(wszDomain);
|
||
|
||
return rv;
|
||
}
|
||
|
||
/*++
|
||
* Function:
|
||
* SCStartA
|
||
* Description:
|
||
* Ascii version of SCStart
|
||
* Arguments:
|
||
* same as SCStart
|
||
* Return value:
|
||
* return value from SCStart
|
||
* Called by:
|
||
* !tclntpll.xs
|
||
--*/
|
||
PROTOCOLAPI
|
||
LPCSTR
|
||
SMCAPI
|
||
SCStartA(void *pConnectData, char *command)
|
||
{
|
||
LPWSTR wcmd;
|
||
LPCSTR rv = NULL;
|
||
|
||
wcmd = _Ascii2Wide(command);
|
||
|
||
if (wcmd)
|
||
{
|
||
rv = SCStart(pConnectData, wcmd);
|
||
} else {
|
||
rv = ERR_ALLOCATING_MEMORY;
|
||
}
|
||
|
||
if (wcmd)
|
||
free(wcmd);
|
||
|
||
return rv;
|
||
}
|
||
|
||
/*++
|
||
* Function:
|
||
* SCCheckA
|
||
* Description:
|
||
* Ascii version of SCCheck
|
||
* Arguments:
|
||
* same as SCCheck
|
||
* Return value:
|
||
* return value from SCCheck
|
||
* Called by:
|
||
* !tclntpll.xs
|
||
--*/
|
||
PROTOCOLAPI
|
||
LPCSTR
|
||
SMCAPI
|
||
SCCheckA(void *pConnectData, char *command, char *param)
|
||
{
|
||
LPWSTR wparam;
|
||
LPCSTR rv = NULL;
|
||
|
||
wparam = _Ascii2Wide(param);
|
||
|
||
if (wparam)
|
||
{
|
||
rv = SCCheck(pConnectData, command, wparam);
|
||
} else {
|
||
rv = ERR_ALLOCATING_MEMORY;
|
||
}
|
||
|
||
if (wparam)
|
||
free(wparam);
|
||
|
||
return rv;
|
||
}
|
||
|
||
/*++
|
||
* Function:
|
||
* SCSendtextAsMsgsA
|
||
* Description:
|
||
* Ascii version of SCSendtextAsMsgs
|
||
* Arguments:
|
||
* same as SCSendtextAsMsgs
|
||
* Return value:
|
||
* return value from SCSendtextAsMsgs
|
||
* Called by:
|
||
* !tclntpll.xs
|
||
--*/
|
||
PROTOCOLAPI
|
||
LPCSTR
|
||
SMCAPI
|
||
SCSendtextAsMsgsA(void *pConnectData, char *line)
|
||
{
|
||
LPWSTR wline;
|
||
LPCSTR rv = NULL;
|
||
|
||
wline = _Ascii2Wide(line);
|
||
|
||
if (wline)
|
||
rv = SCSendtextAsMsgs(pConnectData, wline);
|
||
else
|
||
rv = ERR_ALLOCATING_MEMORY;
|
||
|
||
if (wline)
|
||
free(wline);
|
||
|
||
return rv;
|
||
}
|
||
|
||
/*++
|
||
* Function:
|
||
* _Ascii2Wide
|
||
* Description:
|
||
* Allocates buffer and converts an ascii string
|
||
* to unicode
|
||
* Arguments:
|
||
* ascii - the input string
|
||
* Return value:
|
||
* pointer to converted string
|
||
* Called by:
|
||
* SCConnectA, SCStartA, SCCheckA, SCSendtextAsMsgsA
|
||
--*/
|
||
LPWSTR _Ascii2Wide(char *ascii)
|
||
{
|
||
LPWSTR wszWide = NULL;
|
||
int wsize, ccLen;
|
||
|
||
if (!ascii)
|
||
goto exitpt;
|
||
|
||
ccLen = strlen(ascii);
|
||
wsize = (ccLen + 1) * sizeof(WCHAR);
|
||
wszWide = malloc(wsize);
|
||
if (wszWide)
|
||
MultiByteToWideChar(
|
||
CP_UTF8,
|
||
0,
|
||
ascii,
|
||
-1,
|
||
wszWide,
|
||
ccLen + 1);
|
||
|
||
exitpt:
|
||
return wszWide;
|
||
}
|
||
|