static void rlib_break_all_below_in_reverse_order(rlib *r, struct rlib_part *part, struct rlib_report *report, struct rlib_element *e, gboolean precalculate) { gint count=0,i=0,j=0; gint newpage = FALSE; gboolean t; struct rlib_report_break *rb; struct rlib_element *xxx, *be; struct rlib_break_fields *bf = NULL; for(xxx = e; xxx != NULL; xxx=xxx->next) count++; for(i=count;i > 0;i--) { xxx = e; for(j=0;j<i-1;j++) xxx = xxx->next; rb = xxx->data; for(be = rb->fields; be != NULL; be=be->next) { bf = be->data; rlib_value_free(bf->rval); bf->rval = NULL; } if(OUTPUT(r)->do_breaks) { gint did_end_page = FALSE; if(precalculate == FALSE) did_end_page = rlib_end_page_if_line_wont_fit(r, part, report, rb->footer); if(!INPUT(r, r->current_result)->isdone(INPUT(r, r->current_result), r->results[r->current_result].result)) rlib_navigate_previous(r, r->current_result); if(precalculate == FALSE) { if(did_end_page) { bf->rval = rlib_execute_pcode(r, &bf->rval2, bf->code, NULL); rlib_print_break_header_output(r, part, report, rb, rb->header, FALSE); rlib_value_free(bf->rval); bf->rval = NULL; } rlib_print_break_footer_output(r, part, report, rb, rb->footer, FALSE); } if(!INPUT(r, r->current_result)->isdone(INPUT(r, r->current_result), r->results[r->current_result].result)) rlib_navigate_next(r, r->current_result); } rlib_reset_variables_on_break(r, part, report, (gchar *)rb->xml_name.xml, precalculate); rlib_process_expression_variables(r, report); if (rlib_execute_as_boolean(r, rb->newpage_code, &t)) newpage = t; } if(newpage && OUTPUT(r)->do_breaks) { if(!INPUT(r, r->current_result)->isdone(INPUT(r, r->current_result), r->results[r->current_result].result)) { if(OUTPUT(r)->paginate) rlib_layout_end_page(r, part, report, TRUE); rlib_force_break_headers(r, part, report, precalculate); } } }
static gint rlib_do_followers(rlib *r, gint i, gint way) { gint follower; gint rtn = TRUE; follower = r->followers[i].follower; if(r->results[follower]->navigation_failed == TRUE) return FALSE; if(r->results[follower]->next_failed) r->results[follower]->navigation_failed = TRUE; if(way == RLIB_NAVIGATE_NEXT) { if(rlib_navigate_next(r, follower) != TRUE) { if(rlib_navigate_last(r, follower) != TRUE) { rtn = FALSE; } r->results[follower]->next_failed = TRUE; } } else if(way == RLIB_NAVIGATE_PREVIOUS) { if(rlib_navigate_previous(r, follower) != TRUE) rtn = FALSE; } else if(way == RLIB_NAVIGATE_FIRST) { if(rlib_navigate_first(r, follower) != TRUE) rtn = FALSE; else { r->results[follower]->next_failed = FALSE; r->results[follower]->navigation_failed = FALSE; } } else if(way == RLIB_NAVIGATE_LAST) { if(rlib_navigate_last(r, follower) != TRUE) rtn = FALSE; } return rtn; }