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