static int jtag_parse_rc( void ) { char *home = getenv( "HOME" ); char *file; int go; if (!home) return 1; file = malloc( strlen(home) + strlen(JTAGDIR) + strlen(RCFILE) + 3 ); /* 2 x "/" and trailing \0 */ if (!file) return 1; strcpy( file, home ); strcat( file, "/" ); strcat( file, JTAGDIR ); strcat( file, "/" ); strcat( file, RCFILE ); go = jtag_parse_file( file ); free( file ); return go; }
int main( int argc, const char **argv ) { int go; int i; #ifdef ENABLE_NLS /* l10n support */ setlocale( LC_ALL, "" ); bindtextdomain( PACKAGE, LOCALEDIR ); textdomain( PACKAGE ); #endif /* ENABLE_NLS */ /* input from files */ if (argc > 1) { for (i = 1; i < argc; i++) { chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } go = jtag_parse_file( argv[i] ); cleanup(); if (go < 0) { printf( _("Unable to open file `%s'!\n"), argv[i] ); break; } } return 0; } /* input from stdin */ if (!isatty(0)) { chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } jtag_parse_stream( stdin ); cleanup(); return 0; } /* interactive */ printf( _("%s\n" "Copyright (C) 2002, 2003 ETC s.r.o.\n" "%s is free software, covered by the GNU General Public License, and you are\n" "welcome to change it and/or distribute copies of it under certain conditions.\n" "There is absolutely no warranty for %s.\n\n"), PACKAGE_STRING, PACKAGE_NAME, PACKAGE_NAME ); chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } printf( _("Warning: %s may damage your hardware! Type \"quit\" to exit!\n\n"), PACKAGE_NAME ); printf( _("Type \"help\" for help.\n\n") ); /* Create ~/.jtag */ jtag_create_jtagdir(); /* Parse and execute the RC file */ go = jtag_parse_rc(); if (go) { /* Load history */ jtag_load_history(); /* main loop */ jtag_readline_loop( "jtag> " ); /* Save history */ jtag_save_history(); } cleanup(); return 0; }
static int cmd_include_or_script_run( chain_t *chain, int is_include, char *params[] ) { int go = 0, i, j = 1; char *path; int len; if (cmd_params( params ) < 2) return -1; if( ! is_include ) { printf(_("Please use the 'include' command instead of 'script'\n") ); } /* If "params[1]" begins with a slash, or dots followed by a slash, * assume that user wants to ignore the search path */ path = params[1]; #ifdef __MINGW32__ if (isalpha(*path) && path[1] == ':') path += 2; #endif while( *path == '.' ) path++; if(*path == '/' || *path == '\\' || ! is_include||(isalpha(*path) && path[1] == ':')) { path = strdup(params[1]); } else { const char *jtag_data_dir = jtag_get_data_dir(); path = malloc(len = strlen( jtag_data_dir ) + strlen( params[1] ) + 2); if(path != NULL) { snprintf( path, len, "%s/%s", jtag_data_dir, params[1] ); } } if (path == NULL) { printf( _("Out of memory\n") ); return 1; } #ifdef ENABLE_BSDL /* perform a test read to check for BSDL syntax */ if (bsdl_read_file( chain, path, BSDL_MODE_INCLUDE1, NULL ) >= 0) { /* it seems to be a proper BSDL file, so re-read and execute */ go = bsdl_read_file( chain, path, BSDL_MODE_INCLUDE2, NULL ); free( path ); return 1; } #endif if (cmd_params( params ) > 2) { sscanf(params[2],"%d",&j); /* loop n times option */ } for(i = 0; i < j ;i++) { go = jtag_parse_file( chain, path ); if (go < 0) { if (go != -99) printf( _("Unable to open file `%s go=%d'!\n"), path, go ); break; } } free( path ); return go ? 1 : 0; }
int main( int argc, char *const argv[] ) { int go = 0; int i; int c; int norc = 0; int help = 0; int version = 0; int quiet = 0; chain_t *chain = NULL; jtag_argv0 = argv[0]; if(geteuid()==0 && getuid()!=0) { printf (_("'%s' must not be run suid root!\n"), "jtag"); return(-1); } #ifdef ENABLE_NLS /* l10n support */ setlocale( LC_ALL, "" ); bindtextdomain( PACKAGE, LOCALEDIR ); textdomain( PACKAGE ); #endif /* ENABLE_NLS */ while (1) { static struct option long_options[] = { {"version", no_argument, 0, 'v'}, {"norc", no_argument, 0, 'n'}, {"interactive", no_argument, 0, 'i'}, {"help", no_argument, 0, 'h'}, {"quiet", no_argument, 0, 'q'}, {0, 0, 0, 0} }; /* `getopt_long' stores the option index here. */ int option_index = 0; c = getopt_long (argc, argv, "vnhiq", long_options, &option_index); /* Detect the end of the options. */ if (c == -1) break; switch (c) { case 'v': version = 1; break; case 'n': norc = 1; break; case 'i': interactive = 1; break; case 'h': default: help = 1; break; case 'q': quiet = 1; break; } } if (help) { /* Print help info and exit. */ printf (_("%s #%s\n"), PACKAGE_STRING, SVN_REVISION); printf ("\n"); printf (_("Usage: %s [OPTIONS] [FILE [FILE ... ]] \n"), "jtag"); printf ("\n"); printf (_(" -h, --help display this help and exit\n")); printf (_(" -v, --version display version information and exit\n")); printf ("\n"); printf (_(" -n, --norc disable reading ~/.jtag/rc on startup\n")); printf (_(" -i, --interactive enter interactive mode after reading files\n")); printf (_(" -q, --quiet Do not print help on startup\n")); printf ("\n"); printf (_(" [FILE] file containing commands to execute\n")); printf ("\n"); printf (_(" Please report bugs at http://www.urjtag.org\n")); exit(0); } if (version) { printf(_("\n%s #%s\n\n" "Copyright (C) 2002, 2003 ETC s.r.o.\n" "Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors\n" ), PACKAGE_STRING, SVN_REVISION); printf(_("\n" "This program is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with this program; if not, write to the Free Software\n" "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n")); exit(0); } /* input from files */ if (argc > optind) { for (i = optind; i < argc; i++) { chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } go = jtag_parse_file( chain, argv[i] ); cleanup( chain ); if (go < 0) { printf( _("Unable to open file `%s'!\n"), argv[i] ); break; } } if(!interactive) return 0; } /* input from stdin */ if (!isatty(0)) { chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } jtag_parse_stream( chain, stdin ); cleanup( chain ); return 0; } /* interactive */ if (!quiet) printf( _("\n%s #%s\n" "Copyright (C) 2002, 2003 ETC s.r.o.\n" "Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors\n\n" "%s is free software, covered by the GNU General Public License, and you are\n" "welcome to change it and/or distribute copies of it under certain conditions.\n" "There is absolutely no warranty for %s.\n\n"), PACKAGE_STRING, SVN_REVISION, PACKAGE_NAME, PACKAGE_NAME ); chain = chain_alloc(); if (!chain) { printf( _("Out of memory\n") ); return -1; } if (!quiet) { printf( _("WARNING: %s may damage your hardware!\n"), PACKAGE_NAME ); printf( _("Type \"quit\" to exit, \"help\" for help.\n\n") ); } /* Create ~/.jtag */ jtag_create_jtagdir(); /* Parse and execute the RC file */ go = norc ? 1 : jtag_parse_rc( chain ); #ifdef HAVE_LIBREADLINE #ifdef HAVE_READLINE_COMPLETION rl_attempted_completion_function = cmd_completion; #endif #endif if (go) { #ifdef HAVE_READLINE_HISTORY /* Load history */ jtag_load_history(); #endif /* main loop */ jtag_readline_loop( chain, getenv("JTAG_PROMPT") ? : "jtag> " ); #ifdef HAVE_READLINE_HISTORY /* Save history */ jtag_save_history(); #endif } cleanup( chain ); return 0; }