Hank,
I have posted some of the code below. It is written in Visual C++. Let me know if you have any further questions.
//Loading
if(pApp->m_EmulatorVersion > 3)
{
szServer = "PW5";
}
else
{
szServer = "PW4";
}
if (!(m_DDE_PROC = MakeProcInstance ((FARPROC) ProCommDdeCallback, AfxGetInstanceHandle())))
return FALSE;
if (DdeInitialize ((LPDWORD) &m_DDE_INSTANCE, (PFNCALLBACK) m_DDE_PROC, APPCMD_CLIENTONLY, 0L))
return FALSE;
m_SERVER = DdeCreateStringHandle(m_DDE_INSTANCE, szServer, CP_WINANSI);
return TRUE;
//Connecting
sSessionName = "System";
m_TOPIC = DdeCreateStringHandle(m_DDE_INSTANCE, sSessionName, CP_WINANSI);
if (!(m_DDE_CONV = DdeConnect(m_DDE_INSTANCE, m_SERVER, m_TOPIC, NULL)))
{
m_bConnectionOpen = FALSE;
}
else
{
m_bConnectionOpen = TRUE;
}
//Reading
RequestCmd = "ASPECTCMD termreads s1 " + LongToString(Length );
pBuf = new char[RequestCmd.GetLength() + 1];
memset(pBuf, 0, sizeof(pBuf));
strcpy(pBuf, RequestCmd);
HSZ hszItem = DdeCreateStringHandle(m_DDE_INSTANCE, pBuf, CP_WINANSI);
Sleep(250);
DdeClientTransaction ((unsigned char *) pBuf, RequestCmd.GetLength() + 1, m_DDE_CONV, 0, 0, XTYP_EXECUTE, 5000, &dwResult);
HSZ hszItem2 = DdeCreateStringHandle(m_DDE_INSTANCE, "s1", CP_WINANSI);
Sleep(250);
if (!(m_hDATA = DdeClientTransaction (NULL, -1, m_DDE_CONV, hszItem2, CF_TEXT, XTYP_REQUEST, 60000, &dwResult)))
{
SetCursorPosition( lOrigRow, lOrigCol);
delete [] pBuf;
DdeFreeStringHandle (m_DDE_INSTANCE, hszItem);
DdeFreeStringHandle (m_DDE_INSTANCE, hszItem2);
pApp->SetLastError(ER_READ | ER_DDE_ERROR, HandleError(DdeGetLastError(m_DDE_INSTANCE)));
return "";
}
lpszData = DdeAccessData (m_hDATA, &cbDataLen);
// Get return code from front of data string
CString sHoldString;
sHoldString = (char *)lpszData;
DdeUnaccessData(m_hDATA);
DdeFreeStringHandle (m_DDE_INSTANCE, hszItem);
DdeFreeStringHandle (m_DDE_INSTANCE, hszItem2);
delete [] pBuf;
sReturnString = sHoldString;
//writing
if (sValue.Find ("{"

>= 0)
{
sValue = MapKeys(sValue);
RequestCmd = "ASPECTCMD termvkey " + sValue;
pBuf = new char[RequestCmd.GetLength() + 1];
memset(pBuf, 0, sizeof(pBuf));
strcpy(pBuf, RequestCmd );
DdeClientTransaction ((unsigned char *) pBuf, strlen(pBuf) + 1, m_DDE_CONV, 0, 0, XTYP_EXECUTE, 5000, NULL);
delete [] pBuf;
}
else
{
if (SetCursorPosition(lLine, lStart))
{
sValue = MapKeys(sValue);
RequestCmd = "transmit " + sValue;
pBuf = new char[RequestCmd.GetLength() + 1];
memset(pBuf, 0, sizeof(pBuf));
strcpy(pBuf, RequestCmd);
DdeClientTransaction ((unsigned char *) pBuf, strlen(pBuf) + 1, m_DDE_CONV, 0, 0, XTYP_EXECUTE, 5000, NULL);
delete [] pBuf;
}