Posts are generally written in C++ Language but can also be written in C. using cammands and satements to generate the G Code. such as "GO TO" "IF THEN" "END IF" and many many others. You would need to understand the Control for the Machine and write the Post accordingly for that machine.
Below is a small snipit of the post I use to show you the basic format of one.
$------------------------- PROGRAM LEADING/TRAILING LINES -------------------
$10 File LEADING lines
$LET DATE = DAT
''
$IF DEBUG = 1
-> $10
$ENDIF
''
%
''
$12 Main Program LEADING lines
$LET COUNT = 1
$LL1
$IF COUNT <= NMT
(OP [(COUNT)] TOOL [T(COUNT)], [TNM(COUNT)] [TNT(COUNT)])
$LET COUNT = COUNT + 1
$GOTO 1
$ENDIF
''
$IF DEBUG = 1
-> $12
$ENDIF
''
(NC CODE FILE - [FNM][FNE])
(CREATED - [DATE])
$IF SOLIDCAM = 0
(POST-PROCESSED FOR FLEXICAM BY ALPHACAM)
(PROGRAMMED BY - [MY_NAME])
([DESCRIPTION])
$ELSE
(POST-PROCESSED FOR FLEXICAM BY INTELLI-CAM)
(PROGRAMMED BY - [MYNAME])
([DESCRIPTION])
$ENDIF
''
$IF [NSH] >= 1
(SHEET NUMBER [SHN] OF [NSH])
$ENDIF
''
$IF METRIC = 0
''(PANEL LENGTH - X: [PANEL_X])
''(PANEL HEIGHT - Y: [PANEL_Y])
''(PANEL DEPTH - Z: [PANEL_Z])
G70 G90 G40
$ELSE
''(PANEL LENGTH - X: [PANEL_XM])
''(PANEL HEIGHT - Y: [PANEL_YM])
''(PANEL DEPTH - Z: [PANEL_ZM])
G71 G90 G40
$ENDIF
''
$15 Main Program TRAILING lines
''
$IF DEBUG = 1
-> $15
$ENDIF
''
G0 X[SHX] Y[SHY]
''
$IF [NSH] > 1
$GOTO 10
$ELSE
$GOTO 99
$ENDIF
''
$LL 10
$IF [SHN] < [NSH]
M00
(LOAD NEXT SHEET)
$ENDIF
''
$LL 99
''
$17 File TRAILING Lines
''
$IF DEBUG = 1
-> $17
$ENDIF
''
M30
%
''
$----------------------- RAPID MOVES ----------------------------------------
$20 Rapid Move IN XY (MILL/ROUTER/FLAME/LASER) or XZ (LATHE) only
''
$IF DEBUG = 1
-> $20
$ENDIF
''
$IF OPT = 2 '' Drilling?
$GOTO 99
$ENDIF
''
$IF [GAX] < 0
$MSG
All toolpaths MUST be IN the FIRST Quadrant!
Modify your operations and Re-Post.
$EXIT
$ELSEIF [GAY] < 0
$MSG
All toolpaths MUST be IN the FIRST Quadrant!
Modify your operations and Re-Post.
$EXIT
$ENDIF
''
$IF FIRST_RAPID = 0
G0 X[GAX] Y[GAY]
$ELSE
G0 X[GAX] Y[GAY] Z[-GAZ]
$ENDIF
''
$LL99
$LET FIRST_RAPID = 0
$LET AFTER_DRILL = 0
''
$----------------------------------------------------------------------------
$21 3D Rapid Move IN XYZ (MILL/ROUTER ONLY)
''
$IF DEBUG = 1
-> $21
$ENDIF
''
$IF [GAX] < 0
$MSG
All toolpaths MUST be IN the FIRST Quadrant!
Modify your operations and Re-Post.
$EXIT
$ELSEIF [GAY] < 0
$MSG
All toolpaths MUST be IN the FIRST Quadrant!
Modify your operations and Re-Post.
$EXIT
$ENDIF
''
G0 X[GAX] Y[GAY] Z[-GAZ]
$LET FIRST_RAPID = 0
$LET AFTER_DRILL = 0
''
$----------------------------------------------------------------------------
$25 Rapid Move IN Z only (MILL etc)
''
$IF DEBUG = 1
-> $25
$ENDIF
''
$IF FIRST_RAPID = 1
$GOTO 99
$ENDIF
$IF AFTER_DRILL = 1
$GOTO 99
$ENDIF
G0 Z[-GAZ]
''
$LL99
$LET AFTER_DRILL = 0
''
We all live in Tents! Some live in content others live in discontent.