::com::sun::star::uno::Type * operator()() const { ::rtl::OUString the_name( "com.sun.star.accessibility.AccessibleTableModelChange" ); // ::rtl::OUString the_tname0( "short" ); // ::rtl::OUString the_name0( "Type" ); // ::rtl::OUString the_tname1( "long" ); // ::rtl::OUString the_name1( "FirstRow" ); // ::rtl::OUString the_name2( "LastRow" ); // ::rtl::OUString the_name3( "FirstColumn" ); // ::rtl::OUString the_name4( "LastColumn" ); // ::typelib_StructMember_Init the_members[] = { // { { typelib_TypeClass_SHORT, the_tname0.pData, the_name0.pData }, false }, // { { typelib_TypeClass_LONG, the_tname1.pData, the_name1.pData }, false }, // { { typelib_TypeClass_LONG, the_tname1.pData, the_name2.pData }, false }, // { { typelib_TypeClass_LONG, the_tname1.pData, the_name3.pData }, false }, // { { typelib_TypeClass_LONG, the_tname1.pData, the_name4.pData }, false } }; // ::typelib_TypeDescription * the_newType = 0; // ::typelib_typedescription_newStruct(&the_newType, the_name.pData, 0, 5, the_members); // ::typelib_typedescription_register(&the_newType); // ::typelib_typedescription_release(the_newType); return new ::com::sun::star::uno::Type(::com::sun::star::uno::TypeClass_STRUCT, the_name); // leaked }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { int err = 0; CosNaming::Name the_name (0); CORBA::ORB_var orb; try { // Contact the orb orb = CORBA::ORB_init (argc, argv); // Scan through the command line options bool failed = false, quiet = false, destroy = false; const ACE_TCHAR *const pname = argv[0]; const ACE_TCHAR *nameService = 0; ACE_TCHAR kindsep = ACE_TEXT('.'); ACE_TCHAR ctxsep[] = ACE_TEXT("/"); ACE_TCHAR *name = 0; ACE_Time_Value rtt = ACE_Time_Value::zero; if (0 < argc) { while (0 < --argc) { ++argv; if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--ns"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --ns requires an argument\n")); failed= true; } else { ++argv; if (nameService) { ACE_DEBUG ((LM_DEBUG, "Error: more than one --ns.\n")); failed= true; } else nameService = *argv; } } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--quiet"))) { quiet = true; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--name"))) { if (name) { ACE_DEBUG ((LM_DEBUG, "Error: more than one --name\n")); failed = true; } else if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --name requires an argument\n")); failed = true; } else name = *(++argv); } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--ctxsep"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --ctxsep requires a character\n")); failed = true; } else if (1 != ACE_OS::strlen(*(++argv))) { ACE_DEBUG ((LM_DEBUG, "Error: --ctxsep takes a single character (not %s)\n", *argv)); failed = true; } else ctxsep[0] = (*argv)[0]; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--kindsep"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --kindsep requires a character\n")); failed = true; } else if (1 != ACE_OS::strlen(*(++argv))) { ACE_DEBUG ((LM_DEBUG, "Error: --kindsep takes a single character (not %s)\n", *argv)); failed = true; } else kindsep = (*argv)[0]; } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--rtt"))) { if (rtt != ACE_Time_Value::zero) { ACE_DEBUG ((LM_DEBUG, "Error: --rtt given more than once\n")); failed = true; } else if (!--argc || !ACE_OS::ace_isdigit (ACE_TEXT_ALWAYS_CHAR (*(++argv))[0])) { ACE_DEBUG ((LM_DEBUG, "Error: --rtt requires a number\n")); failed = true; } else rtt.set(ACE_OS::atoi (ACE_TEXT_ALWAYS_CHAR (*argv)), 0); } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--destroy"))) { destroy = true; } else { ACE_DEBUG ((LM_DEBUG, "Unknown option %s\n", *argv)); failed = true; } } } if (!name || failed) { ACE_DEBUG ((LM_DEBUG, "\nUsage:\n %s --name <name>\n" "optional:\n" " --ns <ior>\n" " --ctxsep <character>\n" " --kindsep <character>\n" " --destroy\n" " --quiet\n" " --rtt <seconds> {Sets the relative round trip timeout policy}\n\n", "where <name> uses the --ctxsep character (defaults to /)\n" "to separate sub-contexts and --kindsep (defaults to .)\n" "to separate ID & Kind. Will destroy a naming context\n" "before unbinding if --destroy is given, otherwise it\n" "will orphan them. Connects to default NameService\n" "unless --ns is given. Displays all ID/Kinds found\n" "on path unless --quiet is given.\n", pname)); orb->destroy (); return 1; } // Contact the name service CORBA::Object_var nc_obj; if (nameService) nc_obj = orb->string_to_object (nameService); else nc_obj = orb->resolve_initial_references ("NameService"); nc_obj = set_rtt(orb.in(), nc_obj.in (), rtt); CosNaming::NamingContext_var root_nc = CosNaming::NamingContext::_narrow (nc_obj.in ()); if (CORBA::is_nil (root_nc.in ())) { ACE_DEBUG ((LM_DEBUG, "Error: nil naming context\n")); orb->destroy (); return 1; } // Assemble the name from the user string given ACE_TCHAR *cp; while (0 != (cp = ACE_OS::strtok (name, ctxsep))) { const int index= the_name.length(); the_name.length (index+1); ACE_TCHAR *kind = const_cast<ACE_TCHAR*> (ACE_OS::strchr (cp, kindsep)); if (kind) { *kind = '\0'; the_name[index].kind= CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(++kind)); } the_name[index].id = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(cp)); name = 0; // way strtok works } // Attempt to locate the object and destroy/unbind it CORBA::Object_var obj = root_nc->resolve (the_name); root_nc->unbind (the_name); if (!quiet) { unsigned int index; for (index= 0u; index < the_name.length()-1u; ++index) { if (the_name[index].kind && the_name[index].kind[0]) ACE_DEBUG ((LM_DEBUG, "Found ID: %C (Kind: %C)\n", the_name[index].id.in(), the_name[index].kind.in())); else ACE_DEBUG ((LM_DEBUG, "Found ID: %C\n", the_name[index].id.in())); } ACE_DEBUG ((LM_DEBUG, "UnBound ID: %C", the_name[index].id.in())); if (the_name[index].kind && the_name[index].kind[0]) ACE_DEBUG ((LM_DEBUG, " (Kind: %C)\n", the_name[index].kind.in())); ACE_DEBUG ((LM_DEBUG, "\n")); } if (!quiet || destroy) { bool failure = false; try { obj = set_rtt(orb.in (), obj.in (), rtt); CosNaming::NamingContext_var this_nc = CosNaming::NamingContext::_narrow (obj.in ()); if (!CORBA::is_nil (this_nc.in ())) { if (destroy) { if (!quiet) ACE_DEBUG ((LM_DEBUG,"Destroying\n")); this_nc->destroy( ); } else if (!quiet) { CORBA::String_var str = orb->object_to_string (obj.in ()); ACE_DEBUG ((LM_DEBUG, "\n*** Possiably Orphaned Naming Context ***\n%C\n\n", str.in())); } } else if (destroy && !quiet) ACE_DEBUG ((LM_DEBUG,"Can't Destroy object, it is not a naming context!\n")); } catch (const CORBA::OBJECT_NOT_EXIST&) { if (!quiet) ACE_DEBUG ((LM_DEBUG, "{Object does not exist!}\n")); failure = true; } catch (const CORBA::TRANSIENT&) { if (!quiet) ACE_DEBUG ((LM_DEBUG, "{Object is transient!}\n")); failure = true; } catch (const CORBA::TIMEOUT&) { if (!quiet) ACE_DEBUG ((LM_DEBUG, "{Operation timed out!}\n")); failure = true; } if (failure && !quiet) { if (destroy) { ACE_DEBUG ((LM_DEBUG, "Failed to destroy context.\n")); } else { ACE_DEBUG ((LM_DEBUG, "Failed to check for orphaned naming context.\n")); } } } } catch (const CosNaming::NamingContext::NotFound& nf) { unsigned int index; const unsigned int limit= the_name.length()-nf.rest_of_name.length(); ACE_DEBUG ((LM_DEBUG, "\nError:\n")); for (index= 0u; index < limit; ++index) { if (the_name[index].kind && the_name[index].kind[0]) ACE_DEBUG ((LM_DEBUG, "ID: %C (Kind: %C)\n", the_name[index].id.in(), the_name[index].kind.in())); else ACE_DEBUG ((LM_DEBUG, "ID: %C\n", the_name[index].id.in())); } const char *why= "Unknown reason"; switch (nf.why) { case CosNaming::NamingContext::missing_node: why= "\nThe following node is missing"; break; case CosNaming::NamingContext::not_context: why= "\nThe following is a final object binding, not a naming context"; break; case CosNaming::NamingContext::not_object: why= "\nThe following is a naming context, not a final object binding"; break; } nf._tao_print_exception (why); for (index= 0u; index < nf.rest_of_name.length(); ++index) { if (nf.rest_of_name[index].kind && nf.rest_of_name[index].kind[0]) ACE_DEBUG ((LM_DEBUG, "ID: %C (Kind: %C)\n", nf.rest_of_name[index].id.in(), nf.rest_of_name[index].kind.in())); else ACE_DEBUG ((LM_DEBUG, "ID: %C\n", nf.rest_of_name[index].id.in())); } ++err; } catch (const CORBA::Exception& ex) { ACE_DEBUG ((LM_DEBUG, "\nError:\n")); ex._tao_print_exception ("Exception in nsdel"); ++err; } try { orb->destroy (); } catch (const CORBA::Exception& ex) { ACE_DEBUG ((LM_DEBUG, "\nError:\n")); ex._tao_print_exception ("Exception in while shutting down"); ++err; } return err; }
//============================================================================ int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { int err = 0; try { // Contact the orb orb = CORBA::ORB_init (argc, argv); // Scan through the command line options bool failed = false, showNSonly = false; ACE_TCHAR kindsep = ACE_TEXT('.'); ACE_TCHAR ctxsep[] = ACE_TEXT("/"); ACE_TCHAR *name = 0; const ACE_TCHAR *const pname = argv[0]; const ACE_TCHAR *nameService = 0; if (0 < argc) { while (0 < --argc) { ++argv; if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--ns"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --ns requires an argument\n")); failed = true; } else { ++argv; if (nameService) { ACE_DEBUG ((LM_DEBUG, "Error: more than one --ns.\n")); failed = true; } else if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --ns " "are both specified\n")); failed = true; } else nameService = *argv; } } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--nsior"))) { if (showIOR || showCtxIOR || noLoops || nameService || name || maxDepth) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior given " "with other options\n")); failed = true; } else showNSonly = true; } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--ior"))) { if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --ior are " "both specified\n")); failed = true; } else showIOR = true; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--ctxior"))) { if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --ctxior are " "both specified\n")); failed = true; } else showCtxIOR = true; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--tree"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --tree requires an argument\n")); failed = true; } else { ++argv; if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --tree are " "both specified\n")); failed = true; } else myTree = ACE_TEXT_ALWAYS_CHAR (*argv); } } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--node"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --node requires an argument\n")); failed = true; } else { ++argv; if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --node are " "both specified\n")); failed = true; } else myNode = ACE_TEXT_ALWAYS_CHAR (*argv); } } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--noloops"))) { if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --noloops are " "both specified\n")); failed = true; } else noLoops = true; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--name"))) { if (name) { ACE_DEBUG ((LM_DEBUG, "Error: more than one --name\n")); failed = true; } else if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --name requires an argument\n")); failed = true; } else { ++argv; if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --name are " "both specified\n")); failed = true; } else name = *argv; } } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--ctxsep"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --ctxsep requires a character\n")); failed = true; } else if (1 != ACE_OS::strlen(*(++argv))) { ACE_DEBUG ((LM_DEBUG, "Error: --ctxsep takes a single character (not %s)\n", *argv)); failed = true; } else if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "Error: --nsior and --ctxsep are " "both specified\n")); failed = true; } else ctxsep[0] = (*argv)[0]; } else if (0 == ACE_OS::strcmp (*argv, ACE_TEXT ("--kindsep"))) { if (!--argc) { ACE_DEBUG ((LM_DEBUG, "Error: --kindsep requires a character\n")); failed = true; } else if (1 != ACE_OS::strlen(*(++argv))) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --kindsep takes a single ") ACE_TEXT ("character (not %s)\n"), *argv)); failed = true; } else if (showNSonly) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --nsior and --kindsep are ") ACE_TEXT ("both specified\n"))); failed = true; } else kindsep = (*argv)[0]; } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--max"))) { if (maxDepth) { ACE_DEBUG ((LM_DEBUG, "Error: --max given more than once\n")); failed = true; } else if (!--argc || !ACE_OS::ace_isdigit (ACE_TEXT_ALWAYS_CHAR (*(++argv))[0])) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --max requires a number\n"))); failed = true; } else if (showNSonly) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --nsior and --max are ") ACE_TEXT ("both specified\n"))); failed = true; } else maxDepth= ACE_OS::atoi (*argv); } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--rtt"))) { if (rtt != ACE_Time_Value::zero) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --rtt given more than once\n"))); failed = true; } else if (!--argc || !ACE_OS::ace_isdigit (ACE_TEXT_ALWAYS_CHAR (*(++argv))[0])) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --rtt requires a number\n"))); failed = true; } else rtt.set (ACE_OS::atoi (*argv), 0); } else if (0 == ACE_OS::strcmp(*argv, ACE_TEXT ("--count"))) { if (max_count != MAX_COUNT_DEFAULT) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --count given more than once\n"))); failed = true; } else if (!--argc || !ACE_OS::ace_isdigit (ACE_TEXT_ALWAYS_CHAR (*(++argv))[0])) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --count requires a number\n"))); failed = true; } else { CORBA::ULong count = ACE_OS::strtoul (ACE_TEXT_ALWAYS_CHAR (*argv), 0, 10); if (count > 0) { max_count = count; } else { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error: --count requires a number") ACE_TEXT (" greater than 0\n"))); failed = true; } } } else { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Unknown option %s\n"), *argv)); failed = true; } } } if (failed) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n%s options:\n") ACE_TEXT (" --nsior {Display the naming service IOR and exit}\n") ACE_TEXT ("or:\n") ACE_TEXT (" --ns <ior> {Defaults to standard NameService}\n") ACE_TEXT (" --ior {Display ior for end points}\n") ACE_TEXT (" --ctxior {Display ior for naming contexts}\n") ACE_TEXT (" --tree \"xx\" {Defaults to | for drawing tramlines}\n") ACE_TEXT (" --node \"xx\" {Defaults to + for drawing nodes}\n") ACE_TEXT (" --noloops {Inhibit drawing of naming context loops}\n") ACE_TEXT (" --name <name> {Lists sub-set, defaults to root}\n") ACE_TEXT (" --ctxsep <character> {<name> Context separation character, default /}\n") ACE_TEXT (" --kindsep <character> {<name> ID/Kind separation character, default .}\n") ACE_TEXT (" --max <number> {If given, limits displayed sub-context depth}\n") ACE_TEXT (" --rtt <seconds> {If given, sets the relative round trip timeout policy}\n") ACE_TEXT (" --count <number> {If given, sets the maximum ") ACE_TEXT ("number of entries per request from the NameService}\n"), pname)); orb->destroy (); return 1; } // Initialise the lengths of the myTree and myNode draw strings. sizeMyTree= ACE_OS::strlen (myTree); sizeMyNode= ACE_OS::strlen (myNode); // Contact the name service CORBA::Object_var obj; if (nameService) obj = orb->string_to_object (nameService); else obj = orb->resolve_initial_references ("NameService"); obj = set_rtt(obj.in ()); CosNaming::NamingContext_var root_nc = CosNaming::NamingContext::_narrow (obj.in ()); if (CORBA::is_nil (root_nc.in ())) { ACE_DEBUG ((LM_DEBUG, "Error: nil root naming context\n")); orb->destroy (); return 1; } if (name) { // Assemble the name from the user string given CosNaming::Name the_name (0); ACE_TCHAR *cp; while (0 != (cp = ACE_OS::strtok (name, ctxsep))) { const int index= the_name.length(); the_name.length (index+1); ACE_TCHAR *kind = const_cast<ACE_TCHAR*> (ACE_OS::strchr (cp, kindsep)); if (kind) { *kind = '\0'; the_name[index].kind= CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(++kind)); } the_name[index].id = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(cp)); name = 0; // way strtok works } // Now find this sub-context and replace the root with it. obj = root_nc->resolve( the_name ); root_nc = CosNaming::NamingContext::_narrow (obj.in ()); if (CORBA::is_nil (root_nc.in ())) { ACE_DEBUG ((LM_DEBUG, "Error: Can't find naming context\n %s\n", name)); orb->destroy (); return 1; } } CORBA::String_var str = orb->object_to_string (root_nc.in ()); if (showNSonly) { ACE_DEBUG ((LM_DEBUG, "The NameService is located via:\n%C\n", str.in ())); } else { ACE_DEBUG ((LM_DEBUG, "Naming Service: %C\n---------------\n", ((showCtxIOR)? str.in () : ""))); list_context (root_nc.in (), 1, max_count); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception in nslist"); ++err; } try { orb->destroy (); } catch (const CORBA::Exception& ex) { ACE_DEBUG ((LM_DEBUG, "\nError:\n")); ex._tao_print_exception ("Exception in while shutting down"); ++err; } return err; }