/*****************************************************************************
 *
 *  xdbx - X Window System interface to the dbx debugger
 *
 *  Copyright 1989 The University of Texas at Austin
 *  Copyright 1990 Microelectronics and Computer Technology Corporation
 *
 *  Permission to use, copy, modify, and distribute this software and its
 *  documentation for any purpose and without fee is hereby granted,
 *  provided that the above copyright notice appear in all copies and that
 *  both that copyright notice and this permission notice appear in
 *  supporting documentation, and that the name of The University of Texas
 *  and Microelectronics and Computer Technology Corporation (MCC) not be 
 *  used in advertising or publicity pertaining to distribution of
 *  the software without specific, written prior permission.  The
 *  University of Texas and MCC makes no representations about the 
 *  suitability of this software for any purpose.  It is provided "as is" 
 *  without express or implied warranty.
 *
 *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
 *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
 *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
 *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
 *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
 *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *  Author:  	Po Cheung
 *  Created:   	November 24, 1989
 *
 *****************************************************************************/

/*  mips_regex.h:
 *
 *  Regular expression pattern matching for dbx on DECStation.
 *
 *  The reg_token array indicates the register no. for each token type.
 *      reg_token[0] : message
 *      reg_token[1] : stop number
 *      reg_token[2] : function name
 *      reg_token[3] : line number
 *      reg_token[4] : file name
 *      reg_token[5] : display command output
 */

#define TK_MESG         0
#define TK_STOP         1
#define TK_FUNC         2
#define TK_LINE         3
#define TK_FILE         4
#define TK_DISP		5

#define O_EXEC_GDB      0
#define O_DONE          1
#define O_STOPAT        2
#define O_STOPIN        3
#define O_UPDOWN        4
#define O_FUNC          4
#define O_BELL          5
#define O_LIST          6
#define O_FILE          7
#define O_SEARCH        8
#define O_PRINT         9
#define O_DEBUG         10

#define C_ANY		-1
#define C_EXEC          0
#define C_STOPAT        1
#define C_STOPIN        2
#define C_UPDOWN        3
#define C_DELETE        4
#define C_FUNC          5
#define C_FILE          6
#define C_USE          	7
#define C_LIST         	8
#define C_SEARCH        9
#define C_PRINT		10
#define C_STATUS	11


static PatternRec output_pattern[] = {
    /* exec */
    {"\\(.*\n\\)*\\(\\(\\(\\(\[[0-9]+\\] \\)?\\(stopped at \\)?\\)\\|Bus error \
\\|Segmentation fault \\|Interrupt \\)?\\[\\([^ ]+\\):\\([0-9]+\\).*\\]\\).*\n",
     NULL,
     {2, -1, 7, 8, -1, -1}
    },
    /* done */
    {"\\(.*\n\\)*Program terminated normally\n",
     NULL,
     {-1, -1, -1, -1, -1, -1}
    },
    /* stop at */
    {"\\[\\([0-9]+\\)\\] stop at \\(\"\\([^ ]+\\)\":\\)?\\([0-9]+\\)\n",
     NULL,
     {-1, 1, -1, 4, 3, -1}
    },
    /* stop in */
    {"\\(\\[.*\\]\n\\)*\\[\\([0-9]+\\)\\] stop in \\([^ ]+\\)\n",
     NULL,
     {-1, 2, 3, -1, -1, -1}
    },
    /* up, down, func */
    {"\\(.*\n\\)*\\([^ ]+\\):[ ]*\\([0-9]+\\).*\n",
     NULL,
     {2, -1, 2, 3, -1, -1}
    },
    /* bell */
    {"\n\\(not that many levels\\|program not active\\|program is not active\\|\
cannot read register unless program is active\\|cannot dump unless program is \
active\\)\n",
     NULL,
     {-1, -1, -1, -1, -1, -1}
    },
    /* list */
    {"[ ]*\\([0-9]+\\).*\n",
     NULL,
     {-1, -1, -1, 1, -1, -1}
    },
    /* file */
    {"\\([^ ]+\\)\n",
     NULL,
     {-1, -1, -1, -1, 1, -1}
    },
    /* search */
    {"[ ]*\\([0-9]+\\).*\n",
     NULL,
     {-1, -1, -1, 1, -1, -1}
    },
    /* print */
    {"\\(.+\n\\(.*\n\\)*\\)",
     NULL,
     { 1, -1, -1, -1, -1, -1}
    },
    /* dbx init */
    {"\\(.*\n\\)*.*\\(dbx version .*\nType 'help' for help.\nreading symbolic \
information ...\n\\)\\(\nwarning: .*\n\\)?\\([^ ]+\\):[ ]*\\([0-9]+\\).*\n",
     NULL,
     {-1, -1, 4, 5, -1, -1}
    },
    NULL
};

static PatternRec command_pattern[] = {
    {"[ ]*\\(run\\|r\\|cont\\|c\\|next\\|n\\|step\\|s\\|return\\)\\( \\|\n\\)",
						NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*\\(stop\\|st\\)[ ]+at[ ]+[0-9]+",   	NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*\\(stop\\|st\\)[ ]+in[ ]+[^ ]+",      NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*\\(up\\|down\\)",                   	NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*\\(delete\\|d\\)",                  	NULL, {-1, -1, -1,  1, -1, -1}},
    {"[ ]*func[ ]*\\([^ ]+\\)[ ]*",           	NULL, {-1, -1,  1, -1, -1, -1}},
    {"[ ]*file[ ]*",           			NULL, {-1, -1, -1, -1,  1, -1}},
    {"[ ]*use[ ]*",           			NULL, {-1, -1, -1, -1,  1, -1}},
    {"[ ]*list[ ]*",           			NULL, {-1, -1, -1, -1,  1, -1}},
    {"[ ]*\\(/\\|\?\\)",                      	NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*\\(print\\|p\\)[ ]*[^ ]+",            NULL, {-1, -1, -1, -1, -1, -1}},
    {"[ ]*status[ ]*",         			NULL, {-1, -1, -1, -1,  1, -1}},
    NULL
};


syntax highlighted by Code2HTML, v. 0.9.1