we was asked to make a same postprocessor than the one customer provide , but don't know what is the software name of the postprocessor. I think the genius here may help us on it.


[MAIN PART OF THE CFF]

[MACHINE PROPERTIES]
name=Dynatorch
model=True Hole support
subroutines=0
comment_indicator=//
Machine Type=0
// Machine Types: 0 = plasma, 1 = oxyfuel, 2 = waterjet, 3 = laser, 4 = router

[PROCESS NAMES]
CUT1=Plasma
CUT2=Oxyfuel
SCRIBE1=Plasma Marking
SCRIBE2=Scribe Tool
PUNCH1=Plasma CenterMarking

[Setup Notes]
Mention any special settings in the CFG or xls files that are needed.
Absolute
Extended Precision
Inch
Line Numbers (none)
Prekerfing off
Any needed xls columns and purpose/description

[REVISION NUMBER]
$Revision: 1.16 $

[REVISION NOTES]
1.0 Original version fromn Generic+ 1.12, Dynatorch 1.9
1.1 Add G60/G61/G62 support and add Scribe Tool.
1.2 Add output of material, thickness, class, comment. Unhide Feedrate setting
1.3 Clean up some output of HPR codes on non-HPR machines
1.4 Fix phrases for translation
1.5 Use G54 for torch offset, G55 for marking offset
1.6 Move G60 to after G25 when switching from marking to cutting
1.7 Make sure G60/G61/G62 codes are before the process on motions
1.8 Fix Force OffUp typo #39620
1.9 Add dwell after scribe tool G23 #42361
1.10 Add M66/M67 Exhaust Fan commands #42325
1.11 Add cancel of M27P arc off distance code.
1.12 Testing missed a situation on the M27 P
1.13 Add Oxyfuel support
1.14 Make the scribe tool codes more configurable #43570
1.15 Add M48/M49 before, after true hole holes #39072
1.16 Rewrite stop code handling. Move Prepierce stop control to post options. #45501

[MAIN]
// 0 => Use G41/G42/G40 on lines by themselves
// 1 => Use G41/G42 with leadin move, G40 with leadout
$CONFIGUSEKERFONLEADINMOVE:='NSETTING(CFF Options,Kerf ON Location)
$CONFIGUSEKERFONLEADOUTMOVE:='NSETTING(CFF Options,Kerf OFF Location)

// 0 => G40 on an arc move is acceptable
// 1 => Delay G40 to the next rapid if still in CW/CCW mode
$CONFIGNOG40ONARC:='NSETTING(CFF Options,Delay Kerf OFF on Arc)

// 0 => Use K value with kerf amount
// 1 => Use D value with G41/G42
// 2 => Don't include anything with G41/G42
$CONFIGUSEDVALUE:='NSETTING(CFF Options,Kerf Size)
$DVALUE:='NSETTING(CFF Options,Kerf D Value)

// 0 => Use feedrate on a line by itself
// 1 => Use feedrate on the leadin motion line
// 2 => Use no feedrates
$CONFIGFEEDRATEONMOVE:='NSETTING(CFF Options,Feedrate Location)

// 0 => Output Feedrate with each process start
// 1 => Suppress Feedrate if it hasn't changed
// 2 => Feedrate on every motion
$CONFIGSUPRESSFEEDRATE:='NSETTING(CFF Options,Modal Feedrates)

// 0 => No G61/G64 codes
// 1 => Include G61/G64 exact stop codes based on angle change at end of motion
// 2 => Use G09 for exact stop check on each occurance
$CONFIGUSEEXACTSTOPCHECK:='NSETTING(CFF Options,Exact Stop Check)
$EXACTSTOPANGLE:='NSETTING(CFF Options,Exact Stop Angle)

// 0 => Start of Profile line numbers are on lines by themselves
// 1 => Start of Profile line numbers are on the process on rapid motion line
$CONFIGSOPLINENOLOCATION:='NSETTING(CFF Options,Profile Line Numbers)

// 0 => Include G00/G01/G02/G03 on every motion line
// 1 => Suppress repeated G00/G01/G02/G03 codes
$CONFIGUSEMODALMOTIONCODES:='NSETTING(CFF Options,G Codes Modal)

// 0 => Include X and Y on every motion line
// 1 => Suppress duplicate X, Y codes
// 2 => Include X and Y on all rapid motion, suppress on cutting motion
$CONFIGUSEMODALXY:='NSETTING(CFF Options,XY Codes Modal)

// CONFIGAHCISON can start out as 0, 1, 2, or 3
// 0 => implies that AHC defaults at start of program to off
// 1 => implies that AHC defaults at start of program to on
// 2 => implies that an AHC code should be used at the start in any case
// 3 => No AHC codes
// In most cases, 1 or 3 are the only usable choices.
$CONFIGAHCISON:='NSETTING(CFF Options,AHC Codes)

// 0 => Normal behavior, PROCESS ON MOTION called from OUTPUT START ___ PROFILE
// 1 => Delayed behavior, PROCESS ON MOTION called from OUTPUT ___ ON
$CONFIGDELAYPROCESSONMOTION:=0

// 0 => I, J are absolute if X, Y are absolute, otherwise incremental
// 1 => I, J are always incremental
// 2 => Use R instead of I, J. Set QUAD ARCS section to 3 to use this
$CONFIGIJALWAYSINCREMENTAL:='NSETTING(CFF Options,IJ Incremental)

// 0 => CUT OFF, CUT OFFUP are as normal
// 1 => At end of exterior profiles, skeleton cuts, and Crop cuts, always use OFFUP
$CONFIGFORCEEXTERIORTOOFFUP:='NSETTING(CFF Options,Force OffUp)

// Set a Zero point. By default, use $INITPTX, $INITPTY, which is where the
// starting point is located. ZEROPT_ allows setting a zero point separate
// from the initial point. To start the head out in the upper left of the
// sheet, with all dimensions in absolute from the lower left, set the init
// point in PN to the upper left, and use $ZEROPTX:=$SHEETMINX and
// $ZEROPTY:=$SHEETMINY
$ZEROPTX := $INITPTX
$ZEROPTY := $INITPTY

$AHCISON := $CONFIGAHCISON
{START OF FILE}
{PROGRAM INIT}
{VALIDATE PLATE}
{OUTPUT PROFILES}
{END OF FILE}

[SECTION PART OF THE CFF]

[START OF FILE]
IF 'NSETTING(CFF Options,PercentAtStart)=0
// No output
END
IF 'NSETTING(CFF Options,PercentAtStart)=1
%
END
IF 'NSETTING(CFF Options,PercentAtStart)=2
%{ROOT FILE NAME}
END
IF 'NSETTING(CFF Options,PercentAtStart)=3
%{PROGRAM NUMBER}
END

[PLP INFO LINE]
// The next line might need comment characters adjusted if you're using the part list
{LINENO :M}(PART#:{ROOT PART NAME} QTY {PART QUANTITY ON NEST})

[ROOT PART NAME]
// ROOT PART NAME is the part file name without path (used only in PLP INFO LINE)
ARGUMENT=$ROOTPARTNAME
FORMAT=%s

[PART QUANTITY ON NEST]
// Number of times this part occurs on this nest (used only in PLP INFO LINE)
ARGUMENT=$PARTQUANTITYONNEST
FORMAT=%d

[PROGRAM INIT]
// Next two lines are example of how to prompt for a program number
//$PROGRAMNUMBER := 'NPROMPT(Enter program number)
IF 'NSETTING(CFF Options,Program Name Number)=0
// No output
END
IF 'NSETTING(CFF Options,Program Name Number)=1
P{PROGRAM NUMBER}
END
IF 'NSETTING(CFF Options,Program Name Number)=2
O{PROGRAM NUMBER}
END
IF 'NSETTING(CFF Options,Program Name Number)=3
P{ROOT FILE NAME}
END
IF 'NSETTING(CFF Options,Program Name Number)=4
O{ROOT FILE NAME}
END
IF 'NSETTING(CFF Options,Program Name Number)=5
({ROOT FILE NAME})
END
{UNITS}
{MODE}
// Uncomment the next line to include a list of all parts, quantities on the list
//{OUTPUT PLP LIST INFO}
{INITIALIZE CUT PARAMETERS}
IF 'NSETTING(CFF Options,Config Messages)=0
$ASKFORRAISEHEIGHT:='NSETTING(CFF Options,Raise Height)
{FEEDRATE}
// Save the feedrate so we can restore it later, which will suppress it on the
// first use
$DX:=$FEEDRATE
//{LINENO :M} G54
{LINENO :M}G04 P0.5
IF $ASKFORRAISEHEIGHT=1
// Ask for a Raise height
$RAISEHEIGHT:='NPROMPT(Enter raise height, 0 for no M125P value)
IF $RAISEHEIGHT!=0
{RAISE HEIGHT}
END
ELSE
IF $ASKFORRAISEHEIGHT=2
IF $RAISEHEIGHT!=0
{RAISE HEIGHT}
END
ELSE
// Don't ask, just use a default value
IF $UNITS=INCH
// instruction - raise 0.5" on traverse - hard coded
{LINENO :M}M125 P0.5
ELSE
// instruction - raise 12mm on traverse - hard coded
{LINENO :M}M125 P12
END
END
END
//{LINENO :M}M62
//{SCRIBE HEAD UP}
ELSE
IF 'NSETTING(CFF Options,Config Messages)=1
{FEEDRATE}
// Save the feedrate so we can restore it later, which will suppress it on the
// first use
$DX:=$FEEDRATE
IF $ASKFORRAISEHEIGHT=1
// Ask for a Raise height
$RAISEHEIGHT:='NPROMPT(Enter raise height, 0 for no M125P value)
IF $RAISEHEIGHT!=0
{RAISE HEIGHT}
END
ELSE
IF $ASKFORRAISEHEIGHT=2
IF $RAISEHEIGHT!=0
{RAISE HEIGHT}
END
ELSE
// Don't ask, just use a default value
IF $UNITS=INCH
// instruction - raise 2" on traverse - hard coded
{LINENO :M}M125 P2
ELSE
// instruction - raise 50mm on traverse - hard coded
{LINENO :M}M125 P50
END
END
END
// Voice message - "stand clear - gantry about to move"
{LINENO :M} M86
// Turns on smoke and dust collector
{LINENO :M} M60
ELSE
IF 'NSETTING(CFF Options,Config Messages)=2
{LINENO :M}M08
{FEEDRATE}
// Save the feedrate so we can restore it later, which will suppress it on the
// first use
$DX:=$FEEDRATE
ELSE
// Nothing special
END
END
END
IF $MATERIALTHICKNESS>0
(Material : {MATERIAL NAME})
(Thickness: {MATERIAL THICKNESS})
(Class : {NEST CLASS})
END
IF $NCCOMMENT!=none && 'TEXTLEN($NCCOMMENT)>0
{NC COMMENT}
END
IF 'NSetting(CFF Options,Exhaust Fan)=1
{LINENO :M}{NSP :M}M66
END
{RESET PARAMETERS}

[UNITS]
// Common G codes for units are G70 or G20 for inch and G71 or G21 for metric
IF 'NSETTING(CFF Options,Units)=0
// No output
END
IF 'NSETTING(CFF Options,Units)=1
IF $UNITS=INCH
{LINENO :M}{NSP :M}G70
ELSE
{LINENO :M}{NSP :M}G71
END
END
IF 'NSETTING(CFF Options,Units)=2
IF $UNITS=INCH
{LINENO :M}{NSP :M}G20
ELSE
{LINENO :M}{NSP :M}G21
END
END

[MODE]
IF 'NSETTING(CFF Options,Mode)=0
IF $MODE=ABSOLUTE
IF 'NSETTING(CFF Options,Zero)>=1
{LINENO :M}G92{NSP :M}{INITPTX}{INITPTY}
END
ELSE
IF 'NSETTING(CFF Options,Zero)=1
{LINENO :M}G92{NSP :M}{INITPTX}{INITPTY}
END
END
END
IF 'NSETTING(CFF Options,Mode)=1
IF $MODE=ABSOLUTE
{LINENO :M}{NSP :M}G90
IF 'NSETTING(CFF Options,Zero)>=1
{LINENO :M}{NSP :M}G92{INITPTX}{INITPTY}
END
ELSE
{LINENO :M}{NSP :M}G91
IF 'NSETTING(CFF Options,Zero)=1
{LINENO :M}{NSP :M}G92{INITPTX}{INITPTY}
END
END
END

[QUAD ARCS]
// 0 - Leave arcs as-is
// 1 - Split at quadrant boundaries
// 2 - Split at 180, 360
// 3 - Split arcs >180 in half. (required if using R codes on arcs)
IF 'NSETTING(CFF Options,Quadrant Arcs)=0
0
END
IF 'NSETTING(CFF Options,Quadrant Arcs)=1
1
END
IF 'NSETTING(CFF Options,Quadrant Arcs)=2
2
END
IF 'NSETTING(CFF Options,Quadrant Arcs)=3
3
END

[CNC NAME]
// CNC File name with path and extension
ARGUMENT=$FILENAME
FORMAT=%s

[ROOT FILE NAME]
// CNC file name without path or extension
ARGUMENT=$ROOTFILENAME
FORMAT=%s

[CNC FILE NAME EXT]
// CNC File name extension with .
ARGUMENT=$FILEEXT
FORMAT=%s

[MACHINE NAME]
// Name of the CFG file being used
ARGUMENT=$MACHINENAME
FORMAT=%s

[PROGRAM NUMBER]
ARGUMENT=$PROGRAMNUMBER
FORMAT=%d

[DATE]
ARGUMENT=$DATE
FORMAT=%s

[TIME]
ARGUMENT=$TIME
FORMAT=%s

[MATERIAL THICKNESS]
ARGUMENT=$MATERIALTHICKNESS * $CONVERSION
FORMAT={Z FORMAT}

[MATERIAL DENSITY]
// Not sure if conversion is needed here (maybe not, maybe single, double or triple)
ARGUMENT=$MATERIALDENSITY
FORMAT={DIMENSION DISPLAY FORMAT}

[SHEET WEIGHT]
IF $UNITS=INCH
ARGUMENT=$SHEETWEIGHT
ELSE
ARGUMENT=$SHEETWEIGHT * 0.45359237
END
FORMAT={XY FORMAT}

[WEIGHT UNITS]
IF $UNITS=INCH
LBS
ELSE
KG
END

[SHEET DESCRIPTION]
ARGUMENT=$SHEET_DESCRIPTION
FORMAT=%s

[MATERIAL NAME]
ARGUMENT=$MATERIALNAME
FORMAT=%s

[NIF NAME]
// Name of the NIF file being output
ARGUMENT=$NIFNAME
FORMAT=%s

[NEST CLASS]
ARGUMENT=$NEST_CLASS
FORMAT=%s

[NEST NUMBER]
ARGUMENT=$NESTNUMBER+1
FORMAT=%d

[NUMBER OF NESTS]
ARGUMENT=$NUMBER_OF_NESTS
FORMAT=%d

[NC COMMENT]
ARGUMENT=$NCCOMMENT
FORMAT={COMMENT FORMAT}

[TIMES TO RUN]
ARGUMENT=$CUTNUMBEROFTIMES
FORMAT=%d

[PRODUCTION TIME]
ARGUMENT=$PRODUCTIONTIME
FORMAT=%4.3f

[SHEET X]
ARGUMENT=$SHEETX * $CONVERSION
FORMAT={DIMENSION DISPLAY FORMAT}

[SHEET Y]
ARGUMENT=$SHEETY * $CONVERSION
FORMAT={DIMENSION DISPLAY FORMAT}

[STEP AND REPEAT START]
{LINENO :M}{NSP :M}G97

[STEP AND REPEAT END]
{LINENO :M}{NSP :M}G98

[VALIDATE PLATE]
IF $VALIDATEPLATE = TRUE
// Note that X and Y both need to be set each at each step for incremental
// output to work correctly.
// To output validate plate motions to only the nested area instead of the
// entire plate, change $SHEETMINX to $MINX, $SHEETMAXX to $MAXX,
// $SHEETMINY to $MINY, and $SHEETMAXY to $MAXY throughout this section
$X := $INITPTX
$Y := $INITPTY
IF $INITPTLOCATION = LOWERLEFT
$X := $SHEETMAXX
$Y := $SHEETMAXY
ELSE
IF $INITPTLOCATION = LOWERRIGHT
$X := $SHEETMINX
$Y := $SHEETMAXY
ELSE
IF $INITPTLOCATION = UPPERRIGHT
$X := $SHEETMINX
$Y := $SHEETMINY
ELSE
$X := $SHEETMAXX
$Y := $SHEETMINY
END
END
END
{RAPID MOTION}
IF $INITPTLOCATION = LOWERLEFT
$X := $SHEETMINX
$Y := $SHEETMINY
ELSE
IF $INITPTLOCATION = LOWERRIGHT
$X := $SHEETMAXX
$Y := $SHEETMINY
ELSE
IF $INITPTLOCATION = UPPERRIGHT
$X := $SHEETMAXX
$Y := $SHEETMAXY
ELSE
$X := $SHEETMINX
$Y := $SHEETMAXY
END
END
END
{RAPID MOTION}
END

[END OF FILE]
{CANCEL CURRENT OFFSET}
{END OF PROGRAM}
IF 'NSETTING(CFF Options,PercentAtEnd)=0
// No output
END
IF 'NSETTING(CFF Options,PercentAtEnd)=1
%
END

[END OF PROGRAM]
IF $RETURNTOINIT=TRUE
{RAPID MOTION TO INIT}
END
IF 'NSetting(CFF Options,Exhaust Fan)=1
{LINENO :M}{NSP :M}M67
END
IF 'NSETTING(CFF Options,End of Program Code)=0
// No output
END
IF 'NSETTING(CFF Options,End of Program Code)=1
{LINENO :M}{NSP :M}M02
END
IF 'NSETTING(CFF Options,End of Program Code)=2
{LINENO :M}{NSP :M}M30
END

[RAPID MOTION TO INIT]
$X:=$INITPTX
$Y:=$INITPTY
IF $CONFIGNOG40ONARC=1
// If we couldn't have G40 on a arc move, make sure it's off here.
$KERFSTATUS:=0
END
{RAPID MOTION}

[OUTPUT START INTERIOR PROFILE]
// $PREKERFED variable tracks to see if a KERF LEFT or KERF RIGHT CALL is
// made so kerf off calls can be made only if needed
{CANCEL CURRENT OFFSET}
{SOP LINENO 0}
{OUTPUT TORCH SPACING}
{ACTIVATE NEXT OFFSET}
IF $CONFIGDELAYPROCESSONMOTION=0
{PROCESS ON MOTION}
ELSE
$SAVEX := $LASTX
$SAVEY := $LASTY
$SAVEX := $X
$SAVEY := $Y
END
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
$PREKERFED:=1
$FORCEOFFUP:=0

[OUTPUT START EXTERIOR PROFILE]
{CANCEL CURRENT OFFSET}
{SOP LINENO 0}
{OUTPUT TORCH SPACING}
{ACTIVATE NEXT OFFSET}
IF $CONFIGDELAYPROCESSONMOTION=0
{PROCESS ON MOTION}
ELSE
$SAVEX := $LASTX
$SAVEY := $LASTY
$SAVEX := $X
$SAVEY := $Y
END
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
$PREKERFED:=1
$FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP

[OUTPUT START OPEN PROFILE]
{CANCEL CURRENT OFFSET}
{SOP LINENO 0}
{OUTPUT TORCH SPACING}
{ACTIVATE NEXT OFFSET}
IF $CONFIGDELAYPROCESSONMOTION=0
{PROCESS ON MOTION}
ELSE
$SAVEX := $LASTX
$SAVEY := $LASTY
$SAVEX := $X
$SAVEY := $Y
END
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
$PREKERFED:=1
$FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP

[OUTPUT START CROP]
{CANCEL CURRENT OFFSET}
{SOP LINENO 0}
{OUTPUT TORCH SPACING}
{ACTIVATE NEXT OFFSET}
IF $CONFIGDELAYPROCESSONMOTION=0
{PROCESS ON MOTION}
ELSE
$SAVEX := $LASTX
$SAVEY := $LASTY
$SAVEX := $X
$SAVEY := $Y
END
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
$PREKERFED:=1
$FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP

[OUTPUT TORCH SPACING]
IF {TORCH SPACING REQUIRED}
IF $NUMTORCHES = 1 || $NUMTORCHES = 0
(Set 1 torch.)
{MACHINE STOP}
ELSE
IF $USEAUTOTORCHSPACING = TRUE
// Auto torch spacing commands go here.
END
(Set {NUMTORCHES} torches at {TORCHSPACING}{TORCHUNITS}.)
{MACHINE STOP}
END
END

[OUTPUT END INTERIOR PROFILE]
IF {KERF STILL ON} && $CONFIGNOG40ONARC=0
{KERF OFF}
END

[OUTPUT END EXTERIOR PROFILE]
IF {KERF STILL ON} && $CONFIGNOG40ONARC=0
{KERF OFF}
END

[OUTPUT END OPEN PROFILE]
IF {KERF STILL ON} && $CONFIGNOG40ONARC=0
{KERF OFF}
END

[OUTPUT END CROP]
IF {KERF STILL ON} && $CONFIGNOG40ONARC=0
{KERF OFF}
END

[LINENO]
MODAL_ARGUMENT=$LINENUMBER
IF $USELINENUMBERS = EVERYLINE
{NWORD}
END

[SOP LINENO 0]
IF $USELINENUMBERS = STARTOFPROFILE && $CONFIGSOPLINENOLOCATION=0
{NWORD}
END

[SOP LINENO 1]
IF $USELINENUMBERS = STARTOFPROFILE && $CONFIGSOPLINENOLOCATION=1
{NWORD}
END

[PART NAME COMMENT]
$SAVEPARTNAME := $PARTNAME
$SAVENUM := $PARTSEQUENCENUMBER
IF $SAVENUM != $LASTSAVENUM || $SAVEPARTNAME != $LASTSAVEPARTNAME
IF $PARTSEQUENCENUMBER > 0
(Seq {PART SEQUENCE NUMBER} - {PARTNAME})
ELSE
({PARTNAME})
END
END

[PART SEQUENCE NUMBER]
ARGUMENT=$PARTSEQUENCENUMBER
FORMAT=%d

[PARTNAME]
ARGUMENT=$PARTNAME
FORMAT=%s

[CHANGE OFFSETS]
{CANCEL PREVIOUS OFFSET}
{ACTIVATE CURRENT OFFSET}

[CANCEL PREVIOUS OFFSET]
IF $PROCESS != $LASTPROCESS
IF $LASTPROCESS=SCRIBE2
IF $SCRIBEHEADDOWN=1
IF 'NSetting(CFF Options,Scribe Tool Lower Code)=1
{LINENO :M}{NSP :M}M61
END
$SCRIBEHEADDOWN:=0
END
END
END

[CANCEL CURRENT OFFSET]
IF $PROCESS != $NEXTPROCESS
IF $PROCESS=SCRIBE2
IF $SCRIBEHEADDOWN=1
IF 'NSetting(CFF Options,Scribe Tool Lower Code)=1
{LINENO :M}{NSP :M}M61
END
$SCRIBEHEADDOWN:=0
END
END
END

[ACTIVATE CURRENT OFFSET]
{PREPIERCE MESSAGE}
IF ($PROCESS != $LASTPROCESS && $DIDPREPIERCEMESSAGE=0) || ($DIDPREPIERCEMESSAGE=2)
IF ($PROCESS=PUNCH1 || $PROCESS=PUNCH2 || $PROCESS=PUNCH3 || $PROCESS=PUNCH4 || $PROCESS=PUNCH5 || $PROCESS=PUNCH6) && $STOPBEFOREPUNCH = TRUE
(SET UP FOR CENTERMARK)
{MACHINE STOP}
ELSE
IF ($PROCESS=SCRIBE1 || $PROCESS=SCRIBE2) && $STOPBEFORESCRIBE = TRUE
(SET UP FOR SCRIBING)
{MACHINE STOP}
ELSE
IF ($PROCESS=CUT1 || $PROCESS=CUT2 || $PROCESS=CUT3) && ($STOPBEFORECUT = TRUE || $DIDPREPIERCEMESSAGE=2)
IF ($NUM_PUNCHES_USED=0 && $NUM_SCRIBES_USED=0 && $DIDPREPIERCEMESSAGE=0)
// Don't bother stopping
ELSE
(SET UP FOR CUTTING)
{MACHINE STOP}
END
END
END
END
IF $PROCESS=CUT1
{LINENO :M}{NSP :M}G54
{CUTTING MODE}
END
IF $PROCESS=SCRIBE2
IF 'NSetting(CFF Options,Scribe Tool Marker Offset)=0
{LINENO :M}{NSP :M}G55
ELSE
{LINENO :M}{NSP :M}G541
END
END
END


[ACTIVATE NEXT OFFSET]
{PREPIERCE MESSAGE}
IF ($PROCESS != $NEXTPROCESS && $DIDPREPIERCEMESSAGE=0) || ($DIDPREPIERCEMESSAGE=2)
IF ($NEXTPROCESS=PUNCH1 || $NEXTPROCESS=PUNCH2 || $NEXTPROCESS=PUNCH3 || $NEXTPROCESS=PUNCH4 || $NEXTPROCESS=PUNCH5 || $NEXTPROCESS=PUNCH6) && $STOPBEFOREPUNCH = TRUE
(SET UP FOR CENTERMARK)
{MACHINE STOP}
ELSE
IF ($NEXTPROCESS=SCRIBE1 || $NEXTPROCESS=SCRIBE2) && $STOPBEFORESCRIBE = TRUE
(SET UP FOR SCRIBING)
{MACHINE STOP}
ELSE
IF ($NEXTPROCESS=CUT1 || $NEXTPROCESS=CUT2 || $NEXTPROCESS=CUT3) && ($STOPBEFORECUT = TRUE || $DIDPREPIERCEMESSAGE=2)
IF ($NUM_PUNCHES_USED=0 && $NUM_SCRIBES_USED=0 && $DIDPREPIERCEMESSAGE=0)
// Don't bother stopping
ELSE
(SET UP FOR CUTTING)
{MACHINE STOP}
END
END
END
END
IF $NEXTPROCESS=CUT1
{LINENO :M}{NSP :M}G54
{CUTTING MODE}
END
IF $NEXTPROCESS=SCRIBE2
IF 'NSetting(CFF Options,Scribe Tool Marker Offset)=0
{LINENO :M}{NSP :M}G55
ELSE
{LINENO :M}{NSP :M}G541
END
END
END

[PROCESS ON MOTION]
{SOP LINENO 1 :M}{RAPID MOTION}

[RAPID MOTION]
$MOTIONTYPE:=0
IF $CONFIGUSEMODALXY=2
{LINENO :M}{KERF MOVE :M}{RAPID MOTION CODE :M}{CURRENT X :Z}{CURRENT Y :Z}
ELSE
{LINENO :M}{KERF MOVE :M}{RAPID MOTION CODE :M}{XY POS :M :Z}
END
IF $CONFIGDELAYPROCESSONMOTION=1
$SAVEX := $X
$SAVEY := $Y
$SAVEX := $X
$SAVEY := $Y
END

[PRE MOTION]
// Calls at the start of the MOTION lines
// This keeps the MOTION sections not quite as wide
{EXACT STOP :M}{KERF MOVE :M}

[POST MOTION]
// Calls at the end of the MOTION lines
{ADD FEEDRATE :M}

[XY POS]
// Shorten up some lines below
{CURRENT X :M :Z}{CURRENT Y :M :Z}

[ARC CENTER]
IF $CONFIGIJALWAYSINCREMENTAL=2
{OUTPUT ARC RADIUS}
ELSE
{CURRENT I :Z}{CURRENT J :Z}
END

[LINEAR MOTION]
IF $INTAB=1 && $TORCHISON=0
{RAPID MOTION}
ELSE
$MOTIONTYPE:=1
{FEEDRATE LINE}
IF $CONFIGUSEKERFONLEADINMOVE=0
IF ($HASLEADIN=FALSE || $INLEADIN=TRUE)
{KERF DIRECTION :M}
END
END
IF $CONFIGUSEKERFONLEADOUTMOVE=1
IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE
$KERFDIR:=OFF
END
END
{CHECK AHC :M}
{LINENO :M}{PRE MOTION :M}{LINEAR MOTION CODE :M}{XY POS :M :Z}{POST MOTION :M}
IF $CONFIGDELAYPROCESSONMOTION=1
$SAVEX := $X
$SAVEY := $Y
$SAVEX := $X
$SAVEY := $Y
END
END

[CLOCKWISE MOTION]
$MOTIONTYPE:=2
{CHECK FOR ARC TOO SMALL}
IF $ARCTOOSMALL=1
{LINEAR MOTION}
ELSE
{FEEDRATE LINE}
IF $CONFIGUSEKERFONLEADINMOVE=0
IF ($HASLEADIN=FALSE || $INLEADIN=TRUE)
{KERF DIRECTION :M}
END
END
IF $CONFIGUSEKERFONLEADOUTMOVE=1
IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE
$KERFDIR:=OFF
END
END
{CHECK AHC :M}
{LINENO :M}{PRE MOTION :M}{CLOCKWISE MOTION CODE :M}{XY POS :M :Z}{ARC CENTER}{POST MOTION :M}
IF $CONFIGDELAYPROCESSONMOTION=1
$SAVEX := $X
$SAVEY := $Y
$SAVEX := $X
$SAVEY := $Y
END
END

[COUNTERCLOCKWISE MOTION]
$MOTIONTYPE:=3
{CHECK FOR ARC TOO SMALL}
IF $ARCTOOSMALL=1
{LINEAR MOTION}
ELSE
{FEEDRATE LINE}
IF $CONFIGUSEKERFONLEADINMOVE=0
IF ($HASLEADIN=FALSE || $INLEADIN=TRUE)
{KERF DIRECTION :M}
END
END
IF $CONFIGUSEKERFONLEADOUTMOVE=1
IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE
$KERFDIR:=OFF
END
END
{CHECK AHC :M}
{LINENO :M}{PRE MOTION :M}{COUNTERCLOCKWISE MOTION CODE :M}{XY POS :M :Z}{ARC CENTER}{POST MOTION :M}
IF $CONFIGDELAYPROCESSONMOTION=1
$SAVEX := $X
$SAVEY := $Y
$SAVEX := $X
$SAVEY := $Y
END
END

[EXACT STOP]
// This section decides if the machine should maintain feedrate at the end of the motion
// or if it should come to a stop. The degree of angle change determines this
IF $CONFIGUSEEXACTSTOPCHECK=0
$EXACTSTOPCHECK:=2
END
IF $NEXTPROFILEMOTION=NONE
$ANGLECHANGE:=0
ELSE
$ANGLECHANGE:='ABS($ENDTANGENTANGLE-$NEXTSTARTTANGENTANGLE)
END
IF $ANGLECHANGE>180
$ANGLECHANGE:='ABS($ANGLECHANGE-360.0)
END
IF $CONFIGUSEEXACTSTOPCHECK=2
$EXACTSTOPCHECK:=0
END
// The number in the next line determines when an EXACT STOP needs to be inserted
// and when it should maintain feedrate
IF $ANGLECHANGE>=$EXACTSTOPANGLE
// Use exact stop check mode
IF $EXACTSTOPCHECK=0
IF $CONFIGUSEEXACTSTOPCHECK=2
// One-shot exact stop
{NSP :M}G09
ELSE
// Modal exact stop
{NSP :M}G61
END
$EXACTSTOPCHECK:=1
END
ELSE
// Continuous (cut) mode
IF $EXACTSTOPCHECK=1
{NSP :M}G64
$EXACTSTOPCHECK:=0
END
END

[RAPID MOTION CODE]
IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=0)
IF 'NSETTING(CFF Options,G Code Format)=0
{NSP :M}G00
END
IF 'NSETTING(CFF Options,G Code Format)=1
{NSP :M}G0
END
$CURRENTMOTION:=0
END

[LINEAR MOTION CODE]
IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=1)
IF 'NSETTING(CFF Options,G Code Format)=0 || 'NSETTING(CFF Options,G Code Format)=2
{NSP :M}G01
END
IF 'NSETTING(CFF Options,G Code Format)=1 || 'NSETTING(CFF Options,G Code Format)=3
{NSP :M}G1
END
$CURRENTMOTION:=1
END

[CLOCKWISE MOTION CODE]
IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=2)
IF {NORMAL AXIS DIRECTION}
IF 'NSETTING(CFF Options,G Code Format)=0 || 'NSETTING(CFF Options,G Code Format)=2
{NSP :M}G02
END
IF 'NSETTING(CFF Options,G Code Format)=1 || 'NSETTING(CFF Options,G Code Format)=3
{NSP :M}G2
END
ELSE
IF 'NSETTING(CFF Options,G Code Format)=0 || 'NSETTING(CFF Options,G Code Format)=2
{NSP :M}G03
END
IF 'NSETTING(CFF Options,G Code Format)=1 || 'NSETTING(CFF Options,G Code Format)=3
{NSP :M}G3
END
END
$CURRENTMOTION:=2
END

[COUNTERCLOCKWISE MOTION CODE]
IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=3)
IF {NORMAL AXIS DIRECTION}
IF 'NSETTING(CFF Options,G Code Format)=0 || 'NSETTING(CFF Options,G Code Format)=2
{NSP :M}G03
END
IF 'NSETTING(CFF Options,G Code Format)=1 || 'NSETTING(CFF Options,G Code Format)=3
{NSP :M}G3
END
ELSE
IF 'NSETTING(CFF Options,G Code Format)=0 || 'NSETTING(CFF Options,G Code Format)=2
{NSP :M}G02
END
IF 'NSETTING(CFF Options,G Code Format)=1 || 'NSETTING(CFF Options,G Code Format)=3
{NSP :M}G2
END
END
$CURRENTMOTION:=3
END

[INIT PT MOTION CODE]
{RAPID MOTION CODE}

[ADD FEEDRATE]
IF $CONFIGFEEDRATEONMOVE=1
IF $INLEADIN=TRUE && $LEADINFEEDRATE!=0
$ACTUALFEEDRATE:=$LEADINFEEDRATE/{XLS CONVERSION}
ELSE
$ACTUALFEEDRATE:=$FEEDRATE
END
IF $ACTUALFEEDRATE!=$LASTACTUALFEEDRATE || $CONFIGSUPRESSFEEDRATE=2
{FEEDRATE :M}
$ACTUALFEEDRATE:=$ACTUALFEEDRATE
END
END

[FEEDRATE LINE]
IF $CONFIGFEEDRATEONMOVE=0
IF $INLEADIN=TRUE && $LEADINFEEDRATE!=0
$ACTUALFEEDRATE:=$LEADINFEEDRATE/{XLS CONVERSION}
ELSE
$ACTUALFEEDRATE:=$FEEDRATE
END
IF $ACTUALFEEDRATE!=$LASTACTUALFEEDRATE || $CONFIGSUPRESSFEEDRATE=2
{LINENO :M}{FEEDRATE :M}
$ACTUALFEEDRATE:=$ACTUALFEEDRATE
END
END

[ADD KERF VALUE]
IF $KERF > 0.0 && $KERF != $LASTKERF
{KERF VALUE}
$KERF:=$KERF
END

[OUTPUT KERF LEFT]
// Any call from Pronest to this or the next section says that this part was not
// prekerfed. If not prekerfed, then we need to cancel the Kerf at the end of
// the cut.
$PREKERFED:=0

[OUTPUT KERF RIGHT]
$PREKERFED:=0

[KERF LEFT CODE]
// If running a right-hand axis machine, verify the G41/G42 directions
IF {NORMAL AXIS DIRECTION}
// Left hand coordinate system - +X direction to +Y direction is counter-clockwise
{KSP :M}G41
ELSE
// Right hand coordinate system - +X direction to +Y direction is clockwise
{KSP :M}G42
END

[KERF RIGHT CODE]
// If running a right-hand axis machine, verify the G41/G42 directions
IF {NORMAL AXIS DIRECTION}
// Left hand coordinate system - +X direction to +Y direction is counter-clockwise
{KSP :M}G42
ELSE
// Right hand coordinate system - +X direction to +Y direction is clockwise
{KSP :M}G41
END

[KERF OFF CODE]
IF $CONFIGUSEKERFONLEADOUTMOVE=0
{NSP :M}G40
ELSE
{OSP :M}G40
END

[KERF LEFT]
IF $INCHAIN=0
// If $CONFIGUSEKERFONMOVE is set to 2, G41, G42 codes will not be output even
// if the part is not prekerfed. This is usually only needed if kerf
// compensation is done in a different way than G41/G42 or prekerfing and is
// handled outside of the regular KERF sections.
IF $CONFIGUSEKERFONLEADINMOVE<2
IF ($KERF <= 0 && $CONFIGUSEDVALUE=0) || $CONFIGUSEDVALUE=2
IF $CONFIGUSEKERFONLEADINMOVE=0
{LINENO :M}{KERF LEFT CODE}
ELSE
{KERF LEFT CODE}
END
ELSE
{KERF VALUE :M}
IF $CONFIGUSEKERFONLEADINMOVE=0
{LINENO :M}{KERF LEFT CODE}
ELSE
{KERF LEFT CODE}
END
$KERF:=$KERF
END
END
$KERFSTATUS:=41
END

[KERF RIGHT]
IF $INCHAIN=0
IF $CONFIGUSEKERFONLEADINMOVE<2
IF ($KERF <= 0 && $CONFIGUSEDVALUE=0) || $CONFIGUSEDVALUE=2
IF $CONFIGUSEKERFONLEADINMOVE=0
{LINENO :M}{KERF RIGHT CODE}
ELSE
{KERF RIGHT CODE}
END
ELSE
{KERF VALUE :M}
IF $CONFIGUSEKERFONLEADINMOVE=0
{LINENO :M}{KERF RIGHT CODE}
ELSE
{KERF RIGHT CODE}
END
$KERF:=$KERF
END
END
$KERFSTATUS:=42
END

[KERF OFF]
IF $INCHAIN=0
IF $CONFIGUSEKERFONLEADOUTMOVE<2
IF $KERFSTATUS!=40
IF $CONFIGUSEKERFONLEADOUTMOVE=0
{LINENO :M}{KERF OFF CODE}
ELSE
{KERF OFF CODE}
END
END
END
$KERFSTATUS:=40
END

[KERF MOVE]
IF ($KERFSTATUS=40 && $CONFIGUSEKERFONLEADINMOVE=1) || ($KERFSTATUS!=40 && $CONFIGUSEKERFONLEADOUTMOVE=1)
{KERF DIRECTION}
END

[KERF DIRECTION]
IF $INCHAIN=0
IF {PRONEST 9.1}
IF $PREKERFING_ACTIVE=TRUE
$PREKERFED:=1
END
END
IF ($PREKERFED=0)
IF ($PROCESS != SCRIBE1) && ($PROCESS != SCRIBE2)
// We can still cancel kerf in the scribe process
IF $KERFDIR = LEFT && $KERFSTATUS!=41
{KERF LEFT}
END
IF $KERFDIR = RIGHT && $KERFSTATUS!=42
{KERF RIGHT}
END
END
IF $KERFDIR = OFF && $KERFSTATUS!=40
{KERF OFF}
END
END
END

[PREPIERCE MESSAGE]
IF ('NSETTING(CFF Options,Stop After Prepiercing)=1 || 'NSETTING(CFF Options,Stop Before Prepiercing)=1) && $PARTNAME=PREPIERCE && $DIDPREPIERCEMESSAGE=0
IF 'NSETTING(CFF Options,Stop Before Prepiercing)=1
{MACHINE STOP}
(SET UP FOR PREPIERCING)
END
$DIDPREPIERCEMESSAGE:=1
END
IF $DIDPREPIERCEMESSAGE=1 && $PARTNAME!=PREPIERCE
IF 'NSETTING(CFF Options,Stop After Prepiercing)=1
{MACHINE STOP}
(CLEAN UP PLATE)
$DIDPREPIERCEMESSAGE:=0
ELSE
$DIDPREPIERCEMESSAGE:=2
END
END

[MACHINE STOP]
{LINENO :M}{NSP :M}M00

[OUTPUT AHCON]
{AHCON}

[OUTPUT AHCOFF]
{AHCOFF}

[AHCON CODE]
IF 'NSETTING(CFF Options,AHC OnOff Codes)=0
{LINENO :M}{NSP :M}G36
END
IF 'NSETTING(CFF Options,AHC OnOff Codes)=1
{LINENO :M}{NSP :M}M36
END

[AHCOFF CODE]
IF 'NSETTING(CFF Options,AHC OnOff Codes)=0
{LINENO :M}{NSP :M}G38
END
IF 'NSETTING(CFF Options,AHC OnOff Codes)=1
{LINENO :M}{NSP :M}M38
END

[AHCON]
IF ($AHCISON = 0 || $AHCISON = 2) && $DISABLEAHC=0
{AHCON CODE}
$AHCISON:=1
END

[FORCE AHCON]
IF ($AHCISON = 0 || $AHCISON = 2)
{AHCON CODE}
$AHCISON:=1
END

[AHCOFF]
IF ($AHCISON = 1 || $AHCISON = 2)
{AHCOFF CODE}
$AHCISON:=0
END

[CHECK AHC]
// If Pronest thinks it's supposed to be on ($AHC=ON), and it's not, and we're
// not disabling it through the Process Parameter file, turn it on
IF $AHC=ON && ($AHCISON!=1 || $AHCISON=2) && $DISABLEAHC=0 && $PROCESS!=SCRIBE2
{AHCON}
END
// If Pronest thinks it's supposed to be off ($AHC=OFF), and it's on, turn it off
IF (($AHC=OFF && $AHCISON!=0) || $DISABLEAHC>=1) && $PROCESS!=SCRIBE2
{AHCOFF}
END

[START LEADIN]
// This section is here as a place holder and so the name is already in place

[END LEADIN]
// This section is here as a place holder and so the name is already in place

[START LEADOUT]
// This section is here as a place holder and so the name is already in place

[END LEADOUT]
// This section is here as a place holder and so the name is already in place

[START TAB]
$INTAB := 1

[END TAB]
$INTAB := 0
{END LEADIN}

[START CHAIN]
// If this is set to 0 instead of 1, kerf commands will come out during chain cuts
$INCHAIN := 1

[END CHAIN]
$INCHAIN := 0

[CUT SUB]
// This section may be useful if an integer value is used to initiate cutting.
// This is often an M98P___ call to a subroutine already stored in the machine
ARGUMENT=$CUTSUB
FORMAT=M98P%d

[CUT CONDITION]
// This section may be useful if a cutting condition needs to be applied
// separately from the CUT SUB value.
ARGUMENT=$CUTCONDITION
FORMAT=E%d

[CUT CHART]
$CHANGE:=0
IF $CUTCHARTMATERIAL!=$LASTCUTCHARTMATERIAL && $CUTCHARTMATERIAL>0
$CHANGE:=1
END
IF $CUTCHARTCURRENT!=$LASTCUTCHARTCURRENT && $CUTCHARTCURRENT>0
$CHANGE:=1
END
IF $CUTCHARTGAS!=$LASTCUTCHARTGAS && $CUTCHARTGAS>0
$CHANGE:=1
END
IF $CHANGE=1
// Don't output invalid values
IF $CUTCHARTMATERIAL>0
{LINENO :M}{NSP :M}M41 {CUT CHART MATERIAL}
END
IF $CUTCHARTCURRENT>0
{LINENO :M}{NSP :M}M43 {CUT CHART CURRENT}
END
IF $CUTCHARTGAS>0
{LINENO :M}{NSP :M}M44 {CUT CHART GAS}
END
$CUTCHARTMATERIAL:=$CUTCHARTMATERIAL
$CUTCHARTCURRENT:=$CUTCHARTCURRENT
$CUTCHARTGAS:=$CUTCHARTGAS
END
IF $DIDMATERIALTHICKNESS=0
IF $MATERIALTHICKNESS>0 && 'NSETTING(CFF Options,Include Material Thickness)=1
{LINENO :M}{NSP :M}M42 {CUT CHART THICKNESS}
END
$DIDMATERIALTHICKNESS:=1
END
IF $TRANSFERHEIGHT!=$LASTTRANSFERHEIGHT && $TRANSFERHEIGHT>0 && 'NSETTING(CFF Options,Include Transfer Height)=1
{LINENO :M}{NSP :M}M21 {TRANSFER HEIGHT}
$TRANSFERHEIGHT:=$TRANSFERHEIGHT
END
IF $PIERCEHEIGHT!=$LASTPIERCEHEIGHT && $PIERCEHEIGHT>0 && 'NSETTING(CFF Options,Include Pierce Height)=1
{LINENO :M}{NSP :M}M22 {PIERCE HEIGHT}
$PIERCEHEIGHT:=$PIERCEHEIGHT
END
IF $CUTHEIGHT!=$LASTCUTHEIGHT && $CUTHEIGHT>0 && 'NSETTING(CFF Options,Include Cut Height)=1
{LINENO :M}{NSP :M}M23 {CUT HEIGHT}
$CUTHEIGHT:=$CUTHEIGHT
END
IF $PIERCETIME!=$LASTPIERCETIME && $PIERCETIME>0 && 'NSETTING(CFF Options,Include Pierce Time)=1
{LINENO :M}{NSP :M}M25 {PIERCE TIME}
$PIERCETIME:=$PIERCETIME
END
IF $AHCOFFDISTANCE!=$LASTAHCOFFDISTANCE && $AHCOFFDISTANCE>0
{LINENO :M}{NSP :M}M26 {AHC OFF DISTANCE}
$AHCOFFDISTANCE:=$AHCOFFDISTANCE
END
IF $ARCOFFDISTANCE!=$LASTARCOFFDISTANCE && $ARCOFFDISTANCE>0
{LINENO :M}{NSP :M}M27 {ARC OFF DISTANCE}
$NEEDM27P0:=1
$ARCOFFDISTANCE:=$ARCOFFDISTANCE
END
IF $ARCOFFDISTANCE=0 && $NEEDM27P0=1
{LINENO :M}{NSP :M}M27 P0
$NEEDM27P0:=0
END
IF $ARCVOLTAGE!=$LASTARCVOLTAGE && $ARCVOLTAGE>0 && 'NSETTING(CFF Options,Include Arc Voltage)=1
{LINENO :M}{NSP :M}M28 {ARC VOLTAGE}
$ARCVOLTAGE:=$ARCVOLTAGE
END

[CUT CHART MATERIAL]
ARGUMENT=$CUTCHARTMATERIAL
FORMAT=P%d

[CUT CHART CURRENT]
ARGUMENT=$CUTCHARTCURRENT
FORMAT=P%d

[CUT CHART GAS]
ARGUMENT=$CUTCHARTGAS
FORMAT=P%d

[CUT CHART THICKNESS]
P{MATERIAL THICKNESS}

[TRANSFER HEIGHT]
IF $TRANSFERHEIGHT>50
ARGUMENT=$CUTHEIGHT*$TRANSFERHEIGHT*0.01/{XLS CONVERSION}*$CONVERSION
ELSE
ARGUMENT=$TRANSFERHEIGHT/{XLS CONVERSION}*$CONVERSION
END
FORMAT=P%4.3f

[PIERCE HEIGHT]
IF $PIERCEHEIGHT>50
ARGUMENT=$CUTHEIGHT*$PIERCEHEIGHT*0.01/{XLS CONVERSION}*$CONVERSION
ELSE
ARGUMENT=$PIERCEHEIGHT/{XLS CONVERSION}*$CONVERSION
END
FORMAT=P%4.3f

[CUT HEIGHT]
ARGUMENT=$CUTHEIGHT/{XLS CONVERSION}*$CONVERSION
FORMAT=P%4.3f

[PIERCE TIME]
ARGUMENT=$PIERCETIME
FORMAT=P%4.3f

[AHC OFF DISTANCE]
ARGUMENT=$AHCOFFDISTANCE/{XLS CONVERSION}*$CONVERSION
FORMAT=P%4.3f

[ARC OFF DISTANCE]
ARGUMENT=$ARCOFFDISTANCE/{XLS CONVERSION}*$CONVERSION
FORMAT=P%4.3f

[ARC VOLTAGE]
ARGUMENT=$ARCVOLTAGE
FORMAT=P%4.3f

[CUTTING MODE]
IF $CUTMODE!=PLASMA
IF 'NSETTING(CFF Options,M45 Codes)=1
{LINENO :M}{NSP :M}M45 P1
ELSE
IF 'NSETTING(CFF Options,M45 Codes)=2
{LINENO :M}{NSP :M}G60
END
END
$CUTMODE:=PLASMA
END

[MARKING MODE]
IF $CUTMODE!=MARKING
IF 'NSETTING(CFF Options,M45 Codes)=1
{LINENO :M}{NSP :M}M45 P2
ELSE
IF 'NSETTING(CFF Options,M45 Codes)=2
{LINENO :M}{NSP :M}G62
END
END
$CUTMODE:=MARKING
END

[SCRIBING MODE]
IF $CUTMODE!=SCRIBING
IF 'NSETTING(CFF Options,M45 Codes)=1
{LINENO :M}{NSP :M}M45 P3
ELSE
IF 'NSETTING(CFF Options,M45 Codes)=2
{LINENO :M}{NSP :M}G61
END
END
$CUTMODE:=SCRIBING
END

[OUTPUT ASYNCH STOP DISTANCE]
ARGUMENT=$ASYNCSTOPDISTANCE*$CONVERSION
FORMAT={LINENO :M}{NSP :M}M27 P{XY FORMAT}

[ASYNCH STOP DISTANCE]
IF $ASYNCHRONOUSSTOP!=0
IF $DISABLEAHC>=1
$ASYNCSTOPDISTANCE:='ABS($ASYNCHRONOUSSTOP)*(1/60)*$FEEDRATE+0.25
{OUTPUT ASYNCH STOP DISTANCE}
$NEEDM27P0:=1
ELSE
{LINENO :M}{NSP :M}M27 P0
END
ELSEIF $NEEDM27P0=1
{LINENO :M}{NSP :M}M27 P0
$NEEDM27P0:=0
END

[OUTPUT CUT1 ON]
// CUT1 ON codes go in this section.
IF $CONFIGDELAYPROCESSONMOTION=1
$X := $LASTSAVEX
$Y := $LASTSAVEY
$X := $SAVEX
$Y := $SAVEY
$KERFDIR:=OFF
{PROCESS ON MOTION}
$KERFDIR:=$LASTKERFDIR
END
{CUT CHART}
{FEEDRATE LINE}
IF $CONFIGUSEKERFONLEADINMOVE=0
{KERF DIRECTION :M}
END
{ASYNCH STOP DISTANCE}
{CUTTING MODE}
IF $DISABLEAHC=2
$TRUEHOLEMODE:=1
{LINENO :M}{NSP :M}M48
END
{CHECK AHC}
{LINENO :M}{NSP :M}G23
$TORCHISON:=1

[OUTPUT CUT1 OFF]
IF $FORCEOFFUP=0
// Turn off the cutting device, but leave the head at cutting height
{CHECK AHC}
{LINENO :M}{NSP :M}G25
IF $TRUEHOLEMODE=1
$TRUEHOLEMODE:=0
{LINENO :M}{NSP :M}M49
END
$TORCHISON:=0
IF {PRONEST 9.1}
IF $PREKERFING_ACTIVE=TRUE
$PREKERFED:=1
END
END
IF $PREKERFED=0 && ($CONFIGNOG40ONARC=0 || $CURRENTMOTION<2)
{KERF OFF}
END
$KERFDIR := OFF
$KERF:=0.0
{FORCE AHCON}
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END
ELSE
{OUTPUT CUT1 OFFUP}
END

[OUTPUT CUT1 OFFUP]
// Turn off the cutting device, and raise the head to travel height
{CHECK AHC}
{LINENO :M}{NSP :M}G25
IF $TRUEHOLEMODE=1
$TRUEHOLEMODE:=0
{LINENO :M}{NSP :M}M49
END
$TORCHISON:=0
IF {PRONEST 9.1}
IF $PREKERFING_ACTIVE=TRUE
$PREKERFED:=1
END
END
IF $PREKERFED=0 && ($CONFIGNOG40ONARC=0 || $CURRENTMOTION<2)
{KERF OFF}
END
$KERFDIR := OFF
$KERF:=0.0
{FORCE AHCON}
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END

[OUTPUT CUT2 ON]
// CUT1 ON codes go in this section.
{FEEDRATE LINE}
{CHECK AHC}
IF $$CONFIGUSEKERFONLEADINMOVE=0
{KERF DIRECTION :M}
END
{LINENO :M} M04

[OUTPUT CUT2 OFF]
// Turn off the cutting device, but leave the head at cutting height
{CHECK AHC}
{LINENO :M} M05
IF $PREKERFED=0
{KERF OFF}
END
$KERF:=0.0
//$FEEDRATE:=0.0

[OUTPUT CUT2 OFFUP]
// Turn off the cutting device, and raise the head to travel height
{CHECK AHC}
{LINENO :M} M05
IF $PREKERFED=0
{KERF OFF}
END
$KERF:=0.0
//$FEEDRATE:=0.0

[OUTPUT SCRIBE1 ON]
// Scribing or Marking commands go in this section
$PREKERFED:=1
{CANCEL PREVIOUS OFFSET}
{SOP LINENO 0}
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
{ACTIVATE CURRENT OFFSET}
{CUT CHART}
{MARKING MODE}
{PROCESS ON MOTION}
{LINENO :M}{NSP :M}G23
$TORCHISON:=1

[OUTPUT SCRIBE1 OFF]
{LINENO :M}{NSP :M}G25
$TORCHISON:=0
$KERF:=0.0
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END

[OUTPUT SCRIBE2 ON]
// Scribing or Marking commands go in this section
$PREKERFED:=1
{CANCEL PREVIOUS OFFSET}
{SOP LINENO 0}
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
{ACTIVATE CURRENT OFFSET}
{SCRIBING MODE}
// The process on motion and the lowering command are reversed in the manual
// so it lowers before it makes the rapid motion to the start of the process.
// This seems a bit unsafe since the manual states that the machine doesn't
// have any collision avoidance.
{PROCESS ON MOTION}
IF $SCRIBEHEADDOWN=0
IF 'NSetting(CFF Options,Scribe Tool Lower Code)=1
{LINENO :M}{NSP :M}M60
END
$SCRIBEHEADDOWN:=1
END
IF 'NSetting(CFF Options,Scribe Activation Code) = 0
{LINENO :M}{NSP :M}M08
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 1
{LINENO :M}{NSP :M}G23
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 2
{LINENO :M}{NSP :M}G62
END
$DWELL:='NSetting(CFF Options,Scribe Tool Delay)
{OUTPUT DWELL}
$TORCHISON:=1

[OUTPUT SCRIBE2 OFF]
IF 'NSetting(CFF Options,Scribe Activation Code) = 0
{LINENO :M}{NSP :M}M09
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 1
{LINENO :M}{NSP :M}G25
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 2
{LINENO :M}{NSP :M}G63
END
$TORCHISON:=0
$KERF:=0.0
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END

[OUTPUT SCRIBE2 OFFUP]
// Added a SCRIBE2 OFFUP section so you can trigger a full raise if desired.
// Because the lowering codes are in the ON section, it will automatically
// lower the head again after it gets in position before it activates it.
IF 'NSetting(CFF Options,Scribe Activation Code) = 0
{LINENO :M}{NSP :M}M09
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 1
{LINENO :M}{NSP :M}G25
ELSEIF 'NSetting(CFF Options,Scribe Activation Code) = 2
{LINENO :M}{NSP :M}G63
END
IF $SCRIBEHEADDOWN=1
IF 'NSetting(CFF Options,Scribe Tool Lower Code)=1
{LINENO :M}{NSP :M}M61
END
$SCRIBEHEADDOWN:=0
END
$TORCHISON:=0
$KERF:=0.0
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END

[OUTPUT PUNCH1 ON]
// Depending on customer choice, this could be a piercing routine or a point
// marking routine. Or duplicate the section and make both.
$PREKERFED:=1
{CANCEL PREVIOUS OFFSET}
{SOP LINENO 0}
IF $PARTNAMEASCOMMENT = TRUE
{PART NAME COMMENT}
END
{ACTIVATE CURRENT OFFSET}
{PROCESS ON MOTION}
{LINENO :M}{NSP :M}M09
{OUTPUT DWELL}
{LINENO :M}{NSP :M}M10
$KERF:=0.0
IF $CONFIGSUPRESSFEEDRATE=0
$ACTUALFEEDRATE:=0.0
END

[COMMENT FORMAT]
(%s)

[FORMAT PART OF THE CFF]


[INITPTX]
ARGUMENT=($INITPTX - $ZEROPTX) * $CONVERSION
FORMAT={OSP :M}X{XY FORMAT}

[INITPTY]
ARGUMENT=($INITPTY - $ZEROPTY) * $CONVERSION
FORMAT={OSP :M}Y{XY FORMAT}

[CONVERSION]
IF $UNITS=INCH
1.00
ELSE
25.40
END

[XLS CONVERSION]
IF $XLSUNITS=INCH
1.00
ELSE
25.40
END

[NWORD]
// Use N%d for no leading zeros
// Use N%03d for 3 digit N numbers
// Use N%04d for 4 digit N numbers
IF 'NSETTING(CFF Options,Line Numbers)=0
FORMAT=N%d
END
IF 'NSETTING(CFF Options,Line Numbers)=3
FORMAT=N%03d
END
IF 'NSETTING(CFF Options,Line Numbers)=4
FORMAT=N%04d
END
IF 'NSETTING(CFF Options,Line Numbers)=5
FORMAT=N%05d
END
ARGUMENT=$LINENUMBER

[NUMTORCHES]
ARGUMENT=$NUMTORCHES
FORMAT=%d

[TORCHSPACING]
ARGUMENT=$TORCHSPACING * $CONVERSION
FORMAT=%4.3lf

[TORCHUNITS]
IF $UNITS = INCH
in
ELSE
mm
END

[XY FORMAT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
IF $UNITS=INCH
IF $PRECISION=NORMAL
%4.3lf
ELSE
%5.4lf
END
ELSE
IF $PRECISION=NORMAL
%3.2lf
ELSE
%4.3lf
END
END
END
IF 'NSETTING(CFF Options,Dimension Format)=2
%1.0f
END

[IJ FORMAT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
IF $UNITS=INCH
IF $PRECISION=NORMAL
%4.3lf
ELSE
%5.4lf
END
ELSE
IF $PRECISION=NORMAL
%3.2lf
ELSE
%4.3lf
END
END
END
IF 'NSETTING(CFF Options,Dimension Format)=2
%1.0f
END

[Z FORMAT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
IF $UNITS=INCH
IF $PRECISION=NORMAL
%4.3lf
ELSE
%5.4lf
END
ELSE
IF $PRECISION=NORMAL
%3.2lf
ELSE
%4.3lf
END
END
END
IF 'NSETTING(CFF Options,Dimension Format)=2
%1.0f
END

[DIMENSION DISPLAY FORMAT]
IF $UNITS=INCH
IF $PRECISION=NORMAL
%4.3lf
ELSE
%5.4lf
END
ELSE
IF $PRECISION=NORMAL
%3.2lf
ELSE
%4.3lf
END
END

[FEEDRATE FORMAT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
IF $UNITS=INCH
IF $PRECISION=NORMAL
%2.1f
ELSE
%3.2f
END
ELSE
IF $PRECISION=NORMAL
%2.1lf
ELSE
%3.2lf
END
END
END
IF 'NSETTING(CFF Options,Dimension Format)=2
%1.0f
END

[DWELL FORMAT]
%3.2lf

[XYIJ DECIMAL SHIFT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
1
END
IF 'NSETTING(CFF Options,Dimension Format)=2
IF $UNITS=INCH
IF $PRECISION=NORMAL
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
ELSE
// For implied decimals, this is 10000 and change XY, IJ formats above to %1.0lf
10000
END
ELSE
IF $PRECISION=NORMAL
// For implied decimals, this is 100 and change XY, IJ formats above to %1.0lf
100
ELSE
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
END
END
END

[FEEDRATE DECIMAL SHIFT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
1
END
IF 'NSETTING(CFF Options,Dimension Format)=2
IF $UNITS=INCH
IF $PRECISION=NORMAL
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
ELSE
// For implied decimals, this is 10000 and change XY, IJ formats above to %1.0lf
10000
END
ELSE
IF $PRECISION=NORMAL
// For implied decimals, this is 100 and change XY, IJ formats above to %1.0lf
100
ELSE
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
END
END
END

[KERF DECIMAL SHIFT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
1
END
IF 'NSETTING(CFF Options,Dimension Format)=2
IF $UNITS=INCH
IF $PRECISION=NORMAL
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
ELSE
// For implied decimals, this is 10000 and change XY, IJ formats above to %1.0lf
10000
END
ELSE
IF $PRECISION=NORMAL
// For implied decimals, this is 100 and change XY, IJ formats above to %1.0lf
100
ELSE
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
1000
END
END
END

[DWELL DECIMAL SHIFT]
1

[ANGLE DECIMAL SHIFT]
IF 'NSETTING(CFF Options,Dimension Format)=0 || 'NSETTING(CFF Options,Dimension Format)=1
1
END
IF 'NSETTING(CFF Options,Dimension Format)=2
IF $PRECISION=NORMAL
// For implied decimals, this is 1000 and change XY, IJ formats above to %1.0lf
10
ELSE
// For implied decimals, this is 10000 and change XY, IJ formats above to %1.0lf
100
END
END

[CURRENT X]
IF 'NSETTING(CFF Options,Dimension Format)=1
{CURRENTX :M :Z}
ELSE
{CURRENTX :M}
END

[CURRENT Y]
IF 'NSETTING(CFF Options,Dimension Format)=1
{CURRENTY :M :Z}
ELSE
{CURRENTY :M}
END

[CURRENTX]
IF $CONFIGUSEMODALXY>0
MODAL_ARGUMENT=$X
END
IF $MODE=ABSOLUTE
ARGUMENT=($X - $ZEROPTX) * $CONVERSION * $XYIJDECIMALSHIFT
ELSE
ARGUMENT=($X - $LASTX) * $CONVERSION * $XYIJDECIMALSHIFT
END
FORMAT={OSP :M}X{XY FORMAT}

[CURRENTY]
IF $CONFIGUSEMODALXY>0
MODAL_ARGUMENT=$Y
END
IF $MODE=ABSOLUTE
ARGUMENT=($Y - $ZEROPTY) * $CONVERSION * $XYIJDECIMALSHIFT
ELSE
ARGUMENT=($Y - $LASTY) * $CONVERSION * $XYIJDECIMALSHIFT
END
FORMAT={OSP :M}Y{XY FORMAT}

[CURRENT I]
IF 'NSETTING(CFF Options,Dimension Format)=1
{CURRENTI :Z}
ELSE
{CURRENTI}
END

[CURRENT J]
IF 'NSETTING(CFF Options,Dimension Format)=1
{CURRENTJ :Z}
ELSE
{CURRENTJ}
END

[CURRENTI]
IF $MODE=ABSOLUTE && $CONFIGIJALWAYSINCREMENTAL=0
ARGUMENT=($I - $ZEROPTX) * $CONVERSION * $XYIJDECIMALSHIFT
ELSE
ARGUMENT=($I - $LASTX) * $CONVERSION * $XYIJDECIMALSHIFT
END
FORMAT={OSP :M}I{IJ FORMAT}

[CURRENTJ]
IF $MODE=ABSOLUTE && $CONFIGIJALWAYSINCREMENTAL=0
ARGUMENT=($J - $ZEROPTY) * $CONVERSION * $XYIJDECIMALSHIFT
ELSE
ARGUMENT=($J - $LASTY) * $CONVERSION * $XYIJDECIMALSHIFT
END
FORMAT={OSP :M}J{IJ FORMAT}

[OUTPUT ARC RADIUS]
ARGUMENT=$RADIUS * $CONVERSION * $XYIJDECIMALSHIFT
FORMAT={OSP :M}R{IJ FORMAT}

[FEEDRATE]
ARGUMENT=$ACTUALFEEDRATE * $CONVERSION * $FEEDRATEDECIMALSHIFT
IF $CONFIGFEEDRATEONMOVE=0
FORMAT={NSP :M}F{FEEDRATE FORMAT}
ELSE
FORMAT={OSP :M}F{FEEDRATE FORMAT}
END

[KERF VALUE]
IF $CONFIGUSEDVALUE=1
// D value as kerf
ARGUMENT=$DVALUE
FORMAT={OSP :M}D%02d
ELSE
IF $CONFIGUSEDVALUE=0
// Kerf as actual kerf (typically with a leading K)
MODAL_ARGUMENT=$KERF
ARGUMENT=$KERF * $CONVERSION * $KERFDECIMALSHIFT
FORMAT={NSP :M}D{SP}{XY FORMAT}
ELSE
IF $CONFIGUSEDVALUE=3
// For TurboNest CFFs that want a D register but can't use a Process
// Parameter column, use the Kerf column as the D register number
ARGUMENT=$KERF * $CONVERSION
FORMAT={OSP :M}D%02.0lf
END
END
END

[OUTPUT DWELL]
IF $DWELL!=0
// Don't output 0 dwell times. Change the above line if you need to do so.
ARGUMENT=$DWELL * $DWELLDECIMALSHIFT
// Dwell times are usually specified with an F, X, or P value
FORMAT={LINENO :M}G04{OSP :M}P{DWELL FORMAT}
END

[CONDITIONS PART OF THE CFF]

[MAXLINENO]
9999

[TORCH SPACING REQUIRED]
($TORCHSPACING != $PREVTORCHSPACING || $NUMTORCHES != $PREVNUMTORCHES)

[KERF STILL ON]
($KERFDIR = LEFT || $KERFDIR = RIGHT)

[MOTION REQUIRED]
(($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5 > 0.001

[NORMAL AXIS DIRECTION]
(($AXIS_SWAP_TYPE=NONE) || ($AXIS_SWAP_TYPE=SWAP90) || ($AXIS_SWAP_TYPE=SWAP180) || ($AXIS_SWAP_TYPE=SWAP270))

[INSIDE CW ARC TOO SMALL FOR KERF]
($CONFIGUSEDVALUE<3 && ($MOTIONTYPE=2 && $KERFDIR=RIGHT && $RADIUS<$KERF*0.5))

[INSIDE CCW ARC TOO SMALL FOR KERF]
($CONFIGUSEDVALUE<3 && ($MOTIONTYPE=3 && $KERFDIR=LEFT && $RADIUS<$KERF*0.5))

[ARC TOO LINEAR]
({CHORD LENGTH}<(($RADIUS^2-($RADIUS-0.002)^2)^0.5)*2 && $RADIUS>3 && $ARCANGLE<10)

[ARC RADIUS TOO SMALL]
($RADIUS < 0.008000 || ({CHORD LENGTH} < 0.00200 && $ARCANGLE<10))

[CHECK FOR ARC TOO SMALL]
$ARCTOOSMALL:=0
IF {INSIDE CW ARC TOO SMALL FOR KERF}
$ARCTOOSMALL:=1
END
IF {INSIDE CCW ARC TOO SMALL FOR KERF}
$ARCTOOSMALL:=1
END
IF {ARC TOO LINEAR}
$ARCTOOSMALL:=1
END
IF {ARC RADIUS TOO SMALL}
$ARCTOOSMALL:=1
END

[RAPID INIT MOTION ALLOWED]
(($X - $INITPTX)^2 + ($Y - $INITPTY)^2)^0.5 > 0.0100 && $PROCESSONSTATE = FALSE

[ARC RADIUS]
(($I - $LASTX)^2 + ($J - $LASTY)^2)^0.5

[CHORD LENGTH]
(($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5

[CNC TOKEN DEBUG]
// See FogBugz #2923 for details
0

[CHARACTER REPLACE TABLE]
(|_
)|_

[SP]
ARGUMENT=$SPACE
FORMAT=%c

[OSP]
// This section is for an Optional SPace between words.
IF 'NSETTING(CFF Options,Space Separators)=1
{SP}
END

[NSP]
// This section is called for the first instance after an N number (at least that's the goal)
IF 'NSETTING(CFF Options,Space Separators)=1 && $USELINENUMBERS=EVERYLINE
{SP}
END

[KSP]
// This section is used before a kerf command since it can show up either on a line
// by itself (use NSP), or with other codes (use OSP)
IF $CONFIGUSEKERFONLEADINMOVE=0
{NSP :M}
ELSE
{OSP :M}
END

[PRONEST 9.1]
(($MODEL_VERSION_MAJOR=9 && $MODEL_VERSION_MINOR>=1) || $MODEL_VERSION_MAJOR>=10)

[CFFDIR]
IF $CFFDIR=none
$CFFDIR:='SUBSTRING($CFFNAME,'RANGE(0,'TEXTLEN($CF FNAME)-'TEXTLEN($ROOTCFFNAME)-6))
END
ARGUMENT=$CFFDIR
FORMAT=%s
// As of the 8.3 release version, the CFFDIR variable is optional in the user
// defined variables. In all prior release versions, it is required.

[ROOT CFF NAME]
ARGUMENT=$ROOTCFFNAME
FORMAT=%s

[POST PROCESSING]
// Uncomment if an executable is needed
//'EXECUTE "{CFFDIR}\{ROOT CFF NAME}.exe" "{CNC NAME}"

[Custom Settings]
{Config Messages Setting}
{Exhaust Fan Setting}
{Include Material Thickness Setting}
{Include Transfer Height Setting}
{Include Pierce Height Setting}
{Include Cut Height Setting}
{Include Pierce Time Setting}
{Include Arc Voltage Setting}
{Autoheight on off codes Setting}
{Default Raise Height Setting}
{Use M45 Codes}
{Scribe Tool Marker Offset Setting}
{Scribe Tool Lower Code Setting}
{Scribe Tool Activation Code Setting}
{Scribe Tool Delay Setting}

{Stop Before Prepiercing Setting}
{Stop After Prepiercing Setting}

{Use Percent At Start}
{Include File Name Program Number}
{Include Units}
{Include Mode}
{Include Zero}
{Profile Line Numbers}
{Line Number Format}
{End of Program Code}
{Use Percent At End}

{Kerf On Location}
{Kerf Off Location}
{Delay Kerf OFF on Arc}
{Kerf Size Display}
{Kerf D Value}

{Modal G Codes}
{G Code Style}
{Spaces between words}
{Modal XY Codes}
{Inc IJ Codes}
{Feedrate Location}
{Modal Feedrates}
{Quadrant Arcs}
{AHC Codes}
{Force Off Up}
{Exact Stop Check Setting}
{Exact Stop Angle Setting}
{Dimension Format Setting}

[Config Messages Setting]
Section=CFF Options
Ident=Config Messages
Default=3
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Old format;<1>Voice message, smoke/dust collector commands;<2>Stripped down format;<3>Standard format
Tab=Dynatorch
Category=Start/Finish
Caption=Program format
Hidden=1

[Exhaust Fan Setting]
Section=CFF Options
Ident=Exhaust Fan
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include M66/M67;<1>Include M66/M67
Tab=Dynatorch
Category=Exhaust Fan
Caption=Use exhaust fan on/off commands
Hidden=0

[Include Material Thickness Setting]
Section=CFF Options
Ident=Include Material Thickness
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include thickness;<1>Include M42 material thickness
Tab=Dynatorch
Category=Cut Chart
Caption=Material thickness
Hidden=0

[Include Transfer Height Setting]
Section=CFF Options
Ident=Include Transfer Height
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include transfer height;<1>Include M21 transfer height
Tab=Dynatorch
Category=Cut Chart
Caption=Transfer height
Hidden=1

[Include Pierce Height Setting]
Section=CFF Options
Ident=Include Pierce Height
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include pierce height;<1>include M22 pierce height
Tab=Dynatorch
Category=Cut Chart
Caption=Pierce height
Hidden=1

[Include Cut Height Setting]
Section=CFF Options
Ident=Include Cut Height
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include cut height;<1>Include M23 cut height
Tab=Dynatorch
Category=Cut Chart
Caption=Cut height
Hidden=1

[Include Pierce Time Setting]
Section=CFF Options
Ident=Include Pierce Time
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include pierce time;<1>include M25 pierce time
Tab=Dynatorch
Category=Cut Chart
Caption=Pierce time
Hidden=0

[Include Arc Voltage Setting]
Section=CFF Options
Ident=Include Arc Voltage
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Do not include arc voltage;<1>Include M28 arc voltage
Tab=Dynatorch
Category=Cut Chart
Caption=Arc voltage
Hidden=1

[Autoheight on off codes Setting]
Section=CFF Options
Ident=AHC OnOff Codes
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>G36/G38;<1>M36/M38
Tab=Dynatorch
Category=Auto Height Control
Caption=AHC on/off codes
Hidden=1

[Default Raise Height Setting]
Section=CFF Options
Ident=Raise Height
Default=2
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No raise height;<1>Ask for raise height;<2>Raise height from xls
Tab=Dynatorch
Category=Raise Heights
Caption=Raise heights
Hidden=1

[Use M45 Codes]
Section=CFF Options
Ident=M45 Codes
Default=2
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No mode codes;<1>M45 P codes;<2>G60/G61/G62 codes
Tab=Dynatorch
Category=Mode Change Codes
Caption=Codes to use to change between cutting, marking
Hidden=1

[Scribe Tool Marker Offset Setting]
Section=CFF Options
Ident=Scribe Tool Marker Offset
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>G55;<1>G541
Tab=Dynatorch
Category=Scribe Tool
Caption=Marker offset
Hidden=0

[Scribe Tool Lower Code Setting]
Section=CFF Options
Ident=Scribe Tool Lower Code
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>None;<1>M60/M61
Tab=Dynatorch
Category=Scribe Tool
Caption=Lowering/raising codes
Hidden=0

[Scribe Tool Activation Code Setting]
Section=CFF Options
Ident=Scribe Tool Activation Code
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>M08/M09;<1>G23/G25;<1>G62/G63
Tab=Dynatorch
Category=Scribe Tool
Caption=Activation/deactivation codes
Hidden=0

[Scribe Tool Delay Setting]
Section=CFF Options
Ident=Scribe Tool Delay
Default=0
DataType=Float
Units=None
Tab=Dynatorch
Category=Scribe Tool
Caption=Delay after scribe code activation
Hidden=0

[Stop Before Prepiercing Setting]
Section=CFF Options
Ident=Stop Before Prepiercing
Default=0
DataType=Boolean
Tab=Behaviors
Category=Machine Stops
Caption=Stop before pre-piercing

[Stop After Prepiercing Setting]
Section=CFF Options
Ident=Stop After Prepiercing
Default=1
DataType=Boolean
Tab=Behaviors
Category=Machine Stops
Caption=Stop after pre-piercing

[Use Percent At Start]
Section=CFF Options
Ident=PercentAtStart
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No percent;<1>Percent only;<2>Percent with file name;<3>Percent with program number
Tab=Start/End of File
Category=Start of File
Caption=Include % at start of file
Hidden=1

[Include File Name Program Number]
Section=CFF Options
Ident=Program Name Number
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No program name/number;<1>Program number with P;<2>Program number with O;<3>File name with P;<4>File name with O;<5>File name in (, )
Tab=Start/End of File
Category=Start of File
Caption=Include program identifier
Hidden=1

[Include Units]
Section=CFF Options
Ident=Units
Default=2
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No units code;<1>G70/G71;<2>G20/G21
Tab=Start/End of File
Category=Start of File
Caption=Units code
Hidden=1

[Include Mode]
Section=CFF Options
Ident=Mode
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No mode code;<1>G90/G91
Tab=Start/End of File
Category=Start of File
Caption=Mode code
Hint=G90 is the usual code for absolute X, Y values, G91 is the usual code for incremental X, Y values
Hidden=1

[Include Zero]
Section=CFF Options
Ident=Zero
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No zero command;<1>G92X0Y0;<2>G92X0Y0 only for absolute
Tab=Start/End of File
Category=Start of File
Caption=Zero the X, Y axis
Hint=G92X0Y0 is usually only used with a G90 code
Hidden=1

[Profile Line Numbers]
Section=CFF Options
Ident=Profile Line Numbers
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>On a line by itself;<1>With a rapid motion line
Tab=Start/End of File
Category=Line Numbers
Caption=Location of start of profile line numbers
Hint=Only applies if using line numbers at start of part
Hidden=1

[Line Number Format]
Section=CFF Options
Ident=Line Numbers
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No leading zeros;<3>3 digits;<4>4 digits;<5>5 digits
Tab=Start/End of File
Category=Line Numbers
Caption=Line number format

[End of Program Code]
Section=CFF Options
Ident=End of Program Code
Default=2
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No code;<1>M02;<2>M30
Tab=Start/End of File
Category=End of File
Caption=End of program code
Hidden=1

[Use Percent At End]
Section=CFF Options
Ident=PercentAtEnd
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No percent;<1>Include %
Tab=Start/End of File
Category=End of File
Caption=Include % at end of file
Hidden=1

[Kerf On Location]
Section=CFF Options
Ident=Kerf ON Location
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Line by itself;<1>On motion line
Tab=Kerf
Category=Location
Caption=G41/G42 location
Hidden=1

[Kerf Off Location]
Section=CFF Options
Ident=Kerf OFF Location
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Line by itself;<1>On motion line
Tab=Kerf
Category=Location
Caption=G40 location
Hidden=1

[Delay Kerf OFF on Arc]
Section=CFF Options
Ident=Delay Kerf OFF on Arc
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>G40 can occur while in G02/G03 mode;<1>G40 can only occur with G00/G01
Tab=Kerf
Category=Location
Caption=Delay kerf off on arc
Hidden=1

[Kerf Size Display]
Section=CFF Options
Ident=Kerf Size
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<2>No kerf size included;<0>Include kerf as D size;<1>Include D register
Tab=Kerf
Category=Size
Caption=Kerf size
Hidden=1

[Kerf D Value]
Section=CFF Options
Ident=Kerf D Value
Default=1
DataType=Integer
Units=None
Tab=Kerf
Category=D Value
Caption=D register
Hint=Only used if kerf size is include D register and value is not supplied by process parameter spreadsheet
Hidden=1

[Modal G Codes]
Section=CFF Options
Ident=G Codes Modal
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Include G00/G01/G02/G03 on every line;<1>Suppress repeated G00/G01/G02/G03 codes
Tab=Motion
Category=Word Address Codes
Caption=Repeated motion G codes
Hidden=1

[G Code Style]
Section=CFF Options
Ident=G Code Format
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Use G00/G01/G02/G03;<1>Use G0/G1/G2/G3;<2>Use G01/G02/G03;<3>Use G1/G2/G3;<4>Use only G02/G03;<5>Use only G2/G3
Tab=Motion
Category=Word Address Codes
Caption=G code style
Hidden=1

[Spaces between words]
Section=CFF Options
Ident=Space Separators
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No extra spaces;<1>Spaces between G, X, Y, etc
Tab=Motion
Category=Word Address Codes
Caption=Include spaces
Hidden=1

[Modal XY Codes]
Section=CFF Options
Ident=XY Codes Modal
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Include X, Y on every line;<1>Suppress repeated X, Y codes;<2>Include X, Y on every rapid motion, suppress otherwise
Tab=Motion
Category=Word Address Codes
Caption=Repeated motion XY codes
Hidden=1

[Inc IJ Codes]
Section=CFF Options
Ident=IJ Incremental
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>I, J are absolute if X, Y are absolute;<1>I, J always incremental;<2>Use R codes
Tab=Motion
Category=Word Address Codes
Caption=Absolute or incremental I, J codes if X, Y are absolute
Hidden=1

[Feedrate Location]
Section=CFF Options
Ident=Feedrate Location
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Feedrate on a line by itself;<1>Feedrate on motion lines;<2>No feedrates
Tab=Motion
Category=Word Address Codes
Caption=Feedrate location
Hidden=0

[Modal Feedrates]
Section=CFF Options
Ident=Modal Feedrates
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Output feedrate with each process start;<1>Suppress feedrate if it hasn't changed;<2>Feedrate on every line
Tab=Motion
Category=Word Address Codes
Caption=Repeated feedrates
Hidden=1

[Quadrant Arcs]
Section=CFF Options
Ident=Quadrant Arcs
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Arcs as single motions;<1>Break arcs at every quadrant crossing;<2>Break arcs at 0, 180;<3>Break arcs over 180 in half
Tab=Motion
Category=Word Address Codes
Caption=Quadrant arcs
Hint=If using R codes for arcs, use Break arcs over 180 in half
Hidden=1

[AHC Codes]
Section=CFF Options
Ident=AHC Codes
Default=2
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Assume AHC starts off;<1>Assume AHC starts on;<2>Don't assume - start with AHC on or off;<3>Don't use AHC codes
Tab=Motion
Category=Word Address Codes
Caption=AHC codes
Hidden=1

[Force Off Up]
Section=CFF Options
Ident=Force OffUp
Default=1
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Follow nesting partial, full raises;<1>Force full raise for exterior, skeleton, crop cuts
Tab=Motion
Category=Word Address Codes
Caption=Partial, full raise commands
Hidden=1

[Exact Stop Check Setting]
Section=CFF Options
Ident=Exact Stop Check
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>No exact stop codes;<1>Modal (G61/G64) exact stop codes;<2>One-shot (G09) codes
Tab=Motion
Category=Word Address Codes
Caption=Exact stop codes
Hidden=1
Unsupported=1

[Exact Stop Angle Setting]
Section=CFF Options
Ident=Exact Stop Angle
Default=45
DataType=Float
Units=None
Tab=Motion
Category=Word Address Codes
Caption=Exact stop angle
Hint=Changes in angle direction of more than this angle will trigger the exact stop codes
Hidden=1
Unsupported=1

[Dimension Format Setting]
Section=CFF Options
Ident=Dimension Format
Default=0
DataType=Integer
Limit=Choices
Units=None
Choices=<0>Include decimal points;<1>Decimal point with trailing zeros;<2>No decimal, trailing zeros
Tab=Motion
Category=Word Address Codes
Caption=Dimension format
Hidden=1

[USER DEFINED VARIABLES]
// Internal variables used by the CFF
SAVEPARTNAME|STRING|0
SAVENUM|INTEGER|0
SAVEX|DOUBLE|0.0
SAVEY|DOUBLE|0.0
DX|DOUBLE|0.0
DY|DOUBLE|0.0
EXACTSTOPCHECK|INTEGER|0
ANGLECHANGE|DOUBLE|0.0
KERFSTATUS|INTEGER|0
PREKERFED|INTEGER|0
AHCISON|INTEGER|3
AHC|STRING|ON
CONFIGUSEDVALUE|INTEGER|0
CONFIGUSEKERFONLEADINMOVE|INTEGER|0
CONFIGUSEKERFONLEADOUTMOVE|INTEGER|0
CONFIGNOG40ONARC|INTEGER|0
CONFIGFEEDRATEONMOVE|INTEGER|0
CONFIGSUPRESSFEEDRATE|INTEGER|0
CONFIGUSEEXACTSTOPCHECK|INTEGER|0
CONFIGUSEMODALMOTIONCODES|INTEGER|0
CONFIGUSEMODALXY|INTEGER|0
CONFIGAHCISON|INTEGER|0
CONFIGIJALWAYSINCREMENTAL|INTEGER|1
CONFIGSOPLINENOLOCATION|INTEGER|0
CONFIGFORCEEXTERIORTOOFFUP|INTEGER|1
CONFIGDELAYPROCESSONMOTION|INTEGER|0
FORCEOFFUP|INTEGER|0
ZEROPTX|DOUBLE|0.0
ZEROPTY|DOUBLE|0.0
CFFDIR|STRING|none
CURRENTMOTION|INTEGER|-1
MOTIONTYPE|INTEGER|-1
INTAB|INTEGER|0
INCHAIN|INTEGER|0
ARCTOOSMALL|INTEGER|0
SPACE|INTEGER|32
CFGISETTING|INTEGER|0
CFFDSETTING|DOUBLE|0.0
ACTUALFEEDRATE|DOUBLE|0.0
TORCHISON|INTEGER|0
ASYNCSTOPDISTANCE|DOUBLE|0.0
DIDMATERIALTHICKNESS|INTEGER|0
NEEDM27P0|INTEGER|0
SCRIBEHEADDOWN|INTEGER|0
TRUEHOLEMODE|INTEGER|0
DIDPREPIERCEMESSAGE|INTEGER|0
//
// Possible Process Parameters Start Here
CUTSUB|INTEGER|0
CUTCONDITION|INTEGER|0
//
// Process Parameter Columns Start Here
//
// Exact Stop Angle is the angle change where G61/G64/G09 take effect
EXACTSTOPANGLE|DOUBLE|45.0
// Feedrate during cutting/scribing
FEEDRATE|DOUBLE|0.0
// D Value is the value used with G41/G42 kerf compensation, not the kerf size itself
DVALUE|INTEGER|0
// Disable AHC will output disable Height Control for a profile, typically small holes
DISABLEAHC|INTEGER|0
// Kerf is the total width of the removed material during cutting
KERF|DOUBLE|0.0
// Dwell is typically used with center marking for the length of the delay
DWELL|DOUBLE|0.0
// Leadin Feedrate is used if non-zero for the leadin motions only
LEADINFEEDRATE|DOUBLE|0.0
CUTCHARTMATERIAL|INTEGER|0
CUTCHARTCURRENT|INTEGER|0
CUTCHARTGAS|INTEGER|0
PIERCEHEIGHT|DOUBLE|0.0
CUTHEIGHT|DOUBLE|0.0
//PIERCETIME|DOUBLE|0.0
AHCOFFDISTANCE|DOUBLE|0.0
ARCOFFDISTANCE|DOUBLE|0.0
ARCVOLTAGE|DOUBLE|0.0
CHANGE|INTEGER|0
CUTMODE|STRING|PLASMA
ASYNCHRONOUSSTOP|DOUBLE|0.0
NCCOMMENT|STRING|none