Aggiunta stricmp() per UNIX
git-svn-id: svn://10.65.10.50/trunk@34 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ea150a8931
commit
184c4cc092
@ -1,225 +1,237 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
|
||||||
#define __UTILITY_CPP
|
#define __UTILITY_CPP
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_SCOUNIX
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
int remove(const char* path)
|
int remove(const char* path)
|
||||||
{ return unlink(path); }
|
{ return unlink(path); }
|
||||||
#else
|
#else
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define F_OK 0
|
#define F_OK 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
bool fcopy(const char* orig, const char* dest)
|
bool fcopy(const char* orig, const char* dest)
|
||||||
{
|
{
|
||||||
#if XVT_OS == XVT_OS_SCOUNIX
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
const char* const rflag = "r";
|
const char* const rflag = "r";
|
||||||
const char* const wflag = "w";
|
const char* const wflag = "w";
|
||||||
#else
|
#else
|
||||||
const char* const rflag = "rb";
|
const char* const rflag = "rb";
|
||||||
const char* const wflag = "wb";
|
const char* const wflag = "wb";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FILE* i = fopen(orig, rflag);
|
FILE* i = fopen(orig, rflag);
|
||||||
if (!i) return error_box("Impossibile leggere il file %s", orig);
|
if (!i) return error_box("Impossibile leggere il file %s", orig);
|
||||||
|
|
||||||
FILE* o = fopen(dest, wflag);
|
FILE* o = fopen(dest, wflag);
|
||||||
CHECKS(o, "Impossibile scrivere il file ", dest);
|
CHECKS(o, "Impossibile scrivere il file ", dest);
|
||||||
|
|
||||||
const word size = 16*1024;
|
const word size = 16*1024;
|
||||||
TString buffer(size);
|
TString buffer(size);
|
||||||
|
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
const word letti = fread((char*)(const char*)buffer, 1, size, i);
|
const word letti = fread((char*)(const char*)buffer, 1, size, i);
|
||||||
fwrite((char*)(const char*)buffer, 1, letti, o);
|
fwrite((char*)(const char*)buffer, 1, letti, o);
|
||||||
if (letti < size) break;
|
if (letti < size) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(o);
|
fclose(o);
|
||||||
fclose(i);
|
fclose(i);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool fexist(const char* file)
|
bool fexist(const char* file)
|
||||||
{
|
{
|
||||||
return access(file, F_OK) == 0;
|
return access(file, F_OK) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Best function of the year
|
// Best function of the year
|
||||||
// Certified 99%
|
// Certified 99%
|
||||||
char* format(const char* fmt, ...)
|
char* format(const char* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list pars;
|
va_list pars;
|
||||||
|
|
||||||
va_start(pars, fmt);
|
va_start(pars, fmt);
|
||||||
const int tot = vsprintf(__tmp_string, fmt, pars);
|
const int tot = vsprintf(__tmp_string, fmt, pars);
|
||||||
va_end(pars);
|
va_end(pars);
|
||||||
|
|
||||||
CHECK(tot >= 0 && tot < sizeof(__tmp_string)-1, "Ue'! Ma quanto scrivi?");
|
CHECK(tot >= 0 && tot < sizeof(__tmp_string)-1, "Ue'! Ma quanto scrivi?");
|
||||||
return(__tmp_string);
|
return(__tmp_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* cmd2name(const char* argv0, const char* argv1)
|
const char* cmd2name(const char* argv0, const char* argv1)
|
||||||
{
|
{
|
||||||
TFilename app(argv0); app.ext(""); app = app.name();
|
TFilename app(argv0); app.ext(""); app = app.name();
|
||||||
if (argv1) app << ' ' << argv1;
|
if (argv1) app << ' ' << argv1;
|
||||||
app.lower();
|
app.lower();
|
||||||
|
|
||||||
const int par = app.find(" -");
|
const int par = app.find(" -");
|
||||||
if (par > 0)
|
if (par > 0)
|
||||||
{
|
{
|
||||||
int num = atoi(app.mid(par+2)) + 1;
|
int num = atoi(app.mid(par+2)) + 1;
|
||||||
char c = (num > 9) ? ('a'+num-10) : ('0'+num);
|
char c = (num > 9) ? ('a'+num-10) : ('0'+num);
|
||||||
app.cut(par);
|
app.cut(par);
|
||||||
app << c << "00";
|
app << c << "00";
|
||||||
}
|
}
|
||||||
|
|
||||||
return strcpy(__tmp_string, app);
|
return strcpy(__tmp_string, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Conversione in cifre romane
|
// Conversione in cifre romane
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
HIDDEN const char * cifre_romane = "IVXLCDM@";
|
HIDDEN const char * cifre_romane = "IVXLCDM@";
|
||||||
HIDDEN const int valori_cifre [] = { 1, 5, 10, 50, 100, 500, 1000, -1 };
|
HIDDEN const int valori_cifre [] = { 1, 5, 10, 50, 100, 500, 1000, -1 };
|
||||||
|
|
||||||
HIDDEN int ctoi(char c)
|
HIDDEN int ctoi(char c)
|
||||||
{
|
{
|
||||||
if (c == '\0') return 0;
|
if (c == '\0') return 0;
|
||||||
|
|
||||||
c = toupper(c);
|
c = toupper(c);
|
||||||
for (int i = 0; cifre_romane[i]; i++)
|
for (int i = 0; cifre_romane[i]; i++)
|
||||||
if (cifre_romane[i] == c) return valori_cifre[i];
|
if (cifre_romane[i] == c) return valori_cifre[i];
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtoi(const char * val)
|
int rtoi(const char * val)
|
||||||
{
|
{
|
||||||
if (val == NULL) return 0;
|
if (val == NULL) return 0;
|
||||||
|
|
||||||
int tot = 0;
|
int tot = 0;
|
||||||
int value = ctoi (val[0]);
|
int value = ctoi (val[0]);
|
||||||
for (int i = 1; value > 0; i++)
|
for (int i = 1; value > 0; i++)
|
||||||
{
|
{
|
||||||
const int next_val = ctoi(val[i]);
|
const int next_val = ctoi(val[i]);
|
||||||
if (value < next_val) tot -= value;
|
if (value < next_val) tot -= value;
|
||||||
else tot += value;
|
else tot += value;
|
||||||
value = next_val;
|
value = next_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (value == 0) ? tot : -1;
|
return (value == 0) ? tot : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* itor(int num)
|
const char* itor(int num)
|
||||||
{
|
{
|
||||||
HIDDEN char roman_string[16];
|
HIDDEN char roman_string[16];
|
||||||
int cifra = 0;
|
int cifra = 0;
|
||||||
|
|
||||||
for (int pos = 7; pos--;)
|
for (int pos = 7; pos--;)
|
||||||
{
|
{
|
||||||
int val = valori_cifre[pos];
|
int val = valori_cifre[pos];
|
||||||
int quanti = num / val;
|
int quanti = num / val;
|
||||||
if (quanti < 4)
|
if (quanti < 4)
|
||||||
{
|
{
|
||||||
if ((pos & 1) && quanti == 1 && (num/valori_cifre[pos-1]) == 9)
|
if ((pos & 1) && quanti == 1 && (num/valori_cifre[pos-1]) == 9)
|
||||||
{
|
{
|
||||||
roman_string[cifra++] = cifre_romane[pos-1];
|
roman_string[cifra++] = cifre_romane[pos-1];
|
||||||
roman_string[cifra++] = cifre_romane[pos+1];
|
roman_string[cifra++] = cifre_romane[pos+1];
|
||||||
val = valori_cifre[pos-1];
|
val = valori_cifre[pos-1];
|
||||||
quanti = 9;
|
quanti = 9;
|
||||||
}
|
}
|
||||||
else for (int i = 0; i < quanti; i++)
|
else for (int i = 0; i < quanti; i++)
|
||||||
roman_string[cifra++] = cifre_romane[pos];
|
roman_string[cifra++] = cifre_romane[pos];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
roman_string[cifra++] = cifre_romane[pos];
|
roman_string[cifra++] = cifre_romane[pos];
|
||||||
roman_string[cifra++] = cifre_romane[pos+1];
|
roman_string[cifra++] = cifre_romane[pos+1];
|
||||||
}
|
}
|
||||||
|
|
||||||
num -= quanti * val;
|
num -= quanti * val;
|
||||||
}
|
}
|
||||||
|
|
||||||
roman_string[cifra] = '\0';
|
roman_string[cifra] = '\0';
|
||||||
return roman_string;
|
return roman_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *esc(const char* s)
|
const char *esc(const char* s)
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *s1 = s;
|
const char *s1 = s;
|
||||||
char *s2 = __tmp_string;
|
char *s2 = __tmp_string;
|
||||||
int base;
|
int base;
|
||||||
|
|
||||||
while (*s1)
|
while (*s1)
|
||||||
{
|
{
|
||||||
if (*s1 == '\\')
|
if (*s1 == '\\')
|
||||||
{
|
{
|
||||||
s1++;
|
s1++;
|
||||||
switch (tolower(*s1))
|
switch (tolower(*s1))
|
||||||
{
|
{
|
||||||
case 'b' : *s2++ = '\b'; break;
|
case 'b' : *s2++ = '\b'; break;
|
||||||
case 'e' : *s2++ = '\033'; break;
|
case 'e' : *s2++ = '\033'; break;
|
||||||
case 'f' : *s2++ = '\f'; break;
|
case 'f' : *s2++ = '\f'; break;
|
||||||
case 'n' : *s2++ = '\n'; break;
|
case 'n' : *s2++ = '\n'; break;
|
||||||
case 'r' : *s2++ = '\r'; break;
|
case 'r' : *s2++ = '\r'; break;
|
||||||
case 't' : *s2++ = '\t'; break;
|
case 't' : *s2++ = '\t'; break;
|
||||||
default :
|
default :
|
||||||
{
|
{
|
||||||
if (isdigit(*s1))
|
if (isdigit(*s1))
|
||||||
{
|
{
|
||||||
if (*s1 == '0')
|
if (*s1 == '0')
|
||||||
{
|
{
|
||||||
s1++;
|
s1++;
|
||||||
if (tolower(*s1) == 'x')
|
if (tolower(*s1) == 'x')
|
||||||
{
|
{
|
||||||
s1++;
|
s1++;
|
||||||
base = 16;
|
base = 16;
|
||||||
}
|
}
|
||||||
else base = 8;
|
else base = 8;
|
||||||
}
|
}
|
||||||
else base = 10;
|
else base = 10;
|
||||||
*s2 = 0;
|
*s2 = 0;
|
||||||
char c = tolower(*s1);
|
char c = tolower(*s1);
|
||||||
while (isdigit(c) || (base == 16 && c >= 'a' && c <= 'f'))
|
while (isdigit(c) || (base == 16 && c >= 'a' && c <= 'f'))
|
||||||
{
|
{
|
||||||
*s2 *= base;
|
*s2 *= base;
|
||||||
if (isdigit(*s1)) *s2 += (*s1 - 48);
|
if (isdigit(*s1)) *s2 += (*s1 - 48);
|
||||||
else *s2 += (*s1 - 'a' + 10) & 0x0F;
|
else *s2 += (*s1 - 'a' + 10) & 0x0F;
|
||||||
s1++;
|
s1++;
|
||||||
c = tolower(*s1);
|
c = tolower(*s1);
|
||||||
}
|
}
|
||||||
s2++; s1--;
|
s2++; s1--;
|
||||||
}
|
}
|
||||||
else *s2++ = *s1;
|
else *s2++ = *s1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (*s1 == '^')
|
if (*s1 == '^')
|
||||||
{
|
{
|
||||||
s1++;
|
s1++;
|
||||||
*s2++ = (tolower(*s1) - 'a' + 1);
|
*s2++ = (tolower(*s1) - 'a' + 1);
|
||||||
}
|
}
|
||||||
else *s2++ = *s1 ;
|
else *s2++ = *s1 ;
|
||||||
s1++;
|
s1++;
|
||||||
}
|
}
|
||||||
*s2 = '\0';
|
*s2 = '\0';
|
||||||
return(__tmp_string);
|
return(__tmp_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
|
|
||||||
|
int stricmp(const char* s1, const char* s2)
|
||||||
|
{
|
||||||
|
while (toupper(*s1) == toupper(*s2))
|
||||||
|
if (*s1++ == '\0' && *s2++ == '\0')
|
||||||
|
return 0;
|
||||||
|
return *s1 - *s2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,29 +1,34 @@
|
|||||||
#ifndef __UTILITY_H
|
#ifndef __UTILITY_H
|
||||||
#define __UTILITY_H
|
#define __UTILITY_H
|
||||||
|
|
||||||
#ifndef __STDTYPES_H
|
#ifndef __STDTYPES_H
|
||||||
#include <stdtypes.h>
|
#include <stdtypes.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @FPUB */
|
/* @FPUB */
|
||||||
char* format (const char* fmt, ...);
|
char* format (const char* fmt, ...);
|
||||||
const char* cmd2name(const char* argv0, const char* argv1 = "");
|
const char* cmd2name(const char* argv0, const char* argv1 = "");
|
||||||
int rtoi(const char * roman);
|
int rtoi(const char * roman);
|
||||||
const char* itor(int i);
|
const char* itor(int i);
|
||||||
bool fcopy(const char* orig, const char* dest);
|
bool fcopy(const char* orig, const char* dest);
|
||||||
bool fexist(const char* file);
|
bool fexist(const char* file);
|
||||||
const char* esc(const char*);
|
|
||||||
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
#define ODD(x) (x & 1)
|
int stricmp(const char*, const char*);
|
||||||
#define EVEN(x) !(x & 1)
|
#endif
|
||||||
|
|
||||||
#ifdef __UTILITY_CPP
|
const char* esc(const char*);
|
||||||
char __tmp_string[1024];
|
|
||||||
#else
|
#define ODD(x) (x & 1)
|
||||||
extern char __tmp_string[1024];
|
#define EVEN(x) !(x & 1)
|
||||||
#endif
|
|
||||||
|
#ifdef __UTILITY_CPP
|
||||||
|
char __tmp_string[1024];
|
||||||
/* @END */
|
#else
|
||||||
#endif // __UTILITY_H
|
extern char __tmp_string[1024];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* @END */
|
||||||
|
#endif // __UTILITY_H
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user