📄 wredlg.c
字号:
if( !data || !size ) {
return( FALSE );
}
session = WREFindDialogSession( server );
if( !session ) {
return( FALSE );
}
if( session->info.data == NULL ) {
*data = NULL;
*size = 0;
return( TRUE );
}
*size = session->info.data_size;
*data = WREMemAlloc( *size );
if( *data == NULL ) {
return( FALSE );
}
memcpy( *data, session->info.data, *size );
return( TRUE );
}
Bool WRESetDlgSessionResName( HCONV server, HDDEDATA hdata )
{
WREDialogSession *session;
WResID *name;
void *data;
uint_32 size;
Bool ok;
ok = ( ( server != (HCONV)NULL ) && ( hdata != (HDDEDATA)NULL ) );
if( ok ) {
session = WREFindDialogSession( server );
ok = ( session != NULL );
}
if( ok ) {
ok = WREHData2Mem( hdata, &data, &size );
}
if( ok ) {
name = WRMem2WResID( data, session->info.is32bit );
ok = ( name != NULL );
}
if( ok ) {
ok = WRERenameWResResNode( session->tnode, &session->rnode, name );
}
if( ok ) {
session->rinfo->modified = TRUE;
WRESetResNamesFromType( session->rinfo, (uint_16)RT_DIALOG,
TRUE, name, 0 );
}
if( data ) {
WREMemFree( data );
}
if( name ) {
WREMemFree( name );
}
return( ok );
}
Bool WRESetDlgSessionResData( HCONV server, HDDEDATA hdata )
{
WREDialogSession *session;
void *data;
uint_32 size;
Bool ok;
ok = ( ( server != (HCONV)NULL ) && ( hdata != (HDDEDATA)NULL ) );
if( ok ) {
session = WREFindDialogSession( server );
ok = ( session != NULL );
}
if( ok ) {
ok = WREHData2Mem( hdata, &data, &size );
}
if( ok ) {
if( session->lnode->data ) {
WREMemFree( session->lnode->data );
}
session->lnode->data = data;
session->lnode->Info.Length = size;
session->rinfo->modified = TRUE;
}
return( ok );
}
WREDialogSession *WREStartDialogSession( WRECurrentResInfo *curr )
{
WREDialogSession *session;
int is32bit;
if( !curr ) {
return( NULL );
}
is32bit = curr->info->is32bit;
session = WREAllocDialogSession();
if( !session ) {
return( NULL );
}
session->info.file_name = WREStrDup( WREGetQueryName( curr->info ) );
session->info.res_name = WRECopyWResID( &curr->res->Info.ResName );
session->info.lang = curr->lang->Info.lang;
session->info.MemFlags = curr->lang->Info.MemoryFlags;
session->info.data_size = curr->lang->Info.Length;
session->info.data = curr->lang->data;
session->info.is32bit = is32bit;
session->tnode = curr->type;
session->rnode = curr->res;
session->lnode = curr->lang;
session->rinfo = curr->info;
WRESetPendingService( DialogService );
PendingSession = session;
if( WinExec( "wde.exe -dde", SW_SHOW ) < 32 ) {
WREDisplayErrorMsg( WRE_DLGEDITNOTSPAWNED );
WREFreeEditSession( session );
PendingSession = NULL;
WRESetPendingService( NoServicePending );
}
return( session );
}
Bool WREEditDialogResource( WRECurrentResInfo *curr )
{
Bool ok;
WREDialogSession *session;
ok = ( curr && curr->lang );
if( ok ) {
session = WREFindLangDialogSession( curr->lang );
if( session ) {
WREBringSessionToFront( session );
return( TRUE );
}
}
if( ok ) {
if( !curr->lang->data && curr->lang->Info.Length ) {
curr->lang->data = WREGetCurrentResData( curr );
ok = ( curr->lang->data != NULL );
}
}
if( ok ) {
ok = ( WREStartDialogSession( curr ) != NULL );
}
return( ok );
}
Bool WREEndAllDialogSessions( Bool fatal_exit )
{
WREDialogSession *session;
LIST *slist;
Bool ok;
_wre_touch(fatal_exit);
ok = TRUE;
if( WREDlgSessions ) {
for( slist = WREDlgSessions; ok && slist; slist = ListNext(slist) ) {
session = (WREDialogSession *) ListElement(slist);
if( session ) {
WREDisconnectSession( session );
WREFreeEditSession( session );
}
}
if( ok ) {
ListFree( WREDlgSessions );
WREDlgSessions = NULL;
}
}
return( ok );
}
void WREEndLangDialogSession( WResLangNode *lnode )
{
WREDialogSession *session;
session = WREFindLangDialogSession( lnode );
while( session ) {
WREDisconnectSession( session );
WRERemoveDialogEditSession( session );
session = WREFindLangDialogSession( lnode );
}
}
void WREEndResDialogSessions( WREResInfo *rinfo )
{
WREDialogSession *session;
session = WREFindResDialogSession( rinfo );
while( session ) {
WREDisconnectSession( session );
WRERemoveDialogEditSession( session );
session = WREFindResDialogSession( rinfo );
}
}
WREDialogSession *WREAllocDialogSession( void )
{
WREDialogSession *session;
session = (WREDialogSession *) WREMemAlloc( sizeof(WREDialogSession) );
if( session ) {
memset( session, 0, sizeof(WREDialogSession) );
}
return( session );
}
WREDialogSession *WREFindDialogSession( HCONV conv )
{
WREDialogSession *session;
LIST *slist;
for( slist = WREDlgSessions; slist; slist = ListNext(slist) ) {
session = (WREDialogSession *) ListElement(slist);
if( ( session->server == conv ) || ( session->client == conv ) ) {
return( session );
}
}
return( NULL );
}
WREDialogSession *WREFindResDialogSession( WREResInfo *rinfo )
{
WREDialogSession *session;
LIST *slist;
for( slist = WREDlgSessions; slist; slist = ListNext(slist) ) {
session = (WREDialogSession *) ListElement(slist);
if( session->rinfo == rinfo ) {
return( session );
}
}
return( NULL );
}
WREDialogSession *WREFindLangDialogSession( WResLangNode *lnode )
{
WREDialogSession *session;
LIST *slist;
for( slist = WREDlgSessions; slist; slist = ListNext(slist) ) {
session = (WREDialogSession *) ListElement(slist);
if( session->lnode == lnode ) {
return( session );
}
}
return( NULL );
}
void WRERemoveDialogEditSession( WREDialogSession *session )
{
if( session ) {
ListRemoveElt( &WREDlgSessions, session );
WREFreeEditSession( session );
}
}
void WREFreeEditSession( WREDialogSession *session )
{
if( session ) {
if( session->info.file_name ) {
WREMemFree( session->info.file_name );
}
if( session->info.res_name ) {
WREMemFree( session->info.res_name );
}
WREMemFree( session );
}
}
void WREDisconnectSession( WREDialogSession *session )
{
if( session ) {
WREPokeDialogCmd( session, "endsession", TRUE );
DumpEmptyResource( session );
if( session->server != (HCONV)NULL ) {
DdeDisconnect( session->server );
session->server = (HCONV)NULL;
}
if( session->client != (HCONV)NULL ) {
DdeDisconnect( session->client );
session->client = (HCONV)NULL;
}
}
}
void WREBringSessionToFront( WREDialogSession *session )
{
WREPokeDialogCmd( session, "bringtofront", FALSE );
}
void WREShowAllDialogSessions( Bool show )
{
WREDialogSession *session;
LIST *slist;
if( WREDlgSessions ) {
for( slist = WREDlgSessions; slist; slist = ListNext(slist) ) {
session = (WREDialogSession *) ListElement(slist);
if( session ) {
WREShowSession( session, show );
}
}
}
}
void WREShowSession( WREDialogSession *session, Bool show )
{
if( show ) {
WREPokeDialogCmd( session, "show", FALSE );
} else {
WREPokeDialogCmd( session, "hide", FALSE );
}
}
void WREPokeDialogCmd( WREDialogSession *session, char *cmd, Bool retry )
{
if( session && cmd ) {
WREPokeData( session->client, cmd, strlen(cmd) + 1, retry );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -