#include "res.h"
#include "rem.h"
#include "widgets.h"
#include "AlAssoc.h"
#include "ArgPack.h"
#include "childpack.h"
#include "menupack.h"
#include "end.h"
#include "xstuff.h" 
#include "rule.h"
#include "registry.h"
#include "biregistry.h"
#include "ruleset.h"
#include "d1.h"
#include "ru.h"
#include "d1.args"
#include "rl.h"
#include "ed.h"
#include "assert.h"
#include "rs.h"
#include "mt.h"
#include "ed.h"
#include "useful.h"
#include "callback.h"
#include "global.h"
/*
XtActionsRec TActionTable[]={
  { "traverseUp", MoveUp },
  { "traverseDown", MoveDown },
  { "traverseLeft", MoveLeft },
  { "traverseRight", MoveRight },
};

char *TTranslations=
  "Meta<Key>i:traverseUp()\n
  "Meta<Key>k:traverseDown()\n
  "Meta<Key>j:traverseLeft()\n
  "Meta<Key>l:traverseRight()";
*/
XtActionsRec TextActionTable[]={
  { "return", d1_DoNothing }
};

char *TextTranslationTable=
  "Ctrl<Key>m:return()";

XtTranslations TextTranslations;


/*--------------------------------------------------*/
void d1_create(GR)
reid GR;
{
  static Widget  ShellW, OuterW, TopTBW, IfW, If2W, ThenW, BotTBW;
  Widget IfLabelW, ThenLabelW, ThenLocW, FirstOuterW;
  ArgPack AP;
  char *Doing;

  GR->If_Contents_GR=Darray_create();
  GR->Then_Contents_GR=Darray_create();
  
/*---- Application shell and its form widget */
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ShellArgs);
  GR->ShellW_GR=XtCreateApplicationShell("shell1",
				  topLevelShellWidgetClass,
				  ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_OuterArgs);
  OuterW=XtCreateManagedWidget("d1_OuterW",
			       alAssocWidgetClass,
			       GR->ShellW_GR,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  XtAddActions(TextActionTable,1);
  TextTranslations=XtParseTranslationTable(TextTranslationTable);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_TopTBArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,BIG_LABEL_FONT));
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) NULL);
  TopTBW=XtCreateManagedWidget("d1_TopTBW",
			       XwtitlebarWidgetClass,
			       OuterW,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  Doing=(char *)safe_malloc(120);
  if (GR->EditOrCreate_GR==RU_EDIT)
    sprintf(Doing,"editing a rule in rule set   %s",
	    GR->RuleSetName_GR);
  else
    sprintf(Doing,"  creating new rule to be added to rule set   %s  ",
	    GR->RuleSetName_GR);
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_DoingArgs);
  ArgPack_add_arg(AP,XtNlabel,(XtArgVal) Doing);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,INFO_FONT));
  XtCreateManagedWidget("RE: doing what",
			labelWidgetClass,
			TopTBW,
			ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AreaArgs);
  ArgPack_add_arg(AP,XtNlabel,(XtArgVal) "If");
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,BIG_LABEL_FONT));
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) TopTBW);
  IfLabelW=XtCreateManagedWidget("IFFFF",
				      labelWidgetClass,
				      OuterW,
				      ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  /*
   *  IF
   */

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_IfArgs);
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) IfLabelW);
  GR->IfW_GR=XtCreateManagedWidget("d1_IfW",
			    alAssocWidgetClass,
			    OuterW,
			    ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  d1_FillIf(GR);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AreaArgs);
  ArgPack_add_arg(AP,XtNlabel,(XtArgVal) "Then");
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,BIG_LABEL_FONT));
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) GR->IfW_GR);
  ThenLabelW=XtCreateManagedWidget("ThenF",
			labelWidgetClass,
			OuterW,
			ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  /*
   *    THEN 
   */


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ThenArgs);
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) ThenLabelW);
  ArgPack_add_arg(AP,XtNhSpace, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNvSpace, (XtArgVal) 0);
  ThenLocW=XtCreateManagedWidget("d1_ThenW",
			      XwbulletinWidgetClass,
			      OuterW,
			      ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ThenColumn1Args);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  GR->ThenW_GR=XtCreateManagedWidget("d1_ThenW_son1",
			      alAssocWidgetClass,
			      ThenLocW,
			      ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ThenColumn2Args);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) THEN1_WIDTH);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  GR->Then2W_GR=XtCreateManagedWidget("d1_ThenW_son2",
			      alAssocWidgetClass,
			      ThenLocW,
			      ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  d1_FillThen(GR);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_BotTBArgs);
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) ThenLocW);
  BotTBW=XtCreateManagedWidget("d1_BotTBW",
			       XwtitlebarWidgetClass,
			       OuterW,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  d1_FillBTBar(GR,BotTBW);

  if (GR->EditOrCreate_GR==RU_CREATE || GR->LoadMsgType_GR==Bool_TRUE)
    ed_AddMT_CB((Widget)NULL,
		CB2_create((VOIDP)GR,
			   (VOIDP)GR->CurrentMsgTypeName_GR),
		(caddr_t)NULL);

  XtRealizeWidget(GR->ShellW_GR);
}

/*--------------------------------------------------*/
void d1_FillIf(GR)
reid GR;
{
  REMember REm;

  REm=GR->TopLevelMember_GR;
  if (REm->Type==ALRMT_FIELD)
    d1_If_AddField(GR,REm,REFT_TEMPLATE);
  else
    d1_If_AddAssoc(GR,REm);
}

/*--------------------------------------------------*/
void d1_If_AddField(GR,REm,TT)
reid GR;
REMember REm;
int TT;
{
  Widget  A1W, A2W, A3W, A4W, AltsMenuW, FTMenuW, SW;
  ArgPack AP;
  REField REPreviousField, REf;
  ChildPack CP3;
  char *FieldClassName;
  int ValueX, AltsMenuX, KeyX;

  if (Darray_len(GR->If_Contents_GR)!=0) {
    REPreviousField=(REField)Darray_get(GR->If_Contents_GR,
					Darray_len(GR->If_Contents_GR)-1);
    A1W=REPreviousField->ContainerW;
  }
  else {
    A1W=NULL;
  }    
  
  REf=REm->object.Field;


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_IfArgs);
  ArgPack_add_arg(AP,XtNfromVert,(XtArgVal) A1W);
  REf->ContainerW=XtCreateManagedWidget("field_container",
					XwbulletinWidgetClass,
					GR->IfW_GR,
					ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuFormArgs);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  REf->FTMenuW=XtCreateManagedWidget("FT_menuForm",
				   boxWidgetClass,
				   REf->ContainerW,
				   ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  CP3=ChildPack_create();
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuRasterArgs);
  ArgPack_add_arg(AP,XtNsRimage, (XtArgVal) AlUI_GetXImage(GR,
							MENU_BUTTON_BITMAP));
  FTMenuW=XtCreateWidget("FTMenuSRaster",
			 XwsrasterWidgetClass,
			 REf->FTMenuW,
			 ArgPack_the_args(AP),ArgPack_num_args(AP));
  ChildPack_add(CP3,FTMenuW); 
  ArgPack_delete(AP);
  MenuPack_attach_to_widget(REf->FTMenu,FTMenuW);
  MenuPack_make_menu(REf->FTMenu);
  FieldClassName=(char *)Biregistry_rev_get(NameToFC_GR,(VOIDP)REf->Type);
  SW=MenuPack_get_widget(REf->FTMenu,FieldClassName);
  if (SW!=NULL)  {
    AP=ArgPack_create();
    ArgPack_add_arg(AP,XtNsetMark,(XtArgVal) TRUE);
    XtSetValues(SW,ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
  }
  else
    printf("warning: couldn't find field class %s\n",FieldClassName);
  XtManageChildren(ChildPack_get_wlist(CP3),ChildPack_get_count(CP3));
  ChildPack_destroy(CP3);

  KeyX=MENU_WIDTH+X_SPACING;
  if (TT==REFT_TEMPLATE) {
    AP=ArgPack_create();
    AP=ArgPack_duplicate_args(d1_PredKeyArgs);
    ArgPack_add_arg(AP, XtNregion, (XtArgVal) XwALIGN_LEFT );
    ArgPack_add_arg(AP,XtNlabel,(XtArgVal) REf->Key);
    ArgPack_add_arg(AP,XtNx, (XtArgVal) KeyX);
    ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
    REf->KeyW=XtCreateManagedWidget("Field_key",
				    labelWidgetClass,
				    REf->ContainerW,
				    ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
  }
  else  {
    AP=ArgPack_create();
    AP=ArgPack_duplicate_args(d1_PredKeyEditArgs);
    ArgPack_add_arg(AP,XtNx, (XtArgVal) KeyX);
    ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
    ArgPack_add_arg(AP,XtNinsertPosition,(XtArgVal) 
	   (KEY_LENGTH>strlen(REf->Key)) ? strlen(REf->Key) : 
	   KEY_LENGTH );
    ArgPack_add_arg(AP, XtNstring, (XtArgVal) REf->Key);
    REf->KeyW=XtCreateManagedWidget("Field_key ww",
				      asciiStringWidgetClass,
				      REf->ContainerW,
				      ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);

/*  XtAddCallback(REf->KeyW, XtNmodifyVerification, d1_KeyModVerify_CB, REf);  
*/
  }    

  AltsMenuX=KeyX+KEY_WIDTH+X_SPACING;
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuFormArgs);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) AltsMenuX);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  REf->AltsMenuW=XtCreateManagedWidget("FT_AltsmenuForm",
				       boxWidgetClass,
				       REf->ContainerW,
				       ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  CP3=ChildPack_create();
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuRasterArgs);
  ArgPack_add_arg(AP,XtNsRimage, (XtArgVal) AlUI_GetXImage(GR,MENU_BUTTON_BITMAP));
  AltsMenuW=XtCreateWidget("FTMenuSRaster",
			   XwsrasterWidgetClass,
			   REf->AltsMenuW,
			   ArgPack_the_args(AP),ArgPack_num_args(AP));
  ChildPack_add(CP3,AltsMenuW);
  ArgPack_delete(AP);
  MenuPack_attach_to_widget(REf->AltsMenu,AltsMenuW);
  MenuPack_make_menu(REf->AltsMenu);
  SW=MenuPack_get_widget(REf->AltsMenu,REf->FieldType);
  if (SW!=NULL)  {
    AP=ArgPack_create();
    ArgPack_add_arg(AP,XtNsetMark,(XtArgVal) TRUE);
    XtSetValues(SW,ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
  }
  else
    printf("warning: couldn't find field type %s\n",REf->FieldType);
  XtManageChildren(ChildPack_get_wlist(CP3),ChildPack_get_count(CP3));
  ChildPack_destroy(CP3);

  ValueX=AltsMenuX+MENU_WIDTH+X_SPACING;
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_PredValueArgs);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) ValueX);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNinsertPosition,(XtArgVal) 
	 (VALUE_LENGTH>strlen(REf->Value)) ? strlen(REf->Value) : 
	 VALUE_LENGTH );
  ArgPack_add_arg(AP, XtNstring, (XtArgVal) REf->Value);
  REf->ValueW=XtCreateManagedWidget("Field_value",
				    asciiStringWidgetClass,
				    REf->ContainerW,
				    ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  Darray_addh(GR->If_Contents_GR,REf);
}

/*--------------------------------------------------*/
void d1_If_AddAssoc(GR,REm)
reid GR;
REMember REm;
{
  REAssoc REa=REm->object.Assoc;  /* !!! need error checking here */
  unsigned i;
  REMember TempREm;

  for (i=0;i<Darray_len(REa->Contents);i++) {
    TempREm=Darray_get(REa->Contents,i);
    if (TempREm->Type==ALRMT_ASSOC) 
      d1_If_AddAssoc(GR,TempREm);
    else if (TempREm->Type==ALRMT_FIELD)
      d1_If_AddField(GR,TempREm,REFT_TEMPLATE);
    else
      FEnd("file=d1.c ^^^1: bad REMember\n");
  }
}

/*--------------------------------------------------*/
void d1_FillThen(GR)
reid GR;
{
  REAction REac;
  unsigned i;
  for (i=0;i<Darray_len(GR->Actions_GR);i++) {
    REac=Darray_get(GR->Actions_GR,i);
    d1_AddAction(GR,REac);
  }
}
/*--------------------------------------------------*/
void d1_AddAction(GR,REac)
reid GR;
REAction REac;
{
  Widget  A1W, A2W, A3W, A4W, Menu2W, Menu1W, SW;
  ArgPack AP;
  REAction REPreviousAc;
  REArgument REArg;
  ChildPack CP3;
  unsigned i, n;
  char *VerbName;

  if (Darray_len(GR->Then_Contents_GR)!=0) {
    REPreviousAc=(REAction)Darray_get(GR->Then_Contents_GR,
	 			     Darray_len(GR->Then_Contents_GR)-1);
    assert (REPreviousAc);
    if (Darray_len(REPreviousAc->Arguments)>1) {
      n=Darray_len(REPreviousAc->Arguments);
      REArg=Darray_get(REPreviousAc->Arguments,
		       n-1);
      assert(REArg);
      A1W=REArg->ContainerBuffW;
      A2W=REArg->ContainerW;
    }
    else if (Darray_len(REPreviousAc->Arguments)==1) {
      REArg=Darray_get(REPreviousAc->Arguments,
		       Darray_len(REPreviousAc->Arguments)-1);
      A1W=REPreviousAc->ContainerW;
      A2W=REArg->ContainerW;
    }
    else {
      A1W=REPreviousAc->ContainerW;
      A2W=REPreviousAc->ArgsContainerBuffW;
    }
  }
  else {
    A1W=NULL;
    A2W=NULL;
  }    

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ThenC1Args);
  ArgPack_add_arg(AP,XtNfromVert,(XtArgVal) A1W);
  REac->ContainerW=XtCreateManagedWidget("ac_container",
					XwbulletinWidgetClass,
					GR->ThenW_GR,
					ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);
  
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuFormArgs);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  REac->MenuW=XtCreateManagedWidget("THEn_menuForm",
				    boxWidgetClass,
				    REac->ContainerW,
				    ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  CP3=ChildPack_create();
  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_MenuRasterArgs);
  ArgPack_add_arg(AP,XtNsRimage, (XtArgVal) AlUI_GetXImage(GR,MENU_BUTTON_BITMAP));
  Menu1W=XtCreateWidget("FTMenuSRaster",
			 XwsrasterWidgetClass,
			 REac->MenuW,
			 ArgPack_the_args(AP),ArgPack_num_args(AP));
  ChildPack_add(CP3,Menu1W);
  ArgPack_delete(AP);
  MenuPack_attach_to_widget(REac->Menu,Menu1W);
  MenuPack_make_menu(REac->Menu);
  XtManageChildren(ChildPack_get_wlist(CP3),ChildPack_get_count(CP3));
  ChildPack_destroy(CP3);

  SW=MenuPack_get_widget(REac->Menu,REac->VerbName);
  if (SW!=NULL)  {
    AP=ArgPack_create();
    ArgPack_add_arg(AP,XtNsetMark,(XtArgVal) TRUE);
    XtSetValues(SW,ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
  }
  else
    printf("Making verb Menu 1:couldn't find verb %s in menu.\n",
	   REac->VerbName);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_ThenKey1Args);
  ArgPack_add_arg(AP,XtNx, (XtArgVal) MENU_WIDTH+X_SPACING);
  ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
  ArgPack_add_arg(AP,XtNlabel,(XtArgVal) REac->VerbName);
  ArgPack_add_arg(AP,XtNfromVert, (XtArgVal) A2W);
  REac->VerbW=XtCreateManagedWidget("Acrion_verb",
				    labelWidgetClass,
				    REac->ContainerW,
				    ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);

  if (Darray_len(REac->Arguments)==0) {
    AP=ArgPack_create();
    AP=ArgPack_duplicate_args(d1_ThenC2BuffArgs);
    ArgPack_add_arg(AP,XtNfromVert,(XtArgVal) A2W);
    REac->ArgsContainerBuffW=XtCreateManagedWidget("ac_container",
						   XwbulletinWidgetClass,
						   GR->Then2W_GR,
						   ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
/*
    AP=ArgPack_create();
    AP=ArgPack_duplicate_args(d1_MenuFormArgs);
    ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
    ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
    REac->ArgsMenuBuffW=XtCreateManagedWidget("THEn_asdmekjnlnuForm",
					      boxWidgetClass,
					      REac->ArgsContainerBuffW,
					      ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
    
    AP=ArgPack_create();
    AP=ArgPack_duplicate_args(d1_ThenDeadValueArgs);
    ArgPack_add_arg(AP,XtNlabel,(XtArgVal) "");
    ArgPack_add_arg(AP,XtNx, (XtArgVal) MENU_WIDTH+X_SPACING);
    ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
    REac->ArgsArgBuffW=XtCreateManagedWidget("Ac",
					     XwbulletinWidgetClass,
					     REac->ArgsContainerBuffW,
					     ArgPack_the_args(AP),ArgPack_num_args(AP));
    ArgPack_delete(AP);
*/
  }
  else {  /* !!! NOT DOING FROM VERTS */
    for (i=0;i<Darray_len(REac->Arguments);i++) {
      if (i==1) {
	A1W=REac->ContainerW;
	A2W=REArg->ContainerW;
      }
      else if (i>1) {
	A1W=REArg->ContainerBuffW;
	A2W=REArg->ContainerW;
      }	
      REArg=Darray_get(REac->Arguments,i);
      if (i!=0) {
	AP=ArgPack_create();
	AP=ArgPack_duplicate_args(d1_ThenC1BuffArgs);
	ArgPack_add_arg(AP,XtNfromVert,(XtArgVal) A1W);
	REArg->ContainerBuffW=XtCreateManagedWidget("ac_Buff_container",
						       XwbulletinWidgetClass,
						       GR->ThenW_GR,
			     		       ArgPack_the_args(AP),ArgPack_num_args(AP));
	ArgPack_delete(AP);
/*
	AP=ArgPack_create();
	AP=ArgPack_duplicate_args(d1_MenuFormArgs);
	ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
	ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
	REArg->MenuBuffW=XtCreateManagedWidget("THEn_asdmenuForm",
					       boxWidgetClass,
					       REArg->ContainerBuffW,
					       ArgPack_the_args(AP),ArgPack_num_args(AP));
	ArgPack_delete(AP);
	
	AP=ArgPack_create();
	AP=ArgPack_duplicate_args(d1_ThenKey1Args);
	ArgPack_add_arg(AP,XtNlabel,(XtArgVal) "");
	ArgPack_add_arg(AP,XtNx, (XtArgVal) MENU_WIDTH+X_SPACING);
	ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
	REArg->VerbBuffW=XtCreateManagedWidget("Acrion_verb",
					       labelWidgetClass,
					       REArg->ContainerBuffW,
					       ArgPack_the_args(AP),ArgPack_num_args(AP));
	ArgPack_delete(AP);
*/
      }
      AP=ArgPack_create();
      AP=ArgPack_duplicate_args(d1_ThenC2Args);
      ArgPack_add_arg(AP,XtNfromVert,(XtArgVal) A2W);
      REArg->ContainerW=XtCreateManagedWidget("arg_container",
					      XwbulletinWidgetClass,
					      GR->Then2W_GR,
					      ArgPack_the_args(AP),ArgPack_num_args(AP));
      ArgPack_delete(AP);

      AP=ArgPack_create();
      AP=ArgPack_duplicate_args(d1_MenuFormArgs);
      ArgPack_add_arg(AP,XtNx, (XtArgVal) 0);
      ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
      REArg->MenuW=XtCreateManagedWidget("ArgssmenuForm",
					 boxWidgetClass,
					 REArg->ContainerW,
					 ArgPack_the_args(AP),ArgPack_num_args(AP));
      ArgPack_delete(AP);
      
      CP3=ChildPack_create();
      AP=ArgPack_create();
      AP=ArgPack_duplicate_args(d1_MenuRasterArgs);
      ArgPack_add_arg(AP,XtNsRimage, (XtArgVal) AlUI_GetXImage(GR,MENU_BUTTON_BITMAP));
      Menu2W=XtCreateWidget("FTMenuSRaster",
			    XwsrasterWidgetClass,
			    REArg->MenuW,
			    ArgPack_the_args(AP),ArgPack_num_args(AP));
      ChildPack_add(CP3,Menu2W);
      ArgPack_delete(AP);
      MenuPack_attach_to_widget(REArg->Menu,Menu2W);
      MenuPack_make_menu(REArg->Menu);
      XtManageChildren(ChildPack_get_wlist(CP3),ChildPack_get_count(CP3));
      ChildPack_destroy(CP3);
      
      AP=ArgPack_create();
      AP=ArgPack_duplicate_args(d1_ThenValueArgs);
      ArgPack_add_arg(AP,XtNx, (XtArgVal) MENU_WIDTH+X_SPACING);
      ArgPack_add_arg(AP,XtNy, (XtArgVal) 0);
      ArgPack_add_arg(AP,XtNinsertPosition,(XtArgVal) 
	     (VALUE_LENGTH>strlen(REArg->Arg)) ? strlen(REArg->Arg) : 
	     VALUE_LENGTH );
      ArgPack_add_arg(AP, XtNstring, (XtArgVal) REArg->Arg);
      REArg->ArgW=XtCreateManagedWidget("tre",
					asciiStringWidgetClass,
					REArg->ContainerW,
					ArgPack_the_args(AP),ArgPack_num_args(AP));
      ArgPack_delete(AP);
    }
  }
  Darray_addh(GR->Then_Contents_GR,REac);
}    


/*--------------------------------------------------*/
void d1_FillBTBar(GR,w)
reid GR;
Widget w;
{
  Widget AddMTW, AbortW, DoneW, AddActionW, AddFieldW;
  ArgPack AP;
  char *name;
  ChildPack CP=ChildPack_create();
  MenuPack mp,mp2;
  unsigned i;

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AbortArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,CONTROL_BUTTONS_FONT));
  AbortW=XtCreateManagedWidget("BTB_Abort",
			       commandWidgetClass,
			       w,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  XtAddCallback(AbortW,XtNcallback,ed_Abort_CB,GR);
  ArgPack_delete(AP);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_DoneArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,CONTROL_BUTTONS_FONT));
  DoneW=XtCreateManagedWidget("BTB_Done",
			       commandWidgetClass,
 			       w,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  XtAddCallback(DoneW,XtNcallback,ed_Done_CB,GR);
  ArgPack_delete(AP);


  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AddActionArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,CONTROL_BUTTONS_FONT));
  AddActionW=XtCreateManagedWidget("BTB_AddAction",
				   commandWidgetClass,
				   w,
				   ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);
  mp=MenuPack_create(AddActionW,"Available Verbs");
  for (i=0;i<Darray_len(VerbNames_GR);i++) {
    name=Darray_get(VerbNames_GR,i);
    MenuPack_add_option(name,mp,ed_AddVerb_CB,(caddr_t)CB2_create((VOIDP)GR,
							 (VOIDP)name));
  }
  MenuPack_make_menu(mp);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AddFieldArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,CONTROL_BUTTONS_FONT));
  AddFieldW=XtCreateManagedWidget("BTB_AddFiewld",
				  commandWidgetClass,
				  w,
				  ArgPack_the_args(AP),ArgPack_num_args(AP));
  XtAddCallback(AddFieldW,XtNcallback,ed_AddField_CB,GR);
  ArgPack_delete(AP);

  AP=ArgPack_create();
  AP=ArgPack_duplicate_args(d1_AddMTArgs);
  ArgPack_add_arg(AP,XtNfont, (XtArgVal) AlUI_GetFont(GR,CONTROL_BUTTONS_FONT));
  AddMTW=XtCreateManagedWidget("BTB_AddMT",
			       commandWidgetClass,
			       w,
			       ArgPack_the_args(AP),ArgPack_num_args(AP));
  ArgPack_delete(AP);
  mp2=MenuPack_create(AddMTW,"Available Message Types");
  for (i=0;i<Darray_len(MsgTypeNames_GR);i++) {
    name=Darray_get(MsgTypeNames_GR,i);
    MenuPack_add_option(name,mp2,ed_AddMT_CB,(caddr_t)CB2_create((VOIDP)GR,
							    (VOIDP)name));
  }
  MenuPack_make_menu(mp2);
}

/*--------------------------------------------------*/
void d1_KeyModVerify_CB(w,REf,VP)
Widget w;
REField REf;
VOIDP VP;
{
/*
  if (REf->IsState==Bool_TRUE)
    VP->doit=FALSE;
*/
}
  
/*
XtActionsRec TEActionTable[]={
  { "SelectAssoc", SelectAssoc },
};

char *TETranslations=
  "<Btn1Down>:SelectAssoc()";


*/
void d1_DoNothing(w,x,s,i)
Widget w;
XEvent *x;
char *s;
int i;
{
}
