22' Original work by [B+=MGA] 2016
33'
44
5- Unit Fonts1
5+ Unit Font1
66
77Export drawtext
88
99'
1010' drawtext x, y, message
11- ' x,y = top left of message pixel position on screen
11+ ' x,y = top left of message pixel position on screen
1212' scale - pixel height of character cell, .5 * scale is character width of cell
1313' message = text to be displayed
1414'
15- ' Returns whether message was clipped
15+ ' Returns whether message was clipped
1616'
1717' drawtext requires 2 other subs for drawing thick lines (tl) and arcs (ac)
1818' the varaibles: thick (line thickness), lx,ly (last x and y) and dr (drawing radius)
1919' are shared between these 3 subs
20- ' scale for 1x2 cells
20+ ' scale for 1x2 cells
2121'
2222sub drawtext(x, y, scale, mess)
2323 local i, c, px
@@ -41,12 +41,12 @@ sub drawtext(x, y, scale, mess)
4141 case "d" :ac px+p1,py+p3, 0 , 360 :lx=px+p2:ly=py:tl 0 ,p4
4242 case "e" :ac px+p1,py+p3, 45 , 360 :lx=px:ly=py+p3:tl p2, 0
4343 case "f" :ac px+p2,py+p1+gf, 180 , 270 :lx=px:ly=py+p2:tl p2, 0 :lx=px+p1:ly=py+p1:tl 0 ,p3
44- case "g" :ac px+p1,py+p3, 0 , 360 :lx=px+p2:ly=py+p2:tl 0 ,p2:ac px+p1,py+p4, 0 , 90 :lx=px:ly=py+p4+p1:tl p1, 0
44+ case "g" :ac px+p1,py+p3, 0 , 360 :lx=px+p2:ly=py+p2:tl 0 ,p2:ac px+p1,py+p4, 0 , 90 :lx=px:ly=py+p4+p1:tl p1, 0
4545 case "h" :ac px+p1,py+p3, 180 , 360 :lx=px:ly=py:tl 0 ,p4:lx=px+p2:ly=py+p3:tl 0 ,p1
4646 case "i" :lx=px+p1-gf:ly=py+p2:tl gf, 0 :tl 0 ,p2:tl -gf, 0 :tl 2 *gf, 0
4747 lx=px+p1-gf:ly=py+p1:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf
4848 case "j" :lx=px+p1-gf:ly=py+p2:tl gf, 0 :tl 0 ,p2:ac px,py+p4, 0 , 120
49- lx=px+p1-gf:ly=py+p1:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf
49+ lx=px+p1-gf:ly=py+p1:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf
5050 case "k" :lx=px:ly=py:tl 0 ,p4:lx=px+p2:ly=py+p2:tl -p2,p1:tl p2,p1
5151 case "l" :lx=px+p1-gf:ly=py:tl gf, 0 :tl 0 ,p4:tl gf, 0 :tl - 2 *gf, 0
5252 case "m" :lx=px:ly=py+p2:tl 0 ,p2:lx=px+p1:ly=py+p4:tl 0 ,-p2:tl -p1,p1:lx=px+p2:ly=py+p4:tl 0 ,-p2:tl -p1,p1
@@ -56,42 +56,42 @@ sub drawtext(x, y, scale, mess)
5656 case "q" :ac px+p1,py+p3, 0 , 360 :lx=px+p2:ly=py+p2-gf:tl 0 ,p4- 2 *gf:tl 2 *gf, 0
5757 case "r" :lx=px:ly=py+p2:tl 0 ,p2:ac px+p1,py+p3, 180 , 340
5858 case "s" :dr= 1 / 12 *scale:ac px+. 5 *p1,py+p2+dr, 90 , 270 :ac px+ 1 . 5 *p1,py+p3+dr, 270 , 450 :dr= 1 / 6 *scale
59- lx=px+ .5 *p1:ly=py+p2:tl p1* 1 . 5 , 0 :lx=px:ly=py+p4:tl p1* 1 . 5 , 0 :lx=px+. 5 *p1:ly=py+p3:tl p1, 0
59+ lx=px+ .5 *p1:ly=py+p2:tl p1* 1 . 5 , 0 :lx=px:ly=py+p4:tl p1* 1 . 5 , 0 :lx=px+. 5 *p1:ly=py+p3:tl p1, 0
6060 case "t" :lx=px+p1:ly=py:tl 0 ,p4:tl 2 *gf, 0 :lx=px:ly=py+p2:tl p2, 0
61- case "u" :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py+p2:tl 0 ,p1* 1 . 5 :lx=px+p2:ly=py+p2:tl 0 ,p2+gf
61+ case "u" :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py+p2:tl 0 ,p1* 1 . 5 :lx=px+p2:ly=py+p2:tl 0 ,p2+gf
6262 case "v" :lx=px:ly=py+p2:tl p1,p2+gf:tl p1,-p2- 1 . 5 *gf
63- case "w" :lx=px-gf:ly=py+p2:tl gf+p1*. 5 ,p2:tl . 5 *p1,-p2:tl p1*. 5 ,p2:tl p1*. 5 +gf,-p2
64- case "x" :lx=px:ly=py+p2:tl p2,p2:lx=px:ly=py+p4:tl p2,-p2
65- case "y" :lx=px:ly=py+p2:tl p1,p2:lx=px+p2:ly=py+p2:tl -p2,p3+gf
66- case "z" :lx=px:ly=py+p2:tl p2, 0 :tl -p2,p2:tl p2, 0
63+ case "w" :lx=px-gf:ly=py+p2:tl gf+p1*. 5 ,p2:tl . 5 *p1,-p2:tl p1*. 5 ,p2:tl p1*. 5 +gf,-p2
64+ case "x" :lx=px:ly=py+p2:tl p2,p2:lx=px:ly=py+p4:tl p2,-p2
65+ case "y" :lx=px:ly=py+p2:tl p1,p2:lx=px+p2:ly=py+p2:tl -p2,p3+gf
66+ case "z" :lx=px:ly=py+p2:tl p2, 0 :tl -p2,p2:tl p2, 0
6767 case "A" :lx=px:ly=py+p4:tl p1-gf,-p4:tl 2 *gf, 0 :tl p1-gf,p4:lx=px+p1- 2 *gf:ly=py+p2:tl p1, 0
6868 case "B" :ac px+p1,py+p1, 270 , 450 :ac px+p1,py+p3, 270 , 450
69- lx=px:ly=py:tl 0 ,p4:tl p1, 0 :lx=px:ly=py+p2:tl p1, 0 :lx=px:ly=py:tl p1, 0
70- case "C" :ac px+p1,py+p1, 180 , 320 :ac px+p1,py+p3, 40 , 180 :lx=px:ly=py+p1:tl 0 ,p2
69+ lx=px:ly=py:tl 0 ,p4:tl p1, 0 :lx=px:ly=py+p2:tl p1, 0 :lx=px:ly=py:tl p1, 0
70+ case "C" :ac px+p1,py+p1, 180 , 320 :ac px+p1,py+p3, 40 , 180 :lx=px:ly=py+p1:tl 0 ,p2
7171 case "D" :ac px+p1,py+p1, 270 , 360 :ac px+p1,py+p3, 0 , 90
7272 lx=px+p1:ly=py:tl -p1, 0 :tl 0 ,p4:tl p1, 0 :lx=px+p2:ly=py+p1:tl 0 ,p2
7373 case "E" :lx=px+p2:ly=py:tl -p2, 0 :tl 0 ,p4:tl p2, 0 :lx=px:ly=py+p2:tl p1+ 2 *gf, 0
7474 case "F" :lx=px+p2:ly=py:tl -p2, 0 :tl 0 ,p4:lx=px:ly=py+p2:tl p1+ 2 *gf, 0
7575 case "G" :ac px+p1,py+p1, 180 , 345 :ac px+p1,py+p3, 0 , 180
76- lx=px:ly=py+p1:tl 0 ,p2:lx=px+p2:ly=py+p4+gf:tl 0 ,-p2-gf:tl -p1, 0
77- case "H" :lx=px:ly=py:tl 0 ,p4:tl 0 ,-p2:tl p2, 0 :tl 0 ,p2:tl 0 ,-p4
78- case "I" :lx=px+p1*. 5 :ly=py:tl p1, 0 :lx=px+p1*. 5 :ly=py+p4:tl p1, 0 :lx=px+p1:ly=py:tl 0 ,p4
79- case "J" :ac px+p1,py+p3, 0 , 180 :lx=px+p1* 1 . 5 :ly=py:tl p1*. 5 , 0 :tl 0 ,p3
76+ lx=px:ly=py+p1:tl 0 ,p2:lx=px+p2:ly=py+p4+gf:tl 0 ,-p2-gf:tl -p1, 0
77+ case "H" :lx=px:ly=py:tl 0 ,p4:tl 0 ,-p2:tl p2, 0 :tl 0 ,p2:tl 0 ,-p4
78+ case "I" :lx=px+p1*. 5 :ly=py:tl p1, 0 :lx=px+p1*. 5 :ly=py+p4:tl p1, 0 :lx=px+p1:ly=py:tl 0 ,p4
79+ case "J" :ac px+p1,py+p3, 0 , 180 :lx=px+p1* 1 . 5 :ly=py:tl p1*. 5 , 0 :tl 0 ,p3
8080 case "K" :lx=px:ly=py:tl 0 ,p4:lx=px+p2:ly=py:tl -p2,p2:tl p2,p2
8181 case "L" :lx=px:ly=py:tl 0 ,p4:tl p2, 0
8282 case "M" :lx=px:ly=py+p4:tl 0 ,-p4:tl p1,p2:tl p1,-p2:tl 0 ,p4
8383 case "N" :lx=px:ly=py+p4:tl 0 ,-p4:tl p2,p4:tl 0 ,-p4
8484 case "O" :ac px+p1,py+p1, 180 , 360 :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py+p1:tl 0 ,p2:lx=px+p2:ly=py+p1:tl 0 ,p2
8585 case "P" :ac px+p1,py+p1, 270 , 450 :lx=px+p1:ly=py:tl -p1, 0 :tl 0 ,p4:lx=px:ly=py+p2:tl p1, 0
8686 case "Q" :ac px+p1,py+p1, 180 , 360 :ac px+p1,py+p3, 0 , 180
87- lx=px:ly=py+p1:tl 0 ,p2:lx=px+p2:ly=py+p1:tl 0 ,p2:lx=px+p1:ly=py+p2:tl p1+gf,p2+gf
88- case "R" :ac px+p1,py+p1, 270 , 450 :lx=px+p1:ly=py:tl -p1, 0 :tl 0 ,p4:lx=px:ly=py+p2:tl p1, 0 :tl p1,p2
87+ lx=px:ly=py+p1:tl 0 ,p2:lx=px+p2:ly=py+p1:tl 0 ,p2:lx=px+p1:ly=py+p2:tl p1+gf,p2+gf
88+ case "R" :ac px+p1,py+p1, 270 , 450 :lx=px+p1:ly=py:tl -p1, 0 :tl 0 ,p4:lx=px:ly=py+p2:tl p1, 0 :tl p1,p2
8989 case "S" :ac px+p1,py+p1, 90 , 360 :ac px+p1,py+p3, 270 , 540
9090 case "T" :lx=px:ly=py:tl p2, 0 :lx=px+p1:ly=py:tl 0 ,p4
91- case "U" :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py:tl 0 ,p3:lx=px+p2:ly=py:tl 0 ,p3
91+ case "U" :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py:tl 0 ,p3:lx=px+p2:ly=py:tl 0 ,p3
9292 case "V" :lx=px:ly=py:tl p1,p4:tl p1,-p4
93- case "W" :lx=px-gf:ly=py:tl gf,p4:tl p1,-p2:tl p1,p2:tl gf,-p4
94- case "X" :lx=px:ly=py:tl p2,p4:lx=px+p2:ly=py:tl -p2,p4
93+ case "W" :lx=px-gf:ly=py:tl gf,p4:tl p1,-p2:tl p1,p2:tl gf,-p4
94+ case "X" :lx=px:ly=py:tl p2,p4:lx=px+p2:ly=py:tl -p2,p4
9595 case "Y" :lx=px:ly=py:tl p1,p2:tl 0 ,p2:lx=px+p2:ly=py:tl -p1,p2
9696 case "Z" :lx=px:ly=py:tl p2, 0 :tl -p2,p4:tl p2, 0
9797 case "0" :ac px+p1,py+p1, 180 , 360 :ac px+p1,py+p3, 0 , 180 :lx=px:ly=py+p1:tl 0 ,p2:tl p2,-p2:tl 0 ,p2
@@ -106,7 +106,7 @@ sub drawtext(x, y, scale, mess)
106106 case "9" :ac px+p1,py+p1, 0 , 360 :lx=px+p2:ly=py+p1:tl -p1,p3
107107 case "." :lx=px:ly=py+p4:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf
108108 case "!" :lx=px:ly=py+p4:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf::lx=px:ly=py:tl 0 ,p2
109- case "," :lx=px+gf:ly=py+p4:tl -gf, 0 :tl 0 ,-gf:tl gf, 0 :tl 0 ,gf:tl -gf,. 5 *p1+gf
109+ case "," :lx=px+gf:ly=py+p4:tl -gf, 0 :tl 0 ,-gf:tl gf, 0 :tl 0 ,gf:tl -gf,. 5 *p1+gf
110110 case "?" :lx=px+p1:ly=py+p4:tl gf, 0 :tl 0 ,-gf:tl -gf, 0 :tl 0 ,gf:ac px+p1,py+p1, 180 , 450 :lx=px+p1:ly=py+p2:tl 0 ,p1-gf
111111 end select
112112 next
@@ -123,12 +123,12 @@ sub ac(x, y, das, dae)
123123 x1=dr*cos(rad(a)) : y1=dr*sin(rad(a))
124124 if int(thick)< 1 then pset x+x1,y+y1 else circle x+x1,y+y1,thick filled
125125 next
126- fi
126+ fi
127127end
128128
129129'tl stands for thick line in the LINE STEP x,y format
130- sub tl(stepx,stepy) 'tl=thickline
131- 'lastx, lasty globals for last drawn position
130+ sub tl(stepx,stepy) 'tl=thickline
131+ 'lastx, lasty globals for last drawn position
132132 'thick has to be global
133133 'note thick=0 still draws a line, use COLOR so line is drawn from this global
134134 local length,dx,dy,i
0 commit comments