GRASS Programmer's Manual 6.4.1(2011)
get_datum_name.c
Go to the documentation of this file.
00001 /*
00002  *
00003  ****************************************************************************
00004  *
00005  * MODULE:       GRASS 5.0 gis library, get_datum_name.c
00006  * AUTHOR(S):    unknown, updated by Andreas Lange, andreas.lange@rhein-main.de
00007  * PURPOSE:      Get datum name for new location database
00008  * COPYRIGHT:    (C) 2000 by the GRASS Development Team
00009  *
00010  *               This program is free software under the GNU General Public
00011  *               License (>=v2). Read the file COPYING that comes with GRASS
00012  *               for details.
00013  *
00014  *****************************************************************************/
00015 
00016 #include <string.h>
00017 #include <unistd.h>
00018 #include <stdlib.h>
00019 #include <grass/gis.h>
00020 #include <grass/glocale.h>
00021 
00022 /***********************************************************************
00023  * G_ask_datum_name(char *datumname, char *ellpsname)
00024  *
00025  * ask interactively for a valid datum name
00026  *
00027  * returns <0 on error
00028  * returns 1 on success
00029  ***********************************************************************/
00030 
00043 int G_ask_datum_name(char *datumname, char *ellpsname)
00044 {
00045     char buff[1024], answer[100], ellipse[100];
00046     char *dat, *Tmp_file;
00047     FILE *Tmp_fd = NULL;
00048     int i;
00049 
00050 
00051     for (;;) {
00052         do {
00053             fprintf(stderr, _("\nPlease specify datum name\n"));
00054             fprintf(stderr,
00055                     _("Enter 'list' for the list of available datums\n"));
00056             fprintf(stderr,
00057                     _("or 'custom' if you wish to enter custom parameters\n"));
00058             fprintf(stderr, _("Hit RETURN to cancel request\n"));
00059             fprintf(stderr, ">");
00060         } while (!G_gets(answer));
00061         G_strip(answer);
00062 
00063         if (strlen(answer) == 0)
00064             return -1;
00065 
00066         if (strcmp(answer, "list") == 0) {
00067             Tmp_file = G_tempfile();
00068             if (NULL == (Tmp_fd = fopen(Tmp_file, "w")))
00069                 G_warning(_("Cannot open temp file"));
00070             else {
00071                 char *pager;
00072 
00073                 fprintf(Tmp_fd, "Short Name\tLong Name / Description\n---\n");
00074                 for (i = 0; (dat = G_datum_name(i)); i++) {
00075                     fprintf(Tmp_fd, "%s\t%s\n\t\t\t(%s ellipsoid)\n---\n",
00076                             dat, G_datum_description(i),
00077                             G_datum_ellipsoid(i));
00078                 }
00079                 fclose(Tmp_fd);
00080 
00081                 pager = getenv("GRASS_PAGER");
00082                 if (!pager || strlen(pager) == 0)
00083                     pager = "cat";
00084                 sprintf(buff, "%s \"%s\" 1>&2", pager,
00085                         G_convert_dirseps_to_host(Tmp_file));
00086                 G_system(buff);
00087 
00088                 remove(Tmp_file);
00089             }
00090             G_free(Tmp_file);
00091         }
00092         else {
00093             if (G_strcasecmp(answer, "custom") == 0)
00094                 break;
00095 
00096             if (G_get_datum_by_name(answer) < 0) {
00097                 fprintf(stderr, _("\ninvalid datum\n"));
00098             }
00099             else
00100                 break;
00101         }
00102     }
00103 
00104 
00105     if (G_strcasecmp(answer, "custom") == 0) {
00106         /* For a custom datum we need to interactively ask for the ellipsoid */
00107         if (G_ask_ellipse_name(ellipse) < 0)
00108             return -1;
00109         sprintf(ellpsname, ellipse);
00110         sprintf(datumname, "custom");
00111     }
00112     else {
00113         /* else can look it up from datum.table */
00114         if ((i = G_get_datum_by_name(answer)) < 0)
00115             return -1;
00116         sprintf(ellpsname, G_datum_ellipsoid(i));
00117         sprintf(datumname, G_datum_name(i));
00118     }
00119 
00120     return 1;
00121 
00122 }
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines