00001
00002
00003
00004
00005
00006
00007
00008 static char rcsid[] = "$Header";
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <stdlib.h>
00039 #include <stdio.h>
00040 #include <ctype.h>
00041 #include <string.h>
00042
00043 #define VERSION_NUM (0.8)
00044
00045
00046
00047 #ifndef __linux__
00048 char *strdup(const char *str)
00049 {
00050 int n;
00051 char *s;
00052 if (!str)
00053 return(NULL);
00054 n = strlen(str) + 1;
00055 s = (char *)malloc(n);
00056 strcpy(s,str);
00057 return(s);
00058 }
00059 #endif
00060
00061
00062
00063 #ifdef vax
00064
00065 #define _IOSTRG 00100
00066 char *string(fmt, args)
00067 char *fmt;
00068 {
00069 char tmp[8192];
00070 FILE _strbuf;
00071 _strbuf._flag = _IOWRT+_IOSTRG;
00072 _strbuf._ptr = (unsigned char *)tmp;
00073 _strbuf._cnt = 32767;
00074 _doprnt(fmt, &args, &_strbuf);
00075 putc('\0', &_strbuf);
00076 return(strdup(tmp));
00077 }
00078
00079 char *String(fmt, args)
00080 char *fmt;
00081 {
00082 static char tmp[8192];
00083 FILE _strbuf;
00084 _strbuf._flag = _IOWRT+_IOSTRG;
00085 _strbuf._ptr = (unsigned char *)tmp;
00086 _strbuf._cnt = 32767;
00087 _doprnt(fmt, &args, &_strbuf);
00088 putc('\0', &_strbuf);
00089 return(tmp);
00090 }
00091 #else
00092
00093 #include <stdarg.h>
00094
00095 char *string(const char *fmt, ...)
00096 {
00097 char tmp[8192];
00098 va_list vargs;
00099 va_start(vargs, fmt);
00100 (void)vsprintf(tmp, fmt, vargs);
00101 va_end(vargs);
00102 return(strdup(tmp));
00103 }
00104
00105 char *String(const char *fmt, ...)
00106 {
00107 static char tmp[8192];
00108 va_list vargs;
00109 va_start(vargs, fmt);
00110 (void)vsprintf(tmp, fmt, vargs);
00111 va_end(vargs);
00112 return(tmp);
00113 }
00114
00115 #endif
00116
00117
00118
00119
00120 char *stindex(char *str, char *pat, char *term)
00121 {
00122 char *pc = str-1;
00123 int len = strlen(pat);
00124
00125 while (pc = strchr(++pc,*pat))
00126 if (!strncmp(pc,pat,len) && (term==NULL||strchr(term,*(pc+len))))
00127 break;
00128 return(pc);
00129 }
00130
00131
00132
00133 char *sindex(char *str, char *pat)
00134 {
00135 return(stindex(str,pat,NULL));
00136 }
00137
00138
00139
00140 char *strlow(char *str)
00141 {
00142 static char str2[8192];
00143 char *s = str2;
00144 int n = 0;
00145
00146 while (*str && ++n < 8190)
00147 *s++ = isupper(*str)?tolower(*str++):*str++;
00148 *s = '\0';
00149 return(str2);
00150 }
00151
00152
00153
00154 char *strup(char *str)
00155 {
00156 static char str2[8192];
00157 char *s = str2;
00158 int n = 0;
00159
00160 while (*str && ++n < 8190)
00161 *s++ = islower(*str)?toupper(*str++):*str++;
00162 *s = '\0';
00163 return(str2);
00164 }
00165
00166
00167
00168 char *mprefix(char *str, double *mult) {
00169
00170 struct nmval {
00171 char *name;
00172 double value;
00173 };
00174
00175 static struct nmval pre[] = {
00176 "exa", 1e18,
00177 "pecta", 1e15,
00178 "tera", 1e12,
00179 "giga", 1e9,
00180 "mega", 1e6,
00181 "kilo", 1e3,
00182 "hecto", 1e2,
00183 "deca", 1e1,
00184 "deci", 1e-1,
00185 "centi", 1e-2,
00186 "milli", 1e-3,
00187 "micro", 1e-6,
00188 "mu", 1e-6,
00189 "nano", 1e-9,
00190 "pico", 1e-12,
00191 "femto", 1e-15,
00192 "atto", 1e-18,
00193 };
00194
00195 int i;
00196 char *pc;
00197 char *s = str;
00198 int n_prefixes = sizeof(pre)/sizeof(struct nmval);
00199
00200 for (i=0; i < n_prefixes; ++i)
00201 if (pc = sindex(s, pre[i].name))
00202 {
00203 s = pc + strlen(pre[i].name);
00204 *mult = pre[i].value;
00205 return(s);
00206 }
00207 *mult = 1.0;
00208 return(str);
00209 }
00210
00211
00212
00213
00214
00215 Strcmp(char *s1, char *s2)
00216 {
00217 char S1,S2;
00218
00219 while ((S1=(isupper(*s1)?tolower(*s1):*s1)) ==
00220 (S2=(isupper(*s2)?tolower(*s2++):*s2++)))
00221 if (*s1++=='\0')
00222 return(0);
00223 return(S1 - S2);
00224 }
00225
00226
00227
00228
00229
00230
00231 Strncmp(char *s1, char *s2, int n)
00232 {
00233 char S1,S2;
00234
00235 while (--n >= 0 &&
00236 (S1=(isupper(*s1) ? tolower(*s1) : *s1)) ==
00237 (S2=(isupper(*s2) ? tolower(*s2++) : *s2++)) )
00238 if (*s1++ == '\0')
00239 return(0);
00240 return (n<0 ? 0 : S1-S2);
00241 }
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296