#include "form.priv.h"
-MODULE_ID("$Id: frm_driver.c,v 1.90 2009/08/29 19:02:25 tom Exp $")
+MODULE_ID("$Id: frm_driver.c,v 1.93 2009/10/24 23:23:32 tom Exp $")
/*----------------------------------------------------------------------------
This is the core module of the form library. It contains the majority
result = TRUE; /* allow sharing of recovery on failure */
- T((T_CREATE("fieldcell %p"), newbuf));
+ T((T_CREATE("fieldcell %p"), (void *)newbuf));
field->buf = newbuf;
for (i = 0; i <= field->nbuf; i++)
{
static int
Field_encloses(FIELD *field, int ry, int rx)
{
- T((T_CALLED("Field_encloses(%p)"), field));
+ T((T_CALLED("Field_encloses(%p)"), (void *)field));
if (field != 0
&& field->frow <= ry
&& (field->frow + field->rows) > ry
WINDOW *formwin;
FIELD *field;
- T((T_CALLED("_nc_Refresh_Current_Field(%p)"), form));
+ T((T_CALLED("_nc_Refresh_Current_Field(%p)"), (void *)form));
if (!form)
RETURN(E_BAD_ARGUMENT);
int res = E_OK;
WINDOW *formwin;
- T((T_CALLED("_nc_Synchronize_Attributes(%p)"), field));
+ T((T_CALLED("_nc_Synchronize_Attributes(%p)"), (void *)field));
if (!field)
returnCode(E_BAD_ARGUMENT);
FORM *form;
int res = E_OK;
- T((T_CALLED("_nc_Synchronize_Options(%p,%#x)"), field, newopts));
+ T((T_CALLED("_nc_Synchronize_Options(%p,%#x)"), (void *)field, newopts));
if (!field)
returnCode(E_BAD_ARGUMENT);
FIELD *field;
WINDOW *new_window;
- T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), form, newfield));
+ T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), (void *)form, (void *)newfield));
if (!form || !newfield || !form->current || (newfield->form != form))
returnCode(E_BAD_ARGUMENT);
FIELD *field = form->current;
int step = myWCWIDTH(form->w, form->currow, form->curcol);
- T((T_CALLED("IFN_Next_Character(%p)"), form));
+ T((T_CALLED("IFN_Next_Character(%p)"), (void *)form));
if ((form->curcol += step) == field->dcols)
{
if ((++(form->currow)) == field->drows)
int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1);
int oldcol = form->curcol;
- T((T_CALLED("IFN_Previous_Character(%p)"), form));
+ T((T_CALLED("IFN_Previous_Character(%p)"), (void *)form));
if ((form->curcol -= amount) < 0)
{
if ((--(form->currow)) < 0)
{
FIELD *field = form->current;
- T((T_CALLED("IFN_Next_Line(%p)"), form));
+ T((T_CALLED("IFN_Next_Line(%p)"), (void *)form));
if ((++(form->currow)) == field->drows)
{
#if GROW_IF_NAVIGATE
static int
IFN_Previous_Line(FORM *form)
{
- T((T_CALLED("IFN_Previous_Line(%p)"), form));
+ T((T_CALLED("IFN_Previous_Line(%p)"), (void *)form));
if ((--(form->currow)) < 0)
{
form->currow++;
FIELD_CELL *s;
FIELD_CELL *t;
- T((T_CALLED("IFN_Next_Word(%p)"), form));
+ T((T_CALLED("IFN_Next_Word(%p)"), (void *)form));
/* We really need access to the data, so we have to synchronize */
Synchronize_Buffer(form);
FIELD_CELL *t;
bool again = FALSE;
- T((T_CALLED("IFN_Previous_Word(%p)"), form));
+ T((T_CALLED("IFN_Previous_Word(%p)"), (void *)form));
/* We really need access to the data, so we have to synchronize */
Synchronize_Buffer(form);
{
FIELD *field = form->current;
- T((T_CALLED("IFN_Beginning_Of_Field(%p)"), form));
+ T((T_CALLED("IFN_Beginning_Of_Field(%p)"), (void *)form));
Synchronize_Buffer(form);
Adjust_Cursor_Position(form,
Get_Start_Of_Data(field->buf, Buffer_Length(field)));
FIELD *field = form->current;
FIELD_CELL *pos;
- T((T_CALLED("IFN_End_Of_Field(%p)"), form));
+ T((T_CALLED("IFN_End_Of_Field(%p)"), (void *)form));
Synchronize_Buffer(form);
pos = After_End_Of_Data(field->buf, Buffer_Length(field));
if (pos == (field->buf + Buffer_Length(field)))
{
FIELD *field = form->current;
- T((T_CALLED("IFN_Beginning_Of_Line(%p)"), form));
+ T((T_CALLED("IFN_Beginning_Of_Line(%p)"), (void *)form));
Synchronize_Buffer(form);
Adjust_Cursor_Position(form,
Get_Start_Of_Data(Address_Of_Current_Row_In_Buffer(form),
FIELD_CELL *pos;
FIELD_CELL *bp;
- T((T_CALLED("IFN_End_Of_Line(%p)"), form));
+ T((T_CALLED("IFN_End_Of_Line(%p)"), (void *)form));
Synchronize_Buffer(form);
bp = Address_Of_Current_Row_In_Buffer(form);
pos = After_End_Of_Data(bp, field->dcols);
int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1);
int oldcol = form->curcol;
- T((T_CALLED("IFN_Left_Character(%p)"), form));
+ T((T_CALLED("IFN_Left_Character(%p)"), (void *)form));
if ((form->curcol -= amount) < 0)
{
form->curcol = oldcol;
int amount = myWCWIDTH(form->w, form->currow, form->curcol);
int oldcol = form->curcol;
- T((T_CALLED("IFN_Right_Character(%p)"), form));
+ T((T_CALLED("IFN_Right_Character(%p)"), (void *)form));
if ((form->curcol += amount) >= form->current->dcols)
{
#if GROW_IF_NAVIGATE
static int
IFN_Up_Character(FORM *form)
{
- T((T_CALLED("IFN_Up_Character(%p)"), form));
+ T((T_CALLED("IFN_Up_Character(%p)"), (void *)form));
if ((--(form->currow)) < 0)
{
form->currow++;
{
FIELD *field = form->current;
- T((T_CALLED("IFN_Down_Character(%p)"), form));
+ T((T_CALLED("IFN_Down_Character(%p)"), (void *)form));
if ((++(form->currow)) == field->drows)
{
#if GROW_IF_NAVIGATE
static int
VSC_Scroll_Line_Forward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Line_Forward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Line_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, 1));
}
static int
VSC_Scroll_Line_Backward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Line_Backward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Line_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -1));
}
static int
VSC_Scroll_Page_Forward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Page_Forward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Page_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, form->current->rows));
}
static int
VSC_Scroll_Half_Page_Forward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Half_Page_Forward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Half_Page_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, (form->current->rows + 1) / 2));
}
static int
VSC_Scroll_Page_Backward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Page_Backward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Page_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -(form->current->rows)));
}
static int
VSC_Scroll_Half_Page_Backward(FORM *form)
{
- T((T_CALLED("VSC_Scroll_Half_Page_Backward(%p)"), form));
+ T((T_CALLED("VSC_Scroll_Half_Page_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -((form->current->rows + 1) / 2)));
}
/*----------------------------------------------------------------------------
static int
HSC_Scroll_Char_Forward(FORM *form)
{
- T((T_CALLED("HSC_Scroll_Char_Forward(%p)"), form));
+ T((T_CALLED("HSC_Scroll_Char_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, 1));
}
static int
HSC_Scroll_Char_Backward(FORM *form)
{
- T((T_CALLED("HSC_Scroll_Char_Backward(%p)"), form));
+ T((T_CALLED("HSC_Scroll_Char_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -1));
}
static int
HSC_Horizontal_Line_Forward(FORM *form)
{
- T((T_CALLED("HSC_Horizontal_Line_Forward(%p)"), form));
+ T((T_CALLED("HSC_Horizontal_Line_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, form->current->cols));
}
static int
HSC_Horizontal_Half_Line_Forward(FORM *form)
{
- T((T_CALLED("HSC_Horizontal_Half_Line_Forward(%p)"), form));
+ T((T_CALLED("HSC_Horizontal_Half_Line_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, (form->current->cols + 1) / 2));
}
static int
HSC_Horizontal_Line_Backward(FORM *form)
{
- T((T_CALLED("HSC_Horizontal_Line_Backward(%p)"), form));
+ T((T_CALLED("HSC_Horizontal_Line_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -(form->current->cols)));
}
static int
HSC_Horizontal_Half_Line_Backward(FORM *form)
{
- T((T_CALLED("HSC_Horizontal_Half_Line_Backward(%p)"), form));
+ T((T_CALLED("HSC_Horizontal_Half_Line_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -((form->current->cols + 1) / 2)));
}
FIELD_CELL *bp, *t;
bool Last_Row = ((field->drows - 1) == form->currow);
- T((T_CALLED("FE_New_Line(%p)"), form));
+ T((T_CALLED("FE_New_Line(%p)"), (void *)form));
if (form->status & _OVLMODE)
{
if (Last_Row &&
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
- T((T_CALLED("FE_Insert_Character(%p)"), form));
+ T((T_CALLED("FE_Insert_Character(%p)"), (void *)form));
if (Check_Char(field->type, (int)C_BLANK, (TypeArgument *)(field->arg)))
{
bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form);
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
- T((T_CALLED("FE_Insert_Line(%p)"), form));
+ T((T_CALLED("FE_Insert_Line(%p)"), (void *)form));
if (Check_Char(field->type, (int)C_BLANK, (TypeArgument *)(field->arg)))
{
bool Maybe_Done = (form->currow != (field->drows - 1)) &&
static int
FE_Delete_Character(FORM *form)
{
- T((T_CALLED("FE_Delete_Character(%p)"), form));
+ T((T_CALLED("FE_Delete_Character(%p)"), (void *)form));
DeleteChar(form);
returnCode(E_OK);
}
{
FIELD *field = form->current;
- T((T_CALLED("FE_Delete_Previous(%p)"), form));
+ T((T_CALLED("FE_Delete_Previous(%p)"), (void *)form));
if (First_Position_In_Current_Field(form))
returnCode(E_REQUEST_DENIED);
static int
FE_Delete_Line(FORM *form)
{
- T((T_CALLED("FE_Delete_Line(%p)"), form));
+ T((T_CALLED("FE_Delete_Line(%p)"), (void *)form));
form->curcol = 0;
wdeleteln(form->w);
returnCode(E_OK);
FIELD_CELL *cp = bp + form->curcol;
FIELD_CELL *s;
- T((T_CALLED("FE_Delete_Word(%p)"), form));
+ T((T_CALLED("FE_Delete_Word(%p)"), (void *)form));
Synchronize_Buffer(form);
if (ISBLANK(*cp))
returnCode(E_REQUEST_DENIED); /* not in word */
static int
FE_Clear_To_End_Of_Line(FORM *form)
{
- T((T_CALLED("FE_Clear_To_End_Of_Line(%p)"), form));
+ T((T_CALLED("FE_Clear_To_End_Of_Line(%p)"), (void *)form));
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
returnCode(E_OK);
static int
FE_Clear_To_End_Of_Field(FORM *form)
{
- T((T_CALLED("FE_Clear_To_End_Of_Field(%p)"), form));
+ T((T_CALLED("FE_Clear_To_End_Of_Field(%p)"), (void *)form));
wmove(form->w, form->currow, form->curcol);
wclrtobot(form->w);
returnCode(E_OK);
static int
FE_Clear_Field(FORM *form)
{
- T((T_CALLED("FE_Clear_Field(%p)"), form));
+ T((T_CALLED("FE_Clear_Field(%p)"), (void *)form));
form->currow = form->curcol = 0;
werase(form->w);
returnCode(E_OK);
static int
EM_Overlay_Mode(FORM *form)
{
- T((T_CALLED("EM_Overlay_Mode(%p)"), form));
+ T((T_CALLED("EM_Overlay_Mode(%p)"), (void *)form));
form->status |= _OVLMODE;
returnCode(E_OK);
}
static int
EM_Insert_Mode(FORM *form)
{
- T((T_CALLED("EM_Insert_Mode(%p)"), form));
+ T((T_CALLED("EM_Insert_Mode(%p)"), (void *)form));
form->status &= ~_OVLMODE;
returnCode(E_OK);
}
{
FIELD *field = form->current;
- T((T_CALLED("CR_Next_Choice(%p)"), form));
+ T((T_CALLED("CR_Next_Choice(%p)"), (void *)form));
Synchronize_Buffer(form);
returnCode((Next_Choice(field->type, field, (TypeArgument *)(field->arg)))
? E_OK
{
FIELD *field = form->current;
- T((T_CALLED("CR_Previous_Choice(%p)"), form));
+ T((T_CALLED("CR_Previous_Choice(%p)"), (void *)form));
Synchronize_Buffer(form);
returnCode((Previous_Choice(field->type, field, (TypeArgument *)(field->arg)))
? E_OK
static int
FV_Validation(FORM *form)
{
- T((T_CALLED("FV_Validation(%p)"), form));
+ T((T_CALLED("FV_Validation(%p)"), (void *)form));
if (_nc_Internal_Validation(form))
returnCode(E_OK);
else
static int
FN_Next_Field(FORM *form)
{
- T((T_CALLED("FN_Next_Field(%p)"), form));
+ T((T_CALLED("FN_Next_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Next_Field_On_Page(form->current)));
}
static int
FN_Previous_Field(FORM *form)
{
- T((T_CALLED("FN_Previous_Field(%p)"), form));
+ T((T_CALLED("FN_Previous_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Previous_Field_On_Page(form->current)));
}
static int
FN_First_Field(FORM *form)
{
- T((T_CALLED("FN_First_Field(%p)"), form));
+ T((T_CALLED("FN_First_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Next_Field_On_Page(form->field[form->page[form->curpage].pmax])));
}
static int
FN_Last_Field(FORM *form)
{
- T((T_CALLED("FN_Last_Field(%p)"), form));
+ T((T_CALLED("FN_Last_Field(%p)"), (void *)form));
returnCode(
_nc_Set_Current_Field(form,
Previous_Field_On_Page(form->field[form->page[form->curpage].pmin])));
static int
FN_Sorted_Next_Field(FORM *form)
{
- T((T_CALLED("FN_Sorted_Next_Field(%p)"), form));
+ T((T_CALLED("FN_Sorted_Next_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Next_Field(form->current)));
}
static int
FN_Sorted_Previous_Field(FORM *form)
{
- T((T_CALLED("FN_Sorted_Previous_Field(%p)"), form));
+ T((T_CALLED("FN_Sorted_Previous_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Previous_Field(form->current)));
}
static int
FN_Sorted_First_Field(FORM *form)
{
- T((T_CALLED("FN_Sorted_First_Field(%p)"), form));
+ T((T_CALLED("FN_Sorted_First_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Next_Field(form->field[form->page[form->curpage].smax])));
}
static int
FN_Sorted_Last_Field(FORM *form)
{
- T((T_CALLED("FN_Sorted_Last_Field(%p)"), form));
+ T((T_CALLED("FN_Sorted_Last_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Previous_Field(form->field[form->page[form->curpage].smin])));
}
static int
FN_Left_Field(FORM *form)
{
- T((T_CALLED("FN_Left_Field(%p)"), form));
+ T((T_CALLED("FN_Left_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Left_Neighbor_Field(form->current)));
}
static int
FN_Right_Field(FORM *form)
{
- T((T_CALLED("FN_Right_Field(%p)"), form));
+ T((T_CALLED("FN_Right_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Right_Neighbor_Field(form->current)));
}
static int
FN_Up_Field(FORM *form)
{
- T((T_CALLED("FN_Up_Field(%p)"), form));
+ T((T_CALLED("FN_Up_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Upper_Neighbor_Field(form->current)));
}
static int
FN_Down_Field(FORM *form)
{
- T((T_CALLED("FN_Down_Field(%p)"), form));
+ T((T_CALLED("FN_Down_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Down_Neighbor_Field(form->current)));
}
static int
PN_Next_Page(FORM *form)
{
- T((T_CALLED("PN_Next_Page(%p)"), form));
+ T((T_CALLED("PN_Next_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, Next_Page_Number(form), (FIELD *)0));
}
static int
PN_Previous_Page(FORM *form)
{
- T((T_CALLED("PN_Previous_Page(%p)"), form));
+ T((T_CALLED("PN_Previous_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, Previous_Page_Number(form), (FIELD *)0));
}
static int
PN_First_Page(FORM *form)
{
- T((T_CALLED("PN_First_Page(%p)"), form));
+ T((T_CALLED("PN_First_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, 0, (FIELD *)0));
}
static int
PN_Last_Page(FORM *form)
{
- T((T_CALLED("PN_Last_Page(%p)"), form));
+ T((T_CALLED("PN_Last_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, form->maxpage - 1, (FIELD *)0));
}
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
- T((T_CALLED("Data_Entry(%p,%s)"), form, _tracechtype((chtype)c)));
+ T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c)));
if ((field->opts & O_EDIT)
#if FIX_FORM_INACTIVE_BUG
&& (field->opts & O_ACTIVE)
const Binding_Info *BI = (Binding_Info *) 0;
int res = E_UNKNOWN_COMMAND;
- T((T_CALLED("form_driver(%p,%d)"), form, c));
+ T((T_CALLED("form_driver(%p,%d)"), (void *)form, c));
if (!form)
RETURN(E_BAD_ARGUMENT);
FIELD_CELL *widevalue = 0;
#endif
- T((T_CALLED("set_field_buffer(%p,%d,%s)"), field, buffer, _nc_visbuf(value)));
+ T((T_CALLED("set_field_buffer(%p,%d,%s)"), (void *)field, buffer, _nc_visbuf(value)));
if (!field || !value || ((buffer < 0) || (buffer > field->nbuf)))
RETURN(E_BAD_ARGUMENT);
{
char *result = 0;
- T((T_CALLED("field_buffer(%p,%d)"), field, buffer));
+ T((T_CALLED("field_buffer(%p,%d)"), (const void *)field, buffer));
if (field && (buffer >= 0) && (buffer <= field->nbuf))
{
#if USE_WIDEC_SUPPORT
-/* FIXME: see lib_get_wch.c */
-#if HAVE_MBTOWC && HAVE_MBLEN
-#define reset_mbytes(state) mblen(NULL, 0), mbtowc(NULL, NULL, 0)
-#define count_mbytes(buffer,length,state) mblen(buffer,length)
-#define trans_mbytes(wch,buffer,length,state) \
- (int) mbtowc(&wch, buffer, length)
-#elif HAVE_MBRTOWC && HAVE_MBRLEN
-#define NEED_STATE
-#define reset_mbytes(state) init_mb(state)
-#define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state)
-#define trans_mbytes(wch,buffer,length,state) \
- (int) mbrtowc(&wch, buffer, length, &state)
-#else
-make an error
-#endif
-
/*---------------------------------------------------------------------------
| Convert a multibyte string to a wide-character string. The result must be
| freed by the caller.
int pass;
int status;
-#ifdef NEED_STATE
+#ifndef state_unused
mbstate_t state;
#endif
source[passed + tries] = 0;
reset_mbytes(state);
- status = trans_mbytes(wch, source + passed, tries, state);
- source[passed + tries] = save;
+ status = check_mbytes(wch, source + passed, tries, state);
+ source[passed + tries] = (char)save;
if (status > 0)
{