// Process a text line in 'line_buf'. static void proc_text(void) { static int blank_lines = 0; // Consecutive blank lines so far. switch(line_type[0]) { case 'a': if (blank_join > 1) { if (line_buf.length > 1 || ++blank_lines == blank_join) { print_lineno(); blank_lines = 0; } else fputs(print_no_line_fmt, stdout); } else print_lineno(); break; case 't': if(line_buf.length > 1) print_lineno(); else fputs(print_no_line_fmt, stdout); break; case 'n': fputs(print_no_line_fmt, stdout); break; case 'p': switch(regexec(&line_regex, line_buf.buffer, 0, NULL, 0)) { case 0: print_lineno(); break; case REG_NOMATCH: fputs(print_no_line_fmt, stdout); break; default: //regerror(); //TODO //fprintf(stderr, "error in regular expression search.\n"); perror("error in regular expression search."); exit(EXIT_FAILURE); break; } } //line_buf.buffer[line_buf.length] = '\0'; //fputs(line_buf.buffer, stdout); fwrite(line_buf.buffer, sizeof(char), line_buf.length, stdout); }
void report1_format(const BiTreeNode *node) { printf("%s\t\t", (char *)((TNode *)((AvlNode *) bitree_data(node))->data)->vname); print_nodechildren(node); print_lineno((List *)((TNode *)((AvlNode *) bitree_data(node))->data)->appear); return; };