1stMud/CVS/
1stMud/area/CVS/
1stMud/backup/CVS/
1stMud/bin/
1stMud/bin/CVS/
1stMud/bin/extras/
1stMud/bin/extras/CVS/
1stMud/data/CVS/
1stMud/data/i3/CVS/
1stMud/doc/1stMud/
1stMud/doc/1stMud/CVS/
1stMud/doc/CVS/
1stMud/doc/Diku/
1stMud/doc/Diku/CVS/
1stMud/doc/MPDocs/CVS/
1stMud/doc/Merc/CVS/
1stMud/doc/Rom/
1stMud/doc/Rom/CVS/
1stMud/log/CVS/
1stMud/notes/
1stMud/notes/CVS/
1stMud/player/CVS/
1stMud/player/backup/CVS/
1stMud/player/deleted/CVS/
1stMud/src/CVS/
1stMud/src/config/CVS/
1stMud/src/h/CVS/
1stMud/src/o/CVS/
1stMud/win/CVS/
/**************************************************************************
*  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
*  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
*                                                                         *
*  Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael         *
*  Chastain, Michael Quan, and Mitchell Tse.                              *
*                                                                         *
*  In order to use any part of this Merc Diku Mud, you must comply with   *
*  both the original Diku license in 'license.doc' as well the Merc       *
*  license in 'license.txt'.  In particular, you may not remove either of *
*  these copyright notices.                                               *
*                                                                         *
*  Much time and thought has gone into this software and you are          *
*  benefiting.  We hope that you share your changes too.  What goes       *
*  around, comes around.                                                  *
***************************************************************************
*       ROM 2.4 is copyright 1993-1998 Russ Taylor                        *
*       ROM has been brought to you by the ROM consortium                 *
*           Russ Taylor (rtaylor@hypercube.org)                           *
*           Gabrielle Taylor (gtaylor@hypercube.org)                      *
*           Brian Moore (zump@rom.org)                                    *
*       By using this code, you have agreed to follow the terms of the    *
*       ROM license, in the file Rom24/doc/rom.license                    *
***************************************************************************
*          1stMud ROM Derivative (c) 2001-2004 by Markanth                *
*            http://www.firstmud.com/  <markanth@firstmud.com>            *
*         By using this code you have agreed to follow the term of        *
*             the 1stMud license in ../doc/1stMud/LICENSE                 *
***************************************************************************/


#ifndef __OLC_DOFUN_H_
#define __OLC_DOFUN_H_  1

Do_Fun (do_olc_help)
{
  int i;

  chprintln (ch, "Syntax:");
  for (i = 0; i < ED_MAX; i++)
    {
      chprintlnf (ch, "\t%s %s (%s data)", n_fun,
		  olc_ed_table[i].longname, olc_ed_table[i].name);
    }
  chprintln (ch, "See 'HELP OLC' for more information.");
}


Do_Fun (do_olc)
{
  char command[MAX_INPUT_LENGTH];
  int cmd;

  if (IsNPC (ch))
    return;

  argument = one_argument (argument, command);

  if (NullStr (command))
    {

      do_olc_help (n_fun, ch, "");
      return;
    }


  for (cmd = 0; cmd < ED_MAX; cmd++)
    {
      if (!str_prefix (command, olc_ed_table[cmd].longname))
	{
	  (*olc_ed_table[cmd].do_fun) (olc_ed_table[cmd].name, ch, argument);
	  return;
	}
    }



  do_olc_help (n_fun, ch, "");
  return;
}



Do_Fun (do_aedit)
{
  AreaData *pArea;
  int value;
  char arg[MAX_STRING_LENGTH];

  if (IsNPC (ch))
    return;

  pArea = ch->in_room->area;

  argument = one_argument (argument, arg);

  if (is_number (arg))
    {
      value = atoi (arg);
      if (!(pArea = get_area_data (value)))
	{
	  chprintln (ch, "That area vnum does not exist.");
	  return;
	}
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insufficient security to create area.");
	  return;
	}

      aedit_create (arg, ch, argument);
      ch->desc->editor = ED_AREA;
      return;
    }
  else if (!str_cmp (arg, "delete"))
    {
      aedit_delete (arg, ch, argument);
      return;
    }
  if (!IsBuilder (ch, pArea))
    {
      chprintln (ch, "Insuficient security to edit area.");
      return;
    }

  edit_start (ch, pArea, ED_AREA);
  return;
}


Do_Fun (do_redit)
{
  RoomIndex *pRoom;
  char arg1[MAX_STRING_LENGTH];

  if (IsNPC (ch))
    return;

  argument = one_argument (argument, arg1);

  pRoom = ch->in_room;

  if (!str_cmp (arg1, "reset"))
    {
      if (!IsBuilder (ch, pRoom->area))
	{
	  chprintln (ch, "Insufficient security to modify rooms.");
	  return;
	}

      reset_room (pRoom);
      chprintln (ch, "Room reset.");

      return;
    }
  else if (!str_cmp (arg1, "create"))
    {
      if (NullStr (argument) || atov (argument) == 0)
	{
	  cmd_syntax (ch, NULL, n_fun, "create <vnum>", NULL);
	  return;
	}

      if (redit_create (arg1, ch, argument))
	{
	  ch->desc->editor = ED_ROOM;
	  char_from_room (ch);
	  char_to_room (ch, (RoomIndex *) ch->desc->pEdit);
	  SetBit (((RoomIndex *) ch->desc->pEdit)->area->area_flags,
		  AREA_CHANGED);
	}
      return;
    }
  else if (!str_cmp (arg1, "delete"))
    {
      redit_delete (arg1, ch, argument);
      return;
    }
  else if (!NullStr (arg1))
    {
      pRoom = get_room_index (atov (arg1));

      if (!pRoom)
	{
	  chprintln (ch, "Room vnum doesn't exist.");
	  return;
	}

      if (!IsBuilder (ch, pRoom->area))
	{
	  chprintln (ch, "Insuficient security to edit room.");
	  return;
	}

      char_from_room (ch);
      char_to_room (ch, pRoom);
    }

  if (!IsBuilder (ch, pRoom->area))
    {
      chprintln (ch, "Insuficient security to edit room.");
      return;
    }

  edit_start (ch, pRoom, ED_ROOM);
  return;
}


Do_Fun (do_oedit)
{
  ObjIndex *pObj;
  AreaData *pArea;
  char arg1[MAX_STRING_LENGTH];
  vnum_t value;

  if (IsNPC (ch))
    return;

  argument = one_argument (argument, arg1);

  if (is_number (arg1))
    {
      value = atov (arg1);
      if (!(pObj = get_obj_index (value)))
	{
	  chprintln (ch, "That vnum does not exist.");
	  return;
	}

      if (!IsBuilder (ch, pObj->area))
	{
	  chprintln (ch, "Insufficient security to modify objects.");
	  return;
	}

      edit_start (ch, pObj, ED_OBJECT);
      return;
    }
  else
    {
      if (!str_cmp (arg1, "create"))
	{
	  value = atov (argument);
	  if (NullStr (argument) || value == 0)
	    {
	      cmd_syntax (ch, NULL, n_fun, "create <vnum>", NULL);
	      return;
	    }

	  pArea = get_vnum_area (value);

	  if (!pArea)
	    {
	      chprintln (ch, "That vnum is not assigned an area.");
	      return;
	    }

	  if (!IsBuilder (ch, pArea))
	    {
	      chprintln (ch, "Insufficient security to modify objects.");
	      return;
	    }

	  if (oedit_create (arg1, ch, argument))
	    {
	      SetBit (pArea->area_flags, AREA_CHANGED);
	      ch->desc->editor = ED_OBJECT;
	    }
	  return;
	}
      else if (!str_cmp (arg1, "delete"))
	{
	  oedit_delete (arg1, ch, argument);
	  return;
	}
    }

  chprintln (ch, "There is no default object to edit.");
  return;
}


Do_Fun (do_medit)
{
  CharIndex *pMob;
  AreaData *pArea;
  vnum_t value;
  char arg1[MAX_STRING_LENGTH];

  argument = one_argument (argument, arg1);

  if (IsNPC (ch))
    return;

  if (is_number (arg1))
    {
      value = atov (arg1);
      if (!(pMob = get_char_index (value)))
	{
	  chprintln (ch, "That vnum does not exist.");
	  return;
	}

      if (!IsBuilder (ch, pMob->area))
	{
	  chprintln (ch, "Insufficient security to modify mobs.");
	  return;
	}

      edit_start (ch, pMob, ED_MOBILE);
      return;
    }
  else
    {
      if (!str_cmp (arg1, "create"))
	{
	  value = atov (argument);
	  if (NullStr (arg1) || value == 0)
	    {
	      cmd_syntax (ch, NULL, n_fun, "create <vnum>", NULL);
	      return;
	    }

	  pArea = get_vnum_area (value);

	  if (!pArea)
	    {
	      chprintln (ch, "That vnum is not assigned an area.");
	      return;
	    }

	  if (!IsBuilder (ch, pArea))
	    {
	      chprintln (ch, "Insufficient security to modify mobs.");
	      return;
	    }

	  if (medit_create (arg1, ch, argument))
	    {
	      SetBit (pArea->area_flags, AREA_CHANGED);
	      ch->desc->editor = ED_MOBILE;
	    }
	  return;
	}
      else if (!str_cmp (arg1, "delete"))
	{
	  medit_delete (arg1, ch, argument);
	  return;
	}
    }

  chprintln (ch, "There is no default mobile to edit.");
  return;
}

Do_Fun (do_cedit)
{
  ClanData *pClan;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pClan = clan_first;

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<clan>", NULL);
      return;
    }

  if (!str_cmp (arg, "save"))
    {
      rw_clan_data (act_write);
      chprintln (ch, "Clan database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new clans.");
	  return;
	}
      cedit_create (arg, ch, argument);

      return;
    }
  else if (!(pClan = clan_lookup (arg)) || NullStr (pClan->name))
    {
      chprintln (ch, "That clan does not exist.");
      return;
    }

  edit_start (ch, pClan, ED_CLAN);
  return;
}

Do_Fun (do_cmdedit)
{
  CmdData *pCmd;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<cmd>", NULL);
      return;
    }

  if (!str_cmp (arg, "save"))
    {
      rw_cmd_data (act_write);
      chprintln (ch, "Command database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new commands.");
	  return;
	}

      cmdedit_create (arg, ch, argument);

      return;
    }
  else if (!(pCmd = cmd_lookup (arg)) || NullStr (pCmd->name))
    {
      chprintln (ch, "That command does not exist.");
      return;
    }

  edit_start (ch, pCmd, ED_CMD);

  return;
}

Do_Fun (do_skedit)
{
  SkillData *pSkill;
  int value;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pSkill = &skill_table[0];

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<#|skill>",
		  NULL);
      return;
    }

  if (is_number (arg))
    value = atoi (arg);
  else
    value = skill_lookup (arg);

  if (value > -1)
    {
      pSkill = get_skill_data (value);

      if (!pSkill || NullStr (pSkill->name))
	{
	  chprintln (ch, "That skill does not exist.");
	  return;
	}

    }
  else if (!str_cmp (arg, "save"))
    {
      rw_skill_data (act_write);
      chprintln (ch, "Skill database saved.");
      return;
    }
  else if (!str_cmp (arg, "make") || !str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new skills.");
	  return;
	}

      skedit_create (arg, ch, argument);

      return;
    }

  edit_start (ch, pSkill, ED_SKILL);
  return;
}

Do_Fun (do_gredit)
{
  GroupData *pGroup;
  int value;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pGroup = &group_table[0];

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<#|group>",
		  NULL);
      return;
    }

  if (is_number (arg))
    value = atoi (arg);
  else
    value = group_lookup (arg);

  if (value > -1)
    {
      pGroup = get_group_data (value);

      if (!pGroup || NullStr (pGroup->name))
	{
	  chprintln (ch, "That skill does not exist.");
	  return;
	}

    }
  else if (!str_cmp (arg, "save"))
    {
      rw_group_data (act_write);
      chprintln (ch, "Group database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln
	    (ch, "grEdit : Insuffecient security to create new groups.");
	  return;
	}

      gredit_create (arg, ch, argument);

      return;
    }

  edit_start (ch, pGroup, ED_GROUP);
  return;
}

Do_Fun (do_raedit)
{
  RaceData *pRace;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pRace = race_first;

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<name>", NULL);
      return;
    }
  else if (!str_cmp (arg, "save"))
    {
      rw_race_data (act_write);
      chprintln (ch, "Race database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new races.");
	  return;
	}

      raedit_create (arg, ch, argument);

      return;
    }
  else if ((pRace = race_lookup (arg)) == NULL)
    {
      chprintln (ch, "That race does not exist.");
      return;
    }

  edit_start (ch, pRace, ED_RACE);
  return;
}

Do_Fun (do_cledit)
{
  ClassData *pClass;
  int value;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pClass = &class_table[0];

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<#|class>",
		  NULL);
      return;
    }

  if (is_number (arg))
    value = atoi (arg);
  else
    value = class_lookup (arg);

  if (value > -1)
    {
      pClass = get_class_data (value);

      if (!pClass || NullStr (pClass->name))
	{
	  chprintln (ch, "That class does not exist.");
	  return;
	}

    }
  else if (!str_cmp (arg, "save"))
    {
      rw_class_data (act_write);
      chprintln (ch, "Class database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln
	    (ch, "clEdit : Insuffecient security to create new class.");
	  return;
	}

      cledit_create (arg, ch, argument);

      return;
    }
  edit_start (ch, pClass, ED_CLASS);
  return;
}


Do_Fun (do_chanedit)
{
  ChannelData *pChan;
  int value;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pChan = &channel_table[0];

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<#|name>", NULL);
      return;
    }

  if (is_number (arg))
    value = atoi (arg);
  else
    value = channel_lookup (arg);

  if (value > -1)
    {
      pChan = get_chan_data (value);

      if (!pChan)
	{
	  chprintln (ch, "That channel does not exist.");
	  return;
	}

    }
  else if (!str_cmp (arg, "save"))
    {
      rw_channel_data (act_write);
      chprintln (ch, "Channel database saved.");
      return;
    }
  else if (!str_cmp (arg, "make") || !str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new channels.");
	  return;
	}

      chanedit_create (arg, ch, argument);

      return;
    }

  edit_start (ch, pChan, ED_CHAN);
  return;
}

Do_Fun (do_songedit)
{
  SongData *pSong;
  int value;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pSong = &song_table[0];

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<#|name>", NULL);
      return;
    }

  if (is_number (arg))
    value = atoi (arg);
  else
    value = song_lookup (arg);

  if (value > -1)
    {
      pSong = get_song_data (value);

      if (!pSong)
	{
	  chprintln (ch, "That song does not exist.");
	  return;
	}

    }
  else if (!str_cmp (arg, "save"))
    {
      rw_song_data (act_write);
      chprintln (ch, "Song database saved.");
      return;
    }
  else if (!str_cmp (arg, "make") || !str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new songs.");
	  return;
	}

      songedit_create (arg, ch, argument);

      return;
    }

  edit_start (ch, pSong, ED_SONG);
  return;
}

Do_Fun (do_mudedit)
{
  if (IsNPC (ch))
    return;

  if (get_trust (ch) < MAX_LEVEL - 1)
    {
      chprintln (ch, "Insufficient security to edit mud data.");
      return;
    }

  edit_start (ch, &mud_info, ED_Mud);
  return;
}


Do_Fun (do_dedit)
{
  DeityData *pDeity;
  char arg[MSL];

  if (IsNPC (ch))
    return;

  pDeity = deity_first;

  argument = one_argument (argument, arg);

  if (NullStr (arg))
    {
      cmd_syntax (ch, NULL, n_fun, "create <name>", "save", "<name>", NULL);
      return;
    }

  if (!str_cmp (arg, "save"))
    {
      rw_deity_data (act_write);
      chprintln (ch, "Deity database saved.");
      return;
    }
  else if (!str_cmp (arg, "create"))
    {
      if (ch->pcdata->security < 9)
	{
	  chprintln (ch, "Insuffecient security to create new deities.");
	  return;
	}

      dedit_create (arg, ch, argument);

      return;
    }
  else if (!(pDeity = deity_lookup (arg)) || NullStr (pDeity->name))
    {
      chprintln (ch, "That deity does not exist.");
      return;
    }

  edit_start (ch, pDeity, ED_DEITY);
  return;
}


Do_Fun (do_mpedit)
{
  ProgCode *pMcode;
  char command[MIL];

  argument = one_argument (argument, command);

  if (is_number (command))
    {
      vnum_t vnum = atov (command);
      AreaData *ad;

      if ((pMcode = get_prog_index (vnum, PRG_MPROG)) == NULL)
	{
	  chprintln (ch, "That vnum does not exist.");
	  return;
	}

      ad = pMcode->area;

      if (ad == NULL)
	{
	  chprintln (ch, "Vnum is not assigned an area.");
	  return;
	}

      if (!IsBuilder (ch, ad))
	{
	  chprintln (ch, "Insufficient security to modify area.");
	  return;
	}

      edit_start (ch, pMcode, ED_MPCODE);
      return;
    }

  if (!str_cmp (command, "create"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "create <vnum>", NULL);
	  return;
	}

      mpedit_create (command, ch, argument);
      return;
    }
  if (!str_cmp (command, "delete"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "delete <vnum>", NULL);
	  return;
	}
      mpedit_delete (command, ch, argument);
      return;
    }

  cmd_syntax (ch, NULL, n_fun, "<vnum>", "create <vnum>", "delete <vnum>",
	      NULL);

  return;
}

Do_Fun (do_opedit)
{
  ProgCode *pOcode;
  char command[MIL];

  argument = one_argument (argument, command);

  if (is_number (command))
    {
      vnum_t vnum = atov (command);
      AreaData *ad;

      if ((pOcode = get_prog_index (vnum, PRG_OPROG)) == NULL)
	{
	  chprintln (ch, "That vnum does not exist.");
	  return;
	}

      ad = pOcode->area;

      if (ad == NULL)
	{
	  chprintln (ch, "Vnum is not assigned an area.");
	  return;
	}

      if (!IsBuilder (ch, ad))
	{
	  chprintln (ch, "Insufficient security to modify area.");
	  return;
	}

      edit_start (ch, pOcode, ED_OPCODE);
      return;
    }

  if (!str_cmp (command, "create"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "create <vnum>", NULL);
	  return;
	}

      opedit_create (command, ch, argument);
      return;
    }
  if (!str_cmp (command, "delete"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "delete <vnum>", NULL);
	  return;
	}
      opedit_delete (command, ch, argument);
      return;
    }

  cmd_syntax (ch, NULL, n_fun, "<vnum>", "create <vnum>", "delete <vnum>",
	      NULL);

  return;
}

Do_Fun (do_rpedit)
{
  ProgCode *pRcode;
  char command[MIL];

  argument = one_argument (argument, command);

  if (is_number (command))
    {
      vnum_t vnum = atov (command);
      AreaData *ad;

      if ((pRcode = get_prog_index (vnum, PRG_RPROG)) == NULL)
	{
	  chprintln (ch, "That vnum does not exist.");
	  return;
	}

      ad = pRcode->area;

      if (ad == NULL)
	{
	  chprintln (ch, "Vnum is not assigned an area.");
	  return;
	}

      if (!IsBuilder (ch, ad))
	{
	  chprintln (ch, "Insufficient security to modify area.");
	  return;
	}

      edit_start (ch, pRcode, ED_RPCODE);
      return;
    }

  if (!str_cmp (command, "create"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "<vnum>", NULL);
	  return;
	}

      rpedit_create (command, ch, argument);
      return;
    }
  if (!str_cmp (command, "delete"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "<vnum>", NULL);
	  return;
	}
      rpedit_delete (command, ch, argument);
      return;
    }

  cmd_syntax (ch, NULL, n_fun, "<vnum>", "create <vnum>", "delete <vnum>",
	      NULL);

  return;
}


Do_Fun (do_sedit)
{
  SocialData *pSocial;
  char arg1[MAX_INPUT_LENGTH];

  argument = one_argument (argument, arg1);

  if (IsNPC (ch))
    return;

  if (ch->pcdata->security < 5)
    {
      chprintln (ch, "Insuficient security to edit socials.");
      return;
    }

  if (!str_cmp (arg1, "create"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "create <name>", NULL);
	  return;
	}
      if (sedit_create (arg1, ch, argument))
	{
	  ch->desc->editor = ED_SOCIAL;
	  act ("$n has entered the social editor.", ch, NULL, NULL, TO_ROOM);
	}
      return;
    }
  if (!str_cmp (arg1, "delete"))
    {
      if (NullStr (argument))
	{
	  cmd_syntax (ch, NULL, n_fun, "delete <social>", NULL);
	  return;
	}
      if (sedit_delete (arg1, ch, argument))
	{
	  return;
	}
    }

  if ((pSocial = social_lookup (arg1)) != NULL)
    {
      edit_start (ch, pSocial, ED_SOCIAL);
      return;
    }
  if (pSocial == NULL && !NullStr (arg1))
    {
      chprintln (ch, "That social does not exist.");
      return;
    }

  chprintln (ch, "There is no default social to edit.");
  return;
}


Do_Fun (do_cmdcheck)
{
  CmdData *i;
  Do_F *fun;
  bool found = false;
  Buffer *b;
  Column *Cd;
  int cat;

  Cd = new_column ();
  b = new_buf ();
  set_cols (Cd, ch, 4, COLS_BUF, b);

  if (!str_prefix (argument, "null"))
    {
      bprintln (b, "NULL commands:");
      for (i = cmd_first_sorted; i; i = i->next_sort)
	{
	  if (i->do_fun == do_null)
	    {
	      found = true;
	      print_cols (Cd, i->name);
	    }
	}
      if (!found)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else if (!str_prefix (argument, "hidden"))
    {
      bprintln (b, "Hidden commands:");
      for (i = cmd_first_sorted; i; i = i->next_sort)
	{
	  if (!i->category == CMDCAT_NOSHOW)
	    {
	      found = true;
	      print_cols (Cd, i->name);
	    }
	}
      if (!found)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else if (!str_prefix (argument, "missing"))
    {
      int j;
      bool any = false;

      bprintln (b, "Functions missing command entries:");
      for (j = 0; dofun_index[j].name != NULL; j++)
	{
	  for (i = cmd_first_sorted; i; i = i->next_sort)
	    {
	      found = false;
	      if ((Do_F *) dofun_index[j].index == i->do_fun)
		{
		  found = true;
		  break;
		}
	    }
	  if (!found)
	    {
	      any = true;
	      print_cols (Cd, dofun_index[j].name);
	    }
	}
      if (!any)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else if ((cat = flag_value (cmd_categories, argument)) != NO_FLAG)
    {
      bprintlnf (b, "Commands in %s category:",
		 flag_string (cmd_categories, cat));
      for (i = cmd_first_sorted; i; i = i->next_sort)
	{
	  if (i->category == (cmd_cat) cat)
	    {
	      found = true;
	      print_cols (Cd, i->name);
	    }
	}
      if (!found)
	bprintln (b, "none.");
      else
	cols_nl (Cd);
    }
  else if ((fun = (Do_F *) index_lookup (argument, dofun_index, NULL))
	   != NULL)
    {
      bprintlnf (b, "%s commands:", capitalize (argument));
      for (i = cmd_first_sorted; i; i = i->next_sort)
	{
	  if (i->do_fun == fun)
	    {
	      found = true;
	      print_cols (Cd, i->name);
	    }
	}
      if (!found)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else
    {
      cmd_syntax (ch, NULL, n_fun, "null", "missing", "hidden",
		  "<category", "<dofun_name>", NULL);
      free_buf (b);
      free_column (Cd);
      return;
    }
  sendpage (ch, buf_string (b));
  free_buf (b);
  free_column (Cd);
  return;
}

Do_Fun (do_skcheck)
{
  int i, gsn;
  bool found = false, any = false;
  Column *Cd;
  Buffer *b;

  b = new_buf ();
  Cd = new_column ();
  set_cols (Cd, ch, 4, COLS_BUF, b);

  if (!str_prefix (argument, "gsns"))
    {
      bprintln (b, "Missing gsn entries:");

      for (i = 0; gsn_index[i].name != NULL; i++)
	{
	  found = false;
	  for (gsn = 0; gsn < top_skill; gsn++)
	    {
	      if ((int *) gsn_index[i].index == skill_table[gsn].pgsn)
		{
		  found = true;
		  break;
		}
	    }
	  if (!found)
	    {
	      any = true;
	      print_cols (Cd, gsn_index[i].name);
	    }
	}
      if (!any)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else if (!str_prefix (argument, "spells"))
    {
      bprintln (b, "Missing spell entries:");

      for (i = 0; spell_index[i].name != NULL; i++)
	{
	  found = false;
	  for (gsn = 0; gsn < top_skill; gsn++)
	    {
	      if ((Spell_F *) spell_index[i].index ==
		  skill_table[gsn].spell_fun)
		{
		  found = true;
		  break;
		}
	    }
	  if (!found)
	    {
	      any = true;
	      print_cols (Cd, spell_index[i].name);
	    }
	}
      if (!any)
	bprintln (b, "None.");
      else
	cols_nl (Cd);
    }
  else
    {
      cmd_syntax (ch, NULL, n_fun, "gsns/spells", NULL);
      free_buf (b);
      free_column (Cd);
      return;
    }

  sendpage (ch, buf_string (b));
  free_column (Cd);
  free_buf (b);
  return;
}


Do_Fun (do_hedit)
{
  HelpData *pHelp;
  char arg[MIL];

  if (IsNPC (ch))
    return;

  argument = one_argument (argument, arg);

  if (is_name (arg, "create new make"))
    {
      hedit_create (arg, ch, argument);
      return;
    }

  strcat (arg, " ");
  strcat (arg, argument);

  if ((pHelp = help_lookup (arg)) == NULL)
    {
      chprintln (ch, "Help doesn't exist.");
      return;
    }

  edit_start (ch, pHelp, ED_HELP);
  return;
}

#endif