/***************************************************************************** * Function: int _DtHelpCeGetSdlKeywordList ( * * Parameters: * * Returns: 0 if successful, -1 if not. * * errno Values: * * Purpose: Get the KeywordList for an SDL volume. * *****************************************************************************/ int _DtHelpCeGetSdlKeywordList ( _DtHelpVolumeHdl volume) { CESDLVolume *sdlVol = _DtHelpCeGetSdlVolumePtr(volume); if (_DtHelpCeGetSdlVolIndex(volume) != 0 || NULL == sdlVol->index || NULL == _DtCvContainerListOfSeg(sdlVol->index)) return -1; return(ProcessEntry(((_DtHelpVolume) volume), _DtCvContainerListOfSeg(sdlVol->index), NULL)); }
static VOID ProcessRequest(PHttpContext ctx) { char body[1024]; char label = 'A'; int totalSize; totalSize=sprintf(body, mapFormat); KeyValueNode *curr = ctx->queryList.next; while (curr != &ctx->queryList) { int size; if ((size=ProcessEntry(body+totalSize, curr, label++)) == -1) { SendResponse(ctx, "Invalid Request", FALSE); return; } totalSize += size; curr = curr->next; } SendResponse(ctx, body, TRUE); }
/****************************************************************************** * Function: int ProcessSubEntries ( * * Parameters: * * Return Value: * * errno Values: * * Purpose: * ******************************************************************************/ static int ProcessSubEntries ( _DtHelpVolume vol, _DtCvSegment *p_seg, char *parent_key) { while (p_seg != NULL) { /* * the only sub containers of an entry that should have an non-null * internal pointer should be a sub <entry>. */ if (_DtCvIsSegContainer(p_seg) && NULL != _SdlSegEntryInfo(p_seg) && ProcessEntry(vol, _DtCvContainerListOfSeg(p_seg), parent_key) == -1) return -1; p_seg = p_seg->next_seg; } return 0; }
u32 ProcessMenu(MenuInfo* info, u32 n_entries_main) { MenuInfo* currMenu; MenuInfo* prevMenu[MENU_MAX_DEPTH]; u32 prevIndex[MENU_MAX_DEPTH]; u32 menuLvlMin; u32 menuLvl; u32 index = 0; u32 result = MENU_EXIT_REBOOT; #ifndef USE_THEME MenuInfo mainMenu; if (n_entries_main > 1) { // build main menu structure from submenus if (n_entries_main > MENU_MAX_ENTRIES) // limit number of entries n_entries_main = MENU_MAX_ENTRIES; memset(&mainMenu, 0x00, sizeof(MenuInfo)); for (u32 i = 0; i < n_entries_main; i++) { mainMenu.entries[i].name = info[i].name; mainMenu.entries[i].function = NULL; mainMenu.entries[i].param = i; } mainMenu.n_entries = n_entries_main; #ifndef BUILD_NAME mainMenu.name = "Decrypt9 Main Menu"; #else mainMenu.name = BUILD_NAME; #endif currMenu = &mainMenu; menuLvlMin = 0; } else { currMenu = info; menuLvlMin = 1; } DrawMenu(currMenu, 0, true, false); #else currMenu = info; menuLvlMin = 1; LoadThemeGfxLogo(); LoadThemeGfxMenu(0); #endif menuLvl = menuLvlMin; // main processing loop while (true) { bool full_draw = true; u32 pad_state = InputWait(); if ((pad_state & BUTTON_A) && (currMenu->entries[index].function == NULL)) { if (menuLvl < MENU_MAX_DEPTH) { prevMenu[menuLvl] = currMenu; prevIndex[menuLvl] = index; menuLvl++; } currMenu = info + currMenu->entries[index].param; index = 0; } else if (pad_state & BUTTON_A) { pad_state = ProcessEntry(currMenu->entries + index); } else if ((pad_state & BUTTON_B) && (menuLvl > menuLvlMin)) { menuLvl--; currMenu = prevMenu[menuLvl]; index = prevIndex[menuLvl]; } else if (pad_state & BUTTON_DOWN) { index = (index == currMenu->n_entries - 1) ? 0 : index + 1; full_draw = false; } else if (pad_state & BUTTON_UP) { index = (index == 0) ? currMenu->n_entries - 1 : index - 1; full_draw = false; } else if ((pad_state & BUTTON_R1) && (menuLvl == 1)) { if (++currMenu - info >= n_entries_main) currMenu = info; index = 0; } else if ((pad_state & BUTTON_L1) && (menuLvl == 1)) { if (--currMenu < info) currMenu = info + n_entries_main - 1; index = 0; } else if (pad_state & BUTTON_SELECT) { pad_state = UnmountSd(); } else if (pad_state & BUTTON_X) { (pad_state & (BUTTON_LEFT | BUTTON_RIGHT)) ? BatchScreenshot(info, pad_state & BUTTON_RIGHT) : Screenshot(NULL); } else { full_draw = false; } if (pad_state & BUTTON_START) { result = (pad_state & BUTTON_LEFT) ? MENU_EXIT_POWEROFF : MENU_EXIT_REBOOT; break; } #ifndef USE_THEME DrawMenu(currMenu, index, full_draw, menuLvl > menuLvlMin); #else if (full_draw) LoadThemeGfxLogo(); LoadThemeGfxMenu(((currMenu - info) * 100) + index); #endif } return result; }
static int Demux( demux_t *p_demux ) { const char *psz_node = NULL; char *psz_txt = NULL; char *psz_base = FindPrefix( p_demux ); char *psz_title_asx = NULL; char *psz_entryref = NULL; xml_reader_t *p_xml_reader = NULL; input_item_t *p_current_input = GetCurrentItem( p_demux ); input_item_node_t *p_subitems = NULL; bool b_first_node = false; int i_type; int i_n_entry = 0; p_xml_reader = xml_ReaderCreate( p_demux, p_demux->s ); if( !p_xml_reader ) { msg_Err( p_demux, "Cannot parse ASX input file as XML"); goto error; } p_subitems = input_item_node_Create( p_current_input ); do { i_type = xml_ReaderNextNode( p_xml_reader, &psz_node ); if( i_type == XML_READER_STARTELEM ) { if( !b_first_node ) { if(!strncasecmp( psz_node, "ASX", 3 ) ) b_first_node = true; else { msg_Err( p_demux, "invalid root node" ); goto error; } } /* Metadata Node Handler */ if( !strncasecmp( psz_node, "TITLE", 5 ) ) { ReadElement( p_xml_reader, &psz_title_asx ); input_item_SetTitle( p_current_input, psz_title_asx ); } else if( !strncasecmp( psz_node, "AUTHOR", 6 ) ) { ReadElement( p_xml_reader, &psz_txt ); input_item_SetArtist( p_current_input, psz_txt ); } else if( !strncasecmp( psz_node, "COPYRIGHT", 9 ) ) { ReadElement( p_xml_reader, &psz_txt ); input_item_SetCopyright( p_current_input, psz_txt ); } else if( !strncasecmp( psz_node, "MOREINFO", 8 ) ) { const char *psz_tmp; do { psz_tmp = xml_ReaderNextAttr( p_xml_reader, &psz_node ); } while( psz_tmp && strncasecmp( psz_tmp, "HREF", 4 ) ); if( !psz_tmp ) // If HREF attribute doesn't exist ReadElement( p_xml_reader, &psz_txt ); else psz_txt = strdup( psz_node ); resolve_xml_special_chars( psz_txt ); input_item_SetURL( p_current_input, psz_txt ); } else if( !strncasecmp( psz_node, "ABSTRACT", 8 ) ) { ReadElement( p_xml_reader, &psz_txt ); input_item_SetDescription( p_current_input, psz_txt ); } else /* Base Node handler */ if( !strncasecmp( psz_node, "BASE", 4 ) ) ReadElement( p_xml_reader, &psz_base ); else /* Entry Ref Handler */ if( !strncasecmp( psz_node, "ENTRYREF", 7 ) ) { const char *psz_tmp; do { psz_tmp = xml_ReaderNextAttr( p_xml_reader, &psz_node ); } while( psz_tmp && !strncasecmp( psz_tmp, "HREF", 4 ) ); /* Create new input item */ input_item_t *p_input; psz_txt = strdup( psz_node ); resolve_xml_special_chars( psz_txt ); p_input = input_item_New( psz_txt, psz_title_asx ); input_item_CopyOptions( p_current_input, p_input ); input_item_node_AppendItem( p_subitems, p_input ); vlc_gc_decref( p_input ); } else /* Entry Handler */ if( !strncasecmp( psz_node, "ENTRY", 5 ) ) { ProcessEntry( &i_n_entry, p_xml_reader, p_subitems, p_current_input, psz_base); } /* FIXME Unsupported elements PARAM EVENT REPEAT ENDMARK STARTMARK */ } } while( i_type != XML_READER_ENDELEM || strncasecmp( psz_node, "ASX", 3 ) ); input_item_node_PostAndDelete( p_subitems ); p_subitems = NULL; error: free( psz_base ); free( psz_title_asx ); free( psz_entryref ); free( psz_txt ); if( p_xml_reader) xml_ReaderDelete( p_xml_reader ); if( p_subitems ) input_item_node_Delete( p_subitems ); vlc_gc_decref( p_current_input ); return 0; }
u32 ProcessMenu(MenuInfo* info, u32 n_entries_main) { MenuInfo mainMenu; MenuInfo* currMenu = &mainMenu; MenuInfo* prevMenu[MENU_MAX_DEPTH]; u32 prevIndex[MENU_MAX_DEPTH]; u32 index = 0; u32 menuLvl = 0; // build main menu structure from submenus memset(&mainMenu, 0x00, sizeof(MenuInfo)); for (u32 i = 0; i < n_entries_main && i < MENU_MAX_ENTRIES; i++) { mainMenu.entries[i].name = info[i].name; mainMenu.entries[i].function = NULL; mainMenu.entries[i].param = i; mainMenu.entries[i].dangerous = 0; mainMenu.entries[i].emunand = 0; } #ifndef BUILD_NAME mainMenu.name = "Decrypt9 Main Menu"; #else mainMenu.name = BUILD_NAME; #endif mainMenu.n_entries = (n_entries_main > MENU_MAX_ENTRIES) ? MENU_MAX_ENTRIES : n_entries_main; DrawMenu(&mainMenu, 0, true, false); // main processing loop while (true) { bool full_draw = true; u32 pad_state = InputWait(); if ((pad_state & BUTTON_A) && (currMenu->entries[index].function == NULL)) { if (menuLvl < MENU_MAX_DEPTH) { prevMenu[menuLvl] = currMenu; prevIndex[menuLvl] = index; menuLvl++; } currMenu = info + currMenu->entries[index].param; index = 0; } else if (pad_state & BUTTON_A) { pad_state = ProcessEntry(currMenu->entries + index); } else if ((pad_state & BUTTON_B) && (menuLvl > 0)) { menuLvl--; currMenu = prevMenu[menuLvl]; index = prevIndex[menuLvl]; } else if (pad_state & BUTTON_DOWN) { index = (index == currMenu->n_entries - 1) ? 0 : index + 1; full_draw = false; } else if (pad_state & BUTTON_UP) { index = (index == 0) ? currMenu->n_entries - 1 : index - 1; full_draw = false; } else if ((pad_state & BUTTON_R1) && (menuLvl == 1)) { if (++currMenu - info >= n_entries_main) currMenu = info; index = 0; } else if ((pad_state & BUTTON_L1) && (menuLvl == 1)) { if (--currMenu < info) currMenu = info + n_entries_main - 1; index = 0; } else if (pad_state & BUTTON_SELECT) { pad_state = UnmountSd(); } else if (pad_state & BUTTON_X) { Screenshot(NULL); } else { full_draw = false; } if (pad_state & BUTTON_START) { break; } DrawMenu(currMenu, index, full_draw, menuLvl > 0); } return 0; }