link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2) { FIELDTYPE *nftyp = (FIELDTYPE *)0; T((T_CALLED("link_fieldtype(%p,%p)"), type1, type2)); if (type1 && type2) { nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE)); if (nftyp) { *nftyp = *_nc_Default_FieldType; nftyp->status |= _LINKED_TYPE; if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS)) nftyp->status |= _HAS_ARGS; if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE)) nftyp->status |= _HAS_CHOICE; nftyp->left = type1; nftyp->right = type2; type1->ref++; type2->ref++; } else { SET_ERROR(E_SYSTEM_ERROR); } } else { SET_ERROR(E_BAD_ARGUMENT); } returnFieldType(nftyp); }
new_fieldtype(bool (*const field_check) (FIELD *, const void *), bool (*const char_check) (int, const void *)) { FIELDTYPE *nftyp = (FIELDTYPE *)0; T((T_CALLED("new_fieldtype(%p,%p)"), field_check, char_check)); if ((field_check) || (char_check)) { nftyp = typeMalloc(FIELDTYPE, 1); if (nftyp) { T((T_CREATE("fieldtype %p"), nftyp)); *nftyp = default_fieldtype; nftyp->fcheck = field_check; nftyp->ccheck = char_check; } else { SET_ERROR(E_SYSTEM_ERROR); } } else { SET_ERROR(E_BAD_ARGUMENT); } returnFieldType(nftyp); }
_nc_generic_fieldtype(bool (*const field_check) (FORM *, FIELD *, const void *), bool (*const char_check) (int, FORM *, FIELD *, const void *), bool (*const next) (FORM *, FIELD *, const void *), bool (*const prev) (FORM *, FIELD *, const void *), void (*freecallback) (void *)) { int code = E_SYSTEM_ERROR; FIELDTYPE *res = (FIELDTYPE *)0; T((T_CALLED("_nc_generic_fieldtype(%p,%p,%p,%p,%p)"), field_check, char_check, next, prev, freecallback)); if (field_check || char_check) { res = typeMalloc(FIELDTYPE, 1); if (res) { *res = *_nc_Default_FieldType; res->status |= (_HAS_ARGS | _GENERIC); res->fieldcheck.gfcheck = field_check; res->charcheck.gccheck = char_check; res->genericarg = Generic_This_Type; res->freearg = freecallback; res->enum_next.gnext = next; res->enum_prev.gprev = prev; code = E_OK; } } else code = E_BAD_ARGUMENT; if (E_OK != code) SET_ERROR(code); returnFieldType(res); }
field_type(const FIELD *field) { T((T_CALLED("field_type(%p)"), field)); returnFieldType(Normalize_Field(field)->type); }