source: rtems-schedsim/schedsim/shell/shared/schedsim.c @ 01cb6c9

Last change on this file since 01cb6c9 was 01cb6c9, checked in by Joel Sherrill <joel.sherrill@…>, on May 27, 2014 at 2:06:47 PM

schedsim.c: Print basename of scenarion and verbose is on by default

  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2013.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.com/license/LICENSE.
8 */
9
10#include <newlib/getopt.h>
11#include <stdio.h>
12#include <stdlib.h>
13#include <string.h>
14#include <ctype.h>
15
16#include "shell.h"
17#include "rtems_sched.h"
18#include "schedsim_shell.h"
19
20/*
21 *  Variables to control global behavior
22 */
23int verbose = 1;
24const char *progname;
25const char *scriptname;
26
27FILE *Script;
28int ScriptFileLine = 0;
29
30/*
31 *  Print program usage message
32 */
33void usage()
34{
35  fprintf(
36    stderr,
37    "Usage: %s [-v] script\n"
38    "\n"
39    "  -v           - enable verbose output\n",
40    progname
41  );
42  exit( -1 );
43}
44
45#define RTEMS_SHELL_MAXIMUM_ARGUMENTS (128)
46
47int ProcessScript(
48  FILE *script
49)
50{
51  char               buffer[512];
52  int                sc;
53  char              *cStatus;
54  char              *c;
55  size_t             length;
56  int                argc;
57  char              *argv[RTEMS_SHELL_MAXIMUM_ARGUMENTS];
58  rtems_shell_cmd_t *shell_cmd;
59 
60  while ( 1 ) {
61    cStatus = fgets( buffer, sizeof(buffer), script );
62    if ( cStatus == NULL )
63      break;
64    // If the last line does not have a CR, then we don't want to
65    // arbitrarily clobber an = instead of a \n.
66    length = strlen(buffer);
67    if ( buffer[ length - 1] == '\n' )
68      buffer[ length - 1] = '\0';
69
70    if ( verbose )
71      printf( "==> %d: %s\n", ++ScriptFileLine, buffer );
72
73    if ( buffer[0] == '#' )
74      continue;
75
76    for ( c = buffer ; *c ; c++ ) {
77      if (!isblank((int)*c))
78        break;
79    }
80
81    if (!strcmp(c,"bye") || !strcmp(c,"exit")) {
82      exit( 0 );
83    } 
84
85    if (rtems_shell_make_args(c, &argc, argv, RTEMS_SHELL_MAXIMUM_ARGUMENTS)) {
86      fprintf(stderr, "Error parsing arguments\n" );
87      continue;
88    }
89
90    if ( argc == 0 )
91      continue;
92
93    shell_cmd = rtems_shell_lookup_cmd(argv[0]);
94    if ( !shell_cmd ) {
95      fprintf(stderr, "%s is unknown command\n", c );
96      exit( 1 );
97    }
98
99    sc = shell_cmd->command(argc, argv);
100    if ( sc != 0 ) {
101      fprintf( stderr, "ERROR: Command %s returned %d\n", argv[0], sc );
102      exit( sc );
103    }
104  }
105}
106
107int main(
108  int argc,
109  char **argv
110)
111{
112  int         sc; 
113  int         opt;
114  const char *short_p;
115
116  progname = argv[0];
117 
118  while ((opt = getopt(argc, argv, "v")) != -1) {
119    switch (opt) {
120      case 'v': verbose = 0;  break;
121      default: /* '?' */
122        usage();
123    }
124  }
125
126  if ( optind >= argc ) {
127    scriptname = "-"; 
128  } else {
129    scriptname = argv[ optind ];
130  }
131
132  if ( !strcmp( scriptname, "-" ) ) {
133    scriptname = "/dev/stdin";
134    short_p    = scriptname;
135  } else {
136    size_t  slen;
137
138    slen = strlen( scriptname );  /* Should not trust input but what's max? */
139    for ( ; slen > 0 ; slen-- ) {
140      if ( scriptname[slen] == '/' ) {
141        slen++;
142        break;
143      }
144    }
145    short_p = &scriptname[ slen ];
146  }
147
148  if ( verbose ) {
149    printf(
150      "Script File               : %s\n"
151      "verbose                   : %d\n",
152      short_p,
153      verbose
154    );
155  }
156
157  //
158  //  Initialize the command interpreter
159  //
160  rtems_shell_initialize_command_set();
161  add_commands();
162
163  //
164  //  Open the script file
165  //
166  Script = fopen( scriptname, "r" );
167  if ( !Script ) {
168    fprintf( stderr, "Unable to open script file (%s)\n", scriptname );
169    exit( -1 );
170  }
171
172  //
173  //  Process the Script
174  //
175  sc = ProcessScript( Script );
176
177  //
178  //  Open the script file
179  //
180  (void) fclose( Script );
181
182  return sc;
183}
Note: See TracBrowser for help on using the repository browser.