The example below enumerates all personalities and checks for the attribute org.opcfoundation.product_instance_uri
- bool b_loop = true;
- char identifier_type_buffer[200];
- char identifier_value_buffer[200];
- myio_obufstream_t ostream_identifier_type = { 0 };
- myio_obufstream_t ostream_identifier_value = { 0 };
- gta_enum_handle_t h_enum = GTA_HANDLE_ENUM_FIRST;
- gta_context_handle_t h_ctx = GTA_HANDLE_INVALID;
- bool exit_loops = false;
- char selected_personality[100];
- /* enumerate all identifiers */
- while (b_loop && !exit_loops) {
- myio_open_obufstream(&ostream_identifier_type,
- identifier_type_buffer,
- sizeof(identifier_type_buffer),
- &errinfo);
- myio_open_obufstream(&ostream_identifier_value,
- identifier_value_buffer,
- sizeof(identifier_value_buffer),
- &errinfo);
- b_ret = gta_identifier_enumerate(
- h_inst,
- &h_enum,
- (gtaio_ostream_t *)&ostream_identifier_type,
- (gtaio_ostream_t *)&ostream_identifier_value,
- &errinfo);
- myio_close_obufstream(&ostream_identifier_type, &errinfo);
- myio_close_obufstream(&ostream_identifier_value, &errinfo);
- if (true == b_ret) {
- bool b_inner_loop = true;
- char personality_name_buffer[200];
- myio_obufstream_t ostream_personality_name = { 0 };
- gta_enum_handle_t h_enum_inner_loop = GTA_HANDLE_ENUM_FIRST;
- /* enumerate all personalities belonging to identifier */
- while (b_inner_loop && !exit_loops) {
- myio_open_obufstream(&ostream_personality_name,
- personality_name_buffer,
- sizeof(personality_name_buffer),
- &errinfo);
- b_ret = gta_personality_enumerate(
- h_inst,
- identifier_value_buffer,
- &h_enum_inner_loop,
- GTA_PERSONALITY_ENUM_ALL,
- (gtaio_ostream_t *)&ostream_personality_name,
- &errinfo);
- myio_close_obufstream(&ostream_personality_name, &errinfo);
- if (true == b_ret) {
- bool b_innermost_loop = true;
- char attribute_type_buffer[200];
- char attribute_value_buffer[200];
- myio_obufstream_t ostream_attribute_type = { 0 };
- myio_obufstream_t ostream_attribute_value = { 0 };
- gta_enum_handle_t h_enum_innermost_loop
- = GTA_HANDLE_ENUM_FIRST;
- /* enumerate all attributes belonging to personality */
- while (b_innermost_loop && !exit_loops) {
- myio_open_obufstream(
- &ostream_attribute_type,
- attribute_type_buffer,
- sizeof(attribute_type_buffer),
- &errinfo);
- myio_open_obufstream(
- &ostream_attribute_value,
- attribute_value_buffer,
- sizeof(attribute_value_buffer),
- &errinfo);
- b_ret = gta_personality_attributes_enumerate(
- h_inst,
- personality_name_buffer,
- &h_enum_innermost_loop,
- (gtaio_ostream_t *)&ostream_attribute_type,
- (gtaio_ostream_t *)&ostream_attribute_value,
- &errinfo);
- myio_close_obufstream(&ostream_attribute_type,
- &errinfo);
- myio_close_obufstream(&ostream_attribute_value,
- &errinfo);
- if (true == b_ret) {
- if (0 == strcmp(
- "org.opcfoundation.product_instance_uri",
- attribute_type_buffer)) {
- exit_loops = true;
- strcpy(selected_personality,
- personality_name_buffer);
- }
- }
- else {
- b_innermost_loop = false;
- }
- }
- }
- else {
- errinfo = 0;
- b_inner_loop = false;
- }
- }
- }
- else {
- errinfo = 0;
- b_loop = false;
- }
- }
- /*
- * do something with selected personality
- */