#!/bin/sh
# User Interface Events.
#
# Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008
# Free Software Foundation, Inc.
#
# Contributed by Cygnus Solutions.
#
# This file is part of GDB.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
IFS=:
read="class returntype function formal actual attrib"
function_list ()
{
# category:
# # -> disable
# * -> compatibility - pointer variable that is initialized
# by set_gdb_events().
# ? -> Predicate and function proper.
# f -> always call (must have a void returntype)
# return-type
# name
# formal argument list
# actual argument list
# attributes
# description
cat <. */
/* Work in progress */
/* This file was created with the aid of \`\`gdb-events.sh''.
The bourn shell script \`\`gdb-events.sh'' creates the files
\`\`new-gdb-events.c'' and \`\`new-gdb-events.h and then compares
them against the existing \`\`gdb-events.[hc]''. Any differences
found being reported.
If editing this file, please also run gdb-events.sh and merge any
changes into that script. Conversely, when making sweeping changes
to this file, modifying gdb-events.sh and using its output may
prove easier. */
EOF
}
#
# The .h file
#
exec > new-gdb-events.h
copyright
cat <&2
#../move-if-change new-gdb-events.h gdb-events.h
if test -r gdb-events.h
then
diff -c gdb-events.h new-gdb-events.h
if [ $? = 1 ]
then
echo "gdb-events.h changed? cp new-gdb-events.h gdb-events.h" 1>&2
fi
else
echo "File missing? mv new-gdb-events.h gdb-events.h" 1>&2
fi
#
# C file
#
exec > new-gdb-events.c
copyright
cat <${function};
}
${returntype}
${function}_event (${formal})
{
return current_events->${function} (${actual});
}
EOF
;;
"f" )
cat <${function})
return;
current_event_hooks->${function} (${actual});
}
EOF
;;
esac
done
# Set hooks function
echo ""
cat <${function};"
;;
esac
done
cat <next);
(*event) = new_event;
(*event)->next = NULL;
}
EOF
# schedule a given event
function_list | while eval read $read
do
case "${class}" in
"f" )
echo ""
echo "static void"
echo "queue_${function} (${formal})"
echo "{"
echo " struct event *event = XMALLOC (struct event);"
echo " event->type = ${function};"
for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
echo " event->data.${function}.${arg} = ${arg};"
done
echo " append (event);"
echo "}"
;;
esac
done
# deliver
echo ""
cat <next;
xfree (event);
}
/* Process any pending events. Because one of the deliveries could
bail out we move everything off of the pending queue onto an
in-progress queue where it can, later, be cleaned up if
necessary. */
delivering_events = pending_events;
pending_events = NULL;
while (delivering_events != NULL)
{
struct event *event = delivering_events;
switch (event->type)
{
EOF
function_list | while eval read $read
do
case "${class}" in
"f" )
echo " case ${function}:"
if test ${actual}
then
echo " vector->${function}"
sep=" ("
ass=""
for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
ass="${ass}${sep}event->data.${function}.${arg}"
sep=",
"
done
echo "${ass});"
else
echo " vector->${function} ();"
fi
echo " break;"
;;
esac
done
cat <next;
xfree (event);
}
}
EOF
# Finally the initialization
echo ""
cat <&2
#../move-if-change new-gdb-events.c gdb-events.c
# Replace any leading spaces with tabs
sed < new-gdb-events.c > tmp-gdb-events.c \
-e 's/\( \)* /\1 /g'
mv tmp-gdb-events.c new-gdb-events.c
# Move if changed?
if test -r gdb-events.c
then
diff -c gdb-events.c new-gdb-events.c
if [ $? = 1 ]
then
echo "gdb-events.c changed? cp new-gdb-events.c gdb-events.c" 1>&2
fi
else
echo "File missing? mv new-gdb-events.c gdb-events.c" 1>&2
fi