﻿<?xml version="1.0" encoding="UTF-8" ?>
<STPostprocessor Version="5">
    <CNCSystem>Mitsubishi Meldas 60</CNCSystem>
    <MachineName>Polygim Lathe 20CSB</MachineName>
    <Date>24.08.2018</Date>
    <Authors>cepera@sprut.ru</Authors>
    <Comments>
        <![CDATA[]]>
    </Comments>
    <NCFileExtension>txt</NCFileExtension>
    <CommonDefinitions>
        <LinearApproxPrecision IsSet="False">0.01</LinearApproxPrecision>
        <Circles>
            <Support>True</Support>
            <HelixSupport>False</HelixSupport>
            <Center>Incremental</Center>
            <Division>DoNotBreak</Division>
            <MaxRadius>10000</MaxRadius>
        </Circles>
        <XMax>10000</XMax>
        <YMax>10000</YMax>
        <ZMax>10000</ZMax>
        <UpperCaseComments>False</UpperCaseComments>
        <Spaces>False</Spaces>
        <DecimalSeparator>Point</DecimalSeparator>
        <BlocksNumbering>
            <Address>N</Address>
            <StartValue>1</StartValue>
            <StepValue>1</StepValue>
            <Frequence>0</Frequence>
        </BlocksNumbering>
    </CommonDefinitions>
    <InitialQuestions/>
    <Registers>
        <Register>
            <Name>ONum</Name>
            <Address>
                <![CDATA[O]]>
            </Address>
            <Comment>
                <![CDATA[NC program number]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>BlockN</Name>
            <Address>
                <![CDATA[N]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>M1</Name>
            <Address>
                <![CDATA[M]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>M</Name>
            <Address>
                <![CDATA[M]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>LCS</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>GFunc</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Descom_R_Hta</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Cancel_Can_Cyc</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Interp_</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Plane</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>GFeed</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>CSS_RPM</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>DMaxRPM</Name>
            <Address>
                <![CDATA[D]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Cycle</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>1</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Diametro</Name>
            <Address>
                <![CDATA[D]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>KorEcv</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>X</Name>
            <Address>
                <![CDATA[X]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Y</Name>
            <Address>
                <![CDATA[Y]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Z</Name>
            <Address>
                <![CDATA[Z]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>C</Name>
            <Address>
                <![CDATA[C]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Radius</Name>
            <Address>
                <![CDATA[R]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Feed_</Name>
            <Address>
                <![CDATA[F]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>KThreadStep</Name>
            <Address>
                <![CDATA[K]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>P</Name>
            <Address>
                <![CDATA[P]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Q</Name>
            <Address>
                <![CDATA[Q]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Anyway</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>5</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>rpm_limit</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Gsp</Name>
            <Address>
                <![CDATA[G]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>S</Name>
            <Address>
                <![CDATA[S]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>S_1</Name>
            <Address>
                <![CDATA[S1=]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>S_2</Name>
            <Address>
                <![CDATA[S2=]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>S_3</Name>
            <Address>
                <![CDATA[S3=]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>4</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>S12</Name>
            <Address>
                <![CDATA[S]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>Tool</Name>
            <Address>
                <![CDATA[T]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>ToolCor</Name>
            <Address>
                <![CDATA[]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>MSp</Name>
            <Address>
                <![CDATA[M]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>MCoolant</Name>
            <Address>
                <![CDATA[M]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>No</Sign>
            <DecimalPoint>Absent</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>2</Count>
                <Zeros>True</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>0</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>U</Name>
            <Address>
                <![CDATA[U]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
        <Register>
            <Name>V</Name>
            <Address>
                <![CDATA[V]]>
            </Address>
            <Comment>
                <![CDATA[]]>
            </Comment>
            <Sign>Minus</Sign>
            <DecimalPoint>Present</DecimalPoint>
            <NumeralsBeforePoint>
                <Count>3</Count>
                <Zeros>False</Zeros>
            </NumeralsBeforePoint>
            <NumeralsAfterPoint>
                <Count>2</Count>
                <Zeros>False</Zeros>
            </NumeralsAfterPoint>
            <Scale>1</Scale>
        </Register>
    </Registers>
    <CLDCommandsHandlers>
        <CLDCommand>
            <CLDCommandID>AbsMov</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program AbsMov  
  if (Interp_<>0) and (Interp_<>1) and (Interp_<>33) then
    Interp_=1
  X = 2*CLD.X        ! X,Y,Z in absolutes
  Y = CLD.Y !; Y@ = Y
  Z = CLD.Z
  if (X<>X@) or (Z<>Z@) or(Y<>Y@) then
    OutBlock
  XT_=X
  YT_=Y
  ZT_=Z
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>AxesBrake</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program AxesBrake

end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Circle</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Circle
  if cld[4] > 0 then INTERP_ = 3 else INTERP_ = 2   ! G3/G2
  Radius = abs(CLD.R); Radius@ = MaxReal
  X = CLD.Xe*2
  Y = CLD.Ye !; Y@ = Y
  Z = CLD.Ze
  OutBlock
  XT_ = X                              ! save current coordinates
  YT_ = Y
  ZT_ = Z
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Comment</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Comment  
Valor1: integer
Valor1=CldFile.CurrentFile
Valor2=10*(Valor1+1)
Valor2$=Str(Valor2)
  if (CLDCounter>1) and          ! if it is not NC-program name
     (Pos("@", CLData$)<=0) then ! if it is not tool comment
     Output  "N" + valor2$ +"(" + CLData$ + ")"
  end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Common</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Common
  MaxReal: Real
  XT_: Real
  YT_: Real
  ZT_: Real
  OperationIsLathe: Integer ! 1-lathe operation, 0-mill operation, 2 - auxiliary operation
  IsCycleGeometry: Integer ! 0-Custom sub, 1-Geometry of the lathe cycle
  MainONum: Integer
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Coolnt</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program CoolNt
  if cld[1] = 71 then ! On/Off coolant
    if CLD.N=2 then
      MCoolant = 7
    else
      MCoolant = 8
  else
    MCoolant = 9
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>CutCom</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program CutCom  
  if cld[2]=23 then begin ! RADIUS
    if cld[1] = 72 then
      KorEcv = 40
    else begin
      if cld[10] = 24 then KorEcv = 42
                      else KorEcv = 41
    end
  end
end

]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Delay</CLDCommandID>
            <Handlers>
                <Mask>
                    <Enabled>False</Enabled>
                    <OutPrevious>True</OutPrevious>
                    <PollRegs>False</PollRegs>
                    <OutBlock>True</OutBlock>
                    <Mask>
                        <![CDATA[GFUNC[4]PAUSE[CLD.A,on]
]]>
                    </Mask>
                </Mask>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Delay  
  OutBlock
  call RealToStr2(OutStr$, cld[1])
  Output "G04 P" + OutStr$
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>ExtCycle</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program ExtCycle
  Pp$: String
  Qq$: String
  Rr$: String
  Uu$: String
  Ww$: String
  Feed$: String
  Zz$: String
  Xx$: String
  Ii$: String
  Jj$: String
  Kk$: String
  Hh$: String
  Ee$: String
  Ll$: String
  dd: Real
  i: Integer

  if cld[1]=72 then begin ! Cycle Call
    Cycle=80;
    if Cycle@<80 then
      Cycle@ = Cycle
    outblock
  end else
  if cld[1]=52 then begin ! Cycle Call
    case cld[2] of
      400: begin ! LatheFinish (G70/G73)
        Input "Lathe finish cycle not supported, use long hand format instead!"
        Output "(Cycle not supported)"
        Output "M0"
!        OutBlock
!        if (cld[4]=1) and (cld[7]=0) and (cld[8]=0) then begin ! G70
!          Cycle = 70; Cycle@ = MaxReal
!          FormBlock
!          Pp$ = NCSub.StartLabel(cld[3]) ! First block number of contour
!          Qq$ = NCSub.EndLabel(cld[3])   ! Last block number of contour
!          ! G70 P_ Q_
!          Output OutStr$ + " P" + Pp$ + " Q" + Qq$
!          IsCycleGeometry = 1
!          NCSub.Output(cld[3])
!          IsCycleGeometry = 0
!        end else begin ! G73
!          Cycle = 73; Cycle@ = MaxReal
!          FormBlock
!          call RealToStr(Uu$, cld[6])    ! Thickness X
!          call RealToStr(Ww$, cld[5])    ! Thickness Z
!          Rr$ = str(cld[4])    ! Pass count
!          ! G73 U_ W_ R_
!          Output OutStr$ + " U" + Uu$ + " W" + Ww$ + " R" + Rr$
!          Cycle = 73; Cycle@ = MaxReal
!          FormBlock
!          Pp$ = NCSub.StartLabel(cld[3]) ! First block number of contour
!          Qq$ = NCSub.EndLabel(cld[3])   ! Last block number of contour
!          call RealToStr(Uu$, cld[8]*2)  ! Stock X
!          call RealToStr(Ww$, cld[7])    ! Stock Z
!          call RealToStr(Feed$, Feed_)
!          ! G73 P_ Q_ U_ W_ F_ S_ T_
!          Output OutStr$ + " P" + Pp$ + " Q" + Qq$ + " U" + Uu$ + " W" + Ww$ + " F" + Feed$
!          IsCycleGeometry = 1
!          NCSub.Output(cld[3])
!          IsCycleGeometry = 0
!
!          if CLD[12]=1 then begin ! IsFinishPass
!            OutBlock
!            Cycle = 70; Cycle@ = MaxReal
!            FormBlock
!            Output OutStr$ + " P" + Pp$ + " Q" + Qq$
!          end
!        end
      end
      401: begin ! Lathe roughing (G71/G72)
        Input "Lathe roughing cycle not supported, use long hand format instead!"
        Output "(Cycle not supported)"
        Output "M0"
!        OutBlock
!        if cld[5]=0 then Cycle = 71
!                    else Cycle = 72 !  Vertical passes
!        Cycle@ = MaxReal
!        FormBlock
!        call RealToStr(Rr$, cld[9])
!        if Cycle = 71 then begin
!          call RealToStr(Uu$, cld[4])
!          ! G71 U_ R_
!          Output OutStr$ + " U" + Uu$ + " R" + Rr$
!        end else begin
!          call RealToStr(Ww$, cld[4])
!          ! G71 W_ R_
!          Output OutStr$ + " W" + Ww$ + " R" + Rr$
!        end
!        Cycle@ = MaxReal
!        FormBlock
!        Pp$ = NCSub.StartLabel(cld[3])
!        Qq$ = NCSub.EndLabel(cld[3])
!        call RealToStr(Uu$, cld[8]*2)
!        call RealToStr(Ww$, cld[7])
!        call RealToStr(Feed$, Feed_)
!        ! G71/72 P_ Q_ U_ W_ F_ S_ T_
!        Output OutStr$ + " P" + Pp$ + " Q" + Qq$ + " U" + Uu$ + " W" + Ww$ + " F" + Feed$
!        IsCycleGeometry = 1
!        NCSub.Output(cld[3])
!        IsCycleGeometry = 0
!        if CLD[12]=1 then begin ! IsFinishPass
!          OutBlock
!          Cycle = 70; Cycle@ = MaxReal
!          FormBlock
!          Output OutStr$ + " P" + Pp$ + " Q" + Qq$
!        end
      end
      402: begin ! Lathe grooving (G74/G75)
        Input "Lathe grooving cycle not supported, use long hand format instead!"
        Output "(Cycle not supported)"
        Output "M0"
!        OutBlock
!        if cld[3]=0 then Cycle = 75
!                    else Cycle = 74
!        !Cycle@ = MaxReal
!        !FormBlock
!        !Rr$ = str(cld[?])
!        ! G74/75 R_
!        !Output OutStr$ + " R" + Rr$
!        Cycle@ = MaxReal
!        FormBlock
!        if Cycle=74 then begin
!          call RealToStr(Uu$, cld[4]*2)
!          call RealToStr(Ww$, cld[5])
!          call RealToStr(Pp$, cld[6])
!          call RealToStr(Qq$, cld[7])
!        end else begin
!          call RealToStr(Uu$, cld[5]*2)
!          call RealToStr(Ww$, cld[4])
!          call RealToStr(Pp$, cld[7])
!          call RealToStr(Qq$, cld[6])
!        end
!        call RealToStr(Rr$, cld[8])
!        call RealToStr(Feed$, Feed_)
!        ! G74/75 U_ W_ P_ Q_ R_ F_
!        Output OutStr$ + " U" + Uu$ + " W" + Ww$ + " P" + Pp$ + " Q" + Qq$ + " R" + Rr$ + " F" + Feed$
!        Interp_ = MaxReal; Interp_@ = Interp_
      end
      403: begin ! Lathe thread (G76)
        OutBlock
!        G76 P~ Z~ I~ J~ R~ K~ Q~ H~ E~ L
        Cycle = 76; Cycle@ = MaxReal
        Pp$ = str(cld[23]) ! Thread pitch
        Z = cld[8]; Z@ = MaxReal ! The final position of threads
        call RealToStr(Ii$, cld[9]*2 - X) ! Outer diameter
        call RealToStr(Jj$, cld[27]*2) ! First cut depth
        call RealToStr(Kk$, cld[18]*2) ! Full thread depth
        if cld[25]=1 then
          Rr$ = "1.0"     ! Constant depth mode
        else
          Rr$ = "2.0"     ! Constant area mode
        if cld[24]=0 then
          Qq$ = "0"       ! Plunge angle 0 for radial mode
        else
          call RealToStr(Qq$, cld[20]) ! Plunge angle
        call RealToStr(Hh$, cld[30]) ! Number of spring passes
        if cld[14]<>0 then begin
          call RealToStr(Ee$, cld[14]) ! Length of exit from thread
          Ee$ = " E" + Ee$
          Ll$ = " L2" ! Exit at the end
        end
        FormBlock
        Output OutStr$ + " P" + Pp$ + " I" + Ii$ + " J" + Jj$ + " R" + Rr$ + " K" + Kk$ + " Q" + Qq$ + " H" + Hh$ + Ee$ + Ll$
      end
      163, 81: begin ! Lathe drill G81
        OutBlock
        if cld[8]=0 then GFeed = 95 ! mm/rev
                    else GFeed = 94 ! mm/min
        Cycle = 81; Cycle@ = MaxReal
        FormBlock
        call RealToStr(Zz$, cld[3]-cld[4]) ! Bottom level
        call RealToStr(Rr$, cld[5])        ! Return level
        if cld[7]<>0 then begin
          call RealToStr(Pp$, cld[7]) ! Dwell time
          Pp$ = " P" + Pp$;
        end
        call RealToStr(Feed$, cld[9]); Feed$ = " F" + Feed$
        Output OutStr$ + " Z" + Zz$ + " R" + Rr$ + Pp$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end
      153, 288: begin ! Lathe deep drilling G73, G83
        OutBlock
        if cld[8]=0 then GFeed = 95 ! mm/rev
                    else GFeed = 94 ! mm/min
        if cld[2]=288 then ! Chip breaking
          Cycle = 73
        else               ! Chip removing
          Cycle = 83
        Cycle@ = MaxReal
        FormBlock
        call RealToStr(Zz$, cld[3]-cld[4]) ! Bottom level
        call RealToStr(Qq$, cld[11])       ! Depth step
        call RealToStr(Rr$, cld[5])        ! Return level
        call RealToStr(Feed$, cld[9]); Feed$ = " F" + Feed$
        Output OutStr$ + " Z" + Zz$ + " Q" + Qq$ + " R" + Rr$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end
      168: begin ! Lathe Tapping G84, G33.1
        OutBlock
!        ! Floating tapping
!        Cycle = 84; Cycle@ = MaxReal
!        if cld[8]=0 then GFeed = 95 ! mm/rev
!                    else GFeed = 94 ! mm/min
!        call RealToStr(Zz$, cld[3]-cld[4])
!        call RealToStr(Rr$, cld[5])
!        call RealToStr(Feed$, cld[9]); Feed$ = " F" + Feed$
!        FormBlock
!        Output OutStr$ + " Z" + Zz$ + " R" + Rr$ + Feed$
        ! Rigid tapping
        Cycle = 33.1; Cycle@ = MaxReal
        call RealToStr(Zz$, cld[3]-cld[4])
        call RealToStr(Feed$, cld[9]); Feed$ = " K" + Feed$
        FormBlock
        Output OutStr$ + " Z" + Zz$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end
      481,482,485,486,487,488,489: begin ! Driving tool drilling G81-G89
        OutBlock
        Cycle = cld[2]-400; Cycle@ = MaxReal
        call RealToStr(Zz$, Z-cld[8]); Zz$ = " Z" + Zz$
        call RealToStr(Rr$, Z-cld[6]); Rr$ = " R" + Rr$
        if cld[15]>0 then begin
          call RealToStr(Pp$, cld[15]); Pp$ = " P" + Pp$
        end;
        if cld[9]=0 then GFeed = 95 ! mm/rev
                    else GFeed = 94 ! mm/min
        call RealToStr(Feed$, cld[10]); Feed$ = " F" + Feed$
        FormBlock
        Output OutStr$ + Zz$ + Rr$ + Pp$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end;
      473,483: begin ! Driving tool deep drilling G73/G83
        OutBlock
        Cycle = cld[2]-400; Cycle@ = MaxReal
        call RealToStr(Zz$, Z-cld[8]); Zz$ = " Z" + Zz$
        call RealToStr(Rr$, Z-cld[6]); Rr$ = " R" + Rr$
        if cld[15]>0 then begin
          call RealToStr(Pp$, cld[15]); Pp$ = " P" + Pp$
        end;
        call RealToStr(Qq$, cld[17]); Qq$ = " Q" + Qq$
        if cld[9]=0 then GFeed = 95 ! mm/rev
                    else GFeed = 94 ! mm/min
        call RealToStr(Feed$, cld[10]); Feed$ = " F" + Feed$
        FormBlock
        Output OutStr$ + Zz$ + Rr$ + Pp$ + Qq$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end;
      484: begin ! Driving tool tapping G84/G33.1
        OutBlock
!        ! Floating tapping
!        Cycle = 84; Cycle@ = MaxReal
!        call RealToStr(Rr$, Z-cld[6]); Rr$ = " R" + Rr$
!        if cld[15]>0 then begin
!          call RealToStr(Pp$, cld[15])
!          Pp$ = " P" + Pp$
!        end
!        GFeed = 95 ! mm/rev
!        call RealToStr(Feed$, cld[17]); Feed$ = " F" + Feed$
        ! Rigid tapping
        Cycle = 33.1; Cycle@ = MaxReal
        call RealToStr(Zz$, Z-cld[8]); Zz$ = " Z" + Zz$
        call RealToStr(Feed$, cld[17]); Feed$ = " K" + Feed$
        FormBlock
        Output OutStr$ + Zz$ + Rr$ + Pp$ + Feed$
        Interp_ = MaxReal; Interp_@ = Interp_
      end;
      490: begin ! ThreadMill
        Input "Thread milling cycle not supported, use long hand format instead!"
        Output "(Cycle not supported)"
        Output "M0"
      end;
      491: begin ! Pocketing
        Input "Hole pocketing cycle not supported, use long hand format instead!"
        Output "(Cycle not supported)"
        Output "M0"
      end;
    end
  end
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Fedrat</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Fedrat
  if cld[1]>9999 then begin
    Interp_ = 0
  end else begin
    if cld[1]>0 then
      Feed_ = cld[1]
    !if cld[3]=315 then GFeed = 94 ! MMPM
                  !else GFeed = 95 ! MMPR
    Interp_ = 1
             end
  end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Fini</CLDCommandID>
            <Handlers>
                <Mask>
                    <Enabled>False</Enabled>
                    <OutPrevious>False</OutPrevious>
                    <PollRegs>False</PollRegs>
                    <OutBlock>True</OutBlock>
                    <Mask>
                        <![CDATA[M[30]
]]>
                    </Mask>
                </Mask>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Fini
  OutBlock
  Output "M30"
  Output "%"
  Output ""
  
  NCSub.Output
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>From</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program From
  X = 2*cld.X; X@ = X
  Y = cld.Y; Y@ = Y
  Z = cld.Z; Z@ = Z
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>GoHome</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program GoHome  
                        Outblock
   if OperationIsLathe>0 then begin ! Lathe
     end else begin
     M=  92 !; M@= maxreal
     Outblock
     M1= 105 ; M1@= maxreal
     end
     Outblock


  OutStr$ = ""
  if Cmd.Ptr["Axes(AxisXPos)"]<>0 then
    U@ = MaxReal
  if Cmd.Ptr["Axes(AxisZPos)"]<>0 then
    V@ = MaxReal
  if (U<>U@) or (V<>V@) then begin
    GFunc = 28; GFunc@ = MaxReal
    OutBlock
  end
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Insert</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Insert  
  Output CLData$
end

]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Interpolation</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>False</Enabled>
                    <ProgramCode>
                        <![CDATA[program Interpolation
!  if cld[2]=9021 then begin ! Polar
!    if cld[1]=71 then begin
!    end else begin
!    end;
!  end else if cld[2]=9022 then begin ! Cylindrical
!    if cld[1]=71 then begin
!    end else begin
!    end;
!  end
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Loadtl</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program LoadTl
  ss$: String
  LCS@ = MaxReal
  Descom_R_Hta=40  ; Descom_R_Hta@=MaxReal
  Cancel_Can_Cyc=80  ;Cancel_Can_Cyc@=MaxReal
  OutBlock
    ! Plane@=MaxReal
    ! OutBlock
  Tool = CLD.N; Tool@ = MaxReal
  ToolCor = abs(CLD.M); ToolCor@ = MaxReal
  FormBlock
  Replace(OutStr$, " ", "")
  if CLDFile[CLDFile.CurrentFile].Cmd[CLDFile.CurrentCmd+1].Code=CodeOfCmd("Comment") then begin
    ss$ = CLDFile[CLDFile.CurrentFile].Cmd[CLDFile.CurrentCmd+1].Data
    Replace(ss$, "@", "")
    OutStr$ = OutStr$ !+ " (" + ss$ + ")"
  end
  Output "G43.1"
  Output "G28 U0"
  Output "G28 V0"
  Output OutStr$
  Output "G0 Y0"

  Interp_ = MaxReal; Interp_@ = Interp_
  X = MaxReal; X@ = X
  Z = MaxReal; Z@ = Z
  Y = 0; Y@ = Y
  Diametro=CLD.D ; Diametro@=Diametro
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>MultiGOTO</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program MultiGoto
Changed: Integer
Changed=0
  if (Interp_<>0) and (Interp_<>1) then begin
    Interp_ = 1; Interp_@=Interp_
  end
  if GMA["AxisXPos"].OutFlag>0 then begin
    X = 2*GMA["AxisXPos"].Vn
    XT_ = X
  end
  if GMA["AxisYPos"].OutFlag>0 then begin
    Y = GMA["AxisYPos"].Vn; Y@ = Y
    YT_ = Y
  end
  if GMA["AxisZPos"].OutFlag>0 then begin
    Z = GMA["AxisZPos"].Vn
    ZT_ = Z
  end
!  if OperationIsLathe>0 then
!    Rgs[ncY[chi]]@ = Rgs[ncY[chi]]
  if (GMA["AxisC1Pos"].OutFlag>0)  then begin
    C = GMA["AxisC1Pos"].Vn
    while C >= 360 do
      C = C-360
    while C < 0 do
      C = C+360
    Changed = Changed + 1
  end

  if Changed>0 then
    OutBlock

  Changed = 0
  if (X<>X@) or (Z<>Z@) then
    OutBlock
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>OpSkip</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>False</Enabled>
                    <ProgramCode>
                        <![CDATA[program OpSkip  

end

]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>OpStop</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program OpStop  
  OutBlock
  Output "M1"
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Origin</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Origin  
  if Cmd.Int["OriginType"]=0 then begin !G54-G59
    LCS = Cmd.Int["CSNumber"]
    LCS@ = LCS
  end else begin                        !G92 X Y Z
    OutBlock
    X = Cmd.Flt["MCS.OriginPoint.X"]
    Y = Cmd.Flt["MCS.OriginPoint.Y"]
    Z = Cmd.Flt["MCS.OriginPoint.Z"]
    X@ = 0; Y@ = 0; Z@ = 0
    GFunc = 92; GFunc@ = MaxReal
    OutBlock
  end
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>PartNo</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program PartNo
  ! Initialization of global variables
  MaxReal = 99999.999
  XT_=0
  YT_=0
  ZT_=0
  IsCycleGeometry = 0
  OperationIsLathe = 1
  LCS = 54; LCS@ = LCS
  Interp_ = 100;  Interp_@ = 100
  !Plane  = 18; Plane@ = Plane
  KorEcv = 40; KorEcv@ = 40
  GFeed = 94; GFeed@=GFeed
  X = MaxReal; X@ = X
  Y = 0; Y@ = Y
  Z = MaxReal; Z@ = Z
  C = MaxReal; C@ = C
  BlockN = 0; BlockN@ = BlockN

  ! Header output
  Output "%"
   Output "(Universidad Santo Tomas)"
  ONum = 1
  call GetProgramID(ONum)
  ONum@ = MaxReal
  MainONum = ONum
  FormBlock
  Output OutStr$  + " (" + CLData$ + ")"
  !Output "G18 G21 G40 G80"
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>PhysicGOTO</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program PhysicGOTO
!  OutBlock
  if GMA["AxisXPos"].OutFlag>0 then begin
    X = 2*GMA["AxisXPos"].Vn; X@ = MaxReal
    GFunc = 53; GFunc@ = MaxReal
  end
  if GMA["AxisZPos"].OutFlag>0 then begin
    Z = GMA["AxisZPos"].Vn; Z@ = MaxReal
    GFunc = 53; GFunc@ = MaxReal
  end
  if (GFunc=53) and (GFunc@<>GFunc) then
    OutBlock
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Plane</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Plane

  case cld[1] of
    33: begin
     if OperationIsLathe>0 then begin ! Lathe
     Plane = 18 ; Plane@= maxreal!XY
     end !else begin
     !Plane=  17!; Plane@= maxreal
     !end
     Outblock
     end
    37: begin
    Plane = 19!; Plane@=maxreal!YZ
    Outblock
           end
    41: begin
    Plane = 17! ; Plane@=maxreal!ZX
   Outblock
   end
          133: begin
   Plane= 17  ; Plane@= maxreal
    Outblock

   end
  end
  Plane@ = Plane
 end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>PPFun</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program PPFun

Valor12=CLD[26]

  if cld[1]=50 then
  begin ! StartSub
    if IsCycleGeometry>0 then
      begin
      BlockN = BlockN + 100
      NCSub.StartLabel(cld[2]) = str(BlockN)
      X=MaxReal; X@=X
      Z=MaxReal; Z@=Z
      Interp_ = MaxReal; Interp_@ = Interp_
      end
    else
      begin
      OutBlock
      ONum = MainONum + cld[2]; ONum@ = MaxReal
      NCSub.Name(cld[2]) = str(ONum)
      while Len(NCSub.Name(cld[2]))<5 do
        NCSub.Name(cld[2]) = "0" + NCSub.Name(cld[2])
      NCSub.Name(cld[2]) = "O" + NCSub.Name(cld[2]) + ".nc"
      !ChangeNCFile NCSub.Name(cld[2])
      Output ""
      Output "%"
      OutBlock
      Interp_ = 0; Interp_@ = MaxReal
      end
  end
  else if cld[1]=51 then
    begin ! EndSub
    if IsCycleGeometry>0 then
      begin
      BlockN = BlockN + 100
      NCSub.EndLabel(cld[2]) = str(BlockN)
      OutBlock
      Interp_ = MaxReal; Interp_@ = Interp_
      end
      else
        begin
      OutBlock
      Output "M99"
      Output "%"
      Output ""
      !ChangeNCFile MainNCFile
      !Interp_ = 0; Interp_@ = MaxReal
        end
    end
  else if cld[1]=52 then
    begin ! CallSub
    OutBlock
    Output "M98 P" + Str(MainONum + cld[2])
    Interp_ = 0; Interp_@ = MaxReal
    end
    else if cld[1]=58 then
    begin ! TechInfo
    OperationIsLathe = CLD[60] - 1 ! 0 - Milling, 1 - Lathe, 2 - Auxiliary
    end
    else if cld[1]=59 then
      begin ! EndTechInfo
    ! Spaces between operations
    if Cmd.Int["PPFun(EndTechInfo).Enabled"]>0 then
      Output ""
    end
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>PPrint</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program PPrint
  Output "(" + CLData$ + ")"
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Rapid</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Rapid
  Interp_ = 0
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>SingleThread</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program SingleThread
  Interp_ = 33
  if CLD.IsCount>0 then KThreadStep = 1/CLD.Value
                   else KThreadStep = CLD.Value
  KThreadStep@ = MaxReal
  Q = CLD.StartAngle; Q@ = 0
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Spindl</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Spindl
            case cld[1] of
    71: begin ! On
      if OperationIsLathe>0 then begin ! Lathe
        GSp = 99; GSp@ = MaxReal
      end else begin                   ! Milling
        GSp = 98; GSp@ = MaxReal
       end
      OutBlock
      case cld[4] of
      0: begin ! RPM
      M = 05; M@= maxreal !Apagar husillo
      Outblock
      M= 90; M@= maxreal
      Outblock
      M= 105; M@= maxreal
      Outblock
        GSp = 50; GSp@ = maxreal ! MaxRPM
          S_3 = (cld[2]+500); S_3@ = MaxReal
         OutBlock
            CSS_RPM=97 ; CSS_RPM@=MaxReal
            S_3 = cld[2]; S_3@=MaxReal ! Spindle speed
               Msp=103 ; Msp@= MaxReal  ! Milling
          OutBlock
        end
        2: begin ! CSS
    GSp = 50; GSp@ = maxreal ! MaxRPM
          S_1 = cld[2]; S_1@ = MaxReal
         OutBlock
            CSS_RPM=96 ; CSS_RPM@=MaxReal
            S_1 = cld[5]; S_1@=MaxReal ! Spindle speed
               Msp=3 ; Msp@= MaxReal  ! Milling
          OutBlock
        end
 end
 end
 end
    end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Stop</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Stop
  OutBlock
  Output "M0"
end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
        <CLDCommand>
            <CLDCommandID>Structure</CLDCommandID>
            <Handlers>
                <Program>
                    <Enabled>True</Enabled>
                    <ProgramCode>
                        <![CDATA[program Structure

end
]]>
                    </ProgramCode>
                </Program>
            </Handlers>
        </CLDCommand>
    </CLDCommandsHandlers>
    <SubroutineList>
        <Subroutine>
            <Name>Filter</Name>
            <ProgramCode>
                <![CDATA[sub Filter(S: String)

subend
]]>
            </ProgramCode>
        </Subroutine>
        <Subroutine>
            <Name>GetProgramID</Name>
            <ProgramCode>
                <![CDATA[sub GetProgramID(PrgID: Integer)
  ! Get number of NC-program from string name
  i: Integer
  j: Integer
  c$: String
  s$: String

  i = Len(NCName$)
  j = 0
  s$ = ""
  while i>0 do begin
    c$ = Copy(NCName$, i, 1)
    case Ord(c$) of
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57: begin
        j = j + 1
        s$ = c$ + s$
        if (j>=5) then
          i = 1
      end
      else begin
        if j>0 then
          i = 1
      end
    end
    i = i - 1
  end
  if j>0 then begin
    PrgID = Num(s$)
  end
subend
]]>
            </ProgramCode>
        </Subroutine>
        <Subroutine>
            <Name>RealToStr</Name>
            <ProgramCode>
                <![CDATA[sub RealToStr(ResStr: String, Value: Real)
  ResStr = Str(Round(Value, 4))
  if abs(Value-Round(Value))<0.000001 then
    ResStr = ResStr + "."
subend
]]>
            </ProgramCode>
        </Subroutine>
        <Subroutine>
            <Name>RealToStr2</Name>
            <ProgramCode>
                <![CDATA[sub RealToStr2(ResStr: String, Value: Real)
  ResStr = Str(Round(Value, 4))
subend
]]>
            </ProgramCode>
        </Subroutine>
    </SubroutineList>
    <Machine>
        <MachineAxes>
            <MachineAxis>
                <Name>AxisXPos</Name>
                <RegisterID>X</RegisterID>
                <AxisKind>Linear</AxisKind>
                <ValueKind>Absolute</ValueKind>
                <AngleValueKind>Unbounded</AngleValueKind>
                <IsDiscrete>False</IsDiscrete>
                <DiscreteStep>0</DiscreteStep>
                <IsBounded>False</IsBounded>
                <MinBound>0</MinBound>
                <MaxBound>0</MaxBound>
            </MachineAxis>
            <MachineAxis>
                <Name>AxisZPos</Name>
                <RegisterID>Z</RegisterID>
                <AxisKind>Linear</AxisKind>
                <ValueKind>Absolute</ValueKind>
                <AngleValueKind>Unbounded</AngleValueKind>
                <IsDiscrete>False</IsDiscrete>
                <DiscreteStep>0</DiscreteStep>
                <IsBounded>False</IsBounded>
                <MinBound>0</MinBound>
                <MaxBound>0</MaxBound>
            </MachineAxis>
            <MachineAxis>
                <Name>AxisYPos</Name>
                <RegisterID>Y</RegisterID>
                <AxisKind>Linear</AxisKind>
                <ValueKind>Absolute</ValueKind>
                <AngleValueKind>Unbounded</AngleValueKind>
                <IsDiscrete>False</IsDiscrete>
                <DiscreteStep>0</DiscreteStep>
                <IsBounded>False</IsBounded>
                <MinBound>0</MinBound>
                <MaxBound>0</MaxBound>
            </MachineAxis>
            <MachineAxis>
                <Name>AxisCPos</Name>
                <RegisterID>C</RegisterID>
                <AxisKind>Rotary</AxisKind>
                <ValueKind>Absolute</ValueKind>
                <AngleValueKind>Unbounded</AngleValueKind>
                <IsDiscrete>False</IsDiscrete>
                <DiscreteStep>0</DiscreteStep>
                <IsBounded>False</IsBounded>
                <MinBound>0</MinBound>
                <MaxBound>0</MaxBound>
            </MachineAxis>
        </MachineAxes>
    </Machine>
    <TransliterationTable>
        <ActiveLanguage/>
        <Languages>
            <Language>
                <Name>Russian</Name>
                <Chars>
                    <Char>
                        <ID>1</ID>
                        <Latin>а</Latin>
                        <Local>а</Local>
                    </Char>
                    <Char>
                        <ID>35</ID>
                        <Latin/>
                        <Local>)</Local>
                    </Char>
                    <Char>
                        <ID>36</ID>
                        <Latin/>
                        <Local>(</Local>
                    </Char>
                    <Char>
                        <ID>2</ID>
                        <Latin>b</Latin>
                        <Local>б</Local>
                    </Char>
                    <Char>
                        <ID>3</ID>
                        <Latin>v</Latin>
                        <Local>в</Local>
                    </Char>
                    <Char>
                        <ID>4</ID>
                        <Latin>g</Latin>
                        <Local>г</Local>
                    </Char>
                    <Char>
                        <ID>5</ID>
                        <Latin>d</Latin>
                        <Local>д</Local>
                    </Char>
                    <Char>
                        <ID>6</ID>
                        <Latin>e</Latin>
                        <Local>е</Local>
                    </Char>
                    <Char>
                        <ID>7</ID>
                        <Latin>yo</Latin>
                        <Local>ё</Local>
                    </Char>
                    <Char>
                        <ID>8</ID>
                        <Latin>zh</Latin>
                        <Local>ж</Local>
                    </Char>
                    <Char>
                        <ID>9</ID>
                        <Latin>z</Latin>
                        <Local>з</Local>
                    </Char>
                    <Char>
                        <ID>10</ID>
                        <Latin>i</Latin>
                        <Local>и</Local>
                    </Char>
                    <Char>
                        <ID>11</ID>
                        <Latin>j</Latin>
                        <Local>й</Local>
                    </Char>
                    <Char>
                        <ID>12</ID>
                        <Latin>k</Latin>
                        <Local>к</Local>
                    </Char>
                    <Char>
                        <ID>13</ID>
                        <Latin>l</Latin>
                        <Local>л</Local>
                    </Char>
                    <Char>
                        <ID>14</ID>
                        <Latin>m</Latin>
                        <Local>м</Local>
                    </Char>
                    <Char>
                        <ID>15</ID>
                        <Latin>n</Latin>
                        <Local>н</Local>
                    </Char>
                    <Char>
                        <ID>16</ID>
                        <Latin>о</Latin>
                        <Local>о</Local>
                    </Char>
                    <Char>
                        <ID>17</ID>
                        <Latin>p</Latin>
                        <Local>п</Local>
                    </Char>
                    <Char>
                        <ID>18</ID>
                        <Latin>r</Latin>
                        <Local>р</Local>
                    </Char>
                    <Char>
                        <ID>19</ID>
                        <Latin>s</Latin>
                        <Local>с</Local>
                    </Char>
                    <Char>
                        <ID>20</ID>
                        <Latin>t</Latin>
                        <Local>т</Local>
                    </Char>
                    <Char>
                        <ID>21</ID>
                        <Latin>u</Latin>
                        <Local>у</Local>
                    </Char>
                    <Char>
                        <ID>22</ID>
                        <Latin>f</Latin>
                        <Local>ф</Local>
                    </Char>
                    <Char>
                        <ID>23</ID>
                        <Latin>x</Latin>
                        <Local>х</Local>
                    </Char>
                    <Char>
                        <ID>24</ID>
                        <Latin>cz</Latin>
                        <Local>ц</Local>
                    </Char>
                    <Char>
                        <ID>25</ID>
                        <Latin>ch</Latin>
                        <Local>ч</Local>
                    </Char>
                    <Char>
                        <ID>26</ID>
                        <Latin>sh</Latin>
                        <Local>ш</Local>
                    </Char>
                    <Char>
                        <ID>27</ID>
                        <Latin>shh</Latin>
                        <Local>щ</Local>
                    </Char>
                    <Char>
                        <ID>28</ID>
                        <Latin/>
                        <Local>ъ</Local>
                    </Char>
                    <Char>
                        <ID>29</ID>
                        <Latin>y</Latin>
                        <Local>ы</Local>
                    </Char>
                    <Char>
                        <ID>30</ID>
                        <Latin/>
                        <Local>ь</Local>
                    </Char>
                    <Char>
                        <ID>31</ID>
                        <Latin>e</Latin>
                        <Local>э</Local>
                    </Char>
                    <Char>
                        <ID>32</ID>
                        <Latin>yu</Latin>
                        <Local>ю</Local>
                    </Char>
                    <Char>
                        <ID>33</ID>
                        <Latin>ya</Latin>
                        <Local>я</Local>
                    </Char>
                </Chars>
            </Language>
        </Languages>
    </TransliterationTable>
    <ReinterpNCData>
        <GFuncs>
            <Interpolation>
                <Positioning>G00</Positioning>
                <LinearInterp>G01</LinearInterp>
                <CircularInterpCW>G02</CircularInterpCW>
                <CircularInterpCCW>G03</CircularInterpCCW>
                <Thread>G33</Thread>
                <SingleDirectionPositioning>G60</SingleDirectionPositioning>
            </Interpolation>
            <Plane>
                <XYPlane>G17</XYPlane>
                <ZXPlane>G18</ZXPlane>
                <YZPlane>G19</YZPlane>
                <YXPlane/>
                <XZPlane/>
                <ZYPlane/>
            </Plane>
            <Conversion>
                <Inch>G20</Inch>
                <Metric>G21</Metric>
            </Conversion>
            <StoredStrokeCheck>
                <On>G22</On>
                <Off>G23</Off>
            </StoredStrokeCheck>
            <RefPos>
                <ReturnCheck>G27</ReturnCheck>
                <ReturnTo>G28</ReturnTo>
                <ReturnFrom>G29</ReturnFrom>
                <OtherRefPosReturn>G30</OtherRefPosReturn>
                <Skip>G31</Skip>
            </RefPos>
            <CutterCompens>
                <Cancel>G40</Cancel>
                <Left>G41</Left>
                <Right>G42</Right>
            </CutterCompens>
            <ToolLenCompens>
                <Plus>G43</Plus>
                <Minus>G44</Minus>
                <Cancel>G49</Cancel>
            </ToolLenCompens>
            <ToolOffset>
                <Increase>G45</Increase>
                <Decrease>G46</Decrease>
                <DoubleIncrease>G47</DoubleIncrease>
                <DoubleDecrease>G48</DoubleDecrease>
            </ToolOffset>
            <Scaling>
                <Off>G50</Off>
                <On>G51</On>
            </Scaling>
            <CSSelection>
                <Workpiece1>G54</Workpiece1>
                <Workpiece2>G55</Workpiece2>
                <Workpiece3>G56</Workpiece3>
                <Workpiece4>G57</Workpiece4>
                <Workpiece5>G58</Workpiece5>
                <Workpiece6>G59</Workpiece6>
            </CSSelection>
            <Modes>
                <ExactStop>G61</ExactStop>
                <AutoCornerOverride>G62</AutoCornerOverride>
                <Tapping>G63</Tapping>
                <Cutting>G64</Cutting>
            </Modes>
            <Macro>
                <Call>G65</Call>
                <ModalCall>G66</ModalCall>
                <ModalCallCancel>G67</ModalCallCancel>
            </Macro>
            <Cycles>
                <CycleParams>
                    <ReturnPoint/>
                    <HoleLevel/>
                    <Feedrate/>
                    <CutInStep/>
                    <PauseAtTop/>
                    <WorkpieceLevel/>
                    <SafePlaneLevel/>
                    <PauseAtBottom/>
                    <SafePlaneReturnFeed/>
                    <Degression/>
                    <ChipRemoveRate/>
                    <MinCutInStep/>
                    <ToolWithdrawal/>
                    <SpindleShift/>
                    <SpindleAngle/>
                    <LeadIn/>
                    <LastLeadIn/>
                    <ChipBreakingStep/>
                    <NumberOfRepeats/>
                </CycleParams>
                <PeckDrilling>G73</PeckDrilling>
                <CounterTapping>G74</CounterTapping>
                <FineBoring>G76</FineBoring>
                <CycleCancel>G80</CycleCancel>
                <DrillingSpotBoring>G81</DrillingSpotBoring>
                <DrillingCounterBoring>G82</DrillingCounterBoring>
                <PeckDrilling2>G83</PeckDrilling2>
                <Tapping>G84</Tapping>
                <Boring1>G85</Boring1>
                <Boring2>G86</Boring2>
                <Boring3>G87</Boring3>
                <Boring4>G88</Boring4>
                <Boring5>G89</Boring5>
                <CycleDefinition/>
                <CycleCall/>
            </Cycles>
            <FrameOfReference>
                <Absolute>G90</Absolute>
                <Incremental>G91</Incremental>
            </FrameOfReference>
            <Feed>
                <PerMinute>G98</PerMinute>
                <PerRevolution>G99</PerRevolution>
            </Feed>
            <Speed>
                <CSS>G96</CSS>
                <CSSCancel>G97</CSSCancel>
            </Speed>
            <CannedCycle>
                <ReturnToInitialPoint>G98</ReturnToInitialPoint>
                <ReturnToRPoint>G99</ReturnToRPoint>
            </CannedCycle>
            <Other>
                <Dwell>G04</Dwell>
                <HighSpeed>G05</HighSpeed>
                <CylInterp>G07</CylInterp>
                <ExactStop>G09</ExactStop>
                <DataSetting>G10</DataSetting>
                <ProgrammingOfAbsZero>G92</ProgrammingOfAbsZero>
            </Other>
        </GFuncs>
        <MFuncs>
            <Spindle>
                <CW>M03</CW>
                <CCW>M04</CCW>
                <Stop>M05</Stop>
            </Spindle>
            <Coolant>
                <On>M08</On>
                <Off>M09</Off>
            </Coolant>
            <Other>
                <ProgramStop>M00</ProgramStop>
                <OptionalStop>M01</OptionalStop>
                <EndOfProgram>M02</EndOfProgram>
                <ToolChange>M06</ToolChange>
                <EndWithReturn>M30</EndWithReturn>
                <SubCall>M98</SubCall>
                <EndSub>M99</EndSub>
            </Other>
        </MFuncs>
        <Identifiers>
            <Coordinates>
                <AbsoluteX>X</AbsoluteX>
                <AbsoluteY>Y</AbsoluteY>
                <AbsoluteZ>Z</AbsoluteZ>
                <IncrementalX/>
                <IncrementalY/>
                <IncrementalZ/>
            </Coordinates>
            <Circle>
                <CenterCoordinates>
                    <AbsoluteX>I</AbsoluteX>
                    <AbsoluteY>J</AbsoluteY>
                    <AbsoluteZ>K</AbsoluteZ>
                    <IncrementalX/>
                    <IncrementalY/>
                    <IncrementalZ/>
                </CenterCoordinates>
                <Radius>R</Radius>
                <ArcAngle>A</ArcAngle>
                <Center/>
                <EndPoint/>
                <ToolMotionByRadius/>
                <ChamferOfCorner/>
                <RoundingOfCorner/>
            </Circle>
            <Correctors>
                <LengthNumber>L</LengthNumber>
                <RadiusNumber>D</RadiusNumber>
            </Correctors>
            <Other>
                <BlockNumeration>N</BlockNumeration>
                <Dwell>X</Dwell>
                <FeedAssignment>F</FeedAssignment>
                <SpindleRotations>S</SpindleRotations>
                <ToolNumber>T</ToolNumber>
                <RepeatNumber/>
                <SubID>P</SubID>
                <SafeZLevel/>
            </Other>
        </Identifiers>
        <Additional>
            <OpenComment>"(","[","(*","!","%"</OpenComment>
            <CloseComment>")","]","*)","",""</CloseComment>
            <Delimiters>" ","_",";"</Delimiters>
        </Additional>
    </ReinterpNCData>
</STPostprocessor>
