void close_down_verbose_printer (PRN *vprn) { if (vprn != NULL) { iter_print_callback(-1, NULL); gretl_print_destroy(vprn); } }
MODEL arma_x12_model (const int *list, const int *pqspec, const DATASET *dset, int pdmax, gretlopt opt, PRN *prn) { int verbose = (opt & OPT_V); const char *prog = gretl_x12_arima(); const char *workdir = gretl_x12_arima_dir(); char yname[VNAMELEN], path[MAXLEN]; MODEL armod; arma_info ainfo_s, *ainfo; int missv = 0, misst = 0; #ifdef WIN32 char *cmd; #endif int err = 0; if (dset->t2 < dset->n - 1) { /* FIXME this is temporary (OPT_F -> generate forecast) */ opt |= OPT_F; } ainfo = &ainfo_s; arma_info_init(ainfo, opt | OPT_X, pqspec, dset); ainfo->prn = set_up_verbose_printer(opt, prn); gretl_model_init(&armod, dset); ainfo->alist = gretl_list_copy(list); if (ainfo->alist == NULL) { err = E_ALLOC; } if (!err) { err = arma_check_list(ainfo, dset, opt); } if (err) { armod.errcode = err; goto bailout; } /* calculate maximum lag */ calc_max_lag(ainfo); x12a_maybe_allow_missvals(ainfo); /* adjust sample range if need be */ armod.errcode = arma_adjust_sample(ainfo, dset, &missv, &misst); if (armod.errcode) { goto bailout; } else if (missv > 0) { set_arma_missvals(ainfo); } ainfo->y = (double *) dset->Z[ainfo->yno]; /* it's really const */ strcpy(yname, dset->varname[ainfo->yno]); /* write out an .spc file */ sprintf(path, "%s%c%s.spc", workdir, SLASH, yname); write_arma_spc_file(path, dset, ainfo, pdmax, opt); /* remove any files from an old run, in case of error */ delete_old_files(path); /* run the program */ #ifdef WIN32 cmd = g_strdup_printf("\"%s\" %s -r -p -q", prog, yname); err = win_run_sync(cmd, workdir); g_free(cmd); #else err = tramo_x12a_spawn(workdir, prog, yname, "-r", "-p", "-q", "-n", NULL); #endif if (!err) { sprintf(path, "%s%c%s", workdir, SLASH, yname); populate_x12a_arma_model(&armod, path, dset, ainfo); if (verbose && !armod.errcode) { print_iterations(path, ainfo->prn); } if (!armod.errcode) { if (gretl_in_gui_mode()) { add_unique_output_file(&armod, path); } gretl_model_set_int(&armod, "arma_flags", (int) ainfo->flags); } } else { armod.errcode = E_UNSPEC; gretl_errmsg_set(_("Failed to execute x12arima")); } if (armod.errcode && ainfo->prn != NULL) { sprintf(path, "%s%c%s.err", workdir, SLASH, yname); print_x12a_error_file(path, ainfo->prn); } if (ainfo->prn != NULL && ainfo->prn != prn) { iter_print_callback(0, ainfo->prn); close_down_verbose_printer(ainfo->prn); } bailout: arma_info_cleanup(ainfo); return armod; }