Ejemplo n.º 1
0
int main(int argc, const char **argv)
{
  int opt;

#if 0
  if (argc != 2)
    {
      fprintf(stderr, "Usage: motlle `smottle`\n");
      exit(2);
    }
  sscanf(argv[1], "%p", &load_address);
#endif

  for (;;)
    switch (getopt(argc, argv, "+d"))
      {
      case 'd':
	debug_lvl = 2;
	break;
      case '?':
	break;
      case -1:
	goto done;
      }
 done:

  signal(SIGALRM, silly_sig);

  garbage_init();
  interpret_init();
  stack_init();
  runtime_init();
  call_init();
  parser_init();
  compile_init();
  mcompile_init();
  context_init();
  ports_init();
  if (optind < argc)
    make_global_state(argc - optind, argv + optind);
  else
    make_global_state(0, NULL);
  mudio_init();
  print_init();

  if (optind < argc)
    mload(argv[optind]);
  else
    push_repl();

  for (;;)
    motlle_run1();
}
Ejemplo n.º 2
0
/*!

\brief Loads Plugins.
\details Loads all Plugins specified by the configuration files. Also performs Plugin
discovery.
\return Returns dmz::True if all Plugins were loaded successfully.

*/
dmz::Boolean
dmz::Application::load_plugins () {

   Config runtimeData;

   if (!_state.error && !_state.quiet &&
         !_state.global.lookup_all_config_merged ("dmz.runtime", runtimeData)) {

      _state.log.warn << "dmz.runtime not found" << endl;
   }

   if (!_state.error) {

      runtime_init (runtimeData, _state.rt.get_context (), &(_state.log));
   }

   Config pluginList;

   if (!_state.error &&
         !_state.global.lookup_all_config ("dmz.plugins.plugin", pluginList)) {

      _state.errorMsg.flush ()
         << "dmz.plugins.plugin not found. No plugins listed for loading";

      _state.log.error << _state.errorMsg << endl;

      _state.error = True;
   }

   if (!_state.error) {

      Config pluginInit;

      _state.global.lookup_all_config_merged ("dmz", pluginInit);


      dmz::load_plugins (
         _state.rt.get_context (),
         pluginList,
         pluginInit,
         _state.global,
         _state.container,
         &(_state.log));

      _state.container.discover_plugins ();
      _state.container.init_plugins ();
   }

   return !_state.error;
}
Ejemplo n.º 3
0
Archivo: mudlle.c Proyecto: MUME/mudlle
void mudlle_init(void)
{
  garbage_init();
  global_init();
  strbuf_init();
  print_init();
  stack_init();
  module_init();
  runtime_init();
  compile_init();
  mcompile_init();
  interpret_init();
  error_init();
  ports_init();
  context_init();
}
Ejemplo n.º 4
0
int
main (int argc, char **argv)
{
	gtk_init (&argc, &argv);
	runtime_init (RUNTIME_INIT_BROWSER);

	window = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL));

	char xpcom_lib_path [PATH_MAX];
	char* xpcom_dir_path;

	GRE_GetGREPathWithProperties (&gre_version, 1, nsnull, 0, xpcom_lib_path, sizeof (xpcom_lib_path));
	xpcom_dir_path = g_path_get_dirname (xpcom_lib_path);

	gtk_moz_embed_set_path (xpcom_dir_path);
	g_free (xpcom_dir_path);

	GtkWidget *moz_embed = gtk_moz_embed_new();
	gtk_container_add (GTK_CONTAINER (window), moz_embed);

	gtk_widget_set_usize (moz_embed, 416, 416);

	char *current_directory = g_get_current_dir ();
	char *html_path = g_strdup_printf ("file://%s/test.html", current_directory);
	gtk_moz_embed_load_url (GTK_MOZ_EMBED (moz_embed), html_path);

	g_free (current_directory);
	g_free (html_path);

	gtk_widget_show_all (moz_embed);
	gtk_widget_show_all (GTK_WIDGET (window));
	g_timeout_add (500, setup, NULL);

	runtime_flags_set_manual_timesource (TRUE);
	runtime_flags_set_use_shapecache (FALSE);
	runtime_flags_set_show_fps (FALSE);
	
	gtk_main ();

	return 0;
}
Ejemplo n.º 5
0
main ()

{						/* main */

int		sts, i;
OM_S_OBJID	tst_objid[MAXTST];
OM_S_MESSAGE    connect_msg, display_msg;
OM_S_CHANSELECT chan_0_sel;
char 		class_name[10];
char            chan_0[15], chan_n[15];
OMuword		classid;
struct tms buffer1, buffer2;

struct connect_struct
	{
	OM_S_CHANSELECT	to_sel;
	int		to_idx;
	OM_S_OBJID	fr_objid;
	uword		fr_os;
	OM_S_CHANSELECT fr_sel;
	int		fr_idx;
	} connect_args;

	
sts=om$runtime_init();
if (!(sts&1))
{
    printf ("error in OM_runtime_init: %x \n", sts );
    om$report_error(sts=sts);
    exit();
}

#ifdef DEBUG
printf("\n*** RUNTIME_INIT COMPLETE ***\n");
#endif

strcpy(chan_0, "tst0.chan0");

#ifdef DEBUG
printf("\n*** Construct tst objects ***\n");
#endif

for(i=0; i<MAXTST; i++)
{

    sprintf(class_name,"tst%d",i);

    sts=om$construct(classname=class_name, osnum=OM_Gw_current_OS,
			p_objid=&tst_objid[i]
			);

    if (!(sts&1))
    {
        printf ("\n error in om$construct: %x \n", sts );
        om$report_error(sts=sts);
        exit();
    }

#ifdef DEBUG
om$get_classid(classname=class_name,p_classid=&classid);
printf("\nconstructed class: %s  classid: %d\n", class_name,classid);
#endif

}

    connect_args.to_sel.type = OM_e_name;
    connect_args.to_idx = 0;
    connect_args.fr_objid = tst_objid[0];
    connect_args.fr_os = OM_Gw_current_OS;
    connect_args.fr_sel.type = OM_e_name;
    connect_args.fr_sel.u_sel.name = chan_0;
    connect_args.fr_idx = 0;

    sts=om$make_message(classname="Root", 
			methodname="connect", 
			size=sizeof(struct connect_struct), 
			p_arglist=&connect_args, 
			p_msg=&connect_msg
			);
    if (!(sts&1))
    {
	   printf ("\nerror in om$make_message for connect: %x\n", sts);
	   om$report_error(sts=sts);
	   exit();
    }


for(i=1; i<MAXTST; i++)

{
			
    sprintf(chan_n,"tst%d.chan%d",i,i);

#ifdef DEBUG
printf("\nchan_n: %s\n", chan_n);
#endif

    connect_args.to_sel.u_sel.name = chan_n;

    sts=om$send(msg=connect_msg, 
		senderid=tst_objid[0], 
		targetid=tst_objid[i]
		);
		
    if ( ! (sts&1) )
	{
	om$report_error(sts=sts);
	exit();
	}			
}

sts=om$make_message(classname="tst", 
		methodname="display", 
		p_msg=&display_msg);
if (!(sts&1))
    {
    printf ("\nerror in om$make_message for display: %x\n", sts);
    om$report_error(sts=sts);
    exit();
    }


chan_0_sel.type = OM_e_name;
chan_0_sel.u_sel.name = chan_0;

#ifdef TIME
printf("\n*** Time before send ***\n");
times( &buffer1 );
printf("user time: %d\n", buffer1.tms_utime);
printf("syst time: %d\n", buffer1.tms_stime);
#endif


for (i=0;i<100;i++)
{

sts = om$send(	msg=display_msg,
		senderid=tst_objid[0],
		p_chanselect=&chan_0_sel );

if ( ! (sts&1) )
	{
	om$report_error(sts=sts);
	exit();
	}			
}

#ifdef TIME
printf("\n*** Time after send ***\n");
times( &buffer2 );
printf("user time: %d\n", buffer2.tms_utime);
printf("syst time: %d\n", buffer2.tms_stime);

printf("\n*** Total time required send ***\n");
printf("user time: %d\n", buffer2.tms_utime - buffer1.tms_utime );
printf("syst time: %d\n", buffer2.tms_stime - buffer1.tms_stime );
#endif

}
Ejemplo n.º 6
0
main()
{
   int                  sts, i, zro=0;
   OM_S_OBJID           a_objid[MAXA], b_objid[MAXB], c_objid;
   OM_S_OBJID           resa_objid[MAXA], resb_objid[MAXB], c2_objid;
   OM_S_CHANNUM         chan_a, chan_b;
   OM_S_CHANNUM         chan_resa, chan_resb;
   uword                count, siz;
   char                 *chan_acany,*chan_acbc,*chan_acb,*chan_bca;
   char                 *chan_sbca;
   char                 *chan_resacany,*chan_resacbc,*chan_resacb,*chan_resbca;
   char                 *chan_sca;
   OM_S_CHANSELECT      chansel;
   int		        relindex=0, to=0, from=0;
   OM_S_MESSAGE 	showb,showresb,connect_msg,move_chan_msg;
   uword        	OSnum;
   uword	        minorchan=0;
   
struct connect_struct
       {
	 OM_S_CHANSELECT      to_sel;
	 int		      to_idx;
	 OM_S_OBJID	      fr_objid;
	 uword                fr_os;
	 OM_S_CHANSELECT      fr_sel;
	 int		      fr_idx;
       } connect_args;
struct move_chan_struct
       {
	 OM_S_CHANSELECT      to_sel;
	 OM_S_OBJID	      fr_objid;
	 OMuword              fr_os;
	 OM_S_CHANSELECT      fr_sel;
       } move_chan_args;
   sts = om$runtime_init();
   if (!(sts&1))
   {
      printf (" error in om%runtine_init\n" );
      om$report_error(sts = sts);
      exit();
   }

   OSnum = OM_Gw_TransOSnum_0;
   

   chan_acb  = "A.acb";
   chan_acany  = "A.acany";
   chan_acbc = "A.acbc";
   chan_bca  = "B.bca";
   chan_sbca  = "C.sbca";

   for ( i=0; i<MAXA; i++ )
   {
      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "A",
                         p_objid = &a_objid[i],
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for A\n" );
         om$report_error(sts = sts);
         printf (" iteration : %d \n", i );
         exit();
      }
   }


   sts = om$get_channel_number(channame = "A.acb",
                               p_channum = &chan_a );
   if (!(sts&1))
   {
      printf (" error in om$get channel_number for acb\n" );
      om$report_error(sts = sts);
      exit();
   }

   sts = om$get_channel_number(channame = "B.bca",
                               p_channum = &chan_b );
   if (!(sts&1))
   {
      printf (" error in om$get_channel_number for bca\n" );
      om$report_error(sts = sts);
      exit();
   }


   for ( i=0; i<MAXB; i++ )
   {
      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "B",
                         p_objid = &b_objid[i],
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for B\n" );
         om$report_error(sts = sts);
         printf (" iteration : %d \n", i );
         exit();
      }
   } /* for */

/* Now I need to build the following relations for the test:
	a1 - b0    	Dipole
	a2,a3 - b1  	TO:FROM
	a4 - b2,b3	FROM:TO
	a5 - b4         Dipole
	a10 - b5	Dipole
*/

	connect_args.to_sel.type = OM_e_num;
	connect_args.to_sel.u_sel.number = chan_b;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_num;
	connect_args.fr_sel.u_sel.number = chan_a;
	connect_args.fr_idx            = 0;

	sts = om$make_message(classname = "Root",		
			      methodname = "connect",		
			      size = sizeof( struct connect_struct),
			      p_arglist = &connect_args,	
			      p_msg = &connect_msg );


	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[1],			
		       targetid = b_objid[0] );

   if (!(sts&1))
      {
      printf (" error in om$send (connect) for B\n" );
      om$report_error(sts = sts);
      exit();
      }
   printf ("A1 connected to B0\n");

   printf ("----- Dumping A[1]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[1], "acb" );

   printf ("----- Dumping B[0]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, b_objid[0], "bca" );
   
     
for(i=2; i<4; i++)
{
	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[i];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[i],			
		       targetid = b_objid[1] );
 
   switch(sts)
   {
      case OM_I_ADDEDATEND:
      case OM_S_SUCCESS:  printf("A%d connected to B1\n", i);
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("B1 is already connected\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (connect) for A%d to B1\n", i);
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[%d]'s acb channel\n",i);
   OMT_dump_relation( OM_Gw_current_OS, a_objid[i], "acb" );

   printf ("----- Dumping B[1]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, b_objid[1], "bca" );
}
      

for(i=2; i<4; i++)
{
	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[4];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[4],			
		       targetid = b_objid[i] );

   switch(sts)
   {
      case OM_I_ADDEDATEND:
      case OM_S_SUCCESS:  printf("A4 connected to B%d\n", i);
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (connect) for A4 to B%d\n", i);
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[4]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[4], "acb" );

   printf ("----- Dumping B[%d]'s bca channel\n",i);
   OMT_dump_relation( OM_Gw_current_OS, b_objid[i], "bca" );
}

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[5];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[5],			
		       targetid = b_objid[4] );
 
   if (!(sts&1))
      {
      printf (" error in om$send (connect)\n");
      om$report_error(sts = sts);
      exit();
      }
   printf ("A5 connected to B4\n");

   printf ("----- Dumping A[5]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[5], "acb" );

   printf ("----- Dumping B[4]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, b_objid[4], "bca" );

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[10];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[10],			
		       targetid = b_objid[5] );
   if (!(sts&1))
      {
      printf (" error in om$send (connect)\n");
      om$report_error(sts = sts);
      exit();
      }

   printf ("A10 connected to B5\n");

   printf ("----- Dumping A[10]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[10], "acb" );

   printf ("----- Dumping B[5]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, b_objid[5], "bca" );

/******************************************************************
Test # 1 - Source is a singleton.
*******************************************************************/

   printf ("\n\n******* Test 1 - A0.acb to A6.acb but A0 is empty\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[0];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$make_message(classname = "Root",		
			      methodname = "move_chan",		
			      size = sizeof( struct move_chan_struct),
			      p_arglist = &move_chan_args,	
			      p_msg = &move_chan_msg );

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[0],			
		       targetid = a_objid[6] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nA0.acb moved to A6.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A0 to A6\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[0]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[0], "acb" );

   printf ("----- Dumping A[6]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[6], "acb" );


/******************************************************************
Test # 2 - Source is a dipole.
*******************************************************************/

   printf ("\n\n******* Test 2 - A1.acb to A7.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[1];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[1],			
		       targetid = a_objid[7] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA1.acb moved to A7.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A1 to A7\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[1]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[1], "acb" );

   printf ("----- Dumping A[7]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[7], "acb" );

   sts = om$make_message(classname = "B",
                         methodname = "show_b",
                         size = 0,
                         p_arglist = 0,
                         p_msg = &showb);
   if(!(sts&1))
   {
	printf("error in om%make_message for show_b\n");
	om$report_error(sts = sts);
	exit();
   }
   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_acb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showb,
                 senderid = a_objid[7],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 3 - Source is on the TO side of a relation.
*******************************************************************/

   printf ("\n\n******* Test 3 - A2.acb to A8.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[2];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[2],			
		       targetid = a_objid[8] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA2.acb moved to A8.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A2 to A8\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[2]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[2], "acb" );

   printf ("----- Dumping A[8]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[8], "acb" );

   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_acb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showb,
                 senderid = a_objid[8],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 4 - Source is on the FROM side of a relation.
*******************************************************************/

   printf ("\n\n******* Test 4 - A4.acb to A9.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[4];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[4],			
		       targetid = a_objid[9] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA4.acb moved to A9.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A4 to A9\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[4]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[4], "acb" );

   printf ("----- Dumping A[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[9], "acb" );

   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_acb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showb,
                 senderid = a_objid[9],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 5 - Source is a dipole and target is a dipole.  This should 
           generate a error because the target should be empty.
*******************************************************************/

   printf ("\n\n******* Test 5 - A5.acb to A10.acb but A10.acb is not empty\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[5];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[5],			
		       targetid = a_objid[10] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA5.acb moved to A10\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("\nOM_E_INVCHAN - expected error\n\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A5 to A10\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[5]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[5], "acb" );

   printf ("----- Dumping A[10]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[10], "acb" );

/******************************************************************
Test # 6 - Source is a dipole and its channel has only Bs on rhs.  
           Target is empty and its channel accepts Bs & Cs on rhs.
	   Target channel is a superset of Source's channel.
*******************************************************************/

   printf ("\n\n******* Test 6 - A7.acb to A1.acbc\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acbc;
	move_chan_args.fr_objid = a_objid[7];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[7],			
		       targetid = a_objid[1] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nA7.acb moved to A1.acbc\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A7.acb to A1.acbc\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[7]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[7], "acb" );

   printf ("----- Dumping A[1]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[1], "acbc" );

/******************************************************************
Test # 7 - Source is FROM side of relation and its channel has
		 only Bs on rhs.  
           Target is empty and its channel accepts any class on rhs.
	   Target channel is a wildcard channel.
*******************************************************************/

   printf ("\n\n******* Test 7 - A9.acb to A10.acany\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acany;
	move_chan_args.fr_objid = a_objid[9];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[9],			
		       targetid = a_objid[10] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA9.acb moved to A10.acany\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A9.acb to A10.acany\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[9], "acb" );

   printf ("----- Dumping A[10]'s acany channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[10], "acany" );

/******************************************************************
Test # 8 - Source is FROM side of relation and its channel has
	    only any class on rhs.  
           Target is empty and its channel accepts Bs & Cs on rhs.
	   Target channel is a subset of source channel but all
	    objects currently hooked to channel are allowed on source.
*******************************************************************/

   printf ("\n\n******* Test 8 - A10.acany to A4.acbc\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acbc;
	move_chan_args.fr_objid = a_objid[10];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acany;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[10],			
		       targetid = a_objid[4] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nA10.acany moved to A4.acbc\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A10.acany to A4.acbc\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[10]'s acany channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[10], "acany" );

   printf ("----- Dumping A[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[4], "acbc" );

/* Construct a C object and connect it to A[4].acbc */

      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "C",
                         p_objid = &c_objid,
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for C\n" );
         om$report_error(sts = sts);
         exit();
      }

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_sbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[4];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acbc;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[4],			
		       targetid = c_objid );
 
   if (!(sts&1))
      {
      printf (" error in om$send (connect) for C\n");
      om$report_error(sts = sts);
      exit();
      }

   printf ("A4 connected to C\n");

   printf ("----- Dumping A[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[4], "acbc" );

   printf ("----- Dumping C's sbca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, c_objid, "sbca" );
   

/******************************************************************
Test # 9 - Source is FROM side of relation and its channel has
	    Bs and Cs on rhs.  
           Target is empty and its channel accepts only Bs on rhs.
	   Target channel is a subset of source channel but all
	    objects currently hooked to channel are not allowed
	    on source.  This test should fail.
*******************************************************************/

   printf ("\n\n******* Test 9 - A4.acbc to A9.acb but C is not allowed on acb\n");
	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_acb;
	move_chan_args.fr_objid = a_objid[4];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_acbc;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = a_objid[4],			
		       targetid = a_objid[9] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nA4.acbc moved to A9.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_CLASS_CONFLICT: 
                         printf ("\nOM_E_CLASS_CONFLICT - expected error\n\n");
                         break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for A4.acbc to A9.acb\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping A[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[4], "acbc" );

   printf ("----- Dumping A[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, a_objid[9], "acb" );


   /*=========================================================*/
   /*=========================================================*/
   /*   R E S T R I C T E D     C H A N N E L    T E S T S    */
   /*=========================================================*/
   /*=========================================================*/

   printf ("\nStart of restrcited channel tests\n\n\n");

   chan_resacb    = "ResA.acb";
   chan_resacany  = "ResA.acany";
   chan_resacbc   = "ResA.acbc";
   chan_resbca    = "ResB.bca";
   chan_sca       = "C.sca";

   for ( i=0; i<MAXA; i++ )
   {
      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "ResA",
                         p_objid = &resa_objid[i],
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for ResA\n" );
         om$report_error(sts = sts);
         printf (" iteration : %d \n", i );
         exit();
      }
   }


   sts = om$get_channel_number(channame = "ResA.acb",
                               p_channum = &chan_a );
   if (!(sts&1))
   {
      printf (" error in om$get channel_number for acb\n" );
      om$report_error(sts = sts);
      exit();
   }

   sts = om$get_channel_number(channame = "ResB.bca",
                               p_channum = &chan_b );
   if (!(sts&1))
   {
      printf (" error in om$get_channel_number for bca\n" );
      om$report_error(sts = sts);
      exit();
   }


   for ( i=0; i<MAXB; i++ )
   {
      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "ResB",
                         p_objid = &resb_objid[i],
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for ResB\n" );
         om$report_error(sts = sts);
         printf (" iteration : %d \n", i );
         exit();
      }
   } /* for */

/* Now I need to build the following relations for the test:
	a1 - b0    	Dipole
	a2,a3 - b1  	TO:FROM
	a4 - b2,b3	FROM:TO
	a5 - b4         Dipole
	a10 - b5	Dipole
*/

	connect_args.to_sel.type = OM_e_num;
	connect_args.to_sel.u_sel.number = chan_b;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_num;
	connect_args.fr_sel.u_sel.number = chan_a;
	connect_args.fr_idx            = 0;

	sts = om$make_message(classname = "Root",		
			      methodname = "connect",		
			      size = sizeof( struct connect_struct),
			      p_arglist = &connect_args,	
			      p_msg = &connect_msg );


	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[1],			
		       targetid = resb_objid[0] );

   if (!(sts&1))
      {
      printf (" error in om$send (connect) for ResB\n" );
      om$report_error(sts = sts);
      exit();
      }
   printf ("ResA1 connected to ResB0\n");

   printf ("----- Dumping ResA[1]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[1], "acb" );

   printf ("----- Dumping ResB[0]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resb_objid[0], "bca" );
   
     
for(i=2; i<4; i++)
{
	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[i];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[i],			
		       targetid = resb_objid[1] );
 
   switch(sts)
   {
      case OM_I_ADDEDATEND:
      case OM_S_SUCCESS:  printf("ResA%d connected to ResB1\n", i);
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("ResB1 is already connected\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (connect) for ResA%d to ResB1\n", i);
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[%d]'s acb channel\n",i);
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[i], "acb" );

   printf ("----- Dumping ResB[1]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resb_objid[1], "bca" );
}
      

for(i=2; i<4; i++)
{
	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[4];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[4],			
		       targetid = resb_objid[i] );

   switch(sts)
   {
      case OM_I_ADDEDATEND:
      case OM_S_SUCCESS:  printf("ResA4 connected to ResB%d\n", i);
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (connect) for ResA4 to ResB%d\n", i);
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[4]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[4], "acb" );

   printf ("----- Dumping ResB[%d]'s bca channel\n",i);
   OMT_dump_relation( OM_Gw_current_OS, resb_objid[i], "bca" );
}

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[5];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[5],			
		       targetid = resb_objid[4] );
 
   if (!(sts&1))
      {
      printf (" error in om$send (connect)\n");
      om$report_error(sts = sts);
      exit();
      }
   printf ("ResA5 connected to ResB4\n");

   printf ("----- Dumping ResA[5]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[5], "acb" );

   printf ("----- Dumping ResB[4]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resb_objid[4], "bca" );

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[10];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[10],			
		       targetid = resb_objid[5] );
   if (!(sts&1))
      {
      printf (" error in om$send (connect)\n");
      om$report_error(sts = sts);
      exit();
      }

   printf ("ResA10 connected to ResB5\n");

   printf ("----- Dumping ResA[10]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[10], "acb" );

   printf ("----- Dumping ResB[5]'s bca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resb_objid[5], "bca" );

/******************************************************************
Test # 1 - Source is a singleton.
*******************************************************************/

   printf ("\n\n******* Test 1 - ResA0.acb to ResA6.acb but ResA0 is empty\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[0];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$make_message(classname = "Root",		
			      methodname = "move_chan",		
			      size = sizeof( struct move_chan_struct),
			      p_arglist = &move_chan_args,	
			      p_msg = &move_chan_msg );

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[0],			
		       targetid = resa_objid[6] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nResA0.acb moved to ResA6.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA0 to ResA6\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[0]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[0], "acb" );

   printf ("----- Dumping ResA[6]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[6], "acb" );


/******************************************************************
Test # 2 - Source is a dipole.
*******************************************************************/

   printf ("\n\n******* Test 2 - ResA1.acb to ResA7.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[1];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[1],			
		       targetid = resa_objid[7] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA1.acb moved to ResA7.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA1 to ResA7\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[1]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[1], "acb" );

   printf ("----- Dumping ResA[7]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[7], "acb" );

   sts = om$make_message(classname = "ResB",
                         methodname = "show_b",
                         size = 0,
                         p_arglist = 0,
                         p_msg = &showresb);
   if(!(sts&1))
   {
	printf("error in om%make_message for show_b\n");
	om$report_error(sts = sts);
	exit();
   }
   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_resacb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showresb,
                 senderid = resa_objid[7],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 3 - Source is on the TO side of a relation.
*******************************************************************/

   printf ("\n\n******* Test 3 - ResA2.acb to ResA8.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[2];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[2],			
		       targetid = resa_objid[8] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA2.acb moved to ResA8.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA2 to ResA8\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[2]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[2], "acb" );

   printf ("----- Dumping ResA[8]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[8], "acb" );

   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_resacb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showresb,
                 senderid = resa_objid[8],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 4 - Source is on the FROM side of a relation.
*******************************************************************/

   printf ("\n\n******* Test 4 - ResA4.acb to ResA9.acb\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[4];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[4],			
		       targetid = resa_objid[9] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA4.acb moved to ResA9.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA4 to ResA9\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[4]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[4], "acb" );

   printf ("----- Dumping ResA[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[9], "acb" );

   chansel.type = OM_e_name;
   chansel.u_sel.name = chan_resacb;
   sts = om$send(mode = OM_e_wrt_object,
                 msg = &showresb,
                 senderid = resa_objid[9],
                 p_chanselect = &chansel);
   if(!(sts&1))
   {
	printf("error in om$send (show_b)\n");
	om$report_error(sts = sts);
	exit();
   }

/******************************************************************
Test # 5 - Source is a dipole and target is a dipole.  This should 
           generate a error because the target should be empty.
*******************************************************************/

   printf ("\n\n******* Test 5 - ResA5.acb to ResA10.acb but ResA10.acb is not empty\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[5];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[5],			
		       targetid = resa_objid[10] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA5.acb moved to ResA10\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("\nOM_E_INVCHAN - expected error\n\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA5 to ResA10\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[5]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[5], "acb" );

   printf ("----- Dumping ResA[10]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[10], "acb" );

/******************************************************************
Test # 6 - Source is a dipole and its channel has only ResBs on rhs.  
           Target is empty and its channel accepts ResBs & Cs on rhs.
	   Target channel is a superset of Source's channel.
*******************************************************************/

   printf ("\n\n******* Test 6 - ResA7.acb to ResA1.acbc - should error\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacbc;
	move_chan_args.fr_objid = resa_objid[7];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[7],			
		       targetid = resa_objid[1] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nResA7.acb moved to ResA1.acbc\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      case OM_E_CLASS_CONFLICT:
                           printf("\nOM_E_CLASS_CONFLICT - expected error\n");
                           break;
      default:				
         printf("error in om$send (move_chan) for ResA7.acb to ResA1.acbc\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[7]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[7], "acb" );

   printf ("----- Dumping ResA[1]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[1], "acbc" );

/******************************************************************
Test # 7 - Source is FROM side of relation and its channel has
		 only ResBs on rhs.  
           Target is empty and its channel accepts any class on rhs.
	   Target channel is a wildcard channel.
*******************************************************************/

   printf ("\n\n******* Test 7 - ResA9.acb to ResA10.acany - should error\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacany;
	move_chan_args.fr_objid = resa_objid[9];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacb;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[9],			
		       targetid = resa_objid[10] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA9.acb moved to ResA10.acany\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      case OM_E_CLASS_CONFLICT:
                           printf("\nOM_E_CLASS_CONFLICT - expected error\n");
                           break;
      default:				
         printf("error in om$send (move_chan) for ResA9.acb to ResA10.acany\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[9], "acb" );

   printf ("----- Dumping ResA[10]'s acany channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[10], "acany" );

/******************************************************************
Test # 8 - Source is FROM side of relation and its channel has
	    only any class on rhs.  
           Target is empty and its channel accepts ResBs & Cs on rhs.
	   Target channel is a subset of source channel but all
	    objects currently hooked to channel are allowed on source.
*******************************************************************/

   printf ("\n\n******* Test 8 - ResA10.acany to ResA4.acbc but Res10.acany is empty\n");

	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacbc;
	move_chan_args.fr_objid = resa_objid[10];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacany;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[10],			
		       targetid = resa_objid[4] );

   switch(sts)
   {
      case OM_S_SUCCESS:  printf("\n\nResA10.acany moved to ResA4.acbc\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("an invalid channel was used\n");
      		          break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      case OM_I_CHAN_EMPTY:
                           printf("\nOM_I_CHAN_EMPTY - expected status\n");
                           break;
      default:				
         printf("error in om$send (move_chan) for ResA10.acany to ResA4.acbc\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[10]'s acany channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[10], "acany" );

   printf ("----- Dumping ResA[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[4], "acbc" );

/* Construct a C object and connect it to ResA[4].acbc */

      sts = om$construct(osname = "OM_TransOS_0",
                         classname = "C",
                         p_objid = &c2_objid,
                         neighbor = OM_GS_NULL_NEIGHBOR);
      if (!(sts&1))
      {
         printf (" error in om$construct for C2\n" );
         om$report_error(sts = sts);
         exit();
      }

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_sca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[4];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacbc;
	connect_args.fr_idx            = 0;

	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[4],			
		       targetid = c2_objid );
 
   if (!(sts&1))
      {
      printf (" error in om$send (connect) for C2\n");
      om$report_error(sts = sts);
      exit();
      }

   printf ("ResA4 connected to C2\n");

   printf ("----- Dumping ResA[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[4], "acbc" );

   printf ("----- Dumping C2's sca channel\n");
   OMT_dump_relation( OM_Gw_current_OS, c2_objid, "sca" );
   

/******************************************************************
Test # 9 - Source is FROM side of relation and its channel has
	    ResBs and C2s on rhs.  
           Target is empty and its channel accepts only ResBs on rhs.
	   Target channel is a subset of source channel but all
	    objects currently hooked to channel are not allowed
	    on source.  This test should fail.
*******************************************************************/

   printf ("\n\n******* Test 9 - ResA4.acbc to ResA9.acb but C2 is not allowed on acb\n");
	move_chan_args.to_sel.type = OM_e_name;
	move_chan_args.to_sel.u_sel.name = chan_resacb;
	move_chan_args.fr_objid = resa_objid[4];
	move_chan_args.fr_os = OM_Gw_current_OS;
	move_chan_args.fr_sel.type = OM_e_name;
	move_chan_args.fr_sel.u_sel.name = chan_resacbc;

	sts = om$send (msg = &move_chan_msg,			
		       senderid = resa_objid[4],			
		       targetid = resa_objid[9] );

   switch(sts)
   {
      case OM_I_CHAN_EMPTY:
      case OM_S_SUCCESS:  printf("\n\nResA4.acbc moved to ResA9.acb\n");
      			  break;
      case OM_E_CHAN_NOTEMPTY: printf("Channel is not empty\n");
      			       break;
      case OM_E_INVCHAN:  printf("\nOM_E_INVCHAN - expected error\n");
      		          break;
      case OM_E_CLASS_CONFLICT: 
                         printf ("\nOM_E_CLASS_CONFLICT - expected error\n\n");
                         break;
      case OM_E_REL_MISMATCH:  printf("relations don't match\n");
      				break;
      default:				
         printf("error in om$send (move_chan) for ResA4.acbc to ResA9.acb\n");
         om$report_error(sts = sts);
   }
   printf ("----- Dumping ResA[4]'s acbc channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[4], "acbc" );

   printf ("----- Dumping ResA[9]'s acb channel\n");
   OMT_dump_relation( OM_Gw_current_OS, resa_objid[9], "acb" );

return(1);
}  /* main */
Ejemplo n.º 7
0
int main(int argc, char* argv[])
{
    bool verb;
    int i1, i3, n12, n3, niter, n[2], rect[2];
    float *u1, *u2, *u3, norm;
    sf_file inp, out, den;

    sf_init(argc,argv);
    inp = sf_input("in");
    den = sf_input("den");
    out = sf_output("out");

    if (SF_FLOAT != sf_gettype(inp)) sf_error("Need float input");
    
    if (!sf_histint(inp,"n1",n)) sf_error("No n1= in input");
    if (!sf_histint(inp,"n2",n+1)) sf_error("No n2= in input");
    n3 = sf_leftsize(inp,2);
    n12 = n[0]*n[1];

    if (!sf_getint("rect1",&rect[0])) rect[0]=1;
    if (!sf_getint("rect2",&rect[1])) rect[1]=1;
    /* smoothing radius */

    if (!sf_getint("niter",&niter)) niter=100;
    /* number of iterations */

    if (!sf_getbool("verb",&verb)) verb=false;
    /* verbosity */

    u1 = sf_floatalloc(n12);
    u2 = sf_floatalloc(n12);
    u3 = sf_floatalloc(n12);

	runtime_init(n12*sizeof(float));
    for (i3=0; i3 < n3; i3++) 
	{
		sf_floatread(u1, n12, inp);
		sf_floatread(u2, n12, den);

    	sf_divn_init(2, n12, n, rect, niter, verb);
		/* smooth division */
		norm = 0.;
		for (i1=0; i1 < n12; i1++) 
		    norm += u2[i1] * u2[i1];
		norm = sqrtf(n12/norm);

		for (i1=0; i1 < n12; i1++) 
		{
			u1[i1] *= norm;
			u2[i1] *= norm;
		}
		sf_divn (u1, u2, u3);

		sf_floatwrite(u3, n12, out);

		sf_divn_close();
		norm = runtime(1);
		sf_warning("%d of %d, %f MB/sec;", i3, n3, norm);
	}

	free(u1);
	free(u2);
	free(u3);
    exit(0);
}
Ejemplo n.º 8
0
main ()
{
/*	One extra set of data structures are allocated for A's and B's.
	The last A and B will be connected as a dipole.
*/
int		sts, i, half_A, half_B;
OM_S_OBJID	a_objid[MAXA+1], b_objid[MAXB+1];
OM_S_OBJID	resa_objid[MAXA+1], resb_objid[MAXB+1];
int		relindex=0;
uword		minorchan=0;
OM_S_MESSAGE	disconnect_msg,connect_msg,showa, showb;
OM_S_MESSAGE    range_disconnect_msg;
OM_S_CHANSELECT chansel;
char            *chan_acb,*chan_bca, *chan_resacb, *chan_resbca;

struct connect_struct
       {
	 OM_S_CHANSELECT      to_sel;
	 int		      to_idx;
	 OM_S_OBJID	      fr_objid;
	 OMuword              fr_os;
	 OM_S_CHANSELECT      fr_sel;
	 int		      fr_idx;
       } connect_args;

struct disconnect_struct
       {
	 OM_S_CHANSELECT      to_sel;
	 OM_S_OBJID	      fr_objid;
	 OMuword              fr_os;
	 OM_S_CHANSELECT      fr_sel;
       } disconnect_args;

struct range_disconnect_struct
       {
         OM_S_CHANSELECT      to_sel;
         int                  low_index;
         int                  hi_index;
       } range_disconnect_args;


half_A=MAXA/2; half_B=MAXB/2;

sts = om$runtime_init();
if (!(sts&1))
 {
  printf ("error in om$runtime_init: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }

chan_acb = "A.acb";
chan_bca = "B.bca";

/*
	Construct A's
*/
printf("\n>>> Table of A's object IDs::\n");
for (i=0; i<MAXA+1; i++)
 {
   sts = om$construct (osname="OM_TransOS_0",classname="A",	
					p_objid=&a_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$construct object A[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    exit();
   }
  printf("\n>>> A[%d]: %d",i,a_objid[i]);
 }
/*
	Construct B's
*/
printf("\n\n>>> Table of B's object IDs::\n");
for (i=0; i<MAXB+1; i++)
 {
   sts = om$construct (osname="OM_TransOS_0",classname="B",	
					p_objid=&b_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$construct object B[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    exit();
   }
  printf("\n>>> B[%d]: %d ",i,b_objid[i]);
 }
/*
	Connect last A to last B
*/
printf("\n\n>>> Connect Last A to Last B\n");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[MAXA];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

	sts = om$make_message(classname = "Root",		
			      methodname = "connect",		
			      size = sizeof( struct connect_struct),
			      p_arglist = &connect_args,	
			      p_msg = &connect_msg );
	if(!(sts&1))
 	{
  	   printf("error in om$make_message for connect: %x\n",  sts);
  	   om$report_error(sts=sts);
  	   exit();
 	}
	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[MAXA],			
		       targetid = b_objid[MAXB] );

if (!(sts&1))
 {
  printf ("error in om$send msg=connect LAST A to LAST B: %x\n", i, sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Connect last half of B's to A[0]

*/
printf("\n\n>>> Connect last half of B's to A[0]");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[0];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

for (i=half_B; i<MAXB; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[0],			
		       targetid = b_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$send msg=connect B[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }
/*
	Connect last half of A's to B[0]

*/

printf("\n\n>>> Connect last half of A's to B[0]");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_acb;
	connect_args.to_idx = 0;
	connect_args.fr_objid = b_objid[0];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_bca;
	connect_args.fr_idx            = 0;

for (i=half_A; i<MAXA; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = b_objid[0],			
		       targetid = a_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$send msg=connect A[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }
/*
	Connect first half of B's to A[1]

  note: a many-to-many object existed for B[0] thus a connection between
	two many-to-many objects occurs

*/

printf("\n\n>>> Connect first half of B's to A[1]");
printf("\n>>>>>> note: an entry was inserted into B[0]'s bca channel");
printf("\n>>>>>>       linking itself to A[1]'s acb channel");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_bca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = a_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_acb;
	connect_args.fr_idx            = 0;

for (i=0; i<half_B; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = a_objid[1],			
		       targetid = b_objid[i] );
 
  if (!(sts&1))
   {
    printf ("error in om$send msg=connect B[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }
/*
	Connect first half of A's to B[1]

  note: a many-to-many connection existed for A[0] thus a connection between
	two many-to-many connections occurs

*/

printf("\n\n>>> Connect first half of A's to B[1]");
printf("\n>>>>>> note: an entry was inserted into A[0]'s acb channel");
printf("\n>>>>>>       linking itself to B[1]'s bca channel");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_acb;
	connect_args.to_idx = 0;
	connect_args.fr_objid = b_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_bca;
	connect_args.fr_idx            = 0;

for (i=0; i<half_A; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = b_objid[1],			
		       targetid = a_objid[i] );
 
  if (!(sts&1))
   {
    printf ("error in om$send msg=connect A[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }
/*
	For each B dump relations
*/
printf("\n\n>>> For each B dump relations::\n");
for(i=0; i<MAXB+1; i++)
 {
  printf("\n>>> B[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, b_objid[i], chan_bca);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for B[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }
/*
	Make message to send to B objects
*/
sts = om$make_message(classname="B",methodname="show_b",p_msg=&showb);

if(!(sts&1))
 {
  printf("error in om$make_message for show_b: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Send message to all B objects connected on A[0]'s "acb" channel
*/
printf("\n>>> Send message to all B's connected on A[0]'s \"acb\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "acb";
sts = om$send (msg=&showb,mode=OM_e_wrt_object,senderid=a_objid[0],
					p_chanselect=&chansel );
if(!(sts&1))
 {
  printf("error in om$send msg=show_b A[0]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Send message to all B objects connected on A[1]'s "acb" channel
*/
printf("\n>>> Send message to all B's connected on A[1]'s \"acb\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "acb";
sts = om$send (msg=&showb,mode=OM_e_wrt_object,senderid=a_objid[1],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_b A[1]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	For each A dump relations
*/
printf("\n>>> For each A dump relations\n");
for(i=0; i<MAXA+1; i++)
 {
  printf("\n>>> A[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, a_objid[i], chan_acb);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for A[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }
/*
	Make message to send to A objects
*/
sts = om$make_message(classname="A",methodname="show_a",p_msg=&showa);

if(!(sts&1))
 {
  printf("error in om$make_message for show_a: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Send message to all A objects connected on B[0]'s "bca" channel
*/
printf("\n>>> Send message to all A's connected on B[0]'s \"bca\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "bca";
sts = om$send (msg=&showa,mode=OM_e_wrt_object,senderid=b_objid[0],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_a B[0]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Send message to all A objects connected on B[1]'s "bca" channel
*/
printf("\n>>> Send message to all A's connected on B[1]'s \"bca\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "bca";
sts = om$send (msg=&showa,mode=OM_e_wrt_object,senderid=b_objid[1],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_a B[1]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Disconnect the first A contained wihtin the last half of A's
	from it's associated B.

  note:	Remember that the last half of the A's were connected to B[0] (see above).
*/
printf("\n>>> Disconnect the 1st in the 2nd half of A from corresponding B\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_acb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = 0;

     sts = om$make_message(classname = "Root",		
		           methodname = "range_disconnect",		
			   size = sizeof( struct range_disconnect_struct),
			   p_arglist = &range_disconnect_args,	
			   p_msg = &range_disconnect_msg );
     
     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = a_objid[half_A],			
	            targetid = a_objid[half_A]);

if (!(sts&1))
 {
  printf ("error in om$send msg=disconnect A[half_A] case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "acb" of A[half_A]
*/
printf("\n>>> Dump relations of the channel \"acb\" of A[half_A]\n");
printf("\n>>> A[%d]:",half_A);
sts = OMT_dump_relation( OM_Gw_current_OS, a_objid[half_A], chan_acb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for A[half_A]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "bca" for B[0]
*/
printf("\n>>> Dump relations of the channel \"bca\" of B[0] (A[MAXA/2])\n");
printf("\n>>>>>> note: \"A[half_A]\" was connected to B[0]");
printf("\n>>> B[0]:");
sts = OMT_dump_relation( OM_Gw_current_OS, b_objid[0], chan_bca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for B[0] ( A[MAXA/2] case ): %x\n",i,sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Disconnect 1st half of objects connected to B[1]
*/
printf("\n>>> Disconnect 1st half of objects connected to B[1]\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_bca;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = half_A/2;

     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = b_objid[1],			
	            targetid = b_objid[1] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range B[1] case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "bca" of B[1]
*/
printf("\n>>> Dump relations on the channel \"bca\" of B[1]\n");
sts = OMT_dump_relation( OM_Gw_current_OS, b_objid[1], chan_bca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for B[1]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations on channel "acb" of all A's
*/
printf("\n>>> Dump relations on channel \"acb\" of all A's\n");
for(i=0; i<MAXA+1; i++)
 {
  printf("\n>>> A[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, a_objid[i], chan_acb);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for A[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }
/*
	Disconnect All objects connected to A[0] on channel "acb"

  note: the last index of the relation is used if it is exceeded by the
	given "end" index

*/
printf("\n>>> Disconnect All objects connected to A[0] on channel \"acb\"\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_acb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = MAXB+99;

     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = a_objid[0],			
	            targetid = a_objid[0] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range A[0] case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "acb" of A[0]
*/
printf("\n>>> Dump relations of the channel \"acb\" of A[0]\n");
sts = OMT_dump_relation( OM_Gw_current_OS, a_objid[0], chan_acb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for A[0]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "bca" for all B's
*/
printf("\n>>> Dump relations of the channel \"bca\" for all B's\n");
for(i=0; i<MAXB+1; i++)
 {
  printf("\n>>> B[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, b_objid[i], chan_bca);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for B[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }
/*
	Disconnect LAST A from LAST B
*/
printf("\n>>> Disconnect LAST A from LAST B \"acb\"\n");
     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_acb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = MAXA;
     
     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = a_objid[MAXA],			
	            targetid = a_objid[MAXA] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range LAST A & B case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "acb" of A[MAXA]
*/
printf("\n>>> Dump relations of the channel \"acb\" of LAST A\n");
printf("\n>>> A[%d]:",MAXA);
sts = OMT_dump_relation( OM_Gw_current_OS, a_objid[MAXA], chan_acb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for LAST A: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "bca" for B[MAXB]
*/
printf("\n>>> Dump relations of the channel \"bca\" of LAST B\n");
printf("\n>>> B[%d]:",MAXB);
sts = OMT_dump_relation( OM_Gw_current_OS, b_objid[MAXB], chan_bca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for LAST B: %x\n", i, sts);
  om$report_error(sts=sts);
  exit();
 }

/*************************************************************/
/*		Restricted Section			     */
/*************************************************************/

printf("\n\n******************************************************\n");
printf("	     Restricted Tests\n");
printf("******************************************************\n\n");

chan_resacb = "ResA.acb";
chan_resbca = "ResB.bca";

/*
	Construct ResA's
*/

printf("\n>>> Table of ResA's object IDs::\n");
for (i=0; i<MAXA+1; i++)
 {
   sts = om$construct (osname="OM_TransOS_0",classname="ResA",	
					p_objid=&resa_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$construct object ResA[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    exit();
   }
  printf("\n>>> ResA[%d]: %d",i,resa_objid[i]);
 }

/*
	Construct ResB's
*/

printf("\n\n>>> Table of ResB's object IDs::\n");
for (i=0; i<MAXB+1; i++)
 {
   sts = om$construct (osname="OM_TransOS_0",classname="ResB",	
					p_objid=&resb_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$construct object ResB[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    exit();
   }
  printf("\n>>> ResB[%d]: %d ",i,resb_objid[i]);
 }

/*
	Connect last ResA to last ResB
*/

printf("\n\n>>> Connect Last ResA to Last ResB\n");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[MAXA];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

	sts = om$make_message(classname = "Root",		
			      methodname = "connect",		
			      size = sizeof( struct connect_struct),
			      p_arglist = &connect_args,	
			      p_msg = &connect_msg );
	if(!(sts&1))
 	{
  	   printf("error in om$make_message for connect: %x\n",  sts);
  	   om$report_error(sts=sts);
  	   exit();
 	}
	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[MAXA],			
		       targetid = resb_objid[MAXB] );

if (!(sts&1))
 {
  printf ("error in om$send msg=connect LAST ResA to LAST ResB: %x\n", i,
sts );
  om$report_error(sts=sts);
  exit();
 }

/*
	Connect last half of ResB's to ResA[0]

*/

printf("\n\n>>> Connect last half of ResB's to ResA[0]");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[0];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

for (i=half_B; i<MAXB; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[0],			
		       targetid = resb_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$send msg=connect ResB[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }

/*
	Connect last half of ResA's to ResB[0]

*/

printf("\n\n>>> Connect last half of ResA's to ResB[0]");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resacb;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resb_objid[0];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resbca;
	connect_args.fr_idx            = 0;

for (i=half_A; i<MAXA; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = resb_objid[0],			
		       targetid = resa_objid[i] );

  if (!(sts&1))
   {
    printf ("error in om$send msg=connect ResA[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }

/*
	Connect first half of ResB's to ResA[1]

  note: a many-to-many object existed for ResB[0] thus a connection between
	two many-to-many objects occurs

*/

printf("\n\n>>> Connect first half of ResB's to ResA[1]");
printf("\n>>>>>> note: an entry was inserted into ResB[0]'s bca channel");
printf("\n>>>>>>       linking itself to ResA[1]'s acb channel");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resbca;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resa_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resacb;
	connect_args.fr_idx            = 0;

for (i=0; i<half_B; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = resa_objid[1],			
		       targetid = resb_objid[i] );
 
  if (!(sts&1))
   {
    printf ("error in om$send msg=connect ResB[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }

/*
	Connect first half of ResA's to ResB[1]

  note: a many-to-many connection existed for ResA[0] thus a connection
between
	two many-to-many connections occurs

*/

printf("\n\n>>> Connect first half of ResA's to ResB[1]");
printf("\n>>>>>> note: an entry was inserted into ResA[0]'s acb channel");
printf("\n>>>>>>       linking itself to ResB[1]'s bca channel");

	connect_args.to_sel.type = OM_e_name;
	connect_args.to_sel.u_sel.name = chan_resacb;
	connect_args.to_idx = 0;
	connect_args.fr_objid = resb_objid[1];
	connect_args.fr_os = OM_Gw_current_OS;
	connect_args.fr_sel.type = OM_e_name;
	connect_args.fr_sel.u_sel.name = chan_resbca;
	connect_args.fr_idx            = 0;

for (i=0; i<half_A; i++)
 {
	sts = om$send (msg = &connect_msg,			
		       senderid = resb_objid[1],			
		       targetid = resa_objid[i] );
 
  if (!(sts&1))
   {
    printf ("error in om$send msg=connect ResA[%d]: %x \n", i, sts );
    om$report_error(sts=sts);
    printf("iteration: %d\n", i);
    exit();
   }
 }

/*
	For each ResB dump relations
*/

printf("\n\n>>> For each ResB dump relations::\n");
for(i=0; i<MAXB+1; i++)
 {
  printf("\n>>> ResB[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, resb_objid[i], chan_resbca);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for ResB[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }

/*
	Make message to send to ResB objects
*/

sts = om$make_message(classname="ResB",methodname="show_b",p_msg=&showb);

if(!(sts&1))
 {
  printf("error in om$make_message for show_b: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Send message to all ResB objects connected on ResA[0]'s "acb" channel
*/

printf("\n>>> Send message to all ResB's connected on ResA[0]'s \"acb\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "ResA.acb";
sts = om$send (msg=&showb,mode=OM_e_wrt_object,senderid=resa_objid[0],
					p_chanselect=&chansel );
if(!(sts&1))
 {
  printf("error in om$send msg=show_b ResA[0]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Send message to all ResB objects connected on ResA[1]'s "acb" channel
*/

printf("\n>>> Send message to all ResB's connected on ResA[1]'s \"acb\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "ResA.acb";
sts = om$send (msg=&showb,mode=OM_e_wrt_object,senderid=resa_objid[1],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_b ResA[1]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	For each ResA dump relations
*/

printf("\n>>> For each ResA dump relations\n");
for(i=0; i<MAXA+1; i++)
 {
  printf("\n>>> ResA[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, resa_objid[i], chan_resacb);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for ResA[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }

/*
	Make message to send to ResA objects
*/

sts = om$make_message(classname="ResA",methodname="show_a",p_msg=&showa);

if(!(sts&1))
 {
  printf("error in om$make_message for show_a: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Send message to all ResA objects connected on ResB[0]'s "bca" channel
*/

printf("\n>>> Send message to all ResA's connected on ResB[0]'s \"bca\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "ResB.bca";
sts = om$send (msg=&showa,mode=OM_e_wrt_object,senderid=resb_objid[0],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_a ResB[0]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Send message to all ResA objects connected on ResB[1]'s "bca" channel
*/

printf("\n>>> Send message to all ResA's connected on ResB[1]'s \"bca\" chan\n");
chansel.type = OM_e_name;
chansel.u_sel.name = "ResB.bca";
sts = om$send (msg=&showa,mode=OM_e_wrt_object,senderid=resb_objid[1],
					p_chanselect=&chansel );

if(!(sts&1))
 {
  printf("error in om$send msg= show_a ResB[1]: %x\n",  sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Disconnect the first ResA contained wihtin the last half of ResA's
	from it's associated ResB.

  note:	Remember that the last half of the ResA's were connected to
ResB[0] (see above).
*/

printf("\n>>> Disconnect the 1st in the 2nd half of ResA from corresponding ResB\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_resacb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = 0;

     sts = om$make_message(classname = "Root",		
		           methodname = "range_disconnect",		
			   size = sizeof( struct range_disconnect_struct),
			   p_arglist = &range_disconnect_args,	
			   p_msg = &range_disconnect_msg );
     
     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = resa_objid[half_A],			
	            targetid = resa_objid[half_A]);

if (!(sts&1))
 {
  printf ("error in om$send msg=disconnect ResA[half_A] case: %x \n",
sts );
  om$report_error(sts=sts);
  exit();
 }

/*
	Dump relations of the channel "acb" of ResA[half_A]
*/

printf("\n>>> Dump relations of the channel \"acb\" of ResA[half_A]\n");
printf("\n>>> ResA[%d]:",half_A);
sts = OMT_dump_relation( OM_Gw_current_OS, resa_objid[half_A], chan_resacb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for ResA[half_A]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Dump relations of the channel "bca" for ResB[0]
*/

printf("\n>>> Dump relations of the channel \"bca\" of ResB[0] (ResA[MAXA/2])\n");
printf("\n>>>>>> note: \"ResA[half_A]\" was connected to ResB[0]");
printf("\n>>> ResB[0]:");
sts = OMT_dump_relation( OM_Gw_current_OS, resb_objid[0], chan_resbca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for ResB[0] ( ResA[MAXA/2] case ): %x\n",i,sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Disconnect 1st half of objects connected to ResB[1]
*/

printf("\n>>> Disconnect 1st half of objects connected to ResB[1]\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_resbca;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = half_A/2;

     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = resb_objid[1],			
	            targetid = resb_objid[1] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range ResB[1] case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }

/*
	Dump relations of the channel "bca" of ResB[1]
*/

printf("\n>>> Dump relations on the channel \"bca\" of ResB[1]\n");
sts = OMT_dump_relation( OM_Gw_current_OS, resb_objid[1], chan_resbca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for ResB[1]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations on channel "acb" of all ResA's
*/
printf("\n>>> Dump relations on channel \"acb\" of all A's\n");
for(i=0; i<MAXA+1; i++)
 {
  printf("\n>>> ResA[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, resa_objid[i], chan_resacb);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for ResA[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }

/*
	Disconnect All objects connected to ResA[0] on channel "acb"

  note: the last index of the relation is used if it is exceeded by the
	given "end" index

*/
printf("\n>>> Disconnect All objects connected to ResA[0] on channel \"acb\"\n");

     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_resacb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = MAXB+99;

     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = resa_objid[0],			
	            targetid = resa_objid[0] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range ResA[0] case: %x \n", sts );
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "acb" of A[0]
*/
printf("\n>>> Dump relations of the channel \"acb\" of ResA[0]\n");
sts = OMT_dump_relation( OM_Gw_current_OS, resa_objid[0], chan_resacb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for ResA[0]: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "bca" for all ResB's
*/
printf("\n>>> Dump relations of the channel \"bca\" for all ResB's\n");
for(i=0; i<MAXB+1; i++)
 {
  printf("\n>>> ResB[%d]:",i);
  sts = OMT_dump_relation( OM_Gw_current_OS, resb_objid[i], chan_resbca);
  if(!(sts&1))
   {
    printf("error in OMT_dump_relation for ResB[%d]: %x\n", i, sts);
    om$report_error(sts=sts);
    exit();
   }
 }

/*
	Disconnect LAST A from LAST ResB
*/
printf("\n>>> Disconnect LAST ResA from LAST ResB \"acb\"\n");
     range_disconnect_args.to_sel.type = OM_e_name;
     range_disconnect_args.to_sel.u_sel.name = chan_resacb;
     range_disconnect_args.low_index = 0;
     range_disconnect_args.hi_index = MAXA;
     
     sts = om$send (msg = &range_disconnect_msg,			
		    senderid = resa_objid[MAXA],			
	            targetid = resa_objid[MAXA] );

if (!(sts&1))
 {
  printf ("error in om$disconnect range LAST ResA & ResB case: %x \n", sts
);
  om$report_error(sts=sts);
  exit();
 }
/*
	Dump relations of the channel "acb" of ResA[MAXA]
*/
printf("\n>>> Dump relations of the channel \"acb\" of LAST ResA\n");
printf("\n>>> ResA[%d]:",MAXA);
sts = OMT_dump_relation( OM_Gw_current_OS, resa_objid[MAXA], chan_resacb);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for LAST ResA: %x\n", sts);
  om$report_error(sts=sts);
  exit();
 }

/*
	Dump relations of the channel "bca" for ResB[MAXB]
*/

printf("\n>>> Dump relations of the channel \"bca\" of LAST ResB\n");
printf("\n>>> ResB[%d]:",MAXB);
sts = OMT_dump_relation( OM_Gw_current_OS, resb_objid[MAXB], chan_resbca);
if(!(sts&1))
 {
  printf("error in OMT_dump_relation for LAST ResB: %x\n", i, sts);
  om$report_error(sts=sts);
  exit();
 }

}
Ejemplo n.º 9
0
main()

{
double xmin, xmax, ymin, ymax, zmin, zmax;
int i, levels;
float aa, bb;
double drand48(); 
long mrand48();
void srand48();
char *root_page_p;
DB_3D_DBL_BOX lfkey;
#define BUILD_LFKEY3(key, xmn, ymn, zmn, xmx, ymx, zmx)  \
  	{ (key).xmin = (xmn); \
	  (key).xmax = (xmx); \
 	  (key).ymin = (ymn); \
	  (key).ymax = (ymx); \
	  (key).zmin = (zmn); \
 	  (key).zmax = (zmx); }

OM_S_MESSAGE ass_write;

char osname[30];
	
struct write_args_struct
	{
	char *new_osname;
	} write_args;

OM_S_OBJID filedobj;
uword filed_osnum;

int sts, rett, rettt;
OM_S_MESSAGE ass_add;
OM_S_OBJID objid, tstobjid;
OM_S_KEY_DESC rtree_key;
OM_S_RIP rip;

struct add_args_str
	{
	OM_p_KEY_DESC p_key;
	OM_p_OBJID p_objid;
	int (*user_compare)();
	int *ret;
	} add_args;
	
static char *OMparams[]={"DEFTRANS_GROUP_NUMOBJS=8192",NULL};

sts = om$runtime_init(paramc=1, param_list=OMparams);
if (!(sts & 1))
  {
  printf("Error in om$runtime_init : %x\n", sts);
  om$report_error(sts=sts);
  exit();
  }

/******** Construct Filed Object Space *****************/

sts = om$make_message(	classname="OMFiledOS", 
			methodname="write", 
			size=sizeof(struct write_args_struct), 
			p_arglist=&write_args, 
			p_msg=&ass_write);
			
if ( ! (sts & 1 ) )
	{
	printf(" error in make_message for write : %x\n",  sts );
	om$report_error(sts=sts);
	exit();
	}
	
#ifdef DEBUG
printf("\n*** Prepare to construct filed OS ***\n");
#endif

sts = om$construct_os(	classname="OMFiledOS",
			osnum=&filed_osnum,
			osname="Filedr3dd",
			p_objid=&filedobj);

if (!(sts&1))
	{
	printf("*** ERROR in CONSTRUCT OS ***\n");
	om$report_error(sts=sts);
	exit();
	}

#ifdef DEBUG
printf("\n*** Filed OS successfully constructed ***\n");
printf("filed_osnum: %d\n", filed_osnum);
printf("filedobj: %d\n", filedobj);
#endif

om$make_current_os( osnum=filed_osnum );


printf("\n\n\n\n\nPlease enter objid of rtree\n\n\n\n");
scanf("%d", &objid);

printf("\n\n\n*** Adding 800 keys to the rtree ***\n\n\n\n\n");

sts = om$make_message( classname="OMrtree",
		       methodname="add",
		       size=sizeof(struct add_args_str),
		       p_arglist=&add_args,
		       p_msg=&ass_add );
if ( ! (sts & 1 ) )
  {
  printf(" Error in makeing message for add: %x\n",  sts );
  om$report_error(sts=sts);
  exit();
  }

add_args.user_compare = 0;
add_args.ret = &rett;
  
srand48(1);
for (i = 0; i < NUMKEYS; i++)
  {
  aa =  RAND;
  bb =  RAND;
  while (aa > HI_VAL - 100) 
    {
    aa = RAND;
    }
  while (bb > HI_VAL - 100) 
    {
    bb = RAND;
    }

  xmin = aa;
  ymin = bb;
  xmax = DRAND * 100 + xmin;
  ymax = DRAND * 100 + ymin;
  zmax = zmin = 0.00;
  BUILD_LFKEY3(lfkey, xmin, ymin, zmin, xmax, ymax, zmax);

  sts = om$construct( classname="OMTpr",
		      osnum=OM_Gw_current_OS,
		      p_objid=&tstobjid );
  if ( ! ( sts & 1 ) )
    {
    printf(" Error in constructing key : %d\n", sts );
    om$report_error(sts=sts);
    exit();
    }

  rtree_key.type = KEY_3D_DBL;
  rtree_key.key.p_3ddbl = &lfkey;
  add_args.p_key  = &rtree_key;
  add_args.p_objid = (OM_p_OBJID)&tstobjid;

  sts = om$send( msg=ass_add,
		 senderid=NULL_OBJID,
		 targetid=objid,
		 targetos=filed_osnum );

  if ( ! (sts & 1 ) )
    {
    printf(" error in sending add message : %x\n", sts );
    om$report_error(sts=sts);
    exit();
    }

  if (*(add_args.ret) != DB_SUCCESS)
    {
    printf(" Error return from rtree insert : %d\t***\n", *(add_args.ret));
    exit();
    }
  }

/****************** Write out Btree ***********************************/

strcpy(osname, "Filedr3dd");
write_args.new_osname = osname;
   
#ifdef DEBUG
printf("\n*** Prepare to write out the OS ***\n");
#endif

OM_Gd_write = 1;

sts = om$send(	msg=ass_write, 
		senderid=filedobj, 
		targetid=filedobj,
		targetos=filed_osnum);
		
if ( ! (sts & 1 ) )
    {
     printf(" error in send to write os: %x\n", sts );
     om$report_error(sts=sts);
     exit();
    }

#ifdef DEBUG
  levels = 5;
  root_page_p = DEREF( char, objid, rip );
  DB_dump_rtree( root_page_p, &levels);
#endif

}