⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wredde.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    int         i;

    if( IdInst != 0 ) {
        DdeNameService( IdInst, (HSZ)NULL, (HSZ)NULL, DNS_UNREGISTER );
        for( i=0; i<NUM_TOPICS;i++ ) {
            if( Topics[i].htopic != (HSZ)NULL ) {
                DdeFreeStringHandle( IdInst, Topics[i].htopic );
            }
        }
        for( i=0; i<NUM_SERVERS;i++ ) {
            if( EditServers[i].htopic != (HSZ)NULL ) {
                DdeFreeStringHandle( IdInst, EditServers[i].htopic );
            }
            if( EditServers[i].hservice != (HSZ)NULL ) {
                DdeFreeStringHandle( IdInst, EditServers[i].hservice );
            }
        }
        if( hDialogDump != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hDialogDump );
        }
        if( hImageDump != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hImageDump );
        }
        if( hFileItem != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hFileItem );
        }
        if( hIs32BitItem != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hIs32BitItem );
        }
        if( hDataItem != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hDataItem );
        }
        if( hNameItem != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hNameItem );
        }
        if( hServiceName != (HSZ)NULL ) {
            DdeFreeStringHandle( IdInst, hServiceName );
        }
        DdeUninitialize( IdInst );
    }
    if( DdeProc != (FARPROC)NULL ) {
        FreeProcInstance( DdeProc );
    }
}

Bool WREPokeData( HCONV conv, void *data, int size, Bool retry )
{
    DWORD       result;
    UINT        err;
    Bool        timeout;
    Bool        ret;
    UINT	tries;

    if( ( conv == (HCONV)NULL ) || ( data == NULL ) || ( size == 0 ) ) {
        return( FALSE );
    }

    if( retry )
        tries = 8;
    else
        tries = 0;
	
    while( TRUE ) {
        ret = (Bool)
            DdeClientTransaction( (LPBYTE)data, size, conv, hDataItem,
                                  CF_TEXT, XTYP_POKE, LONG_TIME_OUT,
                                  &result );
        if( !ret && tries-- ) {
            err = DdeGetLastError( IdInst );
            timeout = ( ( err & DMLERR_POKEACKTIMEOUT ) != 0 );
            if( !timeout ) {
                break;
            }
        } else {
            break;
        }
    }

    return( ret );
}

HDDEDATA WINEXPORT DdeCallBack( WORD wType, WORD wFmt, HCONV hConv,
                               HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
                               DWORD lData1, DWORD lData2 )
{
    HDDEDATA    ret;
    HSZPAIR     hszpair[2];
    HSZ         htopic;
    HCONV       htconv;
    void        *data;
    uint_32     size;
    Bool        ok;

    _wre_touch(hdata);
    _wre_touch(lData1);
    _wre_touch(lData2);

    ret = (HDDEDATA)FALSE;

    switch( wType ) {
        case XTYP_CONNECT:
        case XTYP_WILDCONNECT:
            if( PendingService == NoServicePending ) {
                htopic = (HSZ)NULL;
            } else {
                htopic = (HSZ)Topics[PendingService].htopic;
            }
            break;
    }

    switch( wType ) {
        case XTYP_CONNECT_CONFIRM:
            htconv = (HCONV)NULL;
            if( PendingService != NoServicePending ) {
                    htconv = DdeConnect( IdInst,
                                         EditServers[PendingService].hservice,
                                         EditServers[PendingService].htopic,
                                         (LPVOID)NULL );
            }
            if( htconv != (HCONV)NULL ) {
                if( PendingService == DialogService ) {
                    ok = WRECommitDialogSession( hConv, htconv );
                } else {
                    ok = WRECommitImageSession( hConv, htconv );
                }
                if( !ok ) {
                    DdeDisconnect( htconv );
                    DdeDisconnect( hConv );
                }
            } else {
                DdeDisconnect( hConv );
            }
            break;

        case XTYP_DISCONNECT:
            if( !WREEndEditImageResource( hConv ) ) {
                WREEndEditDialogResource( hConv );
            }
            break;

        case XTYP_CONNECT:
            if( hsz1 == hDialogDump ) {
                WREDumpPendingDialogSession();
            } else if( hsz1 == hImageDump ) {
                WREDumpPendingImageSession();
            } else if( hsz1 == htopic ) {
                ret = (HDDEDATA)TRUE;
            }
            break;

        case XTYP_WILDCONNECT:
            if( hsz2 != hServiceName ) {
                break;
            }
            if( htopic == (HSZ)NULL ) {
                break;
            }
            hszpair[0].hszSvc   = hServiceName;
            hszpair[0].hszTopic = htopic;
            hszpair[1].hszSvc   = (HSZ)NULL;
            hszpair[1].hszTopic = (HSZ)NULL;
            ret = (HDDEDATA)
                DdeCreateDataHandle( IdInst, (LPBYTE)&hszpair[0],
                                     sizeof(hszpair), 0L, 0, CF_TEXT, 0 );
            break;

        case XTYP_REQUEST:
            data = NULL;
            size = 0;
            ok = FALSE;
            if( hsz1 == Topics[DialogService].htopic ) {
                if( hsz2 == hFileItem ) {
                    ok = WREGetDlgSessionFileName( hConv, &data, &size );
                } else if( hsz2 == hDataItem ) {
                    ok = WREGetDlgSessionData( hConv, &data, &size );
                } else if( hsz2 == hNameItem ) {
                    ok = WREGetDlgSessionResName( hConv, &data, &size );
                } else if( hsz2 == hIs32BitItem ) {
                    ok = WREGetDlgSessionIs32Bit( hConv, &data, &size );
                }
            } else if( ( hsz1 == Topics[BitmapService].htopic ) ||
                       ( hsz1 == Topics[CursorService].htopic ) ||
                       ( hsz1 == Topics[IconService].htopic ) ) {
                if( hsz2 == hFileItem ) {
                    ok = WREGetImageSessionFileName( hConv, &data, &size );
                } else if( hsz2 == hDataItem ) {
                    ok = WREGetImageSessionData( hConv, &data, &size );
                } else if( hsz2 == hNameItem ) {
                    ok = WREGetImageSessionResName( hConv, &data, &size );
                }
            }
            if( data ) {
                if( ok ) {
                    ret = DdeCreateDataHandle( IdInst, (LPBYTE)data,
                                               size, 0, hsz2, wFmt, 0 );
                }
                WREMemFree( data );
            }
            break;

        case XTYP_POKE:
            data = NULL;
            size = 0;
            ok = FALSE;
            ret = (HDDEDATA)DDE_FNOTPROCESSED;
            if( hsz1 == Topics[DialogService].htopic ) {
                if( hsz2 == hDataItem ) {
                    ok = WRESetDlgSessionResData( hConv, hdata );
                } else if( hsz2 == hNameItem ) {
                    ok = WRESetDlgSessionResName( hConv, hdata );
                }
            } else if( ( hsz1 == Topics[BitmapService].htopic ) ||
                       ( hsz1 == Topics[CursorService].htopic ) ||
                       ( hsz1 == Topics[IconService].htopic ) ) {
                if( hsz2 == hDataItem ) {
                    ok = WRESetImageSessionResData( hConv, hdata );
                } else if( hsz2 == hNameItem ) {
                    ok = WRESetImageSessionResName( hConv, hdata );
                }
            }
            ret = (HDDEDATA)DDE_FACK;
            break;
    }

    return( ret );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -