Changeset e41eaa88 in rtems


Ignore:
Timestamp:
Dec 18, 2008, 3:25:27 PM (10 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, master
Children:
8fbb48a
Parents:
1fae1c6b
Message:

2008-12-18 Sebastian Huber <sebastian.huber@…>

  • libmisc/serdbg/termios_printk.c, libmisc/serdbg/termios_printk.h: Fixed incompatible return value.
  • libmisc/cpuuse/cpuusagereport.c: Changed output format.
  • libmisc/Makefile.am, libmisc/monitor/mon-editor.c: New file.
  • libmisc/capture/capture-cli.c, libmisc/monitor/mon-command.c, libmisc/monitor/mon-monitor.c, libmisc/monitor/mon-object.c, libmisc/monitor/mon-prmisc.c, libmisc/monitor/mon-symbols.c, libmisc/monitor/monitor.h, libmisc/shell/cat_file.c, libmisc/shell/cmds.c, libmisc/shell/internal.h, libmisc/shell/main_help.c, libmisc/shell/shell.c, libmisc/shell/shell.h, libmisc/shell/shell_cmdset.c, libmisc/shell/shell_getchar.c, libmisc/shell/str2int.c: Various global data is now read only. Added 'const' qualifier to many pointer parameters. It is no longer possible to remove monitor commands. Moved monitor line editor into a separate file to avoid unnecessary dependencies.
Location:
cpukit
Files:
1 added
21 edited

Legend:

Unmodified
Added
Removed
  • cpukit/ChangeLog

    r1fae1c6b re41eaa88  
     12008-12-18      Sebastian Huber <sebastian.huber@embedded-brains.de>
     2
     3        * libmisc/serdbg/termios_printk.c, libmisc/serdbg/termios_printk.h:
     4        Fixed incompatible return value.
     5
     6        * libmisc/cpuuse/cpuusagereport.c: Changed output format.
     7
     8        * libmisc/Makefile.am, libmisc/monitor/mon-editor.c: New file.
     9
     10        * libmisc/capture/capture-cli.c, libmisc/monitor/mon-command.c,
     11        libmisc/monitor/mon-monitor.c, libmisc/monitor/mon-object.c,
     12        libmisc/monitor/mon-prmisc.c, libmisc/monitor/mon-symbols.c,
     13        libmisc/monitor/monitor.h, libmisc/shell/cat_file.c,
     14        libmisc/shell/cmds.c, libmisc/shell/internal.h,
     15        libmisc/shell/main_help.c, libmisc/shell/shell.c,
     16        libmisc/shell/shell.h, libmisc/shell/shell_cmdset.c,
     17        libmisc/shell/shell_getchar.c, libmisc/shell/str2int.c: Various global
     18        data is now read only.  Added 'const' qualifier to many pointer
     19        parameters.  It is no longer possible to remove monitor commands.
     20        Moved monitor line editor into a separate file to avoid unnecessary
     21        dependencies.
     22
    1232008-12-17      Joel Sherrill <joel.sherrill@oarcorp.com>
    224
  • cpukit/libmisc/Makefile.am

    r1fae1c6b re41eaa88  
    4545    monitor/mon-driver.c monitor/mon-itask.c monitor/mon-extension.c \
    4646    monitor/mon-manager.c monitor/mon-config.c monitor/mon-part.c \
    47     monitor/mon-region.c monitor/mon-sema.c monitor/symbols.h \
    48     monitor/monitor.h
     47    monitor/mon-region.c monitor/mon-sema.c monitor/mon-editor.c \
     48    monitor/symbols.h monitor/monitor.h
    4949if LIBNETWORKING
    5050libmonitor_a_SOURCES += monitor/mon-network.c
  • cpukit/libmisc/capture/capture-cli.c

    r1fae1c6b re41eaa88  
    6666rtems_capture_cli_open (int                          argc,
    6767                        char**                       argv,
    68                         rtems_monitor_command_arg_t* command_arg,
     68                        const rtems_monitor_command_arg_t* command_arg,
    6969                        bool                         verbose)
    7070{
     
    137137rtems_capture_cli_close (int                          argc,
    138138                         char**                       argv,
    139                          rtems_monitor_command_arg_t* command_arg,
     139                         const rtems_monitor_command_arg_t* command_arg,
    140140                         bool                         verbose)
    141141{
     
    165165rtems_capture_cli_enable (int                          argc,
    166166                          char**                       argv,
    167                           rtems_monitor_command_arg_t* command_arg,
     167                          const rtems_monitor_command_arg_t* command_arg,
    168168                          bool                         verbose)
    169169{
     
    193193rtems_capture_cli_disable (int                          argc,
    194194                           char**                       argv,
    195                            rtems_monitor_command_arg_t* command_arg,
     195                           const rtems_monitor_command_arg_t* command_arg,
    196196                           bool                         verbose)
    197197{
     
    221221rtems_capture_cli_task_list (int                          argc,
    222222                             char**                       argv,
    223                              rtems_monitor_command_arg_t* command_arg,
     223                             const rtems_monitor_command_arg_t* command_arg,
    224224                             bool                         verbose)
    225225{
     
    460460rtems_capture_cli_task_load (int                          argc,
    461461                             char**                       argv,
    462                              rtems_monitor_command_arg_t* command_arg,
     462                             const rtems_monitor_command_arg_t* command_arg,
    463463                             bool                         verbose)
    464464{
     
    533533rtems_capture_cli_watch_list (int                          argc,
    534534                              char**                       argv,
    535                               rtems_monitor_command_arg_t* command_arg,
     535                              const rtems_monitor_command_arg_t* command_arg,
    536536                              bool                         verbose)
    537537{
     
    685685rtems_capture_cli_watch_add (int                          argc,
    686686                             char**                       argv,
    687                              rtems_monitor_command_arg_t* command_arg,
     687                             const rtems_monitor_command_arg_t* command_arg,
    688688                             bool                         verbose)
    689689{
     
    748748rtems_capture_cli_watch_del (int                          argc,
    749749                             char**                       argv,
    750                              rtems_monitor_command_arg_t* command_arg,
     750                             const rtems_monitor_command_arg_t* command_arg,
    751751                             bool                         verbose)
    752752{
     
    810810rtems_capture_cli_watch_control (int                          argc,
    811811                                 char**                       argv,
    812                                  rtems_monitor_command_arg_t* command_arg,
     812                                 const rtems_monitor_command_arg_t* command_arg,
    813813                                 bool                         verbose)
    814814{
     
    877877rtems_capture_cli_watch_global (int                          argc,
    878878                                char**                       argv,
    879                                 rtems_monitor_command_arg_t* command_arg,
     879                                const rtems_monitor_command_arg_t* command_arg,
    880880                                bool                         verbose)
    881881{
     
    931931rtems_capture_cli_watch_ceiling (int                          argc,
    932932                                 char**                       argv,
    933                                  rtems_monitor_command_arg_t* command_arg,
     933                                 const rtems_monitor_command_arg_t* command_arg,
    934934                                 bool                         verbose)
    935935{
     
    982982rtems_capture_cli_watch_floor (int                          argc,
    983983                               char**                       argv,
    984                                rtems_monitor_command_arg_t* command_arg,
     984                               const rtems_monitor_command_arg_t* command_arg,
    985985                               bool                         verbose)
    986986{
     
    12601260rtems_capture_cli_trigger_set (int                          argc,
    12611261                               char**                       argv,
    1262                                rtems_monitor_command_arg_t* command_arg,
     1262                               const rtems_monitor_command_arg_t* command_arg,
    12631263                               bool                         verbose)
    12641264{
     
    12781278rtems_capture_cli_trigger_clear (int                          argc,
    12791279                                 char**                       argv,
    1280                                  rtems_monitor_command_arg_t* command_arg,
     1280                                 const rtems_monitor_command_arg_t* command_arg,
    12811281                                 bool                         verbose)
    12821282{
     
    12961296rtems_capture_cli_trace_records (int                          argc,
    12971297                                 char**                       argv,
    1298                                  rtems_monitor_command_arg_t* command_arg,
     1298                                 const rtems_monitor_command_arg_t* command_arg,
    12991299                                 bool                         verbose)
    13001300{
     
    14271427rtems_capture_cli_flush (int                          argc,
    14281428                         char**                       argv,
    1429                          rtems_monitor_command_arg_t* command_arg,
     1429                         const rtems_monitor_command_arg_t* command_arg,
    14301430                         bool                         verbose)
    14311431{
  • cpukit/libmisc/cpuuse/cpuusagereport.c

    r1fae1c6b re41eaa88  
    8787  #endif
    8888 
    89   (*print)( context, "CPU Usage by thread\n"
    90   #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS)
    91      "   ID            NAME         SECONDS   PERCENT\n"
    92   #else
    93      "   ID            NAME         TICKS   PERCENT\n"
    94   #endif
     89  (*print)(
     90     context,
     91     "-------------------------------------------------------------------------------\n"
     92     "                              CPU USAGE BY THREAD\n"
     93     "------------+----------------------------------------+---------------+---------\n"
     94     #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS)
     95       " ID         | NAME                                   | SECONDS       | PERCENT\n"
     96     #else
     97       " ID         | NAME                                   | TICKS         | PERCENT\n"
     98     #endif
     99     "------------+----------------------------------------+---------------+---------\n"
    95100  );
    96101
     
    112117        (*print)(
    113118          context,
    114           "0x%08" PRIx32 "   %-12s   ",
     119          " 0x%08" PRIx32 " | %-38s |",
    115120          the_thread->Object.id,
    116121          name
     
    137142
    138143          (*print)( context,
    139             "%3" PRId32 ".%06" PRId32 "  %3" PRId32 ".%03" PRId32 "\n",
     144            "%7" PRIu32 ".%06" PRIu32 " |%4" PRIu32 ".%03" PRIu32 "\n",
    140145            _Timestamp_Get_seconds( &ran ),
    141146            _Timestamp_Get_nanoseconds( &ran ) /
     
    146151          ival = (total_units) ?
    147152                   the_thread->cpu_time_used * 10000 / total_units : 0;
    148           fval = ival % 100;
    149           ival /= 100;
     153          fval = ival % 1000;
     154          ival /= 1000;
    150155          (*print)( context,
    151             "%8" PRId32 "  %3" PRId32 ".%02" PRId32"\n",
     156            "%14" PRIu32 " |%4" PRIu32 ".%03" PRIu32 "\n",
    152157            the_thread->cpu_time_used,
    153158            ival,
     
    160165
    161166  #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS
    162     (*print)( context, "Time since last CPU Usage reset %" PRId32
    163             ".%06" PRId32 " seconds\n",
     167    (*print)(
     168       context,
     169       "------------+----------------------------------------+---------------+---------\n"
     170       " TIME SINCE LAST CPU USAGE RESET IN SECONDS:                    %7" PRIu32 ".%06" PRIu32 "\n"
     171       "-------------------------------------------------------------------------------\n",
    164172       _Timestamp_Get_seconds( &total ),
    165173       _Timestamp_Get_nanoseconds( &total ) / TOD_NANOSECONDS_PER_MICROSECOND
    166174    );
    167175  #else
    168     (*print)( context,
    169       "Ticks since last reset = %" PRId32 "\n",
    170       _Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset
     176    (*print)(
     177       context,
     178       "------------+----------------------------------------+---------------+---------\n"
     179       " TICKS SINCE LAST SYSTEM RESET:                                 %14" PRIu32 "\n"
     180       " TOTAL UNITS:                                                   %14" PRIu32 "\n"
     181       "-------------------------------------------------------------------------------\n",
     182       _Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset,
     183       total_units
    171184    );
    172     (*print)( context, "Total Units = %" PRId32 "\n", total_units );
    173185  #endif
    174186}
  • cpukit/libmisc/monitor/mon-command.c

    r1fae1c6b re41eaa88  
     1/**
     2 * @file
     3 *
     4 * @brief Command support routines for RTEMS monitor.
     5 */
     6
    17/*
    2  * Command parsing routines for RTEMS monitor
    3  *
    4  * TODO:
    5  *
    6  *  $Id$
    7  */
    8 
    9 #ifdef HAVE_CONFIG_H
    10 #include "config.h"
    11 #endif
    12 
    13 #include <rtems.h>
    14 
    15 #include <rtems/monitor.h>
    16 
    17 #include <stdio.h>
    18 #include <string.h>
    19 #include <stdlib.h>
    20 #include <inttypes.h>
    21 
    22 #ifndef MONITOR_PROMPT
    23 #define MONITOR_PROMPT "rtems"          /* will have '> ' appended */
    24 #endif
    25 
    26 /*
     8 * $Id$
     9 *
    2710 * 2001-01-30 KJO (vac4050@cae597.rsc.raytheon.com):
    2811 *  Fixed rtems_monitor_command_lookup() to accept partial
     
    3619 */
    3720
     21#include <string.h>
     22#include <stdio.h>
     23
     24#include <rtems.h>
     25#include <rtems/monitor.h>
     26
    3827/*
    39  * Some key labels to define special keys.
     28 * Look up a command in a command table
     29 *
    4030 */
    4131
    42 #define KEYS_EXTENDED    (0x8000)
    43 #define KEYS_NORMAL_MASK (0x00ff)
    44 #define KEYS_INS         (0)
    45 #define KEYS_DEL         (1)
    46 #define KEYS_UARROW      (2)
    47 #define KEYS_DARROW      (3)
    48 #define KEYS_LARROW      (4)
    49 #define KEYS_RARROW      (5)
    50 #define KEYS_HOME        (6)
    51 #define KEYS_END         (7)
    52 #define KEYS_F1          (8)
    53 #define KEYS_F2          (9)
    54 #define KEYS_F3          (10)
    55 #define KEYS_F4          (11)
    56 #define KEYS_F5          (12)
    57 #define KEYS_F6          (13)
    58 #define KEYS_F7          (14)
    59 #define KEYS_F8          (15)
    60 #define KEYS_F9          (16)
    61 #define KEYS_F10         (17)
    62 
    63 #define RTEMS_COMMAND_BUFFER_SIZE (75)
    64 
    65 static char monitor_prompt[32];
    66 #ifndef RTEMS_UNIX
    67 static char buffer[RTEMS_COMMAND_BUFFER_SIZE];
    68 static int  pos;
    69 static int  logged_in;
    70 #endif
    71 /*
    72  * History data.
    73  */
    74 
    75 #define RTEMS_COMMAND_HISTORIES (20)
    76 
    77 #ifndef RTEMS_UNIX
    78 static char history_buffer[RTEMS_COMMAND_HISTORIES][RTEMS_COMMAND_BUFFER_SIZE];
    79 static int  history_pos[RTEMS_COMMAND_HISTORIES];
    80 static int  history;
    81 static int  history_next;
    82 #endif
    83 
    84 /*
    85  * Translation tables. Not sure if this is the best way to
    86  * handle this, how-ever I wish to avoid the overhead of
    87  * including a more complete and standard environment such
    88  * as ncurses.
    89  */
    90 
    91 struct translation_table
    92 {
    93   char                     expecting;
    94   struct translation_table *branch;
    95   unsigned int             key;
    96 };
    97 
    98 #ifndef RTEMS_UNIX
    99 static struct translation_table trans_two[] =
    100 {
    101   { '~', 0, KEYS_INS },
    102   { 0,   0, 0 }
    103 };
    104 
    105 static struct translation_table trans_three[] =
    106 {
    107   { '~', 0, KEYS_DEL },
    108   { 0,   0, 0 }
    109 };
    110 
    111 static struct translation_table trans_tab_csi[] =
    112 {
    113   { '2', trans_two,   0 },
    114   { '3', trans_three, 0 },
    115   { 'A', 0,           KEYS_UARROW },
    116   { 'B', 0,           KEYS_DARROW },
    117   { 'D', 0,           KEYS_LARROW },
    118   { 'C', 0,           KEYS_RARROW },
    119   { 'F', 0,           KEYS_END },
    120   { 'H', 0,           KEYS_HOME },
    121   { 0,   0,           0 }
    122 };
    123 
    124 static struct translation_table trans_tab_O[] =
    125 {
    126   { '1', 0, KEYS_F1 },
    127   { '2', 0, KEYS_F2 },
    128   { '3', 0, KEYS_F3 },
    129   { '4', 0, KEYS_F4 },
    130   { '5', 0, KEYS_F5 },
    131   { '6', 0, KEYS_F6 },
    132   { '7', 0, KEYS_F7 },
    133   { '8', 0, KEYS_F8 },
    134   { '9', 0, KEYS_F9 },
    135   { ':', 0, KEYS_F10 },
    136   { 'P', 0, KEYS_F1 },
    137   { 'Q', 0, KEYS_F2 },
    138   { 'R', 0, KEYS_F3 },
    139   { 'S', 0, KEYS_F4 },
    140   { 'T', 0, KEYS_F5 },
    141   { 'U', 0, KEYS_F6 },
    142   { 'V', 0, KEYS_F7 },
    143   { 'W', 0, KEYS_F8 },
    144   { 'X', 0, KEYS_F9 },
    145   { 'Y', 0, KEYS_F10 },
    146   { 0,   0, 0 }
    147 };
    148 
    149 static struct translation_table trans_tab[] =
    150 {
    151   { '[', trans_tab_csi, 0 },    /* CSI command sequences */
    152   { 'O', trans_tab_O,   0 },    /* O are the fuction keys */
    153   { 0,   0,             0 }
    154 };
    155 #endif
    156 
    157 /*
    158  * Perform a basic translation for some ANSI/VT100 key codes.
    159  * This code could do with a timeout on the ESC as it is
    160  * now lost from the input stream. It is not* used by the
    161  * line editor below so considiered not worth the effort.
    162  */
    163 
    164 #ifndef RTEMS_UNIX
    165 static unsigned int
    166 rtems_monitor_getchar (void)
    167 {
    168   struct translation_table *translation = 0;
    169   for (;;)
    170   {
    171     char c = getchar ();
    172     if (c == 27)
    173       translation = trans_tab;
    174     else
    175     {
    176       /*
    177        * If no translation happing just pass through
    178        * and return the key.
    179        */
    180       if (translation)
    181       {
    182         /*
    183          * Scan the current table for the key, and if found
    184          * see if this key is a fork. If so follow it and
    185          * wait else return the extended key.
    186          */
    187         int index    = 0;
    188         int branched = 0;
    189         while ((translation[index].expecting != '\0') ||
    190                (translation[index].key != '\0'))
    191         {
    192           if (translation[index].expecting == c)
    193           {
    194             /*
    195              * A branch is take if more keys are to come.
    196              */
    197             if (translation[index].branch == 0)
    198               return KEYS_EXTENDED | translation[index].key;
    199             else
    200             {
    201               translation = translation[index].branch;
    202               branched    = 1;
    203               break;
    204             }
    205           }
    206           index++;
    207         }
    208         /*
    209          * Who knows what these keys are, just drop them.
    210          */
    211         if (!branched)
    212           translation = 0;
    213       }
    214       else
    215         return c;
    216     }
    217   }
    218 }
    219 #endif
    220 
    221 #ifndef RTEMS_UNIX
    222 /*
    223  * The line editor with history.
    224  */
    225 
    226 static int
    227 rtems_monitor_line_editor (
    228     char *command
    229 )
    230 {
    231   int repeating = 0;
    232 
    233   memset (buffer, 0, RTEMS_COMMAND_BUFFER_SIZE);
    234   history = history_next;
    235   pos     = 0;
    236 
    237   if (!logged_in)
    238     fprintf(stdout,"\nMonitor ready, press enter to login.\n\n");
    239   else
    240     fprintf(stdout,"%s $ ", monitor_prompt);
    241 
    242   while (1)
    243   {
    244     unsigned int extended_key;
    245     char         c;
    246 
    247     fflush (stdout);
    248 
    249     extended_key = rtems_monitor_getchar ();
    250     c = extended_key & KEYS_NORMAL_MASK;
    251    
    252     /*
    253      * Make the extended_key usable as a boolean.
    254      */
    255     extended_key &= ~KEYS_NORMAL_MASK;
    256 
    257     if (!extended_key && !logged_in)
    258     {
    259       if (c == '\n')
    260       {
    261         logged_in = 1;
    262         /*
    263          * The prompt has changed from `>' to `$' to help know
    264          * which version of the monitor code people are using.
    265          */
    266         fprintf(stdout,"%s $ ", monitor_prompt);
    267       }
    268     }
    269     else
    270     {
    271       if (extended_key)
    272       {
    273         switch (c)
    274         {
    275           case KEYS_END:
    276             fprintf(stdout,buffer + pos);
    277             pos = (int) strlen (buffer);
    278             break;
    279 
    280           case KEYS_HOME:
    281             fprintf(stdout,"\r%s $ ", monitor_prompt);
    282             pos = 0;
    283             break;
    284 
    285           case KEYS_LARROW:
    286             if (pos > 0)
    287             {
    288               pos--;
    289               putchar ('\b');
    290             }
    291             break;
    292 
    293           case KEYS_RARROW:
    294             if ((pos < RTEMS_COMMAND_BUFFER_SIZE) && (buffer[pos] != '\0'))
    295             {
    296               putchar (buffer[pos]);
    297               pos++;
    298             }
    299             break;
    300 
    301           case KEYS_UARROW:
    302             /*
    303              * If we are moving up the histories then we need to save the working
    304              * buffer.
    305              */
    306             if (history)
    307             {
    308               int end;
    309               int bs;
    310               if (history == history_next)
    311               {
    312                 memcpy (history_buffer[history_next], buffer,
    313                         RTEMS_COMMAND_BUFFER_SIZE);
    314                 history_pos[history_next] = pos;
    315               }
    316               history--;
    317               memcpy (buffer, history_buffer[history],
    318                       RTEMS_COMMAND_BUFFER_SIZE);
    319               pos = history_pos[history];
    320               fprintf(stdout,"\r%*c", RTEMS_COMMAND_BUFFER_SIZE, ' ');
    321               fprintf(stdout,"\r%s $ %s", monitor_prompt, buffer);
    322               end = (int) strlen (buffer);
    323               for (bs = 0; bs < (end - pos); bs++)
    324                 putchar ('\b');
    325             }
    326             break;
    327 
    328           case KEYS_DARROW:
    329             if (history < history_next)
    330             {
    331               int end;
    332               int bs;
    333               history++;
    334               memcpy (buffer, history_buffer[history],
    335                       RTEMS_COMMAND_BUFFER_SIZE);
    336               pos = history_pos[history];
    337               fprintf(stdout,"\r%*c", RTEMS_COMMAND_BUFFER_SIZE, ' ');
    338               fprintf(stdout,"\r%s $ %s", monitor_prompt, buffer);
    339               end = (int) strlen (buffer);
    340               for (bs = 0; bs < (end - pos); bs++)
    341                 putchar ('\b');
    342             }
    343             break;
    344 
    345           case KEYS_DEL:
    346             if (buffer[pos] != '\0')
    347             {
    348               int end;
    349               int bs;
    350               strcpy (&buffer[pos], &buffer[pos + 1]);
    351               fprintf(stdout,"\r%s $ %s", monitor_prompt, buffer);
    352               end = (int) strlen (buffer);
    353               for (bs = 0; bs < (end - pos); bs++)
    354                 putchar ('\b');
    355             }
    356             break;
    357         }
    358       }
    359       else
    360       {
    361         switch (c)
    362         {
    363           case '\b':
    364           case '\x7e':
    365           case '\x7f':
    366             if (pos > 0)
    367             {
    368               int bs;
    369               pos--;
    370               strcpy (buffer + pos, buffer + pos + 1);
    371               fprintf(stdout,"\b%s \b", buffer + pos);
    372               for (bs = 0; bs < ((int) strlen (buffer) - pos); bs++)
    373                 putchar ('\b');
    374             }
    375             break;
    376 
    377           case '\n':
    378             /*
    379              * Process the command.
    380              */
    381             fprintf(stdout,"\n");
    382             repeating = 1;
    383             /*
    384              * Only process the history if we have a command and
    385              *a history.
    386              */
    387             if (strlen (buffer))
    388             {
    389               if (history_next && (history == history_next))
    390               {
    391                 /*
    392                  * Do not place the last command into the history
    393                  *if the same.
    394                  */
    395                 if (strcmp (history_buffer[history_next - 1], buffer))
    396                   repeating = 0;
    397               }
    398               else
    399                 repeating = 0;
    400             }
    401             if (!repeating)
    402             {
    403               memcpy (history_buffer[history_next], buffer,
    404                       RTEMS_COMMAND_BUFFER_SIZE);
    405               history_pos[history_next] = pos;
    406               if (history_next < (RTEMS_COMMAND_HISTORIES - 1))
    407                 history_next++;
    408               else
    409               {
    410                 memmove (history_buffer[0], history_buffer[1],
    411                          RTEMS_COMMAND_BUFFER_SIZE * (RTEMS_COMMAND_HISTORIES - 1));
    412                 memmove (&history_pos[0], &history_pos[1],
    413                          sizeof (history_pos[0]) * (RTEMS_COMMAND_HISTORIES - 1));
    414               }
    415             }
    416             else
    417             {
    418 #ifdef ENABLE_ENTER_REPEATS
    419               if (history_next)
    420                 memcpy (buffer, history_buffer[history_next - 1],
    421                         RTEMS_COMMAND_BUFFER_SIZE);
    422 #endif
    423             }
    424             memmove (command, buffer, RTEMS_COMMAND_BUFFER_SIZE);
    425             return repeating;
    426             break;
    427 
    428           default:
    429             if ((pos < (RTEMS_COMMAND_BUFFER_SIZE - 1)) &&
    430                 (c >= ' ') && (c <= 'z'))
    431             {
    432               int end;
    433               end = strlen (buffer);
    434               if ((pos < end) && (end < RTEMS_COMMAND_BUFFER_SIZE))
    435               {
    436                 int ch, bs;
    437                 for (ch = end + 1; ch > pos; ch--)
    438                   buffer[ch] = buffer[ch - 1];
    439                 fprintf(stdout,buffer + pos);
    440                 for (bs = 0; bs < (end - pos + 1); bs++)
    441                   putchar ('\b');
    442               }
    443               buffer[pos++] = c;
    444               if (pos > end)
    445                 buffer[pos] = '\0';
    446               putchar (c);
    447             }
    448             break;
     32const rtems_monitor_command_entry_t *rtems_monitor_command_lookup(
     33  const rtems_monitor_command_entry_t *table,
     34  const char *command_name
     35)
     36{
     37  const rtems_monitor_command_entry_t *found_it = NULL;
     38  size_t command_length = 0;
     39
     40  if (command_name == NULL) {
     41    return NULL;
     42  }
     43
     44  command_length = strlen(command_name);
     45
     46  while (table != NULL) {
     47    if (table->command != NULL) {
     48      /* Check for ambiguity */
     49      if (!strncmp(table->command, command_name, command_length)) {
     50        if (found_it == NULL) {
     51          found_it = table;
     52        } else {
     53          return NULL;
    44954        }
    45055      }
    45156    }
    452   }
    453 }
    454 #endif
    455 
    456 /*
    457  * make_argv(cp): token-count
    458  *  Break up the command line in 'cp' into global argv[] and argc (return
    459  *  value).
    460  */
    461 
    462 int
    463 rtems_monitor_make_argv(
    464     char *cp,
    465     int  *argc_p,
    466     char **argv)
    467 {
    468   int argc = 0;
    469 
    470   while ((cp = strtok(cp, " \t\n\r")))
    471   {
    472     argv[argc++] = cp;
    473     cp = (char *) NULL;
    474   }
    475   argv[argc] = (char *) NULL;      /* end of argv */
    476 
    477   return *argc_p = argc;
    478 }
    479 
    480 
    481 /*
    482  * Read and break up a monitor command
    483  *
    484  * We have to loop on the gets call, since it will return NULL under UNIX
    485  *  RTEMS when we get a signal (eg: SIGALRM).
    486  */
    487 
    488 int
    489 rtems_monitor_command_read(char *command,
    490                            int  *argc,
    491                            char **argv)
    492 {
    493         char *env_prompt;
    494 
    495         env_prompt = getenv("RTEMS_MONITOR_PROMPT");
    496 
    497   /*
    498    * put node number in the prompt if we are multiprocessing
    499    */
    500 #if defined(RTEMS_MULTIPROCESSING)
    501   if (!rtems_configuration_get_user_multiprocessing_table ())
    502     sprintf (monitor_prompt, "%s",
    503              (env_prompt == NULL) ? MONITOR_PROMPT: env_prompt);
    504   else /* .... */
    505 #endif
    506   if (rtems_monitor_default_node != rtems_monitor_node)
    507     sprintf (monitor_prompt, "%" PRId32 "-%s-%" PRId32 "", rtems_monitor_node,
    508              (env_prompt == NULL) ? MONITOR_PROMPT : env_prompt,
    509              rtems_monitor_default_node);
    510   else
    511     sprintf (monitor_prompt, "%" PRId32 "-%s", rtems_monitor_node,
    512              (env_prompt == NULL) ? MONITOR_PROMPT : env_prompt);
    513 
    514 #if defined(RTEMS_UNIX)
    515   /* RTEMS on unix gets so many interrupt system calls this is hosed */
    516   fprintf(stdout,"%s> ", monitor_prompt);
    517   fflush (stdout);
    518   while (gets(command) == (char *) 0)
    519     ;
    520 #else
    521   rtems_monitor_line_editor (command);
    522 #endif
    523 
    524   return rtems_monitor_make_argv (command, argc, argv);
    525 }
    526 
    527 /*
    528  * Look up a command in a command table
    529  *
    530  */
    531 
    532 rtems_monitor_command_entry_t *
    533 rtems_monitor_command_lookup(
    534     rtems_monitor_command_entry_t *table,
    535     int                            argc,
    536     char                          **argv
    537 )
    538 {
    539   int command_length;
    540   rtems_monitor_command_entry_t *found_it = NULL;
    541 
    542   command_length = strlen (argv[0]);
    543 
    544   if ((table == 0) || (argv[0] == 0))
    545     return 0;
    546 
    547   while (table)
    548   {
    549     if (table->command)
    550     {
    551 
    552       /*
    553        * Check for ambiguity
    554        */
    555       if (!strncmp (table->command, argv[0], command_length))
    556       {
    557         if (found_it)
    558         {
    559           return 0;
    560         }
    561 
    562         else
    563           found_it = table;
    564       }
    565     }
    56657    table = table->next;
    56758  }
    56859
    569   /*
    570    * No ambiguity (the possible partial command was unique after all)
    571    */
    572   if (found_it)
    573   {
    574     if (found_it->command_function == 0)
    575       return 0;
    576 
    577     return found_it;
    578   }
    579 
    580   return 0;
     60  /* No ambiguity (the possible partial command was unique after all) */
     61
     62  /* Ignore empty commands */
     63  if (found_it == NULL || found_it->command_function == NULL) {
     64    return NULL;
     65  }
     66
     67  return found_it;
    58168}
    58269
    58370static void
    58471rtems_monitor_show_help (
    585   rtems_monitor_command_entry_t *help_cmd,
     72  const rtems_monitor_command_entry_t *help_cmd,
    58673  int                           max_cmd_len
    58774)
     
    676163void
    677164rtems_monitor_command_usage(
    678   rtems_monitor_command_entry_t *table,
    679   char                          *command_string
    680 )
    681 {
    682   rtems_monitor_command_entry_t *command = table;
     165  const rtems_monitor_command_entry_t *table,
     166  const char                          *command_name
     167)
     168{
     169  const rtems_monitor_command_entry_t *command = table;
    683170  int                           max_cmd_len = 0;
    684171
    685172  /* if first entry in table is a usage, then print it out */
    686173
    687   if (command_string && (*command_string != '\0'))
    688   {
    689     char *argv[2];
    690 
    691     argv[0] = command_string;
    692     argv[1] = 0;
    693 
    694     command = rtems_monitor_command_lookup (table, 1, argv);
     174  if (command_name && (*command_name != '\0'))
     175  {
     176    command = rtems_monitor_command_lookup (table, command_name);
    695177
    696178    if (command)
    697       rtems_monitor_show_help (command, strlen (command_string));
     179      rtems_monitor_show_help (command, strlen (command_name));
    698180    else
    699181      fprintf(stdout,"Unrecognised command; try just 'help'\n");
     
    731213
    732214
    733 void
    734 rtems_monitor_help_cmd(
    735     int          argc,
    736     char       **argv,
    737     rtems_monitor_command_arg_t *command_arg,
    738     bool         verbose
     215void rtems_monitor_help_cmd(
     216  int                                argc,
     217  char                             **argv,
     218  const rtems_monitor_command_arg_t *command_arg,
     219  bool                               verbose
    739220)
    740221{
    741222  int arg;
    742   rtems_monitor_command_entry_t *command;
    743 
    744   command = command_arg->monitor_command_entry;
     223  const rtems_monitor_command_entry_t *command =
     224    command_arg->monitor_command_entry;
    745225
    746226  if (argc == 1)
  • cpukit/libmisc/monitor/mon-monitor.c

    r1fae1c6b re41eaa88  
    3232#include <string.h>
    3333#include <stdlib.h>
    34 #include <termios.h>
    35 #include <unistd.h>
    3634
    3735#include <rtems/monitor.h>
    38 
    39 #define STREQ(a,b)      (strcmp(a,b) == 0)
    4036
    4137/* set by trap handler */
     
    6258
    6359/*
    64  * User registered commands.
    65  */
    66 
    67 rtems_monitor_command_entry_t rtems_registered_commands;
    68 
    69 /*
    7060 * The top-level commands
    7161 */
    7262
    73 rtems_monitor_command_entry_t rtems_monitor_commands[] = {
     63const rtems_monitor_command_entry_t rtems_monitor_commands[] = {
    7464    { "config",
    7565      "Show the system configuration.",
     
    240230      &rtems_monitor_commands[20],
    241231    },
    242     { "help",
    243       "Provide information about commands. "
    244       "Default is show basic command summary.\n"
    245       "help [ command [ command ] ]",
    246       0,
    247       rtems_monitor_help_cmd,
    248       { .monitor_command_entry = rtems_monitor_commands },
    249       &rtems_monitor_commands[21],
    250     },
    251232#ifdef RTEMS_POSIX_API
    252233    { "pthread",
     
    257238      rtems_monitor_object_cmd,
    258239      { RTEMS_MONITOR_OBJECT_PTHREAD },
    259       &rtems_monitor_commands[22],
    260     },
     240      &rtems_monitor_commands[21],
     241    },
     242  #define RTEMS_MONITOR_DEBUGGER_NEXT 22
     243#else
     244  #define RTEMS_MONITOR_DEBUGGER_NEXT 21
    261245#endif
    262246#ifdef CPU_INVOKE_DEBUGGER
     
    267251      rtems_monitor_debugger_cmd,
    268252      { 0 },
    269       &rtems_monitor_commands[23],
     253      &rtems_monitor_commands[RTEMS_MONITOR_DEBUGGER_NEXT],
    270254    },
    271255#endif
    272     { 0, 0, 0, 0, { 0 }, &rtems_registered_commands },
     256    { "help",
     257      "Provide information about commands. "
     258      "Default is show basic command summary.\n"
     259      "help [ command [ command ] ]",
     260      0,
     261      rtems_monitor_help_cmd,
     262      { .monitor_command_entry = rtems_monitor_commands },
     263      NULL
     264    }
    273265};
     266
     267/*
     268 * All registered commands.
     269 */
     270
     271static const rtems_monitor_command_entry_t *rtems_monitor_registered_commands =
     272  &rtems_monitor_commands [0];
    274273
    275274
     
    295294}
    296295
    297 void
    298 rtems_monitor_debugger_cmd(
    299     int        argc,
    300     char     **argv,
    301     rtems_monitor_command_arg_t* command_arg,
    302     bool       verbose
     296void rtems_monitor_debugger_cmd(
     297  int                                argc,
     298  char                             **argv,
     299  const rtems_monitor_command_arg_t *command_arg,
     300  bool                               verbose
    303301)
    304302{
     
    308306}
    309307
    310 void
    311 rtems_monitor_pause_cmd(
    312     int        argc,
    313     char     **argv,
    314     rtems_monitor_command_arg_t* command_arg,
    315     bool       verbose
     308void rtems_monitor_pause_cmd(
     309  int                                argc,
     310  char                             **argv,
     311  const rtems_monitor_command_arg_t *command_arg,
     312  bool                               verbose
    316313)
    317314{
     
    322319}
    323320
    324 void
    325 rtems_monitor_fatal_cmd(
    326     int     argc,
    327     char  **argv,
    328     rtems_monitor_command_arg_t* command_arg,
    329     bool    verbose
     321void rtems_monitor_fatal_cmd(
     322  int                                argc,
     323  char                             **argv,
     324  const rtems_monitor_command_arg_t *command_arg,
     325  bool                               verbose
    330326)
    331327{
     
    336332}
    337333
    338 void
    339 rtems_monitor_continue_cmd(
    340     int     argc,
    341     char  **argv,
    342     rtems_monitor_command_arg_t* command_arg,
    343     bool    verbose
     334void rtems_monitor_continue_cmd(
     335  int                                argc,
     336  char                             **argv,
     337  const rtems_monitor_command_arg_t *command_arg,
     338  bool                               verbose
    344339)
    345340{
     
    347342}
    348343
    349 void
    350 rtems_monitor_node_cmd(
    351     int     argc,
    352     char  **argv,
    353     rtems_monitor_command_arg_t* command_arg,
    354     bool    verbose
     344void rtems_monitor_node_cmd(
     345  int                                argc,
     346  char                             **argv,
     347  const rtems_monitor_command_arg_t *command_arg,
     348  bool                               verbose
    355349)
    356350{
     
    463457int
    464458rtems_monitor_insert_cmd (
    465     rtems_monitor_command_entry_t *command
    466 )
    467 {
    468     rtems_monitor_command_entry_t **p =  &rtems_registered_commands.next;
    469 
    470     command->next = 0;
    471 
    472     while (*p) {
    473         if ( STREQ(command->command, (*p)->command) )
    474             return 0;
    475         p = & (*p)->next;
    476     }
    477     *p = command;
    478     return 1;
    479 }
    480 
    481 int
    482 rtems_monitor_erase_cmd (
    483     rtems_monitor_command_entry_t *command
    484 )
    485 {
    486     rtems_monitor_command_entry_t **p = & rtems_registered_commands.next;
    487 
    488     while (*p) {
    489         if ( STREQ(command->command, (*p)->command) ) {
    490             *p = (*p)->next;
    491             command->next = 0;
    492             return 1;
    493         }
    494         p = & (*p)->next;
    495     }
     459  rtems_monitor_command_entry_t *command
     460)
     461{
     462  const rtems_monitor_command_entry_t *e = rtems_monitor_registered_commands;
     463
     464  /* Reject empty commands */
     465  if (command->command == NULL) {
    496466    return 0;
    497 
    498 }
    499 
    500 /*
    501  * Main monitor command loop
    502  */
    503 
    504 void
    505 rtems_monitor_task(
    506     rtems_task_argument monitor_flags
    507 )
    508 {
    509     rtems_tcb *debugee = 0;
    510     rtems_context *rp;
    511 #if (CPU_HARDWARE_FP == TRUE) || (CPU_SOFTWARE_FP == TRUE)
    512     rtems_context_fp *fp;
    513 #endif
    514     char command_buffer[513];
    515     int argc;
    516     char *argv[64];
    517     bool  verbose = false;
    518     struct termios term;
    519 
    520     /*
    521      * Make the stdin stream characte not line based.
    522      */
    523 
    524     if (tcgetattr (STDIN_FILENO, &term) < 0)
    525     {
    526       fprintf(stdout,"rtems-monitor: cannot get terminal attributes.\n");
    527     }
    528     else
    529     {
    530       /*
    531        * No echo, no canonical processing.
    532        */
    533 
    534       term.c_lflag &= ~(ECHO | ICANON | IEXTEN);
    535 
    536       /*
    537        * No sigint on BREAK, CR-to-NL off, input parity off,
    538        * don't strip 8th bit on input, output flow control off
    539        */
    540 
    541       term.c_lflag    &= ~(INPCK | ISTRIP | IXON);
    542       term.c_cc[VMIN]  = 1;
    543       term.c_cc[VTIME] = 0;
    544 
    545       if (tcsetattr (STDIN_FILENO, TCSANOW, &term) < 0)
    546       {
    547         fprintf(stdout,"cannot set terminal attributes\n");
     467  }
     468
     469  /* Reject command if already present */
     470  while (e->next != NULL) {
     471      if (e->command != NULL && strcmp(command->command, e->command) == 0) {
     472        return 0;
    548473      }
    549     }
    550 
    551     if (!(monitor_flags & RTEMS_MONITOR_NOSYMLOAD)) {
    552       rtems_monitor_symbols_loadup();
    553     }
    554 
    555     if (monitor_flags & RTEMS_MONITOR_SUSPEND)
    556         (void) rtems_monitor_suspend(RTEMS_NO_TIMEOUT);
    557 
    558     for (;;)
    559     {
    560         rtems_monitor_command_entry_t *command;
    561 
    562         debugee = _Thread_Executing;
    563         rp = &debugee->Registers;
    564 #if (CPU_HARDWARE_FP == TRUE) || (CPU_SOFTWARE_FP == TRUE)
    565         fp = debugee->fp_context;  /* possibly 0 */
    566 #endif
    567 
    568         if (0 == rtems_monitor_command_read(command_buffer, &argc, argv))
    569             continue;
    570         if ((command = rtems_monitor_command_lookup(rtems_monitor_commands,
    571                                                     argc,
    572                                                     argv)) == 0)
    573         {
    574             /* no command */
    575             fprintf(stdout,"Unrecognised command; try 'help'\n");
    576             continue;
    577         }
    578 
    579         command->command_function(argc, argv, &command->command_arg, verbose);
    580 
    581         fflush(stdout);
    582     }
    583 }
    584 
    585 
    586 void
    587 rtems_monitor_kill(void)
    588 {
    589     if (rtems_monitor_task_id)
    590         rtems_task_delete(rtems_monitor_task_id);
    591     rtems_monitor_task_id = 0;
    592 
    593     rtems_monitor_server_kill();
    594 }
    595 
    596 void
    597 rtems_monitor_init(
    598     uint32_t   monitor_flags
    599 )
    600 {
    601     rtems_status_code status;
    602 
    603     rtems_monitor_kill();
    604 
    605     status = rtems_task_create(RTEMS_MONITOR_NAME,
    606                                1,
    607                                RTEMS_MINIMUM_STACK_SIZE * 2,
    608                                RTEMS_INTERRUPT_LEVEL(0),
    609                                RTEMS_DEFAULT_ATTRIBUTES,
    610                                &rtems_monitor_task_id);
    611     if (status != RTEMS_SUCCESSFUL)
    612     {
    613         rtems_error(status, "could not create monitor task");
    614         return;
    615     }
    616 
    617     rtems_monitor_node = rtems_object_id_get_node(rtems_monitor_task_id);
    618     rtems_monitor_default_node = rtems_monitor_node;
    619 
    620     rtems_monitor_server_init(monitor_flags);
    621 
    622     if (!(monitor_flags & RTEMS_MONITOR_NOTASK)) {
    623       /*
    624        * Start the monitor task itself
    625        */
    626       status = rtems_task_start(
    627         rtems_monitor_task_id, rtems_monitor_task, monitor_flags);
    628       if (status != RTEMS_SUCCESSFUL) {
    629         rtems_error(status, "could not start monitor");
    630         return;
    631       }
    632    }
    633 }
     474      e = e->next;
     475  }
     476
     477  /* Prepend new command */
     478  command->next = rtems_monitor_registered_commands;
     479  rtems_monitor_registered_commands = command;
     480
     481  return 1;
     482}
  • cpukit/libmisc/monitor/mon-object.c

    r1fae1c6b re41eaa88  
    3838 */
    3939
    40 rtems_monitor_object_info_t rtems_monitor_object_info[] =
     40static const rtems_monitor_object_info_t rtems_monitor_object_info[] =
    4141{
    4242    { RTEMS_MONITOR_OBJECT_CONFIG,
     
    171171
    172172
    173 rtems_monitor_object_info_t *
     173const rtems_monitor_object_info_t *
    174174rtems_monitor_object_lookup(
    175175    rtems_monitor_object_type_t type
    176176)
    177177{
    178     rtems_monitor_object_info_t *p;
     178    const rtems_monitor_object_info_t *p;
    179179    for (p = &rtems_monitor_object_info[0];
    180180         p < &rtems_monitor_object_info[NUMELEMS(rtems_monitor_object_info)];
     
    230230rtems_id
    231231rtems_monitor_object_canonical_next(
    232     rtems_monitor_object_info_t *info,
     232    const rtems_monitor_object_info_t *info,
    233233    rtems_id                     id,
    234234    void                        *canonical
     
    277277)
    278278{
    279     rtems_monitor_object_info_t *info;
     279    const rtems_monitor_object_info_t *info;
    280280    rtems_id                     next_id;
    281281
     
    296296void
    297297rtems_monitor_object_dump_1(
    298     rtems_monitor_object_info_t *info,
     298    const rtems_monitor_object_info_t *info,
    299299    rtems_id                     id,
    300300    bool                         verbose
     
    330330void
    331331rtems_monitor_object_dump_all(
    332     rtems_monitor_object_info_t *info,
     332    const rtems_monitor_object_info_t *info,
    333333    bool                         verbose
    334334)
     
    350350void
    351351rtems_monitor_object_cmd(
    352     int        argc,
    353     char     **argv,
    354     rtems_monitor_command_arg_t *command_arg,
    355     bool       verbose
     352    int                                argc,
     353    char                             **argv,
     354    const rtems_monitor_command_arg_t *command_arg,
     355    bool                               verbose
    356356)
    357357{
    358358    int arg;
    359     rtems_monitor_object_info_t *info = 0;
     359    const rtems_monitor_object_info_t *info = 0;
    360360    rtems_monitor_object_type_t  type;
    361361
  • cpukit/libmisc/monitor/mon-prmisc.c

    r1fae1c6b re41eaa88  
    5757int
    5858rtems_monitor_dump_assoc_bitfield(
    59     rtems_assoc_t *ap,
    60     char          *separator,
     59    const rtems_assoc_t *ap,
     60    const char          *separator,
    6161    uint32_t       value
    6262  )
     
    106106
    107107
    108 rtems_assoc_t rtems_monitor_state_assoc[] = {
     108static const rtems_assoc_t rtems_monitor_state_assoc[] = {
    109109    { "DORM",   STATES_DORMANT, 0 },
    110110    { "SUSP",   STATES_SUSPENDED, 0 },
     
    143143}
    144144
    145 rtems_assoc_t rtems_monitor_attribute_assoc[] = {
     145static const rtems_assoc_t rtems_monitor_attribute_assoc[] = {
    146146    { "GL",  RTEMS_GLOBAL, 0 },
    147147    { "PR",  RTEMS_PRIORITY, 0 },
     
    170170}
    171171
    172 rtems_assoc_t rtems_monitor_modes_assoc[] = {
     172static const rtems_assoc_t rtems_monitor_modes_assoc[] = {
    173173    { "nP",     RTEMS_NO_PREEMPT, 0 },
    174174    { "T",      RTEMS_TIMESLICE, 0 },
     
    191191}
    192192
    193 rtems_assoc_t rtems_monitor_events_assoc[] = {
     193static const rtems_assoc_t rtems_monitor_events_assoc[] = {
    194194    { "0",   RTEMS_EVENT_0, 0 },
    195195    { "1",   RTEMS_EVENT_1, 0 },
  • cpukit/libmisc/monitor/mon-symbols.c

    r1fae1c6b re41eaa88  
    6868rtems_symbol_create(
    6969    rtems_symbol_table_t *table,
    70     char                 *name,
     70    const char           *name,
    7171    uint32_t              value
    7272    )
     
    275275rtems_symbol_name_lookup(
    276276    rtems_symbol_table_t *table,
    277     char                 *name
     277    const char           *name
    278278  )
    279279{
     
    344344rtems_monitor_symbol_canonical_by_name(
    345345    rtems_monitor_symbol_t *canonical_symbol,
    346     char                   *name
     346    const char             *name
    347347)
    348348{
     
    451451 */
    452452
    453 void
    454 rtems_monitor_symbol_cmd(
    455     int        argc,
    456     char     **argv,
    457     rtems_monitor_command_arg_t* command_arg,
    458     bool       verbose
     453void rtems_monitor_symbol_cmd(
     454  int                                argc,
     455  char                             **argv,
     456  const rtems_monitor_command_arg_t *command_arg,
     457  bool                               verbose
    459458)
    460459{
  • cpukit/libmisc/monitor/monitor.h

    r1fae1c6b re41eaa88  
    329329typedef union _rtems_monitor_command_arg_t   rtems_monitor_command_arg_t;
    330330
    331 typedef void ( *rtems_monitor_command_function_t )(
    332                  int         argc,
    333                  char      **argv,
    334                 rtems_monitor_command_arg_t *command_arg,
    335                  bool        verbose
    336              );
     331typedef void (*rtems_monitor_command_function_t)(
     332  int                                argc,
     333  char                             **argv,
     334  const rtems_monitor_command_arg_t *command_arg,
     335  bool                               verbose
     336);
    337337
    338338union _rtems_monitor_command_arg_t {
     
    340340  rtems_status_code             status_code;
    341341  rtems_symbol_table_t          **symbol_table;
    342   rtems_monitor_command_entry_t *monitor_command_entry;
     342  const rtems_monitor_command_entry_t *monitor_command_entry;
    343343};
    344344
    345345struct rtems_monitor_command_entry_s {
    346     char        *command;      /* command name */
    347     char        *usage;        /* usage string for the command */
    348     uint32_t     arguments_required;    /* # of required args */
     346    const char *command;      /* command name */
     347    const char *usage;        /* usage string for the command */
     348    uint32_t arguments_required;    /* # of required args */
    349349    rtems_monitor_command_function_t command_function;
    350350                               /* Some argument for the command */
    351     rtems_monitor_command_arg_t   command_arg;
    352     rtems_monitor_command_entry_t *next;
     351    rtems_monitor_command_arg_t command_arg;
     352    const rtems_monitor_command_entry_t *next;
    353353};
    354354
     
    371371
    372372/* monitor.c */
    373 void    rtems_monitor_kill(void);
    374 void    rtems_monitor_init(uint32_t);
    375 void    rtems_monitor_wakeup(void);
    376 void    rtems_monitor_pause_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
    377 void    rtems_monitor_fatal_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
    378 void    rtems_monitor_continue_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
    379 void    rtems_monitor_debugger_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
    380 void    rtems_monitor_node_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
     373void    rtems_monitor_pause_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
     374void    rtems_monitor_fatal_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
     375void    rtems_monitor_continue_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
     376void    rtems_monitor_debugger_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
     377void    rtems_monitor_node_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
    381378void    rtems_monitor_symbols_loadup(void);
    382379int     rtems_monitor_insert_cmd(rtems_monitor_command_entry_t *);
    383380int     rtems_monitor_erase_cmd(rtems_monitor_command_entry_t *);
    384 
     381void    rtems_monitor_wakeup(void);
     382rtems_status_code rtems_monitor_suspend(rtems_interval timeout);
     383
     384/* editor.c */
     385void    rtems_monitor_kill(void);
     386void    rtems_monitor_init(uint32_t);
    385387void    rtems_monitor_task(rtems_task_argument);
    386388
     
    394396int     rtems_monitor_make_argv(char *, int *, char **);
    395397int     rtems_monitor_command_read(char *, int *, char **);
    396 rtems_monitor_command_entry_t *rtems_monitor_command_lookup(
    397     rtems_monitor_command_entry_t * table, int argc, char **argv);
    398 void    rtems_monitor_command_usage(rtems_monitor_command_entry_t *, char *);
    399 void    rtems_monitor_help_cmd(int, char **, rtems_monitor_command_arg_t *, bool);
     398const rtems_monitor_command_entry_t *rtems_monitor_command_lookup(const rtems_monitor_command_entry_t *table, const char *command_name);
     399void    rtems_monitor_command_usage(const rtems_monitor_command_entry_t *, const char *);
     400void    rtems_monitor_help_cmd(int, char **, const rtems_monitor_command_arg_t *, bool);
    400401
    401402/* prmisc.c */
     
    415416/* object.c */
    416417rtems_id   rtems_monitor_id_fixup(rtems_id, uint32_t  , rtems_monitor_object_type_t);
    417 rtems_monitor_object_info_t *rtems_monitor_object_lookup(rtems_monitor_object_type_t type);
     418const rtems_monitor_object_info_t *rtems_monitor_object_lookup(rtems_monitor_object_type_t type);
    418419rtems_id   rtems_monitor_object_canonical_get(rtems_monitor_object_type_t, rtems_id, void *, size_t *size_p);
    419 rtems_id   rtems_monitor_object_canonical_next(rtems_monitor_object_info_t *, rtems_id, void *);
     420rtems_id   rtems_monitor_object_canonical_next(const rtems_monitor_object_info_t *, rtems_id, void *);
    420421void      *rtems_monitor_object_next(void *, void *, rtems_id, rtems_id *);
    421422rtems_id   rtems_monitor_object_canonical(rtems_id, void *);
    422 void       rtems_monitor_object_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
     423void       rtems_monitor_object_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
    423424
    424425/* manager.c */
     
    485486void                  rtems_symbol_table_destroy(rtems_symbol_table_t *table);
    486487
    487 rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, uint32_t  );
     488rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, const char *, uint32_t  );
    488489rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, uint32_t  );
    489490const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, uint32_t  );
    490 rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
     491rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, const char *);
    491492void   *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
    492493void    rtems_monitor_symbol_canonical(rtems_monitor_symbol_t *, rtems_symbol_t *);
    493 void    rtems_monitor_symbol_canonical_by_name(rtems_monitor_symbol_t *, char *);
     494void    rtems_monitor_symbol_canonical_by_name(rtems_monitor_symbol_t *, const char *);
    494495void    rtems_monitor_symbol_canonical_by_value(rtems_monitor_symbol_t *, void *);
    495496uint32_t   rtems_monitor_symbol_dump(rtems_monitor_symbol_t *, bool);
    496 void    rtems_monitor_symbol_cmd(int, char **, rtems_monitor_command_arg_t*, bool);
     497void    rtems_monitor_symbol_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
    497498
    498499#if defined(RTEMS_NETWORKING)
     
    512513
    513514/* mon-object.c */
    514 rtems_monitor_object_info_t *rtems_monitor_object_lookup(
     515const rtems_monitor_object_info_t *rtems_monitor_object_lookup(
    515516  rtems_monitor_object_type_t type
    516517);
     
    520521
    521522/* FIXME: This should not be here */
    522 extern rtems_monitor_command_entry_t rtems_monitor_commands[];
     523extern const rtems_monitor_command_entry_t rtems_monitor_commands[];
    523524
    524525#define MONITOR_WAKEUP_EVENT   RTEMS_EVENT_0
  • cpukit/libmisc/serdbg/termios_printk.c

    r1fae1c6b re41eaa88  
    9595| Function:                                                                 |
    9696\*-------------------------------------------------------------------------*/
    97 char termios_printk_inputchar
     97int termios_printk_inputchar
    9898/*-------------------------------------------------------------------------*\
    9999| Purpose:                                                                  |
  • cpukit/libmisc/serdbg/termios_printk.h

    r1fae1c6b re41eaa88  
    6262| Function:                                                                 |
    6363\*-------------------------------------------------------------------------*/
    64 char termios_printk_inputchar
     64int termios_printk_inputchar
    6565/*-------------------------------------------------------------------------*\
    6666| Purpose:                                                                  |
  • cpukit/libmisc/shell/cat_file.c

    r1fae1c6b re41eaa88  
    1919#include <stdio.h>
    2020
    21 int rtems_shell_cat_file(FILE * out,char * name) {
     21int rtems_shell_cat_file(FILE * out,const char * name) {
    2222  FILE * fd;
    2323  int c;
  • cpukit/libmisc/shell/cmds.c

    r1fae1c6b re41eaa88  
    3030 * Not all work fine but you can show the rtems status and more.
    3131 *-----------------------------------------------------------*/
    32 int rtems_shell_main_monitor(int argc,char * argv[]) {
    33   rtems_monitor_command_entry_t *command;
     32static int rtems_shell_main_monitor(int argc, char **argv) {
     33  const rtems_monitor_command_entry_t *command = NULL;
    3434
    35   if ((command=rtems_monitor_command_lookup(rtems_monitor_commands,argc,argv)))
    36     command->command_function(argc, argv, &command->command_arg, 0);
     35  if (argc < 1) {
     36    return 1;
     37  }
     38
     39  command = rtems_monitor_command_lookup(rtems_monitor_commands, argv [0]);
     40
     41  if (command == NULL) {
     42    return 1;
     43  }
     44
     45  command->command_function(argc, argv, &command->command_arg, 0);
    3746
    3847  return 0;
     
    4150void rtems_shell_register_monitor_commands(void)
    4251{
    43   rtems_monitor_command_entry_t *command;
     52  /* Monitor topic */
     53  const rtems_monitor_command_entry_t *e = rtems_monitor_commands;
    4454
    45   /* monitor topic */
    46   command = rtems_monitor_commands;
    47 
    48   while (command) {
    49    /* Exclude EXIT (alias quit)*/
    50    if (strcmp("exit",command->command)) {
    51      rtems_shell_cmd_t *shell_cmd;
    52 
    53      shell_cmd = (rtems_shell_cmd_t *) malloc(sizeof(rtems_shell_cmd_t));
    54      shell_cmd->name    = command->command;
    55      shell_cmd->topic   = "monitor";
    56      shell_cmd->usage   = command->usage;
    57      shell_cmd->command = rtems_shell_main_monitor;
    58      shell_cmd->alias   = (rtems_shell_cmd_t *) NULL;
    59      shell_cmd->next    = (rtems_shell_cmd_t *) NULL;
    60 
    61        if (rtems_shell_add_cmd_struct( shell_cmd ) == NULL) {
    62          free( shell_cmd );
    63          shell_cmd = NULL;
    64        }
    65      }
    66      command = command->next;
     55  while (e != NULL) {
     56    /* Exclude EXIT (alias quit)*/
     57    if (e->command != NULL && strcmp("exit", e->command) != 0) {
     58      rtems_shell_cmd_t *shell_cmd =
     59        (rtems_shell_cmd_t *) malloc(sizeof(rtems_shell_cmd_t));
     60     
     61      if (shell_cmd != NULL) {
     62        shell_cmd->name    = e->command;
     63        shell_cmd->topic   = "monitor";
     64        shell_cmd->usage   = e->usage;
     65        shell_cmd->command = rtems_shell_main_monitor;
     66        shell_cmd->alias   = NULL;
     67        shell_cmd->next    = NULL;
     68     
     69        if (rtems_shell_add_cmd_struct(shell_cmd) == NULL) {
     70          free(shell_cmd);
     71        }
     72      }
     73    }
     74    e = e->next;
    6775  }
    6876}
  • cpukit/libmisc/shell/internal.h

    r1fae1c6b re41eaa88  
    1616
    1717struct rtems_shell_topic_tt {
    18   char                *topic;
     18  const char          *topic;
    1919  rtems_shell_topic_t *next;
    2020};
     
    2424extern rtems_shell_topic_t * rtems_shell_first_topic;
    2525
    26 rtems_shell_topic_t * rtems_shell_lookup_topic(char * topic);
     26rtems_shell_topic_t * rtems_shell_lookup_topic(const char *topic);
    2727
    2828
  • cpukit/libmisc/shell/main_help.c

    r1fae1c6b re41eaa88  
    3232)
    3333{
    34   char * pc;
     34  const char * pc;
    3535  int    col,line;
    3636
  • cpukit/libmisc/shell/shell.c

    r1fae1c6b re41eaa88  
    940940/* ----------------------------------------------- */
    941941static rtems_status_code   rtems_shell_run (
    942   char                *task_name,
     942  const char          *task_name,
    943943  uint32_t             task_stacksize,
    944944  rtems_task_priority  task_priority,
    945   char                *devname,
     945  const char          *devname,
    946946  int                  forever,
    947947  int                  wait,
     
    958958  rtems_name         name;
    959959
    960   if ( task_name )
     960  if ( task_name && strlen(task_name) >= 4)
    961961    name = rtems_build_name(
    962962      task_name[0], task_name[1], task_name[2], task_name[3]);
     
    10111011
    10121012rtems_status_code rtems_shell_init(
    1013   char                *task_name,
     1013  const char          *task_name,
    10141014  uint32_t             task_stacksize,
    10151015  rtems_task_priority  task_priority,
    1016   char                *devname,
     1016  const char          *devname,
    10171017  int                  forever,
    10181018  int                  wait
     
    10401040
    10411041rtems_status_code   rtems_shell_script (
    1042   char                *task_name,
     1042  const char          *task_name,
    10431043  uint32_t             task_stacksize,
    10441044  rtems_task_priority  task_priority,
  • cpukit/libmisc/shell/shell.h

    r1fae1c6b re41eaa88  
    5555#define RTEMS_SHELL_KEYS_F10         (17)
    5656
    57 typedef int (*rtems_shell_command_t)(int argc,char * argv[]);
     57typedef int (*rtems_shell_command_t)(int argc, char **argv);
    5858
    5959struct rtems_shell_cmd_tt;
     
    6161
    6262struct rtems_shell_cmd_tt {
    63   char                  *name;
    64   char                  *usage;
    65   char                  *topic;
     63  const char            *name;
     64  const char            *usage;
     65  const char            *topic;
    6666  rtems_shell_command_t  command;
    6767  rtems_shell_cmd_t     *alias;
     
    7070
    7171typedef struct {
    72   char            *name;
    73   char            *alias;
     72  const char *name;
     73  const char *alias;
    7474} rtems_shell_alias_t;
    7575
     
    8080unsigned int rtems_shell_getchar(FILE *in);
    8181
    82 rtems_shell_cmd_t * rtems_shell_lookup_cmd(char * cmd);
     82rtems_shell_cmd_t * rtems_shell_lookup_cmd(const char *cmd);
    8383
    8484rtems_shell_cmd_t *rtems_shell_add_cmd_struct(
     
    8787
    8888rtems_shell_cmd_t * rtems_shell_add_cmd(
    89   char                  *cmd,
    90   char                  *topic,
    91   char                  *usage,
     89  const char            *cmd,
     90  const char            *topic,
     91  const char            *usage,
    9292  rtems_shell_command_t  command
    9393);
    9494
    9595rtems_shell_cmd_t * rtems_shell_alias_cmd(
    96   char *cmd,
    97   char *alias
     96  const char *cmd,
     97  const char *alias
    9898);
    9999
     
    114114int rtems_shell_cat_file(
    115115  FILE *out,
    116   char *name
     116  const char *name
    117117);
    118118
     
    123123
    124124int rtems_shell_script_file(
    125   int   argc,
    126   char *argv[]
     125  int    argc,
     126  char **argv
    127127);
    128128
     
    139139 */
    140140rtems_status_code rtems_shell_init(
    141   char                *task_name,
     141  const char          *task_name,
    142142  uint32_t             task_stacksize,  /*0 default*/
    143143  rtems_task_priority  task_priority,
    144   char                *devname,
     144  const char          *devname,
    145145  int                  forever,
    146146  int                  wait
     
    161161 */
    162162rtems_status_code rtems_shell_script(
    163   char                *task_name,
     163  const char          *task_name,
    164164  uint32_t             task_stacksize,  /*0 default*/
    165165  rtems_task_priority  task_priority,
     
    175175 *  them in.
    176176 */
    177 int rtems_shell_str2int(char * s);
     177int rtems_shell_str2int(const char * s);
    178178
    179179typedef struct  {
    180180  rtems_name  magic; /* 'S','E','N','V': Shell Environment */
    181   char      *devname;
    182   char      *taskname;
     181  const char *devname;
     182  const char *taskname;
    183183  /* user extensions */
    184184  bool        exit_shell; /* logout */
  • cpukit/libmisc/shell/shell_cmdset.c

    r1fae1c6b re41eaa88  
    5151 *  Find the topic from the set of topics registered.
    5252 */
    53 rtems_shell_topic_t * rtems_shell_lookup_topic(char * topic) {
     53rtems_shell_topic_t * rtems_shell_lookup_topic(const char * topic) {
    5454  rtems_shell_topic_t * shell_topic;
    5555  shell_topic=rtems_shell_first_topic;
     
    6666 *  Add a new topic to the list of topics
    6767 */
    68 rtems_shell_topic_t * rtems_shell_add_topic(char * topic) {
     68rtems_shell_topic_t * rtems_shell_add_topic(const char * topic) {
    6969  rtems_shell_topic_t * current,*aux;
    7070
     
    9494 *  Find the command in the set
    9595 */
    96 rtems_shell_cmd_t * rtems_shell_lookup_cmd(char * cmd) {
     96rtems_shell_cmd_t * rtems_shell_lookup_cmd(const char * cmd) {
    9797  rtems_shell_cmd_t * shell_cmd;
    9898  shell_cmd=rtems_shell_first_cmd;
     
    137137 */
    138138rtems_shell_cmd_t * rtems_shell_add_cmd(
    139   char                  *cmd,
    140   char                  *topic,
    141   char                  *usage,
     139  const char            *name,
     140  const char            *topic,
     141  const char            *usage,
    142142  rtems_shell_command_t  command
    143143)
    144144{
    145   rtems_shell_cmd_t *shell_cmd;
    146 
    147   if (!cmd)
    148     return (rtems_shell_cmd_t *) NULL;
    149   if (!command)
    150     return (rtems_shell_cmd_t *) NULL;
    151 
    152   shell_cmd          = (rtems_shell_cmd_t *) malloc(sizeof(rtems_shell_cmd_t));
    153   shell_cmd->name    = strdup( cmd );
    154   shell_cmd->topic   = strdup( topic );
    155   shell_cmd->usage   = strdup( usage );
     145  rtems_shell_cmd_t *shell_cmd = NULL;
     146  char *my_name = NULL;
     147  char *my_topic = NULL;
     148  char *my_usage = NULL;
     149
     150  /* Reject empty commands */
     151  if (name == NULL || command == NULL) {
     152    return NULL;
     153  }
     154
     155  /* Allocate command stucture */
     156  shell_cmd = (rtems_shell_cmd_t *) malloc(sizeof(rtems_shell_cmd_t));
     157  if (shell_cmd == NULL) {
     158    return NULL;
     159  }
     160
     161  /* Allocate strings */
     162  my_name  = strdup(name);
     163  my_topic = strdup(topic);
     164  my_usage = strdup(usage);
     165
     166  /* Assign values */
     167  shell_cmd->name    = my_name;
     168  shell_cmd->topic   = my_topic;
     169  shell_cmd->usage   = my_usage;
    156170  shell_cmd->command = command;
    157   shell_cmd->alias   = (rtems_shell_cmd_t *) NULL;
    158   shell_cmd->next    = (rtems_shell_cmd_t *) NULL;
    159 
    160   if (rtems_shell_add_cmd_struct( shell_cmd ) == NULL) {
    161     free( shell_cmd->usage );
    162     free( shell_cmd->topic );
    163     free( shell_cmd->name );
    164     free( shell_cmd );
    165     shell_cmd = NULL;
     171  shell_cmd->alias   = NULL;
     172  shell_cmd->next    = NULL;
     173
     174  if (rtems_shell_add_cmd_struct(shell_cmd) == NULL) {
     175    /* Something is wrong, free allocated resources */
     176    free(my_usage);
     177    free(my_topic);
     178    free(my_name);
     179    free(shell_cmd);
     180
     181    return NULL;
    166182  }
    167183
     
    190206 * ----------------------------------------------- */
    191207rtems_shell_cmd_t *rtems_shell_alias_cmd(
    192   char *cmd,
    193   char *alias
     208  const char *cmd,
     209  const char *alias
    194210)
    195211{
  • cpukit/libmisc/shell/shell_getchar.c

    r1fae1c6b re41eaa88  
    4242{
    4343  char                     expecting;
    44   struct translation_table *branch;
     44  const struct translation_table *branch;
    4545  unsigned int             key;
    4646};
    4747
    48 static struct translation_table trans_one[] =
     48static const struct translation_table trans_one[] =
    4949{
    5050  { '\x7e', 0, RTEMS_SHELL_KEYS_HOME },
     
    5252};
    5353
    54 static struct translation_table trans_two[] =
     54static const struct translation_table trans_two[] =
    5555{
    5656  { '~', 0, RTEMS_SHELL_KEYS_INS },
     
    5858};
    5959
    60 static struct translation_table trans_three[] =
     60static const struct translation_table trans_three[] =
    6161{
    6262  { '~', 0, RTEMS_SHELL_KEYS_DEL },
     
    6464};
    6565
    66 static struct translation_table trans_tab_csi[] =
     66static const struct translation_table trans_tab_csi[] =
    6767{
    6868  { '1', trans_one,   0 },
     
    7878};
    7979
    80 static struct translation_table trans_tab_O[] =
     80static const struct translation_table trans_tab_O[] =
    8181{
    8282  { '1', 0, RTEMS_SHELL_KEYS_F1 },
     
    104104};
    105105
    106 static struct translation_table trans_tab[] =
     106static const struct translation_table trans_tab[] =
    107107{
    108108  { '[', trans_tab_csi, 0 },    /* CSI command sequences */
     
    121121rtems_shell_getchar (FILE *in)
    122122{
    123   struct translation_table *translation = 0;
     123  const struct translation_table *translation = 0;
    124124  for (;;)
    125125  {
  • cpukit/libmisc/shell/str2int.c

    r1fae1c6b re41eaa88  
    2222 * str to int "0xaffe" "0b010010" "0123" "192939"
    2323 */
    24 int rtems_shell_str2int(char * s) {
     24int rtems_shell_str2int(const char * s) {
    2525  int sign=1;
    2626  int base=10;
Note: See TracChangeset for help on using the changeset viewer.