Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 2001 Ghostgum Software Pty Ltd.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: dxmainc.c,v 1.10 2004/08/19 21:52:20 ghostgum Exp $ */
18
 
19
/* dxmainc.c */
20
/* 
21
 * Ghostscript frontend which provides a console to the Ghostscript
22
 * shared library.  Load time linking to libgs.so 
23
 * This does not support the display device.  Use dxmain.c/gsx for that,
24
 * or modify this program to use bare Xlib calls.
25
 * Compile using
26
 *    gcc -o gsc dxmainc.c -lgs
27
 *
28
 * The ghostscript library needs to be compiled with
29
 *  gcc -fPIC -g -c -Wall file.c
30
 *  gcc -shared -Wl,-soname,libgs.so.7 -o libgs.so.7.00 file.o -lc
31
 */
32
 
33
#include <stdio.h>
34
#include <stdlib.h>
35
#include <string.h>
36
#include <unistd.h>
37
#include <fcntl.h>
38
#include <errno.h>
39
#define __PROTOTYPES__
40
#include "ierrors.h"
41
#include "iapi.h"
42
 
43
const char start_string[] = "systemdict /start get exec\n";
44
 
45
static int gsdll_stdin(void *instance, char *buf, int len);
46
static int gsdll_stdout(void *instance, const char *str, int len);
47
static int gsdll_stdout(void *instance, const char *str, int len);
48
 
49
/*********************************************************************/
50
/* stdio functions */
51
 
52
/* callback for reading stdin */
53
/* Use async input */
54
static int 
55
gsdll_stdin(void *instance, char *buf, int len)
56
{
57
    return read(fileno(stdin), buf, len);
58
}
59
 
60
static int 
61
gsdll_stdout(void *instance, const char *str, int len)
62
{
63
    fwrite(str, 1, len, stdout);
64
    fflush(stdout);
65
    return len;
66
}
67
 
68
static int 
69
gsdll_stderr(void *instance, const char *str, int len)
70
{
71
    fwrite(str, 1, len, stderr);
72
    fflush(stderr);
73
    return len;
74
}
75
 
76
/*********************************************************************/
77
 
78
int main(int argc, char *argv[])
79
{
80
    int exit_status;
81
    int code = 1, code1;
82
    void *instance;
83
    int exit_code;
84
 
85
    /* run Ghostscript */
86
    if ((code = gsapi_new_instance(&instance, NULL)) == 0) {
87
        gsapi_set_stdio(instance, gsdll_stdin, gsdll_stdout, gsdll_stderr);
88
	code = gsapi_init_with_args(instance, argc, argv);
89
 
90
	if (code == 0)
91
	    code = gsapi_run_string(instance, start_string, 0, &exit_code);
92
        code1 = gsapi_exit(instance);
93
	if (code == 0 || code == e_Quit)
94
	    code = code1;
95
	if (code == e_Quit)
96
	    code = 0;	/* user executed 'quit' */
97
 
98
	gsapi_delete_instance(instance);
99
    }
100
 
101
    exit_status = 0;
102
    switch (code) {
103
	case 0:
104
	case e_Info:
105
	case e_Quit:
106
	    break;
107
	case e_Fatal:
108
	    exit_status = 1;
109
	    break;
110
	default:
111
	    exit_status = 255;
112
    }
113
 
114
    return exit_status;
115
}
116