Library for drawing turtle type (Logo turtle)

Headers, Bindings, Libraries for use with FreeBASIC, Please include example of use to help ensure they are tested and usable.
Post Reply
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Library for drawing turtle type (Logo turtle)

I hope that is practical and fun!

See you: https://www.youtube.com/watch?v=Ko3hYhh ... lunRgi3jDg

See you: http://www.youtube.com/watch?v=r5i2Je9n ... lunRgi3jDg

turtle.bi

Code: Select all

'Lib_Turtle_Logo
'LRCVS 2013

DECLARE SUB T_INIT()'INIT TURTLE
DECLARE SUB T_AXES ()'DRAW CENTER AXES
DECLARE SUB T_HOME ()'GO HOME TURTLE
DECLARE SUB T_POINT ()'DRAW A POINT 
DECLARE SUB T_GRID (T_STEP_GRID AS DOUBLE)'DRAW A GRID
DECLARE SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE 
DECLARE SUB T_GT (T_X AS DOUBLE, T_YY AS DOUBLE )'GO TO NEW POSITION X,Y
DECLARE SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
DECLARE SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
DECLARE SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
DECLARE SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
DECLARE SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
DECLARE SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
DECLARE SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
DECLARE SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
DECLARE SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE)'DRAW A ELLIPSE
DECLARE SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
DECLARE SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC SECTOR

DECLARE FUNCTION T_RADIANS (T_ANGLE AS DOUBLE) AS DOUBLE
DECLARE FUNCTION T_LONG (T_X1 AS DOUBLE, T_Y1 AS DOUBLE, T_X2 AS DOUBLE, T_Y2 AS DOUBLE) AS DOUBLE
DECLARE FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER)AS DOUBLE

DIM SHARED AS INTEGER T_CENTER_SCREEN_X, T_CENTER_SCREEN_Y, T_W, T_H, T_PEN, T_NSIDE

DIM SHARED AS DOUBLE T_POSITION_X, T_POSITION_Y, T_ANGLE, T_STEP_GRID, T_HEADING
DIM SHARED AS DOUBLE T_NEW_POSITION_X, T_NEW_POSITION_Y, T_X, T_Y, T_DISTANCE 
DIM SHARED AS DOUBLE T_FIRST_POSITION_X, T_FIRST_POSITION_Y, T_LAST_POSITION_X, T_LAST_POSITION_Y 
DIM SHARED AS DOUBLE T_X0, T_Y0, T_X1, T_Y1, T_X2, T_Y2, T_R, T_R1, T_R2, T_CP, T_INI, T_END

CONST PI = 4 * ATN(1)

'NOTE: T_LONG = HIPOTENUSE

SUB T_INIT ()'INIT TURTLE
 SCREENINFO T_W, T_H
 T_CENTER_SCREEN_X = INT (T_W / 2)
 T_CENTER_SCREEN_Y = INT (T_H / 2)
 T_POSITION_X = T_CENTER_SCREEN_X
 T_POSITION_Y = T_CENTER_SCREEN_Y
 T_HEADING = 0
 T_PEN = 1
END SUB

SUB T_AXES ()'DRAW CENTER AXES
     LINE (0,T_CENTER_SCREEN_Y)-(T_W,T_CENTER_SCREEN_Y),7
     LINE (T_CENTER_SCREEN_X,0)-(T_CENTER_SCREEN_X,T_H),7
END SUB

SUB T_GRID (T_STEP_GRID AS DOUBLE) 'DRAW A GRID
 DIM N AS INTEGER
 FOR N =  0 TO T_H STEP T_STEP_GRID
     LINE (0,N)-(T_W,N),8    'LINEAS HORIZONTALES 
 NEXT N
 FOR N =  0 TO T_W STEP T_STEP_GRID
     LINE (N,0)-(N,T_H),8    'LINEAS VERTICALES 
 NEXT N
 T_AXES ()
END SUB

FUNCTION T_RADIANS (T_ANGLE AS DOUBLE) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
     RETURN (T_ANGLE * 2 * PI)/360
END FUNCTION

FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER)AS DOUBLE 'CALCULATE APHOTEME
 DIM AS DOUBLE T_RGRAD, T_HIP    
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_RGRAD = T_RADIANS (360/T_NSIDE)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_X2 = ABS (T_X0 - T_X1)
 T_Y2 = ABS (T_Y0 - T_Y1)
 T_HIP = SQR ((T_X2^2) + (T_Y2^2))
 RETURN (SQR ((T_R^2) - ((T_HIP/2)^2)))
END FUNCTION

FUNCTION T_PENCIL (T_PEN AS INTEGER) AS INTEGER 'PENCIL = 1 > PEN DOWN  PENCIL = 0 > PEN UP
     T_PENCIL = T_PEN
END FUNCTION

SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE
 T_HEADING = T_RADIANS (T_ANGLE)
END SUB

SUB T_GT (T_X AS DOUBLE, T_Y AS DOUBLE ) 'GO TO NEW POSITION X,Y
 T_NEW_POSITION_X = T_CENTER_SCREEN_X + T_X 
 T_NEW_POSITION_Y = T_CENTER_SCREEN_Y + T_Y
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_HOME ()'GO HOME TURTLE
     IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_CENTER_SCREEN_X,T_CENTER_SCREEN_Y):END IF
     T_POSITION_X  = INT(T_W/2)
     T_POSITION_Y  = INT(T_H/2)
END SUB

SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
 T_NEW_POSITION_X = T_POSITION_X + (T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y - (T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
 T_NEW_POSITION_X = T_POSITION_X - ( T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y + ( T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
 T_HEADING = T_HEADING + T_RADIANS (T_ANGLE)
END SUB 

SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
 T_HEADING = T_HEADING - T_RADIANS (T_ANGLE)     
END SUB  

FUNCTION T_LONG (T_X1 AS DOUBLE, T_Y1 AS DOUBLE, T_X2 AS DOUBLE, T_Y2 AS DOUBLE) AS DOUBLE'CALCULATE DISTANCE /LENGHT TWO POINTS
 RETURN (ABS (SQR (ABS(T_X1 - T_X2) + ABS( T_Y1 - T_Y2))))
END FUNCTION

SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
 DIM AS DOUBLE T_RGRAD, T_GRAD   
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1)
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
 DIM AS DOUBLE T_RGRAD, T_GRAD   
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 STEP 360/T_NSIDE
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1)
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE) 'DRAW A ELLIPSE
 DIM AS DOUBLE T_RGRAD, T_GRAD       
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1,T_Y1) : END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POINT ()'DRAW A POINT 
 IF T_PEN = 1 THEN PSET (T_POSITION_X ,T_POSITION_Y) 
END SUB

SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
 DIM AS DOUBLE T_RGRAD, T_GRAD     
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1 ,T_Y1 ) :END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
 DIM AS DOUBLE T_RGRAD, T_GRAD     
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_X1 ,T_Y1): END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_POSITION_X, T_POSITION_Y): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ELLIPTIC SECTOR
 DIM AS DOUBLE T_RGRAD, T_GRAD     
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB
Example:

Code: Select all

#INCLUDE "TURTLE.BI"
DIM AS INTEGER N,J,S,L,T
DIM R AS DOUBLE
CLS
 
SCREEN 19

T_INIT ()

R = 240
L = 3
T_POLY (R, L)
T_CIRCLE (R)
R = T_APHOTEME (R,L)
FOR N = 1 TO 12
T_CIRCLE (R)
T_POLY (R, L + N)
R = T_APHOTEME (R,L + N)
NEXT N

SLEEP 500
CLS
FOR N = 1 TO 6
    FOR J = 1 TO 18
        T_FD (140)
        T_RT (100)
    NEXT J
    T_RT (60)
NEXT N

SLEEP 500
CLS
FOR N= 0 TO 360 STEP 2
    T_RT (N)
    T_PEN = 0
    T_FD (100)
    T_PEN = 1
    T_CIRCLE (100)
    T_PEN = 0
    T_HOME ()    
NEXT N

SLEEP 500
CLS
T_PEN = 1
FOR N = 1 TO 4
    FOR J = 1 TO 8
        FOR S = 1 TO 4
        T_RT (90)
        T_FD (72)
        NEXT S
        T_BK (72)
        T_LT (45)
    NEXT J
    T_LT (90)
    NEXT N
SLEEP 500
CLS
T_PEN = 1
FOR N= 1 TO 215
    T_FD (N)
    T_RT (70)
NEXT N
SLEEP 500
CLS
T_PEN = 0
t_gt (0,0)
t_pen = 1
T = 1
FOR N= 1 TO 3000
    IF N MOD 10 = 0 THEN T = T + 1
    COLOR T
    T_FD (N/3)
    T_RT (53)
NEXT N

SLEEP
END
Regards
Last edited by lrcvs on Aug 02, 2013 17:49, edited 2 times in total.
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Other test / example!

Code: Select all

#include "turtle.bi"

DECLARE Sub tree(size As Double, limit As Double, factor As Double, angle As Double)
DECLARE Sub fern(size As Double,limit As Double,curl As Double,thick As Double,nspace As Double,angle As Double)
Declare Sub Fractal (L AS DOUBLE,I AS INTEGER)
Declare Sub LDragon (L AS DOUBLE,I AS INTEGER)
Declare Sub RDragon (L AS DOUBLE,I AS INTEGER)

DIM SHARED AS DOUBLE SIZE, LIMIT, FACTOR, ANGLE,CURL,THICK,NSPACE,R2D,L
DIM AS INTEGER I,R,S,T


cls 
screen 18
R2D = 180/(4*ATN(1))
T_INIT ()
T_PEN = 0
COLOR 10
T_GT (0,0)
T_PEN = 1


COLOR 15
     

FOR R = 1 TO 360 STEP 10
     FOR S = 1 TO 4
          T_FD (150)
          T_RT (90)
          color 10
          t_circle (1)
          color 15
     NEXT S
     T_RT (10)
NEXT R

SLEEP
CLS
COLOR 15
FOR S = 122 TO 45 STEP - 1
SLEEP 250
T_PEN = 0
T_GT (0,0)
T_PEN = 1
CLS
FOR R = 1 TO 400 STEP 2
    color 1
     T_FD (R)
     T_RT (S)
     color 10
          t_circle (1)
          color 12
     T_FD (R)
     T_RT (S)
NEXT R
NEXT S
SLEEP
CLS
COLOR 15
FOR S = 10 TO 120 
SLEEP 250
T_PEN = 0
T_GT (0,0)
T_PEN = 1
CLS
FOR R = 1 TO 400 STEP 5
    color r
     T_PEN = 0
     T_FD (R)
     T_RT (S)
     T_PEN = 1
     T_CIRCLE (S/2)
NEXT R
NEXT S
SLEEP
CLS
T = 1
T_PEN = 0
T_GT (0,0)
T_PEN = 1
FOR S = 1 TO 600
     COLOR T
     T_ELLIPSE (S,S/4)
     T = T + 1
NEXT S

SLEEP 
CLS
T_PEN = 0
T_GT (-100,-100)
T_PEN = 1
FOR R = 1 TO 1000
     T_FD (10)
     T_RT (R)
NEXT R

SLEEP 
CLS
T_PEN = 0
T_GT (0,150)
T_PEN = 1
FOR R = 1 TO 4
     FOR S = 1 TO 4
          FRACTAL (400,R)
          T_RT (90)
     NEXT S
NEXT R

SLEEP 
CLS
T_INIT ()
T_PEN = 0
T_GT (0,-100)
T_PEN = 1
LDRAGON (768,12)

SLEEP 
CLS
T_INIT ()
T_gt (0,100)
T_PEN = 1
tree(120,0.5,0.65,65)

SLEEP 
CLS
tree(100,0.5,0.65,15)

SLEEP 
CLS
fern(320,3,2,0.2,0.1,60)

SLEEP 
CLS
fern(300,3,2,0.3,0.18,60)

SLEEP 
CLS
fern(300,2,4,0.4,0.35,60)

sleep
end

Sub tree(size As Double, limit As Double, factor As Double, angle As Double)
    If size < limit Then
       T_FD (size)
       T_BK (size)
       Return
    End If
    T_fd (size)
    T_rt (angle)
    tree(factor*size,limit,factor,angle)
    T_lt (angle+angle)
    tree(factor*size,limit,factor,angle)
    T_rt (angle)
    T_bk (size)
End Sub

Sub fern(size As Double,limit As Double,curl As Double,thick As Double,nspace As Double,angle As Double)
   Dim As Double d1,d2,a1

   d1 = size*nspace
   d2 = (1-nspace)*size
   T_fd (d1)
   If limit>size Then
      a1 = r2d*Atn(thick/(1-nspace))
      T_fd (d2)
      T_rt (a1)
      T_bk (d2)
      T_fd (d2)
      T_lt (a1+a1)
      T_bk (d2)
      t_fd (d2)
      T_rt (a1)
      T_bk (d2)
   Else
      T_rt (curl)
      fern(d2,limit,curl,thick,nspace,angle)
      T_rt (angle-curl)
      fern(thick*size,limit,curl,thick,nspace,angle)
      T_lt (angle+angle)
      fern(thick*size,limit,curl,thick,nspace,angle)
      T_rt (angle)
   End If
   T_bk (d1)
End Sub

Sub Fractal (L AS DOUBLE,I AS INTEGER)
        If I=0 Then T_FD (L): Exit Sub
        Fractal L/4,I-1
        T_RT (90)
        Fractal L/4,I-1
        T_LT (90)
        Fractal L/4,I-1
        T_LT (90)
        Fractal L/4,I-1
        Fractal L/4,I-1
        T_RT (90)
        Fractal L/4,I-1
        T_RT (90)
        Fractal L/4,I-1
        T_RT (90)
        Fractal L/4,I-1
End Sub

Sub LDragon (L AS DOUBLE,I AS INTEGER)
        If I = 0 Then T_FD (L): Exit Sub
        LDragon L/1.5,I-1
        T_LT (90)
        RDragon L/1.5,I-1

End Sub

Sub RDragon (L AS DOUBLE,I AS INTEGER)
        If I = 0 Then T_FD (L): Exit Sub
        LDragon L/1.5,I-1
        T_RT (90)
        RDragon L/1.5,I-1

End Sub
Regards
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Other test of draw and speeeeeeeeeeeeeeeeeeed!

Code: Select all

#include "turtle.bi"
dim as integer i,j,k

cls
screen 18
T_Init ()
t_pen = 0
t_gt (-0,-75)
t_pen = 1
for i = 1 to 2200
    t_fd (50* sin (i))
    t_rt (i^2)
next i
sleep
cls
t_init ()
for i = 100 to 30 step -50
    for j = 1 to 6

        for k = 1 to 6
            color 15
            t_fd (i)
            t_lt (60)
        next k
        t_lt (60)
    next j
next i
sleep 
cls
for k = 1 to 8
    color k
for i = -1 to 5
    for j = 1 to 720
        t_fd (i^2)
        t_rt (j)
    next j
next i
t_rt (45)
next k
sleep 
cls
t_init ()
t_pen = 0
t_gt (-0,-10)
t_pen = 1

for i = 1 to 25
    color i
    for j = 1 to 15
        t_fd (25)
        t_bk (25)
        t_rt (5)
    next j
    t_fd (25)
next i

t_init ()
t_pen = 0
t_gt (-25,-45)
t_pen = 1
for i = 1 to 12
    for j = 1 to 15
        color i
        t_fd (100)
        t_bk (95)
        t_rt (10)
    next j
    t_fd (100)
next i
t_init ()
t_pen = 0
t_gt (-200,-20)
t_pen = 1

for i = 1 to 24
    color i
    for j = 1 to 25
        t_fd (50)
        t_bk (45)
        t_rt (15)
    next j
    t_fd (50)
next i
sleep
cls
t_init ()
color 15
for j = 1 to 1000
    t_init ()
for i = 1 to 36000 step j

    t_gt (sqr (i)*sin(i),sqr(i)*cos(i))
next i
sleep 100
cls

next j

sleep
end
Regards
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle Version #2

Post by lrcvs »

A new version is: "TURTLE2.BI"


New File: TURTLE2:BI

Code: Select all

'Lib_Turtle Ver #2
'LRCVS 2013

'In this version, I added:
'T_Thickness: Thickness path. The lines can be finer or thicker
'T_Scale: Drawing scale factor. We can increase or decrease the size of the drawing / illustration.
'T_Star: Draw stars

DECLARE SUB T_INIT()'INIT TURTLE
DECLARE SUB T_AXES ()'DRAW CENTER AXES
DECLARE SUB T_HOME ()'GO HOME TURTLE
DECLARE SUB T_POINT ()'DRAW A POINT 
DECLARE SUB T_GRID (T_STEP_GRID AS DOUBLE)'DRAW A GRID
DECLARE SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE 
DECLARE SUB T_GT (T_X AS DOUBLE, T_YY AS DOUBLE)'GO TO NEW POSITION X,Y
DECLARE SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
DECLARE SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
DECLARE SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
DECLARE SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
DECLARE SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
DECLARE SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
DECLARE SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
DECLARE SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
DECLARE SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE)'DRAW A ELLIPSE
DECLARE SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
DECLARE SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC SECTOR
DECLARE SUB T_SEGMENT (T_LX1 AS DOUBLE, T_LY1 AS DOUBLE, T_LX2 AS DOUBLE, T_LY2 AS DOUBLE)
DECLARE SUB T_STAR (T_NP AS INTEGER, T_RG AS DOUBLE, T_RP AS DOUBLE)' DRAW A STAR

DECLARE FUNCTION T_RADIANS (T_ANGLE AS DOUBLE) AS DOUBLE
DECLARE FUNCTION T_LONG (T_X1 AS DOUBLE, T_Y1 AS DOUBLE, T_X2 AS DOUBLE, T_Y2 AS DOUBLE) AS DOUBLE
DECLARE FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER)AS DOUBLE

DIM SHARED AS INTEGER T_CENTER_SCREEN_X, T_CENTER_SCREEN_Y, T_W, T_H, T_PEN, T_NSIDE

DIM SHARED AS DOUBLE T_POSITION_X, T_POSITION_Y, T_ANGLE, T_STEP_GRID, T_HEADING
DIM SHARED AS DOUBLE T_NEW_POSITION_X, T_NEW_POSITION_Y, T_X, T_Y, T_DISTANCE , T_SCALE, T_THICKNESS
DIM SHARED AS DOUBLE T_FIRST_POSITION_X, T_FIRST_POSITION_Y, T_LAST_POSITION_X, T_LAST_POSITION_Y 
DIM SHARED AS DOUBLE T_X0, T_Y0, T_X1, T_Y1, T_X2, T_Y2, T_R, T_R1, T_R2, T_CP, T_INI, T_END


CONST PI = 4 * ATN(1)

'NOTE: T_LONG = HIPOTENUSE

SUB T_INIT ()'INIT TURTLE
 SCREENINFO T_W, T_H
 T_CENTER_SCREEN_X = INT (T_W / 2)
 T_CENTER_SCREEN_Y = INT (T_H / 2)
 T_POSITION_X = T_CENTER_SCREEN_X
 T_POSITION_Y = T_CENTER_SCREEN_Y
 T_GT (T_POSITION_X, T_POSITION_Y)
 T_HEADING = 0
 COLOR 15
 T_PEN = 1
 T_SCALE = 1
 T_THICKNESS = 0
 'window (T_W,T_H)-(0,0)
END SUB

SUB T_AXES ()'DRAW CENTER AXES
     LINE (0,T_CENTER_SCREEN_Y)-(T_W,T_CENTER_SCREEN_Y),7
     LINE (T_CENTER_SCREEN_X,0)-(T_CENTER_SCREEN_X,T_H),7
END SUB

SUB T_GRID (T_STEP_GRID AS DOUBLE) 'DRAW A GRID
 DIM N AS INTEGER
 FOR N =  0 TO T_H STEP T_STEP_GRID
     LINE (0,N)-(T_W,N),8    'LINEAS HORIZONTALES 
 NEXT N
 FOR N =  0 TO T_W STEP T_STEP_GRID
     LINE (N,0)-(N,T_H),8    'LINEAS VERTICALES 
 NEXT N
 T_AXES ()
END SUB

FUNCTION T_RADIANS (T_ANGLE AS DOUBLE) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
     RETURN (T_ANGLE * 2 * PI)/360
END FUNCTION

FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER) AS DOUBLE 'CALCULATE APHOTEME
'T_R1: Radio 
'T_NSIDES: Number of sides
 DIM AS DOUBLE T_RGRAD, T_HIP 
 T_R = T_R 
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_RGRAD = T_RADIANS (360/T_NSIDE)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_X2 = ABS (T_X0 - T_X1)
 T_Y2 = ABS (T_Y0 - T_Y1)
 T_HIP = (SQR ((T_X2^2) + (T_Y2^2)))
 RETURN (SQR ((T_R^2) - ((T_HIP/2)^2)))
END FUNCTION

SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE 0..360 Degrees
 T_HEADING = T_RADIANS (T_ANGLE)
END SUB

SUB T_GT (T_X AS DOUBLE, T_Y AS DOUBLE) 'GO TO NEW POSITION X,Y
     T_X = T_X * T_SCALE
     T_Y = T_Y * T_SCALE
 T_NEW_POSITION_X = T_CENTER_SCREEN_X + T_X 
 T_NEW_POSITION_Y = T_CENTER_SCREEN_Y + T_Y
 IF T_THICKNESS = 0 AND T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 IF T_THICKNESS > 0 AND T_PEN = 1 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X 
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_HOME ()'GO HOME TURTLE
     IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_CENTER_SCREEN_X,T_CENTER_SCREEN_Y):END IF
     T_POSITION_X  = INT(T_W/2)
     T_POSITION_Y  = INT(T_H/2)
END SUB

SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
 T_DISTANCE = T_DISTANCE * T_SCALE
 T_NEW_POSITION_X = T_POSITION_X + (T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y - (T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
 T_DISTANCE = T_DISTANCE * T_SCALE
 T_NEW_POSITION_X = T_POSITION_X - ( T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y + ( T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
 T_HEADING = T_HEADING + T_RADIANS (T_ANGLE)
END SUB 

SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
 T_HEADING = T_HEADING - T_RADIANS (T_ANGLE)     
END SUB  

FUNCTION T_LONG (T_X1 AS DOUBLE, T_Y1 AS DOUBLE, T_X2 AS DOUBLE, T_Y2 AS DOUBLE) AS DOUBLE'CALCULATE DISTANCE /LENGHT TWO POINTS
 RETURN (ABS (SQR ((ABS(T_X1  - T_X2 )^2) + (ABS( T_Y1  - T_Y2 )^2))))
END FUNCTION

SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
'T_R: Radio circle

 DIM AS DOUBLE T_RGRAD, T_GRAD  
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 AND T_THICKNESS = 0  THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1) : END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
'T_R: Radio 
'T_NSIDE: NUMBERS OF SIDES

 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R = T_R  * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 STEP 360/T_NSIDE
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1) 
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_X0 , T_Y0,T_X1 ,T_Y1)
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE) 'DRAW A ELLIPSE
'T_R1: Radio large
'T_R2: Radio small

 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1,T_Y1) : END IF
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POINT ()'DRAW A POINT 
 IF T_PEN = 1 THEN PSET (T_POSITION_X ,T_POSITION_Y) 
END SUB

SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
'T_R: Radio circle
'T_INI: Starting angle
'T_END: End angle

 DIM AS DOUBLE T_RGRAD, T_GRAD  
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1 ,T_Y1 ) :END IF
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
'T_R: Radio circle
'T_INI: Starting angle
'T_END: End angle

 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_X0,T_Y0,T_X1 ,T_Y1)
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_POSITION_X, T_POSITION_Y): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT  (T_X0, T_Y0,T_POSITION_X, T_POSITION_Y): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
'T_R1: Radio large
'T_R2: Radio small
'T_INI: Starting angle
'T_END: End angle
 
DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE 
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ELLIPTIC SECTOR
'T_R1: Radio large
'T_R2: Radio small
'T_INI: Starting angle
'T_END: End angle

 DIM AS DOUBLE T_RGRAD, T_GRAD   
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF  
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEGMENT (T_LX1 AS DOUBLE, T_LY1 AS DOUBLE, T_LX2 AS DOUBLE, T_LY2 AS DOUBLE)
     DIM AS INTEGER N
     DIM AS DOUBLE HIP, ANG, T_LX, T_LY , T_LPX, T_LPY , DX, DY
DX = ABS (T_LX1 - T_LX2)
DY = ABS (T_LY1 - T_LY2) 
HIP = (SQR (ABS((DX^2)+(DY^2)))) 
ANG = ATN (DY / DX)
FOR N = 0 TO HIP 
T_LY = SIN (ANG) * N
T_LX = COS (ANG) * N
IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 :T_LPY = T_LY + T_LY1 : END IF
IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 :T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 - T_LY : END IF 
IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX :T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 - T_LY : END IF 
IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 + T_LY : END IF
IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX :T_LPY = T_LY2 + T_LY : END IF 
IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX :T_LPY = T_LY2 + T_LY : END IF 
IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 :T_LPY = T_LY1 : END IF 
IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX ,T_LPY), T_THICKNESS,,,,,F : END IF 
NEXT N
END SUB

SUB T_STAR (T_NP AS INTEGER, T_RG AS DOUBLE, T_RP AS DOUBLE)'Draw a star
'T_NP: Number of arms of the star
'T_RG: Radio more
'T_RP: Radio lower

DIM AS INTEGER C
DIM AS DOUBLE X,Y,NP,N, R
NP = (360/(T_NP*2))
R = 0 
C = 0
T_PEN = 0
FOR N = 0 TO 360 + NP STEP NP 
     IF C MOD 2 = 0 THEN R = T_RG ELSE R = T_RP : END IF
     X = (COS(T_RADIANS (N)) * R )
     Y = (SIN(T_RADIANS (N)) * R )
     IF C > 0 THEN T_PEN = 1 : END IF
     T_GT (X,Y) 
     C = C + 1
NEXT N
END SUB     

Example: A Star

Code: Select all

#INCLUDE "TURTLE2.BI" 'Version #2 <<< !!!

DIM  AS INTEGER N, J

CLS
SCREEN 18
'Star_1
T_INIT
FOR J = 20 to 2 step -1  'ARMS OF STAR
CLS
FOR N = 1 TO 25 STEP 1
'COLOR n+j
'COLOR j-n
COLOR N
T_SCALE = 26-n '<<<<<<<<<<<<< DEMO use T_SCALE
T_THICKNESS = N/4 '<<<<<<< DEMO use T_THICKNESS
T_STAR (J,10,5) '<<<<<<<<<< DEMO use T_STAR (NUMBER OF ARMS, RADIO LARGE, RADIO SMALL)
NEXT N
SLEEP 500
NEXT J

'Star_2
T_INIT
FOR J = 2 to 10  'ARMS OF STAR
CLS
FOR N = 1 TO 25 STEP 1
'COLOR n+j
'COLOR j-n
COLOR N
T_SCALE = N '<<<<<<<<<<<<< DEMO use T_SCALE
T_THICKNESS = N/4 '<<<<<<< DEMO use T_THICKNESS
T_STAR (J,9,6) '<<<<<<<<<< DEMO use T_STAR (NUMBER OF ARMS, RADIO LARGE, RADIO SMALL)
NEXT N
SLEEP 500
NEXT J
SLEEP
END
MODIFY THE BRIDGE

Code: Select all

#INCLUDE "TURTLE2.BI" '<<<<<<<<<<<<<<<<<< !!!

DECLARE SUB PARTE_FIJA (N AS DOUBLE)
DECLARE SUB CILINDRO (N AS DOUBLE) 
DECLARE SUB VASTAGO (N AS DOUBLE, S AS DOUBLE) 
DECLARE SUB BRAZO_D (N AS DOUBLE, S AS DOUBLE) 
DECLARE SUB BRAZO_I (N AS DOUBLE, S AS DOUBLE)
DECLARE SUB BRAZO_0 (N AS DOUBLE, S AS DOUBLE)

DIM SHARED AS DOUBLE N,N1,N2,N3,N4,N5,N6,N7,RADIANS
DIM SHARED AS DOUBLE C,M,X0I,Y0I,X0F,Y0F,X1F,Y1F,X2F,Y2F,X3F,Y3F,X4F,Y4F,X5F,Y5F,X6F,Y6F


DIM SHARED AS INTEGER A,B,F,L,MX,MY

L = 70
MX = -25 '<<<<<<<<<<<<<<<<<<<<<<<!!!!
MY = 15 '<<<<<<<<<<<<<<<<<<<<<<<!!!!!
A = 0
B = 45
C = 0.1

cls 

SCREENRES 700,480
'SLEEP 4000

T_INIT
T_PEN = 1
FOR F = 1 TO 2
     IF F MOD 2 <> 0 THEN 
          SLEEP 1000,1
          A = 0
          B = 45
          C = 0.1
     ELSE
          SLEEP 1000,1
          A = 45
          B = 0
          C = -0.1
     END IF
     
FOR N = A TO B STEP C
'N = 0
LINE (0,0)-(700,480),15,BF
T_SCALE = N/7  '<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!
T_THICKNESS = N/10 '<<<<<<<<<<<<<<<<<<<<<<!!!!
COLOR 0
X0I = MX
Y0I = MY
X0F = MX + L
Y0F = MY

SCREENLOCK
.
.
.
.
.



I wish that you enjoy drawing!

Regards
Last edited by lrcvs on Aug 14, 2013 13:53, edited 1 time in total.
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Other example.
Program: "Tiles"
Draw Tiles

See:

http://www.youtube.com/watch?v=R2uwYjDc ... lunRgi3jDg

Code: Select all

#INCLUDE "TURTLE2.BI"
'lrcvs 2013

'Program: Tiles
'Draw Tiles

DECLARE SUB TILE ()
DECLARE SUB ROTATE ()

DIM AS INTEGER N

CLS
SCREEN 12
T_INIT
'LINE (0,0)-(640,480),15,BF
COLOR 7
T_SCALE = 0.8
T_THICKNESS = 0
ROTATE ()
T_PEN = 0:T_GT (200,0):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (0,200):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (200,200):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (-200,200):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (-200,0):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (-200,-200):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (0,-200):T_PEN = 1:ROTATE ()
T_PEN = 0:T_GT (200,-200):T_PEN = 1:ROTATE ()
SLEEP
END

SUB ROTATE ()
DIM N AS INTEGER
FOR N= 1 TO 4
TILE ()
T_RT 90*N
NEXT N
END SUB
     
SUB TILE ()
DIM N AS INTEGER
FOR N = 1 TO 4
T_FD 100
T_RT 90
NEXT N
T_RT 45
T_FD 141
T_RT 135
T_FD 99
T_RT 135
T_FD 40
T_RT 67
T_FD 75
T_BK 75
T_LT 134
T_FD 77
T_RT 112
T_FD 100
T_RT 135
T_FD 40
T_LT 66.5
T_FD 76
T_BK 76
T_RT 133
T_FD 76
T_ORIENT 0
END SUB
Drawing is fun!
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Library for drawing turtle Version 3

Post by lrcvs »

New version, called: "Turtle3.bi"

of the library / include file for turtle graphics.

He added: Text (Uppercase and lowercase), numbers and some Symbols more usual.

The size, color, thickness and angle of rotation also apply to letters, numbers and symbols.

There is a two globals variables:

T_rottext = (angle). >>> Indicates the angle of rotation of these characters / text.

T_Text = "Text to draw". >>> Indicates the text to draw.

Any program can be improved, but ... I am limited!

Regards

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Note:
This version has been modified / improved function "T_radians".

Richard thank you very much for your suggestion.!
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Turtle3.bi

Code: Select all

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'To Draw
DECLARE SUB T_INIT()'INIT TURTLE
DECLARE SUB T_AXES ()'DRAW CENTER AXES
DECLARE SUB T_HOME ()'GO HOME TURTLE
DECLARE SUB T_POINT ()'DRAW A POINT 
DECLARE SUB T_GRID (T_STEP_GRID AS DOUBLE)'DRAW A GRID
DECLARE SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE 
DECLARE SUB T_GT (T_X AS DOUBLE, T_YY AS DOUBLE)'GO TO NEW POSITION X,Y
DECLARE SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
DECLARE SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
DECLARE SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
DECLARE SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
DECLARE SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
DECLARE SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
DECLARE SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
DECLARE SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
DECLARE SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE)'DRAW A ELLIPSE
DECLARE SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
DECLARE SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC SECTOR
DECLARE SUB T_SEGMENT (T_LX1 AS DOUBLE, T_LY1 AS DOUBLE, T_LX2 AS DOUBLE, T_LY2 AS DOUBLE)
DECLARE SUB T_STAR (T_NP AS INTEGER, T_RG AS DOUBLE, T_RP AS DOUBLE)
'CHARS
DECLARE SUB T_TEXT (T AS STRING)
DECLARE SUB T_LETSPACE (T_ROTTEXT AS DOUBLE)'SPACE
DECLARE SUB T_LETA (T_ROTTEXT AS DOUBLE)'UCASE A
DECLARE SUB T_LETB (T_ROTTEXT AS DOUBLE)'UCASE B
DECLARE SUB T_LETC (T_ROTTEXT AS DOUBLE)'UCASE C
DECLARE SUB T_LETD (T_ROTTEXT AS DOUBLE)'UCASE D
DECLARE SUB T_LETE (T_ROTTEXT AS DOUBLE)'UCASE E
DECLARE SUB T_LETF (T_ROTTEXT AS DOUBLE)'UCASE F
DECLARE SUB T_LETG (T_ROTTEXT AS DOUBLE)'UCASE G
DECLARE SUB T_LETH (T_ROTTEXT AS DOUBLE)'UCASE H
DECLARE SUB T_LETI (T_ROTTEXT AS DOUBLE)'UCASE I
DECLARE SUB T_LETJ (T_ROTTEXT AS DOUBLE)'UCASE J
DECLARE SUB T_LETK (T_ROTTEXT AS DOUBLE)'UCASE K
DECLARE SUB T_LETL (T_ROTTEXT AS DOUBLE)'UCASE L
DECLARE SUB T_LETM (T_ROTTEXT AS DOUBLE)'UCASE M
DECLARE SUB T_LETN (T_ROTTEXT AS DOUBLE)'UCASE N
DECLARE SUB T_LETO (T_ROTTEXT AS DOUBLE)'UCASE O
DECLARE SUB T_LETP (T_ROTTEXT AS DOUBLE)'UCASE P
DECLARE SUB T_LETQ (T_ROTTEXT AS DOUBLE)'UCASE Q
DECLARE SUB T_LETR (T_ROTTEXT AS DOUBLE)'UCASE R
DECLARE SUB T_LETS (T_ROTTEXT AS DOUBLE)'UCASE S
DECLARE SUB T_LETT (T_ROTTEXT AS DOUBLE)'UCASE T
DECLARE SUB T_LETU (T_ROTTEXT AS DOUBLE)'UCASE U
DECLARE SUB T_LETV (T_ROTTEXT AS DOUBLE)'UCASE V
DECLARE SUB T_LETW (T_ROTTEXT AS DOUBLE)'UCASE W
DECLARE SUB T_LETX (T_ROTTEXT AS DOUBLE)'UCASE X
DECLARE SUB T_LETY (T_ROTTEXT AS DOUBLE)'UCASE Y
DECLARE SUB T_LETZ (T_ROTTEXT AS DOUBLE)'UCASE Z
'NUMBERS
DECLARE SUB T_LET1 (T_ROTTEXT AS DOUBLE)'NUMBER 1
DECLARE SUB T_LET2 (T_ROTTEXT AS DOUBLE)'NUMBER 2
DECLARE SUB T_LET3 (T_ROTTEXT AS DOUBLE)'NUMBER 3
DECLARE SUB T_LET4 (T_ROTTEXT AS DOUBLE)'NUMBER 4
DECLARE SUB T_LET5 (T_ROTTEXT AS DOUBLE)'NUMBER 5
DECLARE SUB T_LET6 (T_ROTTEXT AS DOUBLE)'NUMBER 6
DECLARE SUB T_LET7 (T_ROTTEXT AS DOUBLE)'NUMBER 7
DECLARE SUB T_LET8 (T_ROTTEXT AS DOUBLE)'NUMBER 8
DECLARE SUB T_LET9 (T_ROTTEXT AS DOUBLE)'NUMBER 9
DECLARE SUB T_LET0 (T_ROTTEXT AS DOUBLE)'NUMBER 0
'SIMBOLS
DECLARE SUB T_LETSIM1 (T_ROTTEXT AS DOUBLE)'SIMBOL (
DECLARE SUB T_LETSIM2 (T_ROTTEXT AS DOUBLE)'SIMBOL )
DECLARE SUB T_LETSIM3 (T_ROTTEXT AS DOUBLE)'SIMBOL [
DECLARE SUB T_LETSIM4 (T_ROTTEXT AS DOUBLE)'SIMBOL ]
DECLARE SUB T_LETSIM5 (T_ROTTEXT AS DOUBLE)'SIMBOL !
DECLARE SUB T_LETSIM6 (T_ROTTEXT AS DOUBLE)'SIMBOL ¡
DECLARE SUB T_LETSIM7 (T_ROTTEXT AS DOUBLE)'SIMBOL ¿
DECLARE SUB T_LETSIM8 (T_ROTTEXT AS DOUBLE)'SIMBOL ?
DECLARE SUB T_LETSIM9 (T_ROTTEXT AS DOUBLE)'SIMBOL _
DECLARE SUB T_LETSIM10 (T_ROTTEXT AS DOUBLE)'SIMBOL -
DECLARE SUB T_LETSIM11 (T_ROTTEXT AS DOUBLE)'SIMBOL .
DECLARE SUB T_LETSIM12 (T_ROTTEXT AS DOUBLE)'SIMBOL :
DECLARE SUB T_LETSIM13 (T_ROTTEXT AS DOUBLE)'SIMBOL +
DECLARE SUB T_LETSIM14 (T_ROTTEXT AS DOUBLE)'SIMBOL *
DECLARE SUB T_LETSIM15 (T_ROTTEXT AS DOUBLE)'SIMBOL /
DECLARE SUB T_LETSIM16 (T_ROTTEXT AS DOUBLE)'SIMBOL\
DECLARE SUB T_LETSIM17 (T_ROTTEXT AS DOUBLE)'SIMBOL >
DECLARE SUB T_LETSIM18 (T_ROTTEXT AS DOUBLE)'SIMBOL <
DECLARE SUB T_LETSIM19 (T_ROTTEXT AS DOUBLE)'SIMBOL =
DECLARE SUB T_LETSIM20 (T_ROTTEXT AS DOUBLE)'SIMBOL #
DECLARE SUB T_LETSIM21 (T_ROTTEXT AS DOUBLE)'SIMBOL ,
DECLARE SUB T_LETSIM22 (T_ROTTEXT AS DOUBLE)'SIMBOL ;
DECLARE SUB T_LETSIM23 (T_ROTTEXT AS DOUBLE)'SIMBOL $
DECLARE SUB T_LETSIM24 (T_ROTTEXT AS DOUBLE)'SIMBOL %

DECLARE FUNCTION T_RADIANS (Byval T_ANGLE As Double) AS DOUBLE
DECLARE FUNCTION Function T_LONG (Byval T_X1 As Double, Byval T_Y1 As Double, Byval T_X2 As Double, Byval T_Y2 As Double) As Double
DECLARE FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER)AS DOUBLE

DIM SHARED AS INTEGER T_CENTER_SCREEN_X, T_CENTER_SCREEN_Y, T_W, T_H, T_PEN, T_NSIDE

DIM SHARED AS DOUBLE T_POSITION_X, T_POSITION_Y, T_ANGLE, T_STEP_GRID, T_HEADING
DIM SHARED AS DOUBLE T_NEW_POSITION_X, T_NEW_POSITION_Y, T_X, T_Y, T_DISTANCE , T_SCALE, T_THICKNESS
DIM SHARED AS DOUBLE T_FIRST_POSITION_X, T_FIRST_POSITION_Y, T_LAST_POSITION_X, T_LAST_POSITION_Y 
DIM SHARED AS DOUBLE T_X0, T_Y0, T_X1, T_Y1, T_X2, T_Y2, T_R, T_R1, T_R2, T_CP, T_INI, T_END
DIM SHARED T_ROTTEXT AS DOUBLE

CONST PI = 4 * ATN(1)
Const As Double T_DTOR = (2*(4*(atn(1))))/360

'NOTE: T_LONG = HIPOTENUSE

SUB T_INIT ()'INIT TURTLE
 SCREENINFO T_W, T_H
 T_CENTER_SCREEN_X = INT (T_W / 2)
 T_CENTER_SCREEN_Y = INT (T_H / 2)
 T_POSITION_X = T_CENTER_SCREEN_X
 T_POSITION_Y = T_CENTER_SCREEN_Y
 T_GT (T_POSITION_X, T_POSITION_Y)
 T_HEADING = 0
 COLOR 15
 T_PEN = 1
 T_SCALE = 1
 T_THICKNESS = 0
 'window (T_W,T_H)-(0,0)
END SUB

SUB T_AXES ()'DRAW CENTER AXES
     LINE (0,T_CENTER_SCREEN_Y)-(T_W,T_CENTER_SCREEN_Y),7
     LINE (T_CENTER_SCREEN_X,0)-(T_CENTER_SCREEN_X,T_H),7
END SUB

SUB T_GRID (T_STEP_GRID AS DOUBLE) 'DRAW A GRID
 DIM N AS INTEGER
 FOR N =  0 TO T_H STEP T_STEP_GRID
     LINE (0,N)-(T_W,N),8    'LINEAS HORIZONTALES 
 NEXT N
 FOR N =  0 TO T_W STEP T_STEP_GRID
     LINE (N,0)-(N,T_H),8    'LINEAS VERTICALES 
 NEXT N
 T_AXES ()
END SUB

FUNCTION T_RADIANS (Byval T_ANGLE As Double) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
     RETURN (T_ANGLE * T_DTOR)
END FUNCTION

FUNCTION T_APHOTEME (T_R AS DOUBLE ,T_NSIDE AS INTEGER) AS DOUBLE 'CALCULATE APHOTEME
 DIM AS DOUBLE T_RGRAD, T_HIP 
 T_R = T_R 
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_RGRAD = T_RADIANS (360/T_NSIDE)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_X2 = ABS (T_X0 - T_X1)
 T_Y2 = ABS (T_Y0 - T_Y1)
 T_HIP = (SQR ((T_X2^2) + (T_Y2^2)))
 RETURN (SQR ((T_R^2) - ((T_HIP/2)^2)))
END FUNCTION

SUB T_ORIENT (T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE
 T_HEADING = T_RADIANS (T_ANGLE)
END SUB

SUB T_GT (T_X AS DOUBLE, T_Y AS DOUBLE) 'GO TO NEW POSITION X,Y
     T_X = T_X * T_SCALE
     T_Y = T_Y * T_SCALE
 T_NEW_POSITION_X = T_CENTER_SCREEN_X + T_X 
 T_NEW_POSITION_Y = T_CENTER_SCREEN_Y + T_Y
 IF T_THICKNESS = 0 AND T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 IF T_THICKNESS > 0 AND T_PEN = 1 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X 
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_HOME ()'GO HOME TURTLE
     IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_CENTER_SCREEN_X,T_CENTER_SCREEN_Y):END IF
     T_POSITION_X  = INT(T_W/2)
     T_POSITION_Y  = INT(T_H/2)
END SUB

SUB T_FD (T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
 T_DISTANCE = T_DISTANCE * T_SCALE
 T_NEW_POSITION_X = T_POSITION_X + (T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y - (T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_BK (T_DISTANCE AS DOUBLE)'BACK X DISTANCE
 T_DISTANCE = T_DISTANCE * T_SCALE
 T_NEW_POSITION_X = T_POSITION_X - ( T_DISTANCE * SIN (T_HEADING))
 T_NEW_POSITION_Y = T_POSITION_Y + ( T_DISTANCE * COS (T_HEADING))
 IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X,T_NEW_POSITION_Y):END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X ,T_NEW_POSITION_Y):END IF
 T_POSITION_X = T_NEW_POSITION_X
 T_POSITION_Y = T_NEW_POSITION_Y 
END SUB  

SUB T_RT (T_ANGLE AS DOUBLE)'TURN RIGHT 
 T_HEADING = T_HEADING + T_RADIANS (T_ANGLE)
END SUB 

SUB T_LT (T_ANGLE AS DOUBLE)'TURN LEFT
 T_HEADING = T_HEADING - T_RADIANS (T_ANGLE)     
END SUB  

FUNCTION Function T_LONG (Byval T_X1 As Double, Byval T_Y1 As Double, Byval T_X2 As Double, Byval T_Y2 As Double) As Double 'CALCULATE DISTANCE /LENGHT TWO POINTS
 RETURN (ABS (SQR ((ABS(T_X1  - T_X2 )^2) + (ABS( T_Y1  - T_Y2 )^2))))
END FUNCTION

SUB T_CIRCLE (T_R AS DOUBLE)'DRAW A CIRCLE
 DIM AS DOUBLE T_RGRAD, T_GRAD  
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 AND T_THICKNESS = 0  THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1) : END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POLY (T_R AS DOUBLE, T_NSIDE AS INTEGER)'DRAW A POLYGON
 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R = T_R  * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 STEP 360/T_NSIDE
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1) 
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_X0 , T_Y0,T_X1 ,T_Y1)
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ELLIPSE (T_R1 AS DOUBLE, T_R2 AS DOUBLE) 'DRAW A ELLIPSE
 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE
 T_RGRAD = T_RADIANS (0)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = 0 TO 360 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1,T_Y1) : END IF
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_POINT ()'DRAW A POINT 
 IF T_PEN = 1 THEN PSET (T_POSITION_X ,T_POSITION_Y) 
END SUB

SUB T_ARC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC CIRCLE
 DIM AS DOUBLE T_RGRAD, T_GRAD  
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0,T_Y0)-(T_X1 ,T_Y1 ) :END IF
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_CIR (T_R AS DOUBLE,T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A CIRCLE SECTOR
 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R = T_R * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END 
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_X0,T_Y0,T_X1 ,T_Y1)
 IF T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_POSITION_X, T_POSITION_Y): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT  (T_X0, T_Y0,T_POSITION_X, T_POSITION_Y): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_ARC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ARC ELLIPTIC
 DIM AS DOUBLE T_RGRAD, T_GRAD 
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE 
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF 
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEC_ELLIP (T_R1 AS DOUBLE, T_R2 AS DOUBLE, T_INI AS DOUBLE, T_END AS DOUBLE)'DRAW A ELLIPTIC SECTOR
 DIM AS DOUBLE T_RGRAD, T_GRAD   
 T_R1 = T_R1 * T_SCALE
 T_R2 = T_R2 * T_SCALE
 T_RGRAD = T_RADIANS (T_INI)
 T_X0 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y0 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 T_FIRST_POSITION_X = T_X0
 T_FIRST_POSITION_Y = T_Y0
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 FOR T_GRAD  = T_INI TO T_END
 T_RGRAD = T_RADIANS (T_GRAD)
 T_X1 = (T_R1 * COS (T_RGRAD)) + T_POSITION_X
 T_Y1 = (T_R2 * SIN (T_RGRAD)) + T_POSITION_Y
 IF T_PEN = 1 THEN LINE (T_X0 , T_Y0)-(T_X1 ,T_Y1): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X1 ,T_Y1), T_THICKNESS,,,,,F : END IF  
 T_X0 = T_X1  
 T_Y0 = T_Y1  
 NEXT T_GRAD
 IF T_PEN = 1 THEN LINE  (T_POSITION_X, T_POSITION_Y)-(T_X0 ,T_Y0): END IF
 IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_X0 ,T_Y0): END IF
 T_LAST_POSITION_X = T_X1
 T_LAST_POSITION_Y = T_Y1
END SUB

SUB T_SEGMENT (T_LX1 AS DOUBLE, T_LY1 AS DOUBLE, T_LX2 AS DOUBLE, T_LY2 AS DOUBLE)
     DIM AS INTEGER N
     DIM AS DOUBLE HIP, ANG, T_LX, T_LY , T_LPX, T_LPY , DX, DY
DX = ABS (T_LX1 - T_LX2)
DY = ABS (T_LY1 - T_LY2) 
HIP = (SQR (ABS((DX^2)+(DY^2)))) 
ANG = ATN (DY / DX)
FOR N = 0 TO HIP 
T_LY = SIN (ANG) * N
T_LX = COS (ANG) * N
IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 :T_LPY = T_LY + T_LY1 : END IF
IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 :T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 - T_LY : END IF 
IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX :T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 - T_LY : END IF 
IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 :T_LPY = T_LY2 + T_LY : END IF
IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX :T_LPY = T_LY2 + T_LY : END IF 
IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX :T_LPY = T_LY2 + T_LY : END IF 
IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 :T_LPY = T_LY1 : END IF 
IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX ,T_LPY), T_THICKNESS,,,,,F : END IF 
NEXT N
END SUB

SUB T_STAR (T_NP AS INTEGER, T_RG AS DOUBLE, T_RP AS DOUBLE)
DIM AS INTEGER C
DIM AS DOUBLE X,Y,NP,N, R
NP = (360/(T_NP*2))
R = 0 
C = 0
T_PEN = 0
FOR N = 0 TO 360 + NP STEP NP 
     IF C MOD 2 = 0 THEN R = T_RG ELSE R = T_RP : END IF
     X = (COS(T_RADIANS (N)) * R )
     Y = (SIN(T_RADIANS (N)) * R )
     IF C > 0 THEN T_PEN = 1 : END IF
     T_GT (X,Y) 
     C = C + 1
NEXT N
END SUB  

SUB T_TEXT (T_STRING AS STRING)
     DIM AS INTEGER T_LONGTEXT, N

     T_LONGTEXT = LEN (T_STRING)
     FOR N = 1 TO T_LONGTEXT
          'char uppers
          IF MID (T_STRING,N,1) = "A" THEN T_LETA (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "B" THEN T_LETB (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "C" THEN T_LETC (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "D" THEN T_LETD (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "E" THEN T_LETE (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "F" THEN T_LETF (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "G" THEN T_LETG (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "H" THEN T_LETH (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "I" THEN T_LETI (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "J" THEN T_LETJ (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "K" THEN T_LETK (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "L" THEN T_LETL (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "M" THEN T_LETM (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "N" THEN T_LETN (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "O" THEN T_LETO (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "P" THEN T_LETP (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "Q" THEN T_LETQ (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "R" THEN T_LETR (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "S" THEN T_LETS (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "T" THEN T_LETT (T_ROTTEXT): end if  
          IF MID (T_STRING,N,1) = "U" THEN T_LETU (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "V" THEN T_LETV (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "W" THEN T_LETW (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "X" THEN T_LETX (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "Y" THEN T_LETY (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "Z" THEN T_LETZ (T_ROTTEXT): end if 
          
          IF MID (T_STRING,N,1) = " " THEN T_LETSPACE (T_ROTTEXT): end if
          
          'chars lowers
          IF MID (T_STRING,N,1) = "a" THEN T_SCALE = (T_SCALE / 2) : T_LETA (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "b" THEN T_SCALE = (T_SCALE / 2) : T_LETB (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "c" THEN T_SCALE = (T_SCALE / 2) : T_LETC (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "d" THEN T_SCALE = (T_SCALE / 2) : T_LETD (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "e" THEN T_SCALE = (T_SCALE / 2) : T_LETE (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "f" THEN T_SCALE = (T_SCALE / 2) : T_LETF (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "g" THEN T_SCALE = (T_SCALE / 2) : T_LETG (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "h" THEN T_SCALE = (T_SCALE / 2) : T_LETH (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "i" THEN T_SCALE = (T_SCALE / 2) : T_LETI (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "j" THEN T_SCALE = (T_SCALE / 2) : T_LETJ (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "k" THEN T_SCALE = (T_SCALE / 2) : T_LETK (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "l" THEN T_SCALE = (T_SCALE / 2) : T_LETL (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "m" THEN T_SCALE = (T_SCALE / 2) : T_LETM (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "n" THEN T_SCALE = (T_SCALE / 2) : T_LETN (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "o" THEN T_SCALE = (T_SCALE / 2) : T_LETO (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "p" THEN T_SCALE = (T_SCALE / 2) : T_LETP (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "q" THEN T_SCALE = (T_SCALE / 2) : T_LETQ (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "r" THEN T_SCALE = (T_SCALE / 2) : T_LETR (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "s" THEN T_SCALE = (T_SCALE / 2) : T_LETS (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "t" THEN T_SCALE = (T_SCALE / 2) : T_LETT (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if  
          IF MID (T_STRING,N,1) = "u" THEN T_SCALE = (T_SCALE / 2) : T_LETU (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "v" THEN T_SCALE = (T_SCALE / 2) : T_LETV (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "w" THEN T_SCALE = (T_SCALE / 2) : T_LETW (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "x" THEN T_SCALE = (T_SCALE / 2) : T_LETX (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if
          IF MID (T_STRING,N,1) = "y" THEN T_SCALE = (T_SCALE / 2) : T_LETY (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          IF MID (T_STRING,N,1) = "z" THEN T_SCALE = (T_SCALE / 2) : T_LETZ (T_ROTTEXT): T_SCALE = (T_SCALE * 2): end if 
          'NUMBERS
          IF MID (T_STRING,N,1) = "1" THEN T_LET1 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "2" THEN T_LET2 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "3" THEN T_LET3 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "4" THEN T_LET4 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "5" THEN T_LET5 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "6" THEN T_LET6 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "7" THEN T_LET7 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "8" THEN T_LET8 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "9" THEN T_LET9 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "0" THEN T_LET0 (T_ROTTEXT): end if
          'SIMBOLS
          IF MID (T_STRING,N,1) = "(" THEN T_LETSIM1 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = ")" THEN T_LETSIM2 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "[" THEN T_LETSIM3 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "]" THEN T_LETSIM4 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "!" THEN T_LETSIM5 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "¡" THEN T_LETSIM6 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "?" THEN T_LETSIM7 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "¿" THEN T_LETSIM8 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "_" THEN T_LETSIM9 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "-" THEN T_LETSIM10 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "." THEN T_LETSIM11 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = ":" THEN T_LETSIM12 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "+" THEN T_LETSIM13 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "*" THEN T_LETSIM14 (T_ROTTEXT): end if  
          IF MID (T_STRING,N,1) = "/" THEN T_LETSIM15 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "\" THEN T_LETSIM16 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = ">" THEN T_LETSIM17 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "<" THEN T_LETSIM18 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "=" THEN T_LETSIM19 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "#" THEN T_LETSIM20 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "," THEN T_LETSIM21 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = ";" THEN T_LETSIM22 (T_ROTTEXT): end if
          IF MID (T_STRING,N,1) = "$" THEN T_LETSIM23 (T_ROTTEXT): end if 
          IF MID (T_STRING,N,1) = "%" THEN T_LETSIM24 (T_ROTTEXT): end if          
               
     NEXT N
END SUB

SUB T_LETA (T_ROTTEXT AS DOUBLE)'UCASE A
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 5:T_RT 45:T_FD 1.414:T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_FD 5:T_BK 3:T_RT 90:T_FD 4:T_BK 4:T_LT 90:T_FD 3:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETB (T_ROTTEXT AS DOUBLE)'UCASE B
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 3:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 3:T_BK 3:T_LT 135:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 3:T_RT 180:T_FD 2:T_PEN = 0:T_FD 2:T_ORIENT 0
END SUB

SUB T_LETC (T_ROTTEXT AS DOUBLE)'UCASE C
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 1:T_PEN = 1:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_PEN = 0:T_RT 45:T_FD 4:T_RT 45:T_PEN = 1:T_FD 1.414:T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_BK 1.414:T_RT 135:T_PEN = 0:T_FD 3:T_ORIENT 0
END SUB

SUB T_LETD (T_ROTTEXT AS DOUBLE)'UCASE D
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 3:T_RT 45:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 3:T_BK 3:T_RT 180:T_PEN = 0:T_FD 1:T_ORIENT 0
END SUB

SUB T_LETE (T_ROTTEXT AS DOUBLE)'UCASE E
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 4:T_BK 4:T_RT 90:T_FD 3:T_LT 90:T_FD 2:T_BK 2:T_RT 90:T_FD 3:T_LT 90:T_FD 4:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETF (T_ROTTEXT AS DOUBLE)'UCASE F
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 4:T_BK 4:T_RT 90:T_FD 3:T_LT 90:T_FD 2:T_BK 2:T_RT 90:T_FD 3:T_LT 90:T_PEN = 0:T_FD 4:T_ORIENT 0
END SUB

SUB T_LETG (T_ROTTEXT AS DOUBLE)'UCASE G
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 4:T_BK 4:T_RT 90:T_FD 6:T_LT 90:T_FD 4:T_LT 90:T_FD 3:T_LT 90:T_FD 2:T_PEN = 0:T_BK 2:T_LT 90:T_FD 3:T_ORIENT 0
END SUB

SUB T_LETH (T_ROTTEXT AS DOUBLE)'UCASE H
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_BK 3:T_RT 90:T_FD 4:T_LT 90:T_FD 3:T_BK 6:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETI (T_ROTTEXT AS DOUBLE)'UCASE I
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_BK 6:T_RT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETJ (T_ROTTEXT AS DOUBLE)'UCASE J
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 3:T_BK 3:T_RT 90:T_FD 4:T_LT 90:T_FD 6:T_BK 6:T_RT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETK (T_ROTTEXT AS DOUBLE)'UCASE K
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_BK 3:T_RT 45:T_FD 4.2:T_BK 4.2:T_RT 90:T_FD 4.2:T_RT 45:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETL (T_ROTTEXT AS DOUBLE)'UCASE L
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_BK 6:T_RT 90:T_FD 4:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETM (T_ROTTEXT AS DOUBLE)'UCASE M
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 145:T_FD 3.605:T_LT 110:T_FD 3.605:T_RT 145:T_FD 6:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETN (T_ROTTEXT AS DOUBLE)'UCASE N
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 147:T_FD 7.211:T_LT 147:T_FD 6:T_BK 6:T_RT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETO (T_ROTTEXT AS DOUBLE)'UCASE O
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 4:T_RT 90:T_FD 6:T_RT 90:T_FD 4:T_BK 4:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETP (T_ROTTEXT AS DOUBLE)'UCASE P
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 3:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 3:T_LT 90:T_FD 3 :T_LT 90:T_PEN = 0 :T_FD 4:T_ORIENT 0
END SUB

SUB T_LETQ (T_ROTTEXT AS DOUBLE)'UCASE Q
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 90:T_PEN = 1:T_LT 45:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 2:T_PEN = 0:T_BK 3:T_RT 45:T_PEN = 1:T_FD 3:T_BK 3:T_RT 135:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETR (T_ROTTEXT AS DOUBLE)'UCASE R
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_PEN = 1:T_FD 6:T_RT 90:T_FD 3:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 3:T_RT 218:T_FD 4.9 :T_LT 45:T_PEN = 0 :T_ORIENT 0
END SUB

SUB T_LETS (T_ROTTEXT AS DOUBLE)'UCASE S
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_BK 1.414:T_RT 135:T_FD 2:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414::T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_PEN = 0:T_FD 5:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETT (T_ROTTEXT AS DOUBLE)'UCASE T
T_PEN = 0:T_RT T_ROTTEXT:T_FD 3:T_LT 90:T_PEN = 1:T_FD 6:T_LT 90:T_FD 2:T_BK 4:T_LT 90:T_PEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETU (T_ROTTEXT AS DOUBLE)'UCASE U
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_RT 45:T_FD 5:T_RT 90:T_PEN = 0:T_FD 4:T_PEN = 1:T_RT 90:T_FD 5:T_RT 45:T_FD 1.414::T_RT 45:T_FD 2:T_PEN = 0:T_BK 3:T_ORIENT 0
END SUB

SUB T_LETV (T_ROTTEXT AS DOUBLE)'UCASE V
T_PEN = 0:T_RT T_ROTTEXT:T_FD 3:T_LT 108.426:T_PEN = 1:T_FD 6.324:T_BK 6.324:T_RT 36.872:T_FD 6.324:T_RT 161.564:T_pEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETW (T_ROTTEXT AS DOUBLE)'UCASE W
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 99.403:T_PEN = 1:T_FD 6.082:T_BK 6.082:T_RT 27.9:T_FD 3.162:T_RT 143:T_FD 3.162:T_RT 208:T_FD 6.082:T_RT 170.5:T_PEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETX (T_ROTTEXT AS DOUBLE)'UCASE X
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 56.3:T_PEN = 1:T_FD 7.21:T_LT 123.5:T_PEN = 0:T_FD 4:T_PEN = 1:T_LT 124:T_FD 7.21:T_LT 57:T_ORIENT 0
END SUB

SUB T_LETY (T_ROTTEXT AS DOUBLE)'UCASE Y
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 56.3:T_PEN = 1:T_FD 7.21:T_LT 123.5:T_PEN = 0:T_FD 4:T_PEN = 1:T_LT 124:T_FD 3.60:T_PEN = 0:T_FD 3.60:T_LT 57:T_ORIENT 0
END SUB

SUB T_LETZ (T_ROTTEXT AS DOUBLE)'UCASE Z
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 56.3:T_PEN = 1:T_FD 7.21:T_LT 123.5:T_FD 4:T_BK 4:T_LT 56.3: T_FD 7.21:T_LT 123.5:T_FD 4:T_PEN = 0:T_LT 57:T_ORIENT 0
END SUB

SUB T_LETSPACE (T_ROTTEXT AS DOUBLE)'SPACE
T_PEN = 0:T_RT T_ROTTEXT:T_FD 5:T_ORIENT 0
END SUB

SUB T_LET1 (T_ROTTEXT AS DOUBLE)'NUMBER 1
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 4:T_PEN = 1:T_RT 45 :T_FD 1.414:T_FD 1.414:T_RT 135:T_FD 6:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LET2 (T_ROTTEXT AS DOUBLE)'NUMBER 2
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 5:T_PEN = 1:T_RT 45 :T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 37:T_FD 5:T_LT 127:T_FD 3:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LET3 (T_ROTTEXT AS DOUBLE)'NUMBER 3
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 5:T_PEN = 1:T_RT 45 :T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_LT 90:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_BK 1.414:T_RT 135:T_PEN = 0:T_FD 2:T_ORIENT 0
END SUB

SUB T_LET4 (T_ROTTEXT AS DOUBLE)'NUMBER 4
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 3:T_PEN = 1:T_RT 45 :T_FD 1.414*3:T_RT 135:T_FD 3:T_RT 90:T_FD 3:T_BK 3:T_LT 90:T_FD 3:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LET5 (T_ROTTEXT AS DOUBLE)'NUMBER 5
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_BK 1.414:T_RT 135:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 2:T_RT 90:T_FD 3:T_RT 90:T_FD 3:T_RT 90:T_PEN = 0:T_FD 6:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LET6 (T_ROTTEXT AS DOUBLE)'NUMBER 6
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_BK 1.414:T_RT 135:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_BK 4:T_RT 225:T_FD 1.414:T_RT 45:T_FD 2:T_RT 90:T_PEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LET7 (T_ROTTEXT AS DOUBLE)'NUMBER 7
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 64:T_PEN = 1:T_FD 6.6:T_LT 116:T_FD 2.9:T_LT 117:T_PEN = 0:T_FD 6.6:T_LT 63:T_ORIENT 0
END SUB

SUB T_LET8 (T_ROTTEXT AS DOUBLE)'NUMBER 8
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_BK 1.414:T_RT 135:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_BK 1:T_LT 135:T_FD 1.414:T_LT 90:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_PEN =0:T_BK 1:T_LT 90:T_FD 3:T_LT 90:T_ORIENT 0
END SUB

SUB T_LET9 (T_ROTTEXT AS DOUBLE)'NUMBER 9
T_PEN = 0:T_RT T_ROTTEXT:T_FD 4:T_LT 90:T_PEN = 1:T_FD 6:T_LT 90:T_FD 2:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 2::T_RT 90:T_FD 3:T_LT 90:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LET0 (T_ROTTEXT AS DOUBLE)'NUMBER 0
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_PEN = 0:T_BK 2::T_ORIENT 0
END SUB

SUB T_LETSIM1 (T_ROTTEXT AS DOUBLE)'SIMBOL (
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 135:T_PEN = 1:T_FD 1.414:T_RT 45:T_FD 4:T_RT 45:T_FD 1.414:T_RT 135:T_PEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM2 (T_ROTTEXT AS DOUBLE)'SIMBOL )
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 45:T_PEN = 1:T_FD 1.414:T_LT 45:T_FD 4:T_LT 45:T_FD 1.414:T_LT 135:T_PEN = 0:T_FD 6:T_LT 90:T_FD 1::T_ORIENT 0
END SUB

SUB T_LETSIM3 (T_ROTTEXT AS DOUBLE)'SIMBOL [
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_FD 1:T_BK 1:T_LT 90:T_FD 6:T_RT 90:T_FD 1:T_RT 90:T_PEN = 0:T_FD 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM4 (T_ROTTEXT AS DOUBLE)'SIMBOL ]
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_FD 1:T_LT 90:T_FD 6:T_LT 90:T_FD 1:T_LT 90:T_PEN = 0:T_FD 6:T_LT 90:T_FD 1:T_ORIENT 0
END SUB

SUB T_LETSIM5 (T_ROTTEXT AS DOUBLE)'SIMBOL !
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_LT 90:T_FD 1:T_PEN = 0:T_FD 1:T_PEN = 1:T_FD 4:T_PEN = 0:T_BK 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM6 (T_ROTTEXT AS DOUBLE)'SIMBOL ¡
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_LT 90:T_FD 4:T_PEN = 0:T_FD 1:T_PEN = 1:T_FD 1:T_PEN = 0:T_BK 6:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM7 (T_ROTTEXT AS DOUBLE)'SIMBOL ?
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 4:T_PEN = 1:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_RT 45:T_FD 1:T_RT 45:T_FD 1.414:T_LT 45:T_FD 1:T_PEN = 0:T_FD 1:T_PEN = 1:T_FD 1:T_PEN = 0:T_LT 90:T_FD 1:T_ORIENT 0
END SUB

SUB T_LETSIM8 (T_ROTTEXT AS DOUBLE)'SIMBOL ¿
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 6:T_RT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 1:T_PEN = 0:T_FD 1:T_PEN = 1:T_FD 1:T_RT 90:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_LT 45:T_FD 1.414:T_LT 45:T_FD 1:T_PEN = 0:T_BK 2:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM9 (T_ROTTEXT AS DOUBLE)'SIMBOL _
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_FD 3:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETSIM10 (T_ROTTEXT AS DOUBLE)'SIMBOL -
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 90:T_FD 3:T_RT 90:T_PEN = 1:T_FD 3:T_PEN = 0:T_RT 90:T_FD 3:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM11 (T_ROTTEXT AS DOUBLE)'SIMBOL .
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_FD 1:T_LT 90:T_FD 1:T_LT 90:T_FD 1:T_LT 90:T_FD 1:T_LT 90:T_PEN = 0:T_FD 1:T_ORIENT 0
END SUB

SUB T_LETSIM12 (T_ROTTEXT AS DOUBLE)'SIMBOL :
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_PEN = 1:T_LT 90:T_FD 1:T_PEN = 0: T_FD 1:T_PEN = 1:T_FD 1:T_RT 90:T_FD 1:T_RT 90:T_FD 1:T_RT 90:T_FD 1:T_BK 1:T_PEN = 0:T_LT 90:T_FD 1:T_RT 90:T_PEN = 1:T_FD 1:T_BK 1:T_LT 90:T_FD 1:T_RT 90:T_FD 1:T_BK 1:T_ORIENT 0
END SUB

SUB T_LETSIM13 (T_ROTTEXT AS DOUBLE)'SIMBOL +
T_PEN = 0:T_RT T_ROTTEXT:T_FD 3:T_LT 90:T_PEN = 1:T_FD 6:T_BK 3:T_LT 90:T_FD 1.5:T_BK 3::T_LT 90:T_PEN = 0:T_FD 3:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM14 (T_ROTTEXT AS DOUBLE)'SIMBOL *
     DIM N AS INTEGER
T_PEN = 0:T_RT T_ROTTEXT:T_FD 3:T_LT 90:T_PEN = 0:T_FD 5:T_PEN = 1:FOR N = 0 TO 8 :T_BK 2:T_LT 45:T_FD 2:NEXT N:T_PEN = 0:T_LT 135:T_FD 4.4:T_LT 90:T_FD 4:T_ORIENT 0
END SUB

SUB T_LETSIM15 (T_ROTTEXT AS DOUBLE)'SIMBOL /
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 64:T_PEN = 1:T_FD 6.6:T_BK 6.6:T_RT 64:T_PEN = 0:T_FD 3: T_ORIENT 0
END SUB

SUB T_LETSIM16 (T_ROTTEXT AS DOUBLE)'SIMBOL \
T_PEN = 0:T_RT T_ROTTEXT:T_FD 4:T_LT 116:T_PEN = 1:T_FD 6.6:T_BK 6.6:T_LT 64:T_PEN = 0:T_BK 0: T_ORIENT 0
END SUB

SUB T_LETSIM17 (T_ROTTEXT AS DOUBLE)'SIMBOL >
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 1 :T_LT 90:T_FD 1:T_RT 90: T_LT 45 : T_PEN = 1 : T_FD 1.414*2 : T_LT 90 : T_FD 1.414*2 :T_PEN = 0:T_LT 135:T_FD 5:T_LT 90:T_FD 2: T_ORIENT 0
END SUB

SUB T_LETSIM18 (T_ROTTEXT AS DOUBLE)'SIMBOL <
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 3 :T_LT 90:T_FD 1:T_RT 90:T_LT 135 : T_PEN = 1 : T_FD 1.414*2 : T_RT 90 : T_FD 1.414*2 :T_PEN = 0:T_RT 135:T_FD 5:T_LT 90: T_ORIENT 0
END SUB

SUB T_LETSIM19 (T_ROTTEXT AS DOUBLE)'SIMBOL =
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 1 :T_LT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 3: T_BK 3 :T_PEN = 0:T_LT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 3:T_RT 90:T_PEN = 0:T_FD 4:T_LT 90: T_ORIENT 0
END SUB

SUB T_LETSIM20 (T_ROTTEXT AS DOUBLE)'SIMBOL #
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 1 :T_LT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 3: T_BK 3 :T_PEN = 0:T_LT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 3:T_RT 90:T_PEN = 0:T_FD 4:T_RT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 6:T_RT 90:T_PEN = 0:T_FD 1 :T_RT 90:T_PEN = 1:T_FD 6:T_PEN = 0:T_LT 90:T_FD 1:T_ORIENT 0
END SUB

SUB T_LETSIM21 (T_ROTTEXT AS DOUBLE)'SIMBOL ,
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 1 :T_LT 45:T_PEN = 1:T_FD 1.414:T_PEN = 0:T_RT 135:T_FD 1:T_LT 90::T_ORIENT 0
END SUB

SUB T_LETSIM22 (T_ROTTEXT AS DOUBLE)'SIMBOL ;
T_PEN = 0 : T_RT T_ROTTEXT:T_FD 1 :T_LT 45:T_PEN = 1:T_FD 1.414:T_PEN = 0:T_LT 45:T_FD 1:T_PEN = 1:T_FD 1 : T_LT 90:T_FD 1 :T_LT 90:T_FD 1:T_LT 90:T_FD 1:T_RT 90: T_PEN = 0:T_FD 2:T_LT 90:T_ORIENT 0
END SUB

SUB T_LETSIM23 (T_ROTTEXT AS DOUBLE)'SIMBOL $
T_PEN = 0:T_RT T_ROTTEXT:T_FD 2:T_LT 90:T_FD 1:T_RT 90:T_LT 135:T_PEN = 1:T_FD 1.414:T_BK 1.414:T_RT 135:T_FD 2:T_LT 45:T_FD 1.414:T_LT 45:T_FD 0:T_LT 45:T_FD 1.414:T_LT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_FD 0:T_RT 45:T_FD 1.414::T_RT 45:T_FD 2:T_RT 45:T_FD 1.414:T_RT 45:T_PEN = 1:T_PEN = 0:T_FD 4:T_RT 90:T_FD 2:T_RT 90:T_PEN = 1:T_FD 6:T_PEN = 0:T_RT 90:T_FD 2:T_RT 90:T_FD 6:T_PEN = 0:T_ORIENT 0
END SUB

SUB T_LETSIM24 (T_ROTTEXT AS DOUBLE)'SIMBOL %
T_PEN = 0:T_RT T_ROTTEXT:T_FD 1:T_LT 64:T_PEN = 1:T_FD 6.6:T_LT 116:T_PEN = 0:T_FD 2.9:T_LT 90:T_FD 2: T_PEN = 1 : T_LT 90:T_FD 1 : T_LT 90:T_FD 1 : T_LT 90:T_FD 1 :: T_LT 90:T_FD 1:T_PEN = 0:T_FD 4:T_LT 90:T_FD 2:T_LT 90:T_PEN = 0:T_FD 1 :T_PEN = 1:T_FD 1:T_RT 90:T_FD 1:T_RT 90:T_FD 1:T_RT 90:T_FD 1:T_RT 90:T_LT 180:T_PEN = 0:T_FD 0.9:T_LT 90:T_FD 1:T_ORIENT 0
END SUB
A example to use text

Code: Select all

#INCLUDE "TURTLE3.BI"

DIM SHARED  N AS INTEGER

CLS
SCREEN 18
T_INIT

FOR N = 0 TO 450 STEP 10
     T_ROTTEXT = 90
     CLS
     COLOR 15
T_SCALE = N/10

T_PEN = 0
T_GT (0,0)
T_TEXT "ABCDEfghijk 12345 +-*/<=$#"
SLEEP 100
NEXT N
SLEEP 1000
CLS
':::::::::::::::::::::::::::::::
FOR N = 0 TO 450 STEP 10
     T_ROTTEXT = 90
     CLS
     COLOR 15
T_SCALE = N/100  
T_THICKNESS = N /300
T_PEN = 0
T_GT (0,0)
T_TEXT "ABCDEfghijk 12345 +-*/<=$#"
SLEEP 100
NEXT N
SLEEP 1000
CLS
':::::::::::::::::::::::::::::::
T_THICKNESS = 0
FOR N = 0 TO 450 STEP 10
     COLOR N/10
T_SCALE = 3   
T_ROTTEXT = N
T_PEN = 0
T_GT (0,0)
T_TEXT "ABCDEfghijk 12345 +-*/<=$#"
NEXT N
SLEEP 1000
CLS
':::::::::::::::::::::::::::::::
FOR N = 0 TO 450 STEP 10
     COLOR N/10
T_SCALE = N/150    
T_ROTTEXT = N
T_PEN = 0
T_GT (0,0)
T_TEXT "ABCDEfghijk 12345 +-*/<=$#"
NEXT N
SLEEP 1000
CLS
':::::::::::::::::::::::::::::::
FOR N = 0 TO 450 STEP 10
     COLOR N/10
T_SCALE = N/50    
T_ROTTEXT = N
T_PEN = 0
T_GT (0-N,0)
T_TEXT "ABCDEfghijk 12345 +-*/<=$#"
NEXT N
SLEEP 1000
'::::::::::::::::::::::::::::::::
cls
T_GT (0,0)
FOR N = 0 TO 360 step 60
COLOR 15
T_SCALE = 3  
T_ROTTEXT = N
T_TEXT "ABCDEfghijk"
NEXT N
SLEEP 2000
'::::::::::::::::::::::::::::::::
cls
T_GT (0,0)
FOR N = 0 TO 360 step 10
COLOR 15
T_SCALE = 2
T_ROTTEXT = N
T_TEXT "ABCDEfghijk "
NEXT N

SLEEP
END
Last edited by lrcvs on Aug 14, 2013 13:52, edited 5 times in total.
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Hi!

Other example "turtle3.bi":

See:

http://www.youtube.com/watch?v=Yvq78aNE ... lunRgi3jDg

The effect of this draw, is:
1) The grid rotates clockwise.

2) The blades rotate clockwise.

In the video, this effect is not seen, because the image capture is very fast, but if you look at the program.

Draw a fan

Code: Select all

#INCLUDE "TURTLE3.BI"

DIM AS INTEGER C,N, REJAS
DIM AS DOUBLE J,X,Y,RT,RET,RIT,ROT,RUT,VEL,XX1,YY1,XX2,YY2,XXE1,YYE1

cls

rejas = 5
rut = 1
vel = 1

dim a (74,2) AS DOUBLE
dim b (74,2) AS DOUBLE

'POSICIONES DE LAS LINEAS DE LA REJILLA QUE TIENE ROTACION
'POSICION INICIAL
c = 0
for n = 0 to 360 step rejas
     c = c + 1
     x = cos (T_RADIANS (N))*200
     y = sin (T_RADIANS (N))*200
     a (c,1) = x 
     a (c,2) = y 
next n

'POSICION FINAL
c = 0
for n = 360 to 0 step -rejas
     c = c + 1   
     x = cos (T_RADIANS (N))*200
     y = sin (T_RADIANS (N))*200
     b (c,1) = x 
     b (c,2) = y 
next n

screen 12
T_INIT

line (100,10)-(540,470),7,bf 'CUERPO DEL VENTILADOR

for rot = 360 * 10  to 0 step -1
     circle (320,240),205,0,,,,F

     '::::::::::::::::::::::::::::::::::::::::::::::::::::::
     'AQUI DIBUJAMOS LAS ASPAS DEL VENTILADOR 
     ret = T_RADIANS (RUT) 
     for j = 360 TO 0  step -0.1 
          x = cos (T_RADIANS (J))* 195*cos (T_RADIANS (J)*2)
          y = sin (T_RADIANS (J))* 195*cos (T_RADIANS (J)*2) 
          xxe1 = (x* cos (ret))-(y* sin (ret))
          yye1 = (x* sin (ret))+(y* cos (ret))
          PSET (xxe1+320, yye1+240),15
     next j

     rut = rut + VEL
     vel = vel + 0.1
     if vel > 60 then vel = 60: END IF
     line (120,20)-(150,50),0,bf
     T_PEN = 0
     T_GT (-66,-65)
     T_SCALE = 3
     T_PEN = 1
     T_ROTTEXT = 90
     color 12
     t_thickness = 0.5
     T_TEXT STR(INT(VEL))
     T_PEN = 0
     T_GT (-56,-65)
     T_SCALE = 3
     color 0
     T_PEN = 1
     t_thickness = 0
     T_ROTTEXT = 90
     T_TEXT "Speed"

     'AQUI DIBUJAMOS EL CONTROL DE LA VELOCIDAD
     circle (490,60),30,1,,,,f 
     RIT = T_RADIANS ((vel/1.7)*10)
     x = cos (T_RADIANS (RIT))* 28*cos (T_RADIANS (RIT)*2)
     y = sin (T_RADIANS (RIT))* 28*cos (T_RADIANS (RIT)*2)
     xxe1 = (x* cos (rit))-(y* sin (rit))
     yye1 = (x* sin (rit))+(y* cos (rit))
     line (490,60)-(xxe1+490, yye1 +60), 15

     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     'AQUI DIBUJAMOS LA REJILLA ROTATORIA
     circle (320,240),200,15
     circle (320,240),60,15,,,,f
     rt = T_RADIANS (ROT)  'RADIO DE LA REJILLA
     for n = 1 to C
          xx1 = (a(n,1)* cos (rt))-(a(n,2)* sin (rt))
          yy1 = (a(n,1)* sin (rt))+(a(n,2)* cos (rt))
          xx2 = (b(n,1)* cos (rt))-(b(n,2)* sin (rt))
          yy2 = (b(n,1)* sin (rt))+(b(n,2)* cos (rt))
          line (xx1+ 320,yy1+240)-(xx2+320,yy2+240),10     
     next n
     sleep 35,0
next rot
sleep
end
Richard
Posts: 3096
Joined: Jan 15, 2007 20:44
Location: Australia

Re: Library for drawing turtle type (Logo turtle)

Post by Richard »

@lrcvs. Here are edited versions with many changes made.

Need to Declare Functions and Subs only if they are used before they are defined.

I have replaced t_radians() with a #Define which is faster.

I have converted variable names to lower case so it is easier for me to read.

You often use “ : End If” at the end of a single line conditional where it is not needed.

I have inserted many Byref and some Byval to get past pedantic checking.

I have replaced the t_text conditional tests with a Select Case statement. Your code tested every possibility, even after success.

You pass almost every parameter as a Double even though some are integer. e.g. t_pen

I have renamed letter, number and symbols to t_let_A, t_num_1 and t_sym_1.

I have reformatted character drawing code to start each line with t_pen = 0 or t_pen = 1.
They should alternate, 0, 1, 0 . . . 1, 0
There are problems with missing or duplicated t_pen flagged by XXXXX in the code. Look at the following
t_let_S = S
t_let_X = X
t_sym_12 = :
t_sym_23 = $
t_sym_24 = %

Here is my edit of your turtle3.bi

Code: Select all

' find original turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'    'To Draw
'    Declare Sub t_init()'INIT TURTLE
'    Declare Sub t_axes ()'DRAW CENTER AXES
'    Declare Sub t_home ()'GO HOME TURTLE
'    Declare Sub t_point ()'DRAW A POINT
'    Declare Sub t_grid (Byval T_STEP_GRID As Double)'DRAW A GRID
'    Declare Sub t_orient (Byval T_ANGLE As Double)'SET ORIENTATION TURTLE
Declare Sub T_GT (Byval T_X As Double, Byval T_YY As Double)'GO TO NEW POSITION X,Y
'    Declare Sub t_fd (Byval T_DISTANCE As Double)'FORWARD X DISTANCE
'    Declare Sub t_bk (Byval T_DISTANCE As Double)'BACK X DISTANCE
'    Declare Sub t_rt (Byval T_ANGLE As Double)'TURN RIGHT
'    Declare Sub t_lt (Byval T_ANGLE As Double)'TURN LEFT
'    Declare Sub t_circle (Byval T_R As Double)'DRAW A CIRCLE
'    Declare Sub t_arc_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC CIRCLE
'    Declare Sub t_sec_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A CIRCLE SECTOR
'    Declare Sub t_poly (Byval T_R As Double, Byval T_NSIDE As Integer)'DRAW A POLYGON
'    Declare Sub t_ellipse (Byval T_R1 As Double, Byval T_R2 As Double)'DRAW A ELLIPSE
'    Declare Sub t_arc_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC ELLIPTIC
'    Declare Sub t_sec_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC SECTOR
Declare Sub t_segment (Byval T_LX1 As Double, Byval T_LY1 As Double, Byval T_LX2 As Double, Byval T_LY2 As Double)
'    Declare Sub t_star (Byval T_NP As Integer, Byval T_RG As Double, Byval T_RP As Double)
'    Declare Sub t_text (Byref T As String)
'    'CHARS
'    Declare Sub T_LETSPACE (Byval T_ROTTEXT As Double)'SPACE

' do not need to declare letters, numbers or symbols as they are defined before they are used by t_text

Dim Shared As Integer t_center_screen_x, t_center_screen_y, t_w, t_h, t_pen, t_nside

Dim Shared As Double t_position_x, t_position_y, t_angle, t_step_grid, t_heading
Dim Shared As Double t_new_position_x, t_new_position_y, t_x, t_y, t_distance, t_scale, t_thickness
Dim Shared As Double t_first_position_x, t_first_position_y, t_last_position_x, t_last_position_y
Dim Shared As Double t_x0, t_y0, t_x1, t_y1, t_x2, t_y2, t_r, t_r1, t_r2, t_cp, t_ini, t_end
Dim Shared t_rottext As Double

Const Pi = 4 * Atn(1)
Const As Double DtoR = Atn(1) / 45
#Define t_radians(degrees) ((degrees) * DtoR )
'Function t_radians(Byval t_angle As Double) As Double 'TRANSFORM DEGREES TO RADIANS
'    Return (t_angle * 2 * PI)/360
'End Function


'NOTE : t_LONG = HyPOTENUSE

Sub t_init ()'INIT TURTLE
    Screeninfo t_w, t_h
    t_center_screen_x = Int (t_w / 2)
    t_center_screen_y = Int (t_h / 2)
    t_position_x = t_center_screen_x
    t_position_y = t_center_screen_y
    t_gt (t_position_x, t_position_y)
    t_heading = 0
    Color 15
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    'window (t_w,t_h)-(0,0)
End Sub

Sub t_axes ()'DRAW CENTER AXES
    Line( 0, t_center_screen_y)-( t_w, t_center_screen_y ), 7
    Line( t_center_screen_x, 0)-( t_center_screen_x, t_h ), 7
End Sub

Sub t_grid(Byval t_step_grid As Double) 'DRAW A GRID
    Dim N As Integer
    For N =  0 To t_h Step t_step_grid
        Line(0, N)-(t_w, N), 8    'LINEAS HORIZONTALES
    Next N
    For N =  0 To t_w Step t_step_grid
        Line(N, 0)-(N, t_h), 8    'LINEAS VERTICALES
    Next N
    t_axes ()
End Sub

Function t_APHOTEME (Byval t_r As Double, Byval t_nside As Integer) As Double 'CALCULATE APHOTEME
    Dim As Double t_rgrad, t_hip
    t_r = t_r
    t_rgrad = t_radians(0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_rgrad = t_radians(360/t_nside)
    t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
    t_x2 = Abs(t_x0 - t_x1)
    t_y2 = Abs(t_y0 - t_y1)
    t_hip = Sqr(t_x2*t_x2 + t_y2*t_y2)
    Return Sqr(t_r*t_r - (t_hip/2)^2)
End Function

Sub t_orient (Byval t_angle As Double)'SET ORIENTATION TURTLE
    t_heading = t_radians (t_angle)
End Sub

Sub t_GT (Byval t_x As Double, Byval t_y As Double) 'GO TO NEW POSITION X,Y
    t_x = t_x * t_scale
    t_y = t_y * t_scale
    t_new_position_x = t_center_screen_x + t_x
    t_new_position_y = t_center_screen_y + t_y
    If t_thickness = 0 And t_pen = 1 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_thickness > 0 And t_pen = 1 Then t_segment (t_position_x, t_position_y, t_new_position_x,t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_home ()'GO HOME TURTLE
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_center_screen_x,t_center_screen_y)
    t_position_x  = Int(t_w/2)
    t_position_y  = Int(t_h/2)
End Sub

Sub t_fd (Byval t_distance As Double)'FORWARD X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x + (t_distance * Sin(t_heading))
    t_new_position_y = t_position_y - (t_distance * Cos(t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y,t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_bk (Byval t_distance As Double)'BACK X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x - ( t_distance * Sin (t_heading))
    t_new_position_y = t_position_y + ( t_distance * Cos (t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line(t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_rt (Byval t_angle As Double)'TURN RIGHT
    t_heading = t_heading + t_radians (t_angle)
End Sub

Sub t_lt (Byval t_angle As Double)'TURN LEFT
    t_heading = t_heading - t_radians (t_angle)     
End Sub 

Function t_long (_  ' CALCULATE DISTANCE /LENGHT TWO POINTS
    Byval t_x1 As Double, Byval t_y1 As Double, _
    Byval t_x2 As Double, Byval t_y2 As Double) As Double
    Dim As Double dx = t_x1  - t_x2
    Dim As Double dy = t_y1  - t_y2
    Return Sqr(dx*dx + dy*dy)
End Function

Sub t_circle (Byval t_r As Double)'DRAW A CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_poly (Byval t_r As Double, Byval t_nside As Integer)'DRAW A POLYGON
    Dim As Double t_rgrad, t_grad
    t_r = t_r  * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360 Step 360/t_nside
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0, t_y0,t_x1, t_y1)
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_ellipse (Byval t_r1 As Double, Byval t_r2 As Double) 'DRAW A ELLIPSE
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos(t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin(t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_point ()'DRAW A POINT
    If t_pen = 1 Then Pset (t_position_x, t_position_y)
End Sub

Sub t_arc_cir (Byval t_r As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0,t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_cir (Byval t_r As Double,Byval t_ini As Double, Byval t_end As Double)'DRAW A CIRCLE SECTOR
    Dim As Double t_rgrad, t_grad
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0,t_y0,t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line (t_x0, t_y0)-(t_position_x, t_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment  (t_x0, t_y0,t_position_x, t_position_y)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_arc_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC ELLIPTIC
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1) : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ELLIPTIC SECTOR
    Dim As Double t_rgrad, t_grad   
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos(t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin(t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line  (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = t_lx1 - t_lx2
    dy = t_ly1 - t_ly2
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
End Sub

Sub t_star (Byval t_NP As Integer, Byval t_rG As Double, Byval t_rP As Double)
    Dim As Integer C
    Dim As Double X, Y, NP, N, R
    NP = 180 / t_NP
    R = 0
    C = 0
    t_pen = 0
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
        C = C + 1
    Next N
End Sub 

'=======================================================================
' characters are defined before use by t_text()
'=======================================================================
Sub t_let_A (Byval t_rottext As Double)'UCASE A
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90      ' XXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXX
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : t_orient 0
    ' XXXXXXXXXXXXXXX  missing t_pen = 0   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_lt 57 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd 5 : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    t_pen = 0 : t_rt t_rottext : t_fd 4 : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 4
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol : 
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1 : t_orient 0
    'XXXXXXXXXXXX missing t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_lt 90
    t_pen = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_fd 4.4 : t_lt 90 : t_fd 4 : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    t_pen = 0 : t_rt t_rottext : t_fd 4 : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 0 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 2 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    t_pen = 0 :  t_rt t_rottext : t_fd 3 : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 0 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 0 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 1      'XXXXXXXXXXXX duplicate t_pen = 1  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 0 : t_fd 5      'XXXXXXXXXXXX duplicate t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      'XXXXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

'=======================================================================
' use the characters defined before
'=======================================================================
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        Case "a" : t_scale /= 2 : t_let_A (t_rottext) : t_scale *= 2
        Case "b" : t_scale /= 2 : t_let_B (t_rottext) : t_scale *= 2
        Case "c" : t_scale /= 2 : t_let_C (t_rottext) : t_scale *= 2
        Case "d" : t_scale /= 2 : t_let_D (t_rottext) : t_scale *= 2
        Case "e" : t_scale /= 2 : t_let_E (t_rottext) : t_scale *= 2
        Case "f" : t_scale /= 2 : t_let_F (t_rottext) : t_scale *= 2
        Case "g" : t_scale /= 2 : t_let_G (t_rottext) : t_scale *= 2
        Case "h" : t_scale /= 2 : t_let_H (t_rottext) : t_scale *= 2
        Case "i" : t_scale /= 2 : t_let_I (t_rottext) : t_scale *= 2
        Case "j" : t_scale /= 2 : t_let_J (t_rottext) : t_scale *= 2
        Case "k" : t_scale /= 2 : t_let_K (t_rottext) : t_scale *= 2
        Case "l" : t_scale /= 2 : t_let_L (t_rottext) : t_scale *= 2
        Case "m" : t_scale /= 2 : t_let_M (t_rottext) : t_scale *= 2
        Case "n" : t_scale /= 2 : t_let_N (t_rottext) : t_scale *= 2
        Case "o" : t_scale /= 2 : t_let_O (t_rottext) : t_scale *= 2
        Case "p" : t_scale /= 2 : t_let_P (t_rottext) : t_scale *= 2
        Case "q" : t_scale /= 2 : t_let_Q (t_rottext) : t_scale *= 2
        Case "r" : t_scale /= 2 : t_let_R (t_rottext) : t_scale *= 2
        Case "s" : t_scale /= 2 : t_let_S (t_rottext) : t_scale *= 2
        Case "t" : t_scale /= 2 : t_let_T (t_rottext) : t_scale *= 2 
        Case "u" : t_scale /= 2 : t_let_U (t_rottext) : t_scale *= 2
        Case "v" : t_scale /= 2 : t_let_V (t_rottext) : t_scale *= 2
        Case "w" : t_scale /= 2 : t_let_W (t_rottext) : t_scale *= 2
        Case "x" : t_scale /= 2 : t_let_X (t_rottext) : t_scale *= 2
        Case "y" : t_scale /= 2 : t_let_Y (t_rottext) : t_scale *= 2
        Case "z" : t_scale /= 2 : t_let_Z (t_rottext) : t_scale *= 2
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            Print " Missing character. "
            Sleep
        End Select
    Next N
End Sub


Here is an edit of your demonstration code.
Tests 6b and 8 in the demonstration code have problems of some sort.

Code: Select all

#include "turtle3.bi"
' find turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

Dim As Integer n, c, j
Dim As Double x, y
Dim As String s, z
s = ""

Screen 18
s = " ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890"
For n = 1 To 1000
    z = z + s
Next n


' Test 1 ===============================================
Cls
c = 1
j = 1
t_init
t_pen = 0

t_gt( -200, 0 )
t_rt( 90 )
For n = 0 To 1500 Step 3   
    y = Sin( t_radians(n) ) * c / 2 
    x = Cos( t_radians(n) ) * c / 2   
    t_pen = 0   
    t_gt( x, y )
    t_fd( 1 )
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    t_orient( 90 )
    t_text( Mid(z, j, 1) )
    c = c + 1
    j = j + 1
Next n
Print "Test 1"
Sleep

' Test 2 ===============================================
Cls
c = 0
j = 0
t_gt (-200,0)
t_rt 90
For n = 0 To 1500 Step 3   
    y = Sin( t_radians(n) ) * c / 2 
    x = Cos( t_radians(n) ) * c / 2   
    t_pen = 0   
    t_gt( x, y )
    t_fd( 1 )
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    t_orient( n )
    t_text( Mid(z, j, 1) )
    c = c + 1
    j = j + 1
Next n
Print "Test 2"
Sleep

' Test 3 ===============================================
Cls
c = 0
j = 0
t_gt( -200, 0 )
t_rt( 90 )
For n = 0 To 2000 Step 4
    y = Sin( t_radians(n) ) * c / 8
    x = Cos( t_radians(n) ) * c / 4
    t_pen = 0
    t_gt( x, y )
    t_pen = 1
    t_thickness = 0
    t_orient( n )
    t_text( Mid(z, j, 1) + " " )
    t_scale = 0.1 + ( c / 250 )   
    c = c + 1
    j = j + 1
Next n
Print "Test 3"
Sleep

' Test 4 ===============================================
Cls
c = 0
j = 0
t_gt (-200,0)
t_rt 90
For n = 0 To 2000 Step 4 
    y = Sin( t_radians(n) ) * c / 8 
    x = Cos( t_radians(n) ) * c / 4   
    t_pen = 0   
    t_gt( x, y )   
    t_pen = 1
    t_thickness = 0
    t_orient( 90 )
    t_text( Mid(z, j, 1) + " " )
    t_scale = 0.1 + ( c / 250 )   
    c = c + 1
    j = j + 1
Next n
Print "Test 4"
Sleep

' Test 5 ===============================================
Cls
c = 1
For n = 0 To 720 Step 10
    y = 100 * Sin( t_radians(n) )
    x = n
    t_pen = 0
    t_gt( -220 + n, y )
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    t_orient( 90 )
    Color 15
    t_text( Mid(z, c, 1) )
    c = c + 1
Next n
Print "Test 5"
Sleep

' Test 6 ===============================================
Cls
c = 1
For n = 0 To 720 Step 10
    y = 100 * Sin( t_radians(n) )
    x = n
    t_pen = 0
    t_gt( -220 + n, y)
    t_pen = 1
    t_scale = 1.25
    t_thickness = 0
    t_orient( n )
    Color 15
    t_text( Mid(z, c, 1) )
    c = c + 1
Next n
Print "Test 6a"
Sleep
' problem follows ?


s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
j = Len(s)

t_init
t_rottext = 90
t_pen = 0
t_gt( -300, 0 )
t_pen = 1
For n = 1 To j
    t_scale = n / 9.5
    t_thickness = n / 10
    t_text( Mid(s, n, 1) + " " )
Next n
Print "Test 6b"
Sleep

' Test 7 ===============================================
Cls
t_init
t_rottext = 90
t_pen = 0
t_gt( -300, 0 )
t_pen = 1
c = 1
t_scale = 2
For n = 0 To 360 Step 10
    t_pen = 0
    x = 100 * Cos( t_radians(n) )
    y = 100 * Sin( t_radians(n) )
    t_gt( x, y )
    t_pen = 1
    t_text( Mid(s, c, 1) + " " )
    c = c + 1
Next n
Print "Test 7"
Sleep

' Test 8 ===============================================
Cls
t_init
t_rottext = 90
t_pen = 0
t_gt( -300, 0 )
t_pen = 1
c = 1
t_scale = 2
t_thickness = 1.5
For n = 0 To 360 Step 10
    t_pen = 0
    x = 100 * Cos( t_radians(n) )
    y = 100 * Sin( t_radians(n) )
    t_gt( x, y )
    t_pen = 1
    t_rottext = n
    t_text( Mid(s, c, 1) + " " )
    c = c + 1
Next n
Print "Test 8"
Sleep

' End of tests ===============================================

lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Hi, Richard:

What you did, but they did the ancient Egyptians.

You've made perfect.!

The error of the test 6b and 8 are already fixed, you do not you had any errors.

I modified "T_Segment" and the characters work well as "thick"

Now you can check the test 6b and 8

Here's your modified:

Code: Select all


Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = abs(t_lx1 - t_lx2)  '<<<< ABS
    dy = abs(t_ly1 - t_ly2)   '<<<< ABS
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
End Sub

test 6

Code: Select all

' Test 6 ===============================================
Cls
c = 1
For n = 0 To 720 Step 10
    y = 100 * Sin( t_radians(n) )
    x = n
    t_pen = 0
    t_gt( -220 + n, y)
    t_pen = 1
    t_scale = 1.25
    t_thickness = 0
    t_orient( n )
    Color 15
    t_text( Mid(z, c, 1) )
    c = c + 1
Next n
Print "Test 6a"
Sleep
' problem follows ?


s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
j = Len(s)

t_init
t_rottext = 90
t_pen = 0
t_gt( -300, 0 )
t_pen = 1
For n = 1 To j
    t_scale = n / 9.5
    t_thickness = 1
    t_text( Mid(s, n, 1) + " " )
Next n
Print "Test 6b"
Sleep


test 8

Code: Select all

' Test 8 ===============================================
Cls
t_init
t_rottext = 90
t_pen = 0
t_gt( -300, 0 )
t_pen = 1
c = 1
t_scale = 2
t_thickness = 2
For n = 0 To 360 Step 10
    t_pen = 0
    x = 100 * Cos( t_radians(n) )
    y = 100 * Sin( t_radians(n) )
    t_gt( x, y )
    t_pen = 1
    t_rottext = n
    t_text( Mid(s, c, 1) + " " )
    c = c + 1
Next n
Print "Test 8"
Sleep

' End of tests ===============================================


Thank you very much for it in perfect!
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

@ Richard:

I adapted the separation of characters, the plot thick, by calculating direct proportionality thickness and character separation....

Here I attached all modifications and a test, hopefully useful.

Example such a program xxx.bas

Code: Select all

' find original turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'    'To Draw
    Declare Sub t_init()'INIT TURTLE
'    Declare Sub t_axes ()'DRAW CENTER AXES
'    Declare Sub t_home ()'GO HOME TURTLE
'    Declare Sub t_point ()'DRAW A POINT
'    Declare Sub t_grid (Byval T_STEP_GRID As Double)'DRAW A GRID
'    Declare Sub t_orient (Byval T_ANGLE As Double)'SET ORIENTATION TURTLE
Declare Sub T_GT (Byval T_X As Double, Byval T_YY As Double)'GO TO NEW POSITION X,Y
'    Declare Sub t_fd (Byval T_DISTANCE As Double)'FORWARD X DISTANCE
'    Declare Sub t_bk (Byval T_DISTANCE As Double)'BACK X DISTANCE
    Declare Sub t_rt (Byval T_ANGLE As Double)'TURN RIGHT
'    Declare Sub t_lt (Byval T_ANGLE As Double)'TURN LEFT
'    Declare Sub t_circle (Byval T_R As Double)'DRAW A CIRCLE
'    Declare Sub t_arc_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC CIRCLE
'    Declare Sub t_sec_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A CIRCLE SECTOR
'    Declare Sub t_poly (Byval T_R As Double, Byval T_NSIDE As Integer)'DRAW A POLYGON
'    Declare Sub t_ellipse (Byval T_R1 As Double, Byval T_R2 As Double)'DRAW A ELLIPSE
'    Declare Sub t_arc_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC ELLIPTIC
'    Declare Sub t_sec_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC SECTOR
Declare Sub t_segment (Byval T_LX1 As Double, Byval T_LY1 As Double, Byval T_LX2 As Double, Byval T_LY2 As Double)
'    Declare Sub t_star (Byval T_NP As Integer, Byval T_RG As Double, Byval T_RP As Double)
    Declare Sub t_text (Byref T As String)
'    'CHARS
'    Declare Sub T_LETSPACE (Byval T_ROTTEXT As Double)'SPACE

' do not need to declare letters, numbers or symbols as they are defined before they are used by t_text

Dim Shared As Integer t_center_screen_x, t_center_screen_y, t_w, t_h, t_pen, t_nside

Dim Shared As Double t_position_x, t_position_y, t_angle, t_step_grid, t_heading
Dim Shared As Double t_new_position_x, t_new_position_y, t_x, t_y, t_distance, t_scale, t_thickness
Dim Shared As Double t_first_position_x, t_first_position_y, t_last_position_x, t_last_position_y
Dim Shared As Double t_x0, t_y0, t_x1, t_y1, t_x2, t_y2, t_r, t_r1, t_r2, t_cp, t_ini, t_end
Dim Shared t_rottext As Double

DIM N AS INTEGER 'TEST
Const Pi = 4 * Atn(1)
Const As Double DtoR = Atn(1) / 45 'CONSTANTE DE CONVERSION ENTRE DEGREES (GRADOS) Y RADIANES
#Define t_radians(degrees) ((degrees) * DtoR )
'Function t_radians(Byval t_angle As Double) As Double 'TRANSFORM DEGREES TO RADIANS
'    Return (t_angle * 2 * PI)/360
'End Function


'NOTE : t_LONG = HyPOTENUSE

CLS
SCREEN 12
T_INIT

t_rottext = 90
t_scale = 5
t_pen =0
t_gt (-63,0)
t_pen = 1
t_thickness = 0
T_TEXT ("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
SLEEP
CLS
':::::::::::::::::::::::::::::::::::::::::::::::
t_rottext = 90
t_scale = 3
t_pen =0
t_gt (-100,10)
t_pen = 1
FOR N= 0 TO 10
t_scale = N    
t_thickness = N
CLS
t_pen =0
t_gt (-100,10)
t_pen = 1
T_TEXT ("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
SLEEP 50
NEXT N
SLEEP
CLS
':::::::::::::::::::::::::::::::::::::::::::::::
t_rottext = 90
t_scale = 3
t_pen =0
t_gt (-100,10)
t_pen = 1
FOR N= 0 TO 10
 t_scale = N    
t_thickness = N/2
CLS
t_pen =0
t_gt (-100,10)
t_pen = 1
T_TEXT ("abcdefghijklmnopqrstuvwxyz")
SLEEP 50
NEXT N
SLEEP
CLS
':::::::::::::::::::::::::::::::::::::::::::::::
t_rottext = 90
FOR N= 0 TO 10
t_scale = N*2    
t_thickness = N/2
CLS
t_pen =0
t_gt (-50,10)
t_pen = 1
T_TEXT ("1234567890")
SLEEP 50
NEXT N
SLEEP
CLS
':::::::::::::::::::::::::::::::::::::::::::::::
t_rottext = 90
FOR N= 0 TO 5
t_scale = N   
t_thickness = N/2
CLS
t_pen =0
t_gt (-65,0)
t_pen = 1
T_TEXT ("+-*/-.,;:_+`¡'¿?=)(/%$!\")
SLEEP 50
NEXT N


SLEEP
END

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Sub t_init ()'INIT TURTLE
    Screeninfo t_w, t_h
    t_center_screen_x = Int (t_w / 2)
    t_center_screen_y = Int (t_h / 2)
    t_position_x = t_center_screen_x
    t_position_y = t_center_screen_y
    t_gt (t_position_x, t_position_y)
    t_heading = 0
    Color 15
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    'window (t_w,t_h)-(0,0)
End Sub

Sub t_axes ()'DRAW CENTER AXES
    Line( 0, t_center_screen_y)-( t_w, t_center_screen_y ), 7
    Line( t_center_screen_x, 0)-( t_center_screen_x, t_h ), 7
End Sub

Sub t_grid(Byval t_step_grid As Double) 'DRAW A GRID
    Dim N As Integer
    For N =  0 To t_h Step t_step_grid
        Line(0, N)-(t_w, N), 8    'LINEAS HORIZONTALES
    Next N
    For N =  0 To t_w Step t_step_grid
        Line(N, 0)-(N, t_h), 8    'LINEAS VERTICALES
    Next N
    t_axes ()
End Sub

Function t_APHOTEME (Byval t_r As Double, Byval t_nside As Integer) As Double 'CALCULATE APHOTEME
    Dim As Double t_rgrad, t_hip
    t_r = t_r
    t_rgrad = t_radians(0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_rgrad = t_radians(360/t_nside)
    t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
    t_x2 = Abs(t_x0 - t_x1)
    t_y2 = Abs(t_y0 - t_y1)
    t_hip = Sqr(t_x2*t_x2 + t_y2*t_y2)
    Return Sqr(t_r*t_r - (t_hip/2)^2)
End Function

Sub t_orient (Byval t_angle As Double)'SET ORIENTATION TURTLE
    t_heading = t_radians (t_angle)
End Sub

Sub t_GT (Byval t_x As Double, Byval t_y As Double) 'GO TO NEW POSITION X,Y
    t_x = t_x * t_scale
    t_y = t_y * t_scale
    t_new_position_x = t_center_screen_x + t_x
    t_new_position_y = t_center_screen_y + t_y
    If t_thickness = 0 And t_pen = 1 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_thickness > 0 And t_pen = 1 Then t_segment (t_position_x, t_position_y, t_new_position_x,t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_home ()'GO HOME TURTLE
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_center_screen_x,t_center_screen_y)
    t_position_x  = Int(t_w/2)
    t_position_y  = Int(t_h/2)
End Sub

Sub t_fd (Byval t_distance As Double)'FORWARD X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x + (t_distance * Sin(t_heading))
    t_new_position_y = t_position_y - (t_distance * Cos(t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y,t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_bk (Byval t_distance As Double)'BACK X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x - ( t_distance * Sin (t_heading))
    t_new_position_y = t_position_y + ( t_distance * Cos (t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line(t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_rt (Byval t_angle As Double)'TURN RIGHT
    t_heading = t_heading + t_radians (t_angle)
End Sub

Sub t_lt (Byval t_angle As Double)'TURN LEFT
    t_heading = t_heading - t_radians (t_angle)     
End Sub 

Function t_long (_  ' CALCULATE DISTANCE /LENGHT TWO POINTS
    Byval t_x1 As Double, Byval t_y1 As Double, _
    Byval t_x2 As Double, Byval t_y2 As Double) As Double
    Dim As Double dx = t_x1  - t_x2
    Dim As Double dy = t_y1  - t_y2
    Return Sqr(dx*dx + dy*dy)
End Function

Sub t_circle (Byval t_r As Double)'DRAW A CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_poly (Byval t_r As Double, Byval t_nside As Integer)'DRAW A POLYGON
    Dim As Double t_rgrad, t_grad
    t_r = t_r  * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360 Step 360/t_nside
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0, t_y0,t_x1, t_y1)
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_ellipse (Byval t_r1 As Double, Byval t_r2 As Double) 'DRAW A ELLIPSE
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos(t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin(t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_point ()'DRAW A POINT
    If t_pen = 1 Then Pset (t_position_x, t_position_y)
End Sub

Sub t_arc_cir (Byval t_r As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0,t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_cir (Byval t_r As Double,Byval t_ini As Double, Byval t_end As Double)'DRAW A CIRCLE SECTOR
    Dim As Double t_rgrad, t_grad
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0,t_y0,t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line (t_x0, t_y0)-(t_position_x, t_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment  (t_x0, t_y0,t_position_x, t_position_y)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_arc_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC ELLIPTIC
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1) : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ELLIPTIC SECTOR
    Dim As Double t_rgrad, t_grad   
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos(t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin(t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line  (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = ABS (t_lx1 - t_lx2)
    dy = ABS (t_ly1 - t_ly2)
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
End Sub

Sub t_star (Byval t_NP As Integer, Byval t_rG As Double, Byval t_rP As Double)
    Dim As Integer C
    Dim As Double X, Y, NP, N, R
    NP = 180 / t_NP
    R = 0
    C = 0
    t_pen = 0
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
        C = C + 1
    Next N
End Sub 

'=======================================================================
' characters are defined before use by t_text() AND ADAPTATION / SEPARATION OF CHARS <<<<<<<!!!
'=======================================================================
' ADAPTATION ALL CHAR, NUMBERS AND SIMBOLS = >>>> +(1*T_THICKNESS)

Sub t_let_A (Byval t_rottext As Double)'UCASE A
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)    : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90      ' XXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXX
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : t_orient 0
    ' XXXXXXXXXXXXXXX  missing t_pen = 0   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_lt 57 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd  5+(1*T_THICKNESS)   : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    t_pen = 0 : t_rt t_rottext : t_fd 1 +(1*T_THICKNESS) : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    t_pen = 0 : t_rt t_rottext : t_fd 2 +(1*T_THICKNESS) : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    t_pen = 0 : t_rt t_rottext : t_fd 4+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 4
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol : 
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1 : t_orient 0
    'XXXXXXXXXXXX missing t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_Rt 90
    t_pen = 0 : T_BK 1
    T_PEN = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_BK 1 : t_RT 90:T_FD 1  : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    t_pen = 0 : t_rt t_rottext : t_fd 4 +(1*T_THICKNESS) : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 0 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 2 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    t_pen = 0 :  t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 90 :  t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 90 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      'XXXXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

'=======================================================================
' use the characters defined before
'=======================================================================
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        Case "a" : t_scale /= 2 : t_let_A (t_rottext) : t_scale *= 2
        Case "b" : t_scale /= 2 : t_let_B (t_rottext) : t_scale *= 2
        Case "c" : t_scale /= 2 : t_let_C (t_rottext) : t_scale *= 2
        Case "d" : t_scale /= 2 : t_let_D (t_rottext) : t_scale *= 2
        Case "e" : t_scale /= 2 : t_let_E (t_rottext) : t_scale *= 2
        Case "f" : t_scale /= 2 : t_let_F (t_rottext) : t_scale *= 2
        Case "g" : t_scale /= 2 : t_let_G (t_rottext) : t_scale *= 2
        Case "h" : t_scale /= 2 : t_let_H (t_rottext) : t_scale *= 2
        Case "i" : t_scale /= 2 : t_let_I (t_rottext) : t_scale *= 2
        Case "j" : t_scale /= 2 : t_let_J (t_rottext) : t_scale *= 2
        Case "k" : t_scale /= 2 : t_let_K (t_rottext) : t_scale *= 2
        Case "l" : t_scale /= 2 : t_let_L (t_rottext) : t_scale *= 2
        Case "m" : t_scale /= 2 : t_let_M (t_rottext) : t_scale *= 2
        Case "n" : t_scale /= 2 : t_let_N (t_rottext) : t_scale *= 2
        Case "o" : t_scale /= 2 : t_let_O (t_rottext) : t_scale *= 2
        Case "p" : t_scale /= 2 : t_let_P (t_rottext) : t_scale *= 2
        Case "q" : t_scale /= 2 : t_let_Q (t_rottext) : t_scale *= 2
        Case "r" : t_scale /= 2 : t_let_R (t_rottext) : t_scale *= 2
        Case "s" : t_scale /= 2 : t_let_S (t_rottext) : t_scale *= 2
        Case "t" : t_scale /= 2 : t_let_T (t_rottext) : t_scale *= 2 
        Case "u" : t_scale /= 2 : t_let_U (t_rottext) : t_scale *= 2
        Case "v" : t_scale /= 2 : t_let_V (t_rottext) : t_scale *= 2
        Case "w" : t_scale /= 2 : t_let_W (t_rottext) : t_scale *= 2
        Case "x" : t_scale /= 2 : t_let_X (t_rottext) : t_scale *= 2
        Case "y" : t_scale /= 2 : t_let_Y (t_rottext) : t_scale *= 2
        Case "z" : t_scale /= 2 : t_let_Z (t_rottext) : t_scale *= 2
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            'Print " Missing character. "
            'Sleep
        End Select
    Next N
End Sub
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

@ richard:

Now, to maintain proportionality of separation between characters, I modified the thickness of the letters lowercase.

Example:

Code: Select all


' find original turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'    'To Draw
    Declare Sub t_init()'INIT TURTLE
'    Declare Sub t_axes ()'DRAW CENTER AXES
'    Declare Sub t_home ()'GO HOME TURTLE
'    Declare Sub t_point ()'DRAW A POINT
'    Declare Sub t_grid (Byval T_STEP_GRID As Double)'DRAW A GRID
'    Declare Sub t_orient (Byval T_ANGLE As Double)'SET ORIENTATION TURTLE
Declare Sub T_GT (Byval T_X As Double, Byval T_YY As Double)'GO TO NEW POSITION X,Y
'    Declare Sub t_fd (Byval T_DISTANCE As Double)'FORWARD X DISTANCE
'    Declare Sub t_bk (Byval T_DISTANCE As Double)'BACK X DISTANCE
    Declare Sub t_rt (Byval T_ANGLE As Double)'TURN RIGHT
'    Declare Sub t_lt (Byval T_ANGLE As Double)'TURN LEFT
'    Declare Sub t_circle (Byval T_R As Double)'DRAW A CIRCLE
'    Declare Sub t_arc_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC CIRCLE
'    Declare Sub t_sec_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A CIRCLE SECTOR
'    Declare Sub t_poly (Byval T_R As Double, Byval T_NSIDE As Integer)'DRAW A POLYGON
'    Declare Sub t_ellipse (Byval T_R1 As Double, Byval T_R2 As Double)'DRAW A ELLIPSE
'    Declare Sub t_arc_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC ELLIPTIC
'    Declare Sub t_sec_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC SECTOR
Declare Sub t_segment (Byval T_LX1 As Double, Byval T_LY1 As Double, Byval T_LX2 As Double, Byval T_LY2 As Double)
'    Declare Sub t_star (Byval T_NP As Integer, Byval T_RG As Double, Byval T_RP As Double)
    Declare Sub t_text (Byref T As String)
'    'CHARS
'    Declare Sub T_LETSPACE (Byval T_ROTTEXT As Double)'SPACE

' do not need to declare letters, numbers or symbols as they are defined before they are used by t_text

Dim Shared As Integer t_center_screen_x, t_center_screen_y, t_w, t_h, t_pen, t_nside

Dim Shared As Double t_position_x, t_position_y, t_angle, t_step_grid, t_heading
Dim Shared As Double t_new_position_x, t_new_position_y, t_x, t_y, t_distance, t_scale, t_thickness
Dim Shared As Double t_first_position_x, t_first_position_y, t_last_position_x, t_last_position_y
Dim Shared As Double t_x0, t_y0, t_x1, t_y1, t_x2, t_y2, t_r, t_r1, t_r2, t_cp, t_ini, t_end
Dim Shared t_rottext As Double

DIM N AS INTEGER 'TEST
Const Pi = 4 * Atn(1)
Const As Double DtoR = Atn(1) / 45 'CONSTANTE DE CONVERSION ENTRE DEGREES (GRADOS) Y RADIANES
#Define t_radians(degrees) ((degrees) * DtoR )
'Function t_radians(Byval t_angle As Double) As Double 'TRANSFORM DEGREES TO RADIANS
'    Return (t_angle * 2 * PI)/360
'End Function


'NOTE : t_LONG = HyPOTENUSE

CLS
SCREEN 12
T_INIT
T_THICKNESS = 3

T_SCALE = 6
T_ROTTEXT = 90
T_PEN = 0
T_GT (-50,0)
T_PEN = 1
T_TEXT "ABC abc 123 +-*"
SLEEP
END

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Sub t_init ()'INIT TURTLE
    Screeninfo t_w, t_h
    t_center_screen_x = Int (t_w / 2)
    t_center_screen_y = Int (t_h / 2)
    t_position_x = t_center_screen_x
    t_position_y = t_center_screen_y
    t_gt (t_position_x, t_position_y)
    t_heading = 0
    Color 15
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    'window (t_w,t_h)-(0,0)
End Sub

Sub t_axes ()'DRAW CENTER AXES
    Line( 0, t_center_screen_y)-( t_w, t_center_screen_y ), 7
    Line( t_center_screen_x, 0)-( t_center_screen_x, t_h ), 7
End Sub

Sub t_grid(Byval t_step_grid As Double) 'DRAW A GRID
    Dim N As Integer
    For N =  0 To t_h Step t_step_grid
        Line(0, N)-(t_w, N), 8    'LINEAS HORIZONTALES
    Next N
    For N =  0 To t_w Step t_step_grid
        Line(N, 0)-(N, t_h), 8    'LINEAS VERTICALES
    Next N
    t_axes ()
End Sub

Function t_APHOTEME (Byval t_r As Double, Byval t_nside As Integer) As Double 'CALCULATE APHOTEME
    Dim As Double t_rgrad, t_hip
    t_r = t_r
    t_rgrad = t_radians(0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_rgrad = t_radians(360/t_nside)
    t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
    t_x2 = Abs(t_x0 - t_x1)
    t_y2 = Abs(t_y0 - t_y1)
    t_hip = Sqr(t_x2*t_x2 + t_y2*t_y2)
    Return Sqr(t_r*t_r - (t_hip/2)^2)
End Function

Sub t_orient (Byval t_angle As Double)'SET ORIENTATION TURTLE
    t_heading = t_radians (t_angle)
End Sub

Sub t_GT (Byval t_x As Double, Byval t_y As Double) 'GO TO NEW POSITION X,Y
    t_x = t_x * t_scale
    t_y = t_y * t_scale
    t_new_position_x = t_center_screen_x + t_x
    t_new_position_y = t_center_screen_y + t_y
    If t_thickness = 0 And t_pen = 1 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_thickness > 0 And t_pen = 1 Then t_segment (t_position_x, t_position_y, t_new_position_x,t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_home ()'GO HOME TURTLE
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_center_screen_x,t_center_screen_y)
    t_position_x  = Int(t_w/2)
    t_position_y  = Int(t_h/2)
End Sub

Sub t_fd (Byval t_distance As Double)'FORWARD X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x + (t_distance * Sin(t_heading))
    t_new_position_y = t_position_y - (t_distance * Cos(t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y,t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_bk (Byval t_distance As Double)'BACK X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x - ( t_distance * Sin (t_heading))
    t_new_position_y = t_position_y + ( t_distance * Cos (t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line(t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_rt (Byval t_angle As Double)'TURN RIGHT
    t_heading = t_heading + t_radians (t_angle)
End Sub

Sub t_lt (Byval t_angle As Double)'TURN LEFT
    t_heading = t_heading - t_radians (t_angle)     
End Sub 

Function t_long (_  ' CALCULATE DISTANCE /LENGHT TWO POINTS
    Byval t_x1 As Double, Byval t_y1 As Double, _
    Byval t_x2 As Double, Byval t_y2 As Double) As Double
    Dim As Double dx = t_x1  - t_x2
    Dim As Double dy = t_y1  - t_y2
    Return Sqr(dx*dx + dy*dy)
End Function

Sub t_circle (Byval t_r As Double)'DRAW A CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_poly (Byval t_r As Double, Byval t_nside As Integer)'DRAW A POLYGON
    Dim As Double t_rgrad, t_grad
    t_r = t_r  * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360 Step 360/t_nside
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0, t_y0,t_x1, t_y1)
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_ellipse (Byval t_r1 As Double, Byval t_r2 As Double) 'DRAW A ELLIPSE
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos(t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin(t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_point ()'DRAW A POINT
    If t_pen = 1 Then Pset (t_position_x, t_position_y)
End Sub

Sub t_arc_cir (Byval t_r As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0,t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_cir (Byval t_r As Double,Byval t_ini As Double, Byval t_end As Double)'DRAW A CIRCLE SECTOR
    Dim As Double t_rgrad, t_grad
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0,t_y0,t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line (t_x0, t_y0)-(t_position_x, t_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment  (t_x0, t_y0,t_position_x, t_position_y)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_arc_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC ELLIPTIC
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1) : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ELLIPTIC SECTOR
    Dim As Double t_rgrad, t_grad   
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos(t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin(t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line  (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = ABS (t_lx1 - t_lx2)
    dy = ABS (t_ly1 - t_ly2)
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
End Sub

Sub t_star (Byval t_NP As Integer, Byval t_rG As Double, Byval t_rP As Double)
    Dim As Integer C
    Dim As Double X, Y, NP, N, R
    NP = 180 / t_NP
    R = 0
    C = 0
    t_pen = 0
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
        C = C + 1
    Next N
End Sub 

'=======================================================================
' characters are defined before use by t_text()
'=======================================================================
Sub t_let_A (Byval t_rottext As Double)'UCASE A
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)    : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90      ' XXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXX
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : t_orient 0
    ' XXXXXXXXXXXXXXX  missing t_pen = 0   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_lt 57 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd  5+(1*T_THICKNESS)   : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    t_pen = 0 : t_rt t_rottext : t_fd 1 +(1*T_THICKNESS) : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    t_pen = 0 : t_rt t_rottext : t_fd 2 +(1*T_THICKNESS) : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    t_pen = 0 : t_rt t_rottext : t_fd 4+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 4
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol : 
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1 : t_orient 0
    'XXXXXXXXXXXX missing t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_Rt 90
    t_pen = 0 : T_BK 1
    T_PEN = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_BK 1 : t_RT 90:T_FD 1  : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    t_pen = 0 : t_rt t_rottext : t_fd 4 +(1*T_THICKNESS) : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 0 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 2 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    t_pen = 0 :  t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 90 :  t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 90 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      'XXXXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

'=======================================================================
' use the characters defined before
'=======================================================================
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        
        Case "a" : t_scale /= 2 :T_THICKNESS /=2 : t_let_A (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "b" : t_scale /= 2 :T_THICKNESS /=2 : t_let_B (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "c" : t_scale /= 2 :T_THICKNESS /=2 : t_let_C (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "d" : t_scale /= 2 :T_THICKNESS /=2 : t_let_D (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "e" : t_scale /= 2 :T_THICKNESS /=2 : t_let_E (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "f" : t_scale /= 2 :T_THICKNESS /=2 : t_let_F (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "g" : t_scale /= 2 :T_THICKNESS /=2 : t_let_G (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "h" : t_scale /= 2 :T_THICKNESS /=2 : t_let_H (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "i" : t_scale /= 2 :T_THICKNESS /=2 : t_let_I (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "j" : t_scale /= 2 :T_THICKNESS /=2 : t_let_J (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "k" : t_scale /= 2 :T_THICKNESS /=2 : t_let_K (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "l" : t_scale /= 2 :T_THICKNESS /=2 : t_let_L (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "m" : t_scale /= 2 :T_THICKNESS /=2 : t_let_M (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "n" : t_scale /= 2 :T_THICKNESS /=2 : t_let_N (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "o" : t_scale /= 2 :T_THICKNESS /=2 : t_let_O (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "p" : t_scale /= 2 :T_THICKNESS /=2 : t_let_P (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "q" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Q (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "r" : t_scale /= 2 :T_THICKNESS /=2 : t_let_R (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "s" : t_scale /= 2 :T_THICKNESS /=2 : t_let_S (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "t" : t_scale /= 2 :T_THICKNESS /=2 : t_let_T (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "u" : t_scale /= 2 :T_THICKNESS /=2 : t_let_U (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "v" : t_scale /= 2 :T_THICKNESS /=2 : t_let_V (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "w" : t_scale /= 2 :T_THICKNESS /=2 : t_let_W (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "x" : t_scale /= 2 :T_THICKNESS /=2 : t_let_X (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "y" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Y (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "z" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Z (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            'Print " Missing character. "
            'Sleep
        End Select
    Next N
End Sub
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

Hi, Richard:

A little tip.: Characters holes!

Code: Select all

' find original turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'    'To Draw
    Declare Sub t_init()'INIT TURTLE
    Declare Sub t_axes ()'DRAW CENTER AXES
    Declare Sub t_home ()'GO HOME TURTLE
    Declare Sub t_point ()'DRAW A POINT
    Declare Sub t_grid (Byval T_STEP_GRID As Double)'DRAW A GRID
    Declare Sub t_orient (Byval T_ANGLE As Double)'SET ORIENTATION TURTLE
Declare Sub T_GT (Byval T_X As Double, Byval T_YY As Double)'GO TO NEW POSITION X,Y
    Declare Sub t_fd (Byval T_DISTANCE As Double)'FORWARD X DISTANCE
    Declare Sub t_bk (Byval T_DISTANCE As Double)'BACK X DISTANCE
    Declare Sub t_rt (Byval T_ANGLE As Double)'TURN RIGHT
    Declare Sub t_lt (Byval T_ANGLE As Double)'TURN LEFT
    Declare Sub t_circle (Byval T_R As Double)'DRAW A CIRCLE
    Declare Sub t_arc_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC CIRCLE
    Declare Sub t_sec_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A CIRCLE SECTOR
    Declare Sub t_poly (Byval T_R As Double, Byval T_NSIDE As Integer)'DRAW A POLYGON
    Declare Sub t_ellipse (Byval T_R1 As Double, Byval T_R2 As Double)'DRAW A ELLIPSE
    Declare Sub t_arc_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC ELLIPTIC'    Declare Sub t_sec_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC SECTOR
Declare Sub t_segment (Byval T_LX1 As Double, Byval T_LY1 As Double, Byval T_LX2 As Double, Byval T_LY2 As Double)
    Declare Sub t_star (Byval T_NP As Integer, Byval T_RG As Double, Byval T_RP As Double)
    Declare Sub t_text (Byref T As String)
'    'CHARS
    Declare Sub T_LETSPACE (Byval T_ROTTEXT As Double)'SPACE

' do not need to declare letters, numbers or symbols as they are defined before they are used by t_text

Dim Shared As Integer t_center_screen_x, t_center_screen_y, t_w, t_h, t_pen, t_nside,T_HOLE

Dim Shared As Double t_position_x, t_position_y, t_angle, t_step_grid, t_heading
Dim Shared As Double t_new_position_x, t_new_position_y, t_x, t_y, t_distance, t_scale, t_thickness
Dim Shared As Double t_first_position_x, t_first_position_y, t_last_position_x, t_last_position_y
Dim Shared As Double t_x0, t_y0, t_x1, t_y1, t_x2, t_y2, t_r, t_r1, t_r2, t_cp, t_ini, t_end
Dim Shared t_rottext As Double

DIM AS INTEGER n,x,y,c,j,k 'TEST
dim as string S,Z' test

Const Pi = 4 * Atn(1)
Const As Double DtoR = Atn(1) / 45 'CONSTANTE DE CONVERSION ENTRE DEGREES (GRADOS) Y RADIANES
#Define t_radians(degrees) ((degrees) * DtoR )
'Function t_radians(Byval t_angle As Double) As Double 'TRANSFORM DEGREES TO RADIANS
'    Return (t_angle * 2 * PI)/360
'End Function


'NOTE : t_LONG = HyPOTENUSE

CLS
SCREEN 12
T_INIT
T_SCALE = 12
T_THICKNESS = t_scale / 2
T_ROTTEXT = 90
T_PEN = 0
T_GT (-30,0)
T_PEN = 1
T_HOLE = 0
T_TEXT "FreeBasic"
T_THICKNESS = t_scale / 4

T_PEN = 0
T_GT (-30,20)
T_PEN = 1
T_HOLE = 0
T_TEXT "Press key"

SLEEP
cls
T_SCALE = 12
T_THICKNESS = t_scale / 2
T_PEN = 0
T_GT (-30,0)
T_PEN = 1
T_HOLE = 1
T_TEXT "FreeBasic"


SLEEP
cls


SLEEP
END

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Sub t_init ()'INIT TURTLE
    Screeninfo t_w, t_h
    t_center_screen_x = Int (t_w / 2)
    t_center_screen_y = Int (t_h / 2)
    t_position_x = t_center_screen_x
    t_position_y = t_center_screen_y
    t_gt (t_position_x, t_position_y)
    t_heading = 0
    Color 15
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    'window (t_w,t_h)-(0,0)
End Sub

Sub t_axes ()'DRAW CENTER AXES
    Line( 0, t_center_screen_y)-( t_w, t_center_screen_y ), 7
    Line( t_center_screen_x, 0)-( t_center_screen_x, t_h ), 7
End Sub

Sub t_grid(Byval t_step_grid As Double) 'DRAW A GRID
    Dim N As Integer
    For N =  0 To t_h Step t_step_grid
        Line(0, N)-(t_w, N), 8    'LINEAS HORIZONTALES
    Next N
    For N =  0 To t_w Step t_step_grid
        Line(N, 0)-(N, t_h), 8    'LINEAS VERTICALES
    Next N
    t_axes ()
End Sub

Function t_APHOTEME (Byval t_r As Double, Byval t_nside As Integer) As Double 'CALCULATE APHOTEME
    Dim As Double t_rgrad, t_hip
    t_r = t_r
    t_rgrad = t_radians(0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_rgrad = t_radians(360/t_nside)
    t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
    t_x2 = Abs(t_x0 - t_x1)
    t_y2 = Abs(t_y0 - t_y1)
    t_hip = Sqr(t_x2*t_x2 + t_y2*t_y2)
    Return Sqr(t_r*t_r - (t_hip/2)^2)
End Function

Sub t_orient (Byval t_angle As Double)'SET ORIENTATION TURTLE
    t_heading = t_radians (t_angle)
End Sub

Sub t_GT (Byval t_x As Double, Byval t_y As Double) 'GO TO NEW POSITION X,Y
    t_x = t_x * t_scale
    t_y = t_y * t_scale
    t_new_position_x = t_center_screen_x + t_x
    t_new_position_y = t_center_screen_y + t_y
    If t_thickness = 0 And t_pen = 1 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_thickness > 0 And t_pen = 1 Then t_segment (t_position_x, t_position_y, t_new_position_x,t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_home ()'GO HOME TURTLE
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_center_screen_x,t_center_screen_y)
    t_position_x  = Int(t_w/2)
    t_position_y  = Int(t_h/2)
End Sub

Sub t_fd (Byval t_distance As Double)'FORWARD X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x + (t_distance * Sin(t_heading))
    t_new_position_y = t_position_y - (t_distance * Cos(t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y,t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_bk (Byval t_distance As Double)'BACK X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x - ( t_distance * Sin (t_heading))
    t_new_position_y = t_position_y + ( t_distance * Cos (t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line(t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_rt (Byval t_angle As Double)'TURN RIGHT
    t_heading = t_heading + t_radians (t_angle)
End Sub

Sub t_lt (Byval t_angle As Double)'TURN LEFT
    t_heading = t_heading - t_radians (t_angle)     
End Sub 

Function t_long (_  ' CALCULATE DISTANCE /LENGHT TWO POINTS
    Byval t_x1 As Double, Byval t_y1 As Double, _
    Byval t_x2 As Double, Byval t_y2 As Double) As Double
    Dim As Double dx = t_x1  - t_x2
    Dim As Double dy = t_y1  - t_y2
    Return Sqr(dx*dx + dy*dy)
End Function

Sub t_circle (Byval t_r As Double)'DRAW A CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_poly (Byval t_r As Double, Byval t_nside As Integer)'DRAW A POLYGON
    Dim As Double t_rgrad, t_grad
    t_r = t_r  * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360 Step 360/t_nside
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0, t_y0,t_x1, t_y1)
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_ellipse (Byval t_r1 As Double, Byval t_r2 As Double) 'DRAW A ELLIPSE
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos(t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin(t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_point ()'DRAW A POINT
    If t_pen = 1 Then Pset (t_position_x, t_position_y)
End Sub

Sub t_arc_cir (Byval t_r As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0,t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_cir (Byval t_r As Double,Byval t_ini As Double, Byval t_end As Double)'DRAW A CIRCLE SECTOR
    Dim As Double t_rgrad, t_grad
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0,t_y0,t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line (t_x0, t_y0)-(t_position_x, t_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment  (t_x0, t_y0,t_position_x, t_position_y)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_arc_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC ELLIPTIC
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1) : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ELLIPTIC SECTOR
    Dim As Double t_rgrad, t_grad   
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos(t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin(t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line  (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = ABS (t_lx1 - t_lx2)
    dy = ABS (t_ly1 - t_ly2)
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        COLOR 15
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
 ':::::::::::::::::::::::::::::::::::::::::::::::::: 
'    A little tip.: Characters holes!   <<<<<<<<<<<<<<<<<<<<<<<<<< !!!!!!!!!!!!!!!!!!!!!!!!!!!
 IF T_HOLE = 1 THEN 
        For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        COLOR 0
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness/4,,,,,F                
    Next N
    END IF
':::::::::::::::::::::::::::::::::::::::::::::::::::    
End Sub

Sub t_star (Byval t_NP As Integer, Byval t_rG As Double, Byval t_rP As Double)
    Dim As Integer C
    Dim As Double X, Y, NP, N, R
    NP = 180 / t_NP
    R = 0
    C = 0
    t_pen = 0
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
        C = C + 1
    Next N
End Sub 

'=======================================================================
' characters are defined before use by t_text()
'=======================================================================
Sub t_let_A (Byval t_rottext As Double)'UCASE A
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)    : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90      
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : t_orient 0
    
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_lt 57 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd  5+(1*T_THICKNESS)   : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    t_pen = 0 : t_rt t_rottext : t_fd 1 +(1*T_THICKNESS) : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    t_pen = 0 : t_rt t_rottext : t_fd 2 +(1*T_THICKNESS) : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    t_pen = 0 : t_rt t_rottext : t_fd 4+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 4
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol : 
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1 : t_orient 0
    'XXXXXXXXXXXX missing t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_Rt 90
    t_pen = 0 : T_BK 1
    T_PEN = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_BK 1 : t_RT 90:T_FD 1  : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    t_pen = 0 : t_rt t_rottext : t_fd 4 +(1*T_THICKNESS) : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 0 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 2 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    t_pen = 0 :  t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 90 :  t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 90 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      'XXXXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

'=======================================================================
' use the characters defined before
'=======================================================================
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        
        Case "a" : t_scale /= 2 :T_THICKNESS /=2 : t_let_A (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "b" : t_scale /= 2 :T_THICKNESS /=2 : t_let_B (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "c" : t_scale /= 2 :T_THICKNESS /=2 : t_let_C (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "d" : t_scale /= 2 :T_THICKNESS /=2 : t_let_D (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "e" : t_scale /= 2 :T_THICKNESS /=2 : t_let_E (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "f" : t_scale /= 2 :T_THICKNESS /=2 : t_let_F (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "g" : t_scale /= 2 :T_THICKNESS /=2 : t_let_G (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "h" : t_scale /= 2 :T_THICKNESS /=2 : t_let_H (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "i" : t_scale /= 2 :T_THICKNESS /=2 : t_let_I (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "j" : t_scale /= 2 :T_THICKNESS /=2 : t_let_J (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "k" : t_scale /= 2 :T_THICKNESS /=2 : t_let_K (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "l" : t_scale /= 2 :T_THICKNESS /=2 : t_let_L (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "m" : t_scale /= 2 :T_THICKNESS /=2 : t_let_M (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "n" : t_scale /= 2 :T_THICKNESS /=2 : t_let_N (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "o" : t_scale /= 2 :T_THICKNESS /=2 : t_let_O (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "p" : t_scale /= 2 :T_THICKNESS /=2 : t_let_P (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "q" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Q (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "r" : t_scale /= 2 :T_THICKNESS /=2 : t_let_R (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "s" : t_scale /= 2 :T_THICKNESS /=2 : t_let_S (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "t" : t_scale /= 2 :T_THICKNESS /=2 : t_let_T (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "u" : t_scale /= 2 :T_THICKNESS /=2 : t_let_U (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "v" : t_scale /= 2 :T_THICKNESS /=2 : t_let_V (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "w" : t_scale /= 2 :T_THICKNESS /=2 : t_let_W (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "x" : t_scale /= 2 :T_THICKNESS /=2 : t_let_X (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "y" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Y (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "z" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Z (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            'Print " Missing character. "
            'Sleep
        End Select
    Next N
End Sub

Now the characters are more originals

 (of design!)
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Re: Library for drawing turtle type (Logo turtle)

Post by lrcvs »

@Richard:

Now, hollow lines, applied to the graphics.

This example is just an experiment / prototype, it works well!

Code: Select all

' find original turtle3.bi here; 
' http://www.freebasic.net/forum/viewtopic.php?p=190021#p190021

'Lib FreeBasic_Turtle VERSION #3
'LRCVS 06.08.13

'    'To Draw
    Declare Sub t_init()'INIT TURTLE
    Declare Sub t_axes ()'DRAW CENTER AXES
    Declare Sub t_home ()'GO HOME TURTLE
    Declare Sub t_point ()'DRAW A POINT
    Declare Sub t_grid (Byval T_STEP_GRID As Double)'DRAW A GRID
    Declare Sub t_orient (Byval T_ANGLE As Double)'SET ORIENTATION TURTLE
Declare Sub T_GT (Byval T_X As Double, Byval T_YY As Double)'GO TO NEW POSITION X,Y
    Declare Sub t_fd (Byval T_DISTANCE As Double)'FORWARD X DISTANCE
    Declare Sub t_bk (Byval T_DISTANCE As Double)'BACK X DISTANCE
    Declare Sub t_rt (Byval T_ANGLE As Double)'TURN RIGHT
    Declare Sub t_lt (Byval T_ANGLE As Double)'TURN LEFT
    Declare Sub t_circle (Byval T_R As Double)'DRAW A CIRCLE
    Declare Sub t_arc_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC CIRCLE
    Declare Sub t_sec_cir (Byval T_R As Double,Byval T_INI As Double, Byval T_END As Double)'DRAW A CIRCLE SECTOR
    Declare Sub t_poly (Byval T_R As Double, Byval T_NSIDE As Integer)'DRAW A POLYGON
    Declare Sub t_ellipse (Byval T_R1 As Double, Byval T_R2 As Double)'DRAW A ELLIPSE
    Declare Sub t_arc_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC ELLIPTIC'    Declare Sub t_sec_ellip (Byval T_R1 As Double, Byval T_R2 As Double, Byval T_INI As Double, Byval T_END As Double)'DRAW A ARC SECTOR
Declare Sub t_segment (Byval T_LX1 As Double, Byval T_LY1 As Double, Byval T_LX2 As Double, Byval T_LY2 As Double)
    Declare Sub t_star (Byval T_NP As Integer, Byval T_RG As Double, Byval T_RP As Double)
    Declare Sub t_text (Byref T As String)
'    'CHARS
    Declare Sub T_LETSPACE (Byval T_ROTTEXT As Double)'SPACE

' do not need to declare letters, numbers or symbols as they are defined before they are used by t_text

Dim Shared As Integer t_center_screen_x, t_center_screen_y, t_w, t_h, t_pen, t_nside,T_HOLE

Dim Shared As Double t_position_x, t_position_y, t_angle, t_step_grid, t_heading
Dim Shared As Double t_new_position_x, t_new_position_y, t_x, t_y, t_distance, t_scale, t_thickness
Dim Shared As Double t_first_position_x, t_first_position_y, t_last_position_x, t_last_position_y
Dim Shared As Double t_x0, t_y0, t_x1, t_y1, t_x2, t_y2, t_r, t_r1, t_r2, t_cp, t_ini, t_end
Dim Shared t_rottext As Double

DIM AS INTEGER n,x,y,c,j,k 'TEST
dim as string S,Z' test

Const Pi = 4 * Atn(1)
Const As Double DtoR = Atn(1) / 45 'CONSTANTE DE CONVERSION ENTRE DEGREES (GRADOS) Y RADIANES
#Define t_radians(degrees) ((degrees) * DtoR )
'Function t_radians(Byval t_angle As Double) As Double 'TRANSFORM DEGREES TO RADIANS
'    Return (t_angle * 2 * PI)/360
'End Function


'NOTE : t_LONG = HyPOTENUSE

CLS
SCREEN 12
T_INIT
T_SCALE = 2
T_THICKNESS = 12
T_HOLE = 1
T_STAR (8,100,50)
COLOR 2
T_PEN = 0
T_GT (0,0)
T_PEN = 1
T_CIRCLE 38
SLEEP
END

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Sub t_init ()'INIT TURTLE
    Screeninfo t_w, t_h
    t_center_screen_x = Int (t_w / 2)
    t_center_screen_y = Int (t_h / 2)
    t_position_x = t_center_screen_x
    t_position_y = t_center_screen_y
    t_gt (t_position_x, t_position_y)
    t_heading = 0
    Color 15
    t_pen = 1
    t_scale = 1
    t_thickness = 0
    'window (t_w,t_h)-(0,0)
End Sub

Sub t_axes ()'DRAW CENTER AXES
    Line( 0, t_center_screen_y)-( t_w, t_center_screen_y ), 7
    Line( t_center_screen_x, 0)-( t_center_screen_x, t_h ), 7
End Sub

Sub t_grid(Byval t_step_grid As Double) 'DRAW A GRID
    Dim N As Integer
    For N =  0 To t_h Step t_step_grid
        Line(0, N)-(t_w, N), 8    'LINEAS HORIZONTALES
    Next N
    For N =  0 To t_w Step t_step_grid
        Line(N, 0)-(N, t_h), 8    'LINEAS VERTICALES
    Next N
    t_axes ()
End Sub

Function t_APHOTEME (Byval t_r As Double, Byval t_nside As Integer) As Double 'CALCULATE APHOTEME
    Dim As Double t_rgrad, t_hip
    t_r = t_r
    t_rgrad = t_radians(0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_rgrad = t_radians(360/t_nside)
    t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
    t_x2 = Abs(t_x0 - t_x1)
    t_y2 = Abs(t_y0 - t_y1)
    t_hip = Sqr(t_x2*t_x2 + t_y2*t_y2)
    Return Sqr(t_r*t_r - (t_hip/2)^2)
End Function

Sub t_orient (Byval t_angle As Double)'SET ORIENTATION TURTLE
    t_heading = t_radians (t_angle)
End Sub

Sub t_GT (Byval t_x As Double, Byval t_y As Double) 'GO TO NEW POSITION X,Y
    t_x = t_x * t_scale
    t_y = t_y * t_scale
    t_new_position_x = t_center_screen_x + t_x
    t_new_position_y = t_center_screen_y + t_y
    If t_thickness = 0 And t_pen = 1 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_thickness > 0 And t_pen = 1 Then t_segment (t_position_x, t_position_y, t_new_position_x,t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_home ()'GO HOME TURTLE
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_center_screen_x,t_center_screen_y)
    t_position_x  = Int(t_w/2)
    t_position_y  = Int(t_h/2)
End Sub

Sub t_fd (Byval t_distance As Double)'FORWARD X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x + (t_distance * Sin(t_heading))
    t_new_position_y = t_position_y - (t_distance * Cos(t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line (t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y,t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_bk (Byval t_distance As Double)'BACK X DISTANCE
    t_distance = t_distance * t_scale
    t_new_position_x = t_position_x - ( t_distance * Sin (t_heading))
    t_new_position_y = t_position_y + ( t_distance * Cos (t_heading))
    If t_pen = 1 And t_thickness = 0 Then Line(t_position_x, t_position_y)-(t_new_position_x, t_new_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_new_position_x, t_new_position_y)
    t_position_x = t_new_position_x
    t_position_y = t_new_position_y
End Sub 

Sub t_rt (Byval t_angle As Double)'TURN RIGHT
    t_heading = t_heading + t_radians (t_angle)
End Sub

Sub t_lt (Byval t_angle As Double)'TURN LEFT
    t_heading = t_heading - t_radians (t_angle)     
End Sub 

Function t_long (_  ' CALCULATE DISTANCE /LENGHT TWO POINTS
    Byval t_x1 As Double, Byval t_y1 As Double, _
    Byval t_x2 As Double, Byval t_y2 As Double) As Double
    Dim As Double dx = t_x1  - t_x2
    Dim As Double dy = t_y1  - t_y2
    Return Sqr(dx*dx + dy*dy)
End Function

Sub t_circle (Byval t_r As Double)'DRAW A CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        If t_pen = 1 And  T_HOLE = 1 AND t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness/4,0,,,,F        
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
     For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
 '       If t_pen = 1 And t_thickness = 0  Then Line(t_x0, t_y0)-(t_x1, t_y1)
 '       If t_pen = 1 And t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness,,,,,F
        If t_pen = 1 And  T_HOLE = 1 AND t_thickness > 0 Then Circle(t_x1, t_y1), t_thickness/2,0,,,,F        
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
End Sub

Sub t_poly (Byval t_r As Double, Byval t_nside As Integer)'DRAW A POLYGON
    Dim As Double t_rgrad, t_grad
    t_r = t_r  * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360 Step 360/t_nside
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0, t_y0,t_x1, t_y1)
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_ellipse (Byval t_r1 As Double, Byval t_r2 As Double) 'DRAW A ELLIPSE
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (0)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = 0 To 360
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos(t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin(t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_point ()'DRAW A POINT
    If t_pen = 1 Then Pset (t_position_x, t_position_y)
End Sub

Sub t_arc_cir (Byval t_r As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC CIRCLE
    Dim As Double t_rgrad, t_grad 
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0,t_y0)-(t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_cir (Byval t_r As Double,Byval t_ini As Double, Byval t_end As Double)'DRAW A CIRCLE SECTOR
    Dim As Double t_rgrad, t_grad
    t_r = t_r * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then t_segment (t_x0,t_y0,t_x1, t_y1)
        If t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line (t_x0, t_y0)-(t_position_x, t_position_y)
    If t_pen = 1 And t_thickness > 0 Then t_segment  (t_x0, t_y0,t_position_x, t_position_y)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_arc_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ARC ELLIPTIC
    Dim As Double t_rgrad, t_grad
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos (t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin (t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1) : End If
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_sec_ellip (Byval t_r1 As Double, Byval t_r2 As Double, Byval t_ini As Double, Byval t_end As Double)'DRAW A ELLIPTIC SECTOR
    Dim As Double t_rgrad, t_grad   
    t_r1 = t_r1 * t_scale
    t_r2 = t_r2 * t_scale
    t_rgrad = t_radians (t_ini)
    t_x0 = (t_r1 * Cos(t_rgrad)) + t_position_x
    t_y0 = (t_r2 * Sin(t_rgrad)) + t_position_y
    t_first_position_x = t_x0
    t_first_position_y = t_y0
    If t_pen = 1 Then Line (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    For t_grad  = t_ini To t_end
        t_rgrad = t_radians (t_grad)
        t_x1 = (t_r1 * Cos (t_rgrad)) + t_position_x
        t_y1 = (t_r2 * Sin (t_rgrad)) + t_position_y
        If t_pen = 1 Then Line (t_x0, t_y0)-(t_x1, t_y1)
        If t_pen = 1 And t_thickness > 0 Then Circle (t_x1, t_y1), t_thickness,,,,,F
        t_x0 = t_x1 
        t_y0 = t_y1 
    Next t_grad
    If t_pen = 1 Then Line  (t_position_x, t_position_y)-(t_x0, t_y0)
    If t_pen = 1 And t_thickness > 0 Then t_segment (t_position_x, t_position_y, t_x0, t_y0)
    t_last_position_x = t_x1
    t_last_position_y = t_y1
End Sub

Sub t_segment (Byval t_lx1 As Double, Byval t_ly1 As Double, Byval t_lx2 As Double, Byval t_ly2 As Double)
    Dim As Integer n
    Dim As Double hip, ang, t_lx, t_ly, t_lpx, t_lpy, dx, dy
    dx = ABS (t_lx1 - t_lx2)
    dy = ABS (t_ly1 - t_ly2)
    hip = Sqr(dx*dx + dy*dy)
    ang = Atn(dy / dx)
    For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        COLOR 15
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness,,,,,F
    Next N
 ':::::::::::::::::::::::::::::::::::::::::::::::::: 
 IF T_HOLE = 1 THEN 
        For N = 0 To hip
        t_ly = Sin(ang) * N
        t_lx = Cos(ang) * N
        If t_lx1 < t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly + t_ly1 : End If
        If t_lx1 < t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx1 : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx1 - t_lx : t_lpy = t_ly1 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 < t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 - t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 > t_ly2 Then t_lpx = t_lx + t_lx2 : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 < t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 - t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 > t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx2 + t_lx : t_lpy = t_ly2 + t_ly : End If
        If t_lx1 = t_lx2 And t_ly1 = t_ly2 Then t_lpx = t_lx1 : t_lpy = t_ly1 : End If
        COLOR 0
        If t_pen = 1 And t_thickness > 0 Then Circle (t_lpx, t_lpy), t_thickness/4,,,,,F                
    Next N
    END IF
':::::::::::::::::::::::::::::::::::::::::::::::::::    
End Sub

Sub t_star (Byval t_NP As Integer, Byval t_rG As Double, Byval t_rP As Double)
    Dim As Integer C
    Dim As Double X, Y, NP, N, R
    NP = 180 / t_NP
    R = 0
    C = 0
    t_pen = 0
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
         If t_pen = 1 AND t_thickness > 0 Then Circle (x, y), t_thickness/2,0,,,,F              
        C = C + 1
    Next N
    IF T_HOLE = 1 THEN 
    For N = 0 To 360 + NP Step NP
        If C Mod 2 = 0 Then R = t_rG Else R = t_rP
        X = Cos(t_radians(N)) * R 
        Y = Sin(t_radians(N)) * R 
        If C > 0 Then t_pen = 1
        t_GT (X,Y)
        If t_pen = 1 And  T_HOLE = 1 AND t_thickness > 0 Then Circle(x, y), t_thickness/2,0,,,,F               
        C = C + 1
    Next N
    END IF
End Sub 

'=======================================================================
' characters are defined before use by t_text()
'=======================================================================
Sub t_let_A (Byval t_rottext As Double)'UCASE A
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)    : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90      
    t_pen = 0 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    t_pen = 0 : t_rt t_rottext : t_fd  3+(1*T_THICKNESS)   : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    t_pen = 0 : t_rt t_rottext : t_fd  2+(1*T_THICKNESS)   : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : t_orient 0
    
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    t_pen = 0 : t_rt t_rottext : t_fd  1+(1*T_THICKNESS)   : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_lt 57 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd  5+(1*T_THICKNESS)   : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    t_pen = 0 : t_rt t_rottext : t_fd 1 +(1*T_THICKNESS) : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    t_pen = 0 : t_rt t_rottext : t_fd 2 +(1*T_THICKNESS) : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    t_pen = 0 : t_rt t_rottext : t_fd 4+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 4
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_bk 6 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol : 
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS) 
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1 : t_orient 0
    'XXXXXXXXXXXX missing t_pen = 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_Rt 90
    t_pen = 0 : T_BK 1
    T_PEN = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_BK 1 : t_RT 90:T_FD 1  : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    t_pen = 0 : t_rt t_rottext : t_fd 4 +(1*T_THICKNESS) : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 0 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 2 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    t_pen = 0 :  t_rt t_rottext : t_fd 3+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 :  t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    t_pen = 0 :  t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 : t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    t_pen = 0 : t_rt t_rottext : t_fd 2+(1*T_THICKNESS)  : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 90 :  t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 90 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    t_pen = 0 : t_rt t_rottext : t_fd 1+(1*T_THICKNESS)  : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      'XXXXXXXXXXXX duplicate t_pen 0  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

'=======================================================================
' use the characters defined before
'=======================================================================
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        
        Case "a" : t_scale /= 2 :T_THICKNESS /=2 : t_let_A (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "b" : t_scale /= 2 :T_THICKNESS /=2 : t_let_B (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "c" : t_scale /= 2 :T_THICKNESS /=2 : t_let_C (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "d" : t_scale /= 2 :T_THICKNESS /=2 : t_let_D (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "e" : t_scale /= 2 :T_THICKNESS /=2 : t_let_E (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "f" : t_scale /= 2 :T_THICKNESS /=2 : t_let_F (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "g" : t_scale /= 2 :T_THICKNESS /=2 : t_let_G (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "h" : t_scale /= 2 :T_THICKNESS /=2 : t_let_H (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "i" : t_scale /= 2 :T_THICKNESS /=2 : t_let_I (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "j" : t_scale /= 2 :T_THICKNESS /=2 : t_let_J (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "k" : t_scale /= 2 :T_THICKNESS /=2 : t_let_K (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "l" : t_scale /= 2 :T_THICKNESS /=2 : t_let_L (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "m" : t_scale /= 2 :T_THICKNESS /=2 : t_let_M (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "n" : t_scale /= 2 :T_THICKNESS /=2 : t_let_N (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "o" : t_scale /= 2 :T_THICKNESS /=2 : t_let_O (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "p" : t_scale /= 2 :T_THICKNESS /=2 : t_let_P (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "q" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Q (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "r" : t_scale /= 2 :T_THICKNESS /=2 : t_let_R (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "s" : t_scale /= 2 :T_THICKNESS /=2 : t_let_S (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "t" : t_scale /= 2 :T_THICKNESS /=2 : t_let_T (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "u" : t_scale /= 2 :T_THICKNESS /=2 : t_let_U (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "v" : t_scale /= 2 :T_THICKNESS /=2 : t_let_V (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "w" : t_scale /= 2 :T_THICKNESS /=2 : t_let_W (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "x" : t_scale /= 2 :T_THICKNESS /=2 : t_let_X (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "y" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Y (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        Case "z" : t_scale /= 2 :T_THICKNESS /=2 : t_let_Z (t_rottext) : t_scale *= 2 : T_THICKNESS *=2
        
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            'Print " Missing character. "
            'Sleep
        End Select
    Next N
End Sub

Original, surprising!
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

New version: TURTLE4.BI

Post by lrcvs »

Hi, all:

This is new: TURTLE4.BI

This version has improved the text, has a hole with color, they have perfected the separation between characters, you can still rotate and change color.

Also for bold, I put "T_text_key" serves to show or hide text thick, of a drawing

Simple forms:
  (circle, circular arc, pie slice, ellipse, elliptical arc, elliptical section, polygon, star), are simply lines and "bolds"

Now also can be moved with T_GT (X, Y)
and rotate indicating rotation angle in degrees.

Also change the size / scale and color more faster

New version: >>>>>>>>>> TURTLE4.BI <<<<<<<<<<<<<

Code: Select all


'LIB FREEBASIC_TURTLE VERSION #4
'LRCVS 13.08.13

'   TO DRAW
    DECLARE SUB T_INIT()'INIT TURTLE
    DECLARE SUB T_AXES ()'DRAW CENTER AXES
    DECLARE SUB T_HOME ()'GO HOME TURTLE
    DECLARE SUB T_POINT ()'DRAW A POINT
    DECLARE SUB T_GRID (BYVAL T_STEP_GRID AS DOUBLE)'DRAW A GRID
    DECLARE SUB T_ORIENT (BYVAL T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE
    DECLARE SUB T_GT (BYVAL T_X AS DOUBLE, BYVAL T_YY AS DOUBLE)'GO TO NEW POSITION X,Y
    DECLARE SUB T_POSITION (BYVAL T_X AS DOUBLE, BYVAL T_YY AS DOUBLE)'NEW POSITION X,Y
    DECLARE SUB T_FD (BYVAL T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
    DECLARE SUB T_BK (BYVAL T_DISTANCE AS DOUBLE)'BACK X DISTANCE
    DECLARE SUB T_RT (BYVAL T_ANGLE AS DOUBLE)'TURN RIGHT
    DECLARE SUB T_LT (BYVAL T_ANGLE AS DOUBLE)'TURN LEFT
    DECLARE SUB T_CIRCLE (BYVAL T_R AS DOUBLE)'DRAW A CIRCLE
    DECLARE SUB T_ARC_CIR (BYVAL T_R1 AS DOUBLE,BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ARC CIRCLE
    DECLARE SUB T_SEC_CIR (BYVAL T_R1 AS DOUBLE,BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)'DRAW A SECTOR CIRCLE 
    DECLARE SUB T_ELLIPSE (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE,BYVAL T_ANG_ROT AS DOUBLE) 'DRAW ELLIPSE
    DECLARE SUB T_ARC_ELLIP (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE,BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ARC ELLIPTIC
    DECLARE SUB T_SEC_ELLIP (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE,BYVAL T_ANG_ROT AS DOUBLE)'DRAW A SECTOR ELLIPTIC
    DECLARE SUB T_POLY (BYVAL T_R AS DOUBLE, BYVAL T_NSIDE AS INTEGER, BYVAL T_ANG_ROT AS INTEGER)'DRAW A POLYGON
    DECLARE SUB T_SEGMENT (BYVAL T_LX1 AS DOUBLE, BYVAL T_LY1 AS DOUBLE, BYVAL T_LX2 AS DOUBLE, BYVAL T_LY2 AS DOUBLE)
    DECLARE SUB T_STAR (BYVAL T_NP AS INTEGER, BYVAL T_RG AS DOUBLE, BYVAL T_RP AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)

'TO CHARS
    DECLARE SUB T_TEXT (BYREF T AS STRING)
    
'TO MATHS
    DECLARE FUNCTION T_RADIANS(BYVAL T_ANGLE AS DOUBLE) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
    DECLARE FUNCTION T_APHOTEME (BYVAL T_R AS DOUBLE, BYVAL T_NSIDE AS INTEGER) AS DOUBLE 'CALCULATE APHOTEME


DIM SHARED AS INTEGER N,R,T_CENTER_SCREEN_X, T_CENTER_SCREEN_Y, T_W, T_H, T_PEN, T_COLOR, T_HOLE_COLOR
DIM SHARED AS INTEGER T_HOLE,T_TEXT_HOLE, T_TEXT_HOLE_COLOR, T_TEXT_COLOR, T_TEXT_GROSS, T_TEXT_KEY, T_GROSS

DIM SHARED AS DOUBLE T_POSITION_X, T_POSITION_Y, T_ANGLE, T_STEP_GRID, T_HEADING, T_ROTTEXT,T_STAR_X,T_STAR_Y
DIM SHARED AS DOUBLE T_NEW_POSITION_X, T_NEW_POSITION_Y, T_X, T_Y, T_DISTANCE, T_SCALE, T_THICKNESS
DIM SHARED AS DOUBLE T_FIRST_POSITION_X, T_FIRST_POSITION_Y, T_LAST_POSITION_X, T_LAST_POSITION_Y
DIM SHARED AS DOUBLE T_X0, T_Y0, T_X1, T_Y1, T_X2, T_Y2, T_R, T_R1, T_R2, T_CP, T_INI, T_END



CONST PI = 4 * ATN(1)
CONST DTOR = ATN(1) / 45 'CONSTANTE DE CONVERSION ENTRE DEGREES (GRADOS) Y RADIANES

'NOTE : T_LONG = HYPOTENUSE

'::::::::::::::::::::::::::::::::::::::::::::::::PROGRAM


'::::::::::::::::::::::::::::::::::::::::::::::::SUBROUTINES AND FUNCTIONS

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_INIT
SUB T_INIT ()'INIT TURTLE
    SCREENINFO T_W, T_H
    T_CENTER_SCREEN_X = INT (T_W / 2)
    T_CENTER_SCREEN_Y = INT (T_H / 2)
    T_POSITION_X = T_CENTER_SCREEN_X
    T_POSITION_Y = T_CENTER_SCREEN_Y
    T_GT (T_POSITION_X, T_POSITION_Y)
    T_PEN = 1
    T_SCALE = 1
    'T_THICKNESS = 0 'THICKNESS TEXT,  VALUES =  0.. 
    'T_HOLE = 0     
    T_HEADING = 0
    T_ROTTEXT = 90
    T_TEXT_KEY = 0
    T_COLOR = 15 'COLOR LINES, CIRCLES, ELLIPSES, STAR..., VALUES =  0..
    T_TEXT_COLOR = 12 ' COLOR CHARS, NUMBERS, SIMBOLS, VALUES =  0..
    T_HOLE_COLOR = 14 'COLOR HOLE CHARSVALUES = 0..
    T_GROSS = 2 'GROSS THICKNESS COLOR, VALUES = 0..4
    T_TEXT_GROSS = 2

    'WINDOW (T_W,T_H)-(0,0) 'MODE COORDENATES OF SCREEN
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_INIT

':::::::::::::::::::::::::::::::::::::::::::::::::INIT T_AXES
SUB T_AXES ()'DRAW CENTER AXES
    LINE( 0, T_CENTER_SCREEN_Y)-( T_W, T_CENTER_SCREEN_Y ), 7
    LINE( T_CENTER_SCREEN_X, 0)-( T_CENTER_SCREEN_X, T_H ), 7
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_AXES

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_GRID
SUB T_GRID(BYVAL T_STEP_GRID AS DOUBLE) 'DRAW A GRID
    DIM N AS INTEGER
    FOR N =  0 TO T_H STEP T_STEP_GRID
        LINE(0, N)-(T_W, N), 8    'LINEAS HORIZONTALES
    NEXT N
    FOR N =  0 TO T_W STEP T_STEP_GRID
        LINE(N, 0)-(N, T_H), 8    'LINEAS VERTICALES
    NEXT N
    T_AXES ()
END SUB
':::::::::::::::::::::::::::::::::::::::::::::::END T_GRID

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_RADIANS
FUNCTION T_RADIANS(BYVAL T_ANGLE AS DOUBLE) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
    RETURN (T_ANGLE * DTOR)
END FUNCTION
'::::::::::::::::::::::::::::::::::::::::::::::::END T_RADIANS

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_APHOTEME
FUNCTION T_APHOTEME (BYVAL T_R AS DOUBLE, BYVAL T_NSIDE AS INTEGER) AS DOUBLE 'CALCULATE APHOTEME
    DIM AS DOUBLE T_RGRAD, T_HIP
    T_R = T_R
    T_RGRAD = T_RADIANS(0)
    T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
    T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
    T_RGRAD = T_RADIANS(360/T_NSIDE)
    T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
    T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
    T_X2 = ABS(T_X0 - T_X1)
    T_Y2 = ABS(T_Y0 - T_Y1)
    T_HIP = SQR(T_X2*T_X2 + T_Y2*T_Y2)
    RETURN SQR(T_R*T_R - (T_HIP/2)^2)
END FUNCTION
'::::::::::::::::::::::::::::::::::::::::::::::::END T_APHOTEME

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_ORIENT
SUB T_ORIENT (BYVAL T_ANGLE AS DOUBLE)'SET ORIENTATION TURTLE
    T_HEADING = T_RADIANS (T_ANGLE)
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_ORIENT

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_GT
SUB T_GT (BYVAL T_X AS DOUBLE, BYVAL T_Y AS DOUBLE) 'GO TO NEW POSITION X,Y
    T_X = T_X * T_SCALE
    T_Y = T_Y * T_SCALE
    T_NEW_POSITION_X = T_CENTER_SCREEN_X + T_X
    T_NEW_POSITION_Y = T_CENTER_SCREEN_Y + T_Y
    IF T_THICKNESS = 0 AND T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X, T_NEW_POSITION_Y)
    IF T_THICKNESS > 0 AND T_PEN = 1 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_NEW_POSITION_X,T_NEW_POSITION_Y)
    T_POSITION_X = T_NEW_POSITION_X
    T_POSITION_Y = T_NEW_POSITION_Y
END SUB 
'::::::::::::::::::::::::::::::::::::::::::::::::END T_GT

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_POSITION
SUB T_POSITION (BYVAL T_X AS DOUBLE, BYVAL T_Y AS DOUBLE)
     T_PEN = 0
     T_GT (T_X,T_Y)
     T_PEN = 1
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_POSITION

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_HOME
SUB T_HOME ()'GO HOME TURTLE
    'IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_CENTER_SCREEN_X,T_CENTER_SCREEN_Y)
     T_PEN = 0
     T_POSITION_X  = INT(T_W/2)
     T_POSITION_Y  = INT(T_H/2)
     T_PEN = 1
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_HOME

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_FD
SUB T_FD (BYVAL T_DISTANCE AS DOUBLE)'FORWARD X DISTANCE
    T_DISTANCE = T_DISTANCE * T_SCALE
    T_NEW_POSITION_X = T_POSITION_X + (T_DISTANCE * SIN(T_HEADING))
    T_NEW_POSITION_Y = T_POSITION_Y - (T_DISTANCE * COS(T_HEADING))
    IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X, T_NEW_POSITION_Y)
    IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y,T_NEW_POSITION_X, T_NEW_POSITION_Y)
    T_POSITION_X = T_NEW_POSITION_X
    T_POSITION_Y = T_NEW_POSITION_Y
END SUB 
'::::::::::::::::::::::::::::::::::::::::::::::::END T_FD

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_BK
SUB T_BK (BYVAL T_DISTANCE AS DOUBLE)'BACK X DISTANCE
    T_DISTANCE = T_DISTANCE * T_SCALE
    T_NEW_POSITION_X = T_POSITION_X - ( T_DISTANCE * SIN (T_HEADING))
    T_NEW_POSITION_Y = T_POSITION_Y + ( T_DISTANCE * COS (T_HEADING))
    IF T_PEN = 1 AND T_THICKNESS = 0 THEN LINE(T_POSITION_X, T_POSITION_Y)-(T_NEW_POSITION_X, T_NEW_POSITION_Y)
    IF T_PEN = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X, T_POSITION_Y, T_NEW_POSITION_X, T_NEW_POSITION_Y)
    T_POSITION_X = T_NEW_POSITION_X
    T_POSITION_Y = T_NEW_POSITION_Y
END SUB 
'::::::::::::::::::::::::::::::::::::::::::::::::END T_BK

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_RT
SUB T_RT (BYVAL T_ANGLE AS DOUBLE)'TURN RIGHT
    T_HEADING = T_HEADING + T_RADIANS (T_ANGLE)
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_RT

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_LT
SUB T_LT (BYVAL T_ANGLE AS DOUBLE)'TURN LEFT
    T_HEADING = T_HEADING - T_RADIANS (T_ANGLE)     
END SUB 
'::::::::::::::::::::::::::::::::::::::::::::::::END T_LT

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_LONG
FUNCTION T_LONG (BYVAL T_X1 AS DOUBLE, BYVAL T_Y1 AS DOUBLE, BYVAL T_X2 AS DOUBLE, BYVAL T_Y2 AS DOUBLE) AS DOUBLE ' CALCULATE DISTANCE /LENGHT TWO POINTS
    DIM AS DOUBLE DX = T_X1  - T_X2
    DIM AS DOUBLE DY = T_Y1  - T_Y2
    RETURN SQR(DX*DX + DY*DY)
END FUNCTION
'::::::::::::::::::::::::::::::::::::::::::::::::END T_LONG

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_CIRCLE
SUB T_CIRCLE (BYVAL T_R AS DOUBLE)
    'DRAW A CIRCLE     
    'T_R = RADIUS CIRCLE
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
        T_R1 = T_R * T_SCALE
        T_RGRAD = T_RADIANS (0)
        T_X0 = (T_R1 * COS(T_RGRAD))+T_POSITION_X 
        T_Y0 = (T_R1 * SIN(T_RGRAD))+T_POSITION_Y 
        T_FIRST_POSITION_X = T_X0
        T_FIRST_POSITION_Y = T_Y0
FOR T_GRAD  = 0 TO  360        
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X1 = (T_R1 * COS(T_RGRAD))+T_POSITION_X  
        T_Y1 = (T_R1 * SIN(T_RGRAD))+T_POSITION_Y 
        IF T_PEN = 1 THEN LINE (T_X0, T_Y0)-(T_X1, T_Y1),T_COLOR
        if t_pen = 1 and t_thickness > 0 then circle (T_X1, T_Y1),t_thickness,t_color,,,,f
        T_X0 = T_X1
        T_Y0 = T_Y1
        T_LAST_POSITION_X = T_X1
        T_LAST_POSITION_Y = T_Y1     
    NEXT T_GRAD 
IF t_HOLE = 1   THEN  
    FOR T_GRAD  = 0 TO  360        
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X1 = (T_R1 * COS(T_RGRAD))+T_POSITION_X  
        T_Y1 = (T_R1 * SIN(T_RGRAD))+T_POSITION_Y 
        if t_pen = 1 and t_thickness > 0 then circle (T_X1, T_Y1),t_thickness/t_gross,t_hole_color,,,,f
        T_X0 = T_X1
        T_Y0 = T_Y1
        T_LAST_POSITION_X = T_X1
        T_LAST_POSITION_Y = T_Y1     
    NEXT T_GRAD 
END IF

    
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_CIRCLE

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_POLY
SUB T_POLY (BYVAL T_R AS DOUBLE, BYVAL T_NSIDE AS INTEGER, BYVAL T_ANG_ROT AS INTEGER)
     'DRAW AND ROTATE A POLYGON
     'T_R = RADIUS POLYGON
     'T_NSIDE = NUMBER OF SIDES
     'T_ANG_ROT = DEGREES OF ROTATION
    DIM AS DOUBLE T_RGRAD, T_GRAD, T_X3, T_Y3
    T_R = T_R  * T_SCALE
    T_RGRAD = T_RADIANS (T_ANG_ROT)
    T_X0 = (T_R * COS (T_RGRAD)) 
    T_Y0 = (T_R * SIN (T_RGRAD)) 
    T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
    T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
    T_FIRST_POSITION_X = T_X1
    T_FIRST_POSITION_Y = T_Y1
    FOR T_GRAD  = T_ANG_ROT TO T_ANG_ROT + 360 STEP 360/T_NSIDE
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R * COS (T_RGRAD))
        T_Y2 = (T_R * SIN (T_RGRAD))
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1  and t_thickness = 0 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR
        if t_pen = 1 and t_thickness > 0 then t_segment (T_X1, T_Y1, T_X3, T_Y3)
        
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3
    NEXT T_GRAD
        IF T_PEN = 1 and t_thickness = 0  THEN LINE (T_X3, T_Y3)-(T_FIRST_POSITION_X,T_FIRST_POSITION_Y),T_COLOR
        if t_pen = 1 and t_thickness > 0 then t_segment (T_X3, T_Y3, T_FIRST_POSITION_X,T_FIRST_POSITION_Y)
END SUB

'::::::::::::::::::::::::::::::::::::::::::::::::END T_POLY

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_ELLIPSE
SUB T_ELLIPSE (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE,BYVAL T_ANG_ROT AS DOUBLE)
'DRAW A ELLIPSE WITH ROTATION
'T_R1 = RADIUS BIGGER
'T_R2 = RADIUS SMALLER
'T_ANG_ROT = DEGREES TO ROTATE
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
    T_R1 = T_R1 * T_SCALE
    T_R2 = T_R2 * T_SCALE
        T_RGRAD = T_RADIANS (T_ANG_ROT)
        T_X0 = (T_R1 * COS(T_RGRAD)) 
        T_Y0 = (T_R2 * SIN(T_RGRAD)) 
        T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        T_FIRST_POSITION_X = T_X1
        T_FIRST_POSITION_Y = T_Y1
FOR T_GRAD  = T_ANG_ROT TO T_ANG_ROT + 360        
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1 and t_pen = 0 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR
        if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness, t_color,,,,f
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
    IF T_HOLE = 1 THEN 
    FOR T_GRAD  = T_ANG_ROT TO T_ANG_ROT + 360        
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness/ T_GROSS, t_hole_color,,,,f        
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
END IF
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_ELLIPSE

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_POINT
SUB T_POINT ()
    'DRAW A POINT
    IF T_PEN = 1 THEN PSET (T_POSITION_X, T_POSITION_Y),T_COLOR
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_POINT

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_ARC_CIR
SUB T_ARC_CIR (BYVAL T_R1 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ARC CIRCLE
    'DRAW A ARC CIR
    'T_R = RADIUS CIRCLE
    'T_INI = ANGLE INIT
    'T_END = ANGLE END
    'T_ANG_ROT = ANGLE OF ROTATION
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
        T_R1 = T_R1 * T_SCALE
        T_RGRAD = T_RADIANS (T_INI)
        T_X0 = (T_R1 * COS(T_RGRAD)) 
        T_Y0 = (T_R1 * SIN(T_RGRAD)) 
        T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        T_FIRST_POSITION_X = T_X1
        T_FIRST_POSITION_Y = T_Y1
FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R1 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR  
        if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness,t_color,,,,f
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
    IF T_HOLE = 1 THEN 
 FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R1 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness/t_gross,t_hole_color,,,,f
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD   
 END IF   
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_ARC_CIR

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_SEC_CIR
SUB T_SEC_CIR (BYVAL T_R1 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ARC CIRCLE
    'DRAW A SECTOR CIR
    'T_R = RADIUS CIRCLE
    'T_INI = ANGLE INIT
    'T_END = ANGLE END
    'T_ANG_ROT = ANGLE OF ROTATION
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
        T_R1 = T_R1 * T_SCALE
        T_RGRAD = T_RADIANS (T_INI)
        T_X0 = (T_R1 * COS(T_RGRAD)) 
        T_Y0 = (T_R1 * SIN(T_RGRAD)) 
        T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        T_FIRST_POSITION_X = T_X1
        T_FIRST_POSITION_Y = T_Y1
        IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X1, T_Y1),T_COLOR
         if t_pen = 1 and t_thickness > 0 then t_segment (T_POSITION_X, T_POSITION_Y, T_X1, T_Y1)       
 FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R1 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR  
         if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3), t_thickness,t_color,,,,f       
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
    
 IF T_HOLE = 1 THEN    
 FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R1 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
         if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3), t_thickness/t_gross,t_hole_color,,,,f       
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD  
    END IF
         IF T_PEN = 1 THEN LINE (T_X3, T_Y3)-(T_POSITION_X, T_POSITION_Y),T_COLOR
         if t_pen = 1 and t_thickness > 0 then t_segment (T_X3, T_Y3,T_POSITION_X, T_POSITION_Y) 
    
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_SEC_CIR

':::::::::::::::::::::::::::::::::::::::::::::::INIT T_ARC_ELLIP
SUB T_ARC_ELLIP (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE,BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ARC ELLIPTIC
    'DRAW A ARC ELLIPTIC
    'T_R1 = RADIUS 1
    'T_R2 = RADIUS 2    
    'T_INI = ANGLE INIT
    'T_END = ANGLE END
    'T_ANG_ROT = ANGLE OF ROTATION
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
    T_R1 = T_R1 * T_SCALE
    T_R2 = T_R2 * T_SCALE
        T_RGRAD = T_RADIANS (T_INI)
        T_X0 = (T_R1 * COS(T_RGRAD)) 
        T_Y0 = (T_R2 * SIN(T_RGRAD)) 
        T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        T_FIRST_POSITION_X = T_X1
        T_FIRST_POSITION_Y = T_Y1
FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR
         if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness,t_color,,,,f         
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
 IF T_HOLE = 1 THEN    
    FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y

         if t_pen = 1 and t_thickness > 0 then circle (T_X3, T_Y3),t_thickness/t_gross,t_hole_color,,,,f         
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
 END IF
 
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_ARC_ELLIP

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_SEC_ELLIP
SUB T_SEC_ELLIP (BYVAL T_R1 AS DOUBLE, BYVAL T_R2 AS DOUBLE, BYVAL T_INI AS DOUBLE, BYVAL T_END AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)'DRAW A ELLIPTIC SECTOR
    'DRAW A SECTOR ELLIPTIC
    'T_R1 = RADIUS 1
    'T_R2 = RADIUS 2    
    'T_INI = ANGLE INIT
    'T_END = ANGLE END
    'T_ANG_ROT = ANGLE OF ROTATION
DIM AS DOUBLE T_RGRAD, T_GRAD,T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
    T_R1 = T_R1 * T_SCALE
    T_R2 = T_R2 * T_SCALE
        T_RGRAD = T_RADIANS (T_INI)
        T_X0 = (T_R1 * COS(T_RGRAD)) 
        T_Y0 = (T_R2 * SIN(T_RGRAD)) 
        T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        T_FIRST_POSITION_X = T_X1
        T_FIRST_POSITION_Y = T_Y1
        IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X1, T_Y1),T_COLOR  
          if t_pen = 1 and t_thickness > 0 then t_segment  (T_POSITION_X, T_POSITION_Y, T_X1, T_Y1)       
FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        IF T_PEN = 1 THEN LINE (T_X1, T_Y1)-(T_X3, T_Y3),T_COLOR
        if t_pen = 1 and t_thickness > 0 then circle(T_X3, T_Y3), t_thickness,t_color,,,,f       
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
    IF T_HOLE = 1 THEN 
 FOR T_GRAD  = T_INI TO T_END
        T_RGRAD = T_RADIANS (T_GRAD)
        T_X2 = (T_R1 * COS(T_RGRAD)) 
        T_Y2 = (T_R2 * SIN(T_RGRAD)) 
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y
        if t_pen = 1 and t_thickness > 0 then circle(T_X3, T_Y3), t_thickness/t_gross,t_hole_color,,,,f       
        T_X1 = T_X3
        T_Y1 = T_Y3
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3     
    NEXT T_GRAD
    END IF
        IF T_PEN = 1 THEN LINE (T_POSITION_X, T_POSITION_Y)-(T_X3, T_Y3),T_COLOR 
          if t_pen = 1 AND t_thickness > 0 then t_segment (T_POSITION_X, T_POSITION_Y,T_X3, T_Y3)         
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_SEC_ELLIP

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_STAR
SUB T_STAR (BYVAL T_NP AS INTEGER, BYVAL T_RG AS DOUBLE, BYVAL T_RP AS DOUBLE, BYVAL T_ANG_ROT AS DOUBLE)

    DIM AS INTEGER C
    DIM AS DOUBLE  NP, N, T_X0,T_Y0,T_X1,T_Y1,T_X2,T_Y2,T_X3,T_Y3
   
    IF T_NP = 0 THEN T_NP = 1:END IF
    T_NP = ABS(T_NP)
    NP = (180 / T_NP)
    C = 0        
    R = T_RG*T_SCALE 
    T_X0 = (T_R * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_X 
    T_Y0 = (T_R * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y 
    T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT)))'+T_POSITION_X
    T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT)))'+T_POSITION_Y
    T_FIRST_POSITION_X = T_X1
    T_FIRST_POSITION_Y = T_Y1
     FOR N = T_ANG_ROT TO (T_ANG_ROT + 360 +NP) STEP NP
        IF C MOD 2 = 0 THEN
        R = T_RG * T_SCALE
        ELSE 
        R = T_RP * T_SCALE
        END IF
        T_X2 = (COS(T_RADIANS(N)) * R )
        T_Y2 = (SIN(T_RADIANS(N)) * R )
        T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT)))+T_POSITION_X
        T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT)))+T_POSITION_Y      
        IF T_PEN = 1 AND C > 0 and t_thickness = 0 THEN LINE (T_X0,T_Y0)-(T_X3, T_Y3),T_COLOR
           if t_pen = 1 and c > 0 and t_thickness > 0 then t_segment (T_X0,T_Y0, T_X3, T_Y3)       
        C = C + 1
        T_X0 = T_X3
        T_Y0 = T_Y3
     NEXT N 
        T_LAST_POSITION_X = T_X3
        T_LAST_POSITION_Y = T_Y3 
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_STAR

'::::::::::::::::::::::::::::::::::::::::::::::::INIT T_SEGMENT
SUB T_SEGMENT (BYVAL T_LX1 AS DOUBLE, BYVAL T_LY1 AS DOUBLE, BYVAL T_LX2 AS DOUBLE, BYVAL T_LY2 AS DOUBLE)
    DIM AS INTEGER N
    DIM AS DOUBLE HIP, ANG, T_LX, T_LY, T_LPX, T_LPY, DX, DY
    DX = ABS (T_LX1 - T_LX2)
    DY = ABS (T_LY1 - T_LY2)
    HIP = SQR(DX*DX + DY*DY)
    ANG = ATN(DY / DX)
    
    
     FOR N = 0 TO HIP
        T_LY = SIN(ANG) * N
        T_LX = COS(ANG) * N
        IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY + T_LY1 : END IF
        IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 : T_LPY = T_LY1 : END IF
        IF t_pen = 1 and T_THICKNESS > 0 THEN CIRCLE (T_LPX, T_LPY), T_THICKNESS, t_color,,,,F
   
     NEXT N
IF T_HOLE = 1 THEN   
    FOR N = 0 TO HIP
        T_LY = SIN(ANG) * N
        T_LX = COS(ANG) * N
        IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY + T_LY1 : END IF
        IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 : T_LPY = T_LY1 : END IF
        IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX, T_LPY), T_THICKNESS/T_GROSS,T_HOLE_COLOR,,,,F
    NEXT N
END IF
 
IF  T_TEXT_KEY = 1 THEN    
    FOR N = 0 TO HIP
        T_LY = SIN(ANG) * N
        T_LX = COS(ANG) * N
        IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY + T_LY1 : END IF
        IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 : T_LPY = T_LY1 : END IF
        IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX, T_LPY), T_THICKNESS,T_TEXT_COLOR,,,,F
     NEXT N

  
    FOR N = 0 TO HIP
        T_LY = SIN(ANG) * N
       T_LX = COS(ANG) * N
        IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY + T_LY1 : END IF
        IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX : T_LPY = T_LY1 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX : T_LPY = T_LY2 + T_LY : END IF
        IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 : T_LPY = T_LY1 : END IF
        IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX, T_LPY), T_THICKNESS/T_TEXT_GROSS,T_TEXT_HOLE_COLOR,,,,F
    NEXT N

END IF
END SUB
'::::::::::::::::::::::::::::::::::::::::::::::::END T_SEGMENT

'=======================================================================
' characters are defined before use by t_text()
'=======================================================================
Sub t_let_A (Byval t_rottext As Double)'UCASE A
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_bk 3 : t_rt 90 : t_fd 4 : t_bk 4 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_B (Byval t_rottext As Double)'UCASE B
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_lt 135 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 180 : t_fd 2
    t_pen = 0 : t_fd 3 :t_orient 0
End Sub

Sub t_let_C (Byval t_rottext As Double)'UCASE C
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 1 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414
    t_pen = 0 : t_rt 45 : t_fd 4 : t_rt 45
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 4 : t_orient 0
End Sub

Sub t_let_D (Byval t_rottext As Double)'UCASE D
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_bk 3 : t_rt 180
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_let_E (Byval t_rottext As Double)'UCASE E
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1: t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 4
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_F (Byval t_rottext As Double)'UCASE F
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 2 : t_bk 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 5 : t_orient 0
End Sub

Sub t_let_G (Byval t_rottext As Double)'UCASE G
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4 : t_rt 90 : t_fd 6 : t_lt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_lt 90 : t_fd 2
    t_pen = 0 : t_bk 2 : t_lt 90 : t_fd 3: T_LT 90 :T_FD 1 : t_orient 0
End Sub

Sub t_let_H (Byval t_rottext As Double)'UCASE H
    color  t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 3 : t_bk 6 : t_lt 90
    t_pen = 0 : t_bk 1 : t_orient 0
End Sub

Sub t_let_I (Byval t_rottext As Double)'UCASE I
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_J (Byval t_rottext As Double)'UCASE J
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 90 : t_fd 4 : t_lt 90 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_K (Byval t_rottext As Double)'UCASE K
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_rt 45 : t_fd 4.2 : t_bk 4.2 : t_rt 90 : t_fd 4.2 : t_rt 45
    t_pen = 0 : T_LT 90:t_fd 1 : t_orient 0
End Sub

Sub t_let_L (Byval t_rottext As Double)'UCASE L
    color  t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 6 : t_rt 90 : t_fd 4
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_M (Byval t_rottext As Double)'UCASE M
    color t_text_color     
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 145 : t_fd 3.605 : t_lt 110 : t_fd 3.605 : t_rt 145 : t_fd 6 : t_lt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_N (Byval t_rottext As Double)'UCASE N
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 147 : t_fd 7.211 : t_lt 147 : t_fd 6 : t_bk 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_O (Byval t_rottext As Double)'UCASE O
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 4 : t_rt 90 : t_fd 6 : t_rt 90 : t_fd 4 : t_bk 4
    t_pen = 0 :T_BK 1 : t_orient 0
End Sub

Sub t_let_P (Byval t_rottext As Double)'UCASE P
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 5 : t_orient 0
End Sub

Sub t_let_Q (Byval t_rottext As Double)'UCASE Q
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 90
    t_pen = 1 : t_lt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_rt 45
    t_pen = 1 : t_fd 3 : t_bk 3 : t_rt 135
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_R (Byval t_rottext As Double)'UCASE R
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90
    t_pen = 1 : t_fd 6 : t_rt 90 : t_fd 3 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 3 : t_rt 218 : t_fd 4.9 : t_lt 45
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_S (Byval t_rottext As Double)'UCASE S
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2   : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 5 : t_lt 90   
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_T (Byval t_rottext As Double)'UCASE T
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  3  : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_bk 4 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : T_FD 1 : t_orient 0
End Sub

Sub t_let_U (Byval t_rottext As Double)'UCASE U
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  2  : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 5 : t_rt 90
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_rt 90 : t_fd 5 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 2
    t_pen = 0 : t_bk 3 : t_BK 1 :  t_orient 0
End Sub

Sub t_let_V (Byval t_rottext As Double)'UCASE V
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  3  : t_lt 108.426
    t_pen = 1 : t_fd 6.324 : t_bk 6.324 : t_rt 36.872 : t_fd 6.324 : t_rt 161.564
    t_pen = 0 : t_fd 6 : t_lt 90 :T_FD 1: t_orient 0
End Sub

Sub t_let_W (Byval t_rottext As Double)'UCASE W
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  2  : t_lt 99.403
    t_pen = 1 : t_fd 6.082 : t_bk 6.082 : t_rt 27.9 : t_fd 3.162 : t_rt 143 : t_fd 3.162 : t_rt 208 : t_fd 6.082 : t_rt 170.5
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 : t_orient 0
End Sub

Sub t_let_X (Byval t_rottext As Double)'UCASE X
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  1  : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 7.21 : t_lt 57 : T_PEN = 0 :t_fd 1 : t_orient 0
End Sub

Sub t_let_Y (Byval t_rottext As Double)'UCASE Y
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  1  : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5
    t_pen = 0 : t_fd 4
    t_pen = 1 : t_lt 124 : t_fd 3.60
    t_pen = 0 : t_fd 3.60 : t_lt 57 :  t_fd 1 : t_orient 0
End Sub

Sub t_let_Z (Byval t_rottext As Double)'UCASE Z
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd  1  : t_lt 56.3
    t_pen = 1 : t_fd 7.21 : t_lt 123.5 : t_fd 4 : t_bk 4 : t_lt 56.3 : t_fd 7.21 : t_lt 123.5 : t_fd 4
    t_pen = 0 : t_fd 1 : t_orient 0
End Sub

Sub t_let_SPACE (Byval t_rottext As Double)'SPACE
    t_pen = 0 : t_rt t_rottext : t_fd  2  : t_orient 0
End Sub

'NUMBERS
Sub t_num_1 (Byval t_rottext As Double)'NUMBER 1
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 4
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_fd 1.414 : t_rt 135 : t_fd 6 : t_lt 90
    t_pen = 0 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_2 (Byval t_rottext As Double)'NUMBER 2
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 37 : t_fd 5 : t_lt 127 : t_fd 3
    t_pen = 0 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_3 (Byval t_rottext As Double)'NUMBER 3
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 5
    t_pen = 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_bk 1.414 : t_rt 135
    t_pen = 0 : t_fd 3 : t_orient 0
End Sub

Sub t_num_4 (Byval t_rottext As Double)'NUMBER 4
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 3
    t_pen = 1 : t_rt 45 : t_fd 1.414*3 : t_rt 135 : t_fd 3 : t_rt 90 : t_fd 3 : t_bk 3 : t_lt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_5 (Byval t_rottext As Double)'NUMBER 5
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_rt 90 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90
    t_pen = 0 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_6 (Byval t_rottext As Double)'NUMBER 6
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 4 : t_rt 225 : t_fd 1.414 :    t_rt 45 : t_fd 2 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_7 (Byval t_rottext As Double)'NUMBER 7
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116 : t_fd 2.9 : t_lt 117
    t_pen = 0 : t_fd 6.6 : t_lt 63 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_8 (Byval t_rottext As Double)'NUMBER 8
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_bk 1 : t_lt 135 : t_fd 1.414 : t_lt 90 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_bk 1 : t_lt 90 : t_fd 3 : t_lt 90 :  t_fd 1 : t_orient 0
End Sub

Sub t_num_9 (Byval t_rottext As Double)'NUMBER 9
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 4 : t_lt 90
    t_pen = 1 : t_fd 6 : t_lt 90 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 90 : t_fd 3 : t_lt 90
    t_pen = 0 : t_fd 1 :  t_orient 0
End Sub

Sub t_num_0 (Byval t_rottext As Double)'NUMBER 0
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1
    t_pen = 0 :  t_bk 3 : t_orient 0
End Sub

'symbolS
Sub t_sym_1 (Byval t_rottext As Double)'symbol (
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_rt 45 : t_fd 4 : t_rt 45 : t_fd 1.414 : t_rt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 1 :  t_orient 0
End Sub

Sub t_sym_2 (Byval t_rottext As Double)'symbol )
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414 : t_lt 45 : t_fd 4 : t_lt 45 : t_fd 1.414 : t_lt 135
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 2 : t_orient 0
End Sub

Sub t_sym_3 (Byval t_rottext As Double)'symbol [
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 6 : t_lt 90 :  t_fd 1 : t_orient 0
End Sub

Sub t_sym_4 (Byval t_rottext As Double)'symbol ]
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 6 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 6 : t_lt 90 : t_fd 2 : t_orient 0
End Sub

Sub t_sym_5 (Byval t_rottext As Double)'symbol !
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 2
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_bk 6 : t_rt 90 : t_FD 1 :  t_orient 0
End Sub

Sub t_sym_6 (Byval t_rottext As Double)'symbol ¡
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 3 :t_pen = 0 : t_fd 2:t_pen = 1 :t_fd 1
    t_bk 1:t_pen = 0 :t_bk 2:t_pen = 0 :t_bk 3 :t_rt 90 :t_fd 1:t_orient 0
 
End Sub

Sub t_sym_7 (Byval t_rottext As Double)'symbol ?
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 4
    t_pen = 1 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_rt 45 : t_fd 1 : t_rt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_lt 90 : t_fd 2 : t_orient 0
End Sub

Sub t_sym_8 (Byval t_rottext As Double)'symbol ¿
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 6 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1 : t_lt 45 : t_fd 1.414 : t_lt 45 : t_fd 1
    t_pen = 0 : t_bk 2 : t_rt 90 : t_fd 1 :  t_orient 0
End Sub

Sub t_sym_9 (Byval t_rottext As Double)'symbol _
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_fd 1 :t_orient 0
End Sub

Sub t_sym_10 (Byval t_rottext As Double)'symbol -
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 3 : t_rt 90
    t_pen = 1 : t_fd 3
    t_pen = 0 : t_rt 90 : t_fd 3 : t_lt 90 : t_fd 1 :t_orient 0
End Sub

Sub t_sym_11 (Byval t_rottext As Double)'symbol .
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90
    t_pen = 0 : t_fd 2 : t_orient 0
End Sub

Sub t_sym_12 (Byval t_rottext As Double)'symbol :
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1
    t_pen = 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 1
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1
    t_pen = 0 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 1 : t_bk 1 : t_lt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_bk 1:t_pen = 0 :t_bk 1: t_orient 0
    
End Sub

Sub t_sym_13 (Byval t_rottext As Double)'symbol +
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_lt 90
    t_pen = 1 : t_fd 6 : t_bk 3 : t_lt 90 : t_fd 1.5 : t_bk 3 : t_lt 90
    t_pen = 0 : t_fd 3 : t_lt 90 : t_fd 1 :  t_orient 0
End Sub

Sub t_sym_14 (Byval t_rottext As Double)'symbol *
    color t_text_color
    Dim N As Integer
    t_pen = 0 : t_rt t_rottext : t_fd 3 : t_Rt 90
    t_pen = 0 : T_BK 1
    T_PEN = 1
    For N = 0 To 8
        t_bk 2 : t_lt 45 : t_fd 2
    Next N
    t_pen = 0 : t_lt 135 : t_BK 1.5 : t_RT 90:t_fd 1  : t_orient 0
End Sub

Sub t_sym_15 (Byval t_rottext As Double)'symbol /
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_rt 64
    t_pen = 0 : t_fd 4:  t_orient 0
End Sub

Sub t_sym_16 (Byval t_rottext As Double)'symbol \
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 4 : t_lt 116
    t_pen = 1 : t_fd 6.6 : t_bk 6.6 : t_lt 64
    t_pen = 0 : t_bk 1 :  t_orient 0
End Sub

Sub t_sym_17 (Byval t_rottext As Double)'symbol >
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90 :  t_lt 45
    t_pen = 1 :  t_fd 1.414*2 : t_lt 90 :  t_fd 1.414*2
    t_pen = 0 : t_lt 135 : t_fd 5 : t_lt 90 : t_fd 3 :  t_orient 0
End Sub

Sub t_sym_18 (Byval t_rottext As Double)'symbol <
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 3 : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 :  t_fd 1.414*2 :  t_rt 90 : t_fd 1.414*2
    t_pen = 0 : t_rt 135 : t_fd 5 : t_lt 90 : t_fd 1: t_orient 0
End Sub

Sub t_sym_19 (Byval t_rottext As Double)'symbol =
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 1: t_orient 0
End Sub

Sub t_sym_20 (Byval t_rottext As Double)'symbol #
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 :  t_bk 3
    t_pen = 0 : t_lt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 3 : t_rt 90
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6 : t_rt 90
    t_pen = 0 : t_fd 1 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_lt 90 : t_fd 2 : t_orient 0
End Sub

Sub t_sym_21 (Byval t_rottext As Double)'symbol, 
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_rt 135 : t_fd 1 : t_lt 90 :t_fd 1: t_orient 0
End Sub

Sub t_sym_22 (Byval t_rottext As Double)'symbol ;
    color t_text_color
    t_pen = 0 :  t_rt t_rottext : t_fd 1 : t_lt 45
    t_pen = 1 : t_fd 1.414
    t_pen = 0 : t_lt 45 : t_fd 1
    t_pen = 1 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1 : t_rt 90
    t_pen = 0 : t_fd 2 : t_lt 90 :t_fd 1: t_orient 0
End Sub

Sub t_sym_23 (Byval t_rottext As Double)'symbol $
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 2 : t_lt 90 : t_fd 1 : t_rt 90 : t_lt 135
    t_pen = 1 : t_fd 1.414 : t_bk 1.414 : t_rt 135 : t_fd 2 : t_lt 45 : t_fd 1.414 : t_lt 90 :  t_fd 1.414 : t_lt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 90 : t_fd 1.414 : t_rt 45 : t_fd 2 : t_rt 45 : t_fd 1.414 : t_rt 45
    t_pen = 0 : t_fd 4 : t_rt 90 : t_fd 2 : t_rt 90
    t_pen = 1 : t_fd 6
    t_pen = 0 : t_rt 90 : t_fd 2 : t_rt 90 : t_fd 6
    t_pen = 0 : t_lt 90: t_fd 1:t_orient 0
End Sub

Sub t_sym_24 (Byval t_rottext As Double)'symbol %
    color t_text_color
    t_pen = 0 : t_rt t_rottext : t_fd 1 : t_lt 64
    t_pen = 1 : t_fd 6.6 : t_lt 116
    t_pen = 0 : t_fd 2.9 : t_lt 90 : t_fd 2
    t_pen = 1 : t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 :  t_lt 90 : t_fd 1 : t_lt 90 : t_fd 1
    t_pen = 0 : t_fd 4 : t_lt 90 : t_fd 2 : t_lt 90
    t_pen = 0 : t_fd 1      
    t_pen = 1 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_fd 1 : t_rt 90 : t_lt 180
    t_pen = 0 : t_fd 0.9 : t_lt 90 : t_fd 2 : t_orient 0
End Sub

'================================================
' use the characters defined before
'================================================
'::::::::::::::::::::::::::::::::::::::::::::::::Init t_text
Sub t_text (Byref t_string As String)
    Dim As Integer t_longtext, N
    t_longtext = Len(t_string)
    For N = 1 To t_longtext
        Select Case Mid(t_string, n, 1)
        'char uppers
        Case "A" : t_let_A (t_rottext)
        Case "B" : t_let_B (t_rottext)
        Case "C" : t_let_C (t_rottext)
        Case "D" : t_let_D (t_rottext)
        Case "E" : t_let_E (t_rottext)
        Case "F" : t_let_F (t_rottext)
        Case "G" : t_let_G (t_rottext)
        Case "H" : t_let_H (t_rottext)
        Case "I" : t_let_I (t_rottext)
        Case "J" : t_let_J (t_rottext)
        Case "K" : t_let_K (t_rottext)
        Case "L" : t_let_L (t_rottext)
        Case "M" : t_let_M (t_rottext)
        Case "N" : t_let_N (t_rottext)
        Case "O" : t_let_O (t_rottext)
        Case "P" : t_let_P (t_rottext)
        Case "Q" : t_let_Q (t_rottext)
        Case "R" : t_let_R (t_rottext)
        Case "S" : t_let_S (t_rottext)
        Case "T" : t_let_T (t_rottext) 
        Case "U" : t_let_U (t_rottext)
        Case "V" : t_let_V (t_rottext)
        Case "W" : t_let_W (t_rottext)
        Case "X" : t_let_X (t_rottext)
        Case "Y" : t_let_Y (t_rottext)
        Case "Z" : t_let_Z (t_rottext)
        Case " " : t_let_SPACE (t_rottext)
        'chars lowers
        Case "a" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_A (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "b" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_B (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "c" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_C (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "d" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_D (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "e" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_E (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "f" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_F (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "g" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_G (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "h" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_H (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "i" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_I (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "j" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_J (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "k" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_K (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "l" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_L (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "m" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_M (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "n" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_N (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "o" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_O (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "p" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_P (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "q" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_Q (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "r" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_R (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "s" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_S (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "t" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_T (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2  
        Case "u" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_U (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "v" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_V (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "w" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_W (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "x" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_X (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "y" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_Y (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        Case "z" : t_scale /= 2 : t_thickness = t_thickness / 2 :  t_let_Z (t_rottext) : t_scale *= 2 : t_thickness = t_thickness * 2 
        'NUMBERS
        Case "1" : t_num_1 (t_rottext)
        Case "2" : t_num_2 (t_rottext)
        Case "3" : t_num_3 (t_rottext)
        Case "4" : t_num_4 (t_rottext)
        Case "5" : t_num_5 (t_rottext)
        Case "6" : t_num_6 (t_rottext)
        Case "7" : t_num_7 (t_rottext)
        Case "8" : t_num_8 (t_rottext)
        Case "9" : t_num_9 (t_rottext)
        Case "0" : t_num_0 (t_rottext)
        'symbolS
        Case "(" : t_sym_1 (t_rottext)
        Case ")" : t_sym_2 (t_rottext)
        Case "[" : t_sym_3 (t_rottext)
        Case "]" : t_sym_4 (t_rottext)
        Case "!" : t_sym_5 (t_rottext)
        Case "¡" : t_sym_6 (t_rottext)
        Case "?" : t_sym_7 (t_rottext)
        Case "¿" : t_sym_8 (t_rottext)
        Case "_" : t_sym_9 (t_rottext)
        Case "-" : t_sym_10 (t_rottext)
        Case "." : t_sym_11 (t_rottext)
        Case ":" : t_sym_12 (t_rottext)
        Case "+" : t_sym_13 (t_rottext)
        Case "*" : t_sym_14 (t_rottext) 
        Case "/" : t_sym_15 (t_rottext)
        Case "\" : t_sym_16 (t_rottext)
        Case ">" : t_sym_17 (t_rottext)
        Case "<" : t_sym_18 (t_rottext)
        Case "=" : t_sym_19 (t_rottext)
        Case "#" : t_sym_20 (t_rottext)
        Case "," : t_sym_21 (t_rottext)
        Case ";" : t_sym_22 (t_rottext)
        Case "$" : t_sym_23 (t_rottext)
        Case "%" : t_sym_24 (t_rottext)         
        Case Else
            'Print " Missing character. "
            'Sleep
        End Select
    Next N
    T_PEN = 1
End Sub
'::::::::::::::::::::::::::::::::::::::::::::::::End T_text
lrcvs
Posts: 578
Joined: Mar 06, 2008 19:27
Location: Spain

Test TURTLE4.BI

Post by lrcvs »

Code: Select all

#include "turtle4.bi"

'Test to new version (ver #4 of "TURTLE4.BI")

dim as integer j, k

cls
screen 12
t_init
for n =  -250 to 250 'angle of rotation
t_pen = 0 
t_gt (0+n,0) ' move  
t_pen = 1

'::::::::::::::::::::::::::test 1 shapes
't_color = 12

't_star (10,100,80,n)

't_circle (100)

't_poly (100,6,n)
't_arc_cir (100,30,270,n)

't_sec_cir (100,30,270,n)

't_ellipse (80,40,n*2)
't_ellipse (80,40,(n*2)+90)
't_arc_ellip (150,75,30,270,n)

't_sec_ellip (150,75,30,270,n)

'::::::::::::::::::::::::::test 2 shapes
T_HOLE = 0 ' VALUES 0 / 1
t_color = 12

t_thickness = 10

't_star (10,140,90,n)
't_circle (200)

't_poly (180,6,n)
't_arc_cir (100,30,270,n)

't_sec_cir (100,30,270,n)

't_ellipse (80,40,n*2)

't_arc_ellip (150,75,30,270,n)

't_sec_ellip (150,75,30,270,n)

':::::::::::::::::::::::::test 1 to text
'cls
't_text_key = 1
't_thickness = 9
't_text_color = 12
'T_TEXT_HOLE_COLOR = 14
'for j =0 to 250 step 1
't_pen = 0 : t_gt (0+J,0) : t_pen = 1
't_scale = 18
't_text "ABC"
'sleep 50
'cls
'next j

':::::::::::::::::::::: test 2 to text
'cls

't_text_color = 12
't_text_hole_color = 14
'for j = 0 to 250 step 1
 '   IF J MOD 2 = 0 THEN t_text_key = 0 ELSE t_text_key = 1 : END IF
'cls
't_pen = 0 : t_gt (0-j/9.1,j/60) : t_pen = 1
't_scale = j/5
't_thickness = t_scale/2
't_text "ABC 123 abc"
'sleep 100
'next j

':::::::::::::::::::::::::::::::::: test 3 to text
'cls
'for k = 0 to 10
'cls
'if k mod 2 = 1 then t_text_key = 1 else  t_text_key = 0 
't_color = 1
't_text_color = 12
't_text_hole_color = 14
't_scale = 10
't_thickness = t_scale/2
't_pen = 0 : t_gt (-25,0) : t_pen = 1
't_text "ABC 123 abc"
'sleep 500
'next k
':::::::::::::::::::::::::::::::::::

sleep 1
cls
next n

end

Post Reply