198944Sobrien#!/bin/sh
298944Sobrien
398944Sobrien# User Interface Events.
4130803Smarcel# Copyright 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
598944Sobrien#
698944Sobrien# Contributed by Cygnus Solutions.
798944Sobrien#
898944Sobrien# This file is part of GDB.
998944Sobrien#
1098944Sobrien# This program is free software; you can redistribute it and/or modify
1198944Sobrien# it under the terms of the GNU General Public License as published by
1298944Sobrien# the Free Software Foundation; either version 2 of the License, or
1398944Sobrien# (at your option) any later version.
1498944Sobrien#
1598944Sobrien# This program is distributed in the hope that it will be useful,
1698944Sobrien# but WITHOUT ANY WARRANTY; without even the implied warranty of
1798944Sobrien# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1898944Sobrien# GNU General Public License for more details.
1998944Sobrien#
2098944Sobrien# You should have received a copy of the GNU General Public License
2198944Sobrien# along with this program; if not, write to the Free Software
2298944Sobrien# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2398944Sobrien
2498944Sobrien#
2598944Sobrien# What happens next:
2698944Sobrien#
2798944Sobrien
2898944Sobrien# The gdb-events.h/gdb-events.c files this script generates are commited
2998944Sobrien# and published.
3098944Sobrien
3198944Sobrien# Any UI module that is installing events is changed so that the
3298944Sobrien# events are installed using the ``set_gdb_events()'' and
3398944Sobrien# ``gdb_event_hooks()'' interfaces.  There could prove to be an issue
3498944Sobrien# here with respect to annotate.  We might need to accomodate a hook
3598944Sobrien# stack that allows several ui blocks to install their own events.
3698944Sobrien
3798944Sobrien# Each of the variable events (as currently generated) is converted
3898944Sobrien# to either a straight function call or a function call with a
3998944Sobrien# predicate.
4098944Sobrien
4198944Sobrien
4298944SobrienIFS=:
4398944Sobrien
4498944Sobrienread="class returntype function formal actual attrib"
4598944Sobrien
4698944Sobrienfunction_list ()
4798944Sobrien{
4898944Sobrien  # category:
4998944Sobrien  #        # -> disable
5098944Sobrien  #        * -> compatibility - pointer variable that is initialized
5198944Sobrien  #             by set_gdb_events().
5298944Sobrien  #        ? -> Predicate and function proper.
5398944Sobrien  #        f -> always call (must have a void returntype)
5498944Sobrien  # return-type
5598944Sobrien  # name
5698944Sobrien  # formal argument list
5798944Sobrien  # actual argument list
5898944Sobrien  # attributes
5998944Sobrien  # description
6098944Sobrien  cat <<EOF |
6198944Sobrienf:void:breakpoint_create:int b:b
6298944Sobrienf:void:breakpoint_delete:int b:b
6398944Sobrienf:void:breakpoint_modify:int b:b
6498944Sobrienf:void:tracepoint_create:int number:number
6598944Sobrienf:void:tracepoint_delete:int number:number
6698944Sobrienf:void:tracepoint_modify:int number:number
6798944Sobrienf:void:architecture_changed:void
68130803Smarcelf:void:target_changed:void
69130803Smarcelf:void:selected_frame_level_changed:int level:level
70130803Smarcelf:void:selected_thread_changed:int thread_num:thread_num
7198944Sobrien#*:void:annotate_starting_hook:void
7298944Sobrien#*:void:annotate_stopped_hook:void
7398944Sobrien#*:void:annotate_signalled_hook:void
7498944Sobrien#*:void:annotate_signal_hook:void
7598944Sobrien#*:void:annotate_exited_hook:void
7698944Sobrien##*:void:print_register_hook:int
7798944Sobrien##*:CORE_ADDR:find_toc_address_hook:CORE_ADDR
7898944Sobrien##*:void:sparc_print_register_hook:int regno:regno
7998944Sobrien#*:void:target_resume_hook:void
8098944Sobrien#*:void:target_wait_loop_hook:void
8198944Sobrien#*:void:init_gdb_hook:char *argv0:argv0
8298944Sobrien#*:void:command_loop_hook:void
8398944Sobrien#*:void:fputs_unfiltered_hook:const char *linebuff,struct ui_file *stream:linebuff, stream
8498944Sobrien#*:void:print_frame_info_listing_hook:struct symtab *s, int line, int stopline, int noerror:s, line, stopline, noerror
8598944Sobrien#*:int:query_hook:const char *query, va_list args:query, args
8698944Sobrien#*:void:warning_hook:const char *string, va_list args:string, args
8798944Sobrien#*:void:target_output_hook:char *b:b
8898944Sobrien#*:void:interactive_hook:void
8998944Sobrien#*:void:registers_changed_hook:void
9098944Sobrien#*:void:readline_begin_hook:char *format, ...:format
9198944Sobrien#*:char *:readline_hook:char *prompt:prompt
9298944Sobrien#*:void:readline_end_hook:void
9398944Sobrien#*:int:target_wait_hook:int pid, struct target_waitstatus *status:pid, status
9498944Sobrien#*:void:call_command_hook:struct cmd_list_element *c, char *cmd, int from_tty:c, cmd, from_tty
9598944Sobrien#*:NORETURN void:error_hook:void:: ATTR_NORETURN
9698944Sobrien#*:void:error_begin_hook:void
9798944Sobrien##*:int:target_architecture_hook:const struct bfd_arch_info *
9898944Sobrien#*:void:exec_file_display_hook:char *filename:filename
9998944Sobrien#*:void:file_changed_hook:char *filename:filename
10098944Sobrien##*:void:specify_exec_file_hook:
10198944Sobrien#*:int:gdb_load_progress_hook:char *section, unsigned long num:section, num
10298944Sobrien#*:void:pre_add_symbol_hook:char *name:name
10398944Sobrien#*:void:post_add_symbol_hook:void
10498944Sobrien#*:void:selected_frame_level_changed_hook:int level:level
10598944Sobrien#*:int:gdb_loop_hook:int signo:signo
10698944Sobrien##*:void:solib_create_inferior_hook:void
10798944Sobrien##*:void:xcoff_relocate_symtab_hook:unsigned int
10898944SobrienEOF
10998944Sobrien  grep -v '^#'
11098944Sobrien}
11198944Sobrien
11298944Sobriencopyright ()
11398944Sobrien{
11498944Sobrien  cat <<EOF
11598944Sobrien/* User Interface Events.
11698944Sobrien
117130803Smarcel   Copyright 1999, 2001, 2002 Free Software Foundation, Inc.
118130803Smarcel
11998944Sobrien   Contributed by Cygnus Solutions.
12098944Sobrien
12198944Sobrien   This file is part of GDB.
12298944Sobrien
12398944Sobrien   This program is free software; you can redistribute it and/or modify
12498944Sobrien   it under the terms of the GNU General Public License as published by
12598944Sobrien   the Free Software Foundation; either version 2 of the License, or
12698944Sobrien   (at your option) any later version.
12798944Sobrien
12898944Sobrien   This program is distributed in the hope that it will be useful,
12998944Sobrien   but WITHOUT ANY WARRANTY; without even the implied warranty of
13098944Sobrien   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13198944Sobrien   GNU General Public License for more details.
13298944Sobrien
13398944Sobrien   You should have received a copy of the GNU General Public License
13498944Sobrien   along with this program; if not, write to the Free Software
13598944Sobrien   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
13698944Sobrien
13798944Sobrien/* Work in progress */
13898944Sobrien
13998944Sobrien/* This file was created with the aid of \`\`gdb-events.sh''.
14098944Sobrien
14198944Sobrien   The bourn shell script \`\`gdb-events.sh'' creates the files
14298944Sobrien   \`\`new-gdb-events.c'' and \`\`new-gdb-events.h and then compares
14398944Sobrien   them against the existing \`\`gdb-events.[hc]''.  Any differences
14498944Sobrien   found being reported.
14598944Sobrien
14698944Sobrien   If editing this file, please also run gdb-events.sh and merge any
14798944Sobrien   changes into that script. Conversely, when making sweeping changes
14898944Sobrien   to this file, modifying gdb-events.sh and using its output may
14998944Sobrien   prove easier. */
15098944Sobrien
15198944SobrienEOF
15298944Sobrien}
15398944Sobrien
15498944Sobrien#
15598944Sobrien# The .h file
15698944Sobrien#
15798944Sobrien
15898944Sobrienexec > new-gdb-events.h
15998944Sobriencopyright
16098944Sobriencat <<EOF
16198944Sobrien
16298944Sobrien#ifndef GDB_EVENTS_H
16398944Sobrien#define GDB_EVENTS_H
16498944Sobrien
16598944Sobrien#ifndef WITH_GDB_EVENTS
16698944Sobrien#define WITH_GDB_EVENTS 1
16798944Sobrien#endif
16898944SobrienEOF
16998944Sobrien
17098944Sobrien# pointer declarations
17198944Sobrienecho ""
17298944Sobrienecho ""
17398944Sobriencat <<EOF
17498944Sobrien/* COMPAT: pointer variables for old, unconverted events.
17598944Sobrien   A call to set_gdb_events() will automatically update these. */
17698944SobrienEOF
17798944Sobrienecho ""
17898944Sobrienfunction_list | while eval read $read
17998944Sobriendo
18098944Sobrien  case "${class}" in
18198944Sobrien    "*" )
18298944Sobrien	echo "extern ${returntype} (*${function}_event) (${formal})${attrib};"
18398944Sobrien	;;
18498944Sobrien  esac
18598944Sobriendone
18698944Sobrien
18798944Sobrien# function typedef's
18898944Sobrienecho ""
18998944Sobrienecho ""
19098944Sobriencat <<EOF
19198944Sobrien/* Type definition of all hook functions.
19298944Sobrien   Recommended pratice is to first declare each hook function using
19398944Sobrien   the below ftype and then define it. */
19498944SobrienEOF
19598944Sobrienecho ""
19698944Sobrienfunction_list | while eval read $read
19798944Sobriendo
19898944Sobrien  echo "typedef ${returntype} (gdb_events_${function}_ftype) (${formal});"
19998944Sobriendone
20098944Sobrien
20198944Sobrien# gdb_events object
20298944Sobrienecho ""
20398944Sobrienecho ""
20498944Sobriencat <<EOF
20598944Sobrien/* gdb-events: object. */
20698944SobrienEOF
20798944Sobrienecho ""
20898944Sobrienecho "struct gdb_events"
20998944Sobrienecho "  {"
21098944Sobrienfunction_list | while eval read $read
21198944Sobriendo
21298944Sobrien  echo "    gdb_events_${function}_ftype *${function}${attrib};"
21398944Sobriendone
21498944Sobrienecho "  };"
21598944Sobrien
21698944Sobrien# function declarations
21798944Sobrienecho ""
21898944Sobrienecho ""
21998944Sobriencat <<EOF
22098944Sobrien/* Interface into events functions.
22198944Sobrien   Where a *_p() predicate is present, it must be called before
22298944Sobrien   calling the hook proper. */
22398944SobrienEOF
22498944Sobrienfunction_list | while eval read $read
22598944Sobriendo
22698944Sobrien  case "${class}" in
22798944Sobrien    "*" ) continue ;;
22898944Sobrien    "?" )
22998944Sobrien	echo "extern int ${function}_p (void);"
23098944Sobrien        echo "extern ${returntype} ${function}_event (${formal})${attrib};"
23198944Sobrien	;;
23298944Sobrien    "f" )
23398944Sobrien	echo "extern ${returntype} ${function}_event (${formal})${attrib};"
23498944Sobrien	;;
23598944Sobrien  esac
23698944Sobriendone
23798944Sobrien
23898944Sobrien# function macros
23998944Sobrienecho ""
24098944Sobrienecho ""
24198944Sobriencat <<EOF
242130803Smarcel/* When GDB_EVENTS are not being used, completely disable them. */
24398944SobrienEOF
24498944Sobrienecho ""
24598944Sobrienecho "#if !WITH_GDB_EVENTS"
24698944Sobrienfunction_list | while eval read $read
24798944Sobriendo
24898944Sobrien  case "${class}" in
24998944Sobrien    "*" ) continue ;;
25098944Sobrien    "?" )
25198944Sobrien	echo "#define ${function}_event_p() 0"
25298944Sobrien	echo "#define ${function}_event(${actual}) 0"
25398944Sobrien	;;
25498944Sobrien    "f" )
25598944Sobrien	echo "#define ${function}_event(${actual}) 0"
25698944Sobrien	;;
25798944Sobrien  esac
25898944Sobriendone
25998944Sobrienecho "#endif"
26098944Sobrien
26198944Sobrien# our set function
26298944Sobriencat <<EOF
26398944Sobrien
26498944Sobrien/* Install custom gdb-events hooks. */
26598944Sobrienextern struct gdb_events *set_gdb_event_hooks (struct gdb_events *vector);
26698944Sobrien
26798944Sobrien/* Deliver any pending events. */
26898944Sobrienextern void gdb_events_deliver (struct gdb_events *vector);
26998944Sobrien
270130803Smarcel/* Clear event handlers */
271130803Smarcelextern void clear_gdb_event_hooks (void);
272130803Smarcel
27398944Sobrien#if !WITH_GDB_EVENTS
27498944Sobrien#define set_gdb_events(x) 0
27598944Sobrien#define set_gdb_event_hooks(x) 0
27698944Sobrien#define gdb_events_deliver(x) 0
27798944Sobrien#endif
27898944SobrienEOF
27998944Sobrien
28098944Sobrien# close it off
28198944Sobrienecho ""
28298944Sobrienecho "#endif"
28398944Sobrienexec 1>&2
28498944Sobrien#../move-if-change new-gdb-events.h gdb-events.h
28598944Sobrienif test -r gdb-events.h
28698944Sobrienthen
28798944Sobrien  diff -c gdb-events.h new-gdb-events.h
28898944Sobrien  if [ $? = 1 ]
28998944Sobrien  then
29098944Sobrien    echo "gdb-events.h changed? cp new-gdb-events.h gdb-events.h" 1>&2
29198944Sobrien  fi
29298944Sobrienelse
29398944Sobrien  echo "File missing? mv new-gdb-events.h gdb-events.h" 1>&2
29498944Sobrienfi
29598944Sobrien
29698944Sobrien
29798944Sobrien
29898944Sobrien#
29998944Sobrien# C file
30098944Sobrien#
30198944Sobrien
30298944Sobrienexec > new-gdb-events.c
30398944Sobriencopyright
30498944Sobriencat <<EOF
30598944Sobrien
30698944Sobrien#include "defs.h"
30798944Sobrien#include "gdb-events.h"
30898944Sobrien#include "gdbcmd.h"
30998944Sobrien
31098944Sobrien#if WITH_GDB_EVENTS
31198944Sobrienstatic struct gdb_events null_event_hooks;
31298944Sobrienstatic struct gdb_events queue_event_hooks;
31398944Sobrienstatic struct gdb_events *current_event_hooks = &null_event_hooks;
31498944Sobrien#endif
31598944Sobrien
31698944Sobrienint gdb_events_debug;
31798944SobrienEOF
31898944Sobrien
31998944Sobrien# global pointer variables - always have this
32098944Sobrien#echo ""
32198944Sobrien#function_list | while eval read $read
32298944Sobrien#do
32398944Sobrien#  case "${class}" in
32498944Sobrien#    "*" )
32598944Sobrien#	echo "${returntype} (*${function}_event) (${formal})${attrib} = 0;"
32698944Sobrien#	;;
32798944Sobrien#  esac
32898944Sobrien#done
32998944Sobrien
33098944Sobrien# function bodies
33198944Sobrienecho ""
33298944Sobrienecho "#if WITH_GDB_EVENTS"
33398944Sobrienfunction_list | while eval read $read
33498944Sobriendo
33598944Sobrien  case "${class}" in
33698944Sobrien    "*" ) continue ;;
33798944Sobrien    "?" )
33898944Sobriencat <<EOF
33998944Sobrien
34098944Sobrienint
34198944Sobrien${function}_event_p (${formal})
34298944Sobrien{
34398944Sobrien  return current_event_hooks->${function};
34498944Sobrien}
34598944Sobrien
34698944Sobrien${returntype}
34798944Sobrien${function}_event (${formal})
34898944Sobrien{
34998944Sobrien  return current_events->${function} (${actual});
35098944Sobrien}
35198944SobrienEOF
35298944Sobrien	;;
35398944Sobrien     "f" )
35498944Sobriencat <<EOF
35598944Sobrien
35698944Sobrienvoid
35798944Sobrien${function}_event (${formal})
35898944Sobrien{
35998944Sobrien  if (gdb_events_debug)
36098944Sobrien    fprintf_unfiltered (gdb_stdlog, "${function}_event\n");
36198944Sobrien  if (!current_event_hooks->${function})
36298944Sobrien    return;
36398944Sobrien  current_event_hooks->${function} (${actual});
36498944Sobrien}
36598944SobrienEOF
36698944Sobrien	;;
36798944Sobrien  esac
36898944Sobriendone
36998944Sobrienecho ""
37098944Sobrienecho "#endif"
37198944Sobrien
37298944Sobrien# Set hooks function
37398944Sobrienecho ""
37498944Sobriencat <<EOF
37598944Sobrien#if WITH_GDB_EVENTS
37698944Sobrienstruct gdb_events *
37798944Sobrienset_gdb_event_hooks (struct gdb_events *vector)
37898944Sobrien{
37998944Sobrien  struct gdb_events *old_events = current_event_hooks;
38098944Sobrien  if (vector == NULL)
38198944Sobrien    current_event_hooks = &queue_event_hooks;
38298944Sobrien  else
38398944Sobrien    current_event_hooks = vector;
38498944Sobrien  return old_events;
38598944SobrienEOF
38698944Sobrienfunction_list | while eval read $read
38798944Sobriendo
38898944Sobrien  case "${class}" in
38998944Sobrien    "*" )
39098944Sobrien      echo "  ${function}_event = hooks->${function};"
39198944Sobrien      ;;
39298944Sobrien  esac
39398944Sobriendone
39498944Sobriencat <<EOF
39598944Sobrien}
39698944Sobrien#endif
39798944SobrienEOF
39898944Sobrien
399130803Smarcel# Clear hooks function
400130803Smarcelecho ""
401130803Smarcelcat <<EOF
402130803Smarcel#if WITH_GDB_EVENTS
403130803Smarcelvoid
404130803Smarcelclear_gdb_event_hooks (void)
405130803Smarcel{
406130803Smarcel  set_gdb_event_hooks (&null_event_hooks);
407130803Smarcel}
408130803Smarcel#endif
409130803SmarcelEOF
410130803Smarcel
41198944Sobrien# event type
41298944Sobrienecho ""
41398944Sobriencat <<EOF
41498944Sobrienenum gdb_event
41598944Sobrien{
41698944SobrienEOF
41798944Sobrienfunction_list | while eval read $read
41898944Sobriendo
41998944Sobrien  case "${class}" in
42098944Sobrien    "f" )
42198944Sobrien      echo "  ${function},"
42298944Sobrien      ;;
42398944Sobrien  esac
42498944Sobriendone
42598944Sobriencat <<EOF
42698944Sobrien  nr_gdb_events
42798944Sobrien};
42898944SobrienEOF
42998944Sobrien
43098944Sobrien# event data
43198944Sobrienecho ""
43298944Sobrienfunction_list | while eval read $read
43398944Sobriendo
43498944Sobrien  case "${class}" in
43598944Sobrien    "f" )
43698944Sobrien      if test ${actual}
43798944Sobrien      then
43898944Sobrien        echo "struct ${function}"
43998944Sobrien        echo "  {"
44098944Sobrien        echo "    `echo ${formal} | tr '[,]' '[;]'`;"
44198944Sobrien        echo "  };"
44298944Sobrien        echo ""
44398944Sobrien      fi
44498944Sobrien      ;;
44598944Sobrien  esac
44698944Sobriendone
44798944Sobrien
44898944Sobrien# event queue
44998944Sobriencat <<EOF
45098944Sobrienstruct event
45198944Sobrien  {
45298944Sobrien    enum gdb_event type;
45398944Sobrien    struct event *next;
45498944Sobrien    union
45598944Sobrien      {
45698944SobrienEOF
45798944Sobrienfunction_list | while eval read $read
45898944Sobriendo
45998944Sobrien  case "${class}" in
46098944Sobrien    "f" )
46198944Sobrien      if test ${actual}
46298944Sobrien      then
46398944Sobrien        echo "        struct ${function} ${function};"
46498944Sobrien      fi
46598944Sobrien      ;;
46698944Sobrien  esac
46798944Sobriendone
46898944Sobriencat <<EOF
46998944Sobrien      }
47098944Sobrien    data;
47198944Sobrien  };
47298944Sobrienstruct event *pending_events;
47398944Sobrienstruct event *delivering_events;
47498944SobrienEOF
47598944Sobrien
47698944Sobrien# append
47798944Sobrienecho ""
47898944Sobriencat <<EOF
47998944Sobrienstatic void
48098944Sobrienappend (struct event *new_event)
48198944Sobrien{
48298944Sobrien  struct event **event = &pending_events;
48398944Sobrien  while ((*event) != NULL)
48498944Sobrien    event = &((*event)->next);
48598944Sobrien  (*event) = new_event;
48698944Sobrien  (*event)->next = NULL;
48798944Sobrien}
48898944SobrienEOF
48998944Sobrien
49098944Sobrien# schedule a given event
49198944Sobrienfunction_list | while eval read $read
49298944Sobriendo
49398944Sobrien  case "${class}" in
49498944Sobrien    "f" )
49598944Sobrien      echo ""
49698944Sobrien      echo "static void"
49798944Sobrien      echo "queue_${function} (${formal})"
49898944Sobrien      echo "{"
49998944Sobrien      echo "  struct event *event = XMALLOC (struct event);"
50098944Sobrien      echo "  event->type = ${function};"
50198944Sobrien      for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
50298944Sobrien        echo "  event->data.${function}.${arg} = ${arg};"
50398944Sobrien      done
50498944Sobrien      echo "  append (event);"
50598944Sobrien      echo "}"
50698944Sobrien      ;;
50798944Sobrien  esac
50898944Sobriendone
50998944Sobrien
51098944Sobrien# deliver
51198944Sobrienecho ""
51298944Sobriencat <<EOF
51398944Sobrienvoid
51498944Sobriengdb_events_deliver (struct gdb_events *vector)
51598944Sobrien{
51698944Sobrien  /* Just zap any events left around from last time. */
51798944Sobrien  while (delivering_events != NULL)
51898944Sobrien    {
51998944Sobrien      struct event *event = delivering_events;
52098944Sobrien      delivering_events = event->next;
52198944Sobrien      xfree (event);
52298944Sobrien    }
52398944Sobrien  /* Process any pending events.  Because one of the deliveries could
52498944Sobrien     bail out we move everything off of the pending queue onto an
52598944Sobrien     in-progress queue where it can, later, be cleaned up if
52698944Sobrien     necessary. */
52798944Sobrien  delivering_events = pending_events;
52898944Sobrien  pending_events = NULL;
52998944Sobrien  while (delivering_events != NULL)
53098944Sobrien    {
53198944Sobrien      struct event *event = delivering_events;
53298944Sobrien      switch (event->type)
53398944Sobrien        {
53498944SobrienEOF
53598944Sobrienfunction_list | while eval read $read
53698944Sobriendo
53798944Sobrien  case "${class}" in
53898944Sobrien    "f" )
53998944Sobrien      echo "        case ${function}:"
54098944Sobrien      if test ${actual}
54198944Sobrien      then
54298944Sobrien        echo "          vector->${function}"
54398944Sobrien        sep="            ("
54498944Sobrien        ass=""
54598944Sobrien        for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
54698944Sobrien          ass="${ass}${sep}event->data.${function}.${arg}"
54798944Sobrien	  sep=",
54898944Sobrien               "
54998944Sobrien        done
55098944Sobrien        echo "${ass});"
55198944Sobrien      else
55298944Sobrien        echo "          vector->${function} ();"
55398944Sobrien      fi
55498944Sobrien      echo "          break;"
55598944Sobrien      ;;
55698944Sobrien  esac
55798944Sobriendone
55898944Sobriencat <<EOF
55998944Sobrien        }
56098944Sobrien      delivering_events = event->next;
56198944Sobrien      xfree (event);
56298944Sobrien    }
56398944Sobrien}
56498944SobrienEOF
56598944Sobrien
56698944Sobrien# Finally the initialization
56798944Sobrienecho ""
56898944Sobriencat <<EOF
56998944Sobrienvoid _initialize_gdb_events (void);
57098944Sobrienvoid
57198944Sobrien_initialize_gdb_events (void)
57298944Sobrien{
57398944Sobrien  struct cmd_list_element *c;
57498944Sobrien#if WITH_GDB_EVENTS
57598944SobrienEOF
57698944Sobrienfunction_list | while eval read $read
57798944Sobriendo
57898944Sobrien  case "${class}" in
57998944Sobrien    "f" )
58098944Sobrien      echo "  queue_event_hooks.${function} = queue_${function};"
58198944Sobrien      ;;
58298944Sobrien  esac
58398944Sobriendone
58498944Sobriencat <<EOF
58598944Sobrien#endif
58698944Sobrien
58798944Sobrien  c = add_set_cmd ("eventdebug", class_maintenance, var_zinteger,
58898944Sobrien		   (char *) (&gdb_events_debug), "Set event debugging.\n\\
58998944SobrienWhen non-zero, event/notify debugging is enabled.", &setlist);
59098944Sobrien  deprecate_cmd (c, "set debug event");
59198944Sobrien  deprecate_cmd (add_show_from_set (c, &showlist), "show debug event");
59298944Sobrien
59398944Sobrien  add_show_from_set (add_set_cmd ("event",
59498944Sobrien                                  class_maintenance,
59598944Sobrien                                  var_zinteger,
59698944Sobrien                                  (char *) (&gdb_events_debug),
59798944Sobrien                                  "Set event debugging.\n\\
59898944SobrienWhen non-zero, event/notify debugging is enabled.", &setdebuglist),
59998944Sobrien		     &showdebuglist);
60098944Sobrien}
60198944SobrienEOF
60298944Sobrien
60398944Sobrien# close things off
60498944Sobrienexec 1>&2
60598944Sobrien#../move-if-change new-gdb-events.c gdb-events.c
60698944Sobrien# Replace any leading spaces with tabs
60798944Sobriensed < new-gdb-events.c > tmp-gdb-events.c \
60898944Sobrien    -e 's/\(	\)*        /\1	/g'
60998944Sobrienmv tmp-gdb-events.c new-gdb-events.c
61098944Sobrien# Move if changed?
61198944Sobrienif test -r gdb-events.c
61298944Sobrienthen
61398944Sobrien  diff -c gdb-events.c new-gdb-events.c
61498944Sobrien  if [ $? = 1 ]
61598944Sobrien  then
61698944Sobrien    echo "gdb-events.c changed? cp new-gdb-events.c gdb-events.c" 1>&2
61798944Sobrien  fi
61898944Sobrienelse
61998944Sobrien  echo "File missing? mv new-gdb-events.c gdb-events.c" 1>&2
62098944Sobrienfi
621