#include "assert.h"   /* must be first for use eith hc2 */
#include "rem.h"
#include "global.h"
#include "d2.h"
#include "df.h"
#include "xstuff.h"
#include "rebox.h"
#include "rap.h"
#include "alfonts.h"
#include "alxms.h"

void re_FullUsage();

NORET re_XError_handler PROTOTYPE((Display*, XErrorEvent*));

/*--------------------------------------------------*/
reid re_OpenEditor(dis,Rule,SaveFunc,QuitFunc,argc,argv,title,
		   Graphic,UserData,borderP,iconP)
     Display *dis;
     AlRule Rule;
     ReSaveFunc* SaveFunc;
     ReQuitFunc* QuitFunc;
     int* argc;
     char** argv;
     char* title;
     XImage* Graphic;
     VOIDP UserData;
     Pixmap borderP, iconP;
{
  reid rei;

#ifdef RE_DEBUG
  XSync(dis,FALSE);
  XSetErrorHandler(re_XError_handler);
#endif

  reid_GlobalInit();
  rei=reid_Create(dis,Rule,SaveFunc,QuitFunc,argc,argv,title,Graphic,
		  UserData,borderP,iconP);
  ed_Init(rei);
  rl_Init(rei);  /* EEEK MORE BAD BEHAVIOR, this call has to come before */
		 /* d2_create */

  d2_Fields_print(300,rei->TopLevelMember);

  d2_create(rei);
  return(rei);  /* here to keep compilers happy */
}

/*--------------------------------------------------*/
/* THIS FUNCTION NEEDS WORK */
/*----------------------------------------*/
NORET re_CloseEditor(rei)
reid rei;
{
  XtDestroyWidget(rei->ShellW);
}

/*----------------------*/
/* this function is a stop-gap measure to aleviate the missing
   function tempman in the module DiskSrc.c in the library libXw.a */
char *tempnam(a,b)
char *a, *b;
{
  char *c;
  a=a;
  c=XtRealloc(b,strlen(b)+20);
  strcat(c,".dskSrcTemp");
  return(c);
}


/*--------------------------------------------------*/
NORET re_UpdateTitle(rei,title)
reid rei;
char* title;
{ 
  if (rei->title!=NULL)
    Memory_free(rei->title);
  rei->title=RapStr_duplicate(title);
  Alxt_SetArg(rei->DoingW,XmNlabelString,
	      (XtArgVal) Alxms_create(rei->Strings,
				      title,
				      ALFONTS_MINOR_HEADING));
}

/*--------------------------------------------------*/
NORET re_XError_handler (display, error)
     Display* display;
     XErrorEvent* error;
{
  char text[10000];
  
  XGetErrorText(display,error->error_code,text,10000);
  printf("---------------- REM X Error Handler -------------------\n%s",text);
  
  assert(0);
}
