#include /* * 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; }