bool parse_entity(const char * & ptr,pfc::string8 & name,pfc::string8 & value) { char delimiter = '\0'; char tmp; t_size n = 0; while(isspace((unsigned char) *ptr)) ptr++; while(tmp = ptr[n], tmp && !isspace((unsigned char) tmp) && tmp != '=') n++; if (!ptr[n]) return false; name.set_string(ptr, n); ptr += n; while(isspace((unsigned char) *ptr)) ptr++; if (*ptr != '=') return false; ptr++; while(isspace((unsigned char) *ptr)) ptr++; // check delimiter if (*ptr == '\'' || *ptr == '"') { delimiter = *ptr; ptr++; } if (!*ptr) return false; n = 0; if (delimiter == '\0') { while(tmp = ptr[n], tmp && !isspace((unsigned char) tmp) && tmp != ';') n++; } else { while(tmp = ptr[n], tmp && tmp != delimiter) n++; } //if (!ptr[n]) return false; value.set_string(ptr, n); ptr += n; if (delimiter && *ptr == delimiter) ptr++; while(*ptr == ';' || isspace((unsigned char) *ptr)) ptr++; return true; }
bool find_menu_path( GUID & parent, pfc::string8 & out ) { if ( parent == pfc::guid_null ) { out.set_string( "main menu" ); return true; } else { service_enum_t<mainmenu_group> e; service_ptr_t<mainmenu_group> ptr; while ( e.next( ptr ) ) { if ( ptr->get_guid() == parent ) { pfc::string8 tmp; service_ptr_t<mainmenu_group_popup> popup; if ( ptr->service_query_t( popup ) ) { popup->get_display_string( tmp ); find_menu_path( ptr->get_parent(), out ); out.add_string( "/" ); out.add_string( tmp ); return true; } else { find_menu_path( ptr->get_parent(), out ); return true; } } } } out.set_string( "main menu" ); return false; }