void cob_inspect_characters (cob_field *f1) { int *mark; int i; int n; int len; mark = &inspect_mark[inspect_start - inspect_data]; len = (int)(inspect_end - inspect_start); if (inspect_replacing) { /* INSPECT REPLACING CHARACTERS f1 */ for (i = 0; i < len; ++i) { if (mark[i] == -1) { mark[i] = f1->data[0]; } } } else { /* INSPECT TALLYING f1 CHARACTERS */ n = 0; for (i = 0; i < len; ++i) { if (mark[i] == -1) { mark[i] = 1; n++; } } if (n > 0) { cob_add_int (f1, n, 0); } } }
void cob_inspect_characters (cob_field *f1) { int *mark; int i; int j; int n; int len; mark = &inspect_mark[inspect_start - inspect_data]; len = (int)(inspect_end - inspect_start); if (inspect_replacing) { /* INSPECT REPLACING CHARACTERS f1 */ for (i = 0; i < len; i++) { if (mark[i] == -1) { for (j = 0; j < f1->size; j++) { mark[i+j] = f1->data[j]; } i += f1->size-1; } } } else { /* INSPECT TALLYING f1 CHARACTERS */ n = 0; for (i = 0; i < len; i++) { if (mark[i] == -1) { mark[i] = 1; n++; } } if (n > 0) { #ifdef I18N_UTF8 /* I18N_UTF8: count bytes also in NATIONAL. */ #else /*!I18N_UTF8*/ if (COB_FIELD_TYPE (inspect_var) == COB_TYPE_NATIONAL || COB_FIELD_TYPE (inspect_var) == COB_TYPE_NATIONAL_EDITED) { n = n / 2; } #endif /*I18N_UTF8*/ cob_add_int (f1, n); } } }
void cob_unstring_tallying (cob_field *f) { cob_add_int (f, unstring_count, 0); }
static void inspect_common (cob_field *f1, cob_field *f2, const int type) { int *mark; size_t n = 0; size_t j; int i; int len; if (unlikely(!f1)) { f1 = &str_cob_low; } if (unlikely(!f2)) { f2 = &str_cob_low; } if (inspect_replacing && f1->size != f2->size) { if (COB_FIELD_TYPE (f1) == COB_TYPE_ALPHANUMERIC_ALL) { alloc_figurative (f1, f2); f1 = &alpha_fld; } else { cob_set_exception (COB_EC_RANGE_INSPECT_SIZE); return; } } mark = &inspect_mark[inspect_start - inspect_data]; len = (int)(inspect_end - inspect_start); if (type == INSPECT_TRAILING) { for (i = len - (int)f2->size; i >= 0; --i) { /* Find matching substring */ if (memcmp (inspect_start + i, f2->data, f2->size) == 0) { /* Check if it is already marked */ for (j = 0; j < f2->size; ++j) { if (mark[i + j] != -1) { break; } } /* If not, mark and count it */ if (j == f2->size) { for (j = 0; j < f2->size; ++j) { mark[i + j] = inspect_replacing ? f1->data[j] : 1; } i -= f2->size - 1; n++; } } else { break; } } } else { for (i = 0; i < (int)(len - f2->size + 1); ++i) { /* Find matching substring */ if (memcmp (inspect_start + i, f2->data, f2->size) == 0) { /* Check if it is already marked */ for (j = 0; j < f2->size; ++j) { if (mark[i + j] != -1) { break; } } /* If not, mark and count it */ if (j == f2->size) { for (j = 0; j < f2->size; ++j) { mark[i + j] = inspect_replacing ? f1->data[j] : 1; } i += f2->size - 1; n++; if (type == INSPECT_FIRST) { break; } } } else if (type == INSPECT_LEADING) { break; } } } if (n > 0 && !inspect_replacing) { cob_add_int (f1, (int) n, 0); } }