The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
%!PS-Adobe-2.0 EPSF-1.2
%%BoundingBox: -5 90 392 315
%%Creator: Gisle Aas (Copyright 1998), Reini Urban (Copyright 2009,2014)

%require "common.ps"
%require "sv.ps"
%require "box.ps"
%require "rect.ps"
%require "mws.ps"
%require "ptr.ps"
%require "he.ps"
%require "chararray.ps"
%require "break.ps"

0 300 sv
% arrow from sv_u.pvx
/Helvetica-Bold 9 SF
5 262 M (ARRAY) show
42 265 47 265 47 310 135 310 135 300 ptrn

/Courier 8 SF
40  302 M (hv) rshow
105 302 M (xpvhv) rshow

% unused xnv_u
% gsave 0.8 setgray 55 285 105 300 rect F grestore
55 300 2 4 newbox
55 300 6 box

/Helvetica 11 SF
60 303 15 sub M
[(GvSTASH)(FILL)(MAX)(KEYS)(MAGIC)(STASH)] {
    gsave
    currentpoint 30 mws pop
    grestore
    0 -15 RM
} forall

% Some pointer arrows
% 97.5 292.5 130 ptr1  % ARRAY
%97.5 217.5 130 ptr1 % MAGIC
%97.5 202.5 130 ptr1 % STASH

% HE*[] box
gsave
   0.8 setgray
   130 285 140 300 rect F
   150 285 240 300 rect F
grestore
gsave
   yellow
   240 285 250 300 rect F
grestore

0.5 setlinewidth
140 10 240 {
   dup dup 285 M 300 L S
   5 sub 292.5 ptrn % NULL pointer marks
} for
245 292.5 ptrn % last NULL pointer

1 LW
130 285 250 300 rect S

/Courier 8 SF
240 302 M (HE*[]) rshow
242 302 M (MAX+1) show

183 300 break

% HvAUX at HE* max+1
% (RITER)(EITER)(PMROOT)(NAME)
% xpvhv_aux box
275 300 1 5 newbox
275 300 5 box
325 302 M (xpvhv_aux) rshow

/Helvetica 11 SF
280 303 15 sub M
[(NAME)(BACKREFS)(EITER)(RITER)(MROMETA)] {
    gsave
    currentpoint 40 mws pop
    grestore
    0 -15 RM
} forall
% Pointer to aux
245 292.5 275 292.5 ptrn

gsave 0.3 setgray [4 3] 2 setdash
  325 262.5 340 262.5 340 92
  115 92 115 245 130 245 ptrn  % EITER
grestore

325 292.5 330 292.5 330 210 277 210 277 200 ptrn % NAME
gsave
   275 200 translate 0.8 dup scale
   8 2 M
   /Courier 7 SF
   (HvNAME_HEK) show
   0 -2 (Foo::Bar) hek
grestore

% Pointer to first HE column
145 292.5 145 250 ptrn

gsave
  130 250 translate
  0.7 dup scale

  0 0 (abc) true he
  0 -70 (foobar) true he
  0 -140 (baz) false he
grestore


% Pointer to second HE column
% 225 292.5 255 250 ptrn
% gsave
%  245 250 translate
%  0.4 dup scale
%  0 0 (foo) true he
%  0 -70 (bar) false he
% grestore

% Illustrate FILL/MAX
gsave

% white background for the red arrow
1 setgray
130 276 230 279 rect fill  %FILL
130 261 240 264 rect fill  %MAX

red
0.5 setlinewidth

% FILL stuff
140 275 M 140 280 L
140 277.5 M 150 277.5 L
150 275 M 150 280 L

%220 275 M 220 280 L
%220 277.5 M 230 277.5 L
%230 275 M 230 280 L

% MAX length
130 265 M 130 260 L
130 262.5 M 240 262.5 L
240 265 M 240 260 L
stroke
240 262.5 M 236 264 L 236 261 L closepath fill
%130 262.5 M 134 264 L 134 261 L closepath fill
grestore