示例#1
0
static gint
fontsel_set_style_by_name (StyleSelect *select)
{
  FontFace *font_face = NULL;
  GtkCList *clist;
  gint      row;

  g_return_val_if_fail (select != NULL, FALSE);

  font_face = g_tree_lookup (select->family, select->style_name);

  if (font_face)
    {
      clist = g_object_get_data (G_OBJECT (select->fontsel), "style_list");
      row = gtk_clist_find_row_from_data (GTK_CLIST (clist), font_face);
      gtk_clist_select_row (GTK_CLIST (clist), row, 0);

      if ( !(gtk_clist_row_is_visible (clist, row) & GTK_VISIBILITY_FULL))
	gtk_clist_moveto (clist, row, 0, 0.0, 0.0);
    }

  g_free (select);

  return FALSE;
}
示例#2
0
static void prefs_display_items_set_sensitive(PrefsDisplayItemsDialog *dialog)
{
	GtkCList *clist = GTK_CLIST(dialog->shown_clist);
	gint row;

	if (!clist->selection) return;

	row = GPOINTER_TO_INT(clist->selection->data);

	if (gtk_clist_get_row_data(clist, row))
		gtk_widget_set_sensitive(dialog->remove_btn, TRUE);
	else
		gtk_widget_set_sensitive(dialog->remove_btn, FALSE);

	if (row > 0 && row < clist->rows - 1)
		gtk_widget_set_sensitive(dialog->up_btn, TRUE);
	else
		gtk_widget_set_sensitive(dialog->up_btn, FALSE);

	if (row >= 0 && row < clist->rows - 2)
		gtk_widget_set_sensitive(dialog->down_btn, TRUE);
	else
		gtk_widget_set_sensitive(dialog->down_btn, FALSE);

	if (gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
		gtk_clist_moveto(clist, row, 0, 0.5, 0);
}
示例#3
0
static void
ghack_ext_key_hit(GtkWidget *menuWin, GdkEventKey *event, gpointer data)
{
    GtkWidget* clist;
    extMenu* info = (extMenu*) data;
    int i;
    char c = event->string[0];

    clist = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(menuWin), "clist"));
    g_assert(clist != NULL);

    /* if too long between keystrokes, reset to initial state */
    if (event->time - info->lastTime > 500) goto init_state;

    /* see if current item continue to match */
    if (info->charIdx > 0) {
	if (extcmdlist[info->curItem].ef_txt[info->charIdx] == c) {
	    ++info->charIdx;
	    goto found;
	}
    }

    /* see if the prefix matches a later command in the list */
    if (info->curItem >= 0) {
	for (i = info->curItem + 1; i < info->numRows; ++i) {
	    if (!strncmp(extcmdlist[info->curItem].ef_txt,
			 extcmdlist[i].ef_txt, info->charIdx)) {
		if (extcmdlist[i].ef_txt[info->charIdx] == c) {
		    ++info->charIdx;
		    info->curItem = i;
		    goto found;
		}
	    }
	}
    }
		
init_state:
    /* reset to initial state, look for matching 1st character */
    for (i = 0; i < info->numRows; ++i) {
	if (extcmdlist[i].ef_txt[0] == c) {
	    info->charIdx = 1;
	    info->curItem = i;
	    goto found;
	}
    }

    /* no match: leave prior, if any selection in place */
    return;

found:
    info->lastTime = event->time;
    gtk_clist_select_row(GTK_CLIST(clist), info->curItem, 0);
    if (gtk_clist_row_is_visible(GTK_CLIST(clist),
				 info->curItem) != GTK_VISIBILITY_FULL)
	gtk_clist_moveto(GTK_CLIST(clist), info->curItem, 0, 0.5, 0);
}
示例#4
0
static void pattern_clist_adjust_visibility (int row, int direction) {
  GtkVisibility vis;

  debug(5,"pattern_clist_adjust_visibility(row=%d,direction=%d)",row,direction);

  vis = gtk_clist_row_is_visible (GTK_CLIST (pattern_clist), row);
  if (vis != GTK_VISIBILITY_FULL) {
    gtk_clist_moveto (GTK_CLIST (pattern_clist), row, 0, 
                   (direction == 0)? 0.5 : ((direction > 0)? 1.0 : 0.0), 0.0);
  }
}
示例#5
0
文件: gnplayer.c 项目: Agyar/NetHack
static void
player_sel_key_hit (GtkWidget *widget, GdkEventKey *event, gpointer data)
{
    const char** roles = data;
    int i;
    for (i = 0; roles[i] != 0; ++i) {
	if (tolower(roles[i][0]) == tolower(event->keyval)) {
	    role_number = i;
	    gtk_clist_select_row( GTK_CLIST (clist), i, 0);
	    if (gtk_clist_row_is_visible(GTK_CLIST(clist),
					 i) != GTK_VISIBILITY_FULL)
		gtk_clist_moveto(GTK_CLIST(clist), i, 0, 0.5, 0);
	}
    }
}
示例#6
0
static void
cb_clist_down(GtkWidget *widget)
{
  gint            row;

  row = selected_row;
  if (row >= 0 && row < GTK_CLIST(reader_clist)->rows - 1)
    {
      gtk_clist_row_move(GTK_CLIST(reader_clist), row, row + 1);
      gtk_clist_select_row(GTK_CLIST(reader_clist), row + 1, -1);
      if (gtk_clist_row_is_visible(GTK_CLIST(reader_clist), row + 1)
	  != GTK_VISIBILITY_FULL)
	gtk_clist_moveto(GTK_CLIST(reader_clist), row + 1, -1, 1.0, 0.0);
      selected_row = row + 1;
      list_modified = TRUE;
    }
}
示例#7
0
static void
editlist_gui_moveup (GtkWidget * igad)
{
	int row;

	row = gtkutil_clist_selection (editlist_gui_list);
	if (row != -1 && row > 0)
	{
		gtk_clist_freeze (GTK_CLIST (editlist_gui_list));
		gtk_clist_swap_rows (GTK_CLIST (editlist_gui_list), row - 1, row);
		gtk_clist_thaw (GTK_CLIST (editlist_gui_list));
		row--;
		if (gtk_clist_row_is_visible (GTK_CLIST (editlist_gui_list), row) !=
			 GTK_VISIBILITY_FULL)
			gtk_clist_moveto (GTK_CLIST (editlist_gui_list), row, 0, 0.1, 0);
	}
}
示例#8
0
static void
ghack_menu_window_key(GtkWidget *menuWin, GdkEventKey *event, gpointer data)
{
	int i, numRows;
	menuItem* item;
	MenuWinType isMenu;

	isMenu = (MenuWinType) GPOINTER_TO_INT
		(gtk_object_get_data (GTK_OBJECT (menuWin), "isMenu"));

	if (isMenu == MenuMenu) {
		GtkWidget *clist;
		gint selection_mode;

		clist = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (menuWin), "clist"));
		g_assert (clist != NULL);
	numRows = GPOINTER_TO_INT
	    (gtk_object_get_data(GTK_OBJECT(clist), "numRows"));
	selection_mode = GPOINTER_TO_INT
	    (gtk_object_get_data (GTK_OBJECT(clist), "selection_mode"));
	for (i = 0; i <= numRows; ++i) {
	    item = (menuItem*) gtk_clist_get_row_data(GTK_CLIST(clist), i);
	    if (item == NULL) continue;
	    if (!strcmp(item->accelerator, "")) continue;

			if ( (!strcmp(item->accelerator, event->string)) ||
				 ((selection_mode == GTK_SELECTION_MULTIPLE) &&
						 (event->keyval == ','))) {
		if (item->selected) {
					gtk_clist_unselect_row( GTK_CLIST (clist), 
						item->itemNumber, 0);
					item->selected=FALSE;
		} else {
					gtk_clist_select_row( GTK_CLIST (clist), 
						item->itemNumber, 0);
		    if (gtk_clist_row_is_visible(GTK_CLIST(clist),
				item->itemNumber) != GTK_VISIBILITY_FULL)
			gtk_clist_moveto(GTK_CLIST(clist),
					 item->itemNumber, 0, 0.5, 0);
					item->selected=TRUE;
				}
			}
		}
	}
}
示例#9
0
static void
editlist_gui_movedown (GtkWidget * igad)
{
	int row;
	char *temp;

	row = gtkutil_clist_selection (editlist_gui_list);
	if (row != -1)
	{
		if (!gtk_clist_get_text (GTK_CLIST (editlist_gui_list), row + 1, 0, &temp))
			return;
		gtk_clist_freeze (GTK_CLIST (editlist_gui_list));
		gtk_clist_swap_rows (GTK_CLIST (editlist_gui_list), row, row + 1);
		gtk_clist_thaw (GTK_CLIST (editlist_gui_list));
		row++;
		if (!gtk_clist_row_is_visible (GTK_CLIST (editlist_gui_list), row) !=
			 GTK_VISIBILITY_FULL)
			gtk_clist_moveto (GTK_CLIST (editlist_gui_list), row, 0, 0.9, 0);
	}
}
void
x_listbox_select_nth (WListbox *l, int nth)
{
	static int inside;
	GtkCList *clist;
	
	if (inside)
		return;

	if (!l->widget.wdata)
		return;
	
	inside = 1;
	clist = GTK_CLIST (listbox_pull (l->widget.wdata));
	
	gtk_clist_select_row (clist, nth, 0);
	if (gtk_clist_row_is_visible (clist, nth) != GTK_VISIBILITY_FULL)
		gtk_clist_moveto (clist, nth, 0, 0.5, 0.0);
	
	inside = 0;
}
示例#11
0
static void
fontsel_family_select_callback (GtkCList       *clist,
				gint            row,
				gint            column,
				GdkEventButton *event,
				gpointer        data)
{
  FontFace  *font_face = NULL;
  GtkWidget *clist2    = (GtkWidget *) data;
  GTree     *family;
  gint       face_row  = 0;

  family = gtk_clist_get_row_data (clist, row);

  gtk_clist_freeze (GTK_CLIST (clist2));
  gtk_clist_clear (GTK_CLIST (clist2));
  g_tree_foreach (family,
                  (GTraverseFunc) fontsel_style_list_insert,
                  clist2);
  gtk_clist_thaw (GTK_CLIST (clist2));

  if (face_selected && face_selected->style_name)
    font_face = g_tree_lookup (family, face_selected->style_name);

  if (! font_face)
    font_face = g_tree_lookup (family, "Regular");

  if (! font_face)
    font_face = g_tree_lookup (family, "Roman");

  if (font_face)
    face_row = gtk_clist_find_row_from_data (GTK_CLIST (clist2), font_face);

  gtk_clist_select_row (GTK_CLIST (clist2), face_row, 0);

  if (! (gtk_clist_row_is_visible (GTK_CLIST (clist2), face_row) &
	 GTK_VISIBILITY_FULL))
    gtk_clist_moveto (clist, face_row, 0, 0.0, 0.0);
}
示例#12
0
void
fontsel_set_font_by_name (GtkWidget *fontsel,
			  gchar     *family_name,
			  gchar     *style_name)
{
  GTree       *family = NULL;
  GtkCList    *clist;
  gint         row;
  StyleSelect *style_select;

  g_return_if_fail (fontsel != NULL);

  if (family_name)
    {
      family = g_tree_lookup (families, family_name);
    }

  if (family)
    {
      clist = g_object_get_data (G_OBJECT (fontsel), "family_list");
      row = gtk_clist_find_row_from_data (GTK_CLIST (clist), family);
      gtk_clist_select_row (GTK_CLIST (clist), row, 0);

      if ( !(gtk_clist_row_is_visible (clist, row) & GTK_VISIBILITY_FULL))
	gtk_clist_moveto (clist, row, 0, 0.0, 0.0);

      if (style_name)
	{
	  style_select = g_new (StyleSelect, 1);
	  style_select->fontsel    = fontsel;
	  style_select->family     = family;
	  style_select->style_name = style_name;

	  gtk_idle_add ((GtkFunction)fontsel_set_style_by_name, style_select);
	}
    }
}
示例#13
0
static void
handle_input(gpointer client_data, gint source, GdkInputCondition ic)
{
    int message;

    gtk_pipe_int_read(&message);

    switch (message) {
    case REFRESH_MESSAGE:
	g_warning("REFRESH MESSAGE IS OBSOLETE !!!");
	break;

    case TOTALTIME_MESSAGE:
	{
	    int tt;
	    int minutes,seconds;
	    char local_string[20];
	    GtkObject *adj;

	    gtk_pipe_int_read(&tt);

	    seconds=max_sec=tt/play_mode->rate;
	    minutes=seconds/60;
	    seconds-=minutes*60;
	    sprintf(local_string,"/ %i:%02i",minutes,seconds);
	    gtk_label_set(GTK_LABEL(tot_lbl), local_string);

	    /* Readjust the time scale */
	    adj = gtk_adjustment_new(0., 0., (gfloat)max_sec,
				     1., 10., 0.);
	    gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
			       GTK_SIGNAL_FUNC(generic_scale_cb),
			       (gpointer)GTK_CHANGE_LOCATOR);
	    gtk_range_set_adjustment(GTK_RANGE(locator),
				     GTK_ADJUSTMENT(adj));
	}
	break;

    case MASTERVOL_MESSAGE:
	{
	    int volume;
	    GtkAdjustment *adj;

	    gtk_pipe_int_read(&volume);
	    adj = gtk_range_get_adjustment(GTK_RANGE(vol_scale));
	    my_adjustment_set_value(adj, MAX_AMPLIFICATION - volume);
	}
	break;

    case FILENAME_MESSAGE:
	{
	    char filename[255], title[255];
	    char *pc;

	    gtk_pipe_string_read(filename);

	    /* Extract basename of the file */
	    pc = strrchr(filename, '/');
	    if (pc == NULL)
		pc = filename;
	    else
		pc++;

	    sprintf(title, "Timidity %s - %s", timidity_version, pc);
	    gtk_window_set_title(GTK_WINDOW(window), title);

	    /* Clear the text area. */
#ifdef HAVE_GTK_2
	    textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
	    gtk_text_buffer_get_start_iter(textbuf, &start_iter);
	    gtk_text_buffer_get_end_iter(textbuf, &end_iter);
	    iter = start_iter;
#else
	    gtk_text_freeze(GTK_TEXT(text));
	    gtk_text_set_point(GTK_TEXT(text), 0);
	    gtk_text_forward_delete(GTK_TEXT(text),
				    gtk_text_get_length(GTK_TEXT(text)));
	    gtk_text_thaw(GTK_TEXT(text));
#endif
	}
	break;

    case FILE_LIST_MESSAGE:
	{
	    gchar filename[255], *fnames[2];
	    gint i, number_of_files;

	    /* reset the playing list : play from the start */
	    file_number_to_play = -1;

	    gtk_pipe_int_read(&number_of_files);
	    for (i = 0; i < number_of_files; i++)
	    {
		gtk_pipe_string_read(filename);
		fnames[0] = filename;
		fnames[1] = NULL;
		gtk_clist_append(GTK_CLIST(clist), fnames);
	    }
	    gtk_clist_columns_autosize(GTK_CLIST(clist));
	}
	break;

    case NEXT_FILE_MESSAGE:
    case PREV_FILE_MESSAGE:
    case TUNE_END_MESSAGE:
	{
	    int nbfile;

	    /* When a file ends, launch next if auto_next toggle */
	    if ( (message==TUNE_END_MESSAGE) &&
		 !GTK_CHECK_MENU_ITEM(auto_next)->active )
		return;

	    /* Total number of file to play in the list */
	    nbfile = GTK_CLIST(clist)->rows;

	    if (message == PREV_FILE_MESSAGE)
		file_number_to_play--;
	    else
		file_number_to_play++;

	    /* Do nothing if requested file is before first one */
	    if (file_number_to_play < 0) {
		file_number_to_play = 0;
		return;
	    }

	    /* Stop after playing the last file */
	    if (file_number_to_play >= nbfile) {
		file_number_to_play = nbfile - 1;
		return;
	    }

	    if(gtk_clist_row_is_visible(GTK_CLIST(clist),
					file_number_to_play) !=
	       GTK_VISIBILITY_FULL) {
		gtk_clist_moveto(GTK_CLIST(clist), file_number_to_play,
				 -1, 1.0, 0.0);
	    }
	    gtk_clist_select_row(GTK_CLIST(clist), file_number_to_play, 0);
	}
	break;

    case CURTIME_MESSAGE:
	{
	    int		seconds, minutes;
	    int		nbvoice;
	    char	local_string[20];

	    gtk_pipe_int_read(&seconds);
	    gtk_pipe_int_read(&nbvoice);

	    if( is_quitting )
		return;

	    minutes=seconds/60;

	    sprintf(local_string,"%2d:%02d", minutes, (int)(seconds % 60));

	    gtk_label_set(GTK_LABEL(cnt_lbl), local_string);

	    /* Readjust the time scale if not dragging the scale */
	    if( !locating && (seconds <= max_sec)) {
		GtkAdjustment *adj;

		adj = gtk_range_get_adjustment(GTK_RANGE(locator));
		my_adjustment_set_value(adj, (gfloat)seconds);
	    }
	}
	break;

    case NOTE_MESSAGE:
	{
	    int channel;
	    int note;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&note);
	    g_warning("NOTE chn%i %i", channel, note);
	}
	break;

    case PROGRAM_MESSAGE:
	{
	    int channel;
	    int pgm;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&pgm);
	    g_warning("NOTE chn%i %i", channel, pgm);
	}
	break;

    case VOLUME_MESSAGE:
	{
	    int channel;
	    int volume;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&volume);
	    g_warning("VOLUME= chn%i %i", channel, volume);
	}
	break;


    case EXPRESSION_MESSAGE:
	{
	    int channel;
	    int express;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&express);
	    g_warning("EXPRESSION= chn%i %i", channel, express);
	}
	break;

    case PANNING_MESSAGE:
	{
	    int channel;
	    int pan;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&pan);
	    g_warning("PANNING= chn%i %i", channel, pan);
	}
	break;

    case SUSTAIN_MESSAGE:
	{
	    int channel;
	    int sust;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&sust);
	    g_warning("SUSTAIN= chn%i %i", channel, sust);
	}
	break;

    case PITCH_MESSAGE:
	{
	    int channel;
	    int bend;

	    gtk_pipe_int_read(&channel);
	    gtk_pipe_int_read(&bend);
	    g_warning("PITCH BEND= chn%i %i", channel, bend);
	}
	break;

    case RESET_MESSAGE:
	g_warning("RESET_MESSAGE");
	break;

    case CLOSE_MESSAGE:
	gtk_exit(0);
	break;

    case CMSG_MESSAGE:
	{
	    int type;
	    char message[1000];
#ifdef HAVE_GTK_2
	    gchar *message_u8;
#endif

	    gtk_pipe_int_read(&type);
	    gtk_pipe_string_read(message);
#ifdef HAVE_GTK_2
	    message_u8 = g_locale_to_utf8( message, -1, NULL, NULL, NULL );
	    gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter);
	    gtk_text_buffer_insert(textbuf, &end_iter,
			    message_u8, -1);
	    gtk_text_buffer_insert(textbuf, &end_iter,
			    "\n", 1);
	    gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter);

	    mark = gtk_text_buffer_create_mark(textbuf, NULL, &end_iter, 1);
	    gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text), mark, 0.0, 0, 0.0, 1.0);
	    gtk_text_buffer_delete_mark(textbuf, mark);
	    g_free( message_u8 );
#else
	    gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL,
			    message, -1);
	    gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL,
			    "\n", 1);
#endif
	}
	break;
    case LYRIC_MESSAGE:
	{
	    char message[1000];
#ifdef HAVE_GTK_2
	    gchar *message_u8;
#endif

	    gtk_pipe_string_read(message);

#ifdef HAVE_GTK_2
	    message_u8 = g_locale_to_utf8( message, -1, NULL, NULL, NULL );
	    gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter);
	    // mod JN iter -> end_iter
	    gtk_text_buffer_insert(textbuf, &end_iter,
			    message_u8, -1);
	    gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter);

	    mark = gtk_text_buffer_create_mark(textbuf, NULL, &end_iter, 1);
	    gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text), mark, 0.0, 0, 0.0, 1.0);
	    gtk_text_buffer_delete_mark(textbuf, mark);
#else
	    gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL,
			    message, -1);
#endif
	}
	break;
    default:
	g_warning("UNKNOWN Gtk+ MESSAGE %i", message);
    }
}
示例#14
0
/* Select a moverecord as the "current" one.  NOTE: This function must be
   called _after_ applying the moverecord. */
extern void GTKSetMoveRecord( moverecord *pmr ) {

    /* highlighted row/col in game record */
    static int yCurrent = -1, xCurrent = -1;

    GtkCList *pcl = GTK_CLIST( pwGameList );
    gamelistrow *pglr;
    int i;
	/* Avoid lots of screen updates */
	if (!frozen)
		SetAnnotation( pmr );

#ifdef UNDEF
{
	GtkWidget* pwWin = GetPanelWidget(WINDOW_HINT);
    if (pwWin)
	{
		hintdata *phd = g_object_get_data(G_OBJECT(pwWin), "user_data");
		phd->fButtonsValid = FALSE;
		CheckHintButtons(phd);
	}
}
#endif
    
	if (yCurrent != -1 && xCurrent != -1)
	{
		moverecord *pmrLast = NULL;
		pglr = gtk_clist_get_row_data(pcl, yCurrent);
		if (pglr)
		{
			pmrLast = pglr->apmr[xCurrent - 1];
			if (pmrLast)
				SetCellColour(yCurrent, xCurrent, pmrLast);
		}
		if (!pmrLast)
		   gtk_clist_set_cell_style(pcl, yCurrent, xCurrent, psGameList);
	}

    yCurrent = xCurrent = -1;

    if( !pmr )
	return;
    
    if( pmr == plGame->plNext->p ) {
	g_assert( pmr->mt == MOVE_GAMEINFO );
	yCurrent = 0;
	
	if( plGame->plNext->plNext->p ) {
	    moverecord *pmrNext = plGame->plNext->plNext->p;

	    if( pmrNext->mt == MOVE_NORMAL && pmrNext->fPlayer == 1 )
		xCurrent = 2;
	    else
		xCurrent = 1;
	} else
	    xCurrent = 1;
    } else {
	for( i = pcl->rows - 1; i >= 0; i-- ) {
	    pglr = gtk_clist_get_row_data( pcl, i );
	    if( pglr->apmr[ 1 ] == pmr ) {
		xCurrent = 2;
		break;
	    } else if( pglr->apmr[ 0 ] == pmr ) {
		xCurrent = 1;
		break;
	    }
	}
	
	yCurrent = i;
	
	if( yCurrent >= 0 && !( pmr->mt == MOVE_SETDICE &&
				yCurrent == pcl->rows - 1 ) ) {
	    do {
		if( ++xCurrent > 2 ) {
		    xCurrent = 1;
		    yCurrent++;
		}

		pglr = gtk_clist_get_row_data( pcl, yCurrent );
	    } while( yCurrent < pcl->rows - 1 && !pglr->apmr[ xCurrent - 1 ] );
	    
	    if( yCurrent >= pcl->rows )
		AddMoveRecordRow();
	}
    }

	/* Highlight current move */
	gtk_clist_set_cell_style(pcl, yCurrent, xCurrent, psCurrent);

	if( gtk_clist_row_is_visible( pcl, yCurrent ) != GTK_VISIBILITY_FULL )
		gtk_clist_moveto( pcl, yCurrent, xCurrent, 0.8f, 0.5f );
}