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