opt.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include <stdlib.h>
  2. #include <grass/gis.h>
  3. #include <grass/dbmi.h>
  4. #include <grass/glocale.h>
  5. #include "local_proto.h"
  6. int option_to_display(const struct Option *opt)
  7. {
  8. int i, display;
  9. i = display = 0;
  10. while (opt->answers[i]) {
  11. switch (opt->answers[i][0]) {
  12. case 's':
  13. display |= DISP_SHAPE;
  14. break;
  15. case 'c':
  16. display |= DISP_CAT;
  17. break;
  18. case 'v':
  19. display |= DISP_VERT;
  20. break;
  21. case 't':
  22. display |= DISP_TOPO;
  23. break;
  24. case 'd':
  25. display |= DISP_DIR;
  26. break;
  27. case 'z':
  28. display |= DISP_ZCOOR;
  29. break;
  30. }
  31. i++;
  32. }
  33. return display;
  34. }
  35. void options_to_lattr(LATTR *lattr, const char *layer,
  36. const char *color, const char *bgcolor, const char *bcolor,
  37. int size, const char *font, const char *encoding,
  38. const char *xref, const char *yref)
  39. {
  40. int r, g, b;
  41. if (layer)
  42. lattr->field = atoi(layer);
  43. else
  44. lattr->field = 1;
  45. lattr->color.R = lattr->color.G = lattr->color.B = 255;
  46. if (G_str_to_color(color, &r, &g, &b)) {
  47. lattr->color.R = r;
  48. lattr->color.G = g;
  49. lattr->color.B = b;
  50. }
  51. lattr->has_bgcolor = 0;
  52. if (G_str_to_color(bgcolor, &r, &g, &b) == 1) {
  53. lattr->has_bgcolor = 1;
  54. lattr->bgcolor.R = r;
  55. lattr->bgcolor.G = g;
  56. lattr->bgcolor.B = b;
  57. }
  58. lattr->has_bcolor = 0;
  59. if (G_str_to_color(bcolor, &r, &g, &b) == 1) {
  60. lattr->has_bcolor = 1;
  61. lattr->bcolor.R = r;
  62. lattr->bcolor.G = g;
  63. lattr->bcolor.B = b;
  64. }
  65. lattr->size = size;
  66. lattr->font = font;
  67. lattr->enc = encoding;
  68. if (xref) {
  69. switch (xref[0]) {
  70. case 'l':
  71. lattr->xref = LLEFT;
  72. break;
  73. case 'c':
  74. lattr->xref = LCENTER;
  75. break;
  76. case 'r':
  77. lattr->xref = LRIGHT;
  78. break;
  79. }
  80. }
  81. else
  82. lattr->xref = LCENTER;
  83. if (yref) {
  84. switch (yref[0]) {
  85. case 't':
  86. lattr->yref = LTOP;
  87. break;
  88. case 'c':
  89. lattr->yref = LCENTER;
  90. break;
  91. case 'b':
  92. lattr->yref = LBOTTOM;
  93. break;
  94. }
  95. }
  96. else
  97. lattr->yref = LCENTER;
  98. }
  99. int option_to_color(struct color_rgb *color, const char *color_val)
  100. {
  101. int has_color, ret;
  102. int r, g, b;
  103. ret = G_str_to_color(color_val, &r, &g, &b);
  104. if (ret == 1) {
  105. has_color = 1;
  106. color->r = r;
  107. color->g = g;
  108. color->b = b;
  109. }
  110. else if (ret == 2) { /* none */
  111. has_color = 0;
  112. }
  113. else if (ret == 0) { /* error */
  114. G_fatal_error(_("Unknown color: '%s'"), color_val);
  115. }
  116. return has_color;
  117. }
  118. void option_to_where(struct Map_info *Map, struct cat_list *Clist,
  119. const char *where)
  120. {
  121. int ncat;
  122. int *cats;
  123. struct field_info *fi;
  124. dbDriver *driver;
  125. dbHandle handle;
  126. fi = Vect_get_field(Map, Clist->field);
  127. if (!fi)
  128. G_fatal_error(_("Database connection not defined"));
  129. driver = db_start_driver(fi->driver);
  130. if (!driver)
  131. G_fatal_error(_("Unable to start driver <%s>"), fi->driver);
  132. db_init_handle(&handle);
  133. db_set_handle(&handle, fi->database, NULL);
  134. if (db_open_database(driver, &handle) != DB_OK)
  135. G_fatal_error(_("Unable to open database <%s>"),
  136. fi->database);
  137. ncat = db_select_int(driver, fi->table, fi->key, where,
  138. &cats);
  139. db_close_database(driver);
  140. db_shutdown_driver(driver);
  141. Vect_array_to_cat_list(cats, ncat, Clist);
  142. }