⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 空战游戏flacon源码
💻 C
📖 第 1 页 / 共 2 页
字号:
           Within the the console app, if you 
           type 'run <params ...>', you'll execute 
           this function with the familiar arguments 
           from main().

   ================================================ */ 

void cmd_run( int argc, char ** argv )
{
    FILE * fp;
	FILE *fp1;

    char buffer[1024];
    //  ALL OF THE CODE WITHIN THIS FUNCTION CAN BE
    //  (AND SHOULD BE) DELETED AND REPLACED WITH
    //  WHATEVER THROW-AWAY CODE YOU WANT TO TEST!!
 
    /* here's a simple example */

    /* --- Show arguments --- */
    int i;
	int ret;

    for( i=0; i<argc; i++ )
        printf( "%02d: %s\n", i, argv[i] );


    /* here's a more likely example */



    /* --- Test fseek, ftell --- */

    if( argc < 3 ) {
        printf( "useage: RUN <file> <mode>\n" );
        return;
    }

    fp = fopen( argv[1], argv[2] );

    if( !fp ) {
        printf( "Could not open %s\n", argv[1] );
        return;
    }

    fread( buffer, 1, 1, fp );
    printf( "buffer[0] = %d\n", buffer[0] );
    
    fseek( fp, 64, SEEK_SET );
    fread( buffer, 1, 1, fp );
    printf( "buffer[64] = %d\n", buffer[0] );

    fseek( fp, 512, SEEK_SET );
    fread( buffer, 18, 1, fp );
    printf( "buffer[512] = %s\n", buffer );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp, -15, SEEK_END );
    fread( buffer, 1, 1, fp );
    printf( "buffer[1009] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp, -1024, SEEK_END );
    fread( buffer, 1, 1, fp );
    printf( "buffer[0] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp, -896, SEEK_END );
    fread( buffer, 1, 1, fp );
    printf( "buffer[128] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp, 0, SEEK_SET );
    fscanf( fp, "%s", buffer );
    printf( "fscanf = %s\n", buffer );

    printf( "size = %d\n", fseek( fp, 0, SEEK_END ));



	if(argc > 3 )
	{
	/* open second file */
    fp1 = fopen( argv[3], argv[2] );

    if( !fp1 ) {
        printf( "Could not open %s %s\n", argv[3],argv[2] );
        return;
    }

    fread( buffer, 1, 1, fp1 );
    printf( "buffer[0] = %d\n", buffer[0] );
    

    fseek( fp1, 512, SEEK_SET );
    fread( buffer, 18, 1, fp1 );
    printf( "buffer[512] = %s\n", buffer );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp1, -15, SEEK_END );
    fread( buffer, 1, 1, fp1 );
    printf( "buffer[1009] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp1, -1024, SEEK_END );
    fread( buffer, 1, 1, fp1 );
    printf( "buffer[0] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));


    fseek( fp1, 0, SEEK_SET );
    fscanf( fp1, "%s", buffer );
    printf( "fscanf = %s\n", buffer );

    printf( "size = %d\n", fseek( fp, 0, SEEK_END ));
	fclose(fp1);
	}



	/* open third file */
	if(argc > 4)
	{
    fp1 = fopen( argv[4], argv[2] );

    if( !fp1 ) {
        printf( "Could not open %s\n", argv[4] );
        return;
    }

    fread( buffer, 1, 1, fp1 );
    printf( "buffer[0] = %d\n", buffer[0] );
    

    fseek( fp1, 512, SEEK_SET );
    fread( buffer, 18, 1, fp1 );
    printf( "buffer[512] = %s\n", buffer );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp1, -15, SEEK_END );
    fread( buffer, 1, 1, fp1 );
    printf( "buffer[1009] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));

    fseek( fp1, -1024, SEEK_END );
    fread( buffer, 1, 1, fp1 );
    printf( "buffer[0] = %d\n", buffer[0] );

    printf( "pos = %d\n", RES_FTELL(fp));


    fseek( fp1, 0, SEEK_SET );
    fscanf( fp1, "%s", buffer );
    printf( "fscanf = %s\n", buffer );

    printf( "size = %d\n", fseek( fp, 0, SEEK_END ));
	fclose(fp1);

	}

    ret = fseek( fp, 0, SEEK_SET );
    printf( "fseek: ret = %d\n", ret );
    fscanf( fp, "%s", buffer );
    printf( "fscanf = %s\n", buffer );

    printf( "size = %d\n", fseek( fp, 0, SEEK_END ));



    fclose(fp);
}


/* ================================================

                    M  A  I  N

   ================================================ */

int main( int argc, char ** argv )
{
    char path[_MAX_PATH];

    char buffer[ MAX_COMMAND_LINE + 2 ] = { (char)MAX_COMMAND_LINE };  /* Used with _cgets() - maximum number of characters in must be set in 1st byte */

    int    _argc;
    char * _argv[ MAX_ARGS ],
         * result,
         * fullpath;

    int archive_handle = -1;         /* last attached archive */

    int i, cmd;

    if( !ResInit( NULL )) 
        return( 1 );            /* ResInit failed */

    
    /* these would be called after parsing an .ini file or similar */

    IF_DEBUG( ResDbgLogOpen( "resource.log" ));

    print_heading();

    _getcwd( path, _MAX_PATH );
    printf( "PATH: %s\n", path );

    do {
        do {
#if( !RES_USE_FLAT_MODEL )
            printf( "\n%s> ", GLOBAL_CURRENT_PATH );
#else
            printf( "\nRoot > " );
#endif
    _getcwd( path, _MAX_PATH );
    printf( "[SD: %s]>", path );

            result = GETS( buffer );  /* Input a line of text */
            
        } while( !buffer[1] );


        if( !stricmp( result, "exit" ))
            break;

        _argc = parse_args( result, _argv );

        cmd = COMMAND_ERROR;

        for( i=0; i<COMMAND_COUNT; i++ ) {
            if( !stricmp( result, command[i] )) {
                cmd = i;
                break;
            }
        }

        if( cmd == COMMAND_EXIT && !_argc )
            break;

        if( _argc > 1 ) {
            if( !stricmp( _argv[1], "?" ) || !stricmp( _argv[1], "help" )) {
                show_help( cmd );
                continue;
            }
            else
                if( strchr( _argv[1], ASCII_BACKSLASH )) {
                    res_fullpath( path, _argv[1], _MAX_PATH );
                    fullpath = path;
                }
                else
                    fullpath = _argv[1];
        }

        switch( cmd ) 
        {
            case COMMAND_DIR:
#if( RES_USE_FLAT_MODEL )
                printf( "This function is only meaningful when using the hierarchical model.\n" );
                break;
#endif
                if( _argc > 1 )
                    cmd_dir( _argv[1] );
                else
                    cmd_dir( NULL );
                break;


            case COMMAND_ANALYZE:
            {
#if( !RES_USE_FLAT_MODEL )
                HASH_ENTRY * entry;

                if( _argc == 1 )
                    entry = hash_find( GLOBAL_CURRENT_PATH, GLOBAL_HASH_TABLE );
                else
                    entry = hash_find( fullpath, GLOBAL_HASH_TABLE );

                if( entry ) {
#if( RES_DEBUG_VERSION )
                    if( entry -> dir )
                        dbg_analyze_hash( (HASH_TABLE *)entry -> dir );
                    else
                        printf( "No directory table for this directory.\n" );
#endif /* RES_DEBUG_VERSION */
                }
                else
                    printf( "Directory not found.\n" );
#else
                printf( "This command only meaningful when using the hierarchical model!\n" );
#endif
                break;
            }

            case COMMAND_RUN:
                cmd_run( _argc, _argv );
                break;

            case COMMAND_CD:
                if( _argc > 1 ) {
                    if( !ResSetDirectory( fullpath ))
                        printf( "Error changing to directory %s\n", fullpath );
                }
                else
                    printf( "Current directory is: %s\n", GLOBAL_CURRENT_PATH );

                break;


            case COMMAND_ADD:
                if( _argc > 1 ) {
                    int test = FALSE,
                        flag = -1;

                    if( _argc > 2 )
                        flag = is_bool( _argv[2] );
                    
                    if( flag == -1 )
                        flag = TRUE;

                    if( !GLOBAL_SEARCH_INDEX )
                        test = ResCreatePath( fullpath, flag );
                    else
                        test = ResAddPath( fullpath, flag );

                    if( !test )
                        printf( "Error adding %s to search path\n", fullpath );
                }
                else
                    show_help(cmd);
                break;


            case COMMAND_STREAM:
            {
                FILE * fptr;
                char   c;
                int    test;

                if( _argc < 2 ) {
                    show_help(cmd);
                    break;
                }

                fptr = fopen( _argv[1], "r" );

                if( fptr ) {
                    while( (test = fscanf( fptr, "%c", &c )) != EOF )
                        printf( "%c", c );

                    printf( "\n\n\n\n ************** REWINDING ****************** \n\n\n\n\n\n\n" );

                    fseek( fptr, 0, SEEK_SET );

                    while( (test = fscanf( fptr, "%c", &c )) != EOF )
                        printf( "%c", c );

                    fclose( fptr );

                } else {
                    printf( "Error opening file %s\n", _argv[1] );
                }

                break;
            }


            case COMMAND_PATH:
            {
                int x=0;
                char b[_MAX_PATH];

                if( GLOBAL_PATH_LIST ) {

                    while( ResGetPath( x++, b ))
                        printf( "%s\n", b );
                }
                else
                    printf( "No path created.\n" );

                break;
            }

            case COMMAND_EXTRACT:
            {
                /* extracts the archive to the local directory with the same filename */

                if( _argc < 3 )
                    show_help(cmd);
                else              
                    ResExtractFile( _argv[1], _argv[2] );
                break;
            }            

            case COMMAND_READ:
                if( _argc >= 2 )
                    cmd_read( _argv[1] );
                else
                    show_help(cmd);
                break;


            case COMMAND_ATTACH:
            {
                char dst[_MAX_PATH];
                int  flag = -1;

                if( _argc < 2 ) {
                    show_help(cmd);
                    break;
                }

                if( _argc >= 3 )
                    flag = is_bool( _argv[ _argc - 1 ] );

                if( _argc >= 3 ) res_fullpath( dst, _argv[2], _MAX_PATH );

                if( _argc == 2 )
                    archive_handle = ResAttach( GLOBAL_CURRENT_PATH, fullpath, FALSE );
                else
                    if( _argc == 3 ) {
                        if( flag != -1 )
                            archive_handle = ResAttach( GLOBAL_CURRENT_PATH, fullpath, flag );
                        else
                            archive_handle = ResAttach( fullpath, dst, FALSE );
                    } else
                        if( _argc == 4 )
                            archive_handle = ResAttach( fullpath, dst, flag == -1 ? 0 : flag );
                
                if( archive_handle == -1 )
                    printf( "Error attaching zip file %s\n", fullpath );

                break;
            }

            case COMMAND_DUMP:
                ResDbgDump();
                MemDump();          printf("\n");
                MemFindLevels();    printf("\n");
                MemFindUsage();
                break;

            case COMMAND_DETACH:
                if( archive_handle != -1 )
                {
                    ResDetach( archive_handle );
                    archive_handle = -1;
                }
                else
                    printf( "No archives currently attached.\n" );
                break;

            case COMMAND_MAP:
                if( _argc < 2 )
                    show_help(cmd);
                else
                    cmd_map( _argv[1] );
                break;

            case COMMAND_FIND:
                if( _argc < 2 )
                    show_help(cmd);
                else
                    cmd_find( fullpath );
                break;

            case COMMAND_HELP:
                print_heading();
                show_help(cmd);
                break;

            case COMMAND_ERROR:
            default:
                printf( "Syntax error\n" );
                break;
        }

    } while( TRUE );
    
    ResExit();
    MemDump();
    _getcwd( path, _MAX_PATH );
    printf( "PATH: %s\n", path );

    return(0);
}
#endif /* RES_STANDALONE    */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -