Exemplo n.º 1
0
Arquivo: strings.c Projeto: ps8v9/tmp
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);
		}
	}
}
Exemplo n.º 2
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);
		}
	}
}
Exemplo n.º 3
0
Arquivo: strings.c Projeto: ps8v9/tmp
void
cob_unstring_tallying (cob_field *f)
{
	cob_add_int (f, unstring_count, 0);
}
Exemplo n.º 4
0
Arquivo: strings.c Projeto: ps8v9/tmp
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);
	}
}