home *** CD-ROM | disk | FTP | other *** search
/ Internet Publisher's Toolbox 2.0 / Internet Publisher's Toolbox.iso / internet / ntserver / wtsource / syntest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-11  |  3.8 KB  |  137 lines

  1.  
  2. /* Copyright (c) CNIDR (see ../COPYRIGHT) */
  3.  
  4. #include "synonym.h"
  5. #include "cutil.h"
  6.  
  7. #ifdef WIN32
  8. #include <string.h>
  9. #endif
  10.          
  11. #ifdef WIN32
  12. int     syn_compare (void *arg1, void *arg2)
  13. #else
  14. int     syn_compare (arg1, arg2)
  15.         void * arg1, *arg2;
  16. #endif
  17. {
  18.     t_Synonym * p1, *p2;
  19.     p1 = (t_Synonym *) arg1;
  20.     p2 = (t_Synonym *) arg2;
  21. #ifdef WIN32
  22.     return _stricmp (p1 -> key, p2 -> key);
  23. #else
  24.     return strcasecmp (p1 -> key, p2 -> key);
  25. #endif
  26. }
  27.  
  28. char   *lookup_Synonym (word, syn_Table, syn_Table_Size)
  29. char   *word;
  30. t_Synonym * syn_Table;
  31. int     syn_Table_Size;
  32. {
  33.     t_Synonym tmp;
  34.     t_Synonym * rec;
  35.     if (syn_Table_Size == 0)
  36.     return word;
  37.     tmp.key = (char *) s_malloc (strlen (word) + 1);
  38.     strcpy (tmp.key, word);
  39. #ifdef WIN32
  40.     rec = (t_Synonym *) bsearch ((void *)&tmp, (void *)syn_Table, (size_t)syn_Table_Size,
  41.                 sizeof (t_Synonym), (int (*)(const void*, const void*))syn_compare);
  42. #else
  43.     rec = (t_Synonym *) bsearch (&tmp, syn_Table, syn_Table_Size, sizeof (t_Synonym), syn_compare);
  44. #endif
  45.     s_free (tmp.key);
  46.     if (rec)
  47.     return rec -> root;
  48.     return word;
  49. }
  50. void syn_ReadFile (fn, ptr, syn_Table_Size)
  51. char   *fn;
  52. t_Synonym ** ptr;
  53. int    *syn_Table_Size;
  54. {
  55.     char   *key,
  56.            *datum,
  57.             inputLine[SYN_FILE_LINE_LENGTH];
  58.     FILE * fp = fopen (fn, "rb");
  59.     t_Synonym * syn_Table = NULL;
  60.     *syn_Table_Size = 0;
  61.     if (!fp) {
  62.     waislog (WLOG_HIGH, WLOG_WARNING, "Warning: couldn't open %s - translation disabled", fn);
  63.     return;
  64.     }
  65.     syn_Table = (t_Synonym *) s_malloc (sizeof (t_Synonym));
  66.     if (!syn_Table) {
  67.     waislog (WLOG_HIGH, WLOG_WARNING, "Warning: error allocating space for %s - translation disabled", fn);
  68.     return;
  69.     }
  70.     while (!feof (fp)) {
  71.     fgets (inputLine, SYN_FILE_LINE_LENGTH - 1, fp);
  72.     datum = (char *) strtok (inputLine, " \n\r");
  73.     if (datum[0] != '#')    /* skip comment lines */
  74.         while ((key = (char *) strtok (NULL, " \n\r"))) {
  75.         (*syn_Table_Size)++;
  76.         syn_Table =
  77.             (t_Synonym *) realloc (syn_Table, (*syn_Table_Size) * sizeof (t_Synonym));
  78.         if (!syn_Table) {
  79.             waislog (WLOG_HIGH, WLOG_WARNING, "Warning: error allocating space for %s - translation disabled", fn);
  80.             (*syn_Table_Size)--;
  81.             return;
  82.         }
  83.         synptr (root) = (char *) s_malloc (strlen (datum) + 1);
  84.         synptr (key) = (char *) s_malloc (strlen (key) + 1);
  85.         if (!synptr (root) || !synptr (key)) {
  86.             waislog (WLOG_HIGH, WLOG_WARNING, "Warning: error allocating space for %s - translation disabled", fn);
  87.             return;
  88.         }
  89.         strcpy (synptr (root), datum);
  90.         strcpy (synptr (key), key);
  91.         }
  92.     }
  93.     fclose (fp);
  94. #ifdef WIN32
  95.     qsort ((void *)syn_Table, (size_t)(*syn_Table_Size), sizeof (t_Synonym), (int (*)(const void*, const void*))syn_compare);
  96. #else
  97.     qsort (syn_Table, (*syn_Table_Size), sizeof (t_Synonym), syn_compare);
  98. #endif
  99.     (*ptr) = (t_Synonym *) syn_Table;
  100.     return;
  101. }
  102.  
  103. void syn_Free (syn_Table, syn_Table_Size)
  104. t_Synonym * syn_Table;
  105. int    *syn_Table_Size;
  106. {
  107.     int     i;
  108.     for (i = 0; i < (*syn_Table_Size); i++) {
  109.     s_free (syn_Table[i].root);
  110.     s_free (syn_Table[i].key);
  111.     }
  112.     s_free (syn_Table);
  113.     syn_Table = NULL;
  114.     syn_Table_Size = 0;
  115.     return;
  116. }
  117.  
  118. /* 
  119.    test stub for synonym routines 
  120.  */
  121.  
  122. char* log_file_name=NULL;
  123. FILE* logfile;
  124. main( argc,argv )
  125. int argc;
  126. char* argv[];
  127. {
  128.   char word[256];  
  129.   t_Synonym* syn_Table;
  130.   int syn_Table_Size;
  131.   logfile=stderr;
  132.   log_file_name="/dev/null";
  133.   syn_ReadFile( "test.syn",&syn_Table,&syn_Table_Size );
  134.   printf( "%s",lookup_Synonym( argv[1],syn_Table,syn_Table_Size ));
  135.   syn_Free( syn_Table,&syn_Table_Size );
  136. }   
  137.