static void DoIncLibDefs( void ) /******************************/ { libnamelist *lib; for( lib = SavedDefLibs; lib != NULL; lib = lib->next ) { AddObjLib( lib->name, lib->priority ); } }
static void PrepareModList( void ) /********************************/ { file_list *list; mod_entry *mod; mod_entry *curr; libnamelist *blacklist; mod = Root->mods; for( list = Root->files; list != NULL; list = list->next_file ) { if( strcmp( list->file->name, mod->f.fname ) == 0 ) { SetupModule( &mod, list ); } else if( mod->n.next_mod != NULL ) { if( FNAMECMPSTR( list->file->name, mod->n.next_mod->f.fname ) == 0 ) { mod->modinfo |= MOD_KILL; mod = mod->n.next_mod; SetupModule( &mod, list ); } } if( mod == NULL ) { break; } } while( mod != NULL ) { mod->modinfo |= MOD_KILL; // no match found mod = mod->n.next_mod; } blacklist = CalcLibBlacklist(); mod = LibModules; while( mod != NULL ) { if( mod->f.fname == NULL ) { mod->modinfo |= MOD_KILL; } else if( !(mod->modinfo & MOD_VISITED) ) { list = AddObjLib( mod->f.fname, LIB_PRIORITY_MID ); CheckNewFile( mod, list, 1); CheckBlacklist( list, blacklist ); for( curr = mod->n.next_mod; curr != NULL; curr = curr->n.next_mod){ if( curr->f.fname == mod->f.fname ) { curr->f.source = list; curr->modinfo |= MOD_VISITED; } } mod->f.source = list; } mod->modinfo &= ~MOD_VISITED; mod = mod->n.next_mod; } FreeList( SavedUserLibs ); SavedUserLibs = NULL; }
void DoCmdFile( char *fname ) /**********************************/ /* start parsing the command */ { exe_format possible; f_handle file; size_t namelen; file_defext extension; char *namelnk; ResetCmdFile(); if( fname == NULL || *fname == '\0' ) { _ChkAlloc( fname, (10*1024) ); // arbitrarily large buffer that won't GetCmdLine( fname ); // be overflowed NewCommandSource( NULL, fname, COMMANDLINE ); } else { NewCommandSource( NULL, fname, ENVIRONMENT ); } if( IsStdOutConsole() ) { CmdFlags |= CF_TO_STDOUT; } while( *fname == ' ' ) { fname++; } if( QSysHelp( &Token.next ) ) { Help(); } if( *fname == '?' ) { Token.next = fname + 1; // skip question mark. Help(); #if defined( __UNIX__ ) } else if( *fname == '-' ) { #else } else if( *fname == '-' || *fname == '/' ) { #endif if( *(fname + 1) == '?' ) { Token.next = fname + 2; // skip /? Help(); } } if( *fname == '\0' ) { // go into interactive mode. Token.how = INTERACTIVE; Token.where = ENDOFLINE; LnkMsg( INF+MSG_PRESS_CTRL_Z, NULL ); } namelnk = GetEnvString( INIT_FILE_ENV ); file = ( namelnk != NULL ) ? FindPath( namelnk ) : NIL_FHANDLE; if( file == NIL_FHANDLE ) { namelnk = INIT_FILE_NAME; file = FindPath( namelnk ); } if( file != NIL_FHANDLE ) { fname = ChkStrDup( namelnk ); SetCommandFile( file, fname ); } if( Spawn( DoCmdParse ) ) { Ignite(); Suicide(); } GetExtraCommands(); if( !(LinkState & FMT_DECIDED) ) { /* restrict set to automatically decided ones */ #if defined( __QNX__ ) #define LAST_CHANCE ( MK_OS2_LX | MK_OS2_LE | MK_OS2_NE | MK_QNX ) #elif defined( __LINUX__ ) #define LAST_CHANCE ( MK_OS2_LX | MK_OS2_LE | MK_OS2_NE | MK_ELF ) #elif defined( __NT__ ) #define LAST_CHANCE ( MK_OS2_LX | MK_OS2_NE | MK_WINDOWS | MK_PE | MK_DOS_EXE | MK_WIN_VXD ) #else #define LAST_CHANCE ( MK_OS2_LX | MK_OS2_LE | MK_OS2_NE | MK_DOS_EXE | MK_PHAR_SIMPLE ) #endif HintFormat( LAST_CHANCE ); } else { /* restrict to a unique type */ for( possible = 1; possible != 0; possible *= 2 ) { if( FmtData.type & possible ) { FmtData.type = possible; break; } } } if( (FmtData.type & (MK_NOVELL | MK_DOS)) && (LinkFlags & INC_LINK_FLAG) ) { LnkMsg( FTL+MSG_FORMAT_BAD_OPTION, "s", "incremental" ); } #ifdef _NOVELL if( FmtData.type & MK_NOVELL ) { CmdNovFini(); } else #endif if( FmtData.type & MK_OVERLAYS ) { CmdOvlFini(); AddObjLib( "wovl.lib", LIB_PRIORITY_MIN ); // add a reference to wovl.lib } if( Name == NULL || !(CmdFlags & CF_HAVE_FILES) ) { Ignite(); LnkMsg( FTL+MSG_NO_FILES_FOUND, NULL ); } namelen = strlen( Name ); if( MapFlags & MAP_FLAG ) { if( MapFName == NULL ) { MapFName = FileName( Name, namelen, E_MAP, TRUE ); } } else { MapFlags = 0; // if main isn't set, don't set anything. } if( SymFileName == NULL && ( (CmdFlags & CF_SEPARATE_SYM) || (LinkFlags & OLD_DBI_FLAG) && (FmtData.type & MK_COM) ) ) { SymFileName = FileName( Name, namelen, E_SYM, TRUE ); } if( FmtData.make_implib && FmtData.implibname == NULL ) { if( FmtData.make_impfile ) { extension = E_LBC; } else { extension = E_LIBRARY; } FmtData.implibname = FileName( Name, namelen, extension, TRUE ); } CheckTraces(); BurnUtils(); PruneSystemList(); NumberSections(); DBIInit(); }