#include <X11/Intrinsic.h>
#include <X11/Xaw/Table.h>
#include <stdio.h>

XawTableElement tabledata[] = {
   /*  0 */ "foo0", "foo1", "foo2", "foo3", "foo4", "foo5",
   /*  6 */ "bar0", "bar1", "bar2", "bar3",
   /* 10 */ "baz0", "baz1", "baz2", "baz3", "baz4", "baz5", "baz6",
   /* 17 */ "quux0", "quux1", "quux2", "quux3", "quux4",
};

XawTableLine lines[] = {
   {tabledata, 6},
   {tabledata+6, 4},
   {tabledata+10, 7},
   {tabledata+17, 5},
};

void cb(Widget w, XtPointer client_data, XtPointer call_data)
{
   XawTableReturnStruct *trs = (XawTableReturnStruct *) call_data;
   int i;

   switch (trs->type) {
    case XawTableReturnNone:
      printf("None\n");
      break;
    case XawTableReturnElement:
      printf("Element: (%d,%d) = [%s]\n",
	     trs->row, trs->col,
	     *trs->element);
      break;
    case XawTableReturnLine:
      printf("Line: (%d) = [%s", trs->row,
	     trs->line->element[0]);
      for (i=1; i<trs->line->nelem; i++)
	 printf(",%s",trs->line->element[i]);
      printf("]\n");
      break;
   }
}

main(int argc, char *argv[])
{
   Widget shell, table;
   XtAppContext app;

   shell = XtAppInitialize(&app, "TableTest", NULL, 0, &argc, argv,
			   NULL, NULL, 0);

   table = XtCreateManagedWidget("table", tableWidgetClass, shell, NULL, 0);

   XtAddCallback(table, "callback", cb, NULL);

   XtRealizeWidget(shell);

   XawTableChange(table, lines, 4, 0, True);

   XtAppMainLoop(app);
}
