``` // Utilities for converting Maidenhead coordinates to lat/long and vice // versa.  See http://www.arrl.org/files/contests/ln9404.pdf // This makes the assumption that west longitudes are negative. // Convert a lat/long coordinate to a 6-character Maidenhead coordinate. LatLongToMaidenhead[lat, long] := {    z1 = floor[(long / degrees) + 180]    longZone1 = z1 div 20    char1 = char[char["A"] + longZone1]    z2 = floor[(lat/degrees) + 90]    latZone1 = z2 div 10    char2 = char[char["A"] + latZone1] //   println["z1 = \$z1"]    longZone2 = (z1 mod 20) div 2    char3 = "\$longZone2"    latZone4 = z2 mod 10    char4 = "\$latZone4"    longZone5 = floor[(((long/degrees) + 180) mod 2) * 12]    char5 = char[char["A"] + longZone5]    latZone6 = floor[(((lat/degrees) + 90) mod 1) * 24]    char6 = char[char["A"] + latZone6]        return "\$char1\$char2\$char3\$char4\$char5\$char6" } // Convert a set of Maidenhead coordinates to the lat/long coordinates of // the box surrounding these coordinates. // // returns: //  [latS, longW, latN, longE] // which are the south, west, north, and east sides of the box respectively. MaidenheadToLatLong[str] := {    str = uc[str]                // Uppercase    longC1 = (char[substrLen[str,0,1]] - char["A"]) * 20    longC2 = (char[substrLen[str,2,1]] - char["0"]) * 2    if (length[str] > 4)    {       longC3 = (char[substrLen[str,4,1]] - char["A"]) / 12       width = 5 arcmin    } else    {       longC3 = 0       width = 2 degrees    }    longW = ((longC1 + longC2 + longC3) - 180) degrees    latC1 = (char[substrLen[str,1,1]] - char["A"]) * 10    latC2 = (char[substrLen[str,3,1]] - char["0"])    if (length[str] > 5)    {       latC3 = (char[substrLen[str,5,1]] - char["A"]) / 24       height = 2.5 arcmin    } else    {       latC3 = 0       height = 1 degree    }    latS = ((latC1 + latC2 + latC3) - 90) degrees    return [latS, longW, latS+height, longW+width] } ```