Vagrearg Logo  
gcmc - G-Code Meta Compiler
gcmc-1.9.0 - 2022-06-07
  • Feature: Add a debugger to debug gcmc scripts
  • Feature: Add SVG options -svg-no-pedantic and --dxf-no-pedantic to suppress warning about functions that cannot be mapped to the output format
  • Feature: Add SVG control of line width, color and opacity as special svg functions
  • Change: Make angular units consistent across the application by defaulting to radians; use the --degrees option for old behaviour
  • Fix: XZ-arc where radius sign was reversed
  • Fix: XZ-arc examples were wrong too
  • Fix: Properly highlight sign() function in syntax file
  • Fix: Do not emit unit-mismatch on comparison with literal constant zero
  • Fix: Cross-builds can now be both 32 and 64 bits and DLLs are properly collected
gcmc-1.8.3 - 2019-07-07
  • Fix: arc_* functions could generate a NaN in the SVG output
  • Fix: NaN and Inf now include sign due to changes newer printf behavior
gcmc-1.8.2 - 2017-02-19
  • Fix: spindle() function must first set speed with S before enabling spindle with M3/M4
gcmc-1.8.1 - 2017-02-11
  • Fix: Use-after-free bug in filename referencing when handling includes
  • Fix: Split the Bezier min-length and co-linear calculations to become slightly more accurate
gcmc-1.8.0 - 2016-07-25
  • Feature: Convert all internal string handling to Unicode (wchar_t)
  • Feature: to_float() and to_int() now can convert strings to values including units
  • Feature: Functions insert(), delete(), head(), tail() and reverse() can now operate on strings
  • Feature: Allow strings to be indexed as rvalues, returning the indexed character as string
  • Feature: Add to_val() and to_chr() functions to allow character manipulations
  • Feature: Add relocate() function to support adhoc relative offsets
  • Feature: Add TODO (wish)list
  • Fix: Several interpreter memory leaks plugged using valgrind
  • Fix: Allow delete() to delete all entries
  • Fix: Use correct source argument in insert() to insert into target
  • Fix: Fix relative arcs, specifically SVG, to use the correct movement
  • Fix: Fix arcs and circles, use global position whith undef end coord.
gcmc-1.7.2 - 2016-01-24
  • Fix: Handle arc bbox 180 degrees border case using EPSILON calculation
gcmc-1.7.1 - 2016-01-24
  • Feature: Add stroke reduced sans-serif font
  • Feature: Add engrave() library function for easy engraving of typeset text
  • Fix: Handle arc bounding box in gcmc SVG backend
  • Fix: Use SVG transform() in the gcmc SVG backend
  • Fix: Ensure valid SVG output from gcmcfont (tag and namespece)
  • Fix: Do not install the gcmcfont utility, it is local to the build
  • Fix: Correct some typos and links in the documentation
  • Fix: Debian 8 build and add to documentation
gcmc-1.7.0 - 2015-07-02
  • Feature: Add Hershey fonts and typeset function
  • Feature: Add text examples
  • Feature: Add layer capability for DXF and SVG backends
  • Feature: Add cubic and quadratic Bezier curves as library function
  • Fix: SVG attributes width/height are now set correctly
gcmc-1.6.0 - 2015-05-14
  • Feature: Add vectorized arcs and circles as library including example
  • Feature: Allow vectorlists in move() and goto() functions
  • Feature: Add undef() function to return an undef value
  • Feature: Add default arguments in functions
  • Feature: Add constant variables using const keyword and use them
  • Feature: Add isconst() function
  • Feature: Add atan_{xy|xz|yz}() functions
  • Feature: Add GCMC_VERSION_* PLANE_* and FEEDMODE_* constants
  • Feature: Add --svg-no-flip cmd-line option to prevent Y-mirror
  • Change: Remove deprecated functions float() and int()
  • Change: The plane() function can now be queried without change
  • Fix: to_float() and to_int() must preserve units
  • Fix: Correct unit checks in rotate_*() functions
  • Fix: Update the vim syntax highlighting file with missing functions
  • Fix: Backing up in lexical analysis of floating point number parsing
  • Fix: Documentation formatting errors
gcmc-1.5.3 - 2015-03-22
  • Fix: Ensure relative movement with target coordinate zero to be output
gcmc-1.5.2 - 2014-11-27
  • Feature: Add Ball-in-Cube example
  • Feature: Add hypo-/epi-trochoids example
  • Feature: Add vim syntax-highlight file
  • Feature: Add field-addressing to vectors using '.' operator and axis names
  • Feature: Add to_inch() function as an alias to to_in() for consistency
  • Feature: Add RPM and Debian build documentation
  • Fix: Arcs in plane YZ modified wrong coordinates
  • Fix: Html errors in docs
gcmc-1.5.1 - 2014-03-14
  • Feature: Add trochoidal milling example
  • Feature: Add continuous curvature pocketing example
  • Feature: Add tool-compensated path library call and example
  • Feature: Add involute gears example
  • Feature: Add floret example (sunflower pattern) with sorting examples
  • Feature: Add an "introduction to gcmc" to the documentation
  • Feature: Add to_distance() function
  • Feature: Implement insert() and delete() functions to manipulate vectors and vectorlists
  • Feature: Implement sign() function
  • Feature: Accept string and vector comparison
  • Feature: Allow command-line offsets options to include units
  • Feature: Allow vector entry merge/replace with | and &
  • Feature: Add missing binary operators &, |, ^ and ~
  • Feature: All normal statements are now expressions to unify the syntactic form
  • Change: Empty strings are false in boolean eval and true when not empty
  • Change: Rename gcmc internal global tracking variables and warn on script-use
  • Change: Epsilon reduced to 1e-12 to catch rounding better
  • Fix: Expand and reorganize syntax documentation
  • Fix: Function to_native() missed copying the original units
  • Fix: Lexer must not ignore %= token
  • Fix: Dot product must allow unit-less result
  • Fix: Multiplication of scalar*vector and scalar*vectorlist take LHS units
  • Fix: Internal value dereferencing could result in wrong value
  • Fix: Resolve memory issues by using valgrind
  • Fix: Lexer string handling could be off-by-one
gcmc-1.5.0 - 2014-02-21
  • Feature: Add operators +| and -| to support previous add/subtract behaviour
  • Feature: Add repeat() {} construct for simple repeating loops
  • Feature: Implement ternary operator ?:
  • Feature: Add optional pass-by-reference instead of pass-by-value to function's arguments
  • Feature: Add optional assignment to the local statement
  • Feature: Allow string addition for concatenation functionality
  • Feature: Add to_string() built-in function
  • Feature: Allow count() to count the number of bytes occupied by a string
  • Feature: Add pause() function to emit M0/M1 codes for run-time pauses
  • Feature: Add fixpos_store(), fixpos_restore() and fixpos_set() to encapsulate G28/G30 functionality
  • Feature: Add ismodemm() function to test the state of the -i/--imperial command-line flag
  • Feature: Add to_native() function to do unit conversion according to the -i/--imperial command-line flag
  • Feature: Add to_int() and to_float() functions
  • Feature: Add pathmode() function to encapsulate G61/G64 functionality
  • Feature: Add canned-cycles library functions to emulate G81/G82/G83 functionality (absolute mode)
  • Feature: Add documentation for library functions
  • Change: Handle add/subtract semantics in how undef is handled to be similar to multiply, divide and modulo
  • Change: Allow for() loops to have empty initialization and increment statements
  • Change: Allow pre/post increment/decrement in expressions and let them behave as expected
  • Change: Deprecate int() and float() in favour of to_int() and to_float()
  • Change: Add G64 to the default gcode prologue for consistent execution
  • Change: Deprecate vlistrotate() library function, which is now easily handled with tail/head calls
  • Fix: Emit an error when trying to embed vectors into vectors
  • Fix: Integer conversion must also follow EPSILON calculation
  • Fix: Sort the function list of the svg backend to find the functions during script execution
  • Fix: Print the correct filename when execution errors are encountered
  • Fix: Update syntax documentation to include new and changed features and be a bit mode verbose
gcmc-1.4.3 - 2014-02-06
  • Feature: Add option --gcode-nom2 to replace ending M2 with % in gcode as function generation
  • Feature: Add --pedantic to hide not-to-bad warnings
  • Feature: Implement comment() function to embed comments and debug statements easily without too much risk into the output
  • Feature/Change: Allow negative values on head()/tail() to omit values without knowing the count
  • Change: Exit the gcmc binary with zero on --version
  • Change: Increase EPSILON to 1e-14 to catch rounding errors
  • Fix: Add missing --gcode-function option to command-line help
  • Fix: Add --define to command-line help
  • Fix: Fix 180 degree arcs to cope with calculation rounding errors
  • Fix: Fix if/elif/else execution where the else clause would fail to execute if all if/elif clauses were false
gcmc-1.4.2 - 2013-12-11
  • Feature: Add reverse() function to reverse vectorlist's vectors and vector's coordinates
  • Feature: Add --gcode-function option to generate gcode subroutines
  • Fix: toolchange() must emit M6 for actual change to happen
  • Fix: position() must return coordinates in correct units
  • Fix: documentation updated to include built-in function return types/values
gcmc-1.4.1 - 2013-11-30
  • Feature: include unix man-page
  • Feature: revamp documentation to html-pages
  • Feature: allow empty statements termnated by semi-colon
  • Feature: implement command-line defines using -D option
  • Feature: add isdefined() function to test variables
  • Feature: add isrelative() function to test global relative setting
  • Feature: add .spec-file and debian-control for RPM and DEB packages
  • Fix: error recovery in parser should not crash
  • Fix: preologue/epilogue may only change for g-code backend
  • Fix: comparisons must take units into account and EPSILON boundary
  • Fix: move_r/goto_r and global relative moves corrected to generate correct code
  • Fix: use bsearch in finding functions to speed things up
  • Fix: incorrect help message for short options
gcmc-1.4.0 - 2013-11-24
  • Feature: add elif() construct in flow control to allow if(){} elif(){}... else{} constructs
  • Feature: add SVG and DXF backends. Now gcmc can output in g-code, svg and dxf in either metric or imperial units
  • Feature: rotate_XX() functions now accept both vectors and vectorlists
  • Feature: array indices may now be negative to address from the last entry in a vector or vectorlist
  • Feature: svg backend may use svg_closepath() to ensure closed SVG paths
  • Feature: add isgcode(), issvg() and isdxf() query functions to detect target backend in scripts
  • Feature: add scale() function to scale vectors and vectorlists
  • Feature: add example of a laser-cut box
  • Fix: filemode for windows must take text/binary into account
  • Fix: properly test arc's radius vs start-/end-point to detect invalid arcs
  • Fix: allow stand-alone function calls in conditional expressions
  • Fix: coolant() function now accepts string argument to bring it inline with other g-code control functions
  • Fix: allow all examples to be built within the source-tree (make examples)
  • Fix: prevent several potential NULL pointer dereferences in value handling
gcmc-1.3.1 - 2013-11-21
  • Add circles to the built-in functions
  • Fix arcs in relative mode
  • Fix long command-line options not to segfault
  • Fix global position update in drill-cycle Z endpoint
gcmc-1.3.0 - 2013-11-18
  • Implement inch ("in" suffix) imperial units throughout and convert mil to inch automatically
  • Option -i now correctly sets imperial mode throughout gcmc
  • Changed to_mil() and ismil() functions to to_in() and isinch()
  • Add long options to the command-line
  • Prologue and epilogue code can now be imported from a file (-g/-G options)
  • Fix break and continue to break/continue correctly
  • Fix potential signed/unsigned comparison issues in C-source
gcmc-1.2.1 - 2013-11-13
  • Change epilogue to use M30 for end program. M2 has been obsolete for quite a while
  • Add G49, G54 and G80 to the prologue to ensure known setup
  • Implement imperial units output using -i option. Gcmc still defaults to mm
  • Add head() and tail() functions to isolate parts of vectors and vectorlists
  • Change precedence of modulo (%) to same as multiply/divide to conform to other langauges
  • Fix default cutting plane selection
gcmc-1.2.0 - 2013-11-11
  • Implement << and >> shift operators on scalars, vectors and vectorlists. On scalars it will perform as usual. Vectors and vectorlists have shifted the contents
  • Fix arcs always to output valid IJK positions
  • Fix arcs XYZ-position calculation
  • Add UVW axes support (-U option)
  • Command-line option -w changed to -W
  • Allow offsets on command-line for all axes XYZ, ABC and UVW
  • Cache internal value structures to reduce malloc/free overhead
gcmc-1.1.2 - 2013-11-09
  • Fix vectorlist creation from function results
  • Allow vector/vectorlist arguments to float() and int()
  • Add 9-axis output option (-u)
gcmc-1.1.1 - 2013-11-08
  • Add index operator [] on lvalues and allow rvalues to be constants on index
  • Add vector/vectorlist arguments to to_*() built-in functions
  • Add library functions to the tar-ball
  • Add vectorlist rotation library function
  • Start a test-framework for checking behaviour
  • Fix scalar*vector vs. vector*scalar due to unit conversion
  • Fix corner-cases on operations with undef values
gcmc-1.1.0 - 2013-11-06
  • Add angular value units (degree and radian)
  • Add value unit query functions
  • Make LHS dominant for unit conversions in operations
  • Divide operation strips units if both LHS and RHS are of same unit class
  • Implement boolean short-circuit on && and ||
  • Add option to exit non-zero on warnings
Overengineering @ request