1/* MI Command Set - MI Command Parser.
2   Copyright (C) 2000, 2007, 2008, 2009, 2010, 2011
3   Free Software Foundation, Inc.
4   Contributed by Cygnus Solutions (a Red Hat company).
5
6   This file is part of GDB.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21#ifndef MI_PARSE_H
22#define MI_PARSE_H
23
24#include <sys/time.h>
25
26/* MI parser */
27
28/* Timestamps for current command and last asynchronous command.  */
29struct mi_timestamp {
30  struct timeval wallclock;
31  struct timeval utime;
32  struct timeval stime;
33};
34
35enum mi_command_type
36  {
37    MI_COMMAND, CLI_COMMAND
38  };
39
40struct mi_parse
41  {
42    enum mi_command_type op;
43    char *command;
44    char *token;
45    const struct mi_cmd *cmd;
46    struct mi_timestamp *cmd_start;
47    char *args;
48    char **argv;
49    int argc;
50    int all;
51    int thread_group; /* At present, the same as inferior number.  */
52    int thread;
53    int frame;
54  };
55
56/* Attempts to parse CMD returning a ``struct mi_parse''.  If CMD is
57   invalid, an exception is thrown.  For an MI_COMMAND COMMAND, ARGS
58   and OP are initialized.  Un-initialized fields are zero.  *TOKEN is
59   set to the token, even if an exception is thrown.  It is allocated
60   with xmalloc; it must either be freed with xfree, or assigned to
61   the TOKEN field of the resultant mi_parse object, to be freed by
62   mi_parse_free.  */
63
64extern struct mi_parse *mi_parse (char *cmd, char **token);
65
66/* Free a command returned by mi_parse_command. */
67
68extern void mi_parse_free (struct mi_parse *cmd);
69
70#endif
71