#ifndef _AppContext_h_
#define _AppContext_h_

class XtAppStruct {
public:
  XtAppStruct() { this = XtCreateApplicationContext(); }

  void ProcessEvent(XtInputMask mask) { XtAppProcessEvent(this, mask); }
  void MainLoop() { XtAppMainLoop(this); }
  XtIntervalId AddTimeOut(unsigned long ms, XtTimerCallbackProc p, Opaque cd) {
    return XtAppAddTimeOut(this, ms, p, cd); }
  XtInputId AddInput(int src, Opaque cnd, XtInputCallbackProc p, Opaque cd) {
    return XtAppAddInput(this, src, cnd, p, cd); }
  void NextEvent(XEvent *event) { XtAppNextEvent(this, event); }
  Boolean PeekEvent(XEvent *event) { return XtAppPeekEvent(this, event); }
  XtInputMask Pending() { return XtAppPending(this); }
  void DisplayInitialize(
			 Display *d,
			 String appName,
			 String appClass,
			 XrmOptionDescRec *opts = NULL,
			 Cardinal numOpts = 0,
			 Cardinal *argc = NULL,
			 char **argv = NULL) {
    XtDisplayInitialize(this, d, appName, appClass, opts, numOpts, argc, argv);
  }
  Display *OpenDisplay(
		       String dispName,
		       String appName,
		       String appClass,
		       XrmOptionDescRec *opts = NULL,
		       Cardinal numOpts = 0,
		       Cardinal *argc = NULL,
		       char **argv = NULL) {
    return XtOpenDisplay(
        this, dispName, appName, appClass, opts, numOpts, argc, argv);
  }
  ~XtAppStruct() { XtDestroyApplicationContext(this); }
  XtWorkProcId AddWorkProc(XtWorkProc wp, Opaque cd) {
    return XtAppAddWorkProc(this, wp, cd); }
};
typedef XtAppStruct AppContext;

#endif
/* don't add anything after the endif! */
