#include <X11/Intrinsic.h>
#include <stdio.h>

Boolean workproc_A( XtPointer ) ;  /* protos */
Boolean workproc_B( XtPointer ) ;
void killit_CB( XtPointer , XtIntervalId * ) ;

static XtAppContext app ;          /* global */

/*------------------------------------------------------------------*/

int main( int argc , char * argv[] )
{
   Widget wid ;

   wid = XtVaAppInitialize(
            &app, "Elvis", NULL, 0, &argc, argv, NULL, NULL ) ;
   if( wid == NULL ){
      fprintf(stderr,"*** Cannot initialize X11!\n") ; exit(1) ;
   }

   XtAppAddTimeOut( app , 1234 , killit_CB , NULL ) ;

   XtAppAddWorkProc( app, workproc_A, NULL ) ;
   XtAppMainLoop(app) ;
   exit(0) ;
}

/*------------------------------------------------------------------*/

void killit_CB( XtPointer xyzzy , XtIntervalId * zork )
{ exit(0) ; }

/*------------------------------------------------------------------*/

#define WMAX 4

Boolean workproc_A( XtPointer elvis )
{
   static int ncall=0 ;

   if( ncall == 0 ) XtAppAddWorkProc( app, workproc_B, NULL ) ;
   ncall++ ; printf("workproc_A: %d\n",ncall) ;
   return (ncall < WMAX) ? False : True ;
}

/*------------------------------------------------------------------*/

Boolean workproc_B( XtPointer presley )
{
   static int ncall=0 ;
   ncall++ ; printf("workproc_B: %d\n",ncall) ;
   return (ncall < WMAX) ? False : True ;
}

/*------------------------------------------------------------------*/

/*----------  Fix a Linux stupidity  -------------------------------*/

#ifdef NEED_XSETLOCALE
#include <locale.h>
char * _Xsetlocale( int category, const char * locale)
{ return setlocale(category,locale) ; }
#endif


syntax highlighted by Code2HTML, v. 0.9.1