dbna/clans/
dbna/councils/
dbna/deity/
dbna/gods/
dbna/houses/
dbna/space/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |   \\._.//   *
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.     *
 * ------------------------------------------------------------------------ *
 * 			Table load/save Module				    *
 ****************************************************************************/

#include <time.h>
#include <stdio.h>
#include <string.h>
#include "mud.h"
#ifdef USE_IMC
#include "imc-mercbase.h"
#include "icec-mercbase.h"
#endif


#if defined(KEY)
#undef KEY
#endif

#define KEY( literal, field, value )					\
				if ( !str_cmp( word, literal ) )	\
				{					\
				    field  = value;			\
				    fMatch = TRUE;			\
				    break;				\
				}

bool load_race_file( char *fname );
void write_race_file( int ra );


/* global variables */
int top_sn;
int top_herb;
int MAX_PC_CLASS;
int MAX_PC_RACE;

SKILLTYPE *skill_table[MAX_SKILL];
struct class_type *class_table[MAX_CLASS];
RACE_TYPE *race_table[MAX_RACE];
char *title_table[MAX_CLASS][MAX_LEVEL + 1][2];
SKILLTYPE *herb_table[MAX_HERB];
SKILLTYPE *disease_table[MAX_DISEASE];

LANG_DATA *first_lang;
LANG_DATA *last_lang;

char *const skill_tname[] = { "unknown", "Spell", "Skill", "Ability", "Weapon", "Tongue", "Herb", "Racial", "Disease" };

SPELL_FUN *spell_function( char *name )
{
  if( !str_cmp( name, "spell_smaug" ) )
    return spell_smaug;

  if( !str_cmp( name, "reserved" ) )
    return NULL;
  if( !str_cmp( name, "spell_null" ) )
    return spell_null;
  if( !str_cmp( name, "spell_sensu_bean" ) )
    return spell_sensu_bean;
  return spell_notfound;
}

DO_FUN *skill_function( char *name )
{
  switch ( name[3] )
  {
/*//T1*/
    case 'a':
      if( !str_cmp( name, "do_aassign" ) )
        return do_aassign;
      if( !str_cmp( name, "do_absorb" ) )
        return do_absorb;
      if( !str_cmp( name, "do_accelerate" ) )
        return do_accelerate;
      if( !str_cmp( name, "do_accessories" ) )
        return do_accessories;
      if( !str_cmp( name, "do_acid_burn" ) )
        return do_acid_burn;
      if( !str_cmp( name, "do_acid_slash" ) )
        return do_acid_slash;
      if( !str_cmp( name, "do_add_imm_host" ) )
        return do_add_imm_host;
      if( !str_cmp( name, "do_addpilot" ) )
        return do_addpilot;
      if( !str_cmp( name, "do_admintalk" ) )
        return do_admintalk;
      if( !str_cmp( name, "do_addlessj" ) )
        return do_addlessj;
      if( !str_cmp( name, "do_adminto" ) )
        return do_adminto;
      if( !str_cmp( name, "do_advance" ) )
        return do_advance;
      if( !str_cmp( name, "do_affected" ) )
        return do_affected;
      if( !str_cmp( name, "do_afk" ) )
        return do_afk;
      if( !str_cmp( name, "do_ahelp" ) )
        return do_ahelp;
      if( !str_cmp( name, "do_aid" ) )
        return do_aid;
      if( !str_cmp( name, "do_alist" ) )
        return do_alist;
      if( !str_cmp( name, "do_aligncheck" ) )
        return do_aligncheck;
      if( !str_cmp( name, "do_allow" ) )
        return do_allow;
      if( !str_cmp( name, "do_allhigh" ) )
        return do_allhigh;
      if( !str_cmp( name, "do_allships" ) )
        return do_allships;
      if( !str_cmp( name, "do_allspeeders" ) )
        return do_allspeeders;
      if( !str_cmp( name, "do_androidfuse" ) )
        return do_androidfuse;
      if( !str_cmp( name, "do_analyze" ) )
        return do_analyze;
      if( !str_cmp( name, "do_ansi" ) )
        return do_ansi;
      if( !str_cmp( name, "do_answer" ) )
        return do_answer;
      if( !str_cmp( name, "do_apply" ) )
        return do_apply;
      if( !str_cmp( name, "do_appraise" ) )
        return do_appraise;
      if( !str_cmp( name, "do_areas" ) )
        return do_areas;
      if( !str_cmp( name, "do_aset" ) )
        return do_aset;
      if( !str_cmp( name, "do_ask" ) )
        return do_ask;
      if( !str_cmp( name, "do_astat" ) )
        return do_astat;
      if( !str_cmp( name, "do_at" ) )
        return do_at;
      if( !str_cmp( name, "do_atobj" ) )
        return do_atobj;
      if( !str_cmp( name, "do_auction" ) )
        return do_auction;
      if( !str_cmp( name, "do_aura_set" ) )
        return do_aura_set;
      if( !str_cmp( name, "do_authorize" ) )
        return do_authorize;
      if( !str_cmp( name, "do_autopilot" ) )
        return do_autopilot;
      if( !str_cmp( name, "do_autorecharge" ) )
        return do_autorecharge;
      if( !str_cmp( name, "do_autotrack" ) )
        return do_autotrack;
      if( !str_cmp( name, "do_autotrain" ) )
        return do_autotrain;
      if( !str_cmp( name, "do_avtalk" ) )
        return do_avtalk;
      break;
    case 'b':
      if( !str_cmp( name, "do_backup" ) )
        return do_backup;
      if( !str_cmp( name, "do_battery" ) )
        return do_battery;
      if( !str_cmp( name, "do_blast_zone" ) )
        return do_blast_zone;
      if( !str_cmp( name, "do_banish" ) )
        return do_banish;
      if( !str_cmp( name, "do_big_bang" ) )
        return do_big_bang;
      if( !str_cmp( name, "do_burning_attack" ) )
        return do_burning_attack;
      if( !str_cmp( name, "do_buuball" ) )
        return do_buuball;
      if( !str_cmp( name, "do_backstab" ) )
        return do_backstab;
      if( !str_cmp( name, "do_balzhur" ) )
        return do_balzhur;
      if( !str_cmp( name, "do_bamfin" ) )
        return do_bamfin;
      if( !str_cmp( name, "do_bamfout" ) )
        return do_bamfout;
      if( !str_cmp( name, "do_ban" ) )
        return do_ban;
      if( !str_cmp( name, "do_bash" ) )
        return do_bash;
      if( !str_cmp( name, "do_bashdoor" ) )
        return do_bashdoor;
      if( !str_cmp( name, "do_bbk" ) )
        return do_bbk;
      if( !str_cmp( name, "do_beep" ) )
        return do_beep;
      if( !str_cmp( name, "do_berserk" ) )
        return do_berserk;
      if( !str_cmp( name, "do_bestow" ) )
        return do_bestow;
      if( !str_cmp( name, "do_bestowarea" ) )
        return do_bestowarea;
      if( !str_cmp( name, "do_bio" ) )
        return do_bio;
      if( !str_cmp( name, "do_bite" ) )
        return do_bite;
      if( !str_cmp( name, "do_bloodlet" ) )
        return do_bloodlet;
      if( !str_cmp( name, "do_board" ) )
        return do_board;
      if( !str_cmp( name, "do_boards" ) )
        return do_boards;
      if( !str_cmp( name, "do_bodybag" ) )
        return do_bodybag;
      if( !str_cmp( name, "do_bolt" ) )
        return do_bolt;
      if( !str_cmp( name, "do_botwatch" ) )
        return do_botwatch;
      if( !str_cmp( name, "do_bounty" ) )
        return do_bounty;
      if( !str_cmp( name, "do_brandish" ) )
        return do_brandish;
      if( !str_cmp( name, "do_brew" ) )
        return do_brew;
      if( !str_cmp( name, "do_bset" ) )
        return do_bset;
      if( !str_cmp( name, "do_bstat" ) )
        return do_bstat;
      if( !str_cmp( name, "do_bug" ) )
        return do_bug;
      if( !str_cmp( name, "do_bury" ) )
        return do_bury;
      if( !str_cmp( name, "do_buy" ) )
        return do_buy;
      if( !str_cmp( name, "do_buyship" ) )
        return do_buyship;
      break;
    case 'c':
      if( !str_cmp( name, "do_claimrank" ) )
        return do_claimrank;
      if( !str_cmp( name, "do_clawstrike" ) )
        return do_clawstrike;
      if( !str_cmp( name, "do_cruise_punch" ) )
        return do_cruise_punch;
      if( !str_cmp( name, "do_callship" ) )
        return do_callship;
      if( !str_cmp( name, "do_calculate" ) )
        return do_calculate;
      if( !str_cmp( name, "do_cache" ) )
        return do_cache;
      if( !str_cmp( name, "do_candy_blast" ) )
        return do_candy_blast;
      if( !str_cmp( name, "do_cast" ) )
        return do_cast;
      if( !str_cmp( name, "do_cedit" ) )
        return do_cedit;
      if( !str_cmp( name, "do_censor" ) )
        return do_censor;
      if( !str_cmp( name, "do_chaff" ) )
        return do_chaff;
      if( !str_cmp( name, "do_charge" ) )
        return do_charge;
      if( !str_cmp( name, "do_chaos" ) )
        return do_chaos;
      if( !str_cmp( name, "do_channels" ) )
        return do_channels;
      if( !str_cmp( name, "do_chat" ) )
        return do_chat;
      if( !str_cmp( name, "do_check_vnums" ) )
        return do_check_vnums;
      if( !str_cmp( name, "do_check_ld" ) )
        return do_check_ld;
      if( !str_cmp( name, "do_circle" ) )
        return do_circle;
      if( !str_cmp( name, "do_clanadmin" ) )
        return do_clanadmin;
      if( !str_cmp( name, "do_clanrecall" ) )
        return do_clanrecall;
      if( !str_cmp( name, "do_clandeposit" ) )
        return do_clandeposit;
      if( !str_cmp( name, "do_clanwithdraw" ) )
        return do_clanwithdraw;
      if( !str_cmp( name, "do_claninfo" ) )
        return do_claninfo;
      if( !str_cmp( name, "do_clans" ) )
        return do_clans;
      if( !str_cmp( name, "do_clantalk" ) )
        return do_clantalk;
      if( !str_cmp( name, "do_cleaver" ) )
        return do_cleaver;
      if( !str_cmp( name, "do_clear" ) )
        return do_clear;
      if( !str_cmp( name, "do_clearhiscore" ) )
        return do_clearhiscore;
      if( !str_cmp( name, "do_climate" ) )
        return do_climate;
      if( !str_cmp( name, "do_climb" ) )
        return do_climb;
      if( !str_cmp( name, "do_clone" ) )
        return do_clone;
      if( !str_cmp( name, "do_close" ) )
        return do_close;
      if( !str_cmp( name, "do_closehatch" ) )
        return do_closehatch;
      if( !str_cmp( name, "do_cmdtable" ) )
        return do_cmdtable;
      if( !str_cmp( name, "do_cmenu" ) )
        return do_cmenu;
      if( !str_cmp( name, "do_colorize" ) )
        return do_colorize;
      if( !str_cmp( name, "do_corpse" ) )
        return do_corpse;
      if( !str_cmp( name, "do_combat" ) )
        return do_combat;
      if( !str_cmp( name, "do_commands" ) )
        return do_commands;
      if( !str_cmp( name, "do_comment" ) )
        return do_comment;
      if( !str_cmp( name, "do_compare" ) )
        return do_compare;
#ifdef MCCP
      if( !str_cmp( name, "do_compress" ) )
        return do_compress;
#endif
      if( !str_cmp( name, "do_config" ) )
        return do_config;
      if( !str_cmp( name, "do_consider" ) )
        return do_consider;
      if( !str_cmp( name, "do_cook" ) )
        return do_cook;
      if( !str_cmp( name, "do_copyship" ) )
        return do_copyship;
      if( !str_cmp( name, "do_council_induct" ) )
        return do_council_induct;
      if( !str_cmp( name, "do_council_outcast" ) )
        return do_council_outcast;
      if( !str_cmp( name, "do_councils" ) )
        return do_councils;
      if( !str_cmp( name, "do_counciltalk" ) )
        return do_counciltalk;
      if( !str_cmp( name, "do_credits" ) )
        return do_credits;
      if( !str_cmp( name, "do_cset" ) )
        return do_cset;
      break;
    case 'd':
      if( !str_cmp( name, "do_daichiretsuzan" ) )
        return do_daichiretsuzan;
      if( !str_cmp( name, "do_devil_flash" ) )
        return do_devil_flash;
      if( !str_cmp( name, "do_defuse" ) )
        return do_defuse;
      if( !str_cmp( name, "do_dragonballscatter" ) )
        return do_dragonballscatter;
      if( !str_cmp( name, "do_dbwhere" ) )
        return do_dbwhere;
      if( !str_cmp( name, "do_doublekick" ) )
        return do_doublekick;
      if( !str_cmp( name, "do_doublepunch" ) )
        return do_doublepunch;
      if( !str_cmp( name, "do_dbradar" ) )
        return do_dbradar;
      if( !str_cmp( name, "do_drp" ) )
        return do_drp;
      if( !str_cmp( name, "do_darkness_flare" ) )
        return do_darkness_flare;
      if( !str_cmp( name, "do_destructive_wave" ) )
        return do_destructive_wave;
      if( !str_cmp( name, "do_dodon_ray" ) )
        return do_dodon_ray;
      if( !str_cmp( name, "do_desperation" ) )
        return do_desperation;
      if( !str_cmp( name, "do_dd" ) )
        return do_dd;
      if( !str_cmp( name, "do_ddd" ) )
        return do_ddd;
      if( !str_cmp( name, "do_death_ball" ) )
        return do_death_ball;
      if( !str_cmp( name, "do_deities" ) )
        return do_deities;
      if( !str_cmp( name, "do_delay" ) )
        return do_delay;
      if( !str_cmp( name, "do_delete" ) )
        return do_delete;
      if( !str_cmp( name, "do_demonic_eclipse" ) )
        return do_demonic_eclipse;
      if( !str_cmp( name, "do_demonweapon" ) )
        return do_demonweapon;
      if( !str_cmp( name, "do_demon_wave" ) )
        return do_demon_wave;
      if( !str_cmp( name, "do_deny" ) )
        return do_deny;
      if( !str_cmp( name, "do_description" ) )
        return do_description;
      if( !str_cmp( name, "do_description1" ) )
        return do_description1;
      if( !str_cmp( name, "do_description2" ) )
        return do_description2;
      if( !str_cmp( name, "do_description3" ) )
        return do_description3;
      if( !str_cmp( name, "do_description4" ) )
        return do_description4;
      if( !str_cmp( name, "do_description5" ) )
        return do_description5;
      if( !str_cmp( name, "do_destro" ) )
        return do_destro;
      if( !str_cmp( name, "do_destroy" ) )
        return do_destroy;
      if( !str_cmp( name, "do_detrap" ) )
        return do_detrap;
      if( !str_cmp( name, "do_devote" ) )
        return do_devote;
      if( !str_cmp( name, "do_diagnose" ) )
        return do_diagnose;
      if( !str_cmp( name, "do_dig" ) )
        return do_dig;
      if( !str_cmp( name, "do_disarm" ) )
        return do_disarm;
      if( !str_cmp( name, "do_disconnect" ) )
        return do_disconnect;
      if( !str_cmp( name, "do_dismiss" ) )
        return do_dismiss;
      if( !str_cmp( name, "do_dismount" ) )
        return do_dismount;
      if( !str_cmp( name, "do_divinewrath" ) )
        return do_divinewrath;
      if( !str_cmp( name, "do_divorce" ) )
        return do_divorce;
      if( !str_cmp( name, "do_dmesg" ) )
        return do_dmesg;
      if( !str_cmp( name, "do_dnd" ) )
        return do_dnd;
      if( !str_cmp( name, "do_dnsusers" ) )
        return do_dnsusers;
      if( !str_cmp( name, "do_down" ) )
        return do_down;
      if( !str_cmp( name, "do_drag" ) )
        return do_drag;
      if( !str_cmp( name, "do_drink" ) )
        return do_drink;
      if( !str_cmp( name, "do_drive" ) )
        return do_drive;
      if( !str_cmp( name, "do_drop" ) )
        return do_drop;
      if( !str_cmp( name, "do_duplicate" ) )
        return do_duplicate;
      break;
    case 'e':
      if( !str_cmp( name, "do_enhance" ) )
        return do_enhance;
      if( !str_cmp( name, "do_eliminate" ) )
        return do_eliminate;
      if( !str_cmp( name, "do_east" ) )
        return do_east;
      if( !str_cmp( name, "do_eat" ) )
        return do_eat;
      if( !str_cmp( name, "do_ech" ) )
        return do_ech;
      if( !str_cmp( name, "do_echo" ) )
        return do_echo;
      if( !str_cmp( name, "do_ehb" ) )
        return do_ehb;
      if( !str_cmp( name, "do_electric_shield" ) )
        return do_electric_shield;
      if( !str_cmp( name, "do_elevate" ) )
        return do_elevate;
      if( !str_cmp( name, "do_email" ) )
        return do_email;
      if( !str_cmp( name, "do_emote" ) )
        return do_emote;
      if( !str_cmp( name, "do_empty" ) )
        return do_empty;
      if( !str_cmp( name, "do_energy_ball" ) )
        return do_energy_ball;
      if( !str_cmp( name, "do_energy_ring" ) )
        return do_energy_ring;
      if( !str_cmp( name, "do_enter" ) )
        return do_enter;
      if( !str_cmp( name, "do_equipment" ) )
        return do_equipment;
      if( !str_cmp( name, "do_evilboost" ) )
        return do_evilboost;
      if( !str_cmp( name, "do_evilsurge" ) )
        return do_evilsurge;
      if( !str_cmp( name, "do_eviloverload" ) )
        return do_eviloverload;
      if( !str_cmp( name, "do_examine" ) )
        return do_examine;
      if( !str_cmp( name, "do_exits" ) )
        return do_exits;
      if( !str_cmp( name, "do_eye_beam" ) )
        return do_eye_beam;
      if( !str_cmp( name, "do_evolve" ) )
        return do_evolve;
      if( !str_cmp( name, "do_extreme" ) )
        return do_extreme;
      if( !str_cmp( name, "do_essj" ) )
        return do_essj;
      break;
    case 'f':
      if( !str_cmp( name, "do_fakemoon" ) )
        return do_fakemoon;
      if( !str_cmp( name, "do_fusiondance" ) )
        return do_fusiondance;
      if( !str_cmp( name, "do_finalshine" ) )
        return do_finalshine;
      if( !str_cmp( name, "do_finishing_buster" ) )
        return do_finishing_buster;
      if( !str_cmp( name, "do_feed" ) )
        return do_feed;
      if( !str_cmp( name, "do_ff" ) )
        return do_ff;
      if( !str_cmp( name, "do_fill" ) )
        return do_fill;
      if( !str_cmp( name, "do_findnote" ) )
        return do_findnote;
      if( !str_cmp( name, "do_finger" ) )
        return do_finger;
      if( !str_cmp( name, "do_finger_beam" ) )
        return do_finger_beam;
      if( !str_cmp( name, "do_fire" ) )
        return do_fire;
      if( !str_cmp( name, "do_fixchar" ) )
        return do_fixchar;
      if( !str_cmp( name, "do_fixed" ) )
        return do_fixed;
      if( !str_cmp( name, "do_flee" ) )
        return do_flee;
      if( !str_cmp( name, "do_fly" ) )
        return do_fly;
      if( !str_cmp( name, "do_foldarea" ) )
        return do_foldarea;
      if( !str_cmp( name, "do_follow" ) )
        return do_follow;
      if( !str_cmp( name, "do_for" ) )
        return do_for;
      if( !str_cmp( name, "do_force" ) )
        return do_force;
      if( !str_cmp( name, "do_forceclose" ) )
        return do_forceclose;
      if( !str_cmp( name, "do_form_password" ) )
        return do_form_password;
      if( !str_cmp( name, "do_fos" ) )
        return do_fos;
      if( !str_cmp( name, "do_fprompt" ) )
        return do_fprompt;
      if( !str_cmp( name, "do_fquit" ) )
        return do_fquit;
      if( !str_cmp( name, "do_freeze" ) )
        return do_freeze;
      if( !str_cmp( name, "do_fshow" ) )
        return do_fshow;
      if( !str_cmp( name, "do_fslay" ) )
        return do_fslay;
      if( !str_cmp( name, "do_fullsave" ) )
        return do_fullsave;
      break;
    case 'g':
      if( !str_cmp( name, "do_games" ) )
        return do_games;
      if( !str_cmp( name, "do_gained" ) )
        return do_gained;
      if( !str_cmp( name, "do_gallic_gun" ) )
        return do_gallic_gun;
      if( !str_cmp( name, "do_gaso" ) )
        return do_gaso;
      if( !str_cmp( name, "do_get" ) )
        return do_get;
      if( !str_cmp( name, "do_genocide_attack" ) )
        return do_genocide_attack;
      if( !str_cmp( name, "do_gfighting" ) )
        return do_gfighting;
      if( !str_cmp( name, "do_ghost" ) )
        return do_ghost;
      if( !str_cmp( name, "do_give" ) )
        return do_give;
      if( !str_cmp( name, "do_giant_size" ) )
        return do_giant_size;
      if( !str_cmp( name, "do_glance" ) )
        return do_glance;
      if( !str_cmp( name, "do_global_boards" ) )
        return do_global_boards;
      if( !str_cmp( name, "do_global_note" ) )
        return do_global_note;
      if( !str_cmp( name, "do_godset" ) )
        return do_godset;
      if( !str_cmp( name, "do_godstat" ) )
        return do_godstat;
      if( !str_cmp( name, "do_godwho" ) )
        return do_godwho;
      if( !str_cmp( name, "do_gohome" ) )
        return do_gohome;
      if( !str_cmp( name, "do_gold" ) )
        return do_gold;
      if( !str_cmp( name, "do_goto" ) )
        return do_goto;
      if( !str_cmp( name, "do_gouge" ) )
        return do_gouge;
      if( !str_cmp( name, "do_grant" ) )
        return do_grant;
      if( !str_cmp( name, "do_growth" ) )
        return do_growth;
      if( !str_cmp( name, "do_group" ) )
        return do_group;
      if( !str_cmp( name, "do_grub" ) )
        return do_grub;
      if( !str_cmp( name, "do_gtell" ) )
        return do_gtell;
      if( !str_cmp( name, "do_guilds" ) )
        return do_guilds;
      if( !str_cmp( name, "do_guildtalk" ) )
        return do_guildtalk;
      if( !str_cmp( name, "do_gwhere" ) )
        return do_gwhere;
      break;
    case 'h':
      if( !str_cmp( name, "do_headbutt" ) )
        return do_headbutt;
      if( !str_cmp( name, "do_heaven_splitter_cannon" ) )
        return do_heaven_splitter_cannon;
      if( !str_cmp( name, "do_hellzone_grenade" ) )
        return do_hellzone_grenade;
      if( !str_cmp( name, "do_hcchat" ) )
        return do_hcchat;
      if( !str_cmp( name, "do_hedit" ) )
        return do_hedit;
      if( !str_cmp( name, "do_hyper" ) )
        return do_hyper;
      if( !str_cmp( name, "do_hell" ) )
        return do_hell;
      if( !str_cmp( name, "do_hells_flash" ) )
        return do_hells_flash;
      if( !str_cmp( name, "do_help" ) )
        return do_help;
      if( !str_cmp( name, "do_hide" ) )
        return do_hide;
      if( !str_cmp( name, "do_hiscore" ) )
        return do_hiscore;
      if( !str_cmp( name, "do_hiscoset" ) )
        return do_hiscoset;
      if( !str_cmp( name, "do_hitall" ) )
        return do_hitall;
      if( !str_cmp( name, "do_hl" ) )
        return do_hl;
      if( !str_cmp( name, "do_hlist" ) )
        return do_hlist;
      if( !str_cmp( name, "do_holylight" ) )
        return do_holylight;
      if( !str_cmp( name, "do_homebuy" ) )
        return do_homebuy;
      if( !str_cmp( name, "do_homepage" ) )
        return do_homepage;
      if( !str_cmp( name, "do_honoo" ) )
        return do_honoo;
      if( !str_cmp( name, "do_hotboot" ) )
        return do_hotboot;
      if( !str_cmp( name, "do_house" ) )
        return do_house;
      if( !str_cmp( name, "do_hset" ) )
        return do_hset;
      if( !str_cmp( name, "do_hyperspace" ) )
        return do_hyperspace;
      if( !str_cmp( name, "do_hssj" ) )
        return do_hssj;
      break;
    case 'i':
      if( !str_cmp( name, "do_icer_transform_2" ) )
        return do_icer_transform_2;
      if( !str_cmp( name, "do_icer_transform_3" ) )
        return do_icer_transform_3;
      if( !str_cmp( name, "do_instant_trans" ) )
        return do_instant_trans;
      if( !str_cmp( name, "do_icer_transform_4" ) )
        return do_icer_transform_4;
      if( !str_cmp( name, "do_icer_transform_5" ) )
        return do_icer_transform_5;
      // if ( !str_cmp( name, "do_ichannels"                 ))    return do_ichannels;
      // if ( !str_cmp( name, "do_icommand"                  ))    return do_icommand;
      if( !str_cmp( name, "do_icq_number" ) )
        return do_icq_number;
      if( !str_cmp( name, "do_ide" ) )
        return do_ide;
      if( !str_cmp( name, "do_idea" ) )
        return do_idea;
      if( !str_cmp( name, "do_ignore" ) )
        return do_ignore;
      // if ( !str_cmp( name, "do_ilist"                     ))    return do_ilist;
      // if ( !str_cmp( name, "do_imc"                       ))    return do_imc;
      // if ( !str_cmp( name, "do_imclist"                   ))    return do_imclist;
      if( !str_cmp( name, "do_imm_morph" ) )
        return do_imm_morph;
      if( !str_cmp( name, "do_imm_unmorph" ) )
        return do_imm_unmorph;
      if( !str_cmp( name, "do_immtalk" ) )
        return do_immtalk;
      if( !str_cmp( name, "do_immortalaurareset" ) )
        return do_immortalaurareset;
      if( !str_cmp( name, "do_incognito" ) )
        return do_incognito;
      if( !str_cmp( name, "do_induct" ) )
        return do_induct;
      if( !str_cmp( name, "do_info" ) )
        return do_info;
      if( !str_cmp( name, "do_integrate" ) )
        return do_integrate;
      if( !str_cmp( name, "do_installarea" ) )
        return do_installarea;
      if( !str_cmp( name, "do_instaroom" ) )
        return do_instaroom;
      if( !str_cmp( name, "do_instazone" ) )
        return do_instazone;
      if( !str_cmp( name, "do_inventory" ) )
        return do_inventory;
      if( !str_cmp( name, "do_invis" ) )
        return do_invis;
      if( !str_cmp( name, "do_ipcompare" ) )
        return do_ipcompare;
      // if ( !str_cmp( name, "do_isetup"                    ))    return do_isetup;
      // if ( !str_cmp( name, "do_istats"                    ))    return do_istats;
      break;
    case 'j':
      if( !str_cmp( name, "do_joinclan" ) )
        return do_joinclan;
      if( !str_cmp( name, "do_jibaku" ) )
        return do_jibaku;
      break;
    case 'k':
      if( !str_cmp( name, "do_kaioken" ) )
        return do_kaioken;
      if( !str_cmp( name, "do_kaiocreate" ) )
        return do_kaiocreate;
      if( !str_cmp( name, "do_kairestore" ) )
        return do_kairestore;
      if( !str_cmp( name, "do_kakusandan" ) )
        return do_kakusandan;

      if( !str_cmp( name, "do_kamehameha" ) )
        return do_kamehameha;
      if( !str_cmp( name, "do_khistory" ) )
        return do_khistory;
      if( !str_cmp( name, "do_kick" ) )
        return do_kick;
      if( !str_cmp( name, "do_kill" ) )
        return do_kill;
      if( !str_cmp( name, "do_ki_burst" ) )
        return do_ki_burst;
      if( !str_cmp( name, "do_ki_heal" ) )
        return do_ki_heal;
      break;
    case 'l':
      if( !str_cmp( name, "do_land" ) )
        return do_land;
      if( !str_cmp( name, "do_languages" ) )
        return do_languages;
      if( !str_cmp( name, "do_last" ) )
        return do_last;
      if( !str_cmp( name, "do_launch" ) )
        return do_launch;
      if( !str_cmp( name, "do_laws" ) )
        return do_laws;
      if( !str_cmp( name, "do_leave" ) )
        return do_leave;
      if( !str_cmp( name, "do_leaveship" ) )
        return do_leaveship;
      if( !str_cmp( name, "do_level" ) )
        return do_level;
      if( !str_cmp( name, "do_light" ) )
        return do_light;
      if( !str_cmp( name, "do_list" ) )
        return do_list;
      if( !str_cmp( name, "do_litterbug" ) )
        return do_litterbug;
      if( !str_cmp( name, "do_loadarea" ) )
        return do_loadarea;
      if( !str_cmp( name, "do_loadup" ) )
        return do_loadup;
      if( !str_cmp( name, "do_lock" ) )
        return do_lock;
      if( !str_cmp( name, "do_log" ) )
        return do_log;
      if( !str_cmp( name, "do_look" ) )
        return do_look;
      if( !str_cmp( name, "do_lookmap" ) )
        return do_lookmap;
      if( !str_cmp( name, "do_loop" ) )
        return do_loop;
      if( !str_cmp( name, "do_low_purge" ) )
        return do_low_purge;
      if( !str_cmp( name, "do_lssj" ) )
        return do_lssj;
      break;
    case 'm':
      // if ( !str_cmp( name, "do_mailqueue"                 ))    return do_mailqueue;
      if( !str_cmp( name, "do_monkey_gun" ) )
        return do_monkey_gun;
      if( !str_cmp( name, "do_minion" ) )
        return do_minion;
      if( !str_cmp( name, "do_makosen" ) )
        return do_makosen;
      if( !str_cmp( name, "do_mailroom" ) )
        return do_mailroom;
      if( !str_cmp( name, "do_maliceray" ) )
        return do_maliceray;
      if( !str_cmp( name, "do_mystic" ) )
        return do_mystic;
      if( !str_cmp( name, "do_make" ) )
        return do_make;
      if( !str_cmp( name, "do_makeboard" ) )
        return do_makeboard;
      if( !str_cmp( name, "do_majin" ) )
        return do_majin;
      if( !str_cmp( name, "do_makeclan" ) )
        return do_makeclan;
      if( !str_cmp( name, "do_makecouncil" ) )
        return do_makecouncil;
      if( !str_cmp( name, "do_makedeity" ) )
        return do_makedeity;
      if( !str_cmp( name, "do_makeplanet" ) )
        return do_makeplanet;
      if( !str_cmp( name, "do_makerepair" ) )
        return do_makerepair;
      if( !str_cmp( name, "do_makeship" ) )
        return do_makeship;
      if( !str_cmp( name, "do_makeshop" ) )
        return do_makeshop;
      if( !str_cmp( name, "do_makestarsystem" ) )
        return do_makestarsystem;
      if( !str_cmp( name, "do_makewizlist" ) )
        return do_makewizlist;
      if( !str_cmp( name, "do_mapout" ) )
        return do_mapout;
      if( !str_cmp( name, "do_marry" ) )
        return do_marry;
      if( !str_cmp( name, "do_masenko" ) )
        return do_masenko;
      if( !str_cmp( name, "do_massign" ) )
        return do_massign;
      if( !str_cmp( name, "do_mcreate" ) )
        return do_mcreate;
      if( !str_cmp( name, "do_mdelete" ) )
        return do_mdelete;
      if( !str_cmp( name, "do_meditate" ) )
        return do_meditate;
      if( !str_cmp( name, "do_members" ) )
        return do_members;
      if( !str_cmp( name, "do_memory" ) )
        return do_memory;
      if( !str_cmp( name, "do_mfind" ) )
        return do_mfind;
      if( !str_cmp( name, "do_minvoke" ) )
        return do_minvoke;
      if( !str_cmp( name, "do_mlist" ) )
        return do_mlist;
      if( !str_cmp( name, "do_mmenu" ) )
        return do_mmenu;
      if( !str_cmp( name, "do_morphcreate" ) )
        return do_morphcreate;
      if( !str_cmp( name, "do_morphdestroy" ) )
        return do_morphdestroy;
      if( !str_cmp( name, "do_morphset" ) )
        return do_morphset;
      if( !str_cmp( name, "do_morphstat" ) )
        return do_morphstat;
      if( !str_cmp( name, "do_mortalize" ) )
        return do_mortalize;
      if( !str_cmp( name, "do_mount" ) )
        return do_mount;
      if( !str_cmp( name, "do_mpshowbot" ) )
        return do_mpshowbot;
      if( !str_cmp( name, "do_mp_close_passage" ) )
        return do_mp_close_passage;
      if( !str_cmp( name, "do_mp_damage" ) )
        return do_mp_damage;
      if( !str_cmp( name, "do_mp_drain" ) )
        return do_mp_drain;
      if( !str_cmp( name, "do_mp_pl_damage" ) )
        return do_mp_pl_damage;
      if( !str_cmp( name, "do_mp_deposit" ) )
        return do_mp_deposit;
      if( !str_cmp( name, "do_mp_fill_in" ) )
        return do_mp_fill_in;
      if( !str_cmp( name, "do_mp_log" ) )
        return do_mp_log;
      if( !str_cmp( name, "do_mp_open_passage" ) )
        return do_mp_open_passage;
      if( !str_cmp( name, "do_mp_practice" ) )
        return do_mp_practice;
      if( !str_cmp( name, "do_mp_restore" ) )
        return do_mp_restore;
      if( !str_cmp( name, "do_mp_slay" ) )
        return do_mp_slay;
      if( !str_cmp( name, "do_mp_withdraw" ) )
        return do_mp_withdraw;
      // if ( !str_cmp( name, "do_mpadvance"                 ))    return do_mpadvance;
      if( !str_cmp( name, "do_mpapply" ) )
        return do_mpapply;
      if( !str_cmp( name, "do_mpapplyb" ) )
        return do_mpapplyb;
      if( !str_cmp( name, "do_mpasound" ) )
        return do_mpasound;
      if( !str_cmp( name, "do_mpasupress" ) )
        return do_mpasupress;
      if( !str_cmp( name, "do_mpat" ) )
        return do_mpat;
      if( !str_cmp( name, "do_mpbodybag" ) )
        return do_mpbodybag;
      if( !str_cmp( name, "do_mpcopy" ) )
        return do_mpcopy;
      if( !str_cmp( name, "do_mpdelay" ) )
        return do_mpdelay;
      if( !str_cmp( name, "do_mpdream" ) )
        return do_mpdream;
      if( !str_cmp( name, "do_mpecho" ) )
        return do_mpecho;
      if( !str_cmp( name, "do_mpechoaround" ) )
        return do_mpechoaround;
      if( !str_cmp( name, "do_mpechoat" ) )
        return do_mpechoat;
      if( !str_cmp( name, "do_mpechozone" ) )
        return do_mpechozone;
      if( !str_cmp( name, "do_mpedit" ) )
        return do_mpedit;
      if( !str_cmp( name, "do_mpfavor" ) )
        return do_mpfavor;
      if( !str_cmp( name, "do_mpfind" ) )
        return do_mpfind;
      if( !str_cmp( name, "do_mpforce" ) )
        return do_mpforce;
      if( !str_cmp( name, "do_mpgoto" ) )
        return do_mpgoto;
      if( !str_cmp( name, "do_mpinvis" ) )
        return do_mpinvis;
      if( !str_cmp( name, "do_mpjunk" ) )
        return do_mpjunk;
      if( !str_cmp( name, "do_mpkill" ) )
        return do_mpkill;
      if( !str_cmp( name, "do_mpmload" ) )
        return do_mpmload;
      if( !str_cmp( name, "do_mpmorph" ) )
        return do_mpmorph;
      if( !str_cmp( name, "do_mpmset" ) )
        return do_mpmset;
      if( !str_cmp( name, "do_mpmrppset" ) )
        return do_mpmrppset;
      if( !str_cmp( name, "do_mpmusic" ) )
        return do_mpmusic;
      if( !str_cmp( name, "do_mpmusicaround" ) )
        return do_mpmusicaround;
      if( !str_cmp( name, "do_mpmusicat" ) )
        return do_mpmusicat;
      if( !str_cmp( name, "do_mpnothing" ) )
        return do_mpnothing;
      if( !str_cmp( name, "do_mpoload" ) )
        return do_mpoload;
      if( !str_cmp( name, "do_mposet" ) )
        return do_mposet;
      if( !str_cmp( name, "do_mppardon" ) )
        return do_mppardon;
      if( !str_cmp( name, "do_mppeace" ) )
        return do_mppeace;
      if( !str_cmp( name, "do_mppkset" ) )
        return do_mppkset;
      if( !str_cmp( name, "do_mppldiv" ) )
        return do_mppldiv;
      if( !str_cmp( name, "do_mpplmult" ) )
        return do_mpplmult;
      if( !str_cmp( name, "do_mppurge" ) )
        return do_mppurge;
      if( !str_cmp( name, "do_mpscatter" ) )
        return do_mpscatter;
      if( !str_cmp( name, "do_mpsound" ) )
        return do_mpsound;
      if( !str_cmp( name, "do_mpsoundaround" ) )
        return do_mpsoundaround;
      if( !str_cmp( name, "do_mpsoundat" ) )
        return do_mpsoundat;
      if( !str_cmp( name, "do_mpstat" ) )
        return do_mpstat;
      if( !str_cmp( name, "do_mptransfer" ) )
        return do_mptransfer;
      if( !str_cmp( name, "do_mpunmorph" ) )
        return do_mpunmorph;
      if( !str_cmp( name, "do_mpunnuisance" ) )
        return do_mpunnuisance;
      if( !str_cmp( name, "do_mrange" ) )
        return do_mrange;
      if( !str_cmp( name, "do_mset" ) )
        return do_mset;
      if( !str_cmp( name, "do_mstat" ) )
        return do_mstat;
      if( !str_cmp( name, "do_multi_disk" ) )
        return do_multi_disk;
      if( !str_cmp( name, "do_multi_form" ) )
        return do_multi_form;
      if( !str_cmp( name, "do_multi_eye" ) )
        return do_multi_eye;
      if( !str_cmp( name, "do_murde" ) )
        return do_murde;
      if( !str_cmp( name, "do_murder" ) )
        return do_murder;
      if( !str_cmp( name, "do_muse" ) )
        return do_muse;
      if( !str_cmp( name, "do_music" ) )
        return do_music;
      if( !str_cmp( name, "do_mwhere" ) )
        return do_mwhere;
      break;
    case 'n':
      if( !str_cmp( name, "do_name" ) )
        return do_name;
      if( !str_cmp( name, "do_namekfuse" ) )
        return do_namekfuse;
      if( !str_cmp( name, "do_newbiechat" ) )
        return do_newbiechat;
      if( !str_cmp( name, "do_newbieset" ) )
        return do_newbieset;
      if( !str_cmp( name, "do_news" ) )
        return do_news;
      if( !str_cmp( name, "do_newscore" ) )
        return do_newscore;
      if( !str_cmp( name, "do_newzones" ) )
        return do_newzones;
      if( !str_cmp( name, "do_noemote" ) )
        return do_noemote;
      if( !str_cmp( name, "do_noscream" ) )
        return do_noscream;
      if( !str_cmp( name, "do_nognote" ) )
        return do_nognote;
      if( !str_cmp( name, "do_nohelps" ) )
        return do_nohelps;
      if( !str_cmp( name, "do_noresolve" ) )
        return do_noresolve;
      if( !str_cmp( name, "do_north" ) )
        return do_north;
      if( !str_cmp( name, "do_northeast" ) )
        return do_northeast;
      if( !str_cmp( name, "do_northwest" ) )
        return do_northwest;
      if( !str_cmp( name, "do_notell" ) )
        return do_notell;
      if( !str_cmp( name, "do_noteroom" ) )
        return do_noteroom;
      if( !str_cmp( name, "do_notitle" ) )
        return do_notitle;
      if( !str_cmp( name, "do_nuisance" ) )
        return do_nuisance;
      if( !str_cmp( name, "do_nuisance" ) )
        return do_nuisance;
      break;
    case 'o':
      if( !str_cmp( name, "do_omega" ) )
        return do_omega;
      if( !str_cmp( name, "do_oassign" ) )
        return do_oassign;
      if( !str_cmp( name, "do_ocreate" ) )
        return do_ocreate;
      if( !str_cmp( name, "do_odelete" ) )
        return do_odelete;
      if( !str_cmp( name, "do_ofind" ) )
        return do_ofind;
      if( !str_cmp( name, "do_ofindtype" ) )
        return do_ofindtype;
      if( !str_cmp( name, "do_ogrub" ) )
        return do_ogrub;
      if( !str_cmp( name, "do_oinvoke" ) )
        return do_oinvoke;
      if( !str_cmp( name, "do_oldscore" ) )
        return do_oldscore;
      if( !str_cmp( name, "do_olist" ) )
        return do_olist;
      if( !str_cmp( name, "do_omenu" ) )
        return do_omenu;
      if( !str_cmp( name, "do_ooc" ) )
        return do_ooc;
      if( !str_cmp( name, "do_opcopy" ) )
        return do_opcopy;
      if( !str_cmp( name, "do_opedit" ) )
        return do_opedit;
      if( !str_cmp( name, "do_open" ) )
        return do_open;
      if( !str_cmp( name, "do_openhatch" ) )
        return do_openhatch;
      if( !str_cmp( name, "do_opfind" ) )
        return do_opfind;
      if( !str_cmp( name, "do_opstat" ) )
        return do_opstat;
      if( !str_cmp( name, "do_orange" ) )
        return do_orange;
      if( !str_cmp( name, "do_order" ) )
        return do_order;
      if( !str_cmp( name, "do_orders" ) )
        return do_orders;
      if( !str_cmp( name, "do_ordertalk" ) )
        return do_ordertalk;
      if( !str_cmp( name, "do_oset" ) )
        return do_oset;
      if( !str_cmp( name, "do_ostat" ) )
        return do_ostat;
      if( !str_cmp( name, "do_outcast" ) )
        return do_outcast;
      if( !str_cmp( name, "do_owhere" ) )
        return do_owhere;
      break;
    case 'p':
      if( !str_cmp( name, "do_pstatus" ) )
        return do_pstatus;
      if( !str_cmp( name, "do_pcquesting" ) )
        return do_pcquesting;
      if( !str_cmp( name, "do_page" ) )
        return do_page;
      if( !str_cmp( name, "do_pagelen" ) )
        return do_pagelen;
      if( !str_cmp( name, "do_pager" ) )
        return do_pager;
      if( !str_cmp( name, "do_pardon" ) )
        return do_pardon;
      if( !str_cmp( name, "do_partner" ) )
        return do_partner;
      if( !str_cmp( name, "do_password" ) )
        return do_password;
      if( !str_cmp( name, "do_pcrename" ) )
        return do_pcrename;
      if( !str_cmp( name, "do_pclastrename" ) )
        return do_pclastrename;
      if( !str_cmp( name, "do_peace" ) )
        return do_peace;
      if( !str_cmp( name, "do_pfiles" ) )
        return do_pfiles;
      if( !str_cmp( name, "do_pick" ) )
        return do_pick;
      if( !str_cmp( name, "do_pk" ) )
        return do_pk;
      if( !str_cmp( name, "do_planets" ) )
        return do_planets;
      if( !str_cmp( name, "do_plist" ) )
        return do_plist;
      if( !str_cmp( name, "do_plset" ) )
        return do_plset;
      if( !str_cmp( name, "do_pluogus" ) )
        return do_pluogus;
      if( !str_cmp( name, "do_poison_weapon" ) )
        return do_poison_weapon;
      if( !str_cmp( name, "do_potarafuse" ) )
        return do_potarafuse;
      if( !str_cmp( name, "do_powerdown" ) )
        return do_powerdown;
      if( !str_cmp( name, "do_powerup" ) )
        return do_powerup;
      if( !str_cmp( name, "do_practice" ) )
        return do_practice;
      if( !str_cmp( name, "do_privacy" ) )
        return do_privacy;
      if( !str_cmp( name, "do_project" ) )
        return do_project;
      if( !str_cmp( name, "do_promote" ) )
        return do_promote;
      if( !str_cmp( name, "do_prompt" ) )
        return do_prompt;
      if( !str_cmp( name, "do_pset" ) )
        return do_pset;
      if( !str_cmp( name, "do_psiblast" ) )
        return do_psiblast;
      if( !str_cmp( name, "do_pstat" ) )
        return do_pstat;
      if( !str_cmp( name, "do_pull" ) )
        return do_pull;
      if( !str_cmp( name, "do_punch" ) )
        return do_punch;
      if( !str_cmp( name, "do_purge" ) )
        return do_purge;
      if( !str_cmp( name, "do_push" ) )
        return do_push;
      if( !str_cmp( name, "do_put" ) )
        return do_put;
      break;
    case 'q':
      if( !str_cmp( name, "do_qpset" ) )
        return do_qpset;
      if( !str_cmp( name, "do_qpstat" ) )
        return do_qpstat;
      if( !str_cmp( name, "do_quaff" ) )
        return do_quaff;
      if( !str_cmp( name, "do_qui" ) )
        return do_qui;
      if( !str_cmp( name, "do_quit" ) )
        return do_quit;
      break;
    case 'r':
      if( !str_cmp( name, "do_raizou" ) )
        return do_raizou;
      if( !str_cmp( name, "do_raikyuu" ) )
        return do_raikyuu;
      if( !str_cmp( name, "do_riku" ) )
        return do_riku;
      if( !str_cmp( name, "do_roundhouse" ) )
        return do_roundhouse;
      if( !str_cmp( name, "do_railgun" ) )
        return do_railgun;
      if( !str_cmp( name, "do_renumber" ) )
        return do_renumber;
      if( !str_cmp( name, "do_revert_mystic" ) )
        return do_revert_mystic;
      if( !str_cmp( name, "do_roleplay" ) )
        return do_roleplay;
      if( !str_cmp( name, "do_reqbio" ) )
        return do_reqbio;
      if( !str_cmp( name, "do_resetalliances" ) )
        return do_resetalliances;
      if( !str_cmp( name, "do_racetalk" ) )
        return do_racetalk;
      if( !str_cmp( name, "do_radar" ) )
        return do_radar;
      if( !str_cmp( name, "do_rank" ) )
        return do_rank;
      if( !str_cmp( name, "do_rap" ) )
        return do_rap;
      if( !str_cmp( name, "do_rassign" ) )
        return do_rassign;
      if( !str_cmp( name, "do_rat" ) )
        return do_rat;
      // if ( !str_cmp( name, "do_rbeep"                     ))    return do_rbeep;
      // if ( !str_cmp( name, "do_rchannels"                 ))    return do_rchannels;
      // if ( !str_cmp( name, "do_rchanset"                  ))    return do_rchanset;
      // if ( !str_cmp( name, "do_rconnect"                  ))    return do_rconnect;
      if( !str_cmp( name, "do_rdelete" ) )
        return do_rdelete;
      // if ( !str_cmp( name, "do_rdisconnect"               ))    return do_rdisconnect;
      if( !str_cmp( name, "do_reboo" ) )
        return do_reboo;
      if( !str_cmp( name, "do_reboot" ) )
        return do_reboot;
      if( !str_cmp( name, "do_recharge" ) )
        return do_recharge;
      if( !str_cmp( name, "do_recho" ) )
        return do_recho;
      if( !str_cmp( name, "do_recite" ) )
        return do_recite;
      if( !str_cmp( name, "do_redit" ) )
        return do_redit;
      if( !str_cmp( name, "do_redraw_page" ) )
        return do_redraw_page;
      if( !str_cmp( name, "do_refresh_page" ) )
        return do_refresh_page;
      if( !str_cmp( name, "do_regoto" ) )
        return do_regoto;
      if( !str_cmp( name, "do_reimburse" ) )
        return do_reimburse;
      if( !str_cmp( name, "do_remains" ) )
        return do_remains;
      if( !str_cmp( name, "do_remove" ) )
        return do_remove;
      if( !str_cmp( name, "do_rempilot" ) )
        return do_rempilot;
      if( !str_cmp( name, "do_rent" ) )
        return do_rent;
      if( !str_cmp( name, "do_repair" ) )
        return do_repair;
      if( !str_cmp( name, "do_repairset" ) )
        return do_repairset;
      if( !str_cmp( name, "do_repairship" ) )
        return do_repairship;
      if( !str_cmp( name, "do_repairshops" ) )
        return do_repairshops;
      if( !str_cmp( name, "do_repairstat" ) )
        return do_repairstat;
      if( !str_cmp( name, "do_repeat" ) )
        return do_repeat;
      if( !str_cmp( name, "do_reply" ) )
        return do_reply;
      if( !str_cmp( name, "do_report" ) )
        return do_report;
      if( !str_cmp( name, "do_rescue" ) )
        return do_rescue;
      if( !str_cmp( name, "do_reserve" ) )
        return do_reserve;
      if( !str_cmp( name, "do_reset" ) )
        return do_reset;
      if( !str_cmp( name, "do_resetship" ) )
        return do_resetship;
      if( !str_cmp( name, "do_residence" ) )
        return do_residence;
      if( !str_cmp( name, "do_rest" ) )
        return do_rest;
      if( !str_cmp( name, "do_restore" ) )
        return do_restore;
      if( !str_cmp( name, "do_restoretime" ) )
        return do_restoretime;
      if( !str_cmp( name, "do_restrict" ) )
        return do_restrict;
      if( !str_cmp( name, "do_retell" ) )
        return do_retell;
      if( !str_cmp( name, "do_retire" ) )
        return do_retire;
      if( !str_cmp( name, "do_retran" ) )
        return do_retran;
      if( !str_cmp( name, "do_return" ) )
        return do_return;
      // if ( !str_cmp( name, "do_rfinger"                   ))    return do_rfinger;
      if( !str_cmp( name, "do_rgrub" ) )
        return do_rgrub;
      // if ( !str_cmp( name, "do_rignore"                   ))    return do_rignore;
      // if ( !str_cmp( name, "do_rinfo"                     ))    return do_rinfo;
      if( !str_cmp( name, "do_rings" ) )
        return do_rings;
      if( !str_cmp( name, "do_rip" ) )
        return do_rip;
      if( !str_cmp( name, "do_rlist" ) )
        return do_rlist;
      if( !str_cmp( name, "do_rmenu" ) )
        return do_rmenu;
      if( !str_cmp( name, "do_rocket_punch" ) )
        return do_rocket_punch;
      if( !str_cmp( name, "do_rolldie" ) )
        return do_rolldie;
      if( !str_cmp( name, "do_roster" ) )
        return do_roster;
      if( !str_cmp( name, "do_rpedit" ) )
        return do_rpedit;
      if( !str_cmp( name, "do_rpfind" ) )
        return do_rpfind;
      // if ( !str_cmp( name, "do_rping"                     ))    return do_rping;
      if( !str_cmp( name, "do_rppedit" ) )
        return do_rppedit;
      if( !str_cmp( name, "do_rpstat" ) )
        return do_rpstat;
      // if ( !str_cmp( name, "do_rquery"                    ))    return do_rquery;
      // if ( !str_cmp( name, "do_rreply"                    ))    return do_rreply;
      if( !str_cmp( name, "do_rreset" ) )
        return do_rreset;
      if( !str_cmp( name, "do_rset" ) )
        return do_rset;
      // if ( !str_cmp( name, "do_rsockets"                  ))    return do_rsockets;
      if( !str_cmp( name, "do_rstat" ) )
        return do_rstat;
      // if ( !str_cmp( name, "do_rtell"                     ))    return do_rtell;
      // if ( !str_cmp( name, "do_rwho"                      ))    return do_rwho;
      // if ( !str_cmp( name, "do_rwhois"                    ))    return do_rwhois;
      break;
    case 's':
      if( !str_cmp( name, "do_shakkahou" ) )
        return do_shakkahou;
      if( !str_cmp( name, "do_saibaman1" ) )
        return do_saibaman1;
      if( !str_cmp( name, "do_saibaman2" ) )
        return do_saibaman2;
      if( !str_cmp( name, "do_saibaman3" ) )
        return do_saibaman3;
      if( !str_cmp( name, "do_sent_chip" ) )
        return do_sent_chip;
      if( !str_cmp( name, "do_super_oozaru" ) )
        return do_super_oozaru;
      if( !str_cmp( name, "do_summon" ) )
        return do_summon;
      if( !str_cmp( name, "do_sanctuary" ) )
        return do_sanctuary;
      if( !str_cmp( name, "do_scattered_finger_beam" ) )
        return do_scattered_finger_beam;
      if( !str_cmp( name, "do_shockwave" ) )
        return do_shockwave;
      if( !str_cmp( name, "do_spirit_ball" ) )
        return do_spirit_ball;
      if( !str_cmp( name, "do_spirit_bomb" ) )
        return do_spirit_bomb;
      if( !str_cmp( name, "do_skga" ) )
        return do_skga;
      if( !str_cmp( name, "do_solar_flare" ) )
        return do_solar_flare;
      if( !str_cmp( name, "do_sacrifice" ) )
        return do_sacrifice;
      if( !str_cmp( name, "do_ss" ) )
        return do_ss;
      if( !str_cmp( name, "do_save" ) )
        return do_save;
      if( !str_cmp( name, "do_savealliances" ) )
        return do_savealliances;
      if( !str_cmp( name, "do_savearea" ) )
        return do_savearea;
      if( !str_cmp( name, "do_say" ) )
        return do_say;
      if( !str_cmp( name, "do_sbc" ) )
        return do_sbc;
      if( !str_cmp( name, "do_scan" ) )
        return do_scan;
      if( !str_cmp( name, "do_scatter" ) )
        return do_scatter;
      if( !str_cmp( name, "do_scatter_shot" ) )
        return do_scatter_shot;
      if( !str_cmp( name, "do_score" ) )
        return do_score;
      if( !str_cmp( name, "do_scribe" ) )
        return do_scribe;
      if( !str_cmp( name, "do_search" ) )
        return do_search;
      if( !str_cmp( name, "do_sedit" ) )
        return do_sedit;
      if( !str_cmp( name, "do_self_destruct" ) )
        return do_self_destruct;
      if( !str_cmp( name, "do_sell" ) )
        return do_sell;
      if( !str_cmp( name, "do_sellhouse" ) )
        return do_sellhouse;
      if( !str_cmp( name, "do_sellship" ) )
        return do_sellship;
      if( !str_cmp( name, "do_sense" ) )
        return do_sense;
      if( !str_cmp( name, "do_set_boot_time" ) )
        return do_set_boot_time;
      if( !str_cmp( name, "do_setage" ) )
        return do_setage;
      if( !str_cmp( name, "do_setclan" ) )
        return do_setclan;
      if( !str_cmp( name, "do_setclass" ) )
        return do_setclass;
      if( !str_cmp( name, "do_setcouncil" ) )
        return do_setcouncil;
      if( !str_cmp( name, "do_setdeity" ) )
        return do_setdeity;
      if( !str_cmp( name, "do_setheight" ) )
        return do_setheight;
      if( !str_cmp( name, "do_setplanet" ) )
        return do_setplanet;
      if( !str_cmp( name, "do_setrace" ) )
        return do_setrace;
      if( !str_cmp( name, "do_setship" ) )
        return do_setship;
      if( !str_cmp( name, "do_setstarsystem" ) )
        return do_setstarsystem;
      if( !str_cmp( name, "do_settime" ) )
        return do_settime;
      if( !str_cmp( name, "do_setrestoremessage" ) )
        return do_setrestoremessage;
      if( !str_cmp( name, "do_setweather" ) )
        return do_setweather;
      if( !str_cmp( name, "do_setweight" ) )
        return do_setweight;
      if( !str_cmp( name, "do_ships" ) )
        return do_ships;
      if( !str_cmp( name, "do_shipinfo" ) )
        return do_shipinfo;
      if( !str_cmp( name, "do_shops" ) )
        return do_shops;
      if( !str_cmp( name, "do_shopset" ) )
        return do_shopset;
      if( !str_cmp( name, "do_shopstat" ) )
        return do_shopstat;
      if( !str_cmp( name, "do_shout" ) )
        return do_shout;
      if( !str_cmp( name, "do_shove" ) )
        return do_shove;
      if( !str_cmp( name, "do_showrank" ) )
        return do_showrank;
      if( !str_cmp( name, "do_showclan" ) )
        return do_showclan;
      if( !str_cmp( name, "do_showclass" ) )
        return do_showclass;
      if( !str_cmp( name, "do_showcouncil" ) )
        return do_showcouncil;
      if( !str_cmp( name, "do_showdeity" ) )
        return do_showdeity;
      if( !str_cmp( name, "do_showimmlog" ) )
        return do_showimmlog;
      if( !str_cmp( name, "do_showlayers" ) )
        return do_showlayers;
      if( !str_cmp( name, "do_showplanet" ) )
        return do_showplanet;
      if( !str_cmp( name, "do_showrace" ) )
        return do_showrace;
      if( !str_cmp( name, "do_showship" ) )
        return do_showship;
      if( !str_cmp( name, "do_showstarsystem" ) )
        return do_showstarsystem;
      if( !str_cmp( name, "do_showweather" ) )
        return do_showweather;
      if( !str_cmp( name, "do_shutdow" ) )
        return do_shutdow;
      if( !str_cmp( name, "do_shutdown" ) )
        return do_shutdown;
      if( !str_cmp( name, "do_silence" ) )
        return do_silence;
      if( !str_cmp( name, "do_sit" ) )
        return do_sit;
      if( !str_cmp( name, "do_skin" ) )
        return do_skin;
      if( !str_cmp( name, "do_skin_trap" ) )
        return do_skin_trap;
      if( !str_cmp( name, "do_sla" ) )
        return do_sla;
      if( !str_cmp( name, "do_slay" ) )
        return do_slay;
      if( !str_cmp( name, "do_sleep" ) )
        return do_sleep;
      if( !str_cmp( name, "do_slice" ) )
        return do_slice;
      if( !str_cmp( name, "do_slist" ) )
        return do_slist;
      if( !str_cmp( name, "do_slookup" ) )
        return do_slookup;
      if( !str_cmp( name, "do_smoke" ) )
        return do_smoke;
      if( !str_cmp( name, "do_snoop" ) )
        return do_snoop;
      if( !str_cmp( name, "do_sober" ) )
        return do_sober;
      if( !str_cmp( name, "do_socials" ) )
        return do_socials;
      if( !str_cmp( name, "do_south" ) )
        return do_south;
      if( !str_cmp( name, "do_southeast" ) )
        return do_southeast;
      if( !str_cmp( name, "do_southwest" ) )
        return do_southwest;
      if( !str_cmp( name, "do_split_form" ) )
        return do_split_form;
      if( !str_cmp( name, "do_spar" ) )
        return do_spar;
      if( !str_cmp( name, "do_sparcheck" ) )
        return do_sparcheck;
      if( !str_cmp( name, "do_speak" ) )
        return do_speak;
      if( !str_cmp( name, "do_speeders" ) )
        return do_speeders;
      if( !str_cmp( name, "do_split" ) )
        return do_split;
      if( !str_cmp( name, "do_ssd_bomber" ) )
        return do_ssd_bomber;
      if( !str_cmp( name, "do_sset" ) )
        return do_sset;
      if( !str_cmp( name, "do_ssj" ) )
        return do_ssj;
      if( !str_cmp( name, "do_ssj2" ) )
        return do_ssj2;
      if( !str_cmp( name, "do_ssj3" ) )
        return do_ssj3;
      if( !str_cmp( name, "do_ssj4" ) )
        return do_ssj4;
      if( !str_cmp( name, "do_stand" ) )
        return do_stand;
      if( !str_cmp( name, "do_starsystems" ) )
        return do_starsystems;
      if( !str_cmp( name, "do_stat" ) )
        return do_stat;
      if( !str_cmp( name, "do_statreport" ) )
        return do_statreport;
      if( !str_cmp( name, "do_statshield" ) )
        return do_statshield;
      if( !str_cmp( name, "do_status" ) )
        return do_status;
      if( !str_cmp( name, "do_steal" ) )
        return do_steal;
      if( !str_cmp( name, "do_stopspar" ) )
        return do_stopspar;
      if( !str_cmp( name, "do_strew" ) )
        return do_strew;
      if( !str_cmp( name, "do_strip" ) )
        return do_strip;
      if( !str_cmp( name, "do_stun" ) )
        return do_stun;
      if( !str_cmp( name, "do_style" ) )
        return do_style;
      if( !str_cmp( name, "do_super_dragonfist" ) )
        return do_super_dragonfist;
      if( !str_cmp( name, "do_superandroid" ) )
        return do_superandroid;
      if( !str_cmp( name, "do_super_namek" ) )
        return do_super_namek;
      if( !str_cmp( name, "do_super_nova" ) )
        return do_super_nova;
      if( !str_cmp( name, "do_super_kamehameha" ) )
        return do_super_kamehameha;
      if( !str_cmp( name, "do_supplicate" ) )
        return do_supplicate;
      if( !str_cmp( name, "do_suppress" ) )
        return do_suppress;
      if( !str_cmp( name, "do_switch" ) )
        return do_switch;
      break;
    case 't':
      if( !str_cmp( name, "do_thunder_flash" ) )
	return do_thunder_flash;
      if( !str_cmp( name, "do_tuffle_blow" ) )
        return do_tuffle_blow;
      if( !str_cmp( name, "do_t4" ) )
        return do_t4;
      if( !str_cmp( name, "do_t3" ) )
        return do_t3;
      if( !str_cmp( name, "do_t2" ) )
        return do_t2;
      if( !str_cmp( name, "do_t1" ) )
        return do_t1;
      if( !str_cmp( name, "do_teachmajin" ) )
        return do_teachmajin;
      if( !str_cmp( name, "do_teachmystic" ) )
        return do_teachmystic;
      if( !str_cmp( name, "do_trap_ball" ) )
        return do_trap_ball;
      if( !str_cmp( name, "do_tribeam" ) )
        return do_tribeam;
      if( !str_cmp( name, "do_tri_form" ) )
        return do_tri_form;
      if( !str_cmp( name, "do_tag" ) )
        return do_tag;
      if( !str_cmp( name, "do_tamp" ) )
        return do_tamp;
      if( !str_cmp( name, "do_target" ) )
        return do_target;
      if( !str_cmp( name, "do_tell" ) )
        return do_tell;
      if( !str_cmp( name, "do_tentacle_attack" ) )
        return do_tentacle_attack;
      if( !str_cmp( name, "do_think" ) )
        return do_think;
      if( !str_cmp( name, "do_time" ) )
        return do_time;
      if( !str_cmp( name, "do_timecmd" ) )
        return do_timecmd;
      if( !str_cmp( name, "do_title" ) )
        return do_title;
      if( !str_cmp( name, "do_track" ) )
        return do_track;
      if( !str_cmp( name, "do_traffic" ) )
        return do_traffic;
      if( !str_cmp( name, "do_train" ) )
        return do_train;
      if( !str_cmp( name, "do_trajectory" ) )
        return do_trajectory;
      if( !str_cmp( name, "do_transfer" ) )
        return do_transfer;
      if( !str_cmp( name, "do_transform" ) )
        return do_transform;
//      if ( !str_cmp( name, "do_trust"                     ))    return do_trust;
      if( !str_cmp( name, "do_typo" ) )
        return do_typo;
      break;
    case 'u':
      if( !str_cmp( name, "do_undelete" ) )
	 return do_undelete;
      if( !str_cmp( name, "do_ultra_namek" ) )
        return do_ultra_namek;
      if( !str_cmp( name, "do_unbolt" ) )
        return do_unbolt;
      if( !str_cmp( name, "do_unbounty" ) )
        return do_unbounty;
      if( !str_cmp( name, "do_unfoldarea" ) )
        return do_unfoldarea;
      if( !str_cmp( name, "do_unhell" ) )
        return do_unhell;
      if( !str_cmp( name, "do_unlock" ) )
        return do_unlock;
      if( !str_cmp( name, "do_unnuisance" ) )
        return do_unnuisance;
      if( !str_cmp( name, "do_unsilence" ) )
        return do_unsilence;
      if( !str_cmp( name, "do_up" ) )
        return do_up;
      if( !str_cmp( name, "do_uppercut" ) )
        return do_uppercut;
      if( !str_cmp( name, "do_upgrade" ) )
        return do_upgrade;
      if( !str_cmp( name, "do_users" ) )
        return do_users;
      if( !str_cmp( name, "do_ussj" ) )
        return do_ussj;
      if( !str_cmp( name, "do_ussj2" ) )
        return do_ussj2;
      break;
    case 'v':
      if( !str_cmp( name, "do_vanishing_ball" ) )
        return do_vanishing_ball;
      if( !str_cmp( name, "do_vm1" ) )
        return do_vm1;
      if( !str_cmp( name, "do_vm2" ) )
        return do_vm2;
      if( !str_cmp( name, "do_value" ) )
        return do_value;
      if( !str_cmp( name, "do_vassign" ) )
        return do_vassign;
      if( !str_cmp( name, "do_version" ) )
        return do_version;
      if( !str_cmp( name, "do_victories" ) )
        return do_victories;
      if( !str_cmp( name, "do_viewbuf" ) )
        return do_viewbuf;
      if( !str_cmp( name, "do_visible" ) )
        return do_visible;
      if( !str_cmp( name, "do_vnums" ) )
        return do_vnums;
      if( !str_cmp( name, "do_vsearch" ) )
        return do_vsearch;
      break;
    case 'w':
      if( !str_cmp( name, "do_wake" ) )
        return do_wake;
      if( !str_cmp( name, "do_wff" ) )
        return do_wff;
      if( !str_cmp( name, "do_warn" ) )
        return do_warn;
      if( !str_cmp( name, "do_wartalk" ) )
        return do_wartalk;
      if( !str_cmp( name, "do_watch" ) )
        return do_watch;
      if( !str_cmp( name, "do_wear" ) )
        return do_wear;
      if( !str_cmp( name, "do_weather" ) )
        return do_weather;
      if( !str_cmp( name, "do_west" ) )
        return do_west;
      if( !str_cmp( name, "do_where" ) )
        return do_where;
      if( !str_cmp( name, "do_whisper" ) )
        return do_whisper;
      if( !str_cmp( name, "do_who" ) )
        return do_who;
//      if ( !str_cmp( name, "do_whois"                   ))    return do_whois;
      if( !str_cmp( name, "do_wimpy" ) )
        return do_wimpy;
      if( !str_cmp( name, "do_wizhelp" ) )
        return do_wizhelp;
      if( !str_cmp( name, "do_wizinfo" ) )
        return do_wizinfo;
      if( !str_cmp( name, "do_wizlist" ) )
        return do_wizlist;
      if( !str_cmp( name, "do_wizlock" ) )
        return do_wizlock;
      if( !str_cmp( name, "do_worth" ) )
        return do_worth;
      if( !str_cmp( name, "do_wss" ) )
        return do_wss;
      break;
    case 'y':
      if( !str_cmp( name, "do_yell" ) )
        return do_yell;
      break;
    case 'z':
      if( !str_cmp( name, "do_zap" ) )
        return do_zap;
      if( !str_cmp( name, "do_zones" ) )
        return do_zones;
      break;
/*//T2*/
  }
  return skill_notfound;
}

char *spell_name( SPELL_FUN * spell )
{
  if( spell == spell_smaug )
    return "spell_smaug";

  if( spell == spell_null )
    return "spell_null";
  if( spell == spell_sensu_bean )
    return "spell_sensu_bean";
  return "reserved";
}

char *skill_name( DO_FUN * skill )
{
  static char buf[64];
/*//T3*/

// New stuff :) - Karn
  if( skill == do_devil_flash )
    return "do_devil_flash";
  if( skill == do_dragonballscatter )
    return "do_dragonballscatter";
  if( skill == do_acid_burn )
    return "do_acid_burn";
  if( skill == do_acid_slash )
    return "do_acid_slash";
  if( skill == do_fakemoon )
    return "do_fakemoon";
  if( skill == do_fusiondance )
    return "do_fusiondance";
  if( skill == do_defuse )
    return "do_defuse";
  if( skill == do_clawstrike )
    return "do_clawstrike";
// End new stuff

  if( skill == do_aligncheck )
    return "do_aligncheck"; //by bruno.
  if( skill == do_aassign )
    return "do_aassign";
  if( skill == do_absorb )
    return "do_absorb";
  if( skill == do_accelerate )
    return "do_accelerate";
  if( skill == do_accessories )
    return "do_accessories";
  if( skill == do_add_imm_host )
    return "do_add_imm_host";
  if( skill == do_addpilot )
    return "do_addpilot";
  if( skill == do_addlessj )
    return "do_addlessj";
  if( skill == do_admintalk )
    return "do_admintalk";
  if( skill == do_adminto )
    return "do_adminto";
  if( skill == do_advance )
    return "do_advance";
  if( skill == do_affected )
    return "do_affected";
  if( skill == do_afk )
    return "do_afk";
  if( skill == do_ahelp )
    return "do_ahelp";
  if( skill == do_aid )
    return "do_aid";
  if( skill == do_alist )
    return "do_alist";
  if( skill == do_allow )
    return "do_allow";
  if( skill == do_allhigh )
    return "do_allhigh";
  if( skill == do_allships )
    return "do_allships";
  if( skill == do_allspeeders )
    return "do_allspeeders";
  if( skill == do_androidfuse )
    return "do_androidfuse";
  if( skill == do_analyze )
    return "do_analyze";
  if( skill == do_ansi )
    return "do_ansi";
  if( skill == do_answer )
    return "do_answer";
  if( skill == do_autotrain )
    return "do_autotrain";
  if( skill == do_apply )
    return "do_apply";
  if( skill == do_appraise )
    return "do_appraise";
  if( skill == do_areas )
    return "do_areas";
  if( skill == do_aset )
    return "do_aset";
  if( skill == do_ask )
    return "do_ask";
  if( skill == do_astat )
    return "do_astat";
  if( skill == do_at )
    return "do_at";
  if( skill == do_atobj )
    return "do_atobj";
  if( skill == do_auction )
    return "do_auction";
  if( skill == do_aura_set )
    return "do_aura_set";
  if( skill == do_authorize )
    return "do_authorize";
  if( skill == do_autopilot )
    return "do_autopilot";
  if( skill == do_autorecharge )
    return "do_autorecharge";
  if( skill == do_autotrack )
    return "do_autotrack";
  if( skill == do_avtalk )
    return "do_avtalk";
  if( skill == do_backup )
    return "do_backup";
  if( skill == do_battery )
    return "do_battery";
  if( skill == do_blast_zone )
    return "do_blast_zone";
  if( skill == do_banish )
    return "do_banish";
  if( skill == do_big_bang )
    return "do_big_bang";
  if( skill == do_burning_attack )
    return "do_burning_attack";
  if( skill == do_drp )
    return "do_drp";
  if( skill == do_doublekick )
    return "do_doublekick";
  if( skill == do_doublepunch )
    return "do_doublepunch";
  if( skill == do_darkness_flare )
    return "do_darkness_flare";
  if( skill == do_demonic_eclipse )
    return "do_demonic_eclipse";
  if( skill == do_destructive_wave )
    return "do_destructive_wave";
  if( skill == do_divinewrath )
    return "do_divinewrath";
  if( skill == do_dodon_ray )
    return "do_dodon_ray";
  if( skill == do_desperation )
    return "do_desperation";
  if( skill == do_finalshine )
    return "do_finalshine";
  if( skill == do_finishing_buster )
    return "do_finishing_buster";
  if( skill == do_gallic_gun )
    return "do_gallic_gun";
  if( skill == do_gained )
    return "do_gained";
  if( skill == do_grant )
    return "do_grant";
  if( skill == do_heaven_splitter_cannon )
    return "do_heaven_splitter_cannon";
  if( skill == do_hellzone_grenade )
    return "do_hellzone_grenade";
  if( skill == do_monkey_gun )
    return "do_monkey_gun";
  if( skill == do_majin )
    return "do_majin";
  if( skill == do_minion )
    return "do_minion";
  if( skill == do_makosen )
    return "do_makosen";
  if( skill == do_maliceray )
    return "do_maliceray";
  if( skill == do_sent_chip )
    return "do_sent_chip";
  if( skill == do_super_oozaru )
    return "do_super_oozaru";
  if( skill == do_ss )
    return "do_ss";
  if( skill == do_sanctuary )
    return "do_sanctuary";
  if( skill == do_superandroid )
    return "do_superandroid";
  if( skill == do_super_dragonfist )
    return "do_super_dragonfist";
  if( skill == do_scattered_finger_beam )
    return "do_scattered_finger_beam";
  if( skill == do_shockwave )
    return "do_shockwave";
  if( skill == do_spirit_ball )
    return "do_spirit_ball";
  if( skill == do_spirit_bomb )
    return "do_spirit_bomb";
  if( skill == do_summon )
    return "do_summon";
  if( skill == do_thunder_flash )
    return "do_thunder_flash";
  if( skill == do_teachmystic )
    return "do_teachmystic";
  if( skill == do_teachmajin )
    return "do_teachmajin";
  if( skill == do_trap_ball )
    return "do_trap_ball";
  if( skill == do_backstab )
    return "do_backstab";
  if( skill == do_balzhur )
    return "do_balzhur";
  if( skill == do_bamfin )
    return "do_bamfin";
  if( skill == do_bamfout )
    return "do_bamfout";
  if( skill == do_ban )
    return "do_ban";
  if( skill == do_bash )
    return "do_bash";
  if( skill == do_bashdoor )
    return "do_bashdoor";
  if( skill == do_bbk )
    return "do_bbk";
  if( skill == do_beep )
    return "do_beep";
  if( skill == do_berserk )
    return "do_berserk";
  if( skill == do_bestow )
    return "do_bestow";
  if( skill == do_bestowarea )
    return "do_bestowarea";
  if( skill == do_bio )
    return "do_bio";
  if( skill == do_bite )
    return "do_bite";
  if( skill == do_bloodlet )
    return "do_bloodlet";
  if( skill == do_board )
    return "do_board";
  if( skill == do_boards )
    return "do_boards";
  if( skill == do_bodybag )
    return "do_bodybag";
  if( skill == do_bolt )
    return "do_bolt";
  if( skill == do_botwatch )
    return "do_botwatch";
  if( skill == do_bounty )
    return "do_bounty";
  if( skill == do_brandish )
    return "do_brandish";
  if( skill == do_brew )
    return "do_brew";
  if( skill == do_bset )
    return "do_bset";
  if( skill == do_bstat )
    return "do_bstat";
  if( skill == do_bug )
    return "do_bug";
  if( skill == do_bury )
    return "do_bury";
  if( skill == do_buy )
    return "do_buy";
  if( skill == do_buyship )
    return "do_buyship";
  if( skill == do_claimrank )
    return "do_claimrank";
  if( skill == do_cruise_punch )
    return "do_cruise_punch";
  if( skill == do_callship )
    return "do_callship";
  if( skill == do_calculate )
    return "do_calculate";
  if( skill == do_cache )
    return "do_cache";
  if( skill == do_candy_blast )
    return "do_candy_blast";
  if( skill == do_cast )
    return "do_cast";
  if( skill == do_cedit )
    return "do_cedit";
  if( skill == do_censor )
    return "do_censor";
  if( skill == do_chaff )
    return "do_chaff";
  if( skill == do_chaos )
    return "do_chaos";
  if( skill == do_charge )
    return "do_charge";
  if( skill == do_channels )
    return "do_channels";
  if( skill == do_chat )
    return "do_chat";
  if( skill == do_check_vnums )
    return "do_check_vnums";
  if( skill == do_check_ld )
    return "do_check_ld";
  if( skill == do_circle )
    return "do_circle";
  if( skill == do_clanadmin )
    return "do_clanadmin";
  if( skill == do_clanrecall )
    return "do_clanrecall";
  if( skill == do_clandeposit )
    return "do_clandeposit";
  if( skill == do_clanwithdraw )
    return "do_clanwithdraw";
  if( skill == do_claninfo )
    return "do_claninfo";
  if( skill == do_clans )
    return "do_clans";
  if( skill == do_clantalk )
    return "do_clantalk";
  if( skill == do_cleaver )
    return "do_cleaver";
  if( skill == do_clear )
    return "do_clear";
  if( skill == do_clearhiscore )
    return "do_clearhiscore";
  if( skill == do_climate )
    return "do_climate";
  if( skill == do_climb )
    return "do_climb";
  if( skill == do_clone )
    return "do_clone";
  if( skill == do_close )
    return "do_close";
  if( skill == do_closehatch )
    return "do_closehatch";
  if( skill == do_cmdtable )
    return "do_cmdtable";
  if( skill == do_cmenu )
    return "do_cmenu";
  if( skill == do_colorize )
    return "do_colorize";
  if( skill == do_corpse )
    return "do_corpse";
  if( skill == do_combat )
    return "do_combat";
  if( skill == do_commands )
    return "do_commands";
  if( skill == do_comment )
    return "do_comment";
  if( skill == do_compare )
    return "do_compare";
#ifdef MCCP
  if( skill == do_compress )
    return "do_compress";
#endif
  if( skill == do_config )
    return "do_config";
  if( skill == do_consider )
    return "do_consider";
  if( skill == do_cook )
    return "do_cook";
  if( skill == do_copyship )
    return "do_copyship";
  if( skill == do_council_induct )
    return "do_council_induct";
  if( skill == do_council_outcast )
    return "do_council_outcast";
  if( skill == do_councils )
    return "do_councils";
  if( skill == do_counciltalk )
    return "do_counciltalk";
  if( skill == do_credits )
    return "do_credits";
  if( skill == do_cset )
    return "do_cset";
  if( skill == do_dd )
    return "do_dd";
  if( skill == do_ddd )
    return "do_ddd";
  if( skill == do_daichiretsuzan )
    return "do_daichiretsuzan";
  if( skill == do_death_ball )
    return "do_death_ball";
  if( skill == do_deities )
    return "do_deities";
  if( skill == do_delay )
    return "do_delay";
  if( skill == do_delete )
    return "do_delete";
  if( skill == do_demonweapon )
    return "do_demonweapon";
  if( skill == do_demon_wave )
    return "do_demon_wave";
  if( skill == do_deny )
    return "do_deny";
  if( skill == do_description )
    return "do_description";
  if( skill == do_description1 )
    return "do_description1";
  if( skill == do_description2 )
    return "do_description2";
  if( skill == do_description3 )
    return "do_description3";
  if( skill == do_description4 )
    return "do_description4";
  if( skill == do_description5 )
    return "do_description5";
  if( skill == do_destro )
    return "do_destro";
  if( skill == do_destroy )
    return "do_destroy";
  if( skill == do_detrap )
    return "do_detrap";
  if( skill == do_devote )
    return "do_devote";
  if( skill == do_diagnose )
    return "do_diagnose";
  if( skill == do_dig )
    return "do_dig";
  if( skill == do_disarm )
    return "do_disarm";
  if( skill == do_disconnect )
    return "do_disconnect";
  if( skill == do_dismiss )
    return "do_dismiss";
  if( skill == do_dismount )
    return "do_dismount";
  if( skill == do_divorce )
    return "do_divorce";
  if( skill == do_dmesg )
    return "do_dmesg";
  if( skill == do_dnd )
    return "do_dnd";
  if( skill == do_dnsusers )
    return "do_dnsusers";
  if( skill == do_down )
    return "do_down";
  if( skill == do_drag )
    return "do_drag";
  if( skill == do_drink )
    return "do_drink";
  if( skill == do_drive )
    return "do_drive";
  if( skill == do_drop )
    return "do_drop";
  if( skill == do_duplicate )
    return "do_duplicate";
  if( skill == do_buuball )
    return "do_buuball";
  if( skill == do_enhance )
    return "do_enhance";
  if( skill == do_eliminate )
    return "do_eliminate";
  if( skill == do_east )
    return "do_east";
  if( skill == do_eat )
    return "do_eat";
  if( skill == do_ech )
    return "do_ech";
  if( skill == do_echo )
    return "do_echo";
  if( skill == do_ehb )
    return "do_ehb";
  if( skill == do_electric_shield )
    return "do_electric_shield";
  if( skill == do_elevate )
    return "do_elevate";
  if( skill == do_email )
    return "do_email";
  if( skill == do_emote )
    return "do_emote";
  if( skill == do_empty )
    return "do_empty";
  if( skill == do_energy_ball )
    return "do_energy_ball";
  if( skill == do_energy_ring )
    return "do_energy_ring";
  if( skill == do_enter )
    return "do_enter";
  if( skill == do_equipment )
    return "do_equipment";
  if( skill == do_evilboost )
    return "do_evilboost";
  if( skill == do_evilsurge )
    return "do_evilsurge";
  if( skill == do_eviloverload )
    return "do_eviloverload";
  if( skill == do_examine )
    return "do_examine";
  if( skill == do_exits )
    return "do_exits";
  if( skill == do_eye_beam )
    return "do_eye_beam";
  if( skill == do_evolve )
    return "do_evolve";
  if( skill == do_extreme )
    return "do_extreme";
  if( skill == do_essj )
    return "do_essj";
  if( skill == do_hssj )
    return "do_hssj";
  if( skill == do_feed )
    return "do_feed";
  if( skill == do_ff )
    return "do_ff";
  if( skill == do_fill )
    return "do_fill";
  if( skill == do_findnote )
    return "do_findnote";
  if( skill == do_finger )
    return "do_finger";
  if( skill == do_finger_beam )
    return "do_finger_beam";
  if( skill == do_fire )
    return "do_fire";
  if( skill == do_fixchar )
    return "do_fixchar";
  if( skill == do_fixed )
    return "do_fixed";
  if( skill == do_flee )
    return "do_flee";
  if( skill == do_fly )
    return "do_fly";
  if( skill == do_foldarea )
    return "do_foldarea";
  if( skill == do_follow )
    return "do_follow";
  if( skill == do_for )
    return "do_for";
  if( skill == do_force )
    return "do_force";
  if( skill == do_forceclose )
    return "do_forceclose";
  if( skill == do_form_password )
    return "do_form_password";
  if( skill == do_fos )
    return "do_fos";
  if( skill == do_fprompt )
    return "do_fprompt";
  if( skill == do_fquit )
    return "do_fquit";
  if( skill == do_freeze )
    return "do_freeze";
  if( skill == do_fshow )
    return "do_fshow";
  if( skill == do_fslay )
    return "do_fslay";
  if( skill == do_gaso )
    return "do_gaso";
  if( skill == do_get )
    return "do_get";
  if( skill == do_genocide_attack )
    return "do_genocide_attack";
  if( skill == do_gfighting )
    return "do_gfighting";
  if( skill == do_ghost )
    return "do_ghost";
  if( skill == do_give )
    return "do_give";
  if( skill == do_giant_size )
    return "do_giant_size";
  if( skill == do_glance )
    return "do_glance";
  if( skill == do_global_boards )
    return "do_global_boards";
  if( skill == do_global_note )
    return "do_global_note";
  if( skill == do_godset )
    return "do_godset";
  if( skill == do_godstat )
    return "do_godstat";
  if( skill == do_godwho )
    return "do_godwho";
  if( skill == do_gohome )
    return "do_gohome";
  if( skill == do_gold )
    return "do_gold";
  if( skill == do_goto )
    return "do_goto";
  if( skill == do_gouge )
    return "do_gouge";
  if( skill == do_group )
    return "do_group";
  if( skill == do_growth )
    return "do_growth";
  if( skill == do_grub )
    return "do_grub";
  if( skill == do_gtell )
    return "do_gtell";
  if( skill == do_guilds )
    return "do_guilds";
  if( skill == do_guildtalk )
    return "do_guildtalk";
  if( skill == do_gwhere )
    return "do_gwhere";
  if( skill == do_hcchat )
    return "do_hcchat";
  if( skill == do_hyper )
    return "do_hyper";
  if( skill == do_hedit )
    return "do_hedit";
  if( skill == do_hell )
    return "do_hell";
  if( skill == do_hells_flash )
    return "do_hells_flash";
  if( skill == do_help )
    return "do_help";
  if( skill == do_hide )
    return "do_hide";
  if( skill == do_hiscore )
    return "do_hiscore";
  if( skill == do_hiscoset )
    return "do_hiscoset";
  if( skill == do_hitall )
    return "do_hitall";
  if( skill == do_hl )
    return "do_hl";
  if( skill == do_hlist )
    return "do_hlist";
  if( skill == do_holylight )
    return "do_holylight";
  if( skill == do_homebuy )
    return "do_homebuy";
  if( skill == do_homepage )
    return "do_homepage";
  if( skill == do_honoo )
    return "do_honoo";
  if( skill == do_hotboot )
    return "do_hotboot";
  if( skill == do_house )
    return "do_house";
  if( skill == do_hset )
    return "do_hset";
  if( skill == do_hyperspace )
    return "do_hyperspace";
  if( skill == do_icer_transform_2 )
    return "do_icer_transform_2";
  if( skill == do_icer_transform_3 )
    return "do_icer_transform_3";
  if( skill == do_instant_trans )
    return "do_instant_trans";
  if( skill == do_icer_transform_4 )
    return "do_icer_transform_4";
  if( skill == do_icer_transform_5 )
    return "do_icer_transform_5";
  // if ( skill == do_ichannels                   )    return "do_ichannels";
  // if ( skill == do_icommand                    )    return "do_icommand";
  if( skill == do_icq_number )
    return "do_icq_number";
  if( skill == do_ide )
    return "do_ide";
  if( skill == do_idea )
    return "do_idea";
  if( skill == do_ignore )
    return "do_ignore";
  // if ( skill == do_ilist                       )    return "do_ilist";
  // if ( skill == do_imc                         )    return "do_imc";
  // if ( skill == do_imclist                     )    return "do_imclist";
  if( skill == do_imm_morph )
    return "do_imm_morph";
  if( skill == do_imm_unmorph )
    return "do_imm_unmorph";
  if( skill == do_immtalk )
    return "do_immtalk";
  if( skill == do_immortalaurareset )
    return "do_immortalaurareset";
  if( skill == do_incognito )
    return "do_incognito";
  if( skill == do_induct )
    return "do_induct";
  if( skill == do_info )
    return "do_info";
  if( skill == do_integrate )
    return "do_integrate";
  if( skill == do_installarea )
    return "do_installarea";
  if( skill == do_instaroom )
    return "do_instaroom";
  if( skill == do_instazone )
    return "do_instazone";
  if( skill == do_inventory )
    return "do_inventory";
  if( skill == do_invis )
    return "do_invis";
  if( skill == do_ipcompare )
    return "do_ipcompare";
  // if ( skill == do_isetup                      )    return "do_isetup";
  // if ( skill == do_istats                      )    return "do_istats";
  if( skill == do_joinclan )
    return "do_joinclan";
  if( skill == do_jibaku )
    return "do_jibaku";
  if( skill == do_kaiocreate )
    return "do_kaiocreate";
  if( skill == do_kakusandan )
    return "do_kakusandan";
  if( skill == do_kaioken )
    return "do_kaioken";
  if( skill == do_kairestore )
    return "do_kairestore";
  if( skill == do_shakkahou )
    return "do_shakkahou";
  if( skill == do_raizou )
    return "do_raizou";
  if( skill == do_raikyuu )
    return "do_raikyuu";
  if( skill == do_riku )
    return "do_riku";
  if( skill == do_kamehameha )
    return "do_kamehameha";
  if( skill == do_khistory )
    return "do_khistory";
  if( skill == do_kick )
    return "do_kick";
  if( skill == do_kill )
    return "do_kill";
  if( skill == do_ki_burst )
    return "do_ki_burst";
  if( skill == do_ki_heal )
    return "do_ki_heal";
  if( skill == do_land )
    return "do_land";
  if( skill == do_languages )
    return "do_languages";
  if( skill == do_last )
    return "do_last";
  if( skill == do_launch )
    return "do_launch";
  if( skill == do_laws )
    return "do_laws";
  if( skill == do_leave )
    return "do_leave";
  if( skill == do_leaveship )
    return "do_leaveship";
  if( skill == do_level )
    return "do_level";
  if( skill == do_light )
    return "do_light";
  if( skill == do_list )
    return "do_list";
  if( skill == do_litterbug )
    return "do_litterbug";
  if( skill == do_loadarea )
    return "do_loadarea";
  if( skill == do_loadup )
    return "do_loadup";
  if( skill == do_lock )
    return "do_lock";
  if( skill == do_log )
    return "do_log";
  if( skill == do_look )
    return "do_look";
  if( skill == do_lookmap )
    return "do_lookmap";
  if( skill == do_loop )
    return "do_loop";
  if( skill == do_low_purge )
    return "do_low_purge";
  if( skill == do_lssj )
    return "do_lssj";
  // if ( skill == do_mailqueue                   )    return "do_mailqueue";
  if( skill == do_mystic )
    return "do_mystic";
  if( skill == do_mailroom )
    return "do_mailroom";
  if( skill == do_make )
    return "do_make";
  if( skill == do_makeboard )
    return "do_makeboard";
  if( skill == do_makeclan )
    return "do_makeclan";
  if( skill == do_makecouncil )
    return "do_makecouncil";
  if( skill == do_makedeity )
    return "do_makedeity";
  if( skill == do_makeplanet )
    return "do_makeplanet";
  if( skill == do_makerepair )
    return "do_makerepair";
  if( skill == do_makeship )
    return "do_makeship";
  if( skill == do_makeshop )
    return "do_makeshop";
  if( skill == do_makestarsystem )
    return "do_makestarsystem";
  if( skill == do_makewizlist )
    return "do_makewizlist";
  if( skill == do_mapout )
    return "do_mapout";
  if( skill == do_marry )
    return "do_marry";
  if( skill == do_masenko )
    return "do_masenko";
  if( skill == do_massign )
    return "do_massign";
  if( skill == do_mcreate )
    return "do_mcreate";
  if( skill == do_mdelete )
    return "do_mdelete";
  if( skill == do_meditate )
    return "do_meditate";
  if( skill == do_members )
    return "do_members";
  if( skill == do_memory )
    return "do_memory";
  if( skill == do_mfind )
    return "do_mfind";
  if( skill == do_minvoke )
    return "do_minvoke";
  if( skill == do_mlist )
    return "do_mlist";
  if( skill == do_mmenu )
    return "do_mmenu";
  if( skill == do_morphcreate )
    return "do_morphcreate";
  if( skill == do_morphdestroy )
    return "do_morphdestroy";
  if( skill == do_morphset )
    return "do_morphset";
  if( skill == do_morphstat )
    return "do_morphstat";
  if( skill == do_mortalize )
    return "do_mortalize";
  if( skill == do_mount )
    return "do_mount";
  if( skill == do_mpshowbot )
    return "do_mpshowbot";
  if( skill == do_mp_close_passage )
    return "do_mp_close_passage";
  if( skill == do_mp_damage )
    return "do_mp_damage";
  if( skill == do_mp_drain )
    return "do_mp_drain";
  if( skill == do_mp_pl_damage )
    return "do_mp_pl_damage";
  if( skill == do_mp_deposit )
    return "do_mp_deposit";
  if( skill == do_mp_fill_in )
    return "do_mp_fill_in";
  if( skill == do_mp_log )
    return "do_mp_log";
  if( skill == do_mp_open_passage )
    return "do_mp_open_passage";
  if( skill == do_mp_practice )
    return "do_mp_practice";
  if( skill == do_mp_restore )
    return "do_mp_restore";
  if( skill == do_mp_slay )
    return "do_mp_slay";
  if( skill == do_mp_withdraw )
    return "do_mp_withdraw";
  // if ( skill == do_mpadvance                   )    return "do_mpadvance";
  if( skill == do_mpapply )
    return "do_mpapply";
  if( skill == do_mpapplyb )
    return "do_mpapplyb";
  if( skill == do_mpasound )
    return "do_mpasound";
  if( skill == do_mpasupress )
    return "do_mpasupress";
  if( skill == do_mpat )
    return "do_mpat";
  if( skill == do_mpbodybag )
    return "do_mpbodybag";
  if( skill == do_mpcopy )
    return "do_mpcopy";
  if( skill == do_mpdelay )
    return "do_mpdelay";
  if( skill == do_mpdream )
    return "do_mpdream";
  if( skill == do_mpecho )
    return "do_mpecho";
  if( skill == do_mpechoaround )
    return "do_mpechoaround";
  if( skill == do_mpechoat )
    return "do_mpechoat";
  if( skill == do_mpechozone )
    return "do_mpechozone";
  if( skill == do_mpedit )
    return "do_mpedit";
  if( skill == do_mpfavor )
    return "do_mpfavor";
  if( skill == do_mpfind )
    return "do_mpfind";
  if( skill == do_mpforce )
    return "do_mpforce";
  if( skill == do_mpgoto )
    return "do_mpgoto";
  if( skill == do_mpinvis )
    return "do_mpinvis";
  if( skill == do_mpjunk )
    return "do_mpjunk";
  if( skill == do_mpkill )
    return "do_mpkill";
  if( skill == do_mpmload )
    return "do_mpmload";
  if( skill == do_mpmorph )
    return "do_mpmorph";
  if( skill == do_mpmset )
    return "do_mpmset";
  if( skill == do_mpmrppset )
    return "do_mpmrppset";
  if( skill == do_mpmusic )
    return "do_mpmusic";
  if( skill == do_mpmusicaround )
    return "do_mpmusicaround";
  if( skill == do_mpmusicat )
    return "do_mpmusicat";
  if( skill == do_mpnothing )
    return "do_mpnothing";
  if( skill == do_mpnuisance )
    return "do_mpnuisance";
  if( skill == do_mpoload )
    return "do_mpoload";
  if( skill == do_mposet )
    return "do_mposet";
  if( skill == do_mppardon )
    return "do_mppardon";
  if( skill == do_mppeace )
    return "do_mppeace";
  if( skill == do_mppkset )
    return "do_mppkset";
  if( skill == do_mppldiv )
    return "do_mppldiv";
  if( skill == do_mpplmult )
    return "do_mpplmult";
  if( skill == do_mppurge )
    return "do_mppurge";
  if( skill == do_mpscatter )
    return "do_mpscatter";
  if( skill == do_mpsound )
    return "do_mpsound";
  if( skill == do_mpsoundaround )
    return "do_mpsoundaround";
  if( skill == do_mpsoundat )
    return "do_mpsoundat";
  if( skill == do_mpstat )
    return "do_mpstat";
  if( skill == do_mptransfer )
    return "do_mptransfer";
  if( skill == do_mpunmorph )
    return "do_mpunmorph";
  if( skill == do_mpunnuisance )
    return "do_mpunnuisance";
  if( skill == do_mrange )
    return "do_mrange";
  if( skill == do_mset )
    return "do_mset";
  if( skill == do_mstat )
    return "do_mstat";
  if( skill == do_multi_disk )
    return "do_multi_disk";
  if( skill == do_multi_form )
    return "do_multi_form";
  if( skill == do_multi_eye )
    return "do_multi_eye";
  if( skill == do_murde )
    return "do_murde";
  if( skill == do_murder )
    return "do_murder";
  if( skill == do_muse )
    return "do_muse";
  if( skill == do_music )
    return "do_music";
  if( skill == do_mwhere )
    return "do_mwhere";
  if( skill == do_headbutt )
    return "do_headbutt";
  if( skill == do_roundhouse )
    return "do_roundhouse";
  if( skill == do_name )
    return "do_name";
  if( skill == do_namekfuse )
    return "do_namekfuse";
  if( skill == do_newbiechat )
    return "do_newbiechat";
  if( skill == do_newbieset )
    return "do_newbieset";
  if( skill == do_news )
    return "do_news";
  if( skill == do_newscore )
    return "do_newscore";
  if( skill == do_newzones )
    return "do_newzones";
  if( skill == do_noemote )
    return "do_noemote";
  if( skill == do_noscream )
    return "do_noscream";
  if( skill == do_nognote )
    return "do_nognote";
  if( skill == do_nohelps )
    return "do_nohelps";
  if( skill == do_noresolve )
    return "do_noresolve";
  if( skill == do_north )
    return "do_north";
  if( skill == do_northeast )
    return "do_northeast";
  if( skill == do_northwest )
    return "do_northwest";
  if( skill == do_notell )
    return "do_notell";
  if( skill == do_noteroom )
    return "do_noteroom";
  if( skill == do_notitle )
    return "do_notitle";
  if( skill == do_nuisance )
    return "do_nuisance";
  if( skill == do_oassign )
    return "do_oassign";
  if( skill == do_ocreate )
    return "do_ocreate";
  if( skill == do_odelete )
    return "do_odelete";
  if( skill == do_ofind )
    return "do_ofind";
  if( skill == do_ofindtype )
    return "do_ofindtype";
  if( skill == do_ogrub )
    return "do_ogrub";
  if( skill == do_oinvoke )
    return "do_oinvoke";
  if( skill == do_oldscore )
    return "do_oldscore";
  if( skill == do_olist )
    return "do_olist";
  if( skill == do_omenu )
    return "do_omenu";
  if( skill == do_ooc )
    return "do_ooc";
  if( skill == do_opcopy )
    return "do_opcopy";
  if( skill == do_opedit )
    return "do_opedit";
  if( skill == do_open )
    return "do_open";
  if( skill == do_openhatch )
    return "do_openhatch";
  if( skill == do_opfind )
    return "do_opfind";
  if( skill == do_opstat )
    return "do_opstat";
  if( skill == do_orange )
    return "do_orange";
  if( skill == do_order )
    return "do_order";
  if( skill == do_orders )
    return "do_orders";
  if( skill == do_ordertalk )
    return "do_ordertalk";
  if( skill == do_oset )
    return "do_oset";
  if( skill == do_ostat )
    return "do_ostat";
  if( skill == do_outcast )
    return "do_outcast";
  if( skill == do_owhere )
    return "do_owhere";
  if( skill == do_pstatus )
    return "do_pstatus";
  if( skill == do_pcquesting )
    return "do_pcquesting";
  if( skill == do_page )
    return "do_page";
  if( skill == do_pagelen )
    return "do_pagelen";
  if( skill == do_pager )
    return "do_pager";
  if( skill == do_pardon )
    return "do_pardon";
  if( skill == do_partner )
    return "do_partner";
  if( skill == do_password )
    return "do_password";
  if( skill == do_pcrename )
    return "do_pcrename";
  if( skill == do_pclastrename )
    return "do_pclastrename";
  if( skill == do_peace )
    return "do_peace";
  if( skill == do_pfiles )
    return "do_pfiles";
  if( skill == do_pick )
    return "do_pick";
  if( skill == do_pk )
    return "do_pk";
  if( skill == do_planets )
    return "do_planets";
  if( skill == do_plset )
    return "do_plset";
  if( skill == do_plist )
    return "do_plist";
  if( skill == do_pluogus )
    return "do_pluogus";
  if( skill == do_poison_weapon )
    return "do_poison_weapon";
  if( skill == do_potarafuse )
    return "do_potarafuse";
  if( skill == do_powerdown )
    return "do_powerdown";
  if( skill == do_powerup )
    return "do_powerup";
  if( skill == do_practice )
    return "do_practice";
  if( skill == do_privacy )
    return "do_privacy";
  if( skill == do_project )
    return "do_project";
  if( skill == do_promote )
    return "do_promote";
  if( skill == do_prompt )
    return "do_prompt";
  if( skill == do_pset )
    return "do_pset";
  if( skill == do_psiblast )
    return "do_psiblast";
  if( skill == do_pstat )
    return "do_pstat";
  if( skill == do_pull )
    return "do_pull";
  if( skill == do_punch )
    return "do_punch";
  if( skill == do_purge )
    return "do_purge";
  if( skill == do_push )
    return "do_push";
  if( skill == do_put )
    return "do_put";
  if( skill == do_qpset )
    return "do_qpset";
  if( skill == do_qpstat )
    return "do_qpstat";
  if( skill == do_quaff )
    return "do_quaff";
  if( skill == do_games )
    return "do_games";
  if( skill == do_qui )
    return "do_qui";
  if( skill == do_quit )
    return "do_quit";
  if( skill == do_railgun )
    return "do_railgun";
  if( skill == do_revert_mystic )
    return "do_revert_mystic";
  if( skill == do_roleplay )
    return "do_roleplay";
  if( skill == do_racetalk )
    return "do_racetalk";
  if( skill == do_reqbio )
    return "do_reqbio";
  if( skill == do_resetalliances )
    return "do_resetalliances";
  if( skill == do_radar )
    return "do_radar";
  if( skill == do_rank )
    return "do_rank";
  if( skill == do_rap )
    return "do_rap";
  if( skill == do_rassign )
    return "do_rassign";
  if( skill == do_rat )
    return "do_rat";
  // if ( skill == do_rbeep                       )    return "do_rbeep";
  // if ( skill == do_rchannels                   )    return "do_rchannels";
  // if ( skill == do_rchanset                    )    return "do_rchanset";
  // if ( skill == do_rconnect                    )    return "do_rconnect";
  if( skill == do_rdelete )
    return "do_rdelete";
  // if ( skill == do_rdisconnect                 )    return "do_rdisconnect";
  if( skill == do_reboo )
    return "do_reboo";
  if( skill == do_reboot )
    return "do_reboot";
  if( skill == do_recharge )
    return "do_recharge";
  if( skill == do_recho )
    return "do_recho";
  if( skill == do_recite )
    return "do_recite";
  if( skill == do_redit )
    return "do_redit";
  if( skill == do_redraw_page )
    return "do_redraw_page";
  if( skill == do_refresh_page )
    return "do_refresh_page";
  if( skill == do_regoto )
    return "do_regoto";
  if( skill == do_reimburse )
    return "do_reimburse";
  if( skill == do_remains )
    return "do_remains";
  if( skill == do_remove )
    return "do_remove";
  if( skill == do_rempilot )
    return "do_rempilot";
  if( skill == do_rent )
    return "do_rent";
  if( skill == do_renumber )
    return "do_renumber";
  if( skill == do_repair )
    return "do_repair";
  if( skill == do_repairset )
    return "do_repairset";
  if( skill == do_repairship )
    return "do_repairship";
  if( skill == do_repairshops )
    return "do_repairshops";
  if( skill == do_repairstat )
    return "do_repairstat";
  if( skill == do_repeat )
    return "do_repeat";
  if( skill == do_reply )
    return "do_reply";
  if( skill == do_report )
    return "do_report";
  if( skill == do_rescue )
    return "do_rescue";
  if( skill == do_reserve )
    return "do_reserve";
  if( skill == do_reset )
    return "do_reset";
  if( skill == do_resetship )
    return "do_resetship";
  if( skill == do_residence )
    return "do_residence";
  if( skill == do_rest )
    return "do_rest";
  if( skill == do_restore )
    return "do_restore";
  if( skill == do_restoretime )
    return "do_restoretime";
  if( skill == do_restrict )
    return "do_restrict";
  if( skill == do_retell )
    return "do_retell";
  if( skill == do_retire )
    return "do_retire";
  if( skill == do_retran )
    return "do_retran";
  if( skill == do_return )
    return "do_return";
  // if ( skill == do_rfinger                     )    return "do_rfinger";
  if( skill == do_rgrub )
    return "do_rgrub";
  // if ( skill == do_rignore                     )    return "do_rignore";
  // if ( skill == do_rinfo                       )    return "do_rinfo";
  if( skill == do_rings )
    return "do_rings";
  if( skill == do_rip )
    return "do_rip";
  if( skill == do_rlist )
    return "do_rlist";
  if( skill == do_rmenu )
    return "do_rmenu";
  if( skill == do_rocket_punch )
    return "do_rocket_punch";
  if( skill == do_rolldie )
    return "do_rolldie";
  if( skill == do_roster )
    return "do_roster";
  if( skill == do_rpedit )
    return "do_rpedit";
  if( skill == do_rpfind )
    return "do_rpfind";
  // if ( skill == do_rping                       )    return "do_rping";
  if( skill == do_rppedit )
    return "do_rppedit";
  if( skill == do_rpstat )
    return "do_rpstat";
  // if ( skill == do_rquery                      )    return "do_rquery";
  // if ( skill == do_rreply                      )    return "do_rreply";
  if( skill == do_rreset )
    return "do_rreset";
  if( skill == do_rset )
    return "do_rset";
  // if ( skill == do_rsockets                    )    return "do_rsockets";
  if( skill == do_rstat )
    return "do_rstat";
  // if ( skill == do_rtell                       )    return "do_rtell";
  // if ( skill == do_rwho                        )    return "do_rwho";
  // if ( skill == do_rwhois                      )    return "do_rwhois";
  if( skill == do_sacrifice )
    return "do_sacrifice";
  if( skill == do_save )
    return "do_save";
  if( skill == do_fullsave )
    return "do_fullsave";
  if( skill == do_savealliances )
    return "do_savealliances";
  if( skill == do_solar_flare )
    return "do_solar_flare";
  if( skill == do_skga )
    return "do_skga";
  if( skill == do_savearea )
    return "do_savearea";
  if( skill == do_say )
    return "do_say";
  if( skill == do_sbc )
    return "do_sbc";
  if( skill == do_scan )
    return "do_scan";
  if( skill == do_scatter )
    return "do_scatter";
  if( skill == do_scatter_shot )
    return "do_scatter_shot";
  if( skill == do_score )
    return "do_score";
  if( skill == do_scribe )
    return "do_scribe";
  if( skill == do_search )
    return "do_search";
  if( skill == do_sedit )
    return "do_sedit";
  if( skill == do_self_destruct )
    return "do_self_destruct";
  if( skill == do_sell )
    return "do_sell";
  if( skill == do_sellhouse )
    return "do_sellhouse";
  if( skill == do_sellship )
    return "do_sellship";
  if( skill == do_sense )
    return "do_sense";
  if( skill == do_set_boot_time )
    return "do_set_boot_time";
  if( skill == do_setage )
    return "do_setage";
  if( skill == do_setclan )
    return "do_setclan";
  if( skill == do_setclass )
    return "do_setclass";
  if( skill == do_setcouncil )
    return "do_setcouncil";
  if( skill == do_setdeity )
    return "do_setdeity";
  if( skill == do_setheight )
    return "do_setheight";
  if( skill == do_setplanet )
    return "do_setplanet";
  if( skill == do_setrace )
    return "do_setrace";
  if( skill == do_setship )
    return "do_setship";
  if( skill == do_setstarsystem )
    return "do_setstarsystem";
  if( skill == do_setrestoremessage )
    return "do_setrestoremessage";
  if( skill == do_settime )
    return "do_settime";
  if( skill == do_setweather )
    return "do_setweather";
  if( skill == do_setweight )
    return "do_setweight";
  if( skill == do_ships )
    return "do_ships";
  if( skill == do_shipinfo )
    return "do_shipinfo";
  if( skill == do_shops )
    return "do_shops";
  if( skill == do_shopset )
    return "do_shopset";
  if( skill == do_shopstat )
    return "do_shopstat";
  if( skill == do_shout )
    return "do_shout";
  if( skill == do_shove )
    return "do_shove";
  if( skill == do_showrank )
    return "do_showrank";
  if( skill == do_showclan )
    return "do_showclan";
  if( skill == do_showclass )
    return "do_showclass";
  if( skill == do_showcouncil )
    return "do_showcouncil";
  if( skill == do_showdeity )
    return "do_showdeity";
  if( skill == do_showimmlog )
    return "do_showimmlog";
  if( skill == do_showlayers )
    return "do_showlayers";
  if( skill == do_showplanet )
    return "do_showplanet";
  if( skill == do_showrace )
    return "do_showrace";
  if( skill == do_showship )
    return "do_showship";
  if( skill == do_showstarsystem )
    return "do_showstarsystem";
  if( skill == do_showweather )
    return "do_showweather";
  if( skill == do_shutdow )
    return "do_shutdow";
  if( skill == do_shutdown )
    return "do_shutdown";
  if( skill == do_silence )
    return "do_silence";
  if( skill == do_sit )
    return "do_sit";
  if( skill == do_skin )
    return "do_skin";
  if( skill == do_skin_trap )
    return "do_skin_trap";
  if( skill == do_sla )
    return "do_sla";
  if( skill == do_slay )
    return "do_slay";
  if( skill == do_sleep )
    return "do_sleep";
  if( skill == do_slice )
    return "do_slice";
  if( skill == do_slist )
    return "do_slist";
  if( skill == do_slookup )
    return "do_slookup";
  if( skill == do_smoke )
    return "do_smoke";
  if( skill == do_snoop )
    return "do_snoop";
  if( skill == do_sober )
    return "do_sober";
  if( skill == do_socials )
    return "do_socials";
  if( skill == do_south )
    return "do_south";
  if( skill == do_southeast )
    return "do_southeast";
  if( skill == do_southwest )
    return "do_southwest";
  if( skill == do_split_form )
    return "do_split_form";
  if( skill == do_spar )
    return "do_spar";
  if( skill == do_sparcheck )
    return "do_sparcheck";
  if( skill == do_speak )
    return "do_speak";
  if( skill == do_speeders )
    return "do_speeders";
  if( skill == do_split )
    return "do_split";
  if( skill == do_ssd_bomber )
    return "do_ssd_bomber";
  if( skill == do_sset )
    return "do_sset";
  if( skill == do_ssj )
    return "do_ssj";
  if( skill == do_ssj2 )
    return "do_ssj2";
  if( skill == do_ssj3 )
    return "do_ssj3";
  if( skill == do_ssj4 )
    return "do_ssj4";
  if( skill == do_stand )
    return "do_stand";
  if( skill == do_starsystems )
    return "do_starsystems";
  if( skill == do_stat )
    return "do_stat";
  if( skill == do_statreport )
    return "do_statreport";
  if( skill == do_statshield )
    return "do_statshield";
  if( skill == do_status )
    return "do_status";
  if( skill == do_steal )
    return "do_steal";
  if( skill == do_stopspar )
    return "do_stopspar";
  if( skill == do_strew )
    return "do_strew";
  if( skill == do_strip )
    return "do_strip";
  if( skill == do_stun )
    return "do_stun";
  if( skill == do_style )
    return "do_style";
  if( skill == do_super_namek )
    return "do_super_namek";
  if( skill == do_super_nova )
    return "do_super_nova";
  if( skill == do_super_kamehameha )
    return "do_super_kamehameha";
  if( skill == do_supplicate )
    return "do_supplicate";
  if( skill == do_suppress )
    return "do_suppress";
  if( skill == do_suppress )
    return "do_suppress";
  if( skill == do_saibaman1 )
    return "do_saibaman1";
  if( skill == do_saibaman2 )
    return "do_saibaman2";
  if( skill == do_saibaman3 )
    return "do_saibaman3";
  if( skill == do_switch )
    return "do_switch";
  if( skill == do_tuffle_blow )
    return "do_tuffle_blow";
  if( skill == do_t4 )
    return "do_t4";
  if( skill == do_t3 )
    return "do_t3";
  if( skill == do_t2 )
    return "do_t2";
  if( skill == do_t1 )
    return "do_t1";
  if( skill == do_vm2 )
    return "do_vm2";
  if( skill == do_vm1 )
    return "do_vm1";
  if( skill == do_vanishing_ball )
    return "do_vanishing_ball";
  if( skill == do_omega )
    return "do_omega";
  if( skill == do_tag )
    return "do_tag";
  if( skill == do_tamp )
    return "do_tamp";
  if( skill == do_tribeam )
    return "do_tribeam";
  if( skill == do_tri_form )
    return "do_tri_form";
  if( skill == do_target )
    return "do_target";
  if( skill == do_tell )
    return "do_tell";
  if( skill == do_tentacle_attack )
    return "do_tentacle_attack";
  if( skill == do_think )
    return "do_think";
  if( skill == do_time )
    return "do_time";
  if( skill == do_timecmd )
    return "do_timecmd";
  if( skill == do_title )
    return "do_title";
  if( skill == do_track )
    return "do_track";
  if( skill == do_traffic )
    return "do_traffic";
  if( skill == do_train )
    return "do_train";
  if( skill == do_trajectory )
    return "do_trajectory";
  if( skill == do_transfer )
    return "do_transfer";
  if( skill == do_transform )
    return "do_transform";
//    if( skill == do_trust           ) return "do_trust";
  if( skill == do_typo )
    return "do_typo";
  if( skill == do_undelete )
    return "do_undelete";
  if( skill == do_ultra_namek )
    return "do_ultra_namek";
  if( skill == do_unbolt )
    return "do_unbolt";
  if( skill == do_unbounty )
    return "do_unbounty";
  if( skill == do_unfoldarea )
    return "do_unfoldarea";
  if( skill == do_unhell )
    return "do_unhell";
  if( skill == do_unlock )
    return "do_unlock";
  if( skill == do_unnuisance )
    return "do_unnuisance";
  if( skill == do_unsilence )
    return "do_unsilence";
  if( skill == do_up )
    return "do_up";
  if( skill == do_uppercut )
    return "do_uppercut";
  if( skill == do_upgrade )
    return "do_upgrade";
  if( skill == do_users )
    return "do_users";
  if( skill == do_ussj )
    return "do_ussj";
  if( skill == do_ussj2 )
    return "do_ussj2";
  if( skill == do_value )
    return "do_value";
  if( skill == do_vassign )
    return "do_vassign";
  if( skill == do_version )
    return "do_version";
  if( skill == do_victories )
    return "do_victories";
  if( skill == do_viewbuf )
    return "do_viewbuf";
  if( skill == do_visible )
    return "do_visible";
  if( skill == do_vnums )
    return "do_vnums";
  if( skill == do_vsearch )
    return "do_vsearch";
  if( skill == do_wake )
    return "do_wake";
  if( skill == do_wff )
    return "do_wff";
  if( skill == do_warn )
    return "do_warn";
  if( skill == do_wartalk )
    return "do_wartalk";
  if( skill == do_watch )
    return "do_watch";
  if( skill == do_wear )
    return "do_wear";
  if( skill == do_weather )
    return "do_weather";
  if( skill == do_west )
    return "do_west";
  if( skill == do_where )
    return "do_where";
  if( skill == do_whisper )
    return "do_whisper";
  if( skill == do_who )
    return "do_who";
//      if ( skill == do_whois                       )    return "do_whois";
  if( skill == do_wimpy )
    return "do_wimpy";
  if( skill == do_wizhelp )
    return "do_wizhelp";
  if( skill == do_wizinfo )
    return "do_wizinfo";
  if( skill == do_wizlist )
    return "do_wizlist";
  if( skill == do_wizlock )
    return "do_wizlock";
  if( skill == do_worth )
    return "do_worth";
  if( skill == do_wss )
    return "do_wss";
  if( skill == do_yell )
    return "do_yell";
  if( skill == do_zap )
    return "do_zap";
  if( skill == do_zones )
    return "do_zones";
  if( skill == do_dbwhere )
    return "do_dbwhere";
  if( skill == do_dbradar )
    return "do_dbradar";
/*//T4*/
  sprintf( buf, "(%p)", skill );
  return buf;
}

bool load_class_file( char *fname )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;
  struct class_type *class;
  int cl = -1;
  int tlev = 0;
  FILE *fp;

  sprintf( buf, "%s%s", CLASS_DIR, fname );
  if( ( fp = fopen( buf, "r" ) ) == NULL )
  {
    perror( buf );
    return FALSE;
  }

  CREATE( class, struct class_type, 1 );

  /*
   * Setup defaults for additions to class structure 
   */
  class->attr_second = 0;
  class->attr_deficient = 0;
  xCLEAR_BITS( class->affected );
  class->resist = 0;
  class->suscept = 0;

  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'A':
        KEY( "Affected", class->affected, fread_bitvector( fp ) );
        KEY( "AttrPrime", class->attr_prime, fread_number( fp ) );
        KEY( "AttrSecond", class->attr_second, fread_number( fp ) );
        KEY( "AttrDeficient", class->attr_deficient, fread_number( fp ) );
        break;

      case 'C':
        KEY( "Class", cl, fread_number( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          fclose( fp );
          if( cl < 0 || cl >= MAX_CLASS )
          {
            sprintf( buf, "Load_class_file: Class (%s) bad/not found (%d)",
                     class->who_name ? class->who_name : "name not found", cl );
            bug( buf, 0 );
            if( class->who_name )
              STRFREE( class->who_name );
            DISPOSE( class );
            return FALSE;
          }
          class_table[cl] = class;
          return TRUE;
        }
        KEY( "ExpBase", class->exp_base, fread_number( fp ) );
        break;

      case 'G':
        KEY( "Guild", class->guild, fread_number( fp ) );
        break;

      case 'H':
        KEY( "HpMax", class->hp_max, fread_number( fp ) );
        KEY( "HpMin", class->hp_min, fread_number( fp ) );
        break;

      case 'M':
        KEY( "Mana", class->fMana, fread_number( fp ) );
        break;

      case 'N':
        KEY( "Name", class->who_name, fread_string( fp ) );
        break;

      case 'R':
        KEY( "Resist", class->resist, fread_number( fp ) );
        break;

      case 'S':
        if( !str_cmp( word, "Skill" ) )
        {
          int sn, adp;
          long double lev;

          word = fread_word( fp );
          lev = fread_number_ld( fp );
          adp = fread_number( fp );
          sn = skill_lookup( word );
          if( cl < 0 || cl >= MAX_CLASS )
          {
            sprintf( buf, "load_class_file: Skill %s -- class bad/not found (%d)", word, cl );
            bug( buf, 0 );
          }
          else if( !IS_VALID_SN( sn ) )
          {
            sprintf( buf, "load_class_file: Skill %s unknown", word );
            bug( buf, 0 );
          }
          else
          {
            skill_table[sn]->skill_level[cl] = lev;
            skill_table[sn]->skill_adept[cl] = adp;
          }
          fMatch = TRUE;
          break;
        }
        KEY( "Skilladept", class->skill_adept, fread_number( fp ) );
        KEY( "Suscept", class->suscept, fread_number( fp ) );
        break;

      case 'T':
        if( !str_cmp( word, "Title" ) )
        {
          if( cl < 0 || cl >= MAX_CLASS )
          {
            char *tmp;

            sprintf( buf, "load_class_file: Title -- class bad/not found (%d)", cl );
            bug( buf, 0 );
            tmp = fread_string_nohash( fp );
            DISPOSE( tmp );
            tmp = fread_string_nohash( fp );
            DISPOSE( tmp );
          }
          else if( tlev < MAX_LEVEL + 1 )
          {
            title_table[cl][tlev][0] = fread_string_nohash( fp );
            title_table[cl][tlev][1] = fread_string_nohash( fp );
            ++tlev;
          }
          else
            bug( "load_class_file: Too many titles" );
          fMatch = TRUE;
          break;
        }
        KEY( "Thac0", class->thac0_00, fread_number( fp ) );
        KEY( "Thac32", class->thac0_32, fread_number( fp ) );
        break;

      case 'W':
        KEY( "Weapon", class->weapon, fread_number( fp ) );
        break;
    }
    if( !fMatch )
    {
      sprintf( buf, "load_class_file: no match: %s", word );
      bug( buf, 0 );
    }
  }
  return FALSE;
}

/*
 * Load in all the class files.
 */
void load_classes(  )
{
  FILE *fpList;
  char *filename;
  char classlist[256];
  char buf[MAX_STRING_LENGTH];
  int i;

  MAX_PC_CLASS = 0;

  /*
   * Pre-init the class_table with blank classes
   */
  for( i = 0; i < MAX_CLASS; i++ )
    class_table[i] = NULL;

  sprintf( classlist, "%s%s", CLASS_DIR, CLASS_LIST );
  if( ( fpList = fopen( classlist, "r" ) ) == NULL )
  {
    perror( classlist );
    exit( 1 );
  }

  for( ;; )
  {
    filename = feof( fpList ) ? "$" : fread_word( fpList );
    if( filename[0] == '$' )
      break;

    if( !load_class_file( filename ) )
    {
      sprintf( buf, "Cannot load class file: %s", filename );
      bug( buf, 0 );
    }
    else
      MAX_PC_CLASS++;
  }
  fclose( fpList );
  for( i = 0; i < MAX_CLASS; i++ )
  {
    if( class_table[i] == NULL )
    {
      CREATE( class_table[i], struct class_type, 1 );
      create_new_class( i, "" );
    }
  }
  return;
}


void write_class_file( int cl )
{
  FILE *fpout;
  char buf[MAX_STRING_LENGTH];
  char filename[MAX_INPUT_LENGTH];
  struct class_type *class = class_table[cl];
  int x;
  long double y;

  sprintf( filename, "%s%s.class", CLASSDIR, class->who_name );
  if( ( fpout = fopen( filename, "w" ) ) == NULL )
  {
    sprintf( buf, "Cannot open: %s for writing", filename );
    bug( buf, 0 );
    return;
  }
  fprintf( fpout, "Name          %s~\n", class->who_name );
  fprintf( fpout, "Class         %d\n", cl );
  fprintf( fpout, "AttrPrime     %d\n", class->attr_prime );
  fprintf( fpout, "AttrSecond    %d\n", class->attr_second );
  fprintf( fpout, "AttrDeficient %d\n", class->attr_deficient );
  fprintf( fpout, "Weapon        %d\n", class->weapon );
  fprintf( fpout, "Guild         %d\n", class->guild );
  fprintf( fpout, "Skilladept    %d\n", class->skill_adept );
  fprintf( fpout, "Thac0         %d\n", class->thac0_00 );
  fprintf( fpout, "Thac32        %d\n", class->thac0_32 );
  fprintf( fpout, "Hpmin         %d\n", class->hp_min );
  fprintf( fpout, "Hpmax         %d\n", class->hp_max );
  fprintf( fpout, "Mana          %d\n", class->fMana );
  fprintf( fpout, "Expbase       %d\n", class->exp_base );
  fprintf( fpout, "Affected      %s\n", print_bitvector( &class->affected ) );
  fprintf( fpout, "Resist        %d\n", class->resist );
  fprintf( fpout, "Suscept       %d\n", class->suscept );
  for( x = 0; x < top_sn; x++ )
  {
    if( !skill_table[x]->name || skill_table[x]->name[0] == '\0' )
      break;
    if( ( y = skill_table[x]->skill_level[cl] ) > 0 && skill_table[x]->min_level[cl] != 0 )
      fprintf( fpout, "Skill '%s' %0.Lf %d\n", skill_table[x]->name, y, skill_table[x]->skill_adept[cl] );
  }
  for( x = 0; x <= MAX_LEVEL; x++ )
    fprintf( fpout, "Title\n%s~\n%s~\n", title_table[cl][x][0], title_table[cl][x][1] );
  fprintf( fpout, "End\n" );
  fclose( fpout );
}


/*
 * Load in all the race files.
 */
void load_races(  )
{
  FILE *fpList;
  char *filename;
  char racelist[256];
  char buf[MAX_STRING_LENGTH];
  int i;

  MAX_PC_RACE = 0;
  /*
   * Pre-init the race_table with blank races
   */
  for( i = 0; i < MAX_RACE; i++ )
    race_table[i] = NULL;

  sprintf( racelist, "%s%s", RACEDIR, RACE_LIST );
  if( ( fpList = fopen( racelist, "r" ) ) == NULL )
  {
    perror( racelist );
    exit( 1 );
  }

  for( ;; )
  {
    filename = feof( fpList ) ? "$" : fread_word( fpList );
    if( filename[0] == '$' )
      break;

    if( !load_race_file( filename ) )
    {
      sprintf( buf, "Cannot load race file: %s", filename );
      bug( buf, 0 );
    }
    else
      MAX_PC_RACE++;
  }
  for( i = 0; i < MAX_RACE; i++ )
  {
    if( race_table[i] == NULL )
    {
      CREATE( race_table[i], struct race_type, 1 );
      sprintf( race_table[i]->race_name, "%s", "unused" );
    }
  }
  fclose( fpList );
  return;
}

void write_race_file( int ra )
{
  FILE *fpout;
  char buf[MAX_STRING_LENGTH];
  char filename[MAX_INPUT_LENGTH];
  struct race_type *race = race_table[ra];
  int i;
  int x, y;

  if( !race->race_name )
  {
    sprintf( buf, "Race %d has null name, not writing .race file.", ra );
    bug( buf, 0 );
    return;
  }

  sprintf( filename, "%s%s.race", RACEDIR, race->race_name );
  if( ( fpout = fopen( filename, "w+" ) ) == NULL )
  {
    sprintf( buf, "Cannot open: %s for writing", filename );
    bug( buf, 0 );
    return;
  }

  fprintf( fpout, "Name        %s~\n", race->race_name );
  fprintf( fpout, "Race        %d\n", ra );
  fprintf( fpout, "Classes     %d\n", race->class_restriction );
  fprintf( fpout, "Str_Plus    %d\n", race->str_plus );
  fprintf( fpout, "Dex_Plus    %d\n", race->dex_plus );
  fprintf( fpout, "Int_Plus    %d\n", race->int_plus );
  fprintf( fpout, "Con_Plus    %d\n", race->con_plus );
  fprintf( fpout, "Lck_Plus    %d\n", race->lck_plus );
  fprintf( fpout, "Hit         %d\n", race->hit );
  fprintf( fpout, "Mana        %d\n", race->mana );
  fprintf( fpout, "Affected    %s\n", print_bitvector( &race->affected ) );
  fprintf( fpout, "Resist      %d\n", race->resist );
  fprintf( fpout, "Suscept     %d\n", race->suscept );
  fprintf( fpout, "Language    %d\n", race->language );
  fprintf( fpout, "Align       %d\n", race->alignment );
  fprintf( fpout, "Min_Align   %d\n", race->minalign );
  fprintf( fpout, "Max_Align	 %d\n", race->maxalign );
  fprintf( fpout, "AC_Plus     %d\n", race->ac_plus );
  fprintf( fpout, "Exp_Mult    %d\n", race->exp_multiplier );
  fprintf( fpout, "Attacks     %s\n", print_bitvector( &race->attacks ) );
  fprintf( fpout, "Defenses    %s\n", print_bitvector( &race->defenses ) );
  fprintf( fpout, "Height      %d\n", race->height );
  fprintf( fpout, "Weight      %d\n", race->weight );
  fprintf( fpout, "Hunger_Mod  %d\n", race->hunger_mod );
  fprintf( fpout, "Thirst_mod  %d\n", race->thirst_mod );
  fprintf( fpout, "Mana_Regen  %d\n", race->mana_regen );
  fprintf( fpout, "HP_Regen    %d\n", race->hp_regen );
  fprintf( fpout, "Race_Recall %d\n", race->race_recall );
  fprintf( fpout, "MaxArmor    %d\n", race->max_armor );

  for( i = 0; i < MAX_WHERE_NAME - 1; i++ )
    fprintf( fpout, "WhereName   %s~\n", race->where_name[i] );


  for( x = 0; x < top_sn; x++ )
  {
    if( !skill_table[x]->name || skill_table[x]->name[0] == '\0' )
      break;
    if( ( y = skill_table[x]->race_level[ra] ) > 0 )
      fprintf( fpout, "Skill '%s' %d %d\n", skill_table[x]->name, y, skill_table[x]->race_adept[ra] );
  }
  fprintf( fpout, "End\n" );
  fclose( fpout );
}

bool load_race_file( char *fname )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  char *race_name = NULL;
  bool fMatch;
  struct race_type *race;
  int ra = -1;
  FILE *fp;
  int i, wear = 0;

  sprintf( buf, "%s%s", RACEDIR, fname );
  if( ( fp = fopen( buf, "r" ) ) == NULL )
  {
    perror( buf );
    return FALSE;
  }

  CREATE( race, struct race_type, 1 );
  for( i = 0; i < MAX_WHERE_NAME; i++ )
    race->where_name[i] = where_name[i];
  race->max_armor = 10000;
  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'A':
        KEY( "Align", race->alignment, fread_number( fp ) );
        KEY( "AC_Plus", race->ac_plus, fread_number( fp ) );
        KEY( "Affected", race->affected, fread_bitvector( fp ) );
        KEY( "Attacks", race->attacks, fread_bitvector( fp ) );
        break;

      case 'C':
        KEY( "Con_Plus", race->con_plus, fread_number( fp ) );
        KEY( "Classes", race->class_restriction, fread_number( fp ) );
        break;


      case 'D':
        KEY( "Dex_Plus", race->dex_plus, fread_number( fp ) );
        KEY( "Defenses", race->defenses, fread_bitvector( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          fclose( fp );
          if( ra < 0 || ra >= MAX_RACE )
          {
            sprintf( buf, "Load_race_file: Race (%s) bad/not found (%d)",
                     race->race_name ? race->race_name : "name not found", ra );
            bug( buf, 0 );
            DISPOSE( race );
            return FALSE;
          }
          race_table[ra] = race;
          return TRUE;
        }

        KEY( "Exp_Mult", race->exp_multiplier, fread_number( fp ) );

        break;


      case 'I':
        KEY( "Int_Plus", race->int_plus, fread_number( fp ) );
        break;

      case 'H':
        KEY( "Height", race->height, fread_number( fp ) );
        KEY( "Hit", race->hit, fread_number( fp ) );
        KEY( "HP_Regen", race->hp_regen, fread_number( fp ) );
        KEY( "Hunger_Mod", race->hunger_mod, fread_number( fp ) );
        break;

      case 'L':
        KEY( "Language", race->language, fread_number( fp ) );
        KEY( "Lck_Plus", race->lck_plus, fread_number( fp ) );
        break;


      case 'M':
        KEY( "Mana", race->mana, fread_number( fp ) );
        KEY( "Mana_Regen", race->mana_regen, fread_number( fp ) );
        KEY( "Min_Align", race->minalign, fread_number( fp ) );
        race->minalign = -1000;
        KEY( "Max_Align", race->maxalign, fread_number( fp ) );
        race->maxalign = -1000;
        KEY( "MaxArmor", race->max_armor, fread_number( fp ) );
        break;

      case 'N':
        KEY( "Name", race_name, fread_string( fp ) );
        break;

      case 'R':
        KEY( "Race", ra, fread_number( fp ) );
        KEY( "Race_Recall", race->race_recall, fread_number( fp ) );
        KEY( "Resist", race->resist, fread_number( fp ) );
        break;

      case 'S':
        KEY( "Str_Plus", race->str_plus, fread_number( fp ) );
        KEY( "Suscept", race->suscept, fread_number( fp ) );
        if( !str_cmp( word, "Skill" ) )
        {
          int sn, lev, adp;

          word = fread_word( fp );
          lev = fread_number( fp );
          adp = fread_number( fp );
          sn = skill_lookup( word );
          if( ra < 0 || ra >= MAX_RACE )
          {
            sprintf( buf, "load_race_file: Skill %s -- race bad/not found (%d)", word, ra );
            bug( buf, 0 );
          }
          else if( !IS_VALID_SN( sn ) )
          {
            sprintf( buf, "load_race_file: Skill %s unknown", word );
            bug( buf, 0 );
          }
          else
          {
            skill_table[sn]->race_level[ra] = lev;
            skill_table[sn]->race_adept[ra] = adp;
          }
          fMatch = TRUE;
          break;
        }
        break;

      case 'T':
        KEY( "Thirst_Mod", race->thirst_mod, fread_number( fp ) );
        break;

      case 'W':
        KEY( "Weight", race->weight, fread_number( fp ) );
        if( !str_cmp( word, "WhereName" ) )
        {
          if( ra < 0 || ra >= MAX_RACE )
          {
            char *tmp;

            sprintf( buf, "load_race_file: Title -- race bad/not found (%d)", ra );
            bug( buf, 0 );
            tmp = fread_string_nohash( fp );
            DISPOSE( tmp );
            tmp = fread_string_nohash( fp );
            DISPOSE( tmp );
          }
          else if( wear < MAX_WHERE_NAME )
          {
            race->where_name[wear] = fread_string_nohash( fp );
            ++wear;
          }
          else
            bug( "load_race_file: Too many where_names" );
          fMatch = TRUE;
          break;
        }
        break;
    }

    if( race_name != NULL )
      sprintf( race->race_name, "%-.16s", race_name );

    if( !fMatch )
    {
      sprintf( buf, "load_race_file: no match: %s", word );
      bug( buf, 0 );
    }
  }
  return FALSE;
}

/*
 * Function used by qsort to sort skills
 */
int skill_comp( SKILLTYPE ** sk1, SKILLTYPE ** sk2 )
{
  SKILLTYPE *skill1 = ( *sk1 );
  SKILLTYPE *skill2 = ( *sk2 );

  if( !skill1 && skill2 )
    return 1;
  if( skill1 && !skill2 )
    return -1;
  if( !skill1 && !skill2 )
    return 0;
  if( skill1->type < skill2->type )
    return -1;
  if( skill1->type > skill2->type )
    return 1;
  return strcmp( skill1->name, skill2->name );
}

/*
 * Sort the skill table with qsort
 */
void sort_skill_table(  )
{
  log_string( "Sorting skill table..." );
  qsort( &skill_table[1], top_sn - 1, sizeof( SKILLTYPE * ), ( int ( * )( const void *, const void * ) )skill_comp );
}


/*
 * Remap slot numbers to sn values
 */
void remap_slot_numbers(  )
{
  SKILLTYPE *skill;
  SMAUG_AFF *aff;
  char tmp[32];
  int sn;

  log_string( "Remapping slots to sns" );

  for( sn = 0; sn <= top_sn; sn++ )
  {
    if( ( skill = skill_table[sn] ) != NULL )
    {
      for( aff = skill->affects; aff; aff = aff->next )
        if( aff->location == APPLY_WEAPONSPELL
            || aff->location == APPLY_WEARSPELL
            || aff->location == APPLY_REMOVESPELL
            || aff->location == APPLY_STRIPSN || aff->location == APPLY_RECURRINGSPELL )
        {
          sprintf( tmp, "%d", slot_lookup( atoi( aff->modifier ) ) );
          DISPOSE( aff->modifier );
          aff->modifier = str_dup( tmp );
        }
    }
  }
}

/*
 * Write skill data to a file
 */
void fwrite_skill( FILE * fpout, SKILLTYPE * skill )
{
  SMAUG_AFF *aff;
  int modifier;

  fprintf( fpout, "Name         %s~\n", skill->name );
  fprintf( fpout, "Type         %s\n", skill_tname[skill->type] );
  fprintf( fpout, "Info         %d\n", skill->info );
  fprintf( fpout, "Flags        %d\n", skill->flags );
  if( skill->target )
    fprintf( fpout, "Target       %d\n", skill->target );
  /*
   * store as new minpos (minpos>=100 flags new style in character loading)
   */
  if( skill->minimum_position )
    fprintf( fpout, "Minpos       %d\n", skill->minimum_position + 100 );
  if( skill->spell_sector )
    fprintf( fpout, "Ssector      %d\n", skill->spell_sector );
  if( skill->saves )
    fprintf( fpout, "Saves        %d\n", skill->saves );
  if( skill->slot )
    fprintf( fpout, "Slot         %d\n", skill->slot );
  if( skill->min_mana )
    fprintf( fpout, "Mana         %d\n", skill->min_mana );
  if( skill->focus )
    fprintf( fpout, "Focus        %d\n", skill->focus );
  fprintf( fpout, "CanCharge    %d\n", skill->canCharge );
  if( skill->beats )
    fprintf( fpout, "Rounds       %d\n", skill->beats );
  if( skill->range )
    fprintf( fpout, "Range        %d\n", skill->range );
  if( skill->guild != -1 )
    fprintf( fpout, "Guild        %d\n", skill->guild );
  if( skill->skill_fun )
    fprintf( fpout, "Code         %s\n", skill_name( skill->skill_fun ) );
  else if( skill->spell_fun )
    fprintf( fpout, "Code         %s\n", spell_name( skill->spell_fun ) );
  fprintf( fpout, "Dammsg       %s~\n", skill->noun_damage );
  if( skill->msg_off && skill->msg_off[0] != '\0' )
    fprintf( fpout, "Wearoff      %s~\n", skill->msg_off );

  if( skill->hit_char && skill->hit_char[0] != '\0' )
    fprintf( fpout, "Hitchar      %s~\n", skill->hit_char );
  if( skill->hit_vict && skill->hit_vict[0] != '\0' )
    fprintf( fpout, "Hitvict      %s~\n", skill->hit_vict );
  if( skill->hit_room && skill->hit_room[0] != '\0' )
    fprintf( fpout, "Hitroom      %s~\n", skill->hit_room );
  if( skill->hit_dest && skill->hit_dest[0] != '\0' )
    fprintf( fpout, "Hitdest      %s~\n", skill->hit_dest );

  if( skill->miss_char && skill->miss_char[0] != '\0' )
    fprintf( fpout, "Misschar     %s~\n", skill->miss_char );
  if( skill->miss_vict && skill->miss_vict[0] != '\0' )
    fprintf( fpout, "Missvict     %s~\n", skill->miss_vict );
  if( skill->miss_room && skill->miss_room[0] != '\0' )
    fprintf( fpout, "Missroom     %s~\n", skill->miss_room );

  if( skill->die_char && skill->die_char[0] != '\0' )
    fprintf( fpout, "Diechar      %s~\n", skill->die_char );
  if( skill->die_vict && skill->die_vict[0] != '\0' )
    fprintf( fpout, "Dievict      %s~\n", skill->die_vict );
  if( skill->die_room && skill->die_room[0] != '\0' )
    fprintf( fpout, "Dieroom      %s~\n", skill->die_room );

  if( skill->imm_char && skill->imm_char[0] != '\0' )
    fprintf( fpout, "Immchar      %s~\n", skill->imm_char );
  if( skill->imm_vict && skill->imm_vict[0] != '\0' )
    fprintf( fpout, "Immvict      %s~\n", skill->imm_vict );
  if( skill->imm_room && skill->imm_room[0] != '\0' )
    fprintf( fpout, "Immroom      %s~\n", skill->imm_room );

  if( skill->dice && skill->dice[0] != '\0' )
    fprintf( fpout, "Dice         %s~\n", skill->dice );
  if( skill->value )
    fprintf( fpout, "Value        %d\n", skill->value );
  if( skill->difficulty )
    fprintf( fpout, "Difficulty   %d\n", skill->difficulty );
  if( skill->participants )
    fprintf( fpout, "Participants %d\n", skill->participants );
  if( skill->components && skill->components[0] != '\0' )
    fprintf( fpout, "Components   %s~\n", skill->components );
  if( skill->teachers && skill->teachers[0] != '\0' )
    fprintf( fpout, "Teachers     %s~\n", skill->teachers );
  for( aff = skill->affects; aff; aff = aff->next )
  {
    fprintf( fpout, "Affect       '%s' %d ", aff->duration, aff->location );
    modifier = atoi( aff->modifier );
    if( ( aff->location == APPLY_WEAPONSPELL
          || aff->location == APPLY_WEARSPELL
          || aff->location == APPLY_REMOVESPELL
          || aff->location == APPLY_STRIPSN || aff->location == APPLY_RECURRINGSPELL ) && IS_VALID_SN( modifier ) )
      fprintf( fpout, "'%d' ", skill_table[modifier]->slot );
    else
      fprintf( fpout, "'%s' ", aff->modifier );
    fprintf( fpout, "%d\n", aff->bitvector );
  }

  if( skill->type != SKILL_HERB )
  {
    int y;
    long double min = 1000;
    for( y = 0; y < MAX_CLASS; y++ )
      if( skill->skill_level[y] < min )
        min = skill->skill_level[y];

    fprintf( fpout, "Minlevel     %0.Lf\n", min );

    min = 1000;
    for( y = 0; y < MAX_RACE; y++ )
      if( skill->race_level[y] < min )
        min = skill->race_level[y];

  }
  fprintf( fpout, "End\n\n" );
}


/*
 * Save the skill table to disk
 */
void save_skill_table(  )
{
  int x;
  FILE *fpout;

  if( ( fpout = fopen( SKILL_FILE, "w" ) ) == NULL )
  {
    perror( SKILL_FILE );
    bug( "Cannot open skills.dat for writting", 0 );
    return;
  }

  for( x = 0; x < top_sn; x++ )
  {
    if( !skill_table[x]->name || skill_table[x]->name[0] == '\0' )
      break;
    fprintf( fpout, "#SKILL\n" );
    fwrite_skill( fpout, skill_table[x] );
  }
  fprintf( fpout, "#END\n" );
  fclose( fpout );
}

/*
 * Save the herb table to disk
 */
void save_herb_table(  )
{
  int x;
  FILE *fpout;

  if( ( fpout = fopen( HERB_FILE, "w" ) ) == NULL )
  {
    bug( "Cannot open herbs.dat for writting", 0 );
    perror( HERB_FILE );
    return;
  }

  for( x = 0; x < top_herb; x++ )
  {
    if( !herb_table[x]->name || herb_table[x]->name[0] == '\0' )
      break;
    fprintf( fpout, "#HERB\n" );
    fwrite_skill( fpout, herb_table[x] );
  }
  fprintf( fpout, "#END\n" );
  fclose( fpout );
}

/*
 * Save the socials to disk
 */
void save_socials(  )
{
  FILE *fpout;
  SOCIALTYPE *social;
  int x;

  if( ( fpout = fopen( SOCIAL_FILE, "w" ) ) == NULL )
  {
    bug( "Cannot open socials.dat for writting", 0 );
    perror( SOCIAL_FILE );
    return;
  }

  for( x = 0; x < 27; x++ )
  {
    for( social = social_index[x]; social; social = social->next )
    {
      if( !social->name || social->name[0] == '\0' )
      {
        bug( "Save_socials: blank social in hash bucket %d", x );
        continue;
      }
      fprintf( fpout, "#SOCIAL\n" );
      fprintf( fpout, "Name        %s~\n", social->name );
      if( social->char_no_arg )
        fprintf( fpout, "CharNoArg   %s~\n", social->char_no_arg );
      else
        bug( "Save_socials: NULL char_no_arg in hash bucket %d", x );
      if( social->others_no_arg )
        fprintf( fpout, "OthersNoArg %s~\n", social->others_no_arg );
      if( social->char_found )
        fprintf( fpout, "CharFound   %s~\n", social->char_found );
      if( social->others_found )
        fprintf( fpout, "OthersFound %s~\n", social->others_found );
      if( social->vict_found )
        fprintf( fpout, "VictFound   %s~\n", social->vict_found );
      if( social->char_auto )
        fprintf( fpout, "CharAuto    %s~\n", social->char_auto );
      if( social->others_auto )
        fprintf( fpout, "OthersAuto  %s~\n", social->others_auto );
      fprintf( fpout, "End\n\n" );
    }
  }
  fprintf( fpout, "#END\n" );
  fclose( fpout );
}

int get_skill( char *skilltype )
{
  if( !str_cmp( skilltype, "Race" ) )
    return SKILL_RACIAL;
  if( !str_cmp( skilltype, "Spell" ) )
    return SKILL_SPELL;
  if( !str_cmp( skilltype, "Skill" ) )
    return SKILL_SKILL;
  if( !str_cmp( skilltype, "Ability" ) )
    return SKILL_ABILITY;
  if( !str_cmp( skilltype, "Weapon" ) )
    return SKILL_WEAPON;
  if( !str_cmp( skilltype, "Tongue" ) )
    return SKILL_TONGUE;
  if( !str_cmp( skilltype, "Herb" ) )
    return SKILL_HERB;
  return SKILL_UNKNOWN;
}

/*
 * Save the commands to disk
 * Added flags Aug 25, 1997 --Shaddai
 */
void save_commands(  )
{
  FILE *fpout;
  CMDTYPE *command;
  int x;

  if( ( fpout = fopen( COMMAND_FILE, "w" ) ) == NULL )
  {
    bug( "Cannot open commands.dat for writing", 0 );
    perror( COMMAND_FILE );
    return;
  }

  for( x = 0; x < 126; x++ )
  {
    for( command = command_hash[x]; command; command = command->next )
    {
      if( !command->name || command->name[0] == '\0' )
      {
        bug( "Save_commands: blank command in hash bucket %d", x );
        continue;
      }
      fprintf( fpout, "#COMMAND\n" );
      fprintf( fpout, "Name        %s~\n", command->name );
      fprintf( fpout, "Code        %s\n", skill_name( command->do_fun ) );
/* Oops I think this may be a bad thing so I changed it -- Shaddai */
      if( command->position < 100 )
        fprintf( fpout, "Position    %d\n", command->position + 100 );
      else
        fprintf( fpout, "Position    %d\n", command->position );
      fprintf( fpout, "Level       %d\n", command->level );
      fprintf( fpout, "Log         %d\n", command->log );
      if( command->flags )
        fprintf( fpout, "Flags       %d\n", command->flags );
      fprintf( fpout, "End\n\n" );
    }
  }
  fprintf( fpout, "#END\n" );
  fclose( fpout );
}

SKILLTYPE *fread_skill( FILE * fp )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;
  bool got_info = FALSE;
  SKILLTYPE *skill;
  int x;

  CREATE( skill, SKILLTYPE, 1 );
  skill->slot = 0;
  skill->min_mana = 0;
  skill->focus = 0;
  skill->canCharge = FALSE;
  for( x = 0; x < MAX_CLASS; x++ )
  {
    skill->min_level[x] = 66;
    skill->skill_level[x] = 0;  /* set to 66 to disable imms getting all skills */
    skill->skill_adept[x] = 95;
  }
  for( x = 0; x < MAX_RACE; x++ )
  {
    skill->race_level[x] = 0; /* set to 66 to disable imms getting all skills */
    skill->race_adept[x] = 95;
  }
  skill->guild = -1;
  skill->target = 0;
  skill->skill_fun = NULL;
  skill->spell_fun = NULL;
  skill->spell_sector = 0;


  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'A':
        if( !str_cmp( word, "Affect" ) )
        {
          SMAUG_AFF *aff;

          CREATE( aff, SMAUG_AFF, 1 );
          aff->duration = str_dup( fread_word( fp ) );
          aff->location = fread_number( fp );
          aff->modifier = str_dup( fread_word( fp ) );
          aff->bitvector = fread_number( fp );

          if( !got_info )
          {
            for( x = 0; x < 32; x++ )
            {
              if( IS_SET( aff->bitvector, 1 << x ) )
              {
                aff->bitvector = x;
                break;
              }
            }
            if( x == 32 )
              aff->bitvector = -1;
          }
          aff->next = skill->affects;
          skill->affects = aff;
          fMatch = TRUE;
          break;
        }
        break;

      case 'C':
        KEY( "CanCharge", skill->canCharge, fread_number( fp ) );
        if( !str_cmp( word, "Class" ) )
        {
          int class = fread_number( fp );

          skill->skill_level[class] = fread_number_ld( fp );
          skill->skill_adept[class] = fread_number( fp );
          fMatch = TRUE;
          break;
        }
        if( !str_cmp( word, "Code" ) )
        {
          SPELL_FUN *spellfun;
          DO_FUN *dofun;
          char *w = fread_word( fp );

          fMatch = TRUE;
          if( ( spellfun = spell_function( w ) ) != spell_notfound )
          {
            skill->spell_fun = spellfun;
            skill->skill_fun = NULL;
          }
          else if( ( dofun = skill_function( w ) ) != skill_notfound )
          {
            skill->skill_fun = dofun;
            skill->spell_fun = NULL;
          }
          else
          {
            bug( "fread_skill: unknown skill/spell %s", w );
            skill->spell_fun = spell_null;
          }
          break;
        }
        KEY( "Code", skill->spell_fun, spell_function( fread_word( fp ) ) );
        KEY( "Components", skill->components, fread_string_nohash( fp ) );
        break;

      case 'D':
        KEY( "Dammsg", skill->noun_damage, fread_string_nohash( fp ) );
        KEY( "Dice", skill->dice, fread_string_nohash( fp ) );
        KEY( "Diechar", skill->die_char, fread_string_nohash( fp ) );
        KEY( "Dieroom", skill->die_room, fread_string_nohash( fp ) );
        KEY( "Dievict", skill->die_vict, fread_string_nohash( fp ) );
        KEY( "Difficulty", skill->difficulty, fread_number( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          if( skill->saves != 0 && SPELL_SAVE( skill ) == SE_NONE )
          {
            bug( "fread_skill(%s):  Has saving throw (%d) with no saving effect.", skill->name, skill->saves );
            SET_SSAV( skill, SE_NEGATE );
          }
          return skill;
        }
        break;

      case 'F':
        KEY( "Focus", skill->focus, fread_number( fp ) );
        if( !str_cmp( word, "Flags" ) )
        {
          skill->flags = fread_number( fp );
          /*
           * convert to new style     -Thoric
           */
          if( !got_info )
          {
            skill->info = skill->flags & ( BV11 - 1 );
            if( IS_SET( skill->flags, OLD_SF_SAVE_NEGATES ) )
            {
              if( IS_SET( skill->flags, OLD_SF_SAVE_HALF_DAMAGE ) )
              {
                SET_SSAV( skill, SE_QUARTERDAM );
                REMOVE_BIT( skill->flags, OLD_SF_SAVE_HALF_DAMAGE );
              }
              else
                SET_SSAV( skill, SE_NEGATE );
              REMOVE_BIT( skill->flags, OLD_SF_SAVE_NEGATES );
            }
            else if( IS_SET( skill->flags, OLD_SF_SAVE_HALF_DAMAGE ) )
            {
              SET_SSAV( skill, SE_HALFDAM );
              REMOVE_BIT( skill->flags, OLD_SF_SAVE_HALF_DAMAGE );
            }
            skill->flags >>= 11;
          }
          fMatch = TRUE;
          break;
        }
        break;

      case 'G':
        KEY( "Guild", skill->guild, fread_number( fp ) );
        break;

      case 'H':
        KEY( "Hitchar", skill->hit_char, fread_string_nohash( fp ) );
        KEY( "Hitdest", skill->hit_dest, fread_string_nohash( fp ) );
        KEY( "Hitroom", skill->hit_room, fread_string_nohash( fp ) );
        KEY( "Hitvict", skill->hit_vict, fread_string_nohash( fp ) );
        break;

      case 'I':
        KEY( "Immchar", skill->imm_char, fread_string_nohash( fp ) );
        KEY( "Immroom", skill->imm_room, fread_string_nohash( fp ) );
        KEY( "Immvict", skill->imm_vict, fread_string_nohash( fp ) );
        if( !str_cmp( word, "Info" ) )
        {
          skill->info = fread_number( fp );
          got_info = TRUE;
          fMatch = TRUE;
          break;
        }
        break;

      case 'M':
        KEY( "Mana", skill->min_mana, fread_number( fp ) );
        if( !str_cmp( word, "Minlevel" ) )
        {
          fread_to_eol( fp );
          fMatch = TRUE;
          break;
        }
        /*
         * KEY( "Minpos", skill->minimum_position, fread_number( fp ) ); 
         */
        /*
         *
         */
        if( !str_cmp( word, "Minpos" ) )
        {
          fMatch = TRUE;
          skill->minimum_position = fread_number( fp );
          if( skill->minimum_position < 100 )
          {
            switch ( skill->minimum_position )
            {
              default:
              case 0:
              case 1:
              case 2:
              case 3:
              case 4:
                break;
              case 5:
                skill->minimum_position = 6;
                break;
              case 6:
                skill->minimum_position = 8;
                break;
              case 7:
                skill->minimum_position = 9;
                break;
              case 8:
                skill->minimum_position = 12;
                break;
              case 9:
                skill->minimum_position = 13;
                break;
              case 10:
                skill->minimum_position = 14;
                break;
              case 11:
                skill->minimum_position = 15;
                break;
            }
          }
          else
            skill->minimum_position -= 100;
          break;
        }

        KEY( "Misschar", skill->miss_char, fread_string_nohash( fp ) );
        KEY( "Missroom", skill->miss_room, fread_string_nohash( fp ) );
        KEY( "Missvict", skill->miss_vict, fread_string_nohash( fp ) );
        break;

      case 'N':
        KEY( "Name", skill->name, fread_string_nohash( fp ) );
        break;

      case 'P':
        KEY( "Participants", skill->participants, fread_number( fp ) );
        break;

      case 'R':
        KEY( "Range", skill->range, fread_number( fp ) );
        KEY( "Rounds", skill->beats, fread_number( fp ) );
        if( !str_cmp( word, "Race" ) )
        {
          int race = fread_number( fp );

          skill->race_level[race] = fread_number( fp );
          skill->race_adept[race] = fread_number( fp );
          fMatch = TRUE;
          break;
        }
        break;

      case 'S':
        KEY( "Saves", skill->saves, fread_number( fp ) );
        KEY( "Slot", skill->slot, fread_number( fp ) );
        KEY( "Ssector", skill->spell_sector, fread_number( fp ) );
        break;

      case 'T':
        KEY( "Target", skill->target, fread_number( fp ) );
        KEY( "Teachers", skill->teachers, fread_string_nohash( fp ) );
        KEY( "Type", skill->type, get_skill( fread_word( fp ) ) );
        break;

      case 'V':
        KEY( "Value", skill->value, fread_number( fp ) );
        break;

      case 'W':
        KEY( "Wearoff", skill->msg_off, fread_string_nohash( fp ) );
        break;
    }

    if( !fMatch )
    {
      sprintf( buf, "Fread_skill: no match: %s", word );
      bug( buf, 0 );
    }
  }
}

void load_skill_table(  )
{
  FILE *fp;

  if( ( fp = fopen( SKILL_FILE, "r" ) ) != NULL )
  {
    top_sn = 0;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_skill_table: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "SKILL" ) )
      {
        if( top_sn >= MAX_SKILL )
        {
          bug( "load_skill_table: more skills than MAX_SKILL %d", MAX_SKILL );
          fclose( fp );
          return;
        }
        skill_table[top_sn++] = fread_skill( fp );
        continue;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        bug( "Load_skill_table: bad section.", 0 );
        continue;
      }
    }
    fclose( fp );
  }
  else
  {
    perror( SKILL_FILE );
    bug( "Cannot open skills.dat", 0 );
    exit( 0 );
  }
}


void load_herb_table(  )
{
  FILE *fp;

  if( ( fp = fopen( HERB_FILE, "r" ) ) != NULL )
  {
    top_herb = 0;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_herb_table: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "HERB" ) )
      {
        if( top_herb >= MAX_HERB )
        {
          bug( "load_herb_table: more herbs than MAX_HERB %d", MAX_HERB );
          fclose( fp );
          return;
        }
        herb_table[top_herb++] = fread_skill( fp );
        if( herb_table[top_herb - 1]->slot == 0 )
          herb_table[top_herb - 1]->slot = top_herb - 1;
        continue;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        bug( "Load_herb_table: bad section.", 0 );
        continue;
      }
    }
    fclose( fp );
  }
  else
  {
    bug( "Cannot open herbs.dat", 0 );
    exit( 0 );
  }
}

void fread_social( FILE * fp )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;
  SOCIALTYPE *social;

  CREATE( social, SOCIALTYPE, 1 );

  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'C':
        KEY( "CharNoArg", social->char_no_arg, fread_string_nohash( fp ) );
        KEY( "CharFound", social->char_found, fread_string_nohash( fp ) );
        KEY( "CharAuto", social->char_auto, fread_string_nohash( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          if( !social->name )
          {
            bug( "Fread_social: Name not found", 0 );
            free_social( social );
            return;
          }
          if( !social->char_no_arg )
          {
            bug( "Fread_social: CharNoArg not found", 0 );
            free_social( social );
            return;
          }
          add_social( social );
          return;
        }
        break;

      case 'N':
        KEY( "Name", social->name, fread_string_nohash( fp ) );
        break;

      case 'O':
        KEY( "OthersNoArg", social->others_no_arg, fread_string_nohash( fp ) );
        KEY( "OthersFound", social->others_found, fread_string_nohash( fp ) );
        KEY( "OthersAuto", social->others_auto, fread_string_nohash( fp ) );
        break;

      case 'V':
        KEY( "VictFound", social->vict_found, fread_string_nohash( fp ) );
        break;
    }

    if( !fMatch )
    {
      sprintf( buf, "Fread_social: no match: %s", word );
      bug( buf, 0 );
    }
  }
}

void load_socials(  )
{
  FILE *fp;

  if( ( fp = fopen( SOCIAL_FILE, "r" ) ) != NULL )
  {
    top_sn = 0;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_socials: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "SOCIAL" ) )
      {
        fread_social( fp );
        continue;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        bug( "Load_socials: bad section.", 0 );
        continue;
      }
    }
    fclose( fp );
  }
  else
  {
    bug( "Cannot open socials.dat", 0 );
    exit( 0 );
  }
}

/*
 *  Added the flags Aug 25, 1997 --Shaddai
 */

void fread_command( FILE * fp )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;
  CMDTYPE *command;

  CREATE( command, CMDTYPE, 1 );
  command->lag_count = 0; /* can't have caused lag yet... FB */
  command->flags = 0; /* Default to no flags set */

  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'C':
        KEY( "Code", command->do_fun, skill_function( fread_word( fp ) ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          if( !command->name )
          {
            bug( "Fread_command: Name not found", 0 );
            free_command( command );
            return;
          }
          if( !command->do_fun )
          {
            bug( "Fread_command: Function not found", 0 );
            free_command( command );
            return;
          }
          add_command( command );
          return;
        }
        break;

      case 'F':
        KEY( "Flags", command->flags, fread_number( fp ) );
        break;

      case 'L':
        KEY( "Level", command->level, fread_number( fp ) );
        KEY( "Log", command->log, fread_number( fp ) );
        break;

      case 'N':
        KEY( "Name", command->name, fread_string_nohash( fp ) );
        break;

      case 'P':
        /*
         * KEY( "Position", command->position,  fread_number(fp) ); 
         */
        if( !str_cmp( word, "Position" ) )
        {
          fMatch = TRUE;
          command->position = fread_number( fp );
          if( command->position < 100 )
          {
            switch ( command->position )
            {
              default:
              case 0:
              case 1:
              case 2:
              case 3:
              case 4:
                break;
              case 5:
                command->position = 6;
                break;
              case 6:
                command->position = 8;
                break;
              case 7:
                command->position = 9;
                break;
              case 8:
                command->position = 12;
                break;
              case 9:
                command->position = 13;
                break;
              case 10:
                command->position = 14;
                break;
              case 11:
                command->position = 15;
                break;
            }
          }
          else
            command->position -= 100;
          break;
        }
        break;
    }

    if( !fMatch )
    {
      sprintf( buf, "Fread_command: no match: %s", word );
      bug( buf, 0 );
    }
  }
}

void load_commands(  )
{
  FILE *fp;

  if( ( fp = fopen( COMMAND_FILE, "r" ) ) != NULL )
  {
    top_sn = 0;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_commands: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "COMMAND" ) )
      {
        fread_command( fp );
        continue;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        bug( "Load_commands: bad section.", 0 );
        continue;
      }
    }
    fclose( fp );
  }
  else
  {
    bug( "Cannot open commands.dat", 0 );
    exit( 0 );
  }

}

void save_classes(  )
{
  int x;

  for( x = 0; x < MAX_PC_CLASS; x++ )
    write_class_file( x );
}

/*
 * Tongues / Languages loading/saving functions			-Altrag
 */
void fread_cnv( FILE * fp, LCNV_DATA ** first_cnv, LCNV_DATA ** last_cnv )
{
  LCNV_DATA *cnv;
  char letter;

  for( ;; )
  {
    letter = fread_letter( fp );
    if( letter == '~' || letter == EOF )
      break;
    ungetc( letter, fp );
    CREATE( cnv, LCNV_DATA, 1 );

    cnv->old = str_dup( fread_word( fp ) );
    cnv->olen = strlen( cnv->old );
    cnv->new = str_dup( fread_word( fp ) );
    cnv->nlen = strlen( cnv->new );
    fread_to_eol( fp );
    LINK( cnv, *first_cnv, *last_cnv, next, prev );
  }
}

void load_tongues(  )
{
  FILE *fp;
  LANG_DATA *lng;
  char *word;
  char letter;

  if( !( fp = fopen( TONGUE_FILE, "r" ) ) )
  {
    perror( "Load_tongues" );
    return;
  }
  for( ;; )
  {
    letter = fread_letter( fp );
    if( letter == EOF )
      return;
    else if( letter == '*' )
    {
      fread_to_eol( fp );
      continue;
    }
    else if( letter != '#' )
    {
      bug( "Letter '%c' not #.", letter );
      exit( 0 );
    }
    word = fread_word( fp );
    if( !str_cmp( word, "end" ) )
      return;
    fread_to_eol( fp );
    CREATE( lng, LANG_DATA, 1 );
    lng->name = STRALLOC( word );
    fread_cnv( fp, &lng->first_precnv, &lng->last_precnv );
    lng->alphabet = fread_string( fp );
    fread_cnv( fp, &lng->first_cnv, &lng->last_cnv );
    fread_to_eol( fp );
    LINK( lng, first_lang, last_lang, next, prev );
  }
  return;
}

void fwrite_langs( void )
{
  FILE *fp;
  LANG_DATA *lng;
  LCNV_DATA *cnv;

  if( !( fp = fopen( TONGUE_FILE, "w" ) ) )
  {
    perror( "fwrite_langs" );
    return;
  }
  for( lng = first_lang; lng; lng = lng->next )
  {
    fprintf( fp, "#%s\n", lng->name );
    for( cnv = lng->first_precnv; cnv; cnv = cnv->next )
      fprintf( fp, "'%s' '%s'\n", cnv->old, cnv->new );
    fprintf( fp, "~\n%s~\n", lng->alphabet );
    for( cnv = lng->first_cnv; cnv; cnv = cnv->next )
      fprintf( fp, "'%s' '%s'\n", cnv->old, cnv->new );
    fprintf( fp, "\n" );
  }
  fprintf( fp, "#end\n\n" );
  fclose( fp );
  return;
}