annotate clustalomega/clustal-omega-1.0.2/src/squid/types.c @ 1:bc707542e5de

Uploaded
author clustalomega
date Thu, 21 Jul 2011 13:35:08 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
1 /*****************************************************************
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
2 * SQUID - a library of functions for biological sequence analysis
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
3 * Copyright (C) 1992-2002 Washington University School of Medicine
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
4 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
5 * This source code is freely distributed under the terms of the
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
6 * GNU General Public License. See the files COPYRIGHT and LICENSE
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
7 * for details.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
8 *****************************************************************/
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
9
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
10 /* file: types.c
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
11 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
12 * Finicky type checkers for strings. Return 1 (TRUE) if ok, 0 elsewise.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
13 * Also, finicky type converters (sre_ntoh32() and friends)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
14 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
15 * CVS $Id: types.c,v 1.5 2001/01/08 22:58:12 eddy Exp)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
16 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
17
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
18 #include <string.h>
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
19 #include <ctype.h>
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
20 #include "squid.h"
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
21
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
22 /* Function: IsInt()
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
23 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
24 * Returns TRUE if s points to something that atoi() will parse
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
25 * completely and convert to an integer.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
26 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
27 int
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
28 IsInt(char *s)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
29 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
30 int hex = 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
31
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
32 if (s == NULL) {squid_errno = SQERR_PARAMETER; return 0; }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
33
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
34 /* skip whitespace */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
35 while (isspace((int) (*s))) s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
36 /* skip leading sign */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
37 if (*s == '-' || *s == '+') s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
38 /* skip leading conversion signals */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
39 if ((strncmp(s, "0x", 2) == 0 && (int) strlen(s) > 2) ||
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
40 (strncmp(s, "0X", 2) == 0 && (int) strlen(s) > 2))
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
41 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
42 s += 2;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
43 hex = 1;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
44 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
45 else if (*s == '0' && (int) strlen(s) > 1)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
46 s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
47 /* examine remainder for garbage chars */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
48 if (!hex)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
49 while (*s != '\0')
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
50 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
51 if (!isdigit((int) (*s))) return 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
52 s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
53 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
54 else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
55 while (*s != '\0')
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
56 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
57 if (!isxdigit((int) (*s))) return 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
58 s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
59 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
60
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
61 return 1;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
62 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
63
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
64
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
65 /* Function: IsReal()
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
66 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
67 * Purpose: Returns TRUE if s is a string representation
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
68 * of a valid floating point number.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
69 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
70 int
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
71 IsReal(char *s)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
72 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
73 int gotdecimal = 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
74 int gotexp = 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
75 int gotreal = 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
76
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
77 if (s == NULL) return 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
78
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
79 while (isspace((int) (*s))) s++; /* skip leading whitespace */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
80 if (*s == '-' || *s == '+') s++; /* skip leading sign */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
81
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
82 /* Examine remainder for garbage. Allowed one '.' and
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
83 * one 'e' or 'E'; if both '.' and e/E occur, '.'
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
84 * must be first.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
85 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
86 while (*s != '\0')
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
87 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
88 if (isdigit((int) (*s)))
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
89 gotreal++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
90 else if (*s == '.')
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
91 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
92 if (gotdecimal) return 0; /* can't have two */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
93 if (gotexp) return 0; /* e/E preceded . */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
94 else gotdecimal++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
95 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
96 else if (*s == 'e' || *s == 'E')
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
97 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
98 if (gotexp) return 0; /* can't have two */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
99 else gotexp++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
100 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
101 else if (isspace((int) (*s)))
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
102 break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
103
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
104 s++;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
105 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
106
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
107 while (isspace((int) (*s))) s++; /* skip trailing whitespace */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
108 if (*s == '\0' && gotreal) return 1;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
109 else return 0;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
110 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
111
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
112
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
113 /* Function: Byteswap()
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
114 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
115 * Purpose: Swap between big-endian and little-endian.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
116 * For example:
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
117 * int foo = 0x12345678;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
118 * byteswap((char *) &foo, sizeof(int));
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
119 * printf("%x\n", foo)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
120 * gives 78563412.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
121 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
122 * I don't fully understand byte-swapping issues.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
123 * However, I have tested this on chars through floats,
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
124 * on various machines:
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
125 * SGI IRIX 4.0.5, SunOS 4.1.3, DEC Alpha OSF/1, Alliant
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
126 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
127 * Date: Sun Feb 12 10:26:22 1995
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
128 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
129 void
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
130 Byteswap(char *swap, int nbytes)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
131 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
132 int x;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
133 char byte;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
134
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
135 for (x = 0; x < nbytes / 2; x++)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
136 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
137 byte = swap[nbytes - x - 1];
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
138 swap[nbytes - x - 1] = swap[x];
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
139 swap[x] = byte;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
140 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
141 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
142
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
143
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
144
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
145 /* Functions: sre_ntoh16(), etc.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
146 * Date: SRE, Sun Dec 31 11:26:53 2000 [St. Louis]
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
147 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
148 * Purpose: Provide functionality of ntohs(), etc; extended
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
149 * to 64-bit unsigned ints, and explicitly provided
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
150 * in case a machine doesn't have the ntohs()
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
151 * family.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
152 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
153 * If we're using the host functions,
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
154 * USE_HOST_BYTESWAP_FUNCTIONS was set to 1 in
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
155 * squidconf.h, and we #define'd sre_hton16(x)=hton(x), etc.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
156 * in squid.h. In doing this, we assumed that the
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
157 * host functions work on 16- and 32-bit unsigned quantities.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
158 * If for some reason that's not true, set
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
159 * USE_HOST_BYTESWAP_FUNCTIONS to 0.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
160 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
161 #ifndef USE_HOST_BYTESWAP_FUNCTIONS
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
162 sqd_uint16
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
163 sre_ntoh16(sqd_uint16 netshort)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
164 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
165 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
166 return netshort;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
167 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
168 Byteswap((char *) &netshort, 2);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
169 return netshort;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
170 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
171 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
172 sqd_uint32
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
173 sre_ntoh32(sqd_uint32 netlong)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
174 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
175 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
176 return netlong;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
177 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
178 Byteswap((char *) &netlong, 4);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
179 return netlong;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
180 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
181 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
182 sqd_uint16
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
183 sre_hton16(sqd_uint16 hostshort)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
184 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
185 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
186 return hostshort;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
187 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
188 Byteswap((char *) &hostshort, 2);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
189 return hostshort;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
190 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
191 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
192 sqd_uint32
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
193 sre_hton32(sqd_uint32 hostlong)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
194 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
195 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
196 return hostlong;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
197 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
198 Byteswap((char *) &hostlong, 4);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
199 return hostlong;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
200 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
201 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
202 #endif /*USE_HOST_BYTESWAP_FUNCTIONS*/
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
203
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
204 sqd_uint64
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
205 sre_ntoh64(sqd_uint64 net_int64)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
206 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
207 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
208 return net_int64;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
209 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
210 Byteswap((char *) &net_int64, 8);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
211 return net_int64;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
212 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
213 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
214 sqd_uint64
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
215 sre_hton64(sqd_uint64 host_int64)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
216 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
217 #ifdef WORDS_BIGENDIAN
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
218 return host_int64;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
219 #else
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
220 Byteswap((char *) &host_int64, 8);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
221 return host_int64;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
222 #endif
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
223 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
224
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
225
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
226
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
227