/usr/share/texmf-texlive/dvips/pst-bezier/pst-bezier.pro is in texlive-pstricks 2009-10ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | %% $Id: pst-bezier.pro 87 2009-01-29 10:37:06Z herbert $
%% PostScript prologue for pstricks-add.tex.
%%
%% Version 0.01, 2009/01/29
%%
%% For distribution, see pst-bezier.tex.
%%
%%
tx@Dict begin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Auxiliary routines:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% [x1 y1] [x2 y2] -> [ x1+y1 x2+y2 ]
/AddArrays2d {
[ 3 1 roll %% Get the operands
2 copy
0 get exch
0 get add %% first component finished
%% second component:
3 1 roll
1 get exch
1 get add ]} bind def
%% [x1 y1] [x2 y2] -> [ x1-x2 y1-y2 ]
/SubArrays2d {
[ 3 1 roll exch
2 copy
0 get exch 0 get sub
3 1 roll
1 get exch
1 get sub ] } bind def
%% [x y] s -> [s*x s*y]
/ScaleArray2d {
[ 3 1 roll exch
2 copy
0 get mul
3 1 roll
1 get mul
] } bind def
%% << [Array of Bezier splines] /K 1 >> -> empty stack
%% Thereby, a Bezier spline is described by an array:
%% [x0 y0 x1 y1 x2 y2 x3 y3 sl sr]
%% (x0,y0) is the right control point
/pstBCurve {
begin %% LaTeX provides the dictionary (see above comments)
1 1 Splines length 1 sub {
/K exch def % K is the index of the spline.
%%
%% First control point:
Splines K get 0 get dup %% switch the cases /n and /s...
/n eq { %% `not specified' -> automatically computed
Splines K get 0 %% l(k) is going to be set...
%% | -> p(k-1)+(p(k)-p(k-2))*sl(k)
Splines K get 4 2 getinterval
Splines K 2 sub get 4 2 getinterval
SubArrays2d
Splines K get 6 get ScaleArray2d
Splines K 1 sub get 4 2 getinterval
AddArrays2d
putinterval %% ...setting l(k)
} if
/s eq { %% `symmetric' -> compute from r(k-1)
Splines K get 0 %% l(k):=
%% | -> 2*p(k-1)-r(k-1)
Splines K 1 sub get 4 2 getinterval 2 ScaleArray2d
Splines K 1 sub get 2 2 getinterval SubArrays2d
putinterval %%
} if
%% Second control point:
Splines K get 2 get dup %% (cases /n and /s)
/n eq { %% `not specified' -> automatically computed
Splines K get 2
%% | -> p(k)+(p(k+1)-p(k-1))*sr(k)
Splines K 1 sub get 4 2 getinterval
Splines K 1 add get 4 2 getinterval
SubArrays2d
Splines K get 7 get ScaleArray2d
Splines K get 4 2 getinterval
AddArrays2d
putinterval
} if
/s eq { %% `symmetric' -> compute from l(k+1)
Splines K get 2
%% | -> 2*p(k)-l(k+1)
Splines K get 4 2 getinterval 2 ScaleArray2d
Splines K 1 add get 0 2 getinterval SubArrays2d
putinterval
} if
} for %% all splines.
%%
%% The current point is already correctly set by the LaTeX macro.
%% So get ride of the 0th dummy spline.
Splines 1 Splines length 1 sub getinterval {%
aload pop pop pop %% get ride of the array itself and the scaling factor.
curveto% now the actual spline is on the stack...
} forall %% splines.
/Points [ %% now save the points for the showpoints-feature.
Splines 0 get 4 2 getinterval aload pop
Splines 1 Splines length 1 sub getinterval { aload pop pop pop } forall
]
end def %% Put points in the top dictionary
} bind def
end %% tx@Dict
|