[gs-cvs] rev 9085 - in trunk/gs: base psi

giles at ghostscript.com giles at ghostscript.com
Sat Sep 13 13:22:25 PDT 2008


Author: giles
Date: 2008-09-13 13:22:25 -0700 (Sat, 13 Sep 2008)
New Revision: 9085

Added:
   trunk/gs/psi/dxmain.c
   trunk/gs/psi/dxmainc.c
Removed:
   trunk/gs/base/dxmain.c
   trunk/gs/base/dxmainc.c
Modified:
   trunk/gs/base/unix-dll.mak
Log:
Move the dxmain.c and dxmainc.c front ends to the interpreter source 
directory.


Deleted: trunk/gs/base/dxmain.c
===================================================================
--- trunk/gs/base/dxmain.c	2008-09-12 08:05:54 UTC (rev 9084)
+++ trunk/gs/base/dxmain.c	2008-09-13 20:22:25 UTC (rev 9085)
@@ -1,1147 +0,0 @@
-/* Copyright (C) 2001-2007 Artifex Software, Inc.
-   All Rights Reserved.
-  
-   This software is provided AS-IS with no warranty, either express or
-   implied.
-
-   This software is distributed under license and may not be copied, modified
-   or distributed except as expressly authorized under the terms of that
-   license.  Refer to licensing information at http://www.artifex.com/
-   or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,
-   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
-*/
-/* $Id$ */
-
-/* dxmain.c */
-/* 
- * Ghostscript frontend which provides a graphical window 
- * using Gtk+.  Load time linking to libgs.so 
- * Compile using
- *    gcc `gtk-config --cflags` -o gs dxmain.c -lgs `gtk-config --libs`
- *
- * The ghostscript library needs to be compiled with
- *  gcc -fPIC -g -c -Wall file.c
- *  gcc -shared -Wl,-soname,libgs.so.6 -o libgs.so.6.60 file.o -lc
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <gtk/gtk.h>
-#define __PROTOTYPES__
-#include "ierrors.h"
-#include "iapi.h"
-#include "gdevdsp.h"
-
-const char start_string[] = "systemdict /start get exec\n";
-
-static void read_stdin_handler(gpointer data, gint fd, 
-	GdkInputCondition condition);
-static int gsdll_stdin(void *instance, char *buf, int len);
-static int gsdll_stdout(void *instance, const char *str, int len);
-static int gsdll_stdout(void *instance, const char *str, int len);
-static int display_open(void *handle, void *device);
-static int display_preclose(void *handle, void *device);
-static int display_close(void *handle, void *device);
-static int display_presize(void *handle, void *device, int width, int height, 
-	int raster, unsigned int format);
-static int display_size(void *handle, void *device, int width, int height, 
-	int raster, unsigned int format, unsigned char *pimage);
-static int display_sync(void *handle, void *device);
-static int display_page(void *handle, void *device, int copies, int flush);
-static int display_update(void *handle, void *device, int x, int y, 
-	int w, int h);
-
-#ifndef min
-#define min(a,b) ((a) < (b) ? (a) : (b))
-#endif
-
-/*********************************************************************/
-/* stdio functions */
-
-struct stdin_buf {
-   char *buf;
-   int len;	/* length of buffer */
-   int count;	/* number of characters returned */
-};
-
-/* handler for reading non-blocking stdin */
-static void 
-read_stdin_handler(gpointer data, gint fd, GdkInputCondition condition)
-{
-    struct stdin_buf *input = (struct stdin_buf *)data;
-
-    if (condition & GDK_INPUT_EXCEPTION) {
-	g_print("input exception");
-	input->count = 0;	/* EOF */
-    }
-    else if (condition & GDK_INPUT_READ) {
-	/* read returns -1 for error, 0 for EOF and +ve for OK */
-	input->count = read(fd, input->buf, input->len);
-	if (input->count < 0)
-	    input->count = 0;
-    }
-    else {
-	g_print("input condition unknown");
-	input->count = 0;	/* EOF */
-    }
-}
-
-/* callback for reading stdin */
-static int 
-gsdll_stdin(void *instance, char *buf, int len)
-{
-    struct stdin_buf input;
-    gint input_tag;
-
-    input.len = len;
-    input.buf = buf;
-    input.count = -1;
-
-    input_tag = gdk_input_add(fileno(stdin), 
-	(GdkInputCondition)(GDK_INPUT_READ | GDK_INPUT_EXCEPTION),
-	read_stdin_handler, &input);
-    while (input.count < 0)
-	gtk_main_iteration_do(TRUE);
-    gdk_input_remove(input_tag);
-
-    return input.count;
-}
-
-static int 
-gsdll_stdout(void *instance, const char *str, int len)
-{
-    gtk_main_iteration_do(FALSE);
-    fwrite(str, 1, len, stdout);
-    fflush(stdout);
-    return len;
-}
-
-static int 
-gsdll_stderr(void *instance, const char *str, int len)
-{
-    gtk_main_iteration_do(FALSE);
-    fwrite(str, 1, len, stderr);
-    fflush(stderr);
-    return len;
-}
-
-/*********************************************************************/
-/* dll display device */
-
-typedef struct IMAGE_DEVICEN_S IMAGE_DEVICEN;
-struct IMAGE_DEVICEN_S {
-    int used;		/* non-zero if in use */
-    int visible;	/* show on window */
-    char name[64];
-    int cyan;
-    int magenta;
-    int yellow;
-    int black;
-    int menu;		/* non-zero if menu item added to system menu */
-};
-#define IMAGE_DEVICEN_MAX 8
-
-typedef struct IMAGE_S IMAGE;
-struct IMAGE_S {
-    void *handle;
-    void *device;
-    GtkWidget *window;
-    GtkWidget *vbox;
-    GtkWidget *cmyk_bar;
-    GtkWidget *separation[IMAGE_DEVICEN_MAX];
-    GtkWidget *show_as_gray;
-    GtkWidget *scroll;
-    GtkWidget *darea;
-    guchar *buf;
-    gint width;
-    gint height;
-    gint rowstride;
-    unsigned int format;
-    GdkRgbCmap *cmap;
-    int devicen_gray;	/* true if a single separation should be shown gray */
-    IMAGE_DEVICEN devicen[IMAGE_DEVICEN_MAX];
-    guchar *rgbbuf;	/* used when we need to convert raster format */
-    IMAGE *next;
-};
-
-IMAGE *first_image;
-static IMAGE *image_find(void *handle, void *device);
-static void window_destroy(GtkWidget *w, gpointer data);
-static void window_create(IMAGE *img);
-static void window_resize(IMAGE *img);
-static gboolean window_draw(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
-
-static IMAGE *
-image_find(void *handle, void *device)
-{
-    IMAGE *img;
-    for (img = first_image; img!=0; img=img->next) {
-	if ((img->handle == handle) && (img->device == device))
-	    return img;
-    }
-    return NULL;
-}
-
-
-
-static gboolean
-window_draw(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
-{
-    IMAGE *img = (IMAGE *)user_data;
-    if (img && img->window && img->buf) {
-        int color = img->format & DISPLAY_COLORS_MASK;
-	int depth = img->format & DISPLAY_DEPTH_MASK;
-	int x, y, width, height;
-	if (event->area.x + event->area.width > img->width) {
-	    x = img->width;
-	    width = (event->area.x + event->area.width) - x;
-	    y = event->area.y;
-            height = min(img->height, event->area.y + event->area.height) - y;
-	    gdk_window_clear_area(widget->window, x, y, width, height);
-	}
-	if (event->area.y + event->area.height > img->height) {
-	    x = event->area.x;
-	    width = event->area.width;
-	    y = img->height;
-	    height = (event->area.y + event->area.height) - y;
-	    gdk_window_clear_area(widget->window, x, y, width, height);
-	}
-	x = event->area.x;
-	y = event->area.y;
-	width = event->area.width;
-	height = event->area.height;
-	if ((x>=0) && (y>=0) && (x < img->width) && (y < img->height)) {
-	    /* drawing area intersects bitmap */
-	    if (x + width > img->width)
-		width = img->width - x;
-	    if (y + height > img->height)
-		height =  img->height - y;
-	    switch (color) {
-		case DISPLAY_COLORS_NATIVE:
-		    if (depth == DISPLAY_DEPTH_8)
-			gdk_draw_indexed_image(widget->window, 
-			    widget->style->fg_gc[GTK_STATE_NORMAL],
-			    x, y, width, height, 
-			    GDK_RGB_DITHER_MAX, 
-			    img->buf + x + y*img->rowstride, 
-			    img->rowstride, img->cmap);
-		    else if ((depth == DISPLAY_DEPTH_16) && img->rgbbuf)
-			gdk_draw_rgb_image(widget->window, 
-			    widget->style->fg_gc[GTK_STATE_NORMAL],
-			    x, y, width, height, 
-			    GDK_RGB_DITHER_MAX, 
-			    img->rgbbuf + x*3 + y*img->width*3, 
-			    img->width * 3);
-		    break;
-		case DISPLAY_COLORS_GRAY:
-		    if (depth == DISPLAY_DEPTH_8)
-			gdk_draw_gray_image(widget->window, 
-			    widget->style->fg_gc[GTK_STATE_NORMAL],
-			    x, y, width, height,
-			    GDK_RGB_DITHER_MAX, 
-			    img->buf + x + y*img->rowstride, 
-			    img->rowstride);
-		    break;
-		case DISPLAY_COLORS_RGB:
-		    if (depth == DISPLAY_DEPTH_8) {
-			if (img->rgbbuf)
-			    gdk_draw_rgb_image(widget->window, 
-				widget->style->fg_gc[GTK_STATE_NORMAL],
-				x, y, width, height,
-				GDK_RGB_DITHER_MAX, 
-				img->rgbbuf + x*3 + y*img->width*3, 
-				img->width * 3);
-			else
-			    gdk_draw_rgb_image(widget->window, 
-				widget->style->fg_gc[GTK_STATE_NORMAL],
-				x, y, width, height,
-				GDK_RGB_DITHER_MAX, 
-				img->buf + x*3 + y*img->rowstride, 
-				img->rowstride);
-		    }
-		    break;
-		case DISPLAY_COLORS_CMYK:
-		    if (((depth == DISPLAY_DEPTH_1) || 
-		        (depth == DISPLAY_DEPTH_8)) && img->rgbbuf)
-			gdk_draw_rgb_image(widget->window, 
-			    widget->style->fg_gc[GTK_STATE_NORMAL],
-			    x, y, width, height,
-			    GDK_RGB_DITHER_MAX, 
-			    img->rgbbuf + x*3 + y*img->width*3, 
-			    img->width * 3);
-		    break;
-		case DISPLAY_COLORS_SEPARATION:
-		    if ((depth == DISPLAY_DEPTH_8) && img->rgbbuf)
-			gdk_draw_rgb_image(widget->window, 
-			    widget->style->fg_gc[GTK_STATE_NORMAL],
-			    x, y, width, height,
-			    GDK_RGB_DITHER_MAX, 
-			    img->rgbbuf + x*3 + y*img->width*3, 
-			    img->width * 3);
-		    break;
-	    }
-	}
-    }
-    return TRUE;
-}
-
-static void window_destroy(GtkWidget *w, gpointer data)
-{
-    IMAGE *img = (IMAGE *)data;
-    img->window = NULL;
-    img->scroll = NULL;
-    img->darea = NULL;
-}
-
-static void window_create(IMAGE *img)
-{
-    /* Create a gtk window */
-    img->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_title(GTK_WINDOW(img->window), "gs");
-    img->vbox = gtk_vbox_new(FALSE, 0);
-    gtk_container_add(GTK_CONTAINER(img->window), img->vbox);
-    gtk_widget_show(img->vbox);
-
-    img->darea = gtk_drawing_area_new();
-    gtk_widget_show(img->darea);
-    img->scroll = gtk_scrolled_window_new(NULL, NULL);
-    gtk_widget_show(img->scroll);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(img->scroll),
-	GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
-    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(img->scroll),
-	img->darea);
-    gtk_box_pack_start(GTK_BOX(img->vbox), img->scroll, TRUE, TRUE, 0);
-    gtk_signal_connect(GTK_OBJECT (img->darea), "expose-event",
-                        GTK_SIGNAL_FUNC (window_draw), img);
-    gtk_signal_connect(GTK_OBJECT (img->window), "destroy", 
-			GTK_SIGNAL_FUNC (window_destroy), img);
-    /* do not show img->window until we know the image size */
-}
-
-static void window_resize(IMAGE *img)
-{
-    gtk_drawing_area_size(GTK_DRAWING_AREA (img->darea), 
-	img->width, img->height);
-    if (!(GTK_WIDGET_FLAGS(img->window) & GTK_VISIBLE)) {
-	/* We haven't yet shown the window, so set a default size 
-	 * which is smaller than the desktop to allow room for 
-	 * desktop toolbars, and if possible a little larger than 
-	 * the image to allow room for the scroll bars.
-	 * We don't know the width of the scroll bars, so just guess. */
-	gtk_window_set_default_size(GTK_WINDOW(img->window), 
-	    min(gdk_screen_width()-96, img->width+24),
-	    min(gdk_screen_height()-96, img->height+24));
-    }
-}
-
-static void window_separation(IMAGE *img, int sep)
-{
-    img->devicen[sep].visible = !img->devicen[sep].visible;
-    display_sync(img->handle, img->device);
-}
-
-static void signal_sep0(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 0);
-}
-
-static void signal_sep1(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 1);
-}
-
-static void signal_sep2(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 2);
-}
-
-static void signal_sep3(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 3);
-}
-
-static void signal_sep4(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 4);
-}
-
-static void signal_sep5(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 5);
-}
-
-static void signal_sep6(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 6);
-}
-
-static void signal_sep7(GtkWidget *w, gpointer data)
-{
-    window_separation((IMAGE *)data, 7);
-}
-
-GtkSignalFunc signal_separation[IMAGE_DEVICEN_MAX] = {
-    signal_sep0, 
-    signal_sep1, 
-    signal_sep2, 
-    signal_sep3, 
-    signal_sep4, 
-    signal_sep5, 
-    signal_sep6, 
-    signal_sep7
-};
-
-static GtkWidget *
-window_add_button(IMAGE *img, const char *label, GtkSignalFunc fn)
-{
-    GtkWidget *w;
-    w = gtk_check_button_new_with_label(label);
-    gtk_box_pack_start(GTK_BOX(img->cmyk_bar), w, FALSE, FALSE, 5);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
-    gtk_signal_connect(GTK_OBJECT(w), "clicked", fn, img);
-    gtk_widget_show(w);
-    return w;
-}
-
-static void signal_show_as_gray(GtkWidget *w, gpointer data)
-{
-    IMAGE *img= (IMAGE *)data;
-    img->devicen_gray= !img->devicen_gray;
-    display_sync(img->handle, img->device);
-}
-
-
-/* New device has been opened */
-static int display_open(void *handle, void *device)
-{
-
-    IMAGE *img = (IMAGE *)malloc(sizeof(IMAGE));
-    if (img == NULL)
-	return -1;
-    memset(img, 0, sizeof(IMAGE));
-
-    if (first_image == NULL) {
-	gdk_rgb_init();
-	gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
-	gtk_widget_set_default_visual(gdk_rgb_get_visual());
-    }
-
-    /* add to list */
-    if (first_image)
-	img->next = first_image;
-    first_image = img;
-
-    /* remember device and handle */
-    img->handle = handle;
-    img->device = device;
-
-    /* create window */
-    window_create(img);
-
-    gtk_main_iteration_do(FALSE);
-    return 0;
-}
-
-static int display_preclose(void *handle, void *device)
-{
-    IMAGE *img = image_find(handle, device);
-    if (img == NULL)
-	return -1;
-
-    gtk_main_iteration_do(FALSE);
-
-    img->buf = NULL;
-    img->width = 0;
-    img->height = 0;
-    img->rowstride = 0;
-    img->format = 0;
-
-    gtk_widget_destroy(img->window);
-    img->window = NULL;
-    img->scroll = NULL;
-    img->darea = NULL;
-    if (img->cmap)
-	gdk_rgb_cmap_free(img->cmap);
-    img->cmap = NULL;
-    if (img->rgbbuf)
-	free(img->rgbbuf);
-    img->rgbbuf = NULL;
-
-    gtk_main_iteration_do(FALSE);
-
-    return 0;
-}
-
-static int display_close(void *handle, void *device)
-{
-    IMAGE *img = image_find(handle, device);
-    if (img == NULL)
-	return -1;
-
-    /* remove from list */
-    if (img == first_image) {
-	first_image = img->next;
-    }
-    else {
-	IMAGE *tmp;
-	for (tmp = first_image; tmp!=0; tmp=tmp->next) {
-	    if (img == tmp->next)
-		tmp->next = img->next;
-	}
-    }
-
-    return 0;
-}
-
-static int display_presize(void *handle, void *device, int width, int height, 
-	int raster, unsigned int format)
-{
-    /* Assume everything is OK.
-     * It would be better to return e_rangecheck if we can't 
-     * support the format.
-     */
-    return 0;
-}
-   
-static int display_size(void *handle, void *device, int width, int height, 
-	int raster, unsigned int format, unsigned char *pimage)
-{
-    IMAGE *img = image_find(handle, device);
-    int color;
-    int depth;
-    int i;
-    if (img == NULL)
-	return -1;
-
-    if (img->cmap)
-	gdk_rgb_cmap_free(img->cmap);
-    img->cmap = NULL;
-    if (img->rgbbuf)
-	free(img->rgbbuf);
-    img->rgbbuf = NULL;
-
-    img->width = width;
-    img->height = height;
-    img->rowstride = raster;
-    img->buf = pimage;
-    img->format = format;
-
-    /* Reset separations */
-    for (i=0; i<IMAGE_DEVICEN_MAX; i++) {
-	img->devicen[i].used = 0;
-	img->devicen[i].visible = 1;
-	memset(img->devicen[i].name, 0, sizeof(img->devicen[i].name));
-	img->devicen[i].cyan = 0;
-	img->devicen[i].magenta = 0;
-	img->devicen[i].yellow = 0;
-	img->devicen[i].black = 0;
-    }
-
-    color = img->format & DISPLAY_COLORS_MASK;
-    depth = img->format & DISPLAY_DEPTH_MASK;
-    switch (color) {
-	case DISPLAY_COLORS_NATIVE:
-	    if (depth == DISPLAY_DEPTH_8) {
-		/* palette of 96 colors */
-		guint32 color[96];
-		int i;
-		int one = 255 / 3;
-		for (i=0; i<96; i++) {
-		    /* 0->63 = 00RRGGBB, 64->95 = 010YYYYY */
-		    if (i < 64) {
-			color[i] = 
-			    (((i & 0x30) >> 4) * one << 16) + 	/* r */
-			    (((i & 0x0c) >> 2) * one << 8) + 	/* g */
-			    (i & 0x03) * one;		        /* b */
-		    }
-		    else {
-			int val = i & 0x1f;
-			val = (val << 3) + (val >> 2);
-			color[i] = (val << 16) + (val << 8) + val;
-		    }
-		}
-		img->cmap = gdk_rgb_cmap_new(color, 96);
-		break;
-	    }
-	    else if (depth == DISPLAY_DEPTH_16) {
-		/* need to convert to 24RGB */
-		img->rgbbuf = (guchar *)malloc(width * height * 3);
-		if (img->rgbbuf == NULL)
-		    return -1;
-	    }
-	    else
-		return e_rangecheck;	/* not supported */
-	case DISPLAY_COLORS_GRAY:
-	    if (depth == DISPLAY_DEPTH_8)
-		break;
-	    else
-		return -1;	/* not supported */
-	case DISPLAY_COLORS_RGB:
-	    if (depth == DISPLAY_DEPTH_8) {
-		if (((img->format & DISPLAY_ALPHA_MASK) == DISPLAY_ALPHA_NONE)
-		    && ((img->format & DISPLAY_ENDIAN_MASK) 
-			== DISPLAY_BIGENDIAN))
-		    break;
-		else {
-		    /* need to convert to 24RGB */
-		    img->rgbbuf = (guchar *)malloc(width * height * 3);
-		    if (img->rgbbuf == NULL)
-			return -1;
-		}
-	    }
-	    else
-		return -1;	/* not supported */
-	    break;
-	case DISPLAY_COLORS_CMYK:
-	    if ((depth == DISPLAY_DEPTH_1) || (depth == DISPLAY_DEPTH_8)) {
-		/* need to convert to 24RGB */
-		img->rgbbuf = (guchar *)malloc(width * height * 3);
-		if (img->rgbbuf == NULL)
-		    return -1;
-		/* We already know about the CMYK components */
-		img->devicen[0].used = 1;
-		img->devicen[0].cyan = 65535;
-		strncpy(img->devicen[0].name, "Cyan", 
-		    sizeof(img->devicen[0].name));
-		img->devicen[1].used = 1;
-		img->devicen[1].magenta = 65535;
-		strncpy(img->devicen[1].name, "Magenta", 
-		    sizeof(img->devicen[1].name));
-		img->devicen[2].used = 1;
-		img->devicen[2].yellow = 65535;
-		strncpy(img->devicen[2].name, "Yellow", 
-		    sizeof(img->devicen[2].name));
-		img->devicen[3].used = 1;
-		img->devicen[3].black = 65535;
-		strncpy(img->devicen[3].name, "Black", 
-		    sizeof(img->devicen[3].name));
-	    }
-	    else
-		return -1;	/* not supported */
-	    break;
-	case DISPLAY_COLORS_SEPARATION:
-	    /* we can't display this natively */
-	    /* we will convert it just before displaying */
-	    if (depth != DISPLAY_DEPTH_8)
-		return -1;	/* not supported */
-	    img->rgbbuf = (guchar *)malloc(width * height * 3);
-	    if (img->rgbbuf == NULL)
-		return -1;
-	    break;
-    }
-
-
-    if ((color == DISPLAY_COLORS_CMYK) || 
-	(color == DISPLAY_COLORS_SEPARATION)) {
-	if (!img->cmyk_bar) {
-	    /* add bar to select separation */
-	    img->cmyk_bar = gtk_hbox_new(FALSE, 0);
-	    gtk_box_pack_start(GTK_BOX(img->vbox), img->cmyk_bar, 
-		FALSE, FALSE, 0);
-	    for (i=0; i<IMAGE_DEVICEN_MAX; i++) {
-	       img->separation[i] = 
-		window_add_button(img, img->devicen[i].name,
-		   signal_separation[i]);
-	    }
-	    img->show_as_gray = gtk_check_button_new_with_label("Show as Gray");
-	    gtk_box_pack_end(GTK_BOX(img->cmyk_bar), img->show_as_gray, 
-		FALSE, FALSE, 5);
-	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(img->show_as_gray), 
-		FALSE);
-	    gtk_signal_connect(GTK_OBJECT(img->show_as_gray), "clicked", 
-		signal_show_as_gray, img);
-	    gtk_widget_show(img->show_as_gray);
-	}
-	gtk_widget_show(img->cmyk_bar);
-    }
-    else {
-	if (img->cmyk_bar)
-	    gtk_widget_hide(img->cmyk_bar);
-    }
-
-    window_resize(img);
-    if (!(GTK_WIDGET_FLAGS(img->window) & GTK_VISIBLE))
-	gtk_widget_show(img->window);
-
-    gtk_main_iteration_do(FALSE);
-    return 0;
-}
-   
-static int display_sync(void *handle, void *device)
-{
-    IMAGE *img = image_find(handle, device);
-    int color;
-    int depth;
-    int endian;
-    int native555;
-    int alpha;
-    if (img == NULL)
-	return -1;
-
-    color = img->format & DISPLAY_COLORS_MASK;
-    depth = img->format & DISPLAY_DEPTH_MASK;
-    endian = img->format & DISPLAY_ENDIAN_MASK;
-    native555 = img->format & DISPLAY_555_MASK;
-    alpha = img->format & DISPLAY_ALPHA_MASK;
-
-    if ((color == DISPLAY_COLORS_CMYK) ||
-	(color == DISPLAY_COLORS_SEPARATION)) {
-	/* check if separations have changed */
-	int i;
-	gchar *str;
-	for (i=0; i<IMAGE_DEVICEN_MAX; i++) {
-	    gtk_label_get(
-		GTK_LABEL(GTK_BIN(img->separation[i])->child), &str);
-	    if (!img->devicen[i].used)
-		gtk_widget_hide(img->separation[i]);
-	    else if (strcmp(img->devicen[i].name, str) != 0) {
-		/* text has changed, update it */
-		gtk_label_set_text(
-		    GTK_LABEL(GTK_BIN(img->separation[i])->child),
-		    img->devicen[i].name);
-		gtk_widget_show(img->separation[i]);
-	    }
-	}
-    }
-		
-    /* some formats need to be converted for use by GdkRgb */
-    switch (color) {
-	case DISPLAY_COLORS_NATIVE:
-	    if (depth == DISPLAY_DEPTH_16) {
-	      if (endian == DISPLAY_LITTLEENDIAN) {
-		if (native555 == DISPLAY_NATIVE_555) {
-		    /* BGR555 */
-		    int x, y;
-		    unsigned short w;
-		    unsigned char value;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    w = s[0] + (s[1] << 8);
-			    value = (w >> 10) & 0x1f;	/* red */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = (w >> 5) & 0x1f;	/* green */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = w & 0x1f;		/* blue */
-			    *d++ = (value << 3) + (value >> 2);
-			    s += 2;
-			}
-		    }
-		}
-		else {
-		    /* BGR565 */
-		    int x, y;
-		    unsigned short w;
-		    unsigned char value;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    w = s[0] + (s[1] << 8);
-			    value = (w >> 11) & 0x1f;	/* red */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = (w >> 5) & 0x3f;	/* green */
-			    *d++ = (value << 2) + (value >> 4);
-			    value = w & 0x1f;		/* blue */
-			    *d++ = (value << 3) + (value >> 2);
-			    s += 2;
-			}
-		    }
-		}
-	      }
-	      else {
-		if (native555 == DISPLAY_NATIVE_555) {
-		    /* RGB555 */
-		    int x, y;
-		    unsigned short w;
-		    unsigned char value;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    w = s[1] + (s[0] << 8);
-			    value = (w >> 10) & 0x1f;	/* red */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = (w >> 5) & 0x1f;	/* green */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = w & 0x1f;		/* blue */
-			    *d++ = (value << 3) + (value >> 2);
-			    s += 2;
-			}
-		    }
-		}
-		else {
-		    /* RGB565 */
-		    int x, y;
-		    unsigned short w;
-		    unsigned char value;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    w = s[1] + (s[0] << 8);
-			    value = (w >> 11) & 0x1f;	/* red */
-			    *d++ = (value << 3) + (value >> 2);
-			    value = (w >> 5) & 0x3f;	/* green */
-			    *d++ = (value << 2) + (value >> 4);
-			    value = w & 0x1f;		/* blue */
-			    *d++ = (value << 3) + (value >> 2);
-			    s += 2;
-			}
-		    }
-		}
-	      }
-	    }
-	    break;
-	case DISPLAY_COLORS_RGB:
-	    if ( (depth == DISPLAY_DEPTH_8) && 
-		 ((alpha == DISPLAY_ALPHA_FIRST) || 
-	          (alpha == DISPLAY_UNUSED_FIRST)) &&
-		 (endian == DISPLAY_BIGENDIAN) ) {
-		/* Mac format */
-		int x, y;
-		unsigned char *s, *d;
-		for (y = 0; y<img->height; y++) {
-		    s = img->buf + y * img->rowstride;
-		    d = img->rgbbuf + y * img->width * 3;
-		    for (x=0; x<img->width; x++) {
-			s++;		/* x = filler */
-			*d++ = *s++;	/* r */
-			*d++ = *s++;	/* g */
-			*d++ = *s++;	/* b */
-		    }
-		}
-	    }
-	    else if ( (depth == DISPLAY_DEPTH_8) &&
-		      (endian == DISPLAY_LITTLEENDIAN) ) {
-	        if ((alpha == DISPLAY_UNUSED_LAST) ||
-	            (alpha == DISPLAY_ALPHA_LAST)) {
-		    /* Windows format + alpha = BGRx */
-		    int x, y;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    *d++ = s[2];	/* r */
-			    *d++ = s[1];	/* g */
-			    *d++ = s[0];	/* b */
-			    s += 4;
-			}
-		    }
-		}
-	        else if ((alpha == DISPLAY_UNUSED_FIRST) ||
-	            (alpha == DISPLAY_ALPHA_FIRST)) {
-		    /* xBGR */
-		    int x, y;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    *d++ = s[3];	/* r */
-			    *d++ = s[2];	/* g */
-			    *d++ = s[1];	/* b */
-			    s += 4;
-			}
-		    }
-		}
-		else {
-		    /* Windows BGR24 */
-		    int x, y;
-		    unsigned char *s, *d;
-		    for (y = 0; y<img->height; y++) {
-			s = img->buf + y * img->rowstride;
-			d = img->rgbbuf + y * img->width * 3;
-			for (x=0; x<img->width; x++) {
-			    *d++ = s[2];	/* r */
-			    *d++ = s[1];	/* g */
-			    *d++ = s[0];	/* b */
-			    s += 3;
-			}
-		    }
-		}
-	    }
-	    break;
-	case DISPLAY_COLORS_CMYK:
-	    if (depth == DISPLAY_DEPTH_8) {
-	    	/* Separations */
-		int x, y;
-		int cyan, magenta, yellow, black;
-		unsigned char *s, *d;
-		int vc = img->devicen[0].visible;
-		int vm = img->devicen[1].visible;
-		int vy = img->devicen[2].visible;
-		int vk = img->devicen[3].visible;
-		int vall = vc && vm && vy && vk;
-		int show_gray = (vc + vm + vy + vk == 1) && img->devicen_gray;
-		for (y = 0; y<img->height; y++) {
-		    s = img->buf + y * img->rowstride;
-		    d = img->rgbbuf + y * img->width * 3;
-		    for (x=0; x<img->width; x++) {
-			cyan = *s++;
-			magenta = *s++;
-			yellow = *s++;
-			black = *s++;
-			if (!vall) {
-			    if (!vc)
-				cyan = 0;
-			    if (!vm)
-				magenta = 0;
-			    if (!vy)
-				yellow = 0;
-			    if (!vk)
-				black = 0;
-			    if (show_gray) {
-				black += cyan + magenta + yellow;
-				cyan = magenta = yellow = 0;
-			    }
-			}
-			*d++ = (255-cyan)    * (255-black) / 255; /* r */
-			*d++ = (255-magenta) * (255-black) / 255; /* g */
-			*d++ = (255-yellow)  * (255-black) / 255; /* b */
-		    }
-		}
-	    }
-	    else if (depth == DISPLAY_DEPTH_1) {
-	    	/* Separations */
-		int x, y;
-		int cyan, magenta, yellow, black;
-		unsigned char *s, *d;
-		int vc = img->devicen[0].visible;
-		int vm = img->devicen[1].visible;
-		int vy = img->devicen[2].visible;
-		int vk = img->devicen[3].visible;
-		int vall = vc && vm && vy && vk;
-		int show_gray = (vc + vm + vy + vk == 1) && img->devicen_gray;
-		int value;
-		for (y = 0; y<img->height; y++) {
-		    s = img->buf + y * img->rowstride;
-		    d = img->rgbbuf + y * img->width * 3;
-		    for (x=0; x<img->width; x++) {
-			value = s[x/2];
-			if (x & 0)
-			    value >>= 4;
-			cyan = ((value >> 3) & 1) * 255;
-			magenta = ((value >> 2) & 1) * 255;
-			yellow = ((value >> 1) & 1) * 255;
-			black = (value & 1) * 255;
-			if (!vall) {
-			    if (!vc)
-				cyan = 0;
-			    if (!vm)
-				magenta = 0;
-			    if (!vy)
-				yellow = 0;
-			    if (!vk)
-				black = 0;
-			    if (show_gray) {
-				black += cyan + magenta + yellow;
-				cyan = magenta = yellow = 0;
-			    }
-			}
-			*d++ = (255-cyan)    * (255-black) / 255; /* r */
-			*d++ = (255-magenta) * (255-black) / 255; /* g */
-			*d++ = (255-yellow)  * (255-black) / 255; /* b */
-		    }
-		}
-	    }
-	    break;
-	case DISPLAY_COLORS_SEPARATION:
-	    if (depth == DISPLAY_DEPTH_8) {
-		int j;
-		int x, y;
-		unsigned char *s, *d;
-		int cyan, magenta, yellow, black;
-		int num_comp = 0;
-		int value;
-		int num_visible = 0;
-		int show_gray = 0;
-	        IMAGE_DEVICEN *devicen = img->devicen;
-		for (j=0; j<IMAGE_DEVICEN_MAX; j++) {
-		    if (img->devicen[j].used) {
-		       num_comp = j+1;
-		       if (img->devicen[j].visible)
-			    num_visible++;
-		    }
-		}
-		if ((num_visible == 1) && img->devicen_gray)
-		    show_gray = 1;
-
-		for (y = 0; y<img->height; y++) {
-		    s = img->buf + y * img->rowstride;
-		    d = img->rgbbuf + y * img->width * 3;
-		    for (x=0; x<img->width; x++) {
-			cyan = magenta = yellow = black = 0;
-			if (show_gray) {
-			    for (j=0; j<num_comp; j++) {
-				devicen = &img->devicen[j];
-				if (devicen->visible && devicen->used)
-				    black += s[j];
-			    }
-			}
-			else {
-			    for (j=0; j<num_comp; j++) {
-				devicen = &img->devicen[j];
-				if (devicen->visible && devicen->used) {
-				    value = s[j];
-				    cyan    += value*devicen->cyan   /65535;
-				    magenta += value*devicen->magenta/65535;
-				    yellow  += value*devicen->yellow /65535;
-				    black   += value*devicen->black  /65535;
-				}
-			    }
-			}
-			if (cyan > 255)
-			   cyan = 255;
-			if (magenta > 255)
-			   magenta = 255;
-			if (yellow > 255)
-			   yellow = 255;
-			if (black > 255)
-			   black = 255;
-			*d++ = (255-cyan)    * (255-black) / 255; /* r */
-			*d++ = (255-magenta) * (255-black) / 255; /* g */
-			*d++ = (255-yellow)  * (255-black) / 255; /* b */
-			s += 8;
-		    }
-		}
-	    }
-	    break;
-    }
-
-    if (img->window == NULL) {
-	window_create(img);
-	window_resize(img);
-    }
-    if (!(GTK_WIDGET_FLAGS(img->window) & GTK_VISIBLE))
-	gtk_widget_show_all(img->window);
-
-    gtk_widget_draw(img->darea, NULL);
-    gtk_main_iteration_do(FALSE);
-    return 0;
-}
-
-static int display_page(void *handle, void *device, int copies, int flush)
-{
-    display_sync(handle, device);
-    return 0;
-}
-
-static int display_update(void *handle, void *device, 
-    int x, int y, int w, int h)
-{
-    /* not implemented - eventually this will be used for progressive update */
-    return 0;
-}
-
-
-static int 
-display_separation(void *handle, void *device,
-    int comp_num, const char *name,
-    unsigned short c, unsigned short m,
-    unsigned short y, unsigned short k)
-{
-    IMAGE *img = image_find(handle, device);
-    if (img == NULL)
-	return -1;
-    if ((comp_num < 0) || (comp_num > IMAGE_DEVICEN_MAX))
-	return -1;
-    img->devicen[comp_num].used = 1;
-    strncpy(img->devicen[comp_num].name, name,
-	sizeof(img->devicen[comp_num].name)-1);
-    img->devicen[comp_num].cyan    = c;
-    img->devicen[comp_num].magenta = m;
-    img->devicen[comp_num].yellow  = y;
-    img->devicen[comp_num].black   = k;
-    return 0;
-}
-
-
-/* callback structure for "display" device */
-display_callback display = { 
-    sizeof(display_callback),
-    DISPLAY_VERSION_MAJOR,
-    DISPLAY_VERSION_MINOR,
-    display_open,
-    display_preclose,
-    display_close,
-    display_presize,
-    display_size,
-    display_sync,
-    display_page,
-    display_update,
-    NULL,	/* memalloc */
-    NULL,	/* memfree */
-    display_separation
-};
-
-/*********************************************************************/
-
-int main(int argc, char *argv[])
-{
-    int exit_status;
-    int code = 1, code1;
-    void *instance;
-    int nargc;
-    char **nargv;
-    char dformat[64];
-    int exit_code;
-    gboolean use_gui;
-
-    /* Gtk initialisation */
-    gtk_set_locale();
-    use_gui = gtk_init_check(&argc, &argv);
-
-    /* insert display device parameters as first arguments */
-    sprintf(dformat, "-dDisplayFormat=%d", 
- 	    DISPLAY_COLORS_RGB | DISPLAY_ALPHA_NONE | DISPLAY_DEPTH_8 | 
-	    DISPLAY_BIGENDIAN | DISPLAY_TOPFIRST);
-    nargc = argc + 1;
-    nargv = (char **)malloc((nargc + 1) * sizeof(char *));
-    nargv[0] = argv[0];
-    nargv[1] = dformat;
-    memcpy(&nargv[2], &argv[1], argc * sizeof(char *));
-
-    /* run Ghostscript */
-    if ((code = gsapi_new_instance(&instance, NULL)) == 0) {
-        gsapi_set_stdio(instance, gsdll_stdin, gsdll_stdout, gsdll_stderr);
-	if (use_gui)
-            gsapi_set_display_callback(instance, &display);
-	code = gsapi_init_with_args(instance, nargc, nargv);
-
-	if (code == 0)
-	    code = gsapi_run_string(instance, start_string, 0, &exit_code);
-        code1 = gsapi_exit(instance);
-	if (code == 0 || code == e_Quit)
-	    code = code1;
-	if (code == e_Quit)
-	    code = 0;	/* user executed 'quit' */
-
-	gsapi_delete_instance(instance);
-    }
-
-    exit_status = 0;
-    switch (code) {
-	case 0:
-	case e_Info:
-	case e_Quit:
-	    break;
-	case e_Fatal:
-	    exit_status = 1;
-	    break;
-	default:
-	    exit_status = 255;
-    }
-
-    return exit_status;
-}
-

Deleted: trunk/gs/base/dxmainc.c
===================================================================
--- trunk/gs/base/dxmainc.c	2008-09-12 08:05:54 UTC (rev 9084)
+++ trunk/gs/base/dxmainc.c	2008-09-13 20:22:25 UTC (rev 9085)
@@ -1,112 +0,0 @@
-/* Copyright (C) 2001-2006 Artifex Software, Inc.
-   All Rights Reserved.
-  
-   This software is provided AS-IS with no warranty, either express or
-   implied.
-
-   This software is distributed under license and may not be copied, modified
-   or distributed except as expressly authorized under the terms of that
-   license.  Refer to licensing information at http://www.artifex.com/
-   or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,
-   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
-*/
-/* $Id$ */
-
-/* dxmainc.c */
-/* 
- * Ghostscript frontend which provides a console to the Ghostscript
- * shared library.  Load time linking to libgs.so 
- * This does not support the display device.  Use dxmain.c/gsx for that,
- * or modify this program to use bare Xlib calls.
- * Compile using
- *    gcc -o gsc dxmainc.c -lgs
- *
- * The ghostscript library needs to be compiled with
- *  gcc -fPIC -g -c -Wall file.c
- *  gcc -shared -Wl,-soname,libgs.so.7 -o libgs.so.7.00 file.o -lc
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#define __PROTOTYPES__
-#include "ierrors.h"
-#include "iapi.h"
-
-const char start_string[] = "systemdict /start get exec\n";
-
-static int gsdll_stdin(void *instance, char *buf, int len);
-static int gsdll_stdout(void *instance, const char *str, int len);
-static int gsdll_stdout(void *instance, const char *str, int len);
-
-/*********************************************************************/
-/* stdio functions */
-
-/* callback for reading stdin */
-/* Use async input */
-static int 
-gsdll_stdin(void *instance, char *buf, int len)
-{
-    return read(fileno(stdin), buf, len);
-}
-
-static int 
-gsdll_stdout(void *instance, const char *str, int len)
-{
-    fwrite(str, 1, len, stdout);
-    fflush(stdout);
-    return len;
-}
-
-static int 
-gsdll_stderr(void *instance, const char *str, int len)
-{
-    fwrite(str, 1, len, stderr);
-    fflush(stderr);
-    return len;
-}
-
-/*********************************************************************/
-
-int main(int argc, char *argv[])
-{
-    int exit_status;
-    int code = 1, code1;
-    void *instance;
-    int exit_code;
-
-    /* run Ghostscript */
-    if ((code = gsapi_new_instance(&instance, NULL)) == 0) {
-        gsapi_set_stdio(instance, gsdll_stdin, gsdll_stdout, gsdll_stderr);
-	code = gsapi_init_with_args(instance, argc, argv);
-
-	if (code == 0)
-	    code = gsapi_run_string(instance, start_string, 0, &exit_code);
-        code1 = gsapi_exit(instance);
-	if (code == 0 || code == e_Quit)
-	    code = code1;
-	if (code == e_Quit)
-	    code = 0;	/* user executed 'quit' */
-
-	gsapi_delete_instance(instance);
-    }
-
-    exit_status = 0;
-    switch (code) {
-	case 0:
-	case e_Info:
-	case e_Quit:
-	    break;
-	case e_Fatal:
-	    exit_status = 1;
-	    break;
-	default:
-	    exit_status = 255;
-    }
-
-    return exit_status;
-}
-

Modified: trunk/gs/base/unix-dll.mak
===================================================================
--- trunk/gs/base/unix-dll.mak	2008-09-12 08:05:54 UTC (rev 9084)
+++ trunk/gs/base/unix-dll.mak	2008-09-13 20:22:25 UTC (rev 9085)
@@ -78,11 +78,11 @@
 
 # Build the small Ghostscript loaders, with Gtk+ and without
 
-$(GSSOC_XE): $(GS_SO) $(GLSRC)$(SOC_LOADER)
-	$(GLCC) -g -o $(GSSOC_XE) $(GLSRC)dxmainc.c -L$(BINDIR) -l$(GS)
+$(GSSOC_XE): $(GS_SO) $(PSSRC)$(SOC_LOADER)
+	$(GLCC) -g -o $(GSSOC_XE) $(PSSRC)dxmainc.c -L$(BINDIR) -l$(GS)
 
-$(GSSOX_XE): $(GS_SO) $(GLSRC)$(SOC_LOADER)
-	$(GLCC) -g $(SOC_CFLAGS) -o $(GSSOX_XE) $(GLSRC)$(SOC_LOADER) \
+$(GSSOX_XE): $(GS_SO) $(PSSRC)$(SOC_LOADER)
+	$(GLCC) -g $(SOC_CFLAGS) -o $(GSSOX_XE) $(PSSRC)$(SOC_LOADER) \
 	-L$(BINDIR) -l$(GS) $(SOC_LIBS)
 
 # ------------------------- Recursive make targets ------------------------- #
@@ -123,9 +123,9 @@
 	ln -s $(GS_SONAME_MAJOR_MINOR) $(DESTDIR)$(libdir)/$(GS_SONAME)
 	$(RM_) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR)
 	ln -s $(GS_SONAME_MAJOR_MINOR) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR)
-	$(INSTALL_DATA) $(PSSRC)iapi.h $(DESTDIR)$(gsincludedir)/iapi.h
-	$(INSTALL_DATA) $(PSSRC)ierrors.h $(DESTDIR)$(gsincludedir)/ierrors.h
-	$(INSTALL_DATA) $(PSSRC)gdevdsp.h $(DESTDIR)$(gsincludedir)/gdevdsp.h
+	$(INSTALL_DATA) $(PSSRC)iapi.h $(DESTDIR)$(gsincludedir)iapi.h
+	$(INSTALL_DATA) $(PSSRC)ierrors.h $(DESTDIR)$(gsincludedir)ierrors.h
+	$(INSTALL_DATA) $(GLSRC)gdevdsp.h $(DESTDIR)$(gsincludedir)gdevdsp.h
 
 soinstall: install-so install-scripts install-data $(INSTALL_SHARED) $(INSTALL_CONTRIB)
 

Copied: trunk/gs/psi/dxmain.c (from rev 9084, trunk/gs/base/dxmain.c)


Property changes on: trunk/gs/psi/dxmain.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native

Copied: trunk/gs/psi/dxmainc.c (from rev 9084, trunk/gs/base/dxmainc.c)


Property changes on: trunk/gs/psi/dxmainc.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native



More information about the gs-cvs mailing list