Category : DeskTop Publishing in the 1990's
Archive   : GS252INI.ZIP
Filename : GS_LEV2.PS

 
Output of file : GS_LEV2.PS contained in archive : GS252INI.ZIP
% Copyright (C) 1990, 1991 Aladdin Enterprises. All rights reserved.
% Distributed by Free Software Foundation, Inc.
%
% This file is part of Ghostscript.
%
% Ghostscript is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
% to anyone for the consequences of using it or for whether it serves any
% particular purpose or works at all, unless he says so in writing. Refer
% to the Ghostscript General Public License for full details.
%
% Everyone is granted permission to copy, modify and redistribute
% Ghostscript, but only under the conditions described in the Ghostscript
% General Public License. A copy of this license is supposed to have been
% given to you along with Ghostscript so you can know your rights and
% responsibilities. It should be in a file named COPYING. Among other
% things, the copyright notice and this notice must be preserved on all
% copies.

% Initialization file for Ghostscript Level 2 functions.
% When this is run, systemdict is still writable.

% ------ Miscellaneous ------ %

% We aren't fully Level 2 compatible yet!
%/languagelevel 2 def

% ------ Painting ------ %

% A straightforward definition of execform that doesn't actually
% do any caching.
/execform
{ dup /Implementation known not
{ dup /FormType get 1 ne { /rangecheck signalerror } if
dup /Implementation null put readonly
} if
gsave dup /Matrix get concat
dup /BBox get aload pop
exch 3 index sub exch 2 index sub rectclip
dup /PaintProc get exec
grestore
} odef

% Recognize the dictionary form of image and imagemask.

/image
{ dup type /dicttype eq { .dictimage } { image } ifelse
} bind odef % bind now to incorporate old image

/imagemask
{ dup type /dicttype eq { .dictimagemask } { imagemask } ifelse
} bind odef % bind now to incorporate old imagemask

% ------ Virtual memory ------ %

/currentglobal /currentshared load def
/gcheck /scheck load def
/globaldict /shareddict load def

% ------ Resources ------ %

% Currently, we don't implement resource unloading or global/local
% instance sets, and resourceforall only enumerates loaded instances.
% The standard implementation of resource categories is
% simply to have another entry in the resource dictionary, called Instances,
% that keeps track of all the instances.

% Note that the dictionary that defines a resource category is stored
% in global memory. The PostScript manual says that each category must
% manage global and local instances separately. However, objects in
% global memory can't reference objects in local memory. This means
% that the resource category dictionary, which would otherwise be the
% obvious place to keep track of the instances, can't be used to keep
% track of local instances. Instead, there must be a parallel
% structure in local memory for each resource category. Needless to
% say, we haven't implemented this yet.

% Define the Category category, except for most of the procedures.
% The dictionary we're about to create will become the Category
% category definition dictionary.

10 dict begin
/Category /Category def
/CheckResource
{ true
{ /DefineResource /FindResource /ResourceForAll /ResourceStatus
/UndefineResource }
{ 2 index exch known and }
forall exch pop } bind def
/DefineResource
{ dup CheckResource
{ dup /Category 3 index put Instances 3 1 roll put }
{ /typecheck signalerror }
ifelse } bind def
/FindResource % temporary
{ Instances exch get } bind def
/Instances 25 dict def
/InstanceType /dicttype def

Instances /Category currentdict put
Instances end begin % so we can name the Category definition

% Define the resource operators.

mark
/defineresource
{ /Category findresource dup begin
/InstanceType known
{ dup type InstanceType ne
{ dup type /packedarraytype eq InstanceType /arraytype eq and
not { /typecheck signalerror } if } if } if
DefineResource end
}
/findresource
{ dup /Category eq
{ pop //Category } { /Category findresource } ifelse
begin FindResource end }
/resourceforall
{ /Category findresource begin ResourceForAll end }
/resourcestatus
{ /Category findresource begin ResourceStatus end }
/undefineresource
{ /Category findresource begin UndefineResource end }
end % Instances
counttomark 2 idiv { bind def } repeat pop

% Define the Generic category.

12 dict dup begin
/Instances 0 dict def
/CheckResource % not a standard entry
{ pop true } def
/DefineResource
{ dup CheckResource
{ Instances 3 1 roll put }
{ /typecheck signalerror }
ifelse
} bind def
/FindResource
{ dup ResourceStatus
{ pop 1 gt { dup ResourceFile run } if
Instances exch get }
{ /undefinedresource signalerror }
ifelse } bind def
/ResourceFile % not a standard entry
{ currentdict /ResourceFileName get 100 string exch exec
(r) file } bind def
/ResourceForAll
{ % We construct a new procedure so we don't have to use
% static resources to hold the iteration state.
3 1 roll cvlit 3 1 roll cvlit 3 1 roll
{ % Stack contains: key, instance, template, proc, scratch
4 index 3 index stringmatch
{ 4 index type dup /stringtype eq exch /nametype eq or
{ 4 index exch cvs exch 5 2 roll pop pop pop }
{ pop exch pop exch pop }
ifelse exec }
{ 5 { pop } repeat }
ifelse
} /exec cvx 5 packedarray cvx
Instances exch forall } bind def
/ResourceStatus
{ dup Instances exch known
{ pop 1 0 true }
{ mark exch { ResourceFile } stopped
{ cleartomark false } { closefile cleartomark 0 true }
ifelse
} ifelse
} bind def
/UndefineResource
{ Instances exch undef } bind def
end
/Generic exch /Category defineresource

% Fill in the rest of the Category category.
/Category /Category findresource dup
/Generic /Category findresource begin
{ /FindResource /ResourceStatus /ResourceForAll }
{ dup load put dup } forall
pop pop end


% Define the fixed categories.

7 dict begin % 5 procedures, Category, Instances
/DefineResource
{ /invalidaccess signalerror } bind def
/FindResource
{ Instances exch get } bind def
/ResourceForAll
/Generic /Category findresource /ResourceForAll get def
/ResourceStatus
{ Instances exch known { 0 0 true } { false } ifelse } bind def
/UndefineResource
{ /invalidaccess signalerror } bind def

mark
% Things other than types
/ColorSpaceFamily {/DeviceRGB /DeviceGray}
/Emulator {}
/Filter
[ .filterdict { pop } forall ]
/IODevice {(%os%)}
% Types
/ColorRenderingType {}
/FMapType {2 3 4 5 6 7 8}
/FontType {1 3}
/FormType {1}
/HalftoneType {}
/ImageType {1}
/PatternType {}
counttomark 2 idiv
{ currentdict dup maxlength dict copy begin
dup length dict dup begin exch { dup def } forall end readonly
/Instances exch def
currentdict /Category defineresource
currentdict end readonly pop
} repeat pop end

% Define the other built-in categories.

mark
/ColorRendering /dicttype /ColorSpace /arraytype /Encoding /arraytype
/Font /dicttype /Form /dicttype /Halftone /dicttype /Pattern /dicttype
/ProcSet /dicttype
counttomark 2 idiv
{ /Generic /Category findresource dup maxlength dict copy begin
/InstanceType exch def
/Instances 10 dict def
currentdict end /Category defineresource
} repeat pop

% Complete the Encoding category.

/findencoding
{ /Encoding findresource } bind def
/ISOLatin1Encoding ISOLatin1Encoding /Encoding defineresource
/StandardEncoding StandardEncoding /Encoding defineresource
/SymbolEncoding SymbolEncoding /Encoding defineresource

% Complete the Font category.
% INCOMPLETE.

/Font /Category findresource begin
/..definefont /definefont load def
/..findfont /findfont load def
/DefineResource
{ 2 copy ..definefont exch pop 2 copy
Instances 3 1 roll put exch pop
} bind def
/FindResource
{ ..findfont
} bind def
end

/definefont
{ /Font defineresource } bind def
/findfont
{ /Font findresource } bind def
/undefinefont
{ /Font undefineresource } bind def


  3 Responses to “Category : DeskTop Publishing in the 1990's
Archive   : GS252INI.ZIP
Filename : GS_LEV2.PS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/