int stop_mon(const char *name) { if (!check_mon(name)) { clean_env(name); G_fatal_error(_("Monitor <%s> is not running"), name); } if (strncmp(name, "wx", 2) == 0) return stop_wx(name); return stop(name); }
int start_mon(const char *name, const char *output, int select, const char *width, const char *height, const char *bgcolor, int truecolor) { const char *curr_mon; char *env_name, *env_value, *cmd_value; char *tempfile, buf[1024]; int env_fd; curr_mon = G__getenv("MONITOR"); if (curr_mon && strcmp(curr_mon, name) == 0 && check_mon(curr_mon)) G_fatal_error(_("Monitor <%s> already running"), name); tempfile = G_tempfile(); env_name = env_value = NULL; G_asprintf(&env_name, "MONITOR_%s_ENVFILE", name); G_asprintf(&env_value, "%s.env", tempfile); G_setenv(env_name, env_value); env_fd = creat(env_value, 0666); if (env_fd < 0) G_fatal_error(_("Unable to create file '%s'"), env_value); if (width) { sprintf(buf, "GRASS_WIDTH=%s\n", width); write(env_fd, buf, strlen(buf)); } if (height) { sprintf(buf, "GRASS_HEIGHT=%s\n", height); write(env_fd, buf, strlen(buf)); } if (bgcolor) { if (strcmp(bgcolor, "none") == 0) sprintf(buf, "GRASS_TRANSPARENT=TRUE\n"); else sprintf(buf, "GRASS_BACKGROUNDCOLOR=%s\n", bgcolor); write(env_fd, buf, strlen(buf)); } if (truecolor) { sprintf(buf, "GRASS_TRUECOLOR=TRUE\n"); write(env_fd, buf, strlen(buf)); } close(env_fd); cmd_value = NULL; G_asprintf(&env_name, "MONITOR_%s_CMDFILE", name); G_asprintf(&cmd_value, "%s.cmd", tempfile); G_setenv(env_name, cmd_value); close(creat(cmd_value, 0666)); G_verbose_message(_("Staring monitor <%s> with env file '%s'"), name, env_value); G_debug(1, "start: name=%s ", name); G_debug(3, " envfile = %s", env_value); G_debug(3, " cmdfile = %s", cmd_value); if (select) G_setenv("MONITOR", name); if (strncmp(name, "wx", 2) == 0) /* use G_strncasecmp() instead */ start_wx(name, tempfile, env_value, cmd_value, width, height); else start(name, output); return 0; }