예제 #1
0
_f_int4
_verify90(char *str1,
	_f_int4 len1,
	char *str2,
	_f_int4 len2,
	_f_int4 back)
{
	_f_int4 back1 = back;
	return (_F90_VERIFY(str1, str2, &back1, len1, len2));
}
예제 #2
0
파일: native.c 프로젝트: somian/Path64
/* Fortran character verify */
int
ar_verify (ar_data *result, const AR_TYPE *resulttype,
	 const char *str1, long len1, const char *str2, long len2, long backward)
{
	long	index;
	long	back = backward;

	extern long _F90_VERIFY(const char *st1, const char *st2, long *back,
			       int len1, int len2);

        index = _F90_VERIFY(str1, str2, &back, len1, len2);
        result->ar_i64.part1 = 0;
        result->ar_i64.part2 = 0;
        result->ar_i64.part3 = index>>16;
        result->ar_i64.part4 = index & 0xffff;

        status = AR_STAT_OK;
	switch (*resulttype) {
	case AR_Int_8_S:
		if (( INT8_SIGN(result) && !IS_INT8_UPPER_ONES(result)) ||
		    (!INT8_SIGN(result) && !IS_INT8_UPPER_ZERO(result))) {
                        return AR_STAT_OVERFLOW;
                }
                break;

	case AR_Int_16_S:
		if (( INT16_SIGN(result) && !IS_INT16_UPPER_ONES(result)) ||
		    (!INT16_SIGN(result) && !IS_INT16_UPPER_ZERO(result))) {
                        return AR_STAT_OVERFLOW;
                }
                break;

	case AR_Int_32_S:
		if (( INT32_SIGN(result) && !IS_INT32_UPPER_ONES(result)) ||
		    (!INT32_SIGN(result) && !IS_INT32_UPPER_ZERO(result))) {
                        return AR_STAT_OVERFLOW;
                }
                break;

	case AR_Int_64_S:
                break;

	default:
		return AR_STAT_INVALID_TYPE;
	}

	WORD_SWAP(result->ar_i64);
        return AR_status((AR_DATA*)result, resulttype);
}