config.guess new versions from CVS (at least that's what my debian package

2001-05-24  Michael Natterer  <mitch@gimp.org>

	* config.guess
	* config.sub: new versions from CVS (at least that's what my
	debian package says...)

	* app/Makefile.am
	* app/gimppreviewcache.[ch]: removed.

	* app/core/Makefile.am
	* app/core/gimppreviewcache.c: added.

	* app/core/gimpdrawable.c: reordered #includes

	* app/apptypes.h: make ImageMap a proper opaque typedef, not
	simply a gpointer.

	* app/image_map.[ch]: changed accordingly. cleanup.

	* app/tools/color_balance.h
	* app/tools/curves.h
	* app/tools/gimptool.c
	* app/tools/histogram_tool.h
	* app/tools/hue_saturation.h
	* app/tools/threshold.h: changed here too.

	* libgimpbase/gimpbasetypes.h: /*< skip >*/ GIMP_UNIT_PERCENT as
	it's a UI convenience thing and no unit.

	* plug-ins/script-fu/script-fu-constants.c
	* tools/pdbgen/enums.pl: regenerated.

	* libgimpwidgets/gimpbutton.c: maybe this change makes GimpButton
	behave even more careful when changing GtkButton's private stuff.
This commit is contained in:
Michael Natterer 2001-05-24 17:09:57 +00:00 committed by Michael Natterer
parent 0196e83f8d
commit 6a5242c0bf
33 changed files with 993 additions and 1034 deletions

View File

@ -1,3 +1,38 @@
2001-05-24 Michael Natterer <mitch@gimp.org>
* config.guess
* config.sub: new versions from CVS (at least that's what my
debian package says...)
* app/Makefile.am
* app/gimppreviewcache.[ch]: removed.
* app/core/Makefile.am
* app/core/gimppreviewcache.c: added.
* app/core/gimpdrawable.c: reordered #includes
* app/apptypes.h: make ImageMap a proper opaque typedef, not
simply a gpointer.
* app/image_map.[ch]: changed accordingly. cleanup.
* app/tools/color_balance.h
* app/tools/curves.h
* app/tools/gimptool.c
* app/tools/histogram_tool.h
* app/tools/hue_saturation.h
* app/tools/threshold.h: changed here too.
* libgimpbase/gimpbasetypes.h: /*< skip >*/ GIMP_UNIT_PERCENT as
it's a UI convenience thing and no unit.
* plug-ins/script-fu/script-fu-constants.c
* tools/pdbgen/enums.pl: regenerated.
* libgimpwidgets/gimpbutton.c: maybe this change makes GimpButton
behave even more careful when changing GtkButton's private stuff.
2001-05-23 Michael Natterer <mitch@gimp.org> 2001-05-23 Michael Natterer <mitch@gimp.org>
* app/gimphistogram.[ch] * app/gimphistogram.[ch]

View File

@ -89,8 +89,6 @@ gimp_SOURCES = \
datafiles.h \ datafiles.h \
floating_sel.c \ floating_sel.c \
floating_sel.h \ floating_sel.h \
gimppreviewcache.h \
gimppreviewcache.c \
parasitelist.c \ parasitelist.c \
parasitelist.h \ parasitelist.h \
scan_convert.c \ scan_convert.c \

View File

@ -43,7 +43,7 @@ typedef struct _GimpImageNewValues GimpImageNewValues;
typedef struct _GimpProgress GimpProgress; typedef struct _GimpProgress GimpProgress;
typedef gpointer ImageMap; typedef struct _ImageMap ImageMap;
typedef struct _InfoDialog InfoDialog; typedef struct _InfoDialog InfoDialog;

View File

@ -38,7 +38,7 @@ struct _ColorBalanceDialog
GtkAdjustment *yellow_blue_data; GtkAdjustment *yellow_blue_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble cyan_red[3]; gdouble cyan_red[3];
gdouble magenta_green[3]; gdouble magenta_green[3];

View File

@ -38,7 +38,7 @@ struct _CurvesDialog
GtkWidget *curve_type_menu; GtkWidget *curve_type_menu;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint channel; gint channel;

View File

@ -44,7 +44,7 @@ struct _HueSaturationDialog
GtkAdjustment *saturation_data; GtkAdjustment *saturation_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble hue[7]; gdouble hue[7];
gdouble lightness[7]; gdouble lightness[7];

View File

@ -33,7 +33,7 @@ struct _ThresholdDialog
GimpHistogram *hist; GimpHistogram *hist;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint low_threshold; gint low_threshold;

View File

@ -69,6 +69,8 @@ libappcore_la_SOURCES = \
gimppalette.h \ gimppalette.h \
gimppalette-import.c \ gimppalette-import.c \
gimppalette-import.h \ gimppalette-import.h \
gimppreviewcache.c \
gimppreviewcache.h \
gimptoolinfo.c \ gimptoolinfo.c \
gimptoolinfo.h \ gimptoolinfo.h \
gimpundo.c \ gimpundo.c \

View File

@ -44,6 +44,7 @@
#include "gimplayer.h" #include "gimplayer.h"
#include "gimplist.h" #include "gimplist.h"
#include "gimppreviewcache.h" #include "gimppreviewcache.h"
#include "gimpparasite.h" #include "gimpparasite.h"
#include "parasitelist.h" #include "parasitelist.h"
#include "undo.h" #include "undo.h"

View File

@ -41,8 +41,7 @@
#define WORK_DELAY 1 #define WORK_DELAY 1
/* Local structures */ struct _ImageMap
typedef struct _ImageMap
{ {
GDisplay *gdisp; GDisplay *gdisp;
GimpDrawable *drawable; GimpDrawable *drawable;
@ -53,7 +52,7 @@ typedef struct _ImageMap
void *pr; void *pr;
gint state; gint state;
gint idle; gint idle;
} _ImageMap; };
/**************************/ /**************************/
@ -62,333 +61,346 @@ typedef struct _ImageMap
static gint static gint
image_map_do (gpointer data) image_map_do (gpointer data)
{ {
_ImageMap *_image_map; ImageMap *image_map;
GimpImage *gimage; GimpImage *gimage;
PixelRegion shadowPR; PixelRegion shadowPR;
gint x, y, w, h; gint x, y, w, h;
_image_map = (_ImageMap *) data; image_map = (ImageMap *) data;
if (! (gimage = gimp_drawable_gimage ( (_image_map->drawable)))) if (! (gimage = gimp_drawable_gimage (image_map->drawable)))
{ {
_image_map->state = WAITING; image_map->state = WAITING;
return FALSE; return FALSE;
} }
/* Process the pixel regions and apply the image mapping */ /* Process the pixel regions and apply the image mapping */
(* _image_map->apply_func) (&_image_map->srcPR, &_image_map->destPR, _image_map->user_data); (* image_map->apply_func) (&image_map->srcPR,
&image_map->destPR,
image_map->user_data);
x = _image_map->destPR.x; x = image_map->destPR.x;
y = _image_map->destPR.y; y = image_map->destPR.y;
w = _image_map->destPR.w; w = image_map->destPR.w;
h = _image_map->destPR.h; h = image_map->destPR.h;
/* apply the results */ /* apply the results */
pixel_region_init (&shadowPR, gimage->shadow, x, y, w, h, FALSE); pixel_region_init (&shadowPR, gimage->shadow, x, y, w, h, FALSE);
gimp_image_apply_image (gimage, _image_map->drawable, &shadowPR, gimp_image_apply_image (gimage, image_map->drawable, &shadowPR,
FALSE, OPAQUE_OPACITY, REPLACE_MODE, NULL, x, y); FALSE, OPAQUE_OPACITY, REPLACE_MODE, NULL, x, y);
/* display the results */ /* display the results */
if (_image_map->gdisp) if (image_map->gdisp)
{ {
drawable_update ( (_image_map->drawable), x, y, w, h); drawable_update ( (image_map->drawable), x, y, w, h);
gdisplay_flush_now (_image_map->gdisp); gdisplay_flush_now (image_map->gdisp);
} }
_image_map->pr = pixel_regions_process (_image_map->pr); image_map->pr = pixel_regions_process (image_map->pr);
if (_image_map->pr == NULL) if (image_map->pr == NULL)
{ {
_image_map->state = WAITING; image_map->state = WAITING;
gdisplays_flush (); gdisplays_flush ();
return FALSE; return FALSE;
} }
else
return TRUE; return TRUE;
} }
ImageMap ImageMap *
image_map_create (GDisplay *gdisp, image_map_create (GDisplay *gdisp,
GimpDrawable *drawable) GimpDrawable *drawable)
{ {
_ImageMap *_image_map; ImageMap *image_map;
_image_map = g_new (_ImageMap, 1); g_return_val_if_fail (gdisp != NULL, NULL);
_image_map->gdisp = gdisp; g_return_val_if_fail (drawable != NULL, NULL);
_image_map->drawable = drawable; g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
_image_map->undo_tiles = NULL;
_image_map->state = WAITING;
/* Interactive tools based on image_map disable the undo stack */ image_map = g_new0 (ImageMap, 1);
/* to avert any unintented undo interaction through the UI */
gimp_image_undo_freeze(_image_map->gdisp->gimage); image_map->gdisp = gdisp;
gdisplay_set_menu_sensitivity (_image_map->gdisp); image_map->drawable = drawable;
return (ImageMap) _image_map; image_map->undo_tiles = NULL;
image_map->state = WAITING;
/* Interactive tools based on image_map disable the undo stack
* to avert any unintented undo interaction through the UI
*/
gimp_image_undo_freeze (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (image_map->gdisp);
return image_map;
} }
void void
image_map_apply (ImageMap image_map, image_map_apply (ImageMap *image_map,
ImageMapApplyFunc apply_func, ImageMapApplyFunc apply_func,
void *user_data) gpointer apply_data)
{ {
_ImageMap *_image_map; gint x1, y1;
gint x1, y1, x2, y2; gint x2, y2;
gint offset_x, offset_y; gint offset_x, offset_y;
gint width, height; gint width, height;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
_image_map->apply_func = apply_func; g_return_if_fail (apply_func != NULL);
_image_map->user_data = user_data;
image_map->apply_func = apply_func;
image_map->user_data = apply_data;
/* If we're still working, remove the timer */ /* If we're still working, remove the timer */
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
pixel_regions_process_stop (_image_map->pr); pixel_regions_process_stop (image_map->pr);
_image_map->pr = NULL;
image_map->pr = NULL;
} }
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* The application should occur only within selection bounds */ /* The application should occur only within selection bounds */
gimp_drawable_mask_bounds (_image_map->drawable, &x1, &y1, &x2, &y2); gimp_drawable_mask_bounds (image_map->drawable, &x1, &y1, &x2, &y2);
/* If undo tiles don't exist, or change size, (re)allocate */ /* If undo tiles don't exist, or change size, (re)allocate */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
tile_manager_get_offsets (_image_map->undo_tiles, &offset_x, &offset_y); tile_manager_get_offsets (image_map->undo_tiles, &offset_x, &offset_y);
width = tile_manager_width (_image_map->undo_tiles); width = tile_manager_width (image_map->undo_tiles);
height = tile_manager_height (_image_map->undo_tiles); height = tile_manager_height (image_map->undo_tiles);
} }
else else
{ {
offset_x = offset_y = width = height = 0; offset_x = offset_y = width = height = 0;
} }
if (!_image_map->undo_tiles || if (! image_map->undo_tiles ||
offset_x != x1 || offset_y != y1 || offset_x != x1 || offset_y != y1 ||
width != (x2 - x1) || height != (y2 - y1)) width != (x2 - x1) || height != (y2 - y1))
{ {
/* If either the extents changed or the tiles don't exist, allocate new */ /* If either the extents changed or the tiles don't exist,
if (!_image_map->undo_tiles || * allocate new
*/
if (! image_map->undo_tiles ||
width != (x2 - x1) || height != (y2 - y1)) width != (x2 - x1) || height != (y2 - y1))
{ {
/* Destroy old tiles--If they exist */ /* Destroy old tiles--If they exist */
if (_image_map->undo_tiles != NULL) if (image_map->undo_tiles != NULL)
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
/* Allocate new tiles */ /* Allocate new tiles */
_image_map->undo_tiles = image_map->undo_tiles =
tile_manager_new ((x2 - x1), (y2 - y1), tile_manager_new ((x2 - x1), (y2 - y1),
gimp_drawable_bytes (_image_map->drawable)); gimp_drawable_bytes (image_map->drawable));
} }
/* Copy from the image to the new tiles */ /* Copy from the image to the new tiles */
pixel_region_init (&_image_map->srcPR, pixel_region_init (&image_map->srcPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
x1, y1, (x2 - x1), (y2 - y1), FALSE); x1, y1, (x2 - x1), (y2 - y1), FALSE);
pixel_region_init (&_image_map->destPR, _image_map->undo_tiles, pixel_region_init (&image_map->destPR, image_map->undo_tiles,
0, 0, (x2 - x1), (y2 - y1), TRUE); 0, 0, (x2 - x1), (y2 - y1), TRUE);
copy_region (&_image_map->srcPR, &_image_map->destPR); copy_region (&image_map->srcPR, &image_map->destPR);
/* Set the offsets */ /* Set the offsets */
tile_manager_set_offsets (_image_map->undo_tiles, x1, y1); tile_manager_set_offsets (image_map->undo_tiles, x1, y1);
} }
else /* _image_map->undo_tiles exist AND drawable dimensions have not changed... */ else /* image_map->undo_tiles exist AND drawable dimensions have not changed... */
{ {
/* Reset to initial drawable conditions. */ /* Reset to initial drawable conditions. */
/* Copy from the backup undo tiles to the drawable */ /* Copy from the backup undo tiles to the drawable */
pixel_region_init (&_image_map->srcPR, _image_map->undo_tiles, pixel_region_init (&image_map->srcPR, image_map->undo_tiles,
0, 0, width, height, FALSE); 0, 0, width, height, FALSE);
pixel_region_init (&_image_map->destPR, pixel_region_init (&image_map->destPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
offset_x, offset_y, width, height, TRUE); offset_x, offset_y, width, height, TRUE);
copy_region (&_image_map->srcPR, &_image_map->destPR); copy_region (&image_map->srcPR, &image_map->destPR);
} }
/* Configure the src from the drawable data */ /* Configure the src from the drawable data */
pixel_region_init (&_image_map->srcPR, _image_map->undo_tiles, pixel_region_init (&image_map->srcPR, image_map->undo_tiles,
0, 0, (x2 - x1), (y2 - y1), FALSE); 0, 0, (x2 - x1), (y2 - y1), FALSE);
/* Configure the dest as the shadow buffer */ /* Configure the dest as the shadow buffer */
pixel_region_init (&_image_map->destPR, pixel_region_init (&image_map->destPR,
gimp_drawable_shadow (_image_map->drawable), gimp_drawable_shadow (image_map->drawable),
x1, y1, (x2 - x1), (y2 - y1), TRUE); x1, y1, (x2 - x1), (y2 - y1), TRUE);
/* Apply the image transformation to the pixels */ /* Apply the image transformation to the pixels */
_image_map->pr = pixel_regions_register (2, &_image_map->srcPR, &_image_map->destPR); image_map->pr = pixel_regions_register (2, &image_map->srcPR, &image_map->destPR);
/* Start the intermittant work procedure */ /* Start the intermittant work procedure */
_image_map->state = WORKING; image_map->state = WORKING;
_image_map->idle = gtk_idle_add (image_map_do, image_map); image_map->idle = gtk_idle_add (image_map_do, image_map);
} }
void void
image_map_commit (ImageMap image_map) image_map_commit (ImageMap *image_map)
{ {
_ImageMap *_image_map;
gint x1, y1, x2, y2; gint x1, y1, x2, y2;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
/* Finish the changes */ /* Finish the changes */
while (image_map_do (image_map)) ; while (image_map_do (image_map)) ;
} }
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* Interactive phase ends: we can commit an undo frame now */ /* Interactive phase ends: we can commit an undo frame now */
gimp_image_undo_thaw(_image_map->gdisp->gimage); gimp_image_undo_thaw(image_map->gdisp->gimage);
/* Register an undo step */ /* Register an undo step */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
tile_manager_get_offsets (_image_map->undo_tiles, &x1, &y1); tile_manager_get_offsets (image_map->undo_tiles, &x1, &y1);
x2 = x1 + tile_manager_width (_image_map->undo_tiles); x2 = x1 + tile_manager_width (image_map->undo_tiles);
y2 = y1 + tile_manager_height (_image_map->undo_tiles); y2 = y1 + tile_manager_height (image_map->undo_tiles);
drawable_apply_image (_image_map->drawable, drawable_apply_image (image_map->drawable,
x1, y1, x2, y2, _image_map->undo_tiles, FALSE); x1, y1, x2, y2, image_map->undo_tiles, FALSE);
} }
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (_image_map); g_free (image_map);
} }
void void
image_map_clear (ImageMap image_map) image_map_clear (ImageMap *image_map)
{ {
_ImageMap *_image_map;
PixelRegion srcPR, destPR; PixelRegion srcPR, destPR;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
pixel_regions_process_stop (_image_map->pr); pixel_regions_process_stop (image_map->pr);
_image_map->pr = NULL; image_map->pr = NULL;
} }
_image_map->state = WAITING; image_map->state = WAITING;
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* restore the original image */ /* restore the original image */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
gint offset_x; gint offset_x;
gint offset_y; gint offset_y;
gint width; gint width;
gint height; gint height;
tile_manager_get_offsets (_image_map->undo_tiles, &offset_x, &offset_y); tile_manager_get_offsets (image_map->undo_tiles, &offset_x, &offset_y);
width = tile_manager_width (_image_map->undo_tiles); width = tile_manager_width (image_map->undo_tiles);
height = tile_manager_height (_image_map->undo_tiles), height = tile_manager_height (image_map->undo_tiles),
/* Copy from the drawable to the tiles */ /* Copy from the drawable to the tiles */
pixel_region_init (&srcPR, _image_map->undo_tiles, pixel_region_init (&srcPR, image_map->undo_tiles,
0, 0, width, height, FALSE); 0, 0, width, height, FALSE);
pixel_region_init (&destPR, pixel_region_init (&destPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
offset_x, offset_y, width, height, TRUE); offset_x, offset_y, width, height, TRUE);
/* if the user has changed the image depth get out quickly */ /* if the user has changed the image depth get out quickly */
if (destPR.bytes != srcPR.bytes) if (destPR.bytes != srcPR.bytes)
{ {
g_message ("image depth change, unable to restore original image"); g_message ("image depth change, unable to restore original image");
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
gimp_image_undo_thaw (_image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (_image_map); g_free (image_map);
return; return;
} }
copy_region (&srcPR, &destPR); copy_region (&srcPR, &destPR);
/* Update the area */ /* Update the area */
drawable_update (_image_map->drawable, offset_x, offset_y, width, height); drawable_update (image_map->drawable, offset_x, offset_y, width, height);
/* Free the undo_tiles tile manager */ /* Free the undo_tiles tile manager */
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
_image_map->undo_tiles = NULL; image_map->undo_tiles = NULL;
} }
} }
void void
image_map_abort (ImageMap image_map) image_map_abort (ImageMap *image_map)
{ {
_ImageMap *_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
image_map_clear(image_map); image_map_clear (image_map);
gimp_image_undo_thaw(_image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (image_map); g_free (image_map);
} }
guchar * guchar *
image_map_get_color_at (ImageMap image_map, image_map_get_color_at (ImageMap *image_map,
gint x, gint x,
gint y) gint y)
{ {
Tile *tile; Tile *tile;
guchar *src; guchar *src;
guchar *dest; guchar *dest;
_ImageMap *_image_map;
if (!image_map) g_return_val_if_fail (image_map != NULL, NULL);
return NULL;
_image_map = (_ImageMap *) image_map; if (x >= 0 && x < gimp_drawable_width (image_map->drawable) &&
y >= 0 && y < gimp_drawable_height (image_map->drawable))
if (x >= 0 && x < gimp_drawable_width (_image_map->drawable) &&
y >= 0 && y < gimp_drawable_height (_image_map->drawable))
{ {
/* Check if done damage to original image */ /* Check if done damage to original image */
if (!_image_map->undo_tiles) if (! image_map->undo_tiles)
return (gimp_drawable_get_color_at (_image_map->drawable, x, y)); return (gimp_drawable_get_color_at (image_map->drawable, x, y));
if (!image_map || if (! image_map ||
(!gimp_drawable_gimage (_image_map->drawable) && (! gimp_drawable_gimage (image_map->drawable) &&
gimp_drawable_is_indexed (_image_map->drawable)) || gimp_drawable_is_indexed (image_map->drawable)) ||
x < 0 || y < 0 || x < 0 || y < 0 ||
x >= tile_manager_width (_image_map->undo_tiles) || x >= tile_manager_width (image_map->undo_tiles) ||
y >= tile_manager_height (_image_map->undo_tiles)) y >= tile_manager_height (image_map->undo_tiles))
{ {
return NULL; return NULL;
} }
dest = g_new (guchar, 5); dest = g_new (guchar, 5);
tile = tile_manager_get_tile (_image_map->undo_tiles, x, y, tile = tile_manager_get_tile (image_map->undo_tiles, x, y,
TRUE, FALSE); TRUE, FALSE);
src = tile_data_pointer (tile, x % TILE_WIDTH, y % TILE_HEIGHT); src = tile_data_pointer (tile, x % TILE_WIDTH, y % TILE_HEIGHT);
gimp_image_get_color (gimp_drawable_gimage (_image_map->drawable), gimp_image_get_color (gimp_drawable_gimage (image_map->drawable),
gimp_drawable_type (_image_map->drawable), gimp_drawable_type (image_map->drawable),
dest, src); dest, src);
if (GIMP_IMAGE_TYPE_HAS_ALPHA (gimp_drawable_type (_image_map->drawable))) if (GIMP_IMAGE_TYPE_HAS_ALPHA (gimp_drawable_type (image_map->drawable)))
dest[3] = src[gimp_drawable_bytes (_image_map->drawable) - 1]; dest[3] = src[gimp_drawable_bytes (image_map->drawable) - 1];
else else
dest[3] = 255; dest[3] = 255;
if (gimp_drawable_is_indexed (_image_map->drawable))
if (gimp_drawable_is_indexed (image_map->drawable))
dest[4] = src[0]; dest[4] = src[0];
else else
dest[4] = 0; dest[4] = 0;
tile_release (tile, FALSE); tile_release (tile, FALSE);
return dest; return dest;
} }
else /* out of bounds error */ else /* out of bounds error */

View File

@ -26,17 +26,17 @@
* MUST be followed with an image_map_commit or an image_map_abort call * MUST be followed with an image_map_commit or an image_map_abort call
* The image map is no longer valid after a call to commit or abort. * The image map is no longer valid after a call to commit or abort.
*/ */
ImageMap image_map_create (GDisplay *gdisp, ImageMap * image_map_create (GDisplay *gdisp,
GimpDrawable *drawable); GimpDrawable *drawable);
void image_map_apply (ImageMap, void image_map_apply (ImageMap *image_map,
ImageMapApplyFunc, ImageMapApplyFunc apply_func,
void *); gpointer apply_data);
void image_map_commit (ImageMap); void image_map_commit (ImageMap *image_map);
void image_map_clear (ImageMap); void image_map_clear (ImageMap *image_map);
void image_map_abort (ImageMap); void image_map_abort (ImageMap *image_map);
guchar * image_map_get_color_at (ImageMap, guchar * image_map_get_color_at (ImageMap *image_map,
gint, gint x,
gint); gint y);
#endif /* __IMAGE_MAP_H__ */ #endif /* __IMAGE_MAP_H__ */

View File

@ -16,8 +16,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef __GIMPPREVIEWCACHE_H__ #ifndef __GIMP_PREVIEW_CACHE_H__
#define __GIMPPREVIEWCACHE_H__ #define __GIMP_PREVIEW_CACHE_H__
#define PREVIEW_CACHE_PRIME_WIDTH 112 #define PREVIEW_CACHE_PRIME_WIDTH 112
@ -32,4 +32,4 @@ void gimp_preview_cache_add (GSList **plist,
void gimp_preview_cache_invalidate (GSList **plist); void gimp_preview_cache_invalidate (GSList **plist);
#endif /* __GIMPPREVIEWCACHE_H__ */ #endif /* __GIMP_PREVIEW_CACHE_H__ */

View File

@ -1,325 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@gimp.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <glib.h>
#include "base/base-types.h"
#include "base/temp-buf.h"
#include "gimppreviewcache.h"
#define MAX_CACHE_PREVIEWS 5
#undef PREVIEW_CACHE_DEBUG
typedef struct _PreviewCache
{
TempBuf *preview;
gint width;
gint height;
} PreviewCache;
typedef struct _PreviewNearest
{
PreviewCache *pc;
gint width;
gint height;
} PreviewNearest;
static gint
preview_cache_compare (gconstpointer a,
gconstpointer b)
{
PreviewCache *pc1 = (PreviewCache *) a;
PreviewCache *pc2 = (PreviewCache *) b;
if (pc1->width > pc2->width && pc1->height > pc2->height)
return -1;
return 1;
}
static void
preview_cache_find_exact (gpointer data,
gpointer udata)
{
PreviewCache *pc = (PreviewCache *) data;
PreviewNearest *pNearest = (PreviewNearest *) udata;
/* g_print ("this value w,h [%d,%d]\n",pc->width,pc->height); */
/* if (pNearest->pc) */
/* g_print ("current nearest value w,h [%d,%d]\n",
pNearest->pc->width,pNearest->pc->height); */
if (pNearest->pc)
return;
if(pc->width == pNearest->width &&
pc->height == pNearest->height)
{
/* Ok we could make the preview out of this one...
* If we already have it are these bigger dimensions?
*/
pNearest->pc = pc;
return;
}
}
static void
preview_cache_find_biggest (gpointer data,
gpointer udata)
{
PreviewCache *pc = (PreviewCache *) data;
PreviewNearest *pNearest = (PreviewNearest *) udata;
/* g_print ("this value w,h [%d,%d]\n",pc->width,pc->height); */
/* if (pNearest->pc) */
/* g_print ("current nearest value w,h [%d,%d]\n",
pNearest->pc->width,pNearest->pc->height); */
if (pc->width >= pNearest->width &&
pc->height >= pNearest->height)
{
/* Ok we could make the preview out of this one...
* If we already have it are these bigger dimensions?
*/
if (pNearest->pc)
{
if (pNearest->pc->width > pc->width &&
pNearest->pc->height > pc->height)
return;
}
pNearest->pc = pc;
}
}
static void
preview_cache_remove_smallest (GSList **plist)
{
GSList *list;
PreviewCache *smallest = NULL;
/* g_print ("Removing smallest\n"); */
for (list = *plist; list; list = g_slist_next (list))
{
if (!smallest)
{
smallest = list->data;
/* g_print ("init smallest %d,%d\n",
smallest->width,smallest->height); */
}
else
{
PreviewCache *pcthis = list->data;
/* g_print ("Checking %d,%d\n",pcthis->width,pcthis->height); */
if ((smallest->height * smallest->width) >=
(pcthis->height * pcthis->width))
{
smallest = pcthis;
/* g_print ("smallest now %d,%d\n",
smallest->width,smallest->height); */
}
}
}
if (*plist && smallest)
*plist = g_slist_remove (*plist, smallest);
/* g_print ("removed %d,%d\n",smallest->width,smallest->height); */
/* g_print ("removed smallest\n"); */
}
static void
preview_cache_invalidate (gpointer data,
gpointer udata)
{
PreviewCache *pc = (PreviewCache *) data;
temp_buf_free (pc->preview);
g_free(pc);
}
static void
preview_cache_print (GSList *plist)
{
#ifdef PREVIEW_CACHE_DEBUG
GSList *list;
PreviewCache *pc;
g_print ("preview cache dump:\n");
for (list = plist; list; list = g_slist_next (list))
{
pc = (PreviewCache *) list->data;
g_print ("\tvalue w,h [%d,%d] => %p\n",
pc->width, pc->height, pc->preview);
}
#endif /* PREVIEW_CACHE_DEBUG */
}
void
gimp_preview_cache_invalidate (GSList **plist)
{
/* g_print ("gimp_preview_cache_invalidate\n"); */
preview_cache_print (*plist);
g_slist_foreach (*plist, preview_cache_invalidate, NULL);
*plist = NULL;
}
void
gimp_preview_cache_add (GSList **plist,
TempBuf *buf)
{
PreviewCache *pc;
/* g_print ("gimp_preview_cache_add %d %d\n",buf->width,buf->height); */
preview_cache_print (*plist);
if (g_slist_length (*plist) > MAX_CACHE_PREVIEWS)
{
/* Remove the smallest */
preview_cache_remove_smallest(plist);
}
pc = g_new0(PreviewCache,1);
pc->preview = buf;
pc->width = buf->width;
pc->height = buf->height;
*plist = g_slist_insert_sorted (*plist, pc, preview_cache_compare);
}
TempBuf *
gimp_preview_cache_get (GSList **plist,
gint width,
gint height)
{
PreviewNearest pn;
PreviewCache *pc;
/* g_print ("gimp_preview_cache_get %d %d\n",width,height); */
preview_cache_print (*plist);
pn.pc = NULL;
pn.width = width;
pn.height = height;
g_slist_foreach (*plist, preview_cache_find_exact, &pn);
if (pn.pc && pn.pc->preview)
{
/* g_print ("extact value w,h [%d,%d] => %p\n",
pn.pc->width,pn.pc->height,pn.pc->preview); */
return pn.pc->preview;
}
g_slist_foreach (*plist, preview_cache_find_biggest, &pn);
if (pn.pc)
{
gint pwidth;
gint pheight;
gdouble x_ratio;
gdouble y_ratio;
guchar *src_data;
guchar *dest_data;
gint loop1;
gint loop2;
/* g_print ("nearest value w,h [%d,%d] => %p\n",
pn.pc->width,pn.pc->height,pn.pc->preview); */
/* if(pn.pc->width == width && */
/* pn.pc->height == height) */
/* return pn.pc->preview; */
if (!pn.pc->preview)
{
g_error ("gimp_preview_cache_get:: Invalid cache item");
return NULL;
}
/* Make up new preview from the large one... */
pwidth = pn.pc->preview->width;
pheight = pn.pc->preview->height;
/* Now get the real one and add to cache */
/* g_print ("Must create from large preview\n"); */
pc = g_new0 (PreviewCache, 1);
pc->preview = temp_buf_new (width, height, pn.pc->preview->bytes,
0, 0, NULL);
/* preview from nearest bigger one */
if (width)
x_ratio = (gdouble) pwidth / (gdouble) width;
else
x_ratio = 0.0;
if (height)
y_ratio = (gdouble) pheight / (gdouble) height;
else
y_ratio = 0.0;
src_data = temp_buf_data(pn.pc->preview);
dest_data = temp_buf_data(pc->preview);
/* g_print ("x_ratio , y_ratio [%f,%f]\n",x_ratio,y_ratio); */
for (loop1 = 0 ; loop1 < height ; loop1++)
for (loop2 = 0 ; loop2 < width ; loop2++)
{
gint i;
guchar *src_pixel;
guchar *dest_pixel;
src_pixel = src_data +
((gint) (loop2 * x_ratio)) * pn.pc->preview->bytes +
((gint) (loop1 * y_ratio)) * pwidth * pn.pc->preview->bytes;
dest_pixel = dest_data +
(loop2 + loop1 * width) * pn.pc->preview->bytes;
for (i = 0; i < pn.pc->preview->bytes; i++)
*dest_pixel++ = *src_pixel++;
}
pc->width = width;
pc->height = height;
*plist = g_slist_insert_sorted (*plist, pc, preview_cache_compare);
/* g_print ("New preview created [%d,%d] => %p\n",
pc->width,pc->height,pc->preview); */
return pc->preview;
}
/* g_print ("gimp_preview_cache_get returning NULL\n"); */
return NULL;
}

View File

@ -1,35 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@gimp.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMPPREVIEWCACHE_H__
#define __GIMPPREVIEWCACHE_H__
#define PREVIEW_CACHE_PRIME_WIDTH 112
#define PREVIEW_CACHE_PRIME_HEIGHT 112
TempBuf * gimp_preview_cache_get (GSList **plist,
gint width,
gint height);
void gimp_preview_cache_add (GSList **plist,
TempBuf *buf);
void gimp_preview_cache_invalidate (GSList **plist);
#endif /* __GIMPPREVIEWCACHE_H__ */

View File

@ -41,8 +41,7 @@
#define WORK_DELAY 1 #define WORK_DELAY 1
/* Local structures */ struct _ImageMap
typedef struct _ImageMap
{ {
GDisplay *gdisp; GDisplay *gdisp;
GimpDrawable *drawable; GimpDrawable *drawable;
@ -53,7 +52,7 @@ typedef struct _ImageMap
void *pr; void *pr;
gint state; gint state;
gint idle; gint idle;
} _ImageMap; };
/**************************/ /**************************/
@ -62,333 +61,346 @@ typedef struct _ImageMap
static gint static gint
image_map_do (gpointer data) image_map_do (gpointer data)
{ {
_ImageMap *_image_map; ImageMap *image_map;
GimpImage *gimage; GimpImage *gimage;
PixelRegion shadowPR; PixelRegion shadowPR;
gint x, y, w, h; gint x, y, w, h;
_image_map = (_ImageMap *) data; image_map = (ImageMap *) data;
if (! (gimage = gimp_drawable_gimage ( (_image_map->drawable)))) if (! (gimage = gimp_drawable_gimage (image_map->drawable)))
{ {
_image_map->state = WAITING; image_map->state = WAITING;
return FALSE; return FALSE;
} }
/* Process the pixel regions and apply the image mapping */ /* Process the pixel regions and apply the image mapping */
(* _image_map->apply_func) (&_image_map->srcPR, &_image_map->destPR, _image_map->user_data); (* image_map->apply_func) (&image_map->srcPR,
&image_map->destPR,
image_map->user_data);
x = _image_map->destPR.x; x = image_map->destPR.x;
y = _image_map->destPR.y; y = image_map->destPR.y;
w = _image_map->destPR.w; w = image_map->destPR.w;
h = _image_map->destPR.h; h = image_map->destPR.h;
/* apply the results */ /* apply the results */
pixel_region_init (&shadowPR, gimage->shadow, x, y, w, h, FALSE); pixel_region_init (&shadowPR, gimage->shadow, x, y, w, h, FALSE);
gimp_image_apply_image (gimage, _image_map->drawable, &shadowPR, gimp_image_apply_image (gimage, image_map->drawable, &shadowPR,
FALSE, OPAQUE_OPACITY, REPLACE_MODE, NULL, x, y); FALSE, OPAQUE_OPACITY, REPLACE_MODE, NULL, x, y);
/* display the results */ /* display the results */
if (_image_map->gdisp) if (image_map->gdisp)
{ {
drawable_update ( (_image_map->drawable), x, y, w, h); drawable_update ( (image_map->drawable), x, y, w, h);
gdisplay_flush_now (_image_map->gdisp); gdisplay_flush_now (image_map->gdisp);
} }
_image_map->pr = pixel_regions_process (_image_map->pr); image_map->pr = pixel_regions_process (image_map->pr);
if (_image_map->pr == NULL) if (image_map->pr == NULL)
{ {
_image_map->state = WAITING; image_map->state = WAITING;
gdisplays_flush (); gdisplays_flush ();
return FALSE; return FALSE;
} }
else
return TRUE; return TRUE;
} }
ImageMap ImageMap *
image_map_create (GDisplay *gdisp, image_map_create (GDisplay *gdisp,
GimpDrawable *drawable) GimpDrawable *drawable)
{ {
_ImageMap *_image_map; ImageMap *image_map;
_image_map = g_new (_ImageMap, 1); g_return_val_if_fail (gdisp != NULL, NULL);
_image_map->gdisp = gdisp; g_return_val_if_fail (drawable != NULL, NULL);
_image_map->drawable = drawable; g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
_image_map->undo_tiles = NULL;
_image_map->state = WAITING;
/* Interactive tools based on image_map disable the undo stack */ image_map = g_new0 (ImageMap, 1);
/* to avert any unintented undo interaction through the UI */
gimp_image_undo_freeze(_image_map->gdisp->gimage); image_map->gdisp = gdisp;
gdisplay_set_menu_sensitivity (_image_map->gdisp); image_map->drawable = drawable;
return (ImageMap) _image_map; image_map->undo_tiles = NULL;
image_map->state = WAITING;
/* Interactive tools based on image_map disable the undo stack
* to avert any unintented undo interaction through the UI
*/
gimp_image_undo_freeze (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (image_map->gdisp);
return image_map;
} }
void void
image_map_apply (ImageMap image_map, image_map_apply (ImageMap *image_map,
ImageMapApplyFunc apply_func, ImageMapApplyFunc apply_func,
void *user_data) gpointer apply_data)
{ {
_ImageMap *_image_map; gint x1, y1;
gint x1, y1, x2, y2; gint x2, y2;
gint offset_x, offset_y; gint offset_x, offset_y;
gint width, height; gint width, height;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
_image_map->apply_func = apply_func; g_return_if_fail (apply_func != NULL);
_image_map->user_data = user_data;
image_map->apply_func = apply_func;
image_map->user_data = apply_data;
/* If we're still working, remove the timer */ /* If we're still working, remove the timer */
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
pixel_regions_process_stop (_image_map->pr); pixel_regions_process_stop (image_map->pr);
_image_map->pr = NULL;
image_map->pr = NULL;
} }
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* The application should occur only within selection bounds */ /* The application should occur only within selection bounds */
gimp_drawable_mask_bounds (_image_map->drawable, &x1, &y1, &x2, &y2); gimp_drawable_mask_bounds (image_map->drawable, &x1, &y1, &x2, &y2);
/* If undo tiles don't exist, or change size, (re)allocate */ /* If undo tiles don't exist, or change size, (re)allocate */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
tile_manager_get_offsets (_image_map->undo_tiles, &offset_x, &offset_y); tile_manager_get_offsets (image_map->undo_tiles, &offset_x, &offset_y);
width = tile_manager_width (_image_map->undo_tiles); width = tile_manager_width (image_map->undo_tiles);
height = tile_manager_height (_image_map->undo_tiles); height = tile_manager_height (image_map->undo_tiles);
} }
else else
{ {
offset_x = offset_y = width = height = 0; offset_x = offset_y = width = height = 0;
} }
if (!_image_map->undo_tiles || if (! image_map->undo_tiles ||
offset_x != x1 || offset_y != y1 || offset_x != x1 || offset_y != y1 ||
width != (x2 - x1) || height != (y2 - y1)) width != (x2 - x1) || height != (y2 - y1))
{ {
/* If either the extents changed or the tiles don't exist, allocate new */ /* If either the extents changed or the tiles don't exist,
if (!_image_map->undo_tiles || * allocate new
*/
if (! image_map->undo_tiles ||
width != (x2 - x1) || height != (y2 - y1)) width != (x2 - x1) || height != (y2 - y1))
{ {
/* Destroy old tiles--If they exist */ /* Destroy old tiles--If they exist */
if (_image_map->undo_tiles != NULL) if (image_map->undo_tiles != NULL)
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
/* Allocate new tiles */ /* Allocate new tiles */
_image_map->undo_tiles = image_map->undo_tiles =
tile_manager_new ((x2 - x1), (y2 - y1), tile_manager_new ((x2 - x1), (y2 - y1),
gimp_drawable_bytes (_image_map->drawable)); gimp_drawable_bytes (image_map->drawable));
} }
/* Copy from the image to the new tiles */ /* Copy from the image to the new tiles */
pixel_region_init (&_image_map->srcPR, pixel_region_init (&image_map->srcPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
x1, y1, (x2 - x1), (y2 - y1), FALSE); x1, y1, (x2 - x1), (y2 - y1), FALSE);
pixel_region_init (&_image_map->destPR, _image_map->undo_tiles, pixel_region_init (&image_map->destPR, image_map->undo_tiles,
0, 0, (x2 - x1), (y2 - y1), TRUE); 0, 0, (x2 - x1), (y2 - y1), TRUE);
copy_region (&_image_map->srcPR, &_image_map->destPR); copy_region (&image_map->srcPR, &image_map->destPR);
/* Set the offsets */ /* Set the offsets */
tile_manager_set_offsets (_image_map->undo_tiles, x1, y1); tile_manager_set_offsets (image_map->undo_tiles, x1, y1);
} }
else /* _image_map->undo_tiles exist AND drawable dimensions have not changed... */ else /* image_map->undo_tiles exist AND drawable dimensions have not changed... */
{ {
/* Reset to initial drawable conditions. */ /* Reset to initial drawable conditions. */
/* Copy from the backup undo tiles to the drawable */ /* Copy from the backup undo tiles to the drawable */
pixel_region_init (&_image_map->srcPR, _image_map->undo_tiles, pixel_region_init (&image_map->srcPR, image_map->undo_tiles,
0, 0, width, height, FALSE); 0, 0, width, height, FALSE);
pixel_region_init (&_image_map->destPR, pixel_region_init (&image_map->destPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
offset_x, offset_y, width, height, TRUE); offset_x, offset_y, width, height, TRUE);
copy_region (&_image_map->srcPR, &_image_map->destPR); copy_region (&image_map->srcPR, &image_map->destPR);
} }
/* Configure the src from the drawable data */ /* Configure the src from the drawable data */
pixel_region_init (&_image_map->srcPR, _image_map->undo_tiles, pixel_region_init (&image_map->srcPR, image_map->undo_tiles,
0, 0, (x2 - x1), (y2 - y1), FALSE); 0, 0, (x2 - x1), (y2 - y1), FALSE);
/* Configure the dest as the shadow buffer */ /* Configure the dest as the shadow buffer */
pixel_region_init (&_image_map->destPR, pixel_region_init (&image_map->destPR,
gimp_drawable_shadow (_image_map->drawable), gimp_drawable_shadow (image_map->drawable),
x1, y1, (x2 - x1), (y2 - y1), TRUE); x1, y1, (x2 - x1), (y2 - y1), TRUE);
/* Apply the image transformation to the pixels */ /* Apply the image transformation to the pixels */
_image_map->pr = pixel_regions_register (2, &_image_map->srcPR, &_image_map->destPR); image_map->pr = pixel_regions_register (2, &image_map->srcPR, &image_map->destPR);
/* Start the intermittant work procedure */ /* Start the intermittant work procedure */
_image_map->state = WORKING; image_map->state = WORKING;
_image_map->idle = gtk_idle_add (image_map_do, image_map); image_map->idle = gtk_idle_add (image_map_do, image_map);
} }
void void
image_map_commit (ImageMap image_map) image_map_commit (ImageMap *image_map)
{ {
_ImageMap *_image_map;
gint x1, y1, x2, y2; gint x1, y1, x2, y2;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
/* Finish the changes */ /* Finish the changes */
while (image_map_do (image_map)) ; while (image_map_do (image_map)) ;
} }
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* Interactive phase ends: we can commit an undo frame now */ /* Interactive phase ends: we can commit an undo frame now */
gimp_image_undo_thaw(_image_map->gdisp->gimage); gimp_image_undo_thaw(image_map->gdisp->gimage);
/* Register an undo step */ /* Register an undo step */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
tile_manager_get_offsets (_image_map->undo_tiles, &x1, &y1); tile_manager_get_offsets (image_map->undo_tiles, &x1, &y1);
x2 = x1 + tile_manager_width (_image_map->undo_tiles); x2 = x1 + tile_manager_width (image_map->undo_tiles);
y2 = y1 + tile_manager_height (_image_map->undo_tiles); y2 = y1 + tile_manager_height (image_map->undo_tiles);
drawable_apply_image (_image_map->drawable, drawable_apply_image (image_map->drawable,
x1, y1, x2, y2, _image_map->undo_tiles, FALSE); x1, y1, x2, y2, image_map->undo_tiles, FALSE);
} }
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (_image_map); g_free (image_map);
} }
void void
image_map_clear (ImageMap image_map) image_map_clear (ImageMap *image_map)
{ {
_ImageMap *_image_map;
PixelRegion srcPR, destPR; PixelRegion srcPR, destPR;
_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
if (_image_map->state == WORKING) if (image_map->state == WORKING)
{ {
gtk_idle_remove (_image_map->idle); gtk_idle_remove (image_map->idle);
pixel_regions_process_stop (_image_map->pr); pixel_regions_process_stop (image_map->pr);
_image_map->pr = NULL; image_map->pr = NULL;
} }
_image_map->state = WAITING; image_map->state = WAITING;
/* Make sure the drawable is still valid */ /* Make sure the drawable is still valid */
if (! gimp_drawable_gimage (_image_map->drawable)) if (! gimp_drawable_gimage (image_map->drawable))
return; return;
/* restore the original image */ /* restore the original image */
if (_image_map->undo_tiles) if (image_map->undo_tiles)
{ {
gint offset_x; gint offset_x;
gint offset_y; gint offset_y;
gint width; gint width;
gint height; gint height;
tile_manager_get_offsets (_image_map->undo_tiles, &offset_x, &offset_y); tile_manager_get_offsets (image_map->undo_tiles, &offset_x, &offset_y);
width = tile_manager_width (_image_map->undo_tiles); width = tile_manager_width (image_map->undo_tiles);
height = tile_manager_height (_image_map->undo_tiles), height = tile_manager_height (image_map->undo_tiles),
/* Copy from the drawable to the tiles */ /* Copy from the drawable to the tiles */
pixel_region_init (&srcPR, _image_map->undo_tiles, pixel_region_init (&srcPR, image_map->undo_tiles,
0, 0, width, height, FALSE); 0, 0, width, height, FALSE);
pixel_region_init (&destPR, pixel_region_init (&destPR,
gimp_drawable_data (_image_map->drawable), gimp_drawable_data (image_map->drawable),
offset_x, offset_y, width, height, TRUE); offset_x, offset_y, width, height, TRUE);
/* if the user has changed the image depth get out quickly */ /* if the user has changed the image depth get out quickly */
if (destPR.bytes != srcPR.bytes) if (destPR.bytes != srcPR.bytes)
{ {
g_message ("image depth change, unable to restore original image"); g_message ("image depth change, unable to restore original image");
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
gimp_image_undo_thaw (_image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (_image_map); g_free (image_map);
return; return;
} }
copy_region (&srcPR, &destPR); copy_region (&srcPR, &destPR);
/* Update the area */ /* Update the area */
drawable_update (_image_map->drawable, offset_x, offset_y, width, height); drawable_update (image_map->drawable, offset_x, offset_y, width, height);
/* Free the undo_tiles tile manager */ /* Free the undo_tiles tile manager */
tile_manager_destroy (_image_map->undo_tiles); tile_manager_destroy (image_map->undo_tiles);
_image_map->undo_tiles = NULL; image_map->undo_tiles = NULL;
} }
} }
void void
image_map_abort (ImageMap image_map) image_map_abort (ImageMap *image_map)
{ {
_ImageMap *_image_map = (_ImageMap *) image_map; g_return_if_fail (image_map != NULL);
image_map_clear(image_map); image_map_clear (image_map);
gimp_image_undo_thaw(_image_map->gdisp->gimage); gimp_image_undo_thaw (image_map->gdisp->gimage);
gdisplay_set_menu_sensitivity (_image_map->gdisp); gdisplay_set_menu_sensitivity (image_map->gdisp);
g_free (image_map); g_free (image_map);
} }
guchar * guchar *
image_map_get_color_at (ImageMap image_map, image_map_get_color_at (ImageMap *image_map,
gint x, gint x,
gint y) gint y)
{ {
Tile *tile; Tile *tile;
guchar *src; guchar *src;
guchar *dest; guchar *dest;
_ImageMap *_image_map;
if (!image_map) g_return_val_if_fail (image_map != NULL, NULL);
return NULL;
_image_map = (_ImageMap *) image_map; if (x >= 0 && x < gimp_drawable_width (image_map->drawable) &&
y >= 0 && y < gimp_drawable_height (image_map->drawable))
if (x >= 0 && x < gimp_drawable_width (_image_map->drawable) &&
y >= 0 && y < gimp_drawable_height (_image_map->drawable))
{ {
/* Check if done damage to original image */ /* Check if done damage to original image */
if (!_image_map->undo_tiles) if (! image_map->undo_tiles)
return (gimp_drawable_get_color_at (_image_map->drawable, x, y)); return (gimp_drawable_get_color_at (image_map->drawable, x, y));
if (!image_map || if (! image_map ||
(!gimp_drawable_gimage (_image_map->drawable) && (! gimp_drawable_gimage (image_map->drawable) &&
gimp_drawable_is_indexed (_image_map->drawable)) || gimp_drawable_is_indexed (image_map->drawable)) ||
x < 0 || y < 0 || x < 0 || y < 0 ||
x >= tile_manager_width (_image_map->undo_tiles) || x >= tile_manager_width (image_map->undo_tiles) ||
y >= tile_manager_height (_image_map->undo_tiles)) y >= tile_manager_height (image_map->undo_tiles))
{ {
return NULL; return NULL;
} }
dest = g_new (guchar, 5); dest = g_new (guchar, 5);
tile = tile_manager_get_tile (_image_map->undo_tiles, x, y, tile = tile_manager_get_tile (image_map->undo_tiles, x, y,
TRUE, FALSE); TRUE, FALSE);
src = tile_data_pointer (tile, x % TILE_WIDTH, y % TILE_HEIGHT); src = tile_data_pointer (tile, x % TILE_WIDTH, y % TILE_HEIGHT);
gimp_image_get_color (gimp_drawable_gimage (_image_map->drawable), gimp_image_get_color (gimp_drawable_gimage (image_map->drawable),
gimp_drawable_type (_image_map->drawable), gimp_drawable_type (image_map->drawable),
dest, src); dest, src);
if (GIMP_IMAGE_TYPE_HAS_ALPHA (gimp_drawable_type (_image_map->drawable))) if (GIMP_IMAGE_TYPE_HAS_ALPHA (gimp_drawable_type (image_map->drawable)))
dest[3] = src[gimp_drawable_bytes (_image_map->drawable) - 1]; dest[3] = src[gimp_drawable_bytes (image_map->drawable) - 1];
else else
dest[3] = 255; dest[3] = 255;
if (gimp_drawable_is_indexed (_image_map->drawable))
if (gimp_drawable_is_indexed (image_map->drawable))
dest[4] = src[0]; dest[4] = src[0];
else else
dest[4] = 0; dest[4] = 0;
tile_release (tile, FALSE); tile_release (tile, FALSE);
return dest; return dest;
} }
else /* out of bounds error */ else /* out of bounds error */

View File

@ -26,17 +26,17 @@
* MUST be followed with an image_map_commit or an image_map_abort call * MUST be followed with an image_map_commit or an image_map_abort call
* The image map is no longer valid after a call to commit or abort. * The image map is no longer valid after a call to commit or abort.
*/ */
ImageMap image_map_create (GDisplay *gdisp, ImageMap * image_map_create (GDisplay *gdisp,
GimpDrawable *drawable); GimpDrawable *drawable);
void image_map_apply (ImageMap, void image_map_apply (ImageMap *image_map,
ImageMapApplyFunc, ImageMapApplyFunc apply_func,
void *); gpointer apply_data);
void image_map_commit (ImageMap); void image_map_commit (ImageMap *image_map);
void image_map_clear (ImageMap); void image_map_clear (ImageMap *image_map);
void image_map_abort (ImageMap); void image_map_abort (ImageMap *image_map);
guchar * image_map_get_color_at (ImageMap, guchar * image_map_get_color_at (ImageMap *image_map,
gint, gint x,
gint); gint y);
#endif /* __IMAGE_MAP_H__ */ #endif /* __IMAGE_MAP_H__ */

View File

@ -38,7 +38,7 @@ struct _ColorBalanceDialog
GtkAdjustment *yellow_blue_data; GtkAdjustment *yellow_blue_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble cyan_red[3]; gdouble cyan_red[3];
gdouble magenta_green[3]; gdouble magenta_green[3];

View File

@ -38,7 +38,7 @@ struct _CurvesDialog
GtkWidget *curve_type_menu; GtkWidget *curve_type_menu;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint channel; gint channel;

View File

@ -38,7 +38,7 @@ struct _ColorBalanceDialog
GtkAdjustment *yellow_blue_data; GtkAdjustment *yellow_blue_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble cyan_red[3]; gdouble cyan_red[3];
gdouble magenta_green[3]; gdouble magenta_green[3];

View File

@ -38,7 +38,7 @@ struct _CurvesDialog
GtkWidget *curve_type_menu; GtkWidget *curve_type_menu;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint channel; gint channel;

View File

@ -47,7 +47,7 @@ struct _HistogramToolDialog
gdouble percentile; gdouble percentile;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint channel; gint channel;
gint color; gint color;
}; };

View File

@ -44,7 +44,7 @@ struct _HueSaturationDialog
GtkAdjustment *saturation_data; GtkAdjustment *saturation_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble hue[7]; gdouble hue[7];
gdouble lightness[7]; gdouble lightness[7];

View File

@ -33,7 +33,7 @@ struct _ThresholdDialog
GimpHistogram *hist; GimpHistogram *hist;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint low_threshold; gint low_threshold;

View File

@ -506,34 +506,6 @@ STUB(histogram_tool_histogram_range)
ToolInfo tool_info[] = ToolInfo tool_info[] =
{ {
/* Non-toolbox tools */ /* Non-toolbox tools */
{
NULL,
N_("By Color Select"),
N_("/Select/By Color..."),
NULL,
(char **) by_color_select_bits,
NULL,
NULL,
N_("Select regions by color"),
"tools/by_color_select.html",
BY_COLOR_SELECT,
tools_new_by_color_select,
tools_free_by_color_select,
by_color_select_initialize,
NULL,
NULL,
{
NULL, NULL,
0, 0,
0, 0, NULL, NULL, NULL
},
{
NULL, NULL,
0, 0,
0, 0, NULL, NULL, NULL
}
},
{ {
NULL, NULL,
N_("Color Balance"), N_("Color Balance"),

View File

@ -47,7 +47,7 @@ struct _HistogramToolDialog
gdouble percentile; gdouble percentile;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint channel; gint channel;
gint color; gint color;
}; };

View File

@ -44,7 +44,7 @@ struct _HueSaturationDialog
GtkAdjustment *saturation_data; GtkAdjustment *saturation_data;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gdouble hue[7]; gdouble hue[7];
gdouble lightness[7]; gdouble lightness[7];

View File

@ -33,7 +33,7 @@ struct _ThresholdDialog
GimpHistogram *hist; GimpHistogram *hist;
GimpDrawable *drawable; GimpDrawable *drawable;
ImageMap image_map; ImageMap *image_map;
gint color; gint color;
gint low_threshold; gint low_threshold;

518
config.guess vendored
View File

@ -1,8 +1,10 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
#
timestamp='2001-04-20'
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by # under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or # the Free Software Foundation; either version 2 of the License, or
@ -30,26 +32,86 @@
# exits with 0. Otherwise, it exits with 1. # exits with 0. Otherwise, it exits with 1.
# #
# The plan is that this can be called by configure scripts if you # The plan is that this can be called by configure scripts if you
# don't specify an explicit system type (host/target name). # don't specify an explicit build system type.
#
# Only a few systems have been added to this list; please add others
# (but try to keep the structure clean).
#
# Use $HOST_CC if defined. $CC may point to a cross-compiler me=`echo "$0" | sed -e 's,.*/,,'`
if test x"$CC_FOR_BUILD" = x; then
if test x"$HOST_CC" != x; then usage="\
CC_FOR_BUILD="$HOST_CC" Usage: $0 [OPTION]
else
if test x"$CC" != x; then Output the configuration name of the system \`$me' is run on.
CC_FOR_BUILD="$CC"
else Operation modes:
CC_FOR_BUILD=cc -h, --help print this help, then exit
fi -t, --time-stamp print date of last modification, then exit
fi -v, --version print version number, then exit
Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
echo "$timestamp" ; exit 0 ;;
--version | -v )
echo "$version" ; exit 0 ;;
--help | --h* | -h )
echo "$usage"; exit 0 ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
break ;;
-* )
echo "$me: invalid option $1$help" >&2
exit 1 ;;
* )
break ;;
esac
done
if test $# != 0; then
echo "$me: too many arguments$help" >&2
exit 1
fi fi
dummy=dummy-$$
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script.
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
# use `HOST_CC' if defined, but it is deprecated.
case $CC_FOR_BUILD,$HOST_CC,$CC in
,,) echo "int dummy(){}" > $dummy.c
for c in cc gcc c89 ; do
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
if test $? = 0 ; then
CC_FOR_BUILD="$c"; break
fi
done
rm -f $dummy.c $dummy.o $dummy.rel
if test x"$CC_FOR_BUILD" = x ; then
CC_FOR_BUILD=no_compiler_found
fi
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
esac
# This is needed to find uname on a Pyramid OSx when run in the BSD universe. # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 8/24/94.) # (ghazi@noc.rutgers.edu 8/24/94.)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
@ -61,9 +123,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
dummy=dummy-$$
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive. # Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@ -77,7 +136,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# object file format. # object file format.
# Determine the machine/vendor (is the vendor relevant). # Determine the machine/vendor (is the vendor relevant).
case "${UNAME_MACHINE}" in case "${UNAME_MACHINE}" in
amiga) machine=m68k-cbm ;; amiga) machine=m68k-unknown ;;
arm32) machine=arm-unknown ;; arm32) machine=arm-unknown ;;
atari*) machine=m68k-atari ;; atari*) machine=m68k-atari ;;
sun3*) machine=m68k-sun ;; sun3*) machine=m68k-sun ;;
@ -87,7 +146,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
ibmrt|romp-ibm) machine=romp-ibm ;; ibmrt|romp-ibm) machine=romp-ibm ;;
*) machine=${UNAME_MACHINE}-unknown ;; *) machine=${UNAME_MACHINE}-unknown ;;
esac esac
# The Operating System including object format. # The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE}" in
i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep __ELF__ >/dev/null | grep __ELF__ >/dev/null
then then
@ -97,6 +159,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
else else
os=netbsdelf os=netbsdelf
fi fi
;;
*)
os=netbsd
;;
esac
# The OS release # The OS release
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
@ -173,7 +240,7 @@ EOF
echo alpha-dec-winnt3.5 echo alpha-dec-winnt3.5
exit 0 ;; exit 0 ;;
Amiga*:UNIX_System_V:4.0:*) Amiga*:UNIX_System_V:4.0:*)
echo m68k-cbm-sysv4 echo m68k-unknown-sysv4
exit 0;; exit 0;;
amiga:OpenBSD:*:*) amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
@ -205,7 +272,7 @@ EOF
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE} echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;; exit 0;;
SR2?01:HI-UX/MPP:*:*) SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp echo hppa1.1-hitachi-hiuxmpp
exit 0;; exit 0;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@ -341,10 +408,13 @@ EOF
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy \ $CC_FOR_BUILD $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm $dummy.c $dummy && exit 0 && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE} echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
Motorola:PowerMAX_OS:*:*)
echo powerpc-motorola-powermax
exit 0 ;;
Night_Hawk:Power_UNIX:*:*) Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix echo powerpc-harris-powerunix
exit 0 ;; exit 0 ;;
@ -392,9 +462,17 @@ EOF
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i?86:AIX:*:*) i*86:AIX:*:*)
echo i386-ibm-aix echo i386-ibm-aix
exit 0 ;; exit 0 ;;
ia64:AIX:*:*)
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
exit 0 ;;
*:AIX:2:3) *:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
sed 's/^ //' << EOF >$dummy.c sed 's/^ //' << EOF >$dummy.c
@ -408,7 +486,7 @@ EOF
exit(0); exit(0);
} }
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5 echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
@ -417,9 +495,9 @@ EOF
echo rs6000-ibm-aix3.2 echo rs6000-ibm-aix3.2
fi fi
exit 0 ;; exit 0 ;;
*:AIX:*:4) *:AIX:*:[45])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000 IBM_ARCH=rs6000
else else
IBM_ARCH=powerpc IBM_ARCH=powerpc
@ -427,7 +505,7 @@ EOF
if [ -x /usr/bin/oslevel ] ; then if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel` IBM_REV=`/usr/bin/oslevel`
else else
IBM_REV=4.${UNAME_RELEASE} IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV} echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;; exit 0 ;;
@ -453,10 +531,28 @@ EOF
echo m68k-hp-bsd4.4 echo m68k-hp-bsd4.4
exit 0 ;; exit 0 ;;
9000/[34678]??:HP-UX:*:*) 9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;; 9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;; 9000/[34]?? ) HP_ARCH=m68k ;;
9000/[678][0-9][0-9]) 9000/[678][0-9][0-9])
case "${HPUX_REV}" in
11.[0-9][0-9])
if [ -x /usr/bin/getconf ]; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
case "${sc_cpu_version}" in
523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
case "${sc_kernel_bits}" in
32) HP_ARCH="hppa2.0n" ;;
64) HP_ARCH="hppa2.0w" ;;
esac ;;
esac
fi ;;
esac
if [ "${HP_ARCH}" = "" ]; then
sed 's/^ //' << EOF >$dummy.c sed 's/^ //' << EOF >$dummy.c
#define _HPUX_SOURCE #define _HPUX_SOURCE
@ -491,11 +587,16 @@ EOF
} }
EOF EOF
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
fi ;;
esac esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV} echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;; exit 0 ;;
ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ia64-hp-hpux${HPUX_REV}
exit 0 ;;
3050*:HI-UX:*:*) 3050*:HI-UX:*:*)
sed 's/^ //' << EOF >$dummy.c sed 's/^ //' << EOF >$dummy.c
#include <unistd.h> #include <unistd.h>
@ -522,7 +623,7 @@ EOF
exit (0); exit (0);
} }
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2 echo unknown-hitachi-hiuxwe2
exit 0 ;; exit 0 ;;
@ -541,7 +642,7 @@ EOF
hp8??:OSF1:*:*) hp8??:OSF1:*:*)
echo hppa1.0-hp-osf echo hppa1.0-hp-osf
exit 0 ;; exit 0 ;;
i?86:OSF1:*:*) i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk echo ${UNAME_MACHINE}-unknown-osf1mk
else else
@ -586,27 +687,28 @@ EOF
CRAY*TS:*:*:*) CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;; exit 0 ;;
CRAY*T3E:*:*:*) CRAY*T3D:*:*:*)
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;; exit 0 ;;
CRAY*T3E:*:*:*)
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*SV1:*:*:*) CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;; exit 0 ;;
CRAY-2:*:*:*) CRAY-2:*:*:*)
echo cray2-cray-unicos echo cray2-cray-unicos
exit 0 ;; exit 0 ;;
F300:UNIX_System_V:*:*) F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
F301:UNIX_System_V:*:*)
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
exit 0 ;; exit 0 ;;
hp300:OpenBSD:*:*) hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
sparc*:BSD/OS:*:*) sparc*:BSD/OS:*:*)
@ -627,6 +729,9 @@ EOF
i*:MINGW*:*) i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32 echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;; exit 0 ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*) i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem? # How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@ -645,56 +750,39 @@ EOF
*:GNU:*:*) *:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;; exit 0 ;;
*:Linux:*:*) i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
# The BFD linker knows what the default object file format is, so exit 0 ;;
# first see if it will tell us. cd to the root directory to prevent arm*:Linux:*:*)
# problems with other programs or directories called `ld' in the path. echo ${UNAME_MACHINE}-unknown-linux-gnu
ld_help_string=`cd /; ld --help 2>&1` exit 0 ;;
ld_supported_emulations=`echo $ld_help_string \ ia64:Linux:*:*)
| sed -ne '/supported emulations:/!d echo ${UNAME_MACHINE}-unknown-linux
s/[ ][ ]*/ /g exit 0 ;;
s/.*supported emulations: *// m68*:Linux:*:*)
s/ .*// echo ${UNAME_MACHINE}-unknown-linux-gnu
p'` exit 0 ;;
case "$ld_supported_emulations" in mips:Linux:*:*)
*ia64) cat >$dummy.c <<EOF
echo "${UNAME_MACHINE}-unknown-linux" #ifdef __cplusplus
exit 0 #include <stdio.h> /* for printf() prototype */
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#ifdef __MIPSEB__
printf ("%s-unknown-linux-gnu\n", argv[1]);
#endif
#ifdef __MIPSEL__
printf ("%sel-unknown-linux-gnu\n", argv[1]);
#endif
return 0;
}
EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
;; ;;
i?86linux) ppc:Linux:*:*)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
exit 0
;;
elf_i?86)
echo "${UNAME_MACHINE}-pc-linux"
exit 0
;;
i?86coff)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
exit 0
;;
sparclinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
armlinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
elf32arm*)
echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
exit 0
;;
armelf_linux*)
echo "${UNAME_MACHINE}-unknown-linux-gnu"
exit 0
;;
m68klinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
elf32ppc | elf32ppclinux)
# Determine Lib Version # Determine Lib Version
cat >$dummy.c <<EOF cat >$dummy.c <<EOF
#include <features.h> #include <features.h>
@ -709,7 +797,7 @@ main(argc, argv)
#if defined(__GLIBC__) #if defined(__GLIBC__)
printf("%s %s\n", __libc_version, __libc_release); printf("%s %s\n", __libc_version, __libc_release);
#else #else
printf("unkown\n"); printf("unknown\n");
#endif #endif
return 0; return 0;
} }
@ -718,22 +806,16 @@ EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then
./$dummy | grep 1\.99 > /dev/null ./$dummy | grep 1\.99 > /dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then LIBC="libc1" ; fi
LIBC="libc1"
fi
fi fi
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
echo powerpc-unknown-linux-gnu${LIBC} echo powerpc-unknown-linux-gnu${LIBC}
exit 0 exit 0 ;;
;; alpha:Linux:*:*)
esac
if test "${UNAME_MACHINE}" = "alpha" ; then
cat <<EOF >$dummy.s cat <<EOF >$dummy.s
.data .data
\$Lformat: \$Lformat:
.byte 37,100,45,37,120,10,0 # "%d-%x\n" .byte 37,100,45,37,120,10,0 # "%d-%x\n"
.text .text
.globl main .globl main
.align 4 .align 4
@ -758,26 +840,13 @@ EOF
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then
case `./$dummy` in case `./$dummy` in
0-0) 0-0) UNAME_MACHINE="alpha" ;;
UNAME_MACHINE="alpha" 1-0) UNAME_MACHINE="alphaev5" ;;
;; 1-1) UNAME_MACHINE="alphaev56" ;;
1-0) 1-101) UNAME_MACHINE="alphapca56" ;;
UNAME_MACHINE="alphaev5" 2-303) UNAME_MACHINE="alphaev6" ;;
;; 2-307) UNAME_MACHINE="alphaev67" ;;
1-1)
UNAME_MACHINE="alphaev56"
;;
1-101)
UNAME_MACHINE="alphapca56"
;;
2-303)
UNAME_MACHINE="alphaev6"
;;
2-307)
UNAME_MACHINE="alphaev67"
;;
esac esac
objdump --private-headers $dummy | \ objdump --private-headers $dummy | \
grep ld.so.1 > /dev/null grep ld.so.1 > /dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then
@ -785,39 +854,62 @@ EOF
fi fi
fi fi
rm -f $dummy.s $dummy rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
elif test "${UNAME_MACHINE}" = "mips" ; then exit 0 ;;
cat >$dummy.c <<EOF parisc:Linux:*:* | hppa:Linux:*:*)
#ifdef __cplusplus # Look for CPU level
#include <stdio.h> /* for printf() prototype */ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
int main (int argc, char *argv[]) { PA7*) echo hppa1.1-unknown-linux-gnu ;;
#else PA8*) echo hppa2.0-unknown-linux-gnu ;;
int main (argc, argv) int argc; char *argv[]; { *) echo hppa-unknown-linux-gnu ;;
#endif esac
#ifdef __MIPSEB__ exit 0 ;;
printf ("%s-unknown-linux-gnu\n", argv[1]); parisc64:Linux:*:* | hppa64:Linux:*:*)
#endif echo hppa64-unknown-linux-gnu
#ifdef __MIPSEL__ exit 0 ;;
printf ("%sel-unknown-linux-gnu\n", argv[1]); s390:Linux:*:* | s390x:Linux:*:*)
#endif echo ${UNAME_MACHINE}-ibm-linux
return 0; exit 0 ;;
} sh*:Linux:*:*)
EOF echo ${UNAME_MACHINE}-unknown-linux-gnu
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 exit 0 ;;
rm -f $dummy.c $dummy sparc:Linux:*:* | sparc64:Linux:*:*)
elif test "${UNAME_MACHINE}" = "s390"; then echo ${UNAME_MACHINE}-unknown-linux-gnu
echo s390-ibm-linux && exit 0 exit 0 ;;
else x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
exit 0 ;;
i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
ld_supported_emulations=`cd /; ld --help 2>&1 \
| sed -ne '/supported emulations:/!d
s/[ ][ ]*/ /g
s/.*supported emulations: *//
s/ .*//
p'`
case "$ld_supported_emulations" in
i*86linux)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
exit 0
;;
elf_i*86)
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
;;
i*86coff)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
exit 0
;;
esac
# Either a pre-BFD a.out linker (linux-gnuoldld) # Either a pre-BFD a.out linker (linux-gnuoldld)
# or one that does not give us useful --help. # or one that does not give us useful --help.
# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
# If ld does not provide *any* "supported emulations:" # If ld does not provide *any* "supported emulations:"
# that means it is gnuoldld. # that means it is gnuoldld.
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
case "${UNAME_MACHINE}" in case "${UNAME_MACHINE}" in
i?86) i*86)
VENDOR=pc; VENDOR=pc;
;; ;;
*) *)
@ -849,15 +941,16 @@ EOF
return 0; return 0;
} }
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
fi ;; test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename. # are messed up and put the nodename in both sysname and nodename.
i?86:DYNIX/ptx:4*:*) i*86:DYNIX/ptx:4*:*)
echo i386-sequent-sysv4 echo i386-sequent-sysv4
exit 0 ;; exit 0 ;;
i?86:UNIX_SV:4.2MP:2.*) i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version # Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2... # number series starting with 2...
# I am not positive that other SVR4 systems won't match this, # I am not positive that other SVR4 systems won't match this,
@ -865,7 +958,7 @@ EOF
# Use sysv4.2uw... so that sysv4* matches it. # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;; exit 0 ;;
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@ -873,7 +966,7 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi fi
exit 0 ;; exit 0 ;;
i?86:*:5:7*) i*86:*:5:7*)
# Fixed at (any) Pentium or better # Fixed at (any) Pentium or better
UNAME_MACHINE=i586 UNAME_MACHINE=i586
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
@ -882,7 +975,7 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi fi
exit 0 ;; exit 0 ;;
i?86:*:3.2:*) i*86:*:3.2:*)
if test -f /usr/options/cb.name; then if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
@ -900,7 +993,7 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv32 echo ${UNAME_MACHINE}-pc-sysv32
fi fi
exit 0 ;; exit 0 ;;
i?86:*DOS:*:*) i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit 0 ;; exit 0 ;;
pc:*:*:*) pc:*:*:*)
@ -928,7 +1021,7 @@ EOF
exit 0 ;; exit 0 ;;
M68*:*:R3V[567]*:*) M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
OS_REL='' OS_REL=''
test -r /etc/.relid \ test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@ -939,21 +1032,24 @@ EOF
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;; && echo i486-ncr-sysv4 && exit 0 ;;
m68*:LynxOS:2.*:*) m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE} echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
mc68030:UNIX_System_V:4.*:*) mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4 echo m68k-atari-sysv4
exit 0 ;; exit 0 ;;
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
echo i386-unknown-lynxos${UNAME_RELEASE} echo i386-unknown-lynxos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
TSUNAMI:LynxOS:2.*:*) TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE} echo sparc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE} echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
SM[BE]S:UNIX_SV:*:*) SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE} echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
@ -987,7 +1083,7 @@ EOF
mc68*:A/UX:*:*) mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE} echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
news*:NEWS-OS:*:6*) news*:NEWS-OS:6*:*)
echo mips-sony-newsos6 echo mips-sony-newsos6
exit 0 ;; exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
@ -1030,15 +1126,52 @@ EOF
*:QNX:*:4*) *:QNX:*:4*)
echo i386-pc-qnx echo i386-pc-qnx
exit 0 ;; exit 0 ;;
NSR-W:NONSTOP_KERNEL:*:*) NSR-[KW]:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE} echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
*:NonStop-UX:*:*)
echo mips-compaq-nonstopux
exit 0 ;;
BS2000:POSIX*:*:*) BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv echo bs2000-siemens-sysv
exit 0 ;; exit 0 ;;
DS/*:UNIX_System_V:*:*) DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
if test "$cputype" = "386"; then
UNAME_MACHINE=i386
else
UNAME_MACHINE="$cputype"
fi
echo ${UNAME_MACHINE}-unknown-plan9
exit 0 ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
echo ${UNAME_MACHINE}-pc-os2-emx
exit 0 ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
exit 0 ;;
*:TENEX:*:*)
echo pdp10-unknown-tenex
exit 0 ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
echo pdp10-dec-tops20
exit 0 ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
echo pdp10-xkl-tops20
exit 0 ;;
*:TOPS-20:*:*)
echo pdp10-unknown-tops20
exit 0 ;;
*:ITS:*:*)
echo pdp10-unknown-its
exit 0 ;;
esac esac
#echo '(No uname command or uname output not recognized.)' 1>&2 #echo '(No uname command or uname output not recognized.)' 1>&2
@ -1130,11 +1263,24 @@ main ()
#endif #endif
#if defined (vax) #if defined (vax)
#if !defined (ultrix) # if !defined (ultrix)
# include <sys/param.h>
# if defined (BSD)
# if BSD == 43
printf ("vax-dec-bsd4.3\n"); exit (0);
# else
# if BSD == 199006
printf ("vax-dec-bsd4.3reno\n"); exit (0);
# else
printf ("vax-dec-bsd\n"); exit (0); printf ("vax-dec-bsd\n"); exit (0);
#else # endif
# endif
# else
printf ("vax-dec-bsd\n"); exit (0);
# endif
# else
printf ("vax-dec-ultrix\n"); exit (0); printf ("vax-dec-ultrix\n"); exit (0);
#endif # endif
#endif #endif
#if defined (alliant) && defined (i860) #if defined (alliant) && defined (i860)
@ -1145,7 +1291,7 @@ main ()
} }
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
# Apollos put the system type in the environment. # Apollos put the system type in the environment.
@ -1178,6 +1324,48 @@ then
esac esac
fi fi
#echo '(Unable to guess system type)' 1>&2 cat >&2 <<EOF
$0: unable to guess system type
This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
ftp://ftp.gnu.org/pub/gnu/config/
If the version you run ($0) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.
config.guess timestamp = $timestamp
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
hostinfo = `(hostinfo) 2>/dev/null`
/bin/universe = `(/bin/universe) 2>/dev/null`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
/bin/arch = `(/bin/arch) 2>/dev/null`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
UNAME_MACHINE = ${UNAME_MACHINE}
UNAME_RELEASE = ${UNAME_RELEASE}
UNAME_SYSTEM = ${UNAME_SYSTEM}
UNAME_VERSION = ${UNAME_VERSION}
EOF
exit 1 exit 1
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:

234
config.sub vendored
View File

@ -1,8 +1,10 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script, version 1.1. # Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
#
timestamp='2001-04-20'
# This file is (in principle) common to ALL GNU software. # This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software # The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can. # can handle that machine. It does not imply ALL GNU software can.
@ -27,7 +29,6 @@
# configuration script generated by Autoconf, you may include it under # configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program. # the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>.
# Please send patches to <config-patches@gnu.org>. # Please send patches to <config-patches@gnu.org>.
# #
# Configuration subroutine to validate and canonicalize a configuration type. # Configuration subroutine to validate and canonicalize a configuration type.
@ -50,30 +51,73 @@
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification. # It is wrong to echo any other type of specification.
if [ x$1 = x ] me=`echo "$0" | sed -e 's,.*/,,'`
then
echo Configuration name missing. 1>&2 usage="\
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 Usage: $0 [OPTION] CPU-MFR-OPSYS
echo "or $0 ALIAS" 1>&2 $0 [OPTION] ALIAS
echo where ALIAS is a recognized configuration type. 1>&2
exit 1 Canonicalize a configuration name.
fi
Operation modes:
-h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit
Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
echo "$timestamp" ; exit 0 ;;
--version | -v )
echo "$version" ; exit 0 ;;
--help | --h* | -h )
echo "$usage"; exit 0 ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
break ;;
-* )
echo "$me: invalid option $1$help"
exit 1 ;;
# First pass through any local machine types.
case $1 in
*local*) *local*)
# First pass through any local machine types.
echo $1 echo $1
exit 0 exit 0;;
;;
*) * )
;; break ;;
esac
done
case $# in
0) echo "$me: missing argument$help" >&2
exit 1;;
1) ;;
*) echo "$me: too many arguments$help" >&2
exit 1;;
esac esac
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations. # Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in case $maybe_os in
nto-qnx* | linux-gnu*) nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
os=-$maybe_os os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;; ;;
@ -99,7 +143,7 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple) -apple | -axis)
os= os=
basic_machine=$1 basic_machine=$1
;; ;;
@ -171,30 +215,40 @@ esac
case $basic_machine in case $basic_machine in
# Recognize the basic CPU types without company name. # Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below. # Some are omitted here because they have special meanings below.
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
| pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 \ | 580 | i960 | h8300 \
| x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
| hppa64 \ | hppa64 \
| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
| alphaev6[78] \ | alphaev6[78] \
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ | we32k | ns16k | clipper | i370 | sh | sh[34] \
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | powerpc | powerpcle \
| 1750a | dsp16xx | pdp10 | pdp11 \
| mips16 | mips64 | mipsel | mips64el \
| mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
| mips64vr5000 | miprs64vr5000el | mcore \ | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
| thumb | d10v | fr30 | avr) | v850 | c4x \
| thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
| pj | pjl | h8500)
basic_machine=$basic_machine-unknown basic_machine=$basic_machine-unknown
;; ;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) m6811 | m68hc11 | m6812 | m68hc12)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
os=-none
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
;; ;;
# We use `pc' rather than `unknown' # We use `pc' rather than `unknown'
# because (1) that's what they normally are, and # because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users. # (2) the word "unknown" tends to confuse beginning users.
i[34567]86) i*86 | x86_64)
basic_machine=$basic_machine-pc basic_machine=$basic_machine-pc
;; ;;
# Object if more than one company name word. # Object if more than one company name word.
@ -204,27 +258,30 @@ case $basic_machine in
;; ;;
# Recognize the basic CPU types with company name. # Recognize the basic CPU types with company name.
# FIXME: clean up the formatting here. # FIXME: clean up the formatting here.
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
| arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \ | xmp-* | ymp-* \
| x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
| hppa2.0n-* | hppa64-* \ | hppa2.0n-* | hppa64-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
| alphaev6[78]-* \ | alphaev6[78]-* \
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
| clipper-* | orion-* \ | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
| mips16-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
| mipstx39-* | mipstx39el-* | mcore-* \ | mipstx39-* | mipstx39el-* | mcore-* \
| f301-* | armv*-* | s390-* | sv1-* | t3e-* \ | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
| [cjt]90-* \
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
| bs2000-*) | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
;; ;;
# Recognize the various machine names and aliases which stand # Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS. # for a CPU type and a company and sometimes even an OS.
@ -261,14 +318,14 @@ case $basic_machine in
os=-sysv os=-sysv
;; ;;
amiga | amiga-*) amiga | amiga-*)
basic_machine=m68k-cbm basic_machine=m68k-unknown
;; ;;
amigaos | amigados) amigaos | amigados)
basic_machine=m68k-cbm basic_machine=m68k-unknown
os=-amigaos os=-amigaos
;; ;;
amigaunix | amix) amigaunix | amix)
basic_machine=m68k-cbm basic_machine=m68k-unknown
os=-sysv4 os=-sysv4
;; ;;
apollo68) apollo68)
@ -315,13 +372,16 @@ case $basic_machine in
basic_machine=cray2-cray basic_machine=cray2-cray
os=-unicos os=-unicos
;; ;;
[ctj]90-cray) [cjt]90)
basic_machine=c90-cray basic_machine=${basic_machine}-cray
os=-unicos os=-unicos
;; ;;
crds | unos) crds | unos)
basic_machine=m68k-crds basic_machine=m68k-crds
;; ;;
cris | cris-* | etrax*)
basic_machine=cris-axis
;;
da30 | da30-*) da30 | da30-*)
basic_machine=m68k-da30 basic_machine=m68k-da30
;; ;;
@ -369,6 +429,10 @@ case $basic_machine in
basic_machine=tron-gmicro basic_machine=tron-gmicro
os=-sysv os=-sysv
;; ;;
go32)
basic_machine=i386-pc
os=-go32
;;
h3050r* | hiux*) h3050r* | hiux*)
basic_machine=hppa1.1-hitachi basic_machine=hppa1.1-hitachi
os=-hiuxwe2 os=-hiuxwe2
@ -444,19 +508,19 @@ case $basic_machine in
basic_machine=i370-ibm basic_machine=i370-ibm
;; ;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2? # I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[34567]86v32) i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32 os=-sysv32
;; ;;
i[34567]86v4*) i*86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4 os=-sysv4
;; ;;
i[34567]86v) i*86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv os=-sysv
;; ;;
i[34567]86sol2) i*86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2 os=-solaris2
;; ;;
@ -468,14 +532,6 @@ case $basic_machine in
basic_machine=i386-unknown basic_machine=i386-unknown
os=-vsta os=-vsta
;; ;;
i386-go32 | go32)
basic_machine=i386-unknown
os=-go32
;;
i386-mingw32 | mingw32)
basic_machine=i386-unknown
os=-mingw32
;;
iris | iris4d) iris | iris4d)
basic_machine=mips-sgi basic_machine=mips-sgi
case $os in case $os in
@ -501,6 +557,10 @@ case $basic_machine in
basic_machine=ns32k-utek basic_machine=ns32k-utek
os=-sysv os=-sysv
;; ;;
mingw32)
basic_machine=i386-pc
os=-mingw32
;;
miniframe) miniframe)
basic_machine=m68000-convergent basic_machine=m68000-convergent
;; ;;
@ -531,7 +591,7 @@ case $basic_machine in
os=-coff os=-coff
;; ;;
msdos) msdos)
basic_machine=i386-unknown basic_machine=i386-pc
os=-msdos os=-msdos
;; ;;
mvs) mvs)
@ -595,6 +655,10 @@ case $basic_machine in
basic_machine=i960-intel basic_machine=i960-intel
os=-mon960 os=-mon960
;; ;;
nonstopux)
basic_machine=mips-compaq
os=-nonstopux
;;
np1) np1)
basic_machine=np1-gould basic_machine=np1-gould
;; ;;
@ -630,28 +694,28 @@ case $basic_machine in
pc532 | pc532-*) pc532 | pc532-*)
basic_machine=ns32k-pc532 basic_machine=ns32k-pc532
;; ;;
pentium | p5 | k5 | k6 | nexen) pentium | p5 | k5 | k6 | nexgen)
basic_machine=i586-pc basic_machine=i586-pc
;; ;;
pentiumpro | p6 | 6x86) pentiumpro | p6 | 6x86 | athlon)
basic_machine=i686-pc basic_machine=i686-pc
;; ;;
pentiumii | pentium2) pentiumii | pentium2)
basic_machine=i786-pc basic_machine=i686-pc
;; ;;
pentium-* | p5-* | k5-* | k6-* | nexen-*) pentium-* | p5-* | k5-* | k6-* | nexgen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;; ;;
pentiumpro-* | p6-* | 6x86-*) pentiumpro-* | p6-* | 6x86-* | athlon-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;; ;;
pentiumii-* | pentium2-*) pentiumii-* | pentium2-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;; ;;
pn) pn)
basic_machine=pn-gould basic_machine=pn-gould
;; ;;
power) basic_machine=rs6000-ibm power) basic_machine=power-ibm
;; ;;
ppc) basic_machine=powerpc-unknown ppc) basic_machine=powerpc-unknown
;; ;;
@ -666,6 +730,10 @@ case $basic_machine in
ps2) ps2)
basic_machine=i386-ibm basic_machine=i386-ibm
;; ;;
pw32)
basic_machine=i586-unknown
os=-pw32
;;
rom68k) rom68k)
basic_machine=m68k-rom68k basic_machine=m68k-rom68k
os=-coff os=-coff
@ -757,6 +825,10 @@ case $basic_machine in
basic_machine=t3e-cray basic_machine=t3e-cray
os=-unicos os=-unicos
;; ;;
tic54x | c54x*)
basic_machine=tic54x-unknown
os=-coff
;;
tx39) tx39)
basic_machine=mipstx39-unknown basic_machine=mipstx39-unknown
;; ;;
@ -852,13 +924,20 @@ case $basic_machine in
vax) vax)
basic_machine=vax-dec basic_machine=vax-dec
;; ;;
pdp10)
# there are many clones, so DEC is not a safe bet
basic_machine=pdp10-unknown
;;
pdp11) pdp11)
basic_machine=pdp11-dec basic_machine=pdp11-dec
;; ;;
we32k) we32k)
basic_machine=we32k-att basic_machine=we32k-att
;; ;;
sparc | sparcv9) sh3 | sh4)
basic_machine=sh-unknown
;;
sparc | sparcv9 | sparcv9b)
basic_machine=sparc-sun basic_machine=sparc-sun
;; ;;
cydra) cydra)
@ -880,6 +959,9 @@ case $basic_machine in
basic_machine=c4x-none basic_machine=c4x-none
os=-coff os=-coff
;; ;;
*-unknown)
# Make sure to match an already-canonicalized machine name.
;;
*) *)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1 exit 1
@ -939,12 +1021,13 @@ case $os in
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit*) | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-qnx*) -qnx*)
case $basic_machine in case $basic_machine in
x86-* | i[34567]86-*) x86-* | i*86-*)
;; ;;
*) *)
os=-nto$os os=-nto$os
@ -1000,7 +1083,7 @@ case $os in
-ns2 ) -ns2 )
os=-nextstep2 os=-nextstep2
;; ;;
-nsk) -nsk*)
os=-nsk os=-nsk
;; ;;
# Preserve the version number of sinix5. # Preserve the version number of sinix5.
@ -1037,7 +1120,7 @@ case $os in
-xenix) -xenix)
os=-xenix os=-xenix
;; ;;
-*mint | -*MiNT) -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
os=-mint os=-mint
;; ;;
-none) -none)
@ -1071,6 +1154,9 @@ case $basic_machine in
arm*-semi) arm*-semi)
os=-aout os=-aout
;; ;;
pdp10-*)
os=-tops20
;;
pdp11-*) pdp11-*)
os=-none os=-none
;; ;;
@ -1179,7 +1265,7 @@ case $basic_machine in
*-masscomp) *-masscomp)
os=-rtu os=-rtu
;; ;;
f301-fujitsu) f30[01]-fujitsu | f700-fujitsu)
os=-uxpv os=-uxpv
;; ;;
*-rom68k) *-rom68k)
@ -1257,7 +1343,7 @@ case $basic_machine in
-mpw* | -macos*) -mpw* | -macos*)
vendor=apple vendor=apple
;; ;;
-*mint | -*MiNT) -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
vendor=atari vendor=atari
;; ;;
esac esac
@ -1266,3 +1352,11 @@ case $basic_machine in
esac esac
echo $basic_machine$os echo $basic_machine$os
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:

View File

@ -45,7 +45,7 @@ typedef enum /*< chop=GIMP_ >*/
GIMP_UNIT_END = 5, GIMP_UNIT_END = 5,
GIMP_UNIT_PERCENT = 65536 GIMP_UNIT_PERCENT = 65536 /*< skip >*/
} GimpUnit; } GimpUnit;
typedef enum /*< chop=GIMP_ >*/ typedef enum /*< chop=GIMP_ >*/

View File

@ -143,7 +143,7 @@ gimp_button_button_press (GtkWidget *widget,
} }
if (GTK_WIDGET_CLASS (parent_class)->button_press_event) if (GTK_WIDGET_CLASS (parent_class)->button_press_event)
GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, bevent); return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, bevent);
return TRUE; return TRUE;
} }
@ -153,7 +153,8 @@ gimp_button_button_release (GtkWidget *widget,
GdkEventButton *bevent) GdkEventButton *bevent)
{ {
GtkButton *button; GtkButton *button;
gboolean in_button = FALSE; gboolean extended_clicked = FALSE;
gboolean retval = TRUE;
g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE); g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE);
@ -163,9 +164,7 @@ gimp_button_button_release (GtkWidget *widget,
if (bevent->button == 1) if (bevent->button == 1)
{ {
in_button = button->in_button; if (button->in_button &&
if (in_button &&
(GIMP_BUTTON (button)->press_state & (GIMP_BUTTON (button)->press_state &
(GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))) (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)))
{ {
@ -173,20 +172,30 @@ gimp_button_button_release (GtkWidget *widget,
button_signals[EXTENDED_CLICKED], button_signals[EXTENDED_CLICKED],
GIMP_BUTTON (button)->press_state); GIMP_BUTTON (button)->press_state);
extended_clicked = TRUE;
/* HACK: don't let GtkButton emit "clicked" by telling it that
* the mouse pointer is outside the widget
*/
button->in_button = FALSE; button->in_button = FALSE;
} }
} }
if (GTK_WIDGET_CLASS (parent_class)->button_release_event) if (GTK_WIDGET_CLASS (parent_class)->button_release_event)
GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, bevent); retval = GTK_WIDGET_CLASS (parent_class)->button_release_event (widget,
bevent);
if (bevent->button == 1 && in_button) if (extended_clicked)
{ {
/* revert the above HACK and let the button draw itself in the
* correct state, because upchaining with "in_button" == FALSE
* messed it up
*/
button->in_button = TRUE; button->in_button = TRUE;
gtk_widget_set_state (widget, GTK_STATE_PRELIGHT); gtk_widget_set_state (widget, GTK_STATE_PRELIGHT);
gtk_widget_draw (widget, NULL); gtk_widget_draw (widget, NULL);
} }
return TRUE; return retval;
} }

View File

@ -151,7 +151,6 @@ init_generated_constants (void)
setvar (cintern ("UNIT-POINT"), flocons (3), NIL); setvar (cintern ("UNIT-POINT"), flocons (3), NIL);
setvar (cintern ("UNIT-PICA"), flocons (4), NIL); setvar (cintern ("UNIT-PICA"), flocons (4), NIL);
setvar (cintern ("UNIT-END"), flocons (5), NIL); setvar (cintern ("UNIT-END"), flocons (5), NIL);
setvar (cintern ("UNIT-PERCENT"), flocons (65536), NIL);
setvar (cintern ("ONCE-FORWARD"), flocons (0), NIL); setvar (cintern ("ONCE-FORWARD"), flocons (0), NIL);
setvar (cintern ("ONCE-BACKWARDS"), flocons (1), NIL); setvar (cintern ("ONCE-BACKWARDS"), flocons (1), NIL);

View File

@ -21,25 +21,22 @@ package Gimp::CodeGen::enums;
%enums = ( %enums = (
GimpUnit => GimpUnit =>
{ contig => 0, { contig => 1,
header => 'libgimpbase/gimpbasetypes.h', header => 'libgimpbase/gimpbasetypes.h',
symbols => [ qw(GIMP_UNIT_PIXEL GIMP_UNIT_INCH GIMP_UNIT_MM symbols => [ qw(GIMP_UNIT_PIXEL GIMP_UNIT_INCH GIMP_UNIT_MM
GIMP_UNIT_POINT GIMP_UNIT_PICA GIMP_UNIT_END GIMP_UNIT_POINT GIMP_UNIT_PICA GIMP_UNIT_END) ],
GIMP_UNIT_PERCENT) ],
mapping => { GIMP_UNIT_PIXEL => '0', mapping => { GIMP_UNIT_PIXEL => '0',
GIMP_UNIT_INCH => '1', GIMP_UNIT_INCH => '1',
GIMP_UNIT_MM => '2', GIMP_UNIT_MM => '2',
GIMP_UNIT_POINT => '3', GIMP_UNIT_POINT => '3',
GIMP_UNIT_PICA => '4', GIMP_UNIT_PICA => '4',
GIMP_UNIT_END => '5', GIMP_UNIT_END => '5' },
GIMP_UNIT_PERCENT => '65536' },
nicks => { GIMP_UNIT_PIXEL => 'UNIT_PIXEL', nicks => { GIMP_UNIT_PIXEL => 'UNIT_PIXEL',
GIMP_UNIT_INCH => 'UNIT_INCH', GIMP_UNIT_INCH => 'UNIT_INCH',
GIMP_UNIT_MM => 'UNIT_MM', GIMP_UNIT_MM => 'UNIT_MM',
GIMP_UNIT_POINT => 'UNIT_POINT', GIMP_UNIT_POINT => 'UNIT_POINT',
GIMP_UNIT_PICA => 'UNIT_PICA', GIMP_UNIT_PICA => 'UNIT_PICA',
GIMP_UNIT_END => 'UNIT_END', GIMP_UNIT_END => 'UNIT_END' }
GIMP_UNIT_PERCENT => 'UNIT_PERCENT' }
}, },
GimpPDBArgType => GimpPDBArgType =>
{ contig => 1, { contig => 1,