int getCharSize() { FILE *f; Str tmp; int w = 0, h = 0; set_environ("W3M_TTY", ttyname_tty()); tmp = Strnew(); if (!strchr(Imgdisplay, '/')) Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL); Strcat_m_charp(tmp, Imgdisplay, " -test 2>/dev/null", NULL); f = popen(tmp->ptr, "r"); if (!f) return FALSE; while (fscanf(f, "%d %d", &w, &h) < 0) { if (feof(f)) break; } pclose(f); if (!(w > 0 && h > 0)) return FALSE; if (!set_pixel_per_char) pixel_per_char = (int)(1.0 * w / COLS + 0.5); if (!set_pixel_per_line) pixel_per_line = (int)(1.0 * h / LINES + 0.5); return TRUE; }
static int openImgdisplay() { Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf); if (Imgdisplay_pid < 0) goto err0; if (Imgdisplay_pid == 0) { /* child */ char *cmd; setup_child(FALSE, 2, -1); if (!strchr(Imgdisplay, '/')) cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr; else cmd = Imgdisplay; myExec(cmd); /* XXX: ifdef __EMX__, use start /f ? */ } activeImage = TRUE; return TRUE; err0: Imgdisplay_pid = 0; activeImage = FALSE; return FALSE; }
char * auxbinFile(char *base) { return expandPath(Strnew_m_charp(w3m_auxbin_dir(), "/", base, NULL)->ptr); }