henesyinit from p9fd787fda5 years agoHistory
182 lines · 4.9 KB · Text
RawDownload
%    Copyright (C) 1994, 1996, 1999 Aladdin Enterprises.  All rights reserved.% % This file is part of Aladdin Ghostscript.% % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author% or distributor accepts any responsibility for the consequences of using it,% or for whether it serves any particular purpose or works at all, unless he% or she says so in writing.  Refer to the Aladdin Ghostscript Free Public% License (the "License") for full details.% % Every copy of Aladdin Ghostscript must include a copy of the License,% normally in a plain ASCII text file named PUBLIC.  The License grants you% the right to copy, modify and redistribute Aladdin Ghostscript, but only% under certain conditions described in the License.  Among other things, the% License requires that the copyright notice and this notice be preserved on% all copies. % $Id: gs_cmdl.ps,v 1.1 2000/03/09 08:40:39 lpd Exp $% Parse and execute the command line.% C code handles the following switches: -h/-? -I -M -v /cmddict 50 dict defcmddict begin % ---------------- Utility procedures ---------------- % % Get the next argument from the parsed argument list./nextarg		% - nextarg <arg> true			% - nextarg false { argv length 0 eq    { false }    { argv dup 0 get exch dup length 1 sub 1 exch getinterval /argv exch def }   ifelse } bind def % Run a file, under job control if implemented./runjob			% <file> runjob - { end		% cmddict   /startjob where { pop false () startjob pop }   run   //cmddict begin } bind def/runfilejob		% <filename> runfilejob - { findlibfile { exch pop } { (r) file } runjob } bind def % Expand arguments.  Free variables: expand@./expandarg		% <string> expandarg <args...> { dup () eq    { pop    }    { dup dup (--) eq exch (-+) eq or       { pop /expand@ false def       }       { expand@ { (@) anchorsearch } { false } ifelse	  { pop findlibfile	     { exch pop }	     { (r) file }		% let the error happen	    expandargfile	  }	 if       }      ifelse    } } bind def/expandargfile		% <file> expandargfile <args...> { [ exch cvlit    { token not { exit } if      dup type /stringtype ne { =string cvs dup length string copy } if      expandarg    }   /exec cvx   ] cvx loop } bind def % ---------------- Recognized switches ---------------- % % Switches with arguments are defined as <x>;% switches without arguments are defined as -<x>. % Switches without arguments/-- { nextarg not    { (-- and -+ require a file name.) = flush }    { //systemdict /ARGUMENTS argv put /argv [] def runjob }   ifelse } bind def/-+ /-- load def/-@ /-- load def/-A { (@) Z } bind def/-c {  { argv length 0 eq { exit } if      argv 0 get (-) anchorsearch { pop pop exit } if      pop nextarg token       { exch pop			% Probably should check for empty.	 end exec //cmddict begin       }      if    }   loop } bind def/-e { (#) Z } bind def/-E /-e load def/-f { } def/-q { //systemdict /QUIET true put } bind def % Switches with arguments/d { (=) search not { (#) search not { () exch dup } if } if   exch pop cvn dup where    { pop (Redefining ) print print ( is not allowed.) = flush pop }    { exch token       { exch pop }		% Probably should check for empty.       { true }      ifelse      //systemdict 3 1 roll put    }   ifelse } bind def/D /d load def/f { dup length 0 ne { runfilejob } if } bind def/g { (x) search { cvi pop exch cvi } { cvi dup } ifelse   //systemdict begin /DEVICEHEIGHT exch def /DEVICEWIDTH exch def end } bind def/r { (x) search { cvr pop exch cvr } { cvr dup } ifelse   //systemdict begin /DEVICEYRESOLUTION exch def /DEVICEXRESOLUTION exch def end } bind def/s { (=) search not { (#) search not { () exch dup } if } if   exch pop cvn dup where { pop dup load } { () } ifelse   type /stringtype ne    { (Redefining ) print print ( is not allowed.) = flush pop }    { exch //systemdict 3 1 roll put }   ifelse } bind def/S /s load def/Z { true .setdebug } bind def % ---------------- Main program ---------------- % % We process the command line in two passes.  In the first pass,% we read and expand any @-files as necessary.  The second pass% does the real work. /cmdstart { //cmddict begin   /expand@ true def   [		% Process the GS_OPTIONS environment variable.   (GS_OPTIONS) getenv { 0 () /SubFileDecode filter expandargfile } if		% Process the actual command line.   .getargv { expandarg } forall   ] readonly /argv exch def		% Now interpret the commands.    { nextarg not { exit } if      dup 0 get (-) 0 get eq       { dup length 1 eq	  { pop (%stdin) (r) file runjob	  }	  { dup length 2 gt	     { dup dup length 2 sub 2 exch getinterval exch 1 1 getinterval }	    if currentdict .knownget	     { exec	     }	     { (Ignoring unknown switch ) print	       dup length 1 eq { (-) print print } if print	       () = flush	     }	    ifelse	  }	 ifelse       }       { runfilejob       }      ifelse    }   loop end } bind def end		% cmddict