WResFileID res_open( const char * file_name, wres_open_mode omode ) /*****************************************************************/ { WResFileID fid; int i; switch( omode ) { default: case WRES_OPEN_RO: fid = WRES_PH2FID( open( file_name, O_BINARY | O_RDONLY ) ); break; case WRES_OPEN_RW: fid = WRES_PH2FID( open( file_name, O_BINARY | O_RDWR | O_CREAT, PMODE_RW ) ); break; case WRES_OPEN_NEW: fid = WRES_PH2FID( open( file_name, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, PMODE_RW ) ); break; } if( fid != WRES_NIL_HANDLE ) { RegisterOpenFile( fid ); if( !RcIoNoBuffer ) { for( i = 0; i < RC_MAX_FILES; i++ ) { if( !RcFileList[i].HasRcBuffer ) { RcFileList[i].HasRcBuffer = true; RcFileList[i].fid = fid; RcFileList[i].Buffer = NewRcBuffer(); break; } } } } return( fid ); } /* RcOpen */
int InitRcMsgs( void ) { int error; WResFileID (* oldopen)(const char *, int, ...); char testbuf[1]; #if defined( IDE_PGM ) || !defined( __WATCOMC__ ) char imageName[_MAX_PATH]; #else char *imageName; #endif #if defined( IDE_PGM ) _cmdname( imageName ); #elif !defined( __WATCOMC__ ) get_dllname( imageName, sizeof( imageName ) ); #else imageName = _LpDllName; #endif /* * swap open functions so this file handle is not buffered. * This makes it easier for layer0 to fool WRES into thinking * that the resource information starts at offset 0 */ oldopen = WResRtns.open; WResRtns.open = open; error = OpenResFile( &Instance, imageName ); WResRtns.open = oldopen; if( !error ) { RegisterOpenFile( Instance.handle ); error = FindResources( &Instance ); if( !error ) { error = InitResources( &Instance ); } if( error ) { CloseResFile( &Instance ); UnRegisterOpenFile( Instance.handle ); } } MsgShift = _WResLanguage() * MSG_LANG_SPACING; if( !error && !GetRcMsg( USAGE_MSG_FIRST, testbuf, sizeof( testbuf ) ) ) { error = TRUE; } if( error ) { RcFatalError( ERR_RCSTR_NOT_FOUND ); } return( 1 ); }