00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <stdlib.h>
00030 #include <stdio.h>
00031 #include <stdarg.h>
00032 #include <ctype.h>
00033 #include <string.h>
00034 #include <strings.h>
00035
00036 #define VERSION_NUM (0.8)
00037
00038
00039
00040 char *string(const char *fmt, ...)
00041 {
00042 char tmp[8192];
00043 va_list vargs;
00044 va_start(vargs,fmt);
00045 vsnprintf(tmp, 8192, fmt, vargs);
00046 va_end(vargs);
00047 return strdup(tmp);
00048 }
00049
00050 char *String(const char *fmt, ...)
00051 {
00052 static char tmp[8192];
00053 va_list vargs;
00054 va_start(vargs,fmt);
00055 vsnprintf(tmp, 8192, fmt, vargs);
00056 va_end(vargs);
00057 return(tmp);
00058 }
00059
00060
00061
00062
00063 char *stindex(char *str, char *pat, char *term)
00064 {
00065 char *pc;
00066 int len;
00067
00068 if (term==NULL)
00069 return strstr(str,pat);
00070 else
00071 {
00072 len = strlen(pat);
00073 pc = str-1;
00074 while ((pc = strstr(++pc,pat)))
00075 if (strchr(term,*(pc+len)))
00076 return pc;
00077 return NULL;
00078 }
00079 }
00080
00081 char *sindex(char *str, char *pat)
00082 {
00083 return strstr(str,pat);
00084 }
00085
00086
00087
00088 char *strlow(char *str)
00089 {
00090 static char str2[8192];
00091 char *s = str2;
00092 int n = 0;
00093
00094 while (*str && ++n < 8190)
00095 *s++ = tolower(*str++);
00096 *s = '\0';
00097 return(str2);
00098 }
00099
00100
00101
00102 char *strup(char *str)
00103 {
00104 static char str2[8192];
00105 char *s = str2;
00106 int n = 0;
00107
00108 while (*str && ++n < 8190)
00109 *s++ = toupper(*str++);
00110 *s = '\0';
00111 return(str2);
00112 }
00113
00114
00115
00116
00117 struct nmval {
00118 char *name;
00119 double value;
00120 };
00121
00122 static struct nmval pre[] = {
00123 {"exa", 1e18},
00124 {"pecta", 1e15},
00125 {"tera", 1e12},
00126 {"giga", 1e9},
00127 {"mega", 1e6},
00128 {"kilo", 1e3},
00129 {"hecto", 1e2},
00130 {"deca", 1e1},
00131 {"deci", 1e-1},
00132 {"centi", 1e-2},
00133 {"milli", 1e-3},
00134 {"micro", 1e-6},
00135 {"mu", 1e-6},
00136 {"nano", 1e-9},
00137 {"pico", 1e-12},
00138 {"femto", 1e-15},
00139 {"atto", 1e-18},
00140 };
00141
00142 char *mprefix(char *str, double *mult)
00143 {
00144 int i;
00145 char *pc;
00146 char *s = str;
00147 const int n_prefixes = sizeof(pre)/sizeof(struct nmval);
00148
00149 for (i=0; i < n_prefixes; ++i)
00150 if ((pc = sindex(s, pre[i].name)))
00151 {
00152 s = pc + strlen(pre[i].name);
00153 *mult = pre[i].value;
00154 return(s);
00155 }
00156 *mult = 1.0;
00157 return(str);
00158 }
00159
00160
00161
00162
00163
00164 int Strcmp(char *s1, char *s2)
00165 {
00166 return strcasecmp(s1,s2);
00167 }
00168
00169
00170
00171
00172
00173
00174 int Strncmp(char *s1, char *s2, int n)
00175 {
00176 return strncasecmp(s1,s2,n);
00177 }