This isn't a complete patch, but based on some math I
found at
http://www.posc.org/Epicentre.2_2/DataModel/ExamplesofUsage/eu_cs34h.html
I have determined that making these changes to
tmerc.cpp lets me use a nonzero origin latitude when
converting from TM (in my case, Illinois East State
Plane) to geo:
for (int coordIdx=0; coordIdx<count;
++coordIdx,xy+=2) {
x = xy[0]  x0;
y = xy[1]  y0;
 M0 = a*(A0*lat0A2*sin(2*lat0)+

A4*sin(4*lat0)A6*sin(6*lat0)+A8*sin(8*lat0));
 M = M0 + y / k0;
// This is how Chuck calculated phi1.
phi1 = mu + (3*e1/227*e1*e1*e1/32)*sin(2*mu)
+ (21*e1*e1/1655*e1*e1*e1*e1/32)*sin(4*mu)
+(151*e1*e1*e1/96)*sin(6*mu);
In my case, I set lat0 to a constant, but presumably
one could add commandline options to make the solution
more general. I see that the same site has the inverse
math, but since I only needed to do the TM>Geo
conversion, I didn't investigate further.
Thanks for the great program; it made my job of
converting some Chicago transit maps much easier.