Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xMANIFEST2
-rwxr-xr-xTurtleArtActivity.py128
-rwxr-xr-xactivity/activity.info2
-rwxr-xr-xsamples/birds.pngbin305016 -> 266521 bytes
-rwxr-xr-xsamples/birds.ta468
-rwxr-xr-xsamples/bubbles.pngbin49299 -> 40312 bytes
-rwxr-xr-xsamples/bubbles.ta100
-rwxr-xr-xsamples/candyvortex.pngbin92624 -> 89072 bytes
-rwxr-xr-xsamples/candyvortex.ta56
-rwxr-xr-xsamples/colors.pngbin89789 -> 86361 bytes
-rwxr-xr-xsamples/colors.ta48
-rwxr-xr-xsamples/csquiral.pngbin150314 -> 138475 bytes
-rwxr-xr-xsamples/csquiral.ta84
-rwxr-xr-xsamples/curlygates.pngbin80552 -> 73290 bytes
-rwxr-xr-xsamples/curlygates.ta696
-rwxr-xr-xsamples/dots.pngbin61626 -> 66774 bytes
-rwxr-xr-xsamples/dots.ta290
-rwxr-xr-xsamples/flower.pngbin151215 -> 150213 bytes
-rwxr-xr-xsamples/flower.ta68
-rwxr-xr-xsamples/fountain.pngbin230566 -> 208185 bytes
-rwxr-xr-xsamples/fountain.ta178
-rwxr-xr-xsamples/rainbow.pngbin47957 -> 45890 bytes
-rwxr-xr-xsamples/rainbow.ta76
-rwxr-xr-xsamples/redwisp.pngbin163064 -> 153681 bytes
-rwxr-xr-xsamples/redwisp.ta150
-rwxr-xr-xsamples/reflections.pngbin182626 -> 163374 bytes
-rwxr-xr-xsamples/reflections.ta132
-rwxr-xr-xsamples/shades.pngbin59890 -> 57390 bytes
-rwxr-xr-xsamples/shades.ta76
-rwxr-xr-xsamples/smoothcandy.pngbin74117 -> 66286 bytes
-rwxr-xr-xsamples/smoothcandy.ta104
-rwxr-xr-xsamples/square.pngbin4801 -> 4548 bytes
-rwxr-xr-xsamples/squares.pngbin41829 -> 40448 bytes
-rwxr-xr-xsamples/squares.ta44
-rwxr-xr-xsamples/squiral.pngbin84259 -> 74297 bytes
-rwxr-xr-xsamples/xo-man.pngbin79523 -> 57193 bytes
-rwxr-xr-xsamples/xo-man.ta861
-rwxr-xr-xta.py78
-rwxr-xr-xturtlesetup.py13
39 files changed, 1872 insertions, 1782 deletions
diff --git a/MANIFEST b/MANIFEST
index 6c8bd89..78d97d0 100755
--- a/MANIFEST
+++ b/MANIFEST
@@ -3,10 +3,12 @@ logo.py
masknumber.gif
sprites.py
status.gif
+setup.py
ta.py
TurtleArtActivity.py
turtle.py
turtlesetup.py
+icons/stock-open.svg
flow/flowgroup.gif
flow/flowmask.gif
flow/forever.gif
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index 3c40d89..6fc4b50 100755
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -3,32 +3,134 @@ import pygtk
pygtk.require('2.0')
import gtk
+from socket import *
+import sys
+import gobject
+
+serverHost = '192.168.1.101'
+serverPort = 5647
+
+import sugar
from sugar.activity import activity
+from sugar.activity import registry
+from sugar.graphics.toolbutton import ToolButton
+from sugar.datastore import datastore
+from sugar import profile
+from gettext import gettext as _
+
class TurtleArtActivity(activity.Activity):
def __init__(self, handle):
super(TurtleArtActivity,self).__init__(handle)
-
+# self.debug_init()
+
self.gamename = 'turtleart'
self.set_title("TurtleArt")
- toolbar = activity.ActivityToolbar(self)
- toolbar.show()
- self.set_toolbox(toolbar)
+
+ toolbox = activity.ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ self.projectToolbar = ProjectToolbar(self)
+ toolbox.add_toolbar( ('Project'), self.projectToolbar )
+ toolbox.show()
+
+ toolbox._activity_toolbar.keep.connect('clicked', self._keep_clicked_cb) # patch
self.connect('destroy', self._cleanup_cb)
-# self.connect('focus_in_event', self._focus_in)
-# self.connect('focus_out_event', self._focus_out)
-
+
canvas = gtk.EventBox()
- self.set_canvas(canvas)
+
+ sugar.graphics.window.Window.set_canvas(self, canvas)
+
ta.init(canvas, activity.get_bundle_path(),self)
-
+
+ if self._jobject and self._jobject.file_path:
+ self.read_file(self._jobject.file_path)
def _cleanup_cb(self, data=None):
return
- def _focus_in(self, event, data=None):
- return
+ def _keep_clicked_cb(self, button):
+ self.jobject_new_patch()
+
+ def write_file(self, file_path):
+ print "Writing file %s" % file_path
+ self.metadata['mime_type'] = 'application/x-tar'
+ import tarfile,os,tempfile
+ tar_fd = tarfile.open(file_path, 'w')
+ pngfd, pngfile = tempfile.mkstemp(".png")
+ tafd, tafile = tempfile.mkstemp(".ta")
+ del pngfd, tafd
+
+ try:
+ ta.save_data(tafile)
+ ta.save_pict(pngfile)
+ tar_fd.add(tafile, "ta_code.ta")
+ tar_fd.add(pngfile, "ta_image.png")
+
+ finally:
+ tar_fd.close()
+ os.remove(pngfile)
+ os.remove(tafile)
+
+ def read_file(self, file_path):
+ # Better be a tar file.
+ import tarfile,os,tempfile,shutil
+
+ print "Reading file %s" % file_path
+ tar_fd = tarfile.open(file_path, 'r')
+ tmpdir = tempfile.mkdtemp()
+
+ try:
+ # We'll get 'ta_code.ta' and 'ta_image.png'
+ tar_fd.extractall(tmpdir)
+ ta.load_files(os.path.join(tmpdir, 'ta_code.ta'), os.path.join(tmpdir, 'ta_image.png'))
+
+ finally:
+ shutil.rmtree(tmpdir)
+ tar_fd.close()
+
+ def debug_init(self):
+ s = socket(AF_INET, SOCK_STREAM) # create a TCP socket
+ s.connect((serverHost, serverPort)) # connect to server on the port
+ sys.stdout = s.makefile()
+ sys.stderr = sys.stdout
+ gobject.timeout_add(100, self.debug_tick)
+
+ def debug_tick(self):
+ sys.stdout.flush()
+ return True
+
+ def jobject_new_patch(self):
+ oldj = self._jobject
+ self._jobject = datastore.create()
+ self._jobject.metadata['title'] = oldj.metadata['title']
+ self._jobject.metadata['title_set_by_user'] = oldj.metadata['title_set_by_user']
+ self._jobject.metadata['activity'] = self.get_service_name()
+ self._jobject.metadata['activity_id'] = self.get_id()
+ self._jobject.metadata['keep'] = '0'
+ #self._jobject.metadata['buddies'] = ''
+ self._jobject.metadata['preview'] = ''
+ self._jobject.metadata['icon-color'] = profile.get_color().to_string()
+ self._jobject.file_path = ''
+ datastore.write(self._jobject,
+ reply_handler=self._internal_jobject_create_cb,
+ error_handler=self._internal_jobject_error_cb)
+
+
+class ProjectToolbar(gtk.Toolbar):
+ def __init__(self, pc):
+ gtk.Toolbar.__init__(self)
+ self.activity = pc
+
+ self.sampb = ToolButton( "stock-open" )
+ self.sampb.set_tooltip("samples")
+ self.sampb.props.sensitive = True
+ self.sampb.connect('clicked', self.do_samples)
+ self.insert(self.sampb, -1)
+ self.sampb.show()
+
+
+ def do_samples(self, button):
+ ta.load_file()
+# self.activity.jobject_new_patch()
- def _focus_out(self, event, data=None):
- return
diff --git a/activity/activity.info b/activity/activity.info
index 545c414..657c942 100755
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,5 +3,5 @@ name = TurtleArt
service_name = org.laptop.TurtleArtActivity
class = TurtleArtActivity.TurtleArtActivity
icon = activity-turtleart
-activity_version = 3
+activity_version = 4
show_launcher = yes
diff --git a/samples/birds.png b/samples/birds.png
index fbb44bb..55b23f1 100755
--- a/samples/birds.png
+++ b/samples/birds.png
Binary files differ
diff --git a/samples/birds.ta b/samples/birds.ta
index fd73c16..4144a07 100755
--- a/samples/birds.ta
+++ b/samples/birds.ta
@@ -2,309 +2,309 @@
(I0
S'hat1'
p1
-I330
-I306
+I668
+I127
(lp2
-NaI4
+NaI1
atp3
a(I1
-S'clean'
+S'setxy'
p4
-I866
-I149
+I680
+I177
(lp5
-NaI2
+I0
+aI2
+aI5
+aI8
atp6
a(I2
-S'repeat'
+S'random'
p7
-I866
-I188
+I754
+I167
(lp8
I1
-aI31
aI3
+aI4
aNatp9
a(I3
-S'stack1'
+(S'number'
p10
-I961
-I237
-(lp11
+S'-600'
+p11
+tp12
+I782
+I186
+(lp13
I2
-aNatp12
+aNatp14
a(I4
-S'setxy'
-p13
-I342
-I356
-(lp14
-I0
-aI5
-aI8
-aI11
-atp15
-a(I5
-S'random'
-p16
-I416
-I346
+(g10
+S'600'
+p15
+tp16
+I904
+I186
(lp17
-I4
+I2
+aNatp18
+a(I5
+g7
+I754
+I204
+(lp19
+I1
aI6
aI7
-aNatp18
+aNatp20
a(I6
-(S'number'
-p19
-S'-600'
-p20
-tp21
-I444
-I365
-(lp22
+(g10
+S'-450'
+p21
+tp22
+I782
+I223
+(lp23
I5
-aNatp23
+aNatp24
a(I7
-(g19
-S'600'
-p24
-tp25
-I566
-I365
-(lp26
+(g10
+S'450'
+p25
+tp26
+I904
+I223
+(lp27
I5
-aNatp27
+aNatp28
a(I8
-g16
-I416
-I383
-(lp28
-I4
+S'setpensize'
+p29
+I680
+I253
+(lp30
+I1
aI9
aI10
-aNatp29
+atp31
a(I9
-(g19
-S'-450'
-p30
-tp31
-I444
-I402
-(lp32
+(g10
+S'10'
+p32
+tp33
+I754
+I270
+(lp34
I8
-aNatp33
+aNatp35
a(I10
-(g19
-S'450'
-p34
-tp35
-I566
-I402
-(lp36
+S'repeat'
+p36
+I680
+I307
+(lp37
I8
-aNatp37
-a(I11
-S'setpensize'
-p38
-I342
-I432
-(lp39
-I4
+aI11
aI12
-aI13
-atp40
+aNatp38
+a(I11
+(g10
+S'720'
+p39
+tp40
+I766
+I316
+(lp41
+I10
+aNatp42
a(I12
-(g19
-S'10'
-p41
-tp42
-I416
-I449
-(lp43
-I11
-aNatp44
-a(I13
-g7
-I342
-I486
-(lp45
-I11
+S'forward'
+p43
+I775
+I356
+(lp44
+I10
+aI13
aI14
-aI15
-aNatp46
+atp45
+a(I13
+(g10
+S'200'
+p46
+tp47
+I849
+I365
+(lp48
+I12
+aNatp49
a(I14
-(g19
-S'720'
-p47
-tp48
-I428
-I495
-(lp49
-I13
-aNatp50
+S'setcolor'
+p50
+I775
+I395
+(lp51
+I12
+aI15
+aI18
+atp52
a(I15
-S'forward'
-p51
-I437
-I535
-(lp52
-I13
+S'xcor'
+p53
+I849
+I412
+(lp54
+I14
aI16
-aI17
-atp53
+atp55
a(I16
-(g19
-S'200'
-p54
-tp55
-I511
-I544
-(lp56
+S'division'
+p56
+I942
+I404
+(lp57
I15
-aNatp57
+aI17
+atp58
a(I17
-S'setcolor'
-p58
-I437
-I574
-(lp59
-I15
-aI18
-aI21
-atp60
+(g10
+S'5'
+p59
+tp60
+I981
+I412
+(lp61
+I16
+aNatp62
a(I18
-S'xcor'
-p61
-I511
-I591
-(lp62
-I17
+S'setshade'
+p63
+I775
+I449
+(lp64
+I14
aI19
-atp63
+aI20
+atp65
a(I19
-S'division'
-p64
-I604
-I583
-(lp65
+S'heading'
+p66
+I849
+I466
+(lp67
I18
-aI20
-atp66
+aNatp68
a(I20
-(g19
-S'5'
-p67
-tp68
-I643
-I591
-(lp69
-I19
-aNatp70
-a(I21
-S'setshade'
-p71
-I437
-I628
-(lp72
-I17
+S'back'
+p69
+I775
+I503
+(lp70
+I18
+aI21
aI22
-aI23
-atp73
+atp71
+a(I21
+(g10
+S'400'
+p72
+tp73
+I849
+I512
+(lp74
+I20
+aNatp75
a(I22
-S'heading'
-p74
-I511
-I645
-(lp75
-I21
-aNatp76
+g43
+I775
+I542
+(lp76
+I20
+aI23
+aI26
+atp77
a(I23
-S'back'
-p77
-I437
-I682
+g7
+I849
+I532
(lp78
-I21
+I22
aI24
aI25
-atp79
+aNatp79
a(I24
-(g19
-S'400'
+(g10
+S'190'
p80
tp81
-I511
-I691
+I877
+I551
(lp82
I23
aNatp83
a(I25
-g51
-I437
-I721
-(lp84
+(g10
+S'210'
+p84
+tp85
+I999
+I551
+(lp86
I23
-aI26
-aI29
-atp85
+aNatp87
a(I26
-g16
-I511
-I711
-(lp86
-I25
+S'left'
+p88
+I775
+I581
+(lp89
+I22
aI27
-aI28
-aNatp87
+aNatp90
a(I27
-(g19
-S'190'
-p88
-tp89
-I539
-I730
-(lp90
+(g10
+S'1'
+p91
+tp92
+I849
+I590
+(lp93
I26
-aNatp91
+aNatp94
a(I28
-(g19
-S'210'
-p92
-tp93
-I661
-I730
-(lp94
-I26
-aNatp95
+S'clean'
+p95
+I150
+I122
+(lp96
+NaI29
+atp97
a(I29
-S'left'
-p96
-I437
-I760
-(lp97
-I25
+g36
+I150
+I161
+(lp98
+I28
aI30
-aNatp98
+aI31
+aNatp99
a(I30
-(g19
-S'1'
-p99
-tp100
-I511
-I769
-(lp101
+(g10
+S'30'
+p100
+tp101
+I236
+I170
+(lp102
I29
-aNatp102
+aNatp103
a(I31
-(g19
-S'30'
-p103
-tp104
-I952
-I197
+S'stack1'
+p104
+I245
+I210
(lp105
-I2
+I29
aNatp106
a(I-1
S'turtle'
diff --git a/samples/bubbles.png b/samples/bubbles.png
index 2f296b9..bccbd84 100755
--- a/samples/bubbles.png
+++ b/samples/bubbles.png
Binary files differ
diff --git a/samples/bubbles.ta b/samples/bubbles.ta
index 93dfe7f..2583b7a 100755
--- a/samples/bubbles.ta
+++ b/samples/bubbles.ta
@@ -2,8 +2,8 @@
(I0
S'setcolor'
p1
-I737
-I246
+I128
+I60
(lp2
NaI1
aI2
@@ -14,16 +14,16 @@ p4
S'60'
p5
tp6
-I811
-I263
+I202
+I77
(lp7
I0
aNatp8
a(I2
S'repeat'
p9
-I737
-I300
+I128
+I114
(lp10
I0
aI3
@@ -34,16 +34,16 @@ a(I3
S'5000'
p12
tp13
-I823
-I309
+I214
+I123
(lp14
I2
aNatp15
a(I4
S'setxy'
p16
-I832
-I349
+I223
+I163
(lp17
I2
aI5
@@ -53,8 +53,8 @@ atp18
a(I5
S'random'
p19
-I906
-I339
+I297
+I153
(lp20
I4
aI6
@@ -65,8 +65,8 @@ a(I6
S'-600'
p22
tp23
-I934
-I358
+I325
+I172
(lp24
I5
aNatp25
@@ -75,15 +75,15 @@ a(I7
S'600'
p26
tp27
-I1056
-I358
+I447
+I172
(lp28
I5
aNatp29
a(I8
g19
-I906
-I376
+I297
+I190
(lp30
I4
aI9
@@ -94,8 +94,8 @@ a(I9
S'-450'
p32
tp33
-I934
-I395
+I325
+I209
(lp34
I8
aNatp35
@@ -104,16 +104,16 @@ a(I10
S'450'
p36
tp37
-I1056
-I395
+I447
+I209
(lp38
I8
aNatp39
a(I11
S'storeinbox1'
p40
-I832
-I425
+I223
+I239
(lp41
I4
aI12
@@ -122,8 +122,8 @@ atp42
a(I12
S'ycor'
p43
-I906
-I442
+I297
+I256
(lp44
I11
aI13
@@ -131,8 +131,8 @@ atp45
a(I13
S'plus'
p46
-I999
-I434
+I390
+I248
(lp47
I12
aI14
@@ -142,16 +142,16 @@ a(I14
S'900'
p49
tp50
-I1038
-I442
+I429
+I256
(lp51
I13
aNatp52
a(I15
S'setpensize'
p53
-I832
-I479
+I223
+I293
(lp54
I11
aI16
@@ -160,8 +160,8 @@ atp55
a(I16
S'box1'
p56
-I906
-I496
+I297
+I310
(lp57
I15
aI17
@@ -169,8 +169,8 @@ atp58
a(I17
S'division'
p59
-I999
-I488
+I390
+I302
(lp60
I16
aI18
@@ -180,16 +180,16 @@ a(I18
S'9'
p62
tp63
-I1038
-I496
+I429
+I310
(lp64
I17
aNatp65
a(I19
S'setshade'
p66
-I832
-I533
+I223
+I347
(lp67
I15
aI20
@@ -197,16 +197,16 @@ aI23
atp68
a(I20
g56
-I906
-I550
+I297
+I364
(lp69
I19
aI21
atp70
a(I21
g59
-I999
-I542
+I390
+I356
(lp71
I20
aI22
@@ -216,16 +216,16 @@ a(I22
S'12'
p73
tp74
-I1038
-I550
+I429
+I364
(lp75
I21
aNatp76
a(I23
S'forward'
p77
-I832
-I587
+I223
+I401
(lp78
I19
aI24
@@ -235,8 +235,8 @@ a(I24
S'1'
p80
tp81
-I906
-I596
+I297
+I410
(lp82
I23
aNatp83
diff --git a/samples/candyvortex.png b/samples/candyvortex.png
index 908b90e..22f41b0 100755
--- a/samples/candyvortex.png
+++ b/samples/candyvortex.png
Binary files differ
diff --git a/samples/candyvortex.ta b/samples/candyvortex.ta
index 1f7748e..9060fef 100755
--- a/samples/candyvortex.ta
+++ b/samples/candyvortex.ta
@@ -2,8 +2,8 @@
(I0
S'repeat'
p1
-I777
-I164
+I212
+I116
(lp2
NaI1
aI2
@@ -13,16 +13,16 @@ a(I1
p4
I350
tp5
-I863
-I173
+I298
+I125
(lp6
I0
aNatp7
a(I2
S'setpensize'
p8
-I872
-I213
+I307
+I165
(lp9
I0
aI3
@@ -31,16 +31,16 @@ atp10
a(I3
S'heading'
p11
-I946
-I230
+I381
+I182
(lp12
I2
aNatp13
a(I4
S'forward'
p14
-I872
-I267
+I307
+I219
(lp15
I2
aI5
@@ -51,16 +51,16 @@ a(I5
S'1000'
p17
tp18
-I946
-I276
+I381
+I228
(lp19
I4
aNatp20
a(I6
S'setcolor'
p21
-I872
-I306
+I307
+I258
(lp22
I4
aI7
@@ -69,16 +69,16 @@ atp23
a(I7
S'xcor'
p24
-I946
-I323
+I381
+I275
(lp25
I6
aNatp26
a(I8
S'setshade'
p27
-I872
-I360
+I307
+I312
(lp28
I6
aI9
@@ -87,16 +87,16 @@ atp29
a(I9
S'ycor'
p30
-I946
-I377
+I381
+I329
(lp31
I8
aNatp32
a(I10
S'back'
p33
-I872
-I414
+I307
+I366
(lp34
I8
aI11
@@ -107,16 +107,16 @@ a(I11
S'1000'
p36
tp37
-I946
-I423
+I381
+I375
(lp38
I10
aNatp39
a(I12
S'left'
p40
-I872
-I453
+I307
+I405
(lp41
I10
aI13
@@ -125,8 +125,8 @@ a(I13
(g4
I1
tp43
-I946
-I462
+I381
+I414
(lp44
I12
aNatp45
diff --git a/samples/colors.png b/samples/colors.png
index 0cb4cf6..b23b7dd 100755
--- a/samples/colors.png
+++ b/samples/colors.png
Binary files differ
diff --git a/samples/colors.ta b/samples/colors.ta
index cedbb95..5819d26 100755
--- a/samples/colors.ta
+++ b/samples/colors.ta
@@ -2,8 +2,8 @@
(I0
S'setpensize'
p1
-I460
-I86
+I202
+I114
(lp2
NaI1
aI2
@@ -14,16 +14,16 @@ p4
S'15'
p5
tp6
-I534
-I103
+I276
+I131
(lp7
I0
aNatp8
a(I2
S'repeat'
p9
-I460
-I140
+I202
+I168
(lp10
I0
aI3
@@ -33,16 +33,16 @@ a(I3
(g4
I360
tp12
-I546
-I149
+I288
+I177
(lp13
I2
aNatp14
a(I4
S'setcolor'
p15
-I555
-I189
+I297
+I217
(lp16
I2
aI5
@@ -51,16 +51,16 @@ atp17
a(I5
S'heading'
p18
-I629
-I206
+I371
+I234
(lp19
I4
aNatp20
a(I6
S'forward'
p21
-I555
-I243
+I297
+I271
(lp22
I4
aI7
@@ -70,16 +70,16 @@ a(I7
(g4
I1000
tp24
-I629
-I252
+I371
+I280
(lp25
I6
aNatp26
a(I8
S'back'
p27
-I555
-I282
+I297
+I310
(lp28
I6
aI9
@@ -89,16 +89,16 @@ a(I9
(g4
I1000
tp30
-I629
-I291
+I371
+I319
(lp31
I8
aNatp32
a(I10
S'right'
p33
-I555
-I321
+I297
+I349
(lp34
I8
aI11
@@ -107,8 +107,8 @@ a(I11
(g4
I1
tp36
-I629
-I330
+I371
+I358
(lp37
I10
aNatp38
diff --git a/samples/csquiral.png b/samples/csquiral.png
index 41b309a..3d08a9b 100755
--- a/samples/csquiral.png
+++ b/samples/csquiral.png
Binary files differ
diff --git a/samples/csquiral.ta b/samples/csquiral.ta
index c84cd54..6682f0d 100755
--- a/samples/csquiral.ta
+++ b/samples/csquiral.ta
@@ -2,8 +2,8 @@
(I0
S'setpensize'
p1
-I690
-I180
+I163
+I114
(lp2
NaI1
aI2
@@ -14,16 +14,16 @@ p4
S'25'
p5
tp6
-I764
-I197
+I237
+I131
(lp7
I0
aNatp8
a(I2
S'storeinbox1'
p9
-I690
-I234
+I163
+I168
(lp10
I0
aI3
@@ -34,16 +34,16 @@ a(I3
S'0'
p12
tp13
-I764
-I251
+I237
+I185
(lp14
I2
aNatp15
a(I4
S'repeat'
p16
-I690
-I288
+I163
+I222
(lp17
I2
aI5
@@ -54,16 +54,16 @@ a(I5
S'1300'
p19
tp20
-I776
-I297
+I249
+I231
(lp21
I4
aNatp22
a(I6
S'setcolor'
p23
-I785
-I337
+I258
+I271
(lp24
I4
aI7
@@ -72,8 +72,8 @@ atp25
a(I7
S'xcor'
p26
-I859
-I354
+I332
+I288
(lp27
I6
aI8
@@ -81,8 +81,8 @@ atp28
a(I8
S'division'
p29
-I952
-I346
+I425
+I280
(lp30
I7
aI9
@@ -92,16 +92,16 @@ a(I9
S'6'
p32
tp33
-I991
-I354
+I464
+I288
(lp34
I8
aNatp35
a(I10
S'setshade'
p36
-I785
-I391
+I258
+I325
(lp37
I6
aI11
@@ -110,16 +110,16 @@ atp38
a(I11
S'heading'
p39
-I859
-I408
+I332
+I342
(lp40
I10
aNatp41
a(I12
S'forward'
p42
-I785
-I445
+I258
+I379
(lp43
I10
aI13
@@ -128,16 +128,16 @@ atp44
a(I13
S'box1'
p45
-I859
-I454
+I332
+I388
(lp46
I12
aNatp47
a(I14
S'right'
p48
-I785
-I484
+I258
+I418
(lp49
I12
aI15
@@ -148,23 +148,23 @@ a(I15
S'91'
p51
tp52
-I859
-I493
+I332
+I427
(lp53
I14
aNatp54
a(I16
g9
-I785
-I523
+I258
+I457
(lp55
I14
aI17
aNatp56
a(I17
g45
-I859
-I540
+I332
+I474
(lp57
I16
aI18
@@ -172,8 +172,8 @@ atp58
a(I18
S'plus'
p59
-I952
-I532
+I425
+I466
(lp60
I17
aI19
@@ -183,8 +183,8 @@ a(I19
S'1'
p62
tp63
-I991
-I540
+I464
+I474
(lp64
I18
aNatp65
@@ -194,8 +194,8 @@ p66
F906.80942086435073
F86.478356202884811
F220.0
-F16.117197178042431
-F70.0
+F-17.117197178042431
+F129.0
F25.0
tp67
a. \ No newline at end of file
diff --git a/samples/curlygates.png b/samples/curlygates.png
index c28e608..15ca901 100755
--- a/samples/curlygates.png
+++ b/samples/curlygates.png
Binary files differ
diff --git a/samples/curlygates.ta b/samples/curlygates.ta
index a28e8fa..53b1c6f 100755
--- a/samples/curlygates.ta
+++ b/samples/curlygates.ta
@@ -1,460 +1,460 @@
(lp0
(I0
-S'hat2'
+S'fillscreen'
p1
-I689
-I380
+I137
+I130
(lp2
NaI1
+aI2
+aI3
atp3
a(I1
-S'setcolor'
+(S'number'
p4
-I701
-I430
-(lp5
+S'50'
+p5
+tp6
+I211
+I139
+(lp7
I0
-aI2
-aI3
-atp6
+aNatp8
a(I2
-(S'number'
-p7
-S'20'
-p8
-tp9
-I775
-I447
-(lp10
-I1
-aNatp11
+(g4
+S'30'
+p9
+tp10
+I211
+I176
+(lp11
+I0
+aNatp12
a(I3
-S'setshade'
-p12
-I701
-I484
-(lp13
-I1
+S'repeat'
+p13
+I137
+I206
+(lp14
+I0
aI4
aI5
-atp14
+aNatp15
a(I4
-(g7
-S'60'
-p15
-tp16
-I775
-I501
-(lp17
+(g4
+S'20'
+p16
+tp17
+I223
+I215
+(lp18
I3
-aNatp18
+aNatp19
a(I5
-S'setpensize'
-p19
-I701
-I538
-(lp20
+S'setxy'
+p20
+I232
+I255
+(lp21
I3
aI6
-aI7
-atp21
+aI9
+aI12
+atp22
a(I6
-(g7
-S'20'
-p22
-tp23
-I775
-I555
+S'random'
+p23
+I306
+I245
(lp24
I5
+aI7
+aI8
aNatp25
a(I7
-S'stack1'
+(g4
+S'-570'
p26
-I701
-I592
-(lp27
-I5
-aI8
-atp28
+tp27
+I334
+I264
+(lp28
+I6
+aNatp29
a(I8
-g4
-I701
-I631
-(lp29
-I7
-aI9
-aI10
-atp30
+(g4
+S'570'
+p30
+tp31
+I456
+I264
+(lp32
+I6
+aNatp33
a(I9
-(g7
-S'0'
-p31
-tp32
-I775
-I648
-(lp33
-I8
-aNatp34
-a(I10
-g12
-I701
-I685
-(lp35
-I8
+g23
+I306
+I282
+(lp34
+I5
+aI10
aI11
-aI14
-atp36
-a(I11
-S'random'
-p37
-I775
-I683
+aNatp35
+a(I10
+(g4
+S'-440'
+p36
+tp37
+I334
+I301
(lp38
-I10
-aI12
-aI13
+I9
aNatp39
-a(I12
-(g7
-S'60'
+a(I11
+(g4
+S'440'
p40
tp41
-I803
-I702
+I456
+I301
(lp42
-I11
+I9
aNatp43
-a(I13
-(g7
-S'80'
+a(I12
+S'seth'
p44
-tp45
-I925
-I702
-(lp46
-I11
-aNatp47
-a(I14
-g19
-I701
-I739
-(lp48
-I10
-aI15
+I232
+I331
+(lp45
+I5
+aI13
aI16
-atp49
+atp46
+a(I13
+g23
+I306
+I321
+(lp47
+I12
+aI14
+aI15
+aNatp48
+a(I14
+(g4
+S'0'
+p49
+tp50
+I334
+I340
+(lp51
+I13
+aNatp52
a(I15
-(g7
-S'12'
-p50
-tp51
-I775
-I756
-(lp52
-I14
-aNatp53
+(g4
+S'360'
+p53
+tp54
+I456
+I340
+(lp55
+I13
+aNatp56
a(I16
-g26
-I701
-I793
-(lp54
-I14
-aNatp55
+S'stack2'
+p57
+I232
+I370
+(lp58
+I12
+aNatp59
a(I17
-S'hat1'
-p56
-I660
-I90
-(lp57
+S'hat2'
+p60
+I647
+I304
+(lp61
NaI18
-atp58
+atp62
a(I18
-S'repeat'
-p59
-I672
-I140
-(lp60
+S'setcolor'
+p63
+I659
+I354
+(lp64
I17
aI19
aI20
-aNatp61
+atp65
a(I19
-(g7
-S'3'
-p62
-tp63
-I758
-I149
-(lp64
+(g4
+S'20'
+p66
+tp67
+I733
+I371
+(lp68
I18
-aNatp65
+aNatp69
a(I20
-S'storeinbox1'
-p66
-I767
-I189
-(lp67
+S'setshade'
+p70
+I659
+I408
+(lp71
I18
aI21
aI22
-atp68
+atp72
a(I21
-(g7
-S'200'
-p69
-tp70
-I841
-I206
-(lp71
+(g4
+S'60'
+p73
+tp74
+I733
+I425
+(lp75
I20
-aNatp72
+aNatp76
a(I22
-g59
-I767
-I243
-(lp73
+S'setpensize'
+p77
+I659
+I462
+(lp78
I20
aI23
aI24
-aNatp74
+atp79
a(I23
-(g7
+(g4
S'20'
-p75
-tp76
-I853
-I252
-(lp77
+p80
+tp81
+I733
+I479
+(lp82
I22
-aNatp78
+aNatp83
a(I24
-S'arc'
-p79
-I862
-I292
-(lp80
+S'stack1'
+p84
+I659
+I516
+(lp85
I22
aI25
-aI26
-aI27
-atp81
+atp86
a(I25
-(g7
-S'30'
-p82
-tp83
-I936
-I301
-(lp84
-I24
-aNatp85
-a(I26
-S'box1'
-p86
-I936
-I338
+g63
+I659
+I555
(lp87
I24
-aNatp88
+aI26
+aI27
+atp88
+a(I26
+(g4
+g49
+tp89
+I733
+I572
+(lp90
+I25
+aNatp91
a(I27
-g66
-I862
-I368
-(lp89
-I24
+g70
+I659
+I609
+(lp92
+I25
aI28
-aNatp90
+aI31
+atp93
a(I28
-g86
-I936
-I385
-(lp91
+g23
+I733
+I607
+(lp94
I27
aI29
-atp92
-a(I29
-S'division'
-p93
-I1029
-I377
-(lp94
-I28
aI30
-atp95
-a(I30
-(g7
-S'1.2'
+aNatp95
+a(I29
+(g4
+S'60'
p96
tp97
-I1068
-I385
+I761
+I626
(lp98
-I29
+I28
aNatp99
-a(I31
-S'fillscreen'
+a(I30
+(g4
+S'80'
p100
-I216
-I375
-(lp101
-NaI32
+tp101
+I883
+I626
+(lp102
+I28
+aNatp103
+a(I31
+g77
+I659
+I663
+(lp104
+I27
+aI32
aI33
-aI34
-atp102
+atp105
a(I32
-(g7
-S'50'
-p103
-tp104
-I290
-I384
-(lp105
+(g4
+S'12'
+p106
+tp107
+I733
+I680
+(lp108
I31
-aNatp106
+aNatp109
a(I33
-(g7
-S'30'
-p107
-tp108
-I290
-I421
-(lp109
+g84
+I659
+I717
+(lp110
I31
-aNatp110
+aNatp111
a(I34
-g59
-I216
-I451
-(lp111
-I31
-aI35
-aI36
-aNatp112
+S'hat1'
+p112
+I670
+I65
+(lp113
+NaI35
+atp114
a(I35
-(g7
-S'20'
-p113
-tp114
-I302
-I460
+g13
+I682
+I115
(lp115
I34
+aI36
+aI37
aNatp116
a(I36
-S'setxy'
+(g4
+S'3'
p117
-I311
-I500
-(lp118
-I34
-aI37
-aI40
-aI43
-atp119
+tp118
+I768
+I124
+(lp119
+I35
+aNatp120
a(I37
-g37
-I385
-I490
-(lp120
-I36
+S'storeinbox1'
+p121
+I777
+I164
+(lp122
+I35
aI38
aI39
-aNatp121
+atp123
a(I38
-(g7
-S'-570'
-p122
-tp123
-I413
-I509
-(lp124
+(g4
+S'200'
+p124
+tp125
+I851
+I181
+(lp126
I37
-aNatp125
+aNatp127
a(I39
-(g7
-S'570'
-p126
-tp127
-I535
-I509
+g13
+I777
+I218
(lp128
I37
+aI40
+aI41
aNatp129
a(I40
-g37
-I385
-I527
-(lp130
-I36
-aI41
-aI42
-aNatp131
+(g4
+S'20'
+p130
+tp131
+I863
+I227
+(lp132
+I39
+aNatp133
a(I41
-(g7
-S'-440'
-p132
-tp133
-I413
-I546
-(lp134
-I40
-aNatp135
+S'arc'
+p134
+I872
+I267
+(lp135
+I39
+aI42
+aI43
+aI44
+atp136
a(I42
-(g7
-S'440'
-p136
-tp137
-I535
-I546
-(lp138
-I40
-aNatp139
+(g4
+S'30'
+p137
+tp138
+I946
+I276
+(lp139
+I41
+aNatp140
a(I43
-S'seth'
-p140
-I311
-I576
-(lp141
-I36
-aI44
-aI47
-atp142
+S'box1'
+p141
+I946
+I313
+(lp142
+I41
+aNatp143
a(I44
-g37
-I385
-I566
-(lp143
-I43
+g121
+I872
+I343
+(lp144
+I41
aI45
-aI46
-aNatp144
+aNatp145
a(I45
-(g7
-g31
-tp145
-I413
-I585
+g141
+I946
+I360
(lp146
I44
-aNatp147
+aI46
+atp147
a(I46
-(g7
-S'360'
+S'division'
p148
-tp149
-I535
-I585
-(lp150
-I44
-aNatp151
+I1039
+I352
+(lp149
+I45
+aI47
+atp150
a(I47
-S'stack2'
-p152
-I311
-I615
+(g4
+S'1.2'
+p151
+tp152
+I1078
+I360
(lp153
-I43
+I46
aNatp154
a(I-1
S'turtle'
diff --git a/samples/dots.png b/samples/dots.png
index dd95036..20ff59c 100755
--- a/samples/dots.png
+++ b/samples/dots.png
Binary files differ
diff --git a/samples/dots.ta b/samples/dots.ta
index a228722..c5abca9 100755
--- a/samples/dots.ta
+++ b/samples/dots.ta
@@ -2,8 +2,8 @@
(I0
S'setcolor'
p1
-I322
-I195
+I241
+I101
(lp2
NaI1
aI2
@@ -14,16 +14,16 @@ p4
S'0'
p5
tp6
-I396
-I212
+I315
+I118
(lp7
I0
aNatp8
a(I2
S'clean'
p9
-I322
-I249
+I241
+I155
(lp10
I0
aI3
@@ -31,186 +31,186 @@ atp11
a(I3
S'setpensize'
p12
-I322
-I288
+I241
+I194
(lp13
I2
-aI22
aI4
+aI5
atp14
a(I4
-S'storeinbox1'
+(g4
+S'20'
p15
-I322
-I342
-(lp16
+tp16
+I315
+I211
+(lp17
I3
-aI5
-aI6
-atp17
+aNatp18
a(I5
+S'storeinbox1'
+p19
+I241
+I248
+(lp20
+I3
+aI6
+aI7
+atp21
+a(I6
(g4
g5
-tp18
-I396
-I359
-(lp19
-I4
-aNatp20
-a(I6
-S'repeat'
-p21
-I322
-I396
-(lp22
-I4
-aI7
-aI8
-aNatp23
+tp22
+I315
+I265
+(lp23
+I5
+aNatp24
a(I7
-(g4
-S'1000'
-p24
-tp25
-I408
-I405
+S'repeat'
+p25
+I241
+I302
(lp26
-I6
+I5
+aI8
+aI9
aNatp27
a(I8
-S'pendown'
+(g4
+S'1000'
p28
-I417
-I445
-(lp29
-I6
-aI9
-atp30
+tp29
+I327
+I311
+(lp30
+I7
+aNatp31
a(I9
-S'forward'
-p31
-I417
-I484
-(lp32
-I8
+S'pendown'
+p32
+I336
+I351
+(lp33
+I7
aI10
-aI11
-atp33
+atp34
a(I10
-(g4
-S'1'
-p34
-tp35
-I491
-I493
+S'forward'
+p35
+I336
+I390
(lp36
I9
-aNatp37
+aI11
+aI12
+atp37
a(I11
-S'penup'
+(g4
+S'1'
p38
-I417
-I523
-(lp39
-I9
-aI12
-atp40
+tp39
+I410
+I399
+(lp40
+I10
+aNatp41
a(I12
-g31
-I417
-I562
-(lp41
-I11
+S'penup'
+p42
+I336
+I429
+(lp43
+I10
aI13
-aI14
-atp42
+atp44
a(I13
-S'box1'
-p43
-I491
-I571
-(lp44
+g35
+I336
+I468
+(lp45
I12
-aNatp45
+aI14
+aI15
+atp46
a(I14
+S'box1'
+p47
+I410
+I477
+(lp48
+I13
+aNatp49
+a(I15
S'right'
-p46
-I417
-I601
-(lp47
-I12
-aI15
+p50
+I336
+I507
+(lp51
+I13
aI16
-atp48
-a(I15
+aI17
+atp52
+a(I16
(g4
S'93'
-p49
-tp50
-I491
-I610
-(lp51
-I14
-aNatp52
-a(I16
-g15
-I417
-I640
-(lp53
-I14
-aI17
-aI20
-atp54
-a(I17
-g43
-I491
-I657
+p53
+tp54
+I410
+I516
(lp55
-I16
+I15
+aNatp56
+a(I17
+g19
+I336
+I546
+(lp57
+I15
aI18
-atp56
+aI21
+atp58
a(I18
-S'plus'
-p57
-I584
-I649
-(lp58
+g47
+I410
+I563
+(lp59
I17
aI19
-atp59
+atp60
a(I19
-(g4
-g34
-tp60
-I623
-I657
-(lp61
+S'plus'
+p61
+I503
+I555
+(lp62
I18
-aNatp62
+aI20
+atp63
a(I20
-g1
-I417
-I694
-(lp63
-I16
-aI21
-aNatp64
-a(I21
-g43
-I491
-I711
+(g4
+g38
+tp64
+I542
+I563
(lp65
-I20
+I19
aNatp66
+a(I21
+g1
+I336
+I600
+(lp67
+I17
+aI22
+aNatp68
a(I22
-(g4
-S'20'
-p67
-tp68
-I396
-I305
+g47
+I410
+I617
(lp69
-I3
+I21
aNatp70
a(I-1
S'turtle'
@@ -218,8 +218,8 @@ p71
F-195.08137186354315
F661.36192458837445
F120.0
-F0.0
+F1000.0
I50
-F15.0
+F20.0
tp72
a. \ No newline at end of file
diff --git a/samples/flower.png b/samples/flower.png
index f8dfd33..4e68d8a 100755
--- a/samples/flower.png
+++ b/samples/flower.png
Binary files differ
diff --git a/samples/flower.ta b/samples/flower.ta
index fd9d2d1..1f45e42 100755
--- a/samples/flower.ta
+++ b/samples/flower.ta
@@ -122,8 +122,8 @@ aNatp42
a(I13
S'storeinbox1'
p43
-I407
-I105
+I206
+I69
(lp44
NaI14
aI15
@@ -133,15 +133,15 @@ a(I14
S'0'
p46
tp47
-I481
-I122
+I280
+I86
(lp48
I13
aNatp49
a(I15
g4
-I407
-I159
+I206
+I123
(lp50
I13
aI16
@@ -152,16 +152,16 @@ a(I16
S'300'
p52
tp53
-I493
-I168
+I292
+I132
(lp54
I15
aNatp55
a(I17
S'setshade'
p56
-I502
-I208
+I301
+I172
(lp57
I15
aI18
@@ -172,8 +172,8 @@ a(I18
S'100'
p59
tp60
-I576
-I225
+I375
+I189
(lp61
I17
aI19
@@ -181,24 +181,24 @@ atp62
a(I19
S'minus'
p63
-I669
-I217
+I468
+I181
(lp64
I18
aI20
atp65
a(I20
g15
-I708
-I225
+I507
+I189
(lp66
I19
aNatp67
a(I21
S'setcolor'
p68
-I502
-I262
+I301
+I226
(lp69
I17
aI22
@@ -206,8 +206,8 @@ aI25
atp70
a(I22
g15
-I576
-I279
+I375
+I243
(lp71
I21
aI23
@@ -215,8 +215,8 @@ atp72
a(I23
S'division'
p73
-I669
-I271
+I468
+I235
(lp74
I22
aI24
@@ -226,32 +226,32 @@ a(I24
S'3'
p76
tp77
-I708
-I279
+I507
+I243
(lp78
I23
aNatp79
a(I25
S'stack2'
p80
-I502
-I316
+I301
+I280
(lp81
I21
aI26
atp82
a(I26
g43
-I502
-I355
+I301
+I319
(lp83
I25
aI27
aNatp84
a(I27
g15
-I576
-I372
+I375
+I336
(lp85
I26
aI28
@@ -259,8 +259,8 @@ atp86
a(I28
S'plus'
p87
-I669
-I364
+I468
+I328
(lp88
I27
aI29
@@ -270,8 +270,8 @@ a(I29
S'1'
p90
tp91
-I708
-I372
+I507
+I336
(lp92
I28
aNatp93
diff --git a/samples/fountain.png b/samples/fountain.png
index df84227..6f4d424 100755
--- a/samples/fountain.png
+++ b/samples/fountain.png
Binary files differ
diff --git a/samples/fountain.ta b/samples/fountain.ta
index 8ed05ac..00a9626 100755
--- a/samples/fountain.ta
+++ b/samples/fountain.ta
@@ -2,16 +2,16 @@
(I0
S'hat1'
p1
-I699
-I215
+I632
+I54
(lp2
NaI1
atp3
a(I1
S'repeat'
p4
-I711
-I265
+I644
+I104
(lp5
I0
aI2
@@ -23,16 +23,16 @@ p7
S'400'
p8
tp9
-I797
-I274
+I730
+I113
(lp10
I1
aNatp11
a(I3
S'storeinbox1'
p12
-I806
-I314
+I739
+I153
(lp13
I1
aI4
@@ -41,8 +41,8 @@ atp14
a(I4
S'heading'
p15
-I880
-I331
+I813
+I170
(lp16
I3
aI5
@@ -50,8 +50,8 @@ atp17
a(I5
S'division'
p18
-I973
-I323
+I906
+I162
(lp19
I4
aI6
@@ -60,16 +60,16 @@ a(I6
(g7
I2
tp21
-I1012
-I331
+I945
+I170
(lp22
I5
aNatp23
a(I7
S'storeinbox2'
p24
-I806
-I368
+I739
+I207
(lp25
I3
aI8
@@ -78,8 +78,8 @@ atp26
a(I8
S'box1'
p27
-I880
-I385
+I813
+I224
(lp28
I7
aI9
@@ -87,8 +87,8 @@ atp29
a(I9
S'plus'
p30
-I973
-I377
+I906
+I216
(lp31
I8
aI10
@@ -97,16 +97,16 @@ a(I10
(g7
I5
tp33
-I1012
-I385
+I945
+I224
(lp34
I9
aNatp35
a(I11
S'setcolor'
p36
-I806
-I422
+I739
+I261
(lp37
I7
aI12
@@ -115,8 +115,8 @@ atp38
a(I12
S'random'
p39
-I880
-I420
+I813
+I259
(lp40
I11
aI13
@@ -124,24 +124,24 @@ aI14
aNatp41
a(I13
g27
-I908
-I439
+I841
+I278
(lp42
I12
aNatp43
a(I14
S'box2'
p44
-I1030
-I439
+I963
+I278
(lp45
I12
aNatp46
a(I15
S'arc'
p47
-I806
-I476
+I739
+I315
(lp48
I11
aI16
@@ -152,8 +152,8 @@ a(I16
(g7
I-40
tp50
-I880
-I485
+I813
+I324
(lp51
I15
aNatp52
@@ -161,15 +161,15 @@ a(I17
(g7
I3000
tp53
-I880
-I522
+I813
+I361
(lp54
I15
aNatp55
a(I18
g47
-I806
-I552
+I739
+I391
(lp56
I15
aI19
@@ -180,8 +180,8 @@ a(I19
(g7
I-40
tp58
-I880
-I561
+I813
+I400
(lp59
I18
aNatp60
@@ -189,16 +189,16 @@ a(I20
(g7
I-3000
tp61
-I880
-I598
+I813
+I437
(lp62
I18
aNatp63
a(I21
S'right'
p64
-I806
-I628
+I739
+I467
(lp65
I18
aI22
@@ -208,16 +208,16 @@ a(I22
S'.1'
p67
tp68
-I880
-I637
+I813
+I476
(lp69
I21
aNatp70
a(I23
S'fillscreen'
p71
-I377
-I213
+I214
+I46
(lp72
NaI24
aI25
@@ -228,8 +228,8 @@ a(I24
S'10'
p74
tp75
-I451
-I222
+I288
+I55
(lp76
I23
aNatp77
@@ -238,16 +238,16 @@ a(I25
S'30'
p78
tp79
-I451
-I259
+I288
+I92
(lp80
I23
aNatp81
a(I26
S'setshade'
p82
-I377
-I289
+I214
+I122
(lp83
I23
aI27
@@ -258,16 +258,16 @@ a(I27
S'85'
p85
tp86
-I451
-I306
+I288
+I139
(lp87
I26
aNatp88
a(I28
S'setxy'
p89
-I377
-I343
+I214
+I176
(lp90
I26
aI29
@@ -279,26 +279,26 @@ a(I29
S'-590'
p92
tp93
-I451
-I352
+I288
+I185
(lp94
I28
aNatp95
a(I30
(g7
-S'-500'
+S'-450'
p96
tp97
-I451
-I389
+I288
+I222
(lp98
I28
aNatp99
a(I31
S'setpensize'
p100
-I377
-I419
+I214
+I252
(lp101
I28
aI32
@@ -309,15 +309,15 @@ a(I32
S'3'
p103
tp104
-I451
-I436
+I288
+I269
(lp105
I31
aNatp106
a(I33
g4
-I377
-I473
+I214
+I306
(lp107
I31
aI34
@@ -328,16 +328,16 @@ a(I34
S'6'
p109
tp110
-I463
-I482
+I300
+I315
(lp111
I33
aNatp112
a(I35
S'seth'
p113
-I472
-I522
+I309
+I355
(lp114
I33
aI36
@@ -348,24 +348,24 @@ a(I36
S'0'
p116
tp117
-I546
-I531
+I383
+I364
(lp118
I35
aNatp119
a(I37
S'stack1'
p120
-I472
-I561
+I309
+I394
(lp121
I35
aI38
atp122
a(I38
g89
-I472
-I600
+I309
+I433
(lp123
I37
aI39
@@ -374,16 +374,16 @@ aNatp124
a(I39
S'xcor'
p125
-I546
-I609
+I383
+I442
(lp126
I38
aI40
atp127
a(I40
g30
-I639
-I601
+I476
+I434
(lp128
I39
aI41
@@ -393,16 +393,16 @@ a(I41
S'200'
p130
tp131
-I678
-I609
+I515
+I442
(lp132
I40
aNatp133
a(I42
S'ycor'
p134
-I546
-I646
+I383
+I479
(lp135
I38
aNatp136
@@ -410,9 +410,9 @@ a(I-1
S'turtle'
p137
F609.99999999906686
-F-500.00000000254568
+F-450.00000000254568
F40.000000000009074
-I22
+I21
F85.0
F3.0
tp138
diff --git a/samples/rainbow.png b/samples/rainbow.png
index 4abea6a..4f9a85c 100755
--- a/samples/rainbow.png
+++ b/samples/rainbow.png
Binary files differ
diff --git a/samples/rainbow.ta b/samples/rainbow.ta
index 26d635e..bf36d27 100755
--- a/samples/rainbow.ta
+++ b/samples/rainbow.ta
@@ -2,16 +2,16 @@
(I0
S'clean'
p1
-I350
-I334
+I191
+I35
(lp2
NaI1
atp3
a(I1
S'setcolor'
p4
-I350
-I373
+I191
+I74
(lp5
I0
aI2
@@ -23,16 +23,16 @@ p7
S'50'
p8
tp9
-I424
-I390
+I265
+I91
(lp10
I1
aNatp11
a(I3
S'setpensize'
p12
-I350
-I427
+I191
+I128
(lp13
I1
aI4
@@ -43,16 +43,16 @@ a(I4
S'15'
p15
tp16
-I424
-I444
+I265
+I145
(lp17
I3
aNatp18
a(I5
S'repeat'
p19
-I350
-I481
+I191
+I182
(lp20
I3
aI6
@@ -62,15 +62,15 @@ a(I6
(g7
I360
tp22
-I436
-I490
+I277
+I191
(lp23
I5
aNatp24
a(I7
g4
-I445
-I530
+I286
+I231
(lp25
I5
aI8
@@ -79,8 +79,8 @@ atp26
a(I8
S'heading'
p27
-I519
-I547
+I360
+I248
(lp28
I7
aI9
@@ -88,8 +88,8 @@ atp29
a(I9
S'product'
p30
-I612
-I539
+I453
+I240
(lp31
I8
aI10
@@ -99,8 +99,8 @@ a(I10
S'100'
p33
tp34
-I651
-I547
+I492
+I248
(lp35
I9
aI11
@@ -108,8 +108,8 @@ atp36
a(I11
S'division'
p37
-I744
-I539
+I585
+I240
(lp38
I10
aI12
@@ -118,16 +118,16 @@ a(I12
(g7
I360
tp40
-I783
-I547
+I624
+I248
(lp41
I11
aNatp42
a(I13
S'forward'
p43
-I445
-I584
+I286
+I285
(lp44
I7
aI14
@@ -138,16 +138,16 @@ a(I14
S'1000'
p46
tp47
-I519
-I593
+I360
+I294
(lp48
I13
aNatp49
a(I15
S'back'
p50
-I445
-I623
+I286
+I324
(lp51
I13
aI16
@@ -158,16 +158,16 @@ a(I16
S'1000'
p53
tp54
-I519
-I632
+I360
+I333
(lp55
I15
aNatp56
a(I17
S'right'
p57
-I445
-I662
+I286
+I363
(lp58
I15
aI18
@@ -176,8 +176,8 @@ a(I18
(g7
I1
tp60
-I519
-I671
+I360
+I372
(lp61
I17
aNatp62
diff --git a/samples/redwisp.png b/samples/redwisp.png
index efd6aa6..efc1dcf 100755
--- a/samples/redwisp.png
+++ b/samples/redwisp.png
Binary files differ
diff --git a/samples/redwisp.ta b/samples/redwisp.ta
index 63667c7..3158a7d 100755
--- a/samples/redwisp.ta
+++ b/samples/redwisp.ta
@@ -2,16 +2,16 @@
(I0
S'hat1'
p1
-I870
-I142
+I750
+I100
(lp2
NaI1
atp3
a(I1
S'repeat'
p4
-I882
-I192
+I762
+I150
(lp5
I0
aI2
@@ -24,16 +24,16 @@ p7
S'4'
p8
tp9
-I968
-I201
+I848
+I159
(lp10
I1
aNatp11
a(I3
S'arc'
p12
-I977
-I241
+I857
+I199
(lp13
I1
aI4
@@ -45,8 +45,8 @@ a(I4
S'180'
p15
tp16
-I1051
-I250
+I931
+I208
(lp17
I3
aNatp18
@@ -55,15 +55,15 @@ a(I5
S'75'
p19
tp20
-I1051
-I287
+I931
+I245
(lp21
I3
aNatp22
a(I6
g12
-I977
-I317
+I857
+I275
(lp23
I3
aI7
@@ -74,8 +74,8 @@ a(I7
S'-180'
p25
tp26
-I1051
-I326
+I931
+I284
(lp27
I6
aNatp28
@@ -84,32 +84,32 @@ a(I8
S'75'
p29
tp30
-I1051
-I363
+I931
+I321
(lp31
I6
aNatp32
a(I9
S'vspace'
p33
-I882
-I282
+I762
+I240
(lp34
I1
aI10
atp35
a(I10
g33
-I882
-I351
+I762
+I309
(lp36
I9
aI11
atp37
a(I11
g4
-I882
-I420
+I762
+I378
(lp38
I10
aI12
@@ -120,15 +120,15 @@ a(I12
(g7
g8
tp40
-I968
-I429
+I848
+I387
(lp41
I11
aNatp42
a(I13
g12
-I977
-I469
+I857
+I427
(lp43
I11
aI14
@@ -140,8 +140,8 @@ a(I14
S'-180'
p45
tp46
-I1051
-I478
+I931
+I436
(lp47
I13
aNatp48
@@ -150,15 +150,15 @@ a(I15
S'-75'
p49
tp50
-I1051
-I515
+I931
+I473
(lp51
I13
aNatp52
a(I16
g12
-I977
-I545
+I857
+I503
(lp53
I13
aI17
@@ -169,8 +169,8 @@ a(I17
S'180'
p55
tp56
-I1051
-I554
+I931
+I512
(lp57
I16
aNatp58
@@ -179,23 +179,23 @@ a(I18
S'-75'
p59
tp60
-I1051
-I591
+I931
+I549
(lp61
I16
aNatp62
a(I19
g33
-I882
-I510
+I762
+I468
(lp63
I11
aI20
atp64
a(I20
g33
-I882
-I579
+I762
+I537
(lp65
I19
aI21
@@ -203,8 +203,8 @@ atp66
a(I21
S'right'
p67
-I882
-I648
+I762
+I606
(lp68
I20
aI22
@@ -214,16 +214,16 @@ a(I22
S'1'
p70
tp71
-I956
-I657
+I836
+I615
(lp72
I21
aNatp73
a(I23
S'setpensize'
p74
-I351
-I344
+I162
+I124
(lp75
NaI24
aI25
@@ -233,15 +233,15 @@ a(I24
S'15'
p77
tp78
-I425
-I361
+I236
+I141
(lp79
I23
aNatp80
a(I25
g4
-I351
-I398
+I162
+I178
(lp81
I23
aI26
@@ -252,16 +252,16 @@ a(I26
S'360'
p83
tp84
-I437
-I407
+I248
+I187
(lp85
I25
aNatp86
a(I27
S'storeinbox1'
p87
-I446
-I447
+I257
+I227
(lp88
I25
aI28
@@ -270,8 +270,8 @@ atp89
a(I28
S'heading'
p90
-I520
-I464
+I331
+I244
(lp91
I27
aI29
@@ -279,8 +279,8 @@ atp92
a(I29
S'product'
p93
-I613
-I456
+I424
+I236
(lp94
I28
aI30
@@ -290,16 +290,16 @@ a(I30
S'600'
p96
tp97
-I652
-I464
+I463
+I244
(lp98
I29
aNatp99
a(I31
S'setshade'
p100
-I446
-I501
+I257
+I281
(lp101
I27
aI32
@@ -308,8 +308,8 @@ atp102
a(I32
S'box1'
p103
-I520
-I518
+I331
+I298
(lp104
I31
aI33
@@ -317,8 +317,8 @@ atp105
a(I33
S'division'
p106
-I613
-I510
+I424
+I290
(lp107
I32
aI34
@@ -328,27 +328,27 @@ a(I34
S'360'
p109
tp110
-I652
-I518
+I463
+I298
(lp111
I33
aNatp112
a(I35
S'stack1'
p113
-I446
-I555
+I257
+I335
(lp114
I31
aNatp115
a(I-1
S'turtle'
p116
-I557
-I373
+I-552
+I376
F0.0
I0
-F0.66666666666662877
+F598.33333333333337
F15.0
tp117
a. \ No newline at end of file
diff --git a/samples/reflections.png b/samples/reflections.png
index 9bf48a4..ddb3aa7 100755
--- a/samples/reflections.png
+++ b/samples/reflections.png
Binary files differ
diff --git a/samples/reflections.ta b/samples/reflections.ta
index a009075..e112aa3 100755
--- a/samples/reflections.ta
+++ b/samples/reflections.ta
@@ -2,16 +2,16 @@
(I0
S'clean'
p1
-I689
-I106
+I119
+I61
(lp2
NaI1
atp3
a(I1
S'setpensize'
p4
-I689
-I145
+I119
+I100
(lp5
I0
aI2
@@ -23,16 +23,16 @@ p7
S'15'
p8
tp9
-I763
-I162
+I193
+I117
(lp10
I1
aNatp11
a(I3
S'storeinbox1'
p12
-I689
-I199
+I119
+I154
(lp13
I1
aI4
@@ -43,16 +43,16 @@ a(I4
S'6200'
p15
tp16
-I763
-I216
+I193
+I171
(lp17
I3
aNatp18
a(I5
S'repeat'
p19
-I689
-I253
+I119
+I208
(lp20
I3
aI6
@@ -63,16 +63,16 @@ a(I6
S'6200'
p22
tp23
-I775
-I262
+I205
+I217
(lp24
I5
aNatp25
a(I7
S'storeinbox2'
p26
-I784
-I302
+I214
+I257
(lp27
I5
aI8
@@ -81,8 +81,8 @@ atp28
a(I8
S'box1'
p29
-I858
-I319
+I288
+I274
(lp30
I7
aI9
@@ -90,8 +90,8 @@ atp31
a(I9
S'division'
p32
-I951
-I311
+I381
+I266
(lp33
I8
aI10
@@ -101,16 +101,16 @@ a(I10
S'50'
p35
tp36
-I990
-I319
+I420
+I274
(lp37
I9
aNatp38
a(I11
S'setshade'
p39
-I784
-I356
+I214
+I311
(lp40
I7
aI12
@@ -121,8 +121,8 @@ a(I12
S'100'
p42
tp43
-I858
-I373
+I288
+I328
(lp44
I11
aI13
@@ -130,8 +130,8 @@ atp45
a(I13
S'minus'
p46
-I951
-I365
+I381
+I320
(lp47
I12
aI14
@@ -139,16 +139,16 @@ atp48
a(I14
S'box2'
p49
-I990
-I373
+I420
+I328
(lp50
I13
aNatp51
a(I15
S'forward'
p52
-I784
-I410
+I214
+I365
(lp53
I11
aI16
@@ -156,16 +156,16 @@ aI19
atp54
a(I16
g29
-I858
-I419
+I288
+I374
(lp55
I15
aI17
atp56
a(I17
g32
-I951
-I411
+I381
+I366
(lp57
I16
aI18
@@ -175,16 +175,16 @@ a(I18
S'8'
p59
tp60
-I990
-I419
+I420
+I374
(lp61
I17
aNatp62
a(I19
S'back'
p63
-I784
-I449
+I214
+I404
(lp64
I15
aI20
@@ -192,16 +192,16 @@ aI23
atp65
a(I20
g29
-I858
-I458
+I288
+I413
(lp66
I19
aI21
atp67
a(I21
g32
-I951
-I450
+I381
+I405
(lp68
I20
aI22
@@ -210,16 +210,16 @@ a(I22
(g7
g59
tp70
-I990
-I458
+I420
+I413
(lp71
I21
aNatp72
a(I23
S'right'
p73
-I784
-I488
+I214
+I443
(lp74
I19
aI24
@@ -230,15 +230,15 @@ a(I24
S'1'
p76
tp77
-I858
-I497
+I288
+I452
(lp78
I23
aNatp79
a(I25
g12
-I784
-I527
+I214
+I482
(lp80
I23
aI26
@@ -246,16 +246,16 @@ aI29
atp81
a(I26
g29
-I858
-I544
+I288
+I499
(lp82
I25
aI27
atp83
a(I27
g46
-I951
-I536
+I381
+I491
(lp84
I26
aI28
@@ -264,35 +264,35 @@ a(I28
(g7
g76
tp86
-I990
-I544
+I420
+I499
(lp87
I27
aNatp88
a(I29
S'setcolor'
p89
-I784
-I581
+I214
+I536
(lp90
I25
aI30
aNatp91
a(I30
g29
-I858
-I598
+I288
+I553
(lp92
I29
aNatp93
a(I-1
S'turtle'
p94
-I-584
-I-436
-I0
+I-521
+I371
+F80.0
F0.0
-F99.019999999999996
+F99.980000000000004
F15.0
tp95
a. \ No newline at end of file
diff --git a/samples/shades.png b/samples/shades.png
index ca59fce..912c38a 100755
--- a/samples/shades.png
+++ b/samples/shades.png
Binary files differ
diff --git a/samples/shades.ta b/samples/shades.ta
index c6e6790..c9c9919 100755
--- a/samples/shades.ta
+++ b/samples/shades.ta
@@ -2,16 +2,16 @@
(I0
S'clean'
p1
-I410
-I108
+I241
+I77
(lp2
NaI1
atp3
a(I1
S'setcolor'
p4
-I410
-I147
+I241
+I116
(lp5
I0
aI2
@@ -23,16 +23,16 @@ p7
S'50'
p8
tp9
-I484
-I164
+I315
+I133
(lp10
I1
aNatp11
a(I3
S'setpensize'
p12
-I410
-I201
+I241
+I170
(lp13
I1
aI4
@@ -43,16 +43,16 @@ a(I4
S'15'
p15
tp16
-I484
-I218
+I315
+I187
(lp17
I3
aNatp18
a(I5
S'repeat'
p19
-I410
-I255
+I241
+I224
(lp20
I3
aI6
@@ -62,16 +62,16 @@ a(I6
(g7
I360
tp22
-I496
-I264
+I327
+I233
(lp23
I5
aNatp24
a(I7
S'setshade'
p25
-I505
-I304
+I336
+I273
(lp26
I5
aI8
@@ -80,8 +80,8 @@ atp27
a(I8
S'heading'
p28
-I579
-I321
+I410
+I290
(lp29
I7
aI9
@@ -89,8 +89,8 @@ atp30
a(I9
S'product'
p31
-I672
-I313
+I503
+I282
(lp32
I8
aI10
@@ -99,8 +99,8 @@ a(I10
(g7
I200
tp34
-I711
-I321
+I542
+I290
(lp35
I9
aI11
@@ -108,8 +108,8 @@ atp36
a(I11
S'division'
p37
-I804
-I313
+I635
+I282
(lp38
I10
aI12
@@ -118,16 +118,16 @@ a(I12
(g7
I360
tp40
-I843
-I321
+I674
+I290
(lp41
I11
aNatp42
a(I13
S'forward'
p43
-I505
-I358
+I336
+I327
(lp44
I7
aI14
@@ -138,16 +138,16 @@ a(I14
S'1000'
p46
tp47
-I579
-I367
+I410
+I336
(lp48
I13
aNatp49
a(I15
S'back'
p50
-I505
-I397
+I336
+I366
(lp51
I13
aI16
@@ -158,16 +158,16 @@ a(I16
S'1000'
p53
tp54
-I579
-I406
+I410
+I375
(lp55
I15
aNatp56
a(I17
S'right'
p57
-I505
-I436
+I336
+I405
(lp58
I15
aI18
@@ -176,8 +176,8 @@ a(I18
(g7
I1
tp60
-I579
-I445
+I410
+I414
(lp61
I17
aNatp62
diff --git a/samples/smoothcandy.png b/samples/smoothcandy.png
index 8929d50..542c258 100755
--- a/samples/smoothcandy.png
+++ b/samples/smoothcandy.png
Binary files differ
diff --git a/samples/smoothcandy.ta b/samples/smoothcandy.ta
index 5b424e6..c65a175 100755
--- a/samples/smoothcandy.ta
+++ b/samples/smoothcandy.ta
@@ -2,16 +2,16 @@
(I0
S'clean'
p1
-I181
-I407
+I212
+I39
(lp2
NaI1
atp3
a(I1
S'repeat'
p4
-I181
-I446
+I212
+I78
(lp5
I0
aI2
@@ -22,16 +22,16 @@ a(I2
p7
I350
tp8
-I267
-I455
+I298
+I87
(lp9
I1
aNatp10
a(I3
S'setpensize'
p11
-I276
-I495
+I307
+I127
(lp12
I1
aI4
@@ -40,8 +40,8 @@ atp13
a(I4
S'heading'
p14
-I350
-I512
+I381
+I144
(lp15
I3
aI5
@@ -49,8 +49,8 @@ atp16
a(I5
S'plus'
p17
-I443
-I504
+I474
+I136
(lp18
I4
aI6
@@ -59,16 +59,16 @@ a(I6
(g7
I4
tp20
-I482
-I512
+I513
+I144
(lp21
I5
aNatp22
a(I7
S'forward'
p23
-I276
-I549
+I307
+I181
(lp24
I3
aI8
@@ -79,16 +79,16 @@ a(I8
S'1000'
p26
tp27
-I350
-I558
+I381
+I190
(lp28
I7
aNatp29
a(I9
S'setcolor'
p30
-I276
-I588
+I307
+I220
(lp31
I7
aI10
@@ -96,8 +96,8 @@ aI13
atp32
a(I10
g14
-I350
-I605
+I381
+I237
(lp33
I9
aI11
@@ -105,8 +105,8 @@ atp34
a(I11
S'division'
p35
-I443
-I597
+I474
+I229
(lp36
I10
aI12
@@ -115,16 +115,16 @@ a(I12
(g7
I3
tp38
-I482
-I605
+I513
+I237
(lp39
I11
aNatp40
a(I13
S'storeinbox1'
p41
-I276
-I642
+I307
+I274
(lp42
I9
aI14
@@ -132,16 +132,16 @@ aI17
atp43
a(I14
g14
-I350
-I659
+I381
+I291
(lp44
I13
aI15
atp45
a(I15
g35
-I443
-I651
+I474
+I283
(lp46
I14
aI16
@@ -150,16 +150,16 @@ a(I16
(g7
I2
tp48
-I482
-I659
+I513
+I291
(lp49
I15
aNatp50
a(I17
S'setshade'
p51
-I276
-I696
+I307
+I328
(lp52
I13
aI18
@@ -169,8 +169,8 @@ a(I18
(g7
I100
tp54
-I350
-I713
+I381
+I345
(lp55
I17
aI19
@@ -178,8 +178,8 @@ atp56
a(I19
S'minus'
p57
-I443
-I705
+I474
+I337
(lp58
I18
aI20
@@ -187,16 +187,16 @@ atp59
a(I20
S'box1'
p60
-I482
-I713
+I513
+I345
(lp61
I19
aNatp62
a(I21
S'back'
p63
-I276
-I750
+I307
+I382
(lp64
I17
aI22
@@ -207,16 +207,16 @@ a(I22
S'1000'
p66
tp67
-I350
-I759
+I381
+I391
(lp68
I21
aNatp69
a(I23
S'left'
p70
-I276
-I789
+I307
+I421
(lp71
I21
aI24
@@ -225,16 +225,16 @@ a(I24
(g7
I1
tp73
-I350
-I798
+I381
+I430
(lp74
I23
aNatp75
a(I-1
S'turtle'
p76
-F0.0
-F0.0
+I-558
+I383
F10.0
F3.6666666666666665
F94.5
diff --git a/samples/square.png b/samples/square.png
index 848de15..7f582f7 100755
--- a/samples/square.png
+++ b/samples/square.png
Binary files differ
diff --git a/samples/squares.png b/samples/squares.png
index ca854d0..7535c24 100755
--- a/samples/squares.png
+++ b/samples/squares.png
Binary files differ
diff --git a/samples/squares.ta b/samples/squares.ta
index e309231..4886245 100755
--- a/samples/squares.ta
+++ b/samples/squares.ta
@@ -2,8 +2,8 @@
(I0
S'repeat'
p1
-I762
-I95
+I765
+I94
(lp2
NaI1
aI2
@@ -13,15 +13,15 @@ a(I1
p4
I36
tp5
-I848
-I104
+I851
+I103
(lp6
I0
aNatp7
a(I2
g1
-I857
-I144
+I860
+I143
(lp8
I0
aI3
@@ -32,16 +32,16 @@ a(I3
(g4
I4
tp10
-I943
-I153
+I946
+I152
(lp11
I2
aNatp12
a(I4
S'forward'
p13
-I952
-I193
+I955
+I192
(lp14
I2
aI5
@@ -52,16 +52,16 @@ a(I5
S'300'
p16
tp17
-I1026
-I202
+I1029
+I201
(lp18
I4
aNatp19
a(I6
S'right'
p20
-I952
-I232
+I955
+I231
(lp21
I4
aI7
@@ -70,24 +70,24 @@ a(I7
(g4
I90
tp23
-I1026
-I241
+I1029
+I240
(lp24
I6
aNatp25
a(I8
S'vspace'
p26
-I857
-I234
+I860
+I233
(lp27
I2
aI9
atp28
a(I9
g20
-I857
-I303
+I860
+I302
(lp29
I8
aI10
@@ -96,8 +96,8 @@ a(I10
(g4
I10
tp31
-I931
-I312
+I934
+I311
(lp32
I9
aNatp33
diff --git a/samples/squiral.png b/samples/squiral.png
index 899b2ac..8e6ffd5 100755
--- a/samples/squiral.png
+++ b/samples/squiral.png
Binary files differ
diff --git a/samples/xo-man.png b/samples/xo-man.png
index a75f159..1780933 100755
--- a/samples/xo-man.png
+++ b/samples/xo-man.png
Binary files differ
diff --git a/samples/xo-man.ta b/samples/xo-man.ta
index 7ecff69..967bf24 100755
--- a/samples/xo-man.ta
+++ b/samples/xo-man.ta
@@ -1,602 +1,595 @@
(lp0
(I0
-S'hat1'
+S'hat2'
p1
-I837
-I133
+I66
+I315
(lp2
NaI1
atp3
a(I1
-S'left'
+S'setcolor'
p4
-I849
-I183
+I78
+I365
(lp5
I0
aI2
-aI3
+aI7
atp6
a(I2
(S'number'
p7
-S'45'
+S'0'
p8
tp9
-I923
-I192
+I152
+I382
(lp10
I1
-aNatp11
+aI3
+atp11
a(I3
-S'repeat'
+S'plus'
p12
-I849
-I222
+I245
+I374
(lp13
-I1
+I2
aI4
-aI5
-aI9
atp14
a(I4
-(g7
-S'4'
+S'random'
p15
-tp16
-I935
-I231
-(lp17
-I3
-aNatp18
-a(I5
-S'forward'
-p19
-I944
-I271
-(lp20
+I284
+I363
+(lp16
I3
-aI48
+aI5
aI6
-atp21
+aNatp17
+a(I5
+(g7
+g8
+tp18
+I312
+I382
+(lp19
+I4
+aNatp20
a(I6
-S'back'
-p22
-I944
-I310
+(g7
+S'100'
+p21
+tp22
+I434
+I382
(lp23
-I5
-aI49
-aI7
-atp24
+I4
+aNatp24
a(I7
-g4
-I944
-I349
-(lp25
-I6
+S'setpensize'
+p25
+I78
+I419
+(lp26
+I1
aI8
-aNatp26
+aI9
+atp27
a(I8
(g7
-S'90'
-p27
-tp28
-I1018
-I358
-(lp29
+S'40'
+p28
+tp29
+I152
+I436
+(lp30
I7
-aNatp30
+aNatp31
a(I9
-S'vspace'
-p31
-I849
-I312
-(lp32
-I3
+S'stack1'
+p32
+I78
+I473
+(lp33
+I7
aI10
-atp33
+atp34
a(I10
-S'right'
-p34
-I849
-I381
+g4
+I78
+I512
(lp35
I9
aI11
-aI12
+aI14
atp36
a(I11
-(g7
-S'45'
+S'color'
p37
-tp38
-I923
-I390
-(lp39
+I152
+I529
+(lp38
I10
-aNatp40
+aI12
+atp39
a(I12
-S'penup'
-p41
-I849
-I420
-(lp42
-I10
+g12
+I245
+I521
+(lp40
+I11
aI13
-atp43
+atp41
a(I13
-g19
-I849
-I459
+(g7
+S'10'
+p42
+tp43
+I284
+I529
(lp44
I12
-aI50
-aI14
-atp45
+aNatp45
a(I14
-S'pendown'
-p46
-I849
-I498
-(lp47
-I13
+g25
+I78
+I566
+(lp46
+I10
aI15
-atp48
+aI18
+atp47
a(I15
-S'setpensize'
-p49
-I849
-I537
-(lp50
+S'pensize'
+p48
+I152
+I583
+(lp49
I14
aI16
-aI19
-atp51
+atp50
a(I16
-S'pensize'
-p52
-I923
-I554
-(lp53
+S'minus'
+p51
+I245
+I575
+(lp52
I15
aI17
-atp54
+atp53
a(I17
-S'plus'
-p55
-I1016
-I546
+(g7
+S'25'
+p54
+tp55
+I284
+I583
(lp56
I16
-aI18
-atp57
+aNatp57
a(I18
-(g7
-S'35'
-p58
-tp59
-I1055
-I554
-(lp60
-I17
-aNatp61
+g32
+I78
+I620
+(lp58
+I14
+aNatp59
a(I19
-g19
-I849
-I591
-(lp62
-I15
-aI20
-aI21
-atp63
+S'hat1'
+p60
+I768
+I28
+(lp61
+NaI20
+atp62
a(I20
-(g7
-S'1'
-p64
-tp65
-I923
-I600
-(lp66
+S'left'
+p63
+I780
+I78
+(lp64
I19
-aNatp67
+aI21
+aI22
+atp65
a(I21
-g41
-I849
-I630
+(g7
+S'45'
+p66
+tp67
+I854
+I87
(lp68
-I19
-aI22
-atp69
+I20
+aNatp69
a(I22
-g22
-I849
-I669
-(lp70
-I21
-aI51
+S'repeat'
+p70
+I780
+I117
+(lp71
+I20
aI23
-atp71
+aI24
+aI30
+atp72
a(I23
-g46
-I849
-I708
-(lp72
+(g7
+S'4'
+p73
+tp74
+I866
+I126
+(lp75
I22
-aI24
-atp73
+aNatp76
a(I24
-g49
-I849
-I747
-(lp74
-I23
+S'forward'
+p77
+I875
+I166
+(lp78
+I22
aI25
-aNatp75
+aI26
+atp79
a(I25
-g52
-I923
-I764
-(lp76
+(g7
+S'75'
+p80
+tp81
+I949
+I175
+(lp82
I24
-aI26
-atp77
+aNatp83
a(I26
-S'minus'
-p78
-I1016
-I756
-(lp79
-I25
+S'back'
+p84
+I875
+I205
+(lp85
+I24
aI27
-atp80
+aI28
+atp86
a(I27
(g7
-S'35'
-p81
-tp82
-I1055
-I764
-(lp83
+S'75'
+p87
+tp88
+I949
+I214
+(lp89
I26
-aNatp84
+aNatp90
a(I28
-S'setcolor'
-p85
-I87
-I546
-(lp86
-I46
+g63
+I875
+I244
+(lp91
+I26
aI29
-aI34
-atp87
+aNatp92
a(I29
(g7
-S'0'
-p88
-tp89
-I161
-I563
-(lp90
+S'90'
+p93
+tp94
+I949
+I253
+(lp95
I28
-aI30
-atp91
+aNatp96
a(I30
-g55
-I254
-I555
-(lp92
-I29
+S'vspace'
+p97
+I780
+I207
+(lp98
+I22
aI31
-atp93
+atp99
a(I31
-S'random'
-p94
-I293
-I544
-(lp95
+S'right'
+p100
+I780
+I276
+(lp101
I30
aI32
aI33
-aNatp96
+atp102
a(I32
(g7
-g88
-tp97
-I321
-I563
-(lp98
+S'45'
+p103
+tp104
+I854
+I285
+(lp105
I31
-aNatp99
+aNatp106
a(I33
-(g7
-S'100'
-p100
-tp101
-I443
-I563
-(lp102
+S'penup'
+p107
+I780
+I315
+(lp108
I31
-aNatp103
+aI34
+atp109
a(I34
-g49
-I87
-I600
-(lp104
-I28
+g77
+I780
+I354
+(lp110
+I33
aI35
aI36
-atp105
+atp111
a(I35
(g7
-S'40'
-p106
-tp107
-I161
-I617
-(lp108
+S'90'
+p112
+tp113
+I854
+I363
+(lp114
I34
-aNatp109
+aNatp115
a(I36
-S'stack1'
-p110
-I87
-I654
-(lp111
+S'pendown'
+p116
+I780
+I393
+(lp117
I34
aI37
-atp112
+atp118
a(I37
-g85
-I87
-I693
-(lp113
+g25
+I780
+I432
+(lp119
I36
aI38
aI41
-atp114
+atp120
a(I38
-S'color'
-p115
-I161
-I710
-(lp116
+g48
+I854
+I449
+(lp121
I37
aI39
-atp117
+atp122
a(I39
-g55
-I254
-I702
-(lp118
+g12
+I947
+I441
+(lp123
I38
aI40
-atp119
+atp124
a(I40
(g7
-S'10'
-p120
-tp121
-I293
-I710
-(lp122
+S'35'
+p125
+tp126
+I986
+I449
+(lp127
I39
-aNatp123
+aNatp128
a(I41
-g49
-I87
-I747
-(lp124
+g77
+I780
+I486
+(lp129
I37
aI42
-aI45
-atp125
+aI43
+atp130
a(I42
-g52
-I161
-I764
-(lp126
+(g7
+S'1'
+p131
+tp132
+I854
+I495
+(lp133
I41
-aI43
-atp127
+aNatp134
a(I43
-g78
-I254
-I756
-(lp128
-I42
+g107
+I780
+I525
+(lp135
+I41
aI44
-atp129
+atp136
a(I44
-(g7
-S'25'
-p130
-tp131
-I293
-I764
-(lp132
+g84
+I780
+I564
+(lp137
I43
-aNatp133
+aI45
+aI46
+atp138
a(I45
-g110
-I87
-I801
-(lp134
-I41
-aNatp135
+(g7
+S'91'
+p139
+tp140
+I854
+I573
+(lp141
+I44
+aNatp142
a(I46
-S'hat2'
-p136
-I75
-I496
-(lp137
-NaI28
-atp138
+g116
+I780
+I603
+(lp143
+I44
+aI47
+atp144
a(I47
-S'xcor'
-p139
-I316
-I329
-(lp140
-NaNatp141
+g25
+I780
+I642
+(lp145
+I46
+aI48
+aNatp146
a(I48
-(g7
-S'75'
-p142
-tp143
-I1018
-I280
-(lp144
-I5
-aNatp145
+g48
+I854
+I659
+(lp147
+I47
+aI49
+atp148
a(I49
-(g7
-S'75'
-p146
-tp147
-I1018
-I319
-(lp148
-I6
-aNatp149
+g51
+I947
+I651
+(lp149
+I48
+aI50
+atp150
a(I50
(g7
-S'90'
-p150
-tp151
-I923
-I468
-(lp152
-I13
-aNatp153
+S'35'
+p151
+tp152
+I986
+I659
+(lp153
+I49
+aNatp154
a(I51
-(g7
-S'91'
-p154
-tp155
-I923
-I678
+S'clean'
+p155
+I192
+I25
(lp156
-I22
-aNatp157
+NaI52
+atp157
a(I52
-S'clean'
+S'forever'
p158
-I305
-I33
+I192
+I64
(lp159
-NaI53
-atp160
+I51
+aI53
+aNatp160
a(I53
-S'forever'
-p161
-I305
-I72
-(lp162
+g107
+I273
+I78
+(lp161
I52
aI54
-aNatp163
+atp162
a(I54
-g41
-I386
-I86
+S'setxy'
+p163
+I273
+I117
(lp164
I53
aI55
+aI58
+aI61
atp165
a(I55
-S'setxy'
-p166
-I386
-I125
-(lp167
+g15
+I347
+I107
+(lp166
I54
aI56
-aI59
-aI62
-atp168
-a(I56
-g94
-I460
-I115
-(lp169
-I55
aI57
-aI58
-aNatp170
-a(I57
+aNatp167
+a(I56
(g7
S'-600'
-p171
-tp172
-I488
-I134
-(lp173
-I56
-aNatp174
-a(I58
+p168
+tp169
+I375
+I126
+(lp170
+I55
+aNatp171
+a(I57
(g7
S'600'
-p175
-tp176
-I610
-I134
-(lp177
-I56
-aNatp178
-a(I59
-g94
-I460
-I152
-(lp179
+p172
+tp173
+I497
+I126
+(lp174
I55
+aNatp175
+a(I58
+g15
+I347
+I144
+(lp176
+I54
+aI59
aI60
-aI61
-aNatp180
-a(I60
+aNatp177
+a(I59
(g7
S'-450'
-p181
-tp182
-I488
-I171
-(lp183
-I59
-aNatp184
-a(I61
+p178
+tp179
+I375
+I163
+(lp180
+I58
+aNatp181
+a(I60
(g7
S'450'
-p185
-tp186
-I610
-I171
-(lp187
-I59
-aNatp188
+p182
+tp183
+I497
+I163
+(lp184
+I58
+aNatp185
+a(I61
+g116
+I273
+I193
+(lp186
+I54
+aI62
+atp187
a(I62
-g46
-I386
-I201
-(lp189
-I55
-aI63
-atp190
-a(I63
S'stack2'
-p191
-I386
-I240
-(lp192
-I62
-aNatp193
+p188
+I273
+I232
+(lp189
+I61
+aNatp190
a(I-1
S'turtle'
-p194
-F71.033008588991066
-F309.03300858899104
-F45.0
-F99.0
+p191
+I-544
+I405
+F225.0
+F25.0
I50
F15.0
-tp195
+tp192
a. \ No newline at end of file
diff --git a/ta.py b/ta.py
index b95abf1..c7de44a 100755
--- a/ta.py
+++ b/ta.py
@@ -6,19 +6,23 @@ import os
import os.path
import pickle
from math import atan2, pi
+import sys
from sprites import *
from turtlesetup import *
import logo
import turtle
+from sugar.datastore import datastore
+
WIDTH=1200
-HEIGHT=825
+HEIGHT=780
DEGTOR = 2*pi/360
gc = None
area = None
+window = None
draggroup = None
dragpos = (0,0)
current_category = None
@@ -33,7 +37,6 @@ status_spr = None
turtle_spr = None
hidden_palette_icon = None
selbuttons = None
-project_flap = None
load_save_folder = None
save_file_name = None
@@ -44,6 +47,7 @@ save_file_name = None
def buttonpress_cb(win, event):
global draggroup, dragpos, block_operation, selected_block
+ window.grab_focus()
block_operation = 'click'
if selected_block!=None: unselect()
status_spr.setlayer(400)
@@ -61,8 +65,6 @@ def buttonpress_cb(win, event):
block_pressed(event,x,y,spr)
elif spr.type == 'turtle':
turtle_pressed(x,y)
- elif spr.type == 'project_flap':
- project_flap_pressed(spr,x,y)
return True
def block_pressed(event,x,y,spr):
@@ -248,12 +250,10 @@ def keypress_cb(area, event):
keyname = gtk.gdk.keyval_name(event.keyval)
# print keyname
if (event.get_state()&gtk.gdk.CONTROL_MASK):
- if keyname=="n": new_project()
- elif keyname=="o": load_file()
- elif keyname=="s": save_file()
- elif keyname=="c": turtle.clearscreen()
+ if keyname=="s": save_file()
+ if keyname=="k": clear_journal()
return True
- if selected_block==None: return True
+ if selected_block==None: return False
keyname = gtk.gdk.keyval_name(event.keyval)
if keyname in ['minus', 'period']: keyname = {'minus': '-', 'period': '.'}[keyname]
if len(keyname)>1: return True
@@ -285,18 +285,28 @@ def new_project():
save_file_name = None
def load_file():
+ '''Pop a load file dialog to allow the user to pick a .ta file to load. Guess that a .png file with the same name resides in the same directory and try to load that too.'''
global save_file_name
fname = get_load_name()
if fname==None: return
if fname[-3:]=='.ta': fname=fname[0:-3]
- f = open(fname+'.ta',"rU")
+ load_files(fname+'.ta', fname+'.png')
+ save_file_name = os.path.basename(fname)
+
+def load_files(ta_file, png_file=''):
+ '''Load the given TA code file and optional starting image as png file into a new project.'''
+ f = open(ta_file, "r")
data = pickle.load(f)
f.close()
new_project()
read_data(data)
- if os.access(fname+'.png', os.F_OK): load_pict(fname+'.png')
+ try:
+ load_pict(png_file)
+ except:
+ '''the picture not loading is OK'''
+ print "load_files: picture didn't load"
+ pass
turtlecanvas.inval()
- save_file_name = os.path.basename(fname)
def get_load_name():
dialog = gtk.FileChooserDialog("Load...", None,
@@ -341,12 +351,13 @@ def load_pict(fname):
turtlecanvas.image.draw_pixbuf(gc, pict, 0, 0, 0, 0)
def save_file():
+ '''Pop a save file dialog to allow the user to pick a filename to save their project. Also saves the current art as a .png file with the same name.'''
global save_file_name
fname = get_save_name()
if fname==None: return
if fname[-3:]=='.ta': fname=fname[0:-3]
- save_data(fname)
- save_pict(fname)
+ save_data(fname+".ta")
+ save_pict(fname+".png")
save_file_name = os.path.basename(fname)
def get_save_name():
@@ -358,7 +369,8 @@ def get_save_name():
return do_dialog(dialog)
def save_data(fname):
- f = file(fname+".ta", "w")
+ '''Writes the TurtleArt code to the given filename.'''
+ f = file(fname, "w")
bs = blocks()
data = []
for i in range(len(bs)): bs[i].id=i
@@ -374,10 +386,11 @@ def save_data(fname):
f.close()
def save_pict(fname):
+ '''Writes the current art to the given filename.'''
tc = turtlecanvas
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, tc.width, tc.height)
pixbuf.get_from_drawable(tc.image, tc.image.get_colormap(), 0, 0, 0, 0, tc.width, tc.height)
- pixbuf.save(fname+'.png', 'png')
+ pixbuf.save(fname, 'png')
def get_id(x):
if x==None: return None
@@ -398,6 +411,13 @@ def do_dialog(dialog):
dialog.destroy()
return result
+def clear_journal():
+ jobjects, total_count = datastore.find({'activity': 'org.laptop.TurtleArtActivity'})
+ print 'found', total_count, 'entries'
+ for jobject in jobjects[:-1]:
+ print jobject.object_id
+ datastore.delete(jobject.object_id)
+
#
# Block utilities
@@ -439,10 +459,7 @@ def blocks(): return [spr for spr in spritelist() if spr.type == 'block']
#
def tooldispatch(spr):
- if spr.blocktype == 'new': runtool(spr,new_project)
- elif spr.blocktype == 'open': runtool(spr,load_file)
- elif spr.blocktype == 'save': runtool(spr,save_file)
- elif spr.blocktype == 'hideshow': hideshow_blocks(spr)
+ if spr.blocktype == 'hideshow': hideshow_blocks(spr)
elif spr.blocktype == 'eraser': runtool(spr,turtle.clearscreen)
elif spr.blocktype == 'stopit': logo.step = just_stop()
@@ -463,26 +480,14 @@ def hideshow_blocks(spr):
turtlecanvas.inval()
-def project_flap_pressed(spr,x,y):
- if spr.image==project_flap['closed']: spr.setshape(project_flap['open'])
- else:
- dx,dy = x-spr.x, y-spr.y,
- pixel = getpixel(project_flap['mask'],dx,dy)
- index = ((pixel%256)>>3)-1
- if index==0: spr.setshape(project_flap['closed'])
- elif index==1: new_project()
- elif index==2: load_file()
- elif index==3: save_file()
-
-
#
# Startup
#
def init(top_window, path, parentwindow=None):
global gc, area, category_spr, bgcolor,turtlecanvas, select_mask
- global status_spr, turtle_spr, selbuttons, hidden_palette_icon, project_flap
- global base_path, load_save_folder
+ global status_spr, turtle_spr, selbuttons, hidden_palette_icon
+ global base_path, load_save_folder, window
window = top_window
base_path = path
if parentwindow is None:
@@ -498,12 +503,12 @@ def init(top_window, path, parentwindow=None):
window.add_events(gtk.gdk.BUTTON_PRESS_MASK)
window.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
window.add_events(gtk.gdk.POINTER_MOTION_MASK)
- parentwindow.add_events(gtk.gdk.KEY_PRESS_MASK)
+ window.add_events(gtk.gdk.KEY_PRESS_MASK)
window.connect("expose-event", expose_cb)
window.connect("button-press-event", buttonpress_cb)
window.connect("button-release-event", buttonrelease_cb)
window.connect("motion-notify-event", move_cb)
- parentwindow.connect("key_press_event", keypress_cb)
+ window.connect("key_press_event", keypress_cb)
window.show()
parentwindow.show_all()
area = window.window
@@ -541,7 +546,6 @@ def init(top_window, path, parentwindow=None):
for i in selbuttons: i.hide()
category_spr.setshape(hidden_palette_icon)
setup_toolbar()
- project_flap = setup_project_flap()
logo.turtle = turtle
logo.turtle_spr = turtle_spr
logo.stopsign = toolsprite('stopit')
diff --git a/turtlesetup.py b/turtlesetup.py
index be38afa..8106820 100755
--- a/turtlesetup.py
+++ b/turtlesetup.py
@@ -66,7 +66,7 @@ selectors = (
toolbaritems = (
# ('new',0,20),('open',70,20), ('save',70,20),
- ('hideshow',700, 775),('eraser',54,775), ('stopit',54,775))
+ ('hideshow',700, 725),('eraser',54,725), ('stopit',54,725))
# ('hideshow',200, 2),('eraser',54,3), ('stopit',54,2))
dockdetails = {
@@ -162,17 +162,6 @@ def setup_tool(x,y,name):
who.blocktype = name
toolsprs[name] = who
-def setup_project_flap():
- project_flap = {
- 'closed': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','project-.gif')),
- 'open': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','project.gif')),
- 'mask': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','projectmask.gif'))}
-# who = Sprite(720,0,project_flap['closed'])
- who = Sprite(888,0,project_flap['closed'])
- who.type = 'project_flap'
- who.setlayer(800)
- return project_flap
-
def blockproto(name): return protodict[name]
def toolsprite(name): return toolsprs[name]