Files
rtems/tools/schedsim/shell/schedsim_priority/schedsim.cc
Joel Sherrill abff6d226a 2010-12-17 Joel Sherrill <joel.sherrill@oarcorp.com>
Jennifer Averett <jennifer.averett@oarcorp.com>

	Add RTEMS Scheduler Simulator.  This is the shell scripting portion.
	* .cvsignore, ChangeLog, Makefile.am, schedsim_priority/.cvsignore,
	schedsim_priority/Makefile.am, schedsim_priority/config.c,
	schedsim_priority/printheir_executing.c,
	schedsim_priority/schedsim.cc,
	schedsim_priority/wrap_thread_dispatch.c, scripts/script01,
	scripts/script02, scripts/script03, scripts/script04,
	scripts/script05, scripts/script06, shared/.cvsignore,
	shared/Makefile.am, shared/commands.c, shared/getopt.c,
	shared/lookup_semaphore.c, shared/lookup_task.c,
	shared/main_clocktick.c, shared/main_echo.c, shared/main_executing.c,
	shared/main_heir.c, shared/main_help.c, shared/main_rtemsinit.c,
	shared/main_semcreate.c, shared/main_semdelete.c,
	shared/main_semflush.c, shared/main_semobtain.c,
	shared/main_semrelease.c, shared/main_taskcreate.c,
	shared/main_taskdelete.c, shared/main_taskmode.c,
	shared/main_taskpriority.c, shared/main_taskresume.c,
	shared/main_tasksuspend.c, shared/main_taskwakeafter.c,
	shared/schedsim_shell.h, shared/shell_cmdset.c,
	shared/shell_makeargs.c, shared/include/shell.h,
	shared/include/newlib/_ansi.h, shared/include/newlib/getopt.h: New
	files.
2010-12-17 14:49:40 +00:00

170 lines
3.0 KiB
C++

/*
* COPYRIGHT (c) 1989-2010.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#include <newlib/getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "shell.h"
#include "rtems_sched.h"
/*
* Variables to control global behavior
*/
int verbose = 0;
const char *progname;
const char *scriptname;
FILE *Script;
int ScriptFileLine = 0;
/*
* Print program usage message
*/
void usage()
{
fprintf(
stderr,
"Usage: %s [-v] script\n"
"\n"
" -v - enable verbose output\n",
progname
);
exit( -1 );
}
#define RTEMS_SHELL_MAXIMUM_ARGUMENTS (128)
void ProcessScript(
FILE *script
)
{
char buffer[512];
char *cStatus;
char *c;
size_t length;
int argc;
char *argv[RTEMS_SHELL_MAXIMUM_ARGUMENTS];
rtems_shell_cmd_t *shell_cmd;
while ( 1 ) {
cStatus = fgets( buffer, sizeof(buffer), script );
if ( cStatus == NULL )
break;
// If the last line does not have a CR, then we don't want to
// arbitrarily clobber an = instead of a \n.
length = strlen(buffer);
if ( buffer[ length - 1] == '\n' )
buffer[ length - 1] = '\0';
if ( verbose )
fprintf( stderr, "%d: %s\n", ++ScriptFileLine, buffer );
if ( buffer[0] == '#' )
continue;
for ( c = buffer ; *c ; c++ ) {
if (!isblank((int)*c))
break;
}
if (!strcmp(c,"bye") || !strcmp(c,"exit")) {
return;
}
if (rtems_shell_make_args(c, &argc, argv, RTEMS_SHELL_MAXIMUM_ARGUMENTS)) {
fprintf(stderr, "Error parsing arguments\n" );
continue;
}
shell_cmd = rtems_shell_lookup_cmd(argv[0]);
if ( !shell_cmd ) {
fprintf(stderr, "%s is unknown command\n", c );
continue;
}
shell_cmd->command(argc, argv);
}
}
int main(
int argc,
char **argv
)
{
int opt;
progname = argv[0];
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v': verbose = 1; break;
default: /* '?' */
usage();
}
}
if ( optind >= argc ) {
fprintf( stderr, "no script to process\n" );
usage();
}
scriptname = argv[ optind ];
if ( verbose ) {
fprintf(
stderr,
"Script File : %s\n"
"verbose : %d\n",
scriptname,
verbose
);
}
//
// Initialize the command interpreter
//
rtems_shell_initialize_command_set();
//
// Open the script file
//
Script = fopen( scriptname, "r" );
if ( !Script ) {
fprintf( stderr, "Unable to open script file (%s)\n", scriptname );
exit( -1 );
}
//
// Process the Script
//
ProcessScript( Script );
//
// Open the script file
//
(void) fclose( Script );
//
// Just in case something throws
//
try {
} catch (...) {
exit(-1);
}
return 0;
}