static void set_filenm(t_filenm *fnm, const char *name, gmx_bool bCanNotOverride, gmx_bool bReadNode) { /* Set the default filename, extension and option for those fields that * are not already set. An extension is added if not present, if fn = NULL * or empty, the default filename is given. */ char buf[256]; int i, len, extlen; if ((fnm->flag & ffREAD) && !bReadNode) { return; } if ((fnm->ftp < 0) || (fnm->ftp >= efNR)) { gmx_fatal(FARGS, "file type out of range (%d)", fnm->ftp); } if (name) { strcpy(buf, name); } if ((fnm->flag & ffREAD) && name && gmx_fexist(name)) { /* check if filename ends in .gz or .Z, if so remove that: */ len = strlen(name); for (i = 0; i < NZEXT; i++) { extlen = strlen(z_ext[i]); if (len > extlen) { if (gmx_strcasecmp(name+len-extlen, z_ext[i]) == 0) { buf[len-extlen] = '\0'; break; } } } } if (deffile[fnm->ftp].ntps) { set_grpfnm(fnm, name ? buf : NULL, bCanNotOverride); } else { if ((name == NULL) || !(bCanNotOverride || (default_file_name == NULL))) { const char *defnm = ftp2defnm(fnm->ftp); strcpy(buf, defnm); } set_extension(buf, fnm->ftp); add_filenm(fnm, buf); } }
static void set_grpfnm(t_filenm *fnm, const char *name, const char *deffnm) { char buf[256], buf2[256]; int i, type; gmx_bool bValidExt; int nopts; const int *ftps; nopts = deffile[fnm->ftp].ntps; ftps = deffile[fnm->ftp].tps; if ((nopts == 0) || (ftps == NULL)) { gmx_fatal(FARGS, "nopts == 0 || ftps == NULL"); } bValidExt = FALSE; if (name && deffnm == NULL) { strcpy(buf, name); /* First check whether we have a valid filename already */ type = fn2ftp(name); if ((fnm->flag & ffREAD) && (fnm->ftp == efTRX)) { /*if file exist don't add an extension for trajectory reading*/ bValidExt = gmx_fexist(name); } for (i = 0; (i < nopts) && !bValidExt; i++) { if (type == ftps[i]) { bValidExt = TRUE; } } } else if (deffnm != NULL) { strcpy(buf, deffnm); } else { /* No name given, set the default name */ strcpy(buf, ftp2defnm(fnm->ftp)); } if (!bValidExt && (fnm->flag & ffREAD)) { /* for input-files only: search for filenames in the directory */ for (i = 0; (i < nopts) && !bValidExt; i++) { type = ftps[i]; strcpy(buf2, buf); set_extension(buf2, type); if (gmx_fexist(buf2)) { bValidExt = TRUE; strcpy(buf, buf2); } } } if (!bValidExt) { /* Use the first extension type */ set_extension(buf, ftps[0]); } add_filenm(fnm, buf); }