static menuSound_t Activate( menuCommon_t *self ) { size_t len, baselen; demoEntry_t *e = m_demos.list.items[m_demos.list.curvalue]; switch( e->type ) { case ENTRY_UP: LeaveDirectory(); return QMS_OUT; case ENTRY_DN: baselen = strlen( m_demos.browse ); len = strlen( e->name ); if( baselen + 1 + len >= sizeof( m_demos.browse ) ) { return QMS_BEEP; } if( !baselen || m_demos.browse[ baselen - 1 ] != '/' ) { m_demos.browse[ baselen++ ] = '/'; } memcpy( m_demos.browse + baselen, e->name, len + 1 ); // rebuild list FreeList(); BuildList(); MenuList_Init( &m_demos.list ); return QMS_IN; case ENTRY_DEMO: Cbuf_AddText( &cmd_buffer, va( "demo \"%s/%s\"\n", m_demos.browse[1] ? m_demos.browse : "", e->name ) ); return QMS_SILENT; } return QMS_NOTHANDLED; }
static void LeaveDirectory( void ) { char *s; int i; s = strrchr( m_demos.browse, '/' ); if( !s ) { return; } *s = 0; // rebuild list FreeList(); BuildList(); MenuList_Init( &m_demos.list ); // move cursor to the previous directory for( i = 0; i < m_demos.numDirs; i++ ) { demoEntry_t *e = m_demos.list.items[i]; if( !strcmp( e->name, s + 1 ) ) { MenuList_SetValue( &m_demos.list, i ); break; } } if( s == m_demos.browse ) { m_demos.browse[0] = '/'; m_demos.browse[1] = 0; } }
static menuSound_t LeaveDirectory(void) { char *s; int i; s = strrchr(m_demos.browse, '/'); if (!s) { return QMS_BEEP; } if (s == m_demos.browse) { strcpy(m_demos.browse, "/"); } else { *s = 0; } // rebuild list FreeList(); BuildList(); MenuList_Init(&m_demos.list); // move cursor to the previous directory for (i = 0; i < m_demos.numDirs; i++) { demoEntry_t *e = m_demos.list.items[i]; if (!strcmp(e->name, s + 1)) { MenuList_SetValue(&m_demos.list, i); break; } } return QMS_OUT; }
static menuSound_t EnterDirectory(demoEntry_t *e) { size_t baselen, len; baselen = strlen(m_demos.browse); len = strlen(e->name); if (baselen + 1 + len >= sizeof(m_demos.browse)) { return QMS_BEEP; } if (baselen == 0 || m_demos.browse[baselen - 1] != '/') { m_demos.browse[baselen++] = '/'; } memcpy(m_demos.browse + baselen, e->name, len + 1); // rebuild list FreeList(); BuildList(); MenuList_Init(&m_demos.list); return QMS_IN; }
void StartServer_MenuInit( void ) { static const char *dm_coop_names[] = { "deathmatch", "cooperative", 0 }; //======= //PGM static const char *dm_coop_names_rogue[] = { "deathmatch", "cooperative", "tag", // "deathball", 0 }; int x = 0, y = 0; memset(&s_startserver_menu, 0, sizeof(s_startserver_menu)); // initialize the menu stuff //s_startserver_menu.x = viddef.width * 0.50; s_startserver_menu.x = 0; s_startserver_menu.y = 0; s_startserver_menu.nitems = 0; /*s_startmap_list.generic.type = MTYPE_SPINCONTROL; s_startmap_list.generic.x = 0; s_startmap_list.generic.y = 0; s_startmap_list.generic.name = "initial map"; s_startmap_list.itemnames = (const char **)mapnames;*/ maplist.generic.type = MTYPE_LIST; maplist.generic.flags = QMF_LEFT_JUSTIFY; maplist.generic.name = NULL; maplist.generic.callback = NULL; maplist.generic.x = 20; maplist.generic.y = 30; //maplist.width = viddef.width - 40; maplist.width = (viddef.width - 40) / 2; maplist.height = viddef.height - 110; MenuList_Init(&maplist); x = maplist.width + 20 + ((viddef.width - maplist.width - 20)/ 2); y = 30; Build_MapList(); s_rules_box.generic.type = MTYPE_SPINCONTROL; s_rules_box.generic.flags = QMF_LEFT_JUSTIFY; s_rules_box.generic.cursor_offset = 24; s_rules_box.generic.x = x; s_rules_box.generic.y = y+20; s_rules_box.generic.name = "rules"; //PGM - rogue games only available with rogue DLL. if(Developer_searchpath() == 2) s_rules_box.itemnames = dm_coop_names_rogue; else s_rules_box.itemnames = dm_coop_names; //PGM if (Cvar_VariableIntValue("coop")) s_rules_box.curvalue = 1; else s_rules_box.curvalue = 0; s_rules_box.generic.callback = RulesChangeFunc; s_timelimit_field.generic.type = MTYPE_FIELD; s_timelimit_field.generic.name = "time limit"; s_timelimit_field.generic.flags = QMF_NUMBERSONLY; s_timelimit_field.generic.x = x; s_timelimit_field.generic.y = y+36; s_timelimit_field.generic.statusbar = "0 = no limit"; s_timelimit_field.length = 3; s_timelimit_field.visible_length = 3; strcpy( s_timelimit_field.buffer, Cvar_VariableString("timelimit") ); s_fraglimit_field.generic.type = MTYPE_FIELD; s_fraglimit_field.generic.name = "frag limit"; s_fraglimit_field.generic.flags = QMF_NUMBERSONLY; s_fraglimit_field.generic.x = x; s_fraglimit_field.generic.y = y+54; s_fraglimit_field.generic.statusbar = "0 = no limit"; s_fraglimit_field.length = 3; s_fraglimit_field.visible_length = 3; strcpy( s_fraglimit_field.buffer, Cvar_VariableString("fraglimit") ); /* ** maxclients determines the maximum number of players that can join ** the game. If maxclients is only "1" then we should default the menu ** option to 8 players, otherwise use whatever its current value is. ** Clamping will be done when the server is actually started. */ s_maxclients_field.generic.type = MTYPE_FIELD; s_maxclients_field.generic.name = "max players"; s_maxclients_field.generic.flags = QMF_NUMBERSONLY; s_maxclients_field.generic.x = x; s_maxclients_field.generic.y = y+72; s_maxclients_field.generic.statusbar = NULL; s_maxclients_field.length = 3; s_maxclients_field.visible_length = 3; if (Cvar_VariableIntValue( "maxclients" ) == 1) strcpy( s_maxclients_field.buffer, "8" ); else strcpy( s_maxclients_field.buffer, Cvar_VariableString("maxclients") ); s_hostname_field.generic.type = MTYPE_FIELD; s_hostname_field.generic.name = "hostname"; s_hostname_field.generic.flags = 0; s_hostname_field.generic.x = x; s_hostname_field.generic.y = y+90; s_hostname_field.generic.statusbar = NULL; s_hostname_field.length = 12; s_hostname_field.visible_length = 12; strcpy( s_hostname_field.buffer, Cvar_VariableString("hostname") ); s_startserver_dmoptions_action.generic.type = MTYPE_ACTION; s_startserver_dmoptions_action.generic.name = " deathmatch flags"; s_startserver_dmoptions_action.generic.flags= QMF_LEFT_JUSTIFY; s_startserver_dmoptions_action.generic.x = x+24; s_startserver_dmoptions_action.generic.y = y+108; s_startserver_dmoptions_action.generic.statusbar = NULL; s_startserver_dmoptions_action.generic.callback = DMOptionsFunc; s_startserver_start_action.generic.type = MTYPE_ACTION; s_startserver_start_action.generic.name = " begin"; s_startserver_start_action.generic.flags= QMF_LEFT_JUSTIFY; s_startserver_start_action.generic.x = x+24; s_startserver_start_action.generic.y = y+128; s_startserver_start_action.generic.callback = StartServerActionFunc; s_startserver_menu.draw = NULL; s_startserver_menu.key = StartServer_MenuKey; // Menu_AddItem( &s_startserver_menu, &s_startmap_list ); Menu_AddItem( &s_startserver_menu, &maplist ); Menu_AddItem( &s_startserver_menu, &s_rules_box ); Menu_AddItem( &s_startserver_menu, &s_timelimit_field ); Menu_AddItem( &s_startserver_menu, &s_fraglimit_field ); Menu_AddItem( &s_startserver_menu, &s_maxclients_field ); Menu_AddItem( &s_startserver_menu, &s_hostname_field ); Menu_AddItem( &s_startserver_menu, &s_startserver_dmoptions_action ); Menu_AddItem( &s_startserver_menu, &s_startserver_start_action ); //Menu_Center( &s_startserver_menu ); // call this now to set proper inital state RulesChangeFunc ( NULL ); }