Beispiel #1
0
static PRN *get_dotdir_printer (char **pfname, int *err)
{
    const char *dotdir = gretl_dotdir();
    char *fname = NULL;
    FILE *fp = NULL;
    PRN *prn = NULL;

    fname = malloc(strlen(dotdir) + 16);

    if (fname == NULL) {
	*err = E_ALLOC;
    } else {
	sprintf(fname, "%sprntmp.XXXXXX", dotdir);
	fp = gretl_mktemp(fname, "w");
	if (fp == NULL) {
	    *err = E_FOPEN;
	    free(fname);
	    fname = NULL;
	}
    }

    if (fp != NULL) {
	prn = gretl_print_new_with_stream(fp);
	*pfname = fname;
    }

    return prn;
}
Beispiel #2
0
int gretl_bundle_write_to_file (gretl_bundle *b, 
				const char *fname,
				int to_dotdir)
{
    char fullname[FILENAME_MAX];
    FILE *fp;
    int err = 0;

    if (to_dotdir) {
	build_path(fullname, gretl_dotdir(), fname, NULL);
    } else {
	strcpy(fullname, fname);
	gretl_maybe_switch_dir(fullname);
    }

    fp = gretl_fopen(fullname, "wb");

    if (fp == NULL) {
	err = E_FOPEN;
    } else {
	gretl_xml_header(fp);
	gretl_bundle_serialize(b, "temp", fp);
    }

    return err;
}
Beispiel #3
0
static void gpage_filenames_init (const char *base)
{
    if (base == NULL) {
	strcpy(gpage_base, gretl_dotdir());
	strcat(gpage_base, "gretl_graphpage");
	strcpy(gpage_tex_base, "gretl_graphpage");
    } else {
	const char *p;

	strcpy(gpage_base, base);
	if (has_suffix(gpage_base, ".tex") || 
	    has_suffix(gpage_base, ".pdf") ||
	    has_suffix(gpage_base, ".eps")) {
	    gpage_base[strlen(gpage_base) - 4] = '\0';
	} else if (has_suffix(gpage_base, ".ps")) {
	    gpage_base[strlen(gpage_base) - 3] = '\0';
	}
	p = strrchr(gpage_base, SLASH);
	if (p != NULL) {
	    strcpy(gpage_tex_base, p + 1);
	} else {
	    strcpy(gpage_tex_base, gpage_base);
	}
    }
}
Beispiel #4
0
static int prn_add_tempfile (PRN *prn)
{
    const char *dotdir = gretl_dotdir();
    int n = strlen(dotdir) + 16;
    int err = 0;

    prn->fname = malloc(n);
    if (prn->fname == NULL) {
	return E_ALLOC;
    }

    sprintf(prn->fname, "%sprntmp.XXXXXX", dotdir);
    prn->fp = gretl_mktemp(prn->fname, "w");

#if PRN_DEBUG
    fprintf(stderr, "prn_add_tempfile: '%s' at %p\n",
	    prn->fname, (void *) prn->fp);
#endif

    if (prn->fp == NULL) {
	free(prn->fname);
	prn->fname = NULL;
	err = E_FOPEN;
    } 

    return err;
}
Beispiel #5
0
void do_nistcheck (GtkAction *action)
{
    void *handle;
    int (*run_nist_tests)(const char *, const char *, int);
    gchar *datadir = NULL;
    gchar *fname = NULL;
    
    run_nist_tests = gui_get_plugin_function("run_nist_tests", 
					     &handle);
    if (run_nist_tests == NULL) {
	return;
    }

    datadir = g_strdup_printf("%sdata%s", gretl_home(), SLASHSTR);
    fname = g_strdup_printf("%snist.out", gretl_dotdir());

    (*run_nist_tests)(datadir, fname, nist_verbosity(action));

    close_plugin(handle);

    view_file(fname, 0, 1, 78, 400, VIEW_CODEBOOK);

    g_free(datadir);
    g_free(fname);
}
Beispiel #6
0
void send_file (char *fullname)
{
    int (*email_file) (const char *, const char *);
    void *handle;

    email_file = gui_get_plugin_function("email_file", &handle);
    if (email_file == NULL) {
        return;
    }
    
    email_file(fullname, gretl_dotdir());
    close_plugin(handle);
}
Beispiel #7
0
static void remove_temp_dir (char *dname)
{
    const char *udir = gretl_dotdir();

# ifdef G_OS_WIN32
    char *fullpath = g_strdup_printf("%s%s", udir, dname);

    gretl_chdir(udir);
    win32_delete_dir(fullpath);
    g_free(fullpath);
# else
    gretl_chdir(udir);
    gretl_deltree(dname);
# endif
}
Beispiel #8
0
static int spawn_dvips (char *texsrc)
{
    GError *error = NULL;
    gchar *sout = NULL;
    gchar *argv[5];
    char outfile[MAXLEN]; 
    int ok, status;
    int ret = 0;

    sprintf(outfile, "%s.ps", texsrc);

    argv[0] = "dvips";
    argv[1] = "-o";
    argv[2] = outfile;
    argv[3] = texsrc;
    argv[4] = NULL;

    ok = g_spawn_sync(gretl_dotdir(),
		      argv,
		      NULL,    /* envp */
		      G_SPAWN_SEARCH_PATH |
		      G_SPAWN_STDERR_TO_DEV_NULL,
		      NULL,    /* child_setup */
		      NULL,    /* user_data */
		      &sout,   /* standard output */
		      NULL,    /* standard error */
		      &status, /* exit status */
		      &error);

    if (!ok) {
	errbox(error->message);
	g_error_free(error);
	ret = LATEX_EXEC_FAILED;
    } else if (status != 0) {
	gchar *errmsg;

	errmsg = g_strdup_printf("%s\n%s", 
				 _("Failed to process TeX file"),
				 sout);
	errbox(errmsg);
	g_free(errmsg);
	ret = 1;
    }

    if (sout != NULL) g_free(sout);

    return ret;
}
Beispiel #9
0
int retrieve_public_file (const char *uri, char *localname)
{
    int pl = proto_length(uri);
    int err = 0;

    if (pl == 0) {
	return E_DATA;
    } else if (*localname == '\0') {
	/* extract the filename from the uri */
	const char *s = strrchr(uri + pl, '/');

	if (s == NULL || *(s+1) == '\0') {
	    err = E_DATA;
	} else {
	    /* save to user's dotdir by default */
	    strcat(localname, gretl_dotdir());
	    strcat(localname, s + 1);
	}
    }

    if (!err) {
	urlinfo u;

	urlinfo_init(&u, NULL, SAVE_TO_FILE, localname);
	urlinfo_set_url(&u, uri);
	if (gretl_in_gui_mode()) {
	    urlinfo_set_show_progress(&u);
	}
	err = curl_get(&u);
	urlinfo_finalize(&u, NULL, &err);
    }

    if (err) {
	const char *s = gretl_errmsg_get();

	if (*s == '\0') {
	    /* no error message in place */
	    gretl_errmsg_sprintf("%s\ndownload failed", uri);
	}
    } else {
	err = check_downloaded_file(localname, uri);
    }

    return err;
}
Beispiel #10
0
gretl_bundle *gretl_bundle_read_from_file (const char *fname, 
					   int from_dotdir,
					   int *err)
{
    xmlDocPtr doc = NULL;
    xmlNodePtr cur = NULL;
    char fullname[FILENAME_MAX];
    gretl_bundle *b;

    b = gretl_bundle_new();
    if (b == NULL) {
	*err = E_ALLOC;
	return NULL;
    }    

    if (from_dotdir) {
	build_path(fullname, gretl_dotdir(), fname, NULL);
    } else {
	strcpy(fullname, fname);
    }

    *err = gretl_xml_open_doc_root(fullname, "gretl-bundle", &doc, &cur);

    if (!*err) {
	gretl_push_c_numeric_locale();
	cur = cur->xmlChildrenNode;
	*err = load_bundled_items(b, cur, doc);
	gretl_pop_c_numeric_locale();
	xmlFreeDoc(doc);
    }

    if (*err) {
	gretl_bundle_destroy(b);
	b = NULL;
    }

    return b;
}
Beispiel #11
0
int dvips_compile (char *texshort)
{
#ifdef G_OS_WIN32
    static char dvips_path[MAXLEN];
    char tmp[MAXLEN];
#endif
    int err = 0;

#if defined(G_OS_WIN32)
    if (*dvips_path == 0 && get_dvips_path(dvips_path)) {
	win_show_last_error();
	return 1;
    }

    sprintf(tmp, "\"%s\" -o %s.ps %s", dvips_path, texshort, texshort);
    if (win_run_sync(tmp, gretl_dotdir())) {
	return 1;
    }
#else
    err = spawn_dvips(texshort);
#endif 

    return err;
}
Beispiel #12
0
static int open_import_zipfile (const char *fname, char *dname,
				PRN *prn)
{
    const char *udir = gretl_dotdir();
    const char *real_fname = fname;
    char *recoded_fname = NULL;
    char *abspath = NULL;
    FILE *fp;
    int err = 0;

    errno = 0;
    *dname = '\0';

    /* In case @fname is in UTF-8 but we're on MS Windows (or
       conceivably on an old non-UTF-8 *nix system), grab the
       appropriately recoded filename to pass into the
       zipfile apparatus, since in that context a filename
       that works with plain system stdio is expected.
       FIXME: is this right if we're using libgsf to do the
       unzipping? Maybe this doesn't matter if we're using
       libgsf only on UTF-8 systems (e.g. modern Linux), in
       which case no recoding will be required.
    */

    fp = gretl_fopen_with_recode(fname, "r", &recoded_fname);
    if (fp == NULL) {
	return E_FOPEN;
    }

    fclose(fp);

    if (recoded_fname != NULL) {
	real_fname = recoded_fname;
    }

    /* by doing chdir, we may lose track of the file if 
       its path is relative */
    if (!g_path_is_absolute(real_fname)) {
	abspath = get_absolute_path(real_fname);
	if (abspath != NULL) {
	    real_fname = abspath;
	}
    }

    /* cd to user dir and make temporary dir */
    if (gretl_chdir(udir)) {
	gretl_errmsg_set_from_errno(udir);
	err = E_FOPEN;
    } else {
	err = gretl_make_tempdir(dname);
	if (!err) {
	    err = gretl_chdir(dname);
	    if (err) {
		gretl_remove(dname);
	    }
	}
    }
    
    if (!err) {
	/* if all has gone OK, we're now "in" the temporary
	   directory under dotdir, and @real_fname is the
	   absolute path to the file to be unzipped.
	*/
	err = gretl_unzip(real_fname);
	if (err) {
	    pprintf(prn, "gretl_unzip: %s\n", gretl_errmsg_get());
	}
    }

    free(abspath);
    free(recoded_fname);

    return err;
}