xref: /openbsd-src/gnu/usr.bin/binutils/gdb/gdb-events.sh (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1b725ae77Skettenis#!/bin/sh
2b725ae77Skettenis
3b725ae77Skettenis# User Interface Events.
4b725ae77Skettenis# Copyright 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
5b725ae77Skettenis#
6b725ae77Skettenis# Contributed by Cygnus Solutions.
7b725ae77Skettenis#
8b725ae77Skettenis# This file is part of GDB.
9b725ae77Skettenis#
10b725ae77Skettenis# This program is free software; you can redistribute it and/or modify
11b725ae77Skettenis# it under the terms of the GNU General Public License as published by
12b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or
13b725ae77Skettenis# (at your option) any later version.
14b725ae77Skettenis#
15b725ae77Skettenis# This program is distributed in the hope that it will be useful,
16b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of
17b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18b725ae77Skettenis# GNU General Public License for more details.
19b725ae77Skettenis#
20b725ae77Skettenis# You should have received a copy of the GNU General Public License
21b725ae77Skettenis# along with this program; if not, write to the Free Software
22b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23b725ae77Skettenis
24b725ae77SkettenisIFS=:
25b725ae77Skettenis
26b725ae77Skettenisread="class returntype function formal actual attrib"
27b725ae77Skettenis
28b725ae77Skettenisfunction_list ()
29b725ae77Skettenis{
30b725ae77Skettenis  # category:
31b725ae77Skettenis  #        # -> disable
32b725ae77Skettenis  #        * -> compatibility - pointer variable that is initialized
33b725ae77Skettenis  #             by set_gdb_events().
34b725ae77Skettenis  #        ? -> Predicate and function proper.
35b725ae77Skettenis  #        f -> always call (must have a void returntype)
36b725ae77Skettenis  # return-type
37b725ae77Skettenis  # name
38b725ae77Skettenis  # formal argument list
39b725ae77Skettenis  # actual argument list
40b725ae77Skettenis  # attributes
41b725ae77Skettenis  # description
42b725ae77Skettenis  cat <<EOF |
43b725ae77Skettenisf:void:breakpoint_create:int b:b
44b725ae77Skettenisf:void:breakpoint_delete:int b:b
45b725ae77Skettenisf:void:breakpoint_modify:int b:b
46b725ae77Skettenisf:void:tracepoint_create:int number:number
47b725ae77Skettenisf:void:tracepoint_delete:int number:number
48b725ae77Skettenisf:void:tracepoint_modify:int number:number
49b725ae77Skettenisf:void:architecture_changed:void
50b725ae77SkettenisEOF
51b725ae77Skettenis  grep -v '^#'
52b725ae77Skettenis}
53b725ae77Skettenis
54b725ae77Sketteniscopyright ()
55b725ae77Skettenis{
56b725ae77Skettenis  cat <<EOF
57b725ae77Skettenis/* User Interface Events.
58b725ae77Skettenis
59*11efff7fSkettenis   Copyright 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
60b725ae77Skettenis
61b725ae77Skettenis   Contributed by Cygnus Solutions.
62b725ae77Skettenis
63b725ae77Skettenis   This file is part of GDB.
64b725ae77Skettenis
65b725ae77Skettenis   This program is free software; you can redistribute it and/or modify
66b725ae77Skettenis   it under the terms of the GNU General Public License as published by
67b725ae77Skettenis   the Free Software Foundation; either version 2 of the License, or
68b725ae77Skettenis   (at your option) any later version.
69b725ae77Skettenis
70b725ae77Skettenis   This program is distributed in the hope that it will be useful,
71b725ae77Skettenis   but WITHOUT ANY WARRANTY; without even the implied warranty of
72b725ae77Skettenis   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
73b725ae77Skettenis   GNU General Public License for more details.
74b725ae77Skettenis
75b725ae77Skettenis   You should have received a copy of the GNU General Public License
76b725ae77Skettenis   along with this program; if not, write to the Free Software
77b725ae77Skettenis   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
78b725ae77Skettenis
79b725ae77Skettenis/* Work in progress */
80b725ae77Skettenis
81b725ae77Skettenis/* This file was created with the aid of \`\`gdb-events.sh''.
82b725ae77Skettenis
83b725ae77Skettenis   The bourn shell script \`\`gdb-events.sh'' creates the files
84b725ae77Skettenis   \`\`new-gdb-events.c'' and \`\`new-gdb-events.h and then compares
85b725ae77Skettenis   them against the existing \`\`gdb-events.[hc]''.  Any differences
86b725ae77Skettenis   found being reported.
87b725ae77Skettenis
88b725ae77Skettenis   If editing this file, please also run gdb-events.sh and merge any
89b725ae77Skettenis   changes into that script. Conversely, when making sweeping changes
90b725ae77Skettenis   to this file, modifying gdb-events.sh and using its output may
91b725ae77Skettenis   prove easier. */
92b725ae77Skettenis
93b725ae77SkettenisEOF
94b725ae77Skettenis}
95b725ae77Skettenis
96b725ae77Skettenis#
97b725ae77Skettenis# The .h file
98b725ae77Skettenis#
99b725ae77Skettenis
100b725ae77Skettenisexec > new-gdb-events.h
101b725ae77Sketteniscopyright
102b725ae77Sketteniscat <<EOF
103b725ae77Skettenis
104b725ae77Skettenis#ifndef GDB_EVENTS_H
105b725ae77Skettenis#define GDB_EVENTS_H
106b725ae77SkettenisEOF
107b725ae77Skettenis
108b725ae77Skettenis# pointer declarations
109b725ae77Skettenisecho ""
110b725ae77Skettenisecho ""
111b725ae77Sketteniscat <<EOF
112b725ae77Skettenis/* COMPAT: pointer variables for old, unconverted events.
113b725ae77Skettenis   A call to set_gdb_events() will automatically update these. */
114b725ae77SkettenisEOF
115b725ae77Skettenisecho ""
116b725ae77Skettenisfunction_list | while eval read $read
117b725ae77Skettenisdo
118b725ae77Skettenis  case "${class}" in
119b725ae77Skettenis    "*" )
120b725ae77Skettenis	echo "extern ${returntype} (*${function}_event) (${formal})${attrib};"
121b725ae77Skettenis	;;
122b725ae77Skettenis  esac
123b725ae77Skettenisdone
124b725ae77Skettenis
125b725ae77Skettenis# function typedef's
126b725ae77Skettenisecho ""
127b725ae77Skettenisecho ""
128b725ae77Sketteniscat <<EOF
129b725ae77Skettenis/* Type definition of all hook functions.
130b725ae77Skettenis   Recommended pratice is to first declare each hook function using
131b725ae77Skettenis   the below ftype and then define it. */
132b725ae77SkettenisEOF
133b725ae77Skettenisecho ""
134b725ae77Skettenisfunction_list | while eval read $read
135b725ae77Skettenisdo
136b725ae77Skettenis  echo "typedef ${returntype} (gdb_events_${function}_ftype) (${formal});"
137b725ae77Skettenisdone
138b725ae77Skettenis
139b725ae77Skettenis# gdb_events object
140b725ae77Skettenisecho ""
141b725ae77Skettenisecho ""
142b725ae77Sketteniscat <<EOF
143b725ae77Skettenis/* gdb-events: object. */
144b725ae77SkettenisEOF
145b725ae77Skettenisecho ""
146b725ae77Skettenisecho "struct gdb_events"
147b725ae77Skettenisecho "  {"
148b725ae77Skettenisfunction_list | while eval read $read
149b725ae77Skettenisdo
150b725ae77Skettenis  echo "    gdb_events_${function}_ftype *${function}${attrib};"
151b725ae77Skettenisdone
152b725ae77Skettenisecho "  };"
153b725ae77Skettenis
154b725ae77Skettenis# function declarations
155b725ae77Skettenisecho ""
156b725ae77Skettenisecho ""
157b725ae77Sketteniscat <<EOF
158b725ae77Skettenis/* Interface into events functions.
159b725ae77Skettenis   Where a *_p() predicate is present, it must be called before
160b725ae77Skettenis   calling the hook proper. */
161b725ae77SkettenisEOF
162b725ae77Skettenisfunction_list | while eval read $read
163b725ae77Skettenisdo
164b725ae77Skettenis  case "${class}" in
165b725ae77Skettenis    "*" ) continue ;;
166b725ae77Skettenis    "?" )
167b725ae77Skettenis	echo "extern int ${function}_p (void);"
168b725ae77Skettenis        echo "extern ${returntype} ${function}_event (${formal})${attrib};"
169b725ae77Skettenis	;;
170b725ae77Skettenis    "f" )
171b725ae77Skettenis	echo "extern ${returntype} ${function}_event (${formal})${attrib};"
172b725ae77Skettenis	;;
173b725ae77Skettenis  esac
174b725ae77Skettenisdone
175b725ae77Skettenis
176b725ae77Skettenis# our set function
177b725ae77Sketteniscat <<EOF
178b725ae77Skettenis
179b725ae77Skettenis/* Install custom gdb-events hooks. */
180*11efff7fSkettenisextern struct gdb_events *deprecated_set_gdb_event_hooks (struct gdb_events *vector);
181b725ae77Skettenis
182b725ae77Skettenis/* Deliver any pending events. */
183b725ae77Skettenisextern void gdb_events_deliver (struct gdb_events *vector);
184b725ae77Skettenis
185b725ae77Skettenis/* Clear event handlers */
186b725ae77Skettenisextern void clear_gdb_event_hooks (void);
187b725ae77SkettenisEOF
188b725ae77Skettenis
189b725ae77Skettenis# close it off
190b725ae77Skettenisecho ""
191b725ae77Skettenisecho "#endif"
192b725ae77Skettenisexec 1>&2
193b725ae77Skettenis#../move-if-change new-gdb-events.h gdb-events.h
194b725ae77Skettenisif test -r gdb-events.h
195b725ae77Skettenisthen
196b725ae77Skettenis  diff -c gdb-events.h new-gdb-events.h
197b725ae77Skettenis  if [ $? = 1 ]
198b725ae77Skettenis  then
199b725ae77Skettenis    echo "gdb-events.h changed? cp new-gdb-events.h gdb-events.h" 1>&2
200b725ae77Skettenis  fi
201b725ae77Sketteniselse
202b725ae77Skettenis  echo "File missing? mv new-gdb-events.h gdb-events.h" 1>&2
203b725ae77Skettenisfi
204b725ae77Skettenis
205b725ae77Skettenis
206b725ae77Skettenis
207b725ae77Skettenis#
208b725ae77Skettenis# C file
209b725ae77Skettenis#
210b725ae77Skettenis
211b725ae77Skettenisexec > new-gdb-events.c
212b725ae77Sketteniscopyright
213b725ae77Sketteniscat <<EOF
214b725ae77Skettenis
215b725ae77Skettenis#include "defs.h"
216b725ae77Skettenis#include "gdb-events.h"
217b725ae77Skettenis#include "gdbcmd.h"
218b725ae77Skettenis
219b725ae77Skettenisstatic struct gdb_events null_event_hooks;
220b725ae77Skettenisstatic struct gdb_events queue_event_hooks;
221b725ae77Skettenisstatic struct gdb_events *current_event_hooks = &null_event_hooks;
222b725ae77Skettenis
223b725ae77Skettenisint gdb_events_debug;
224b725ae77SkettenisEOF
225b725ae77Skettenis
226b725ae77Skettenis# function bodies
227b725ae77Skettenisfunction_list | while eval read $read
228b725ae77Skettenisdo
229b725ae77Skettenis  case "${class}" in
230b725ae77Skettenis    "*" ) continue ;;
231b725ae77Skettenis    "?" )
232b725ae77Sketteniscat <<EOF
233b725ae77Skettenis
234b725ae77Skettenisint
235b725ae77Skettenis${function}_event_p (${formal})
236b725ae77Skettenis{
237b725ae77Skettenis  return current_event_hooks->${function};
238b725ae77Skettenis}
239b725ae77Skettenis
240b725ae77Skettenis${returntype}
241b725ae77Skettenis${function}_event (${formal})
242b725ae77Skettenis{
243b725ae77Skettenis  return current_events->${function} (${actual});
244b725ae77Skettenis}
245b725ae77SkettenisEOF
246b725ae77Skettenis	;;
247b725ae77Skettenis     "f" )
248b725ae77Sketteniscat <<EOF
249b725ae77Skettenis
250b725ae77Skettenisvoid
251b725ae77Skettenis${function}_event (${formal})
252b725ae77Skettenis{
253b725ae77Skettenis  if (gdb_events_debug)
254b725ae77Skettenis    fprintf_unfiltered (gdb_stdlog, "${function}_event\n");
255b725ae77Skettenis  if (!current_event_hooks->${function})
256b725ae77Skettenis    return;
257b725ae77Skettenis  current_event_hooks->${function} (${actual});
258b725ae77Skettenis}
259b725ae77SkettenisEOF
260b725ae77Skettenis	;;
261b725ae77Skettenis  esac
262b725ae77Skettenisdone
263b725ae77Skettenis
264b725ae77Skettenis# Set hooks function
265b725ae77Skettenisecho ""
266b725ae77Sketteniscat <<EOF
267b725ae77Skettenisstruct gdb_events *
268*11efff7fSkettenisdeprecated_set_gdb_event_hooks (struct gdb_events *vector)
269b725ae77Skettenis{
270b725ae77Skettenis  struct gdb_events *old_events = current_event_hooks;
271b725ae77Skettenis  if (vector == NULL)
272b725ae77Skettenis    current_event_hooks = &queue_event_hooks;
273b725ae77Skettenis  else
274b725ae77Skettenis    current_event_hooks = vector;
275b725ae77Skettenis  return old_events;
276b725ae77SkettenisEOF
277b725ae77Skettenisfunction_list | while eval read $read
278b725ae77Skettenisdo
279b725ae77Skettenis  case "${class}" in
280b725ae77Skettenis    "*" )
281b725ae77Skettenis      echo "  ${function}_event = hooks->${function};"
282b725ae77Skettenis      ;;
283b725ae77Skettenis  esac
284b725ae77Skettenisdone
285b725ae77Sketteniscat <<EOF
286b725ae77Skettenis}
287b725ae77SkettenisEOF
288b725ae77Skettenis
289b725ae77Skettenis# Clear hooks function
290b725ae77Skettenisecho ""
291b725ae77Sketteniscat <<EOF
292b725ae77Skettenisvoid
293b725ae77Skettenisclear_gdb_event_hooks (void)
294b725ae77Skettenis{
295*11efff7fSkettenis  deprecated_set_gdb_event_hooks (&null_event_hooks);
296b725ae77Skettenis}
297b725ae77SkettenisEOF
298b725ae77Skettenis
299b725ae77Skettenis# event type
300b725ae77Skettenisecho ""
301b725ae77Sketteniscat <<EOF
302b725ae77Skettenisenum gdb_event
303b725ae77Skettenis{
304b725ae77SkettenisEOF
305b725ae77Skettenisfunction_list | while eval read $read
306b725ae77Skettenisdo
307b725ae77Skettenis  case "${class}" in
308b725ae77Skettenis    "f" )
309b725ae77Skettenis      echo "  ${function},"
310b725ae77Skettenis      ;;
311b725ae77Skettenis  esac
312b725ae77Skettenisdone
313b725ae77Sketteniscat <<EOF
314b725ae77Skettenis  nr_gdb_events
315b725ae77Skettenis};
316b725ae77SkettenisEOF
317b725ae77Skettenis
318b725ae77Skettenis# event data
319b725ae77Skettenisecho ""
320b725ae77Skettenisfunction_list | while eval read $read
321b725ae77Skettenisdo
322b725ae77Skettenis  case "${class}" in
323b725ae77Skettenis    "f" )
324b725ae77Skettenis      if test ${actual}
325b725ae77Skettenis      then
326b725ae77Skettenis        echo "struct ${function}"
327b725ae77Skettenis        echo "  {"
328b725ae77Skettenis        echo "    `echo ${formal} | tr '[,]' '[;]'`;"
329b725ae77Skettenis        echo "  };"
330b725ae77Skettenis        echo ""
331b725ae77Skettenis      fi
332b725ae77Skettenis      ;;
333b725ae77Skettenis  esac
334b725ae77Skettenisdone
335b725ae77Skettenis
336b725ae77Skettenis# event queue
337b725ae77Sketteniscat <<EOF
338b725ae77Skettenisstruct event
339b725ae77Skettenis  {
340b725ae77Skettenis    enum gdb_event type;
341b725ae77Skettenis    struct event *next;
342b725ae77Skettenis    union
343b725ae77Skettenis      {
344b725ae77SkettenisEOF
345b725ae77Skettenisfunction_list | while eval read $read
346b725ae77Skettenisdo
347b725ae77Skettenis  case "${class}" in
348b725ae77Skettenis    "f" )
349b725ae77Skettenis      if test ${actual}
350b725ae77Skettenis      then
351b725ae77Skettenis        echo "        struct ${function} ${function};"
352b725ae77Skettenis      fi
353b725ae77Skettenis      ;;
354b725ae77Skettenis  esac
355b725ae77Skettenisdone
356b725ae77Sketteniscat <<EOF
357b725ae77Skettenis      }
358b725ae77Skettenis    data;
359b725ae77Skettenis  };
360b725ae77Skettenisstruct event *pending_events;
361b725ae77Skettenisstruct event *delivering_events;
362b725ae77SkettenisEOF
363b725ae77Skettenis
364b725ae77Skettenis# append
365b725ae77Skettenisecho ""
366b725ae77Sketteniscat <<EOF
367b725ae77Skettenisstatic void
368b725ae77Skettenisappend (struct event *new_event)
369b725ae77Skettenis{
370b725ae77Skettenis  struct event **event = &pending_events;
371b725ae77Skettenis  while ((*event) != NULL)
372b725ae77Skettenis    event = &((*event)->next);
373b725ae77Skettenis  (*event) = new_event;
374b725ae77Skettenis  (*event)->next = NULL;
375b725ae77Skettenis}
376b725ae77SkettenisEOF
377b725ae77Skettenis
378b725ae77Skettenis# schedule a given event
379b725ae77Skettenisfunction_list | while eval read $read
380b725ae77Skettenisdo
381b725ae77Skettenis  case "${class}" in
382b725ae77Skettenis    "f" )
383b725ae77Skettenis      echo ""
384b725ae77Skettenis      echo "static void"
385b725ae77Skettenis      echo "queue_${function} (${formal})"
386b725ae77Skettenis      echo "{"
387b725ae77Skettenis      echo "  struct event *event = XMALLOC (struct event);"
388b725ae77Skettenis      echo "  event->type = ${function};"
389b725ae77Skettenis      for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
390b725ae77Skettenis        echo "  event->data.${function}.${arg} = ${arg};"
391b725ae77Skettenis      done
392b725ae77Skettenis      echo "  append (event);"
393b725ae77Skettenis      echo "}"
394b725ae77Skettenis      ;;
395b725ae77Skettenis  esac
396b725ae77Skettenisdone
397b725ae77Skettenis
398b725ae77Skettenis# deliver
399b725ae77Skettenisecho ""
400b725ae77Sketteniscat <<EOF
401b725ae77Skettenisvoid
402b725ae77Skettenisgdb_events_deliver (struct gdb_events *vector)
403b725ae77Skettenis{
404b725ae77Skettenis  /* Just zap any events left around from last time. */
405b725ae77Skettenis  while (delivering_events != NULL)
406b725ae77Skettenis    {
407b725ae77Skettenis      struct event *event = delivering_events;
408b725ae77Skettenis      delivering_events = event->next;
409b725ae77Skettenis      xfree (event);
410b725ae77Skettenis    }
411b725ae77Skettenis  /* Process any pending events.  Because one of the deliveries could
412b725ae77Skettenis     bail out we move everything off of the pending queue onto an
413b725ae77Skettenis     in-progress queue where it can, later, be cleaned up if
414b725ae77Skettenis     necessary. */
415b725ae77Skettenis  delivering_events = pending_events;
416b725ae77Skettenis  pending_events = NULL;
417b725ae77Skettenis  while (delivering_events != NULL)
418b725ae77Skettenis    {
419b725ae77Skettenis      struct event *event = delivering_events;
420b725ae77Skettenis      switch (event->type)
421b725ae77Skettenis        {
422b725ae77SkettenisEOF
423b725ae77Skettenisfunction_list | while eval read $read
424b725ae77Skettenisdo
425b725ae77Skettenis  case "${class}" in
426b725ae77Skettenis    "f" )
427b725ae77Skettenis      echo "        case ${function}:"
428b725ae77Skettenis      if test ${actual}
429b725ae77Skettenis      then
430b725ae77Skettenis        echo "          vector->${function}"
431b725ae77Skettenis        sep="            ("
432b725ae77Skettenis        ass=""
433b725ae77Skettenis        for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
434b725ae77Skettenis          ass="${ass}${sep}event->data.${function}.${arg}"
435b725ae77Skettenis	  sep=",
436b725ae77Skettenis               "
437b725ae77Skettenis        done
438b725ae77Skettenis        echo "${ass});"
439b725ae77Skettenis      else
440b725ae77Skettenis        echo "          vector->${function} ();"
441b725ae77Skettenis      fi
442b725ae77Skettenis      echo "          break;"
443b725ae77Skettenis      ;;
444b725ae77Skettenis  esac
445b725ae77Skettenisdone
446b725ae77Sketteniscat <<EOF
447b725ae77Skettenis        }
448b725ae77Skettenis      delivering_events = event->next;
449b725ae77Skettenis      xfree (event);
450b725ae77Skettenis    }
451b725ae77Skettenis}
452b725ae77SkettenisEOF
453b725ae77Skettenis
454b725ae77Skettenis# Finally the initialization
455b725ae77Skettenisecho ""
456b725ae77Sketteniscat <<EOF
457b725ae77Skettenisvoid _initialize_gdb_events (void);
458b725ae77Skettenisvoid
459b725ae77Skettenis_initialize_gdb_events (void)
460b725ae77Skettenis{
461b725ae77Skettenis  struct cmd_list_element *c;
462b725ae77SkettenisEOF
463b725ae77Skettenisfunction_list | while eval read $read
464b725ae77Skettenisdo
465b725ae77Skettenis  case "${class}" in
466b725ae77Skettenis    "f" )
467b725ae77Skettenis      echo "  queue_event_hooks.${function} = queue_${function};"
468b725ae77Skettenis      ;;
469b725ae77Skettenis  esac
470b725ae77Skettenisdone
471b725ae77Sketteniscat <<EOF
472b725ae77Skettenis
473b725ae77Skettenis  c = add_set_cmd ("eventdebug", class_maintenance, var_zinteger,
474b725ae77Skettenis		   (char *) (&gdb_events_debug), "Set event debugging.\n\\
475b725ae77SkettenisWhen non-zero, event/notify debugging is enabled.", &setlist);
476b725ae77Skettenis  deprecate_cmd (c, "set debug event");
477*11efff7fSkettenis  deprecate_cmd (deprecated_add_show_from_set (c, &showlist),
478*11efff7fSkettenis                 "show debug event");
479b725ae77Skettenis
480*11efff7fSkettenis  deprecated_add_show_from_set
481*11efff7fSkettenis    (add_set_cmd ("event",
482b725ae77Skettenis	          class_maintenance,
483b725ae77Skettenis		  var_zinteger,
484b725ae77Skettenis		  (char *) (&gdb_events_debug),
485b725ae77Skettenis		  "Set event debugging.\n\\
486b725ae77SkettenisWhen non-zero, event/notify debugging is enabled.", &setdebuglist),
487b725ae77Skettenis     &showdebuglist);
488b725ae77Skettenis}
489b725ae77SkettenisEOF
490b725ae77Skettenis
491b725ae77Skettenis# close things off
492b725ae77Skettenisexec 1>&2
493b725ae77Skettenis#../move-if-change new-gdb-events.c gdb-events.c
494b725ae77Skettenis# Replace any leading spaces with tabs
495b725ae77Skettenissed < new-gdb-events.c > tmp-gdb-events.c \
496b725ae77Skettenis    -e 's/\(	\)*        /\1	/g'
497b725ae77Skettenismv tmp-gdb-events.c new-gdb-events.c
498b725ae77Skettenis# Move if changed?
499b725ae77Skettenisif test -r gdb-events.c
500b725ae77Skettenisthen
501b725ae77Skettenis  diff -c gdb-events.c new-gdb-events.c
502b725ae77Skettenis  if [ $? = 1 ]
503b725ae77Skettenis  then
504b725ae77Skettenis    echo "gdb-events.c changed? cp new-gdb-events.c gdb-events.c" 1>&2
505b725ae77Skettenis  fi
506b725ae77Sketteniselse
507b725ae77Skettenis  echo "File missing? mv new-gdb-events.c gdb-events.c" 1>&2
508b725ae77Skettenisfi
509