1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_filter.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <string.h>
28*b1cdbd2cSJim Jagielski #include <stdlib.h>
29*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
30*b1cdbd2cSJim Jagielski #include "dxfgrprd.hxx"
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski // we use an own ReadLine function, because Stream::ReadLine stops if
35*b1cdbd2cSJim Jagielski // a 0-sign occurs; this functions converts 0-signs to blanks and reads
36*b1cdbd2cSJim Jagielski // a complete line until a cr/lf is found
37*b1cdbd2cSJim Jagielski 
DXFReadLine(SvStream & rIStm,ByteString & rStr)38*b1cdbd2cSJim Jagielski sal_Bool DXFReadLine( SvStream& rIStm, ByteString& rStr )
39*b1cdbd2cSJim Jagielski {
40*b1cdbd2cSJim Jagielski 	char  buf[256 + 1];
41*b1cdbd2cSJim Jagielski 	sal_Bool  bEnd = sal_False;
42*b1cdbd2cSJim Jagielski 	sal_uLong nOldFilePos = rIStm.Tell();
43*b1cdbd2cSJim Jagielski 	char  c = 0;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 	rStr.Erase();
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	while( !bEnd && !rIStm.GetError() )   // !!! nicht auf EOF testen,
48*b1cdbd2cSJim Jagielski 										  // !!! weil wir blockweise
49*b1cdbd2cSJim Jagielski 										  // !!! lesen
50*b1cdbd2cSJim Jagielski 	{
51*b1cdbd2cSJim Jagielski 		sal_uInt16 nLen = (sal_uInt16)rIStm.Read( buf, sizeof(buf)-1 );
52*b1cdbd2cSJim Jagielski 		if( !nLen )
53*b1cdbd2cSJim Jagielski 		{
54*b1cdbd2cSJim Jagielski 			if( rStr.Len() == 0 )
55*b1cdbd2cSJim Jagielski 				return sal_False;
56*b1cdbd2cSJim Jagielski 			else
57*b1cdbd2cSJim Jagielski 				break;
58*b1cdbd2cSJim Jagielski 		}
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 		for( sal_uInt16 n = 0; n < nLen ; n++ )
61*b1cdbd2cSJim Jagielski 		{
62*b1cdbd2cSJim Jagielski 			c = buf[n];
63*b1cdbd2cSJim Jagielski 			if( c != '\n' && c != '\r' )
64*b1cdbd2cSJim Jagielski 			{
65*b1cdbd2cSJim Jagielski 				if( !c )
66*b1cdbd2cSJim Jagielski 					c = ' ';
67*b1cdbd2cSJim Jagielski 				rStr += c;
68*b1cdbd2cSJim Jagielski 			}
69*b1cdbd2cSJim Jagielski 			else
70*b1cdbd2cSJim Jagielski 			{
71*b1cdbd2cSJim Jagielski 				bEnd = sal_True;
72*b1cdbd2cSJim Jagielski 				break;
73*b1cdbd2cSJim Jagielski 			}
74*b1cdbd2cSJim Jagielski 		}
75*b1cdbd2cSJim Jagielski 	}
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 	if( !bEnd && !rIStm.GetError() && rStr.Len() )
78*b1cdbd2cSJim Jagielski 		bEnd = sal_True;
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 	nOldFilePos += rStr.Len();
81*b1cdbd2cSJim Jagielski 	if( rIStm.Tell() > nOldFilePos )
82*b1cdbd2cSJim Jagielski 		nOldFilePos++;
83*b1cdbd2cSJim Jagielski 	rIStm.Seek( nOldFilePos );  // seeken wg. obigem BlockRead!
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	if( bEnd && (c=='\r' || c=='\n'))  // Sonderbehandlung DOS-Dateien
86*b1cdbd2cSJim Jagielski 	{
87*b1cdbd2cSJim Jagielski 		char cTemp;
88*b1cdbd2cSJim Jagielski 		rIStm.Read((char*)&cTemp , sizeof(cTemp) );
89*b1cdbd2cSJim Jagielski 		if( cTemp == c || (cTemp != '\n' && cTemp != '\r') )
90*b1cdbd2cSJim Jagielski 			rIStm.Seek( nOldFilePos );
91*b1cdbd2cSJim Jagielski 	}
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 	return bEnd;
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski // ------------------
97*b1cdbd2cSJim Jagielski 
DXFGroupReader(SvStream & rIStream,sal_uInt16 nminpercent,sal_uInt16 nmaxpercent)98*b1cdbd2cSJim Jagielski DXFGroupReader::DXFGroupReader(SvStream & rIStream, sal_uInt16 nminpercent, sal_uInt16 nmaxpercent ) :
99*b1cdbd2cSJim Jagielski 	rIS(rIStream)
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 	nIBuffPos=0;
104*b1cdbd2cSJim Jagielski 	nIBuffSize=0;
105*b1cdbd2cSJim Jagielski 	bStatus=sal_True;
106*b1cdbd2cSJim Jagielski 	nLastG=0;
107*b1cdbd2cSJim Jagielski 	nGCount=0;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 	nMinPercent=(sal_uLong)nminpercent;
110*b1cdbd2cSJim Jagielski 	nMaxPercent=(sal_uLong)nmaxpercent;
111*b1cdbd2cSJim Jagielski 	nLastPercent=nMinPercent;
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 	rIS.Seek(STREAM_SEEK_TO_END);
114*b1cdbd2cSJim Jagielski 	nFileSize=rIS.Tell();
115*b1cdbd2cSJim Jagielski 	rIS.Seek(0);
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 	for (i=0; i<10; i++) S0_9[i][0]=0;
118*b1cdbd2cSJim Jagielski     S100[ 0 ] = S102[ 0 ] = 0;
119*b1cdbd2cSJim Jagielski 	for (i=0; i<50; i++) F10_59[i]=0.0;
120*b1cdbd2cSJim Jagielski 	for (i=0; i<20; i++) I60_79[i]=0;
121*b1cdbd2cSJim Jagielski 	for (i=0; i<10; i++) I90_99[i]=0;
122*b1cdbd2cSJim Jagielski 	for (i=0; i< 8; i++) F140_147[i]=0.0;
123*b1cdbd2cSJim Jagielski 	for (i=0; i< 6; i++) I170_175[i]=0;
124*b1cdbd2cSJim Jagielski 	for (i=0; i<30; i++) F210_239[i]=0.0;
125*b1cdbd2cSJim Jagielski 	for (i=0; i<11; i++) S999_1009[i][0]=0;
126*b1cdbd2cSJim Jagielski 	for (i=0; i<50; i++) F1010_1059[i]=0.0;
127*b1cdbd2cSJim Jagielski 	for (i=0; i<20; i++) I1060_1079[i]=0;
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 
Read()132*b1cdbd2cSJim Jagielski sal_uInt16 DXFGroupReader::Read()
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski 	sal_uInt16 nG = 0;
135*b1cdbd2cSJim Jagielski 	if ( bStatus )
136*b1cdbd2cSJim Jagielski 	{
137*b1cdbd2cSJim Jagielski 		nGCount++;
138*b1cdbd2cSJim Jagielski 		nG = (sal_uInt16)ReadI();
139*b1cdbd2cSJim Jagielski 		if ( bStatus )
140*b1cdbd2cSJim Jagielski 		{
141*b1cdbd2cSJim Jagielski 			char aTmp[ DXF_MAX_STRING_LEN + 1 ];
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 			if      (nG<  10) ReadS(S0_9[nG]);
144*b1cdbd2cSJim Jagielski 			else if (nG<  60) F10_59[nG-10]=ReadF();
145*b1cdbd2cSJim Jagielski 			else if (nG<  80) I60_79[nG-60]=ReadI();
146*b1cdbd2cSJim Jagielski 			else if (nG<  90) ReadS( aTmp );
147*b1cdbd2cSJim Jagielski 			else if (nG<  99) I90_99[nG-90]=ReadI();
148*b1cdbd2cSJim Jagielski 			else if (nG==100) ReadS(S100);
149*b1cdbd2cSJim Jagielski 			else if (nG==102) ReadS(S102);
150*b1cdbd2cSJim Jagielski 			else if (nG==105) ReadS( aTmp );
151*b1cdbd2cSJim Jagielski 			else if (nG< 140) ReadS( aTmp );
152*b1cdbd2cSJim Jagielski 			else if (nG< 148) F140_147[nG-140]=ReadF();
153*b1cdbd2cSJim Jagielski 			else if (nG< 170) ReadS( aTmp );
154*b1cdbd2cSJim Jagielski 			else if (nG< 176) I170_175[nG-175]=ReadI();
155*b1cdbd2cSJim Jagielski 			else if (nG< 180) ReadI();
156*b1cdbd2cSJim Jagielski 			else if (nG< 210) ReadS( aTmp );
157*b1cdbd2cSJim Jagielski 			else if (nG< 240) F210_239[nG-210]=ReadF();
158*b1cdbd2cSJim Jagielski 			else if (nG<=369) ReadS( aTmp );
159*b1cdbd2cSJim Jagielski 			else if (nG< 999) ReadS( aTmp );
160*b1cdbd2cSJim Jagielski 			else if (nG<1010) ReadS(S999_1009[nG-999]);
161*b1cdbd2cSJim Jagielski 			else if (nG<1060) F1010_1059[nG-1010]=ReadF();
162*b1cdbd2cSJim Jagielski 			else if (nG<1080) I1060_1079[nG-1060]=ReadI();
163*b1cdbd2cSJim Jagielski 			else bStatus = sal_False;
164*b1cdbd2cSJim Jagielski 		}
165*b1cdbd2cSJim Jagielski 	}
166*b1cdbd2cSJim Jagielski 	if ( bStatus )
167*b1cdbd2cSJim Jagielski 		nLastG = nG;
168*b1cdbd2cSJim Jagielski 	else
169*b1cdbd2cSJim Jagielski 	{
170*b1cdbd2cSJim Jagielski 		nG = 0;
171*b1cdbd2cSJim Jagielski 		SetS( 0, "EOF" );
172*b1cdbd2cSJim Jagielski 		if ( nGCount != 0xffffffff )
173*b1cdbd2cSJim Jagielski 		{
174*b1cdbd2cSJim Jagielski 			// InfoBox(NULL,String("Fehler ab Gruppe Nr ")+String(nGCount)).Execute();
175*b1cdbd2cSJim Jagielski 			nGCount=0xffffffff;
176*b1cdbd2cSJim Jagielski 		}
177*b1cdbd2cSJim Jagielski 	}
178*b1cdbd2cSJim Jagielski 	nLastG = nG;
179*b1cdbd2cSJim Jagielski 	return nG;
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 
GetI(sal_uInt16 nG)183*b1cdbd2cSJim Jagielski long DXFGroupReader::GetI(sal_uInt16 nG)
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski 	sal_Int32 nRetValue = 0;
186*b1cdbd2cSJim Jagielski 	if ( ( nG >= 60 ) && ( nG <= 79 ) )
187*b1cdbd2cSJim Jagielski 		nRetValue = I60_79[ nG - 60 ];
188*b1cdbd2cSJim Jagielski 	else if ( ( nG >= 90 ) && ( nG <= 99 ) )
189*b1cdbd2cSJim Jagielski 		nRetValue = I90_99[ nG - 90 ];
190*b1cdbd2cSJim Jagielski 	else if ( ( nG >= 170 ) && ( nG <= 175 ) )
191*b1cdbd2cSJim Jagielski 		nRetValue = I170_175[ nG - 170 ];
192*b1cdbd2cSJim Jagielski 	else if ( ( nG >= 1060 ) && ( nG <= 1079 ) )
193*b1cdbd2cSJim Jagielski 		nRetValue = I1060_1079[ nG - 1060 ];
194*b1cdbd2cSJim Jagielski 	return nRetValue;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski 
GetF(sal_uInt16 nG)197*b1cdbd2cSJim Jagielski double DXFGroupReader::GetF(sal_uInt16 nG)
198*b1cdbd2cSJim Jagielski {
199*b1cdbd2cSJim Jagielski 	nG-=10;
200*b1cdbd2cSJim Jagielski 	if (nG<50) return F10_59[nG];
201*b1cdbd2cSJim Jagielski 	else {
202*b1cdbd2cSJim Jagielski 		nG-=130;
203*b1cdbd2cSJim Jagielski 		if (nG<8) return F140_147[nG];
204*b1cdbd2cSJim Jagielski 		else {
205*b1cdbd2cSJim Jagielski 			nG-=70;
206*b1cdbd2cSJim Jagielski 			if (nG<30) return F210_239[nG];
207*b1cdbd2cSJim Jagielski 			else {
208*b1cdbd2cSJim Jagielski 				nG-=800;
209*b1cdbd2cSJim Jagielski 				if (nG<50) return F1010_1059[nG];
210*b1cdbd2cSJim Jagielski 				else return 0;
211*b1cdbd2cSJim Jagielski 			}
212*b1cdbd2cSJim Jagielski 		}
213*b1cdbd2cSJim Jagielski 	}
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
GetS(sal_uInt16 nG)216*b1cdbd2cSJim Jagielski const char * DXFGroupReader::GetS(sal_uInt16 nG)
217*b1cdbd2cSJim Jagielski {
218*b1cdbd2cSJim Jagielski 	if (nG<10) return S0_9[nG];
219*b1cdbd2cSJim Jagielski 	else if ( nG == 100 )
220*b1cdbd2cSJim Jagielski         return S100;
221*b1cdbd2cSJim Jagielski     else if ( nG == 102 )
222*b1cdbd2cSJim Jagielski         return S102;
223*b1cdbd2cSJim Jagielski     else
224*b1cdbd2cSJim Jagielski     {
225*b1cdbd2cSJim Jagielski 		nG-=999;
226*b1cdbd2cSJim Jagielski 		if (nG<11) return S999_1009[nG];
227*b1cdbd2cSJim Jagielski 		else return NULL;
228*b1cdbd2cSJim Jagielski 	}
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski 
SetF(sal_uInt16 nG,double fF)231*b1cdbd2cSJim Jagielski void DXFGroupReader::SetF(sal_uInt16 nG, double fF)
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski 	nG-=10;
234*b1cdbd2cSJim Jagielski 	if (nG<50) F10_59[nG]=fF;
235*b1cdbd2cSJim Jagielski 	else {
236*b1cdbd2cSJim Jagielski 		nG-=130;
237*b1cdbd2cSJim Jagielski 		if (nG<8) F140_147[nG]=fF;
238*b1cdbd2cSJim Jagielski 		else {
239*b1cdbd2cSJim Jagielski 			nG-=70;
240*b1cdbd2cSJim Jagielski 			if (nG<30) F210_239[nG]=fF;
241*b1cdbd2cSJim Jagielski 			else {
242*b1cdbd2cSJim Jagielski 				nG-=800;
243*b1cdbd2cSJim Jagielski 				if (nG<50) F1010_1059[nG]=fF;
244*b1cdbd2cSJim Jagielski 			}
245*b1cdbd2cSJim Jagielski 		}
246*b1cdbd2cSJim Jagielski 	}
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 
SetS(sal_uInt16 nG,const char * sS)250*b1cdbd2cSJim Jagielski void DXFGroupReader::SetS(sal_uInt16 nG, const char * sS)
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski     char* pPtr = NULL;
253*b1cdbd2cSJim Jagielski 	if ( nG < 10 )
254*b1cdbd2cSJim Jagielski         pPtr = S0_9[ nG ];
255*b1cdbd2cSJim Jagielski 	else if ( nG == 100 )
256*b1cdbd2cSJim Jagielski         pPtr = S100;
257*b1cdbd2cSJim Jagielski     else if ( nG == 102 )
258*b1cdbd2cSJim Jagielski         pPtr = S102;
259*b1cdbd2cSJim Jagielski     else
260*b1cdbd2cSJim Jagielski     {
261*b1cdbd2cSJim Jagielski 		nG -= 999;
262*b1cdbd2cSJim Jagielski 		if ( nG < 11 )
263*b1cdbd2cSJim Jagielski             pPtr = S999_1009[ nG ];
264*b1cdbd2cSJim Jagielski 	}
265*b1cdbd2cSJim Jagielski     if ( pPtr )
266*b1cdbd2cSJim Jagielski         strncpy( pPtr, sS, DXF_MAX_STRING_LEN + 1 );
267*b1cdbd2cSJim Jagielski }
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 
ReadLine(char * ptgt)270*b1cdbd2cSJim Jagielski void DXFGroupReader::ReadLine(char * ptgt)
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski 	ByteString	aStr;
273*b1cdbd2cSJim Jagielski 	sal_uLong		nLen;
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 	DXFReadLine( rIS, aStr );
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 	nLen = aStr.Len();
278*b1cdbd2cSJim Jagielski 	if ( nLen > DXF_MAX_STRING_LEN )
279*b1cdbd2cSJim Jagielski 		nLen = DXF_MAX_STRING_LEN;
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 	memcpy( ptgt, aStr.GetBuffer(), nLen );
282*b1cdbd2cSJim Jagielski 	ptgt[ nLen ] = 0x00;
283*b1cdbd2cSJim Jagielski /*
284*b1cdbd2cSJim Jagielski 	if ( pCallback )
285*b1cdbd2cSJim Jagielski 	{
286*b1cdbd2cSJim Jagielski 		const sal_uLong nPercent= nMinPercent + (nMaxPercent-nMinPercent)*rIS.Tell() / nFileSize;
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski 		if ( nPercent >= nLastPercent + 4 )
289*b1cdbd2cSJim Jagielski 		{
290*b1cdbd2cSJim Jagielski 			nLastPercent=nPercent;
291*b1cdbd2cSJim Jagielski 			if (((*pCallback)(pCallerData,(sal_uInt16)nPercent))==sal_True)
292*b1cdbd2cSJim Jagielski 				bStatus=sal_False;
293*b1cdbd2cSJim Jagielski 		}
294*b1cdbd2cSJim Jagielski 	}
295*b1cdbd2cSJim Jagielski */
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 
ReadI()299*b1cdbd2cSJim Jagielski long DXFGroupReader::ReadI()
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski 	char sl[DXF_MAX_STRING_LEN+1],*p;
302*b1cdbd2cSJim Jagielski 	long res,nv;
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski 	ReadLine(sl);
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 	p=sl;
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 	while(*p==0x20) p++;
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 	if ((*p<'0' || *p>'9') && *p!='-') {
311*b1cdbd2cSJim Jagielski 		bStatus=sal_False;
312*b1cdbd2cSJim Jagielski 		return 0;
313*b1cdbd2cSJim Jagielski 	}
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 	if (*p=='-') {
316*b1cdbd2cSJim Jagielski 		nv=-1;
317*b1cdbd2cSJim Jagielski 		p++;
318*b1cdbd2cSJim Jagielski 	}
319*b1cdbd2cSJim Jagielski 	else nv=1;
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 	res=0;
322*b1cdbd2cSJim Jagielski 	do {
323*b1cdbd2cSJim Jagielski 		res=res*10+(long)(*p-'0');
324*b1cdbd2cSJim Jagielski 		p++;
325*b1cdbd2cSJim Jagielski 	} while (*p>='0' && *p<='9');
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski 	while (*p==0x20) p++;
328*b1cdbd2cSJim Jagielski 	if (*p!=0) {
329*b1cdbd2cSJim Jagielski 		bStatus=sal_False;
330*b1cdbd2cSJim Jagielski 		return 0;
331*b1cdbd2cSJim Jagielski 	}
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 	return res*nv;
334*b1cdbd2cSJim Jagielski }
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski 
ReadF()337*b1cdbd2cSJim Jagielski double DXFGroupReader::ReadF()
338*b1cdbd2cSJim Jagielski {
339*b1cdbd2cSJim Jagielski 	char sl[DXF_MAX_STRING_LEN+1],*p;
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 	ReadLine(sl);
342*b1cdbd2cSJim Jagielski 	p=sl;
343*b1cdbd2cSJim Jagielski 	while(*p==0x20) p++;
344*b1cdbd2cSJim Jagielski 	if ((*p<'0' || *p>'9') && *p!='.' && *p!='-') {
345*b1cdbd2cSJim Jagielski 		bStatus=sal_False;
346*b1cdbd2cSJim Jagielski 		return 0.0;
347*b1cdbd2cSJim Jagielski 	}
348*b1cdbd2cSJim Jagielski 	return atof(p);
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 
ReadS(char * ptgt)352*b1cdbd2cSJim Jagielski void DXFGroupReader::ReadS(char * ptgt)
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski 	ReadLine(ptgt);
355*b1cdbd2cSJim Jagielski }
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 
358