xref: /plan9-contrib/sys/src/cmd/gs/src/gs.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier /* Copyright (C) 1989, 1995, 1996, 1999 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: gs.c,v 1.14 2004/09/15 19:41:01 ray Exp $ */
187dd7cddfSDavid du Colombier /* 'main' program for Ghostscript */
197dd7cddfSDavid du Colombier #include "ghost.h"
207dd7cddfSDavid du Colombier #include "imain.h"
217dd7cddfSDavid du Colombier #include "imainarg.h"
223ff48bf5SDavid du Colombier #include "iapi.h"
237dd7cddfSDavid du Colombier #include "iminst.h"
24*593dc095SDavid du Colombier #include "ierrors.h"
25*593dc095SDavid du Colombier #include "gsmalloc.h"
267dd7cddfSDavid du Colombier 
277dd7cddfSDavid du Colombier /* Define an optional array of strings for testing. */
287dd7cddfSDavid du Colombier /*#define RUN_STRINGS */
297dd7cddfSDavid du Colombier #ifdef RUN_STRINGS
307dd7cddfSDavid du Colombier private const char *run_strings[] =
317dd7cddfSDavid du Colombier {
327dd7cddfSDavid du Colombier     "2 vmreclaim /SAVE save def 2 vmreclaim",
337dd7cddfSDavid du Colombier     "(saved\n) print flush",
347dd7cddfSDavid du Colombier     "SAVE restore (restored\n) print flush 2 vmreclaim",
357dd7cddfSDavid du Colombier     "(done\n) print flush quit",
367dd7cddfSDavid du Colombier     0
377dd7cddfSDavid du Colombier };
387dd7cddfSDavid du Colombier 
397dd7cddfSDavid du Colombier #endif
407dd7cddfSDavid du Colombier 
417dd7cddfSDavid du Colombier int
main(int argc,char * argv[])427dd7cddfSDavid du Colombier main(int argc, char *argv[])
437dd7cddfSDavid du Colombier {
443ff48bf5SDavid du Colombier     int exit_status = 0;
45*593dc095SDavid du Colombier     gs_main_instance *minst = gs_main_alloc_instance(gs_malloc_init(NULL));
46*593dc095SDavid du Colombier 
477dd7cddfSDavid du Colombier     int code = gs_main_init_with_args(minst, argc, argv);
487dd7cddfSDavid du Colombier 
497dd7cddfSDavid du Colombier #ifdef RUN_STRINGS
507dd7cddfSDavid du Colombier     {				/* Run a list of strings (for testing). */
517dd7cddfSDavid du Colombier 	const char **pstr = run_strings;
527dd7cddfSDavid du Colombier 
537dd7cddfSDavid du Colombier 	for (; *pstr; ++pstr) {
547dd7cddfSDavid du Colombier 	    int exit_code;
557dd7cddfSDavid du Colombier 	    ref error_object;
567dd7cddfSDavid du Colombier 	    int code;
577dd7cddfSDavid du Colombier 
587dd7cddfSDavid du Colombier 	    fprintf(stdout, "{%s} =>\n", *pstr);
597dd7cddfSDavid du Colombier 	    fflush(stdout);
607dd7cddfSDavid du Colombier 	    code = gs_main_run_string(minst, *pstr, 0,
617dd7cddfSDavid du Colombier 				      &exit_code, &error_object);
627dd7cddfSDavid du Colombier 	    zflush(osp);
637dd7cddfSDavid du Colombier 	    fprintf(stdout, " => code = %d\n", code);
647dd7cddfSDavid du Colombier 	    fflush(stdout);
657dd7cddfSDavid du Colombier 	    if (code < 0) {
66*593dc095SDavid du Colombier 		gs_to_exit(1);
673ff48bf5SDavid du Colombier 		return 1;
687dd7cddfSDavid du Colombier 	    }
697dd7cddfSDavid du Colombier 	}
707dd7cddfSDavid du Colombier     }
717dd7cddfSDavid du Colombier #endif
727dd7cddfSDavid du Colombier 
733ff48bf5SDavid du Colombier     if (code >= 0)
743ff48bf5SDavid du Colombier 	code = gs_main_run_start(minst);
757dd7cddfSDavid du Colombier 
763ff48bf5SDavid du Colombier     exit_status = 0;
773ff48bf5SDavid du Colombier     switch (code) {
783ff48bf5SDavid du Colombier 	case 0:
793ff48bf5SDavid du Colombier 	case e_Info:
803ff48bf5SDavid du Colombier 	case e_Quit:
813ff48bf5SDavid du Colombier 	    break;
823ff48bf5SDavid du Colombier 	case e_Fatal:
833ff48bf5SDavid du Colombier 	    exit_status = 1;
843ff48bf5SDavid du Colombier 	    break;
853ff48bf5SDavid du Colombier 	default:
863ff48bf5SDavid du Colombier 	    exit_status = 255;
873ff48bf5SDavid du Colombier     }
883ff48bf5SDavid du Colombier 
89*593dc095SDavid du Colombier     gs_to_exit_with_code(minst->heap, exit_status, code);
903ff48bf5SDavid du Colombier 
91*593dc095SDavid du Colombier     switch (exit_status) {
92*593dc095SDavid du Colombier 	case 0:
93*593dc095SDavid du Colombier 	    exit_status =  exit_OK;
94*593dc095SDavid du Colombier 	    break;
95*593dc095SDavid du Colombier 	case 1:
96*593dc095SDavid du Colombier 	    exit_status =  exit_FAILED;
97*593dc095SDavid du Colombier 	    break;
98*593dc095SDavid du Colombier     }
993ff48bf5SDavid du Colombier     return exit_status;
1007dd7cddfSDavid du Colombier }
101