Index: doc/GetIndex.3
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/GetIndex.3,v
retrieving revision 1.9
diff -c -r1.9 GetIndex.3
*** doc/GetIndex.3	15 Feb 2002 14:28:47 -0000	1.9
--- doc/GetIndex.3	21 Feb 2002 21:30:23 -0000
***************
*** 21,27 ****
  .VS
  .sp
  int
! \fBTcl_GetIndexFromObjStruct\fR(\fIinterp, objPtr, tablePtr, offset,
  msg, flags, indexPtr\fR)
  .VE
  .SH ARGUMENTS
--- 21,27 ----
  .VS
  .sp
  int
! \fBTcl_GetIndexFromObjStruct\fR(\fIinterp, objPtr, structTablePtr, offset,
  msg, flags, indexPtr\fR)
  .VE
  .SH ARGUMENTS
***************
*** 36,45 ****
  .AP "CONST char" **tablePtr in
  An array of null-terminated ASCII strings.  The end of the array is marked
  by a NULL string pointer.
  .VS
  .AP int offset in
! The offset to add to tablePtr to get to the next string in the
! list. The end of the array is marked by a NULL string pointer.
  .VE
  .AP "CONST char" *msg in
  Null-terminated string describing what is being looked up, such as
--- 36,49 ----
  .AP "CONST char" **tablePtr in
  An array of null-terminated ASCII strings.  The end of the array is marked
  by a NULL string pointer.
+ .AP "CONST VOID" **structTablePtr in
+ An array of arbitrary type, typically some \fBstruct\fP type.
+ The first member of the structure must be a null-terminated ASCII string.
+ The size of the structure is given by \fIoffset\fP.
  .VS
  .AP int offset in
! The offset to add to structTablePtr to get to the next entry.
! The end of the array is marked by a NULL string pointer.
  .VE
  .AP "CONST char" *msg in
  Null-terminated string describing what is being looked up, such as
Index: generic/tcl.decls
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tcl.decls,v
retrieving revision 1.84
diff -c -r1.84 tcl.decls
*** generic/tcl.decls	20 Feb 2002 18:46:29 -0000	1.84
--- generic/tcl.decls	21 Feb 2002 21:30:23 -0000
***************
*** 1086,1092 ****
  }
  declare 304 generic {
      int Tcl_GetIndexFromObjStruct(Tcl_Interp *interp, Tcl_Obj *objPtr,
! 	    CONST84 char **tablePtr, int offset, CONST char *msg, int flags,
  	    int *indexPtr)
  }
  declare 305 generic {
--- 1086,1092 ----
  }
  declare 304 generic {
      int Tcl_GetIndexFromObjStruct(Tcl_Interp *interp, Tcl_Obj *objPtr,
! 	    CONST VOID *tablePtr, int offset, CONST char *msg, int flags,
  	    int *indexPtr)
  }
  declare 305 generic {
Index: generic/tclDecls.h
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclDecls.h,v
retrieving revision 1.84
diff -c -r1.84 tclDecls.h
*** generic/tclDecls.h	20 Feb 2002 18:46:29 -0000	1.84
--- generic/tclDecls.h	21 Feb 2002 21:30:25 -0000
***************
*** 987,993 ****
  /* 304 */
  EXTERN int		Tcl_GetIndexFromObjStruct _ANSI_ARGS_((
  				Tcl_Interp * interp, Tcl_Obj * objPtr, 
! 				CONST84 char ** tablePtr, int offset, 
  				CONST char * msg, int flags, int * indexPtr));
  /* 305 */
  EXTERN VOID *		Tcl_GetThreadData _ANSI_ARGS_((
--- 987,993 ----
  /* 304 */
  EXTERN int		Tcl_GetIndexFromObjStruct _ANSI_ARGS_((
  				Tcl_Interp * interp, Tcl_Obj * objPtr, 
! 				CONST VOID * tablePtr, int offset, 
  				CONST char * msg, int flags, int * indexPtr));
  /* 305 */
  EXTERN VOID *		Tcl_GetThreadData _ANSI_ARGS_((
***************
*** 1916,1922 ****
      Tcl_Encoding (*tcl_GetEncoding) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * name)); /* 301 */
      CONST char * (*tcl_GetEncodingName) _ANSI_ARGS_((Tcl_Encoding encoding)); /* 302 */
      void (*tcl_GetEncodingNames) _ANSI_ARGS_((Tcl_Interp * interp)); /* 303 */
!     int (*tcl_GetIndexFromObjStruct) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * objPtr, CONST84 char ** tablePtr, int offset, CONST char * msg, int flags, int * indexPtr)); /* 304 */
      VOID * (*tcl_GetThreadData) _ANSI_ARGS_((Tcl_ThreadDataKey * keyPtr, int size)); /* 305 */
      Tcl_Obj * (*tcl_GetVar2Ex) _ANSI_ARGS_((Tcl_Interp * interp, char * part1, char * part2, int flags)); /* 306 */
      ClientData (*tcl_InitNotifier) _ANSI_ARGS_((void)); /* 307 */
--- 1916,1922 ----
      Tcl_Encoding (*tcl_GetEncoding) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * name)); /* 301 */
      CONST char * (*tcl_GetEncodingName) _ANSI_ARGS_((Tcl_Encoding encoding)); /* 302 */
      void (*tcl_GetEncodingNames) _ANSI_ARGS_((Tcl_Interp * interp)); /* 303 */
!     int (*tcl_GetIndexFromObjStruct) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * objPtr, CONST VOID * tablePtr, int offset, CONST char * msg, int flags, int * indexPtr)); /* 304 */
      VOID * (*tcl_GetThreadData) _ANSI_ARGS_((Tcl_ThreadDataKey * keyPtr, int size)); /* 305 */
      Tcl_Obj * (*tcl_GetVar2Ex) _ANSI_ARGS_((Tcl_Interp * interp, char * part1, char * part2, int flags)); /* 306 */
      ClientData (*tcl_InitNotifier) _ANSI_ARGS_((void)); /* 307 */
Index: generic/tclIndexObj.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclIndexObj.c,v
retrieving revision 1.15
diff -c -r1.15 tclIndexObj.c
*** generic/tclIndexObj.c	16 Feb 2002 00:37:54 -0000	1.15
--- generic/tclIndexObj.c	21 Feb 2002 21:30:25 -0000
***************
*** 161,167 ****
  	indexPtr)
      Tcl_Interp *interp; 	/* Used for error reporting if not NULL. */
      Tcl_Obj *objPtr;		/* Object containing the string to lookup. */
!     CONST char **tablePtr;	/* The first string in the table. The second
  				 * string will be at this address plus the
  				 * offset, the third plus the offset again,
  				 * etc. The last entry must be NULL
--- 161,167 ----
  	indexPtr)
      Tcl_Interp *interp; 	/* Used for error reporting if not NULL. */
      Tcl_Obj *objPtr;		/* Object containing the string to lookup. */
!     CONST VOID *tablePtr;	/* The first string in the table. The second
  				 * string will be at this address plus the
  				 * offset, the third plus the offset again,
  				 * etc. The last entry must be NULL
***************
*** 274,280 ****
  	resultPtr = Tcl_GetObjResult(interp);
  	Tcl_AppendStringsToObj(resultPtr,
  		(numAbbrev > 1) ? "ambiguous " : "bad ", msg, " \"",
! 		key, "\": must be ", *tablePtr, (char *) NULL);
  	for (entryPtr = NEXT_ENTRY(tablePtr, offset), count = 0;
  		*entryPtr != NULL;
  		entryPtr = NEXT_ENTRY(entryPtr, offset), count++) {
--- 274,280 ----
  	resultPtr = Tcl_GetObjResult(interp);
  	Tcl_AppendStringsToObj(resultPtr,
  		(numAbbrev > 1) ? "ambiguous " : "bad ", msg, " \"",
! 		key, "\": must be ", STRING_AT(tablePtr,offset,0), (char*)NULL);
  	for (entryPtr = NEXT_ENTRY(tablePtr, offset), count = 0;
  		*entryPtr != NULL;
  		entryPtr = NEXT_ENTRY(entryPtr, offset), count++) {
