Posted to tcl by kevin_walzer at Wed Oct 30 02:31:25 GMT 2024view pretty

char *acc_role, *acc_name, *acc_description, *acc_value, *acc_state, *acc_action;

/* Hash table for storing accessible window attributes. */
Tcl_HashTable *AccessibleObject;

int
Tk_AccessibleRole(
		      TCL_UNUSED(void *),
		      Tcl_Interp *ip,		/* Current interpreter. */
		      int objc,			/* Number of arguments. */
		      Tcl_Obj *const objv[])	/* Argument objects. */
{	
  if (objc < 3) {
    Tcl_WrongNumArgs(ip, 1, objv, "window? role?");
    return TCL_ERROR;
  }
	
  Tk_Window win;
  Tcl_Obj *obj;
  Tcl_Size arg_length;
  const char *role;
  Tcl_HashEntry *hPtr = NULL;
  Tcl_HashEntry *hPtr2 = NULL;
  int isNew = 0;


  Tcl_InitHashTable (&AccessibleObject, TCL_STRING_KEYS);
  
  /* Attribute hash table. */
  Tcl_HashTable *attributeTbl;

  if (attributeTbl == NULL) {
    Tcl_InitHashTable(&attributeTbl, TCL_STRING_KEYS);
  }
  
  win = Tk_NameToWindow(ip, Tcl_GetString(objv[1]), Tk_MainWindow(ip));
  if (win == NULL) {
    return TCL_ERROR;
  }
  
  /* Get accessibility role for window. */

  obj = objv[2];
  role  =  Tcl_GetStringFromObj(obj, &arg_length);
  acc_role = (char*)role;
  hPtr = Tcl_CreateHashEntry(AccessibleObject, 
			     Tk_PathName(win), &isNew);
  Tcl_SetHashValue(hPtr, attributeTbl);
  hPtr2 = Tcl_CreateHashEntry(attributeTbl, acc_role, &isNew);
  Tcl_SetHashValue(hPtr2, acc_role);
  return TCL_OK;
}