summaryrefslogtreecommitdiffstats
path: root/tkimg/ps/tests/folder.ps
blob: 895af4b6311e0ff4246a291fea37891ede972a0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
%!PS-Adobe-3.0 EPSF-3.0
%%Title: folder.ps
%%Creator: Jan Nijtmans
%%BoundingBox: 0 615 16 627
%%Pages: 1
%%DocumentFonts:
%%EndComments
%%EndProlog
%%Page: 1 1
% remember original state
/origstate save def
% build a temporary dictionary
20 dict begin
% define space for color conversions
/grays 16 string def  % space for gray scale line
/npixls 0 def
/rgbindx 0 def
% lower left corner
0 615 translate
% size of image (on paper, in 1/72inch coords)
15.98400 12.02400 scale
% define 'colorimage' if it isn't defined
%   ('colortogray' and 'mergeprocs' come from xwd2ps
%     via xgrab)
/colorimage where   % do we know about 'colorimage'?
  { pop }           % yes: pop off the 'dict' returned
  {                 % no:  define one
    /colortogray {  % define an RGB->I function
      /rgbdata exch store    % call input 'rgbdata'
      rgbdata length 3 idiv
      /npixls exch store
      /rgbindx 0 store
      0 1 npixls 1 sub {
        grays exch
        rgbdata rgbindx       get 20 mul    % Red
        rgbdata rgbindx 1 add get 32 mul    % Green
        rgbdata rgbindx 2 add get 12 mul    % Blue
        add add 64 idiv      % I = .5G + .31R + .18B
        put
        /rgbindx rgbindx 3 add store
      } for
      grays 0 npixls getinterval
    } bind def

    % Utility procedure for colorimage operator.
    % This procedure takes two procedures off the
    % stack and merges them into a single procedure.

    /mergeprocs { % def
      dup length
      3 -1 roll
      dup
      length
      dup
      5 1 roll
      3 -1 roll
      add
      array cvx
      dup
      3 -1 roll
      0 exch
      putinterval
      dup
      4 2 roll
      putinterval
    } bind def

    /colorimage { % def
      pop pop     % remove 'false 3' operands
      {colortogray} mergeprocs
      image
    } bind def
  } ifelse          % end of 'false' case
% define the colormap
/cmap 9 string def
% load up the colormap
currentfile cmap readhexstring
ffffff 000000 f0ff80 
pop pop   % lose return values from readhexstring
% rlecmapimage expects to have 'w h bits matrix' on stack
/rlecmapimage {
  /buffer 1 string def
  /rgbval 3 string def
  /block  384 string def

  % proc to read a block from file, and return RGB data
  { currentfile buffer readhexstring pop
    /bcount exch 0 get store
    bcount 128 ge
    {  % it's a non-run block
      0 1 bcount 128 sub
      { currentfile buffer readhexstring pop pop

        % look up value in color map
        /rgbval cmap buffer 0 get 3 mul 3 getinterval store

        % and put it in position i*3 in block
        block exch 3 mul rgbval putinterval
      } for
      block  0  bcount 127 sub 3 mul  getinterval
    }

    { % else it's a run block
      currentfile buffer readhexstring pop pop

      % look up value in colormap
      /rgbval cmap buffer 0 get 3 mul 3 getinterval store

      0 1 bcount { block exch 3 mul rgbval putinterval } for

      block 0 bcount 1 add 3 mul getinterval
    } ifelse
  } % end of proc
  false 3 colorimage
} bind def
16 12 8			% dimensions of data
[16 0 0 -12 0 12]		% mapping matrix
rlecmapimage
020003010800
010081010202028101000600
8200010204028101000500
0c010200
81010209028101000100
81010209028101000100
81010209028101000100
81010209028101000100
81010209028101000100
81010209028101000100
81010209028101000100
0c010200
%
showpage
% stop using temporary dictionary
end
% restore original state
origstate restore
%%Trailer