xref: /minix3/crypto/external/bsd/openssl/dist/MacOS/GetHTTPS.src/CPStringUtils.cpp (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc /* ====================================================================
2*ebfedea0SLionel Sambuc  * Copyright (c) 1998-1999 The OpenSSL Project.  All rights reserved.
3*ebfedea0SLionel Sambuc  *
4*ebfedea0SLionel Sambuc  * Redistribution and use in source and binary forms, with or without
5*ebfedea0SLionel Sambuc  * modification, are permitted provided that the following conditions
6*ebfedea0SLionel Sambuc  * are met:
7*ebfedea0SLionel Sambuc  *
8*ebfedea0SLionel Sambuc  * 1. Redistributions of source code must retain the above copyright
9*ebfedea0SLionel Sambuc  *    notice, this list of conditions and the following disclaimer.
10*ebfedea0SLionel Sambuc  *
11*ebfedea0SLionel Sambuc  * 2. Redistributions in binary form must reproduce the above copyright
12*ebfedea0SLionel Sambuc  *    notice, this list of conditions and the following disclaimer in
13*ebfedea0SLionel Sambuc  *    the documentation and/or other materials provided with the
14*ebfedea0SLionel Sambuc  *    distribution.
15*ebfedea0SLionel Sambuc  *
16*ebfedea0SLionel Sambuc  * 3. All advertising materials mentioning features or use of this
17*ebfedea0SLionel Sambuc  *    software must display the following acknowledgment:
18*ebfedea0SLionel Sambuc  *    "This product includes software developed by the OpenSSL Project
19*ebfedea0SLionel Sambuc  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20*ebfedea0SLionel Sambuc  *
21*ebfedea0SLionel Sambuc  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22*ebfedea0SLionel Sambuc  *    endorse or promote products derived from this software without
23*ebfedea0SLionel Sambuc  *    prior written permission. For written permission, please contact
24*ebfedea0SLionel Sambuc  *    openssl-core@openssl.org.
25*ebfedea0SLionel Sambuc  *
26*ebfedea0SLionel Sambuc  * 5. Products derived from this software may not be called "OpenSSL"
27*ebfedea0SLionel Sambuc  *    nor may "OpenSSL" appear in their names without prior written
28*ebfedea0SLionel Sambuc  *    permission of the OpenSSL Project.
29*ebfedea0SLionel Sambuc  *
30*ebfedea0SLionel Sambuc  * 6. Redistributions of any form whatsoever must retain the following
31*ebfedea0SLionel Sambuc  *    acknowledgment:
32*ebfedea0SLionel Sambuc  *    "This product includes software developed by the OpenSSL Project
33*ebfedea0SLionel Sambuc  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34*ebfedea0SLionel Sambuc  *
35*ebfedea0SLionel Sambuc  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36*ebfedea0SLionel Sambuc  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37*ebfedea0SLionel Sambuc  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38*ebfedea0SLionel Sambuc  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
39*ebfedea0SLionel Sambuc  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40*ebfedea0SLionel Sambuc  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41*ebfedea0SLionel Sambuc  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42*ebfedea0SLionel Sambuc  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43*ebfedea0SLionel Sambuc  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44*ebfedea0SLionel Sambuc  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45*ebfedea0SLionel Sambuc  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46*ebfedea0SLionel Sambuc  * OF THE POSSIBILITY OF SUCH DAMAGE.
47*ebfedea0SLionel Sambuc  * ====================================================================
48*ebfedea0SLionel Sambuc  *
49*ebfedea0SLionel Sambuc  * This product includes cryptographic software written by Eric Young
50*ebfedea0SLionel Sambuc  * (eay@cryptsoft.com).  This product includes software written by Tim
51*ebfedea0SLionel Sambuc  * Hudson (tjh@cryptsoft.com).
52*ebfedea0SLionel Sambuc  *
53*ebfedea0SLionel Sambuc  */
54*ebfedea0SLionel Sambuc 
55*ebfedea0SLionel Sambuc 
56*ebfedea0SLionel Sambuc 
57*ebfedea0SLionel Sambuc  #include "CPStringUtils.hpp"
58*ebfedea0SLionel Sambuc #include "ErrorHandling.hpp"
59*ebfedea0SLionel Sambuc 
60*ebfedea0SLionel Sambuc 
61*ebfedea0SLionel Sambuc 
62*ebfedea0SLionel Sambuc #define kNumberFormatString			"\p########0.00#######;-########0.00#######"
63*ebfedea0SLionel Sambuc 
64*ebfedea0SLionel Sambuc 
65*ebfedea0SLionel Sambuc 
66*ebfedea0SLionel Sambuc //	Useful utility functions which could be optimized a whole lot
67*ebfedea0SLionel Sambuc 
68*ebfedea0SLionel Sambuc 
CopyPStrToCStr(const unsigned char * thePStr,char * theCStr,const int maxCStrLength)69*ebfedea0SLionel Sambuc void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength)
70*ebfedea0SLionel Sambuc {
71*ebfedea0SLionel Sambuc int		i,numPChars;
72*ebfedea0SLionel Sambuc 
73*ebfedea0SLionel Sambuc 
74*ebfedea0SLionel Sambuc 	if (thePStr != nil && theCStr != nil && maxCStrLength > 0)
75*ebfedea0SLionel Sambuc 	{
76*ebfedea0SLionel Sambuc 		numPChars = thePStr[0];
77*ebfedea0SLionel Sambuc 
78*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
79*ebfedea0SLionel Sambuc 		{
80*ebfedea0SLionel Sambuc 			if (i >= numPChars || i >= maxCStrLength - 1)
81*ebfedea0SLionel Sambuc 			{
82*ebfedea0SLionel Sambuc 				theCStr[i] = 0;
83*ebfedea0SLionel Sambuc 
84*ebfedea0SLionel Sambuc 				break;
85*ebfedea0SLionel Sambuc 			}
86*ebfedea0SLionel Sambuc 
87*ebfedea0SLionel Sambuc 			else
88*ebfedea0SLionel Sambuc 			{
89*ebfedea0SLionel Sambuc 				theCStr[i] = thePStr[i + 1];
90*ebfedea0SLionel Sambuc 			}
91*ebfedea0SLionel Sambuc 		}
92*ebfedea0SLionel Sambuc 	}
93*ebfedea0SLionel Sambuc }
94*ebfedea0SLionel Sambuc 
95*ebfedea0SLionel Sambuc 
CopyPStrToPStr(const unsigned char * theSrcPStr,unsigned char * theDstPStr,const int maxDstStrLength)96*ebfedea0SLionel Sambuc void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength)
97*ebfedea0SLionel Sambuc {
98*ebfedea0SLionel Sambuc int		theMaxDstStrLength;
99*ebfedea0SLionel Sambuc 
100*ebfedea0SLionel Sambuc 
101*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
102*ebfedea0SLionel Sambuc 
103*ebfedea0SLionel Sambuc 
104*ebfedea0SLionel Sambuc 	if (theDstPStr != nil && theSrcPStr != nil && theMaxDstStrLength > 0)
105*ebfedea0SLionel Sambuc 	{
106*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength > 255)
107*ebfedea0SLionel Sambuc 		{
108*ebfedea0SLionel Sambuc 			theMaxDstStrLength = 255;
109*ebfedea0SLionel Sambuc 		}
110*ebfedea0SLionel Sambuc 
111*ebfedea0SLionel Sambuc 
112*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength - 1 < theSrcPStr[0])
113*ebfedea0SLionel Sambuc 		{
114*ebfedea0SLionel Sambuc 			BlockMove(theSrcPStr + 1,theDstPStr + 1,theMaxDstStrLength - 1);
115*ebfedea0SLionel Sambuc 
116*ebfedea0SLionel Sambuc 			theDstPStr[0] = theMaxDstStrLength - 1;
117*ebfedea0SLionel Sambuc 		}
118*ebfedea0SLionel Sambuc 
119*ebfedea0SLionel Sambuc 		else
120*ebfedea0SLionel Sambuc 		{
121*ebfedea0SLionel Sambuc 			BlockMove(theSrcPStr,theDstPStr,theSrcPStr[0] + 1);
122*ebfedea0SLionel Sambuc 		}
123*ebfedea0SLionel Sambuc 	}
124*ebfedea0SLionel Sambuc }
125*ebfedea0SLionel Sambuc 
126*ebfedea0SLionel Sambuc 
CopyCStrToCStr(const char * theSrcCStr,char * theDstCStr,const int maxDstStrLength)127*ebfedea0SLionel Sambuc void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength)
128*ebfedea0SLionel Sambuc {
129*ebfedea0SLionel Sambuc int		i;
130*ebfedea0SLionel Sambuc 
131*ebfedea0SLionel Sambuc 
132*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0)
133*ebfedea0SLionel Sambuc 	{
134*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
135*ebfedea0SLionel Sambuc 		{
136*ebfedea0SLionel Sambuc 			if (theSrcCStr[i] == 0 || i >= maxDstStrLength - 1)
137*ebfedea0SLionel Sambuc 			{
138*ebfedea0SLionel Sambuc 				theDstCStr[i] = 0;
139*ebfedea0SLionel Sambuc 
140*ebfedea0SLionel Sambuc 				break;
141*ebfedea0SLionel Sambuc 			}
142*ebfedea0SLionel Sambuc 
143*ebfedea0SLionel Sambuc 			else
144*ebfedea0SLionel Sambuc 			{
145*ebfedea0SLionel Sambuc 				theDstCStr[i] = theSrcCStr[i];
146*ebfedea0SLionel Sambuc 			}
147*ebfedea0SLionel Sambuc 		}
148*ebfedea0SLionel Sambuc 	}
149*ebfedea0SLionel Sambuc }
150*ebfedea0SLionel Sambuc 
151*ebfedea0SLionel Sambuc 
152*ebfedea0SLionel Sambuc 
CopyCSubstrToCStr(const char * theSrcCStr,const int maxCharsToCopy,char * theDstCStr,const int maxDstStrLength)153*ebfedea0SLionel Sambuc void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength)
154*ebfedea0SLionel Sambuc {
155*ebfedea0SLionel Sambuc int		i;
156*ebfedea0SLionel Sambuc 
157*ebfedea0SLionel Sambuc 
158*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0)
159*ebfedea0SLionel Sambuc 	{
160*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
161*ebfedea0SLionel Sambuc 		{
162*ebfedea0SLionel Sambuc 			if (theSrcCStr[i] == 0 || i >= maxDstStrLength - 1 || i >= maxCharsToCopy)
163*ebfedea0SLionel Sambuc 			{
164*ebfedea0SLionel Sambuc 				theDstCStr[i] = 0;
165*ebfedea0SLionel Sambuc 
166*ebfedea0SLionel Sambuc 				break;
167*ebfedea0SLionel Sambuc 			}
168*ebfedea0SLionel Sambuc 
169*ebfedea0SLionel Sambuc 			else
170*ebfedea0SLionel Sambuc 			{
171*ebfedea0SLionel Sambuc 				theDstCStr[i] = theSrcCStr[i];
172*ebfedea0SLionel Sambuc 			}
173*ebfedea0SLionel Sambuc 		}
174*ebfedea0SLionel Sambuc 	}
175*ebfedea0SLionel Sambuc }
176*ebfedea0SLionel Sambuc 
177*ebfedea0SLionel Sambuc 
178*ebfedea0SLionel Sambuc 
CopyCSubstrToPStr(const char * theSrcCStr,const int maxCharsToCopy,unsigned char * theDstPStr,const int maxDstStrLength)179*ebfedea0SLionel Sambuc void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength)
180*ebfedea0SLionel Sambuc {
181*ebfedea0SLionel Sambuc int		i;
182*ebfedea0SLionel Sambuc int		theMaxDstStrLength;
183*ebfedea0SLionel Sambuc 
184*ebfedea0SLionel Sambuc 
185*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
186*ebfedea0SLionel Sambuc 
187*ebfedea0SLionel Sambuc 	if (theDstPStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
188*ebfedea0SLionel Sambuc 	{
189*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength > 255)
190*ebfedea0SLionel Sambuc 		{
191*ebfedea0SLionel Sambuc 			theMaxDstStrLength = 255;
192*ebfedea0SLionel Sambuc 		}
193*ebfedea0SLionel Sambuc 
194*ebfedea0SLionel Sambuc 
195*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
196*ebfedea0SLionel Sambuc 		{
197*ebfedea0SLionel Sambuc 			if (theSrcCStr[i] == 0 || i >= theMaxDstStrLength - 1 || i >= maxCharsToCopy)
198*ebfedea0SLionel Sambuc 			{
199*ebfedea0SLionel Sambuc 				theDstPStr[0] = i;
200*ebfedea0SLionel Sambuc 
201*ebfedea0SLionel Sambuc 				break;
202*ebfedea0SLionel Sambuc 			}
203*ebfedea0SLionel Sambuc 
204*ebfedea0SLionel Sambuc 			else
205*ebfedea0SLionel Sambuc 			{
206*ebfedea0SLionel Sambuc 				theDstPStr[i + 1] = theSrcCStr[i];
207*ebfedea0SLionel Sambuc 			}
208*ebfedea0SLionel Sambuc 		}
209*ebfedea0SLionel Sambuc 	}
210*ebfedea0SLionel Sambuc }
211*ebfedea0SLionel Sambuc 
212*ebfedea0SLionel Sambuc 
213*ebfedea0SLionel Sambuc 
CopyCStrToPStr(const char * theSrcCStr,unsigned char * theDstPStr,const int maxDstStrLength)214*ebfedea0SLionel Sambuc void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength)
215*ebfedea0SLionel Sambuc {
216*ebfedea0SLionel Sambuc int		i;
217*ebfedea0SLionel Sambuc int		theMaxDstStrLength;
218*ebfedea0SLionel Sambuc 
219*ebfedea0SLionel Sambuc 
220*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
221*ebfedea0SLionel Sambuc 
222*ebfedea0SLionel Sambuc 	if (theDstPStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
223*ebfedea0SLionel Sambuc 	{
224*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength > 255)
225*ebfedea0SLionel Sambuc 		{
226*ebfedea0SLionel Sambuc 			theMaxDstStrLength = 255;
227*ebfedea0SLionel Sambuc 		}
228*ebfedea0SLionel Sambuc 
229*ebfedea0SLionel Sambuc 
230*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
231*ebfedea0SLionel Sambuc 		{
232*ebfedea0SLionel Sambuc 			if (i >= theMaxDstStrLength - 1 || theSrcCStr[i] == 0)
233*ebfedea0SLionel Sambuc 			{
234*ebfedea0SLionel Sambuc 				theDstPStr[0] = i;
235*ebfedea0SLionel Sambuc 
236*ebfedea0SLionel Sambuc 				break;
237*ebfedea0SLionel Sambuc 			}
238*ebfedea0SLionel Sambuc 
239*ebfedea0SLionel Sambuc 			else
240*ebfedea0SLionel Sambuc 			{
241*ebfedea0SLionel Sambuc 				theDstPStr[i + 1] = theSrcCStr[i];
242*ebfedea0SLionel Sambuc 			}
243*ebfedea0SLionel Sambuc 		}
244*ebfedea0SLionel Sambuc 	}
245*ebfedea0SLionel Sambuc }
246*ebfedea0SLionel Sambuc 
247*ebfedea0SLionel Sambuc 
ConcatPStrToCStr(const unsigned char * thePStr,char * theCStr,const int maxCStrLength)248*ebfedea0SLionel Sambuc void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength)
249*ebfedea0SLionel Sambuc {
250*ebfedea0SLionel Sambuc int		i,numPChars,cStrLength;
251*ebfedea0SLionel Sambuc 
252*ebfedea0SLionel Sambuc 
253*ebfedea0SLionel Sambuc 	if (thePStr != nil && theCStr != nil && maxCStrLength > 0)
254*ebfedea0SLionel Sambuc 	{
255*ebfedea0SLionel Sambuc 		for (cStrLength = 0;theCStr[cStrLength] != 0;cStrLength++)
256*ebfedea0SLionel Sambuc 		{
257*ebfedea0SLionel Sambuc 
258*ebfedea0SLionel Sambuc 		}
259*ebfedea0SLionel Sambuc 
260*ebfedea0SLionel Sambuc 
261*ebfedea0SLionel Sambuc 		numPChars = thePStr[0];
262*ebfedea0SLionel Sambuc 
263*ebfedea0SLionel Sambuc 
264*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
265*ebfedea0SLionel Sambuc 		{
266*ebfedea0SLionel Sambuc 			if (i >= numPChars || cStrLength >= maxCStrLength - 1)
267*ebfedea0SLionel Sambuc 			{
268*ebfedea0SLionel Sambuc 				theCStr[cStrLength++] = 0;
269*ebfedea0SLionel Sambuc 
270*ebfedea0SLionel Sambuc 				break;
271*ebfedea0SLionel Sambuc 			}
272*ebfedea0SLionel Sambuc 
273*ebfedea0SLionel Sambuc 			else
274*ebfedea0SLionel Sambuc 			{
275*ebfedea0SLionel Sambuc 				theCStr[cStrLength++] = thePStr[i + 1];
276*ebfedea0SLionel Sambuc 			}
277*ebfedea0SLionel Sambuc 		}
278*ebfedea0SLionel Sambuc 	}
279*ebfedea0SLionel Sambuc }
280*ebfedea0SLionel Sambuc 
281*ebfedea0SLionel Sambuc 
282*ebfedea0SLionel Sambuc 
ConcatPStrToPStr(const unsigned char * theSrcPStr,unsigned char * theDstPStr,const int maxDstStrLength)283*ebfedea0SLionel Sambuc void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength)
284*ebfedea0SLionel Sambuc {
285*ebfedea0SLionel Sambuc int		theMaxDstStrLength;
286*ebfedea0SLionel Sambuc 
287*ebfedea0SLionel Sambuc 
288*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
289*ebfedea0SLionel Sambuc 
290*ebfedea0SLionel Sambuc 	if (theSrcPStr != nil && theDstPStr != nil && theMaxDstStrLength > 0)
291*ebfedea0SLionel Sambuc 	{
292*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength > 255)
293*ebfedea0SLionel Sambuc 		{
294*ebfedea0SLionel Sambuc 			theMaxDstStrLength = 255;
295*ebfedea0SLionel Sambuc 		}
296*ebfedea0SLionel Sambuc 
297*ebfedea0SLionel Sambuc 
298*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength - theDstPStr[0] - 1 < theSrcPStr[0])
299*ebfedea0SLionel Sambuc 		{
300*ebfedea0SLionel Sambuc 			BlockMove(theSrcPStr + 1,theDstPStr + theDstPStr[0] + 1,theMaxDstStrLength - 1 - theDstPStr[0]);
301*ebfedea0SLionel Sambuc 
302*ebfedea0SLionel Sambuc 			theDstPStr[0] = theMaxDstStrLength - 1;
303*ebfedea0SLionel Sambuc 		}
304*ebfedea0SLionel Sambuc 
305*ebfedea0SLionel Sambuc 		else
306*ebfedea0SLionel Sambuc 		{
307*ebfedea0SLionel Sambuc 			BlockMove(theSrcPStr + 1,theDstPStr + theDstPStr[0] + 1,theSrcPStr[0]);
308*ebfedea0SLionel Sambuc 
309*ebfedea0SLionel Sambuc 			theDstPStr[0] += theSrcPStr[0];
310*ebfedea0SLionel Sambuc 		}
311*ebfedea0SLionel Sambuc 	}
312*ebfedea0SLionel Sambuc }
313*ebfedea0SLionel Sambuc 
314*ebfedea0SLionel Sambuc 
315*ebfedea0SLionel Sambuc 
ConcatCStrToPStr(const char * theSrcCStr,unsigned char * theDstPStr,const int maxDstStrLength)316*ebfedea0SLionel Sambuc void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength)
317*ebfedea0SLionel Sambuc {
318*ebfedea0SLionel Sambuc int		i,thePStrLength;
319*ebfedea0SLionel Sambuc int		theMaxDstStrLength;
320*ebfedea0SLionel Sambuc 
321*ebfedea0SLionel Sambuc 
322*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
323*ebfedea0SLionel Sambuc 
324*ebfedea0SLionel Sambuc 	if (theSrcCStr != nil && theDstPStr != nil && theMaxDstStrLength > 0)
325*ebfedea0SLionel Sambuc 	{
326*ebfedea0SLionel Sambuc 		if (theMaxDstStrLength > 255)
327*ebfedea0SLionel Sambuc 		{
328*ebfedea0SLionel Sambuc 			theMaxDstStrLength = 255;
329*ebfedea0SLionel Sambuc 		}
330*ebfedea0SLionel Sambuc 
331*ebfedea0SLionel Sambuc 
332*ebfedea0SLionel Sambuc 		thePStrLength = theDstPStr[0];
333*ebfedea0SLionel Sambuc 
334*ebfedea0SLionel Sambuc 		for (i = 0;;i++)
335*ebfedea0SLionel Sambuc 		{
336*ebfedea0SLionel Sambuc 			if (theSrcCStr[i] == 0 || thePStrLength >= theMaxDstStrLength - 1)
337*ebfedea0SLionel Sambuc 			{
338*ebfedea0SLionel Sambuc 				theDstPStr[0] = thePStrLength;
339*ebfedea0SLionel Sambuc 
340*ebfedea0SLionel Sambuc 				break;
341*ebfedea0SLionel Sambuc 			}
342*ebfedea0SLionel Sambuc 
343*ebfedea0SLionel Sambuc 			else
344*ebfedea0SLionel Sambuc 			{
345*ebfedea0SLionel Sambuc 				theDstPStr[thePStrLength + 1] = theSrcCStr[i];
346*ebfedea0SLionel Sambuc 
347*ebfedea0SLionel Sambuc 				thePStrLength++;
348*ebfedea0SLionel Sambuc 			}
349*ebfedea0SLionel Sambuc 		}
350*ebfedea0SLionel Sambuc 	}
351*ebfedea0SLionel Sambuc }
352*ebfedea0SLionel Sambuc 
353*ebfedea0SLionel Sambuc 
354*ebfedea0SLionel Sambuc 
ConcatCStrToCStr(const char * theSrcCStr,char * theDstCStr,const int maxCStrLength)355*ebfedea0SLionel Sambuc void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength)
356*ebfedea0SLionel Sambuc {
357*ebfedea0SLionel Sambuc int		cStrLength;
358*ebfedea0SLionel Sambuc 
359*ebfedea0SLionel Sambuc 
360*ebfedea0SLionel Sambuc 	if (theSrcCStr != nil && theDstCStr != nil && maxCStrLength > 0)
361*ebfedea0SLionel Sambuc 	{
362*ebfedea0SLionel Sambuc 		for (cStrLength = 0;theDstCStr[cStrLength] != 0;cStrLength++)
363*ebfedea0SLionel Sambuc 		{
364*ebfedea0SLionel Sambuc 
365*ebfedea0SLionel Sambuc 		}
366*ebfedea0SLionel Sambuc 
367*ebfedea0SLionel Sambuc 
368*ebfedea0SLionel Sambuc 		for (;;)
369*ebfedea0SLionel Sambuc 		{
370*ebfedea0SLionel Sambuc 			if (*theSrcCStr == 0 || cStrLength >= maxCStrLength - 1)
371*ebfedea0SLionel Sambuc 			{
372*ebfedea0SLionel Sambuc 				theDstCStr[cStrLength++] = 0;
373*ebfedea0SLionel Sambuc 
374*ebfedea0SLionel Sambuc 				break;
375*ebfedea0SLionel Sambuc 			}
376*ebfedea0SLionel Sambuc 
377*ebfedea0SLionel Sambuc 			else
378*ebfedea0SLionel Sambuc 			{
379*ebfedea0SLionel Sambuc 				theDstCStr[cStrLength++] = *theSrcCStr++;
380*ebfedea0SLionel Sambuc 			}
381*ebfedea0SLionel Sambuc 		}
382*ebfedea0SLionel Sambuc 	}
383*ebfedea0SLionel Sambuc }
384*ebfedea0SLionel Sambuc 
385*ebfedea0SLionel Sambuc 
386*ebfedea0SLionel Sambuc 
ConcatCharToCStr(const char theChar,char * theDstCStr,const int maxCStrLength)387*ebfedea0SLionel Sambuc void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength)
388*ebfedea0SLionel Sambuc {
389*ebfedea0SLionel Sambuc int		cStrLength;
390*ebfedea0SLionel Sambuc 
391*ebfedea0SLionel Sambuc 
392*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && maxCStrLength > 0)
393*ebfedea0SLionel Sambuc 	{
394*ebfedea0SLionel Sambuc 		cStrLength = CStrLength(theDstCStr);
395*ebfedea0SLionel Sambuc 
396*ebfedea0SLionel Sambuc 		if (cStrLength < maxCStrLength - 1)
397*ebfedea0SLionel Sambuc 		{
398*ebfedea0SLionel Sambuc 			theDstCStr[cStrLength++] = theChar;
399*ebfedea0SLionel Sambuc 			theDstCStr[cStrLength++] = '\0';
400*ebfedea0SLionel Sambuc 		}
401*ebfedea0SLionel Sambuc 	}
402*ebfedea0SLionel Sambuc }
403*ebfedea0SLionel Sambuc 
404*ebfedea0SLionel Sambuc 
405*ebfedea0SLionel Sambuc 
ConcatCharToPStr(const char theChar,unsigned char * theDstPStr,const int maxPStrLength)406*ebfedea0SLionel Sambuc void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength)
407*ebfedea0SLionel Sambuc {
408*ebfedea0SLionel Sambuc int		pStrLength;
409*ebfedea0SLionel Sambuc 
410*ebfedea0SLionel Sambuc 
411*ebfedea0SLionel Sambuc 	if (theDstPStr != nil && maxPStrLength > 0)
412*ebfedea0SLionel Sambuc 	{
413*ebfedea0SLionel Sambuc 		pStrLength = PStrLength(theDstPStr);
414*ebfedea0SLionel Sambuc 
415*ebfedea0SLionel Sambuc 		if (pStrLength < maxPStrLength - 1 && pStrLength < 255)
416*ebfedea0SLionel Sambuc 		{
417*ebfedea0SLionel Sambuc 			theDstPStr[pStrLength + 1] = theChar;
418*ebfedea0SLionel Sambuc 			theDstPStr[0] += 1;
419*ebfedea0SLionel Sambuc 		}
420*ebfedea0SLionel Sambuc 	}
421*ebfedea0SLionel Sambuc }
422*ebfedea0SLionel Sambuc 
423*ebfedea0SLionel Sambuc 
424*ebfedea0SLionel Sambuc 
425*ebfedea0SLionel Sambuc 
CompareCStrs(const char * theFirstCStr,const char * theSecondCStr,const Boolean ignoreCase)426*ebfedea0SLionel Sambuc int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase)
427*ebfedea0SLionel Sambuc {
428*ebfedea0SLionel Sambuc int		returnValue;
429*ebfedea0SLionel Sambuc char	firstChar,secondChar;
430*ebfedea0SLionel Sambuc 
431*ebfedea0SLionel Sambuc 
432*ebfedea0SLionel Sambuc 	returnValue = 0;
433*ebfedea0SLionel Sambuc 
434*ebfedea0SLionel Sambuc 
435*ebfedea0SLionel Sambuc 	if (theFirstCStr != nil && theSecondCStr != nil)
436*ebfedea0SLionel Sambuc 	{
437*ebfedea0SLionel Sambuc 		for (;;)
438*ebfedea0SLionel Sambuc 		{
439*ebfedea0SLionel Sambuc 			firstChar = *theFirstCStr;
440*ebfedea0SLionel Sambuc 			secondChar = *theSecondCStr;
441*ebfedea0SLionel Sambuc 
442*ebfedea0SLionel Sambuc 			if (ignoreCase == true)
443*ebfedea0SLionel Sambuc 			{
444*ebfedea0SLionel Sambuc 				if (firstChar >= 'A' && firstChar <= 'Z')
445*ebfedea0SLionel Sambuc 				{
446*ebfedea0SLionel Sambuc 					firstChar = 'a' + (firstChar - 'A');
447*ebfedea0SLionel Sambuc 				}
448*ebfedea0SLionel Sambuc 
449*ebfedea0SLionel Sambuc 				if (secondChar >= 'A' && secondChar <= 'Z')
450*ebfedea0SLionel Sambuc 				{
451*ebfedea0SLionel Sambuc 					secondChar = 'a' + (secondChar - 'A');
452*ebfedea0SLionel Sambuc 				}
453*ebfedea0SLionel Sambuc 			}
454*ebfedea0SLionel Sambuc 
455*ebfedea0SLionel Sambuc 
456*ebfedea0SLionel Sambuc 			if (firstChar == 0 && secondChar != 0)
457*ebfedea0SLionel Sambuc 			{
458*ebfedea0SLionel Sambuc 				returnValue = -1;
459*ebfedea0SLionel Sambuc 
460*ebfedea0SLionel Sambuc 				break;
461*ebfedea0SLionel Sambuc 			}
462*ebfedea0SLionel Sambuc 
463*ebfedea0SLionel Sambuc 			else if (firstChar != 0 && secondChar == 0)
464*ebfedea0SLionel Sambuc 			{
465*ebfedea0SLionel Sambuc 				returnValue = 1;
466*ebfedea0SLionel Sambuc 
467*ebfedea0SLionel Sambuc 				break;
468*ebfedea0SLionel Sambuc 			}
469*ebfedea0SLionel Sambuc 
470*ebfedea0SLionel Sambuc 			else if (firstChar == 0 && secondChar == 0)
471*ebfedea0SLionel Sambuc 			{
472*ebfedea0SLionel Sambuc 				returnValue = 0;
473*ebfedea0SLionel Sambuc 
474*ebfedea0SLionel Sambuc 				break;
475*ebfedea0SLionel Sambuc 			}
476*ebfedea0SLionel Sambuc 
477*ebfedea0SLionel Sambuc 			else if (firstChar < secondChar)
478*ebfedea0SLionel Sambuc 			{
479*ebfedea0SLionel Sambuc 				returnValue = -1;
480*ebfedea0SLionel Sambuc 
481*ebfedea0SLionel Sambuc 				break;
482*ebfedea0SLionel Sambuc 			}
483*ebfedea0SLionel Sambuc 
484*ebfedea0SLionel Sambuc 			else if (firstChar > secondChar)
485*ebfedea0SLionel Sambuc 			{
486*ebfedea0SLionel Sambuc 				returnValue = 1;
487*ebfedea0SLionel Sambuc 
488*ebfedea0SLionel Sambuc 				break;
489*ebfedea0SLionel Sambuc 			}
490*ebfedea0SLionel Sambuc 
491*ebfedea0SLionel Sambuc 			theFirstCStr++;
492*ebfedea0SLionel Sambuc 			theSecondCStr++;
493*ebfedea0SLionel Sambuc 		}
494*ebfedea0SLionel Sambuc 	}
495*ebfedea0SLionel Sambuc 
496*ebfedea0SLionel Sambuc 
497*ebfedea0SLionel Sambuc 	return(returnValue);
498*ebfedea0SLionel Sambuc }
499*ebfedea0SLionel Sambuc 
500*ebfedea0SLionel Sambuc 
501*ebfedea0SLionel Sambuc 
CStrsAreEqual(const char * theFirstCStr,const char * theSecondCStr,const Boolean ignoreCase)502*ebfedea0SLionel Sambuc Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase)
503*ebfedea0SLionel Sambuc {
504*ebfedea0SLionel Sambuc 	if (CompareCStrs(theFirstCStr,theSecondCStr,ignoreCase) == 0)
505*ebfedea0SLionel Sambuc 	{
506*ebfedea0SLionel Sambuc 		return true;
507*ebfedea0SLionel Sambuc 	}
508*ebfedea0SLionel Sambuc 
509*ebfedea0SLionel Sambuc 	else
510*ebfedea0SLionel Sambuc 	{
511*ebfedea0SLionel Sambuc 		return false;
512*ebfedea0SLionel Sambuc 	}
513*ebfedea0SLionel Sambuc }
514*ebfedea0SLionel Sambuc 
515*ebfedea0SLionel Sambuc 
PStrsAreEqual(const unsigned char * theFirstPStr,const unsigned char * theSecondPStr,const Boolean ignoreCase)516*ebfedea0SLionel Sambuc Boolean PStrsAreEqual(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase)
517*ebfedea0SLionel Sambuc {
518*ebfedea0SLionel Sambuc 	if (ComparePStrs(theFirstPStr,theSecondPStr,ignoreCase) == 0)
519*ebfedea0SLionel Sambuc 	{
520*ebfedea0SLionel Sambuc 		return true;
521*ebfedea0SLionel Sambuc 	}
522*ebfedea0SLionel Sambuc 
523*ebfedea0SLionel Sambuc 	else
524*ebfedea0SLionel Sambuc 	{
525*ebfedea0SLionel Sambuc 		return false;
526*ebfedea0SLionel Sambuc 	}
527*ebfedea0SLionel Sambuc }
528*ebfedea0SLionel Sambuc 
529*ebfedea0SLionel Sambuc 
530*ebfedea0SLionel Sambuc 
ComparePStrs(const unsigned char * theFirstPStr,const unsigned char * theSecondPStr,const Boolean ignoreCase)531*ebfedea0SLionel Sambuc int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase)
532*ebfedea0SLionel Sambuc {
533*ebfedea0SLionel Sambuc int		i,returnValue;
534*ebfedea0SLionel Sambuc char	firstChar,secondChar;
535*ebfedea0SLionel Sambuc 
536*ebfedea0SLionel Sambuc 
537*ebfedea0SLionel Sambuc 	returnValue = 0;
538*ebfedea0SLionel Sambuc 
539*ebfedea0SLionel Sambuc 
540*ebfedea0SLionel Sambuc 	if (theFirstPStr != nil && theSecondPStr != nil)
541*ebfedea0SLionel Sambuc 	{
542*ebfedea0SLionel Sambuc 		for (i = 1;;i++)
543*ebfedea0SLionel Sambuc 		{
544*ebfedea0SLionel Sambuc 			firstChar = theFirstPStr[i];
545*ebfedea0SLionel Sambuc 			secondChar = theSecondPStr[i];
546*ebfedea0SLionel Sambuc 
547*ebfedea0SLionel Sambuc 			if (ignoreCase == true)
548*ebfedea0SLionel Sambuc 			{
549*ebfedea0SLionel Sambuc 				if (firstChar >= 'A' && firstChar <= 'Z')
550*ebfedea0SLionel Sambuc 				{
551*ebfedea0SLionel Sambuc 					firstChar = 'a' + (firstChar - 'A');
552*ebfedea0SLionel Sambuc 				}
553*ebfedea0SLionel Sambuc 
554*ebfedea0SLionel Sambuc 				if (secondChar >= 'A' && secondChar <= 'Z')
555*ebfedea0SLionel Sambuc 				{
556*ebfedea0SLionel Sambuc 					secondChar = 'a' + (secondChar - 'A');
557*ebfedea0SLionel Sambuc 				}
558*ebfedea0SLionel Sambuc 			}
559*ebfedea0SLionel Sambuc 
560*ebfedea0SLionel Sambuc 
561*ebfedea0SLionel Sambuc 			if (theFirstPStr[0] < i && theSecondPStr[0] >= i)
562*ebfedea0SLionel Sambuc 			{
563*ebfedea0SLionel Sambuc 				returnValue = -1;
564*ebfedea0SLionel Sambuc 
565*ebfedea0SLionel Sambuc 				break;
566*ebfedea0SLionel Sambuc 			}
567*ebfedea0SLionel Sambuc 
568*ebfedea0SLionel Sambuc 			else if (theFirstPStr[0] >= i && theSecondPStr[0] < i)
569*ebfedea0SLionel Sambuc 			{
570*ebfedea0SLionel Sambuc 				returnValue = 1;
571*ebfedea0SLionel Sambuc 
572*ebfedea0SLionel Sambuc 				break;
573*ebfedea0SLionel Sambuc 			}
574*ebfedea0SLionel Sambuc 
575*ebfedea0SLionel Sambuc 			else if (theFirstPStr[0] < i && theSecondPStr[0] < i)
576*ebfedea0SLionel Sambuc 			{
577*ebfedea0SLionel Sambuc 				returnValue = 0;
578*ebfedea0SLionel Sambuc 
579*ebfedea0SLionel Sambuc 				break;
580*ebfedea0SLionel Sambuc 			}
581*ebfedea0SLionel Sambuc 
582*ebfedea0SLionel Sambuc 			else if (firstChar < secondChar)
583*ebfedea0SLionel Sambuc 			{
584*ebfedea0SLionel Sambuc 				returnValue = -1;
585*ebfedea0SLionel Sambuc 
586*ebfedea0SLionel Sambuc 				break;
587*ebfedea0SLionel Sambuc 			}
588*ebfedea0SLionel Sambuc 
589*ebfedea0SLionel Sambuc 			else if (firstChar > secondChar)
590*ebfedea0SLionel Sambuc 			{
591*ebfedea0SLionel Sambuc 				returnValue = 1;
592*ebfedea0SLionel Sambuc 
593*ebfedea0SLionel Sambuc 				break;
594*ebfedea0SLionel Sambuc 			}
595*ebfedea0SLionel Sambuc 		}
596*ebfedea0SLionel Sambuc 	}
597*ebfedea0SLionel Sambuc 
598*ebfedea0SLionel Sambuc 
599*ebfedea0SLionel Sambuc 	return(returnValue);
600*ebfedea0SLionel Sambuc }
601*ebfedea0SLionel Sambuc 
602*ebfedea0SLionel Sambuc 
603*ebfedea0SLionel Sambuc 
CompareCStrToPStr(const char * theCStr,const unsigned char * thePStr,const Boolean ignoreCase)604*ebfedea0SLionel Sambuc int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase)
605*ebfedea0SLionel Sambuc {
606*ebfedea0SLionel Sambuc int		returnValue;
607*ebfedea0SLionel Sambuc char	tempString[256];
608*ebfedea0SLionel Sambuc 
609*ebfedea0SLionel Sambuc 
610*ebfedea0SLionel Sambuc 	returnValue = 0;
611*ebfedea0SLionel Sambuc 
612*ebfedea0SLionel Sambuc 	if (theCStr != nil && thePStr != nil)
613*ebfedea0SLionel Sambuc 	{
614*ebfedea0SLionel Sambuc 		CopyPStrToCStr(thePStr,tempString,sizeof(tempString));
615*ebfedea0SLionel Sambuc 
616*ebfedea0SLionel Sambuc 		returnValue = CompareCStrs(theCStr,tempString,ignoreCase);
617*ebfedea0SLionel Sambuc 	}
618*ebfedea0SLionel Sambuc 
619*ebfedea0SLionel Sambuc 
620*ebfedea0SLionel Sambuc 	return(returnValue);
621*ebfedea0SLionel Sambuc }
622*ebfedea0SLionel Sambuc 
623*ebfedea0SLionel Sambuc 
624*ebfedea0SLionel Sambuc 
ConcatLongIntToCStr(const long theNum,char * theCStr,const int maxCStrLength,const int numDigits)625*ebfedea0SLionel Sambuc void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits)
626*ebfedea0SLionel Sambuc {
627*ebfedea0SLionel Sambuc Str255 		theStr255;
628*ebfedea0SLionel Sambuc 
629*ebfedea0SLionel Sambuc 
630*ebfedea0SLionel Sambuc 	NumToString(theNum,theStr255);
631*ebfedea0SLionel Sambuc 
632*ebfedea0SLionel Sambuc 
633*ebfedea0SLionel Sambuc 	if (numDigits > 0)
634*ebfedea0SLionel Sambuc 	{
635*ebfedea0SLionel Sambuc 	int 	charsToInsert;
636*ebfedea0SLionel Sambuc 
637*ebfedea0SLionel Sambuc 
638*ebfedea0SLionel Sambuc 		charsToInsert = numDigits - PStrLength(theStr255);
639*ebfedea0SLionel Sambuc 
640*ebfedea0SLionel Sambuc 		if (charsToInsert > 0)
641*ebfedea0SLionel Sambuc 		{
642*ebfedea0SLionel Sambuc 		char	tempString[256];
643*ebfedea0SLionel Sambuc 
644*ebfedea0SLionel Sambuc 			CopyCStrToCStr("",tempString,sizeof(tempString));
645*ebfedea0SLionel Sambuc 
646*ebfedea0SLionel Sambuc 			for (;charsToInsert > 0;charsToInsert--)
647*ebfedea0SLionel Sambuc 			{
648*ebfedea0SLionel Sambuc 				ConcatCStrToCStr("0",tempString,sizeof(tempString));
649*ebfedea0SLionel Sambuc 			}
650*ebfedea0SLionel Sambuc 
651*ebfedea0SLionel Sambuc 			ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
652*ebfedea0SLionel Sambuc 
653*ebfedea0SLionel Sambuc 			CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
654*ebfedea0SLionel Sambuc 		}
655*ebfedea0SLionel Sambuc 	}
656*ebfedea0SLionel Sambuc 
657*ebfedea0SLionel Sambuc 
658*ebfedea0SLionel Sambuc 	ConcatPStrToCStr(theStr255,theCStr,maxCStrLength);
659*ebfedea0SLionel Sambuc }
660*ebfedea0SLionel Sambuc 
661*ebfedea0SLionel Sambuc 
662*ebfedea0SLionel Sambuc 
663*ebfedea0SLionel Sambuc 
ConcatLongIntToPStr(const long theNum,unsigned char * thePStr,const int maxPStrLength,const int numDigits)664*ebfedea0SLionel Sambuc void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits)
665*ebfedea0SLionel Sambuc {
666*ebfedea0SLionel Sambuc Str255 		theStr255;
667*ebfedea0SLionel Sambuc 
668*ebfedea0SLionel Sambuc 
669*ebfedea0SLionel Sambuc 	NumToString(theNum,theStr255);
670*ebfedea0SLionel Sambuc 
671*ebfedea0SLionel Sambuc 
672*ebfedea0SLionel Sambuc 	if (numDigits > 0)
673*ebfedea0SLionel Sambuc 	{
674*ebfedea0SLionel Sambuc 	int 	charsToInsert;
675*ebfedea0SLionel Sambuc 
676*ebfedea0SLionel Sambuc 
677*ebfedea0SLionel Sambuc 		charsToInsert = numDigits - PStrLength(theStr255);
678*ebfedea0SLionel Sambuc 
679*ebfedea0SLionel Sambuc 		if (charsToInsert > 0)
680*ebfedea0SLionel Sambuc 		{
681*ebfedea0SLionel Sambuc 		char	tempString[256];
682*ebfedea0SLionel Sambuc 
683*ebfedea0SLionel Sambuc 			CopyCStrToCStr("",tempString,sizeof(tempString));
684*ebfedea0SLionel Sambuc 
685*ebfedea0SLionel Sambuc 			for (;charsToInsert > 0;charsToInsert--)
686*ebfedea0SLionel Sambuc 			{
687*ebfedea0SLionel Sambuc 				ConcatCStrToCStr("0",tempString,sizeof(tempString));
688*ebfedea0SLionel Sambuc 			}
689*ebfedea0SLionel Sambuc 
690*ebfedea0SLionel Sambuc 			ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
691*ebfedea0SLionel Sambuc 
692*ebfedea0SLionel Sambuc 			CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
693*ebfedea0SLionel Sambuc 		}
694*ebfedea0SLionel Sambuc 	}
695*ebfedea0SLionel Sambuc 
696*ebfedea0SLionel Sambuc 
697*ebfedea0SLionel Sambuc 	ConcatPStrToPStr(theStr255,thePStr,maxPStrLength);
698*ebfedea0SLionel Sambuc }
699*ebfedea0SLionel Sambuc 
700*ebfedea0SLionel Sambuc 
701*ebfedea0SLionel Sambuc 
CopyCStrAndConcatLongIntToCStr(const char * theSrcCStr,const long theNum,char * theDstCStr,const int maxDstStrLength)702*ebfedea0SLionel Sambuc void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
703*ebfedea0SLionel Sambuc {
704*ebfedea0SLionel Sambuc 	CopyCStrToCStr(theSrcCStr,theDstCStr,maxDstStrLength);
705*ebfedea0SLionel Sambuc 
706*ebfedea0SLionel Sambuc 	ConcatLongIntToCStr(theNum,theDstCStr,maxDstStrLength);
707*ebfedea0SLionel Sambuc }
708*ebfedea0SLionel Sambuc 
709*ebfedea0SLionel Sambuc 
710*ebfedea0SLionel Sambuc 
CopyLongIntToCStr(const long theNum,char * theCStr,const int maxCStrLength,const int numDigits)711*ebfedea0SLionel Sambuc void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits)
712*ebfedea0SLionel Sambuc {
713*ebfedea0SLionel Sambuc Str255 		theStr255;
714*ebfedea0SLionel Sambuc 
715*ebfedea0SLionel Sambuc 
716*ebfedea0SLionel Sambuc 	NumToString(theNum,theStr255);
717*ebfedea0SLionel Sambuc 
718*ebfedea0SLionel Sambuc 
719*ebfedea0SLionel Sambuc 	if (numDigits > 0)
720*ebfedea0SLionel Sambuc 	{
721*ebfedea0SLionel Sambuc 	int 	charsToInsert;
722*ebfedea0SLionel Sambuc 
723*ebfedea0SLionel Sambuc 
724*ebfedea0SLionel Sambuc 		charsToInsert = numDigits - PStrLength(theStr255);
725*ebfedea0SLionel Sambuc 
726*ebfedea0SLionel Sambuc 		if (charsToInsert > 0)
727*ebfedea0SLionel Sambuc 		{
728*ebfedea0SLionel Sambuc 		char	tempString[256];
729*ebfedea0SLionel Sambuc 
730*ebfedea0SLionel Sambuc 			CopyCStrToCStr("",tempString,sizeof(tempString));
731*ebfedea0SLionel Sambuc 
732*ebfedea0SLionel Sambuc 			for (;charsToInsert > 0;charsToInsert--)
733*ebfedea0SLionel Sambuc 			{
734*ebfedea0SLionel Sambuc 				ConcatCStrToCStr("0",tempString,sizeof(tempString));
735*ebfedea0SLionel Sambuc 			}
736*ebfedea0SLionel Sambuc 
737*ebfedea0SLionel Sambuc 			ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
738*ebfedea0SLionel Sambuc 
739*ebfedea0SLionel Sambuc 			CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
740*ebfedea0SLionel Sambuc 		}
741*ebfedea0SLionel Sambuc 	}
742*ebfedea0SLionel Sambuc 
743*ebfedea0SLionel Sambuc 
744*ebfedea0SLionel Sambuc 	CopyPStrToCStr(theStr255,theCStr,maxCStrLength);
745*ebfedea0SLionel Sambuc }
746*ebfedea0SLionel Sambuc 
747*ebfedea0SLionel Sambuc 
748*ebfedea0SLionel Sambuc 
749*ebfedea0SLionel Sambuc 
750*ebfedea0SLionel Sambuc 
CopyUnsignedLongIntToCStr(const unsigned long theNum,char * theCStr,const int maxCStrLength)751*ebfedea0SLionel Sambuc void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength)
752*ebfedea0SLionel Sambuc {
753*ebfedea0SLionel Sambuc char			tempString[256];
754*ebfedea0SLionel Sambuc int				srcCharIndex,dstCharIndex;
755*ebfedea0SLionel Sambuc unsigned long	tempNum,quotient,remainder;
756*ebfedea0SLionel Sambuc 
757*ebfedea0SLionel Sambuc 
758*ebfedea0SLionel Sambuc 	if (theNum == 0)
759*ebfedea0SLionel Sambuc 	{
760*ebfedea0SLionel Sambuc 		CopyCStrToCStr("0",theCStr,maxCStrLength);
761*ebfedea0SLionel Sambuc 	}
762*ebfedea0SLionel Sambuc 
763*ebfedea0SLionel Sambuc 	else
764*ebfedea0SLionel Sambuc 	{
765*ebfedea0SLionel Sambuc 		srcCharIndex = 0;
766*ebfedea0SLionel Sambuc 
767*ebfedea0SLionel Sambuc 		tempNum = theNum;
768*ebfedea0SLionel Sambuc 
769*ebfedea0SLionel Sambuc 		for (;;)
770*ebfedea0SLionel Sambuc 		{
771*ebfedea0SLionel Sambuc 			if (srcCharIndex >= sizeof(tempString) - 1 || tempNum == 0)
772*ebfedea0SLionel Sambuc 			{
773*ebfedea0SLionel Sambuc 				for (dstCharIndex = 0;;)
774*ebfedea0SLionel Sambuc 				{
775*ebfedea0SLionel Sambuc 					if (dstCharIndex >= maxCStrLength - 1 || srcCharIndex <= 0)
776*ebfedea0SLionel Sambuc 					{
777*ebfedea0SLionel Sambuc 						theCStr[dstCharIndex] = 0;
778*ebfedea0SLionel Sambuc 
779*ebfedea0SLionel Sambuc 						break;
780*ebfedea0SLionel Sambuc 					}
781*ebfedea0SLionel Sambuc 
782*ebfedea0SLionel Sambuc 					theCStr[dstCharIndex++] = tempString[--srcCharIndex];
783*ebfedea0SLionel Sambuc 				}
784*ebfedea0SLionel Sambuc 
785*ebfedea0SLionel Sambuc 				break;
786*ebfedea0SLionel Sambuc 			}
787*ebfedea0SLionel Sambuc 
788*ebfedea0SLionel Sambuc 
789*ebfedea0SLionel Sambuc 			quotient = tempNum / 10;
790*ebfedea0SLionel Sambuc 
791*ebfedea0SLionel Sambuc 			remainder = tempNum - (quotient * 10);
792*ebfedea0SLionel Sambuc 
793*ebfedea0SLionel Sambuc 			tempString[srcCharIndex] = '0' + remainder;
794*ebfedea0SLionel Sambuc 
795*ebfedea0SLionel Sambuc 			srcCharIndex++;
796*ebfedea0SLionel Sambuc 
797*ebfedea0SLionel Sambuc 			tempNum = quotient;
798*ebfedea0SLionel Sambuc 		}
799*ebfedea0SLionel Sambuc 	}
800*ebfedea0SLionel Sambuc }
801*ebfedea0SLionel Sambuc 
802*ebfedea0SLionel Sambuc 
803*ebfedea0SLionel Sambuc 
804*ebfedea0SLionel Sambuc 
CopyLongIntToPStr(const long theNum,unsigned char * thePStr,const int maxPStrLength,const int numDigits)805*ebfedea0SLionel Sambuc void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits)
806*ebfedea0SLionel Sambuc {
807*ebfedea0SLionel Sambuc char	tempString[256];
808*ebfedea0SLionel Sambuc 
809*ebfedea0SLionel Sambuc 
810*ebfedea0SLionel Sambuc 	CopyLongIntToCStr(theNum,tempString,sizeof(tempString),numDigits);
811*ebfedea0SLionel Sambuc 
812*ebfedea0SLionel Sambuc 	CopyCStrToPStr(tempString,thePStr,maxPStrLength);
813*ebfedea0SLionel Sambuc }
814*ebfedea0SLionel Sambuc 
815*ebfedea0SLionel Sambuc 
816*ebfedea0SLionel Sambuc 
CopyLongIntToNewHandle(const long inTheLongInt,Handle * theHandle)817*ebfedea0SLionel Sambuc OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle)
818*ebfedea0SLionel Sambuc {
819*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
820*ebfedea0SLionel Sambuc char		tempString[32];
821*ebfedea0SLionel Sambuc 
822*ebfedea0SLionel Sambuc 
823*ebfedea0SLionel Sambuc 	CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
824*ebfedea0SLionel Sambuc 
825*ebfedea0SLionel Sambuc 	errCode = CopyCStrToNewHandle(tempString,theHandle);
826*ebfedea0SLionel Sambuc 
827*ebfedea0SLionel Sambuc 	return(errCode);
828*ebfedea0SLionel Sambuc }
829*ebfedea0SLionel Sambuc 
830*ebfedea0SLionel Sambuc 
CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle)831*ebfedea0SLionel Sambuc OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle)
832*ebfedea0SLionel Sambuc {
833*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
834*ebfedea0SLionel Sambuc char		tempString[32];
835*ebfedea0SLionel Sambuc 
836*ebfedea0SLionel Sambuc 
837*ebfedea0SLionel Sambuc 	CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
838*ebfedea0SLionel Sambuc 
839*ebfedea0SLionel Sambuc 	errCode = CopyCStrToExistingHandle(tempString,theHandle);
840*ebfedea0SLionel Sambuc 
841*ebfedea0SLionel Sambuc 	return(errCode);
842*ebfedea0SLionel Sambuc }
843*ebfedea0SLionel Sambuc 
844*ebfedea0SLionel Sambuc 
845*ebfedea0SLionel Sambuc 
846*ebfedea0SLionel Sambuc 
CopyCStrToExistingHandle(const char * theCString,Handle theHandle)847*ebfedea0SLionel Sambuc OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle)
848*ebfedea0SLionel Sambuc {
849*ebfedea0SLionel Sambuc OSErr	errCode = noErr;
850*ebfedea0SLionel Sambuc long	stringLength;
851*ebfedea0SLionel Sambuc 
852*ebfedea0SLionel Sambuc 
853*ebfedea0SLionel Sambuc 	if (theCString == nil)
854*ebfedea0SLionel Sambuc 	{
855*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theCString == nil"));
856*ebfedea0SLionel Sambuc 	}
857*ebfedea0SLionel Sambuc 
858*ebfedea0SLionel Sambuc 	if (theHandle == nil)
859*ebfedea0SLionel Sambuc 	{
860*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theHandle == nil"));
861*ebfedea0SLionel Sambuc 	}
862*ebfedea0SLionel Sambuc 
863*ebfedea0SLionel Sambuc 	if (*theHandle == nil)
864*ebfedea0SLionel Sambuc 	{
865*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, *theHandle == nil"));
866*ebfedea0SLionel Sambuc 	}
867*ebfedea0SLionel Sambuc 
868*ebfedea0SLionel Sambuc 
869*ebfedea0SLionel Sambuc 
870*ebfedea0SLionel Sambuc 	stringLength = CStrLength(theCString) + 1;
871*ebfedea0SLionel Sambuc 
872*ebfedea0SLionel Sambuc 	SetHandleSize(theHandle,stringLength);
873*ebfedea0SLionel Sambuc 
874*ebfedea0SLionel Sambuc 	if (GetHandleSize(theHandle) < stringLength)
875*ebfedea0SLionel Sambuc 	{
876*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyCStrToExistingHandle: Can't set Handle size, MemError() = ",MemError());
877*ebfedea0SLionel Sambuc 	}
878*ebfedea0SLionel Sambuc 
879*ebfedea0SLionel Sambuc 
880*ebfedea0SLionel Sambuc 	::BlockMove(theCString,*theHandle,stringLength);
881*ebfedea0SLionel Sambuc 
882*ebfedea0SLionel Sambuc 
883*ebfedea0SLionel Sambuc EXITPOINT:
884*ebfedea0SLionel Sambuc 
885*ebfedea0SLionel Sambuc 	return(errCode);
886*ebfedea0SLionel Sambuc }
887*ebfedea0SLionel Sambuc 
888*ebfedea0SLionel Sambuc 
889*ebfedea0SLionel Sambuc 
890*ebfedea0SLionel Sambuc 
891*ebfedea0SLionel Sambuc 
CopyCStrToNewHandle(const char * theCString,Handle * theHandle)892*ebfedea0SLionel Sambuc OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle)
893*ebfedea0SLionel Sambuc {
894*ebfedea0SLionel Sambuc OSErr	errCode = noErr;
895*ebfedea0SLionel Sambuc long	stringLength;
896*ebfedea0SLionel Sambuc 
897*ebfedea0SLionel Sambuc 
898*ebfedea0SLionel Sambuc 	if (theCString == nil)
899*ebfedea0SLionel Sambuc 	{
900*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theCString == nil"));
901*ebfedea0SLionel Sambuc 	}
902*ebfedea0SLionel Sambuc 
903*ebfedea0SLionel Sambuc 	if (theHandle == nil)
904*ebfedea0SLionel Sambuc 	{
905*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theHandle == nil"));
906*ebfedea0SLionel Sambuc 	}
907*ebfedea0SLionel Sambuc 
908*ebfedea0SLionel Sambuc 
909*ebfedea0SLionel Sambuc 
910*ebfedea0SLionel Sambuc 	stringLength = CStrLength(theCString) + 1;
911*ebfedea0SLionel Sambuc 
912*ebfedea0SLionel Sambuc 	*theHandle = NewHandle(stringLength);
913*ebfedea0SLionel Sambuc 
914*ebfedea0SLionel Sambuc 	if (*theHandle == nil)
915*ebfedea0SLionel Sambuc 	{
916*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyCStrToNewHandle: Can't allocate Handle, MemError() = ",MemError());
917*ebfedea0SLionel Sambuc 	}
918*ebfedea0SLionel Sambuc 
919*ebfedea0SLionel Sambuc 
920*ebfedea0SLionel Sambuc 	::BlockMove(theCString,**theHandle,stringLength);
921*ebfedea0SLionel Sambuc 
922*ebfedea0SLionel Sambuc 
923*ebfedea0SLionel Sambuc EXITPOINT:
924*ebfedea0SLionel Sambuc 
925*ebfedea0SLionel Sambuc 	return(errCode);
926*ebfedea0SLionel Sambuc }
927*ebfedea0SLionel Sambuc 
928*ebfedea0SLionel Sambuc 
929*ebfedea0SLionel Sambuc 
CopyPStrToNewHandle(const unsigned char * thePString,Handle * theHandle)930*ebfedea0SLionel Sambuc OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle)
931*ebfedea0SLionel Sambuc {
932*ebfedea0SLionel Sambuc OSErr	errCode = noErr;
933*ebfedea0SLionel Sambuc long	stringLength;
934*ebfedea0SLionel Sambuc 
935*ebfedea0SLionel Sambuc 
936*ebfedea0SLionel Sambuc 	if (thePString == nil)
937*ebfedea0SLionel Sambuc 	{
938*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, thePString == nil"));
939*ebfedea0SLionel Sambuc 	}
940*ebfedea0SLionel Sambuc 
941*ebfedea0SLionel Sambuc 	if (theHandle == nil)
942*ebfedea0SLionel Sambuc 	{
943*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, theHandle == nil"));
944*ebfedea0SLionel Sambuc 	}
945*ebfedea0SLionel Sambuc 
946*ebfedea0SLionel Sambuc 
947*ebfedea0SLionel Sambuc 
948*ebfedea0SLionel Sambuc 	stringLength = PStrLength(thePString) + 1;
949*ebfedea0SLionel Sambuc 
950*ebfedea0SLionel Sambuc 	*theHandle = NewHandle(stringLength);
951*ebfedea0SLionel Sambuc 
952*ebfedea0SLionel Sambuc 	if (*theHandle == nil)
953*ebfedea0SLionel Sambuc 	{
954*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyPStrToNewHandle: Can't allocate Handle, MemError() = ",MemError());
955*ebfedea0SLionel Sambuc 	}
956*ebfedea0SLionel Sambuc 
957*ebfedea0SLionel Sambuc 
958*ebfedea0SLionel Sambuc 	if (stringLength > 1)
959*ebfedea0SLionel Sambuc 	{
960*ebfedea0SLionel Sambuc 		BlockMove(thePString + 1,**theHandle,stringLength - 1);
961*ebfedea0SLionel Sambuc 	}
962*ebfedea0SLionel Sambuc 
963*ebfedea0SLionel Sambuc 	(**theHandle)[stringLength - 1] = 0;
964*ebfedea0SLionel Sambuc 
965*ebfedea0SLionel Sambuc 
966*ebfedea0SLionel Sambuc EXITPOINT:
967*ebfedea0SLionel Sambuc 
968*ebfedea0SLionel Sambuc 	return(errCode);
969*ebfedea0SLionel Sambuc }
970*ebfedea0SLionel Sambuc 
971*ebfedea0SLionel Sambuc 
AppendPStrToHandle(const unsigned char * thePString,Handle theHandle,long * currentLength)972*ebfedea0SLionel Sambuc OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength)
973*ebfedea0SLionel Sambuc {
974*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
975*ebfedea0SLionel Sambuc char		tempString[256];
976*ebfedea0SLionel Sambuc 
977*ebfedea0SLionel Sambuc 
978*ebfedea0SLionel Sambuc 	CopyPStrToCStr(thePString,tempString,sizeof(tempString));
979*ebfedea0SLionel Sambuc 
980*ebfedea0SLionel Sambuc 	errCode = AppendCStrToHandle(tempString,theHandle,currentLength);
981*ebfedea0SLionel Sambuc 
982*ebfedea0SLionel Sambuc 
983*ebfedea0SLionel Sambuc EXITPOINT:
984*ebfedea0SLionel Sambuc 
985*ebfedea0SLionel Sambuc 	return(errCode);
986*ebfedea0SLionel Sambuc }
987*ebfedea0SLionel Sambuc 
988*ebfedea0SLionel Sambuc 
989*ebfedea0SLionel Sambuc 
AppendCStrToHandle(const char * theCString,Handle theHandle,long * currentLength,long * maxLength)990*ebfedea0SLionel Sambuc OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength,long *maxLength)
991*ebfedea0SLionel Sambuc {
992*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
993*ebfedea0SLionel Sambuc long		handleMaxLength,handleCurrentLength,stringLength,byteCount;
994*ebfedea0SLionel Sambuc 
995*ebfedea0SLionel Sambuc 
996*ebfedea0SLionel Sambuc 	if (theCString == nil)
997*ebfedea0SLionel Sambuc 	{
998*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theCString == nil"));
999*ebfedea0SLionel Sambuc 	}
1000*ebfedea0SLionel Sambuc 
1001*ebfedea0SLionel Sambuc 	if (theHandle == nil)
1002*ebfedea0SLionel Sambuc 	{
1003*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theHandle == nil"));
1004*ebfedea0SLionel Sambuc 	}
1005*ebfedea0SLionel Sambuc 
1006*ebfedea0SLionel Sambuc 
1007*ebfedea0SLionel Sambuc 	if (maxLength != nil)
1008*ebfedea0SLionel Sambuc 	{
1009*ebfedea0SLionel Sambuc 		handleMaxLength = *maxLength;
1010*ebfedea0SLionel Sambuc 	}
1011*ebfedea0SLionel Sambuc 
1012*ebfedea0SLionel Sambuc 	else
1013*ebfedea0SLionel Sambuc 	{
1014*ebfedea0SLionel Sambuc 		handleMaxLength = GetHandleSize(theHandle);
1015*ebfedea0SLionel Sambuc 	}
1016*ebfedea0SLionel Sambuc 
1017*ebfedea0SLionel Sambuc 
1018*ebfedea0SLionel Sambuc 	if (currentLength != nil && *currentLength >= 0)
1019*ebfedea0SLionel Sambuc 	{
1020*ebfedea0SLionel Sambuc 		handleCurrentLength = *currentLength;
1021*ebfedea0SLionel Sambuc 	}
1022*ebfedea0SLionel Sambuc 
1023*ebfedea0SLionel Sambuc 	else
1024*ebfedea0SLionel Sambuc 	{
1025*ebfedea0SLionel Sambuc 		handleCurrentLength = CStrLength(*theHandle);
1026*ebfedea0SLionel Sambuc 	}
1027*ebfedea0SLionel Sambuc 
1028*ebfedea0SLionel Sambuc 
1029*ebfedea0SLionel Sambuc 	stringLength = CStrLength(theCString);
1030*ebfedea0SLionel Sambuc 
1031*ebfedea0SLionel Sambuc 	byteCount = handleCurrentLength + stringLength + 1;
1032*ebfedea0SLionel Sambuc 
1033*ebfedea0SLionel Sambuc 	if (byteCount > handleMaxLength)
1034*ebfedea0SLionel Sambuc 	{
1035*ebfedea0SLionel Sambuc 		SetHandleSize(theHandle,handleCurrentLength + stringLength + 1);
1036*ebfedea0SLionel Sambuc 
1037*ebfedea0SLionel Sambuc 		if (maxLength != nil)
1038*ebfedea0SLionel Sambuc 		{
1039*ebfedea0SLionel Sambuc 			*maxLength = GetHandleSize(theHandle);
1040*ebfedea0SLionel Sambuc 
1041*ebfedea0SLionel Sambuc 			handleMaxLength = *maxLength;
1042*ebfedea0SLionel Sambuc 		}
1043*ebfedea0SLionel Sambuc 
1044*ebfedea0SLionel Sambuc 		else
1045*ebfedea0SLionel Sambuc 		{
1046*ebfedea0SLionel Sambuc 			handleMaxLength = GetHandleSize(theHandle);
1047*ebfedea0SLionel Sambuc 		}
1048*ebfedea0SLionel Sambuc 
1049*ebfedea0SLionel Sambuc 		if (byteCount > handleMaxLength)
1050*ebfedea0SLionel Sambuc 		{
1051*ebfedea0SLionel Sambuc 			SetErrorMessageAndLongIntAndBail("AppendCStrToHandle: Can't increase Handle allocation, MemError() = ",MemError());
1052*ebfedea0SLionel Sambuc 		}
1053*ebfedea0SLionel Sambuc 	}
1054*ebfedea0SLionel Sambuc 
1055*ebfedea0SLionel Sambuc 
1056*ebfedea0SLionel Sambuc 	BlockMove(theCString,*theHandle + handleCurrentLength,stringLength + 1);
1057*ebfedea0SLionel Sambuc 
1058*ebfedea0SLionel Sambuc 
1059*ebfedea0SLionel Sambuc 	if (currentLength != nil)
1060*ebfedea0SLionel Sambuc 	{
1061*ebfedea0SLionel Sambuc 		*currentLength += stringLength;
1062*ebfedea0SLionel Sambuc 	}
1063*ebfedea0SLionel Sambuc 
1064*ebfedea0SLionel Sambuc 
1065*ebfedea0SLionel Sambuc 	errCode = noErr;
1066*ebfedea0SLionel Sambuc 
1067*ebfedea0SLionel Sambuc 
1068*ebfedea0SLionel Sambuc EXITPOINT:
1069*ebfedea0SLionel Sambuc 
1070*ebfedea0SLionel Sambuc 	return(errCode);
1071*ebfedea0SLionel Sambuc }
1072*ebfedea0SLionel Sambuc 
1073*ebfedea0SLionel Sambuc 
1074*ebfedea0SLionel Sambuc 
AppendCharsToHandle(const char * theChars,const int numChars,Handle theHandle,long * currentLength,long * maxLength)1075*ebfedea0SLionel Sambuc OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength,long *maxLength)
1076*ebfedea0SLionel Sambuc {
1077*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
1078*ebfedea0SLionel Sambuc long		handleMaxLength,handleCurrentLength,byteCount;
1079*ebfedea0SLionel Sambuc 
1080*ebfedea0SLionel Sambuc 
1081*ebfedea0SLionel Sambuc 	if (theChars == nil)
1082*ebfedea0SLionel Sambuc 	{
1083*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theChars == nil"));
1084*ebfedea0SLionel Sambuc 	}
1085*ebfedea0SLionel Sambuc 
1086*ebfedea0SLionel Sambuc 	if (theHandle == nil)
1087*ebfedea0SLionel Sambuc 	{
1088*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theHandle == nil"));
1089*ebfedea0SLionel Sambuc 	}
1090*ebfedea0SLionel Sambuc 
1091*ebfedea0SLionel Sambuc 
1092*ebfedea0SLionel Sambuc 	if (maxLength != nil)
1093*ebfedea0SLionel Sambuc 	{
1094*ebfedea0SLionel Sambuc 		handleMaxLength = *maxLength;
1095*ebfedea0SLionel Sambuc 	}
1096*ebfedea0SLionel Sambuc 
1097*ebfedea0SLionel Sambuc 	else
1098*ebfedea0SLionel Sambuc 	{
1099*ebfedea0SLionel Sambuc 		handleMaxLength = GetHandleSize(theHandle);
1100*ebfedea0SLionel Sambuc 	}
1101*ebfedea0SLionel Sambuc 
1102*ebfedea0SLionel Sambuc 
1103*ebfedea0SLionel Sambuc 	if (currentLength != nil && *currentLength >= 0)
1104*ebfedea0SLionel Sambuc 	{
1105*ebfedea0SLionel Sambuc 		handleCurrentLength = *currentLength;
1106*ebfedea0SLionel Sambuc 	}
1107*ebfedea0SLionel Sambuc 
1108*ebfedea0SLionel Sambuc 	else
1109*ebfedea0SLionel Sambuc 	{
1110*ebfedea0SLionel Sambuc 		handleCurrentLength = CStrLength(*theHandle);
1111*ebfedea0SLionel Sambuc 	}
1112*ebfedea0SLionel Sambuc 
1113*ebfedea0SLionel Sambuc 
1114*ebfedea0SLionel Sambuc 	byteCount = handleCurrentLength + numChars + 1;
1115*ebfedea0SLionel Sambuc 
1116*ebfedea0SLionel Sambuc 	if (byteCount > handleMaxLength)
1117*ebfedea0SLionel Sambuc 	{
1118*ebfedea0SLionel Sambuc 		SetHandleSize(theHandle,handleCurrentLength + numChars + 1);
1119*ebfedea0SLionel Sambuc 
1120*ebfedea0SLionel Sambuc 		if (maxLength != nil)
1121*ebfedea0SLionel Sambuc 		{
1122*ebfedea0SLionel Sambuc 			*maxLength = GetHandleSize(theHandle);
1123*ebfedea0SLionel Sambuc 
1124*ebfedea0SLionel Sambuc 			handleMaxLength = *maxLength;
1125*ebfedea0SLionel Sambuc 		}
1126*ebfedea0SLionel Sambuc 
1127*ebfedea0SLionel Sambuc 		else
1128*ebfedea0SLionel Sambuc 		{
1129*ebfedea0SLionel Sambuc 			handleMaxLength = GetHandleSize(theHandle);
1130*ebfedea0SLionel Sambuc 		}
1131*ebfedea0SLionel Sambuc 
1132*ebfedea0SLionel Sambuc 		if (byteCount > handleMaxLength)
1133*ebfedea0SLionel Sambuc 		{
1134*ebfedea0SLionel Sambuc 			SetErrorMessageAndLongIntAndBail("AppendCharsToHandle: Can't increase Handle allocation, MemError() = ",MemError());
1135*ebfedea0SLionel Sambuc 		}
1136*ebfedea0SLionel Sambuc 	}
1137*ebfedea0SLionel Sambuc 
1138*ebfedea0SLionel Sambuc 
1139*ebfedea0SLionel Sambuc 	BlockMove(theChars,*theHandle + handleCurrentLength,numChars);
1140*ebfedea0SLionel Sambuc 
1141*ebfedea0SLionel Sambuc 	(*theHandle)[handleCurrentLength + numChars] = '\0';
1142*ebfedea0SLionel Sambuc 
1143*ebfedea0SLionel Sambuc 	if (currentLength != nil)
1144*ebfedea0SLionel Sambuc 	{
1145*ebfedea0SLionel Sambuc 		*currentLength += numChars;
1146*ebfedea0SLionel Sambuc 	}
1147*ebfedea0SLionel Sambuc 
1148*ebfedea0SLionel Sambuc 
1149*ebfedea0SLionel Sambuc 	errCode = noErr;
1150*ebfedea0SLionel Sambuc 
1151*ebfedea0SLionel Sambuc 
1152*ebfedea0SLionel Sambuc EXITPOINT:
1153*ebfedea0SLionel Sambuc 
1154*ebfedea0SLionel Sambuc 	return(errCode);
1155*ebfedea0SLionel Sambuc }
1156*ebfedea0SLionel Sambuc 
1157*ebfedea0SLionel Sambuc 
1158*ebfedea0SLionel Sambuc 
AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long * currentLength)1159*ebfedea0SLionel Sambuc OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength)
1160*ebfedea0SLionel Sambuc {
1161*ebfedea0SLionel Sambuc OSErr		errCode = noErr;
1162*ebfedea0SLionel Sambuc char		tempString[32];
1163*ebfedea0SLionel Sambuc 
1164*ebfedea0SLionel Sambuc 
1165*ebfedea0SLionel Sambuc 	CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
1166*ebfedea0SLionel Sambuc 
1167*ebfedea0SLionel Sambuc 	errCode = AppendCStrToHandle(tempString,theHandle,currentLength);
1168*ebfedea0SLionel Sambuc 
1169*ebfedea0SLionel Sambuc 	return(errCode);
1170*ebfedea0SLionel Sambuc }
1171*ebfedea0SLionel Sambuc 
1172*ebfedea0SLionel Sambuc 
1173*ebfedea0SLionel Sambuc 
1174*ebfedea0SLionel Sambuc 
CStrLength(const char * theCString)1175*ebfedea0SLionel Sambuc long CStrLength(const char *theCString)
1176*ebfedea0SLionel Sambuc {
1177*ebfedea0SLionel Sambuc long	cStrLength = 0;
1178*ebfedea0SLionel Sambuc 
1179*ebfedea0SLionel Sambuc 
1180*ebfedea0SLionel Sambuc 	if (theCString != nil)
1181*ebfedea0SLionel Sambuc 	{
1182*ebfedea0SLionel Sambuc 		for (cStrLength = 0;theCString[cStrLength] != 0;cStrLength++)
1183*ebfedea0SLionel Sambuc 		{
1184*ebfedea0SLionel Sambuc 
1185*ebfedea0SLionel Sambuc 		}
1186*ebfedea0SLionel Sambuc 	}
1187*ebfedea0SLionel Sambuc 
1188*ebfedea0SLionel Sambuc 
1189*ebfedea0SLionel Sambuc 	return(cStrLength);
1190*ebfedea0SLionel Sambuc }
1191*ebfedea0SLionel Sambuc 
1192*ebfedea0SLionel Sambuc 
1193*ebfedea0SLionel Sambuc 
PStrLength(const unsigned char * thePString)1194*ebfedea0SLionel Sambuc long PStrLength(const unsigned char *thePString)
1195*ebfedea0SLionel Sambuc {
1196*ebfedea0SLionel Sambuc long	pStrLength = 0;
1197*ebfedea0SLionel Sambuc 
1198*ebfedea0SLionel Sambuc 
1199*ebfedea0SLionel Sambuc 	if (thePString != nil)
1200*ebfedea0SLionel Sambuc 	{
1201*ebfedea0SLionel Sambuc 		pStrLength = thePString[0];
1202*ebfedea0SLionel Sambuc 	}
1203*ebfedea0SLionel Sambuc 
1204*ebfedea0SLionel Sambuc 
1205*ebfedea0SLionel Sambuc 	return(pStrLength);
1206*ebfedea0SLionel Sambuc }
1207*ebfedea0SLionel Sambuc 
1208*ebfedea0SLionel Sambuc 
1209*ebfedea0SLionel Sambuc 
1210*ebfedea0SLionel Sambuc 
1211*ebfedea0SLionel Sambuc 
ZeroMem(void * theMemPtr,const unsigned long numBytes)1212*ebfedea0SLionel Sambuc void ZeroMem(void *theMemPtr,const unsigned long numBytes)
1213*ebfedea0SLionel Sambuc {
1214*ebfedea0SLionel Sambuc unsigned char	*theBytePtr;
1215*ebfedea0SLionel Sambuc unsigned long	*theLongPtr;
1216*ebfedea0SLionel Sambuc unsigned long	numSingleBytes;
1217*ebfedea0SLionel Sambuc unsigned long	theNumBytes;
1218*ebfedea0SLionel Sambuc 
1219*ebfedea0SLionel Sambuc 
1220*ebfedea0SLionel Sambuc 	theNumBytes = numBytes;
1221*ebfedea0SLionel Sambuc 
1222*ebfedea0SLionel Sambuc 	if (theMemPtr != nil && theNumBytes > 0)
1223*ebfedea0SLionel Sambuc 	{
1224*ebfedea0SLionel Sambuc 		theBytePtr = (unsigned char	*) theMemPtr;
1225*ebfedea0SLionel Sambuc 
1226*ebfedea0SLionel Sambuc 		numSingleBytes = (unsigned long) theBytePtr & 0x0003;
1227*ebfedea0SLionel Sambuc 
1228*ebfedea0SLionel Sambuc 		while (numSingleBytes > 0)
1229*ebfedea0SLionel Sambuc 		{
1230*ebfedea0SLionel Sambuc 			*theBytePtr++ = 0;
1231*ebfedea0SLionel Sambuc 
1232*ebfedea0SLionel Sambuc 			theNumBytes--;
1233*ebfedea0SLionel Sambuc 			numSingleBytes--;
1234*ebfedea0SLionel Sambuc 		}
1235*ebfedea0SLionel Sambuc 
1236*ebfedea0SLionel Sambuc 
1237*ebfedea0SLionel Sambuc 		theLongPtr = (unsigned long	*) theBytePtr;
1238*ebfedea0SLionel Sambuc 
1239*ebfedea0SLionel Sambuc 		while (theNumBytes >= 4)
1240*ebfedea0SLionel Sambuc 		{
1241*ebfedea0SLionel Sambuc 			*theLongPtr++ = 0;
1242*ebfedea0SLionel Sambuc 
1243*ebfedea0SLionel Sambuc 			theNumBytes -= 4;
1244*ebfedea0SLionel Sambuc 		}
1245*ebfedea0SLionel Sambuc 
1246*ebfedea0SLionel Sambuc 
1247*ebfedea0SLionel Sambuc 		theBytePtr = (unsigned char	*) theLongPtr;
1248*ebfedea0SLionel Sambuc 
1249*ebfedea0SLionel Sambuc 		while (theNumBytes > 0)
1250*ebfedea0SLionel Sambuc 		{
1251*ebfedea0SLionel Sambuc 			*theBytePtr++ = 0;
1252*ebfedea0SLionel Sambuc 
1253*ebfedea0SLionel Sambuc 			theNumBytes--;
1254*ebfedea0SLionel Sambuc 		}
1255*ebfedea0SLionel Sambuc 	}
1256*ebfedea0SLionel Sambuc }
1257*ebfedea0SLionel Sambuc 
1258*ebfedea0SLionel Sambuc 
1259*ebfedea0SLionel Sambuc 
1260*ebfedea0SLionel Sambuc 
FindCharInCStr(const char theChar,const char * theCString)1261*ebfedea0SLionel Sambuc char *FindCharInCStr(const char theChar,const char *theCString)
1262*ebfedea0SLionel Sambuc {
1263*ebfedea0SLionel Sambuc char	*theStringSearchPtr;
1264*ebfedea0SLionel Sambuc 
1265*ebfedea0SLionel Sambuc 
1266*ebfedea0SLionel Sambuc 	theStringSearchPtr = (char	*) theCString;
1267*ebfedea0SLionel Sambuc 
1268*ebfedea0SLionel Sambuc 	if (theStringSearchPtr != nil)
1269*ebfedea0SLionel Sambuc 	{
1270*ebfedea0SLionel Sambuc 		while (*theStringSearchPtr != '\0' && *theStringSearchPtr != theChar)
1271*ebfedea0SLionel Sambuc 		{
1272*ebfedea0SLionel Sambuc 			theStringSearchPtr++;
1273*ebfedea0SLionel Sambuc 		}
1274*ebfedea0SLionel Sambuc 
1275*ebfedea0SLionel Sambuc 		if (*theStringSearchPtr == '\0')
1276*ebfedea0SLionel Sambuc 		{
1277*ebfedea0SLionel Sambuc 			theStringSearchPtr = nil;
1278*ebfedea0SLionel Sambuc 		}
1279*ebfedea0SLionel Sambuc 	}
1280*ebfedea0SLionel Sambuc 
1281*ebfedea0SLionel Sambuc 	return(theStringSearchPtr);
1282*ebfedea0SLionel Sambuc }
1283*ebfedea0SLionel Sambuc 
1284*ebfedea0SLionel Sambuc 
1285*ebfedea0SLionel Sambuc 
FindCharOffsetInCStr(const char theChar,const char * theCString,const Boolean inIgnoreCase)1286*ebfedea0SLionel Sambuc long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase)
1287*ebfedea0SLionel Sambuc {
1288*ebfedea0SLionel Sambuc long	theOffset = -1;
1289*ebfedea0SLionel Sambuc 
1290*ebfedea0SLionel Sambuc 
1291*ebfedea0SLionel Sambuc 	if (theCString != nil)
1292*ebfedea0SLionel Sambuc 	{
1293*ebfedea0SLionel Sambuc 		theOffset = 0;
1294*ebfedea0SLionel Sambuc 
1295*ebfedea0SLionel Sambuc 
1296*ebfedea0SLionel Sambuc 		if (inIgnoreCase)
1297*ebfedea0SLionel Sambuc 		{
1298*ebfedea0SLionel Sambuc 		char	searchChar = theChar;
1299*ebfedea0SLionel Sambuc 
1300*ebfedea0SLionel Sambuc 			if (searchChar >= 'a' && searchChar <= 'z')
1301*ebfedea0SLionel Sambuc 			{
1302*ebfedea0SLionel Sambuc 				searchChar = searchChar - 'a' + 'A';
1303*ebfedea0SLionel Sambuc 			}
1304*ebfedea0SLionel Sambuc 
1305*ebfedea0SLionel Sambuc 
1306*ebfedea0SLionel Sambuc 			while (*theCString != 0)
1307*ebfedea0SLionel Sambuc 			{
1308*ebfedea0SLionel Sambuc 			char	currentChar = *theCString;
1309*ebfedea0SLionel Sambuc 
1310*ebfedea0SLionel Sambuc 				if (currentChar >= 'a' && currentChar <= 'z')
1311*ebfedea0SLionel Sambuc 				{
1312*ebfedea0SLionel Sambuc 					currentChar = currentChar - 'a' + 'A';
1313*ebfedea0SLionel Sambuc 				}
1314*ebfedea0SLionel Sambuc 
1315*ebfedea0SLionel Sambuc 				if (currentChar == searchChar)
1316*ebfedea0SLionel Sambuc 				{
1317*ebfedea0SLionel Sambuc 					break;
1318*ebfedea0SLionel Sambuc 				}
1319*ebfedea0SLionel Sambuc 
1320*ebfedea0SLionel Sambuc 				theCString++;
1321*ebfedea0SLionel Sambuc 				theOffset++;
1322*ebfedea0SLionel Sambuc 			}
1323*ebfedea0SLionel Sambuc 		}
1324*ebfedea0SLionel Sambuc 
1325*ebfedea0SLionel Sambuc 		else
1326*ebfedea0SLionel Sambuc 		{
1327*ebfedea0SLionel Sambuc 			while (*theCString != 0 && *theCString != theChar)
1328*ebfedea0SLionel Sambuc 			{
1329*ebfedea0SLionel Sambuc 				theCString++;
1330*ebfedea0SLionel Sambuc 				theOffset++;
1331*ebfedea0SLionel Sambuc 			}
1332*ebfedea0SLionel Sambuc 		}
1333*ebfedea0SLionel Sambuc 
1334*ebfedea0SLionel Sambuc 		if (*theCString == 0)
1335*ebfedea0SLionel Sambuc 		{
1336*ebfedea0SLionel Sambuc 			theOffset = -1;
1337*ebfedea0SLionel Sambuc 		}
1338*ebfedea0SLionel Sambuc 	}
1339*ebfedea0SLionel Sambuc 
1340*ebfedea0SLionel Sambuc 	return(theOffset);
1341*ebfedea0SLionel Sambuc }
1342*ebfedea0SLionel Sambuc 
1343*ebfedea0SLionel Sambuc 
FindCStrOffsetInCStr(const char * theCSubstring,const char * theCString,const Boolean inIgnoreCase)1344*ebfedea0SLionel Sambuc long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase)
1345*ebfedea0SLionel Sambuc {
1346*ebfedea0SLionel Sambuc long	theOffset = -1;
1347*ebfedea0SLionel Sambuc 
1348*ebfedea0SLionel Sambuc 
1349*ebfedea0SLionel Sambuc 	if (theCSubstring != nil && theCString != nil)
1350*ebfedea0SLionel Sambuc 	{
1351*ebfedea0SLionel Sambuc 		for (theOffset = 0;;theOffset++)
1352*ebfedea0SLionel Sambuc 		{
1353*ebfedea0SLionel Sambuc 			if (theCString[theOffset] == 0)
1354*ebfedea0SLionel Sambuc 			{
1355*ebfedea0SLionel Sambuc 				theOffset = -1;
1356*ebfedea0SLionel Sambuc 
1357*ebfedea0SLionel Sambuc 				goto EXITPOINT;
1358*ebfedea0SLionel Sambuc 			}
1359*ebfedea0SLionel Sambuc 
1360*ebfedea0SLionel Sambuc 
1361*ebfedea0SLionel Sambuc 			for (const char	*tempSubstringPtr = theCSubstring,*tempCStringPtr = theCString + theOffset;;tempSubstringPtr++,tempCStringPtr++)
1362*ebfedea0SLionel Sambuc 			{
1363*ebfedea0SLionel Sambuc 				if (*tempSubstringPtr == 0)
1364*ebfedea0SLionel Sambuc 				{
1365*ebfedea0SLionel Sambuc 					goto EXITPOINT;
1366*ebfedea0SLionel Sambuc 				}
1367*ebfedea0SLionel Sambuc 
1368*ebfedea0SLionel Sambuc 				else if (*tempCStringPtr == 0)
1369*ebfedea0SLionel Sambuc 				{
1370*ebfedea0SLionel Sambuc 					break;
1371*ebfedea0SLionel Sambuc 				}
1372*ebfedea0SLionel Sambuc 
1373*ebfedea0SLionel Sambuc 			char	searchChar = *tempSubstringPtr;
1374*ebfedea0SLionel Sambuc 			char	currentChar = *tempCStringPtr;
1375*ebfedea0SLionel Sambuc 
1376*ebfedea0SLionel Sambuc 				if (inIgnoreCase && searchChar >= 'a' && searchChar <= 'z')
1377*ebfedea0SLionel Sambuc 				{
1378*ebfedea0SLionel Sambuc 					searchChar = searchChar - 'a' + 'A';
1379*ebfedea0SLionel Sambuc 				}
1380*ebfedea0SLionel Sambuc 
1381*ebfedea0SLionel Sambuc 				if (inIgnoreCase && currentChar >= 'a' && currentChar <= 'z')
1382*ebfedea0SLionel Sambuc 				{
1383*ebfedea0SLionel Sambuc 					currentChar = currentChar - 'a' + 'A';
1384*ebfedea0SLionel Sambuc 				}
1385*ebfedea0SLionel Sambuc 
1386*ebfedea0SLionel Sambuc 				if (currentChar != searchChar)
1387*ebfedea0SLionel Sambuc 				{
1388*ebfedea0SLionel Sambuc 					break;
1389*ebfedea0SLionel Sambuc 				}
1390*ebfedea0SLionel Sambuc 			}
1391*ebfedea0SLionel Sambuc 		}
1392*ebfedea0SLionel Sambuc 
1393*ebfedea0SLionel Sambuc 		theOffset = -1;
1394*ebfedea0SLionel Sambuc 	}
1395*ebfedea0SLionel Sambuc 
1396*ebfedea0SLionel Sambuc 
1397*ebfedea0SLionel Sambuc EXITPOINT:
1398*ebfedea0SLionel Sambuc 
1399*ebfedea0SLionel Sambuc 	return(theOffset);
1400*ebfedea0SLionel Sambuc }
1401*ebfedea0SLionel Sambuc 
1402*ebfedea0SLionel Sambuc 
1403*ebfedea0SLionel Sambuc 
InsertCStrIntoCStr(const char * theSrcCStr,const int theInsertionOffset,char * theDstCStr,const int maxDstStrLength)1404*ebfedea0SLionel Sambuc void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength)
1405*ebfedea0SLionel Sambuc {
1406*ebfedea0SLionel Sambuc int		currentLength;
1407*ebfedea0SLionel Sambuc int		insertLength;
1408*ebfedea0SLionel Sambuc int		numCharsToInsert;
1409*ebfedea0SLionel Sambuc int		numCharsToShift;
1410*ebfedea0SLionel Sambuc 
1411*ebfedea0SLionel Sambuc 
1412*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0 && theInsertionOffset < maxDstStrLength - 1)
1413*ebfedea0SLionel Sambuc 	{
1414*ebfedea0SLionel Sambuc 		currentLength = CStrLength(theDstCStr);
1415*ebfedea0SLionel Sambuc 
1416*ebfedea0SLionel Sambuc 		insertLength = CStrLength(theSrcCStr);
1417*ebfedea0SLionel Sambuc 
1418*ebfedea0SLionel Sambuc 
1419*ebfedea0SLionel Sambuc 		if (theInsertionOffset + insertLength < maxDstStrLength - 1)
1420*ebfedea0SLionel Sambuc 		{
1421*ebfedea0SLionel Sambuc 			numCharsToInsert = insertLength;
1422*ebfedea0SLionel Sambuc 		}
1423*ebfedea0SLionel Sambuc 
1424*ebfedea0SLionel Sambuc 		else
1425*ebfedea0SLionel Sambuc 		{
1426*ebfedea0SLionel Sambuc 			numCharsToInsert = maxDstStrLength - 1 - theInsertionOffset;
1427*ebfedea0SLionel Sambuc 		}
1428*ebfedea0SLionel Sambuc 
1429*ebfedea0SLionel Sambuc 
1430*ebfedea0SLionel Sambuc 		if (numCharsToInsert + currentLength < maxDstStrLength - 1)
1431*ebfedea0SLionel Sambuc 		{
1432*ebfedea0SLionel Sambuc 			numCharsToShift = currentLength - theInsertionOffset;
1433*ebfedea0SLionel Sambuc 		}
1434*ebfedea0SLionel Sambuc 
1435*ebfedea0SLionel Sambuc 		else
1436*ebfedea0SLionel Sambuc 		{
1437*ebfedea0SLionel Sambuc 			numCharsToShift = maxDstStrLength - 1 - theInsertionOffset - numCharsToInsert;
1438*ebfedea0SLionel Sambuc 		}
1439*ebfedea0SLionel Sambuc 
1440*ebfedea0SLionel Sambuc 
1441*ebfedea0SLionel Sambuc 		if (numCharsToShift > 0)
1442*ebfedea0SLionel Sambuc 		{
1443*ebfedea0SLionel Sambuc 			BlockMove(theDstCStr + theInsertionOffset,theDstCStr + theInsertionOffset + numCharsToInsert,numCharsToShift);
1444*ebfedea0SLionel Sambuc 		}
1445*ebfedea0SLionel Sambuc 
1446*ebfedea0SLionel Sambuc 		if (numCharsToInsert > 0)
1447*ebfedea0SLionel Sambuc 		{
1448*ebfedea0SLionel Sambuc 			BlockMove(theSrcCStr,theDstCStr + theInsertionOffset,numCharsToInsert);
1449*ebfedea0SLionel Sambuc 		}
1450*ebfedea0SLionel Sambuc 
1451*ebfedea0SLionel Sambuc 		theDstCStr[theInsertionOffset + numCharsToInsert + numCharsToShift] = 0;
1452*ebfedea0SLionel Sambuc 	}
1453*ebfedea0SLionel Sambuc }
1454*ebfedea0SLionel Sambuc 
1455*ebfedea0SLionel Sambuc 
1456*ebfedea0SLionel Sambuc 
InsertPStrIntoCStr(const unsigned char * theSrcPStr,const int theInsertionOffset,char * theDstCStr,const int maxDstStrLength)1457*ebfedea0SLionel Sambuc void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength)
1458*ebfedea0SLionel Sambuc {
1459*ebfedea0SLionel Sambuc int		currentLength;
1460*ebfedea0SLionel Sambuc int		insertLength;
1461*ebfedea0SLionel Sambuc int		numCharsToInsert;
1462*ebfedea0SLionel Sambuc int		numCharsToShift;
1463*ebfedea0SLionel Sambuc 
1464*ebfedea0SLionel Sambuc 
1465*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && theSrcPStr != nil && maxDstStrLength > 0 && theInsertionOffset < maxDstStrLength - 1)
1466*ebfedea0SLionel Sambuc 	{
1467*ebfedea0SLionel Sambuc 		currentLength = CStrLength(theDstCStr);
1468*ebfedea0SLionel Sambuc 
1469*ebfedea0SLionel Sambuc 		insertLength = PStrLength(theSrcPStr);
1470*ebfedea0SLionel Sambuc 
1471*ebfedea0SLionel Sambuc 
1472*ebfedea0SLionel Sambuc 		if (theInsertionOffset + insertLength < maxDstStrLength - 1)
1473*ebfedea0SLionel Sambuc 		{
1474*ebfedea0SLionel Sambuc 			numCharsToInsert = insertLength;
1475*ebfedea0SLionel Sambuc 		}
1476*ebfedea0SLionel Sambuc 
1477*ebfedea0SLionel Sambuc 		else
1478*ebfedea0SLionel Sambuc 		{
1479*ebfedea0SLionel Sambuc 			numCharsToInsert = maxDstStrLength - 1 - theInsertionOffset;
1480*ebfedea0SLionel Sambuc 		}
1481*ebfedea0SLionel Sambuc 
1482*ebfedea0SLionel Sambuc 
1483*ebfedea0SLionel Sambuc 		if (numCharsToInsert + currentLength < maxDstStrLength - 1)
1484*ebfedea0SLionel Sambuc 		{
1485*ebfedea0SLionel Sambuc 			numCharsToShift = currentLength - theInsertionOffset;
1486*ebfedea0SLionel Sambuc 		}
1487*ebfedea0SLionel Sambuc 
1488*ebfedea0SLionel Sambuc 		else
1489*ebfedea0SLionel Sambuc 		{
1490*ebfedea0SLionel Sambuc 			numCharsToShift = maxDstStrLength - 1 - theInsertionOffset - numCharsToInsert;
1491*ebfedea0SLionel Sambuc 		}
1492*ebfedea0SLionel Sambuc 
1493*ebfedea0SLionel Sambuc 
1494*ebfedea0SLionel Sambuc 		if (numCharsToShift > 0)
1495*ebfedea0SLionel Sambuc 		{
1496*ebfedea0SLionel Sambuc 			BlockMove(theDstCStr + theInsertionOffset,theDstCStr + theInsertionOffset + numCharsToInsert,numCharsToShift);
1497*ebfedea0SLionel Sambuc 		}
1498*ebfedea0SLionel Sambuc 
1499*ebfedea0SLionel Sambuc 		if (numCharsToInsert > 0)
1500*ebfedea0SLionel Sambuc 		{
1501*ebfedea0SLionel Sambuc 			BlockMove(theSrcPStr + 1,theDstCStr + theInsertionOffset,numCharsToInsert);
1502*ebfedea0SLionel Sambuc 		}
1503*ebfedea0SLionel Sambuc 
1504*ebfedea0SLionel Sambuc 		theDstCStr[theInsertionOffset + numCharsToInsert + numCharsToShift] = 0;
1505*ebfedea0SLionel Sambuc 	}
1506*ebfedea0SLionel Sambuc }
1507*ebfedea0SLionel Sambuc 
1508*ebfedea0SLionel Sambuc 
1509*ebfedea0SLionel Sambuc 
InsertCStrIntoHandle(const char * theCString,Handle theHandle,const long inInsertOffset)1510*ebfedea0SLionel Sambuc OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset)
1511*ebfedea0SLionel Sambuc {
1512*ebfedea0SLionel Sambuc OSErr	errCode;
1513*ebfedea0SLionel Sambuc int		currentLength;
1514*ebfedea0SLionel Sambuc int		insertLength;
1515*ebfedea0SLionel Sambuc 
1516*ebfedea0SLionel Sambuc 
1517*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(theCString,"InsertCStrIntoHandle: Bad parameter, theCString == nil");
1518*ebfedea0SLionel Sambuc 
1519*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(theHandle,"InsertCStrIntoHandle: Bad parameter, theHandle == nil");
1520*ebfedea0SLionel Sambuc 
1521*ebfedea0SLionel Sambuc 	currentLength = CStrLength(*theHandle);
1522*ebfedea0SLionel Sambuc 
1523*ebfedea0SLionel Sambuc 	if (currentLength + 1 > ::GetHandleSize(theHandle))
1524*ebfedea0SLionel Sambuc 	{
1525*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail("InsertCStrIntoHandle: Handle has been overflowed");
1526*ebfedea0SLionel Sambuc 	}
1527*ebfedea0SLionel Sambuc 
1528*ebfedea0SLionel Sambuc 	if (inInsertOffset > currentLength)
1529*ebfedea0SLionel Sambuc 	{
1530*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail("InsertCStrIntoHandle: Insertion offset is greater than string length");
1531*ebfedea0SLionel Sambuc 	}
1532*ebfedea0SLionel Sambuc 
1533*ebfedea0SLionel Sambuc 	insertLength = CStrLength(theCString);
1534*ebfedea0SLionel Sambuc 
1535*ebfedea0SLionel Sambuc 	::SetHandleSize(theHandle,currentLength + 1 + insertLength);
1536*ebfedea0SLionel Sambuc 
1537*ebfedea0SLionel Sambuc 	if (::GetHandleSize(theHandle) < currentLength + 1 + insertLength)
1538*ebfedea0SLionel Sambuc 	{
1539*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("InsertCStrIntoHandle: Can't expand storage for Handle, MemError() = ",MemError());
1540*ebfedea0SLionel Sambuc 	}
1541*ebfedea0SLionel Sambuc 
1542*ebfedea0SLionel Sambuc 	::BlockMove(*theHandle + inInsertOffset,*theHandle + inInsertOffset + insertLength,currentLength - inInsertOffset + 1);
1543*ebfedea0SLionel Sambuc 
1544*ebfedea0SLionel Sambuc 	::BlockMove(theCString,*theHandle + inInsertOffset,insertLength);
1545*ebfedea0SLionel Sambuc 
1546*ebfedea0SLionel Sambuc 
1547*ebfedea0SLionel Sambuc 	errCode = noErr;
1548*ebfedea0SLionel Sambuc 
1549*ebfedea0SLionel Sambuc 
1550*ebfedea0SLionel Sambuc EXITPOINT:
1551*ebfedea0SLionel Sambuc 
1552*ebfedea0SLionel Sambuc 	return(errCode);
1553*ebfedea0SLionel Sambuc }
1554*ebfedea0SLionel Sambuc 
1555*ebfedea0SLionel Sambuc 
1556*ebfedea0SLionel Sambuc 
1557*ebfedea0SLionel Sambuc 
CopyCStrAndInsert1LongIntIntoCStr(const char * theSrcCStr,const long theNum,char * theDstCStr,const int maxDstStrLength)1558*ebfedea0SLionel Sambuc void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
1559*ebfedea0SLionel Sambuc {
1560*ebfedea0SLionel Sambuc 	CopyCStrAndInsertCStrLongIntIntoCStr(theSrcCStr,nil,theNum,theDstCStr,maxDstStrLength);
1561*ebfedea0SLionel Sambuc }
1562*ebfedea0SLionel Sambuc 
1563*ebfedea0SLionel Sambuc 
CopyCStrAndInsert2LongIntsIntoCStr(const char * theSrcCStr,const long long1,const long long2,char * theDstCStr,const int maxDstStrLength)1564*ebfedea0SLionel Sambuc void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength)
1565*ebfedea0SLionel Sambuc {
1566*ebfedea0SLionel Sambuc const long	theLongInts[] = { long1,long2 };
1567*ebfedea0SLionel Sambuc 
1568*ebfedea0SLionel Sambuc 	CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,nil,theLongInts,theDstCStr,maxDstStrLength);
1569*ebfedea0SLionel Sambuc }
1570*ebfedea0SLionel Sambuc 
1571*ebfedea0SLionel Sambuc 
CopyCStrAndInsert3LongIntsIntoCStr(const char * theSrcCStr,const long long1,const long long2,const long long3,char * theDstCStr,const int maxDstStrLength)1572*ebfedea0SLionel Sambuc void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength)
1573*ebfedea0SLionel Sambuc {
1574*ebfedea0SLionel Sambuc const long	theLongInts[] = { long1,long2,long3 };
1575*ebfedea0SLionel Sambuc 
1576*ebfedea0SLionel Sambuc 	CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,nil,theLongInts,theDstCStr,maxDstStrLength);
1577*ebfedea0SLionel Sambuc }
1578*ebfedea0SLionel Sambuc 
1579*ebfedea0SLionel Sambuc 
CopyCStrAndInsertCStrIntoCStr(const char * theSrcCStr,const char * theInsertCStr,char * theDstCStr,const int maxDstStrLength)1580*ebfedea0SLionel Sambuc void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength)
1581*ebfedea0SLionel Sambuc {
1582*ebfedea0SLionel Sambuc const char	*theCStrs[2] = { theInsertCStr,nil };
1583*ebfedea0SLionel Sambuc 
1584*ebfedea0SLionel Sambuc 	CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,theCStrs,nil,theDstCStr,maxDstStrLength);
1585*ebfedea0SLionel Sambuc }
1586*ebfedea0SLionel Sambuc 
1587*ebfedea0SLionel Sambuc 
1588*ebfedea0SLionel Sambuc 
CopyCStrAndInsertCStrLongIntIntoCStr(const char * theSrcCStr,const char * theInsertCStr,const long theNum,char * theDstCStr,const int maxDstStrLength)1589*ebfedea0SLionel Sambuc void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
1590*ebfedea0SLionel Sambuc {
1591*ebfedea0SLionel Sambuc const char	*theCStrs[2] = { theInsertCStr,nil };
1592*ebfedea0SLionel Sambuc const long	theLongInts[1] = { theNum };
1593*ebfedea0SLionel Sambuc 
1594*ebfedea0SLionel Sambuc 	CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,theCStrs,theLongInts,theDstCStr,maxDstStrLength);
1595*ebfedea0SLionel Sambuc }
1596*ebfedea0SLionel Sambuc 
1597*ebfedea0SLionel Sambuc 
1598*ebfedea0SLionel Sambuc 
CopyCStrAndInsertCStrsLongIntsIntoCStr(const char * theSrcCStr,const char ** theInsertCStrs,const long * theLongInts,char * theDstCStr,const int maxDstStrLength)1599*ebfedea0SLionel Sambuc void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength)
1600*ebfedea0SLionel Sambuc {
1601*ebfedea0SLionel Sambuc int			dstCharIndex,srcCharIndex,theMaxDstStrLength;
1602*ebfedea0SLionel Sambuc int			theCStrIndex = 0;
1603*ebfedea0SLionel Sambuc int			theLongIntIndex = 0;
1604*ebfedea0SLionel Sambuc 
1605*ebfedea0SLionel Sambuc 
1606*ebfedea0SLionel Sambuc 	theMaxDstStrLength = maxDstStrLength;
1607*ebfedea0SLionel Sambuc 
1608*ebfedea0SLionel Sambuc 	if (theDstCStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
1609*ebfedea0SLionel Sambuc 	{
1610*ebfedea0SLionel Sambuc 		dstCharIndex = 0;
1611*ebfedea0SLionel Sambuc 
1612*ebfedea0SLionel Sambuc 		srcCharIndex = 0;
1613*ebfedea0SLionel Sambuc 
1614*ebfedea0SLionel Sambuc 
1615*ebfedea0SLionel Sambuc 		//	Allow room for NULL at end of string
1616*ebfedea0SLionel Sambuc 
1617*ebfedea0SLionel Sambuc 		theMaxDstStrLength--;
1618*ebfedea0SLionel Sambuc 
1619*ebfedea0SLionel Sambuc 
1620*ebfedea0SLionel Sambuc 		for (;;)
1621*ebfedea0SLionel Sambuc 		{
1622*ebfedea0SLionel Sambuc 			//	Hit end of buffer?
1623*ebfedea0SLionel Sambuc 
1624*ebfedea0SLionel Sambuc 			if (dstCharIndex >= theMaxDstStrLength)
1625*ebfedea0SLionel Sambuc 			{
1626*ebfedea0SLionel Sambuc 				theDstCStr[dstCharIndex++] = 0;
1627*ebfedea0SLionel Sambuc 
1628*ebfedea0SLionel Sambuc 				goto EXITPOINT;
1629*ebfedea0SLionel Sambuc 			}
1630*ebfedea0SLionel Sambuc 
1631*ebfedea0SLionel Sambuc 			//	End of source string?
1632*ebfedea0SLionel Sambuc 
1633*ebfedea0SLionel Sambuc 			else if (theSrcCStr[srcCharIndex] == 0)
1634*ebfedea0SLionel Sambuc 			{
1635*ebfedea0SLionel Sambuc 				theDstCStr[dstCharIndex++] = 0;
1636*ebfedea0SLionel Sambuc 
1637*ebfedea0SLionel Sambuc 				goto EXITPOINT;
1638*ebfedea0SLionel Sambuc 			}
1639*ebfedea0SLionel Sambuc 
1640*ebfedea0SLionel Sambuc 			//	Did we find a '%s'?
1641*ebfedea0SLionel Sambuc 
1642*ebfedea0SLionel Sambuc 			else if (theInsertCStrs != nil && theInsertCStrs[theCStrIndex] != nil && theSrcCStr[srcCharIndex] == '%' && theSrcCStr[srcCharIndex + 1] == 's')
1643*ebfedea0SLionel Sambuc 			{
1644*ebfedea0SLionel Sambuc 				//	Skip over the '%s'
1645*ebfedea0SLionel Sambuc 
1646*ebfedea0SLionel Sambuc 				srcCharIndex += 2;
1647*ebfedea0SLionel Sambuc 
1648*ebfedea0SLionel Sambuc 
1649*ebfedea0SLionel Sambuc 				//	Terminate the dest string and then concat the string
1650*ebfedea0SLionel Sambuc 
1651*ebfedea0SLionel Sambuc 				theDstCStr[dstCharIndex] = 0;
1652*ebfedea0SLionel Sambuc 
1653*ebfedea0SLionel Sambuc 				ConcatCStrToCStr(theInsertCStrs[theCStrIndex],theDstCStr,theMaxDstStrLength);
1654*ebfedea0SLionel Sambuc 
1655*ebfedea0SLionel Sambuc 				dstCharIndex = CStrLength(theDstCStr);
1656*ebfedea0SLionel Sambuc 
1657*ebfedea0SLionel Sambuc 				theCStrIndex++;
1658*ebfedea0SLionel Sambuc 			}
1659*ebfedea0SLionel Sambuc 
1660*ebfedea0SLionel Sambuc 			//	Did we find a '%ld'?
1661*ebfedea0SLionel Sambuc 
1662*ebfedea0SLionel Sambuc 			else if (theLongInts != nil && theSrcCStr[srcCharIndex] == '%' && theSrcCStr[srcCharIndex + 1] == 'l' && theSrcCStr[srcCharIndex + 2] == 'd')
1663*ebfedea0SLionel Sambuc 			{
1664*ebfedea0SLionel Sambuc 				//	Skip over the '%ld'
1665*ebfedea0SLionel Sambuc 
1666*ebfedea0SLionel Sambuc 				srcCharIndex += 3;
1667*ebfedea0SLionel Sambuc 
1668*ebfedea0SLionel Sambuc 
1669*ebfedea0SLionel Sambuc 				//	Terminate the dest string and then concat the number
1670*ebfedea0SLionel Sambuc 
1671*ebfedea0SLionel Sambuc 				theDstCStr[dstCharIndex] = 0;
1672*ebfedea0SLionel Sambuc 
1673*ebfedea0SLionel Sambuc 				ConcatLongIntToCStr(theLongInts[theLongIntIndex],theDstCStr,theMaxDstStrLength);
1674*ebfedea0SLionel Sambuc 
1675*ebfedea0SLionel Sambuc 				theLongIntIndex++;
1676*ebfedea0SLionel Sambuc 
1677*ebfedea0SLionel Sambuc 				dstCharIndex = CStrLength(theDstCStr);
1678*ebfedea0SLionel Sambuc 			}
1679*ebfedea0SLionel Sambuc 
1680*ebfedea0SLionel Sambuc 			else
1681*ebfedea0SLionel Sambuc 			{
1682*ebfedea0SLionel Sambuc 				theDstCStr[dstCharIndex++] = theSrcCStr[srcCharIndex++];
1683*ebfedea0SLionel Sambuc 			}
1684*ebfedea0SLionel Sambuc 		}
1685*ebfedea0SLionel Sambuc 	}
1686*ebfedea0SLionel Sambuc 
1687*ebfedea0SLionel Sambuc 
1688*ebfedea0SLionel Sambuc 
1689*ebfedea0SLionel Sambuc EXITPOINT:
1690*ebfedea0SLionel Sambuc 
1691*ebfedea0SLionel Sambuc 	return;
1692*ebfedea0SLionel Sambuc }
1693*ebfedea0SLionel Sambuc 
1694*ebfedea0SLionel Sambuc 
1695*ebfedea0SLionel Sambuc 
1696*ebfedea0SLionel Sambuc 
1697*ebfedea0SLionel Sambuc 
CopyCStrAndInsertCStrLongIntIntoHandle(const char * theSrcCStr,const char * theInsertCStr,const long theNum,Handle * theHandle)1698*ebfedea0SLionel Sambuc OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle)
1699*ebfedea0SLionel Sambuc {
1700*ebfedea0SLionel Sambuc OSErr	errCode;
1701*ebfedea0SLionel Sambuc long	byteCount;
1702*ebfedea0SLionel Sambuc 
1703*ebfedea0SLionel Sambuc 
1704*ebfedea0SLionel Sambuc 	if (theHandle != nil)
1705*ebfedea0SLionel Sambuc 	{
1706*ebfedea0SLionel Sambuc 		byteCount = CStrLength(theSrcCStr) + CStrLength(theInsertCStr) + 32;
1707*ebfedea0SLionel Sambuc 
1708*ebfedea0SLionel Sambuc 		*theHandle = NewHandle(byteCount);
1709*ebfedea0SLionel Sambuc 
1710*ebfedea0SLionel Sambuc 		if (*theHandle == nil)
1711*ebfedea0SLionel Sambuc 		{
1712*ebfedea0SLionel Sambuc 			SetErrorMessageAndLongIntAndBail("CopyCStrAndInsertCStrLongIntIntoHandle: Can't allocate Handle, MemError() = ",MemError());
1713*ebfedea0SLionel Sambuc 		}
1714*ebfedea0SLionel Sambuc 
1715*ebfedea0SLionel Sambuc 
1716*ebfedea0SLionel Sambuc 		HLock(*theHandle);
1717*ebfedea0SLionel Sambuc 
1718*ebfedea0SLionel Sambuc 		CopyCStrAndInsertCStrLongIntIntoCStr(theSrcCStr,theInsertCStr,theNum,**theHandle,byteCount);
1719*ebfedea0SLionel Sambuc 
1720*ebfedea0SLionel Sambuc 		HUnlock(*theHandle);
1721*ebfedea0SLionel Sambuc 	}
1722*ebfedea0SLionel Sambuc 
1723*ebfedea0SLionel Sambuc 	errCode = noErr;
1724*ebfedea0SLionel Sambuc 
1725*ebfedea0SLionel Sambuc 
1726*ebfedea0SLionel Sambuc EXITPOINT:
1727*ebfedea0SLionel Sambuc 
1728*ebfedea0SLionel Sambuc 	return(errCode);
1729*ebfedea0SLionel Sambuc }
1730*ebfedea0SLionel Sambuc 
1731*ebfedea0SLionel Sambuc 
1732*ebfedea0SLionel Sambuc 
1733*ebfedea0SLionel Sambuc 
1734*ebfedea0SLionel Sambuc 
CopyIndexedWordToCStr(char * theSrcCStr,int whichWord,char * theDstCStr,int maxDstCStrLength)1735*ebfedea0SLionel Sambuc OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength)
1736*ebfedea0SLionel Sambuc {
1737*ebfedea0SLionel Sambuc OSErr		errCode;
1738*ebfedea0SLionel Sambuc char		*srcCharPtr,*dstCharPtr;
1739*ebfedea0SLionel Sambuc int			wordCount;
1740*ebfedea0SLionel Sambuc int			byteCount;
1741*ebfedea0SLionel Sambuc 
1742*ebfedea0SLionel Sambuc 
1743*ebfedea0SLionel Sambuc 	if (theSrcCStr == nil)
1744*ebfedea0SLionel Sambuc 	{
1745*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, theSrcCStr == nil"));
1746*ebfedea0SLionel Sambuc 	}
1747*ebfedea0SLionel Sambuc 
1748*ebfedea0SLionel Sambuc 	if (theDstCStr == nil)
1749*ebfedea0SLionel Sambuc 	{
1750*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, theDstCStr == nil"));
1751*ebfedea0SLionel Sambuc 	}
1752*ebfedea0SLionel Sambuc 
1753*ebfedea0SLionel Sambuc 	if (whichWord < 0)
1754*ebfedea0SLionel Sambuc 	{
1755*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, whichWord < 0"));
1756*ebfedea0SLionel Sambuc 	}
1757*ebfedea0SLionel Sambuc 
1758*ebfedea0SLionel Sambuc 	if (maxDstCStrLength <= 0)
1759*ebfedea0SLionel Sambuc 	{
1760*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, maxDstCStrLength <= 0"));
1761*ebfedea0SLionel Sambuc 	}
1762*ebfedea0SLionel Sambuc 
1763*ebfedea0SLionel Sambuc 
1764*ebfedea0SLionel Sambuc 	*theDstCStr = '\0';
1765*ebfedea0SLionel Sambuc 
1766*ebfedea0SLionel Sambuc 	srcCharPtr = theSrcCStr;
1767*ebfedea0SLionel Sambuc 
1768*ebfedea0SLionel Sambuc 	while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1769*ebfedea0SLionel Sambuc 	{
1770*ebfedea0SLionel Sambuc 		srcCharPtr++;
1771*ebfedea0SLionel Sambuc 	}
1772*ebfedea0SLionel Sambuc 
1773*ebfedea0SLionel Sambuc 
1774*ebfedea0SLionel Sambuc 	for (wordCount = 0;wordCount < whichWord;wordCount++)
1775*ebfedea0SLionel Sambuc 	{
1776*ebfedea0SLionel Sambuc 		while (*srcCharPtr != ' ' && *srcCharPtr != '\t' && *srcCharPtr != '\r' && *srcCharPtr != '\n' && *srcCharPtr != '\0')
1777*ebfedea0SLionel Sambuc 		{
1778*ebfedea0SLionel Sambuc 			srcCharPtr++;
1779*ebfedea0SLionel Sambuc 		}
1780*ebfedea0SLionel Sambuc 
1781*ebfedea0SLionel Sambuc 		if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1782*ebfedea0SLionel Sambuc 		{
1783*ebfedea0SLionel Sambuc 			errCode = noErr;
1784*ebfedea0SLionel Sambuc 
1785*ebfedea0SLionel Sambuc 			goto EXITPOINT;
1786*ebfedea0SLionel Sambuc 		}
1787*ebfedea0SLionel Sambuc 
1788*ebfedea0SLionel Sambuc 		while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1789*ebfedea0SLionel Sambuc 		{
1790*ebfedea0SLionel Sambuc 			srcCharPtr++;
1791*ebfedea0SLionel Sambuc 		}
1792*ebfedea0SLionel Sambuc 
1793*ebfedea0SLionel Sambuc 		if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1794*ebfedea0SLionel Sambuc 		{
1795*ebfedea0SLionel Sambuc 			errCode = noErr;
1796*ebfedea0SLionel Sambuc 
1797*ebfedea0SLionel Sambuc 			goto EXITPOINT;
1798*ebfedea0SLionel Sambuc 		}
1799*ebfedea0SLionel Sambuc 	}
1800*ebfedea0SLionel Sambuc 
1801*ebfedea0SLionel Sambuc 
1802*ebfedea0SLionel Sambuc 	dstCharPtr = theDstCStr;
1803*ebfedea0SLionel Sambuc 	byteCount = 0;
1804*ebfedea0SLionel Sambuc 
1805*ebfedea0SLionel Sambuc 
1806*ebfedea0SLionel Sambuc 	for(;;)
1807*ebfedea0SLionel Sambuc 	{
1808*ebfedea0SLionel Sambuc 		if (byteCount >= maxDstCStrLength - 1 || *srcCharPtr == '\0' || *srcCharPtr == ' ' || *srcCharPtr == '\t' || *srcCharPtr == '\r' || *srcCharPtr == '\n')
1809*ebfedea0SLionel Sambuc 		{
1810*ebfedea0SLionel Sambuc 			*dstCharPtr = '\0';
1811*ebfedea0SLionel Sambuc 			break;
1812*ebfedea0SLionel Sambuc 		}
1813*ebfedea0SLionel Sambuc 
1814*ebfedea0SLionel Sambuc 		*dstCharPtr++ = *srcCharPtr++;
1815*ebfedea0SLionel Sambuc 
1816*ebfedea0SLionel Sambuc 		byteCount++;
1817*ebfedea0SLionel Sambuc 	}
1818*ebfedea0SLionel Sambuc 
1819*ebfedea0SLionel Sambuc 
1820*ebfedea0SLionel Sambuc 	errCode = noErr;
1821*ebfedea0SLionel Sambuc 
1822*ebfedea0SLionel Sambuc 
1823*ebfedea0SLionel Sambuc EXITPOINT:
1824*ebfedea0SLionel Sambuc 
1825*ebfedea0SLionel Sambuc 	return(errCode);
1826*ebfedea0SLionel Sambuc }
1827*ebfedea0SLionel Sambuc 
1828*ebfedea0SLionel Sambuc 
1829*ebfedea0SLionel Sambuc 
1830*ebfedea0SLionel Sambuc 
1831*ebfedea0SLionel Sambuc 
CopyIndexedWordToNewHandle(char * theSrcCStr,int whichWord,Handle * outTheHandle)1832*ebfedea0SLionel Sambuc OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle)
1833*ebfedea0SLionel Sambuc {
1834*ebfedea0SLionel Sambuc OSErr		errCode;
1835*ebfedea0SLionel Sambuc char		*srcCharPtr;
1836*ebfedea0SLionel Sambuc int			wordCount;
1837*ebfedea0SLionel Sambuc int			byteCount;
1838*ebfedea0SLionel Sambuc 
1839*ebfedea0SLionel Sambuc 
1840*ebfedea0SLionel Sambuc 	if (theSrcCStr == nil)
1841*ebfedea0SLionel Sambuc 	{
1842*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, theSrcCStr == nil"));
1843*ebfedea0SLionel Sambuc 	}
1844*ebfedea0SLionel Sambuc 
1845*ebfedea0SLionel Sambuc 	if (outTheHandle == nil)
1846*ebfedea0SLionel Sambuc 	{
1847*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, outTheHandle == nil"));
1848*ebfedea0SLionel Sambuc 	}
1849*ebfedea0SLionel Sambuc 
1850*ebfedea0SLionel Sambuc 	if (whichWord < 0)
1851*ebfedea0SLionel Sambuc 	{
1852*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, whichWord < 0"));
1853*ebfedea0SLionel Sambuc 	}
1854*ebfedea0SLionel Sambuc 
1855*ebfedea0SLionel Sambuc 
1856*ebfedea0SLionel Sambuc 	*outTheHandle = nil;
1857*ebfedea0SLionel Sambuc 
1858*ebfedea0SLionel Sambuc 
1859*ebfedea0SLionel Sambuc 	srcCharPtr = theSrcCStr;
1860*ebfedea0SLionel Sambuc 
1861*ebfedea0SLionel Sambuc 	while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1862*ebfedea0SLionel Sambuc 	{
1863*ebfedea0SLionel Sambuc 		srcCharPtr++;
1864*ebfedea0SLionel Sambuc 	}
1865*ebfedea0SLionel Sambuc 
1866*ebfedea0SLionel Sambuc 
1867*ebfedea0SLionel Sambuc 	for (wordCount = 0;wordCount < whichWord;wordCount++)
1868*ebfedea0SLionel Sambuc 	{
1869*ebfedea0SLionel Sambuc 		while (*srcCharPtr != ' ' && *srcCharPtr != '\t' && *srcCharPtr != '\r' && *srcCharPtr != '\n' && *srcCharPtr != '\0')
1870*ebfedea0SLionel Sambuc 		{
1871*ebfedea0SLionel Sambuc 			srcCharPtr++;
1872*ebfedea0SLionel Sambuc 		}
1873*ebfedea0SLionel Sambuc 
1874*ebfedea0SLionel Sambuc 		if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1875*ebfedea0SLionel Sambuc 		{
1876*ebfedea0SLionel Sambuc 			break;
1877*ebfedea0SLionel Sambuc 		}
1878*ebfedea0SLionel Sambuc 
1879*ebfedea0SLionel Sambuc 		while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1880*ebfedea0SLionel Sambuc 		{
1881*ebfedea0SLionel Sambuc 			srcCharPtr++;
1882*ebfedea0SLionel Sambuc 		}
1883*ebfedea0SLionel Sambuc 
1884*ebfedea0SLionel Sambuc 		if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1885*ebfedea0SLionel Sambuc 		{
1886*ebfedea0SLionel Sambuc 			break;
1887*ebfedea0SLionel Sambuc 		}
1888*ebfedea0SLionel Sambuc 	}
1889*ebfedea0SLionel Sambuc 
1890*ebfedea0SLionel Sambuc 
1891*ebfedea0SLionel Sambuc 	for (byteCount = 0;;byteCount++)
1892*ebfedea0SLionel Sambuc 	{
1893*ebfedea0SLionel Sambuc 		if (srcCharPtr[byteCount] == ' ' || srcCharPtr[byteCount] == '\t' || srcCharPtr[byteCount] == '\r' || srcCharPtr[byteCount] == '\n' || srcCharPtr[byteCount] == '\0')
1894*ebfedea0SLionel Sambuc 		{
1895*ebfedea0SLionel Sambuc 			break;
1896*ebfedea0SLionel Sambuc 		}
1897*ebfedea0SLionel Sambuc 	}
1898*ebfedea0SLionel Sambuc 
1899*ebfedea0SLionel Sambuc 
1900*ebfedea0SLionel Sambuc 	*outTheHandle = NewHandle(byteCount + 1);
1901*ebfedea0SLionel Sambuc 
1902*ebfedea0SLionel Sambuc 	if (*outTheHandle == nil)
1903*ebfedea0SLionel Sambuc 	{
1904*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyIndexedWordToNewHandle: Can't allocate Handle, MemError() = ",MemError());
1905*ebfedea0SLionel Sambuc 	}
1906*ebfedea0SLionel Sambuc 
1907*ebfedea0SLionel Sambuc 
1908*ebfedea0SLionel Sambuc 	::BlockMove(srcCharPtr,**outTheHandle,byteCount);
1909*ebfedea0SLionel Sambuc 
1910*ebfedea0SLionel Sambuc 	(**outTheHandle)[byteCount] = '\0';
1911*ebfedea0SLionel Sambuc 
1912*ebfedea0SLionel Sambuc 	errCode = noErr;
1913*ebfedea0SLionel Sambuc 
1914*ebfedea0SLionel Sambuc 
1915*ebfedea0SLionel Sambuc EXITPOINT:
1916*ebfedea0SLionel Sambuc 
1917*ebfedea0SLionel Sambuc 	return(errCode);
1918*ebfedea0SLionel Sambuc }
1919*ebfedea0SLionel Sambuc 
1920*ebfedea0SLionel Sambuc 
1921*ebfedea0SLionel Sambuc 
CopyIndexedLineToCStr(const char * theSrcCStr,int inWhichLine,int * lineEndIndex,Boolean * gotLastLine,char * theDstCStr,const int maxDstCStrLength)1922*ebfedea0SLionel Sambuc OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength)
1923*ebfedea0SLionel Sambuc {
1924*ebfedea0SLionel Sambuc OSErr		errCode;
1925*ebfedea0SLionel Sambuc int			theCurrentLine;
1926*ebfedea0SLionel Sambuc int			theCurrentLineOffset;
1927*ebfedea0SLionel Sambuc int			theEOSOffset;
1928*ebfedea0SLionel Sambuc 
1929*ebfedea0SLionel Sambuc 
1930*ebfedea0SLionel Sambuc 	if (theSrcCStr == nil)
1931*ebfedea0SLionel Sambuc 	{
1932*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, theSrcCStr == nil"));
1933*ebfedea0SLionel Sambuc 	}
1934*ebfedea0SLionel Sambuc 
1935*ebfedea0SLionel Sambuc 	if (theDstCStr == nil)
1936*ebfedea0SLionel Sambuc 	{
1937*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, theDstCStr == nil"));
1938*ebfedea0SLionel Sambuc 	}
1939*ebfedea0SLionel Sambuc 
1940*ebfedea0SLionel Sambuc 	if (inWhichLine < 0)
1941*ebfedea0SLionel Sambuc 	{
1942*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, inWhichLine < 0"));
1943*ebfedea0SLionel Sambuc 	}
1944*ebfedea0SLionel Sambuc 
1945*ebfedea0SLionel Sambuc 	if (maxDstCStrLength <= 0)
1946*ebfedea0SLionel Sambuc 	{
1947*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, maxDstCStrLength <= 0"));
1948*ebfedea0SLionel Sambuc 	}
1949*ebfedea0SLionel Sambuc 
1950*ebfedea0SLionel Sambuc 
1951*ebfedea0SLionel Sambuc 	if (gotLastLine != nil)
1952*ebfedea0SLionel Sambuc 	{
1953*ebfedea0SLionel Sambuc 		*gotLastLine = false;
1954*ebfedea0SLionel Sambuc 	}
1955*ebfedea0SLionel Sambuc 
1956*ebfedea0SLionel Sambuc 
1957*ebfedea0SLionel Sambuc 	*theDstCStr = 0;
1958*ebfedea0SLionel Sambuc 
1959*ebfedea0SLionel Sambuc 	theCurrentLineOffset = 0;
1960*ebfedea0SLionel Sambuc 
1961*ebfedea0SLionel Sambuc 	theCurrentLine = 0;
1962*ebfedea0SLionel Sambuc 
1963*ebfedea0SLionel Sambuc 
1964*ebfedea0SLionel Sambuc 	while (theCurrentLine < inWhichLine)
1965*ebfedea0SLionel Sambuc 	{
1966*ebfedea0SLionel Sambuc 		while (theSrcCStr[theCurrentLineOffset] != '\r' && theSrcCStr[theCurrentLineOffset] != 0)
1967*ebfedea0SLionel Sambuc 		{
1968*ebfedea0SLionel Sambuc 			theCurrentLineOffset++;
1969*ebfedea0SLionel Sambuc 		}
1970*ebfedea0SLionel Sambuc 
1971*ebfedea0SLionel Sambuc 		if (theSrcCStr[theCurrentLineOffset] == 0)
1972*ebfedea0SLionel Sambuc 		{
1973*ebfedea0SLionel Sambuc 			break;
1974*ebfedea0SLionel Sambuc 		}
1975*ebfedea0SLionel Sambuc 
1976*ebfedea0SLionel Sambuc 		theCurrentLineOffset++;
1977*ebfedea0SLionel Sambuc 		theCurrentLine++;
1978*ebfedea0SLionel Sambuc 	}
1979*ebfedea0SLionel Sambuc 
1980*ebfedea0SLionel Sambuc 	if (theSrcCStr[theCurrentLineOffset] == 0)
1981*ebfedea0SLionel Sambuc 	{
1982*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyIndexedLineToCStr: Too few lines in source text, can't get line ",inWhichLine);
1983*ebfedea0SLionel Sambuc 	}
1984*ebfedea0SLionel Sambuc 
1985*ebfedea0SLionel Sambuc 
1986*ebfedea0SLionel Sambuc 	theEOSOffset = FindCharOffsetInCStr('\r',theSrcCStr + theCurrentLineOffset);
1987*ebfedea0SLionel Sambuc 
1988*ebfedea0SLionel Sambuc 	if (theEOSOffset >= 0)
1989*ebfedea0SLionel Sambuc 	{
1990*ebfedea0SLionel Sambuc 		CopyCSubstrToCStr(theSrcCStr + theCurrentLineOffset,theEOSOffset,theDstCStr,maxDstCStrLength);
1991*ebfedea0SLionel Sambuc 
1992*ebfedea0SLionel Sambuc 		if (gotLastLine != nil)
1993*ebfedea0SLionel Sambuc 		{
1994*ebfedea0SLionel Sambuc 			*gotLastLine = false;
1995*ebfedea0SLionel Sambuc 		}
1996*ebfedea0SLionel Sambuc 
1997*ebfedea0SLionel Sambuc 		if (lineEndIndex != nil)
1998*ebfedea0SLionel Sambuc 		{
1999*ebfedea0SLionel Sambuc 			*lineEndIndex = theEOSOffset;
2000*ebfedea0SLionel Sambuc 		}
2001*ebfedea0SLionel Sambuc 	}
2002*ebfedea0SLionel Sambuc 
2003*ebfedea0SLionel Sambuc 	else
2004*ebfedea0SLionel Sambuc 	{
2005*ebfedea0SLionel Sambuc 		theEOSOffset = CStrLength(theSrcCStr + theCurrentLineOffset);
2006*ebfedea0SLionel Sambuc 
2007*ebfedea0SLionel Sambuc 		CopyCSubstrToCStr(theSrcCStr + theCurrentLineOffset,theEOSOffset,theDstCStr,maxDstCStrLength);
2008*ebfedea0SLionel Sambuc 
2009*ebfedea0SLionel Sambuc 		if (gotLastLine != nil)
2010*ebfedea0SLionel Sambuc 		{
2011*ebfedea0SLionel Sambuc 			*gotLastLine = true;
2012*ebfedea0SLionel Sambuc 		}
2013*ebfedea0SLionel Sambuc 
2014*ebfedea0SLionel Sambuc 		if (lineEndIndex != nil)
2015*ebfedea0SLionel Sambuc 		{
2016*ebfedea0SLionel Sambuc 			*lineEndIndex = theEOSOffset;
2017*ebfedea0SLionel Sambuc 		}
2018*ebfedea0SLionel Sambuc 	}
2019*ebfedea0SLionel Sambuc 
2020*ebfedea0SLionel Sambuc 
2021*ebfedea0SLionel Sambuc 	errCode = noErr;
2022*ebfedea0SLionel Sambuc 
2023*ebfedea0SLionel Sambuc 
2024*ebfedea0SLionel Sambuc EXITPOINT:
2025*ebfedea0SLionel Sambuc 
2026*ebfedea0SLionel Sambuc 	return(errCode);
2027*ebfedea0SLionel Sambuc }
2028*ebfedea0SLionel Sambuc 
2029*ebfedea0SLionel Sambuc 
2030*ebfedea0SLionel Sambuc 
CopyIndexedLineToNewHandle(const char * theSrcCStr,int inWhichLine,Handle * outNewHandle)2031*ebfedea0SLionel Sambuc OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle)
2032*ebfedea0SLionel Sambuc {
2033*ebfedea0SLionel Sambuc OSErr		errCode;
2034*ebfedea0SLionel Sambuc int			theCurrentLine;
2035*ebfedea0SLionel Sambuc int			theCurrentLineOffset;
2036*ebfedea0SLionel Sambuc int			byteCount;
2037*ebfedea0SLionel Sambuc 
2038*ebfedea0SLionel Sambuc 
2039*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(theSrcCStr,"CopyIndexedLineToNewHandle: Bad parameter, theSrcCStr == nil");
2040*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(outNewHandle,"CopyIndexedLineToNewHandle: Bad parameter, outNewHandle == nil");
2041*ebfedea0SLionel Sambuc 
2042*ebfedea0SLionel Sambuc 	if (inWhichLine < 0)
2043*ebfedea0SLionel Sambuc 	{
2044*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("CopyIndexedLineToNewHandle: Bad parameter, inWhichLine < 0"));
2045*ebfedea0SLionel Sambuc 	}
2046*ebfedea0SLionel Sambuc 
2047*ebfedea0SLionel Sambuc 
2048*ebfedea0SLionel Sambuc 	theCurrentLineOffset = 0;
2049*ebfedea0SLionel Sambuc 
2050*ebfedea0SLionel Sambuc 	theCurrentLine = 0;
2051*ebfedea0SLionel Sambuc 
2052*ebfedea0SLionel Sambuc 
2053*ebfedea0SLionel Sambuc 	while (theCurrentLine < inWhichLine)
2054*ebfedea0SLionel Sambuc 	{
2055*ebfedea0SLionel Sambuc 		while (theSrcCStr[theCurrentLineOffset] != '\r' && theSrcCStr[theCurrentLineOffset] != '\0')
2056*ebfedea0SLionel Sambuc 		{
2057*ebfedea0SLionel Sambuc 			theCurrentLineOffset++;
2058*ebfedea0SLionel Sambuc 		}
2059*ebfedea0SLionel Sambuc 
2060*ebfedea0SLionel Sambuc 		if (theSrcCStr[theCurrentLineOffset] == '\0')
2061*ebfedea0SLionel Sambuc 		{
2062*ebfedea0SLionel Sambuc 			break;
2063*ebfedea0SLionel Sambuc 		}
2064*ebfedea0SLionel Sambuc 
2065*ebfedea0SLionel Sambuc 		theCurrentLineOffset++;
2066*ebfedea0SLionel Sambuc 		theCurrentLine++;
2067*ebfedea0SLionel Sambuc 	}
2068*ebfedea0SLionel Sambuc 
2069*ebfedea0SLionel Sambuc 	if (theSrcCStr[theCurrentLineOffset] == '\0')
2070*ebfedea0SLionel Sambuc 	{
2071*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyIndexedLineToNewHandle: Too few lines in source text, can't get line #",inWhichLine);
2072*ebfedea0SLionel Sambuc 	}
2073*ebfedea0SLionel Sambuc 
2074*ebfedea0SLionel Sambuc 
2075*ebfedea0SLionel Sambuc 	byteCount = 0;
2076*ebfedea0SLionel Sambuc 
2077*ebfedea0SLionel Sambuc 	while (theSrcCStr[theCurrentLineOffset + byteCount] != '\r' && theSrcCStr[theCurrentLineOffset + byteCount] != '\0')
2078*ebfedea0SLionel Sambuc 	{
2079*ebfedea0SLionel Sambuc 		byteCount++;
2080*ebfedea0SLionel Sambuc 	}
2081*ebfedea0SLionel Sambuc 
2082*ebfedea0SLionel Sambuc 
2083*ebfedea0SLionel Sambuc 	*outNewHandle = NewHandle(byteCount + 1);
2084*ebfedea0SLionel Sambuc 
2085*ebfedea0SLionel Sambuc 	if (*outNewHandle == nil)
2086*ebfedea0SLionel Sambuc 	{
2087*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("CopyIndexedLineToNewHandle: Can't allocate Handle, MemError() = ",MemError());
2088*ebfedea0SLionel Sambuc 	}
2089*ebfedea0SLionel Sambuc 
2090*ebfedea0SLionel Sambuc 	::BlockMove(theSrcCStr + theCurrentLineOffset,**outNewHandle,byteCount);
2091*ebfedea0SLionel Sambuc 
2092*ebfedea0SLionel Sambuc 	(**outNewHandle)[byteCount] = '\0';
2093*ebfedea0SLionel Sambuc 
2094*ebfedea0SLionel Sambuc 	errCode = noErr;
2095*ebfedea0SLionel Sambuc 
2096*ebfedea0SLionel Sambuc 
2097*ebfedea0SLionel Sambuc EXITPOINT:
2098*ebfedea0SLionel Sambuc 
2099*ebfedea0SLionel Sambuc 	return(errCode);
2100*ebfedea0SLionel Sambuc }
2101*ebfedea0SLionel Sambuc 
2102*ebfedea0SLionel Sambuc 
2103*ebfedea0SLionel Sambuc 
2104*ebfedea0SLionel Sambuc 
CountDigits(const char * inCStr,int * outNumIntegerDigits,int * outNumFractDigits)2105*ebfedea0SLionel Sambuc OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits)
2106*ebfedea0SLionel Sambuc {
2107*ebfedea0SLionel Sambuc OSErr	errCode = noErr;
2108*ebfedea0SLionel Sambuc int		numIntDigits = 0;
2109*ebfedea0SLionel Sambuc int		numFractDigits = 0;
2110*ebfedea0SLionel Sambuc int 	digitIndex = 0;
2111*ebfedea0SLionel Sambuc 
2112*ebfedea0SLionel Sambuc 
2113*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(inCStr,"CountDigits: Bad parameter, theSrcCStr == nil");
2114*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(outNumIntegerDigits,"CountDigits: Bad parameter, outNumIntegerDigits == nil");
2115*ebfedea0SLionel Sambuc 	SetErrorMessageAndBailIfNil(outNumFractDigits,"CountDigits: Bad parameter, outNumFractDigits == nil");
2116*ebfedea0SLionel Sambuc 
2117*ebfedea0SLionel Sambuc 	digitIndex = 0;
2118*ebfedea0SLionel Sambuc 
2119*ebfedea0SLionel Sambuc 	while (inCStr[digitIndex] >= '0' && inCStr[digitIndex] <= '9')
2120*ebfedea0SLionel Sambuc 	{
2121*ebfedea0SLionel Sambuc 		digitIndex++;
2122*ebfedea0SLionel Sambuc 		numIntDigits++;
2123*ebfedea0SLionel Sambuc 	}
2124*ebfedea0SLionel Sambuc 
2125*ebfedea0SLionel Sambuc 	if (inCStr[digitIndex] == '.')
2126*ebfedea0SLionel Sambuc 	{
2127*ebfedea0SLionel Sambuc 		digitIndex++;
2128*ebfedea0SLionel Sambuc 
2129*ebfedea0SLionel Sambuc 		while (inCStr[digitIndex] >= '0' && inCStr[digitIndex] <= '9')
2130*ebfedea0SLionel Sambuc 		{
2131*ebfedea0SLionel Sambuc 			digitIndex++;
2132*ebfedea0SLionel Sambuc 			numFractDigits++;
2133*ebfedea0SLionel Sambuc 		}
2134*ebfedea0SLionel Sambuc 	}
2135*ebfedea0SLionel Sambuc 
2136*ebfedea0SLionel Sambuc 	*outNumIntegerDigits = numIntDigits;
2137*ebfedea0SLionel Sambuc 
2138*ebfedea0SLionel Sambuc 	*outNumFractDigits = numFractDigits;
2139*ebfedea0SLionel Sambuc 
2140*ebfedea0SLionel Sambuc 	errCode = noErr;
2141*ebfedea0SLionel Sambuc 
2142*ebfedea0SLionel Sambuc EXITPOINT:
2143*ebfedea0SLionel Sambuc 
2144*ebfedea0SLionel Sambuc 	return(errCode);
2145*ebfedea0SLionel Sambuc }
2146*ebfedea0SLionel Sambuc 
2147*ebfedea0SLionel Sambuc 
2148*ebfedea0SLionel Sambuc 
ExtractIntFromCStr(const char * theSrcCStr,int * outInt,Boolean skipLeadingSpaces)2149*ebfedea0SLionel Sambuc OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces)
2150*ebfedea0SLionel Sambuc {
2151*ebfedea0SLionel Sambuc OSErr		errCode;
2152*ebfedea0SLionel Sambuc int			theCharIndex;
2153*ebfedea0SLionel Sambuc 
2154*ebfedea0SLionel Sambuc 
2155*ebfedea0SLionel Sambuc 	if (theSrcCStr == nil)
2156*ebfedea0SLionel Sambuc 	{
2157*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, theSrcCStr == nil"));
2158*ebfedea0SLionel Sambuc 	}
2159*ebfedea0SLionel Sambuc 
2160*ebfedea0SLionel Sambuc 	if (outInt == nil)
2161*ebfedea0SLionel Sambuc 	{
2162*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, outInt == nil"));
2163*ebfedea0SLionel Sambuc 	}
2164*ebfedea0SLionel Sambuc 
2165*ebfedea0SLionel Sambuc 
2166*ebfedea0SLionel Sambuc 	*outInt = 0;
2167*ebfedea0SLionel Sambuc 
2168*ebfedea0SLionel Sambuc 	theCharIndex = 0;
2169*ebfedea0SLionel Sambuc 
2170*ebfedea0SLionel Sambuc 	if (skipLeadingSpaces == true)
2171*ebfedea0SLionel Sambuc 	{
2172*ebfedea0SLionel Sambuc 		while (theSrcCStr[theCharIndex] == ' ')
2173*ebfedea0SLionel Sambuc 		{
2174*ebfedea0SLionel Sambuc 			theCharIndex++;
2175*ebfedea0SLionel Sambuc 		}
2176*ebfedea0SLionel Sambuc 	}
2177*ebfedea0SLionel Sambuc 
2178*ebfedea0SLionel Sambuc 	if (theSrcCStr[theCharIndex] < '0' || theSrcCStr[theCharIndex] > '9')
2179*ebfedea0SLionel Sambuc 	{
2180*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, theSrcCStr contains a bogus numeric representation"));
2181*ebfedea0SLionel Sambuc 	}
2182*ebfedea0SLionel Sambuc 
2183*ebfedea0SLionel Sambuc 
2184*ebfedea0SLionel Sambuc 	while (theSrcCStr[theCharIndex] >= '0' && theSrcCStr[theCharIndex] <= '9')
2185*ebfedea0SLionel Sambuc 	{
2186*ebfedea0SLionel Sambuc 		*outInt = (*outInt * 10) + (theSrcCStr[theCharIndex] - '0');
2187*ebfedea0SLionel Sambuc 
2188*ebfedea0SLionel Sambuc 		theCharIndex++;
2189*ebfedea0SLionel Sambuc 	}
2190*ebfedea0SLionel Sambuc 
2191*ebfedea0SLionel Sambuc 
2192*ebfedea0SLionel Sambuc 	errCode = noErr;
2193*ebfedea0SLionel Sambuc 
2194*ebfedea0SLionel Sambuc 
2195*ebfedea0SLionel Sambuc EXITPOINT:
2196*ebfedea0SLionel Sambuc 
2197*ebfedea0SLionel Sambuc 	return(errCode);
2198*ebfedea0SLionel Sambuc }
2199*ebfedea0SLionel Sambuc 
2200*ebfedea0SLionel Sambuc 
2201*ebfedea0SLionel Sambuc 
ExtractIntFromPStr(const unsigned char * theSrcPStr,int * outInt,Boolean skipLeadingSpaces)2202*ebfedea0SLionel Sambuc OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces)
2203*ebfedea0SLionel Sambuc {
2204*ebfedea0SLionel Sambuc OSErr		errCode;
2205*ebfedea0SLionel Sambuc char		theCStr[256];
2206*ebfedea0SLionel Sambuc 
2207*ebfedea0SLionel Sambuc 
2208*ebfedea0SLionel Sambuc 	if (theSrcPStr == nil)
2209*ebfedea0SLionel Sambuc 	{
2210*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("ExtractIntFromPStr: Bad parameter, theSrcPStr == nil"));
2211*ebfedea0SLionel Sambuc 	}
2212*ebfedea0SLionel Sambuc 
2213*ebfedea0SLionel Sambuc 	if (outInt == nil)
2214*ebfedea0SLionel Sambuc 	{
2215*ebfedea0SLionel Sambuc 		SetErrorMessageAndBail(("ExtractIntFromPStr: Bad parameter, outInt == nil"));
2216*ebfedea0SLionel Sambuc 	}
2217*ebfedea0SLionel Sambuc 
2218*ebfedea0SLionel Sambuc 
2219*ebfedea0SLionel Sambuc 	CopyPStrToCStr(theSrcPStr,theCStr,sizeof(theCStr));
2220*ebfedea0SLionel Sambuc 
2221*ebfedea0SLionel Sambuc 
2222*ebfedea0SLionel Sambuc 	errCode = ExtractIntFromCStr(theCStr,outInt,skipLeadingSpaces);
2223*ebfedea0SLionel Sambuc 
2224*ebfedea0SLionel Sambuc 
2225*ebfedea0SLionel Sambuc EXITPOINT:
2226*ebfedea0SLionel Sambuc 
2227*ebfedea0SLionel Sambuc 	return(errCode);
2228*ebfedea0SLionel Sambuc }
2229*ebfedea0SLionel Sambuc 
2230*ebfedea0SLionel Sambuc 
2231*ebfedea0SLionel Sambuc 
CountOccurencesOfCharInCStr(const char inChar,const char * inSrcCStr)2232*ebfedea0SLionel Sambuc int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr)
2233*ebfedea0SLionel Sambuc {
2234*ebfedea0SLionel Sambuc int		theSrcCharIndex;
2235*ebfedea0SLionel Sambuc int		numOccurrences = -1;
2236*ebfedea0SLionel Sambuc 
2237*ebfedea0SLionel Sambuc 
2238*ebfedea0SLionel Sambuc 	if (inSrcCStr != nil && inChar != '\0')
2239*ebfedea0SLionel Sambuc 	{
2240*ebfedea0SLionel Sambuc 		numOccurrences = 0;
2241*ebfedea0SLionel Sambuc 
2242*ebfedea0SLionel Sambuc 		for (theSrcCharIndex = 0;inSrcCStr[theSrcCharIndex] != '\0';theSrcCharIndex++)
2243*ebfedea0SLionel Sambuc 		{
2244*ebfedea0SLionel Sambuc 			if (inSrcCStr[theSrcCharIndex] == inChar)
2245*ebfedea0SLionel Sambuc 			{
2246*ebfedea0SLionel Sambuc 				numOccurrences++;
2247*ebfedea0SLionel Sambuc 			}
2248*ebfedea0SLionel Sambuc 		}
2249*ebfedea0SLionel Sambuc 	}
2250*ebfedea0SLionel Sambuc 
2251*ebfedea0SLionel Sambuc 	return(numOccurrences);
2252*ebfedea0SLionel Sambuc }
2253*ebfedea0SLionel Sambuc 
2254*ebfedea0SLionel Sambuc 
CountWordsInCStr(const char * inSrcCStr)2255*ebfedea0SLionel Sambuc int CountWordsInCStr(const char *inSrcCStr)
2256*ebfedea0SLionel Sambuc {
2257*ebfedea0SLionel Sambuc int		numWords = -1;
2258*ebfedea0SLionel Sambuc 
2259*ebfedea0SLionel Sambuc 
2260*ebfedea0SLionel Sambuc 	if (inSrcCStr != nil)
2261*ebfedea0SLionel Sambuc 	{
2262*ebfedea0SLionel Sambuc 		numWords = 0;
2263*ebfedea0SLionel Sambuc 
2264*ebfedea0SLionel Sambuc 		//	Skip lead spaces
2265*ebfedea0SLionel Sambuc 
2266*ebfedea0SLionel Sambuc 		while (*inSrcCStr == ' ')
2267*ebfedea0SLionel Sambuc 		{
2268*ebfedea0SLionel Sambuc 			inSrcCStr++;
2269*ebfedea0SLionel Sambuc 		}
2270*ebfedea0SLionel Sambuc 
2271*ebfedea0SLionel Sambuc 		while (*inSrcCStr != '\0')
2272*ebfedea0SLionel Sambuc 		{
2273*ebfedea0SLionel Sambuc 			numWords++;
2274*ebfedea0SLionel Sambuc 
2275*ebfedea0SLionel Sambuc 			while (*inSrcCStr != ' ' && *inSrcCStr != '\0')
2276*ebfedea0SLionel Sambuc 			{
2277*ebfedea0SLionel Sambuc 				inSrcCStr++;
2278*ebfedea0SLionel Sambuc 			}
2279*ebfedea0SLionel Sambuc 
2280*ebfedea0SLionel Sambuc 			while (*inSrcCStr == ' ')
2281*ebfedea0SLionel Sambuc 			{
2282*ebfedea0SLionel Sambuc 				inSrcCStr++;
2283*ebfedea0SLionel Sambuc 			}
2284*ebfedea0SLionel Sambuc 		}
2285*ebfedea0SLionel Sambuc 	}
2286*ebfedea0SLionel Sambuc 
2287*ebfedea0SLionel Sambuc 	return(numWords);
2288*ebfedea0SLionel Sambuc }
2289*ebfedea0SLionel Sambuc 
2290*ebfedea0SLionel Sambuc 
2291*ebfedea0SLionel Sambuc 
2292*ebfedea0SLionel Sambuc 
ConvertCStrToUpperCase(char * theSrcCStr)2293*ebfedea0SLionel Sambuc void ConvertCStrToUpperCase(char *theSrcCStr)
2294*ebfedea0SLionel Sambuc {
2295*ebfedea0SLionel Sambuc char		*theCharPtr;
2296*ebfedea0SLionel Sambuc 
2297*ebfedea0SLionel Sambuc 
2298*ebfedea0SLionel Sambuc 	if (theSrcCStr != nil)
2299*ebfedea0SLionel Sambuc 	{
2300*ebfedea0SLionel Sambuc 		theCharPtr = theSrcCStr;
2301*ebfedea0SLionel Sambuc 
2302*ebfedea0SLionel Sambuc 		while (*theCharPtr != 0)
2303*ebfedea0SLionel Sambuc 		{
2304*ebfedea0SLionel Sambuc 			if (*theCharPtr >= 'a' && *theCharPtr <= 'z')
2305*ebfedea0SLionel Sambuc 			{
2306*ebfedea0SLionel Sambuc 				*theCharPtr = *theCharPtr - 'a' + 'A';
2307*ebfedea0SLionel Sambuc 			}
2308*ebfedea0SLionel Sambuc 
2309*ebfedea0SLionel Sambuc 			theCharPtr++;
2310*ebfedea0SLionel Sambuc 		}
2311*ebfedea0SLionel Sambuc 	}
2312*ebfedea0SLionel Sambuc }
2313*ebfedea0SLionel Sambuc 
2314*ebfedea0SLionel Sambuc 
2315*ebfedea0SLionel Sambuc 
2316*ebfedea0SLionel Sambuc 
2317*ebfedea0SLionel Sambuc 
2318*ebfedea0SLionel Sambuc 
2319*ebfedea0SLionel Sambuc 
ExtractCStrItemFromCStr(const char * inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean * foundItem,char * outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim)2320*ebfedea0SLionel Sambuc void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim)
2321*ebfedea0SLionel Sambuc {
2322*ebfedea0SLionel Sambuc int		theItem;
2323*ebfedea0SLionel Sambuc int		theSrcCharIndex;
2324*ebfedea0SLionel Sambuc int		theDstCharIndex;
2325*ebfedea0SLionel Sambuc 
2326*ebfedea0SLionel Sambuc 
2327*ebfedea0SLionel Sambuc 	if (foundItem != nil)
2328*ebfedea0SLionel Sambuc 	{
2329*ebfedea0SLionel Sambuc 		*foundItem = false;
2330*ebfedea0SLionel Sambuc 	}
2331*ebfedea0SLionel Sambuc 
2332*ebfedea0SLionel Sambuc 
2333*ebfedea0SLionel Sambuc 	if (outDstCharPtr != nil && inDstCharPtrMaxLength > 0 && inItemNumber >= 0 && inItemDelimiter != 0)
2334*ebfedea0SLionel Sambuc 	{
2335*ebfedea0SLionel Sambuc 		*outDstCharPtr = 0;
2336*ebfedea0SLionel Sambuc 
2337*ebfedea0SLionel Sambuc 
2338*ebfedea0SLionel Sambuc 		theSrcCharIndex = 0;
2339*ebfedea0SLionel Sambuc 
2340*ebfedea0SLionel Sambuc 		for (theItem = 0;theItem < inItemNumber;theItem++)
2341*ebfedea0SLionel Sambuc 		{
2342*ebfedea0SLionel Sambuc 			while (inSrcCStr[theSrcCharIndex] != inItemDelimiter && inSrcCStr[theSrcCharIndex] != '\0')
2343*ebfedea0SLionel Sambuc 			{
2344*ebfedea0SLionel Sambuc 				theSrcCharIndex++;
2345*ebfedea0SLionel Sambuc 			}
2346*ebfedea0SLionel Sambuc 
2347*ebfedea0SLionel Sambuc 			if (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2348*ebfedea0SLionel Sambuc 			{
2349*ebfedea0SLionel Sambuc 				theSrcCharIndex++;
2350*ebfedea0SLionel Sambuc 
2351*ebfedea0SLionel Sambuc 				if (inTreatMultipleDelimsAsSingleDelim)
2352*ebfedea0SLionel Sambuc 				{
2353*ebfedea0SLionel Sambuc 					while (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2354*ebfedea0SLionel Sambuc 					{
2355*ebfedea0SLionel Sambuc 						theSrcCharIndex++;
2356*ebfedea0SLionel Sambuc 					}
2357*ebfedea0SLionel Sambuc 				}
2358*ebfedea0SLionel Sambuc 			}
2359*ebfedea0SLionel Sambuc 
2360*ebfedea0SLionel Sambuc 
2361*ebfedea0SLionel Sambuc 			if (inSrcCStr[theSrcCharIndex] == '\0')
2362*ebfedea0SLionel Sambuc 			{
2363*ebfedea0SLionel Sambuc 				goto EXITPOINT;
2364*ebfedea0SLionel Sambuc 			}
2365*ebfedea0SLionel Sambuc 		}
2366*ebfedea0SLionel Sambuc 
2367*ebfedea0SLionel Sambuc 
2368*ebfedea0SLionel Sambuc 		if (foundItem != nil)
2369*ebfedea0SLionel Sambuc 		{
2370*ebfedea0SLionel Sambuc 			*foundItem = true;
2371*ebfedea0SLionel Sambuc 		}
2372*ebfedea0SLionel Sambuc 
2373*ebfedea0SLionel Sambuc 
2374*ebfedea0SLionel Sambuc 		theDstCharIndex = 0;
2375*ebfedea0SLionel Sambuc 
2376*ebfedea0SLionel Sambuc 		for (;;)
2377*ebfedea0SLionel Sambuc 		{
2378*ebfedea0SLionel Sambuc 			if (inSrcCStr[theSrcCharIndex] == 0 || inSrcCStr[theSrcCharIndex] == inItemDelimiter || theDstCharIndex >= inDstCharPtrMaxLength - 1)
2379*ebfedea0SLionel Sambuc 			{
2380*ebfedea0SLionel Sambuc 				outDstCharPtr[theDstCharIndex] = 0;
2381*ebfedea0SLionel Sambuc 
2382*ebfedea0SLionel Sambuc 				break;
2383*ebfedea0SLionel Sambuc 			}
2384*ebfedea0SLionel Sambuc 
2385*ebfedea0SLionel Sambuc 			outDstCharPtr[theDstCharIndex++] = inSrcCStr[theSrcCharIndex++];
2386*ebfedea0SLionel Sambuc 		}
2387*ebfedea0SLionel Sambuc 	}
2388*ebfedea0SLionel Sambuc 
2389*ebfedea0SLionel Sambuc 
2390*ebfedea0SLionel Sambuc EXITPOINT:
2391*ebfedea0SLionel Sambuc 
2392*ebfedea0SLionel Sambuc 	return;
2393*ebfedea0SLionel Sambuc }
2394*ebfedea0SLionel Sambuc 
2395*ebfedea0SLionel Sambuc 
2396*ebfedea0SLionel Sambuc 
ExtractCStrItemFromCStrIntoNewHandle(const char * inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean * foundItem,Handle * outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim)2397*ebfedea0SLionel Sambuc OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim)
2398*ebfedea0SLionel Sambuc {
2399*ebfedea0SLionel Sambuc OSErr	errCode;
2400*ebfedea0SLionel Sambuc int		theItem;
2401*ebfedea0SLionel Sambuc int		theSrcCharIndex;
2402*ebfedea0SLionel Sambuc int		theItemLength;
2403*ebfedea0SLionel Sambuc 
2404*ebfedea0SLionel Sambuc 
2405*ebfedea0SLionel Sambuc 	if (inSrcCStr == nil)
2406*ebfedea0SLionel Sambuc 	{
2407*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inSrcCStr == nil");
2408*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2409*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2410*ebfedea0SLionel Sambuc 	}
2411*ebfedea0SLionel Sambuc 
2412*ebfedea0SLionel Sambuc 	if (outNewHandle == nil)
2413*ebfedea0SLionel Sambuc 	{
2414*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, outNewHandle == nil");
2415*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2416*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2417*ebfedea0SLionel Sambuc 	}
2418*ebfedea0SLionel Sambuc 
2419*ebfedea0SLionel Sambuc 	if (foundItem == nil)
2420*ebfedea0SLionel Sambuc 	{
2421*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, foundItem == nil");
2422*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2423*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2424*ebfedea0SLionel Sambuc 	}
2425*ebfedea0SLionel Sambuc 
2426*ebfedea0SLionel Sambuc 	if (inItemNumber < 0)
2427*ebfedea0SLionel Sambuc 	{
2428*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inItemNumber < 0");
2429*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2430*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2431*ebfedea0SLionel Sambuc 	}
2432*ebfedea0SLionel Sambuc 
2433*ebfedea0SLionel Sambuc 	if (inItemDelimiter == 0)
2434*ebfedea0SLionel Sambuc 	{
2435*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inItemDelimiter == 0");
2436*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2437*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2438*ebfedea0SLionel Sambuc 	}
2439*ebfedea0SLionel Sambuc 
2440*ebfedea0SLionel Sambuc 
2441*ebfedea0SLionel Sambuc 	*foundItem = false;
2442*ebfedea0SLionel Sambuc 
2443*ebfedea0SLionel Sambuc 	theSrcCharIndex = 0;
2444*ebfedea0SLionel Sambuc 
2445*ebfedea0SLionel Sambuc 	for (theItem = 0;theItem < inItemNumber;theItem++)
2446*ebfedea0SLionel Sambuc 	{
2447*ebfedea0SLionel Sambuc 		while (inSrcCStr[theSrcCharIndex] != inItemDelimiter && inSrcCStr[theSrcCharIndex] != '\0')
2448*ebfedea0SLionel Sambuc 		{
2449*ebfedea0SLionel Sambuc 			theSrcCharIndex++;
2450*ebfedea0SLionel Sambuc 		}
2451*ebfedea0SLionel Sambuc 
2452*ebfedea0SLionel Sambuc 		if (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2453*ebfedea0SLionel Sambuc 		{
2454*ebfedea0SLionel Sambuc 			theSrcCharIndex++;
2455*ebfedea0SLionel Sambuc 
2456*ebfedea0SLionel Sambuc 			if (inTreatMultipleDelimsAsSingleDelim)
2457*ebfedea0SLionel Sambuc 			{
2458*ebfedea0SLionel Sambuc 				while (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2459*ebfedea0SLionel Sambuc 				{
2460*ebfedea0SLionel Sambuc 					theSrcCharIndex++;
2461*ebfedea0SLionel Sambuc 				}
2462*ebfedea0SLionel Sambuc 			}
2463*ebfedea0SLionel Sambuc 		}
2464*ebfedea0SLionel Sambuc 
2465*ebfedea0SLionel Sambuc 
2466*ebfedea0SLionel Sambuc 		if (inSrcCStr[theSrcCharIndex] == '\0')
2467*ebfedea0SLionel Sambuc 		{
2468*ebfedea0SLionel Sambuc 			errCode = noErr;
2469*ebfedea0SLionel Sambuc 
2470*ebfedea0SLionel Sambuc 			goto EXITPOINT;
2471*ebfedea0SLionel Sambuc 		}
2472*ebfedea0SLionel Sambuc 	}
2473*ebfedea0SLionel Sambuc 
2474*ebfedea0SLionel Sambuc 
2475*ebfedea0SLionel Sambuc 	*foundItem = true;
2476*ebfedea0SLionel Sambuc 
2477*ebfedea0SLionel Sambuc 
2478*ebfedea0SLionel Sambuc 	for (theItemLength = 0;;theItemLength++)
2479*ebfedea0SLionel Sambuc 	{
2480*ebfedea0SLionel Sambuc 		if (inSrcCStr[theSrcCharIndex + theItemLength] == 0 || inSrcCStr[theSrcCharIndex + theItemLength] == inItemDelimiter)
2481*ebfedea0SLionel Sambuc 		{
2482*ebfedea0SLionel Sambuc 			break;
2483*ebfedea0SLionel Sambuc 		}
2484*ebfedea0SLionel Sambuc 	}
2485*ebfedea0SLionel Sambuc 
2486*ebfedea0SLionel Sambuc 
2487*ebfedea0SLionel Sambuc 	*outNewHandle = NewHandle(theItemLength + 1);
2488*ebfedea0SLionel Sambuc 
2489*ebfedea0SLionel Sambuc 	if (*outNewHandle == nil)
2490*ebfedea0SLionel Sambuc 	{
2491*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("ExtractCStrItemFromCStrIntoNewHandle: Can't allocate Handle, MemError() = ",MemError());
2492*ebfedea0SLionel Sambuc 	}
2493*ebfedea0SLionel Sambuc 
2494*ebfedea0SLionel Sambuc 
2495*ebfedea0SLionel Sambuc 	BlockMove(inSrcCStr + theSrcCharIndex,**outNewHandle,theItemLength);
2496*ebfedea0SLionel Sambuc 
2497*ebfedea0SLionel Sambuc 	(**outNewHandle)[theItemLength] = 0;
2498*ebfedea0SLionel Sambuc 
2499*ebfedea0SLionel Sambuc 	errCode = noErr;
2500*ebfedea0SLionel Sambuc 
2501*ebfedea0SLionel Sambuc 
2502*ebfedea0SLionel Sambuc EXITPOINT:
2503*ebfedea0SLionel Sambuc 
2504*ebfedea0SLionel Sambuc 	return(errCode);
2505*ebfedea0SLionel Sambuc }
2506*ebfedea0SLionel Sambuc 
2507*ebfedea0SLionel Sambuc 
2508*ebfedea0SLionel Sambuc 
2509*ebfedea0SLionel Sambuc 
2510*ebfedea0SLionel Sambuc 
2511*ebfedea0SLionel Sambuc 
ExtractFloatFromCStr(const char * inCString,extended80 * outFloat)2512*ebfedea0SLionel Sambuc OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat)
2513*ebfedea0SLionel Sambuc {
2514*ebfedea0SLionel Sambuc OSErr				errCode;
2515*ebfedea0SLionel Sambuc Str255				theStr255;
2516*ebfedea0SLionel Sambuc Handle				theNumberPartsTableHandle = nil;
2517*ebfedea0SLionel Sambuc long				theNumberPartsOffset,theNumberPartsLength;
2518*ebfedea0SLionel Sambuc FormatResultType	theFormatResultType;
2519*ebfedea0SLionel Sambuc NumberParts			theNumberPartsTable;
2520*ebfedea0SLionel Sambuc NumFormatStringRec	theNumFormatStringRec;
2521*ebfedea0SLionel Sambuc 
2522*ebfedea0SLionel Sambuc 
2523*ebfedea0SLionel Sambuc 	if (inCString == nil)
2524*ebfedea0SLionel Sambuc 	{
2525*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractFloatFromCStr: Bad parameter, inCString == nil");
2526*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2527*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2528*ebfedea0SLionel Sambuc 	}
2529*ebfedea0SLionel Sambuc 
2530*ebfedea0SLionel Sambuc 	if (outFloat == nil)
2531*ebfedea0SLionel Sambuc 	{
2532*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractFloatFromCStr: Bad parameter, outFloat == nil");
2533*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2534*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2535*ebfedea0SLionel Sambuc 	}
2536*ebfedea0SLionel Sambuc 
2537*ebfedea0SLionel Sambuc 
2538*ebfedea0SLionel Sambuc //	GetIntlResourceTable(smRoman,smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2539*ebfedea0SLionel Sambuc 
2540*ebfedea0SLionel Sambuc 	GetIntlResourceTable(GetScriptManagerVariable(smSysScript),smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2541*ebfedea0SLionel Sambuc 
2542*ebfedea0SLionel Sambuc 	if (theNumberPartsTableHandle == nil)
2543*ebfedea0SLionel Sambuc 	{
2544*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractFloatFromCStr: Can't get number parts table for converting string representations to/from numeric representations");
2545*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2546*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2547*ebfedea0SLionel Sambuc 	}
2548*ebfedea0SLionel Sambuc 
2549*ebfedea0SLionel Sambuc 	if (theNumberPartsLength > sizeof(theNumberPartsTable))
2550*ebfedea0SLionel Sambuc 	{
2551*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractFloatFromCStr: Number parts table has bad length");
2552*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2553*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2554*ebfedea0SLionel Sambuc 	}
2555*ebfedea0SLionel Sambuc 
2556*ebfedea0SLionel Sambuc 
2557*ebfedea0SLionel Sambuc 	BlockMove(*theNumberPartsTableHandle + theNumberPartsOffset,&theNumberPartsTable,theNumberPartsLength);
2558*ebfedea0SLionel Sambuc 
2559*ebfedea0SLionel Sambuc 
2560*ebfedea0SLionel Sambuc 	theFormatResultType = (FormatResultType) StringToFormatRec(kNumberFormatString,&theNumberPartsTable,&theNumFormatStringRec);
2561*ebfedea0SLionel Sambuc 
2562*ebfedea0SLionel Sambuc 	if (theFormatResultType != fFormatOK)
2563*ebfedea0SLionel Sambuc 	{
2564*ebfedea0SLionel Sambuc 		SetErrorMessage("ExtractFloatFromCStr: StringToFormatRec() != fFormatOK");
2565*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2566*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2567*ebfedea0SLionel Sambuc 	}
2568*ebfedea0SLionel Sambuc 
2569*ebfedea0SLionel Sambuc 
2570*ebfedea0SLionel Sambuc 	CopyCStrToPStr(inCString,theStr255,sizeof(theStr255));
2571*ebfedea0SLionel Sambuc 
2572*ebfedea0SLionel Sambuc 
2573*ebfedea0SLionel Sambuc 	theFormatResultType = (FormatResultType) StringToExtended(theStr255,&theNumFormatStringRec,&theNumberPartsTable,outFloat);
2574*ebfedea0SLionel Sambuc 
2575*ebfedea0SLionel Sambuc 	if (theFormatResultType != fFormatOK && theFormatResultType != fBestGuess)
2576*ebfedea0SLionel Sambuc 	{
2577*ebfedea0SLionel Sambuc 		SetErrorMessageAndLongIntAndBail("ExtractFloatFromCStr: StringToExtended() = ",theFormatResultType);
2578*ebfedea0SLionel Sambuc 	}
2579*ebfedea0SLionel Sambuc 
2580*ebfedea0SLionel Sambuc 
2581*ebfedea0SLionel Sambuc 	errCode = noErr;
2582*ebfedea0SLionel Sambuc 
2583*ebfedea0SLionel Sambuc 
2584*ebfedea0SLionel Sambuc EXITPOINT:
2585*ebfedea0SLionel Sambuc 
2586*ebfedea0SLionel Sambuc 	return(errCode);
2587*ebfedea0SLionel Sambuc }
2588*ebfedea0SLionel Sambuc 
2589*ebfedea0SLionel Sambuc 
2590*ebfedea0SLionel Sambuc 
CopyFloatToCStr(const extended80 * theFloat,char * theCStr,const int maxCStrLength,const int inMaxNumIntDigits,const int inMaxNumFractDigits)2591*ebfedea0SLionel Sambuc OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits,const int inMaxNumFractDigits)
2592*ebfedea0SLionel Sambuc {
2593*ebfedea0SLionel Sambuc OSErr				errCode;
2594*ebfedea0SLionel Sambuc Str255				theStr255;
2595*ebfedea0SLionel Sambuc Handle				theNumberPartsTableHandle = nil;
2596*ebfedea0SLionel Sambuc long				theNumberPartsOffset,theNumberPartsLength;
2597*ebfedea0SLionel Sambuc FormatResultType	theFormatResultType;
2598*ebfedea0SLionel Sambuc NumberParts			theNumberPartsTable;
2599*ebfedea0SLionel Sambuc NumFormatStringRec	theNumFormatStringRec;
2600*ebfedea0SLionel Sambuc 
2601*ebfedea0SLionel Sambuc 
2602*ebfedea0SLionel Sambuc 	if (theCStr == nil)
2603*ebfedea0SLionel Sambuc 	{
2604*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: Bad parameter, theCStr == nil");
2605*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2606*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2607*ebfedea0SLionel Sambuc 	}
2608*ebfedea0SLionel Sambuc 
2609*ebfedea0SLionel Sambuc 	if (theFloat == nil)
2610*ebfedea0SLionel Sambuc 	{
2611*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: Bad parameter, theFloat == nil");
2612*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2613*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2614*ebfedea0SLionel Sambuc 	}
2615*ebfedea0SLionel Sambuc 
2616*ebfedea0SLionel Sambuc 
2617*ebfedea0SLionel Sambuc //	GetIntlResourceTable(smRoman,smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2618*ebfedea0SLionel Sambuc 
2619*ebfedea0SLionel Sambuc 	GetIntlResourceTable(GetScriptManagerVariable(smSysScript),smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2620*ebfedea0SLionel Sambuc 
2621*ebfedea0SLionel Sambuc 	if (theNumberPartsTableHandle == nil)
2622*ebfedea0SLionel Sambuc 	{
2623*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: Can't get number parts table for converting string representations to/from numeric representations");
2624*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2625*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2626*ebfedea0SLionel Sambuc 	}
2627*ebfedea0SLionel Sambuc 
2628*ebfedea0SLionel Sambuc 	if (theNumberPartsLength > sizeof(theNumberPartsTable))
2629*ebfedea0SLionel Sambuc 	{
2630*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: Number parts table has bad length");
2631*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2632*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2633*ebfedea0SLionel Sambuc 	}
2634*ebfedea0SLionel Sambuc 
2635*ebfedea0SLionel Sambuc 
2636*ebfedea0SLionel Sambuc 	BlockMove(*theNumberPartsTableHandle + theNumberPartsOffset,&theNumberPartsTable,theNumberPartsLength);
2637*ebfedea0SLionel Sambuc 
2638*ebfedea0SLionel Sambuc 
2639*ebfedea0SLionel Sambuc 	if (inMaxNumIntDigits >= 0 || inMaxNumFractDigits >= 0)
2640*ebfedea0SLionel Sambuc 	{
2641*ebfedea0SLionel Sambuc 	char	numberFormat[64];
2642*ebfedea0SLionel Sambuc 	int		numberFormatLength = 0;
2643*ebfedea0SLionel Sambuc 
2644*ebfedea0SLionel Sambuc 		for (int i = 0;i < inMaxNumIntDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2645*ebfedea0SLionel Sambuc 		{
2646*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = '0';
2647*ebfedea0SLionel Sambuc 		}
2648*ebfedea0SLionel Sambuc 
2649*ebfedea0SLionel Sambuc 		if (inMaxNumFractDigits > 0 && numberFormatLength < sizeof(numberFormat) - 1)
2650*ebfedea0SLionel Sambuc 		{
2651*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = '.';
2652*ebfedea0SLionel Sambuc 
2653*ebfedea0SLionel Sambuc 			for (int i = 0;i < inMaxNumFractDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2654*ebfedea0SLionel Sambuc 			{
2655*ebfedea0SLionel Sambuc 				numberFormat[numberFormatLength++] = '0';
2656*ebfedea0SLionel Sambuc 			}
2657*ebfedea0SLionel Sambuc 		}
2658*ebfedea0SLionel Sambuc 
2659*ebfedea0SLionel Sambuc 
2660*ebfedea0SLionel Sambuc 		if (numberFormatLength < sizeof(numberFormat) - 1)
2661*ebfedea0SLionel Sambuc 		{
2662*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = ';';
2663*ebfedea0SLionel Sambuc 		}
2664*ebfedea0SLionel Sambuc 
2665*ebfedea0SLionel Sambuc 		if (numberFormatLength < sizeof(numberFormat) - 1)
2666*ebfedea0SLionel Sambuc 		{
2667*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = '-';
2668*ebfedea0SLionel Sambuc 		}
2669*ebfedea0SLionel Sambuc 
2670*ebfedea0SLionel Sambuc 
2671*ebfedea0SLionel Sambuc 		for (int i = 0;i < inMaxNumIntDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2672*ebfedea0SLionel Sambuc 		{
2673*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = '0';
2674*ebfedea0SLionel Sambuc 		}
2675*ebfedea0SLionel Sambuc 
2676*ebfedea0SLionel Sambuc 		if (inMaxNumFractDigits > 0 && numberFormatLength < sizeof(numberFormat) - 1)
2677*ebfedea0SLionel Sambuc 		{
2678*ebfedea0SLionel Sambuc 			numberFormat[numberFormatLength++] = '.';
2679*ebfedea0SLionel Sambuc 
2680*ebfedea0SLionel Sambuc 			for (int i = 0;i < inMaxNumFractDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2681*ebfedea0SLionel Sambuc 			{
2682*ebfedea0SLionel Sambuc 				numberFormat[numberFormatLength++] = '0';
2683*ebfedea0SLionel Sambuc 			}
2684*ebfedea0SLionel Sambuc 		}
2685*ebfedea0SLionel Sambuc 
2686*ebfedea0SLionel Sambuc 		numberFormat[numberFormatLength] = '\0';
2687*ebfedea0SLionel Sambuc 
2688*ebfedea0SLionel Sambuc 
2689*ebfedea0SLionel Sambuc 	Str255	tempStr255;
2690*ebfedea0SLionel Sambuc 
2691*ebfedea0SLionel Sambuc 		CopyCStrToPStr(numberFormat,tempStr255,sizeof(tempStr255));
2692*ebfedea0SLionel Sambuc 
2693*ebfedea0SLionel Sambuc 		theFormatResultType = (FormatResultType) StringToFormatRec(tempStr255,&theNumberPartsTable,&theNumFormatStringRec);
2694*ebfedea0SLionel Sambuc 	}
2695*ebfedea0SLionel Sambuc 
2696*ebfedea0SLionel Sambuc 	else
2697*ebfedea0SLionel Sambuc 	{
2698*ebfedea0SLionel Sambuc 		theFormatResultType = (FormatResultType) StringToFormatRec(kNumberFormatString,&theNumberPartsTable,&theNumFormatStringRec);
2699*ebfedea0SLionel Sambuc 	}
2700*ebfedea0SLionel Sambuc 
2701*ebfedea0SLionel Sambuc 	if (theFormatResultType != fFormatOK)
2702*ebfedea0SLionel Sambuc 	{
2703*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: StringToFormatRec() != fFormatOK");
2704*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2705*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2706*ebfedea0SLionel Sambuc 	}
2707*ebfedea0SLionel Sambuc 
2708*ebfedea0SLionel Sambuc 
2709*ebfedea0SLionel Sambuc 	theFormatResultType = (FormatResultType) ExtendedToString(theFloat,&theNumFormatStringRec,&theNumberPartsTable,theStr255);
2710*ebfedea0SLionel Sambuc 
2711*ebfedea0SLionel Sambuc 	if (theFormatResultType != fFormatOK)
2712*ebfedea0SLionel Sambuc 	{
2713*ebfedea0SLionel Sambuc 		SetErrorMessage("CopyFloatToCStr: ExtendedToString() != fFormatOK");
2714*ebfedea0SLionel Sambuc 		errCode = kGenericError;
2715*ebfedea0SLionel Sambuc 		goto EXITPOINT;
2716*ebfedea0SLionel Sambuc 	}
2717*ebfedea0SLionel Sambuc 
2718*ebfedea0SLionel Sambuc 
2719*ebfedea0SLionel Sambuc 	CopyPStrToCStr(theStr255,theCStr,maxCStrLength);
2720*ebfedea0SLionel Sambuc 
2721*ebfedea0SLionel Sambuc 	errCode = noErr;
2722*ebfedea0SLionel Sambuc 
2723*ebfedea0SLionel Sambuc 
2724*ebfedea0SLionel Sambuc EXITPOINT:
2725*ebfedea0SLionel Sambuc 
2726*ebfedea0SLionel Sambuc 	return(errCode);
2727*ebfedea0SLionel Sambuc }
2728*ebfedea0SLionel Sambuc 
2729*ebfedea0SLionel Sambuc 
2730*ebfedea0SLionel Sambuc 
2731*ebfedea0SLionel Sambuc 
2732*ebfedea0SLionel Sambuc 
SkipWhiteSpace(char ** ioSrcCharPtr,const Boolean inStopAtEOL)2733*ebfedea0SLionel Sambuc void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL)
2734*ebfedea0SLionel Sambuc {
2735*ebfedea0SLionel Sambuc 	if (ioSrcCharPtr != nil && *ioSrcCharPtr != nil)
2736*ebfedea0SLionel Sambuc 	{
2737*ebfedea0SLionel Sambuc 		if (inStopAtEOL)
2738*ebfedea0SLionel Sambuc 		{
2739*ebfedea0SLionel Sambuc 			while ((**ioSrcCharPtr == ' ' || **ioSrcCharPtr == '\t') && **ioSrcCharPtr != '\r' && **ioSrcCharPtr != '\n')
2740*ebfedea0SLionel Sambuc 			{
2741*ebfedea0SLionel Sambuc 				*ioSrcCharPtr++;
2742*ebfedea0SLionel Sambuc 			}
2743*ebfedea0SLionel Sambuc 		}
2744*ebfedea0SLionel Sambuc 
2745*ebfedea0SLionel Sambuc 		else
2746*ebfedea0SLionel Sambuc 		{
2747*ebfedea0SLionel Sambuc 			while (**ioSrcCharPtr == ' ' || **ioSrcCharPtr == '\t')
2748*ebfedea0SLionel Sambuc 			{
2749*ebfedea0SLionel Sambuc 				*ioSrcCharPtr++;
2750*ebfedea0SLionel Sambuc 			}
2751*ebfedea0SLionel Sambuc 		}
2752*ebfedea0SLionel Sambuc 	}
2753*ebfedea0SLionel Sambuc }
2754