ncurses 6.2 - patch 20201017
[ncurses.git] / form / fld_newftyp.c
index 59cd1a6f7b2e41d1a09300bf8471f98d3c771b66..c5848d5fbd6605993843666731faa9a18a20603a 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2002,2003 Free Software Foundation, Inc.              *
+ * Copyright 2018,2020 Thomas E. Dickey                                     *
+ * Copyright 1998-2010,2016 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 
 #include "form.priv.h"
 
-MODULE_ID("$Id: fld_newftyp.c,v 1.9 2003/11/08 20:45:36 tom Exp $")
-
-static FIELDTYPE const default_fieldtype = {
-  0,                   /* status                                      */
-  0L,                  /* reference count                             */
-  (FIELDTYPE *)0,      /* pointer to left  operand                    */
-  (FIELDTYPE *)0,      /* pointer to right operand                    */
-  NULL,                /* makearg function                            */
-  NULL,                /* copyarg function                            */
-  NULL,                /* freearg function                            */
-  NULL,                /* field validation function                   */
-  NULL,                /* Character check function                    */
-  NULL,                /* enumerate next function                     */
-  NULL                 /* enumerate previous function                 */
+MODULE_ID("$Id: fld_newftyp.c,v 1.23 2020/05/24 01:40:20 anonymous.maarten Exp $")
+
+static FIELDTYPE default_fieldtype =
+{
+  0,                           /* status                                      */
+  0L,                          /* reference count                             */
+  (FIELDTYPE *)0,              /* pointer to left  operand                    */
+  (FIELDTYPE *)0,              /* pointer to right operand                    */
+  NULL,                                /* makearg function                            */
+  NULL,                                /* copyarg function                            */
+  NULL,                                /* freearg function                            */
+  INIT_FT_FUNC(NULL),          /* field validation function                   */
+  INIT_FT_FUNC(NULL),          /* Character check function                    */
+  INIT_FT_FUNC(NULL),          /* enumerate next function                     */
+  INIT_FT_FUNC(NULL),          /* enumerate previous function                 */
+#if NCURSES_INTEROP_FUNCS
+  NULL                         /* generic callback alternative to makearg     */
+#endif
 };
 
-NCURSES_EXPORT_VAR(const FIELDTYPE*) _nc_Default_FieldType = &default_fieldtype;
-\f
+FORM_EXPORT_VAR(FIELDTYPE *)
+  _nc_Default_FieldType = &default_fieldtype;
+
 /*---------------------------------------------------------------------------
-|   Facility      :  libnform  
+|   Facility      :  libnform
 |   Function      :  FIELDTYPE *new_fieldtype(
 |                       bool (* const field_check)(FIELD *,const void *),
-|                       bool (* const char_check) (int, const void *) ) 
-|   
+|                       bool (* const char_check) (int, const void *) )
+|
 |   Description   :  Create a new fieldtype. The application programmer must
 |                    write a field_check and a char_check function and give
 |                    them as input to this call.
-|                    If an error occurs, errno is set to                    
+|                    If an error occurs, errno is set to
 |                       E_BAD_ARGUMENT  - invalid arguments
 |                       E_SYSTEM_ERROR  - system error (no memory)
 |
 |   Return Values :  Fieldtype pointer or NULL if error occurred
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
-new_fieldtype (
- bool (* const field_check)(FIELD *,const void *),
- bool (* const char_check) (int,const void *) )
+FORM_EXPORT(FIELDTYPE *)
+new_fieldtype(bool (*const field_check) (FIELD *, const void *),
+             bool (*const char_check) (int, const void *))
 {
   FIELDTYPE *nftyp = (FIELDTYPE *)0;
-  
-  if ( (field_check) || (char_check) )
+
+  TR_FUNC_BFR(2);
+
+  T((T_CALLED("new_fieldtype(%s,%s)"),
+     TR_FUNC_ARG(0, field_check),
+     TR_FUNC_ARG(1, char_check)));
+
+  if ((field_check) || (char_check))
     {
-      nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE));
+      nftyp = typeMalloc(FIELDTYPE, 1);
+
       if (nftyp)
        {
+         T((T_CREATE("fieldtype %p"), (void *)nftyp));
          *nftyp = default_fieldtype;
+#if NCURSES_INTEROP_FUNCS
+         nftyp->fieldcheck.ofcheck = field_check;
+         nftyp->charcheck.occheck = char_check;
+#else
          nftyp->fcheck = field_check;
          nftyp->ccheck = char_check;
+#endif
        }
       else
        {
-         SET_ERROR( E_SYSTEM_ERROR );
+         SET_ERROR(E_SYSTEM_ERROR);
        }
     }
   else
     {
-      SET_ERROR( E_BAD_ARGUMENT );
+      SET_ERROR(E_BAD_ARGUMENT);
     }
-  return nftyp;
+  returnFieldType(nftyp);
 }
 
 /*---------------------------------------------------------------------------
-|   Facility      :  libnform  
+|   Facility      :  libnform
 |   Function      :  int free_fieldtype(FIELDTYPE *typ)
-|   
+|
 |   Description   :  Release the memory associated with this fieldtype.
 |
 |   Return Values :  E_OK            - success
 |                    E_CONNECTED     - there are fields referencing the type
 |                    E_BAD_ARGUMENT  - invalid fieldtype pointer
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-free_fieldtype (FIELDTYPE *typ)
+FORM_EXPORT(int)
+free_fieldtype(FIELDTYPE *typ)
 {
+  T((T_CALLED("free_fieldtype(%p)"), (void *)typ));
+
   if (!typ)
     RETURN(E_BAD_ARGUMENT);
 
-  if (typ->ref!=0)
+  if (typ->ref != 0)
     RETURN(E_CONNECTED);
 
   if (typ->status & _RESIDENT)
@@ -117,8 +137,10 @@ free_fieldtype (FIELDTYPE *typ)
 
   if (typ->status & _LINKED_TYPE)
     {
-      if (typ->left ) typ->left->ref--;
-      if (typ->right) typ->right->ref--;
+      if (typ->left)
+       typ->left->ref--;
+      if (typ->right)
+       typ->right->ref--;
     }
   free(typ);
   RETURN(E_OK);