APBS 3.0.0
Loading...
Searching...
No Matches
vstring.c
Go to the documentation of this file.
1
57#include "vstring.h"
58
59/* ///////////////////////////////////////////////////////////////////////////
60// Routine: Vstring_strcasecmp
61//
62// Copyright (c) 1988-1993 The Regents of the University of
63// California.
64// Copyright (c) 1995-1996 Sun Microsystems, Inc.
66VPUBLIC int Vstring_strcasecmp(const char *s1, const char *s2) {
67
68#if !defined(HAVE_STRCASECMP)
69 unsigned char charmap[] = {
70 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
71 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
72 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
73 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
74 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
75 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
76 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
77 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
78 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
79 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
80 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
81 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
82 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
83 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
84 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
85 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
86 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
87 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
88 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
89 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
90 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
91 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
92 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
93 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
94 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xc5, 0xe6, 0xe7,
95 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
96 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
97 0xf8, 0xf9, 0xfa, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
98 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
99 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
100 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
101 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
102 };
103
104 unsigned char u1, u2;
105
106 for ( ; ; s1++, s2++) {
107 u1 = (unsigned char) *s1;
108 u2 = (unsigned char) *s2;
109 if ((u1 == '\0') || (charmap[u1] != charmap[u2])) {
110 break;
111 }
112 }
113 return charmap[u1] - charmap[u2];
114
115#else
116
117 return strcasecmp(s1, s2);
118
119#endif
120
121}
122
123/* ///////////////////////////////////////////////////////////////////////////
124// Routine: Vstring_isdigit
125//
126// Improves upon sscanf to see if a token is an int or not
127//
128// Returns isdigit: 1 if a digit, 0 otherwise
130VPUBLIC int Vstring_isdigit(const char *tok) {
131 int i, isdigit, ti;
132 char checkchar[1];
133 char name[VMAX_BUFSIZE];
134 strcpy(name,tok);
135 isdigit = 1;
136 for(i=0; ; i++){
137 checkchar[0] = name[i];
138 if (name[i] == '\0'){
139 break;
140 }
141 if (sscanf(checkchar, "%d", &ti) != 1){
142 isdigit = 0;
143 break;
144 }
145 }
146 return isdigit;
147}
148
149
155char* Vstring_wrappedtext(const char* str, int right_margin, int left_padding)
156{
157 int span = right_margin - left_padding;
158 int i = 0;
159 int k = 0;
160 int j = 0;
161 int line_len = 0;
162 int hyphenate = 0;
163 char* wrap_str;
164 int wrap_len;
165 int len = strlen( str );
166
167 if( len == 0 )
168 return VNULL;
169
170 wrap_str = (char*)malloc( len * sizeof(char) );
171 wrap_len = len;
172
173 do
174 {
175 if( str[i] == ' ' )
176 {
177 i++;
178 }
179 else
180 {
184 if( k + right_margin + 2 > wrap_len )
185 {
186 wrap_len += right_margin + 2;
187 wrap_str = (char*)realloc( wrap_str, wrap_len * sizeof( char ) );
188 }
189
190
191 if( i + span >= len )
192 {
193 hyphenate = 0;
194 line_len = len - i;
195 }
196 else
197 {
198 j = span;
199 do
200 {
201 if( str[ i + j ] == ' ' )
202 {
203 hyphenate = 0;
204 line_len = j;
205 break;
206 }
207 else if( j == 0 )
208 {
209 hyphenate = 1;
210 line_len = span - 1;
211 break;
212 }
213 else
214 {
215 j--;
216 }
217 } while( 1 );
218 }
219
220 memset( wrap_str + k, ' ', left_padding * sizeof( char ) );
221 k += left_padding;
222
223 memcpy( wrap_str + k, str + i, line_len * sizeof( char ) );
224 k += line_len;
225 i += line_len;
226
227 if( hyphenate )
228 wrap_str[k++] = '-';
229
230 wrap_str[k++] = '\n';
231
232 wrap_str[k] = '\0';
233 }
234 } while( i < len );
235
236 return wrap_str;
237}
Contains declarations for class Vstring.