X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffld_link.c;h=c0604584179f8fac733291b975649b50802ae582;hp=b3cad0c3c63700cb0fa50b7b870ab62c3a20529e;hb=5a107d6f2a641ef5a33c8976fbd6cd26a3196a0d;hpb=a8987e73ec254703634802b4f7ee30d3a485524d diff --git a/form/fld_link.c b/form/fld_link.c index b3cad0c3..c0604584 100644 --- a/form/fld_link.c +++ b/form/fld_link.c @@ -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 * @@ -32,60 +33,65 @@ #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 */