CAD (Computer Aided Design) for chips has a number of parallels with software engineering. As I've been writing a ton of code for the above mentioned global router, a lot of my time goes into thinking gosh, I spend a lot of time writing code; wish there was a better way to do this.
The net result is my EDGE text editor. EDGE stands for Experimental Directed Graph Editor, and adds some simple graph drawing routines, a little bit of file management, and a few additional emacs macros to the Tcl/Tk wish widget set. I use Tcl/Tk to get emacs key bindings within the editing window, and add a bit of file management to make large programs easier to manage.
If you're writing code or documents that span a number of files (for instance C programs, web pages, etc.), you might want to download a copy and try it out. I'm using it for most of my work.
Many years ago (around 1987), I found myself writing linked list code over and over again. This seemed like a waste of time, so I sat down and figured out a "generic" way to do things. Rather than embedding the forward and back links from within the structures, I created linked list nodes that held a void pointer (which was then used to store the data). A number of people have probably done something similar.
After doing the linked lists, I found a need for hash tables and heaps; those went into the library as well. Over the years, it's morphed into my "Generic C Library" which holds a hodge-podge of routines for things ranging from data storage to shortest path algorithms and Steiner tree heuristics. Whenever I write something new, I try to put it into my library.
While much of what the GCL does can be obtained from C++, there are still a few things that are not available. I'm not completely sold on some of the concepts of C++, and I still use C and the GCL for much of my work.
My DECIMATE global router employs a fairly simple method to allow interchangable interconnect algorithms. The idea is based on the Web-based CGI interface.