New command -msg_op

This commit is contained in:
2012-12-08 17:55:58 +00:00
parent 0acd13b5c0
commit 3c1b78af43
14 changed files with 593 additions and 138 deletions

View File

@ -838,6 +838,146 @@ unknown_mode:;
}
/* Command -msg_op */
int Xorriso_option_msg_op(struct XorrisO *xorriso, char *what, char *arg,
int flag)
{
int ret, available, argc, pargc, i, pflag, max_words, input_lines, l, msd_mem;
char **argv= NULL, **pargv= NULL, *msg= "";
char *pline= NULL, *prefix, *separators;
msd_mem= xorriso->msg_sieve_disabled;
Xorriso_alloc_meM(pline, char, SfileadrL);
ret= 1;
if(strcmp(what, "parse") == 0) {
ret= Xorriso_parse_line(xorriso, arg, "", "", 4, &argc, &argv, 0);
prefix= "";
if(argc > 0)
prefix= argv[0];
separators= "";
if(argc > 1)
separators= argv[1];
max_words= 0;
if(argc > 2)
sscanf(argv[2], "%d", &max_words);
pflag= 0;
if(argc > 3)
sscanf(argv[3], "%d", &pflag);
input_lines= 1;
if(argc > 4)
sscanf(argv[4], "%d", &input_lines);
if(input_lines > 1)
sprintf(xorriso->info_text, "-msg_op parse: Enter %d lines of text\n",
input_lines);
else
sprintf(xorriso->info_text, "-msg_op parse: Enter text line\n");
Xorriso_info(xorriso, 0);
pline[0]= 0;
for(i= 0; i < input_lines; i++) {
l= strlen(pline);
ret= Xorriso_dialog_input(xorriso, pline + l, SfileadrL - l - 1, 8);
if(ret <= 0)
goto ex;
if(i < input_lines - 1)
strcat(pline, "\n");
}
sprintf(xorriso->info_text, "-msg_op parse: Text input complete\n");
Xorriso_info(xorriso, 0);
ret= Xorriso_parse_line(xorriso, pline, prefix, separators, max_words,
&pargc, &pargv, pflag);
xorriso->msg_sieve_disabled= 1;
sprintf(xorriso->result_line, "%d\n", ret);
Xorriso_result(xorriso, 1);
if(ret == 1) {
sprintf(xorriso->result_line, "%d\n", pargc);
Xorriso_result(xorriso, 1);
for(i= 0; i < pargc; i++) {
ret= Sfile_count_char(pargv[i], '\n') + 1;
sprintf(xorriso->result_line, "%d\n", ret);
Xorriso_result(xorriso, 1);
Sfile_str(xorriso->result_line, pargv[i], 0);
strcat(xorriso->result_line, "\n");
Xorriso_result(xorriso, 1);
}
} else {
sprintf(xorriso->result_line, "0\n");
Xorriso_result(xorriso, 1);
}
xorriso->msg_sieve_disabled= msd_mem;
Xorriso__dispose_words(&argc, &argv);
Xorriso__dispose_words(&pargc, &pargv);
} else if(strcmp(what, "start_sieve") == 0) {
Xorriso_sieve_dispose(xorriso, 0);
ret= Xorriso_sieve_big(xorriso, 0);
msg= "Message sieve enabled";
/* >>> } else if(strcmp(what, "add_filter_rule") == 0) { */;
} else if(strcmp(what, "clear_sieve") == 0) {
ret= Xorriso_sieve_clear_results(xorriso, 0);
msg= "Recorded message sieve results disposed";
} else if(strcmp(what, "end_sieve") == 0) {
ret= Xorriso_sieve_dispose(xorriso, 0);
msg= "Message sieve disabled";
} else if(strcmp(what, "read_sieve") == 0) {
ret= Xorriso_sieve_get_result(xorriso, arg, &pargc, &pargv, &available, 0);
xorriso->msg_sieve_disabled= 1;
sprintf(xorriso->result_line, "%d\n", ret);
Xorriso_result(xorriso, 1);
if(ret > 0) {
sprintf(xorriso->result_line, "%d\n", pargc);
Xorriso_result(xorriso, 1);
for(i= 0; i < pargc; i++) {
ret= Sfile_count_char(pargv[i], '\n') + 1;
sprintf(xorriso->result_line, "%d\n", ret);
Xorriso_result(xorriso, 1);
Sfile_str(xorriso->result_line, pargv[i], 0);
strcat(xorriso->result_line, "\n");
Xorriso_result(xorriso, 1);
}
} else {
strcpy(xorriso->result_line, "0\n");
Xorriso_result(xorriso, 1);
available= 0;
}
sprintf(xorriso->result_line, "%d\n", available);
Xorriso_result(xorriso, 1);
xorriso->msg_sieve_disabled= msd_mem;
Xorriso__dispose_words(&pargc, &pargv);
ret= 1;
} else if(strcmp(what, "show_sieve") == 0) {
ret= Xorriso_sieve_get_result(xorriso, "", &pargc, &pargv, &available, 8);
xorriso->msg_sieve_disabled= 1;
sprintf(xorriso->result_line, "%d\n", ret);
Xorriso_result(xorriso, 1);
if(ret > 0) {
sprintf(xorriso->result_line, "%d\n", pargc);
Xorriso_result(xorriso, 1);
for(i= 0; i < pargc; i++) {
sprintf(xorriso->result_line, "%s\n", pargv[i]);
Xorriso_result(xorriso, 1);
}
}
xorriso->msg_sieve_disabled= msd_mem;
Xorriso__dispose_words(&pargc, &pargv);
} else {
sprintf(xorriso->info_text, "-msg_op: unknown operation '%s'", what);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
ret= 0;
}
if(ret > 0 && msg[0])
Xorriso_msgs_submit(xorriso, 0, msg, 0, "NOTE", 0);
ex:;
xorriso->msg_sieve_disabled= msd_mem;
Xorriso_free_meM(pline);
return(ret);
}
/* Option -mv alias -mvi */
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)