static char rcsid[] = "@(#)$Id: a_quit.c,v 1.20 2006/04/09 07:37:17 hurtta Exp $";
/******************************************************************************
* The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtta+elm@posti.FMI.FI>
* (was hurtta+elm@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** a_quit: leave the aliases menu and return to the main menu.
**/
#include "def_elm.h"
#include "s_aliases.h"
DEBUG_VAR(Debug,__FILE__,"alias");
#include <errno.h>
#ifndef ANSI_C
extern int errno; /* system error number on failure */
#endif
int delete_aliases(newaliases, prompt, aview, page, prompt_area)
int newaliases, prompt;
struct AliasView *aview;
struct menu_context * page;
struct menu_context * prompt_area;
{
/*
* Update aliases by processing deletions. Prompting is
* done as directed by user input and elmrc options.
*
* If "prompt" is false, then no prompting is done.
* Otherwise prompting is dependent upon the variable
* question_me, as set by an elmrc option. This behavior
* makes the 'q' command prompt just like '$', while
* retaining the 'Q' command for a quick exit that never
* prompts.
*
* Return 1 Aliases were deleted
* newalias Aliases were not deleted
* -1 Interrupted witn Ctrl-C
*
* The return allows the caller to determine if the "newalias"
* routine should be run.
*/
char buffer[SLEN];
char **list;
int to_delete = 0, to_keep = 0, i, marked_deleted = 0, ask_questions;
int answer;
int ac = get_alias_count(aview);
DPRINT(Debug,1,
(&Debug, "\n\n-- leaving aliases --\n\n"));
if (ac == 0)
return(newaliases); /* nothing changed */
ask_questions = ((!prompt) ? FALSE : question_me);
/* YES or NO on softkeys */
/*
if (hp_softkeys && ask_questions) {
define_softkeys(YESNO);
softkeys_on();
}
*/
/* Determine if deleted messages are really to be deleted */
/* we need to know how many there are to delete */
for (i=0; i<ac; i++) {
struct alias_rec *a = give_alias (aview,i);
if (a &&
ison(a->status, DELETED))
marked_deleted++;
}
DPRINT(Debug,4,(&Debug,
"Number of aliases marked deleted = %d\n",
marked_deleted));
if(marked_deleted) {
answer = (always_del ? *def_ans_yes : *def_ans_no); /* default answer */
if(ask_questions) {
int def = answer;
if (marked_deleted == 1)
answer = prompt_letter(0,"",def,
PROMPT_yesno|PROMPT_cancel,
prompt_area,
CATGETS(elm_msg_cat, AliasesSet, AliasesDelete,
"Delete 1 alias? (%c/%c) "),
*def_ans_yes, *def_ans_no);
else
answer = prompt_letter(0,"",def,
PROMPT_yesno|PROMPT_cancel,
prompt_area,
CATGETS(elm_msg_cat, AliasesSet,
AliasesDeletePlural,
"Delete %d aliases? (%c/%c) "),
marked_deleted, *def_ans_yes, *def_ans_no);
if (TERMCH_interrupt_char == answer) {
return -1;
}
}
if(answer == *def_ans_yes) {
list = (char **) safe_malloc(marked_deleted*sizeof(*list));
for (i = 0; i < ac; i++) {
struct alias_rec *a = give_alias (aview,i);
if (a &&
ison(a->status, DELETED)) {
list[to_delete] = a->alias;
DPRINT(Debug,8,(&Debug,
"Alias number %d, %s is deletion %d\n",
i, list[to_delete], to_delete));
to_delete++;
}
else {
to_keep++;
}
}
/*
* Formulate message as to number of keeps and deletes.
* This is only complex so that the message is good English.
*/
if (to_keep > 0) {
set_alias_current(aview,1); /* Reset current alias */
if (to_keep == 1)
elm_sfprintf(buffer, sizeof buffer,
CATGETS(elm_msg_cat, AliasesSet,
AliasesKeepDelete,
"[Keeping 1 alias and deleting %d.]"),
to_delete);
else
elm_sfprintf(buffer, sizeof buffer,
CATGETS(elm_msg_cat, AliasesSet,
AliasesKeepDeletePlural,
"[Keeping %d aliases and deleting %d.]"),
to_keep, to_delete);
}
else {
set_alias_current(aview,0); /* No aliases left */
elm_sfprintf(buffer, sizeof buffer,
CATGETS(elm_msg_cat, AliasesSet, AliasesDeleteAll,
"[Deleting all aliases.]"));
}
DPRINT(Debug,2,(&Debug,
"Action: %s\n", buffer));
error(buffer);
delete_from_alias_text(list, to_delete);
free((char *) list);
}
}
DPRINT(Debug,3,(&Debug,
"Aliases deleted: %d\n", to_delete));
/* If all aliases are to be kept we don't need to do anything
* (like run newalias for the deleted messages).
*/
if(to_delete == 0) {
DPRINT(Debug,3,(&Debug,
"Aliases kept as is!\n"));
return(newaliases);
}
return(1);
}
void exit_alias(aview)
struct AliasView *aview;
{
int i;
int ac = get_alias_count(aview);
/* Clear the deletes from all aliases. */
for(i = 0; i < ac; i++) {
struct alias_rec *a = give_alias(aview,i);
if (a &&
ison(a->status, DELETED))
clearit(a->status, DELETED);
}
DPRINT(Debug,5,
(&Debug, "\nexit_alias: Done clearing deletes.\n"));
}
/*
* Local Variables:
* mode:c
* c-basic-offset:4
* buffer-file-coding-system: iso-8859-1
* End:
*/
syntax highlighted by Code2HTML, v. 0.9.1