As part of its keywords handling, of course, this module has to keep track of a stack of open if statements. And, since the routines that do the "commenting out" business are somewhere else, it's got to publish its internal representation of an if.
So, the header file contains:
#ifndef IMW_KEYWORDS_H #define IMW_KEYWORDS_H typedef struct if_element { long seen_active; int commenting_out; int seen_else; long opened_at; int really_case; long case_value; long prev_when; char *spaces; struct if_element *prev; } if_element; extern char *lc_lead_in; extern if_element now; extern int need_when_next; extern int output_enabled; extern int comment_override; extern int add_tail; extern int ccf_did_it; #define ALL_COMMENTS 1 #define NO_COMMENTS 2 void process_keyword (void); void check_balance (void); #endif