I have had a quick look at DS9 SLA usage and it's not very extensive. See notes at the end of the email. There seem to be two completely different versions of wcscon.c from Doug Mink's wcstools. slasubs.c is what it looks like: unobfuscated C code from SLA from around 1993. Not sure what licence Doug Mink got from Pat on those but they are definitely the standard unobfuscated SLA/C code rather than clean-room ports from the Fortran. I haven't looked to see how the rewrites of slaPreces differ from slaPreces. I can't actually see anywhere where wcstools calls that SLA code though unless there are some C preprocessor shenanigans on naming. The only code in DS9 that seems to be calling SLA is funtools but that has its own unobfuscated copies of the two SLA functions that it uses. I'm left wondering about the sla/ directory in DS9. So to conclude (and I haven't tried building DS9 without the SLA directory): - funtools has its own copies of slaDsep and slaDcs2c without any attribution to Pat (but it is identical to Pat's C code [trying not to contaminate my clean-room by looking at the SLA C code in our TCS]) - wcstools has unobfuscated C code attributed to Pat but doesn't seem to use them (they aren't listed in the makefile). Given that they aren't in the full wcstools distribution either I'm guessing that they have been left in wcssubs by mistake and should really be removed from the distribution. - DS9 has a sla/ directory with 67 obfuscated yet GPL versions of SLA routines (with attribution). So I'm wondering if a) Pat wants to send a note to the author of funtools b) DS9 will build without the sla/ routines Also, Doug Mink seems to think that Pat worked at Cambridge University (according to the readme) and is happy to list all the licenses involved except the licence for SLA. wcssubs needs to just remove the SLA code completely rather than shipping the unobfuscated version it doesn't use. -- Tim Jenness wcssubs-3.8.4/slasubs.c 9:/* slaDcs2c (a, b, v): Spherical coordinates to direction cosines. 10: * slaDcc2s (v, a, b): Direction cosines to spherical coordinates. 11: * slaDmxv (dm, va, vb): vector vb = matrix dm * vector va 12: * slaImxv (rm, va, vb): vector vb = (inverse of matrix rm) * vector va 13: * slaDranrm (angle): Normalize angle into range 0-2 pi. 14: * slaDrange (angle): Normalize angle into range +/- pi. 15: * slaDeuler (order, phi, theta, psi, rmat) 21:slaDcs2c (a, b, v) 49:slaDcc2s (v, a, b) 87:slaDmxv (dm, va, vb) 120:void slaDimxv (dm, va, vb) 174:double slaDranrm (angle) 198:slaDrange (angle) 227:slaDeuler (order, phi, theta, psi, rmat) wcssubs-3.8.4/wcscon.c 1900:** Based on slaPreces(), P.T.Wallace Starlink 22 December 1993 1948:** Based on slaPreces(), P.T.Wallace Starlink 22 December 1993 2002:** Based on slaPrebn() by P.T.Wallace Starlink 30 October 1993 2046:** Based on slaPrec(), P.T.Wallace Starlink 31 October 1993 funtools-1.4.5/funcone.c 97:slaDcs2c(double a, double b, double v[3]) 99:static void slaDcs2c(a, b, v) 114:slaDsep(double a1, double b1, double a2, double b2) 116:static double slaDsep(a1, b1, a2, b2) 126: slaDcs2c ( a1, b1, v1 ); 127: slaDcs2c ( a2, b2, v2 ); 200: if ( slaDsep(r1, d1, r2, d2) <= radius ) funtools-1.4.5/search.c 18:double slaDsep(); 354: if ( slaDsep(r1, d1, r2, d2) <= radius ) return 1; 1061:void slaDcs2c ( double a, double b, double v[3] ) 1071:double slaDsep ( double a1, double b1, double a2, double b2 ) 1076: slaDcs2c ( a1, b1, v1 ); 1077: slaDcs2c ( a2, b2, v2 ); funtools-1.4.5/wcs/wcscon.c 1899:** Based on slaPreces(), P.T.Wallace Starlink 22 December 1993 1976:** Based on slaPrebn() by P.T.Wallace Starlink 30 October 1993 2020:** Based on slaPrec(), P.T.Wallace Starlink 31 October 1993 2062:** Based on slaPreces(), P.T.Wallace Starlink 22 December 1993 2117:** Based on slaPreces(), P.T.Wallace Starlink 22 December 1993 2168:** Based on slaPrec(), P.T.Wallace Starlink 31 October 1993