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