d43 #include #include #include #include #include #include "mapview.h" static void addmap(char *s) { static MAPARG *arg, *prevarg = NULL; arg = (MAPARG *)malloc(sizeof(MAPARG)); arg->data = (char *)malloc(strlen(s) + 1); strcpy(arg->data, s); arg->next = NULL; if (! mapargs) mapargs = arg; if (prevarg) prevarg->next = arg; prevarg = arg; } static int skipcmt(FILE *f, char *s) { do { if (! fgets(s, 80, f)) return 0; } while (*s == '#'); return 1; } static void parse(FILE *f, char *s) { if (! strncmp(s, ".PROJ", 5)) { double factor, centmer, feast, fnorth; long outdatum, indatum; long iflag; int i; if (! skipcmt(f, s)) return; sscanf(s, "%ld %lf %lf %lf %lf", &outdatum, &factor, ¢mer, &feast, &fnorth); indatum = outdatum; for (i = 0; i < 15; i++) outparm[i] = inparm[i] = 0.; outparm[2] = inparm[2] = factor; outparm[4] = inparm[4] = centmer; outparm[6] = inparm[6] = feast; outparm[7] = inparm[7] = fnorth; for_init(PROJECT, 0, outparm, outdatum, NULL, NULL, &iflag, fortrans); if (iflag) exit(1); inv_init(PROJECT, 0, inparm, indatum, NULL, NULL, &iflag, invtrans); if (iflag) exit(1); return; } if (! strncmp(s, ".REGION", 7)) { if (! skipcmt(f, s)) return; sscanf(s, "%lf %lf %lf %lf", &iminlat, &imaxlat, &iminlon, &imaxlon); if (! skipcmt(f, s)) return; sscanf(s, "%lf %lf %lf %lf %u", &minlat, &maxlat, &minlon, &maxlon, &scale); bminlat = minlat; bmaxlat = maxlat; bminlon = minlon; bmaxlon = maxlon; bscale = scale; clat = minlat + (maxlat - minlat) / 2; clon = minlon + (maxlon - minlon) / 2; return; } if (! strncmp(s, ".MISC", 5)) { char tmp1[20], tmp2[20]; if (! skipcmt(f, s)) return; sscanf(s, "%d %d %lf %s %s", &dogrid, &dolabels, &griddeg, tmp1, tmp2); if (strcmp(tmp1, "-1")) strcpy(bgcolor_s, tmp1); if (strcmp(tmp2, "-1")) strcpy(label_bgcolor_s, tmp2); return; } if (! strncmp(s, ".MAPS", 5) && (! mapargs)) { while (fgets(s, 80, f)) { if (*s == '#') continue; if (*s == '\n') break; s[strlen(s) - 1] = '\0'; addmap(s); } return; } if (! strncmp(s, ".LOC", 4)) { LOCATION *loc, *prevloc = NULL; while (fgets(s, 80, f)) { char name[80], tab[80]; if (*s == '#') continue; if (*s == '\n') break; loc = (LOCATION *)malloc(sizeof(LOCATION)); sscanf(s, "%[^\t]%[\t]%lf%[\t]%lf%[\t]%d", name, tab, &(loc->lat), tab, &(loc->lon), tab, &(loc->showscale)); loc->name = (char *)malloc(strlen(name) + 1); strcpy(loc->name, name); loc->next = NULL; if (! locs) locs = loc; if (prevloc) prevloc->next = loc; prevloc = loc; nlocs++; } return; } } void readconfig(FILE *f, int argc, char **argv) { char s[80]; int i; if (argc > 1) { for (i = 1; i < argc; i++) addmap(argv[i]); } while (fgets(s, 80, f)) { s[strlen(s) - 1] = '\0'; if (! strncmp(s, ".INCLUDE", 8)) { FILE *f; if ((f = fopen(s + 9, "r"))) { while (fgets(s, 80, f)) parse(f, s); fclose(f); } continue; } parse(f, s); } fclose(f); } . 0