1*22e87013SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*22e87013SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*22e87013SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*22e87013SAndrew Rist * distributed with this work for additional information
6*22e87013SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*22e87013SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*22e87013SAndrew Rist * "License"); you may not use this file except in compliance
9*22e87013SAndrew Rist * with the License. You may obtain a copy of the License at
10*22e87013SAndrew Rist *
11*22e87013SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*22e87013SAndrew Rist *
13*22e87013SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*22e87013SAndrew Rist * software distributed under the License is distributed on an
15*22e87013SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*22e87013SAndrew Rist * KIND, either express or implied. See the License for the
17*22e87013SAndrew Rist * specific language governing permissions and limitations
18*22e87013SAndrew Rist * under the License.
19*22e87013SAndrew Rist *
20*22e87013SAndrew Rist *************************************************************/
21*22e87013SAndrew Rist
22*22e87013SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #ifndef _DXFGRPRD_HXX
25cdf0e10cSrcweir #define _DXFGRPRD_HXX
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <svtools/fltcall.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #define DXF_MAX_STRING_LEN 256 // Max Stringlaenge (ohne die 0)
30cdf0e10cSrcweir
31cdf0e10cSrcweir
32cdf0e10cSrcweir class DXFGroupReader
33cdf0e10cSrcweir {
34cdf0e10cSrcweir
35cdf0e10cSrcweir public:
36cdf0e10cSrcweir
37cdf0e10cSrcweir // Anmerkkung:
38cdf0e10cSrcweir // sizeof(DXFGroupReader) ist gross, also nur dynamisch anlegen!
39cdf0e10cSrcweir
40cdf0e10cSrcweir DXFGroupReader( SvStream & rIStream, sal_uInt16 nMinPercent, sal_uInt16 nMaxPercent );
41cdf0e10cSrcweir
42cdf0e10cSrcweir sal_Bool GetStatus();
43cdf0e10cSrcweir
44cdf0e10cSrcweir void SetError();
45cdf0e10cSrcweir
46cdf0e10cSrcweir sal_uInt16 Read();
47cdf0e10cSrcweir // Liesst die naechste Gruppe ein und liefert den Gruppencode zurueck.
48cdf0e10cSrcweir // Im Falle eines Fehlers liefert GetStatus() sal_False, Gruppencode wird 0
49cdf0e10cSrcweir // gesetzt, und es wird SetS(0,"EOF") ausgefuehrt.
50cdf0e10cSrcweir
51cdf0e10cSrcweir sal_uInt16 GetG();
52cdf0e10cSrcweir // Liefert den letzten Gruppencode (also was Read() zuletzt lieferte)
53cdf0e10cSrcweir
54cdf0e10cSrcweir long GetI();
55cdf0e10cSrcweir // Liefert den Integer-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
56cdf0e10cSrcweir // Dabei muss es sich um einen Gruppencode fuer den Datentyp Integer
57cdf0e10cSrcweir // gehandelt haben, wenn nicht, wird 0 gelieferet.
58cdf0e10cSrcweir
59cdf0e10cSrcweir double GetF();
60cdf0e10cSrcweir // Liefert den Floatingpoint-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
61cdf0e10cSrcweir // Dabei muss es sich um einen Gruppencode fuer den Datentyp Floatingpoint
62cdf0e10cSrcweir // gehandelt haben, wenn nicht, wird 0 geliefert.
63cdf0e10cSrcweir
64cdf0e10cSrcweir const char * GetS();
65cdf0e10cSrcweir // Liefert den String zur Gruppe, die vorher mit Read() gelesen wurde.
66cdf0e10cSrcweir // Dabei muss es sich um einen Gruppencode fuer den Datentyp String
67cdf0e10cSrcweir // gehandelt haben, wenn nicht, wird NULL geliefert.
68cdf0e10cSrcweir
69cdf0e10cSrcweir // Folgende drei Methoden arbeiten wie die obigen, nur kann auch ein anderer als der
70cdf0e10cSrcweir // aktuelle Gruppencode angegeben werden. (DXFGroupReader speichert die Parameter
71cdf0e10cSrcweir // zu allen Gruppencodes. Dadurch ist es moeglich, dass zunaechst mit Read() einige
72cdf0e10cSrcweir // verschiedene Gruppen eingelesen werden, bevor sie ausgewertet werden.)
73cdf0e10cSrcweir long GetI(sal_uInt16 nG);
74cdf0e10cSrcweir double GetF(sal_uInt16 nG);
75cdf0e10cSrcweir const char * GetS(sal_uInt16 nG);
76cdf0e10cSrcweir
77cdf0e10cSrcweir // Mit folgenden Methoden koennen die aktuell gespeicherten Werte zu den
78cdf0e10cSrcweir // Gruppencodes veraendert werden. (z.B. um Defaultwerte zu setzen, bevor
79cdf0e10cSrcweir // 'blind' eine Menge von Gruppen eingelesen wird.)
80cdf0e10cSrcweir void SetF(sal_uInt16 nG, double fF);
81cdf0e10cSrcweir void SetS(sal_uInt16 nG, const char * sS); // (wird kopiert)
82cdf0e10cSrcweir
83cdf0e10cSrcweir private:
84cdf0e10cSrcweir
85cdf0e10cSrcweir void ReadLine(char * ptgt);
86cdf0e10cSrcweir long ReadI();
87cdf0e10cSrcweir double ReadF();
88cdf0e10cSrcweir void ReadS(char * ptgt);
89cdf0e10cSrcweir
90cdf0e10cSrcweir SvStream & rIS;
91cdf0e10cSrcweir char sIBuff[1024];
92cdf0e10cSrcweir sal_uInt16 nIBuffSize,nIBuffPos;
93cdf0e10cSrcweir sal_Bool bStatus;
94cdf0e10cSrcweir sal_uInt16 nLastG;
95cdf0e10cSrcweir sal_uLong nGCount;
96cdf0e10cSrcweir
97cdf0e10cSrcweir sal_uLong nMinPercent;
98cdf0e10cSrcweir sal_uLong nMaxPercent;
99cdf0e10cSrcweir sal_uLong nLastPercent;
100cdf0e10cSrcweir sal_uLong nFileSize;
101cdf0e10cSrcweir
102cdf0e10cSrcweir char S0_9 [10][DXF_MAX_STRING_LEN+1]; // Strings Gruppencodes 0..9
103cdf0e10cSrcweir double F10_59 [50]; // Floats Gruppencodes 10..59
104cdf0e10cSrcweir long I60_79 [20]; // Integers Gruppencodes 60..79
105cdf0e10cSrcweir long I90_99 [10];
106cdf0e10cSrcweir char S100 [DXF_MAX_STRING_LEN+1];
107cdf0e10cSrcweir char S102 [DXF_MAX_STRING_LEN+1];
108cdf0e10cSrcweir double F140_147 [ 8]; // Floats Gruppencodes 140..147
109cdf0e10cSrcweir long I170_175 [ 6]; // Integers Gruppencodes 170..175
110cdf0e10cSrcweir double F210_239 [30]; // Floats Gruppencodes 210..239
111cdf0e10cSrcweir char S999_1009 [11][DXF_MAX_STRING_LEN+1]; // Strings Gruppencodes 999..1009
112cdf0e10cSrcweir double F1010_1059[50]; // Floats Gruppencodes 1010..1059
113cdf0e10cSrcweir long I1060_1079[20]; // Integers Gruppencodes 1060..1079
114cdf0e10cSrcweir
115cdf0e10cSrcweir };
116cdf0e10cSrcweir
117cdf0e10cSrcweir
GetStatus()118cdf0e10cSrcweir inline sal_Bool DXFGroupReader::GetStatus()
119cdf0e10cSrcweir {
120cdf0e10cSrcweir return bStatus;
121cdf0e10cSrcweir }
122cdf0e10cSrcweir
123cdf0e10cSrcweir
SetError()124cdf0e10cSrcweir inline void DXFGroupReader::SetError()
125cdf0e10cSrcweir {
126cdf0e10cSrcweir bStatus=sal_False;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
GetG()129cdf0e10cSrcweir inline sal_uInt16 DXFGroupReader::GetG()
130cdf0e10cSrcweir {
131cdf0e10cSrcweir return nLastG;
132cdf0e10cSrcweir }
133cdf0e10cSrcweir
GetI()134cdf0e10cSrcweir inline long DXFGroupReader::GetI()
135cdf0e10cSrcweir {
136cdf0e10cSrcweir return GetI(nLastG);
137cdf0e10cSrcweir }
138cdf0e10cSrcweir
GetF()139cdf0e10cSrcweir inline double DXFGroupReader::GetF()
140cdf0e10cSrcweir {
141cdf0e10cSrcweir return GetF(nLastG);
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
GetS()144cdf0e10cSrcweir inline const char * DXFGroupReader::GetS()
145cdf0e10cSrcweir {
146cdf0e10cSrcweir return GetS(nLastG);
147cdf0e10cSrcweir }
148cdf0e10cSrcweir
149cdf0e10cSrcweir #endif
150cdf0e10cSrcweir
151cdf0e10cSrcweir
152