home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / Vyzkuste / gs / gs650w32.exe / gs6.50 / lib / gs_dscp.ps < prev    next >
Text File  |  2000-12-05  |  4KB  |  113 lines

  1. %  Copyright (C) 2000 Artifex Software Inc.   All rights reserved.
  2. % This file is part of AFPL Ghostscript.
  3. % AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author or
  4. % distributor accepts any responsibility for the consequences of using it, or
  5. % for whether it serves any particular purpose or works at all, unless he or
  6. % she says so in writing.  Refer to the Aladdin Free Public License (the
  7. % "License") for full details.
  8. % Every copy of AFPL Ghostscript must include a copy of the License, normally
  9. % in a plain ASCII text file named PUBLIC.  The License grants you the right
  10. % to copy, modify and redistribute AFPL Ghostscript, but only under certain
  11. % conditions described in the License.  Among other things, the License
  12. % requires that the copyright notice and this notice be preserved on all
  13. % copies.
  14.  
  15. % $Id: gs_dscp.ps,v 1.2.2.1 2000/11/09 23:47:04 rayjj Exp $
  16. %  Postscript interface routines to DSC parser
  17.  
  18.  
  19. /send_orientation {            % <orientation> send_orienation -
  20.   << /Orientation 2 index >> setpagedevice pop
  21. } bind def
  22.  
  23. % This dictionary contains local handlers for DSC comments.  See header in zdscpars.c
  24. % <dsc_dict> handler <dsc_dict>
  25. /DSCparseprocs mark
  26.    /Orientation { dup /Orientation get send_orientation } bind
  27.    /PageOrientation { dup /PageOrientation .knownget { send_orientation }
  28.               { dup /Orientation .knownget { send_orientation } if }
  29.               ifelse } bind
  30.    /Page { dup /Orientation .knownget { send_orientation } if } bind
  31.    /NOP { } bind
  32. .dicttomark readonly def
  33.  
  34. % This procedure is called whenever a DSC comment is found by the interpreter
  35. /do_parse_dsc false def
  36. /parse_dsc {                % <file> <DSC string> [<prev proc>]
  37.                     %   parse_dsc -
  38.     % Run any previously installed parser.
  39.   0 get dup null eq { pop } { 3 copy exec pop } ifelse
  40.     % Check whether this parser is disabled.
  41.   do_parse_dsc {
  42.     dsc_dict exch            % <file> <dict> <string>
  43.     .parse_dsc_comments            % <file> <dict> <name>
  44.     //DSCparseprocs exch .knownget {
  45.       exec                % execute any local handler
  46.     } if
  47.   } if
  48.   pop pop                % remove file, dict
  49. } bind def
  50.  
  51.  
  52. % Check whether the currently installed parser is the one defined in this file.
  53. /.using_parse_dsc {            % - .using_parse_dsc <proc> <using?>
  54.   currentuserparams /ProcessDSCComment get
  55.   dup null eq { pop {{//null} //parse_dsc exec} } if
  56.   dup length 3 eq {
  57.     dup dup length 1 sub get /parse_dsc load eq
  58.   } {
  59.     false
  60.   } ifelse
  61. } bind def
  62.  
  63. % Establish a binding for dsc_dict.
  64. userdict /dsc_dict null put
  65.  
  66. % - dsc_init -
  67. /dsc_init {                % Initialize DSC parser
  68.   currentglobal true setglobal
  69.   /dsc_dict 50 dict store        % Size must be large enough for all DSC values
  70.   dsc_dict .initialize_dsc_parser
  71.   .using_parse_dsc {
  72.     % Already using this parser.
  73.     pop
  74.   } {
  75.     % Encapsulate the previous parser.  We know it is in global VM:
  76.     % allocate the new one in global VM as well.
  77.     1 array astore
  78.     /parse_dsc load /exec load 3 array astore cvx readonly
  79.     << /ProcessDSCComment 3 -1 roll >>
  80.     setuserparams
  81.   } ifelse
  82.   /do_parse_dsc true store
  83.   setglobal
  84. } bind def
  85.  
  86.  
  87. % Enable the DSC parser defined in this file.
  88. % - enable_dsc -
  89. /enable_dsc {
  90.   dsc_init
  91. } bind def
  92.  
  93. % Disable the DSC parser defined in this file.
  94. % - disable_dsc -
  95. /disable_dsc {
  96.     % There might be another parser installed: if so, restore it.
  97.     % (If it has encapsulated our parser, we can't.)
  98.   .using_parse_dsc {
  99.     % Restore the parser we encapsulated.
  100.     0 get 0 get
  101.     currentglobal true setglobal exch
  102.     << /ProcessDSCComment 3 -1 roll >>
  103.     exch setglobal setuserparams
  104.   } {
  105.     pop
  106.   } ifelse
  107.     % If we couldn't restore the old parser, at least disable ours.
  108.   /do_parse_dsc false store
  109. } bind def
  110.