home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / fblnk224.zip / mail.c < prev    next >
C/C++ Source or Header  |  1999-01-28  |  7KB  |  286 lines

  1. /*  mail.c  */
  2. /*  part of the fitsblink program  */
  3. /*  routines for sending report by email */
  4. /*  Jure Skvarc,  May 1998                   */
  5. #include <stdio.h> 
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include <forms.h>
  9. #include <time.h>
  10.  
  11. #include "formblink.h"
  12. #include "functs.h"
  13.  
  14. extern STATE state;
  15. extern BLINK_FRAME *frame;
  16. extern MAIL mail;
  17. extern OBSERVATORY observatory;
  18. extern CATALOG catalog[];
  19.  
  20. void 
  21. toaddressC(FL_OBJECT *obj, long val) 
  22. {
  23.   if (mail.to) {
  24.     free(mail.to);
  25.   }
  26.   mail.to = strdup((char *) fl_get_input(obj));
  27. }
  28.  
  29. void 
  30. ccaddressC(FL_OBJECT *obj, long val) 
  31. {
  32.   if (mail.cc) {
  33.     free(mail.cc);
  34.   }
  35.   mail.cc = strdup((char *) fl_get_input(obj));
  36. }
  37.  
  38. void 
  39. mailtitleC(FL_OBJECT *obj, long val) 
  40. {
  41.   if (mail.title) {
  42.     free(mail.title);
  43.   }
  44.   mail.title = strdup((char *) fl_get_input(obj));
  45. }
  46.  
  47. void
  48. mailfileC(FL_OBJECT *obj, long val)
  49.  
  50. {
  51.   if (mail.file) free(mail.file);
  52.   mail.file = strdup((char *) fl_get_input(obj));
  53.   if (!fl_load_browser(state.mail->messageW, mail.file)) {
  54.     fl_show_alert("Can't open file to mail", "", "", 1);
  55.   }
  56. }
  57.  
  58.  
  59. void 
  60. messageC(FL_OBJECT *obj, long val) 
  61. {
  62. }
  63.  
  64.  
  65. /*  Get a file name and tranfer it into file input field  */
  66. /*  Also, read a file into a browser window  */
  67. void
  68. findfileC(FL_OBJECT *obj, long val)
  69.  
  70. {
  71.   const char *fn;
  72.   static char *curdir = "";
  73.   static char *pattern = "*.mail";
  74.   static char *name = "";
  75.  
  76.   fl_use_fselector(2);
  77.   fl_invalidate_fselector_cache();
  78.   fn = fl_show_fselector("Choose file to mail", curdir, pattern, name);
  79.   if (fn == NULL) return;
  80.   /*  Save the current directory  */
  81.   curdir = (char *) fl_get_directory();
  82.   /*  Save the current pattern */
  83.   pattern = (char *) fl_get_pattern();
  84.   /*  Set the file name  */
  85.   fl_set_input(state.mail->mailfileW, fn);
  86.   mailfileC(state.mail->mailfileW, 0);
  87. }
  88.  
  89.  
  90. /*  Edit a line from a browser  */
  91. /*==============================*/
  92. void 
  93. editorC(FL_OBJECT *obj, long val) 
  94. {
  95.   int i, n;
  96.   FL_OBJECT *br = state.mail->messageW;
  97.  
  98.   /*  Check if any line in a browser is selected  */
  99.   n = fl_get_browser_maxline(br);
  100.   for (i = 1; i <= n; i++) {
  101.     if (fl_isselected_browser_line(br, i)) break;
  102.   }
  103.   if (i <= n) {
  104.     fl_replace_browser_line(br, i, fl_get_input(obj));
  105.   }
  106.   else {
  107.     fl_addto_browser(br, fl_get_input(obj));
  108.   }
  109. }
  110.  
  111. void 
  112. editlineC(FL_OBJECT *obj, long val) 
  113. {
  114.   int i, n;
  115.   FL_OBJECT *br = state.mail->messageW;
  116.  
  117.   /*  Check if any line in a browser is selected  */
  118.   n = fl_get_browser_maxline(br);
  119.   for (i = 1; i <= n; i++) {
  120.     if (fl_isselected_browser_line(br, i)) break;
  121.   }
  122.   if (i <= n) {
  123.     fl_set_input(state.mail->editorW, fl_get_browser_line(br, fl_get_browser(br)));
  124.   }
  125. }
  126.  
  127.  
  128. /*  Insert a line before the currently selected line  */
  129. void 
  130. insertlineC(FL_OBJECT *obj, long val) 
  131. {
  132.   int i, n;
  133.   FL_OBJECT *br = state.mail->messageW;
  134.  
  135.   /*  Check if any line in a browser is selected  */
  136.   n = fl_get_browser_maxline(br);
  137.   for (i = 1; i <= n; i++) {
  138.     if (fl_isselected_browser_line(br, i)) break;
  139.   }
  140.   if (i <= n) {
  141.     fl_insert_browser_line(br, i, fl_get_input(state.mail->editorW));
  142.   }
  143. }
  144.  
  145. void 
  146. deletelineC(FL_OBJECT *obj, long val) 
  147. {
  148.   int i, n;
  149.   FL_OBJECT *br = state.mail->messageW;
  150.  
  151.   /*  Check if any line in a browser is selected  */
  152.   n = fl_get_browser_maxline(br);
  153.   for (i = 1; i <= n; i++) {
  154.     if (fl_isselected_browser_line(br, i)) break;
  155.   }
  156.   if (i <= n) {
  157.     fl_delete_browser_line(br, i);
  158.   }
  159. }
  160.  
  161.  
  162. /*   Include a header in a browser   */
  163. void 
  164. headerC(FL_OBJECT *obj, long val) 
  165.  
  166. {
  167.   char a[81];
  168.   FL_OBJECT *br = state.mail->messageW;
  169.   time_t t;
  170.   int i;
  171.  
  172.   t = time(NULL);
  173.   sprintf(a, "COD %d", observatory.code);
  174.   fl_insert_browser_line(br, 1, a);
  175.   sprintf(a, "OBS %s", observatory.observer);
  176.   fl_insert_browser_line(br, 2, a);
  177.   sprintf(a, "TEL %s", observatory.telescope);
  178.   fl_insert_browser_line(br, 3, a);
  179.   for (i = 0; i < NUMBER_OF_CATALOGS; i++) {
  180.     if (catalog[i].use) {
  181.       sprintf(a, "NET %s", catalog[i].name);
  182.     }
  183.   }
  184.   fl_insert_browser_line(br, 4, a);
  185.   sprintf(a, "ACK Fitsblink %s report generated on %s", VERSION,
  186.       asctime(gmtime(&t)));
  187.   fl_insert_browser_line(br, 5, a);
  188. }
  189.  
  190. int
  191. save_browser(FILE *fp)
  192.  
  193. {
  194.   int i, n;
  195.  
  196.   n = fl_get_browser_maxline(state.mail->messageW);
  197.   for (i = 1; i <= n; i++) {
  198.     fprintf(fp, "%s\n", fl_get_browser_line(state.mail->messageW, i));
  199.   }
  200.   return 0;
  201. }
  202.  
  203.  
  204. void 
  205. sendmailC(FL_OBJECT *obj, long val) 
  206.  
  207. {
  208.   char a[1024], *name;
  209.   FILE *fp;
  210.   
  211.   /*  Generate a temporary file  */
  212.   name = tmpnam(NULL);
  213.   if (name == NULL || (fp = fopen(name, "w")) == NULL) {
  214.     fl_show_alert("We have a problem: Can't generate a temporary file!", "", "", 1);
  215.     return;
  216.   }
  217.   save_browser(fp);
  218.   fclose(fp);
  219.   sprintf(a, "Do you really want to send report to %s?", mail.to);
  220.   if (fl_show_question(a, 0)) {
  221.     sprintf(a, "cat %s | mail %s %s %s %s %s", name, 
  222.       (strlen(mail.title) > 0) ? "-s" : "", 
  223.       (strlen(mail.title) > 0) ? mail.title : "", 
  224.       (strlen(mail.cc) > 0) ? "-c" : "",
  225.       (strlen(mail.cc) > 0) ? mail.cc : "", mail.to);
  226.     system(a);
  227.   }
  228.   remove(name);
  229. }
  230.  
  231.  
  232. void 
  233. savemailC(FL_OBJECT *obj, long val) 
  234.  
  235. {
  236.   const char *fn;
  237.   static char *curdir = "";
  238.   static char *pattern = "*.mail";
  239.   static char *name = "";
  240.   FILE *fp;
  241.  
  242.   fl_use_fselector(5);
  243.   fl_invalidate_fselector_cache();
  244.   fn = fl_show_fselector("Choose output file", curdir, pattern, name);
  245.   if (fn == NULL) return;
  246.   /*  Save the current directory  */
  247.   curdir = (char *) fl_get_directory();
  248.   /*  Save the current pattern */
  249.   pattern = (char *) fl_get_pattern();
  250.   name = (char *) fl_get_filename();
  251.   if (!(fp = fopen(fn, "w"))) {
  252.     fl_show_alert("Can not open file", fn, "for writing!", 0);
  253.     return;
  254.   }
  255.   save_browser(fp);
  256.   fclose(fp);
  257. }
  258.  
  259.  
  260. /*  Open and show the mail window  */
  261. /*=================================*/
  262. void
  263. edit_mail(FL_OBJECT *obj, int m)
  264. {
  265.  
  266.   /*  The window in not created yet, do it now  */
  267.   if (state.mail == NULL) {
  268.     state.mail = create_form_Mail();
  269.     fl_set_form_minsize(state.mail->Mail, 
  270.           state.mail->Mail->w, state.mail->Mail->h);
  271.     fl_set_browser_fontsize(state.mail->messageW, 12);
  272.     fl_set_browser_fontstyle(state.mail->messageW, FL_FIXED_STYLE);
  273.     if (!fl_load_browser(state.mail->messageW, mail.file)) {
  274.       fl_show_alert("Can't open file to mail", "", "", 1);
  275.     }
  276.   }
  277.   /*  Deactivate OPTIONS item in the menu */
  278.   fl_set_menu_item_mode(obj, m, FL_PUP_GREY);
  279.   fl_show_form(state.mail->Mail,  FL_FIX_SIZE, FL_FULLBORDER | FL_PLACE_FREE_CENTER, "Image options");
  280.   fl_set_input(state.mail->toaddressW, mail.to);
  281.   fl_set_input(state.mail->ccaddressW, mail.cc);
  282.   fl_set_input(state.mail->mailtitleW, mail.title);
  283.   fl_set_input(state.mail->mailfileW, mail.file);
  284. }
  285.  
  286.