/* preferences.c */
#include "ml.h"
struct prefinfo {
char *name;
int type;
void *loc;
};
Boolean default_true = TRUE;
Boolean default_false = FALSE;
Menu preferences_menu[] = {
{ NULL, "accept", NUL_TERM,
pref_accept, NULL, 0, NULL, NULL, BTN_ON },
{ NULL, "cancel", NUL_TERM,
pref_cancel, NULL, 0, NULL, NULL, BTN_ON },
{ NULL, "HELP", NUL_TERM,
pref_help, NULL, 0, NULL, NULL, BTN_ON },
};
Menu preferences2_menu[] = {
{ NULL, "accept", NUL_TERM,
pref2_accept, NULL, 0, NULL, NULL, BTN_ON },
{ NULL, "cancel", NUL_TERM,
pref2_cancel, NULL, 0, NULL, NULL, BTN_ON },
{ NULL, "HELP", NUL_TERM,
pref2_help, NULL, 0, NULL, NULL, BTN_ON },
};
static XtResource x_resources[] = {
{ "defaultConfig","DefaultConfig",
XtRString, sizeof(char *),
XtOffset(Preferences*,defaultConfig),
XtRImmediate, (void*) DEFAULT_CONFIG
},
{ "smtp_server","Smtp_server",
XtRString, sizeof(char *),
XtOffset(Preferences*,smtp_server),
XtRImmediate, (void *) EMPTYSTR },
{ "nntp_server","Nntp_server",
XtRString, sizeof(char *),
XtOffset(Preferences*,nntp_server),
XtRImmediate, (void *) EMPTYSTR },
{ "default_domain","Default_domain",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_domain),
XtRImmediate, (void *) EMPTYSTR },
{ "default_cc","Default_cc",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_cc),
XtRImmediate, (void *) EMPTYSTR },
{ "default_bcc","Default_bcc",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_bcc),
XtRImmediate, (void *) EMPTYSTR },
{ "default_mailbox","Default_mailbox",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_mailbox),
XtRImmediate, (void*) INBOX },
{ "default_mailbox_pattern","Default_mailbox_pattern",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_mailbox_pattern),
XtRImmediate, (void*) MAILBOXDEFAULTPATTERN },
{ "default_file_pattern","Default_file_pattern",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_file_pattern),
XtRImmediate, (void*) FILEALLPATTERN },
{ "sendlog","Sendlog",
XtRString, sizeof(char *),
XtOffset(Preferences*,sendlog),
XtRImmediate, (void*) EMPTYSTR },
{ "netCheckCommand","NetCheckCommand",
XtRString, sizeof(char *),
XtOffset(Preferences*,netCheckCommand),
XtRImmediate, (void*) EMPTYSTR },
{ "netStartCommand","NetStartCommand",
XtRString, sizeof(char *),
XtOffset(Preferences*,netStartCommand),
XtRImmediate, (void*) EMPTYSTR },
{ "netCheckDelay", "NetCheckDelay",
XtRInt, sizeof(int),
XtOffset(Preferences*,netCheckDelay),
XtRString, (void*) DEFAULT_NETCHECK },
{ "header_set","Header_set",
XtRString, sizeof(char *),
XtOffset(Preferences*,header_set),
XtRImmediate, (void*) DEFAULTHEADERS },
{ "default_savebox","Default_savebox",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_savebox),
XtRImmediate, (void*) EMPTYSTR },
{ "default_action","Default_action",
XtRString, sizeof(char *),
XtOffset(Preferences*,default_action),
XtRImmediate, (void*) EMPTYSTR },
{ "viewline_format","Viewline_format",
XtRString, sizeof(char *),
XtOffset(Preferences*,viewline_format),
XtRImmediate, (void*) VIEWLINE_FORMAT_STR },
{ "attribution_format","Attribution_format",
XtRString, sizeof(char *),
XtOffset(Preferences*,attribution_format),
XtRImmediate, (void*) ATTRIBUTION_FORMAT_STR },
{ "url_command","Url_command",
XtRString, sizeof(char *),
XtOffset(Preferences*,url_command),
XtRImmediate, (void*) EMPTYSTR },
{ "newMailProg","NewMailProg",
XtRString, sizeof(char *),
XtOffset(Preferences*,newMailProg),
XtRImmediate, (void*) EMPTYSTR },
{ "folder_path","Folder_path",
XtRString, sizeof(char *),
XtOffset(Preferences*,folder_path),
XtRImmediate, (void*) INBOX },
{ "charset","Charset",
XtRString, sizeof(char *),
XtOffset(Preferences*,charset),
XtRImmediate, (void*) US_ASCII_STR },
{ "language","Language",
XtRString, sizeof(char *),
XtOffset(Preferences*,language),
XtRImmediate, (void*) EMPTYSTR },
{ "help_directory", "Help_directory",
XtRString, sizeof(char *),
XtOffset(Preferences*,help_directory),
XtRImmediate, (void*) DEFAULT_LIBDIR },
{ "mime_directory", "Mime_directory",
XtRString, sizeof(char *),
XtOffset(Preferences*,mime_directory),
XtRImmediate, (void*) DEFAULT_LIBDIR },
{ "ispellCommand", "IspellCommand",
XtRString, sizeof(char *),
XtOffset(Preferences*,ispellCommand),
XtRImmediate, (void*) ISPELL_COMMAND },
{ "smartReply", "SmartReply",
XtRString, sizeof(char *),
XtOffset(Preferences*,smart_reply),
XtRImmediate, (void*) EMPTYSTR },
{ "signature_file", "Signature_file",
XtRString, sizeof(char *),
XtOffset(Preferences*, signature_file),
XtRImmediate, (void *) EMPTYSTR },
{ "print_command", "Print_command",
XtRString, sizeof(char *),
XtOffset(Preferences*, print_command),
XtRImmediate, (void *) EMPTYSTR },
{ "reply_address", "Reply_address",
XtRString, sizeof(char *),
XtOffset(Preferences*,reply_address),
XtRImmediate, (void*) EMPTYSTR },
{ "reply_prefix", "Reply_prefix",
XtRString, sizeof(char *),
XtOffset(Preferences*,reply_prefix),
XtRImmediate, (void*) DEFAULTINSERT_STR },
{ "mail_sort", "Mail_sort",
XtRString, sizeof(char *),
XtOffset(Preferences*,mail_sort),
XtRImmediate, (void*) NORMALSTR },
{ "news_sort", "News_sort",
XtRString, sizeof(char *),
XtOffset(Preferences*,news_sort),
XtRImmediate, (void*) NORMALSTR },
{ "check_interval", "Check_interval",
XtRInt, sizeof(int),
XtOffset(Preferences*,check_interval),
XtRString, (void*) DEFAULT_RESOURCE_CHECK_INT },
{ "mail_prefetch", "Mail_prefetch",
XtRInt, sizeof(int),
XtOffset(Preferences*,mail_prefetch),
XtRString, (void*) DEFAULT_PREFETCH },
{ "news_prefetch", "News_prefetch",
XtRInt, sizeof(int),
XtOffset(Preferences*,news_prefetch),
XtRString, (void*) DEFAULT_PREFETCH },
{ "mail_background", "Mail_background",
XtRInt, sizeof(int),
XtOffset(Preferences*,mail_background),
XtRString, (void*) DEFAULT_BGTIME },
{ "news_background", "News_background",
XtRInt, sizeof(int),
XtOffset(Preferences*,news_background),
XtRString, (void*) DEFAULT_BGTIME },
{ "mail_fetch", "Mail_fetch",
XtRInt, sizeof(int),
XtOffset(Preferences*,mail_fetch),
XtRString, (void*) DEFAULT_FETCH },
{ "news_fetch", "News_fetch",
XtRInt, sizeof(int),
XtOffset(Preferences*,news_fetch),
XtRString, (void*) DEFAULT_FETCH },
{ "note_save", "Note_save",
XtRInt, sizeof(int),
XtOffset(Preferences*,note_save),
XtRString, (void*) DEFAULT_RESOURCE_NOTE_SAVE },
{ "auto_open", "Auto_open",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, auto_open),
XtRBoolean, (void*) &default_false },
{ "tear_off", "Tear_off",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, tear_off),
XtRBoolean, (void*) &default_false },
{ "mime_ask", "mime_ask",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, mime_ask),
XtRBoolean, (void*) &default_true },
{ "logit", "Logit",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, logit),
XtRBoolean, (void*) &default_false },
{ "useIspell", "UseIspell",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, useIspell),
XtRBoolean, (void*) &default_false },
{ "word_wrap", "Word_wrap",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, word_wrap),
XtRBoolean, (void*) &default_true },
{ "keep_open", "Keep_open",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, keep_open),
XtRBoolean, (void*) &default_false },
{ "developer_debug", "Developer_debug",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, developer_debug),
XtRBoolean, (void*) &default_false },
{ "hide_empty", "Hide_empty",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, hide_empty),
XtRBoolean, (void*) &default_false },
{ "local_defs", "Local_defs",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, local_defs),
XtRBoolean, (void*) &default_false },
{ "new_news", "New_news",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, new_news),
XtRBoolean, (void*) &default_false },
{ "send_eight", "Send_eight",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, send_eight),
XtRBoolean, (void*) &default_false },
{ "log_full", "Log_full",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, log_full),
XtRBoolean, (void*) &default_false },
{ "decode_all", "decode_all",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, decode_all),
XtRBoolean, (void*) &default_false },
{ "alert_new", "alert_new",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, alert_new),
XtRBoolean, (void*) &default_true },
{ "confirmDestroy", "ConfirmDestroy",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, confirmDestroy),
XtRBoolean, (void*) &default_true },
{ "keep_open", "keep_open",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, keep_open),
XtRBoolean, (void*) &default_false },
{ "newMailBeep", "NewMailBeep",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, newMailBeep),
XtRBoolean, (void*) &default_true },
{ "keepOnServer", "KeepOnServer",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, keepOnServer),
XtRBoolean, (void*) &default_false },
{ "autoPlace", "AutoPlace",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, autoPlace),
XtRBoolean, (void*) &default_true },
{ "showLog", "ShowLog",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, showLog),
XtRBoolean, (void*) &default_false },
{ "authLogin", "AuthLogin",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, authLogin),
XtRBoolean, (void*) &default_true },
{ "defaults_installed", "Defaults_installed",
XtRBoolean, sizeof (Boolean),
XtOffset(Preferences*, defaults_installed),
XtRBoolean, (void*) &default_false },
{ "defaults_version", "Defaults_version",
XtRString, sizeof(char *),
XtOffset(Preferences*,defaults_version),
XtRImmediate, (void*) NO_DEFAULTS_VERSION },
};
struct prefinfo prefs[] = {
{ "defaultConfig",
PREF_TYPE_STR,
&preferences.defaultConfig,
},
{ "smtp_server",
PREF_TYPE_STR,
&preferences.smtp_server,
},
{ "default_domain",
PREF_TYPE_STR,
&preferences.default_domain,
},
{ "folder_path",
PREF_TYPE_STR,
&preferences.folder_path,
},
{ "default_action",
PREF_TYPE_STR,
&preferences.default_action,
},
{ "default_cc",
PREF_TYPE_STR,
&preferences.default_cc,
},
{ "default_bcc",
PREF_TYPE_STR,
&preferences.default_bcc,
},
{ "sendlog",
PREF_TYPE_STR,
&preferences.sendlog,
},
{ "url_command",
PREF_TYPE_STR,
&preferences.url_command,
},
{ "newMailProg",
PREF_TYPE_STR,
&preferences.newMailProg,
},
{ "nntp_server",
PREF_TYPE_STR,
&preferences.nntp_server,
},
{ "default_mailbox",
PREF_TYPE_STR,
&preferences.default_mailbox,
},
{ "default_savebox",
PREF_TYPE_STR,
&preferences.default_savebox,
},
{ "help_directory",
PREF_TYPE_STR,
&preferences.help_directory,
},
{ "header_set",
PREF_TYPE_STR,
&preferences.header_set,
},
{ "viewline_format",
PREF_TYPE_STR,
&preferences.viewline_format,
},
{ "attribution_format",
PREF_TYPE_STR,
&preferences.attribution_format,
},
{ "mime_directory",
PREF_TYPE_STR,
&preferences.mime_directory,
},
{ "reply_address",
PREF_TYPE_STR,
&preferences.reply_address,
},
{ "print_command",
PREF_TYPE_STR,
&preferences.print_command,
},
{ "signature_file",
PREF_TYPE_STR,
&preferences.signature_file,
},
{ "charset",
PREF_TYPE_STR,
&preferences.charset,
},
{ "language",
PREF_TYPE_STR,
&preferences.language,
},
{ "mail_sort",
PREF_TYPE_STR,
&preferences.mail_sort,
},
{ "news_sort",
PREF_TYPE_STR,
&preferences.news_sort,
},
{ "check_interval",
PREF_TYPE_INT,
&preferences.check_interval,
},
{ "mail_prefetch",
PREF_TYPE_INT,
&preferences.mail_prefetch,
},
{ "news_prefetch",
PREF_TYPE_INT,
&preferences.news_prefetch,
},
{ "mail_background",
PREF_TYPE_INT,
&preferences.mail_background,
},
{ "news_background",
PREF_TYPE_INT,
&preferences.news_background,
},
{ "mail_fetch",
PREF_TYPE_INT,
&preferences.mail_fetch,
},
{ "news_fetch",
PREF_TYPE_INT,
&preferences.news_fetch,
},
{ "note_save",
PREF_TYPE_INT,
&preferences.note_save,
},
{ "smtp_debug",
PREF_TYPE_BOOL,
&preferences.smtp_debug,
},
{ "useIspell",
PREF_TYPE_BOOL,
&preferences.useIspell,
},
{ "auto_open",
PREF_TYPE_BOOL,
&preferences.auto_open,
},
{ "tear_off",
PREF_TYPE_BOOL,
&preferences.tear_off,
},
{ "mime_ask",
PREF_TYPE_BOOL,
&preferences.mime_ask,
},
{ "log_full",
PREF_TYPE_BOOL,
&preferences.log_full,
},
{ "send_eight",
PREF_TYPE_BOOL,
&preferences.send_eight,
},
{ "confirmDestroy",
PREF_TYPE_BOOL,
&preferences.confirmDestroy,
},
{ "decode_all",
PREF_TYPE_BOOL,
&preferences.decode_all,
},
{ "alert_new",
PREF_TYPE_BOOL,
&preferences.alert_new,
},
{ "developer_debug",
PREF_TYPE_BOOL,
&preferences.developer_debug,
},
{ "hide_empty",
PREF_TYPE_BOOL,
&preferences.hide_empty,
},
{ "keep_open",
PREF_TYPE_BOOL,
&preferences.keep_open,
},
{ "logit",
PREF_TYPE_BOOL,
&preferences.logit,
},
{ "word_wrap",
PREF_TYPE_BOOL,
&preferences.word_wrap,
},
{ "newMailBeep",
PREF_TYPE_BOOL,
&preferences.newMailBeep,
},
{ "keepOnServer",
PREF_TYPE_BOOL,
&preferences.keepOnServer,
},
{ "autoPlace",
PREF_TYPE_BOOL,
&preferences.autoPlace,
},
{ "showLog",
PREF_TYPE_BOOL,
&preferences.showLog,
},
{ "authLogin",
PREF_TYPE_BOOL,
&preferences.authLogin,
},
};
#ifdef __STDC__
int load_defaults(void)
#else
int load_defaults()
#endif
{
FILE * fp;
char * filename;
char buf[FILEBUFFLEN];
char *ptr;
int cnt;
char **t;
int *i;
Boolean *b;
float *f;
int total = XtNumber(prefs);
/* Put all string resources into allocated space */
for(cnt = 0; cnt < total; cnt ++)
if(prefs[cnt].type == PREF_TYPE_STR) {
t = (char **) prefs[cnt].loc;
*t = cpystr(*t);
}
filename = (char *) fs_get(strlen(session->cachedir)
+ strlen(PREFSFILE) + strlen(local_auth.hostname) + 8);
sprintf(filename,"%s/%s.%s", session->cachedir,
PREFSFILE, local_auth.hostname);
if((fp = fopen(filename,"r")) == NULL) {
sprintf(filename,"%s/%s", session->cachedir, PREFSFILE);
if((fp = fopen(filename,"r")) == NULL) {
/* One last try... */
sprintf(filename,"%s/%s",local_auth.homedir,OLDPREFSFILE);
if((fp = fopen(filename,"r")) == NULL) {
free(filename);
return(SYSCALL_FAILURE);
}
}
}
while((fgets(buf,sizeof(buf),fp)) != NULL) {
buf[strlen(buf)-1] = NUL_TERM;
/* skip over junk */
if(*buf == '#' || *buf == '!' || *buf == NUL_TERM)
continue;
if((strcmp(buf,BEGIN_ADDRESS_STR)) == STRMATCH) {
load_address_book(fp);
continue;
}
if((strcmp(buf,BEGIN_FILTER_STR)) == STRMATCH) {
load_filters(fp);
continue;
}
if((strcmp(buf,BEGIN_FILTER_MAP_STR)) == STRMATCH) {
load_filter_maps(fp);
continue;
}
if((strcmp(buf,BEGIN_SERVERS_STR)) == STRMATCH) {
load_server_tables(fp);
continue;
}
if((strcmp(buf,BEGIN_BUTTONS_STR)) == STRMATCH) {
load_button_tables(fp);
continue;
}
ptr = strchr(buf,COLONCHAR);
if(ptr == NULL)
continue;
*ptr = NUL_TERM;
ptr ++;
/* if no value is set,
* skip it, and allow the X defaults
* to override
*/
if(*ptr == NUL_TERM)
continue;
for(cnt = 0; cnt < total; cnt ++) {
if(strcmp(prefs[cnt].name,buf) != STRMATCH)
continue;
t = (char **) prefs[cnt].loc;
i = (int *) prefs[cnt].loc;
b = (Boolean *) prefs[cnt].loc;
f = (float *) prefs[cnt].loc;
switch(prefs[cnt].type) {
case PREF_TYPE_INT:
*i = atoi(ptr);
break;
case PREF_TYPE_STR:
while(isspace((*(unsigned char *)ptr)))
ptr ++;
free(*t);
*t = cpystr(ptr);
break;
case PREF_TYPE_BOOL:
while(isspace(*ptr))
ptr ++;
if((strcasecmp(ptr,MLGetLocalized(XtNstrTrue,StrTrue))) == STRMATCH)
*b = TRUE;
else
*b = FALSE;
break;
case PREF_TYPE_FLOAT:
*f = (float) atof(ptr);
break;
default:
break;
}
}
}
fclose(fp);
free(filename);
return(SYSCALL_SUCCESS);
}
#ifdef __STDC__
void save_defaults(void)
#else
void save_defaults()
#endif
{
FILE * fp;
char * filename;
char * backup;
int cnt;
char **t;
int *i;
Boolean *b;
float *f;
char *strue = MLGetLocalized(XtNstrTrue,StrTrue);
char *sfalse = MLGetLocalized(XtNstrFalse,StrFalse);
int total = XtNumber(prefs);
sane_defaults(); /* Don't save garbage */
filename = (char *) fs_get(strlen(session->cachedir)
+ strlen(PREFSFILE) + strlen(local_auth.hostname) + 8);
sprintf(filename,"%s/%s.%s", session->cachedir,
PREFSFILE, local_auth.hostname);
if(access(filename,W_OK))
sprintf(filename,"%s/%s", session->cachedir, PREFSFILE);
backup = (char *) fs_get(strlen(filename) + strlen(".bak") + 8);
strcpy(backup,filename);
strcat(backup,".bak");
rename(filename,backup);
fs_give((void **) &backup);
if((fp = fopen(filename,"w")) == NULL) {
mm_log(MLGetLocalized(XtNmsgPrefSaveFail,MsgPrefSaveFail),WARN);
free(filename);
return;
}
(void) chmod(filename,S_IRWXU);
fprintf(fp,"# ML Preferences:\n\n");
for(cnt = 0; cnt < total; cnt ++) {
t = (char **) prefs[cnt].loc;
i = (int *) prefs[cnt].loc;
b = (Boolean *) prefs[cnt].loc;
f = (float *) prefs[cnt].loc;
switch(prefs[cnt].type) {
case PREF_TYPE_INT:
fprintf(fp,"%s:\t\t%d\n",prefs[cnt].name,*i);
break;
case PREF_TYPE_STR:
fprintf(fp,"%s:\t\t%s\n",prefs[cnt].name,*t);
break;
case PREF_TYPE_BOOL:
fprintf(fp,"%s:\t\t%s\n",prefs[cnt].name,(*b)
? strue : sfalse);
break;
case PREF_TYPE_FLOAT:
fprintf(fp,"%s:\t\t%f\n",prefs[cnt].name,*f);
break;
default:
break;
}
}
save_address_book(fp);
save_filters(fp);
save_filter_maps(fp);
save_server_tables(fp);
if((fclose(fp)) == SYSCALL_SUCCESS)
mm_log(MLGetLocalized(XtNmsgPrefSaved,MsgPrefSaved),NIL);
else
mm_log(MLGetLocalized(XtNmsgPrefSaveFail,MsgPrefSaveFail),WARN);
free(filename);
return;
}
#ifdef __STDC__
void get_resources(Widget w)
#else
void get_resources(w)
Widget w;
#endif
{
XtGetApplicationResources(w,
(char*) &preferences,
x_resources,
XtNumber(x_resources),
NULL,
0);
return;
}
#ifdef __STDC__
void sane_defaults(void)
#else
void sane_defaults()
#endif
{
char buf[FILEBUFFLEN];
if(*(preferences.reply_address) == NUL_TERM) {
fs_give((void **) &preferences.reply_address);
sprintf(buf,"%s <%s@%s>",
local_auth.fullname,local_auth.username,local_auth.hostname);
preferences.reply_address = cpystr(buf);
}
if(*(preferences.smtp_server) == NUL_TERM) {
fs_give((void **) &preferences.smtp_server);
preferences.smtp_server = cpystr(local_auth.hostname);
}
if(*(preferences.folder_path) == NUL_TERM) {
fs_give((void **) &preferences.folder_path);
preferences.folder_path = cpystr(local_auth.homedir);
}
if(*(preferences.charset) == NUL_TERM) {
fs_give((void **) &preferences.charset);
preferences.charset = cpystr(US_ASCII_STR);
}
if(*(preferences.defaultConfig) == NUL_TERM) {
fs_give((void **) &preferences.defaultConfig);
preferences.defaultConfig = cpystr(MLGetLocalized(XtNstrDefault,
StrDefault));
}
reset_header_set();
if(session->servers == NULL)
set_default_server_config();
}
#ifdef __STDC__
void reset_header_set(void)
#else
void reset_header_set()
#endif
{
char **newset = NULL;
char *newstr = NULL;
if((preferences.header_set == NULL) || (*preferences.header_set == NUL_TERM))
return;
newset = init_array(preferences.header_set,&newstr);
if(newset == (char **) NULL)
return;
if(session->header_set != (char **) NULL) {
free((char *) session->header_set);
session->header_set = NULL;
}
session->header_set = newset;
if(session->header_str != NULL) {
free(session->header_str);
session->header_str = NULL;
}
session->header_str = newstr;
return;
}
#ifdef __STDC__
char **init_array(char *string, char **newstr)
#else
char ** init_array(string, newstr)
char * string;
char **newstr;
#endif
{
int number_entries = 0;
int valid = 0;
char * p;
char ** base = NULL;
if((string == NULL) || (*string == '\0'))
return((char **) NULL);
*newstr = cpystr(string);
/* calculate the number of entries we'll need
* by counting commas.
*/
for(p = *newstr; *p != '\0'; p ++) {
if(isalnum(*p))
valid = 1;
if(*p == ',')
number_entries ++;
}
if(valid)
number_entries ++;
if(!number_entries)
return((char **) NULL);
/* Grab some array space from memory */
base = (char **) fs_get((unsigned) (number_entries + 1) * sizeof(char *));
/* now parse the copy of the resource string,
* zeroing out whitespace and commas, and putting
* "words" into the array, i.e. anything starting
* with an alphanumeric character.
*/
p = *newstr;
number_entries = 0;
valid = 0;
while(*p != '\0') {
if( isspace(*p) || *p == ',') {
*p = '\0';
valid = 0;
p ++;
continue;
}
if(isalnum(*p)) {
if(valid == 0) {
valid = 1;
base[number_entries] = p;
number_entries ++;
}
p ++;
continue;
}
p++;
}
base[number_entries] = NULL;
return((char **) base);
}
#ifdef __STDC__
int load_filters(FILE *fp)
#else
int load_filters(fp)
FILE *fp;
#endif
{
char buffer[FILEBUFFLEN];
char *ptr;
Filter *prev = NULL;
Filter *filter;
while((fgets(buffer,sizeof(buffer),fp)) != NULL) {
buffer[strlen(buffer)-1] = '\0';
if((strcmp(buffer,END_FILTER_STR)) == STRMATCH)
return(0);
filter = new_filter();
filter->archived = TRUE;
filter->filter_type = FILTER_TYPE_USER;
filter->name = cpystr(buffer);
if(fgets(buffer,sizeof(buffer),fp)) {
buffer[strlen(buffer)-1] = '\0';
ptr = buffer;
if(*buffer == '/') {
filter->representation = sortstr_to_rep(buffer + 1);
ptr = strchr(buffer,SPACECHAR);
if(ptr)
ptr ++;
}
if(ptr)
filter->action = cpystr(ptr);
else
filter->action = cpystr(EMPTYSTR);
}
else
filter->action = cpystr(EMPTYSTR);
if(fgets(buffer,sizeof(buffer),fp)) {
buffer[strlen(buffer)-1] = '\0';
filter->text = cpystr(buffer);
}
else
filter->text = cpystr(EMPTYSTR);
if(*filter->text == NUL_TERM) {
free_filter(filter);
continue;
}
if(session->filters)
for(prev = session->filters; prev->next; prev = prev->next)
;
if(prev == NULL) {
session->filters = filter;
filter->prev = NULL;
}
else {
filter->prev = prev;
prev->next = filter;
}
}
return(0);
}
#ifdef __STDC__
int save_filters(FILE *fp)
#else
int save_filters(fp)
FILE *fp;
#endif
{
Filter *filter;
fprintf(fp,"\n%s\n",BEGIN_FILTER_STR);
for(filter = session->filters; filter; filter = filter->next) {
fprintf(fp,"%s\n",(filter->name) ? filter->name : EMPTYSTR);
fprintf(fp,"/%s %s\n",rep_to_sortstr(filter->representation),
(filter->action) ? filter->action : EMPTYSTR);
fprintf(fp,"%s\n",(filter->text) ? filter->text : EMPTYSTR);
}
fprintf(fp,"%s\n",END_FILTER_STR);
return(0);
}
#ifdef __STDC__
int save_filter_maps(FILE *fp)
#else
int save_filter_maps(fp)
FILE *fp;
#endif
{
Filter_Map *filter_map;
fprintf(fp,"\n%s\n",BEGIN_FILTER_MAP_STR);
for(filter_map = session->filter_map;
filter_map; filter_map = filter_map->next) {
fprintf(fp,"%s\n",(filter_map->mailboxname)
? filter_map->mailboxname : EMPTYSTR);
fprintf(fp,"%s\n",(filter_map->filename)
? filter_map->filename : EMPTYSTR);
}
fprintf(fp,"%s\n",END_FILTER_MAP_STR);
return(0);
}
#ifdef __STDC__
int load_filter_maps(FILE *fp)
#else
int load_filter_maps(fp)
FILE *fp;
#endif
{
char buffer[FILEBUFFLEN];
char *ptr = NULL;
Filter_Map *prev = NULL;
Filter_Map *filter_map;
while((fgets(buffer,sizeof(buffer),fp)) != NULL) {
buffer[strlen(buffer)-1] = '\0';
if((strcmp(buffer,END_FILTER_MAP_STR)) == STRMATCH)
return(0);
filter_map = new_filter_map();
filter_map->mailboxname = cpystr(buffer);
if(fgets(buffer,sizeof(buffer),fp)) {
buffer[strlen(buffer)-1] = '\0';
filter_map->filename = cpystr(buffer);
}
else
filter_map->filename = cpystr(EMPTYSTR);
ptr = strrchr(buffer,'.');
if(ptr) {
ptr ++;
filter_map->sequence = atoi(ptr);
}
if(session->filter_map)
for(prev = session->filter_map; prev->next; prev = prev->next)
;
if(prev == NULL)
session->filter_map = filter_map;
else
prev->next = filter_map;
}
return(0);
}
#ifdef __STDC__
int save_button_tables(FILE *fp)
#else
int save_button_tables(fp)
FILE *fp;
#endif
{
return(0);
}
#ifdef __STDC__
int load_button_tables(FILE *fp)
#else
int load_button_tables(fp)
FILE *fp;
#endif
{
char buffer[FILEBUFFLEN];
while((fgets(buffer,sizeof(buffer),fp)) != NULL) {
buffer[strlen(buffer)-1] = NUL_TERM;
if((strcmp(buffer,END_BUTTONS_STR)) == STRMATCH)
return(0);
}
}
XtResource Localized[] =
{
{ NULL, NULL, XtRString, sizeof(String), 0, XtRString, NULL },
};
#ifdef __STDC__
char *MLGetLocalized(char *Ntag,char *Fallback)
#else
char *MLGetLocalized(Ntag,Fallback)
char *Ntag;
char *Fallback;
#endif
{
String Result;
char *tmp = NULL;
Localized[0].resource_name = Ntag;
tmp = cpystr(Ntag);
tmp[0] = toupper(tmp[0]);
Localized[0].resource_class = tmp;
XtGetApplicationResources(session->shell, (XtPointer) &Result,
Localized, 1, NULL, 0);
free(tmp);
return((Result) ? Result : Fallback);
}
#ifdef __STDC__
void main_preferences(Widget w, XtPointer zilch, XtPointer xp)
#else
void main_preferences(w,zilch,xp)
Widget w;
XtPointer zilch;
XtPointer xp;
#endif
{
Arg args[ARGLISTSIZE];
int n = 0;
Widget form, menubar, label1, label2;
XtTranslations translations;
Prefst *prefst;
if(! session->prefst) {
prefst = (Prefst *) fs_get(sizeof(Prefst));
session->prefst = prefst;
prefst->is_realized = FALSE;
}
else
prefst = session->prefst;
if(prefst->is_realized == TRUE) {
de_iconify(prefst->shell);
return;
}
if(preferences.autoPlace == TRUE) {
XtSetArg(args[n], XtNx, -1000); n ++;
XtSetArg(args[n], XtNy, -1000); n ++;
}
XtSetArg (args[n], XmNdeleteResponse, XmDO_NOTHING); n ++;
prefst->shell = XtCreatePopupShell("prefs",
topLevelShellWidgetClass,
session->shell,
args, n);
n = 0;
AddDestroyCallback (prefst->shell);
setup_editres(prefst->shell);
if(ml_icon != (Pixmap) None)
XtVaSetValues(prefst->shell,
XmNiconPixmap,ml_icon,
NULL);
form = XmCreateForm(prefst->shell, "form", args, n ); n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++;
menubar = XmCreateMenuBar(form, "menubar", args, n); n = 0;
XtManageChild(menubar);
create_buttons(NULL, menubar, preferences_menu,
XtNumber(preferences_menu),
BTN_ON, (XtPointer) prefst,
ROOTMENULEVEL);
label1 = create_label(form,menubar,"mailconfig_lbl");
prefst->confname =
create_text_field(form, label1,
"confname",
preferences.defaultConfig,
0, NULL, NULL);
prefst->prntcmd =
create_text_field(form, prefst->confname,
"prntcmd",
preferences.print_command,
0, NULL, NULL);
prefst->fldrpath =
create_text_field(form, prefst->prntcmd,
"fldrpath",
preferences.folder_path,
0, NULL, NULL);
prefst->helpdir =
create_text_field(form, prefst->fldrpath,
"helpdir",
preferences.help_directory,
0, NULL, NULL);
prefst->mimedir =
create_text_field(form, prefst->helpdir,
"mimedir",
preferences.mime_directory,
0, NULL, NULL);
prefst->savebox =
create_text_field(form, prefst->mimedir,
"savebox",
preferences.default_savebox,
0, NULL, NULL);
prefst->charset =
create_text_field(form, prefst->savebox,
"charset",
preferences.charset,
0, NULL, NULL);
prefst->headset =
create_text_field(form, prefst->charset,
"headset",
preferences.header_set,
0, NULL, NULL);
prefst->viewline =
create_text_field(form, prefst->headset,
"viewline",
preferences.viewline_format,
0, NULL, NULL);
prefst->attribution =
create_text_field(form, prefst->viewline,
"attribution",
preferences.attribution_format,
0, NULL, NULL);
prefst->dflact =
create_text_field(form, prefst->attribution,
"dflact",
preferences.default_action,
0, NULL, NULL);
prefst->urlcomm =
create_text_field(form, prefst->dflact,
"urlcomm",
preferences.url_command,
0, NULL, NULL );
prefst->newmail =
create_text_field(form, prefst->urlcomm,
"newmail",
preferences.newMailProg,
0, NULL, NULL );
XtManageChild(form);
XtManageChild(prefst->shell);
XtPopup(prefst->shell, XtGrabNone);
position_popup_widget(prefst->shell, FALSE);
prefst->is_realized = TRUE;
return;
}
#ifdef __STDC__
void main_more_preferences(Widget w, XtPointer zilch, XtPointer xp)
#else
void main_more_preferences(w,zilch,xp)
Widget w;
XtPointer zilch;
XtPointer xp;
#endif
{
Arg args[ARGLISTSIZE];
char tmp[FILEBUFFLEN];
XtTranslations translations;
char *strue = MLGetLocalized(XtNstrTrue,StrTrue);
char *sfalse = MLGetLocalized(XtNstrFalse,StrFalse);
int n = 0;
Widget form, menubar, label1, label2, label3;
Pref2st *pref2st;
if(! session->pref2st) {
pref2st = (Pref2st *) fs_get(sizeof(Pref2st));
session->pref2st = pref2st;
pref2st->is_realized = FALSE;
}
else
pref2st = session->pref2st;
if(pref2st->is_realized == TRUE) {
de_iconify(pref2st->shell);
return;
}
if(preferences.autoPlace == TRUE) {
XtSetArg(args[n], XtNx, -1000); n ++;
XtSetArg(args[n], XtNy, -1000); n ++;
}
XtSetArg (args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
pref2st->shell = XtCreatePopupShell("prefs",
topLevelShellWidgetClass,
session->shell,
args, n);
n = 0;
AddDestroyCallback (pref2st->shell);
setup_editres(pref2st->shell);
if(ml_icon != (Pixmap) None)
XtVaSetValues(pref2st->shell,
XmNiconPixmap,ml_icon,
NULL);
form = XmCreateForm(pref2st->shell, "form", args, n ); n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++;
menubar = XmCreateMenuBar(form, "menubar", args, n); n = 0;
XtManageChild(menubar);
create_buttons(NULL, menubar, preferences2_menu,
XtNumber(preferences2_menu),
BTN_ON, (XtPointer) pref2st,
ROOTMENULEVEL);
sprintf(tmp,"%u",preferences.check_interval);
pref2st->check =
create_text_field(form, menubar,
"check",
tmp,
0, NULL, NULL);
sprintf(tmp,"%u",preferences.note_save);
pref2st->notesave =
create_text_field(form, pref2st->check,
"notesave",
tmp,
0, NULL, NULL);
label1 = create_label(form, pref2st->notesave,"prefetch_lbl");
sprintf(tmp,"%u", preferences.mail_prefetch);
pref2st->mailfetch =
create_text_field(form, label1,
"mailfetch",
tmp,
0, NULL, NULL );
sprintf(tmp,"%u", preferences.mail_fetch);
pref2st->mailcnt =
create_text_field(form, pref2st->mailfetch,
"mailcnt",
tmp,
0, NULL, NULL );
sprintf(tmp,"%u", preferences.mail_background);
pref2st->mailtime =
create_text_field(form, pref2st->mailcnt,
"mailtime",
tmp,
0, NULL, NULL );
sprintf(tmp,"%u", preferences.news_prefetch);
pref2st->newsfetch =
create_text_field(form, pref2st->mailtime,
"newsfetch",
tmp,
0, NULL, NULL );
sprintf(tmp,"%u", preferences.news_fetch);
pref2st->newscnt =
create_text_field(form, pref2st->newsfetch,
"newscnt",
tmp,
0, NULL, NULL );
sprintf(tmp,"%u", preferences.news_background);
pref2st->newstime =
create_text_field(form, pref2st->newscnt,
"newstime",
tmp,
0, NULL, NULL );
label2 = create_label(form,pref2st->newstime,"sorts_lbl");
pref2st->mailsort =
create_text_field(form, label2,
"mailsort",
preferences.mail_sort,
0, NULL, NULL );
pref2st->newssort =
create_text_field(form, pref2st->mailsort,
"newssort",
preferences.news_sort,
0, NULL, NULL );
label3 = create_label(form, pref2st->newssort,"toggles_lbl");
sprintf(tmp,"%s", (preferences.auto_open == TRUE) ? strue : sfalse );
pref2st->aopen =
create_text_field(form, label3,
"aopen",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.useIspell == TRUE) ? strue : sfalse );
pref2st->ispell =
create_text_field(form, pref2st->aopen,
"ispell",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.tear_off == TRUE) ? strue : sfalse );
pref2st->tearoff =
create_text_field(form, pref2st->ispell,
"tearoff",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.mime_ask == TRUE) ? strue : sfalse );
pref2st->mimeask =
create_text_field(form, pref2st->tearoff,
"mimeask",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.decode_all == TRUE) ? strue : sfalse );
pref2st->decodeall =
create_text_field(form, pref2st->mimeask,
"decodeall",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.alert_new == TRUE) ? strue : sfalse );
pref2st->alert_new =
create_text_field(form, pref2st->decodeall,
"alertnew",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.newMailBeep == TRUE) ? strue : sfalse );
pref2st->newMailBeep =
create_text_field(form, pref2st->alert_new,
"mailbeep",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.keepOnServer == TRUE) ? strue : sfalse );
pref2st->keepOnServer =
create_text_field(form, pref2st->newMailBeep,
"keeponserver",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.autoPlace == TRUE) ? strue : sfalse );
pref2st->autoPlace =
create_text_field(form, pref2st->keepOnServer,
"autoplace",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.showLog == TRUE) ? strue : sfalse );
pref2st->showLog =
create_text_field(form, pref2st->autoPlace,
"showlog",
tmp,
0, NULL, NULL);
sprintf(tmp,"%s", (preferences.hide_empty == TRUE) ? strue : sfalse );
pref2st->hideview =
create_text_field(form, pref2st->showLog,
"hideview",
tmp,
0, (XtPointer) pref2_accept, (XtPointer) pref2st);
XtManageChild(form);
XtManageChild(pref2st->shell);
XtPopup(pref2st->shell, XtGrabNone);
position_popup_widget(pref2st->shell, FALSE);
pref2st->is_realized = TRUE;
return;
}
#ifdef __STDC__
void pref_accept(Widget w, Prefst *prefst, XtPointer xp)
#else
void pref_accept(w,prefst,xp)
Widget w;
Prefst *prefst;
XtPointer xp;
#endif
{
XtPopdown(prefst->shell);
push_cursor(WATCH_CURSOR);
fs_give((void **) &preferences.defaultConfig);
preferences.defaultConfig = GetTextField(prefst->confname);
fs_give((void **) &preferences.print_command);
preferences.print_command = GetTextField(prefst->prntcmd);
fs_give((void **) &preferences.folder_path);
preferences.folder_path = GetTextField(prefst->fldrpath);
fs_give((void **) &preferences.help_directory);
preferences.help_directory = GetTextField(prefst->helpdir);
fs_give((void **) &preferences.mime_directory);
preferences.mime_directory = GetTextField(prefst->mimedir);
fs_give((void **) &preferences.default_savebox);
preferences.default_savebox = GetTextField(prefst->savebox);
fs_give((void **) &preferences.charset);
preferences.charset = GetTextField(prefst->charset);
fs_give((void **) &preferences.header_set);
preferences.header_set = GetTextField(prefst->headset);
fs_give((void **) &preferences.viewline_format);
preferences.viewline_format = GetTextField(prefst->viewline);
fs_give((void **) &preferences.attribution_format);
preferences.attribution_format = GetTextField(prefst->attribution);
fs_give((void **) &preferences.default_action);
preferences.default_action = GetTextField(prefst->dflact);
fs_give((void **) &preferences.url_command);
preferences.url_command = GetTextField(prefst->urlcomm);
fs_give((void **) &preferences.newMailProg);
preferences.newMailProg = GetTextField(prefst->newmail);
save_defaults();
XtDestroyWidget(prefst->shell);
prefst->is_realized = FALSE;
pop_cursor();
return;
}
#ifdef __STDC__
void pref2_accept(Widget w, Pref2st *pref2st, XtPointer xp)
#else
void pref2_accept(w,pref2st,xp)
Widget w;
Pref2st *pref2st;
XtPointer xp;
#endif
{
char *tmp;
unsigned long n = 0;
char *strue = MLGetLocalized(XtNstrTrue,StrTrue);;
XtPopdown(pref2st->shell);
push_cursor(WATCH_CURSOR);
tmp = GetTextField(pref2st->check);
n = atoi(tmp);
preferences.check_interval = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->notesave);
n = atoi(tmp);
preferences.note_save = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->mailfetch);
n = atoi(tmp);
preferences.mail_prefetch = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->mailcnt);
n = atoi(tmp);
if(n > 0)
preferences.mail_fetch = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->mailtime);
n = atoi(tmp);
if(n > 0)
preferences.mail_background = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->newsfetch);
n = atoi(tmp);
preferences.news_prefetch = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->newscnt);
n = atoi(tmp);
if(n > 0)
preferences.news_fetch = n;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->newstime);
n = atoi(tmp);
if(n > 0)
preferences.news_background = n;
fs_give((void **) &tmp);
fs_give((void **) &preferences.mail_sort);
preferences.mail_sort = GetTextField(pref2st->mailsort);
fs_give((void **) &preferences.news_sort);
preferences.news_sort = GetTextField(pref2st->newssort);
tmp = GetTextField(pref2st->aopen);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.auto_open = TRUE;
else
preferences.auto_open = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->ispell);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.useIspell = TRUE;
else
preferences.useIspell = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->tearoff);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.tear_off = TRUE;
else
preferences.tear_off = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->mimeask);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.mime_ask = TRUE;
else
preferences.mime_ask = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->decodeall);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.decode_all = TRUE;
else
preferences.decode_all = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->alert_new);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.alert_new = TRUE;
else
preferences.alert_new = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->newMailBeep);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.newMailBeep = TRUE;
else
preferences.newMailBeep = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->keepOnServer);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.keepOnServer = TRUE;
else
preferences.keepOnServer = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->autoPlace);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.autoPlace = TRUE;
else
preferences.autoPlace = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->showLog);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.showLog = TRUE;
else
preferences.showLog = FALSE;
fs_give((void **) &tmp);
tmp = GetTextField(pref2st->hideview);
if((strcasecmp(tmp,strue)) == STRMATCH)
preferences.hide_empty = TRUE;
else
preferences.hide_empty = FALSE;
fs_give((void **) &tmp);
save_defaults();
XtDestroyWidget(pref2st->shell);
pref2st->is_realized = FALSE;
pop_cursor();
return;
}
#ifdef __STDC__
void pref_cancel(Widget w, Prefst *prefst, XtPointer xp)
#else
void pref_cancel(w,prefst,xp)
Widget w;
Prefst *prefst;
XtPointer xp;
#endif
{
XtPopdown(prefst->shell);
XtDestroyWidget(prefst->shell);
prefst->is_realized = FALSE;
return;
}
#ifdef __STDC__
void pref2_cancel(Widget w, Pref2st *pref2st, XtPointer xp)
#else
void pref2_cancel(w,pref2st,xp)
Widget w;
Pref2st *pref2st;
XtPointer xp;
#endif
{
XtPopdown(pref2st->shell);
XtDestroyWidget(pref2st->shell);
pref2st->is_realized = FALSE;
return;
}
#ifdef __STDC__
void pref_help(Widget w, Prefst *prefst, XtPointer xp)
#else
void pref_help(w,prefst,xp)
Widget w;
Prefst *prefst;
XtPointer xp;
#endif
{
help(session->shell,PREFSHELPFILE);
return;
}
#ifdef __STDC__
void pref2_help(Widget w, Pref2st *pref2st, XtPointer xp)
#else
void pref2_help(w,pref2st,xp)
Widget w;
Pref2st *pref2st;
XtPointer xp;
#endif
{
help(session->shell,PREFS2HELPFILE);
return;
}
syntax highlighted by Code2HTML, v. 0.9.1