xref: /AOO41X/main/sw/inc/swgstr.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #ifndef _SWGSTR_HXX
28*cdf0e10cSrcweir #define _SWGSTR_HXX
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir #include <tools/stream.hxx>
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir typedef long long3;						// Zur Dokumentation: 3-byte-Longs
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir #define MAX_BEGIN 64					// Maximale Blockschachtelung
35*cdf0e10cSrcweir #define PASSWDLEN 16					// Maximale Passwortlaenge
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir // Neue Version mit SvStreams
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir // Passwort- und Codierungs-Funktionalitaet
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir class swcrypter {
42*cdf0e10cSrcweir protected:
43*cdf0e10cSrcweir 	sal_Char   cPasswd[ PASSWDLEN ];	// Passwort-Puffer
44*cdf0e10cSrcweir 	sal_Bool   bPasswd;						// sal_True wenn mit Passwort
45*cdf0e10cSrcweir 	void   encode( sal_Char*, sal_uInt16 );	// Puffer codieren/decodieren
46*cdf0e10cSrcweir public:
47*cdf0e10cSrcweir 	swcrypter();
48*cdf0e10cSrcweir 	sal_Bool setpasswd( const String& );	// Passwort setzen
49*cdf0e10cSrcweir 	void copypasswd( const sal_Char* );	// Passwort direkt setzen
50*cdf0e10cSrcweir 	const sal_Char* getpasswd() { return cPasswd; }
51*cdf0e10cSrcweir };
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir // Reader/Writer-Stream-Basisklasse mit Pufferverwaltung fuer Texte
54*cdf0e10cSrcweir // und Spezial-I/O fuer 3-Byte-Longs
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir class swstreambase : public swcrypter {
57*cdf0e10cSrcweir protected:
58*cdf0e10cSrcweir 	SvStream* pStrm;					// eigentlicher Stream
59*cdf0e10cSrcweir 	sal_Char*  pBuf; 						// Zwischenpuffer
60*cdf0e10cSrcweir 	sal_uInt16 nBuflen;						// Laenge des Zwischenpuffers
61*cdf0e10cSrcweir 	short  nLong;						// Long-Laenge (3 oder 4)
62*cdf0e10cSrcweir 	sal_Bool   bTempStrm;					// sal_True: Stream loeschen
63*cdf0e10cSrcweir 	void   checkbuf( sal_uInt16 );			// Testen der Pufferlaenge
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir 	swstreambase( SvStream& );
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 	swstreambase( const swstreambase& );
68*cdf0e10cSrcweir 	int operator=( const swstreambase& );
69*cdf0e10cSrcweir public:
70*cdf0e10cSrcweir 	~swstreambase();
71*cdf0e10cSrcweir 	SvStream& Strm()					{ return *pStrm; }
72*cdf0e10cSrcweir 	void clear();						// Puffer loeschen
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir 	// Zusatzfunktionen zur I/O von LONGs als 3-Byte-Zahlen
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir 	void long3() 						{ nLong = 3; }
77*cdf0e10cSrcweir 	void long4() 						{ nLong = 4; }
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir     // Alias- und Hilfsfunktionen
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir 	void seek( long nPos )				{ pStrm->Seek( nPos );  }
82*cdf0e10cSrcweir 	long tell()							{ return pStrm->Tell(); }
83*cdf0e10cSrcweir 	long filesize(); 					// Dateigroesse
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir 	void setbad();
86*cdf0e10cSrcweir 	int good()                          { return ( pStrm->GetError() == SVSTREAM_OK ); }
87*cdf0e10cSrcweir     int operator!()                     { return ( pStrm->GetError() != SVSTREAM_OK ); }
88*cdf0e10cSrcweir 	int eof()                           { return pStrm->IsEof(); }
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir 	sal_uInt8 get();
91*cdf0e10cSrcweir 	void get( void* p, sal_uInt16 n )		{ pStrm->Read( (sal_Char*) p, n ); }
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir 	inline swstreambase& operator>>( sal_Char& );
94*cdf0e10cSrcweir 	inline swstreambase& operator>>( sal_uInt8& );
95*cdf0e10cSrcweir 	inline swstreambase& operator>>( short& );
96*cdf0e10cSrcweir 	inline swstreambase& operator>>( sal_uInt16& );
97*cdf0e10cSrcweir 		   swstreambase& operator>>( long& );
98*cdf0e10cSrcweir 	inline swstreambase& operator>>( sal_uLong& );
99*cdf0e10cSrcweir };
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir inline swstreambase& swstreambase::operator>>( sal_Char& c )
102*cdf0e10cSrcweir {
103*cdf0e10cSrcweir 	*pStrm >> c; return *this;
104*cdf0e10cSrcweir }
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir inline swstreambase& swstreambase::operator>>( sal_uInt8& c )
107*cdf0e10cSrcweir {
108*cdf0e10cSrcweir 	*pStrm >> c; return *this;
109*cdf0e10cSrcweir }
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir inline swstreambase& swstreambase::operator>>( short& c )
112*cdf0e10cSrcweir {
113*cdf0e10cSrcweir 	*pStrm >> c; return *this;
114*cdf0e10cSrcweir }
115*cdf0e10cSrcweir 
116*cdf0e10cSrcweir inline swstreambase& swstreambase::operator>>( sal_uInt16& c )
117*cdf0e10cSrcweir {
118*cdf0e10cSrcweir 	*pStrm >> c; return *this;
119*cdf0e10cSrcweir }
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir inline swstreambase& swstreambase::operator>>( sal_uLong& c )
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir 	return *this >> (long&) c;
124*cdf0e10cSrcweir }
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir class swistream : public swstreambase {
127*cdf0e10cSrcweir 	sal_uInt8   cType;						// Record-Typ
128*cdf0e10cSrcweir 	sal_uLong  nOffset;						// Record-Offset-Portion
129*cdf0e10cSrcweir public:
130*cdf0e10cSrcweir 	swistream( SvStream& );
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir 	sal_uInt8 peek();						// 1 Byte testen
133*cdf0e10cSrcweir 	sal_uInt8 next();						// Blockstart
134*cdf0e10cSrcweir 	sal_uInt8 cur() { return cType; }		// aktueller Block
135*cdf0e10cSrcweir 	sal_uInt8 skipnext();					// Record ueberspringen
136*cdf0e10cSrcweir 	void undonext();					// next() rueckgaengig machen
137*cdf0e10cSrcweir 	long getskip()						{ return nOffset; }
138*cdf0e10cSrcweir 	void skip( long = -1L );			// Block ueberspringen
139*cdf0e10cSrcweir 	sal_Char* text();					// Textstring lesen (nach BEGIN)
140*cdf0e10cSrcweir 	long size();						// aktuelle Record-Laenge
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir private:
143*cdf0e10cSrcweir 	swistream( const swistream& );
144*cdf0e10cSrcweir 	int operator=( const swistream& );
145*cdf0e10cSrcweir };
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir #endif
149