Beispiel #1
0
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;
}
Beispiel #2
0
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 );
}
Beispiel #3
0
//--------------------------------------------------------------------------------------
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;
}
Beispiel #4
0
/*
-----------------------------------------------------------------------------
 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 );
	}
}