int __declspec(dllexport) CALL_CONV __EnvEval( void *theEnv, char *evalString, DATA_OBJECT *rv) { return EnvEval(theEnv,evalString,rv); }
globle void EvalFunction( void *theEnv, DATA_OBJECT_PTR returnValue) { DATA_OBJECT theArg; /*=============================================*/ /* Function eval expects exactly one argument. */ /*=============================================*/ if (EnvArgCountCheck(theEnv,"eval",EXACTLY,1) == -1) { SetpType(returnValue,SYMBOL); SetpValue(returnValue,EnvFalseSymbol(theEnv)); return; } /*==================================================*/ /* The argument should be of type SYMBOL or STRING. */ /*==================================================*/ if (EnvArgTypeCheck(theEnv,"eval",1,SYMBOL_OR_STRING,&theArg) == FALSE) { SetpType(returnValue,SYMBOL); SetpValue(returnValue,EnvFalseSymbol(theEnv)); return; } /*======================*/ /* Evaluate the string. */ /*======================*/ EnvEval(theEnv,DOToString(theArg),returnValue); }
HDDEDATA CALLBACK DDECallBack( UINT uType, UINT uFmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2) { #if MAC_MCW || WIN_MCW || MAC_XCD #pragma unused(hconv) #pragma unused(dwData1) #pragma unused(dwData2) #endif extern HSZ hszService; extern char CompleteString[255]; DWORD size; HWND hWnd; char *TheData; char *Data; char *theString; void *theEnv = GetCurrentEnvironment(); /* char theBuffer[100]; DWORD cb; PSTR pszTopicName; */ switch (uType) { case XTYP_ADVDATA: case XTYP_POKE: return ((HDDEDATA) DDE_FNOTPROCESSED); case XTYP_ADVREQ: case XTYP_WILDCONNECT: return ((HDDEDATA) NULL); case XTYP_ADVSTART: case XTYP_ADVSTOP: case XTYP_CONNECT_CONFIRM: case XTYP_DISCONNECT: case XTYP_ERROR: case XTYP_REGISTER: case XTYP_UNREGISTER: case XTYP_XACT_COMPLETE: return ((HDDEDATA) FALSE); case XTYP_MONITOR: return ((HDDEDATA) TRUE); case XTYP_CONNECT: /* cb = DdeQueryString(idInst,hsz1,(LPSTR) NULL, 0,CP_WINANSI) + 1; pszTopicName = (PSTR) LocalAlloc(LPTR, (UINT) cb); DdeQueryString(idInst,hsz1, pszTopicName,cb,CP_WINANSI); cb = DdeQueryString(idInst,hsz2,(LPSTR) NULL, 0,CP_WINANSI) + 1; pszTopicName = (PSTR) LocalAlloc(LPTR, (UINT) cb); DdeQueryString(idInst,hsz2, pszTopicName,cb,CP_WINANSI); */ DDE_RV.type = RVOID; if (hsz2 != hszService) { return ((HDDEDATA) FALSE); } return((HDDEDATA) TRUE); /*--------------------------------------------------+ | Get completed command and return result to client | +--------------------------------------------------*/ case XTYP_REQUEST: if (uFmt != CF_TEXT) { return(NULL); } /* sprintf(theBuffer,"XTYP_REQUEST uFmt = %d\n",(int) uFmt); PrintRouter(WDISPLAY,theBuffer); */ hData = NULL; if (hsz1 == hszCommand) { theString = DataObjectToString(GetCurrentEnvironment(),&DDE_RV); hData = DdeCreateDataHandle (idInst, (unsigned char *) theString, strlen(theString)+1, 0L, hsz2,CF_TEXT,0); } return (hData); case XTYP_EXECUTE: SetFocus(DialogWindow); if (CommandLineData(GetCurrentEnvironment())->EvaluatingTopLevelCommand || BatchActive(GetCurrentEnvironment()) ) { return ((HDDEDATA) DDE_FBUSY ); } Data = (char *) DdeAccessData ( hData, NULL); size = strlen((char *) Data) + 1; TheData = (char *) genalloc ( GetCurrentEnvironment(),(unsigned) size ); DdeGetData ( hData, (LPBYTE)TheData, size, 0L ); EnvPrintRouter(theEnv,WPROMPT,TheData); EnvPrintRouter(theEnv,WPROMPT,"\n"); EnvEval(theEnv,TheData,&DDE_RV); if (DDE_RV.type != RVOID) { PrintDataObject(GetCurrentEnvironment(),"stdout",&DDE_RV); EnvPrintRouter(theEnv,"stdout","\n"); } PrintPrompt(theEnv); DdeUnaccessData(hData); hWnd = FindWindow("ClipsEditWClass", NULL); SetFocus (hWnd); return ((HDDEDATA) DDE_FACK); } return ( (HDDEDATA) TRUE ); }