hanson@ihuxq.UUCP (R. J. Hanson) (02/17/84)
Thanks to everyone who called/mailed me responses. I now know my grid location is EN51ws, which will be printed up on my new (only) QSL cards. I received two programs to do the calculation. One is in BASIC from Dave Knight KA1DT. If I ever get my home system up and running, it will be resident for sure. The other came from Ron McConnell W2IOL, and is in F77 Fortran. He sent me a followup message giving me permission to post it to the net for him, since his new machine (whuxi) is having problems. So here goes. Only one note about data entry: a leading zero MUST be used where called for. For example, use "09.3" minutes, NOT " 9.3". For anyone with UN*X 5.0, just "f77 vucc.f; a.out" and answer the prompts: -------------------------------------------------------------------------- C 13 January 1983 and 18 October 1983 C C Ronald C. McConnell, W2IOL C C VUCC, VHF/UHF Century Club grid locator C C "VUCC" determines the grid location in the "Maidenhead" C format as adopted by the IARU C given latitude and longitude of a QTH C in integer degrees ( no decimal ) and decimal minutes C C The 1st and 2nd characters ( A to R ) define an area, "field," C 20 degrees in longitude by 10 degrees in latitude. C C The 3rd and 4th characters ( 0 to 9 ) define an area, "square," C 2 degrees in longitude by 1 degree in latitude. C C The 5th and 6th characters ( a to x ) define an area, "sub-square," C 5 minutes in longitude by 2.5 minutes in latitude. C ( not needed for VUCC award ) C C dd mm.m ddd mm.m C Examples: 40 46.9 N, 074 41.4 W = FN20ps C 40 46.9 S, 074 41.4 E = ME79if C C Note that latitude and longitude define a point. C Grid location defines an area. C C Characters 1, 3 and 5 start at 180 longitude and C increase alphabetically or numerically to the east. C Points on grid boundaries round to the east. C C Characters 2, 4 and 6 start at 90 south latitude and C increase alphabetically or numerically to the north. C Points on grid boundaries round to the north. C C See QST, January 1983, p49, "VHF/UHF Century Club Awards" C & October 1983, p52, "Grid Locators for South America" C by John F. Lindholm, W1XX, ARRL Com. Mgr. C C VUCC is written in a subset of fortran 77. C integer lad, lod real lam, lom character n, s, e, w, grid(6) character ncap, scap, ecap, wcap character lans, loew, ok, yes, no, ycap C data yes, no, ycap/ 'y', 'n', 'Y' / data n, s, e, w / 'n', 's', 'e', 'w' / data ncap, scap, ecap, wcap/ 'N', 'S', 'E', 'W' / C print 1000 1000 format( ' VUCC Grid Location from Latitude and Longitude' / & 10( ' ' ), 'W2IOL 10/18/83 version' / ) C 30 print 1300 1300 format( ' Latitude? dd mm.m N/S' ) read( 5, 1310 ) lad, lam, lans 1310 format( i2, 1x, f4.1, 1x, a1 ) if( ( lans .eq. s ) .or. ( lans .eq. scap ) ) & then lans = scap else lans = ncap end if print 1320, lad, lam, lans 1320 format( i2, 1x, f4.1, 1x, a1, ' ok? y/n:' ) read( 5, 1340 ) ok 1340 format( a1 ) if( ( ok .eq. no ) .or. ( ok .eq. ncap ) ) go to 30 C 40 print 1400 1400 format( ' Longitude? ddd mm.m W/E' ) read( 5, 1420 ) lod, lom, loew 1420 format( i3, 1x, f4.1, 1x, a1 ) if( ( loew .eq. e ) .or. ( loew .eq. ecap ) ) & then loew = ecap else loew = wcap end if print 1450, lod, lom, loew 1450 format( i3, 1x, f4.1, 1x, a1, ' ok? y/n:' ) read( 5, 1340 ) ok if( ( ok .eq. no ) .or. ( ok .eq. ncap ) ) go to 40 C call mhgrid( lad, lam, lans, lod, lom, loew, grid ) print 1900, grid 1900 format( ' VUCC grid location = ', 6a1 ) C print 2000 2000 format( / 30( '-' ) / ' more? y/n:' ) read( 5, 1340 ) ok if( ( ok. eq. no ) .or. ( ok .eq. ncap ) ) & then stop else go to 30 end if C end C C C subroutine mhgrid( lad, lam, lans, lod, lom, loew, grid ) C 07 January 1983, 18 October 1983 C Ronald C. McConnell, W2IOL C integer lad, lod, latdeg, lngdeg real lam, lom, latmin, lngmin character lans, north, south, loew, east, west character grid(6), ltrbig(26), ltrsml(26), nbrchr(10) C data north, south, east, west / 'N', 'S', 'E', 'W' / data nbrchr / '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' / data ltrsml/ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', & 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', & 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' / data ltrbig/ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', & 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', & 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' / C C Translate latitude relative to 90 south, South Pole C if( lans .eq. north ) & then C "north" latdeg = 90 + lad latmin = lam else C "south" if( lam .eq. 0.0 ) & then latdeg = 90 - lad latmin = 0.0 else latdeg = 89 - lad latmin = 60.0 - lam end if end if C C Translate longitude relative to 180 meridian C increasing toward the east C if( loew .eq. west ) & then C "west" if( lom .eq. 0.0 ) & then lngdeg = 180 - lod lngmin = 0.0 else lngdeg = 179 - lod lngmin = 60.0 - lom end if else C "east" lngdeg = 180 + lod lngmin = lom end if C C NOTE: integer arithmetic with lngdeg and latdeg C meaning all fractional parts truncated C C First Character = capital letter, A to R, C based on 20 degree longitude block from 180 meridian C k = ( lngdeg / 20 ) + 1 C Meridian 180 if( k .eq. 19 ) k = 18 C grid( 1 ) = ltrbig( k ) C C Second Character = capital letter, A to R, C based on 10 degree latitude block from South Pole C k = ( latdeg / 10 ) + 1 C North Pole if( k .eq. 19 ) k = 18 C grid( 2 ) = ltrbig( k ) C C Third Character = number, 0 to 9, based on C position within 20 degree longitude block C lotwty = lngdeg / 20 k = ( lngdeg - ( lotwty * 20 ) ) / 2 if( k .eq. 0 ) k = 10 grid( 3 ) = nbrchr( k ) C C Fourth Character = number, 0 to 9, based on C position within 10 degree latitude block C latens = latdeg / 10 k = latdeg - ( latens * 10 ) if( k .eq. 0 ) k = 10 grid( 4 ) = nbrchr( k ) C C Fifth Character = small letter, a to x, C in 5 minute longitude blocks C based on odd or even longitude degrees C C Note: real variables latmin and lngmin "ifix"ed C to integers C if( loew .eq. east ) & then j = ifix( lngmin / 4.999 ) + 1 else j = ifix( lngmin / 5.001 ) + 1 end if neveod = ( lngdeg / 2 ) * 2 if( lngdeg .eq. neveod ) & then C "even" k = j else C "odd" k = 12 + j if( k .eq. 25 ) k = 1 end if grid( 5 ) = ltrsml( k ) C C Sixth Character = small letter, a to x, C in 2.5 minute latitude blocks C if( lans .eq. north ) & then k = ifix( latmin / 2.499 ) + 1 else k = ifix( latmin / 2.501 ) + 1 end if if( k .eq. 25 ) k = 1 grid( 6 ) = ltrsml( k ) C C South Pole grid( 2 ) = "A", North Pole grid( 2 ) = "R" C if( lad .eq. 90 ) then grid( 1 ) = ltrbig( 1 ) grid( 3 ) = nbrchr( 10 ) grid( 4 ) = nbrchr( 10 ) grid( 5 ) = ltrsml( 1 ) grid( 6 ) = ltrsml( 1 ) end if C C Meridian 180 C if( lod .eq. 180 ) then grid( 1 ) = ltrbig( 1 ) grid( 3 ) = nbrchr( 10 ) grid( 5 ) = ltrsml( 1 ) end if C return end ----------------------------------------------------------------------------- -- R. J. Hanson N9DZZ ihnp4!ihuxq!hanson AT&T Bell Labs Room IW 1A-407 1100 East Warrenville Road Naperville, IL 60566 312-979-7663