File: Dice.itcl

package info (click to toggle)
coccinella 0.96.20-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, sid
  • size: 13,184 kB
  • sloc: tcl: 124,744; xml: 206; makefile: 66; sh: 62
file content (682 lines) | stat: -rw-r--r-- 28,504 bytes parent folder | download | duplicates (4)
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
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
269
270
271
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
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
360
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
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
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
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
# Dice.itcl 
# 
#       Creates a dice in a whiteboard canvas. 
# 
# 
# $Id: Dice.itcl,v 1.8 2006-04-13 10:45:05 matben Exp $

namespace eval Dice {
    
    variable infoScript [info script]
}

# This file may be sourced more than once; protect for this!
# Is there a better way? Ugly!

if {[itcl::find classes Dice] == ""} {
    
    class Dice {
	
	inherit BaseWBCanvas
	    
	# -----------------------
	# Private static methods.
	# -----------------------

	private {
	    proc Init {}
	    proc MakeImages {}
	    proc InitRand {}
	    proc UnifRand {x}
	    proc Handler {w type cmd args}
	    proc GetThisFromDiceUtag {utag}
	}

	# ------------------
	# Class constructor.
	# ------------------
	
	protected {
	    constructor {w x y args} {$this BaseWBCanvas::constructor $w} {}
	    destructor {}
	}
	
	# --------------
	# Class methods.
	# --------------

	public {
	    method Save {id args}
	    method Delete {id}
	}
	
	# ----------------------
	# Private class methods.
	# ----------------------
	
	protected {
	    method Draw {x y args}
	    method Turn {}
	    method AnimateAndSet {n}
	    method StopAnimation {n}
	    method SetOwnSide {n}
	    method GetValue {name}
	    method MoveInit {x y} {}
	    method MoveMotion {x y} {}
	    method MoveRelease {x y} {}
	    method DeleteCmd {}
	}
    
	# ----------------------------
	# Private static data members.
	# ----------------------------

	private {
	    common cardstackMenu
	    common inited 0
	    common icons
	    common animatemillis 200
	    common animatelength 3000
	    common animatesequence {3 1 5 4 6 2}
	    common animateicons
	}
	
	# ---------------------------
	# Private class data members.
	# ---------------------------
	
	protected {
	    variable iddice
	    variable utagdice
	    variable animateuid
	    variable animatestopuid
	}    
    }

    body Dice::constructor {w x y args} {	
	if {!$inited} {
	    Init
	}
	eval {Draw $x $y} $args
	
	set b1          {%W bind dice <Button-1>}
	set b1Motion    {%W bind dice <B1-Motion>}
	set b1Release   {%W bind dice <ButtonRelease-1>}

	set b1DoubleInst  [list %W bind $iddice <Double-1>]
	
	set classBindList [list \
	  move    [list $b1        [code $this MoveInit %x %y]] \
	  move    [list $b1Motion  [code $this MoveMotion %x %y]] \
	  move    [list $b1Release [code $this MoveRelease %x %y]] \
	  del     [list $b1        [code $this DeleteCmd]] \
	  ]
	set instBindList [list \
	  point   [list $b1DoubleInst   [code $this Turn]] \
	  ]
	
	RegisterCanvasClassBinds Dice $classBindList
	RegisterCanvasInstBinds  Dice:$this $instBindList
	
	bind $tkCanvas <Destroy> +[list delete object $this]
    }
    
    body Dice::destructor {} {	
	if {[info exists animateuid]} {
	    ::Utils::AnimateStop $animateuid
	}
	if {[info exists animatestopuid]} {
	    after cancel $animatestopuid
	}
    }
    
    body Dice::Init {} {
	MakeImages
	InitRand
	set animateicons {}
	foreach i $animatesequence {
	    lappend animateicons $icons(marble-${i})
	}
	::WB::RegisterHandler DICE [code Handler]
	set inited 1
    }
    
    body Dice::Draw {x y args} {
	
	array set argsArr {
	    -number   1
	}
	array set argsArr $args
	if {[info exists argsArr(-tags)]} {
	    set utag $argsArr(-tags)
	} else {
	    set utag [NewUtag]
	}
	set utagdice $utag
	set n $argsArr(-number)
	set im $icons(marble-${n})
	set iddice [$tkCanvas create image $x $y -image $im -anchor nw  \
	  -tags [list image dice n:${n} object:${this} $utag]]
    }
    
    body Dice::Turn {} {
	
	# Do not invoke while still running.
	if {[info exists animateuid]} {
	    return
	}
	set n [expr {[UnifRand 6] + 1}]
	AnimateAndSet  $n
	GenCommand "DICE: turn $utagdice $n" remote
    }
    
    body Dice::AnimateAndSet {n} {
	
	set animateuid [::Utils::AnimateStart $animatemillis $animateicons \
	  [list $tkCanvas itemconfigure $iddice -image %v]]
	set animatestopuid [after $animatelength [code $this StopAnimation $n]]
    }
    
    body Dice::StopAnimation {n} {
	
	::Utils::AnimateStop $animateuid
	unset -nocomplain animateuid animatestopuid
	SetOwnSide $n
    }
    
    body Dice::SetOwnSide {n} {
    
	# First remove old number tag before adding new one.
	set tags [$tkCanvas gettags $iddice]
	regexp {n:([1-6])} $tags match number
	$tkCanvas dtag $iddice n:${number}
	$tkCanvas itemconfigure $iddice -image $icons(marble-${n})
	$tkCanvas addtag n:${n} withtag $iddice
    }
    
    body Dice::Handler {w type cmd args} {
		
	switch -- [lindex $cmd 1] {
	    turn {

		# The remote cardstack has picked this card. Remove from stack!
		set utag [lindex $cmd 2]
		set num  [lindex $cmd 3]
		
		# Need to backtrace from utag to actual object.
		set obj [GetThisFromDiceUtag $utag]
		if {$obj != ""} {
		    $obj AnimateAndSet $num
		}
	    }
	}
    }
    
    # GetThisFromDiceUtag --
    # 
    #   Static method to map from a stacks utag to the actual object.
    #   Needed since utags are the only globally uniqe identifier here.

    body Dice::GetThisFromDiceUtag {utag} {
	
	set ansObj ""
	foreach obj [itcl::find objects -class Dice] {
	    set tmputag [$obj GetValue utagdice]
	    if {[string equal $utag $tmputag]} {
		set ansObj $obj
		break
	    }
	}
	return $ansObj
    }

    body Dice::GetValue {name} {
	return [set $name]
    }

    body Dice::MoveInit {x y} {  
	InitMoveCurrent $x $y
    }
    
    body Dice::MoveMotion {x y} {
	DragMoveCurrent $x $y
    }
    
    body Dice::MoveRelease {x y} {
	FinalMoveCurrent $x $y
    }
    
    body Dice::DeleteCmd {} {
	
	if {[info exists animateuid]} {
	    ::Utils::AnimateStop $animateuid
	}
	
	# This actually calls back to our Delete method.
	DeleteCurrent
    }
    
    # Dice::Save --
    #
    #       Returns a oneline import command. Used from app.
    #       
    # Arguments:
    #       id          item id or tag
    #       args:
    #           -basepath absolutePath    translate image -file to a relative path.
    #           -uritype ( file | http )
    #           -keeputag 0|1
    #       
    # Results:
    #       a single command line.

    body Dice::Save {id args} {
	
	# Seemed to be the only way :-(
	upvar [namespace current]::infoScript infoScript

	set tags [$tkCanvas gettags $id]
	if {[lsearch $tags dice] < 0} {
	    return
	}
	array set argsArr {
	    -uritype file
	}
	array set argsArr $args
	set uriopts [eval {
	    ::CanvasUtils::GetImportOptsURI $argsArr(-uritype) $infoScript
	} $args]

	set impcmd [concat "import" [$tkCanvas coords $id] $uriopts]
	set im [$tkCanvas itemcget $id -image]
	lappend impcmd -mime application/x-itcl
	lappend impcmd -width [image width $im] -height [image height $im]
	regexp {n:([1-6])} $tags match number
	lappend impcmd -number $number
	
	return $impcmd
    }
    
    body Dice::Delete {id} {
	set utag [GetUtag $id]
	return [list [list delete $utag] {}]
    }

    body Dice::InitRand {} {    
	# empty
    }

    body Dice::UnifRand {x} {    
	return [expr {int($x*rand())}]
    }
    
    body Dice::MakeImages {} {
	
	set icons(marble-1) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttPT0/v7+/j4+PLy8uPj49fX197e3vz8/PPz
	883Nzc/Pz8LCwsDAwO/v7/b29unp6dHR0bS0tKampre3t/39/f7+/ufn5/n5
	+e7u7u3t7fHx8ZCQkIyMjPT09PDw8Ojo6OXl5d/f3+zs7Obm5urq6uvr6+Hh
	4dnZ2dTU1NjY2NLS0tbW1rKysnt7e3R0dHh4eK+vr+Tk5OLi4uDg4Nra2tvb
	28rKyru7u4iIiHNzc01NTYGBgdzc3N3d3dDQ0M7OzsnJybi4uIqKin19fTEx
	MVxcXImJiYODgyYmJklJSbGxsZKSkqGhocXFxcfHx4aGhj8/P7m5ucHBwba2
	tr+/v62trZGRkSQkJDw8PNXV1by8vLq6usvLy5eXlx8fHzg4OMPDw7CwsJiY
	mKSkpBsbG66uroKCgh0dHampqaioqDQ0NKysrI+Pj5qamouLi6CgoHp6ehkZ
	GS8vL76+vpmZmXl5eXx8fBgYGCsrK5ycnG5ubmxsbDIyMn9/fzs7OyoqKjY2
	NllZWaurq8jIyDk5OX5+fjU1NSEhIUtLS3d3d8bGxjo6Op+fnz09PTc3N11d
	XbW1tcTExJWVlR4eHjAwMFNTU2JiYoWFhZ2dnWdnZ2tra/f39/X19UBAQJub
	m19fX5aWlqqqqhwcHPr6+jMzM6OjoxoaGqenp8zMzKWlpaKiop6enhUVFSws
	LI6OjoeHhxQUFCgoKHZ2dhISEiUlJYSEhBAQECkpKbOzs29vb0xMTAwMDFJS
	UiAgIAkJCb29vZSUlJOTk1BQUHV1dXFxcYCAgG1tbWZmZkdHRxEREVZWVmlp
	aWpqamVlZWFhYVdXV1VVVVtbW15eXmBgYGNjYy4uLg8PDycnJyMjIyIiIi0t
	LRMTE09PT0VFRUhISFFRUVpaWk5OTkZGRkJCQgAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCBgAICD
	CBMqXMgQwAACBQwcGEgRQcOLGBEmUIBgAYMGDigGeJCxZMMBCSBEkDCBQoWB
	GC2YPHgBAAEAGCAUyKBhA4cIFTp4mBAAQsIBHx6ACCEiwggSJCJoKIEhAgYT
	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
	KBIQADs=
	}]
	 
	set icons(marble-2) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrO7u7unp6efn5+bm5uTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+eXl5dzc3N3d3d7e3uHh
	4dPT09bW1oeHh15eXpmZmcvLy8/Pz5ubmy4uLldXV9DQ0M7OzsnJyQwMDCYm
	JsLCwsjIyA0NDczMzKCgoIODg3p6eoaGhrGxsZOTk6GhocHBwcXFxcfHxwQE
	BD09PS0tLTc3N0RERGRkZI+Pj7q6ure3t7a2trKysrm5ub+/vwMDA/f39zQ0
	NCAgIDY2Nl9fX3R0dI6OjpaWliMjI01NTW1tbaamprCwsJiYmKSkpAICAjs7
	O0lJSVlZWY2Nja6urr29vXh4eDU1NWNjY2tra/r6+qmpqZeXl6ioqIGBgZ+f
	n5qamouLi6+vr2dnZ5KSkr6+vqenp56ens3NzYSEhH9/fzAwMDk5OUVFRWho
	aMTExHl5eTo6OomJiSQkJFtbW3Z2dpCQkHx8fGpqapWVlXd3d2lpaXJyckJC
	Qru7u8DAwIKCgqurq2JiYgoKCq2trSEhIaqqqn19fTExMVJSUoCAgJSUlC8v
	L29vbxEREWVlZRAQEAUFBQEBAVRUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFgwAtUCBRIYS
	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
	}]
	 
	set icons(marble-3) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3eHh4dPT09bW1t7e
	3oeHh15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7O
	zsnJyQwMDCYmJtzc3D09PS0tLTc3N0VFRWhoaJWVlcLCwsjIyA0NDTY2NiMj
	Izk5OV9fX3R0dImJiZqamq6ursfHx7CwsJKSkqGhocXFxQQEBD8/PyUlJTo6
	OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5ub+/vwMDA/f39y8vL1RU
	VIuLi7q6un5+fmVlZX9/f83Nzfr6+piYmKSkpAICAkJCQnd3d319fYSEhL29
	vWRkZKmpqZeXl6ioqI+Pj6+vr76+vqCgoKenp8TExI2NjW1tbWBgYHFxcbOz
	s3Z2diwsLDs7O11dXYqKijIyMh8fH1hYWICAgI6OjqqqqlFRUW9vb3x8fFJS
	UmNjY3JycjU1NWtra7u7u3l5eXNzc1lZWYWFhZ2dncDAwHt7ezExMURERGdn
	Z2JiYpSUlJCQkK2trXV1dTMzM5aWloKCgqampgoKCiEhISAgIDAwMJOTkxER
	ETQ0NBAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	}]
	 
	set icons(marble-4) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3dPT09bW1t7e3oeH
	h15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7OzsnJ
	ycTExJ2dnYCAgHV1dX5+fqampgwMDCYmJuHh4dzc3D09PS0tLTc3N0VFRWho
	aJWVlcLCwsjIyDk5OTU1NUBAQGNjYw0NDTY2NiMjI19fX3R0dImJiZqamq6u
	rsfHx7CwsJKSkqGhocXFxbq6unFxcTExMSEhITQ0NFtbW3BwcIGBgY6Ojqqq
	qgQEBD8/PyUlJTo6OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5uTMz
	M01NTWZmZp+fnwMDA/f39y8vL1RUVIuLiygoKDIyMkdHR5SUlGVlZX9/f83N
	zfr6+r+/v29vb1paWgICAkJCQnd3d319fYSEhK2trb29vWRkZKmpqV1dXYqK
	ipiYmIWFhaWlpa+vr76+vrOzs6enp6CgoHl5eXt7e0RERGdnZyQkJGJiYnNz
	czw8PHh4eJ6enqioqKSkpDs7O5CQkFhYWGtra1JSUru7u8DAwJaWloKCggoK
	CiAgIJeXlzAwMJOTkxERERAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	YQhftCERFgkIADs=
	}]
	 
	set icons(marble-5) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3dPT09bW1t7e3oeH
	h15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7OzsnJ
	ycTExJ2dnYCAgHV1dX5+fqampgwMDCYmJuHh4dzc3D09PS0tLTc3N0VFRWho
	aJWVlcLCwsjIyDk5OTU1NUBAQGNjYw0NDTY2NiMjI19fX3R0dImJiZqamq6u
	rsfHx7CwsJKSkqGhocXFxbq6unFxcTExMSEhITQ0NFtbW3BwcIGBgY6Ojqqq
	qgQEBD8/PyUlJTo6OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5uTMz
	M01NTWZmZp+fnwMDA/f39y8vL1RUVIuLiygoKDIyMkdHR5SUlGVlZX9/f83N
	zfr6+r+/v29vb1paWgICAkJCQnd3d319fYSEhK2trb29vWRkZKmpqV1dXYqK
	ipiYmIWFhaWlpa+vr76+vrOzs6enp42NjW1tbWBgYHZ2diwsLDs7Ox8fH1hY
	WFFRUXx8fFJSUo+Pj6ioqHJycmtra7u7u3l5eXNzc1lZWaCgoMDAwHt7e0RE
	RGdnZyQkJGJiYjw8PHh4eJ6enqSkpJCQkJaWloKCggoKCiAgIJeXlzAwMJOT
	kxERERAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	}]
	 
	set icons(marble-6) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vT09Pn5+e7u7uzs
	7Ovr6/Ly8ujo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrPDw8Obm5uTk5Nra
	2srKytfX19jY2NHR0dTU1Li4uIiIiKKioufn59zc3NbW1tPT08/Pz97e3oeH
	h15eXpmZmenp6eXl5d3d3cvLy5ubmy4uLldXV6ampoCAgHh4eH5+fqSkpM7O
	zsTExHR0dKenp8zMzNDQ0MnJyZ6enoKCgnp6eoaGhqqqqgwMDCYmJj8/Py8v
	Lzc3N0JCQmRkZI+Pjzk5OSoqKjMzMz09PV1dXYqKira2ts3Nza6urnZ2djs7
	Oy0tLWdnZ5SUlMLCwg0NDTY2NiQkJF9fX3d3d7GxscjIyDExMRwcHEZGRnx8
	fIODg52dncfHx729vTAwMCEhIVxcXHBwcIGBgZKSkgQEBCUlJTw8PLCwsB4e
	HkdHR2FhYX19fZWVlbOzs76+vsDAwJaWliAgIE9PT21tbaGhobm5uQMDA0BA
	QFhYWGtra5CQkL+/vygoKDU1NUxMTCcnJ8XFxXJyco6OjuHh4fr6+mNjY0hI
	SFRUVG5ubqWlpQICApqamkNDQ2pqaq2trff398HBwbe3t4uLi1VVVX9/f5iY
	mIWFhXl5ea+vr7Kysp+fn6CgoKioqHt7e3V1dYSEhCwsLCsrKzQ0NI2NjWho
	aCMjI4mJiaurqxoaGjIyMnNzcz4+PltbW0tLS7q6ujg4OFlZWYyMjGJiYlFR
	UWxsbElJSW9vb5eXl6mpqbu7u5OTkwoKClJSUhEREWVlZRAQEAUFBQEBAQAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DD4CqADAwgUMBSxU2Fkgg4YNGTho0NDBwwcQIUSMIDFQIcQNBjQ0sFACQ9Cg
	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
	zGc8b2MbkKhGHkJhkYAAADs=
	}]
    }
}

# We must instantiate ourself...

eval {Dice #auto $w $x $y} $args