New -msg_op opcode "parse_bulk"

This commit is contained in:
2012-12-16 13:12:15 +00:00
parent 2266a5dd1b
commit e01ce72edb
7 changed files with 186 additions and 53 deletions

View File

@ -3545,3 +3545,131 @@ int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
return(1);
}
/* @param flag bit0= do not issue prompt messages on info channel
bit1= use line rather than asking at dialog input
*/
int Xorriso_msg_op_parse(struct XorrisO *xorriso, char *line,
char *prefix, char *separators,
int max_words, int pflag, int input_lines,
int flag)
{
int ret, i, l, pargc= 0;
char *pline= NULL, **pargv= NULL, *parse_line;
Xorriso_alloc_meM(pline, char, SfileadrL);
if(!(flag & 1)) {
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);
}
if(flag & 2) {
parse_line= line;
} else {
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");
}
parse_line= pline;
}
ret= Xorriso_parse_line(xorriso, parse_line, 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);
}
ret= 1;
ex:;
Xorriso__dispose_words(&pargc, &pargv);
Xorriso_free_meM(pline);
return ret;
}
int Xorriso_msg_op_parse_bulk(struct XorrisO *xorriso,
char *prefix, char *separators,
int max_words, int pflag, int bulk_lines,
int flag)
{
int ret, input_lines, i, j, l;
char line[80];
struct Xorriso_lsT *input_list= NULL, *input_end= NULL, *new_lst, *lst;
char *pline= NULL;
sprintf(xorriso->info_text,
"Enter %d groups of lines. Each group begins by a line which tells the\n",
bulk_lines);
Xorriso_info(xorriso, 0);
sprintf(xorriso->info_text,
"number of following lines in the group. Then come the announced lines\n");
Xorriso_info(xorriso, 0);
sprintf(xorriso->info_text,
"Do this blindly. No further prompt will appear. Best be a computer.\n");
Xorriso_info(xorriso, 0);
Xorriso_alloc_meM(pline, char, SfileadrL);
for(i= 0; i < bulk_lines; i++) {
ret= Xorriso_dialog_input(xorriso, line, sizeof(line), 8);
if(ret <= 0)
goto ex;
input_lines= -1;
sscanf(line, "%d", &input_lines);
pline[0]= 0;
for(j= 0; j < input_lines; j++) {
l= strlen(pline);
ret= Xorriso_dialog_input(xorriso, pline + l, SfileadrL - l - 1, 8);
if(ret <= 0)
goto ex;
if(j < input_lines - 1)
strcat(pline, "\n");
}
ret= Xorriso_lst_new(&new_lst, pline, input_end, 0);
if(ret <= 0)
goto ex;
if(input_list == NULL)
input_list= new_lst;
input_end= new_lst;
}
for(lst= input_list; lst != NULL; lst= Xorriso_lst_get_next(lst, 0)) {
ret= Xorriso_msg_op_parse(xorriso, Xorriso_lst_get_text(lst, 0),
prefix, separators, max_words, pflag,
input_lines, 1 | 2);
if(ret <= 0)
goto ex;
}
ret= 1;
ex:;
Xorriso_lst_destroy_all(&input_list, 0);
Xorriso_free_meM(pline);
return(1);
}