#include "proj.h"
#include "src.h"
#include "top.h"
char ffesrc_char_match_init_[256];
char ffesrc_char_match_noninit_[256];
char ffesrc_char_source_[256];
char ffesrc_char_internal_init_[256];
ffebad ffesrc_bad_symbol_init_[256];
ffebad ffesrc_bad_symbol_noninit_[256];
bool ffesrc_check_symbol_;
bool ffesrc_ok_match_init_upper_;
bool ffesrc_ok_match_init_lower_;
bool ffesrc_ok_match_noninit_upper_;
bool ffesrc_ok_match_noninit_lower_;
void
ffesrc_init_1 ()
{
int i;
for (i = 0; i < 256; ++i)
{
ffesrc_char_match_init_[i] = i;
ffesrc_char_match_noninit_[i] = i;
ffesrc_char_source_[i] = i;
ffesrc_char_internal_init_[i] = i;
ffesrc_bad_symbol_init_[i] = FFEBAD;
ffesrc_bad_symbol_noninit_[i] = FFEBAD;
}
ffesrc_check_symbol_ = (ffe_case_symbol () != FFE_caseNONE);
ffesrc_ok_match_init_upper_ = (ffe_case_match () != FFE_caseLOWER);
ffesrc_ok_match_init_lower_ = (ffe_case_match () != FFE_caseUPPER)
&& (ffe_case_match () != FFE_caseINITCAP);
ffesrc_ok_match_noninit_upper_ = (ffe_case_match () != FFE_caseLOWER)
&& (ffe_case_match () != FFE_caseINITCAP);
ffesrc_ok_match_noninit_lower_ = (ffe_case_match () != FFE_caseUPPER);
#define FFESRC_INVALID_SYMBOL_CHAR_ '-'
if (!ffesrc_ok_match_init_upper_)
for (i = 'A'; i <= 'Z'; ++i)
ffesrc_char_match_init_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
if (ffesrc_ok_match_init_lower_)
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_init_[i] = TOUPPER (i);
else
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_init_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
if (!ffesrc_ok_match_noninit_upper_)
for (i = 'A'; i <= 'Z'; ++i)
ffesrc_char_match_noninit_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
if (ffesrc_ok_match_noninit_lower_)
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_noninit_[i] = TOUPPER (i);
else
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_noninit_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
if (ffe_case_source () == FFE_caseLOWER)
for (i = 'A'; i <= 'Z'; ++i)
ffesrc_char_source_[i] = TOLOWER (i);
else if (ffe_case_source () == FFE_caseUPPER)
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_source_[i] = TOUPPER (i);
if (ffe_case_match () == FFE_caseLOWER)
for (i = 'A'; i <= 'Z'; ++i)
ffesrc_char_internal_init_[i] = TOLOWER (i);
switch (ffe_case_symbol ())
{
case FFE_caseLOWER:
for (i = 'A'; i <= 'Z'; ++i)
{
ffesrc_bad_symbol_init_[i] = FFEBAD_SYMBOL_UPPER_CASE;
ffesrc_bad_symbol_noninit_[i] = FFEBAD_SYMBOL_UPPER_CASE;
}
break;
case FFE_caseUPPER:
for (i = 'a'; i <= 'z'; ++i)
{
ffesrc_bad_symbol_init_[i] = FFEBAD_SYMBOL_LOWER_CASE;
ffesrc_bad_symbol_noninit_[i] = FFEBAD_SYMBOL_LOWER_CASE;
}
break;
case FFE_caseINITCAP:
for (i = 0; i < 256; ++i)
ffesrc_bad_symbol_noninit_[i] = FFEBAD_SYMBOL_NOLOWER_INITCAP;
for (i = 'a'; i <= 'z'; ++i)
{
ffesrc_bad_symbol_init_[i] = FFEBAD_SYMBOL_LOWER_INITCAP;
ffesrc_bad_symbol_noninit_[i] = FFEBAD;
}
break;
default:
break;
}
}
int
ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
const char *str_ic)
{
char c;
char d;
switch (mcase)
{
case FFE_caseNONE:
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var);
c = TOUPPER (c);
d = TOUPPER (*str_ic);
if (c != d)
{
if ((d != '\0') && (c < d))
return -1;
else
return 1;
}
}
break;
case FFE_caseUPPER:
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var);
d = TOUPPER (*str_ic);
if (c != d)
{
if ((d != '\0') && (c < d))
return -1;
else
return 1;
}
}
break;
case FFE_caseLOWER:
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var);
d = TOLOWER (*str_ic);
if (c != d)
{
if ((d != '\0') && (c < d))
return -1;
else
return 1;
}
}
break;
case FFE_caseINITCAP:
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var);
d = *str_ic;
if (c != d)
{
c = TOUPPER (c);
d = TOUPPER (d);
while ((len > 0) && (c == d))
{
--len, ++var, ++str_ic;
if (len > 0)
c = TOUPPER (*var);
d = TOUPPER (*str_ic);
}
if ((d != '\0') && (c < d))
return -1;
else
return 1;
}
}
break;
default:
assert ("bad case value" == NULL);
return -1;
}
if (*str_ic == '\0')
return 0;
return -1;
}
int
ffesrc_strcmp_2c (ffeCase mcase, const char *var, const char *str_uc,
const char *str_lc, const char *str_ic)
{
int i;
char c;
switch (mcase)
{
case FFE_caseNONE:
for (; *var != '\0'; ++var, ++str_uc)
{
c = TOUPPER (*var);
if (c != *str_uc)
{
if ((*str_uc != '\0') && (c < *str_uc))
return -1;
else
return 1;
}
}
if (*str_uc == '\0')
return 0;
return -1;
case FFE_caseUPPER:
i = strcmp (var, str_uc);
break;
case FFE_caseLOWER:
i = strcmp (var, str_lc);
break;
case FFE_caseINITCAP:
for (; *var != '\0'; ++var, ++str_ic, ++str_uc)
{
if (*var != *str_ic)
{
c = TOUPPER (*var);
while ((c != '\0') && (c == *str_uc))
{
++var, ++str_uc;
c = TOUPPER (*var);
}
if ((*str_uc != '\0') && (c < *str_uc))
return -1;
else
return 1;
}
}
if (*str_ic == '\0')
return 0;
return -1;
default:
assert ("bad case value" == NULL);
return -1;
}
if (i == 0)
return 0;
else if (i < 0)
return -1;
return 1;
}
int
ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
const char *str_lc, const char *str_ic, int len)
{
int i;
char c;
switch (mcase)
{
case FFE_caseNONE:
for (; len > 0; ++var, ++str_uc, --len)
{
c = TOUPPER (*var);
if (c != *str_uc)
{
if (c < *str_uc)
return -1;
else
return 1;
}
}
return 0;
case FFE_caseUPPER:
i = strncmp (var, str_uc, len);
break;
case FFE_caseLOWER:
i = strncmp (var, str_lc, len);
break;
case FFE_caseINITCAP:
for (; len > 0; ++var, ++str_ic, ++str_uc, --len)
{
if (*var != *str_ic)
{
c = TOUPPER (*var);
while ((len > 0) && (c == *str_uc))
{
--len, ++var, ++str_uc;
if (len > 0)
c = TOUPPER (*var);
}
if ((len > 0) && (c < *str_uc))
return -1;
else
return 1;
}
}
return 0;
default:
assert ("bad case value" == NULL);
return -1;
}
if (i == 0)
return 0;
else if (i < 0)
return -1;
return 1;
}