Exemple #1
0
int menu_select(menu_t *p_menu, uint32_t available_options, int *p_submenus)
{
  vSetActiveFont(p_menu->p_font);

  while (vGetButtonData())
    ;

  p_menu->available_options = available_options;

  while(1)
    {
      uint32_t keys;


      vSetForeColor(vRGB(0,0,0));
      vFillRect(p_menu->x1, p_menu->y1, p_menu->x2, p_menu->y2);
      menu_draw(p_menu);
      vFlipScreen(1);
      msSleep(300);

      keys = wait_key_press();

      if (keys & KEY_UP)
	select_next(p_menu, 0, -1);
      else if (keys & KEY_DOWN)
	select_next(p_menu, 0, 1);
      else if (keys & KEY_LEFT)
	select_next(p_menu, -1, 0);
      else if (keys & KEY_RIGHT)
	select_next(p_menu, 1, 0);
      else if (keys & KEY_SELECT)
	return -1;
      else if (keys & KEY_FIRE ||
	       keys & KEY_FIRE2)
	{
	  int ret = p_menu->cur_sel;
	  int i;

	  if (!is_submenu_title(p_menu, ret))
	    {
	      for (i=0; i<p_menu->n_submenus; i++)
		p_submenus[i] = p_menu->p_submenus[i].sel;
	      p_menu->cur_sel = 0;

	      return ret;
	    }
	}
    }

  return -1;
}
Exemple #2
0
static void select_one(menu_t *p_menu, int sel)
{
	if (sel >= p_menu->n_entries)
		sel = 0;
	p_menu->cur_sel = sel;
	if (p_menu->pp_msgs[p_menu->cur_sel][0] == ' ' ||
			p_menu->pp_msgs[p_menu->cur_sel][0] == '#' ||
			IS_SUBMENU(p_menu->pp_msgs[p_menu->cur_sel]))
		select_next(p_menu, 0, 1 , 1);
}
Exemple #3
0
void
schedule()
{
  struct pcb_s* pcb;
  struct pcb_s* pcb_init;

  pcb_init = current_process;
  pcb = current_process;

  /* Start by eliminating all zombies (rhaaaaa !) */
  while (pcb->next->state == TERMINATED) {    
    /* If no process to be executed -> note that and leave loop */
    if (pcb->next == pcb) {
      pcb = NULL;
      break;

    } else {
      /* Particular case of the head */
      if (pcb->next == ready_queue)
	ready_queue = pcb;    
      
      /* Remove pcb from the list (FIXME : could be done after the loop) */
      pcb->next = pcb->next->next;

      /* Free memory */
      malloc_free((char*) pcb->next->stack_base);
      malloc_free((char*) pcb->next);

      /* Get next process */
      pcb = pcb->next;
    }
  }

  if (pcb != NULL) {
    /* On parcours la liste jusqu'à trouver un processus non bloqué */
    pcb = pcb->next;    
    while(pcb->state == WAITING && pcb != pcb_init)
      pcb = pcb->next;

    /* Si tous les processus sont bloqués -> on le note */
    if(pcb->state == WAITING)
      pcb = NULL;
  }

  if(pcb == NULL) {   /* Si pas de processus à élire -> idle */
    ready_queue = NULL;
    current_process = &idle;
  } else {            
	  /* Sinon -> le processus élu est trouve par l'algorithme RMS*/
      select_next(pcb);
	  //current_process = pcb;
  }
}
Exemple #4
0
static int menu_select_internal(SDL_Surface *screen,
		menu_t *p_menu, int *p_submenus, int sel,
		void (*select_next_cb)(menu_t *p, void *data),
		void *select_next_cb_data, int font_size)
{
	int ret = -1;
	int i;

	for (i = 0; i < p_menu->n_submenus; i++)
		p_menu->p_submenus[i].sel = p_submenus[i];

	while(1)
	{
			
		uint32_t keys;
		
		int sel_last = p_menu->cur_sel;

		menu_draw(screen, p_menu, 0, font_size);
		SDL_Flip(screen);

		keys = menu_wait_key_press();
		
		quit_thread = 1;

		if (keys & KEY_UP)
			{select_next(p_menu, 0, -1, 1);play_click(0);}
		else if (keys & KEY_DOWN)
			{select_next(p_menu, 0, 1, 1);play_click(0);}
		else if (keys & KEY_PAGEUP)
			{select_next(p_menu, 0, -20, 0);play_click(0);}
		else if (keys & KEY_PAGEDOWN)
			{select_next(p_menu, 0, 20, 0);play_click(0);}
		else if (keys & KEY_LEFT)
			{select_next(p_menu, -1, 0 ,1);play_click(0);}
		else if (keys & KEY_RIGHT)
			{select_next(p_menu, 1, 0 ,1);play_click(0);}
		else if (keys & KEY_ESCAPE)
			{play_click(2);break;}
		else if (keys & KEY_SELECT)
		{
			ret = p_menu->cur_sel;
			int i;

			for (i=0; i<p_menu->n_submenus; i++)
				p_submenus[i] = p_menu->p_submenus[i].sel;
			play_click(1);	
			break;
		}
		/* Invoke the callback when an entry is selected */
		if (sel_last != p_menu->cur_sel &&
				select_next_cb != NULL)
			select_next_cb(p_menu, select_next_cb_data);
	}

	SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));
	return ret;
}
Exemple #5
0
static void select_next(menu_t *p_menu, int dx, int dy)
{
  p_menu->cur_sel = (p_menu->cur_sel + dy) < 0 ? p_menu->n_entries - 1 :
    (p_menu->cur_sel + dy) % p_menu->n_entries;
  int next = (p_menu->cur_sel + dy + 1) < 0 ? p_menu->n_entries - 1 :
    (p_menu->cur_sel + dy + 1) % p_menu->n_entries;

  if (p_menu->pp_msgs[p_menu->cur_sel][0] == ' ' ||
      ( (p_menu->available_options & (1<<p_menu->cur_sel)) == 0) ||
      IS_SUBMENU(p_menu->pp_msgs[p_menu->cur_sel]) )
    select_next(p_menu, dx, dy);
  /* If the next is a submenu */
  if (dx != 0 &&
      IS_SUBMENU(p_menu->pp_msgs[next]))
    {
      submenu_t *p_submenu = find_submenu(p_menu, next);

      p_submenu->sel = (p_submenu->sel + dx) < 0 ? p_submenu->n_entries - 1 :
	(p_submenu->sel + dx) % p_submenu->n_entries;
    }
}
Exemple #6
0
static void select_next(menu_t *p_menu, int dx, int dy, int cicle)
{
	int next;

	p_menu->cur_sel = get_next_seq_y(p_menu, p_menu->cur_sel, dy, cicle);
	next = get_next_seq_y(p_menu, p_menu->cur_sel, dy + 1, cicle);
	if (IS_SUBMENU(p_menu->pp_msgs[p_menu->cur_sel])&&(dy!=1)&&(dy!=-1)) p_menu->cur_sel--;
	if (p_menu->pp_msgs[p_menu->cur_sel][0] == ' ' ||
			p_menu->pp_msgs[p_menu->cur_sel][0] == '#' ||
			IS_SUBMENU(p_menu->pp_msgs[p_menu->cur_sel]) )
		select_next(p_menu, dx, dy, cicle);

	/* If the next is a submenu */
	if (dx != 0 && IS_SUBMENU(p_menu->pp_msgs[next]))
	{
		submenu_t *p_submenu = find_submenu(p_menu, next);

		p_submenu->sel = (p_submenu->sel + dx) < 0 ? p_submenu->n_entries - 1 :
		(p_submenu->sel + dx) % p_submenu->n_entries;
	}
	else if (dx == -1 && !strcmp(p_menu->pp_msgs[0], "[..]"))
		p_menu->cur_sel = 0;
}
Exemple #7
0
static int select_and_print(DB * db, const char *tname,
			    col_t * cols, int ncol, cond_t * conds, int ncond)
{
	table_t *t;
	cursor_t *cur;
	record_t *r;
	int count;
	int ret = 0;
	int error, xerror;

	if ((t = db_find_table(db, tname)) == NULL) {
		xerrno = ERR_NOTABLE;
		return -1;
	}
	for (int i = 0; i < ncol; i++) {
		int k;
		if ((k = table_find_col(t, cols[i].name)) < 0) {
			xerrno = ERR_NOCOL;
			return -1;
		}
		cols[i].type = t->cols[k].type;
		cols[i].size = t->cols[k].size;
	}

	if (ncol == 0) {
		ncol = t->ncols;
		cols = t->cols;
	}

	int *width;

	if ((width = calloc(ncol, sizeof(int))) == NULL) {
		perror("out of memory");
		return -1;
	}

	for (int i = 0; i < ncol; i++) {
		int k = table_find_col(t, cols[i].name);
		switch (t->cols[k].type) {
		case TYPE_INT:
			width[i] =
			    _max(INT_P_WIDTH, strlen(t->cols[k].name) + 1);
			break;
		case TYPE_FLOAT:
			width[i] =
			    _max(FLOAT_P_WIDTH, strlen(t->cols[k].name) + 1);
			break;
		case TYPE_STRING:
			width[i] =
			    _max(t->cols[k].size, strlen(t->cols[k].name) + 1);
			break;
		}
	}

	if ((cur = select_from(db, tname, conds, ncond)) == NULL) {
		preserve_errno(free(width));
		return -1;
	}

	print_thead(cols, ncol, width);

	count = 0;
	while ((r = select_next(db, cur)) != NULL) {
		print_record(t, cols, ncol, r, width);
		free_record(r);
		count++;
	}
	if (select_error(cur)) {
		error = errno;
		xerror = xerrno;
		ret = -1;
	}
	printf("Total %d %s\n\n", count, count > 1 ? "records" : "record");
	free_cursor(cur);
	free(width);
	errno = error;
	xerrno = xerror;
	return ret;
}