00001 00002 #include "apbscfg.h" 00003 #include "apbs/vstring.h" 00004 00005 /* /////////////////////////////////////////////////////////////////////////// 00006 // Routine: Vstring_strcasecmp 00007 // 00008 // Copyright (c) 1988-1993 The Regents of the University of 00009 // California. 00010 // Copyright (c) 1995-1996 Sun Microsystems, Inc. 00012 VPUBLIC int Vstring_strcasecmp(const char *s1, const char *s2) { 00013 00014 #if !defined(HAVE_STRCASECMP) 00015 unsigned char charmap[] = { 00016 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 00017 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 00018 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 00019 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 00020 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 00021 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 00022 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 00023 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 00024 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 00025 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 00026 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 00027 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 00028 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 00029 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 00030 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 00031 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 00032 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 00033 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 00034 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 00035 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 00036 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 00037 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 00038 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 00039 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 00040 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xc5, 0xe6, 0xe7, 00041 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 00042 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 00043 0xf8, 0xf9, 0xfa, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 00044 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 00045 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 00046 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 00047 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 00048 }; 00049 00050 unsigned char u1, u2; 00051 00052 for ( ; ; s1++, s2++) { 00053 u1 = (unsigned char) *s1; 00054 u2 = (unsigned char) *s2; 00055 if ((u1 == '\0') || (charmap[u1] != charmap[u2])) { 00056 break; 00057 } 00058 } 00059 return charmap[u1] - charmap[u2]; 00060 00061 #else 00062 00063 return strcasecmp(s1, s2); 00064 00065 #endif 00066 00067 } 00068 00069 /* /////////////////////////////////////////////////////////////////////////// 00070 // Routine: Vstring_isdigit 00071 // 00072 // Improves upon sscanf to see if a token is an int or not 00073 // 00074 // Returns isdigit: 1 if a digit, 0 otherwise 00076 VPUBLIC int Vstring_isdigit(const char *tok) { 00077 int i, isdigit, ti; 00078 char checkchar[1]; 00079 char name[VMAX_BUFSIZE]; 00080 strcpy(name,tok); 00081 isdigit = 1; 00082 for(i=0; ; i++){ 00083 checkchar[0] = name[i]; 00084 if (name[i] == '\0'){ 00085 break; 00086 } 00087 if (sscanf(checkchar, "%d", &ti) != 1){ 00088 isdigit = 0; 00089 break; 00090 } 00091 } 00092 return isdigit; 00093 }