749 lines
23 KiB
C
749 lines
23 KiB
C
/****************************************************************************
|
|
* NCSA Mosaic for the X Window System *
|
|
* Software Development Group *
|
|
* National Center for Supercomputing Applications *
|
|
* University of Illinois at Urbana-Champaign *
|
|
* 605 E. Springfield, Champaign IL 61820 *
|
|
* mosaic@ncsa.uiuc.edu *
|
|
* *
|
|
* Copyright (C) 1993, Board of Trustees of the University of Illinois *
|
|
* *
|
|
* NCSA Mosaic software, both binary and source (hereafter, Software) is *
|
|
* copyrighted by The Board of Trustees of the University of Illinois *
|
|
* (UI), and ownership remains with the UI. *
|
|
* *
|
|
* The UI grants you (hereafter, Licensee) a license to use the Software *
|
|
* for academic, research and internal business purposes only, without a *
|
|
* fee. Licensee may distribute the binary and source code (if released) *
|
|
* to third parties provided that the copyright notice and this statement *
|
|
* appears on all copies and that no charge is associated with such *
|
|
* copies. *
|
|
* *
|
|
* Licensee may make derivative works. However, if Licensee distributes *
|
|
* any derivative work based on or derived from the Software, then *
|
|
* Licensee will (1) notify NCSA regarding its distribution of the *
|
|
* derivative work, and (2) clearly notify users that such derivative *
|
|
* work is a modified version and not the original NCSA Mosaic *
|
|
* distributed by the UI. *
|
|
* *
|
|
* Any Licensee wishing to make commercial use of the Software should *
|
|
* contact the UI, c/o NCSA, to negotiate an appropriate license for such *
|
|
* commercial use. Commercial use includes (1) integration of all or *
|
|
* part of the source code into a product for sale or license by or on *
|
|
* behalf of Licensee to third parties, or (2) distribution of the binary *
|
|
* code or source code to third parties that need it to utilize a *
|
|
* commercial product sold or licensed by or on behalf of Licensee. *
|
|
* *
|
|
* UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR *
|
|
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED *
|
|
* WARRANTY. THE UI SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE *
|
|
* USERS OF THIS SOFTWARE. *
|
|
* *
|
|
* By using or copying this Software, Licensee agrees to abide by the *
|
|
* copyright law and all other applicable laws of the U.S. including, but *
|
|
* not limited to, export control laws, and the terms of this license. *
|
|
* UI shall have the right to terminate this license immediately by *
|
|
* written notice upon Licensee's breach of, or non-compliance with, any *
|
|
* of its terms. Licensee may be held legally responsible for any *
|
|
* copyright infringement that is caused or encouraged by Licensee's *
|
|
* failure to abide by the terms of this license. *
|
|
* *
|
|
* Comments and questions are welcome and can be sent to *
|
|
* mosaic-x@ncsa.uiuc.edu. *
|
|
****************************************************************************/
|
|
|
|
/* Interface for mailto: URLs, stolen from techsupport.c */
|
|
#include "../config.h"
|
|
#include "mosaic.h"
|
|
#include "gui.h"
|
|
#include <stdio.h>
|
|
|
|
#include "../libnut/url-utils.h"
|
|
#include "libnut/system.h"
|
|
|
|
#ifndef DISABLE_TRACE
|
|
extern int srcTrace;
|
|
#endif
|
|
|
|
extern int do_post;
|
|
extern char *post_content_type;
|
|
extern char *post_data;
|
|
extern char pre_title[80];
|
|
|
|
extern mo_window *current_win;
|
|
mo_status mo_post_mailto_form_win (char *to_address, char *subject);
|
|
mo_status mo_send_mailto_message (char *text, char *to, char *subj,
|
|
char *content_type, char *url);
|
|
void do_mailto_post(mo_window *win, char *to, char *from, char *subject,
|
|
char *body);
|
|
|
|
/* ----------------------- mo_post_mailto_window ------------------------ */
|
|
static XmxCallback (include_fsb_cb)
|
|
{
|
|
char *fname, efname[MO_LINE_LENGTH];
|
|
FILE *fp;
|
|
char line[MO_LINE_LENGTH], *status;
|
|
|
|
mo_window *win = mo_fetch_window_by_id (XmxExtractUniqid ((int)client_data));
|
|
|
|
if (!win)
|
|
return;
|
|
|
|
XtUnmanageChild (win->mail_fsb_win);
|
|
fname = (char *)malloc (128 * sizeof (char));
|
|
|
|
XmStringGetLtoR (((XmFileSelectionBoxCallbackStruct *)call_data)->value,
|
|
XmSTRING_DEFAULT_CHARSET,
|
|
&fname);
|
|
|
|
|
|
pathEval (efname, fname);
|
|
|
|
fp = fopen (efname, "r");
|
|
if (!fp)
|
|
{
|
|
char *buf, *final, tmpbuf[80];
|
|
int final_len;
|
|
|
|
buf=my_strerror(errno);
|
|
if (!buf || !*buf || !strcmp(buf,"Error 0")) {
|
|
sprintf(tmpbuf,"Unknown Error");
|
|
buf=tmpbuf;
|
|
}
|
|
|
|
final_len=30+((!efname || !*efname?3:strlen(efname))+13)+15+(strlen(buf)+13);
|
|
final=(char *)calloc(final_len,sizeof(char));
|
|
|
|
strcpy(final,"\nUnable to Open File:\n");
|
|
sprintf(final+strlen(final)," %s\n",(!efname || !*efname?" ":efname));
|
|
sprintf(final+strlen(final),"\nOpen Error:\n");
|
|
sprintf(final+strlen(final)," %s\n",buf);
|
|
|
|
XmxMakeErrorDialog (win->mailto_win,
|
|
final,
|
|
"Open Error");
|
|
XtManageChild (Xmx_w);
|
|
|
|
if (final) {
|
|
free(final);
|
|
final=NULL;
|
|
}
|
|
return;
|
|
}
|
|
|
|
while (1)
|
|
{
|
|
long pos;
|
|
status = fgets (line, MO_LINE_LENGTH, fp);
|
|
if (!status || !(*line))
|
|
break;
|
|
|
|
XmTextInsert (win->mailto_text,
|
|
pos = XmTextGetInsertionPosition (win->mailto_text),
|
|
line);
|
|
/* move insertion position to past this line to avoid inserting the
|
|
lines in reverse order */
|
|
XmTextSetInsertionPosition (win->mailto_text, pos + strlen(line));
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
static XmxCallback (mailto_win_cb)
|
|
{
|
|
mo_window *win = mo_fetch_window_by_id (XmxExtractUniqid ((int)client_data));
|
|
char *msg, *subj, *to;
|
|
long pos;
|
|
|
|
|
|
switch (XmxExtractToken ((int)client_data))
|
|
{
|
|
case 0: /* send */
|
|
XtUnmanageChild (win->mailto_win);
|
|
|
|
msg = XmxTextGetString (win->mailto_text);
|
|
if (!msg)
|
|
return;
|
|
if (msg[0] == '\0')
|
|
return;
|
|
|
|
|
|
to = XmxTextGetString (win->mailto_tofield);
|
|
subj = XmxTextGetString (win->mailto_subfield);
|
|
|
|
mo_send_mailto_message (msg, to, subj, "text/plain",
|
|
win->current_node->url);
|
|
free (msg);
|
|
free (to);
|
|
free (subj);
|
|
|
|
break;
|
|
case 1: /* dismiss */
|
|
XtUnmanageChild (win->mailto_win);
|
|
/* Do nothing. */
|
|
break;
|
|
case 2: /* help */
|
|
mo_open_another_window
|
|
(win,
|
|
mo_assemble_help_url ("help-on-mailto.html"),
|
|
NULL, NULL);
|
|
break;
|
|
|
|
case 3: /* insert file */
|
|
if (!win->mail_fsb_win) {
|
|
win->mail_fsb_win = XmxMakeFileSBDialog
|
|
(win->mailto_win,
|
|
"NCSA Mosaic: Include File In Mail Message",
|
|
"Name of file to include:",
|
|
include_fsb_cb, 0);
|
|
} else {
|
|
XmFileSelectionDoSearch (win->mail_fsb_win, NULL);
|
|
}
|
|
|
|
XmxManageRemanage (win->mail_fsb_win);
|
|
break;
|
|
case 4:
|
|
if(win->current_node->url){
|
|
XmTextInsert (win->mailto_text,
|
|
pos = XmTextGetInsertionPosition (win->mailto_text),
|
|
win->current_node->url);
|
|
/* move insertion position to past this line
|
|
to avoid inserting the lines in reverse order */
|
|
XmTextSetInsertionPosition (win->mailto_text,
|
|
pos + strlen(win->current_node->url));
|
|
}
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
static XmxCallback (mailto_form_win_cb)
|
|
{
|
|
mo_window *win = mo_fetch_window_by_id (XmxExtractUniqid ((int)client_data));
|
|
char *subj, *to, *namestr;
|
|
|
|
switch (XmxExtractToken ((int)client_data))
|
|
{
|
|
case 0: /* send */
|
|
XtUnmanageChild (win->mailto_form_win);
|
|
|
|
to = XmxTextGetString (win->mailto_form_tofield);
|
|
subj = XmxTextGetString (win->mailto_form_subfield);
|
|
namestr = XmxTextGetString(win->mailto_form_fromfield);
|
|
|
|
do_mailto_post(win,to,namestr,subj,win->post_data);
|
|
|
|
free (namestr);
|
|
free (to);
|
|
free (subj);
|
|
if (win->post_data) {
|
|
free (win->post_data);
|
|
win->post_data=NULL;
|
|
}
|
|
|
|
break;
|
|
case 1: /* dismiss */
|
|
XtUnmanageChild (win->mailto_form_win);
|
|
/* Do nothing. */
|
|
if (win->post_data) {
|
|
free (win->post_data);
|
|
win->post_data=NULL;
|
|
}
|
|
|
|
break;
|
|
case 2: /* help */
|
|
mo_open_another_window
|
|
(win,
|
|
mo_assemble_help_url ("help-on-mailto-form.html"),
|
|
NULL, NULL);
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
mo_status mo_post_mailto_win (char *to_address, char *subject)
|
|
{
|
|
mo_window *win = current_win;
|
|
FILE *fp;
|
|
long pos;
|
|
char namestr[1024],tmp[1024];
|
|
|
|
if (do_post) {
|
|
if (!subject || !*subject) {
|
|
char str[BUFSIZ];
|
|
|
|
sprintf(str,"Form Result(s) Posted from %s",pre_title);
|
|
|
|
return(mo_post_mailto_form_win(to_address,str));
|
|
}
|
|
else {
|
|
return(mo_post_mailto_form_win(to_address,subject));
|
|
}
|
|
}
|
|
|
|
if (!win->mailto_win)
|
|
{
|
|
Widget dialog_frame;
|
|
Widget dialog_sep, buttons_form;
|
|
Widget mailto_form;
|
|
Widget tolabel, sublabel, fromlabel;
|
|
|
|
/* Create it for the first time. */
|
|
XmxSetUniqid (win->id);
|
|
win->mailto_win = XmxMakeFormDialog
|
|
(win->base, "NCSA Mosaic: Mail To Author");
|
|
dialog_frame = XmxMakeFrame (win->mailto_win, XmxShadowOut);
|
|
|
|
/* Constraints for base. */
|
|
XmxSetConstraints
|
|
(dialog_frame, XmATTACH_FORM, XmATTACH_FORM,
|
|
XmATTACH_FORM, XmATTACH_FORM, NULL, NULL, NULL, NULL);
|
|
|
|
/* Main form. */
|
|
mailto_form = XmxMakeForm (dialog_frame);
|
|
|
|
XmxSetArg (XmNscrolledWindowMarginWidth, 10);
|
|
XmxSetArg (XmNscrolledWindowMarginHeight, 10);
|
|
XmxSetArg (XmNcursorPositionVisible, True);
|
|
XmxSetArg (XmNeditable, True);
|
|
XmxSetArg (XmNeditMode, XmMULTI_LINE_EDIT);
|
|
XmxSetArg (XmNrows, 15);
|
|
XmxSetArg (XmNcolumns, 80);
|
|
/* XmxSetArg (XmNwordWrap, True); */
|
|
/* XmxSetArg (XmNscrollHorizontal, False); */
|
|
win->mailto_text = XmxMakeScrolledText (mailto_form);
|
|
|
|
dialog_sep = XmxMakeHorizontalSeparator (mailto_form);
|
|
|
|
/* create from, to, and subject widgets */
|
|
fromlabel = XmxMakeLabel(mailto_form, "From:");
|
|
XmxSetArg (XmNeditable, False); /* for now, at least */
|
|
win->mailto_fromfield = XmxMakeTextField(mailto_form);
|
|
|
|
tolabel = XmxMakeLabel(mailto_form, "To:");
|
|
win->mailto_tofield = XmxMakeTextField(mailto_form);
|
|
|
|
sublabel = XmxMakeLabel(mailto_form, "Subject:");
|
|
win->mailto_subfield = XmxMakeTextField(mailto_form);
|
|
|
|
/* constraints for FROM */
|
|
XmxSetOffsets(fromlabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(fromlabel, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_FORM,
|
|
XmATTACH_NONE, NULL, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_fromfield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_fromfield, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, NULL, NULL, fromlabel, NULL);
|
|
|
|
/* constraints for TO */
|
|
XmxSetOffsets(tolabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(tolabel, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_NONE,
|
|
win->mailto_fromfield, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_tofield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_tofield, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, win->mailto_fromfield, NULL, tolabel, NULL);
|
|
|
|
/* constraints for SUBJECT */
|
|
XmxSetOffsets(sublabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(sublabel, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_FORM,
|
|
XmATTACH_NONE, win->mailto_tofield, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_subfield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_subfield, XmATTACH_WIDGET, XmATTACH_NONE,
|
|
XmATTACH_WIDGET, XmATTACH_FORM, win->mailto_tofield, NULL,
|
|
sublabel, NULL);
|
|
|
|
/* create buttons */
|
|
buttons_form = XmxMakeFormAndFiveButtons
|
|
(mailto_form, mailto_win_cb,
|
|
"Send", "Insert File", "Insert URL", "Dismiss", "Help...",
|
|
0, 3, 4, 1, 2);
|
|
|
|
XmxSetOffsets (XtParent (win->mailto_text), 3, 0, 3, 3);
|
|
XmxSetConstraints
|
|
(XtParent (win->mailto_text), XmATTACH_WIDGET, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, XmATTACH_FORM,
|
|
win->mailto_subfield, dialog_sep, NULL, NULL);
|
|
|
|
XmxSetArg (XmNtopOffset, 10);
|
|
XmxSetConstraints
|
|
(dialog_sep, XmATTACH_NONE, XmATTACH_WIDGET, XmATTACH_FORM,
|
|
XmATTACH_FORM,
|
|
NULL, buttons_form, NULL, NULL);
|
|
XmxSetConstraints
|
|
(buttons_form, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_FORM,
|
|
XmATTACH_FORM, NULL, NULL, NULL, NULL);
|
|
}
|
|
|
|
/* fill in text fields */
|
|
|
|
sprintf(namestr, "%s <%s>", get_pref_string(eDEFAULT_AUTHOR_NAME),
|
|
get_pref_string(eDEFAULT_AUTHOR_EMAIL));
|
|
|
|
XmxTextSetString (win->mailto_fromfield, namestr);
|
|
XmxTextSetString (win->mailto_tofield, to_address);
|
|
if (!subject || !*subject) {
|
|
char str[BUFSIZ];
|
|
|
|
sprintf(str,"Mail from %s",pre_title);
|
|
XmTextFieldSetString(win->mailto_subfield,str);
|
|
}
|
|
else {
|
|
XmTextFieldSetString(win->mailto_subfield,subject);
|
|
}
|
|
|
|
XmxTextSetString (win->mailto_text, "");
|
|
|
|
/* tack signature on the end if it exists - code from Martin Hamilton */
|
|
if (get_pref_string(eSIGNATURE)) {
|
|
XmxTextSetString (win->mailto_text, "\n\n");
|
|
/* leave a gap... */
|
|
XmTextSetInsertionPosition (win->mailto_text, 2);
|
|
if ((fp = fopen(get_pref_string(eSIGNATURE), "r")) != NULL) {
|
|
while(fgets(tmp, sizeof(tmp) - 1, fp)) {
|
|
XmTextInsert(win->mailto_text,
|
|
pos = XmTextGetInsertionPosition (win->mailto_text),
|
|
tmp);
|
|
XmTextSetInsertionPosition (win->mailto_text, pos + strlen(tmp));
|
|
}
|
|
fclose(fp);
|
|
} else {
|
|
XmxTextSetString (win->mailto_text, "");
|
|
}
|
|
|
|
}
|
|
XmTextSetInsertionPosition (win->mailto_text, 0);
|
|
|
|
XmxManageRemanage (win->mailto_win);
|
|
|
|
return mo_succeed;
|
|
}
|
|
|
|
|
|
void eatSpace(char *s) {
|
|
|
|
char *p,*p0;
|
|
|
|
for (p=s; *s; s++) {
|
|
if (isspace(*s)) {
|
|
*s=' '; /*Get rid of anything like TAB*/
|
|
p=(++s);
|
|
while (*s && isspace(*s)) s++;
|
|
if (!*s) {
|
|
*p='\0';
|
|
|
|
return;
|
|
}
|
|
if (s>p) {
|
|
for (p0=p;*s;s++,p++) *p=(*s);
|
|
*p='\0';
|
|
s=p0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
char *makeReadable(char *str, int condense) {
|
|
|
|
char *buf=NULL,*name=NULL,*val=NULL;
|
|
char *b=NULL;
|
|
|
|
b=strdup(str);
|
|
|
|
/*decode the encoded info (str) into name-value pairs*/
|
|
buf=(char *)calloc((strlen(b)*3),sizeof(char));
|
|
if (!buf) {
|
|
return(NULL);
|
|
}
|
|
sprintf(buf,"\n");
|
|
for(; (b && *b) ;) {
|
|
val = makeword(b,'&');
|
|
plustospace(val);
|
|
unescape_url(val);
|
|
name = makeword(val,'=');
|
|
if (condense) { /*take out all "multiple isspace()"*/
|
|
eatSpace(val);
|
|
}
|
|
sprintf(buf,"%sNAME=[%s]\nVALUE=[%s]\n\n",(buf && *buf?buf:"\n"),(name && *name?name:"(NULL)"),(val && *val?val:"(NULL)"));
|
|
if (val) {
|
|
free(val);
|
|
val=NULL;
|
|
}
|
|
if (name) {
|
|
free(name);
|
|
name=NULL;
|
|
}
|
|
}
|
|
|
|
free(b);
|
|
|
|
return(buf);
|
|
}
|
|
|
|
|
|
mo_status mo_post_mailto_form_win (char *to_address, char *subject)
|
|
{
|
|
mo_window *win = current_win;
|
|
FILE *fp;
|
|
long pos;
|
|
char namestr[1024],tmp[1024],*buf=NULL;
|
|
|
|
if (!do_post) {
|
|
return(mo_fail);
|
|
}
|
|
|
|
if (!win->mailto_form_win)
|
|
{
|
|
Widget dialog_frame;
|
|
Widget dialog_sep, buttons_form;
|
|
Widget mailto_form_form;
|
|
Widget tolabel, sublabel, fromlabel;
|
|
|
|
/* Create it for the first time. */
|
|
XmxSetUniqid (win->id);
|
|
win->mailto_form_win = XmxMakeFormDialog
|
|
(win->base, "NCSA Mosaic: Mail Form Results To Author");
|
|
dialog_frame = XmxMakeFrame (win->mailto_form_win, XmxShadowOut);
|
|
|
|
/* Constraints for base. */
|
|
XmxSetConstraints
|
|
(dialog_frame, XmATTACH_FORM, XmATTACH_FORM,
|
|
XmATTACH_FORM, XmATTACH_FORM, NULL, NULL, NULL, NULL);
|
|
|
|
/* Main form. */
|
|
mailto_form_form = XmxMakeForm (dialog_frame);
|
|
|
|
XmxSetArg (XmNscrolledWindowMarginWidth, 10);
|
|
XmxSetArg (XmNscrolledWindowMarginHeight, 10);
|
|
XmxSetArg (XmNcursorPositionVisible, True);
|
|
XmxSetArg (XmNeditable, False);
|
|
XmxSetArg (XmNeditMode, XmMULTI_LINE_EDIT);
|
|
XmxSetArg (XmNrows, 15);
|
|
XmxSetArg (XmNcolumns, 80);
|
|
XmxSetArg (XmNwordWrap, True);
|
|
XmxSetArg (XmNscrollHorizontal, False);
|
|
win->mailto_form_text = XmxMakeScrolledText (mailto_form_form);
|
|
|
|
dialog_sep = XmxMakeHorizontalSeparator (mailto_form_form);
|
|
|
|
/* create from, to, and subject widgets */
|
|
fromlabel = XmxMakeLabel(mailto_form_form, "From:");
|
|
XmxSetArg (XmNeditable, False);
|
|
win->mailto_form_fromfield = XmxMakeTextField(mailto_form_form);
|
|
|
|
tolabel = XmxMakeLabel(mailto_form_form, "To:");
|
|
XmxSetArg (XmNeditable, False);
|
|
win->mailto_form_tofield = XmxMakeTextField(mailto_form_form);
|
|
|
|
sublabel = XmxMakeLabel(mailto_form_form, "Subject:");
|
|
XmxSetArg (XmNeditable, False);
|
|
win->mailto_form_subfield = XmxMakeTextField(mailto_form_form);
|
|
|
|
/* constraints for FROM */
|
|
XmxSetOffsets(fromlabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(fromlabel, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_FORM,
|
|
XmATTACH_NONE, NULL, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_form_fromfield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_form_fromfield, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, NULL, NULL, fromlabel, NULL);
|
|
|
|
/* constraints for TO */
|
|
XmxSetOffsets(tolabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(tolabel, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_NONE,
|
|
win->mailto_form_fromfield, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_form_tofield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_form_tofield, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, win->mailto_form_fromfield, NULL, tolabel, NULL);
|
|
|
|
/* constraints for SUBJECT */
|
|
XmxSetOffsets(sublabel, 14, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(sublabel, XmATTACH_WIDGET, XmATTACH_NONE, XmATTACH_FORM,
|
|
XmATTACH_NONE, win->mailto_form_tofield, NULL, NULL, NULL);
|
|
XmxSetOffsets(win->mailto_form_subfield, 10, 10, 10, 10);
|
|
XmxSetConstraints
|
|
(win->mailto_form_subfield, XmATTACH_WIDGET, XmATTACH_NONE,
|
|
XmATTACH_WIDGET, XmATTACH_FORM, win->mailto_form_tofield, NULL,
|
|
sublabel, NULL);
|
|
|
|
/* create buttons */
|
|
buttons_form = XmxMakeFormAndThreeButtons
|
|
(mailto_form_form, mailto_form_win_cb,
|
|
"Send", "Dismiss", "Help...",
|
|
0, 1, 2);
|
|
|
|
XmxSetOffsets (XtParent (win->mailto_form_text), 3, 0, 3, 3);
|
|
XmxSetConstraints
|
|
(XtParent (win->mailto_form_text), XmATTACH_WIDGET, XmATTACH_WIDGET,
|
|
XmATTACH_FORM, XmATTACH_FORM,
|
|
win->mailto_form_subfield, dialog_sep, NULL, NULL);
|
|
|
|
XmxSetArg (XmNtopOffset, 10);
|
|
XmxSetConstraints
|
|
(dialog_sep, XmATTACH_NONE, XmATTACH_WIDGET, XmATTACH_FORM,
|
|
XmATTACH_FORM,
|
|
NULL, buttons_form, NULL, NULL);
|
|
XmxSetConstraints
|
|
(buttons_form, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_FORM,
|
|
XmATTACH_FORM, NULL, NULL, NULL, NULL);
|
|
}
|
|
|
|
/* fill in text fields */
|
|
|
|
sprintf(namestr, "%s <%s>", get_pref_string(eDEFAULT_AUTHOR_NAME),
|
|
get_pref_string(eDEFAULT_AUTHOR_EMAIL));
|
|
|
|
XmxTextSetString (win->mailto_form_fromfield, namestr);
|
|
XmxTextSetString (win->mailto_form_tofield, to_address);
|
|
if (subject != NULL)
|
|
XmTextFieldSetString(win->mailto_form_subfield,subject);
|
|
else
|
|
XmTextFieldSetString(win->mailto_form_subfield,"");
|
|
|
|
win->post_data=strdup(post_data);
|
|
|
|
buf=makeReadable(post_data,1);
|
|
XmTextSetString (win->mailto_form_text, buf);
|
|
if (buf) {
|
|
free(buf);
|
|
}
|
|
|
|
XmTextSetInsertionPosition (win->mailto_form_text, 0);
|
|
|
|
XmxManageRemanage (win->mailto_form_win);
|
|
|
|
return mo_succeed;
|
|
}
|
|
|
|
|
|
/* SWP -- 11.15.95 -- ACTION=mailto support for Forms */
|
|
void do_mailto_post(mo_window *win, char *to, char *from, char *subject, char *body) {
|
|
|
|
if (!win || !win->current_node || !win->current_node->url ||
|
|
!*(win->current_node->url) || !to || !*to || !from || !*from ||
|
|
!body || !*body || !subject || !*subject) {
|
|
return;
|
|
}
|
|
|
|
if (!strcmp(post_content_type,"text/plain")) {
|
|
|
|
char *buf=NULL;
|
|
|
|
buf=makeReadable(body,0);
|
|
|
|
#ifndef DISABLE_TRACE
|
|
if (srcTrace) {
|
|
fprintf(stderr,"To: [%s]\nFrom: [%s]\nSubj: [%s]\nBody: [%s]\n",to,from,subject,buf);
|
|
}
|
|
#endif
|
|
|
|
mo_send_mailto_message(buf, to, subject, post_content_type,
|
|
win->current_node->url);
|
|
|
|
if (buf) {
|
|
free(buf);
|
|
}
|
|
}
|
|
else {
|
|
#ifndef DISABLE_TRACE
|
|
if (srcTrace) {
|
|
fprintf(stderr,"To: [%s]\nFrom: [%s]\nSubj: [%s]\nBody: [%s]\n",to,from,subject,body);
|
|
}
|
|
#endif
|
|
|
|
mo_send_mailto_message(body, to, subject, post_content_type,
|
|
win->current_node->url);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
/* these are not currently used. We just use the functions in techsupport.c */
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
static FILE *_fp = NULL;
|
|
|
|
FILE *mo_start_sending_mailto_message (char *to, char *subj,
|
|
char *content_type, char *url)
|
|
{
|
|
char cmd[2048];
|
|
/* char *tmp;*/
|
|
|
|
if (!to)
|
|
return NULL;
|
|
|
|
if (get_pref_string(eMAIL_FILTER_COMMAND))
|
|
{
|
|
sprintf (cmd, "%s | %s", get_pref_string(eMAIL_FILTER_COMMAND),
|
|
get_pref_string(eSENDMAIL_COMMAND));
|
|
}
|
|
else
|
|
{
|
|
sprintf (cmd, "%s", get_pref_string(eSENDMAIL_COMMAND));
|
|
}
|
|
|
|
if ((_fp = popen (cmd, "w")) == NULL)
|
|
return NULL;
|
|
|
|
fprintf (_fp, "To: %s\n", to);
|
|
fprintf (_fp, "Subject: %s\n", subj);
|
|
fprintf (_fp, "Content-Type: %s\n", content_type);
|
|
fprintf (_fp, "Mime-Version: 1.0\n");
|
|
fprintf (_fp, "X-Mailer: NCSA Mosaic %s on %s\n",
|
|
MO_VERSION_STRING, MO_MACHINE_TYPE);
|
|
if (url)
|
|
fprintf (_fp, "X-URL: %s\n", url);
|
|
|
|
fprintf (_fp, "\n");
|
|
|
|
/* Stick in BASE tag as appropriate. */
|
|
if (url && content_type &&
|
|
strcmp (content_type, "text/x-html") == 0)
|
|
fprintf (_fp, "<base href=\"%s\">\n", url);
|
|
|
|
return _fp;
|
|
}
|
|
|
|
mo_status mo_finish_sending_mailto_message (void)
|
|
{
|
|
if (_fp)
|
|
pclose (_fp);
|
|
|
|
_fp = NULL;
|
|
|
|
return mo_succeed;
|
|
}
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
mo_status mo_send_mailto_message (char *text, char *to, char *subj,
|
|
char *content_type, char *url)
|
|
{
|
|
FILE *fp;
|
|
|
|
fp = mo_start_sending_mailto_message (to, subj, content_type, url);
|
|
if (!fp)
|
|
return mo_fail;
|
|
|
|
fputs (text, fp);
|
|
|
|
mo_finish_sending_mailto_message ();
|
|
|
|
return mo_succeed;
|
|
}
|