resources.fs 16.4 KB
Newer Older
bp's avatar
bp committed
1 2 3 4 5 6 7 8
\ Font resources                                       12nov06py

AVariable fonts
: font? ( addr u -- font/0 )  fonts >r
  BEGIN  r> @ dup  WHILE  >r
         2dup r@ cell+ cell+ count compare 0= UNTIL
  2drop r>  EXIT  THEN  nip nip ;

bp's avatar
bp committed
9
: ?font ( -- addr/0 )  >in @ '"' parse  font?  swap >in ! ;
bp's avatar
bp committed
10 11 12 13 14
: font@ ( addr -- font ) cell+ dup cell+ count
  2 pick @  IF  2drop @  EXIT  THEN
  new-font tuck swap ! ;

: >font ( font o -- )  gadget with font! endwith ;
bp's avatar
bp committed
15 16

: font-assign ( o addr -- o )  font@ over >font ;
bp's avatar
bp committed
17 18 19 20

\ Font resources                                       10apr04py

: (font" ( o -- o )
bp's avatar
bp committed
21 22
  r> dup cell+ cell+ count + aligned >r font-assign ; restrict
[defined] doNotSin [IF] doNotSin [THEN]
bp's avatar
bp committed
23 24

: font" ( "font"<"> -- )  ?font ?dup
bp's avatar
bp committed
25 26 27
  0= IF   postpone (font" fonts @ here fonts ! A, 0 , ," align
  ELSE    postpone Aliteral postpone font-assign '"' parse 2drop  THEN ;
                                           immediate restrict
bp's avatar
bp committed
28 29 30 31 32 33

: .font cr base push hex dup cell+ @ 8 .r
  space 2 cells + count type ;
: .fonts fonts LIST> .font ;

\ Font resources                                       10apr04py
bp's avatar
bp committed
34
[defined] x11 [IF]
bp's avatar
bp committed
35 36 37 38
: font16@ ( addr -- icon ) cell+ dup cell+ count
  2 pick @  IF  2drop @  EXIT  THEN
  X-font16 new tuck swap ! ;

bp's avatar
bp committed
39 40
: font16-assign ( o addr -- o )  font16@ over >font ;

bp's avatar
bp committed
41
: (font16" ( o -- o )
bp's avatar
bp committed
42 43
  r> dup cell+ cell+ count + aligned >r font16@ over >font ; restrict
[defined] doNotSin [IF] doNotSin [THEN]
bp's avatar
bp committed
44 45

: font16" ( "font"<"> -- )  ?font ?dup
bp's avatar
bp committed
46 47
  0= IF   postpone (font16" fonts @ here fonts ! A, 0 , ," align
  ELSE    postpone ALiteral postpone font16-assign '"' parse 2drop  THEN ;
bp's avatar
bp committed
48 49 50 51 52 53 54 55 56 57 58
                                            immediate restrict
[THEN]

\ File icons                                           10apr04py

AVariable icons
: icon? ( addr u -- icon/0 )  icons >r
  BEGIN  r> @ dup  WHILE  >r
         2dup r@ cell+ cell+ count compare 0= UNTIL
  2drop r>  EXIT  THEN  nip nip ;

bp's avatar
bp committed
59
: ?icon ( -- addr/0 )  >in @ '"' parse  icon?  swap >in ! ;
bp's avatar
bp committed
60 61 62 63
: icon@ ( addr -- icon ) cell+ dup cell+ count
  2 pick @  IF  2drop @  EXIT  THEN
  icon-pixmap new tuck swap ! ;

bp's avatar
bp committed
64 65
: (icon" ( -- )  r> dup cell+ cell+ count + aligned >r icon@ ; restrict
[defined] doNotSin [IF] doNotSin [THEN]
bp's avatar
bp committed
66
: (icon@ ( -- )  r> dup cell+ >r @ icon@ ;             restrict
bp's avatar
bp committed
67
[defined] doNotSin [IF] doNotSin [THEN]
bp's avatar
bp committed
68 69 70 71

\ File icons                                           10apr04py

: icon" ( "file"<"> -- )  ?icon ?dup
bp's avatar
bp committed
72
  0= IF   postpone (icon" icons @ here icons ! A, 0 , ," align
bp's avatar
bp committed
73
  ELSE    postpone (icon@ A, '"' parse 2drop  THEN ;
bp's avatar
bp committed
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
                                            immediate restrict

: 2icon" ( "file"<">"file<">" -- )
  postpone icon" postpone icon" ;            immediate restrict

: .icon cr base push hex dup cell+ @ 8 .r
  space 2 cells + count type ;
: .icons icons LIST> .icon ;
: reload-icons ( -- ) icons LIST>
  dup cell+ @ IF  cell+ dup cell+ count rot @
       icon-pixmap with assign endwith  ELSE  drop  THEN ;

\ File icons                                           26jul04py

| : ficon-does   DOES>   icon@ ;
| : ficon@-does  DOES> @ icon@ ;

: ficon: ( "name" "file" -- )  Create ?icon ?dup
  0= IF  icons @ here icons ! A, 0 , ," ficon-does
bp's avatar
bp committed
93
  ELSE   A, ficon@-does '"' parse 2drop  THEN ;
bp's avatar
bp committed
94 95 96

ficon: dot-dir icons/dot-dir"
ficon: dotdot-dir icons/dotdot-dir"
bp's avatar
bp committed
97
ficon: diro-icon icons/diropen"
bp's avatar
bp committed
98
ficon: term-w icons/script"
bp's avatar
bp committed
99 100 101
ficon: dir-icon icons/dir"
ficon: file-icon icons/file"
ficon: sym-icon icons/sym"
bp's avatar
bp committed
102 103 104

\ File icons                                           10apr04py

bp's avatar
bp committed
105 106 107
: icon-table ( -- )  Create
  DOES> ( i -- icon )  swap $1F and cells + perform ;

108
icon-table ficons
bp's avatar
bp committed
109 110 111 112 113 114 115 116
' file-icon A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
' dir-icon  A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
' file-icon A,  ' file-icon A,  ' sym-icon  A,  ' file-icon A,
' file-icon A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
' file-icon A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
' diro-icon A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
' file-icon A,  ' file-icon A,  ' sym-icon  A,  ' file-icon A,
' file-icon A,  ' file-icon A,  ' file-icon A,  ' file-icon A,
117

bp's avatar
bp committed
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
: set-pixmaps ( pm_0 .. pm_i i -- )
  1- FOR  Pixmaps I cells + !  NEXT
  redraw-all @ redraw-all on  screen draw redraw-all ! ;

\ pixmap style                                         29oct06py

ficon: dark-pm pattern/dark"
ficon: normal-pm pattern/normal"
ficon: focus-pm pattern/focus"
ficon: light-pm pattern/light"
ficon: back-pm pattern/back"
ficon: backtext-pm pattern/backtext"
: marble ( -- )
  0           focus-pm  0           normal-pm
  0           focus-pm  0           normal-pm
  light-pm    dark-pm   light-pm    dark-pm
  0           back-pm   backtext-pm normal-pm $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-w-pm pattern/dark-w"
ficon: normal-w-pm pattern/normal-w"
ficon: focus-w-pm pattern/focus-w"
ficon: light-w-pm pattern/light-w"
ficon: back-w-pm pattern/back-w"
ficon: backtext-w-pm pattern/backtext-w"
: water ( -- )
  0           focus-w-pm  0             normal-w-pm
  0           focus-w-pm  0             normal-w-pm
  light-w-pm  dark-w-pm   light-w-pm    dark-w-pm
  0           back-w-pm   backtext-w-pm normal-w-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-w1-pm pattern/dark-w1"
ficon: normal-w1-pm pattern/normal-w1"
ficon: focus-w1-pm pattern/focus-w1"
ficon: light-w1-pm pattern/light-w1"
ficon: back-w1-pm pattern/back-w1"
ficon: backtext-w1-pm pattern/backtext-w1"
: water1 ( -- )
  0           focus-w1-pm  0              normal-w1-pm
  0           focus-w1-pm  0              normal-w1-pm
  light-w1-pm dark-w1-pm   light-w1-pm    dark-w1-pm
  0           back-w1-pm   backtext-w1-pm normal-w1-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-h-pm pattern/dark-h"
ficon: normal-h-pm pattern/normal-h"
ficon: focus-h-pm pattern/focus-h"
ficon: light-h-pm pattern/light-h"
ficon: back-h-pm pattern/back-h"
ficon: backtext-h-pm pattern/backtext-h"
: wood ( -- )
  0           focus-h-pm  0             normal-h-pm
  0           focus-h-pm  0             normal-h-pm
  light-h-pm  dark-h-pm   light-h-pm    dark-h-pm
  0           back-h-pm   backtext-h-pm normal-h-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-p-pm pattern/dark-p"
ficon: normal-p-pm pattern/normal-p"
ficon: focus-p-pm pattern/focus-p"
ficon: light-p-pm pattern/light-p"
ficon: back-p-pm pattern/back-p"
ficon: backtext-p-pm pattern/backtext-p"
: paper ( -- )
  0           focus-p-pm  0             normal-p-pm
  0           focus-p-pm  0             normal-p-pm
  light-p-pm  dark-p-pm   light-p-pm    dark-p-pm
  0           back-p-pm   backtext-p-pm normal-p-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-p1-pm pattern/dark-p1"
ficon: normal-p1-pm pattern/normal-p1"
ficon: focus-p1-pm pattern/focus-p1"
ficon: light-p1-pm pattern/light-p1"
ficon: back-p1-pm pattern/back-p1"
ficon: backtext-p1-pm pattern/backtext-p1"
: paper1 ( -- )
  0            focus-p1-pm  0              normal-p1-pm
  0            focus-p1-pm  0              normal-p1-pm
  light-p1-pm  dark-p1-pm   light-p1-pm    dark-p1-pm
  0            back-p1-pm   backtext-p1-pm normal-p1-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-c-pm pattern/dark-c"
ficon: normal-c-pm pattern/normal-c"
ficon: focus-c-pm pattern/focus-c"
ficon: light-c-pm pattern/light-c"
ficon: back-c-pm pattern/back-c"
ficon: backtext-c-pm pattern/backtext-c"
: cracle ( -- )
  0           focus-c-pm  0             normal-c-pm
  0           focus-c-pm  0             normal-c-pm
  light-c-pm  dark-c-pm   light-c-pm    dark-c-pm
  0           back-c-pm   backtext-c-pm normal-c-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-m-pm pattern/dark-m"
ficon: normal-m-pm pattern/normal-m"
ficon: focus-m-pm pattern/focus-m"
ficon: light-m-pm pattern/light-m"
ficon: back-m-pm pattern/back-m"
ficon: backtext-m-pm pattern/backtext-m"
: mono ( -- )
  0           focus-m-pm  0             normal-m-pm
  0           focus-m-pm  0             normal-m-pm
  light-m-pm  dark-m-pm   light-m-pm    dark-m-pm
  0           back-m-pm   backtext-m-pm normal-m-pm
  $10 set-pixmaps ;

\ pixmap style                                         10apr04py

ficon: dark-d-pm pattern/dark-d"
ficon: normal-d-pm pattern/normal-d"
ficon: focus-d-pm pattern/focus-d"
ficon: light-d-pm pattern/light-d"
ficon: back-d-pm pattern/back-d"
ficon: backtext-d-pm pattern/backtext-d"
: mud ( -- )
  0           focus-d-pm  0             normal-d-pm
  0           focus-d-pm  0             normal-d-pm
  light-d-pm  dark-d-pm   light-d-pm    dark-d-pm
  0           back-d-pm   backtext-d-pm normal-d-pm
  $10 set-pixmaps ;

\ pixmap style                                         10mar07py
: no-pixmap ( -- ) $10 0 DO  0  LOOP $10 set-pixmaps ;
: re-color ( -- )  get-sys-colors
  screen xrc free-colors  screen xrc colors ;
: gray-colors  ( -- )  grayish  re-color no-pixmap ;
: red-colors   ( -- )  redish   re-color no-pixmap ;
: blue-colors  ( -- )  bluish   re-color no-pixmap ;
: bisque-colors ( -- ) bisquish re-color no-pixmap ;
: color-cube ( r g b -- )
  dup 2over * * $F0 > abort" too many colors"
  to blues to greens to reds re-color  reload-icons
  redraw-all dup push on  screen resized ;
\ normal font scheme                                   21jun05py
bp's avatar
bp committed
269
[defined] x11 [IF]
bp's avatar
bp committed
270
: (normal-font ( -- )  screen xrc with
bp's avatar
bp committed
271
    [defined] has-utf8 [IF]
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
	maxascii $80 = IF
	    S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso10646-1"
	    0 font!  \ normal font
	    S" -misc-fixed-medium-r-semicondensed-*-*-120-*-*-c-*-iso10646-1"
	    1 font!  \ terminal font
	    S" -adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso10646-1"
	    2 font!  \ icon font
	    S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso10646-1"
	    3 font!  \ text font
	    0" -adobe-helvetica-*-r-*-*-*-120-*-*-*-*-*-*,-misc-fixed-*-r-*-*-*-130-*-*-*-*-*-*" fontset!
	ELSE
	    S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
	    0 font!  \ normal font
	    S" -misc-fixed-medium-r-semicondensed-*-*-120-*-*-c-*-iso8859-1"
	    1 font!  \ terminal font
	    S" -adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-1"
	    2 font!  \ icon font
	    S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
	    3 font!  \ text font
	    0" -adobe-helvetica-*-r-*-*-*-120-*-*-*-*-*-*,-misc-fixed-*-r-*-*-*-130-*-*-*-*-*-*" fontset!
	THEN
    [ELSE]
	S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
	0 font!  \ normal font
	S" -misc-fixed-medium-r-semicondensed-*-*-120-*-*-c-*-iso8859-1"
	1 font!  \ terminal font
	S" -adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-1"
	2 font!  \ icon font
	S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
	3 font!  \ text font
	0" -adobe-helvetica-*-r-*-*-*-120-*-*-*-*-*-*,-misc-fixed-*-r-*-*-*-130-*-*-*-*-*-*" fontset!
    [THEN]
bp's avatar
bp committed
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359
  4 cells fontarray @ @ + off
  endwith screen !resized ;

\ large font scheme                                    16jan05py

: (large-font ( -- )  screen xrc with
  S" -adobe-helvetica-bold-r-normal-*-*-180-*-*-p-*-iso8859-1"
  0 font!   \ normal font
  S" -misc-fixed-medium-r-normal-*-*-200-*-*-c-*-iso8859-1"
  1 font!   \ terminal font
  S" -adobe-helvetica-medium-r-normal-*-*-140-*-*-p-*-iso8859-1"
  2 font!   \ icon font
  S" -adobe-helvetica-bold-r-normal-*-*-180-*-*-p-*-iso8859-1"
  3 font!   \ text font
  4 cells fontarray @ @ + off
  endwith screen !resized ;

\ chinese font scheme                                  10apr04py

: chinese-font ( -- )  screen xrc with
  S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
  0 font!   \ normal font
  S" -sony-fixed-medium-r-normal--16-*-*-*-c-*-iso8859-1"
  1 font!   \ terminal font
  S" -adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-1"
  2 font!   \ icon font
  S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
  3 font!   \ text font
  S" -isas-song ti-medium-r-normal--16-*-*-*-c-*-gb2312.1980-0"
  4 font16! \ chinese font
  endwith screen !resized ;

\ japanese font scheme                                 10apr04py

: japanese-font ( -- )  screen xrc with
  S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
  0 font!   \ normal font
  S" -sony-fixed-medium-r-normal--16-*-*-*-c-*-iso8859-1"
  1 font!   \ terminal font
  S" -adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-1"
  2 font!   \ icon font
  S" -adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1"
  3 font!   \ text font
  S" -jis-fixed-medium-r-normal--16-*-*-*-c-*-jisx0208.1983-0"
  4 font16! \ chinese font
  endwith screen !resized ;

[THEN]

\ clear-resources                                      10apr04py

: clear-icons  icons LIST>  cell+ off ;
: clear-fonts  fonts LIST>  cell+ off ;

\ fonts                                                29jul07py

bp's avatar
bp committed
360
[defined] win32 [IF]
bp's avatar
bp committed
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
: (normal-font ( -- )  screen xrc with
S" -*-Arial-medium-r-normal--15-*-*-*-p-*-iso8859-1"
     0 font!
S" -*-Courier new-medium-r-normal--15-*-*-*-c-*-iso8859-1"
     1 font!
S" -*-Arial-medium-r-normal--10-*-*-*-p-*-iso8859-1"
     2 font!
S" -*-Arial-medium-r-normal--15-*-*-*-p-*-iso8859-1"
     3 font!
  endwith screen !resized ;

\ fonts                                                29jul07py

: (large-font ( -- )  screen xrc with
S" -*-Arial-bold-r-normal--20-*-*-*-p-*-iso8859-1"
     0 font!
S" -*-Courier new-bold-r-normal--20-*-*-*-c-*-iso8859-1"
     1 font!
S" -*-Arial-medium-r-normal--12-*-*-*-p-*-iso8859-1"
     2 font!
S" -*-Arial-bold-r-normal--20-*-*-*-p-*-iso8859-1"
     3 font!
  endwith screen !resized ;                     [THEN]
patch normal-font  ' (normal-font IS normal-font
patch large-font   ' (large-font  IS large-font

\ alert                                                10apr04py

bp's avatar
bp committed
389
[defined] VFXFORTH [IF] cell [THEN]
bp's avatar
bp committed
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
User alert#
button class alertbutton
        cell var exit#          cell var 'alert#
how:    : !alert#  exit# @ 'alert# @ !  dpy close ;
        : init  ( addr len n -- )
          ( swap) exit# !   alert# 'alert# !
          ( >r) 0 ['] !alert# simple new
          -rot ( r>) super init ;
class;

\ alert icons, alert strings                           10apr04py

ficon: error-alert icons/ERROR"
ficon: fatal-alert icons/FATAL"
ficon: info-alert icons/INFO"
ficon: none-alert icons/NONE"
ficon: question-alert icons/QUESTION"
ficon: warning-alert icons/WARNING"

bp's avatar
bp committed
409 410 411
Create alert-icons
       ' error-alert A,   ' question-alert A, ' warning-alert A,
       ' fatal-alert A,   ' info-alert A,     ' none-alert A,
bp's avatar
bp committed
412 413 414 415 416 417

Create alert-titles
        ," Error!"      ," Question?"   ," Warning!"
        ," Fatal!"      ," Info"        ," None"

\ alert boxhandler                                     10aug05py
bp's avatar
bp committed
418 419 420 421 422 423
: alert-text ( $1 .. $n n -- o )  dup { n }
0 ?DO  n 2* I - 1- dup >r roll r> roll text-label new LOOP
  n vbox new ;
: alert-buttons ( $1 .. $n n -- o default )  dup { n }
  0 ?DO  n 2* I - 1- dup >r roll r> roll I alertbutton new
  LOOP  n dup pick >r hatbox new hskip
bp's avatar
bp committed
424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451
  0 [ 1 *fill ] Literal  2dup *hglue new -rot *hglue new
  rot swap 3 habox new r> ;
: make-alert ( $1 .. $n n $1 .. $m m n -- o )
  >r  alert-buttons  r> -rot  >r >r  >r  alert-text
  0 [ 1 *fill ] Literal *vglue new
  r> cells alert-icons + perform icon new
  0 [ 1 *fill ] Literal *vglue new  3 vbox new
  2skip rot 3 hbox new
  -1 [ 1 *fill ] Literal *vglue new r> 3 r> modal new panel ;

\ mousemap                                             10apr04py

minos

: mousemap ( -- )
  screen mouse drop
  ^ window with  xywh resize
      xywh  2swap 2drop p2/ p- 0max swap 0max swap
      repos sync show  endwith ;

\ Alert                                                10apr04py

: title$  ( n -- addr len )   alert-titles swap
  0 ?DO  count +  LOOP  count ;

: alert ( $1 .. $n n $1 .. $m m f -- n2 )
  screen self window new window with  dup >r make-alert
  r> title$ assign
bp's avatar
bp committed
452
[defined] x11 [IF]
453
  0" Alert" dup sp@ xrc dpy @ xwin @ rot XSetClassHint 2drop
bp's avatar
bp committed
454 455 456 457 458
[THEN]
  mousemap  stop ( dispose ) endwith  alert# @ ;

\ boxhandler                                           10apr04py

bp's avatar
bp committed
459
[defined] VFXFORTH 0= [IF]
bp's avatar
bp committed
460 461 462
Variable ?showpath  ?showpath on

| : scr# ( -- addr len ) scr @ abs extend
bp's avatar
bp committed
463
    <<# #s s"  klB" bounds  DO  I c@ hold  LOOP  #> #>> ;
bp's avatar
bp committed
464 465 466 467 468 469 470

: boxhandler  ( addr -- )  tflush
  dup count here count  ?showpath @
  IF    scratch "back 3  ELSE  2  THEN    loaderr @
  IF    >r  scr#  r> 1+ s" Cancel" s" Editor" 2
  ELSE  s"  OK " 1  THEN  0 alert >r (error
  r> 1 = IF " V" find 0= IF drop ELSE execute THEN THEN ;
bp's avatar
bp committed
471
[THEN]
bp's avatar
bp committed
472