]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - form/fld_link.c
ncurses 6.2 - patch 20210814
[ncurses.git] / form / fld_link.c
index b3cad0c3c63700cb0fa50b7b870ab62c3a20529e..c0604584179f8fac733291b975649b50802ae582 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2002,2003 Free Software Foundation, Inc.              *
+ * Copyright 2020,2021 Thomas E. Dickey                                     *
+ * Copyright 1998-2010,2012 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_link.c,v 1.7 2003/10/25 15:17:08 tom Exp $")
+MODULE_ID("$Id: fld_link.c,v 1.17 2021/06/17 21:20:30 tom Exp $")
 
 /*---------------------------------------------------------------------------
-|   Facility      :  libnform  
-|   Function      :  FIELD *link_field(FIELD *field, int frow, int fcol)  
-|   
+|   Facility      :  libnform
+|   Function      :  FIELD *link_field(FIELD *field, int frow, int fcol)
+|
 |   Description   :  Duplicates the field at the specified position. The
 |                    new field shares its buffers with the original one,
 |                    the attributes are independent.
 |                    If an error occurs, errno is set to
-|                    
+|
 |                    E_BAD_ARGUMENT - invalid argument
 |                    E_SYSTEM_ERROR - system error
 |
 |   Return Values :  Pointer to the new field or NULL if failure
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
-link_field (FIELD * field, int frow, int fcol)
+FORM_EXPORT(FIELD *)
+link_field(FIELD *field, int frow, int fcol)
 {
   FIELD *New_Field = (FIELD *)0;
   int err = E_BAD_ARGUMENT;
 
-  if (field && (frow>=0) && (fcol>=0) &&
-      ((err=E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */
-      (New_Field = (FIELD *)malloc(sizeof(FIELD))) )
+  T((T_CALLED("link_field(%p,%d,%d)"), (void *)field, frow, fcol));
+  if (field && (frow >= 0) && (fcol >= 0) &&
+      ((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */
+      (New_Field = typeMalloc(FIELD, 1)))
     {
-      *New_Field        = *_nc_Default_Field;
-      New_Field->frow   = frow;
-      New_Field->fcol   = fcol;
-      New_Field->link   = field->link;
-      field->link       = New_Field;
-      New_Field->buf    = field->buf;
-      New_Field->rows   = field->rows;
-      New_Field->cols   = field->cols;
-      New_Field->nrow   = field->nrow;
-      New_Field->nbuf   = field->nbuf;
-      New_Field->drows  = field->drows;
-      New_Field->dcols  = field->dcols;
-      New_Field->maxgrow= field->maxgrow;
-      New_Field->just   = field->just;
-      New_Field->fore   = field->fore;
-      New_Field->back   = field->back;
-      New_Field->pad    = field->pad;
-      New_Field->opts   = field->opts;
+      T((T_CREATE("field %p"), (void *)New_Field));
+      *New_Field = *_nc_Default_Field;
+      New_Field->frow = (short)frow;
+      New_Field->fcol = (short)fcol;
+
+      New_Field->link = field->link;
+      field->link = New_Field;
+
+      New_Field->buf = field->buf;
+      New_Field->rows = field->rows;
+      New_Field->cols = field->cols;
+      New_Field->nrow = field->nrow;
+      New_Field->nbuf = field->nbuf;
+      New_Field->drows = field->drows;
+      New_Field->dcols = field->dcols;
+      New_Field->maxgrow = field->maxgrow;
+      New_Field->just = field->just;
+      New_Field->fore = field->fore;
+      New_Field->back = field->back;
+      New_Field->pad = field->pad;
+      New_Field->opts = field->opts;
       New_Field->usrptr = field->usrptr;
-      if (_nc_Copy_Type(New_Field,field)) 
-       return New_Field;
+
+      if (_nc_Copy_Type(New_Field, field))
+       returnField(New_Field);
     }
 
-  if (New_Field) 
+  if (New_Field)
     free_field(New_Field);
 
-  SET_ERROR( err );
-  return (FIELD *)0;
+  SET_ERROR(err);
+  returnField((FIELD *)0);
 }
 
 /* fld_link.c ends here */