gcmc - G-Code Meta Compiler
Changes
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
|