1*1d2dbeb0SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*1d2dbeb0SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1d2dbeb0SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1d2dbeb0SAndrew Rist * distributed with this work for additional information 6*1d2dbeb0SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1d2dbeb0SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1d2dbeb0SAndrew Rist * "License"); you may not use this file except in compliance 9*1d2dbeb0SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*1d2dbeb0SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*1d2dbeb0SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1d2dbeb0SAndrew Rist * software distributed under the License is distributed on an 15*1d2dbeb0SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1d2dbeb0SAndrew Rist * KIND, either express or implied. See the License for the 17*1d2dbeb0SAndrew Rist * specific language governing permissions and limitations 18*1d2dbeb0SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*1d2dbeb0SAndrew Rist *************************************************************/ 21*1d2dbeb0SAndrew Rist 22*1d2dbeb0SAndrew Rist 23cdf0e10cSrcweir #ifndef _SWGSTR_HXX 24cdf0e10cSrcweir #define _SWGSTR_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <tools/stream.hxx> 27cdf0e10cSrcweir 28cdf0e10cSrcweir typedef long long3; // Zur Dokumentation: 3-byte-Longs 29cdf0e10cSrcweir 30cdf0e10cSrcweir #define MAX_BEGIN 64 // Maximale Blockschachtelung 31cdf0e10cSrcweir #define PASSWDLEN 16 // Maximale Passwortlaenge 32cdf0e10cSrcweir 33cdf0e10cSrcweir // Neue Version mit SvStreams 34cdf0e10cSrcweir 35cdf0e10cSrcweir // Passwort- und Codierungs-Funktionalitaet 36cdf0e10cSrcweir 37cdf0e10cSrcweir class swcrypter { 38cdf0e10cSrcweir protected: 39cdf0e10cSrcweir sal_Char cPasswd[ PASSWDLEN ]; // Passwort-Puffer 40cdf0e10cSrcweir sal_Bool bPasswd; // sal_True wenn mit Passwort 41cdf0e10cSrcweir void encode( sal_Char*, sal_uInt16 ); // Puffer codieren/decodieren 42cdf0e10cSrcweir public: 43cdf0e10cSrcweir swcrypter(); 44cdf0e10cSrcweir sal_Bool setpasswd( const String& ); // Passwort setzen 45cdf0e10cSrcweir void copypasswd( const sal_Char* ); // Passwort direkt setzen getpasswd()46cdf0e10cSrcweir const sal_Char* getpasswd() { return cPasswd; } 47cdf0e10cSrcweir }; 48cdf0e10cSrcweir 49cdf0e10cSrcweir // Reader/Writer-Stream-Basisklasse mit Pufferverwaltung fuer Texte 50cdf0e10cSrcweir // und Spezial-I/O fuer 3-Byte-Longs 51cdf0e10cSrcweir 52cdf0e10cSrcweir class swstreambase : public swcrypter { 53cdf0e10cSrcweir protected: 54cdf0e10cSrcweir SvStream* pStrm; // eigentlicher Stream 55cdf0e10cSrcweir sal_Char* pBuf; // Zwischenpuffer 56cdf0e10cSrcweir sal_uInt16 nBuflen; // Laenge des Zwischenpuffers 57cdf0e10cSrcweir short nLong; // Long-Laenge (3 oder 4) 58cdf0e10cSrcweir sal_Bool bTempStrm; // sal_True: Stream loeschen 59cdf0e10cSrcweir void checkbuf( sal_uInt16 ); // Testen der Pufferlaenge 60cdf0e10cSrcweir 61cdf0e10cSrcweir swstreambase( SvStream& ); 62cdf0e10cSrcweir 63cdf0e10cSrcweir swstreambase( const swstreambase& ); 64cdf0e10cSrcweir int operator=( const swstreambase& ); 65cdf0e10cSrcweir public: 66cdf0e10cSrcweir ~swstreambase(); Strm()67cdf0e10cSrcweir SvStream& Strm() { return *pStrm; } 68cdf0e10cSrcweir void clear(); // Puffer loeschen 69cdf0e10cSrcweir 70cdf0e10cSrcweir // Zusatzfunktionen zur I/O von LONGs als 3-Byte-Zahlen 71cdf0e10cSrcweir long3()72cdf0e10cSrcweir void long3() { nLong = 3; } long4()73cdf0e10cSrcweir void long4() { nLong = 4; } 74cdf0e10cSrcweir 75cdf0e10cSrcweir // Alias- und Hilfsfunktionen 76cdf0e10cSrcweir seek(long nPos)77cdf0e10cSrcweir void seek( long nPos ) { pStrm->Seek( nPos ); } tell()78cdf0e10cSrcweir long tell() { return pStrm->Tell(); } 79cdf0e10cSrcweir long filesize(); // Dateigroesse 80cdf0e10cSrcweir 81cdf0e10cSrcweir void setbad(); good()82cdf0e10cSrcweir int good() { return ( pStrm->GetError() == SVSTREAM_OK ); } operator !()83cdf0e10cSrcweir int operator!() { return ( pStrm->GetError() != SVSTREAM_OK ); } eof()84cdf0e10cSrcweir int eof() { return pStrm->IsEof(); } 85cdf0e10cSrcweir 86cdf0e10cSrcweir sal_uInt8 get(); get(void * p,sal_uInt16 n)87cdf0e10cSrcweir void get( void* p, sal_uInt16 n ) { pStrm->Read( (sal_Char*) p, n ); } 88cdf0e10cSrcweir 89cdf0e10cSrcweir inline swstreambase& operator>>( sal_Char& ); 90cdf0e10cSrcweir inline swstreambase& operator>>( sal_uInt8& ); 91cdf0e10cSrcweir inline swstreambase& operator>>( short& ); 92cdf0e10cSrcweir inline swstreambase& operator>>( sal_uInt16& ); 93cdf0e10cSrcweir swstreambase& operator>>( long& ); 94cdf0e10cSrcweir inline swstreambase& operator>>( sal_uLong& ); 95cdf0e10cSrcweir }; 96cdf0e10cSrcweir operator >>(sal_Char & c)97cdf0e10cSrcweirinline swstreambase& swstreambase::operator>>( sal_Char& c ) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir *pStrm >> c; return *this; 100cdf0e10cSrcweir } 101cdf0e10cSrcweir operator >>(sal_uInt8 & c)102cdf0e10cSrcweirinline swstreambase& swstreambase::operator>>( sal_uInt8& c ) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir *pStrm >> c; return *this; 105cdf0e10cSrcweir } 106cdf0e10cSrcweir operator >>(short & c)107cdf0e10cSrcweirinline swstreambase& swstreambase::operator>>( short& c ) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir *pStrm >> c; return *this; 110cdf0e10cSrcweir } 111cdf0e10cSrcweir operator >>(sal_uInt16 & c)112cdf0e10cSrcweirinline swstreambase& swstreambase::operator>>( sal_uInt16& c ) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir *pStrm >> c; return *this; 115cdf0e10cSrcweir } 116cdf0e10cSrcweir operator >>(sal_uLong & c)117cdf0e10cSrcweirinline swstreambase& swstreambase::operator>>( sal_uLong& c ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir return *this >> (long&) c; 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir class swistream : public swstreambase { 123cdf0e10cSrcweir sal_uInt8 cType; // Record-Typ 124cdf0e10cSrcweir sal_uLong nOffset; // Record-Offset-Portion 125cdf0e10cSrcweir public: 126cdf0e10cSrcweir swistream( SvStream& ); 127cdf0e10cSrcweir 128cdf0e10cSrcweir sal_uInt8 peek(); // 1 Byte testen 129cdf0e10cSrcweir sal_uInt8 next(); // Blockstart cur()130cdf0e10cSrcweir sal_uInt8 cur() { return cType; } // aktueller Block 131cdf0e10cSrcweir sal_uInt8 skipnext(); // Record ueberspringen 132cdf0e10cSrcweir void undonext(); // next() rueckgaengig machen getskip()133cdf0e10cSrcweir long getskip() { return nOffset; } 134cdf0e10cSrcweir void skip( long = -1L ); // Block ueberspringen 135cdf0e10cSrcweir sal_Char* text(); // Textstring lesen (nach BEGIN) 136cdf0e10cSrcweir long size(); // aktuelle Record-Laenge 137cdf0e10cSrcweir 138cdf0e10cSrcweir private: 139cdf0e10cSrcweir swistream( const swistream& ); 140cdf0e10cSrcweir int operator=( const swistream& ); 141cdf0e10cSrcweir }; 142cdf0e10cSrcweir 143cdf0e10cSrcweir 144cdf0e10cSrcweir #endif 145