APBS
1.4.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
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.
66
VPUBLIC 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
130
VPUBLIC 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
155
char* 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
}
238
vstring.h
Contains declarations for class Vstring.
src
generic
vstring.c
Generated on Mon Feb 29 2016 03:57:00 for APBS by
1.8.11