/*
 * various utility routines
 *
 * Copyright (c) 1997 David L Parsons 
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by David L Parsons (orc@pell.chi.il.us).  My name may not be used
 * to endorse or promote products derived from this software without
 * specific prior written permission.  THIS SOFTWARE IS PROVIDED
 * ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

static const char rcsid[] = "$Id: s.util.c 1.3 98/04/22 03:36:51-00:00 orc $";

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>

#include "util.h"

/*
 * freemenu() erases a menu list
 */
void
freemenu(char **menu, int nrmenu)
{
    if (menu == 0)
	return;
    while (nrmenu-- > 0) {
	free(menu[(2*nrmenu)]);
	free(menu[(2*nrmenu)+1]);
    }
    free(menu);
} /* freemenu */


/*
 * addtomenu() adds a key/ident pair to a menu, reallocating as we go
 */
int
addtomenu(char*** menu, int nrmenu, char *key, char *value)
{
    char **tmp;

    tmp = *menu;
    if (tmp == 0)
	tmp = malloc(2 * sizeof(char*));
    else
	tmp = realloc(tmp, (1+nrmenu) * 2 * sizeof(char*));

    if (tmp == 0) {
	freemenu(*menu, nrmenu);
	*menu = 0;
	return 0;
    }
    tmp[(2*nrmenu)]   = strdup(key);
    tmp[(2*nrmenu)+1] = strdup(value);
    *menu = tmp;
    return ++nrmenu;
} /* addtomenu */
