campo-sirio/xi/xidbg.c
alex fa53273fe0 Patch level : 2.0 nopatch
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Compilazione Linux


git-svn-id: svn://10.65.10.50/trunk@11220 c028cbd2-c16b-5b4b-a496-9718f37d4682
2003-06-06 13:50:22 +00:00

479 lines
11 KiB
C
Executable File

/*******************************************************************************
* Copyright 1991-1996 by ORCA Software, Inc. *
* *
* All rights reserved. May not be reproduced or distributed, in printed or *
* electronic form, without permission of ORCA Software, Inc. May not be *
* distributed as object code, separately or linked with other object modules, *
* without permission. *
*******************************************************************************/
#define XI_INTERNAL
#define XI_R3_COMPAT
#include "xi.h"
#include "xiutils.h"
#define UNDEFINED 1000
#define BUFFERLEN 200
static char *
bool_to_str( BOOLEAN b )
{
if ( b )
return "TRUE";
else
return "FALSE";
}
void
xi_event_debug( char *tag, XI_EVENT * xiev, char *s, int len )
{
char *tmp;
char str[BUFFERLEN],
str2[BUFFERLEN];
int i,
k;
int j;
XI_OBJ *xi_obj;
static struct
{
int type;
char *desc;
} event_text[] =
{
{
XIE_CHAR_FIELD, "XIE_CHAR_FIELD "
},
{
XIE_DBL_FIELD, "XIE_DBL_FIELD "
},
{
XIE_CHG_FIELD, "XIE_CHG_FIELD "
},
{
XIE_OFF_FIELD, "XIE_OFF_FIELD "
},
{
XIE_ON_FIELD, "XIE_ON_FIELD "
},
{
XIE_OFF_GROUP, "XIE_OFF_GROUP "
},
{
XIE_ON_GROUP, "XIE_ON_GROUP "
},
{
XIE_OFF_FORM, "XIE_OFF_FORM "
},
{
XIE_ON_FORM, "XIE_ON_FORM "
},
{
XIE_VIR_PAN, "XIE_VIR_PAN "
},
{
XIE_XVT_EVENT, "XIE_XVT_EVENT "
},
{
XIE_XVT_POST_EVENT, "XIE_XVT_POST_EVENT"
},
{
XIE_XIN_EVENT, "XIE_XIN_EVENT "
},
{
XIE_XIN_POST_EVENT, "XIE_XIN_POST_EVENT"
},
{
XIE_INIT, "XIE_INIT "
},
{
XIE_BUTTON, "XIE_BUTTON "
},
{
XIE_CHAR_CELL, "XIE_CHAR_CELL "
},
{
XIE_CLEANUP, "XIE_CLEANUP "
},
{
XIE_CLOSE, "XIE_CLOSE "
},
{
XIE_COMMAND, "XIE_COMMAND "
},
{
XIE_DBL_CELL, "XIE_DBL_CELL "
},
{
XIE_GET_FIRST, "XIE_GET_FIRST "
},
{
XIE_GET_LAST, "XIE_GET_LAST "
},
{
XIE_GET_NEXT, "XIE_GET_NEXT "
},
{
XIE_GET_PERCENT, "XIE_GET_PERCENT "
},
{
XIE_GET_PREV, "XIE_GET_PREV "
},
{
XIE_CELL_REQUEST, "XIE_CELL_REQUEST"
},
{
XIE_CHG_CELL, "XIE_CHG_CELL "
},
{
XIE_OFF_CELL, "XIE_OFF_CELL "
},
{
XIE_ON_CELL, "XIE_ON_CELL "
},
{
XIE_OFF_ROW, "XIE_OFF_ROW "
},
{
XIE_ON_ROW, "XIE_ON_ROW "
},
{
XIE_OFF_COLUMN, "XIE_OFF_COLUMN "
},
{
XIE_ON_COLUMN, "XIE_ON_COLUMN "
},
{
XIE_OFF_LIST, "XIE_OFF_LIST "
},
{
XIE_ON_LIST, "XIE_ON_LIST "
},
{
XIE_REC_ALLOCATE, "XIE_REC_ALLOCATE"
},
{
XIE_REC_FREE, "XIE_REC_FREE "
},
{
XIE_ROW_SIZE, "XIE_ROW_SIZE "
},
{
XIE_SELECT, "XIE_SELECT "
},
{
XIE_UPDATE, "XIE_UPDATE "
},
{
XIE_COL_DELETE, "XIE_COL_DELETE "
},
{
XIE_COL_MOVE, "XIE_COL_MOVE "
},
{
XIE_COL_SIZE, "XIE_COL_SIZE "
},
{
XIE_POST_NAVIGATION, "XIE_POST_NAVIGATION"
},
{
UNDEFINED, "Unknown XI Event"
}
};
static struct
{
XinEventType type;
char *desc;
} xin_event_text[] =
{
{
XinEventCreate, "XinEventCreate"
},
{
XinEventDestroy, "XinEventDestroy"
},
{
XinEventFocus, "XinEventFocus"
},
{
XinEventResize, "XinEventResize"
},
{
XinEventPaint, "XinEventPaint"
},
{
XinEventCloseButton, "XinEventCloseButton"
},
{
XinEventMouseDown, "XinEventMouseDown"
},
{
XinEventMouseUp, "XinEventMouseUp"
},
{
XinEventMouseMove, "XinEventMouseMove"
},
{
XinEventMouseDouble, "XinEventMouseDouble"
},
{
XinEventCharacter, "XinEventCharacter"
},
{
XinEventVScroll, "XinEventVScroll"
},
{
XinEventHScroll, "XinEventHScroll"
},
{
XinEventMenuCommand, "XinEventMenuCommand"
},
{
XinEventControl, "XinEventControl"
},
{
XinEventTimer, "XinEventTimer"
},
{
XinEventQuit, "XinEventQuit"
},
{
XinEventHelp, "XinEventHelp"
},
{
XinEventFont, "XinEventFont"
},
{
(XinEventType)UNDEFINED, "Unknown Xin Event"
}
};
static struct
{
int type;
char *desc;
} object_type[] =
{
{
XIT_BTN, "XIT_BTN"
},
{
XIT_CONTAINER, "XIT_CONTAINER"
},
{
XIT_FORM, "XIT_FORM"
},
{
XIT_FIELD, "XIT_FIELD"
},
{
XIT_GROUP, "XIT_GROUP"
},
{
XIT_LINE, "XIT_LINE"
},
{
XIT_RECT, "XIT_RECT"
},
{
XIT_TEXT, "XIT_TEXT"
},
{
XIT_CELL, "XIT_CELL"
},
{
XIT_COLUMN, "XIT_COLUMN"
},
{
XIT_ITF, "XIT_ITF"
},
{
XIT_LIST, "XIT_LIST"
},
{
XIT_ROW, "XIT_ROW"
},
{
UNDEFINED, "Unknown XI Object Type"
}
};
for ( i = 0; event_text[i].type != xiev->type &&
event_text[i].type != UNDEFINED; ++i )
;
sprintf( str, "%s: %s", tag, event_text[i].desc );
*str2 = '\0';
switch ( xiev->type )
{
#ifdef XI_USE_XVT
case XIE_XVT_EVENT:
case XIE_XVT_POST_EVENT:
sprintf( str2, " %s", XinXvtEventTextGet( &xiev->v.xvte ) );
break;
#endif
case XIE_XIN_EVENT:
case XIE_XIN_POST_EVENT:
for ( j = 0; xin_event_text[j].type != xiev->v.xin_event.type &&
xin_event_text[j].type != UNDEFINED; ++j )
;
sprintf( str2, " %s", xin_event_text[j].desc );
break;
case XIE_COMMAND:
sprintf( str2, " tag %d, shift %s, control %s", xiev->v.cmd.tag,
bool_to_str( xiev->v.cmd.shift ), bool_to_str( xiev->v.cmd.control ) );
break;
case XIE_INIT:
case XIE_BUTTON:
case XIE_CLOSE:
case XIE_DBL_CELL:
case XIE_DBL_FIELD:
case XIE_CHG_FIELD:
case XIE_OFF_FIELD:
case XIE_ON_FIELD:
case XIE_OFF_GROUP:
case XIE_ON_GROUP:
case XIE_OFF_FORM:
case XIE_ON_FORM:
case XIE_CHG_CELL:
case XIE_OFF_CELL:
case XIE_ON_CELL:
case XIE_OFF_ROW:
case XIE_ON_ROW:
case XIE_OFF_COLUMN:
case XIE_ON_COLUMN:
case XIE_OFF_LIST:
case XIE_ON_LIST:
case XIE_CLEANUP:
xi_obj = xiev->v.xi_obj;
for ( k = 0; object_type[k].type != xi_obj->type &&
object_type[k].type != UNDEFINED; ++k )
;
switch ( xi_obj->type )
{
case XIT_CELL:
sprintf( str2, " cid %3d, type %s r %d c %d v %d",
xi_obj->cid, object_type[k].desc, xi_obj->v.cell.row,
xi_obj->v.cell.column, !xi_obj->v.cell.is_vert_scrolled );
break;
case XIT_ROW:
sprintf( str2, " cid %3d, type %s r %d", xi_obj->cid,
object_type[k].desc, xi_obj->v.row );
break;
default:
sprintf( str2, " cid %3d, type %s", xi_obj->cid,
object_type[k].desc );
break;
}
break;
case XIE_CHAR_CELL:
case XIE_CHAR_FIELD:
{
char char_str[20];
int ch;
ch = xiev->v.chr.ch;
switch ( ch )
{
case XI_KEY_CLEAR:
strcpy( char_str, "XI_KEY_CLEAR" );
break;
case XI_KEY_DEL:
strcpy( char_str, "XI_KEY_DEL" );
break;
case '\b':
strcpy( char_str, "BS" );
break;
default:
char_str[0] = ( char ) ch;
char_str[1] = '\0';
break;
}
xi_obj = xiev->v.chr.xi_obj;
for ( k = 0; object_type[k].type != xi_obj->type &&
object_type[k].type != UNDEFINED; ++k )
;
switch ( xi_obj->type )
{
case XIT_CELL:
sprintf( str2,
" cid %3d type %s r %d c %d ch %s shft %d ctrl %d alt %d",
xi_obj->cid, object_type[k].desc, xi_obj->v.cell.row,
xi_obj->v.cell.column, char_str, xiev->v.chr.shift,
xiev->v.chr.control, xiev->v.chr.alt );
break;
case XIT_FIELD:
sprintf( str2, " cid %3d type %s ch %s shft %d ctrl %d alt %d", xi_obj->cid,
object_type[k].desc, char_str, xiev->v.chr.shift,
xiev->v.chr.control, xiev->v.chr.alt );
break;
default:
break;
}
break;
}
case XIE_GET_FIRST:
case XIE_GET_LAST:
sprintf( str2, " data_rec %08.8lx", ( long ) xiev->v.rec_request.data_rec );
break;
case XIE_GET_NEXT:
case XIE_GET_PREV:
sprintf( str2, " spec_rec %08.8lx, data_rec %08.8lx",
( long ) xiev->v.rec_request.spec_rec, ( long ) xiev->v.rec_request.data_rec );
break;
case XIE_CELL_REQUEST:
sprintf( str2, " c %2d, rec %08.8lx, len %3d",
( int ) xiev->v.cell_request.col_nbr, ( long ) xiev->v.cell_request.rec,
xiev->v.cell_request.len );
break;
case XIE_GET_PERCENT:
sprintf( str2, " list->cid %d, record %08.8lx",
xiev->v.get_percent.list->cid,
( long ) xiev->v.get_percent.record );
break;
case XIE_SELECT:
sprintf( str2, " row %d, selected %d, dbl_click %d shift %d control %d column %d",
xiev->v.select.xi_obj->v.row, xiev->v.select.selected,
xiev->v.select.dbl_click, xiev->v.select.shift, xiev->v.select.control, xiev->v.select.column );
break;
case XIE_REC_ALLOCATE:
sprintf( str2, " list cid %d", xiev->v.rec_allocate.list->cid );
break;
case XIE_REC_FREE:
sprintf( str2, " list cid %d, record %08.8lx", xiev->v.rec_free.list->cid, xiev->v.rec_free.record );
break;
case XIE_ROW_SIZE:
sprintf( str2, " row %d, new_size %d", xiev->v.row_size.xi_obj->v.row, xiev->v.row_size.new_row_height );
break;
case XIE_VIR_PAN:
sprintf( str2, " delta_x %d, delta_y %d, before_pan %d",
xiev->v.vir_pan.delta_x, xiev->v.vir_pan.delta_y,
xiev->v.vir_pan.before_pan );
break;
case XIE_COL_DELETE:
sprintf( str2, " list cid %d, col_nbr %d",
xiev->v.column.list->cid, xiev->v.column.col_nbr );
break;
case XIE_COL_MOVE:
sprintf( str2, " list cid %d, col_nbr %d, new_col_nbr %d",
xiev->v.column.list->cid, xiev->v.column.col_nbr,
xiev->v.column.new_col_nbr );
break;
case XIE_COL_SIZE:
sprintf( str2, " list cid %d, col_nbr %d, new_col_width %d, new_col_pixel_width %d",
xiev->v.column.list->cid, xiev->v.column.col_nbr,
xiev->v.column.new_col_width, xiev->v.column.new_col_pixel_width );
break;
default:
break;
}
tmp = ( char * ) xi_tree_malloc( strlen( str ) + strlen( str2 ) + 2, NULL );
strcpy( tmp, str );
strcat( tmp, str2 );
if ( ( int ) strlen( tmp ) >= len )
tmp[len] = '\0';
strcpy( s, tmp );
xi_tree_free( tmp );
}