123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <grass/gis.h>
- #include <grass/glocale.h>
- #include "local_proto.h"
- void get_stp_proj(char string[])
- {
- int code;
- char answer[50], buff[50];
- while ((code = get_stp_num()) == 0) {
- if (G_yes
- ("Are you sure you want to exit without making any changes", 0))
- leave(SP_NOCHANGE);
- }
- for (;;) {
- do {
- fprintf(stderr, "\nSpecify State Plane 1927 or 1983\n");
- fprintf(stderr, "Enter '27' or '83'\n");
- fprintf(stderr, "Hit RETURN to cancel request\n");
- fprintf(stderr, ">");
- } while (!G_gets(answer));
- G_strip(answer);
- if (strlen(answer) == 0) {
- leave(SP_NOCHANGE);
- }
- else if (strcmp(answer, "27") == 0) {
- sprintf(buff, STP1927PARAMS);
- break;
- }
- else if (strcmp(answer, "83") == 0) {
- sprintf(buff, STP1983PARAMS);
- break;
- }
- else
- fprintf(stderr, "\nInvalid Co-ordinate System Specification\n");
- }
- if (get_stp_code(code, string, buff) == 0)
- G_fatal_error(_("This should not happen. See your system admin."));
- return;
- }
- int get_stp_code(int code, char *string, char *paramfile)
- {
- char nad27[256], buff[256], *p;
- int gotit = 0, stp;
- FILE *fp;
- sprintf(nad27, "%s%s", G_gisbase(), paramfile);
- fp = fopen(nad27, "r");
- if (fp == NULL) {
- sprintf(buff, "Can not open NAD27 file %s", nad27);
- G_fatal_error(buff);
- }
- while (!gotit) {
- if (fgets(buff, 200, fp) == NULL)
- break;
- if (buff[0] != '#') {
- sscanf(buff, "%d:", &stp);
- if (stp == code) {
- p = strtok(buff, ":");
- p = strtok(NULL, "\n");
- while (*p == ' ')
- p++;
- sprintf(string, "%s", p);
- gotit = 1;
- }
- }
- }
- fclose(fp);
- return (gotit);
- }
- int get_stp_num(void)
- {
- FILE *fipsfile;
- char FIPSfile[256], buff[256];
- int NUM_ZON, sfips, cfips, SFIPS = 0, CFIPS = 0;
- int record, icode, reccnt, special_case;
- char STabbr[50], COname[50];
- sprintf(FIPSfile, "%s/etc/proj/FIPS.code", G_gisbase());
- for (;;) {
- fipsfile = fopen(FIPSfile, "r");
- if (fipsfile == NULL) {
- G_fatal_error(_("Unable to open FIPS code file"));
- }
- ask_fips(fipsfile, &SFIPS, &CFIPS, &special_case);
- if (special_case == -1) {
- fclose(fipsfile);
- return (0);
- }
- /* combine SFIPS and CFIPS to make lookup */
- /*DEBUG fprintf(stderr,"FIPS = %d %d\n",SFIPS,CFIPS); */
- for (record = 0;; ++record) {
- icode = 0;
- reccnt++;
- if (fgets(buff, 80, fipsfile) == NULL)
- break;
- sscanf(buff, "%d%d%s%s%d", &sfips, &cfips, STabbr, COname,
- &NUM_ZON);
- /* compare for match */
- if (SFIPS == sfips && CFIPS == cfips) {
- icode = 1;
- break;
- }
- } /* end file search */
- if (icode != 0)
- break;
- else { /* no match */
- G_warning(_("No match of FIPS state %d county %d"), SFIPS, CFIPS);
- fclose(fipsfile);
- }
- }
- /**** SPECIAL CASE FOR MICHIGAN ****, could be mercator or lambert */
- if (SFIPS == 26) {
- if (special_case == 2)
- NUM_ZON = NUM_ZON + 10;
- }
- /**** SPECIAL CASE FOR ALASKA ***** */
- if (SFIPS == 2) {
- NUM_ZON = NUM_ZON + special_case;
- }
- /* all done, good-bye */
- fclose(fipsfile);
- return (NUM_ZON);
- }
- int ask_fips(FILE * fp, int *s, int *c, int *sc)
- {
- int ii, FIPS = 0, NUM_ZON, sfips, cfips;
- char STabbr[50], STabbr_prev[50], COname[50], answer[50], buff[256];
- char *Tmp_file1, *Tmp_file2, *a, *b;
- FILE *Tmp_fd1 = NULL, *Tmp_fd2 = NULL;
- int in_stat;
- struct Key_Value *sf_keys, *cf_keys;
- *sc = 0;
- *s = 0;
- *c = 0;
- Tmp_file1 = G_tempfile();
- if (NULL == (Tmp_fd1 = fopen(Tmp_file1, "w")))
- G_fatal_error(_("Unable to open temporary file <%s>"), Tmp_file1);
- Tmp_file2 = G_tempfile();
- if (NULL == (Tmp_fd2 = fopen(Tmp_file2, "w")))
- G_fatal_error(_("Unable to open temporary file <%s>"), Tmp_file2);
- while (fgets(buff, 80, fp) != NULL) {
- sscanf(buff, "%d%d%s%s%d", &sfips, &cfips, STabbr, COname, &NUM_ZON);
- if (strncmp(STabbr, STabbr_prev, 2) != 0) { /* TODO CHECK THIS */
- fprintf(Tmp_fd1, "%4d -- %s\n", sfips, STabbr);
- fprintf(Tmp_fd2, "%d:%s\n", sfips, STabbr);
- }
- sprintf(STabbr_prev, "%s", STabbr);
- }
- fclose(Tmp_fd1);
- fclose(Tmp_fd2);
- sf_keys = G_read_key_value_file(Tmp_file2, &in_stat);
- if (in_stat != 0)
- G_fatal_error(_("Reading sf key_value temp file"));
- for (;;) {
- do {
- fprintf(stderr, "\nSpecify State FIPS (numeric) code\n");
- fprintf(stderr,
- "Enter 'list' for the list of states with corresponding FIPS codes\n");
- fprintf(stderr, "Hit RETURN to cancel request\n");
- fprintf(stderr, ">");
- } while (!G_gets(answer));
- G_strip(answer);
- if (strlen(answer) == 0) {
- *sc = -1;
- return 0;
- }
- if (strcmp(answer, "list") == 0) {
- char *pager;
- pager = getenv("GRASS_PAGER");
- if (!pager || strlen(pager) == 0)
- pager = "cat";
- /* Always print interactive output to stderr */
- sprintf(buff, "%s \"%s\" 1>&2", pager,
- G_convert_dirseps_to_host(Tmp_file1));
- G_system(buff);
- }
- else {
- a = G_find_key_value(answer, sf_keys);
- sprintf(buff, "You have chosen state %s, Correct", a);
- if (a == NULL)
- G_warning(_("Invalid State FIPS code"));
- else if (G_yes(buff, 1))
- break;
- }
- }
- rewind(fp);
- sscanf(answer, "%d", s);
- FIPS = *s;
- /**** SPECIAL CASE FOR MICHIGAN ****, could be mercator or lambert */
- if (FIPS == 26) {
- /*
- fprintf(stderr,"\nFor Michigan select- 1- East to West\n");
- fprintf(stderr," 2- North to South\n: ");
- */
- ii = 0;
- for (;;) {
- do {
- fprintf(stderr, "\nFor Michigan select- 1- East to West\n");
- fprintf(stderr, " 2- North to South\n: ");
- fprintf(stderr, "Hit RETURN to cancel request\n> ");
- } while (!G_gets(answer));
- G_strip(answer);
- if (strlen(answer) == 0) {
- *sc = -1;
- return 0;
- }
- sscanf(answer, "%d", &ii);
- if (ii != 1 && ii != 2)
- fprintf(stderr, "\n Invalid Entry\n ");
- else
- break;
- }
- *sc = ii;
- }
- /**** SPECIAL CASE FOR ALASKA ***** */
- if (FIPS == 2) {
- ii = 0;
- for (;;) {
- do {
- fprintf(stderr,
- "\nFor Alaska enter the zone (1 through 9): \n");
- fprintf(stderr, "Hit RETURN to cancel request\n");
- fprintf(stderr, "> ");
- } while (!G_gets(answer));
- G_strip(answer);
- if (strlen(answer) == 0) {
- *sc = -1;
- return 0;
- }
- sscanf(answer, "%d", &ii);
- if (ii < 1 || ii > 9)
- fprintf(stderr, "\n Invalid Entry\n ");
- else
- break;
- }
- *sc = ii;
- }
- unlink(Tmp_file1);
- unlink(Tmp_file2);
- Tmp_file1 = G_tempfile();
- if (NULL == (Tmp_fd1 = fopen(Tmp_file1, "w"))) {
- G_fatal_error(_("Unable to open temporary file <%s>"), Tmp_file1);
- }
- Tmp_file2 = G_tempfile();
- if (NULL == (Tmp_fd2 = fopen(Tmp_file2, "w"))) {
- G_fatal_error(_("Unable to open temporary file <%s>"), Tmp_file2);
- }
- while (fgets(buff, 80, fp) != NULL) {
- sscanf(buff, "%d%d%s%[A-Z ]%d", &sfips, &cfips, STabbr, COname,
- &NUM_ZON);
- G_strip(COname);
- if (sfips == *s) {
- fprintf(Tmp_fd1, "%4d -- %s\n", cfips, COname);
- fprintf(Tmp_fd2, "%d:%s\n", cfips, COname);
- } /* ADDED THESE BRACKETS - BB 5/2000 */
- }
- fclose(Tmp_fd1);
- fclose(Tmp_fd2);
- cf_keys = G_read_key_value_file(Tmp_file2, &in_stat);
- if (in_stat != 0)
- G_fatal_error(_("Reading cf key_value temp file"));
- for (;;) {
- do {
- fprintf(stderr,
- "\nSpecify County FIPS (numeric) code for state %s\n", a);
- fprintf(stderr,
- "Enter 'list' for the list of counties in %s with corresponding FIPS codes\n",
- a);
- fprintf(stderr, "Hit RETURN to cancel request\n");
- fprintf(stderr, ">");
- } while (!G_gets(answer));
- G_strip(answer);
- if (strlen(answer) == 0) {
- *sc = -1;
- return 0;
- }
- if (strcmp(answer, "list") == 0) {
- char *pager;
- pager = getenv("GRASS_PAGER");
- if (!pager || strlen(pager) == 0)
- pager = "cat";
- /* Always print interactive output to stderr */
- sprintf(buff, "%s \"%s\" 1>&2", pager,
- G_convert_dirseps_to_host(Tmp_file1));
- G_system(buff);
- }
- else {
- b = G_find_key_value(answer, cf_keys);
- sprintf(buff, "You have chosen %s county, correct", b);
- if (b == NULL)
- G_warning(_("Invalid County FIPS code"));
- else if (G_yes(buff, 1))
- break;
- }
- }
- sscanf(answer, "%d", c);
- rewind(fp);
- unlink(Tmp_file1);
- unlink(Tmp_file2);
- return 0;
- }
|