Beispiel #1
0
void close_arena()
{
  CHAR_DATA *gch;
  CHAR_DATA *vch;
  int arenaplayers = 0;

  arenaopen = FALSE;

  /* unfreeze all players */
  for (vch=char_list;vch!=NULL;vch=vch->next)
  {
    if (IS_NPC(vch)) continue;
    if (vch->in_room != NULL)
    {
      if (IS_SET (vch->in_room->room_flags, ROOM_ARENA))
      {
        REMOVE_BIT(vch->act, PLR_FREEZE);
        gch = vch;
        arenaplayers++;
      }
    }
  }

  /* if there was only one player, remove him */
  if (arenaplayers <= 1)
  {
    if (arenaplayers) do_transfer(gch,"self 3054");
    do_info(NULL, "The Arena fight was cancelled due to lack of players!");
    return;
  }
  else do_info(NULL, "The arena is now closed, let the games begin!");
  return;
}
Beispiel #2
0
void do_resign(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  CHAR_DATA *gch;
  int found = 0;
  ROOM_INDEX_DATA *location;
  char buf[MAX_STRING_LENGTH];

  if (IS_NPC(ch)) return;
  if (ch->in_room != NULL)
  {
    if (!IS_SET(ch->in_room->room_flags, ROOM_ARENA))
    {
      send_to_char("Your not in the arena.\n\r",ch);
      return;
    }
  }
  sprintf(buf,"%s resigns from the arena",ch->name);
  do_info(ch,buf);
  if ((location = get_room_index(ROOM_VNUM_ALTAR)) == NULL) return;
  char_from_room(ch);
  char_to_room(ch, location);
  ch->fight_timer = 0;
  do_restore(ch, "self");
  do_call(ch, "all");
  ch->pcdata->alosses++;
  for (victim = char_list; victim != NULL; victim = victim->next)
  {
    if (IS_NPC(victim)) continue;
    if (victim->in_room != NULL && IS_SET(victim->in_room->room_flags, ROOM_ARENA) && victim->pcdata->chobj == NULL)
    {
      gch = victim;
      found++;
    }
  }
  if (found == 1)
  {
    sprintf(buf,"#C%s #oemerges victorious from the #Rarena#n",gch->name);
    gch->pcdata->awins++;
    do_info(gch,buf);
    if ((location = get_room_index(ROOM_VNUM_ALTAR)) == NULL) return;
    char_from_room(gch);
    char_to_room(gch, location);
    gch->fight_timer = 0;
    do_restore(gch, "self");
    win_prize(gch);
    pulse_arena = PULSE_ARENA;
  }
  return;
}
Beispiel #3
0
void open_arena()
{
  arenaopen = TRUE;
  next_arena_room = ARENA_LVNUM; // first person to join will be put in this room.

  if (number_range(1,10) > 3)
  {
    arena_base = FALSE;
    do_info(NULL,"The arena is now open for EVERYONE '#Larenajoin#n'");
  }
  else
  {
    do_info(NULL,"The arena is now open for BASE classes only '#Larenajoin#n'");
    arena_base = TRUE;
  }
}
Beispiel #4
0
int
test_func7(const char *path_name, const struct stat64 *stat_pointer,
	   int ftw_integer, struct FTW *ftwp)
{
	int i, found;
	const char *p;

	temp = stderr;
	do_info(path_name);

	if ((p = strstr(path_name, NFTW)) != (char *)NULL) {
		p += strlen(NFTW);
	} else {
		p = path_name;
	}

	for (found = i = 0; i < nbads; i++) {
		if (strcmp(p, badlist[i].s) == 0) {
			found++;
			break;
		}
	}

	if (!found) {
		fprintf(temp, "ERROR: Should not have traversed %s\n",
			path_name);
		return 999;
	}
	return 0;
}
Beispiel #5
0
int main(int argc, char **argv)
{ char	**real_args;

  if (argc <= 1) usage();

  argc	-= 2;
  real_args = &(argv[2]);
  
  if (!strcmp(argv[1], "info"))
   do_info(argc, real_args);
  elif (!strcmp(argv[1], "monitor"))
   do_monitor(argc, real_args);
  elif (!strcmp(argv[1], "show"))
   do_show(argc, real_args);
  elif (!strcmp(argv[1], "showall"))
   do_showall(argc, real_args);
  elif (!strcmp(argv[1], "list"))
   do_list(argc, real_args);
  elif (!strcmp(argv[1], "owners"))
   do_owners(argc, real_args);
  elif (!strncmp(argv[1], "avail", 5))
   do_avail(argc, real_args);
  elif (!strcmp(argv[1], "help"))
   do_help(argc, real_args);
  else
   { fprintf(stderr, "network: unknown option %s\n", argv[1]);
Beispiel #6
0
int
test_func14(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	int i;
	const char *p;

	temp = stderr;
	do_info(path_name);

	if ((p = strstr(path_name, NFTW)) != (char *)NULL) {
		p += strlen(NFTW);
	} else {
		p = path_name;
	}

	for (i = 0; i < nbads; i++) {
		if (strcmp(p, badlist[i].s) == 0) {

			if (ftw_integer == FTW_DNR) {
				if (ftw_integer != badlist[i].i) {
					fprintf(temp,
						"ERROR: Bad third arg to fn() for %s\n",
						path_name);
					fprintf(temp, "       Expected %s\n",
						ftw_mnemonic(badlist[i].i));
					fprintf(temp, "       Received %s\n",
						ftw_mnemonic(ftw_integer));
					return 999;
				}
			}
		}
	}
	return 0;
}
Beispiel #7
0
int
test_func22(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	int fd;
	int i;

	do_info(path_name);
	/* get next file descriptor available */
	if ((fd = open(path_name, O_RDONLY)) == -1) {
		perror("open");
		return 999;
	}

	if (close(fd) == -1) {
		perror("close");
		return 999;
	}

	for (i = 0; i <= ftwp->level + 1; i++) {
		if (fd == next_fd[i])
			return 0;
	}

	fprintf(temp,
		"ERROR: At the start of the traversal the next four fds were: %d, %d, %d, and %d\n",
		next_fd[0], next_fd[1], next_fd[2], next_fd[3]);
	fprintf(temp, "       Traversing level %d the next fd is %d\n",
		ftwp->level, fd);
	return 999;
}
Beispiel #8
0
static BIF_RETTYPE
persistent_term_info_trap(BIF_ALIST_1)
{
    TrapData* trap_data = (TrapData *) BIF_ARG_1;
    Eterm res;
    Uint bump_reds;
    Binary* mbp;

    mbp = erts_magic_ref2bin(BIF_ARG_1);
    trap_data = ERTS_MAGIC_BIN_DATA(mbp);
    bump_reds = trap_data->remaining;
    res = do_info(BIF_P, trap_data);
    if (trap_data->remaining > 0) {
        ASSERT(res == am_ok);
        BUMP_ALL_REDS(BIF_P);
        BIF_TRAP1(&persistent_term_info_export, BIF_P, BIF_ARG_1);
    } else {
        /*
         * Decrement ref count (and possibly delete the hash table
         * and associated literal area).
         */
        dec_table_refc(BIF_P, trap_data->table);
        trap_data->table = NULL; /* Prevent refc decrement */
        BUMP_REDS(BIF_P, bump_reds);
        ASSERT(is_map(res));
        BIF_RET(res);
    }
}
Beispiel #9
0
void do_arenajoin(CHAR_DATA *ch, char *argument)
{
  char buf[MAX_STRING_LENGTH];
  int arenapeople=0;
  DESCRIPTOR_DATA *d;

  if (IS_NPC(ch)) return;
  if (ch->fight_timer > 0)
  {
    send_to_char("You have a fighttimer.\n\r",ch);
    return;
  }
  if ((get_age(ch) - 17) < 2)
  {
    send_to_char("Your still a newbie.\n\r",ch);
    return;
  }
  if (!arenaopen)
  {
    send_to_char("The arena is closed.\n\r",ch);
    return;
  }
  if (arena_base && is_upgrade(ch))
  {
    send_to_char("Your an upgrade, not for you this time.\n\r",ch);
    return;
  }
  if (ch->in_room != NULL)
  {
    if (IS_SET (ch->in_room->room_flags, ROOM_ARENA))
    {
      send_to_char("Your in the arena.\n\r",ch);
      return;
    }
  }
  for ( d = descriptor_list; d != NULL; d = d->next )
  {
    if ( d->character != NULL )
    {
      if (!d->connected == CON_PLAYING) continue;
      if (d->character->in_room != NULL)
      {
        if (IS_SET (d->character->in_room->room_flags, ROOM_ARENA)) arenapeople++;
      }
    }
  }
  if (arenapeople > ARENA_PLAYERS)
  {
    send_to_char("The arena is crowded atm.\n\r",ch);
    return;
  }
  char_from_room(ch);
  char_to_room(ch, get_room_index(next_arena_room));
  next_arena_room += (ARENA_HVNUM - ARENA_LVNUM) / ARENA_PLAYERS;
  sprintf(buf,"%s has joined the arena!",ch->name);
  do_info(ch,buf);
  do_restore(ch,"self");
  SET_BIT(ch->act, PLR_FREEZE);
  return;
}
Beispiel #10
0
void do_defect(CHAR_DATA *ch, char *argument)
{
    char arg1[MAX_STRING_LENGTH];
    char buf[MAX_STRING_LENGTH];

    argument = one_argument(argument, arg1);

    if (ch->pcdata->kingdom == 0)
    {
        send_to_char("Defect from what?  You are not part of a kingdom!",ch);
        return;
    }

    if (str_cmp(arg1,"defect"))
    {
        send_to_char("If you want to defect you MUST type it twice.\n\rI.e defect defect\n\r",ch);
        return;
    }

    if ( !str_cmp(kingdom_table[ch->pcdata->kingdom].general,ch->name) || !str_cmp(kingdom_table[ch->pcdata->kingdom].leader,ch->name))
    {
        send_to_char("You may not defect without first renouncing your title.\n\r",ch);
        return;
    }

    send_to_char("You defect from your kingdom...",ch);
    sprintf(buf,"%s has defected.",ch->name);
    do_info(ch,buf);
    ch->pcdata->kingdom = 0;
    save_char_obj(ch);
    save_kingdoms();
    return;
}
Beispiel #11
0
BIF_RETTYPE persistent_term_info_0(BIF_ALIST_0)
{
    HashTable* hash_table = (HashTable *) erts_atomic_read_nob(&the_hash_table);
    TrapData* trap_data;
    Eterm res = NIL;
    Eterm magic_ref;
    Binary* mbp;

    magic_ref = alloc_trap_data(BIF_P);
    mbp = erts_magic_ref2bin(magic_ref);
    trap_data = ERTS_MAGIC_BIN_DATA(mbp);
    trap_data->table = hash_table;
    trap_data->idx = 0;
    trap_data->remaining = hash_table->num_entries;
    trap_data->memory = 0;
    res = do_info(BIF_P, trap_data);
    if (trap_data->remaining == 0) {
        BUMP_REDS(BIF_P, hash_table->num_entries);
        trap_data->table = NULL; /* Prevent refc decrement */
        BIF_RET(res);
    } else {
        /*
         * Increment the ref counter to prevent an update operation (by put/2
         * or erase/1) to delete this hash table.
         */
        erts_atomic_inc_nob(&hash_table->refc);
        BUMP_ALL_REDS(BIF_P);
        BIF_TRAP2(&persistent_term_info_export, BIF_P, magic_ref, res);
    }
}
Beispiel #12
0
int
test_func21(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	int fd;

	do_info(path_name);
	temp = stderr;
	/* get next file descriptor available */
	if ((fd = open(path_name, O_RDONLY)) == -1) {
		perror("open");
		return 999;
	}

	if (close(fd) == -1) {
		perror("close");
		return 999;
	}

	if ((fd != next_fd[0]) && (fd != next_fd[1])) {
		fprintf(temp,
			"ERROR: Expected next fd available to be %d (none used) or %d (1 used)\n",
			next_fd[0], next_fd[1]);
		fprintf(temp, "       Next fd available is %d\n", fd);
		return 999;
	}
	return 0;
}
Beispiel #13
0
void load_arti()
{
	char buf[MSL];
	//Right now, this will just load an arti randomly to the mud
    //But if you want you can make it load by the person who gets the last mkill or whatever
    //Zarius
	randomize_object(number_range(33960, 33976));
	xprintf_2(buf, "#7The Gods smile down and drop an #0Artifact#n into the world!\n\r" );
	do_info( NULL, buf );
}
Beispiel #14
0
int
test_func18(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	do_info(path_name);
	if (ftw_integer == FTW_SLN) {
		visit++;
		return 999;
	}
	return 0;
}
Beispiel #15
0
void handle_con_note_finish (DESCRIPTOR_DATA *d, char * argument)
{
        char buf[MAX_STRING_LENGTH];
	CHAR_DATA *ch = d->character;
	
		if (!ch->pcdata->in_progress)
		{
			d->connected = CON_PLAYING;
			bug ("nanny: In CON_NOTE_FINISH, but no note in progress",0);
			return;
		}
		switch (tolower(argument[0]))
		{
			case 'c': /* keep writing */
				write_to_buffer (d,"Continuing note...\n\r",0);
				d->connected = CON_NOTE_TEXT;
				break;
			case 'v': /* view note so far */
				if (ch->pcdata->in_progress->text)
				{
					write_to_buffer (d,GREEN "Text of your note so far:" NO_COLOR "\n\r",0);
					write_to_buffer (d, ch->pcdata->in_progress->text, 0);
				}
				else
					write_to_buffer (d,"You haven't written a thing!\n\r\n\r",0);
				write_to_buffer (d, szFinishPrompt, 0);
				write_to_buffer (d, "\n\r",0);
				break;
			case 'p': /* post note */
      if (board_number(ch->pcdata->board) < 4 && is_full_name("all", ch->pcdata->in_progress->to_list)) 
      {
        xprintf(buf,"A new note has been posted by %s on board %d",
          ch->name, board_number(ch->pcdata->board)+1);
        do_info(ch, buf);
      }
				finish_note (ch->pcdata->board, ch->pcdata->in_progress);
				write_to_buffer (d, "Note posted.\n\r",0);
				d->connected = CON_PLAYING;
				ch->pcdata->in_progress = NULL;
				act (BOLD GREEN "$n finishes $s note." NO_COLOR , ch, NULL, NULL, TO_ROOM);
				break;
			case 'f':
				write_to_buffer (d, "Note cancelled!\n\r",0);
				free_note (ch->pcdata->in_progress);
				ch->pcdata->in_progress = NULL;
				d->connected = CON_PLAYING;
				break;
			default: /* invalid response */
				write_to_buffer (d, "Huh? Valid answers are:\n\r\n\r",0);
				write_to_buffer (d, szFinishPrompt, 0);
				write_to_buffer (d, "\n\r",0);
		}
  if (d->connected == CON_PLAYING) REMOVE_BIT(ch->extra, EXTRA_AFK);
}
Beispiel #16
0
int
test_func4(const char *path_name, const struct stat64 *stat_pointer,
	   int ftw_integer, struct FTW *ftwp)
{
	visit++;
	do_info(path_name);

	/* Stop traversal once directory is visited. */
	if (strcmp(path_name, "./tmp/data/d777") == 0)
		return 999;
	return 0;
}
Beispiel #17
0
void file_inf()
{
    int ok;
    FILE *fp;
    char filename[256];
    sprintf(filename,"%s.pars",this_file);
    ping();
    if(!file_selector("Save info",filename,"*.pars*"))return;
    /* if(new_string("Filename: ",filename)==0)return; */
    open_write_file(&fp,filename,&ok);
    if(!ok)return;
    redraw_params();
    do_info(fp);
    fclose(fp);
}
Beispiel #18
0
int
test_func15(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{

	temp = stderr;
	do_info(path_name);
	if (strcmp(path_name, "./tmp/data/d666/errs") == 0) {
		if (ftw_integer != FTW_NS) {
			fprintf(temp,
				"ERROR: FTW_NS not passed for file in unsearchable dir\n");
			return 999;
		}
	}
	return 0;
}
Beispiel #19
0
int main(int argc, char **argv)
{
	struct info_options *opts = (struct info_options *)malloc(sizeof(struct info_options));
	int client_sock;

	parse_options(argc, argv, opts);

	client_sock = unix_client_connect(opts->unix_path, 10);

	if (client_sock < 0) {
		fprintf(stderr, "cannot open client socket (errno %d)\n", errno);
		return 1;
	}

	do_info(opts, client_sock);

	return 0;
}
Beispiel #20
0
void do_renounce(CHAR_DATA *ch, char *argument)
{
    char arg1[MAX_STRING_LENGTH];
    char buf[MAX_STRING_LENGTH];

    argument = one_argument(argument, arg1);

    if (ch->pcdata->kingdom == 0)
    {
        send_to_char("Renounce what?  You are not part of a kingdom!",ch);
        return;
    }

    if (str_cmp(arg1,"renounce"))
    {
        send_to_char("If you want to renounce your title you MUST type it twice.\n\rI.e renounce renounce\n\r",ch);
        return;
    }

    if ( str_cmp(kingdom_table[ch->pcdata->kingdom].general,ch->name) && str_cmp(kingdom_table[ch->pcdata->kingdom].leader,ch->name))
    {
        send_to_char("You may not renounce without first possessing a title.\n\r",ch);
        return;
    }

    if ( !str_cmp(kingdom_table[ch->pcdata->kingdom].general,ch->name) )
    {
        free_string(kingdom_table[ch->pcdata->kingdom].general);
        kingdom_table[ch->pcdata->kingdom].general = str_dup("No One!");
    }
    else if( !str_cmp(kingdom_table[ch->pcdata->kingdom].leader,ch->name) )
    {
        free_string(kingdom_table[ch->pcdata->kingdom].leader);
        kingdom_table[ch->pcdata->kingdom].leader = str_dup("No One!");
    }
    send_to_char("You renounce your title...",ch);
    sprintf(buf,"%s has renounced their title..",ch->name);
    do_info(ch,buf);
    save_char_obj(ch);
    save_kingdoms();
    return;
}
gint main (gint argc, gchar **argv)
{
	if (argc < 2)
		do_usage (argv[0]);

	camel_init (NULL, 0);

	if (!strcmp(argv[1], "compress"))
		return do_compress (argc, argv);
	else if (!strcmp(argv[1], "dump"))
		return do_dump (argc, argv);
	else if (!strcmp(argv[1], "info"))
		return do_info (argc, argv);
	else if (!strcmp(argv[1], "check"))
		return do_check (argc, argv);
	else if (!strcmp(argv[1], "perf"))
		return do_perf (argc, argv);

	do_usage (argv[0]);
	return 1;
}
Beispiel #22
0
int
test_func23(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	visit++;
	temp = stderr;
	do_info(path_name);

	if (ftw_integer == FTW_F) {

#ifdef DEBUG
		fprintf(temp,
			"INFO: fn() returning non-zero after traversal of %d objects\n",
			visit);
#endif

		return 999;
	}

	return 0;
}
Beispiel #23
0
void do_addchange(CHAR_DATA *ch, char *argument )
{
    CHANGE_DATA * new_table;
    char buf[MSL];

    if ( IS_NPC( ch ) )
        return;

    if ( argument[0] == '\0' )
    {
        send_to_char( "Syntax: Addchange ChangeString\n\r", ch );
        send_to_char( "Type '#Rchanges#n' to view the list.#n\n\r", ch );
        return;
    }

    maxChanges++;
    totChanges++;
    new_table = realloc( changes_table, sizeof( CHANGE_DATA ) *(maxChanges+1) );

    if (!new_table)                                         /* realloc failed */
    {
        send_to_char ("Memory allocation failed. Brace for impact.\n\r",ch);
        return;
    }

    changes_table = new_table;

    changes_table[maxChanges-1].change  = str_dup( argument );
    changes_table[maxChanges-1].coder   = str_dup( ch->name );
    changes_table[maxChanges-1].date    = str_dup(current_date());
    changes_table[maxChanges-1].mudtime = current_time;

    send_to_char("Changes Created.\n\r",ch);
    send_to_char("Type 'changes' to see the changes.\n\r",ch);
    sprintf(buf,"New Change (##%d) added to the mud, type '#Cchanges#n' to see it.",totChanges);
    do_info(ch,buf);
    save_changes();
    return;
}
Beispiel #24
0
void do_addchange( CHAR_DATA * ch, char *argument )
{
   CHANGE_DATA *new_table;

   if( IS_NPC( ch ) )
      return;

   if( argument[0] == '\0' )
   {
      send_to_char( "Syntax: Addchange ChangeString\r\n", ch );
      send_to_char( "&cType '&cchanges&c' to view the list.&d\r\n", ch );
      return;
   }

   maxChanges++;
   new_table = realloc( changes_table, sizeof( CHANGE_DATA ) * ( maxChanges + 1 ) );

   if( !new_table )  /* realloc failed */
   {
      send_to_char( "Memory allocation failed. Brace for impact.\r\n", ch );
      return;
   }

   changes_table = new_table;

   changes_table[maxChanges - 1].change = str_dup( argument );
   changes_table[maxChanges - 1].coder = str_dup( ch->name );
   changes_table[maxChanges - 1].date = str_dup( current_date(  ) );
   changes_table[maxChanges - 1].mudtime = current_time;

   send_to_char( "Changes Created.\r\n", ch );
   send_to_char( "Type 'changes' to see the changes.\r\n", ch );
   do_info( ch, " &zNew Change added to the mud, type '&Cchanges&z' to see it&z" );
   save_changes(  );
   return;
}
Beispiel #25
0
int
test_func19(const char *path_name, const struct stat64 *stat_pointer,
	    int ftw_integer, struct FTW *ftwp)
{
	do_info(path_name);
	temp = stderr;
	visit++;
	if (ftw_integer == FTW_DNR) {
		if (strcmp(path_name, "./tmp/data/d333") == 0) {
			return 0;
		} else {
			fprintf(temp,
				"ERROR: When FTW_DNR is passed to the function fn the\n");
			fprintf(temp,
				"       descendants of the directory should not have\n");
			fprintf(temp, "       Been processed\n");
			return 999;
		}
	} else {
		fprintf(temp,
			"ERROR: Directory has read permission or FTW_DNR was not passed to fn\n");
		return 999;
	}
}
int
main (int argc, char **argv)
{
	int exit = 0;
	char *buffer = g_new (char, 1024) ;
	GIOChannel *ioc;
	guint watch_id = 0;
	GOptionContext *ctx = NULL;
	GError *error = NULL;

	/* default to interactive on a terminal */
	interactive = isatty (0);

	ctx = g_option_context_new("test-vfs");
	g_option_context_add_main_entries(ctx, options, NULL);

	if (!g_option_context_parse(ctx, &argc, &argv, &error)) {
		g_printerr("main: %s\n", error->message);

		g_error_free(error);
		g_option_context_free(ctx);
		return 1;
	}

	g_option_context_free(ctx);

	files = g_hash_table_new (g_str_hash, g_str_equal);

	if (noninteractive)
		interactive = FALSE;

	if (interactive)
		vfserr = stderr;
	else
		vfserr = stdout;

	if (!mate_vfs_init ()) {
		fprintf (vfserr, "Cannot initialize mate-vfs.\n");
		return 1;
	}
	mate_vfs_module_callback_push
		(MATE_VFS_MODULE_CALLBACK_AUTHENTICATION,
		 authentication_callback, NULL, NULL);

	if (argc == 1)
		cur_dir = g_get_current_dir ();
	else
		cur_dir = g_strdup(argv[1]);

	if (cur_dir && !G_IS_DIR_SEPARATOR (cur_dir [strlen (cur_dir) - 1]))
		cur_dir = g_strconcat (cur_dir, G_DIR_SEPARATOR_S, NULL);

	if (interactive == TRUE) {
		main_loop = g_main_loop_new (NULL, TRUE);
		ioc = g_io_channel_unix_new (0 /* stdin */);
		g_io_channel_set_encoding (ioc, NULL, NULL);
		g_io_channel_set_buffered (ioc, FALSE);
		watch_id = g_io_add_watch (ioc,
					   G_IO_IN | G_IO_HUP | G_IO_ERR,
					   callback, buffer);
		g_io_channel_unref (ioc);
	}

	while (!exit) {
		char *ptr;

		if (interactive) {
			fprintf (stdout,"\n%s > ", cur_dir);
			fflush (stdout);

			strcpy (buffer, "");
			g_main_loop_run (main_loop);
		} else {
			/* In non-interactive mode we just do this evil
			 * thingie */
			buffer[0] = '\0';
			fgets (buffer, 1023, stdin);
			if (!buffer [0]) {
				exit = 1;
				continue;
			}
		}

		if (!buffer || buffer [0] == '#')
			continue;

		arg_data = g_strsplit (g_strchomp (buffer), delim, -1);
		arg_cur  = 0;
		if ((!arg_data || !arg_data[0]) && interactive) continue;
		if (!interactive)
			printf ("Command : '%s'\n", arg_data [0]);
		ptr = arg_data[arg_cur++];
		if (!ptr)
			continue;

		if (g_ascii_strcasecmp (ptr, "ls") == 0)
			do_ls ();
		else if (g_ascii_strcasecmp (ptr, "cd") == 0)
			do_cd ();
		else if (g_ascii_strcasecmp (ptr, "dump") == 0)
			do_dump ();
		else if (g_ascii_strcasecmp (ptr, "type") == 0 ||
			 g_ascii_strcasecmp (ptr, "cat") == 0)
			do_cat ();
		else if (g_ascii_strcasecmp (ptr, "cp") == 0)
			do_cp ();
		else if (g_ascii_strcasecmp (ptr, "rm") == 0)
			do_rm ();
		else if (g_ascii_strcasecmp (ptr, "mkdir") == 0)
			do_mkdir ();
		else if (g_ascii_strcasecmp (ptr, "rmdir") == 0)
			do_rmdir ();
		else if (g_ascii_strcasecmp (ptr, "mv") == 0)
			do_mv ();
		else if (g_ascii_strcasecmp (ptr, "info") == 0 ||
			 g_ascii_strcasecmp (ptr, "stat") == 0)
			do_info ();
		else if (g_ascii_strcasecmp (ptr, "findtrash") == 0)
			do_findtrash ();
		else if (g_ascii_strcasecmp (ptr, "ssl") == 0)
			do_ssl ();
		else if (g_ascii_strcasecmp (ptr, "sync") == 0)
			fprintf (vfserr, "a shell is like a boat, it lists or syncs (RMS)\n");
		else if (g_ascii_strcasecmp (ptr,"help") == 0 ||
			 g_ascii_strcasecmp (ptr,"?")    == 0 ||
			 g_ascii_strcasecmp (ptr,"info") == 0 ||
			 g_ascii_strcasecmp (ptr,"man")  == 0)
			list_commands ();
		else if (g_ascii_strcasecmp (ptr,"exit") == 0 ||
			 g_ascii_strcasecmp (ptr,"quit") == 0 ||
			 g_ascii_strcasecmp (ptr,"q")    == 0 ||
			 g_ascii_strcasecmp (ptr,"bye") == 0)
			exit = 1;

		/* File ops */
		else if (g_ascii_strcasecmp (ptr, "open") == 0)
			do_open ();
		else if (g_ascii_strcasecmp (ptr, "create") == 0)
			do_create ();
		else if (g_ascii_strcasecmp (ptr, "close") == 0)
			do_close ();
		else if (g_ascii_strcasecmp (ptr, "handleinfo") == 0)
			do_handleinfo ();
		else if (g_ascii_strcasecmp (ptr, "read") == 0)
			do_read ();
		else if (g_ascii_strcasecmp (ptr, "seek") == 0)
			do_seek ();
		
		else
			fprintf (vfserr, "Unknown command '%s'", ptr);

		g_strfreev (arg_data);
		arg_data = NULL;
	}

	if (interactive) {
		g_source_remove (watch_id);
		g_main_loop_unref (main_loop);
		main_loop = NULL;
	}

	g_free (buffer);
	g_free (cur_dir);

	close_files ();

	return 0;
}
void
ReplicationOptimizer::notifyDownContact(NodeRef node)
{
    if (utilFunction) {
        utilFunction->notifyDownContact(node);
    }

    string neighbor_id = Node::idString(node);

    {
        node_map_t::iterator it = node_map.find(neighbor_id);
        if (it == node_map.end()) {
            HAGGLE_ERR("Node not in data structure.\n");
            return;
        }
        node_map.erase(it);
    }

    neighbor_node_id_map_t::iterator it = utils.find(neighbor_id);
    if (it == utils.end()) {
        // no data objects?
        if (dobjs.size() != 0) {
            errorCount++;
            HAGGLE_ERR("Missing utility for <node, data object> pairs.\n");
        }
        return;
    }

    for (; it != utils.end() && (*it).first == neighbor_id; it++) {
        ReplicationDataObjectUtilityMetadataRef do_info((*it).second);
        // CBMEN, HL, Begin
        meta_map_t::iterator mit = meta.find(getKey(do_info->getId(), do_info->getNodeId()));
        if (mit != meta.end()) {
            meta.erase(mit);
        }
        if (!do_info) {
            errorCount++;
            HAGGLE_ERR("NULL metadata.\n");
            continue;
        }
        dobj_id_map_t::iterator itt = dobjs.find(do_info->getId());
        List<string> toErase;
        for (; itt !=dobjs.end() && (*itt).first == do_info->getId(); itt++) {
            if ((*itt).second.getObj() == do_info.getObj()) {
                toErase.push_back((*itt).first);
            }
        }

        for (List<string>::iterator eit = toErase.begin(); eit != toErase.end(); eit++) {
            itt = dobjs.find(*eit);
            if (itt != dobjs.end()) {
                dobjs.erase(itt);
            }
        }

        // CBMEN, HL, End
    }

    it = utils.find(neighbor_id);
    while (it != utils.end()) {
        utils.erase(it);
        it = utils.find(neighbor_id);
    }

}
void
ReplicationOptimizer::notifyDelete(DataObjectRef dObj)
{
    if (utilFunction) {
        utilFunction->notifyDelete(dObj);
    }

    string dobj_id = DataObject::idString(dObj);

    {
        dobj_id_map_t::iterator it = dobjs.find(dobj_id);
        if (it == dobjs.end()) {
            errorCount++;
            HAGGLE_ERR("Data object missing: %s\n", dobj_id.c_str());
            return;
        }
        dobjs.erase(it);
    }

    dobj_id_map_t::iterator it = dobjs.find(dobj_id);
    if (it == dobjs.end()) {
        // no nodes?
        if (utils.size() != 0) {
            errorCount++;
            HAGGLE_ERR("Missing utility for <node, data object> pairs.\n");
        }
        return;
    }

    // go through the data object utility states and remove them from
    // all the data structures
    for (; (it != dobjs.end()) && ((*it).first == dobj_id); it++) {
        ReplicationDataObjectUtilityMetadataRef do_info((*it).second);
        if (!do_info) {
            errorCount++;
            HAGGLE_ERR("NULL metadata.\n");
            continue;
        }

        // CBMEN, HL, Begin
        meta_map_t::iterator mit = meta.find(getKey(do_info->getId(), do_info->getNodeId()));
        if (mit != meta.end()) {
            meta.erase(mit);
        }
        neighbor_node_id_map_t::iterator itt = utils.find(do_info->getNodeId());
        while ((itt != utils.end()) && ((*itt).first == do_info->getNodeId())) {
            while ((itt != utils.end()) && ((*itt).second.getObj() != do_info.getObj())) {
                itt++;
            }
            if (itt == utils.end()) {
                break;
            }
            if ((*itt).second.getObj() == do_info.getObj()) {
                utils.erase(itt);
                itt = utils.find(do_info->getNodeId());
            } else {
                break;
            }
        }

        // CBMEN, HL, End
    }

    // CBMEN, HL, Begin
    it = dobjs.find(dobj_id);
    while (it != dobjs.end()) {
        dobjs.erase(it);
        it = dobjs.find(dobj_id);
    }

    DO_map_t::iterator dit = do_map.find(dobj_id);
    if (dit != do_map.end()) {
        do_map.erase(dit);
    }

    // CBMEN, HL, End
}
int main(int argc,char **argv)
{
  char *action;
  const char *err;
  unsigned int i;
  int act = AC_NONE;	/* desired action */
  unsigned int actlen = 0;/* str_len of above */

  (void) umask(022);
  sig_pipeignore();
  when = now();

  getconfopt(argc,argv,options,1,&dir);
  initsub(0);

  sender = get_sender();
  if (!sender) die_sender();
  action = env_get("DEFAULT");
  if (!action) strerr_die2x(100,FATAL,MSG(ERR_NODEFAULT));

  if (!*sender)
    strerr_die2x(100,FATAL,MSG(ERR_BOUNCE));
  if (!sender[str_chr(sender,'@')])
    strerr_die2x(100,FATAL,MSG(ERR_ANONYMOUS));
  if (str_equal(sender,"#@[]"))
    strerr_die2x(100,FATAL,MSG(ERR_BOUNCE));

  action = set_workdir(action);

  stralloc_copys(&target,sender);
  if (action[0]) {
    i = str_chr(action,'-');
    if (action[i]) {
      action[i] = 0;
      stralloc_copys(&target,action + i + 1);
      i = byte_rchr(target.s,target.len,'=');
      if (i < target.len)
	target.s[i] = '@';
    }
  }
  stralloc_0(&target);
  set_cptarget(target.s);	/* for copy() */
  make_verptarget();

  act = get_act_ismod(action,&actlen);

  stralloc_copy(&from,&outlocal);
  stralloc_cats(&from,"-return-@");
  stralloc_cat(&from,&outhost);
  stralloc_0(&from);

  if (qmail_open(&qq) == -1)
    strerr_die2sys(111,FATAL,MSG(ERR_QMAIL_QUEUE));
  msg_headers(act);

  if (act == AC_SUBSCRIBE)
    do_subscribe(action);
  else if (act == AC_SC)
    do_sc(action);
  else if (str_start(action,ACTION_RC))
    do_rc_tc(action,ACTION_RC);
  else if(str_start(action,ACTION_TC))
    do_rc_tc(action,ACTION_TC);
  else if (act == AC_UNSUBSCRIBE)
    do_unsubscribe(action);
  else if (str_start(action,ACTION_UC))
    do_uc(action);
  else if (str_start(action,ACTION_VC))
    do_vc_wc(action,ACTION_VC);
  else if (str_start(action,ACTION_WC))
    do_vc_wc(action,ACTION_WC);
  else if (act == AC_LIST || act == AC_LISTN) 
    do_list(act);
  else if (act == AC_LOG)
    do_log(action,actlen);
  else if (act == AC_EDIT)
    do_edit(action);
  else if (str_start(action,ACTION_ED))
    do_ed(action);
  else if (act == AC_GET)
    do_get(action);
  else if (case_starts(action,ACTION_QUERY) ||
		case_starts(action,ALT_QUERY))
    do_query();
  else if (case_starts(action,ACTION_INFO) ||
		case_starts(action,ALT_INFO))
    do_info();
  else if (case_starts(action,ACTION_FAQ) ||
		case_starts(action,ALT_FAQ))
    do_faq();
  else if (ismod && (act == AC_HELP))
    do_mod_help();
  else
    do_help();

  err = qmail_close(&qq);
  closesub();
  if (*err != '\0')
    strerr_die4x(111,FATAL,MSG(ERR_TMP_QMAIL_QUEUE),": ",err + 1);
  strnum[fmt_ulong(strnum,qmail_qp(&qq))] = 0;
  strerr_die3x(0,INFO,"qp ",strnum);
}
int netstat_main(int argc, char **argv)
{
	enum {
		OPT_extended = 0x4,
		OPT_showroute = 0x100,
	};
	unsigned opt;
#if ENABLE_FEATURE_IPV6
	int inet = 1;
	int inet6 = 1;
#else
	enum { inet = 1, inet6 = 0 };
#endif

	/* Option string must match NETSTAT_xxx constants */
	opt = getopt32(argc, argv, "laentuwxr");
	if (opt & 0x1) { // -l
		flags &= ~NETSTAT_CONNECTED;
		flags |= NETSTAT_LISTENING;
	}
	if (opt & 0x2) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a
	//if (opt & 0x4) // -e
	if (opt & 0x8) flags |= NETSTAT_NUMERIC; // -n
	//if (opt & 0x10) // -t: NETSTAT_TCP
	//if (opt & 0x20) // -u: NETSTAT_UDP
	//if (opt & 0x40) // -w: NETSTAT_RAW
	//if (opt & 0x80) // -x: NETSTAT_UNIX
	if (opt & OPT_showroute) { // -r
#if ENABLE_ROUTE
		bb_displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended));
		return 0;
#else
		bb_error_msg_and_die("-r (display routing table) is not compiled in");
#endif
	}

	opt &= NETSTAT_ALLPROTO;
	if (opt) {
		flags &= ~NETSTAT_ALLPROTO;
		flags |= opt;
	}
	if (flags & (NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) {
		printf("Active Internet connections ");	/* xxx */

		if ((flags & (NETSTAT_LISTENING|NETSTAT_CONNECTED)) == (NETSTAT_LISTENING|NETSTAT_CONNECTED))
			printf("(servers and established)");
		else if (flags & NETSTAT_LISTENING)
			printf("(only servers)");
		else
			printf("(w/o servers)");
		printf("\nProto Recv-Q Send-Q Local Address           Foreign Address         State\n");
	}
	if (inet && flags & NETSTAT_TCP)
		do_info(_PATH_PROCNET_TCP, "AF INET (tcp)", tcp_do_one);
#if ENABLE_FEATURE_IPV6
	if (inet6 && flags & NETSTAT_TCP)
		do_info(_PATH_PROCNET_TCP6, "AF INET6 (tcp)", tcp_do_one);
#endif
	if (inet && flags & NETSTAT_UDP)
		do_info(_PATH_PROCNET_UDP, "AF INET (udp)", udp_do_one);
#if ENABLE_FEATURE_IPV6
	if (inet6 && flags & NETSTAT_UDP)
		do_info(_PATH_PROCNET_UDP6, "AF INET6 (udp)", udp_do_one);
#endif
	if (inet && flags & NETSTAT_RAW)
		do_info(_PATH_PROCNET_RAW, "AF INET (raw)", raw_do_one);
#if ENABLE_FEATURE_IPV6
	if (inet6 && flags & NETSTAT_RAW)
		do_info(_PATH_PROCNET_RAW6, "AF INET6 (raw)", raw_do_one);
#endif
	if (flags & NETSTAT_UNIX) {
		printf("Active UNIX domain sockets ");
		if ((flags & (NETSTAT_LISTENING|NETSTAT_CONNECTED)) == (NETSTAT_LISTENING|NETSTAT_CONNECTED))
			printf("(servers and established)");
		else if (flags & NETSTAT_LISTENING)
			printf("(only servers)");
		else
			printf("(w/o servers)");
		printf("\nProto RefCnt Flags       Type       State         I-Node Path\n");
		do_info(_PATH_PROCNET_UNIX, "AF UNIX", unix_do_one);
	}
	return 0;
}