#include "mmmfuncs.h"


/****************************************************************/

void MMMeditable_icon_button(widget, option)
     Widget widget;
     char *option;
 { char *str;

   /* make the widget invoke a WB option when moused */
   /* ---------------------------------------------- */
   str = (char *) calloc((strlen(option) + 28), 1);
   sprintf(str,
	   "<Btn1Down>: EditWidget(\"%s\")", option);
   /* XtAugmentTranslations(widget, */
   XtOverrideTranslations(widget, 
			  XtParseTranslationTable(str));
 };        /* end of MMMeditable_icon_button()  */

/****************************************************************/

void MMMexit_button(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   exit(0);
 };         /* end of MMMexit_button()  */

/****************************************************************/

int MMM_sendmail(x_mmm_headers, headers, n_elements, body)
     MailBuffer *x_mmm_headers;
     char **headers;     /* ptr to an array of strings containing headers */ 
     char *body;
     int n_elements;
 {
   FILE *fp;
   int i;

   /* Check for errors in openning shell to sendmail. */
   /* ----------------------------------------------- */
   if ((fp = popen("/usr/lib/sendmail -t", "w+")) == NULL)
     { documentation_line(
	 "Couldn't open shell to send. You may have too many processes.");
       return(FALSE);
     };

   /* Write multi-media info (mail headers) to mail transport program. */
   /* ---------------------------------------------------------------- */
   AlMB_write_to_file(fp, x_mmm_headers);

   /* Write regular mail headers (To:, etc) to mail transport program. */
   /* ---------------------------------------------------------------- */
   for(i = 0; i < n_elements; i++)
     fprintf(fp, "%s\n", headers[i]);

   /* Write body of message (text) to mail transport program. */
   /* ------------------------------------------------------- */
   fprintf(fp, "%s", body);

   /* Terminate the message and send it on its way. */
   /* --------------------------------------------- */
   fprintf(fp, "\n.\n");
   fflush(fp);
   pclose(fp);

   return(TRUE);

 };     /* end of MMM_sendmail()  */
       
/* ---------------------------------------------------------------------- */
/* ------------------------------- ??? ---------------------------------- */


/*****************************************************************/
/*****************************************************************/
/****                                                         ****/
/****   Functions below here are only Rough Sketches.         ****/
/****   They are incomplete and contain faked code.           ****/
/****   RE-WRITE THE FOLLOWING FUNCTIONS AS SOON AS POSSIBLE. ****/
/****                                                         ****/
/*****************************************************************/
/*****************************************************************/

void MMM_sendmail_button(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   int n_headers;
   char **headers;
   MailBuffer *buffer;

           /* ??? DEBUG ??? : the following "headers" are temporary */
           /* ??? this section needs re-writing SOON !!    ???      */
   n_headers = 3;
   headers = (char **) calloc(sizeof(char *), n_headers);

   headers[0] = "To: bgardner@athena.mit.edu";
   headers[1] = "Spare: No expense";
   headers[2] = "Subject: Test of Media Mail";

   /* create headers for multi-media info */
   buffer = AlMB_create();

   prstr_all_widgets(HeadWidgetList, buffer, 0);

   MMM_sendmail(buffer, headers, n_headers, WB_get_body());

   AlMB_destroy(buffer);
   documentation_line("Message sent.");

 };         /* end of MMM_sendmail_button()  */

/*****************************************************************/

void MMM_next_msg(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   char *folder_name, *command;
   int flag;
   FILE *fp;

   WNdestroy_all(HeadWidgetList, TRUE);  /* destroy all widgets, too. */

   folder_name = MMM_get_cur_folder_name();

   /* Open up a shell to grab the next message from MH.                  */
   /* (Note: This is slightly slower, but insures upward compatibility.) */
   /* ------------------------------------------------------------------ */
   command = (char *) calloc(sizeof(char), (8 + strlen(folder_name)));
   sprintf(command, "next +%s", folder_name);

   if ((fp = popen(command, "w+")) == NULL)
     { documentation_line("No more Messages. (No next message available.)");
       free(command);
     }
   else
     { XtUnmanageChild(userArea);
       flag = MMMread_msg_from_file(fp);
       XtManageChild(userArea);
       if (flag == FALSE)
	 { documentation_line(
	     "Unable to read next message. (Or no next message available.)");
	 }
       else
	 { documentation_line("Successfully read next message.");
	 };
     };
 };       /* end of MMM_next_msg()  */

/****************************************************************/

void MMM_create_msg_button(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   char *folder_name, *command;
   int flag;
   FILE *fp;

   WNdestroy_all(HeadWidgetList, TRUE);  /* destroy all widgets, too. */

 };       /* end of MMM_create_msg_button()  */

/****************************************************************/

void MMM_delete_msg_button(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   char *folder_name, *command;
   int flag;
   FILE *fp;

   WNdestroy_all(HeadWidgetList, TRUE);  /* destroy all widgets, too. */

 };       /* end of MMM_delete_msg_button()  */

/****************************************************************/

void MMM_readprev_button(widget, closure, call_data)
     Widget widget;
     caddr_t closure;
     caddr_t call_data;
 {
   char *folder_name, *command;
   int flag;
   FILE *fp;

   WNdestroy_all(HeadWidgetList, TRUE);  /* destroy all widgets, too. */

 };       /* end of MMM_readprev_msg()  */

/****************************************************************/
