Esempio n. 1
0
/*!
 * sets all of the active time LEDs to the given color.
 *
 * @param[in] red  (uint8_t): amount of red color to set all the active time LEDs to.
 * @param[in] green (uint8_t): amount of green color to set all the active time LEDs to.
 * @param[in] blue  (uint8_t): amount of blue color to set all the active time LEDs to.
 */
void LED_set_color(uint8_t red, uint8_t blue, uint8_t green)
{
    LED_admin_ptr->colors.red = red;
    LED_admin_ptr->colors.green = green;
    LED_admin_ptr->colors.blue = blue;
    save_colors(&LED_admin_ptr->colors);
}
Esempio n. 2
0
/**
 * Remove all edge groups and clear the container.
 */
void
SnowModel::RemoveEdgeGroups()
{
    /* Remember colors of the previous edge groups */
    if (m_rememberColors == false) {
        m_vecRememberedColors.clear();
        // clear edge group collection
        for (eg_it it = edge_groups.begin(); it != edge_groups.end(); ++it) {
            if (*it) delete(*it);
        }

        // load last saved colors
        load_colors();
    }
    else if (edge_groups.size() > 0) {
        m_vecRememberedColors.clear();
        // clear edge group collection
        for (eg_it it = edge_groups.begin(); it != edge_groups.end(); ++it) {
            if (*it) {
                m_vecRememberedColors.push_back((*it)->GetEdgeGroupFaceColor());
                delete(*it);
            }
        }

        save_colors();
    } else {
        // if there are no edge groups, load the saved colors
        load_colors();
    }

    edge_groups.clear();
}
Esempio n. 3
0
void
edosu_beatmap_save_objects(EdosuBeatmap *beatmap, osux_beatmap *osux_bm)
{
    save_hitobjects(beatmap, osux_bm);
    save_timingpoints(beatmap, osux_bm);
    save_events(beatmap, osux_bm);
    save_colors(beatmap, osux_bm);
}
Esempio n. 4
0
static void save_options(void)
{
	XFILE *file;
	long n;
	int error = 0, h;

	graf_mouse(HOURGLASS, NULL);

	if ((file = x_fopen(optname, O_DENYRW | O_WRONLY, &error)) != NULL)
	{
		if ((n = x_fwrite(file, &options, sizeof(Options))) == sizeof(Options))
		{
			if (options.cprefs & SAVE_COLORS)
				error = save_colors(file);

			if (error == 0)
				if ((error = dsk_save(file)) == 0)
					if ((error = ft_save(file)) == 0)
						if ((error = icnt_save(file)) == 0)
							if ((error = app_save(file)) == 0)
								if ((error = prg_save(file)) == 0)
									error = wd_save(file);
		}
		else
			error = (int) n;

		if (((h = x_fclose(file)) < 0) && (error == 0))
			error = h;
	}

	graf_mouse(ARROW, NULL);

	if (error != 0)
		hndl_error(MSAVECFG, error);

	wd_set_update(WD_UPD_COPIED, optname, NULL);
	wd_do_update();
}
Esempio n. 5
0
/**
 * Generates edge groups over the mesh.
 */
void SnowModel::generateEdgeGroups()
{
    std::cout << "[Snow Model] Generating edge groups" << std::endl;
    std::vector< std::set<Mesh::face*>* > candidate_meshes;

    ::Utilities::Timer t;

    t.start();

    /* clear the current edge group container */
    RemoveEdgeGroups();

    /* go through every mesh */
    #pragma omp parallel for
    for (unsigned int i=0; i < m_meshPool->getNrMeshs(); ++i) {

        /* copy the whole mesh to work on it */
        Mesh* tmpMesh = m_meshPool->getMesh(i);
        Mesh::face* f = tmpMesh->mesh()->face_source;

        candidate_meshes.clear();

        /* init all marks to false */
        do {
            f->marked = false;
            f = f->next_face;
        } while (f != NULL);


        std::cout << "\t*Growing edge groups...";
        std::flush(std::cout);

        int percent_step = static_cast<int>(tmpMesh->mesh()->number_faces * 0.1f);
        int step = 10;

        if (percent_step < 1)
        {
            step = static_cast<int>(100.0f / tmpMesh->mesh()->number_faces);
            percent_step = 1;
        }
        unsigned int percent_count = 0;
        int percent = 0;
        int face_count = 0;

        /* go through all faces */
        f = tmpMesh->mesh()->face_source;
        unsigned int eg_count = 0;
        do {

            if (face_count > percent_count)
            {
                std::cout << " " << percent;
                std::flush(std::cout);
                percent_count += percent_step;
                percent += step;
            }

            /*	get only those faces that could potentially get
             *	covered with snow (slope angle < 90� and facing outside) */
            if (!f->marked) {
                if (f->slope_angle < ( PI_2 - NearlyZero) )
                {
                    ++eg_count;
                    std::set<Mesh::face*> * candidate_mesh = new std::set<Mesh::face*>();
                    candidate_meshes.push_back(candidate_mesh);

                    /* find the candidate faces that are reachable
                     * from the current face */
                    find_candidates(f, candidate_mesh, tmpMesh);

                    face_count += candidate_mesh->size();
                } else {
                    ++face_count;
                }
            }

            f = f->next_face;
        } while (f != NULL);

        std::cout << " ...ready" << std::endl << "\t*Initializating " << candidate_meshes.size() << " edge groups...";
        std::flush(std::cout);

        percent_step = static_cast<int>(candidate_meshes.size() * 0.1f);
        step = 10;

        if (percent_step < 1)
        {
            step = static_cast<int>(100.0f / candidate_meshes.size());
            percent_step = 1;
        }
        percent_count = 0;
        percent = 0;

        for (unsigned int i = 0; i < candidate_meshes.size(); ++i) {
            try {
                //std::cout << "\tFound new edge group (#" << (i + 1) << ")" << std::endl;
                // TODO: go through the found candidates and see if they overlap in Y-Order (top)
                EdgeGroup* eg = new EdgeGroup(m_world, candidate_meshes[i], m_iLaunchSiteOptimizations);
                if ( m_rememberColors && i < m_vecRememberedColors.size() ) {
                    eg->SetEdgeGroupFaceColor(m_vecRememberedColors[i]);
                }
                edge_groups.push_back(eg);

                if (i == percent_count)
                {
                    std::cout << " " << percent;
                    std::flush(std::cout);
                    percent_count += percent_step;
                    percent += step;
                }
            } catch (exception &e) {
                std::cerr << "[Error] Error within the creation of EdgeGroup " << i + 1 << ": " << e.what() << std::endl;
            }
        }

        std::cout << " ...ready" << std::endl;

        if (m_rememberColors) {
            save_colors();
        }
    }

    t.stop();
    std::cout << "\tTime: " << t.diffTimeInMSec() << "msec" << std::endl;
}
Esempio n. 6
0
int main(int argc, char ** argv)
{
  GtkWidget * vbox;
  GtkWidget * hpaned;
  GtkWidget * sc_win, * sc_buffer;
  GtkWidget * menu_bar;
  GtkWidget * file_menu, * file_item, * open_item, * save_item, * quit_item, * exp_img_item, * save_raw_data_item;
  GtkWidget * generate_menu, * generate_item, * mandelbrot_item, * julia_item, * palette_item, * random_noise_item, * from_clipboard_item;
  GtkWidget * settings_menu, * settings_item;
	
  GtkWidget * zoom_box, * zoom_button;
	
  //init general
  colors = (color_t *)malloc(56 * sizeof(color_t));
  memset(mdata, 0, BUFFER_COUNT * sizeof(unsigned char *));
  memset(icons, 0, BUFFER_COUNT * sizeof(GtkWidget *));
  memset(icon_event_boxes, 0, BUFFER_COUNT * sizeof(GtkWidget *));
  mdata[current_buffer] = (unsigned char *)malloc(128 * 128);
	
  char * templine = malloc(13);
  FILE * fcolors = fopen("colors", "r");
	
  int i, r, g, b;
  for(i = 0; fgets(templine, 13, fcolors) == templine; i++)
    {
      sscanf(templine, "%i,%i,%i", &r, &g, &b);
      color_t color = {r, g, b};
      colors[i] = color;
    }
	
  free(templine);
  fclose(fcolors);
	
  save_colors(colors, "colors.bin");
  //load_colors(colors, "colors.bin");
	
  srand(time(NULL));
	
  config = config_new();
	
  //init gtk
  gtk_init(&argc, &argv);
	
  //window
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "ImageToMap X v" VERSION_NUMBER);
  g_signal_connect(window, "delete_event", G_CALLBACK(kill_window), NULL);
	
  //vbox
#ifdef GTK2
  vbox = gtk_vbox_new(FALSE, 0);
#else
  vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
#endif
  gtk_container_add(GTK_CONTAINER (window), vbox);
  gtk_widget_show(vbox);
	
  //////menu_bar
  menu_bar = gtk_menu_bar_new();
  gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, TRUE, 0);
  gtk_widget_show(menu_bar);
	
  ////////file_menu
  file_menu = gtk_menu_new();
	
  //////////open_item
  open_item = gtk_menu_item_new_with_label("Open");
  gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), open_item);
  gtk_widget_show(open_item);
  g_signal_connect_swapped (open_item, "activate",
			    G_CALLBACK (button_click),
			    (gpointer) "button.open");
			
  //////////save_item
  save_item = gtk_menu_item_new_with_label("Save");
  gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), save_item);
  gtk_widget_show(save_item);
  g_signal_connect_swapped (save_item, "activate",
			    G_CALLBACK (button_click),
			    (gpointer) "button.save");
			
  //////////save_raw_data_item
  save_raw_data_item = gtk_menu_item_new_with_label("Save Raw Map");
  gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), save_raw_data_item);
  gtk_widget_show(save_raw_data_item);
  g_signal_connect_swapped (save_raw_data_item, "activate",
			    G_CALLBACK (button_click),
			    (gpointer) "button.save_rm");
			
  //////////exp_img_item
  exp_img_item = gtk_menu_item_new_with_label("Export Image");
  gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), exp_img_item);
  gtk_widget_show(exp_img_item);
  g_signal_connect_swapped(exp_img_item, "activate",
			   G_CALLBACK (button_click),
			   (gpointer) "button.exp_img");
	
  //////////quit_item
  quit_item = gtk_menu_item_new_with_label("Quit");
  gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), quit_item);
  gtk_widget_show(quit_item);
  g_signal_connect_swapped (quit_item, "activate",
			    G_CALLBACK(kill_window),
			    (gpointer)"button.quit");
	
  /////////file_item
  file_item = gtk_menu_item_new_with_label("File");
  gtk_widget_show(file_item);
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), file_menu);
  gtk_menu_shell_append((GtkMenuShell *)menu_bar, file_item);
	
  ////////generate_menu
  generate_menu = gtk_menu_new();
	
  //////////mandelbrot_item
  mandelbrot_item = gtk_menu_item_new_with_label("Mandelbrot");
  gtk_menu_shell_append(GTK_MENU_SHELL(generate_menu), mandelbrot_item);
  gtk_widget_show(mandelbrot_item);
  g_signal_connect_swapped(mandelbrot_item, "activate",
			   G_CALLBACK(button_click),
			   (gpointer) "button.mandelbrot");
	
  //////////julia_item
  julia_item = gtk_menu_item_new_with_label("Julia");
  gtk_menu_shell_append(GTK_MENU_SHELL(generate_menu), julia_item);
  gtk_widget_show(julia_item);
  g_signal_connect_swapped(julia_item, "activate",
			   G_CALLBACK (button_click),
			   (gpointer) "button.julia");
	
  //////////palette_item
  palette_item = gtk_menu_item_new_with_label("Palette");
  gtk_menu_shell_append(GTK_MENU_SHELL(generate_menu), palette_item);
  gtk_widget_show(palette_item);
  g_signal_connect_swapped(palette_item, "activate",
			   G_CALLBACK(button_click),
			   (gpointer)"button.palette");

  //////////random_noise_item
  random_noise_item = gtk_menu_item_new_with_label("Random Noise");
  gtk_menu_shell_append(GTK_MENU_SHELL(generate_menu), random_noise_item);
  gtk_widget_show(random_noise_item);
  g_signal_connect_swapped(random_noise_item, "activate",
			   G_CALLBACK(button_click),
			   (gpointer)"button.random_noise");

  //////////from_clipboard_item
  from_clipboard_item = gtk_menu_item_new_with_label("From Clipboard");
  gtk_menu_shell_append(GTK_MENU_SHELL(generate_menu), from_clipboard_item);
  gtk_widget_show(from_clipboard_item);
  g_signal_connect_swapped(from_clipboard_item, "activate",
			   G_CALLBACK(button_click),
			   (gpointer)"button.from_clipboard");
	
  /////////generate_item
  generate_item = gtk_menu_item_new_with_label("Generate");
  gtk_widget_show(generate_item);
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(generate_item), generate_menu);
  gtk_menu_shell_append((GtkMenuShell *)menu_bar, generate_item);

  ////////settings_menu
  settings_menu = gtk_menu_new();
  
  ////////settings_item
  settings_item = gtk_menu_item_new_with_label("Settings");
  gtk_widget_show(settings_item);
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(settings_item), settings_menu);
  gtk_menu_shell_append((GtkMenuShell *)menu_bar, settings_item);

  //////////FSD_checkbox
  FSD_checkbox = gtk_check_menu_item_new_with_label("Floyd–Steinberg dithering");
  gtk_menu_shell_append(GTK_MENU_SHELL(settings_menu), FSD_checkbox);
  gtk_widget_show(FSD_checkbox);
  
  //drop_down_menu
  init_drop_down_menu();

  //hpaned
#ifdef GTK2
  hpaned = gtk_hpaned_new();
#else
  hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
#endif
  gtk_widget_set_size_request (hpaned, 220, -1);
  gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0);
  gtk_widget_show(hpaned);

  ////sc_buffer
  sc_buffer = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_buffer), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
#ifdef GTK2
  gtk_widget_set_size_request(sc_buffer, 128 + 32, 512);
#else
  gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(sc_buffer), 128 + 32);
  gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(sc_buffer), 512);
#endif
  gtk_paned_pack2(GTK_PANED(hpaned), sc_buffer, FALSE, FALSE);
  gtk_widget_show(sc_buffer);

  //////list_vbox
#ifdef GTK2
  list_vbox = gtk_vbox_new(FALSE, 0);
#else
  list_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
#endif
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sc_buffer), list_vbox);
  gtk_widget_show(list_vbox);

  ////sc_win
  sc_win = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
#ifdef GTK2
  gtk_widget_set_size_request(sc_win, 128 * 4, 128 * 4);
  gtk_window_resize(GTK_WINDOW(window), 128 * 4 + 200, 128 * 4 + 70);
#else
  gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(sc_win), 128 * 4);
  gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(sc_win), 128 * 4);
#endif
  gtk_paned_pack1(GTK_PANED(hpaned), sc_win, TRUE, FALSE);
  gtk_widget_show(sc_win);
	
  //////image
  dimage = gdk_pixbuf_new_from_file("start.png", NULL);
  image = gtk_image_new();
  gtk_image_set_from_pixbuf(GTK_IMAGE(image), dimage);
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sc_win), image);
  gtk_widget_show(image);
	
  ////zoom_box
#ifdef GTK2
  zoom_box = gtk_hbox_new(FALSE, 0);
#else
  zoom_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
#endif
  gtk_box_pack_start(GTK_BOX(vbox), zoom_box, FALSE, FALSE, 0);
  gtk_widget_show(zoom_box);
	
  //////zoom_button (+)
  zoom_button = gtk_button_new_with_label("+");
	
  gtk_box_pack_start(GTK_BOX(zoom_box), zoom_button, TRUE, TRUE, 2);
  g_signal_connect(zoom_button, "clicked", G_CALLBACK(button_click2), "button.zoomp");
  gtk_widget_show(zoom_button);
	
  //////zoom_button (|)
  zoom_button = gtk_button_new_with_label("|");
	
  gtk_box_pack_start(GTK_BOX(zoom_box), zoom_button, TRUE, TRUE, 2);
  g_signal_connect(zoom_button, "clicked", G_CALLBACK(button_click2), "button.zoome");
  gtk_widget_show(zoom_button);
	
  //////zoom_button (-)
  zoom_button = gtk_button_new_with_label("-");
	
  gtk_box_pack_start(GTK_BOX(zoom_box), zoom_button, TRUE, TRUE, 2);
  g_signal_connect(zoom_button, "clicked", G_CALLBACK(button_click2), "button.zoomm");
  gtk_widget_show(zoom_button);
	
  //icon
  gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("imagetomap.ico"));
  
  //display window
  gtk_widget_show (window);
  gtk_main();
	
  //clean up
  free(colors);
  for(i = 0; i < BUFFER_COUNT; i++)
    free(mdata[i]);
  config_free(config);
	
  return 0;
}
Esempio n. 7
0
/*
 * Given an XEvent, process it if it pertains to a ColorBar, else do
 * nothing with it.
 * Input:  event - the X event
 * Output:  whichcb - which colorbar this event pertained to.
 * Return: 1 - if color table was changed.
 *         2 - if reset key was pressed
 *         3 - if <shift>+reset key was pressed
 *         0 - if no change
 */
static int colorbar_process( LUI_COLORBAR *cb, XEvent *event )
{
   static int p1 = 0, p2 = 0, p3 = 0, p4 = 0; /* red, green, blue, alpha */
   static int pentry;
   int i, modify, entry, result;
   static int move_marker;

   result = modify = 0;

   if (event->type==KeyPress) {
      char keybuf[50];
      KeySym key;
      XComposeStatus compose;
      int count;
      count = XLookupString( &event->xkey, keybuf, 50, &key, &compose );
      if (count==1) {
         if (keybuf[0]=='r') {
            /* Reset RGB */
            cb->params[DRAWFLAG] = 0.0;
            result = LUI_RGB_RESET;
         }
         else if (keybuf[0]=='R') {
            /* Reset alpha */
            result = LUI_ALPHA_RESET;
            cb->params[DRAWFLAG] = 0.0;
         }
         else if (keybuf[0]=='c' || keybuf[0]=='C') {
            /* Copy current colors to clipboard */
            copy_colors( cb );
         }
         else if (keybuf[0]=='p' || keybuf[0]=='P') {
            /* Paste clipboard colors to current color widget */
            paste_colors( cb );
            LUI_ColorBarRedraw( cb );
            result = LUI_RGB_CHANGE | LUI_ALPHA_CHANGE;
            cb->params[DRAWFLAG] = 0.0;
            result = LUI_RGB_CHANGE | LUI_ALPHA_CHANGE;
         }

/* WLH 7-18-96 */
         else if (keybuf[0]=='s' || keybuf[0]=='S') {
            /* save colors to a file */
            save_colors( cb );
         }
         else if (keybuf[0]=='l' || keybuf[0]=='L') {
            /* load colors from a file */
            load_colors( cb );
            LUI_ColorBarRedraw( cb );
            return 1;
         }

         else {
            /* if unused key, toggle help display */
            cb->helpflag = !cb->helpflag;
            LUI_ColorBarRedraw( cb );
         }
      }
      else if (key == XK_Left) {
         /* rotate left */
         cb->params[BIAS] -= 0.03/cb->params[CURVE];
         result = LUI_RGB_SHAPE;
         cb->params[DRAWFLAG] = 0.0;
      }
      else if (key == XK_Right) {
         /* rotate right */
         cb->params[BIAS] += 0.03/cb->params[CURVE];
         result = LUI_RGB_SHAPE;
         cb->params[DRAWFLAG] = 0.0;
      }
      else if (key == XK_Up) {
         /* expand color map */
         if (event->xkey.state & ANY_MODIFIER) {
            cb->params[ALPHAPOW] -= 0.1;
            if (cb->params[ALPHAPOW]<0.0)
              cb->params[ALPHAPOW] = 0.0;
            result = LUI_ALPHA_SHAPE;
            cb->params[DRAWFLAG] = 0.0;
         }
         else {
            cb->params[CURVE] -= 0.1;
            result = LUI_RGB_SHAPE;
            cb->params[DRAWFLAG] = 0.0;
         }
      }
      else if (key == XK_Down) {
         /* compress color map */
         if (event->xkey.state & ANY_MODIFIER) {
            cb->params[ALPHAPOW] += 0.1;
            result = LUI_ALPHA_SHAPE;
            cb->params[DRAWFLAG] = 0.0;
         }
         else {
            cb->params[CURVE] += 0.1;
            result = LUI_RGB_SHAPE;
            cb->params[DRAWFLAG] = 0.0;
         }
      }
   }
   else if (event->type==Expose && event->xexpose.count==0) {
      LUI_ColorBarRedraw( cb );
      result = 0;
   }
   else if (event->type==ConfigureNotify) {
/* MJK 4.15.99 */
      LUI_ColorBarSetSize( cb, event->xconfigure.width, event->xconfigure.height );
      result = 0;
   }
   else if (event->type==ButtonPress ) {
      if (event->xbutton.y<cb->wedge_y) {
         /* change color function */
         move_marker = 0;
      }
      else {
         /* change marker position */
         move_marker = 1;
      }
      /* determine which curve to modify */
      if (event->xbutton.state&ANY_MODIFIER) {
         p4 = 1;
      }
      else {
         if (event->xbutton.button==Button1)  p1 = 1;
         if (event->xbutton.button==Button2)  p2 = 1;
         if (event->xbutton.button==Button3)  p3 = 1;
      }
      pentry = x_to_index( cb, event->xbutton.x );
      modify = 1;
   }
   else if (event->type==ButtonRelease) {
      if (p1 || p2 || p3) {
         result = LUI_RGB_CHANGE;
      }
      else {
         result = LUI_ALPHA_CHANGE;
      }
      if (event->xbutton.button==Button1)  p1 = 0;
      if (event->xbutton.button==Button2)  p2 = 0;
      if (event->xbutton.button==Button3)  p3 = 0;
      p4 = 0;
   }
   else if (event->type==MotionNotify) {
      /* Flush extra MotionNotify events */
      while (QLength(LUI_Display)>0) {
         XEvent next;
         XPeekEvent(LUI_Display, &next);
         if (next.type!=MotionNotify)
            break;
         XNextEvent(LUI_Display, event);
      }
      modify = 1;
   }


   /* Modify one or more of the color curves */

   if (modify && (p1 || p2 || p3 || p4)) {
      /* calculate which entry in color table to change */
      entry = x_to_index( cb, event->xbutton.x );
      /* update */
      if (move_marker) {
         /* changing marker position */
         cb->markerpos = entry;
         redraw_marker( cb );
      }
      else {
         /* changing color graph */
         int a, b, value;

         value = y_to_intensity( cb, event->xbutton.y );

         if (pentry<=entry) {
            a = pentry;
            b = entry;
         }
         else {
            a = entry;
            b = pentry;
         }

         /* update entries from 'pentry' to 'entry' */
         for (i=a; i<=b; i++) {
            int red, green, blue, alpha;
            red = UNPACK_RED(cb->table[i]);
            green = UNPACK_GREEN(cb->table[i]);
            blue = UNPACK_BLUE(cb->table[i]);
            alpha = UNPACK_ALPHA(cb->table[i]);
            if (p1) {
               /* modify red */
               red = value;
            }
            if (p2) {
               /* modify green */
               green = value;
            }
            if (p3) {
               /* modify blue */
               blue = value;
            }
            if (p4) {
               /* modify alpha */
               alpha = value;
            }
            /* change the color table entry */
            cb->table[i] = PACK_COLOR(red,green,blue,alpha);
         } /* for */

         /* redraw the color curves */
         if (pentry<entry)
           redraw_range( cb, pentry-1, entry+1 );
         else
           redraw_range( cb, entry-1, pentry+1 );

         pentry = entry;

         if (p4) {
            /* update min,max alpha values */
            cb->minalpha = 256;
            cb->maxalpha = 0;
            for (i=0;i<cb->table_size;i++) {
               int a = UNPACK_ALPHA( cb->table[i] );
               if (a<cb->minalpha)  cb->minalpha = a;
               if (a>cb->maxalpha)  cb->maxalpha = a;
            }
         }

         if (p4) {
			  result = LUI_ALPHA_MODIFY;
			  /*
            result = LUI_ALPHA_CHANGE;
			  */
         }
         else {
            result = LUI_RGB_MODIFY;
				/*
            result = LUI_RGB_CHANGE;
				*/
         }
         cb->params[DRAWFLAG] = 1.0;
      }
   } /*modify*/


   if (result!=0 && cb->callback) {
      (*cb->callback)(cb, result);
   }

   return result;
}