text: typedef struct TkLabel TkLabel;
  
  /*
   * widgets that use the label code:
   *	label
   *	checkbutton
   *	button
   *	menubutton
   *	separator
   *	cascade
   *	radiobutton
   */
  
  struct TkLabel
  {
  	char*		text;		/* Label value */
  	Image*		bitmap;		/* Bitmap to display */
  	TkImg*		img;
  	int			justify;
  	int			anchor;
  //	int			flags;		/* justify/anchor */
  	int		w;
  	int		h;
  	int		textheight;
  
  	/* button fields */
  	char*		command;	/* Command to execute at invoke */
  	char*		value;		/* Variable value in radio button */
  	char*		offvalue;		/* Off value for check button */
  	char*		variable;		/* Variable name in radio button */
  	int		ul;
  	int		check;		/* check/radiobutton/choicebutton state */
  	int		indicator;		/* -indicatoron setting */
  	char*		menu;
  
  	char**	values;
  	int nvalues;
  	/* current value of choicebutton is represented by check */
  };
  
  /* Layout constants */
  enum {
  	Textpadx	= 3,
  	Textpady	= 0,
  	Bitpadx	= 0,	/* Bitmap padding in labels */
  	Bitpady	= 0,
  	CheckButton	= 10,
  	CheckButtonBW	= 1,
  	ButtonBorder	= 4,
  	CheckSpace = CheckButton + 2*CheckButtonBW + 2*ButtonBorder,
  };
  
  extern	TkOption	tkbutopts[];
  extern	TkOption	tkradopts[];
  extern	TkOption	tkcbopts[];
  
  /* label.c */
  extern	void		tksizelabel(Tk*);
  extern	char*	tkdrawlabel(Tk*, Point);
  extern	void		tkfreelabel(Tk*);
  extern	void		tklabelgetimgs(Tk*, Image**, Image**);
  extern	char*	tksetvar(TkTop*, char*, char*);
  
  /* buton.c */
  extern	Tk*	tkmkbutton(TkTop*, int);
  extern	void	tksizebutton(Tk*);
  extern	char*	tkdrawbutton(Tk*, Point);
  extern	char*	tkbuttoninvoke(Tk*, char*, char**);
  extern	char*	tkradioinvoke(Tk*, char*, char**);
  extern	void		tkfreebutton(Tk*);
  
  /* support for menus */
  extern	int		tklabelmargin(Tk*);
  extern	int		tkbuttonmargin(Tk*);
  