1 /* PSPP - a program for statistical analysis. 2 Copyright (C) 1997-9, 2000, 2011 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation, either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17 #ifndef CTL_STACK_H 18 #define CTL_STACK_H 1 19 20 #include <stdbool.h> 21 22 /* The following #include avoids a potential problem when Gnulib substitutes 23 * for close() by putting "#define close rpl_close" into <unistd.h>, by 24 * ensuring that every source file that includes this one sees the #define.. 25 * (It would probably be better to rename the 'close' member of struct 26 * ctl_class.) */ 27 #include <unistd.h> 28 29 struct ctl_class 30 { 31 const char *start_name; /* e.g. LOOP. */ 32 const char *end_name; /* e.g. END LOOP. */ 33 void (*close) (void *); /* Closes the control structure. */ 34 }; 35 36 void ctl_stack_clear (void); 37 void ctl_stack_push (const struct ctl_class *, void *private); 38 void *ctl_stack_top (const struct ctl_class *); 39 void *ctl_stack_search (const struct ctl_class *); 40 void ctl_stack_pop (void *); 41 bool ctl_stack_is_empty (void); 42 43 #endif /* ctl_stack.h */ 44