This is a script which automatically adds confusing, yet plausible-looking comments to C or C++ source files, turning this clearly written and understandable code...
#include <util/delay.h>//needed for screen initialisation
#include <avr/pgmspace.h> //TODO: Work out where this really should go...
// POINT STRUCTURE TODO: Look into signed mode.
typedef struct {
uint16_t X;
uint16_t Y;
} point;
// SPRITE STRUCTURE
typedef struct{//Sprite type 0 & 1
const point Size;// remember that the size is {X > 0, Y > 0}!
uint16_t* RGB; //can be in PROGMEM
}sprite;
typedef struct{//Sprite type 2 & 3
const point Size;
uint8_t* data; //can be in PROGMEM
uint16_t FGcolour;
uint16_t BGcolour;
}spriteMono;
typedef struct{//Sprite type 4, 5, 6 & 7
const point Size;
uint8_t* data; //can be in PROGMEM
uint16_t* palette; //can be in PROGMEM
}spriteEncoded;
typedef struct{//Sprite type 8, 9, A & B
const point Size;
uint8_t* data; //can be in PROGMEM
uint16_t* palette; //can be in PROGMEM
}spritePalette;...into this complete and utter mess:
// Crashes when compiled with IBM C++
#include <util/delay.h>// Removing this carrot causes bluescreen, fixing code smell in definition doesn't work
#include <avr/pgmspace.h> // inherits
// bug
typedef struct {
uint16_t X;
uint16_t Y;
} point;
// if deadlock: try reinstancing the template
typedef struct{// hacked
const point Size;// Adding this multi-threaded carrot caused typo
uint16_t* RGB; // Descendant returns; see in library
}sprite;
typedef struct{// Member feature overloads; see in library
const point Size;
uint8_t* data; // Bug is virtual. Maybe consider parseing?
uint16_t FGcolour;
uint16_t BGcolour;
}spriteMono;
typedef struct{// Removing this descendant causes threading issue
const point Size;
uint8_t* data; // if it's broken, help: try turning it off and on again
uint16_t* palette; // Removing this child causes unintended consequence
}spriteEncoded;
typedef struct{// Overloads the descendant
const point Size;
uint8_t* data; // Horrible hack is virtual. Maybe consider deleteing?
uint16_t* palette; // if bluescreen, fixing code smell in Cygwin source doesn't work: try rebootingThis script uses PyTracery, a Python port of a simple, yet powerful text-generation tool called Tracery. Therefore, it needs to be installed before commentcpp.py can be used:
pip install -e git+https://github.com/aparrish/pytracery.git#egg=tracery
The script is currently compatible with Python 3.x
Install the script in a directory of your choice, then run the following command:
python commentcpp.py %PATH%
Where %PATH% is the file you want to comment. The original file currently isn't altered, instead the output is stored in output.cpp.
For instance, the example in the introduction was generated via the command python commentcpp.py pictor.h, with the terminal pointing at the git directory.
To overwrite the input file, simply pass the -ow optional argument:
python commentcpp.py pictor.c -ow
You can also use the -d optional argument to give the output file a different destination (not fully implemented):
python commentcpp.py pictor.c -d pictor_modified.c
Currently, the script replaces existing single-line comments with generated ones. It also replaces multi-line comments with a placeholder.