pager.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5. #include <grass/gis.h>
  6. #ifdef SIGPIPE
  7. static RETSIGTYPE (*sigpipe)(int);
  8. #endif
  9. FILE *G_open_pager(struct Popen *pager)
  10. {
  11. const char *program = getenv("GRASS_PAGER");
  12. FILE *fp;
  13. G_popen_clear(pager);
  14. if (!program)
  15. return stdout;
  16. if (!isatty(STDOUT_FILENO))
  17. return stdout;
  18. #ifdef SIGPIPE
  19. sigpipe = signal(SIGPIPE, SIG_IGN);
  20. #endif
  21. fp = G_popen_write(pager, program, NULL);
  22. return fp ? fp : stdout;
  23. }
  24. void G_close_pager(struct Popen *pager)
  25. {
  26. G_popen_close(pager);
  27. #ifdef SIGPIPE
  28. if (sigpipe)
  29. signal(SIGPIPE, sigpipe);
  30. #endif
  31. }
  32. FILE *G_open_mail(struct Popen *mail)
  33. {
  34. const char *user = G_whoami();
  35. const char *argv[3];
  36. FILE *fp;
  37. G_popen_clear(mail);
  38. if (!user || !*user)
  39. return NULL;
  40. argv[0] = "mail";
  41. argv[1] = user;
  42. argv[2] = NULL;
  43. fp = G_popen_write(mail, "mail", argv);
  44. return fp;
  45. }
  46. void G_close_mail(struct Popen *mail)
  47. {
  48. G_popen_close(mail);
  49. }