123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <grass/gis.h>
- #include <grass/glocale.h>
- #include "local_proto.h"
- struct proj_unit *get_proj_unit(const char *arg)
- {
- char buf[4096];
- struct proj_unit *unit;
- FILE *fp;
- sprintf(buf, "%s/etc/proj/units.table", G_gisbase());
- fp = fopen(buf, "r");
- if (!fp)
- return NULL;
- for (unit = NULL; !unit;) {
- char plural[16], singular[16];
- double factor;
- struct proj_unit *unit;
- if (!G_getl2(buf, sizeof(buf), fp))
- break;
- if (sscanf(buf, "%[^:]:%[^:]:%lf", plural, singular, &factor) != 3)
- continue;
- if (G_strcasecmp(arg, plural) != 0)
- continue;
- unit = G_malloc(sizeof(struct proj_unit));
- unit->units = G_store(plural);
- unit->unit = G_store(singular);
- unit->fact = factor;
- }
- fclose(fp);
- return unit;
- }
- struct proj_desc *get_proj_desc(const char *arg)
- {
- char buf[4096];
- struct proj_desc *res;
- FILE *fp;
- sprintf(buf, "%s/etc/proj/desc.table", G_gisbase());
- fp = fopen(buf, "r");
- if (!fp)
- return NULL;
- for (res = NULL; !res;) {
- char name[16], type[16], key[16], desc[100];
- if (!G_getl2(buf, sizeof(buf), fp))
- break;
- if (sscanf(buf, "%[^:]:%[^:]:%[^:]:%[^\n]", name, type, key, desc) !=
- 4)
- continue;
- if (G_strcasecmp(arg, name) != 0)
- continue;
- res = G_malloc(sizeof(struct proj_desc));
- res->name = G_store(name);
- res->type = G_store(type);
- res->key = G_store(key);
- res->desc = G_store(desc);
- }
- fclose(fp);
- return res;
- }
- struct proj_parm *get_proj_parms(const char *arg)
- {
- char buf[4096];
- struct proj_parm *parm_table = NULL;
- int parm_num = 0;
- int parm_max = 0;
- char *data;
- int done;
- FILE *fp;
- sprintf(buf, "%s/etc/proj/parms.table", G_gisbase());
- fp = fopen(buf, "r");
- if (!fp)
- return NULL;
- for (data = NULL; !data;) {
- char *p;
- if (!G_getl2(buf, sizeof(buf), fp))
- break;
- for (p = buf; *p && *p != ':'; p++) ;
- if (*p != ':')
- break;
- *p++ = '\0';
- if (G_strcasecmp(buf, arg) != 0)
- continue;
- for (; *p && *p != ':'; p++) ;
- if (*p != ':')
- break;
- *p++ = '\0';
- data = p;
- }
- fclose(fp);
- if (!data)
- return NULL;
- for (done = 0; !done;) {
- char name[16], ask[8], dfl[32];
- struct proj_parm *parm;
- char *p;
- for (p = data; *p && *p != ';'; p++) ;
- if (*p == ';')
- *p++ = '\0';
- else
- done = 1;
- if (sscanf(data, "%[^=]=%[^,],%s", name, ask, dfl) != 3) {
- data = p;
- continue;
- }
- data = p;
- if (parm_num + 1 >= parm_max) {
- parm_max += 16;
- parm_table =
- G_realloc(parm_table, parm_max * sizeof(struct proj_parm));
- }
- parm = &parm_table[parm_num++];
- parm->name = G_store(name);
- if (strcmp(ask, "ask") == 0)
- parm->ask = 1;
- else if (strcmp(ask, "noask") == 0)
- parm->ask = 0;
- else {
- parm->ask = 1;
- G_warning(_("Unrecognized 'ask' value in parms.table: %s"),
- ask);
- }
- if (strcmp(dfl, "nodfl") == 0)
- parm->def_exists = 0;
- else if (sscanf(dfl, "%lf", &parm->deflt) == 1)
- parm->def_exists = 1;
- else {
- parm->def_exists = 0;
- G_warning(_("Unrecognized default value in parms.table: %s"),
- dfl);
- }
- }
- parm_table[parm_num].name = NULL;
- return parm_table;
- }
|