#!/bin/sh # User Interface Events. # Copyright 1999, 2000, 2001, 2002, 2004 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 2 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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 < 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