TLIBAPI TBOOL region_insertrect(struct RectPool *pool, struct RectList *list, TINT s0, TINT s1, TINT s2, TINT s3) { struct TNode *temp, *next, *node = list->rl_List.tlh_Head; struct RectNode *rn; int i; #if defined(MERGE_NUMOPS) for (i = 0; i < MERGE_NUMOPS && (next = node->tln_Succ); node = next, ++i) { rn = (struct RectNode *) node; if (rn->rn_Rect[1] == s1 && rn->rn_Rect[3] == s3) { if (rn->rn_Rect[2] + 1 == s0) { rn->rn_Rect[2] = s2; return TTRUE; } else if (rn->rn_Rect[0] == s2 + 1) { rn->rn_Rect[0] = s0; return TTRUE; } } else if (rn->rn_Rect[0] == s0 && rn->rn_Rect[2] == s2) { if (rn->rn_Rect[3] + 1 == s1) { rn->rn_Rect[3] = s3; return TTRUE; } else if (rn->rn_Rect[1] == s3 + 1) { rn->rn_Rect[1] = s1; return TTRUE; } } } #endif rn = region_allocrectnode(pool, s0, s1, s2, s3); if (rn) { TADDHEAD(&list->rl_List, &rn->rn_Node, temp); list->rl_NumNodes++; return TTRUE; } return TFALSE; }
static TBOOL insertrect(TAPTR exec, struct TList *list, TINT s0, TINT s1, TINT s2, TINT s3) { struct TNode *temp, *next, *node = list->tlh_Head; struct RectNode *rn; int i; #if defined(MERGE_RECTS) for (i = 0; i < MERGE_RECTS && (next = node->tln_Succ); node = next, ++i) { rn = (struct RectNode *) node; if (rn->rn_Rect[1] == s1 && rn->rn_Rect[3] == s3) { if (rn->rn_Rect[2] + 1 == s0) { rn->rn_Rect[2] = s2; return TTRUE; } else if (rn->rn_Rect[0] == s2 + 1) { rn->rn_Rect[0] = s0; return TTRUE; } } else if (rn->rn_Rect[0] == s0 && rn->rn_Rect[2] == s2) { if (rn->rn_Rect[3] + 1 == s1) { rn->rn_Rect[3] = s3; return TTRUE; } else if (rn->rn_Rect[1] == s3 + 1) { rn->rn_Rect[1] = s1; return TTRUE; } } } #endif rn = allocrectnode(exec, s0, s1, s2, s3); if (rn) { TADDHEAD(list, &rn->rn_Node, temp); return TTRUE; } return TFALSE; }