{8/1/96 Initial: Heidenhain 407 SHW M060.89 Created: Heid TNC 426 Hermle V Dxxx.12 ForUser: Remmele Plant 50 Control: Heidenhain TNC 426 Machine: Hermle with Head in Vertical position. Develop: ComPost2 68k, Catalyst68K v3.04.10.C Comment: Created New Advanced Mill Processor Jim Radcliffe}
{9/11/96 Initial: Heid TNC 426 Hermle V DZ17.12 Created: Heid TNC 426 Hermle V DZ17.12.1 Develop: ComPost2 68k v1.0b3, Catalyst68K v3.04.10.C Comment: Modified per faxes from and conversations with Rudy Corrected CRCOff. Added CRCOff to OfstOff, M92, line. Modified Drilling Cycles. Modified handling of looping subs. Correct handling of EndTool2 by adding flag 3 to see if we are at the end of the program. Jim Radcliffe}
{11/6/96 Initial: Heid TNC 426 Hermle V DZ17.12.1 Created: Heid TNC 426 Hermle V DZ17.12.2 Develop: ComPost2 68k v1.0b4, Catalyst68K v3.09.05C Comment: Modified per marked up readout from Rudy Moved CoolOff and SpinOff from EndTool1 to EndTool2 getting them out of the MP1ToollAllPfu subroutine. Changed format of FeedTapIPR from #4 to #10 to show 1 leading zero. Added CoolOff and SpeedC to SameTool. Changed B axis label from B to C. Jim Radcliffe}
{11/19/96 Initial: Heid TNC 426 Hermle V DZ17.12.2 Created: Heid TNC 426 Hermle V DZ17.12.3 Develop: ComPost2 68k v1.0b4, Catalyst68K v3.09.05C Comment: Modified per marked up readouts from Rudy Added 'M79' to beginning of program. Added TOOL CALL line and M3 to SameTool. Changed parameter Q202 in the universal drilling cycle to output zero if not pecking. Changed parameter Q204 in the universal drilling cycle corrected output for retract to clearance plane #2. Jim Radcliffe}
{2/7/97 Initial: Heid TNC 426 Hermle V DZ17.12.3 Created: Heid TNC 426 Hermle V DZ17.12.4 Develop: ComPost2 68K 1.0b11, Virtual Gibbs 3.23 Comment: Modified per marked up readout adn conversation with Rudy Changed parameter Q202 in the universal drilling cycle if not pecking we need an unsigned depth value same as Q201. Changed location of CRCOff in a couple places CRCOff must be output before the F command. Added support for NewWFO & Multiple Parts with Work Fixture Offsets using CYCL DEF 7.0 DATUM SHIFT with a table # call. Jim Radcliffe}
{4/15/97 Initial: Heid TNC 426 Hermle V DZ17.12.4 Created: Heid TNC 426 Hermle V DZ17.12.5 Develop: ComPost2 68K 1.0b11, CatalystPPC v3.33C Comment: Modified helix output per marked up readout from Rudy. Jim Radcliffe}
{Prog Numeric Format Definitions *******************************************}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} ELSE SetScale('1') END RETURN
WFO: ADD# PartNum# Num#('-1') RETURN
WFOStuff: IF NewWFO? IF MultipleParts? AND WorkFixtureOffsets? '*** WARNING *** DO NOT USE NEWWFO() WITH MULTIPLE PARTS AND WORK FIXTURE OFFSETS' EOL ELSE SeqLab ' CYCL DEF 7.0 DATUM SHIFT' EOL SeqLab ' CYCL DEF 7.1 #' NewWFO# EOL END END RETURN
DoSubComment: IF UseComments? AND SubComment? SeqLab ' ; SUB NUMBER: ' Tag# EOL END RETURN
DoCSComment: IF AAxisAvail? OR BAxisAvail? '( CS#' CS# ' - ' CSComment$ ' )' EOL END RETURN
OffsetComments: IF ChangeCS? DoCSComment ELSE IF NOT SameTool? DoCSComment END END RETURN
DoOpComments: IF UseComments? SetScale('1') IF OperationIDComment? SeqLab ' ; OPERATION ' Operation# ': ' OperationType$ EOL END IF OperationComment? SeqLab ' ; ' OperationComment$ EOL END IF WorkGroupComment? SeqLab ' ; ' WorkGroupComment$ EOL END IF ToolTypeComment? SeqLab ' ; TOOL ' Tool# ': ' ToolDiameter# ' ' ToolType$ EOL END IF ToolComment? SeqLab ' ; ' ToolComment$ EOL END RestoreScale END OffsetComments RETURN
CSAngleA: IF AAxisAvail? ' A' CSOffsetA# END RETURN
CSAngleAC: IF AChange? CSAngleA END RETURN
CSAngleB: IF BAxisAvail? ' C' CSOffsetB# END RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqLab ' A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqLab ' A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqLab ' B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqLab ' B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
SubWarning: IF UseComments? IF NOT FeedConnect? IF AnyZshift? ' ' EOL SeqLab ' ; WARNING Z CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT' EOL ' ' EOL END END END RETURN
DoAbsOrInc: IF Flag?('1') AND AbsoluteMoves? IF ZMove? AND AbsValue? SetInc ELSE IF NOT ZMove? AND NOT AbsValue? SetAbs END END END RETURN
RestoreAbsOrInc: IF Flag?('1') AND AbsoluteMoves? AND NOT AbsValue? SetAbs END RETURN
DoHelix: 'P IPA' IF ArcCW? '-' ELSE '+' END IF XYPlane? ABS# MUL# DIV# SUB# SPZ# EPZ# HelixPitch# Num#('360') ELSE IF XZPlane? ABS# MUL# DIV# SUB# SPY# EPY# HelixPitch# Num#('360') ELSE ABS# MUL# DIV# SUB# SPX# EPX# HelixPitch# Num#('360') END END RETURN
CheckMove: IF NOT AbsValue? IF ArcFeat? IF ZMove? DoHelix ' IZ' EPZ# TrackXNO# EPX# TrackYNO# EPY# ELSE ' IX' EPX# ' IY' EPY# END ELSE IF XMove? OR YMove? ' IX' EPX# ' IY' EPY# END IF ZMove? ' IZ' EPZ# END END ELSE IF ArcFeat? IF XYPlane? IF ZMove? SetInc DoHelix ' IZ' EPZ# SetAbsOrInc TrackXNO# EPX# TrackYNO# EPY# ELSE MoveX MoveY END ELSE IF XZPlane? IF YMove? SetInc DoHelix ' IY' EPY# SetAbsOrInc TrackXNO# EPX# TrackZNO# EPZ# ELSE MoveX MoveZ END ELSE IF YZPlane? IF XMove? SetInc DoHelix ' IX' EPX# SetAbsOrInc TrackYNO# EPY# TrackZNO# EPZ# ELSE MoveY MoveZ END END END END ELSE MoveX MoveY MoveZC END END RETURN
FormatArc: DoAbsOrInc ' CC' IF NOT AbsValue? ' IX' ArcI# ' IY' ArcJ# ELSE ArcIJ END EOL SeqLab ' C' CheckMove IF ArcCW? ' DR-' CWArc {no output} ELSE ' DR+' CCWArc {no output} END RETURN
FormatLine: DoL DoAbsOrInc CheckMove RETURN
ToolPath: EACHFeat IF PointFeat? IF AutoCycle? IF NOT FirstFeat? SeqLab DoL MoveSX MoveSY EOL END SeqLab ' CALL LBL ' Tag# EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE IF FirstFeat? SeqLab ' CYCL CALL' EOL ELSE SeqLab DoL MoveSX MoveSY ' M99' EOL END END ELSE IF RapidFeat? Rapid {no output} IF LastFeat? SeqLab FormatLine ckCRCOffC RapidFC EOL ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLab FormatLine RapidFC EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab FormatLine ckCRCOnC RapidFC EOL END END END ELSE IF LineFeat? Feed {no output} IF LastFeat? SeqLab FormatLine ckCRCOffC FeedRateC EOL ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLab FormatLine FeedRateC EOL ELSE IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab FormatLine ckCRCOnC FeedRateC EOL DecelMove2 END SeqLab FormatLine ckCRCOnC DecelFeed EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab FormatLine ckCRCOnC FeedRateC EOL END END END END ELSE IF ArcFeat? IF LastFeat? SeqLab FormatArc ckCRCOffC ArcFeedC EOL ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLab FormatArc ArcFeedC EOL ELSE IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab FormatArc ckCRCOnC ArcFeedC EOL DecelMove2 END SeqLab FormatArc ckCRCOnC DecelFeed EOL ELSE SeqLab FormatArc ckCRCOnC ArcFeedC EOL END END END END END END END NEXTFeat RestoreAbsOrInc RETURN
AutoCycCutSub2: {part 2} ToolPath SetAbs IF Repeats? AND FeedConnect? AND ZshiftOnly? {.69 removed RapidC} {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE SeqLab DoL ZCP2 IF FIFO? {.81} FeedEntC ELSE RapidFC END EOL END SeqLab ' LBL 0' EOL CloseSub SetSRSubXY {restore SR to 1st position value} SetSRSubMove RETURN
AutoCycPat: SetPass2 {position pattern} ToolPath {call after TagInc for correct sub calls} SetPass1 {reset} RETURN
Milling: IF AutoCycle? TagInc AutoCycCutSub1 EntryMove AutoCycCutSub2 AutoCycPat ELSE EntryMove ToolPath END RETURN
G92Sub: SubWarning StdSub SetAbs SeqLab DoL StrtPos IF FeedConnect? FeedEntC ELSE RapidFC END EOL Milling FinishSub1 FinishSubG92 RETURN
ZonlyRepAutoCycle: {.86} AutoCycPat {write pattern moves and main calls} StartSub TagInc EachCycle SetSRXYtoEP IF FeedConnect? Feed {no output} IF NOT FirstCycle? IF SPXMove? OR SPYMove? SetInc SeqLab DoL ' IX' SPX# ' IY' SPY# FeedEnt EOL SetAbs END END SeqLab DoL ZInPlusInc FeedEnt EOL ELSE IF NOT FirstCycle? Rapid {no output} IF SPXMove? OR SPYMove? SetInc SeqLab DoL ' IX' SPX# ' IY' SPY# FeedEnt EOL SetAbs IF FeedEntry? SeqLab DoL ZCP2PlusInc RapidF EOL Feed {no output} SeqLab DoL ZInPlusInc FeedEnt EOL ELSE SeqLab DoL ZInPlusInc RapidF EOL END ELSE IF FeedEntry? IF NOT FirstCycle? Rapid {no output} SeqLab DoL ZCP2PlusInc RapidF EOL END Feed {no output} SeqLab DoL ZInPlusInc FeedEnt EOL ELSE Rapid {no output} SeqLab DoL ZInPlusInc RapidF EOL END END ELSE IF FeedEntry? SeqLab DoL ZCP2PlusInc RapidF EOL Feed {no output} SeqLab DoL ZInPlusInc FeedEnt EOL ELSE SeqLab DoL ZInPlusInc RapidF EOL END END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqLab ' CALL LBL ' Tag# EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 {.69, removed FinishSub1} IF FeedConnect? {there is no Z up in the sub, .69} Rapid {no output} SeqLab DoL ZCP2 IF FIFO? {.81} FeedEnt ELSE RapidFC END EOL {.69} END {.69} SeqLab ' LBL 0' EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqLab DoL StrtPos IF FeedConnect? FeedEnt ELSE RapidFC END EOL END IF FeedConnect? Feed {no output} SeqLab DoL ZInPlusInc FeedEnt EOL ELSE IF FeedEntry? IF NOT FirstCycle? Rapid {no output} SeqLab DoL ZCP2PlusIncC RapidFC EOL END Feed {no output} SeqLab DoL ZInPlusInc FeedEnt EOL ELSE Rapid {no output} SeqLab DoL ZInPlusInc RapidFC EOL END END SeqLab ' CALL LBL ' Tag# EOL NextCycle StartSub TrackZNO# FIRST SPZ# ToolPath FinishSub1 SeqLab ' LBL 0' EOL CloseSub RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
SkipToLastFeat: EachFeat IF LastFeat? TrackXNO# SPX# TrackYNO# SPY# END NextFeat RETURN
SetDrillEndOpZ: IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END RETURN
OpGuts: IF Milling? SeqLab DoL ZCP2 RapidFC EOL IF Repeats? TagInc IF ZshiftOnly? IF AutoCycle? {incremental Autocycle sub can have Z moves} ZonlyRepAutoCycle ELSE {Z shift only, NOT Auto Cycle} IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? SetFlag('1') { Milling ZShiftOnly SepSubs } ZonlyRep SetFlagF('1') ELSE {no sep subs desired} G92Sub END END {end Auto Cycle IF} ELSE {not Z only} G92Sub END {end Z only IF} ELSE {no repeat OPs} Milling END LoadFeat Num#('0') Num#('0') ClearancePlane3# IF ZMove? SeqLab DoL ZCP3 IF AutoCycle? RapidFC ELSE IF FIFO? {.81} FeedEnt ELSE RapidFC END END EOL END ELSE IF Drilling? IF Repeats? TagInc StdSub SeqLab DoL StrtPos RapidFC EOL END SeqLab DoL ZCP2 RapidFC EOL GetCycle IF RetractToCP1? OR PeckChipBreaker? OR FIFO? SeqLab ' CYCL DEF 203 UNIVERSL DRILLING' ASCII('126') EOL ' Q200=' CalcCP2FmSurf# ' ;Set-Up Clearance' ASCII('126') EOL ' Q201=' CalcZFmSurf# ' ;Depth' ASCII('126') EOL ' Q206=' FeedEntry# ' ;Feed Rate for Plngng' ASCII('126') EOL IF Peck? ' Q202=' Peck# ' ;Pecking Depth' ASCII('126') EOL ELSE ' Q202=' MUL# CalcZFmSurf# Num#('-1') ' ;Pecking Depth' ASCII('126') EOL END ' Q210=0' ' ;Dwell Time at Top' ASCII('126') EOL ' Q203=' CalcZSurf# ' ;Surface Coord' ASCII('126') EOL IF RetractToCP1? ' Q204=' SUB# ClearancePlane1# CalcZSurf# ' ;2nd Set-Up Clearance' ASCII('126') EOL ELSE ' Q204=' CalcCP2FmSurf# ' ;2nd Set-Up Clearance' ASCII('126') EOL END ' Q212=0' ' ;Decrement' ASCII('126') EOL IF PeckChipBreaker? ' Q213=' NumFullPecks# ' ;Number of Breaks' ASCII('126') EOL ELSE ' Q213=0' ' ;Number of Breaks' ASCII('126') EOL END ' Q205=0' ' ;Min Pecking Depth' ASCII('126') EOL IF Dwell? ' Q211=' Dwell# ' ;Dwell Time at Depth' ASCII('126') EOL ELSE ' Q211=0' ' ;Dwell Time at Depth' ASCII('126') EOL END IF FIFO? OR Tap? ' Q208=' FeedEntry# ' ;Retraction Feed Rate' EOL ELSE ' Q208=0' ' ;Retraction Feed Rate' EOL END ELSE IF RigidTap? SeqLab ' CYCL DEF 17.0 RIGID TAPPING' EOL SeqLab ' CYCL DEF 17.1 SET UP ' CalcCP2FmSurf# EOL SeqLab ' CYCL DEF 17.2 DEPTH ' CalcZFmSurf# EOL SeqLab ' CYCL DEF 17.3 PITCH ' FeedTapIPR#('1') EOL ELSE IF Tap? SeqLab ' CYCL DEF 2.0 TAPPING' EOL SeqLab ' CYCL DEF 2.1 SET UP ' CalcCP2FmSurf# EOL SeqLab ' CYCL DEF 2.2 DEPTH ' CalcZFmSurf# EOL SeqLab ' CYCL DEF 2.3 DWELL 0' EOL SeqLab ' CYCL DEF 2.4' FeedEnt EOL ELSE SeqLab ' CYCL DEF 1.0 PECKING' EOL SeqLab ' CYCL DEF 1.1 SET UP ' CalcCP2FmSurf# EOL SeqLab ' CYCL DEF 1.2 DEPTH ' CalcZFmSurf# EOL SeqLab ' CYCL DEF 1.3 PECKG ' IF Peck? Peck# ELSE CalcZFmSurf# END EOL SeqLab ' CYCL DEF 1.4 DWELL ' IF Dwell? Dwell# ELSE '0' END EOL SeqLab ' CYCL DEF 1.5' FeedEnt EOL END END END IF CallMasterOp? SeqLab ' CALL LBL ' CallMasterNum# EOL SkipToLastFeat ELSE TrackZNO# FIRST SPZ# IF MasterOp? NewMasterTag SeqLab ' CALL LBL ' Tag# EOL StartSub ToolPath SeqLab ' LBL 0' EOL CloseSub ELSE ToolPath END END SetDrillEndOpZ Rapid {no output} SeqLab DoL ZCP3 RapidFC EOL IF Repeats? FinishSubG92 END END END RETURN
ProgStart: InitProg TagInit ReverseXZArcs InitWFONum SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('5000') SaveProgNum2 SetProgNum('10') SetFlagF('1') { Milling ZShiftOnly SepSubs } SetFlagF('2') { CRCOn } SetFlagF('3') { End of program } SetFlagF('4') { WFOStuff } IF PSComment? AND UseComments? 'PostScript:' EOL ' Literals: put between single or double quotes.' EOL ' Separate commands and literals with at least one space.' EOL ' A CR ( RETURN key ) will start a new line.' EOL ' Commands: may be capital and/or lower case letters. Separate commands with a space.' EOL ' NewWFO(56), NWFO(56) -' EOL ' The Work Fixture Offset # you specify will be used for all following operations.' EOL ' Do not use with the Post multiple part work fixture offset option.' EOL ' 4thAxisCW(12.5), 4ACW(12.5) -' EOL ' generates a + A move of the value you specify' EOL ' 4thAxisCCW(22.5), 4ACCW(22.5) -' EOL ' generates a - A move of the value you specify' EOL ' 5thAxisCW(30), 5ACW(30) -' EOL ' generates a + B move of the value you specify' EOL ' 5thAxisCCW(22.5), 5ACCW(22.5) -' EOL ' generates a - B move of the value you specify' EOL END RETURN
BeginProgram: SeqLab ' BEGIN PGM ' ProgramName$ ' INCH' EOL IF ToolChangeAtHome? SetHome END SeqLab ' BLK FORM 0.1 Z X' XStockMin# ' Y' YStockMin# ' Z' ZStockMin# EOL SeqLab ' BLK FORM 0.2 X' XStockMax# ' Y' YStockMax# ' Z' ZStockMax# EOL IF UseComments? IF ProgramNameComment? SeqLab ' ; PROGRAM: ' ProgramName$ EOL END IF ProgramComment? SeqLab ' ; ' ProgramComment$ EOL END IF FormatNameComment? SeqLab ' ; FORMAT: ' FormatName$ EOL END IF TimeComment? SeqLab ' ; ' Date$ ' AT ' Time$ EOL END IF MovesComment? SeqLab ' ; OUTPUT IN ABSOLUTE INCHES' EOL END IF PartsComment? SeqLab ' ; PARTS PROGRAMMED: ' Parts# EOL END IF StartToolComment? SeqLab ' ; FIRST TOOL NOT IN SPINDLE' EOL END END OpenSub RestoreScale RETURN
SameTool: DoEndOpPS IF LAST ProgStop? SeqLab CoolOff EOL SeqLab SpinOff EOL SeqLab DoL ' Z0' CRCOff RapidFC ' M92' EOL ELSE IF CoolOff? AND LAST NOT CoolOff? SeqLab CoolOff EOL END END IF LAST ProgStop? SeqLab ' M00' EOL END
{Start new Operation}
SeqLab ' TOOL CALL ' Tool# ' Z ' Speed EOL DoOpComments DoPostScript WFOStuff CheckPass SetAbs Plane {no output} SeqLab DoL StrtPos CSAngleA CSAngleB CRCOff RapidF SpinOn EOL IF LAST ProgStop? SeqLab DoL ZCP1 RapidFC CoolOn EOL ELSE IF NOT CoolOff? AND LAST CoolOff? SeqLab CoolOn EOL END END RETURN
EndTool2: SeqLab CoolOff EOL SeqLab SpinOff EOL IF Flag?('3') { end of program? } IF FIRST ToolChangeAtHome? SeqLab DoL FirstHome RapidFC EOL END IF ProgStop? SeqLab ' M00' EOL END ELSE { tool change } IF ToolChangeAtHome? SeqLab DoL Home RapidFC EOL END IF LAST ProgStop? SeqLab ' M00' EOL END END RETURN
EndProgram: SeqLab EOP EOL CloseSub Post2 IF UseComments? SetScale('1') {restore scale for comments} IF FileBytesComment? SeqLab ' ; FILE LENGTH: ' FileBytes# ' CHARACTERS' EOL END IF FileFeetComment? SeqLab ' ; FILE LENGTH: ' FileFeet# ' FEET' EOL END IF FileMetersComment? SeqLab ' ; FILE LENGTH: ' FileMeters# ' METERS' EOL END END SeqLab ' END PGM ' ProgramName$ ' INCH' EOL Close Retag RETURN
MPallTools1P: {Multiple Parts, All Tools 1 Part} EachOp {Start of post processing} IF EquallySpacedOffsets? SetFlag('4') END IF FirstOperation? BeginProgram OpenMP BeginTool1 BeginTool2 BeginTool3 ELSE IF NewTool? EndTool1 EndTool2 BeginTool1 BeginTool2 BeginTool3 ELSE {implied SameTool?} SameTool END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} SetFlag('3') EndTool1 EndTool2 CloseMP EndProgram RETURN
MP1ToollAllPfu: {Multiple Parts, 1 Tool all Parts} EachOp {Start of post processing} IF EquallySpacedOffsets? SetFlag('4') END IF FirstOperation? BeginProgram BeginTool1 OpenMP BeginTool2 BeginTool3 ELSE IF NewTool? EndTool1 CloseMP EndTool2 BeginTool1 OpenMP BeginTool2 BeginTool3 ELSE {implied SameTool?} SameTool END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} SetFlag('3') EndTool1 CloseMP EndTool2 EndProgram RETURN
MP1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane} EachOp {Start of post processing} SetFlag('4') IF FirstOperation? BeginProgram BeginTool1 BeginTool2 BeginTool3 OpenMP BeginTool2ecp {need StrtPos in Sub} ELSE IF NewTool? CloseMP EndTool1 EndTool2 BeginTool1 BeginTool2 BeginTool3 OpenMP BeginTool2ecp {need StrtPos in Sub} ELSE {implied SameTool?} SameTool END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} SetFlag('3') CloseMP {End of program} EndTool1 EndTool2 EndProgram RETURN
NoMPs: {no multiple parts} EachOp {Start of post processing} SetFlag('4') { WFOStuff } IF FirstOperation? BeginProgram BeginTool1 BeginTool2 BeginTool3 ELSE IF NewTool? EndTool1 EndTool2 BeginTool1 BeginTool2 BeginTool3 ELSE {implied SameTool?} SameTool END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} SetFlag('3') EndTool1 EndTool2 EndProgram RETURN
{Start of executable Prog, top level ****}
ProgStart {setup and initializations}
IF MultipleParts? IF AllToolsOnePart? MPallTools1P ELSE {implied OneToolAllParts?} IF FullUp? MP1ToollAllPfu ELSE {implied ExitClearancePlane?} MP1ToollAllPXcp END END ELSE NoMPs END