New -msg_op opcode "parse_bulk"
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user