#include <stdio.h>

/*
 * Attempt to open a file with the given access mode.
 * Return its file descriptor, or if the open fails, print an error
 * message and exit.
 */
FILE *efopen(name, mode)
char *name, *mode;
{
	FILE *fp, *fopen();
	char *msg;

	if ((fp = fopen(name, mode)) != NULL)
		return fp;

	fprintf(stderr, "Cannot %s: '%s'\n",
		strcmp(mode, "w") ? "open" : "create", name);
	exit(1);
}


/*
 * Manipulate file extensions.
 * 'name' must be large enough to hold any possible filename.
 * If 'stripp' is nonzero, any old extension will be removed.  Then, if the
 * file does not already have an extension, 'extension' is appended to the
 * filename.
 */
char *fext(name, extension, stripp)
char *name, *extension;
int stripp;
{
	char *s, *beg;

						/* go past pathname */
	for (beg = name + strlen(name) - 1; beg > name; --beg)
		if (stpchr("/\\", *beg))
		{
			++beg;
			break;
		}

	if (stripp)				/* strip extension */
	{
		for (s = beg; *s && *s != '.'; ++s)
			;
		*s = '\0';
	}

	for (s = beg; *s != '.'; ++s)		/* add extension */
		if (!*s)
		{
			strcat(beg, extension);
			break;
		}
	return name;
}
