blob: 3d4dda9e21c42dc731f13d5f49e7ea44e5f8b37e (
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
|
% bool values
/true 0 0 eq def
/false 0 0 ne def
% type values
/t_none 0 def
/t_int 1 def
/t_unsigned 2 def
/t_bool 3 def
/t_string 4 def
/t_code 5 def
/t_ret 6 def
/t_prim 7 def
/t_sec 8 def
/t_dict_idx 9 def
/t_array 10 def
/t_end 11 def
/t_ptr 12 def
/.value { t_int settype } def
/.undef 0 t_none settype def
/.end 0 t_end settype def
% Convert object to pointer.
%
% ( obj ) ==> ( ptr )
%
/cvp { t_ptr settype } def
/cvs { t_string settype } def
% ( size ) ==> ( string )
/string {
1 add malloc cvs
} def
% ( obj_1 ... obj_n string_1 string_2 ) ==> ( )
%
/sprintf {
dup cvp length exch snprintf
} def
% ( number ) ==> ( )
%
/number.print {
32 string
exch over
"%d" exch sprintf
dup show
free
} def
% Allocate and define a new color.
%
% ( palette ) ==> ( color )
%
/newcolor {
colorbits 8 le {
newcolor.count .undef eq { /newcolor.count 0 def } if
newcolor.count
dup rot setpalette
/newcolor.count newcolor.count 1 add def
} if
def
} def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% ( color0 color1 width height ) ==> ( )
/drawborder {
currentpoint /db.y0 exch def /db.x0 exch def
/db.y1 exch 1 sub db.y0 add def
/db.x1 exch 1 sub db.x0 add def
/db.col1 exch def
/db.col0 exch def
db.x0 db.y1 moveto
db.col0 setcolor
db.x0 db.y0 lineto db.x1 db.y0 lineto
db.col1 setcolor
db.x1 db.y1 lineto db.x0 db.y1 lineto
} def
640 480 8 findmode setmode not { false .end } if
"16x16.fnt" findfile setfont
% "sky.jpg" findfile setimage
% 0 0 moveto 0 0 image.size image
/black 0x000000 newcolor
/white 0xffffff newcolor
/gray 0x808080 newcolor
/blue 0x0000c0 newcolor
/green 0x00c000 newcolor
/red 0xf00000 newcolor
/yellow 0xe0e000 newcolor
/x 300 def
/y 100 def
/w 90 def
/h 50 def
/msg 200 string def
{
blue setcolor
0 0 moveto screen.size fillrect
h w y x "x %d, y %d, w %d, h %d" msg sprintf
0 0 moveto white setcolor msg show
x 1 sub y 1 sub moveto white white w 2 add h 2 add drawborder
green setcolor
x y moveto w h fillrect
x 1 add y 1 add moveto yellow yellow w 2 sub h 2 sub drawborder
x y moveto w h savescreen /s0 exch def
x 1 sub y 1 sub 200 add moveto red red w 2 add h 2 add drawborder
x y 200 add moveto s0 restorescreen
trace
/w w 1 sub def
} loop
|