void WdeAddCustControlToCustLib( WdeCustLib *lib, WdeCustControl *control ) { LIST *end; if( lib->controls == NULL ) { ListAddElt( &lib->controls, (void *)control ); } else { /* make sure item is inserted at end of list */ WdeListLastElt( lib->controls, &end ); ListInsertElt( end, (void *)control ); } WRMemValidate( lib ); WRMemValidate( control ); }
BOOL WdeLoadMSCustomControls( WdeCustLib *lib ) { WdeCustInfoProc info_proc; WdeCustStyleProc style_proc; WdeCustFlagsProc flags_proc; HWND dialog_owner; FARPROC proc_inst; HINSTANCE app_inst; INT_PTR ok; dialog_owner = WdeGetMainWindowHandle(); app_inst = WdeGetAppInstance(); proc_inst = MakeProcInstance ( (FARPROC)WdeLoadCustProc, app_inst ); ok = JDialogBoxParam( app_inst, "WdeLoadCustom", dialog_owner, (DLGPROC)proc_inst, (LPARAM)(LPVOID)lib ); FreeProcInstance ( proc_inst ); if( ok == -1 ) { WdeWriteTrail( "WdeLoadMSCustomControls: Dialog not created!" ); return( FALSE ); } if( !ok ) { return( FALSE ); } if( !HIWORD( (uint_32)lib->info_name ) ) { if( !WdeQueryUnsafeMSLoad() ) { WdeWriteTrail( "WdeLoadMSCustomControls: User aborted unsafe load!" ); return( FALSE ); } } info_proc = (WdeCustInfoProc)GetProcAddress( lib->inst, lib->info_name ); style_proc = (WdeCustStyleProc)GetProcAddress ( lib->inst, lib->style_name ); flags_proc = (WdeCustFlagsProc)GetProcAddress ( lib->inst, lib->flags_name ); if( info_proc == NULL || style_proc == NULL || flags_proc == NULL ) { WdeWriteTrail( "WdeLoadMSCustomControls: Could not get proc address of ordinal!" ); return( FALSE ); } if( !WdeCreateAndAddCustControl( lib, info_proc, style_proc, flags_proc ) ) { WdeWriteTrail( "WdeLoadMSCustomControls: Control not added to list!" ); return( FALSE ); } WRMemValidate( lib ); return( TRUE ); }
BOOL WdeCreateAndAddCustControl( WdeCustLib *lib, WdeCustInfoProc info_proc, WdeCustStyleProc style_proc, WdeCustFlagsProc flags_proc ) { HGLOBAL info_global; uint_8 *info_locked; WdeCustControl *control; if( lib == NULL || info_proc == NULL || style_proc == NULL || flags_proc == NULL ) { WdeWriteTrail( "WdeCreateAndAddCustControl: NULL param!" ); return( FALSE ); } info_global = (*info_proc)(); if( info_global == NULL ) { WdeWriteTrail( "WdeCreateAndAddCustControl: Info proc returned NULL!" ); return( FALSE ); } info_locked = (uint_8 *)GlobalLock( info_global ); if( info_locked == NULL ) { WdeWriteTrail( "WdeCreateAndAddCustControl: GlobalLock failed!" ); GlobalFree( info_global ); return( FALSE ); } control = WdeAllocCustControlFromWDECTLINFO( (WDECTLINFO *)info_locked, lib->ms_lib ); if( control == NULL ) { WdeWriteTrail( "WdeCreateAndAddCustControl: Could alloc control!" ); GlobalUnlock( info_global ); GlobalFree( info_global ); return( FALSE ); } control->lib = lib; control->info_proc = info_proc; control->style_proc = style_proc; control->flags_proc = flags_proc; WdeAddCustControlToCustLib( lib, control ); GlobalUnlock( info_global ); GlobalFree( info_global ); WRMemValidate( lib ); return( TRUE ); }
WdeCustLib *WdeAllocCustLib( void ) { WdeCustLib *lib; lib = (WdeCustLib *)WRMemAlloc( sizeof( WdeCustLib ) ); if( lib == NULL ) { WdeWriteTrail( "WdeAllocCustLib: WdeCustLib alloc failed!" ); return( NULL ); } memset( lib, 0, sizeof( WdeCustLib ) ); WRMemValidate( lib ); return( lib ); }
BOOL WdeAddBorControlsToCustLib( WdeCustLib *lib, WdeBorlandClassList *class_list ) { uint_16 num; for( num = 0; num < class_list->nClasses; num++ ) { if( !WdeCreateAndAddCustControl( lib, class_list->Classes[num].info_proc, class_list->Classes[num].style_proc, class_list->Classes[num].flags_proc ) ) { WdeWriteTrail( "WdeAddBorControlsToCustLib: Control not added to list!" ); return( FALSE ); } } WRMemValidate( lib ); return( TRUE ); }
BOOL WdeLoadBorCustomControls( WdeCustLib *lib ) { WdeListClassesProc list_proc; HGLOBAL list_global; uint_8 *list_locked; uint_16 num_classes; WdeBorlandClassList *class_list; uint_32 class_list_size; /* touch unused var to get rid of warning */ _wde_touch( lib ); list_proc = (WdeListClassesProc)GetProcAddress( lib->inst, "ListClasses" ); if( list_proc == NULL ) { if( WdeQueryAssumeMS() ) { lib->ms_lib = TRUE; return( WdeLoadMSCustomControls( lib ) ); } else { WdeWriteTrail( "WdeLoadBorCustomControls: User aborted load!" ); return( FALSE ); } } if( WdeCustLOADRESInst == NULL ) { WdeCustLOADRESInst = MakeProcInstance( (FARPROC)WdeCustLOADRES, WdeGetAppInstance() ); } if( WdeCustEDITRESInst == NULL ) { WdeCustEDITRESInst = MakeProcInstance( (FARPROC)WdeCustEDITRES, WdeGetAppInstance() ); } #if 0 list_global = (*list_proc)( "WdeMainClass", WDE_VERSION, (LPFNLOADRES)WdeCustLOADRES, (LPFNEDITRES)WdeCustEDITRES ); #else list_global = (*list_proc)( "WdeMainClass", WDE_VERSION, (LPFNLOADRES)WdeCustLOADRESInst, (LPFNEDITRES)WdeCustEDITRESInst ); #endif if( list_global == NULL ) { WdeWriteTrail( "WdeLoadBorCustomControls: ListClasses returned NULL!" ); return( FALSE ); } list_locked = (uint_8 *)GlobalLock( list_global ); if( list_locked == NULL ) { WdeWriteTrail( "WdeLoadBorCustomControls: Could lock global memory!" ); GlobalFree( list_global ); return( FALSE ); } num_classes = *(uint_16 *)list_locked; class_list_size = sizeof( WdeBorlandClassList ) + (num_classes - 1) * sizeof( WdeBorlandCtlClass ); class_list = (WdeBorlandClassList *)WRMemAlloc( class_list_size ); if( class_list == NULL ) { WdeWriteTrail( "WdeLoadBorCustomControls: class list alloc failed!" ); GlobalUnlock( list_global ); GlobalFree( list_global ); return( FALSE ); } memcpy( class_list, list_locked, class_list_size ); lib->class_list = list_global; if( !WdeAddBorControlsToCustLib( lib, class_list ) ) { WdeWriteTrail( "WdeLoadBorCustomControls: Add to CustLib failed!" ); WRMemFree( class_list ); GlobalUnlock( list_global ); GlobalFree( list_global ); return( FALSE ); } WRMemFree( class_list ); GlobalUnlock( list_global ); WRMemValidate( lib ); return( TRUE ); }
int WdeMemValidate ( void *ptr ) { return ( WRMemValidate( ptr ) ); }