123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #include <string.h>
- #include <stdlib.h>
- #include <dirent.h>
- #include <sys/stat.h>
- #include <grass/gis.h>
- #include <grass/glocale.h>
- #include "proto.h"
- /* get monitor path */
- char *get_path(const char *name, int fpath)
- {
- char tmpdir[GPATH_MAX];
-
- G_temp_element(tmpdir);
- strcat(tmpdir, "/");
- strcat(tmpdir, "MONITORS");
- if (name) {
- strcat(tmpdir, "/");
- strcat(tmpdir, name);
- }
- if (fpath) {
- char ret[GPATH_MAX];
-
- G_file_name(ret, tmpdir, NULL, G_mapset());
- return G_store(ret);
- }
-
- return G_store(tmpdir);
- }
- /* get list of running monitors */
- void list_mon(char ***list, int *n)
- {
- char *mon_path;
- struct dirent *dp;
- DIR *dirp;
- struct stat s;
-
- *list = NULL;
- *n = 0;
-
- mon_path = get_path(NULL, TRUE);
- dirp = opendir(mon_path);
- G_free(mon_path);
-
- if (!dirp)
- return;
- while ((dp = readdir(dirp)) != NULL) {
- int ret;
- if (!dp->d_name || dp->d_name[0] == '.')
- continue;
- mon_path = get_path(dp->d_name, TRUE);
- ret = G_stat(mon_path, &s);
- G_free(mon_path);
- if (ret != 0 || !S_ISDIR(s.st_mode))
- continue;
- *list = G_realloc(*list, (*n + 1) * sizeof(char *));
- (*list)[*n] = dp->d_name;
- (*n)++;
- }
- closedir(dirp);
- }
- /* print list of running monitors */
- void print_list(FILE *fd)
- {
- char **list;
- int i, n;
- list_mon(&list, &n);
- if (n > 0)
- G_message(_("List of running monitors:"));
- else {
- G_important_message(_("No monitors running"));
- return;
- }
-
- for (i = 0; i < n; i++)
- fprintf(fd, "%s\n", list[i]);
- }
- /* check if monitor is running */
- int check_mon(const char *name)
- {
- char **list;
- int i, n;
- list_mon(&list, &n);
-
- for (i = 0; i < n; i++)
- if (G_strcasecmp(list[i], name) == 0)
- return TRUE;
-
- return FALSE;
- }
- /* list related commands for given monitor */
- void list_cmd(const char *name, FILE *fd_out)
- {
- char *mon_path;
- char cmd_file[GPATH_MAX], buf[4096];
- FILE *fd;
-
- mon_path = get_path(name, FALSE);
- G_file_name(cmd_file, mon_path, "cmd", G_mapset());
- fd = fopen(cmd_file, "r");
- if (!fd)
- G_fatal_error(_("Unable to open file '%s'"), cmd_file);
- while (G_getl2(buf, sizeof(buf) - 1, fd) != 0) {
- fprintf(fd_out, "%s\n", buf);
- }
-
- fclose(fd);
- G_free(mon_path);
- }
- void list_files(const char *name, FILE *fd_out)
- {
- char *p;
- char tmpdir[GPATH_MAX], mon_path[GPATH_MAX];
- struct dirent *dp;
- DIR *dirp;
-
- G_temp_element(tmpdir);
- strcat(tmpdir, "/");
- strcat(tmpdir, "MONITORS");
- strcat(tmpdir, "/");
- strcat(tmpdir, name);
-
- G_file_name(mon_path, tmpdir, NULL, G_mapset());
- fprintf(fd_out, "path=%s\n", mon_path);
-
- dirp = opendir(mon_path);
- if (!dirp)
- G_fatal_error(_("No support files found for monitor <%s>"), name);
- while ((dp = readdir(dirp)) != NULL) {
- if (!dp->d_name || dp->d_name[0] == '.')
- continue;
-
- p = strrchr(dp->d_name, '.');
- if (!p)
- p = dp->d_name;
- else
- p++; /* skip '.' */
-
- fprintf(fd_out, "%s=%s%c%s\n", p,
- mon_path, HOST_DIRSEP, dp->d_name);
- }
- }
|