protected void genBodyParts(MOB mob, Race E, int showNumber, int showFlag)
		throws IOException
	{
		if((showFlag>0)&&(showFlag!=showNumber))
			return;
		final StringBuffer parts=new StringBuffer("");
		for(int i=0;i<Race.BODYPARTSTR.length;i++)
		{
			if(E.bodyMask()[i]!=0)
				parts.append(Race.BODYPARTSTR[i].toLowerCase()+"("+E.bodyMask()[i]+") ");
		}
		mob.tell(L("@x1. Body Parts: @x2.",""+showNumber,parts.toString()));
		if((showFlag!=showNumber)&&(showFlag>-999))
			return;
		String newName=mob.session().prompt(L("Enter a body part\n\r:"),"");
		if(newName.length()>0)
		{
			Integer partNum=Race.BODYPARTHASH.get(newName.toUpperCase().trim());
			if(partNum==null)
			{
				final StringBuffer str=new StringBuffer(L("That body part is invalid.  Valid parts include: "));
				for (final String element : Race.BODYPARTSTR)
					str.append(element+", ");
				mob.tell(str.toString().substring(0,str.length()-2)+".");
			}
			else
			{
				newName=mob.session().prompt(L("Enter new number (@x1), 0=none\n\r:",""+E.bodyMask()[partNum.intValue()]),""+E.bodyMask()[partNum.intValue()]);
				if(newName.length()>0)
					E.bodyMask()[partNum.intValue()]=CMath.s_int(newName);
				else
					mob.tell(L("(no change)"));
			}
		}
		else
			mob.tell(L("(no change)"));
	}