resource.c
上传用户:mei_mei897
上传日期:2007-01-05
资源大小:82k
文件大小:5k
源码类别:

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* sms_resource.c */
  5. /* */
  6. /*  Copyright (C) 1997,1998 Angelo Masci */
  7. /* */
  8. /*  This library is free software; you can redistribute it and/or */
  9. /*  modify it under the terms of the GNU Library General Public */
  10. /*  License as published by the Free Software Foundation; either */
  11. /*  version 2 of the License, or (at your option) any later version. */
  12. /* */
  13. /*  This library is distributed in the hope that it will be useful, */
  14. /*  but WITHOUT ANY WARRANTY; without even the implied warranty of */
  15. /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */
  16. /*  Library General Public License for more details. */
  17. /* */
  18. /*  You should have received a copy of the GNU Library General Public */
  19. /*  License along with this library; if not, write to the Free */
  20. /*  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  21. /* */
  22. /*  You can contact the author at this e-mail address: */
  23. /* */
  24. /*  angelo@styx.demon.co.uk */
  25. /* */
  26. /* -------------------------------------------------------------------- */
  27. /* $Id$
  28.    -------------------------------------------------------------------- */
  29. #include <stdio.h>
  30. #include <string.h>
  31. #include <stdlib.h>
  32. #include "sms_error.h"
  33. #include "logfile.h"
  34. #include "resource.h"
  35. #include "common.h"
  36. #include "gs_token.h"
  37. #include "gs_translate.h"
  38. /* -------------------------------------------------------------------- */
  39. /* -------------------------------------------------------------------- */
  40. static void set_defaults(char *filename, RESOURCE *resource_list, TOKEN_HEAP *resource_heap);
  41. /* -------------------------------------------------------------------- */
  42. /* -------------------------------------------------------------------- */
  43. static void set_defaults(char *filename, RESOURCE *resource_list, TOKEN_HEAP *resource_heap)
  44. {
  45. RESOURCE
  46. *resource;
  47. char *str;
  48. resource = resource_list;
  49. while (resource->type != RESOURCE_NULL)
  50. {
  51. if (resource->name == NULL)
  52. { continue;
  53. }
  54. str = get_strvalue(resource_heap, resource->name);
  55. if (str != NULL)
  56. {
  57. /* Found item, set the resource value to it */
  58. if (resource->type == RESOURCE_STRING)
  59. {
  60. resource->str_value = str;
  61. if (resource->default_warning)
  62. { lprintf(LOG_VERBOSE, "Parsing '%s' Found '%s', setting value to '%s'n", 
  63. filename, 
  64. (resource->name != NULL)?(resource->name):("NULL"),
  65. resource->str_value);
  66. }
  67. }
  68. else if (resource->type == RESOURCE_NUMERIC)
  69. {
  70. resource->int_value = atoi(str);
  71. if (resource->default_warning)
  72. { lprintf(LOG_VERBOSE, "Parsing '%s' Found '%s', setting value to '%ld'n", 
  73. filename, 
  74. (resource->name != NULL)?(resource->name):("NULL"),
  75. resource->int_value);
  76. }
  77. }
  78. }
  79. else
  80. {
  81. /* Didn't Find item, set the resource value to it's default */
  82. if (resource->type == RESOURCE_STRING)
  83. {
  84. resource->str_value = resource->default_str_value;
  85. if (resource->default_warning)
  86. { lprintf(LOG_VERBOSE, "Parsing '%s' Could not find '%s', using default '%s'n", 
  87. filename, 
  88. (resource->name != NULL)?(resource->name):("NULL"), 
  89. (resource->str_value != NULL)?(resource->str_value):("NULL"));
  90. }
  91. }
  92. else if (resource->type == RESOURCE_NUMERIC)
  93. {
  94. resource->int_value = resource->default_int_value;
  95. if (resource->default_warning)
  96. { lprintf(LOG_VERBOSE, "Parsing '%s' Could not find '%s', using default '%ld'n", 
  97. filename, 
  98. (resource->name != NULL)?(resource->name):("NULL"),
  99. resource->int_value);
  100. }
  101. }
  102. }
  103. /* Set the variable pointed to by the resource */
  104. /* to the value of the resource. */
  105. if (resource->type == RESOURCE_STRING)
  106. {
  107. if (resource->var != NULL)
  108. { *((char **)(resource->var)) = resource->str_value;
  109. }
  110. lprintf(LOG_VERBOSE, "%s %s = %sn", 
  111. filename, 
  112. (resource->name != NULL)?(resource->name):("NULL"), 
  113. (resource->str_value != NULL)?(resource->str_value):("NULL"));
  114. }
  115. else if (resource->type == RESOURCE_NUMERIC)
  116. {
  117. if (resource->var != NULL)
  118. { *((long *)(resource->var)) = resource->int_value;
  119. }
  120. lprintf(LOG_VERBOSE, "%s %s = %ldn", 
  121. filename, 
  122. (resource->name != NULL)?(resource->name):("NULL"), 
  123. resource->int_value);
  124. }
  125. resource++;
  126. }
  127. }
  128. /* -------------------------------------------------------------------- */
  129. /* -------------------------------------------------------------------- */
  130. int read_resource_file(char *filename, RESOURCE *resource_list, int warnings)
  131. {
  132. TOKEN_HEAP
  133. *resource_heap;
  134. lprintf(LOG_VERBOSE, "Parsing Resource File '%s'n", filename);
  135. resource_heap = gs_parse_file(filename);
  136. if (resource_heap == NULL)
  137. {
  138. fprintf(stderr, "Error: Parsing file '%s'n", filename);
  139. return RESOURCE_FILE_ERROR;
  140. }
  141. set_defaults(filename, resource_list, resource_heap);
  142. /* WARNING - Must free up the resource_heap */
  143. return RESOURCE_FILE_OK;
  144. }