APBS
1.4.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
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 Thu Aug 28 2014 08:33:05 for APBS by
1.8.7