/* (function,check_enabled,data,(char/font),shortcut_str,{sub-menu,}menu-name) */ static PyObject *PyFF_registerMenuItem(PyObject *self, PyObject *args) { int i, cnt; int flags; PyObject *utf8_name; printf("PyFF_registerMenuItem(top)\n" ); if ( !no_windowing_ui ) { cnt = PyTuple_Size(args); if ( cnt<6 ) { PyErr_Format(PyExc_TypeError, "Too few arguments"); return( NULL ); } if (!PyCallable_Check(PyTuple_GetItem(args,0))) { PyErr_Format(PyExc_TypeError, "First argument is not callable" ); return( NULL ); } if (PyTuple_GetItem(args,1)!=Py_None && !PyCallable_Check(PyTuple_GetItem(args,1))) { PyErr_Format(PyExc_TypeError, "First argument is not callable" ); return( NULL ); } flags = FlagsFromTuple(PyTuple_GetItem(args,3), menuviews ); if ( flags==-1 ) { PyErr_Format(PyExc_ValueError, "Unknown window for menu" ); return( NULL ); } if ( PyTuple_GetItem(args,4)!=Py_None ) { char *shortcut_str = PyString_AsString(PyTuple_GetItem(args,4)); if ( shortcut_str==NULL ) return( NULL ); } for ( i=5; i<cnt; ++i ) { utf8_name = PyString_AsEncodedObject(PyTuple_GetItem(args,i), "UTF-8",NULL); if ( utf8_name==NULL ) return( NULL ); printf("utf8_name: %s\n", utf8_name ); Py_DECREF(utf8_name); } if ( flags&menu_fv ) InsertSubMenus(args,&fvpy_menu_data,false ); if ( flags&menu_cv ) InsertSubMenus(args,&cvpy_menu_data,true ); } Py_RETURN_NONE; }
static void InsertSubMenus(PyObject *args,struct python_menu_shell *mn, int is_cv) { int i, j, cnt; PyObject *func, *check, *data; char *shortcut_str; /* I've done type checking already */ cnt = PyTuple_Size(args); func = PyTuple_GetItem(args,0); if ( (check = PyTuple_GetItem(args,1))==Py_None ) check = NULL; data = PyTuple_GetItem(args,2); if ( PyTuple_GetItem(args,4)==Py_None ) shortcut_str = NULL; else shortcut_str = PyString_AsString(PyTuple_GetItem(args,4)); for ( i=5; i<cnt; ++i ) { PyObject *submenu_utf8 = PyString_AsEncodedObject(PyTuple_GetItem(args,i), "UTF-8",NULL); char *submenu = copy( PyString_AsString(submenu_utf8) ); Py_DECREF(submenu_utf8); j = 0; if ( mn->menu!=NULL ) { for ( j=0; mn->menu[j].name!=NULL || mn->menu[j].line; ++j ) { if ( mn->menu[j].name==NULL ) continue; if ( strcmp(mn->menu[j].name,submenu)==0 ) break; } } if ( mn->menu==NULL || mn->menu[j].name==NULL ) { if ( mn->cnt<=mn->max ) mn->menu = grealloc(mn->menu,((mn->max+=5)+1)*sizeof(struct python_menu_info)); memset(mn->menu+j,0,2*sizeof(struct python_menu_info)); } if ( mn->menu[j].name==NULL ) mn->menu[j].name = submenu; else { if ( mn->menu[j].func!=NULL ) { Py_DECREF(mn->menu[j].func); Py_DECREF(mn->menu[j].data); } if ( mn->menu[j].check_enabled!=NULL ) { Py_DECREF(mn->menu[j].check_enabled); } mn->menu[j].func = mn->menu[j].data = mn->menu[j].check_enabled = NULL; } if ( i!=cnt-1 ) { if ( mn->menu[j].sub_menu==NULL ) mn->menu[j].sub_menu = gcalloc(1,sizeof(struct python_menu_shell)); mn = mn->menu[j].sub_menu; } else { Py_INCREF(func); if ( check!=NULL ) Py_INCREF(check); Py_INCREF(data); mn->menu[j].shortcut_str = copy(shortcut_str); mn->menu[j].func = func; mn->menu[j].check_enabled = check; mn->menu[j].data = data; mn->menu[j].sub_menu = NULL; } } }
static PyObject* tiger_hexdigest(tiger_TigerObject* self, PyObject* args) { return PyString_AsEncodedObject(tiger_digest(self, args), "hex", NULL); }