Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - [POST_VERSION] #DO NOT MOVE OR ALTER THIS LINE# V20.00 P0 E1 W20.00 T1661810539 M20.00 I0 O0
 - # Post Name : MPMASTER
 - # Product : MILL
 - # Machine Name : MACHINE
 - # Control Name : CONTROL
 - # Description : IHS MASTER GENERIC MILL G-CODE POST
 - # 4-axis/Axis subs. : YES
 - # 5-axis : NO
 - # Subprograms : YES
 - # Executable : MP v9.19
 - # Post Revision : 9.1.04114 (MC_FULL.MC_MINOR.YYDDD)
 - #
 - # WARNING: THIS POST IS GENERIC AND IS INTENDED FOR MODIFICATION TO
 - # THE MACHINE TOOL REQUIREMENTS AND PERSONAL PREFERENCE.
 - #
 - # --------------------------------------------------------------------------
 - # Revision log:
 - # --------------------------------------------------------------------------
 - # Programmers Note:
 - # IHS 01/30/02 - Mpmaster based on CNC Software's V8/V9 Mpfan, dat
 - # IHS 01/30/02 - Initial post update for V9, dat
 - # IHS 04/01/02 - Comments repeated in translational subs, dat
 - # IHS 05/01/02 - lock_codes logic tweak, dat
 - # IHS 05/07/02 - arccheck set to 3, dat
 - # IHS 05/17/02 - Removed null comment from subs, dat
 - # IHS 05/24/02 - Rotary subprograms mod, dat
 - # IHS 07/17/02 - Incremental drilling calculation mod, dat
 - # IHS 07/25/02 - Switch added to control rotary index move retracts, dat
 - # IHS 10/07/02 - force_dpts switch added, dat
 - # IHS 10/28/02 - Additional rotary sub logic mod, dat
 - # IHS 11/06/02 - Switch added for 4/3 decimal place tapping feeds, dat
 - # IHS 03/10/03 - Synched with updates to Mpfan from V9.1, dat
 - # IHS 04/30/03 - arccheck set to 1, dat
 - # IHS 05/08/03 - A2100-style G18/G19 helical move corrections, dat
 - # IHS 06/27/03 - Initial post update for V9.1 SP1, dat
 - # IHS 10/23/03 - Roughed out auto-launch of HTML.set, dat
 - # IHS 12/12/03 - Comp on arc move warning added, dat
 - # IHS 04/23/04 - non-retract index mod, dat
 - # XXX MM/DD/04 - Written for Company X from Mpmaster, xxx
 - #
 - # --------------------------------------------------------------------------
 - # Features:
 - # --------------------------------------------------------------------------
 - # This post supports Generic Fanuc code output for 3 and 4 axis milling.
 - # It is designed to support the features of Mastercam Mill V9.
 - #
 - # Following Misc. Integers are used:
 - # mi2 - Absolute or Incremental positioning at top level
 - # 0 = absolute
 - # 1 = incremental
 - #
 - # mi9 - Lock on First WCS - Set in first operation
 - # 0 = No
 - # 1 = Yes
 - #
 - # mi10 - M00 before operation
 - # 0 = No
 - # 1 = Yes
 - #
 - # Work offsets:
 - # wcstype - Work coordinate system
 - # 0 = Reference return is generated and G92 with the
 - # X, Y and Z home positions at file head.
 - # 1 = Reference return is generated and G92 with the
 - # X, Y and Z home positions at each tool.
 - # 2 = WCS of G54, G55.... based on Mastercam settings.
 - # 0 thru 5 = The WCS of G54 thru G59 respectively.
 - # 6 and up = The WCS of G54.1 P1 and up.
 - # 3 = Off
 - #
 - #Canned text:
 - # Entering cantext on a contour point from within Mastercam allows the
 - # following functions to enable/disable.
 - # Cantext value:
 - # 1 = Stop = output the "M00" stop code
 - # 2 = Ostop = output the "M01" optional stop code
 - # 3 = Bld on = turn on block delete codes in NC lines
 - # 4 = bLd off = turn off block delete codes in NC lines
 - # 5 = Dwell = Input G04 P1 command
 - #
 - #Milling toolpaths (4 axis)
 - #Layout:
 - # The term "Reference View" refers to the coordinate system associated
 - # with the Top view (Alt-F9, the upper gnomon of the three displayed).
 - # Create the part drawing with the axis of rotation about the axis
 - # of the "Reference View" according to the setting you entered for
 - # 'vmc' (vertical or horizontal) and 'rot_on_x' (machine relative
 - # axis of rotation).
 - # vmc = 1 (vertical machine) uses the top toolplane as the base machine
 - # view.
 - # vmc = 0 (horizontal machine) uses the front toolplane as the base machine
 - # view.
 - # Relative to the machine matrix -
 - # Rotation zero position is on the Z axis for rotation on X axis.
 - # Rotation zero position is on the Z axis for rotation on Y axis.
 - # Rotation zero position is on the X axis for rotation on Z axis.
 - # The machine view rotated about the selected axis as a "single axis
 - # rotation" are the only legal views for 4 axis milling. Rotation
 - # direction around the part is positive in the CCW direction when
 - # viewed from the plus direction of the rotating axis. Set the variable
 - # 'rot_ccw_pos' to indicate the signed direction. Always set the work
 - # origin at the center of rotation.
 - #
 - #Toolplane Positioning:
 - # Create the Cplane and Tplane as the rotation of the machine view about
 - # the selected axis of rotation. The toolplane is used to calculate
 - # the position of the rotary axis. This is the default setting.
 - #
 - #3 Axis Rotary (Polar)
 - # Polar positioning is offered in Mastercam 3 axis toolpaths through the
 - # rotary axis options dialog. The selected toolpath is converted to angle
 - # and radius position. The axis of rotation is forced to zero.
 - #
 - #Axis substitution:
 - # Use the Rotary axis substitution by drawing the geometry flattened
 - # from the cylinder. The rotary axis button must be active for axis
 - # substitution information to be output to the NCI file. The radius of
 - # the rotary diameter is added to all the Z positions at output.
 - #
 - #Simultaneous 4 Axis (11 gcode):
 - # Full 4 axis toolpaths can be generated from various toolpaths under the
 - # 'multi-axis' selection (i.e. Rotary 4 axis). All 5 axis paths are
 - # converted to 4 axis paths where only the angle about the rotation axis
 - # is resolved.
 - #
 - #Drill:
 - # All drill methods are supported in the post. See Simultaneous 4 Axis.
 - #
 - #Additional Notes:
 - # 1) Disable 4 axis by setting the numbered question 164. to 'n'.
 - # 2) G54 calls are generated where the work offset entry of 0 = G54,
 - # 1 = G55, etc.
 - # 3) Metric is applied from the NCI met_tool variable.
 - # 4) Incremental mode calculates motion from home position at toolchanges.
 - # The home position is used to define the last position of the tool
 - # for all toolchanges.
 - # 5) The variable 'absinc' is now pre-defined, set mi2 (Misc. Integer) for
 - # the 'top level' absolute/incremental program output. Subprograms are
 - # updated through the Mastercam dialog settings for sub-programs.
 - # 6) Always avoid machining to the center of rotation with rotary axis!
 - # 7) Transform subprograms are intended for use with G54.. workshifts.
 - #
 - # END_HEADER$
 - #
 - # --------------------------------------------------------------------------
 - # General Output Settings
 - # --------------------------------------------------------------------------
 - spaces$ : 1 #Number of spaces to add between fields
 - omitseq$ : yes$ #Omit sequence numbers?
 - seqmax$ : 9999 #Max. sequence number
 - arcoutput$ : 0 #0 = IJK, 1 = R no sign, 2 = R signed neg. over 180
 - arctype$ : 2 #Arc center 1=abs, 2=St-Ctr, 3=Ctr-St, 4=unsigned inc.
 - breakarcs$ : 0 #Break arcs, 0 = no, 1 = quadrants, 2 = 180deg. max arcs
 - do_full_arc$ : 1 #Allow full circle output? 0=no, 1=yes
 - helix_arc$ : 1 #Support helix arc output, 0=no, 1=all planes, 2=XY plane only
 - compwarn : 1 #Warn if cutter comp applied on arc, 0=no, 1=yes
 - maxrad$ : 999 #Maximum arc radius
 - hel_2100 : no$ #Acramatic 2100 style helical moves, 0=no, 1=yes
 - usecanned : yes$ #Use canned drilling cycles? Set to no for long output.
 - force_dpts : no$ #Force XY output on all drilling lines including cycle call?
 - wcstype : 2 #0 = G92 at start, 1 = G92 at toolchanges, 2 = G54, 3 = Off
 - force_wcs : yes$ #Force WCS output at every toolchange?
 - stagetool : 1 #0 = Do not pre-stage tools, 1 = Stage tools
 - tool_table : 1 #Tool table, 0=no, 1=yes, 2=Predator VCNC, 3=MetaCut View
 - output_z : yes$ #Output Z Min and Z Max values (yes or no)
 - cool_zmove : yes$ #Coolant off with last move
 - use_pitch : 0 #0 = Use feed for tapping, 1 = Use pitch for tapping
 - tap_feed : 0 #0 = 2/1 (in/mm) decimal places, 1 = 4/3 (in/mm) decimal places
 - maxfeedpm : 500 #Limit for feed in inch/min
 - maxfeedpm_m : 2000 #Limit for feed in mm/min
 - use_gear : 0 #Output gear selection code, 0=no, 1=yes
 - max_speed : 10000 #Maximum spindle speed
 - min_speed : 50 #Minimum spindle speed
 - sextnc$ : ".NC" #NC extension override
 - # --------------------------------------------------------------------------
 - # Rotary Axis Settings
 - # --------------------------------------------------------------------------
 - # Typical Vertical
 - srotary : "A" #Rotary axis prefix
 - vmc : 1 #0 = Horizontal Machine, 1 = Vertical Mill
 - rot_on_x : 0 #Default Rotary Axis Orientation, See ques. 164.
 - #0 = Off, 1 = About X, 2 = About Y, 3 = About Z
 - # Typical Horizontal
 - #srotary "B" #Rotary axis prefix
 - #vmc : 0 #0 = Horizontal Machine, 1 = Vertical Mill
 - #rot_on_x : 2 #Default Rotary Axis Orientation, See ques. 164.
 - # #0 = Off, 1 = About X, 2 = About Y, 3 = About Z
 - rot_ccw_pos : 1 #Axis signed dir, 0 = CW positive, 1 = CCW positive
 - ret_on_indx : 1 #Machine home retract on rotary index moves, (0 = no, 1 = yes)
 - index : 0 #Use index positioning, 0 = Full Rotary, 1 = Index only
 - ctable : 5 #Degrees for each index step with indexing spindle
 - one_rev : 0 #Limit rotary indexing between 0 and 360? (0 = No, 1 = Yes)
 - lock_codes : 0 #Use rotary axis unlock/lock M-Codes? (0 = No, 1 = Yes)
 - use_frinv : 0 #Use Inverse Time Feedrates in 4 Axis, (0 = no, 1 = yes)
 - rot_feed : 1 #Use calculated rotary feed values, (0 = no, 1 = yes)
 - maxfrdeg : 2000 #Limit for feed in deg/min
 - maxfrinv : 999.99#Limit for feed inverse time
 - frc_cinit : 1 #Force C axis reset at toolchange
 - ctol : 225 #Tolerance in deg. before rev flag changes
 - ixtol : 0.01 #Tolerance in deg. for index error
 - frdegstp : 10 #Step limit for rotary feed in deg/min
 - # --------------------------------------------------------------------------
 - # Debugging and Factory Set Program Switches
 - # --------------------------------------------------------------------------
 - fastmode$ : yes$ #Posting speed optimizition
 - bug1$ : 2 #0=No display, 1=Generic list box, 2=Editor
 - bug2$ : 60 #Append postline labels, non-zero is column position?
 - bug3$ : 0 #Append whatline no. to each NC line?
 - bug4$ : 0 #Append NCI line no. to each NC line?
 - whatno$ : yes$ #Do not perform whatline branches? (leave as yes)
 - linktolvar$ : 1 #Associate X tolerance variables to V9- variable?
 - linkplnvar$ : 1 #Associate X plane specific variables to V9- variable?
 - # --------------------------------------------------------------------------
 - # Additional General Output Settings
 - # --------------------------------------------------------------------------
 - nobrk$ : no$ #Omit breakup of x, y & z rapid moves
 - progname$ : 1 #Use uppercase for program name (sprogname)
 - sub_level$ : 1 #Enable automatic subprogram support
 - sub_seq_typ$ : 1 #Enable subprogram sequence number reset at sub call
 - arccheck$ : 1 #Check for small arcs, convert to linear
 - atol$ : 0.01 #Angularity tolerance for arccheck
 - ltol$ : 0.002 #Length tolerance for arccheck
 - vtol$ : 0.001#System tolerance
 - mtol$ : 0.000001#Avoid internal rounding assuming 6 dec NCI
 - ltol_m : 0.05 #Length tolerance for arccheck, metric
 - vtol_m : 0.025#System tolerance, metric
 - tooltable$ : 1 #Read for tool table and pwrtt - use tool_table to disable
 - m_one : -1 #Define constant
 - zero : 0 #Define constant
 - one : 1 #Define constant
 - two : 2 #Define constant
 - three : 3 #Define constant
 - four : 4 #Define constant
 - five : 5 #Define constant
 - c9k : 9999 #Define constant
 - skp_lead_flgs$ : 0 #Do NOT use v9 style contour flags
 - get_1004$ : 1 #Find gcode 1004 with getnextop?
 - rpd_typ_v7$ : 0 #Use Version 7 style contour flags/processing?
 - strtool_v7$ : 1 #Use Version 7 toolname? [0=Filename,1=Name,2=Path\Name]
 - tlchng_aft$ : 2 #Delay call to toolchange until move line
 - cant_tlchng$ : 1 #Ignore cantext entry on move with tlchng_aft
 - newglobal$ : 1 #Error checking for global variables
 - getnextop$ : 1 #Build the next variable table
 - error_msg$ : 1 #0=file and prompt, 1=to screen, 2=one to screen
 - err_file$ : 1 #0=fatal, 1=all errors, 2=inc mprint, 3=inc prompts, 4=always
 - # --------------------------------------------------------------------------
 - # Enable Canned Drill Cycle Switches
 - # --------------------------------------------------------------------------
 - usecandrill$ : yes$ #Use canned cycle for drill
 - usecanpeck$ : yes$ #Use canned cycle for Peck
 - usecanchip$ : yes$ #Use canned cycle for Chip Break
 - usecantap$ : yes$ #Use canned cycle for Tap
 - usecanbore1$ : yes$ #Use canned cycle for Bore1
 - usecanbore2$ : yes$ #Use canned cycle for Bore2
 - usecanmisc1$ : yes$ #Use canned cycle for Misc1
 - usecanmisc2$ : yes$ #Use canned cycle for Misc2
 - # --------------------------------------------------------------------------
 - # Common User-defined Variable Initializations (not switches!)
 - # --------------------------------------------------------------------------
 - xia : 0 #Formated absolute value for X incremental calculations
 - yia : 0 #Formated absolute value for Y incremental calculations
 - zia : 0 #Formated absolute value for Z incremental calculations
 - cia : 0 #Formated absolute value for C incremental calculations
 - cuttype : 0 #Cut type flag
 - #0 = Tool Plane, 1 = Axis Subs, 2 = Polar, 3 = 4/5 axis
 - bld : 0 #Block delete active
 - result : 0 #Return value for functions
 - sav_spc : 0 #Save spaces
 - sav_gcode : 0 #Gcode saved
 - sav_absinc : 0 #Absolute/Incremental Saved Value
 - sav_coolant : 0 #Coolant saved
 - sav_workofs : 0 #Saved work offset
 - sav_frc_wcs : 0 #Force work offset flag saved
 - sav_progno : 0 #Saved program number
 - #sav_n1 : 0 #Saved sequence number
 - #sav_n2 : 0 #Saved sequence number
 - sav_rot_on_x : 0 #Rotary configuration saved
 - toolchng : 1 #On a toolchange flag
 - spdir2 : 1 #Copy for safe spindle direction calculation
 - #Drill variables
 - drlgsel : -1 #Drill Select Initialize
 - drillref : 0 #Select drill reference
 - peckacel$ : 0 #Fractional percent to reduce peck2 when usecan.. : no
 - drlgcode : 0 #Save Gcode in drill
 - sav_dgcode : 0 #Drill gcode saved
 - #Subprogram variables
 - mr_rt_actv : 0 #Flag to indicate if G51/G68 is active
 - #0=Off, 1=Toolchange, 2=Subprogram call/start, G68
 - #3=Absolute start, both
 - rt_csav : 0 #C saved value
 - end_sub_mny : 0 #Many tool setting captured at transform sub end
 - #Rotary/Index variables
 - csav : 0 #C saved value
 - prvcabs : 0 #Saved cabs from pe_inc_calc,
 - #Used for rotary feed and direction calculations
 - cdelta : 0 #Calculation for angle change
 - rev : 0 #Calculation for deg/min
 - sav_rev : 0 #Saved revolution counter
 - indx_out : c9k #Rotation direction calculation
 - fmt 16 indx_mc #Rotation direction calculation
 - #Vector Constants for Rotatary Calculations
 - aaxisx : 1 #A axis rotation vector constant
 - aaxisy : 0 #A axis rotation vector constant
 - aaxisz : 0 #A axis rotation vector constant
 - baxisx : 0 #B axis rotation vector constant
 - baxisy : 1 #B axis rotation vector constant
 - baxisz : 0 #B axis rotation vector constant
 - caxisx : 0 #C axis rotation vector constant
 - caxisy : 0 #C axis rotation vector constant
 - caxisz : 1 #C axis rotation vector constant
 - #Feedrate calculation variables
 - frdelta : 0 #Calculation for deg/min
 - frinv : 0 #Feedrate inverse time
 - frdeg : 0 #Feedrate deg/min actual
 - prvfrdeg : 0 #Feedrate deg/min actual
 - ldelta : 0 #Calculation for deg/min, linear
 - cldelta : 0 #Calculation for deg/min, linear and rotary
 - circum : 0 #Calculation for deg/min
 - ipr_type : 0 #Feedrate for Rotary, 0 = UPM, 1 = DPM, 2 = Inverse
 - #Misc variables
 - tcnt : 1 # Count the number of tool changes
 - toolcount : 1 # Tool counter for logic control
 - toolcountn : 0 # Next tool counter for logic control
 - toolcountp : 0 # Previous tool counter for logic control
 - tooltotal : 0 # Tool tool count
 - nexttool : 0 # Next actual tool
 - nexttp : 1 # Next tool plane
 - prvtp : 0 # Previous tool plane
 - counter : 1 # Counter
 - nstrlen : 0 # Length of string
 - last_op_id : 0 # Previous internal operation id
 - last_cuttype : 0 # Previous cuttype
 - stock_typ : 0 # Predator Stock Type
 - cyl_typ : 0 # Predator Cyl Stock Type
 - z_min$ : 1000 # Min Z
 - z_tmin : 1000 # Overall min Z
 - z_max$ : -1000# Max Z
 - z_tmax : -1000# Overall max Z
 - tapflg : 0 # Flag for tap cycle
 - sav_mi9 : 0 # Saved mi9 value
 - rotretflg : 0
 - compwarnflg : 0
 - # --------------------------------------------------------------------------
 - # FORMULAS - global formulas
 - # --------------------------------------------------------------------------
 - toolcountn = toolcount + 1 # Index!
 - toolcountp = toolcount - 1 # Index!
 - # --------------------------------------------------------------------------
 - # Format statements - n=nonmodal, l=leading, t=trailing, i=inc, d=delta
 - # --------------------------------------------------------------------------
 - #Default english/metric position format statements
 - fs2 1 0.7 0.6 #Decimal, absolute, 7 place, default for initialize (:)
 - fs2 2 0.4 0.3 #Decimal, absolute, 4/3 place
 - fs2 3 0.4 0.3d #Decimal, delta, 4/3 place
 - #Common format statements
 - fs2 4 1 0 1 0 #Integer, not leading
 - fs2 5 2 0 2 0l #Integer, force two leading
 - fs2 6 3 0 3 0l #Integer, force three leading
 - fs2 7 4 0 4 0l #Integer, force four leading
 - fs2 8 5 0 5 0l #Integer, force five leading
 - fs2 9 0.1 0.1 #Decimal, absolute, 1 place
 - fs2 10 0.2 0.2 #Decimal, absolute, 2 place
 - fs2 11 0.3 0.3 #Decimal, absolute, 3 place
 - fs2 12 0.4 0.4 #Decimal, absolute, 4 place
 - fs2 13 0.5 0.5 #Decimal, absolute, 5 place
 - fs2 14 0.3 0.3d #Decimal, delta, 3 place
 - fs2 15 0.2 0.1 #Decimal, absolute, 2/1 place (feedrate)
 - fs2 16 1 0 1 0n #Integer, forced output
 - fs 17 1.4lt #Decimal, absolute, four trailing
 - # --------------------------------------------------------------------------
 - #String and string selector definitions for NC output
 - # --------------------------------------------------------------------------
 - #Numbered question 164. string to detect Rotary axis y/n
 - sq164 : ""
 - #Address string definitions
 - stri : "I"
 - strj : "J"
 - strk : "K"
 - strm : "M"
 - strn : "N"
 - stro : "O"
 - strp : "P"
 - srad : "R"
 - srminus : "R-"
 - sblank : ""
 - #Cantext string definitions (spaces must be padded here)
 - sm00 : "M00"
 - sm01 : "M01"
 - scant5 : "G04 P1"
 - strtextno : ""
 - strcantext : ""
 - #Transform mirror and rotate codes
 - strns_mir_on : "G51.1" #Programmable mirror image code
 - strns_mir_off : "G50.1" #Programmable mirror image cancel code
 - strns_rot_on : "G68" #Coordinate System Rotation
 - strns_rot_off : "G69" #Coordinate System Rotation Cancel
 - #Launch HTML.set during posting
 - sdll : "C:\Mcam9\Chooks\MP_Multi.dll" # Name of the .DLL to be called
 - spost1 : "HTML.SET"
 - snci : ""
 - sparams1 : ""
 - sspace : " " # Contains a SPACE character
 - ssq : "'" # Contains a Single Quote character
 - sdq : '"' # Contains a Double Quote character
 - # --------------------------------------------------------------------------
 - # Error messages
 - # --------------------------------------------------------------------------
 - saxiswarn : "WARNING-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') OVERWRITTEN BY OPERATION"
 - saxisoff : "ERROR-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') IS DISABLED"
 - saxiserror : "ERROR-INVALID ROTARY AXIS ASSIGNMENT ('rot_on_x') FOR CURRENT OPERATION"
 - sindxerror : "WARNING-INDEX ANGLE DOES NOT MATCH POST SETTING ('ctable')"
 - stlorgerr : "ERROR-TOOL ORIGIN DOES NOT MATCH CENTER OF ROTATION IN POLAR MILLING"
 - shomeserror : "ERROR-G92 WORK OFFSET ('wcstype') DOES NOT SUPPORT TRANSFORM SUBPROGRAM"
 - sprgnerror : "ERROR-SUBPROGRAM NUMBER MATCHES THE MAIN PROGRAM NUMBER"
 - scompwarn : "WARNING-CUTTER COMP APPLIED ON ARC MOVE"
 - # --------------------------------------------------------------------------
 - # Misc strings
 - # --------------------------------------------------------------------------
 - snull : "" # Null character string
 - sdot : "." # dot string
 - stest1 : "" # Test string 1
 - stilde : "~" # Tidle string
 - snocomm : "DEFINE TOOL NAMES"
 - stoper : "" # String for tool notes
 - spostname : "" # Post name
 - snullop : "UNDEFINED OPERATION"
 - slicense : "IN-HOUSE SOLUTIONS"
 - # ------------------------------------------------------------------------
 - # Parameter Tables
 - # ------------------------------------------------------------------------
 - fprmtbl 13 2 # Multisurf Finish
 - 10010 stock # Amount of stock to leave on drive surfs
 - 10227 check # Amount of stock to leave on check surfs
 - fprmtbl 14 2 # Multisurf Rough
 - 10010 stock # Amount of stock to leave on drive surfs
 - 10227 check # Amount of stock to leave on check surfs
 - # --------------------------------------------------------------------------
 - # Buffer 3 - Holds the variable 'tlplnno' for each toolpath segment
 - # --------------------------------------------------------------------------
 - rc3 : 1
 - wc3 : 1
 - fbuf 3 0 1 0 0 # Buffer 3
 - # --------------------------------------------------------------------------
 - # Buffer 4 - Holds the variable 't' for each toolpath segment
 - # --------------------------------------------------------------------------
 - rc4 : 1
 - wc4 : 1
 - fbuf 4 0 1 0 0 # Buffer 4
 - # --------------------------------------------------------------------------
 - # Buffer 5 - Min / Max
 - # --------------------------------------------------------------------------
 - b5_gcode : 0
 - b5_zmin : 0
 - b5_zmax : 0
 - rc5 : 2
 - wc5 : 1
 - size5 : 0
 - fbuf 5 0 3 0 0 #Min / Max
 - # --------------------------------------------------------------------------
 - # Question format statements
 - # --------------------------------------------------------------------------
 - fq 1 stock_typ "Predator Stock [0=Box,1=Cylindrical]"
 - fq 2 cyl_typ "Cylindrical Stock Axis [1=X,2=Y,3=Z]"
 - # --------------------------------------------------------------------------
 - # Strings - String labels must start with 's' - they are not pre-assigned
 - # --------------------------------------------------------------------------
 - #Select operation note
 - sop00 : "NULL." # String definition
 - sop01 : "CONTOUR." # " "
 - sop02 : "CONTOUR." # " "
 - sop03 : "DRILL/MISC." # " "
 - sop04 : "POCKET." # " "
 - sop05 : "RULED." # " "
 - sop06 : "2D-SWEPT." # " "
 - sop07 : "3D-SWEPT." # " "
 - sop08 : "REVOLVED." # " "
 - sop09 : "LOFT." # " "
 - sop10 : "COONS." # " "
 - sop11 : "FILLET." # " "
 - sop12 : "FLOWLINE." # " "
 - sop13 : "M.FINISH." # " "
 - sop14 : "M.ROUGH." # " "
 - sop15 : "POINT." # " "
 - sop16 : "DRILL5AX." # " "
 - sop17 : "CURVE5AX." # " "
 - sop18 : "SWARF5AX." # " "
 - sop19 : "FACING." # " "
 - sop20 : "OP20." # " "
 - sopnote : "" # Target string
 - fstrsel sop00 opcode$ sopnote 21 -1
 - # --------------------------------------------------------------------------
 - #Select operation note
 - sdr00 : "DRILL/CBORE" # String definition
 - sdr01 : "PECK DRILL." # " "
 - sdr02 : "CHIP BREAK." # " "
 - sdr03 : "TAP." # " "
 - sdr04 : "BORE 1." # " "
 - sdr05 : "BORE 2." # " "
 - sdr06 : "FINE BORE." # " "
 - sdr07 : "MISC 2." # " "
 - sdr08 : "CUST 9." # " "
 - sdr09 : "CUST 10." # " "
 - sdr10 : "CUST 11." # " "
 - sdr11 : "CUST 12." # " "
 - sdr12 : "CUST 13." # " "
 - sdr13 : "CUST 14." # " "
 - sdr14 : "CUST 15." # " "
 - sdr15 : "CUST 16." # " "
 - sdr16 : "CUST 17." # " "
 - sdr17 : "CUST 18." # " "
 - sdr18 : "CUST 19." # " "
 - sdr19 : "CUST 20." # " "
 - sdrnote : "" # Target string
 - fstrsel sdr00 nextdc$ sdrnote 20 -1
 - # --------------------------------------------------------------------------
 - # Select month
 - smon00 : ""
 - smon01 : "01"
 - smon02 : "02"
 - smon03 : "03"
 - smon04 : "04"
 - smon05 : "05"
 - smon06 : "06"
 - smon07 : "07"
 - smon08 : "08"
 - smon09 : "09"
 - smon10 : "10"
 - smon11 : "11"
 - smon12 : "12"
 - smonth : ""
 - fstrsel smon00 month$ smonth 13 -1
 - # --------------------------------------------------------------------------
 - # General G and M Code String select tables
 - # --------------------------------------------------------------------------
 - # Motion G code selection
 - sg00 : "G00" #Rapid
 - sg01 : "G01" #Linear feed
 - sg02 : "G02" #Circular interpolation CW
 - sg03 : "G03" #Circular interpolation CCW
 - sg04 : "G04" #Dwell
 - sgcode : "" #Target for string
 - fstrsel sg00 gcode$ sgcode 5 -1
 - # --------------------------------------------------------------------------
 - # Select work plane G code
 - sg17 : "G17" #XY plane code
 - sg19 : "G19" #YZ plane code
 - sg18 : "G18" #XZ plane code
 - sgplane : "" #Target string
 - fstrsel sg17 plane$ sgplane 3 -1
 - # --------------------------------------------------------------------------
 - #Select english/metric code
 - sg20 : "G20" #Inch code
 - sg21 : "G21" #Metric code
 - smetric : "" #Target string
 - fstrsel sg20 met_tool$ smetric 2 -1
 - # --------------------------------------------------------------------------
 - # Cutter compensation G code selection
 - scc0 : "G40" #Cancel cutter compensation
 - scc1 : "G41" #Cutter compensation left
 - scc2 : "G42" #Cutter compensation right
 - sccomp : "" #Target for string
 - fstrsel scc0 cc_pos$ sccomp 3 -1
 - # --------------------------------------------------------------------------
 - # Canned drill cycle string select
 - sg81 : "G81" #drill - no dwell
 - sg81d : "G82" #drill - with dwell
 - sg83 : "G83" #peck drill - no dwell
 - sg83d : "G83" #peck drill - with dwell
 - sg73 : "G73" #chip break - no dwell
 - sg73d : "G73" #chip break - with dwell
 - sg84 : "G84" #tap - right hand
 - sg84d : "G74" #tap - left hand
 - sg76 : "G76" #bore #1 - no dwell
 - sg76d : "G76" #bore #1 - with dwell
 - sg86 : "G85" #bore #2 - no dwell
 - sg86d : "G85" #bore #2 - with dwell
 - sgm1 : "G76" #misc #1 - no dwell
 - sgm1d : "G76" #misc #1 - with dwell
 - sgm2 : "G84" #rigid tap - right hand
 - sgm2d : "G82" #misc #2 - with dwell
 - sgc9 : "G81" #custom #9 - no dwell
 - sgc9d : "G82" #custom #9 - with dwell
 - sgdrill : "" #Target for string
 - fstrsel sg81 drlgsel sgdrill 18 -1
 - # --------------------------------------------------------------------------
 - # Select incremental or absolute G code
 - sg90 : "G90" #Absolute code
 - sg91 : "G91" #Incremental code
 - sgabsinc : "" #Target string
 - fstrsel sg90 absinc$ sgabsinc 2 -1
 - # --------------------------------------------------------------------------
 - # Feed mode G code selection
 - sg94 : "G94" #UPM
 - sg94d : "G94" #DPM, See pfcalc_deg if you use another gcode
 - sg93 : "G93" #Inverse
 - sgfeed : "" #Target for string
 - fstrsel sg94 ipr_type sgfeed 3 -1
 - # --------------------------------------------------------------------------
 - #Canned drill cycle reference height
 - sg98 : "G98" #Reference at initht
 - sg99 : "G99" #Reference at refht
 - sgdrlref : "" #Target for string
 - fstrsel sg98 drillref sgdrlref 2 -1 # Drill cycle G string select
 - # --------------------------------------------------------------------------
 - # Generate string for spindle
 - sm04 : "M4" #Spindle reverse
 - sm05 : "M5" #Spindle off
 - sm03 : "M3" #Spindle forward
 - spindle : "" #Target for string
 - fstrsel sm04 spdir2 spindle 3 -1
 - # --------------------------------------------------------------------------
 - # Coolant M code selection
 - sm09 : "M9" #Coolant Off (Use sm09_0 through sm09_2)
 - sm08 : "M8" #Coolant Flood
 - sm08_1 : "M40" #Coolant Mist
 - sm08_2 : 'M8";"M40' #Coolant Tool
 - sm09_0 : "M9" #Coolant Flood Off
 - sm09_1 : "M41" #Coolant Mist Off
 - sm09_2 : 'M9";"M41' #Coolant Tool Off
 - scoolant : "" #Target for string
 - fstrsel sm09 coolant$ scoolant 7 -1
 - # --------------------------------------------------------------------------
 - # Table unlock and lock codes
 - slock : "M10" #Axis lock
 - sunlock : "M11" #Axis unlock
 - # --------------------------------------------------------------------------
 - # Table rotation direction
 - # Table rotation direction, index
 - sindx_cw : "M22" #Rotate CW code
 - sindx_ccw : "M21" #Rotate CCW code
 - sindx_mc : "" #Target for string
 - fstrsel sindx_cw indx_mc sindx_mc 2 -1
 - # --------------------------------------------------------------------------
 - # Define the gear selection code
 - flktbl 1 3 #Lookup table definition - table no. - no. entries
 - 40 0 #Low gear range
 - 41 400 #Med gear range
 - 42 2250 #Hi gear range
 - # --------------------------------------------------------------------------
 - # Toolchange / NC output Variable Formats
 - # --------------------------------------------------------------------------
 - fmt T 4 t$ #Tool No
 - fmt T 4 first_tool$ #First Tool Used
 - fmt T 4 next_tool$ #Next Tool Used
 - fmt D 4 tloffno$ #Diameter Offset No
 - fmt H 4 tlngno$ #Length Offset No
 - fmt G 4 g_wcs #WCS G address
 - fmt P 4 p_wcs #WCS P address
 - fmt S 4 speed #Spindle Speed
 - fmt M 4 gear #Gear range
 - # --------------------------------------------------------------------------
 - fmt N 4 n$ #Sequence number
 - fmt X 2 xabs #X position output
 - fmt Y 2 yabs #Y position output
 - fmt Z 2 zabs #Z position output
 - fmt X 3 xinc #X position output
 - fmt Y 3 yinc #Y position output
 - fmt Z 3 zinc #Z position output
 - fmt A 11 cabs #C axis position
 - fmt A 14 cinc #C axis position
 - fmt A 4 indx_out #Index position
 - fmt R 14 rt_cinc #C axis position, G68
 - fmt I 3 i$ #Arc center description in X
 - fmt J 3 j$ #Arc center description in Y
 - fmt K 3 k$ #Arc center description in Z
 - fmt K 2 lead #Helical lead
 - fmt R 2 arcrad$ #Arc Radius
 - fmt F 4 feed #Feedrate
 - fmt P 4 dwell$ #Dwell
 - fmt M 5 cantext$ #Canned text
 - # --------------------------------------------------------------------------
 - #Move comment (pound) to output colon with program numbers
 - fmt O 7 progno$ #Program number
 - #fmt ":" 7 progno$ #Program number
 - fmt O 7 main_prg_no$ #Program number
 - #fmt ":" 7 main_prg_no$ #Program number
 - fmt O 7 sub_prg_no$ #Program number
 - #fmt ":" 7 sub_prg_no$ #Program number
 - fmt P 7 sub_prg_call#Program number
 - fmt X 2 sub_trnsx$ #Rotation point
 - fmt Y 2 sub_trnsy$ #Rotation point
 - fmt Z 2 sub_trnsz$ #Rotation point
 - # --------------------------------------------------------------------------
 - fmt Q 2 peck1$ #First peck increment (positive)
 - fmt 2 peck2$ #Second or last peck (positive)
 - fmt 2 peckclr$ #Safety distance
 - fmt 2 retr$ #Retract height
 - fmt Q 2 shftdrl$ #Fine bore tool shift
 - fmt Z 2 zdrl$ #Depth of drill point
 - fmt Z 2 tosz$ #Drilling top of stock
 - fmt N 4 n_tap_thds$ #Number of threads per inch (tpi) / Pitch (mm)
 - fmt F 2 pitch #Tap pitch (inches per thread)
 - fmt R 2 refht_a #Reference height
 - fmt R 2 refht_i #Reference height
 - # --------------------------------------------------------------------------
 - fmt "TOOL-" 4 tnote # Note format
 - fmt "DIA.OFF. - " 4 toffnote # Note format
 - fmt "LEN.-" 4 tlngnote # Note format
 - fmt "DIA.-" 1 tldianote # Note format
 - # --------------------------------------------------------------------------
 - fmt D 2 tldia$ # Note format
 - fmt R 2 tcr$ # Note format
 - fmt D 2 tldia_pred # Predator VCNC format
 - fmt C 2 tcr_pred # Predator VCNC format
 - fmt D 2 tldia_meta # MetaCut View format
 - fmt R 2 tcr_meta # MetaCut View format
 - fmt F 2 flute_meta # MetaCut View format
 - fmt L 2 oa_meta # MetaCut View format
 - fmt A 2 ta_meta # MetaCut View format
 - fmt TD 2 td_meta # MetaCut View format
 - fmt CD 2 cd_meta # MetaCut View format
 - fmt CL 2 cl_meta # MetaCut View format
 - fmt SD 2 sd_meta # MetaCut View format
 - fmt C 4 tipcomp # MetaCut View format
 - fmt 2 slot # 20004 Parameter line
 - fmt 2 tool_type
 - fmt 2 matl_type
 - fmt 2 corner_rad_type
 - fmt 2 diameter
 - fmt 2 corner_rad
 - fmt 2 threads
 - fmt A 2 tip_angle
 - fmt 2 dia_off
 - fmt 2 len_off
 - fmt 2 tool_feed
 - fmt 2 plunge
 - fmt 2 retract
 - fmt 2 rpm
 - fmt 2 coolant1
 - fmt 2 n_flutes1
 - fmt A 2 tip_angle_ch
 - fmt 2 cut_ability # 20006 Parameter line
 - fmt 2 step_r_xy
 - fmt 2 step_r_z
 - fmt 2 step_f_xy
 - fmt 2 step_f_z
 - fmt 2 tip_dia
 - fmt 2 min_dia
 - fmt 2 thd_ang
 - fmt 2 pilot_dia # 20007 Parameter line
 - fmt H 2 flute_len
 - fmt 2 oa_len
 - fmt 2 shldr_len
 - fmt 2 arbor_dia
 - fmt 2 hldr_dia
 - fmt 2 hldr_len
 - fmt 2 spindle_ccw
 - fmt 2 sfm
 - fmt 2 fpt
 - fmt 2 metric
 - fmt 2 stock # Amount of Stock left on drive surfs
 - fmt 2 check # Amount of Stock left on check surfs
 - fmt S 4 cyl_typ # Predator Cylindral Stock Type
 - fmt L 2 stck_ht$
 - fmt W 2 stck_wdth$
 - fmt H 2 stck_thck$
 - fmt D 2 stck_diam
 - fmt X 2 stck_x$
 - fmt Y 2 stck_y$
 - fmt Z 2 stck_z$
 - fmt X 2 stck_x_min
 - fmt Y 2 stck_y_min
 - fmt Z 2 stck_z_min
 - fmt X 2 stck_meta_ht
 - fmt Y 2 stck_meta_wdth
 - fmt Z 2 stck_meta_thck
 - fmt OX 2 stck_meta_ox
 - fmt OY 2 stck_meta_oy
 - fmt OZ 2 stck_meta_oz
 - fmt X 2 x_tmin # Total x_min
 - fmt X 2 x_tmax # Total x_max
 - fmt Y 2 y_tmin # Total y_min
 - fmt Y 2 y_tmax # Total y_max
 - fmt Z 2 z_tmin # Total z_min
 - fmt Z 2 z_tmax # Total z_max
 - fmt Z 2 min_depth # Tool z_min
 - fmt Z 2 max_depth # Tool z_max
 - fmt 2 vers_no$ # Mastercam version
 - fmt 2 m_vers_no$ # Minor version number
 - fmt 2 dll_vers$ # Mp.dll version
 - # --------------------------------------------------------------------------
 - # Tool Comment / Manual Entry Section
 - # --------------------------------------------------------------------------
 - ptoolcomment #Comment for tool
 - tnote = t$
 - toffnote = tloffno$
 - tlngnote = tlngno$
 - tldianote = tldia$
 - "(",pstrtool, *tnote, *tldianote,")", e$
 - pstrtool #Comment for tool
 - if strtool$ <> sblank,
 - [
 - strtool$ = ucase(strtool$)
 - *strtool$, " "
 - ]
 - pcomment$ #Comment from manual entry (must call pcomment2 if booleans)
 - pcomment2
 - pcomment2 #Comment from manual entry
 - spaces$ = 0
 - scomm$ = ucase (scomm$)
 - #1005 - Comment option 1
 - #1006 - Comment option 2
 - #1007 - Define comment with output line
 - #1008 - Define NC parameter comment
 - #1026 - ?
 - if gcode$ = 1005, pbld, n$, pspc, "(", scomm$, ")"
 - if gcode$ = 1006, pbld, n$, pspc, "(", scomm$, ")" #Comments
 - #if gcode = 1006, pbld, n, pspc, scomm #Codes
 - if gcode$ = 1007, "(", scomm$, ")"
 - if gcode$ >= 1008, pbld, n$, pspc, "(", scomm$, ")"
 - if gcode$ = 1026, pbld, scomm$
 - if gcode$ <> 1007 & gcode$ <> 1026, e$
 - spaces$ = sav_spc
 - ptoolcomm # Comments from tool library
 - spaces$ = 0
 - strtool$=ucase(strtool$)
 - if strtool$<>snull, "(",*strtool$,")", e$
 - spaces$ = sav_spc
 - plistcomm # Comments from tool library
 - strtool$=ucase(strtool$)
 - if strtool$<>snull, *strtool$
 - if strtool$=snull, stest1=snocomm+stilde
 - else, stest1=strtool$+stilde
 - nstrlen = strstr(stilde,stest1)-1
 - counter = 1
 - while counter <= (18-nstrlen), pspace
 - pmetacomm # Comments from tool library
 - strtool$=ucase(strtool$)
 - if strtool$<>snull, *strtool$
 - pspace # Creates spaces based on tool comment length
 - " "
 - counter = counter + 1
 - ptspace # Creates spaces based on tool number
 - if t$<10, " "
 - phspace # Creates spaces based on length offset number
 - if tlngno$<10, " "
 - pdspace # Creates spaces based on diameter offset number
 - if tloffno$<10, " "
 - pdiamspc # Creates spaces based on diameter offset number
 - if tldia$<10, " "
 - pspc # Creates spaces based tool level setting
 - if sav_spc = one & omitseq$ = yes$, " "
 - pspc1 # Creates spaces based tool level setting
 - if sav_spc = one, " "
 - popnote # Operation note for tool table
 - if opcode$ = 3, *sdrnote
 - else, *sopnote
 - pstock # Comment amount of stock to leave
 - spaces$=0
 - if (opcode$=13 | opcode$=14),
 - [
 - pbld, n$, pspc, "(TOOLPATH-", *stoper,")", e$
 - pbld, n$, pspc, "(STOCK LEFT ON DRIVE SURFS = ", *stock, ")", e$
 - if check<>0, pbld, n$, pspc, "(STOCK LEFT ON CHECK SURFS = ", *check, ")", e$
 - ]
 - spaces$=sav_spc
 - ppredstck # Predator stock
 - spaces$=0
 - q1
 - if stock_typ = 1,
 - [
 - cyl_typ = rot_on_x
 - q2
 - ]
 - if stock_typ = 0, ppredbox
 - if stock_typ = 1,
 - [
 - if cyl_typ = 1, ppredcylx
 - if cyl_typ = 2, ppredcyly
 - if cyl_typ = 3, ppredcylz
 - ]
 - spaces$=sav_spc
 - ppredbox # Predator Box Stock
 - if stck_crnr$ = 0,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 1 | stck_crnr$ = 5,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$ - stck_wdth$
 - ]
 - if stck_crnr$ = 2 | stck_crnr$ = 6,
 - [
 - stck_x_min = stck_x$ - stck_ht$
 - stck_y_min = stck_y$ - stck_wdth$
 - ]
 - if stck_crnr$ = 3 | stck_crnr$ = 7,
 - [
 - stck_x_min = stck_x$ - stck_ht$
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ = 4 | stck_crnr$ = 8,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$
 - else, stck_z_min = stck_z$
 - "(SBOX ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min, " ", *stck_ht$, " ", *stck_wdth$, " ", *stck_thck$, ")"
 - ppredcylx # Predator Cyl-X Stock
 - if stck_crnr$ = 0,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ = 1 | stck_crnr$ = 5,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 2 | stck_crnr$ = 6,
 - [
 - stck_x_min = stck_x$ - stck_ht$
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 3 | stck_crnr$ = 7,
 - [
 - stck_x_min = stck_x$ - stck_ht$
 - stck_y_min = stck_y$ + stck_wdth$/2
 - ]
 - if stck_crnr$ = 4 | stck_crnr$ = 8,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$ + stck_wdth$/2
 - ]
 - if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$/2
 - else, stck_z_min = stck_z$ + stck_thck$/2
 - stck_diam = stck_wdth$
 - if stck_thck$ > stck_wdth$, stck_diam = stck_thck$
 - stck_ht$ = stck_ht$
 - "(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min, " ", *stck_diam, " ", *stck_ht$, ")"
 - ppredcyly # Predator Cyl-Y Stock
 - if stck_crnr$ = 0,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 1 | stck_crnr$ = 5,
 - [
 - stck_x_min = stck_x$ + stck_ht$/2
 - stck_y_min = stck_y$ - stck_wdth$
 - ]
 - if stck_crnr$ = 2 | stck_crnr$ = 6,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$ - stck_wdth$
 - ]
 - if stck_crnr$ = 3 | stck_crnr$ = 7,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ = 4 | stck_crnr$ = 8,
 - [
 - stck_x_min = stck_x$ + stck_ht$/2
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$/2
 - else, stck_z_min = stck_z$ + stck_thck$/2
 - stck_diam = stck_ht$
 - if stck_thck$ > stck_ht$, stck_diam = stck_thck$
 - stck_ht$ = stck_wdth$
 - "(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min, " ", *stck_diam, " ", *stck_ht$, ")"
 - ppredcylz # Predator Cyl-Z Stock
 - if stck_crnr$ = 0,
 - [
 - stck_x_min = stck_x$
 - stck_y_min = stck_y$
 - ]
 - if stck_crnr$ = 1 | stck_crnr$ = 5,
 - [
 - stck_x_min = stck_x$ + stck_ht$/2
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 2 | stck_crnr$ = 6,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$ - stck_wdth$/2
 - ]
 - if stck_crnr$ = 3 | stck_crnr$ = 7,
 - [
 - stck_x_min = stck_x$ - stck_ht$/2
 - stck_y_min = stck_y$ + stck_wdth$/2
 - ]
 - if stck_crnr$ = 4 | stck_crnr$ = 8,
 - [
 - stck_x_min = stck_x$ + stck_ht$/2
 - stck_y_min = stck_y$ + stck_wdth$/2
 - ]
 - if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$
 - else, stck_z_min = stck_z$
 - stck_diam = stck_ht$
 - if stck_wdth$ > stck_ht$, stck_diam = stck_wdth$
 - stck_ht$ = stck_thck$
 - "(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min, " ", *stck_diam, " ", *stck_ht$, ")"
 - pmetastck # MetaCut View stock
 - if stck_crnr$ = 0,
 - [
 - stck_meta_ox = stck_x$ * m_one - (tox$ * m_one)
 - stck_meta_oy = stck_y$ * m_one - (toy$ * m_one)
 - ]
 - if stck_crnr$ = 1 | stck_crnr$ = 5,
 - [
 - stck_meta_ox = (stck_x$ + stck_ht$/2) * m_one - (tox$ * m_one)
 - stck_meta_oy = (stck_y$ - stck_wdth$/2) * m_one - (toy$ * m_one)
 - ]
 - if stck_crnr$ = 2 | stck_crnr$ = 6,
 - [
 - stck_meta_ox = (stck_x$ - stck_ht$/2) * m_one - (tox$ * m_one)
 - stck_meta_oy = (stck_y$ - stck_wdth$/2) * m_one - (toy$ * m_one)
 - ]
 - if stck_crnr$ = 3 | stck_crnr$ = 7,
 - [
 - stck_meta_ox = (stck_x$ - stck_ht$/2) * m_one - (tox$ * m_one)
 - stck_meta_oy = (stck_y$ + stck_wdth$/2) * m_one - (toy$ * m_one)
 - ]
 - if stck_crnr$ = 4 | stck_crnr$ = 8,
 - [
 - stck_meta_ox = (stck_x$ + stck_ht$/2) * m_one - (tox$ * m_one)
 - stck_meta_oy = (stck_y$ + stck_wdth$/2) * m_one - (toy$ * m_one)
 - ]
 - if stck_crnr$ <= 4, stck_meta_oz = stck_z$ * m_one - (toz$ * m_one)
 - else, stck_meta_oz = (stck_z$ + stck_thck$) * m_one - (toz$ * m_one)
 - stck_meta_ht = stck_ht$
 - stck_meta_wdth = stck_wdth$
 - stck_meta_thck = stck_thck$
 - #(NWDSTOCK X8. Y8. Z1.25 OTC OX-4. OY-4. OZ0.)
 - spaces$=0
 - "(NWDSTOCK ", *stck_meta_ht, " ", *stck_meta_wdth, " ", *stck_meta_thck,
 - " OTC ", *stck_meta_ox, " ", *stck_meta_oy, " ", *stck_meta_oz, ")"
 - spaces$=sav_spc
 - pstop # Stop routine
 - pretract
 - pcom_moveb, e$
 - if mi10$=one, n$, *sm00, e$
 - sav_absinc = absinc$
 - if wcstype > one, absinc$ = zero
 - comment$
 - if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
 - pcan1, pbld,*sgcode, *sgabsinc, pwcs, pfxout, pfyout,
 - pfcout, *speed, *spindle, pgear, strcantext, e$
 - if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - pbld, n$, "G43", *tlngno$, pfzout, scoolant,e$
 - next_tool$, e$
 - "G00",pfxout, pfyout,e$
 - sav_coolant = coolant$
 - if coolant$ = 1, sm09 = sm09_0
 - if coolant$ = 2, sm09 = sm09_1
 - if coolant$ = 3, sm09 = sm09_2
 - absinc$ = sav_absinc
 - # --------------------------------------------------------------------------
 - # Misc. Output
 - # --------------------------------------------------------------------------
 - pparameter$ # Run parameter table
 - if opcode$=13 | opcode$=14, result = fprm (opcode$)
 - if prmcode$ = 10000, stoper = ucase(sparameter$)
 - if prmcode$ = 10055, spostname = ucase(sparameter$)
 - #CNC<<MSG-ERROR(1150)>> Mastercam MP postblock 파라미터 문제 :파라미터 번호10055 삭제 된
 - #CNC<<MSG-ERROR(1150)>> 데이터 위치를 참조pre-X3 ASCII NCI information
 - #CNC<<MSG-ERROR(1150)>> 매개 변수 참조 설명서를 참조하거나 게시물을 수정 또는 교체에 대해 귀하의 마스터 캠 대리점에 문의
 - if stoper=snull, stoper = snullop
 - pwrttparam$ #Information from parameters
 - if prmcode$ = 20004, slot = rpar(sparameter$, 16)
 - if prmcode$ = 20006, cut_ability = rpar(sparameter$,8)
 - if prmcode$ = 20007, pilot_dia = rpar(sparameter$, 11)
 - # --------------------------------------------------------------------------
 - # Start of File and Toolchange Setup
 - # --------------------------------------------------------------------------
 - psof0$ #Start of file for tool zero
 - psof$
 - psof$ #Start of file for non-zero tool number
 - ptravel
 - pwritbuf5
 - pcuttype
 - toolchng = one
 - if ntools$ = one,
 - [
 - #skip single tool outputs, stagetool must be on
 - #stagetool = m_one
 - !next_tool$
 - ]
 - tooltotal = rbuf(4,0) #Reads total tool and null tool changes
 - if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
 - else, nexttool = first_tool$
 - if tool_table = 2, ppredstck,e$
 - if tool_table = 3, pmetastck,e$
 - spaces$=0
 - if output_z = yes$ & tcnt > 1,
 - spaces$=sav_spc
 - if plane$ < 0, plane$ = 0
 - pbld, *sgcode, *sgplane, "G40", "G80", *sgabsinc, e$
 - "G91G28Z0", e$
 - " ", e$
 - pbld, n$ , "G90G80G49G40", e$
 - n$, *n$, e$
 - if stagetool >=zero, pbld, n$, *t$,"M6", "(",pstrtool,")", e$
 - "M01 ", e$
 - if plane$ < 0, plane$ = 0
 - # pbld, n, *sgabsinc, *sgcode, e
 - sav_absinc = absinc$
 - if wcstype <= one, #Work coordinate system
 - [
 - absinc$ = one
 - pfbld, n$, sgabsinc, "G28", "Z0.", e$
 - pfbld, n$, "G92", *xh$, *yh$, *zh$, e$
 - absinc$ = sav_absinc
 - ]
 - sav_mi9 = mi9$
 - sav_workofs = workofs$
 - if sav_workofs < 0, sav_workofs = 0
 - ptlchg_com
 - ptlchg_com #Tool change common blocks
 - pcom_moveb
 - c_mmlt$ #Multiple tool subprogram call
 - #ptoolcomment
 - comment$
 - pcan
 - if output_z = yes$,
 - [
 - preadbuf5
 - if (opcode$ > 0 & opcode$ < 16) | opcode$ = 19,
 - [
 - n$, pspc, "(", "MAX - ", *max_depth, ")", e$
 - n$, pspc, "(", "MIN - ", *min_depth, ")", e$
 - ]
 - ]
 - spaces$=sav_spc
 - pstock
 - pindex
 - sav_absinc = absinc$
 - if wcstype > one, absinc$ = zero
 - if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
 - pcan1, pbld, n$, *sgabsinc,*sgcode, pwcs, pfxout, pfyout,
 - pfcout, *speed, *spindle, pgear, strcantext, e$
 - if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - pbld, n$, "G43", *tlngno$, pfzout,scoolant, e$
 - next_tool$, e$
 - "G00",pfxout, pfyout,e$
 - sav_coolant = coolant$
 - if coolant$ = 1, sm09 = sm09_0
 - if coolant$ = 2, sm09 = sm09_1
 - if coolant$ = 3, sm09 = sm09_2
 - absinc$ = sav_absinc
 - pcom_movea
 - toolchng = zero
 - c_msng$ #Single tool subprogram call
 - last_op_id = op_id$
 - last_cuttype = cuttype
 - ptlchg0$ #Call from NCI null tool change (tool number repeats)
 - pcuttype
 - pcom_moveb
 - toolcount = toolcount + 1
 - prvtp = rbuf(3,toolcountp)
 - if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
 - else, nexttool = first_tool$
 - if mi10$=one & op_id$<>last_op_id | (tlplnno$ <> prvtp & ret_on_indx), pstop
 - c_mmlt$ #Multiple tool subprogram call
 - comment$
 - pcan
 - if plane$ < 0, plane$ = 0
 - pbld, n$, sgplane, e$
 - pspindchng
 - if coolant$ <> 0 & coolant$ <> sav_coolant & sav_coolant, pbld, n$, sm09, e$
 - pbld, n$, scoolant, e$
 - sav_coolant = coolant$
 - if coolant$ = 1, sm09 = sm09_0
 - if coolant$ = 2, sm09 = sm09_1
 - if coolant$ = 3, sm09 = sm09_2
 - if op_id$<>last_op_id, pstock
 - if sav_mi9 = 1, workofs$ = sav_workofs
 - if (wcstype > one & workofs$ <> prv_workofs$) | (tlplnno$ <> prvtp),
 - [
 - sav_absinc = absinc$
 - absinc$ = zero
 - if fmtrnd(prv_cabs) <> fmtrnd(cabs),
 - [
 - if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
 - pbld, n$, sgabsinc, pwcs, pfxout, pfyout, pfzout, pfcout, e$
 - if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - ]
 - else,
 - [
 - pbld, n$, sgabsinc, pwcs, pfxout, pfyout, pfzout, pcout, e$
 - ]
 - pe_inc_calc
 - ps_inc_calc
 - absinc$ = sav_absinc
 - ]
 - if lock_codes = 1 & cuttype <> last_cuttype & cuttype > 0, pbld, n$, *sunlock, "(UNLOCK)", e$
 - if cuttype = zero, ppos_cax_lin
 - if lock_codes = 1 & cuttype <> last_cuttype & cuttype = 0 & fmtrnd(prv_cabs) = fmtrnd(cabs), pbld, n$, *slock, "(LOCK)", e$
 - if gcode$ = one, plinout
 - else, prapidout
 - pcom_movea
 - c_msng$ #Single tool subprogram call
 - last_op_id = op_id$
 - last_cuttype = cuttype
 - ptlchg$ #Tool change
 - pcuttype
 - toolchng = one
 - toolcount = toolcount + 1
 - if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
 - else, nexttool = first_tool$
 - if wcstype = one, #Work coordinate system
 - [
 - pfbld, n$, "G92", *xh$, *yh$, *zh$, e$
 - ]
 - pbld, n$, *sm01, e$
 - " ", e$
 - pbld, n$ , "G90G80G49G40", e$
 - n$, *n$, e$
 - if stagetool >=zero, pbld, n$,*t$,"M6","(",pstrtool,")", e$
 - "M01 ", e$
 - if mi10$=one, n$, *sm00, e$
 - ptlchg_com
 - pretract #End of tool path, toolchange
 - sav_absinc = absinc$
 - absinc$ = one
 - sav_coolant = coolant$
 - coolant$ = zero
 - #cc_pos is reset in the toolchange here
 - cc_pos$ = zero
 - gcode$ = zero
 - pbld, n$, sgabsinc, sgcode, "G28", "Z0.", "M5", scoolant, e$
 - #if lock_codes = 1 & rot_on_x, pbld, n, *sunlock, "(UNLOCK)", e
 - #pbld, n, "G90", "G00", "X800.", "Y500.", protretinc, e
 - #if lock_codes = 1 & rot_on_x & cuttype = 0, pbld, n, *slock, "(LOCK)", e
 - if abs(cabs) > 360 & nextop$ <> 1003,
 - [
 - if lock_codes = 1, pbld, n$, *sunlock, "(UNLOCK)", e$
 - rotretflg = 1
 - pbld, n$, 'G28', "M5", e$
 - rotretflg = 0
 - if lock_codes = 1 & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - ]
 - absinc$ = sav_absinc
 - coolant$ = sav_coolant
 - protretinc #Reset the C axis revolution counter
 - if frc_cinit & rot_on_x,
 - [
 - rev = zero
 - sav_rev = zero
 - cabs = zero
 - csav = zero
 - indx_out = zero
 - if index, e$, pindxcalc, pindex
 - else, *cabs
 - prvcabs = zero
 - !csav, !cabs
 - ]
 - peof0$ #End of file for tool zero
 - peof$
 - peof$ #End of file for non-zero tool
 - pretract
 - if lock_codes = 1 & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)",
 - rotretflg = 1
 - pbld, n$, "G91 G28 Y0.", e$
 - rotretflg = 0
 - if lock_codes = 1 & rot_on_x, pbld, n$, *slock, "(LOCK)",
 - comment$,e$
 - #Remove pound character to output first tool with staged tools
 - #if stagetool = one, pbld, n, *first_tool, e
 - # n, *sg90, e
 - #n$, "G90 G00 X0.", e$
 - n$, "M30", e$
 - mergesub$
 - clearsub$
 - mergeaux$
 - clearaux$
 - "%", e$
 - #If posting to Deskop, or other long dir path names, this logic will crash Mastercam
 - #snci = spathnci + snamenci + sextnci
 - #sparams1 = ssq + sdq + snci + sdq + sspace + sdq + spathpst + spost1 + sdq + sspace + sdq + spathnc + sdq + ssq
 - #ppost #Called after posting is complete and all files are closed
 - #result = fexist(sdll)
 - #if result = 1, result = dll(sdll,sparams1)
 - pwcs #G55+ coordinate setting at toolchange
 - if wcstype = two | wcstype > three,
 - [
 - sav_frc_wcs = force_wcs
 - if sub_level$ > 0, force_wcs = zero
 - if sav_mi9 = 1, workofs$ = sav_workofs
 - if workofs$ < 0, workofs$ = 0
 - if workofs$ <> prv_workofs$ | (force_wcs & toolchng),
 - [
 - if workofs$ < 6,
 - [
 - g_wcs = workofs$ + 54
 - *g_wcs
 - ]
 - else,
 - [
 - p_wcs = workofs$ - five
 - "G54.1", *p_wcs
 - ]
 - ]
 - force_wcs = sav_frc_wcs
 - !workofs$
 - ]
 - pgear #Find spindle gear from lookup table
 - if use_gear = one,
 - [
 - gear = frange (one, speed)
 - *gear
 - ]
 - #Toolchange setup
 - pspindchng #Spindle speed change
 - if prv_spdir2 <> spdir2 & prv_speed <> zero, pbld, n$, *sm05, e$
 - if prv_speed <> speed | prv_spdir2 <> spdir2,
 - [
 - if speed, pbld, n$, *speed, *spindle, pgear, e$
 - ]
 - !speed, !spdir2
 - pspindle #Spindle speed calculations for RPM
 - speed = abs(ss$)
 - if maxss$ = zero | maxss$ > max_speed, maxss$ = max_speed
 - #zero indicates spindle off (not a mistake)
 - if speed,
 - [
 - if speed > max_speed, speed = maxss$
 - if speed < min_speed, speed = min_speed
 - ]
 - spdir2 = fsg3(spdir$)
 - pq$ #Setup post based on switch settings
 - sav_spc = spaces$
 - if stagetool = one, bldnxtool$ = one
 - #Rotaxtyp = 1 sets initial matrix to top
 - #Rotaxtyp = -2 sets initial matrix to front
 - if vmc, rotaxtyp$ = one
 - else, rotaxtyp$ = -2
 - #Shut off rotary axis if, Q164. Enable Rotary Axis button? n
 - if ucase(sq164) = strn, rot_on_x = zero
 - if arctype$ = one | arctype$ = four,
 - [
 - result = newfs(two, i$)
 - result = newfs(two, j$)
 - result = newfs(two, k$)
 - ]
 - else,
 - [
 - result = newfs(three, i$)
 - result = newfs(three, j$)
 - result = newfs(three, k$)
 - ]
 - if usecanned = yes$, pusecannedyes
 - else, pusecannedno
 - pheader$ #Call before start of file
 - if met_tool$ = one, #Metric constants and variable adjustments
 - [
 - ltol$ = ltol_m
 - vtol$ = vtol_m
 - maxfeedpm = maxfeedpm_m
 - ]
 - result = nwadrs(srotary, cabs)
 - result = nwadrs(srotary, cinc)
 - result = nwadrs(srotary, indx_out)
 - "%" , e$
 - "O0001" ,e$
 - "(KIM JIN WOONG)",e$
 - "( ", sprogname$,")",e$
 - spathnc$ = ucase(spathnc$)
 - smcname$ = ucase(smcname$) , e$
 - #"(MASTERCAM - V", *vers_no, ")", e
 - #"(MC9 FILE - ", smcpath, smcname, smcext, ")", e
 - #"(POST - ", spostname, ")", e
 - #"(MP - v", *dll_vers, ")", e
 - #stck_matl = ucase(stck_matl)
 - #"(MATERIAL - ", stck_matl, ")", e
 - #"(PROGRAM - ", sprogname, sextnc, ")", e
 - "(DATE = ","20",year$ , "-", *smonth, "-", day$ , ")", e$
 - #"(TIME - ", *time, ")", e
 - #"(POST DEV - ", *slicense, ")", e
 - spaces$=sav_spc
 - if seqno$ = 1, omitseq$ = yes$
 - sav_rot_on_x = rot_on_x
 - rot_on_x = 0
 - sav_progno = progno$
 - seqno$ =1.
 - seqinc$ =1
 - n$ = seqno$
 - ptoolend$ #End of tool path, before reading new tool data
 - !speed, !spdir2
 - ptlchg1002$ #Call at actual toolchange, end last path here
 - if op_id$ <> last_op_id,
 - [
 - #if cuttype <> one, sav_rev = rev #Axis Sub does not update to rev # CNC Mpfan V9.1
 - sav_rev = rev #Axis Sub does not update to rev
 - if one_rev = one | workofs$ <> prv_workofs$, sav_rev = 0
 - ]
 - pspindle
 - whatline$ = four #Required for vector toolpaths
 - if gcode$ = 1000,
 - [
 - #Null toolchange
 - ]
 - else,
 - [
 - #Toolchange and Start of file
 - if gcode$ = 1002,
 - [
 - #Actual toolchange
 - pretract
 - ]
 - if stagetool = one, prv_next_tool$ = m_one
 - prv_xia = vequ(xh$)
 - prv_feed = c9k
 - ]
 - # --------------------------------------------------------------------------
 - # Motion NC output
 - # --------------------------------------------------------------------------
 - #The variables for absolute output are xabs, yabs, zabs.
 - #The variables for incremental output are xinc, yinc, zinc.
 - # --------------------------------------------------------------------------
 - prapidout #Output to NC of linear movement - rapid
 - pcan1, pbld, n$, sgplane, `sgcode, sgabsinc, pccdia,
 - pxout, pyout, pzout, pcout, strcantext, scoolant, e$
 - plinout #Output to NC of linear movement - feed
 - pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,
 - pxout, pyout, pzout, pcout, `feed, strcantext, scoolant, e$
 - pcirout #Output to NC of circular interpolation
 - if compwarn, pcompwarn
 - if hel_2100 = one, pcirout2
 - else, pcirout1
 - pcirout1 #Output to NC of circular interpolation
 - pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,
 - pxout, pyout, pzout, pcout, parc, feed, strcantext, scoolant, e$
 - pcirout2 #Output to NC of circular interpolation
 - if (plane$ = zero & abs(zinc)>=0.0005)
 - | (plane$ = one & abs(xinc)>=0.0005)
 - | (plane$ = two & abs(yinc)>=0.0005), phelout
 - else, pcirout1
 - phelout #Output to NC of helical interpolation
 - if plane$ = zero,
 - [
 - result = nwadrs(strk, lead)
 - lead = abs(zinc/sweep$*360)
 - ]
 - if plane$ = one,
 - [
 - result = nwadrs(stri, lead)
 - lead = abs(xinc/sweep$*360)
 - ]
 - if plane$ = two,
 - [
 - result = nwadrs(strj, lead)
 - lead = abs(yinc/sweep$*360)
 - ]
 - pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,
 - pxout, pyout, pzout, *lead, pcout, parc, feed, strcantext, scoolant, e$
 - pcom_moveb #Common motion preparation routines, before
 - pxyzcout
 - ps_inc_calc
 - pncoutput #Movement output
 - pcom_moveb
 - comment$
 - if coolant$ <> 0 & coolant$ <> sav_coolant,
 - [
 - pbld, n$,e$
 - sm09, e$
 - sav_coolant = coolant$
 - ]
 - if coolant$ = 1, sm09 = sm09_0
 - if coolant$ = 2, sm09 = sm09_1
 - if coolant$ = 3, sm09 = sm09_2
 - if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), coolant$ = zero
 - pcan
 - if cuttype = zero, ppos_cax_lin #Toolplane rotary positioning
 - if gcode$ = zero, prapidout
 - if gcode$ = one, plinout
 - if gcode$ > one & gcode$ < four, pcirout
 - if mr_rt_actv, #Restore absolute/incremental for G51/G68
 - [
 - absinc$ = sav_absinc
 - mr_rt_actv = zero
 - ]
 - pcom_movea
 - pcom_movea #Common motion preparation routines, after
 - pcan2
 - pe_inc_calc
 - pdwl_spd$ #Call from NCI gcode 4
 - pspindle
 - comment$
 - pspindchng
 - pcan
 - if fmtrnd(dwell$), pcan1, pbld, n$, *sgcode, *dwell$, strcantext, e$
 - else, pcan1, pbld, n$, strcantext, e$
 - pcan2
 - prapid$ #Output to NC of linear movement - rapid
 - pncoutput
 - pzrapid$ #Output to NC of linear movement - rapid Z only
 - pncoutput
 - plin$ #Output to NC of linear movement - feed
 - pncoutput
 - pz$ #Output to NC of linear movement - feed Z only
 - pncoutput
 - pmx$ #Output to NC of vector NCI
 - pncoutput
 - pcir$ #Output to NC of circular interpolation
 - pncoutput
 - #Pre-process rotary motion control flags
 - pmx0$ #5 axis gcode setup
 - if drillcur$ = zero,
 - [
 - if fr$ = -2, gcode$ = zero
 - else, gcode$ = one
 - ]
 - plin0$ #Linear movement, mill motion test
 - pmotion_su
 - pcir0$ #Circular interpolation, mill arc motion test
 - pmotion_su
 - # --------------------------------------------------------------------------
 - # Motion output components
 - # --------------------------------------------------------------------------
 - pbld #Canned text - block delete
 - if bld, '/'
 - pfbld #Force - block delete
 - "/"
 - pcompwarn #Cutter Compensation Check
 - if prv_cc_pos$ <> cc_pos$ & cc_pos$ & gcode$ > 1,
 - [
 - if compwarnflg = 0, result = mprint(scompwarn,1)
 - spaces$ = 0
 - pbld, n$, pspc, *sm00, pspc, "(", scompwarn, ")", e$
 - spaces$ = sav_spc
 - compwarnflg = 1
 - ]
 - pccdia #Cutter Compensation
 - #Force Dxx#
 - if prv_cc_pos$ <> cc_pos$ & cc_pos$, prv_tloffno$ = c9k
 - sccomp
 - if cc_pos$, tloffno$
 - pfxout #Force X axis output
 - if absinc$ = zero, *xabs, !xinc
 - else, *xinc, !xabs
 - pxout #X output
 - if absinc$ = zero, xabs, !xinc
 - else, xinc, !xabs
 - pfyout #Force Y axis output
 - if absinc$ = zero, *yabs, !yinc
 - else, *yinc, !yabs
 - pyout #Y output
 - if absinc$ = zero, yabs, !yinc
 - else, yinc, !yabs
 - pfzout #Force Z axis output
 - if absinc$ = zero, *zabs, !zinc
 - else, *zinc, !zabs
 - pzout #Z output
 - if absinc$ = zero, zabs, !zinc
 - else, zinc, !zabs
 - pfcout #Force C axis output
 - if index = zero & rot_on_x,
 - [
 - if absinc$ = zero, *cabs, !cinc
 - else, *cinc, !cabs
 - ]
 - pcout #C axis output
 - if index = zero & rot_on_x,
 - [
 - if absinc$ = zero, cabs, !cinc
 - else, cinc, !cabs
 - ]
 - pindex #Index output
 - if index & rot_on_x,
 - [
 - if fmtrnd(prv_indx_out) <> fmtrnd(indx_out),
 - [
 - if lock_codes = 1 & rotretflg = 0, pbld, n$, *sunlock, "(UNLOCK)", e$
 - pbld, n$, `sindx_mc, indx_out, e$
 - if lock_codes = 1 & cuttype = 0 & rotretflg = 0, pbld, n$, *slock, "(LOCK)", e$
 - ]
 - !cabs, !cinc
 - ]
 - parc #Select the arc output
 - if arcoutput$ = zero | full_arc_flg$ | arc_pitch$,
 - [
 - #Arc output for IJK
 - # If you do NOT want to force out the I,J,K values,
 - # remove the "*" asterisks on the *i, *j, *k 's below...
 - if plane$ = zero, *i$, *j$, k$ #XY plane code - G17
 - if plane$ = one, i$, *j$, *k$ #YZ plane code - G19
 - if plane$ = two, *i$, j$, *k$ #XZ plane code - G18
 - ]
 - else,
 - [
 - #Arc output for R
 - if abs(sweep$)<=180 | arcoutput$=one, result = nwadrs(srad, arcrad$)
 - else, result = nwadrs(srminus, arcrad$)
 - *arcrad$
 - ]
 - ppos_cax_lin #Position the rotary axis before move - rapid
 - if index, pindex
 - else,
 - [
 - if fmtrnd(prv_cabs) <> fmtrnd(cabs) & rot_on_x,
 - [
 - sav_gcode = gcode$
 - gcode$ = zero
 - if lock_codes = 1 & not(index), pbld, n$, *sunlock, "(UNLOCK)", e$
 - pbld, n$, sgcode, pcout, e$
 - if lock_codes = 1 & not(index) & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - !cia
 - ps_cinc_calc
 - gcode$ = sav_gcode
 - ]
 - ]
 - # --------------------------------------------------------------------------
 - # Drilling
 - # --------------------------------------------------------------------------
 - pdrill0$ #Pre-process before drill call
 - sav_dgcode = gcode$ #Capture gcode for 5 axis drill
 - pdrlcommonb #Canned Drill Cycle common call, before
 - if sav_dgcode = 81,
 - [
 - result = newfs (two, zinc)
 - if tap_feed = one & drillcyc$ = three, result = newfs (two, feed) #Tap feeds with 4/3 decimal places
 - if drillcyc$ = three, drlgsel = fsg1(-ss$) + drillcyc$ * two
 - else, drlgsel = fsg2(dwell$) + drillcyc$ * two
 - if initht$ <> refht$, drillref = zero
 - else, drillref = one
 - prv_refht_a = c9k
 - prv_refht_i = c9k
 - prv_dwell$ = zero
 - ]
 - if cuttype = three, sav_dgcode = gcode$
 - else, z$ = depth$
 - if cuttype = one, prv_zia = initht$ + (rotdia$/two)
 - else, prv_zia = refht$ #Fanuc style - G91 Z depth from R level
 - #else, prv_zia = initht #G91 Z depth from initial height
 - pcom_moveb
 - feed = fr_pos$
 - comment$
 - pcan
 - #5 axis must map the true Z, correct Z calculation here
 - if cuttype = three,
 - [
 - prv_zia = zabs + (-depth$) + initht$
 - zia = fmtrnd(zabs)
 - zinc = zia - prv_zia
 - ]
 - pbld, n$, sgabsinc, e$
 - prdrlout #R drill position
 - if cuttype = one, refht_a = refht$ + (rotdia$ / two)
 - else, refht_a = refht$
 - refht_i = refht$ - initht$
 - if cuttype = three, refht_a = w$
 - if absinc$ = zero, refht_a, !refht_i
 - else, refht_i, !refht_a
 - pdrlxy #Drill XY coordinates
 - if force_dpts, pfxout, pfyout
 - else, pxout, pyout
 - pdrill$ #Canned Drill Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, dwell$, *feed, strcantext, e$
 - pcom_movea
 - ppeck$ #Canned Peck Drill Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, *peck1$, *feed, strcantext, e$
 - pcom_movea
 - pchpbrk$ #Canned Chip Break Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, *peck1$, *feed, strcantext, e$
 - pcom_movea
 - ptap$ #Canned Tap Cycle
 - pdrlcommonb
 - #RH/LH based on spindle direction
 - if use_pitch, pbld, n$, "G95", e$
 - if use_pitch = 0,
 - [
 - "M29",*speed,e$
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, *feed, strcantext, e$
 - ]
 - else,
 - [
 - if met_tool$, pitch = n_tap_thds$ # Tap pitch (mm per thread)
 - else, pitch = 1/n_tap_thds$ # Tap pitch (inches per thread)
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, *pitch, !feed, strcantext, e$
 - ]
 - pcom_movea
 - tapflg = 1
 - pbore1$ #Canned Bore #1 Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, dwell$, *feed, strcantext, e$
 - pcom_movea
 - pbore2$ #Canned Bore #2 Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, *feed, strcantext, e$
 - pcom_movea
 - pmisc1$ #Canned Misc #1 Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - prdrlout, shftdrl$, dwell$ , *feed, strcantext, e$
 - pcom_movea
 - pmisc2$ #Canned Misc #2 Cycle (User Option)
 - pdrill$
 - pdrill_2$ #Canned Drill Cycle, additional points
 - pdrlcommonb
 - pcan1, pbld, n$, pdrlxy, pzout, pcout, prdrlout, dwell$,
 - feed, strcantext, e$
 - pcom_movea
 - ppeck_2$ #Canned Peck Drill Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, pdrlxy, pzout, pcout, prdrlout, feed, strcantext, e$
 - pcom_movea
 - pchpbrk_2$ #Canned Chip Break Cycle
 - pdrlcommonb
 - pcan1, pbld, n$, pdrlxy, pzout, pcout, prdrlout, feed, strcantext, e$
 - pcom_movea
 - ptap_2$ #Canned Tap Cycle
 - pdrill_2$
 - pbore1_2$ #Canned Bore #1 Cycle
 - pdrill_2$
 - pbore2_2$ #Canned Bore #2 Cycle
 - pdrill_2$
 - pmisc1_2$ #Canned Misc #1 Cycle
 - pdrill_2$
 - pmisc2_2$ #Canned Misc #2 Cycle
 - pdrill_2$
 - pdrlcst$ #Custom drill cycles 8 - 19 (user option)
 - #Use this postblock to customize drilling cycles 8 - 19
 - pdrlcommonb
 - #if drillcyc = 8, pcan1, pbld, n, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
 - # prdrlout, dwell, *feed, strcantext, e
 - if drillcyc$ = 8,
 - [
 - sub_prg_call = peck1$
 - pcan1, pbld, n$, *sg00, *sgabsinc, pfxout, pfyout, strcantext, e$
 - pbld, n$, "M98", *sub_prg_call, e$
 - ]
 - else, "CUSTOMIZABLE DRILL CYCLE ", pfxout, pfyout, pfzout, pfcout, e$
 - pcom_movea
 - pdrlcst_2$ #Custom drill cycles 8 - 19, additional points (user option)
 - #Use this postblock to customize drilling cycles 8 - 19
 - pdrlcommonb
 - #if drillcyc = 8, pcan1, pbld, n, pdrlxy, pzout, pcout, prdrlout, dwell,
 - # feed, strcantext, e
 - if drillcyc$ = 8,
 - [
 - sub_prg_call = peck1$
 - pcan1, pbld, n$, *sg00, *sgabsinc, pfxout, pfyout, strcantext, e$
 - pbld, n$, "M98", *sub_prg_call, e$
 - ]
 - else, "CUSTOMIZABLE DRILL CYCLE ", pfxout, pfyout, pfzout, pfcout, e$
 - pcom_movea
 - pcanceldc$ #Cancel canned drill cycle
 - result = newfs (three, zinc)
 - if tap_feed = one & drillcyc$ = three, result = newfs (15, feed) #Cancel tap feeds with 4/3 decimal places
 - z$ = initht$
 - !z$
 - if cuttype = one, prv_zia = initht$ + (rotdia$/two)
 - #else, prv_zia = initht #G91 Z depth from initial height
 - else, prv_zia = refht$ #Fanuc style - G91 Z depth from R level
 - pxyzcout
 - !zabs, !zinc
 - prv_gcode$ = zero
 - if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), coolant$ = zero
 - pcan
 - if drillcyc$ <> 8, pcan1, pbld, n$, "G80", scoolant, strcantext, e$
 - if use_pitch & tapflg = 1, pbld, n$, "G94", e$
 - pcan2
 - tapflg = 0
 - # --------------------------------------------------------------------------
 - #Subprogram postblocks
 - #sub_trnstyp - 0=mirror, 1=rotate, 2=scale, 3=translate
 - #sub_trnmthd (mirror) - 0=X axis, 1=Y axis, 2=line
 - #sub_trnmthd (rotate) - 0=tplane, 1=tplane origin only, 2=coordinates
 - # --------------------------------------------------------------------------
 - psub_call_m$ #Call to main level, single tool
 - psub_call_trans
 - psub_call_mm$ #Call to main level, multiple tools
 - psub_call_trans
 - psub_call_trans #Translate level calls from toolchange, user
 - if wcstype <= one, result = mprint(shomeserror,1)
 - sav_absinc = absinc$
 - pindex
 - #Mirror or Rotate Coord's
 - if sub_trnstyp$ = zero | (sub_trnstyp$ = one & mr_rt_actv),
 - [
 - #The original pattern is not mirrored or rotated
 - if sub_sec_no$,
 - [
 - absinc$ = zero
 - if sub_trnstyp$, psub_rotate
 - else, psub_mirror
 - ]
 - mr_rt_actv = three
 - ]
 - else, #Translate
 - [
 - if sub_mny_t$,
 - [
 - if wcstype > one, absinc$ = zero
 - if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
 - pbld, n$, *sgcode, *sgabsinc, pwcs, pfxout, pfyout, pfzout,
 - pfcout, e$
 - if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
 - pe_inc_calc
 - ps_inc_calc
 - ]
 - ]
 - absinc$ = sav_absinc
 - result = nwadrs(strp, main_prg_no$)
 - main_prg_no$ = main_prg_no$ + sav_progno #Add sub number offset
 - if sav_progno = main_prg_no$, result = mprint(sprgnerror,1)
 - pbld, n$, "M98", *main_prg_no$, e$
 - prv_feed = c9k #Force feed in sub
 - psub_mirror #Mirror start code, user
 - #Mirror Y axis
 - if sub_trnmthd$, pbld, n$, *sgabsinc, strns_mir_on, *sub_trnsx$, e$
 - #Mirror X axis
 - else, pbld, n$, *sgabsinc, strns_mir_on, *sub_trnsy$, e$
 - psub_rotate #Rotate start code, user
 - pbld, n$, *sgcode, *sgabsinc, strns_rot_on, *sub_trnsx$, *sub_trnsy$,
 - [absinc$ = one], *sgabsinc, *rt_cinc, e$
 - psub_st_m$ #Header in main level
 - result = nwadrs(stro, main_prg_no$)
 - #sav_n1 = n
 - #n = seqno
 - " ", e$
 - *main_prg_no$, e$
 - spaces$ = 0
 - if scomm0$ <> snull, "(", *scomm0$, ")", e$
 - spaces$ = sav_spc
 - #G51/G68 requires absolute position on first move
 - if mr_rt_actv & absinc$ = one,
 - [
 - sav_absinc = absinc$
 - absinc$ = zero
 - prv_absinc$ = m_one
 - prv_xabs = m_one
 - prv_yabs = m_one
 - ]
 - else, pbld, n$, sgabsinc, e$
 - psub_end_m$ #End in main level
 - n$, "M99", e$
 - prv_absinc$ = -1
 - #n = sav_n1
 - #Reset update variables for subs at main level
 - #Mirror or Rotate cancel, output is forced
 - if (sub_trnstyp$ = zero & esub_sec_no$ > zero)
 - | (sub_trnstyp$ = one & esub_sec_no$ = esub_totl_no$-one
 - & sub_trnmthd$ = two),
 - [
 - subout$ = zero
 - no_nc_out$ = m_one
 - sav_absinc = absinc$
 - #Mirror cancel
 - if sub_trnstyp$ = zero,
 - [
 - absinc$ = zero
 - pbld, n$, *sgabsinc, strns_mir_off, *sub_trnsx$, *sub_trnsy$, e$
 - ]
 - else, #Rotate cancel
 - [
 - pbld, n$, strns_rot_off, e$
 - ]
 - absinc$ = sav_absinc
 - no_nc_out$ = zero
 - ]
 - end_sub_mny = sub_mny_t$
 - psub_end_mny #End in main level for many tools sub, user
 - #Check for coming out of xform with stage tool.
 - if end_sub_mny & stagetool = one,
 - [
 - *t$
 - end_sub_mny = zero
 - ]
 - psub_call_s$ #Call to sub level
 - result = nwadrs(strp, sub_prg_no$)
 - sub_prg_no$ = sub_prg_no$ + sav_progno + 1000 #Add sub number offset
 - if sav_progno = sub_prg_no$, result = mprint(sprgnerror,1)
 - pbld, n$, "M98", *sub_prg_no$, e$
 - psub_st_s$ #Header in sub level
 - result = nwadrs(stro, sub_prg_no$)
 - #sav_n2 = n
 - #n = seqno
 - " ", e$
 - *sub_prg_no$, e$
 - spaces$ = 0
 - if scomm0$ <> snull, "(", *scomm0$, ")", e$
 - spaces$ = sav_spc
 - pbld, n$, sgabsinc, e$
 - psub_end_s$ #End in sub level
 - n$, "M99", e$
 - prv_absinc$ = -1
 - #n = sav_n2
 - # --------------------------------------------------------------------------
 - # Canned Text
 - # --------------------------------------------------------------------------
 - pcan #Canned text - before output call
 - strcantext = sblank
 - if cant_no$ > zero,
 - [
 - if cant_pos1$ = zero, pcant_1
 - if cant_pos2$ = zero, pcant_2
 - if cant_pos3$ = zero, pcant_3
 - if cant_pos4$ = zero, pcant_4
 - if cant_pos5$ = zero, pcant_5
 - if cant_pos6$ = zero, pcant_6
 - if cant_pos7$ = zero, pcant_7
 - if cant_pos8$ = zero, pcant_8
 - if cant_pos9$ = zero, pcant_9
 - if cant_pos10$ = zero, pcant_10
 - pbld, n$, strcantext, e$
 - strcantext = sblank
 - ]
 - pcan1 #Canned text - with move
 - strcantext = sblank
 - if cant_no$ > zero,
 - [
 - if cant_pos1$ = one, pcant_1
 - if cant_pos2$ = one, pcant_2
 - if cant_pos3$ = one, pcant_3
 - if cant_pos4$ = one, pcant_4
 - if cant_pos5$ = one, pcant_5
 - if cant_pos6$ = one, pcant_6
 - if cant_pos7$ = one, pcant_7
 - if cant_pos8$ = one, pcant_8
 - if cant_pos9$ = one, pcant_9
 - if cant_pos10$ = one, pcant_10
 - ]
 - if cstop$, strcantext = strcantext + sm00
 - if cgstop$, strcantext = strcantext + sm01
 - #Output of strcantext occurs at the end of the output line
 - pcan2 #Canned text - after output call
 - strcantext = sblank
 - if cant_no$ > zero,
 - [
 - if cant_pos1$ = two, pcant_1
 - if cant_pos2$ = two, pcant_2
 - if cant_pos3$ = two, pcant_3
 - if cant_pos4$ = two, pcant_4
 - if cant_pos5$ = two, pcant_5
 - if cant_pos6$ = two, pcant_6
 - if cant_pos7$ = two, pcant_7
 - if cant_pos8$ = two, pcant_8
 - if cant_pos9$ = two, pcant_9
 - if cant_pos10$ = two, pcant_10
 - pbld, n$, strcantext, e$
 - strcantext = sblank
 - ]
 - pcant_1 #Canned text - output call
 - cantext$ = cant_val1$
 - pcant_out
 - pcant_2 #Canned text - output call
 - cantext$ = cant_val2$
 - pcant_out
 - pcant_3 #Canned text - output call
 - cantext$ = cant_val3$
 - pcant_out
 - pcant_4 #Canned text - output call
 - cantext$ = cant_val4$
 - pcant_out
 - pcant_5 #Canned text - output call
 - cantext$ = cant_val5$
 - pcant_out
 - pcant_6 #Canned text - output call
 - cantext$ = cant_val6$
 - pcant_out
 - pcant_7 #Canned text - output call
 - cantext$ = cant_val7$
 - pcant_out
 - pcant_8 #Canned text - output call
 - cantext$ = cant_val8$
 - pcant_out
 - pcant_9 #Canned text - output call
 - cantext$ = cant_val9$
 - pcant_out
 - pcant_10 #Canned text - output call
 - cantext$ = cant_val10$
 - pcant_out
 - pcant_out #Canned text - build the string for output
 - #Assign string select type outputs
 - if cantext$ = three, bld = one
 - if cantext$ = four, bld = zero
 - #Build the cantext string
 - if cantext$ = one, strcantext = strcantext + sm00
 - if cantext$ = two, strcantext = strcantext + sm01
 - if cantext$ > four,
 - [
 - strtextno = no2str(cantext$)
 - strcantext = strcantext + strm + strtextno
 - ]
 - # --------------------------------------------------------------------------
 - # Position calculations, generally these do not need to be modified
 - # --------------------------------------------------------------------------
 - pmiscint$ #Capture the top level absinc for subprograms
 - if sub_level$ <= zero, absinc$ = mi2$
 - #Disable cutpos2 if not 4 axis, saves time
 - if rot_on_x = zero, cutpos2$ = m_one
 - pusecannedyes # Use canned drilling cycles
 - usecandrill$ = yes$ # Use canned cycle for drill
 - usecanpeck$ = yes$ # Use canned cycle for Peck
 - usecanchip$ = yes$ # Use canned cycle for Chip Break
 - usecantap$ = yes$ # Use canned cycle for Tap
 - usecanbore1$ = yes$ # Use canned cycle for Bore1
 - usecanbore2$ = yes$ # Use canned cycle for Bore2
 - usecanmisc1$ = yes$ # Use canned cycle for Misc1
 - usecanmisc2$ = yes$ # Use canned cycle for Misc2
 - pusecannedno # Use canned drilling cycles
 - usecandrill$ = no$ # Use canned cycle for drill
 - usecanpeck$ = no$ # Use canned cycle for Peck
 - usecanchip$ = no$ # Use canned cycle for Chip Break
 - usecantap$ = no$ # Use canned cycle for Tap
 - usecanbore1$ = no$ # Use canned cycle for Bore1
 - usecanbore2$ = no$ # Use canned cycle for Bore2
 - usecanmisc1$ = no$ # Use canned cycle for Misc1
 - usecanmisc2$ = no$ # Use canned cycle for Misc2
 - pmotion_su #Motion Setup (Set brklinestype & linarc)
 - brklinestype$ = zero
 - linarc$ = zero
 - if rot_on_x,
 - [
 - if cuttype = one, linarc$ = one #Axis subs
 - if cuttype = two, #Polar
 - [
 - brklinestype$ = rotary_axis$ + three
 - linarc$ = one
 - ]
 - ]
 - pcuttype #Determine the cut type
 - #cuttype (0 = Tool Plane, 1 = Axis Subs, 2 = Polar, 3 = 4/5 axis)
 - cuttype = rotary_type$
 - if cuttype = three, cuttype = zero
 - if mill5$,
 - [
 - if rot_on_x = zero, result = mprint(saxisoff,1)
 - cuttype = three
 - ]
 - if rotary_axis$,
 - [
 - if rotary_axis$ <> rot_on_x, result = mprint(saxiswarn,1)
 - rot_on_x = rotary_axis$
 - ]
 - #Check for Tool Origin in Polar Milling
 - if cuttype = two & (tox$ | toy$ | toz$), result = mprint(stlorgerr,1)
 - #Transform Rotate, set mr_rt_actv if user selected 'coordinates'
 - if sub_trnstyp$ = one & sub_trnmthd$ = two,
 - [
 - #Calculate the rotation incremental angle for G68
 - rt_csav = atan2(sub_m2$, sub_m1$)
 - rt_cinc = prv_rt_csav - rt_csav
 - while rt_cinc > 180, rt_cinc = rt_cinc - 360
 - while rt_cinc < -180, rt_cinc = rt_cinc + 360
 - if rot_ccw_pos = one, rt_cinc = -rt_cinc
 - !rt_csav
 - if sub_sec_no$, mr_rt_actv = two
 - else, mr_rt_actv = one
 - ]
 - else, mr_rt_actv = zero
 - pfcalc_u_min
 - pmotion_su
 - pxyzcout #Map coordinates
 - if rot_on_x,
 - [
 - if cuttype = zero, pxyzcout0 #Toolplane Positioning
 - if cuttype = one, pxyzcout1 #Axis Substitution
 - if cuttype = two, pxyzcout2 #Polar Conversion
 - if cuttype = three, pxyzcout3 #Simulatneous 4 axis (Multi-axis)
 - if rot_ccw_pos = one, csav = -csav
 - if mr_rt_actv <> two,
 - [
 - pcoutrev
 - if index, pindxcalc
 - pfcalc
 - ]
 - else, feed = fr_pos$
 - ]
 - else,
 - [
 - xabs = vequ (x$)
 - feed = fr_pos$
 - ]
 - pxyzcout0 #Toolplane Positioning
 - xabs = vequ (x$)
 - if cuttype = 2 & rot_on_x = two & vmc, c$ = atan2(vtoolx$,-vtooly$)
 - if rot_on_x = two, csav = -c$
 - else, csav = c$
 - pxyzcout1 #Axis substitution
 - if rot_on_x = one, #X axis substitution
 - [
 - xabs = x$
 - yabs = zero
 - zabs = z$ + (rotdia$ / two)
 - csav = y$ * (360 / (pi$ * rotdia$))
 - ]
 - else, #Y axis substitution
 - [
 - xabs = zero
 - yabs = y$
 - zabs = z$ + (rotdia$ / two)
 - csav = -x$ * (360 / (pi$ * rotdia$))
 - ]
 - if c$ <> 0,
 - [
 - if rot_on_x = two, csav = -c$
 - else, csav = c$
 - ]
 - pxyzcout2 #polar interpolation
 - #Drill polar is toolplane drilling toward center
 - #if not a coincident axis
 - #Also, Capture initial index position for Polar Milling
 - if (opcode$ = three & rot_on_x <> three), pxyzcout0
 - else,
 - [
 - if rot_on_x = one, #X axis rotation
 - [
 - csav = atan2(y$, z$) #Z+ zero
 - axisx$ = vequ(aaxisx)
 - xabs = rotp(csav, x$)
 - ]
 - if rot_on_x = two, #Y axis rotation
 - [
 - csav = atan2(-x$, z$) #Z+ zero
 - axisx$ = vequ(baxisx)
 - xabs = rotp(csav, x$)
 - ]
 - if rot_on_x = three, #Z axis rotation
 - [
 - csav = atan2(-y$, x$) #X+ zero
 - #csav = -atan2(y, -x) #X- zero
 - #csav = -atan2(x, y) #Y+ zero
 - #csav = -atan2(-x, -y) #Y- zero
 - axisx$ = vequ(caxisx)
 - xabs = rotp(csav, x$)
 - ]
 - csav = csav + c$
 - ]
 - pxyzcout3 #Multisurf rotary axis motion
 - #Use Top toolplane for vmc = 1, Front for vmc = 0
 - if rot_on_x = one, #Multisurf Rotary about X
 - [
 - csav = atan2 (vtooly$, vtoolz$)
 - axisx$ = vequ (aaxisx)
 - ]
 - if rot_on_x = two, #Multisurf Rotary about Y
 - [
 - csav = atan2 (-vtoolx$, vtoolz$)
 - axisx$ = vequ (baxisx)
 - ]
 - xabs = rotp (csav, x$)
 - u$ = rotp (csav, u$)
 - csav = csav + c$
 - pcoutrev #Rotary axis revolution calculation (Modify for wind-up)
 - cdelta = csav - prv_csav
 - while abs(cdelta) > ctol, #If motion exceeds ctol, add wind-up
 - [
 - if cdelta > zero,
 - [
 - rev = rev - one
 - cdelta = cdelta - 360
 - ]
 - else,
 - [
 - rev = rev + one
 - cdelta = cdelta + 360
 - ]
 - ]
 - if cuttype <> one, cabs = rev * 360 + csav
 - else, cabs = sav_rev * 360 + csav
 - if (cuttype = zero | opcode$ = 3 | (gcode$ = 0 & cuttype <> one)) & one_rev = one,
 - [
 - while fmtrnd(cabs) >= 360,
 - [
 - cabs = cabs - 360
 - rev = rev - 1
 - ]
 - while fmtrnd(cabs) < 0,
 - [
 - cabs = cabs + 360
 - rev = rev + 1
 - ]
 - #while fmtrnd(cabs) < -360,
 - # [
 - # cabs = cabs + 720
 - # rev = rev + 2
 - # ]
 - if abs(cdelta) >= 0.0005, prv_cabs = c9k
 - ]
 - !csav
 - pindxcalc #Index move calculations, direction is shortest
 - #Check if in tolerance
 - cdelta = frac(abs(csav)/ctable)
 - if cdelta > ixtol & cdelta < 1-ixtol,
 - result = mprint(sindxerror,1)
 - cdelta = prvcabs - cabs
 - #Phase shift delta 10 revolutions, check odd/even
 - if frac(int((cdelta + 3600)/180)/two), indx_mc = one
 - else, indx_mc = zero
 - #Set range 0-360
 - indx_out = csav
 - while indx_out < 0, indx_out = indx_out + 360
 - while indx_out > 360, indx_out = indx_out - 360
 - #Feedrate calculations
 - pfcalc #Feedrate calculations, gcode 0 does not evaluate
 - if gcode$ <> zero,
 - [
 - if not(use_frinv) & (abs(fmtrnd(cabs)-prvcabs) <= 0.001 | index | not(rot_feed) | opcode$ = 3), pfcalc_u_min
 - else,
 - [
 - #if cuttype = one & (cutpos2 <= one), #Proposed change
 - if cuttype = one & (cutpos2$ <= one | cutpos2$ = four & (opcode$ < 5 & opcode$ > 12)), pfcalc_u_min
 - else, pfclc_deg_inv
 - ]
 - if ipr_type <> prv_ipr_type, prv_feed = c9k
 - ]
 - pfcalc_u_min #Feedrate unit/min
 - ipr_type = zero
 - feed = fr_pos$
 - if feed > maxfeedpm, feed = maxfeedpm
 - prvfrdeg = feed
 - pfclc_deg_inv #Feedrate deg/min
 - circum = zabs * two * pi$
 - if cuttype = two & rot_on_x = three, circum = sqrt(xabs^2 + yabs^2) * two * pi$
 - if circum = zero, circum = c9k #Don't allow Zero
 - ldelta = sqrt((xabs-prv_xabs)^2+(yabs-prv_yabs)^2+(zabs-prv_zabs)^2)
 - cdelta = ((abs(cabs - prvcabs))/360)*circum
 - if ldelta = zero, cldelta = cdelta
 - else, cldelta = sqrt(cdelta^two + ldelta^two)
 - if cldelta = zero, cldelta = c9k
 - if use_frinv,
 - [
 - #Feedrate inverse calculation
 - ipr_type = two
 - result = force(feed, feed) #Always force feed
 - if cuttype = three, cldelta = sqrt((x$-prv_x$)^2+(y$-prv_y$)^2+(z$-prv_z$)^2)
 - frinv = fr_pos$/cldelta # 1/min
 - #frinv = fr_pos/(60*cldelta) # 1/sec
 - if rot_feed & opcode$ <> 3 & opcode$ <> 16,
 - [
 - if frinv > maxfrinv, frinv = maxfrinv
 - feed = frinv
 - ]
 - ]
 - else,
 - [
 - #Feedrate deg/min control and calculation
 - ipr_type = zero #Change to ipr_type = one to force new DPM
 - #frdeg = abs(cdelta/cldelta) * abs(fr_pos * (360/circum))
 - frdeg = fr_pos$ * abs((cabs - prvcabs)/cldelta)
 - if abs(frdeg - prvfrdeg) > frdegstp | ipr_type <> prv_ipr_type,
 - [
 - #Control output of frdeg
 - if rot_feed & opcode$ <> 3 & opcode$ <> 16,
 - [
 - prvfrdeg = frdeg
 - feed = frdeg
 - ]
 - ]
 - if frdeg < fr_pos$ & rot_feed, feed = fr_pos$
 - if frdeg > maxfrdeg & rot_feed, feed = maxfrdeg
 - ]
 - #Incremental calculations
 - ps_inc_calc #Incremental calculations, start
 - xia = fmtrnd(xabs)
 - yia = fmtrnd(yabs)
 - zia = fmtrnd(zabs)
 - xinc = vsub (xia, prv_xia)
 - ps_cinc_calc
 - ps_cinc_calc #Incremental calculations, start rotary
 - cia = fmtrnd(cabs)
 - cinc = cia - prv_cia
 - pe_inc_calc #Incremental calculations, end
 - prvcabs = fmtrnd(cabs) #Avoid updating until called explicitly
 - !xia, !yia, !zia, !cia
 - !x$, !y$, !z$, !cc_pos$, !cutpos2$
 - # --------------------------------------------------------------------------
 - # Tooltable Output
 - # --------------------------------------------------------------------------
 - pwrtt$ # Write tool table, scans entire file, null tools are negative
 - if rotaxis$ > 0 | rotary_type$ > 0 | mill5$ <> 0,
 - [
 - rot_on_x = sav_rot_on_x
 - output_z = no$
 - ]
 - #if vmc = 0 & tlplnno <> 2, rot_on_x = sav_rot_on_x
 - #if vmc = 1 & tlplnno > 1, rot_on_x = sav_rot_on_x
 - if tlplnno$ > 1, rot_on_x = sav_rot_on_x
 - tlplnno$ = wbuf(3,wc3) #Buffers out tool plane values
 - t$ = wbuf(4,wc4) #Buffers out tool number values
 - if tool_table = 1, ptooltable,e$
 - if tool_table = 2, ppredtool,e$
 - if tool_table = 3, pmetatool,e$
 - if t$ >= zero, tcnt = tcnt + one
 - ptravel
 - pwritbuf5
 - ptooltable # Write tool table, scans entire file, null tools are negative
 - tnote = t$
 - toffnote = tloffno$
 - tlngnote = tlngno$
 - spaces$=0
 - if t$ >= zero,
 - [
 - if tcr$>0, "(",*t$, " - " , *tldia$, " " , ppredtool, ")"
 - if tcr$=0, "(",*t$, " - " , *tldia$, " " , ppredtool, ")"
 - ]
 - #if t >= zero,
 - # [
 - # "(",*t, " - " , *tldia, " " , ppredtool, ")"
 - # ]
 - #if t >= zero,
 - # [
 - # if tcr>0, "(",*t, " - " , *tldia, " " , ppredtool, ")"
 - # if tcr=0, "(",*t, " - " , *tldia, " " , ppredtool, ")"
 - # ]
 - spaces$=sav_spc
 - punit # Tool unit
 - if met_tool$, "mm"
 - else, 34
 - ptravel # Tool travel limit calculation
 - if x_min$ < x_tmin, x_tmin = x_min$
 - if x_max$ > x_tmax, x_tmax = x_max$
 - if y_min$ < y_tmin, y_tmin = y_min$
 - if y_max$ > y_tmax, y_tmax = y_max$
 - if z_min$ < z_tmin, z_tmin = z_min$
 - if z_max$ > z_tmax, z_tmax = z_max$
 - ppredtool # Write tool setup info for Predator Virtual CNC
 - #if tool_typ = 1, styp1 # CENTER DRILL 1 - NTG/S4
 - #if tool_typ = 2, styp2 # SPOT DRILL 2 - S4
 - #if tool_typ = 3, styp3 # DRILL 3 - S4
 - #if tool_typ = 4, styp4 # TAP-RH 4 - S4 - MAX 179 ANGLE
 - #if tool_typ = 5, styp5 # TAP-LH 5 - S4 - MAX 179 ANGLE
 - #if tool_typ = 6, styp6 # REAMER 6 - S3/S1/S2
 - #if tool_typ = 7, styp7 # BORING BAR 7 - S3/S1/S2
 - #if tool_typ = 8, styp8 # COUNTER BORE 8 - NTG
 - #if tool_typ = 9, styp9 # COUNTER SINK 9 - NTG/S4
 - #if tool_typ = 10, styp10 # END MILL FLAT 10 - S1
 - #if tool_typ = 11, styp11 # END MILL SPHERE 11 - S2
 - #if tool_typ = 12, styp12 # CHAMFER MILL 12 - S7/NTG
 - #if tool_typ = 13, styp13 # FACE MILL 13 - S7/S9/NTG
 - #if tool_typ = 14, styp14 # SLOT MILL 14 - NTG/S1
 - #if tool_typ = 15, styp15 # CORNER RAD MILL 15 - S5/FLAT
 - #if tool_typ = 16, styp16 # DOVETAIL MILL 16 - DOVETAIL/NTG
 - #if tool_typ = 17, styp17 # TAPER MILL 17 - S7/S9/S10
 - #if tool_typ = 18, styp18 # LOLLIPOP MILL 18 - S6
 - #if tool_typ = 19, styp19 # END MILL BULL 19 - S3
 - tcr_pred = tcr$
 - tldia_pred = tldia$
 - tip_angle_ch = tip_angle*2
 - spaces$=0
 - if t$ >= zero,
 - [
 - # CENTER DRILL
 - if tool_typ$ = 1, "CENTER DRILL"
 - # SPOT DRILL
 - if tool_typ$ = 2, "SPOT DRILL"
 - # DRILL
 - if tool_typ$ = 3, "DRILL"
 - # TAP-RH
 - if tool_typ$ = 4,
 - [
 - if tip_angle <= 179, "TAP "
 - else, "TAP"
 - ]
 - # TAP-LH
 - if tool_typ$ = 5,
 - [
 - if tip_angle <= 179, "TAP"
 - else, "TAP"
 - ]
 - # REAMER
 - if tool_typ$ = 6,
 - [
 - if tcr$ = 0, "REAMER"
 - if tcr$ = tlrad$, "REAMER"
 - if tcr$ > 0 & tcr$ < tlrad$, "REAMER"
 - ]
 - # BORING BAR
 - if tool_typ$ = 7,
 - [
 - if tcr$ = 0, "BORING BAR"
 - if tcr$ = tlrad$, "BORING BAR"
 - if tcr$ > 0 & tcr$ < tlrad$, "BORING BAR"
 - ]
 - # COUNTER BORE
 - if tool_typ$ = 8,
 - [
 - if tcr$ = 0, "COUNTER BORE"
 - if tcr$ = tlrad$, "COUNTER BORE"
 - if tcr$ > 0 & tcr$ < tlrad$, "COUNTER BORE"
 - ]
 - # COUNTER SINK
 - if tool_typ$ = 9, "COUNTER SINK"
 - # END MILL FLAT
 - if tool_typ$ = 10, "END MILL"
 - # END MILL SPHERE
 - if tool_typ$ = 11, "BALL END MILL"
 - # CHAMFER MILL
 - if tool_typ$ = 12, "N/C DRILL"
 - # FACE MILL
 - if tool_typ$ = 13, "FACE MILL"
 - # SLOT MILL
 - if tool_typ$ = 14, "SLOT MILL"
 - # CORNER RAD MILL
 - if tool_typ$ = 15,
 - [
 - if tcr$ = 0, *tcr_pred, " ", "CORNER RAD END MILL"
 - else, *tcr_pred, " ", "CORNER RAD END MILL"
 - ]
 - # DOVETAIL MILL
 - if tool_typ$ = 16, "DOVETAIL MILL"
 - # TAPER MILL
 - if tool_typ$ = 17,
 - [
 - if tcr$ = 0, "TAPER MILL"
 - if tcr$ = tlrad$, "TAPER MILL"
 - if tcr$ > 0 & tcr$ < tlrad$, "TAPER MILL"
 - ]
 - # LOLLIPOP MILL
 - if tool_typ$ = 18, "LOLLIPOP MILL"
 - # END MILL BULL
 - if tool_typ$ = 19, "END MILL BULL"
 - ]
 - spaces$=sav_spc
 - pmetatool # Write tool setup info for MetaCut View
 - tcr_meta = tcr$
 - if tool_typ$ = 13 | tool_typ$ = 17, tldia_meta = tldia$ + (2 *(flute_len * tan(tip_angle)))
 - else, tldia_meta = tldia$
 - if cctotip$ = 0, tipcomp = 1
 - else, tipcomp = 0
 - if tool_typ$ = 10 | opcode$ = 3, tipcomp = 0
 - if tool_typ$ = 12, td_meta = tip_dia
 - else, td_meta = 0
 - if tool_typ$ = 13 | tool_typ$ = 17, td_meta = tldia$
 - flute_meta = flute_len
 - oa_meta = oa_len
 - ta_meta = tip_angle
 - cd_meta = hldr_dia
 - cl_meta = hldr_len
 - sd_meta = cd_meta
 - #(NWDTOOL NAME"1/2 CHAMFER MILL" T1 D.5 R0. F2. L3. A45. TD.06 CD2. CL1. SD2. C0)
 - # N = "Tool name"
 - # T = Tool No.
 - # D = Tool Dia.
 - # R = Corner Radius
 - # F = Flute Length
 - # L = Tool over all length
 - # A = Tip angle or Taper angle
 - # TD = Tip Dia.
 - # CD = Colllet/Holder Dia.
 - # CL = Collet/Holder Height
 - # SD = Spindle Dia. (set equal to Collet Diameter)
 - # C = tip or center 0 = tip 1 = center
 - spaces$=0
 - if t$ >= zero, "(NWDTOOL N", 34, pmetacomm, 34, " ", *t$, " ", *tldia_meta, " ",
 - [if tcr_meta > 0, *tcr_meta, " "], *flute_meta, " ", *oa_meta, " ",
 - [if ta_meta<>180, *ta_meta, " "], [if td_meta > 0, *td_meta, " "],
 - *cd_meta, " ", *cl_meta, " ", *sd_meta, " ", *tipcomp, ")"
 - spaces$=sav_spc
 - # --------------------------------------------------------------------------
 - # Buffer 5 Read / Write Routines
 - # --------------------------------------------------------------------------
 - pwritbuf5 # Write Buffer 1
 - b5_gcode = gcode$
 - b5_zmin = z_min$
 - b5_zmax = z_max$
 - b5_gcode = wbuf(5, wc5)
 - preadbuf5 # Read Buffer 1
 - size5 = rbuf(5,0)
 - b5_gcode = 1000
 - min_depth = 99999
 - max_depth = -99999
 - while rc5 <= size5 & b5_gcode = 1000,
 - [
 - if rc5 <= size5, b5_gcode = rbuf(5,rc5)
 - if b5_zmin < min_depth, min_depth = b5_zmin
 - if b5_zmax > max_depth, max_depth = b5_zmax
 - ]
 - # --------------------------------------------------------------------------
 - # Numbered questions for Mastercam
 - # --------------------------------------------------------------------------
 - 38. Rapid feedrate? 300.0
 - #76. 관련된 CFG 파일 이름은? T
 - #400. 관련된 CFG 파일 이름은? T
 - 1538. Rapid feedrate (metric)? 2000.0
 - #76. Configuration file name?
 - 80. Communications port number for receive and transmit (1 or 2) ? 2
 - 81. Data rate (110,150,300,600,1200,2400,4800,9600,14400,19200,38400)? 9600
 - 82. Parity (E/O/N)? E
 - 83. Data bits (7 or 8)? 7
 - 84. Stop bits (1 or 2)? 2
 - 85. Strip line feeds? N
 - 86. Delay after end of line (seconds)? 0
 - 87. Ascii, Eia, or Binary (A/E/B)? A
 - 88. Echo keyboard to screen in terminal emulation? n
 - 89. Strip carriage returns? N
 - 90. Drive and subdirectory for NC files?
 - 91. Name of executable post processor? MP
 - 92. Name of reverse post processor? RP
 - 93. Reverse post PST file name? RPFAN
 - 100. Number of places BEFORE the decimal point for sequence numbers? 0
 - 101. Number of places AFTER the decimal point for sequence numbers? 0
 - 103. Maximum spindle speed? 10000
 - 107. Average time for tool change (seconds)? 2.0
 - 159. Show first and last position as fully compensated in simulation? n
 - 161. Enable Home Position button? y
 - 162. Enable Reference Point button? y
 - 163. Enable Misc. Values button? y
 - 164. Enable Rotary Axis button? y
 - 165. Enable Tool Plane button? y
 - 166. Enable Construction Plane button? y
 - 167. Enable Tool Display button? y
 - 168. Check tplane during automatic work origin creation? y
 - # --------------------------------------------------------------------------
 - # Default Miscellaneous Real Values
 - # --------------------------------------------------------------------------
 - 201. Default miscellaneous real variable 1 (mr1)? 0.0
 - 202. Default miscellaneous real variable 2 (mr2)? 0.0
 - 203. Default miscellaneous real variable 3 (mr3)? 0.0
 - 204. Default miscellaneous real variable 4 (mr4)? 0.0
 - 205. Default miscellaneous real variable 5 (mr5)? 0.0
 - 206. Default miscellaneous real variable 6 (mr6)? 0.0
 - 207. Default miscellaneous real variable 7 (mr7)? 0.0
 - 208. Default miscellaneous real variable 8 (mr8)? 0.0
 - 209. Default miscellaneous real variable 9 (mr9)? 0.0
 - 210. Default miscellaneous real variable 10 (mr10)? 0.0
 - # --------------------------------------------------------------------------
 - # Default Miscellaneous Real Values (METRIC)
 - # --------------------------------------------------------------------------
 - 1601. Default miscellaneous real variable 1 (mr1) (metric)? 0.0
 - 1602. Default miscellaneous real variable 2 (mr2) (metric)? 0.0
 - 1603. Default miscellaneous real variable 3 (mr3) (metric)? 0.0
 - 1604. Default miscellaneous real variable 4 (mr4) (metric)? 0.0
 - 1605. Default miscellaneous real variable 5 (mr5) (metric)? 0.0
 - 1606. Default miscellaneous real variable 6 (mr6) (metric)? 0.0
 - 1607. Default miscellaneous real variable 7 (mr7) (metric)? 0.0
 - 1608. Default miscellaneous real variable 8 (mr8) (metric)? 0.0
 - 1609. Default miscellaneous real variable 9 (mr9) (metric)? 0.0
 - 1610. Default miscellaneous real variable 10 (mr10) (metric)? 0.0
 - # --------------------------------------------------------------------------
 - # Enable/Disable Miscellaneous Real Variable switches
 - # --------------------------------------------------------------------------
 - 1611. Enable miscellaneous real variable 1? y
 - 1612. Enable miscellaneous real variable 2? y
 - 1613. Enable miscellaneous real variable 3? y
 - 1614. Enable miscellaneous real variable 4? y
 - 1615. Enable miscellaneous real variable 5? y
 - 1616. Enable miscellaneous real variable 6? y
 - 1617. Enable miscellaneous real variable 7? y
 - 1618. Enable miscellaneous real variable 8? y
 - 1619. Enable miscellaneous real variable 9? y
 - 1620. Enable miscellaneous real variable 10? y
 - # --------------------------------------------------------------------------
 - # Default Miscellaneous Integer Values
 - # --------------------------------------------------------------------------
 - 301. Miscellaneous integer variable 1 (mi1)? 0
 - 302. Absolute or Incremental [0=ABS,1=INC] (mi2)? 0
 - 303. Miscellaneous integer variable 3 (mi3)? 0
 - 304. Miscellaneous integer variable 4 (mi4)? 0
 - 305. Miscellaneous integer variable 5 (mi5)? 0
 - 306. Miscellaneous integer variable 6 (mi6)? 0
 - 307. Miscellaneous integer variable 7 (mi7)? 0
 - 308. Miscellaneous integer variable 8 (mi8)? 0
 - 309. Lock on First WCS [0=No,1=Yes] (mi9)? 0
 - 310. M00 before operation [0=No,1=Yes] (mi10)? 0
 - # --------------------------------------------------------------------------
 - # Enable/Disable Miscellaneous Integer Variable switches
 - # --------------------------------------------------------------------------
 - 1621. Enable miscellaneous integer variable 1? y
 - 1622. Enable miscellaneous integer variable 2? y
 - 1623. Enable miscellaneous integer variable 3? y
 - 1624. Enable miscellaneous integer variable 4? y
 - 1625. Enable miscellaneous integer variable 5? y
 - 1626. Enable miscellaneous integer variable 6? y
 - 1627. Enable miscellaneous integer variable 7? y
 - 1628. Enable miscellaneous integer variable 8? y
 - 1629. Enable miscellaneous integer variable 9? y
 - 1630. Enable miscellaneous integer variable 10? y
 - # --------------------------------------------------------------------------
 - # Configuration File association parameters (default is "y")
 - # --------------------------------------------------------------------------
 - #400. Name of associated cfg file?
 - 401. Read SYSTEM COLORS section? y
 - 402. Read ALLOCATIONS section? y
 - 403. Read TOLERANCES section? y
 - 404. Read DATA PATHS section? y
 - 405. Read COMMUNICATIONS section? y
 - 406. Read DRAFT SETTINGS section? y
 - 407. Read MISCELLANEOUS section? y
 - 408. Read NC SETTINGS section? y
 - 409. Read DIALOG SCRIPTS section? y
 - 410. Read DESIGN SETTINGS section? y
 - 411. Read PLOTTER SETTINGS section? y
 - 412. Read ALT-KEY ASSIGNMENTS section? y
 - 413. Read CAD section? y
 - 414. Read START/EXIT section? y
 - 415. Read SCREEN section? y
 - 416. Read FILE NAMES section? y
 - 1500. Chook to execute from 'Misc. values' button?
 - 1501. Insert parameter information in the ascii NCI? n
 - 1502. Write operation information to binary file (.ops)? y
 - 1503. Write transform operations (0=transform ops, 1=source ops, 2=both)? 1
 - 1520. Display a warning when cutter compensation in control simulation finds an error? n
 - 1521. Number of controller look-ahead blocks for CDC in control? 2
 - 1530. Ignore work offset numbers when processing subprograms? y
 - 1531. Ignore contour flags when processing subprograms? y
 - # Do NOT manually change the answer for Q.1999 !
 - 1999. Product major version number that post supports? 9
 - 3001. Machine acceleration? 2
 - 3002. timing size? .1
 - [CTRL_TEXT_END]
 
                    Add Comment                
                
                        Please, Sign In to add comment