/*******************************************************************************
 *         _               | File Name:   format_string.c
 *        / \      _-'     | Description: This snippet allows you to incoorperate
 *      _/|  \-''- _ /     |              the format string command on your mud.
 * __-' |          \       |              format_str_len will format any string
 *     /              \    |              to a length excluding color codes.
 *     /       "o.  |o |   |              It can also center/left/right or ignore
 *     |            \ ;    |              alignment.
 *                   ',    |
 *        \_         __\   | (c) 2000-2001 TAKA
 *          ''-_    \.//   | (c) 2000-2001 The GhostMud Project Team
 *            / '-____'    |
 *           /             | You may use this code under GNU license restriction
 *         _'  The Wolf    | 1) This header block remains in the code.
 *       _-'   strikes!    | 2) You email me at a_ghost_dancer@excite.com
 *_________________________|    letting me know you are using this code
 *                              please incluse your name, your mud name
 * All rights reserved          your mud address, your email and this file
 * GhostMud is copyrighted      name.
 * by TAKA                   3) In your help files mention me where appropriate
 *                              IE: help snippets.
 *                           4) Your use of this snippet must not violate any
 *                              ROM, MERC or DIKU license.
 *********************************************************************************/



/*
 * If there are any problems with implimentation, please mail me and I will
 * try to help. If there is a general problem in the code, please note the
 * list so those that are using it can fix it. As far as I know, when
 * released, all code is bug free, but I make no claims or promises that
 * this will not fry your system, etc, etc. And as with most, i take no
 * responsability if this breaks anything. Use at your own risk. My main
 * concern is that the snipets work and that they don't conflict with anything.
 * If anyone has any general tips for me, again, feel free to mail me.
 *
 * Permission is granted to post this to other list, put it on a web site,
 * etc, etc, as long as I am given full credit for it.
 *
 * -Taka
 * <a_ghost_dancer@excite.com>
 *
 * GhostMUD has a user list at GhostMUD-subscribe@yahoogroups.com
 * I monitor this list and answer questions there so many can benifit from
 * the answers.
 *
 * A web page with my snippets and code releases is being set up at
 * http://ghostmud.betterbox.net/code/
 * http://ghostmud.betterbox.net/snippets/
 * Both dos and linux versions of GhostMUD will appear on the code page
 * very soon.
 *
 * Anyone using my snippets or wishing to keep up with my latest work can
 * find this information there.
 *
 *
 	char *FmtString
 	char buf[MSL];

 	FmtString = format_str_len(whotitle, 14, ALIGN_CENTER);
    strcpy (buf, FmtString);

    printf_to_char(ch, "this is your string now: %s", buf);

 * NOTE if you do not have printf_to_char then get it from Erwin it is
 * very handy.
 *
 */



add this to MERC.H
char * format_str_len(char * string, int length, int align);

/*
 * format string alignment functions
 */
#define ALIGN_NONE			0
#define ALIGN_LEFT			1
#define ALIGN_RIGHT			2
#define ALIGN_CENTER		3

#define MSL MAX_STRING_LENGTH  /* You may already have MSL defined but id not here it is */



add this to ACT_NEWC.C or ACT_INFO.C
/*
 * format a string to a length
 * by TAKA of GhostMUD project
 */
char * format_str_len(char * string, int length, int align)
{
    char buf[MSL];
	char buf2[MSL];
    char *new_string;
    char *count_string;
    char temp;
    int count = 0, nCount = 0;
    int pos = 0;

    new_string = buf;
	count_string = buf2;
	strcpy(buf2, string);

	/* get count for alignment */
	while( *count_string && nCount != length )
    {
        temp = *count_string++;

		if (temp == '{' )
        {
			temp = *count_string++;
			if (temp == '{')
                nCount++;
            continue;
        }
        nCount++;
    }

	/* force alignment of text to the right */
	if(align == ALIGN_RIGHT)
	{
		count = (length - ++nCount);
		while(nCount++ <= length)
		{
	        buf[pos++] = ' ';
		}
	}

	/* force alignment of text to the center */
	if(align == ALIGN_CENTER)
	{
		nCount = (length - nCount) / 2;
		count = nCount;
		while(nCount-- > 0)
		{
	        buf[pos++] = ' ';
		}
	}

	/* add to buffer */
	while( *string && count != length )
    {
        temp = *string++;
        buf[pos++] = temp;

		if (temp == '{' )
        {
            buf[pos] = *string++;

			if (buf[pos] == '{')
                count++;

			pos++;
            continue;
        }
        count++;
    }

	/* pad remaining space with blanks */
	while (count++ < length)
        buf[pos++] = ' ';

	buf[pos] = '\0';

	return (new_string);
}
