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