📄 target.c
字号:
ffebadffetarget_ne_character1 (bool *res, ffetargetCharacter1 l, ffetargetCharacter1 r){ assert (l.length == r.length); *res = (memcmp (l.text, r.text, l.length) != 0); return FFEBAD;}#endif/* ffetarget_substr_character1 -- Perform SUBSTR op on three constants Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_substr_character1 (ffetargetCharacter1 *res, ffetargetCharacter1 l, ffetargetCharacterSize first, ffetargetCharacterSize last, mallocPool pool, ffetargetCharacterSize *len){ if (last < first) { res->length = *len = 0; res->text = NULL; } else { res->length = *len = last - first + 1; res->text = malloc_new_kp (pool, "ffetargetCharacter1(SUBSTR)", *len + 1); memcpy (res->text, l.text + first - 1, *len); res->text[*len] = '\0'; } return FFEBAD;}#endif/* ffetarget_cmp_hollerith -- Produce orderable comparison between two constants Compare lengths, if equal then use memcmp. */intffetarget_cmp_hollerith (ffetargetHollerith l, ffetargetHollerith r){ if (l.length < r.length) return -1; if (l.length > r.length) return 1; return memcmp (l.text, r.text, l.length);}ffebadffetarget_convert_any_character1_ (char *res, size_t size, ffetargetCharacter1 l){ if (size <= (size_t) l.length) { char *p; ffetargetCharacterSize i; memcpy (res, l.text, size); for (p = &l.text[0] + size, i = l.length - size; i > 0; ++p, --i) if (*p != ' ') return FFEBAD_TRUNCATING_CHARACTER; } else { memcpy (res, l.text, size); memset (res + l.length, ' ', size - l.length); } return FFEBAD;}ffebadffetarget_convert_any_hollerith_ (char *res, size_t size, ffetargetHollerith l){ if (size <= (size_t) l.length) { char *p; ffetargetCharacterSize i; memcpy (res, l.text, size); for (p = &l.text[0] + size, i = l.length - size; i > 0; ++p, --i) if (*p != ' ') return FFEBAD_TRUNCATING_HOLLERITH; } else { memcpy (res, l.text, size); memset (res + l.length, ' ', size - l.length); } return FFEBAD;}ffebadffetarget_convert_any_typeless_ (char *res, size_t size, ffetargetTypeless l){ unsigned long long int l1; unsigned long int l2; unsigned int l3; unsigned short int l4; unsigned char l5; size_t size_of; char *p; if (size >= sizeof (l1)) { l1 = l; p = (char *) &l1; size_of = sizeof (l1); } else if (size >= sizeof (l2)) { l2 = l; p = (char *) &l2; size_of = sizeof (l2); l1 = l2; } else if (size >= sizeof (l3)) { l3 = l; p = (char *) &l3; size_of = sizeof (l3); l1 = l3; } else if (size >= sizeof (l4)) { l4 = l; p = (char *) &l4; size_of = sizeof (l4); l1 = l4; } else if (size >= sizeof (l5)) { l5 = l; p = (char *) &l5; size_of = sizeof (l5); l1 = l5; } else { assert ("stumped by conversion from typeless!" == NULL); abort (); } if (size <= size_of) { int i = size_of - size; memcpy (res, p + i, size); for (; i > 0; ++p, --i) if (*p != '\0') return FFEBAD_TRUNCATING_TYPELESS; } else { int i = size - size_of; memset (res, 0, i); memcpy (res + i, p, size_of); } if (l1 != l) return FFEBAD_TRUNCATING_TYPELESS; return FFEBAD;}/* Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_convert_character1_character1 (ffetargetCharacter1 *res, ffetargetCharacterSize size, ffetargetCharacter1 l, mallocPool pool){ res->length = size; if (size == 0) res->text = NULL; else { res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1); if (size <= l.length) memcpy (res->text, l.text, size); else { memcpy (res->text, l.text, l.length); memset (res->text + l.length, ' ', size - l.length); } res->text[size] = '\0'; } return FFEBAD;}#endif/* Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_convert_character1_hollerith (ffetargetCharacter1 *res, ffetargetCharacterSize size, ffetargetHollerith l, mallocPool pool){ res->length = size; if (size == 0) res->text = NULL; else { res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1); res->text[size] = '\0'; if (size <= l.length) { char *p; ffetargetCharacterSize i; memcpy (res->text, l.text, size); for (p = &l.text[0] + size, i = l.length - size; i > 0; ++p, --i) if (*p != ' ') return FFEBAD_TRUNCATING_HOLLERITH; } else { memcpy (res->text, l.text, l.length); memset (res->text + l.length, ' ', size - l.length); } } return FFEBAD;}#endif/* ffetarget_convert_character1_integer4 -- Raw conversion. Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_convert_character1_integer4 (ffetargetCharacter1 *res, ffetargetCharacterSize size, ffetargetInteger4 l, mallocPool pool){ long long int l1; long int l2; int l3; short int l4; char l5; size_t size_of; char *p; if (((size_t) size) >= sizeof (l1)) { l1 = l; p = (char *) &l1; size_of = sizeof (l1); } else if (((size_t) size) >= sizeof (l2)) { l2 = l; p = (char *) &l2; size_of = sizeof (l2); l1 = l2; } else if (((size_t) size) >= sizeof (l3)) { l3 = l; p = (char *) &l3; size_of = sizeof (l3); l1 = l3; } else if (((size_t) size) >= sizeof (l4)) { l4 = l; p = (char *) &l4; size_of = sizeof (l4); l1 = l4; } else if (((size_t) size) >= sizeof (l5)) { l5 = l; p = (char *) &l5; size_of = sizeof (l5); l1 = l5; } else { assert ("stumped by conversion from integer1!" == NULL); abort (); } res->length = size; if (size == 0) res->text = NULL; else { res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1); res->text[size] = '\0'; if (((size_t) size) <= size_of) { int i = size_of - size; memcpy (res->text, p + i, size); for (; i > 0; ++p, --i) if (*p != 0) return FFEBAD_TRUNCATING_NUMERIC; } else { int i = size - size_of; memset (res->text, 0, i); memcpy (res->text + i, p, size_of); } } if (l1 != l) return FFEBAD_TRUNCATING_NUMERIC; return FFEBAD;}#endif/* ffetarget_convert_character1_logical4 -- Raw conversion. Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_convert_character1_logical4 (ffetargetCharacter1 *res, ffetargetCharacterSize size, ffetargetLogical4 l, mallocPool pool){ long long int l1; long int l2; int l3; short int l4; char l5; size_t size_of; char *p; if (((size_t) size) >= sizeof (l1)) { l1 = l; p = (char *) &l1; size_of = sizeof (l1); } else if (((size_t) size) >= sizeof (l2)) { l2 = l; p = (char *) &l2; size_of = sizeof (l2); l1 = l2; } else if (((size_t) size) >= sizeof (l3)) { l3 = l; p = (char *) &l3; size_of = sizeof (l3); l1 = l3; } else if (((size_t) size) >= sizeof (l4)) { l4 = l; p = (char *) &l4; size_of = sizeof (l4); l1 = l4; } else if (((size_t) size) >= sizeof (l5)) { l5 = l; p = (char *) &l5; size_of = sizeof (l5); l1 = l5; } else { assert ("stumped by conversion from logical1!" == NULL); abort (); } res->length = size; if (size == 0) res->text = NULL; else { res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1); res->text[size] = '\0'; if (((size_t) size) <= size_of) { int i = size_of - size; memcpy (res->text, p + i, size); for (; i > 0; ++p, --i) if (*p != 0) return FFEBAD_TRUNCATING_NUMERIC; } else { int i = size - size_of; memset (res->text, 0, i); memcpy (res->text + i, p, size_of); } } if (l1 != l) return FFEBAD_TRUNCATING_NUMERIC; return FFEBAD;}#endif/* ffetarget_convert_character1_typeless -- Raw conversion. Always append a null byte to the end, in case this is wanted in a special case such as passing a string as a FORMAT or %REF. Done to save a bit of hassle, nothing more, but it's a kludge anyway, because it isn't a "feature" that is self-documenting. Use the string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature in the code. */#if FFETARGET_okCHARACTER1ffebadffetarget_convert_character1_typeless (ffetargetCharacter1 *res, ffetargetCharacterSize size, ffetargetTypeless l, mallocPool pool){ unsigned long long int l1; unsigned long int l2; unsigned int l3; unsigned short int l4; unsigned char l5; size_t size_of; char *p; if (((size_t) size) >= sizeof (l1)) { l1 = l; p = (char *) &l1; size_of = sizeof (l1); } else if (((size_t) size) >= sizeof (l2)) { l2 = l; p = (char *) &l2; size_of = sizeof (l2); l1 = l2; } else if (((size_t) size) >= sizeof (l3)) { l3 = l; p = (char *) &l3; size_of = sizeof (l3); l1 = l3; } else if (((size_t) size) >= sizeof (l4)) { l4 = l; p = (char *) &l4; size_of = sizeof (l4); l1 = l4; } else if (((size_t) size) >= sizeof (l5)) { l5 = l; p = (char *) &l5; size_of = sizeof (l5); l1 = l5; } else { assert ("stumped by conversion from typeless!" == NULL); abort (); } res->length = size;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -