home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / GLEN / IS.ZIP / IS_COMP.C < prev    next >
C/C++ Source or Header  |  1988-10-26  |  2KB  |  80 lines

  1. /*
  2. ** is-comp.c source module for comparison function of IS
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "is.h"
  8.  
  9. int is_comp(char *str1, char *cond, char *str2)
  10. {  
  11.    extern int date_cmp(char *, char *);    /* compares dates   */
  12.    extern int num_cmp(char *, char *);     /* compares 'numeric' strings   */
  13.  
  14.    int ret, result;
  15.    int i = 0, dcount = 0;
  16.    static char digits[] = {"0123456789"};
  17.    char *cond_lwr;
  18.  
  19.    cond_lwr = strlwr(strdup(cond));
  20.  
  21.    /*
  22.    ** dates, numbers and literal strings need to be compared differently... so
  23.    ** check for two dates - if both are dates compare YYMMDD format else
  24.    ** check for two 'numeric' strings - if so compare as numbers else
  25.    ** compare the two strings as literal strings
  26.    ** anyway, the result will be 0 if they are equal, < 0 if str1 is
  27.    ** less than str2, > 0 if str1 is greater than str2
  28.    ** that way, the same code can determine the relationship of any arguments
  29.    */
  30.  
  31.    if((str1[2] == '/' && str1[5] == '/') || (str1[2] == '-' && str1[5] == '-'))
  32.    {
  33.        if(strlen(str1) == 8)
  34.            ++dcount;
  35.    }
  36.    if((str2[2] == '/' && str2[5] == '/') || (str2[2] == '-' && str2[5] == '-'))
  37.    {
  38.        if(strlen(str2) == 8)
  39.            ++dcount;
  40.    }
  41.    if(dcount == 2)
  42.        result = date_cmp(str1, str2);
  43.    else
  44.    {
  45.        if((strspn(str1, digits) == strlen(str1)) &&
  46.           (strspn(str2, digits) == strlen(str2)))
  47.        {
  48.            result = num_cmp(str1, str2);
  49.        }
  50.        else
  51.            result = strcmp(str1, str2);
  52.    }
  53.  
  54.    if(((strcmp(cond_lwr, "eq")) == 0) && (result == 0))
  55.        ret = TRUE;
  56.    else if(((strcmp(cond_lwr, "gt")) == 0) && (result > 0))
  57.        ret = TRUE;
  58.    else if(((strcmp(cond_lwr, "lt")) == 0) && (result < 0))
  59.        ret = TRUE;
  60.    else if(((strcmp(cond_lwr, "neq")) == 0) && (result != 0))
  61.        ret = TRUE;
  62.    else if(((strcmp(cond_lwr, "ngt")) == 0) && (result <= 0))
  63.        ret = TRUE;
  64.    else if(((strcmp(cond_lwr, "nlt")) == 0) && (result >= 0))
  65.        ret = TRUE;
  66.    else if(((strcmp(cond_lwr, "le")) == 0) && (result <= 0)) 
  67.        ret = TRUE;
  68.    else if(((strcmp(cond_lwr, "ge")) == 0) && (result >= 0))
  69.        ret = TRUE;
  70.    else if(((strcmp(cond_lwr, "nle")) == 0) && (result > 0))
  71.        ret = TRUE;
  72.    else if(((strcmp(cond_lwr, "nge")) == 0) && (result < 0))
  73.        ret = TRUE;
  74.    else
  75.        ret = FALSE;
  76.  
  77.    return(ret);
  78. }
  79.  
  80.