static bool Pass1InitRes( void ) /******************************/ { WResID null_id; ResMemFlags null_memflags; ResLocation null_loc; memset( &CurrResFile, 0, sizeof( CurrResFile ) ); /* open the temporary file */ CurrResFile.filename = "Temporary file 0 (res)"; CurrResFile.fp = ResOpenFileTmp( NULL ); if( CurrResFile.fp == NULL ) { RcError( ERR_OPENING_TMP, CurrResFile.filename, LastWresErrStr() ); return( true ); } /* initialize the directory */ CurrResFile.dir = WResInitDir(); if( CurrResFile.dir == NULL ) { RcError( ERR_OUT_OF_MEMORY ); ResCloseFile( CurrResFile.fp ); CurrResFile.fp = NULL; return( true ); } if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN16 ) { WResSetTargetOS( CurrResFile.dir, WRES_OS_WIN16 ); } else if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) { WResSetTargetOS( CurrResFile.dir, WRES_OS_WIN32 ); } else { WResSetTargetOS( CurrResFile.dir, WRES_OS_OS2 ); } if( CmdLineParms.MSResFormat ) { CurrResFile.IsWatcomRes = false; /* write null header here if it is win32 */ if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) { null_loc.start = SemStartResource(); null_loc.len = SemEndResource( null_loc.start ); null_id.IsName = false; null_id.ID.Num = 0; null_memflags = 0; SemAddResource( &null_id, &null_id, null_memflags, null_loc ); } } else { CurrResFile.IsWatcomRes = true; WResFileInit( CurrResFile.fp ); } CurrResFile.NextCurOrIcon = 1; return( false ); } /* Pass1InitRes */
extern void SemOS2WriteStringTable( FullStringTable *currtable, WResID *type ) /****************************************************************************/ /* write the table identified by currtable as a table of type type and then */ /* free the memory that it occupied */ { FullStringTableBlock *currblock; FullStringTable *tofree; WResID *name; int error; ResLocation loc; while( currtable != NULL ) { for( currblock = currtable->Head; currblock != NULL; currblock = currblock->Next ) { loc.start = SemStartResource(); error = ResOS2WriteStringTableBlock( &(currblock->Block), CurrResFile.handle, currblock->codePage ); if( error) { RcError( ERR_WRITTING_RES_FILE, CurrResFile.filename, LastWresErrStr() ); ErrorHasOccured = TRUE; SemOS2FreeStringTable( currtable ); return; } loc.len = SemEndResource( loc.start ); /* +1 because WResID's can't be 0 */ name = WResIDFromNum( currblock->BlockNum + 1 ); SemAddResource( name, type, currblock->Flags, loc ); RcMemFree( name ); } tofree = currtable; currtable = currtable->next; SemOS2FreeStringTable( tofree ); } RcMemFree( type ); return; }
static int Pass1InitRes( void ) /*****************************/ { WResID null_id; ResMemFlags null_memflags; ResLocation null_loc; /* put the temporary file in the same location as the output file */ CurrResFile.filename = CurrResFile.namebuf; #ifdef USE_TEMPFILE MakeTmpInSameDir( CmdLineParms.OutResFileName, CurrResFile.filename, "res" ); #else strcpy( CurrResFile.filename, CmdLineParms.OutResFileName ); #endif /* initialize the directory */ CurrResFile.dir = WResInitDir(); if( CurrResFile.dir == NULL ) { RcError( ERR_OUT_OF_MEMORY ); CurrResFile.IsOpen = false; return( TRUE ); } if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN16 ) { WResSetTargetOS( CurrResFile.dir, WRES_OS_WIN16 ); } else if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) { WResSetTargetOS( CurrResFile.dir, WRES_OS_WIN32 ); } else { WResSetTargetOS( CurrResFile.dir, WRES_OS_OS2 ); } /* open the temporary file */ if( CmdLineParms.MSResFormat ) { CurrResFile.IsWatcomRes = FALSE; CurrResFile.handle = MResOpenNewFile( CurrResFile.filename ); /* write null header here if it is win32 */ if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 && CmdLineParms.MSResFormat ) { null_loc.start = SemStartResource(); null_loc.len = SemEndResource( null_loc.start ); null_id.IsName = FALSE; null_id.ID.Num = 0; null_memflags = 0; SemAddResource( &null_id, &null_id, null_memflags, null_loc ); } } else { CurrResFile.IsWatcomRes = TRUE; CurrResFile.handle = WResOpenNewFile( CurrResFile.filename ); } if( CurrResFile.handle == NIL_HANDLE ) { RcError( ERR_OPENING_TMP, CurrResFile.filename, LastWresErrStr() ); CurrResFile.IsOpen = false; return( TRUE ); } RegisterTmpFile( CurrResFile.filename ); CurrResFile.IsOpen = true; CurrResFile.StringTable = NULL; CurrResFile.ErrorTable = NULL; CurrResFile.FontDir = NULL; CurrResFile.NextCurOrIcon = 1; return( FALSE ); } /* Pass1InitRes */