FILE* open_file(const char* file_name, const char* read_mode) { char szFileName[256] = {0}; char szTemp[256] = {0}; FILE* fp = NULL; strncpy(szFileName, file_name, sizeof(szFileName) - 1); my_strlwr(szFileName); // 先查找资源目录,资源目录要求是可以读写的。如果有相同文件,优先读取资源目录下的。(更新文件) snprintf(szTemp, sizeof(szTemp) - 1, "%s%s", g_resource_dir, szFileName); // printf("%s\n", szTemp); fp = fopen(szTemp, read_mode); if (fp) { return fp; } #ifdef __IPHONEOS__ // 写文件只能写在document目录 if (strchr(read_mode, 'w') != 0) { // 从外部拷贝进来的存档可能因为文件所属不是mobile导致无法写入。删除旧文件,重新创建新文件 remove(szTemp); fp = fopen(szTemp, read_mode); if (fp) { return fp; } return NULL; } #endif #ifdef __ANDROID__ return NULL; #endif snprintf(szTemp, sizeof(szTemp) - 1, "%s%s", g_application_dir, szFileName); fp = fopen(szTemp, read_mode); if (fp) { return fp; } return NULL; }
int main( int argc, char *argv[] ) /********************************/ { FILE *in; FILE *out; char buf[MAX_LINE_LEN]; int elt; char *end; char *line; char type[50]; if( argc != 4 ) { printf( "FORMAT: parsectl [input file] [output file] [Ctl data name]\n" ); return( -1 ); } in = fopen( argv[1], "r" ); if( in == NULL ) { printf( "Could not open input file: %s\n", argv[1] ); return( -1 ); } out = fopen( argv[2], "w" ); if( out == NULL ) { printf( "Could not open output file: %s\n", argv[2] ); return( -1 ); } fputs( "/**** DO NOT MODIFY THIS FILE BY HAND. CREATED BY PARSECTL ****/\n\n\n", out ); /* Create Data struct definition */ fputs( "struct {\n", out ); fputs( " int num_ctls;\n", out ); for( elt = 0;; ++elt ) { line = get_line( buf, in ); if( line == NULL ) { break; } end = strpbrk( line, White_space ); if( end == NULL ) { printf( "No control on line %d\n", Line ); goto error; } *end = '\0'; strcpy( type, line ); line = get_line( buf, in ); // skip over data_offset if( line == NULL ) { printf( "No data offset at line %d\n", Line ); goto error; } fputs( " struct {\n", out ); fputs( " ctl_type type;\n", out ); fputs( " int control;\n", out ); fputs( " bool modified;\n", out ); fputs( " unsigned int data_offset;\n", out ); fputs( " union {\n", out ); line = get_line( buf, in ); // skip over data if( line == NULL ) { printf( "No data at line %d\n", Line ); goto error; } if( !empty_data( line ) ) { fprintf( out, " %s d1;\n", my_strlwr( type ) ); } fputs( " ctl_info d2;\n", out ); fputs( " } d3;\n", out ); fprintf( out, " } d%-d;\n", elt ); } fclose( in ); fprintf( out, "} %s = {\n", argv[3] ); fprintf( out, "%d,\n", elt ); in = fopen( argv[1], "r" ); for( ;; ) { line = get_line( buf, in ); if( line == NULL ) { break; } end = strpbrk( line, White_space ); *end = '\0'; ++end; fprintf( out, "{ %s, %s, false,", my_strupr( line ), end ); line = get_line( buf, in ); fprintf( out, " %s", line ); line = get_line( buf, in ); if( !empty_data( line ) ) { fprintf( out, ", %s },\n", line ); } else { fputs( "},\n", out ); } } fputs( "};\n\n", out ); fclose( in ); fclose( out ); return( 0 ); error: fclose( in ); fclose( out ); return( 1 ); }
//-------------------------------------------------------------------------------------- BOOLEAN RuntimeProcessImports(PVOID Image, char *ImportedModuleName, PVOID ImportedModuleBase) { PIMAGE_NT_HEADERS32 pHeaders32 = (PIMAGE_NT_HEADERS32) ((PUCHAR)Image + ((PIMAGE_DOS_HEADER)Image)->e_lfanew); PIMAGE_IMPORT_DESCRIPTOR pImport = NULL; if (pHeaders32->FileHeader.Machine == IMAGE_FILE_MACHINE_I386) { // 32-bit image if (pHeaders32->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress) { pImport = (PIMAGE_IMPORT_DESCRIPTOR)RVATOVA(Image, pHeaders32->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); } } else if (pHeaders32->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64) { // 64-bit image PIMAGE_NT_HEADERS64 pHeaders64 = (PIMAGE_NT_HEADERS64) ((PUCHAR)Image + ((PIMAGE_DOS_HEADER)Image)->e_lfanew); if (pHeaders64->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress) { pImport = (PIMAGE_IMPORT_DESCRIPTOR)RVATOVA(Image, pHeaders64->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); } } else { return FALSE; } if (pImport) { // enumerate import modules while (pImport->Name != 0) { char szName[MAX_IMAGE_NAME_LEN]; my_strcpy(szName, (char *)RVATOVA(Image, pImport->Name)); if (my_strcmp(my_strlwr(szName), ImportedModuleName)) { // this routine can process only exports from the specified module goto skip_module; } #ifdef _X86_ // process thunk data for 32-bit pointers PIMAGE_THUNK_DATA32 pThunk = (PIMAGE_THUNK_DATA32)RVATOVA(Image, pImport->FirstThunk); #elif _AMD64_ // process thunk data for 64-bit pointers PIMAGE_THUNK_DATA64 pThunk = (PIMAGE_THUNK_DATA64)RVATOVA(Image, pImport->FirstThunk); #endif // enumerate functions of the current module while (pThunk->u1.Ordinal != 0) { PIMAGE_IMPORT_BY_NAME pName = (PIMAGE_IMPORT_BY_NAME)RVATOVA(Image, pThunk->u1.AddressOfData); char *lpszFuncName = (char *)&pName->Name; PVOID FuncAddr = RuntimeGetExportAddress(ImportedModuleBase, lpszFuncName); if (FuncAddr == NULL) { return FALSE; } *(PVOID *)pThunk = FuncAddr; pThunk += 1; } skip_module: pImport += 1; } } return TRUE; }
/* ----------------------------------------------------------------------------- Function: Parameters: Returns: Notes: ----------------------------------------------------------------------------- */ PUBLIC void R_Init() { char renderer_buffer[ 1000 ]; char vendor_buffer[ 1000 ]; int err; int a, b; Com_Printf( "\n------ Display Initialization ------\n" ); Com_Printf( "Initializing OpenGL Subsystem\n" ); R_Register(); // set our "safe" modes gl_state.prev_mode = 0; // get various GL strings gl_config.vendor_string = (char *)pfglGetString( GL_VENDOR ); Com_Printf( "GL_VENDOR: %s\n", gl_config.vendor_string ); gl_config.renderer_string = (char *)pfglGetString( GL_RENDERER ); Com_Printf( "GL_RENDERER: %s\n", gl_config.renderer_string ); gl_config.version_string = (char *)pfglGetString( GL_VERSION ); Com_Printf( "GL_VERSION: %s\n", gl_config.version_string ); gl_config.extensions_string = (char *)pfglGetString( GL_EXTENSIONS ); Com_Printf( "GL_EXTENSIONS: %s\n", gl_config.extensions_string ); my_strlcpy( renderer_buffer, gl_config.renderer_string, sizeof( renderer_buffer ) ); (void)my_strlwr( renderer_buffer ); my_strlcpy( vendor_buffer, gl_config.vendor_string, sizeof( vendor_buffer ) ); (void)my_strlwr( vendor_buffer ); sscanf( gl_config.version_string, "%d.%d", &a, &b ); if( a >= 1 && b >= 2 ) { gl_config.Version_1_2 = true; } pfglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glMaxTexSize ); Com_Printf( "GL_MAX_TEXTURE_SIZE: %d\n", glMaxTexSize); if ( strstr( gl_config.extensions_string, "GL_EXT_discard_framebuffer" ) != 0 ) { gl_config.framebuffer_discard = true; } else { gl_config.framebuffer_discard = false; } InitImmediateModeGL(); GL_SetDefaultState(); TM_Init(); Font_Init(); err = pfglGetError(); if( err != GL_NO_ERROR ) { Com_Printf( "glGetError() = 0x%x\n", err ); } }