Ejemplo n.º 1
0
char *gapp_exe_path(GraceApp *gapp, const char *fn)
{
    static char buf[GR_MAXPATHLEN], *epath;
    char *cp;
    
    if (fn == NULL) {
        return NULL;
    } else {
        cp = strchr(fn, ' ');
        if (cp == NULL) {
            epath = grace_path(gapp->grace, fn);
            strcpy(buf, exe_path_translate(epath));
            xfree(epath);
            return buf;
        } else {
            strcpy(buf, fn);
            buf[cp - fn] = '\0';
            epath = grace_path(gapp->grace, buf);
            strcpy(buf, epath);
            xfree(epath);
            strcat(buf, " ");
            strcat(buf, cp);
            return exe_path_translate(buf);
        }
    }
}
Ejemplo n.º 2
0
/* open a file for read */
FILE *gapp_openr(GraceApp *gapp, const char *fn, int src)
{
    struct stat statb;
    char *tfn;
    char buf[GR_MAXPATHLEN + 50];
    FILE *fp;

    if (!fn || !fn[0]) {
        errmsg("No file name given");
	return NULL;
    }
    switch (src) {
    case SOURCE_DISK:
        tfn = grace_path(gapp->grace, fn);
	if (strcmp(tfn, "-") == 0 || strcmp(tfn, "stdin") == 0) {
            xfree(tfn);
            return stdin;
	} else if (stat(tfn, &statb)) {
            sprintf(buf, "Can't stat file %s", tfn);
            errmsg(buf);
            xfree(tfn);
	    return NULL;
	/* check to make sure this is a file and not a dir */
	} else if (!S_ISREG(statb.st_mode)) {
            sprintf(buf, "%s is not a regular file", tfn);
            errmsg(buf);
            xfree(tfn);
	    return NULL;
        } else {
            fp = filter_read(gapp, tfn);
            xfree(tfn);
            return fp;
	}
        break;
    case SOURCE_PIPE:
        tfn = gapp_exe_path(gapp, fn);
	fp = popen(tfn, "r");
        xfree(tfn);
        return fp;
	break;
    default:
        errmsg("Wrong call to gapp_openr()");
	return NULL;
    }
}
Ejemplo n.º 3
0
GProject *load_xgr_project(GraceApp *gapp, const char *fn)
{
    GrFILE *grf;
    GProject *gp;
    char *epath;
    
    epath = grace_path(gapp->grace, fn);
    grf = grfile_openr(epath);
    xfree(epath);
    if (grf == NULL) {
        return NULL;
    }
    
    gp = gproject_load(gapp->grace, grf, AMEM_MODEL_LIBUNDO);

    grfile_free(grf);
    
    return gp;
}   
Ejemplo n.º 4
0
int set_workingdir(GraceApp *gapp, const char *wd)
{
    char *epath;
    int retval;
    
    epath = grace_path(gapp->grace, wd);
    
    if (chdir(epath) >= 0) {
        gapp->rt->workingdir = copy_string(gapp->rt->workingdir, epath);
        if (gapp->rt->workingdir[strlen(gapp->rt->workingdir) - 1] != '/') {
            gapp->rt->workingdir = concat_strings(gapp->rt->workingdir, "/");
        }
	retval = RETURN_SUCCESS;
    } else {
        retval = RETURN_FAILURE;
    }
    
    xfree(epath);
    
    return retval;
}