No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / gdb6 / gdb / observer.sh
blobdde2ad2a4034b1ead447ca62d3ab2e389eb792a0
1 #!/bin/sh -e
3 if test $# -ne 3
4 then
5 echo "Usage: $0 <h|inc> <observer.texi> <observer.out>" 1>&2
6 exit 0
7 fi
9 lang=$1 ; shift
10 texi=$1 ; shift
11 o=$1
12 case $lang in
13 h) tmp=htmp ;;
14 inc) tmp=itmp ;;
15 esac
16 otmp="`echo $1 | sed -e 's,\.[^.]*$,,'`.$tmp"; shift
17 echo "Creating ${otmp}" 1>&2
18 rm -f ${otmp}
20 # Can use any of the following: cat cmp cp diff echo egrep expr false
21 # grep install-info ln ls mkdir mv pwd rm rmdir sed sleep sort tar
22 # test touch true
24 cat <<EOF >>${otmp}
25 /* GDB Notifications to Observers.
27 Copyright (C) 2004, 2005 Free Software Foundation, Inc.
29 This file is part of GDB.
31 This program is free software; you can redistribute it and/or modify
32 it under the terms of the GNU General Public License as published by
33 the Free Software Foundation; either version 2 of the License, or
34 (at your option) any later version.
36 This program is distributed in the hope that it will be useful,
37 but WITHOUT ANY WARRANTY; without even the implied warranty of
38 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39 GNU General Public License for more details.
41 You should have received a copy of the GNU General Public License
42 along with this program; if not, write to the Free Software
43 Foundation, Inc., 51 Franklin Street, Fifth Floor,
44 Boston, MA 02110-1301, USA.
48 This file was generated using observer.sh and observer.texi. */
50 EOF
53 case $lang in
54 h) cat <<EOF >>${otmp}
55 #ifndef OBSERVER_H
56 #define OBSERVER_H
58 struct observer;
59 struct bpstats;
60 struct so_list;
61 EOF
63 esac
65 # We are about to set IFS=:, so DOS-style file names with a drive
66 # letter and a colon will be in trouble.
68 if test -n "$DJGPP"
69 then
70 texi=`echo $texi | sed -e 's,^\([a-zA-Z]\):/,/dev/\1/,'`
73 # generate a list of events that can be observed
75 IFS=:
76 sed -n '
77 /@deftypefun void/{
78 # Save original line for later processing into the actual parameter
80 # Convert from: @deftypefun void EVENT (TYPE @var{PARAM},...)
81 # to event and formals: EVENT:TYPE PARAM, ...:
82 s/^.* void \([a-z_][a-z_]*\) (\(.*\))$/\1:\2/
83 s/@var{//g
84 s/}//g
85 # Switch to held
87 # Convert from: @deftypefun void FUNC (TYPE @var{PARAM},...)
88 # to actuals: PARAM, ...
89 s/^[^{]*[{]*//
90 s/[}]*[^}]*$//
91 s/}[^{]*{/, /g
92 # Combine held (EVENT:TYPE PARAM, ...:) and pattern (PARAM, ...) into
93 # FUNC:TYPE PARAM, ...:PARAM, ...
96 s/\n/:/g
99 ' $texi | while read event formal actual
101 case $lang in
102 h) cat <<EOF >>${otmp}
104 /* ${event} notifications. */
106 typedef void (observer_${event}_ftype) (${formal});
108 extern struct observer *observer_attach_${event} (observer_${event}_ftype *f);
109 extern void observer_detach_${event} (struct observer *observer);
110 extern void observer_notify_${event} (${formal});
114 inc)
115 cat <<EOF >>${otmp}
117 /* ${event} notifications. */
119 static struct observer_list *${event}_subject = NULL;
121 struct ${event}_args { `echo "${formal}" | sed -e 's/,/;/g'`; };
123 static void
124 observer_${event}_notification_stub (const void *data, const void *args_data)
126 observer_${event}_ftype *notify = (observer_${event}_ftype *) data;
127 const struct ${event}_args *args = args_data;
128 notify (`echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args->\1/g'`);
131 struct observer *
132 observer_attach_${event} (observer_${event}_ftype *f)
134 return generic_observer_attach (&${event}_subject,
135 &observer_${event}_notification_stub,
136 (void *) f);
139 void
140 observer_detach_${event} (struct observer *observer)
142 generic_observer_detach (&${event}_subject, observer);
145 void
146 observer_notify_${event} (${formal})
148 struct ${event}_args args;
149 `echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args.\1 = \1/g'`;
150 if (observer_debug)
151 fprintf_unfiltered (gdb_stdlog, "observer_notify_${event}() called\n");
152 generic_observer_notify (${event}_subject, &args);
156 esac
157 done
160 case $lang in
161 h) cat <<EOF >>${otmp}
163 #endif /* OBSERVER_H */
165 esac
168 echo Moving ${otmp} to ${o}
169 mv ${otmp} ${o}