📄 test.c
字号:
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 + -