


/*** IN THE FILE GLOBALS.H ***/

#ifdef ALLOCATE_SPACE /* allocate space for globals */
#define GLOBAL
#define INIT(x)  x
#else                 /* just declare externals */
#define GLOBAL   extern
#defint INIT(x)
#endif

/*
NOTE:  The INIT(x) macro won't work with aggregates
because it interprets a comma as indicating a new
macro parameter, not as part of the current
parameter.  Aggregates are initialized with 
#ifdef ALLOCATE_SPACE
*/

GLOBAL
int  variable1 INIT(=1),
     variable2;

GLOBAL
int  variable1 INIT(=1),
     variable2;

GLOBAL
struct range 
     {
     int xmin, xmax, ymin, ymax;
     } data_range
#ifdef ALLOCATE_SPACE
     = { 0, 0, 0, 0, 0 }
#endif
;

/**   IN THE MAIN .C FILE    ***/

#define ALLOCATE_SPACE
#include  "globals.h"

/* So, our inclusion becomes: */

int  variable1 = 1,
     variable2;

struct range 
     {
     int xmin, xmax,; ymin, ymax;
     } data_range = { 0, 0, 0, 0 };

/* IN ALL OTHER .C FILES */

#include "globals.h"

/*  So our inclusion becomes: */

extern
int variable1,
    variable2;

extern
struct range 
     {
     int xmin, xmax, ymin, ymax;
     } data_range;



