/* ------------------------------------------------------------------------*/ /* */ /* RESOURCE.H */ /* */ /* Copyright (c) Borland International 1991 */ /* All Rights Reserved. */ /* */ /* defines the classes TStringCollection, TResourceCollection, */ /* TResourceFile, TStrListMaker, and TStringList */ /* */ /* ------------------------------------------------------------------------*/ #include #if defined( Uses_TStringCollection ) && !defined( __TStringCollection ) #define __TStringCollection class TStringCollection : public TSortedCollection { public: TStringCollection( short aLimit, short aDelta ); private: virtual int compare( void *key1, void *key2 ); virtual void freeItem( void *item ); #ifndef NO_TV_STREAMS virtual const char *streamableName() const { return name; } virtual void *readItem( ipstream& ); virtual void writeItem( void *, opstream& ); protected: TStringCollection( StreamableInit ) : TSortedCollection ( streamableInit ) {}; public: static const char * const near name; static TStreamable *build(); #endif // ifndef NO_TV_STREAMS }; #ifndef NO_TV_STREAMS inline ipstream& operator >> ( ipstream& is, TStringCollection& cl ) { return is >> (TStreamable&)cl; } inline ipstream& operator >> ( ipstream& is, TStringCollection*& cl ) { return is >> (void *&)cl; } inline opstream& operator << ( opstream& os, TStringCollection& cl ) { return os << (TStreamable&)cl; } inline opstream& operator << ( opstream& os, TStringCollection* cl ) { return os << (TStreamable *)cl; } #endif // ifndef NO_TV_STREAMS #endif // Uses_TStringCollection #if defined( Uses_TResourceItem ) && !defined( __TResourceItem ) #define __TResourceItem struct TResourceItem { long pos; long size; char *key; }; #endif // Uses_TResourceItem #if defined( Uses_TResourceCollection ) && !defined( __TResourceCollection ) #define __TResourceCollection class TResourceCollection: public TStringCollection { public: #ifndef NO_TV_STREAMS TResourceCollection( StreamableInit) : TStringCollection( streamableInit ) {}; #endif // ifndef NO_TV_STREAMS TResourceCollection( short aLimit, short aDelta ); virtual void *keyOf( void *item ); private: virtual void freeItem( void *item ); #ifndef NO_TV_STREAMS virtual const char *streamableName() const { return name; } virtual void *readItem( ipstream& ); virtual void writeItem( void *, opstream& ); public: static const char * const near name; static TStreamable *build(); #endif // ifndef NO_TV_STREAMS }; #ifndef NO_TV_STREAMS inline ipstream& operator >> ( ipstream& is, TResourceCollection& cl ) { return is >> (TStreamable&)cl; } inline ipstream& operator >> ( ipstream& is, TResourceCollection*& cl ) { return is >> (void *&)cl; } inline opstream& operator << ( opstream& os, TResourceCollection& cl ) { return os << (TStreamable&)cl; } inline opstream& operator << ( opstream& os, TResourceCollection* cl ) { return os << (TStreamable *)cl; } #endif // ifndef NO_TV_STREAMS #endif // Uses_TResourceCollection #if defined( Uses_TResourceFile ) && !defined( __TResourceFile ) #define __TResourceFile class far TResourceCollection; class far fpstream; class TResourceFile: public TObject { public: TResourceFile( fpstream *aStream ); ~TResourceFile(); short count(); void remove( const char *key ); void flush(); void *get( const char *key ); const char *keyAt( short i ); void put( TStreamable *item, const char *key ); fpstream *switchTo( fpstream *aStream, Boolean pack ); protected: fpstream *stream; Boolean modified; long basePos; long indexPos; TResourceCollection *index; }; #endif // Uses_TResourceFile #if defined( Uses_TStrIndexRec ) && !defined( __TStrIndexRec ) #define __TStrIndexRec class TStrIndexRec { public: TStrIndexRec(); ushort key; ushort count; ushort offset; }; #endif // Uses_TStrIndexRec #if defined( Uses_TStringList ) && !defined( __TStringList ) #define __TStringList class far TStrIndexRec; #ifndef NO_TV_STREAMS class TStringList : public TObject, public TStreamable { public: ~TStringList(); void get( char *dest, ushort key ); private: ipstream *ip; long basePos; short indexSize; TStrIndexRec *index; virtual const char *streamableName() const { return name; } protected: TStringList( StreamableInit ); virtual void write( opstream& ) {} virtual void *read( ipstream& ); public: static const char * const near name; static TStreamable *build(); }; inline ipstream& operator >> ( ipstream& is, TStringList& cl ) { return is >> (TStreamable&)cl; } inline ipstream& operator >> ( ipstream& is, TStringList*& cl ) { return is >> (void *&)cl; } inline opstream& operator << ( opstream& os, TStringList& cl ) { return os << (TStreamable&)cl; } inline opstream& operator << ( opstream& os, TStringList* cl ) { return os << (TStreamable *)cl; } #endif // ifndef NO_TV_STREAMS #endif // Uses_TStringList #if defined( Uses_TStrListMaker ) && !defined( __TStrListMaker ) #define __TStrListMaker #ifndef NO_TV_STREAMS class TStrListMaker : public TObject, public TStreamable { public: TStrListMaker( ushort aStrSize, ushort aIndexSize ); ~TStrListMaker(); void put( ushort key, char *str ); private: ushort strPos; ushort strSize; char *strings; ushort indexPos; ushort indexSize; TStrIndexRec *index; TStrIndexRec cur; void closeCurrent(); virtual const char *streamableName() const { return TStringList::name; } protected: TStrListMaker( StreamableInit ); virtual void write( opstream& ); virtual void *read( ipstream& ) { return 0; } public: static TStreamable *build(); }; inline ipstream& operator >> ( ipstream& is, TStrListMaker& cl ) { return is >> (TStreamable&)cl; } inline ipstream& operator >> ( ipstream& is, TStrListMaker*& cl ) { return is >> (void *&)cl; } inline opstream& operator << ( opstream& os, TStrListMaker& cl ) { return os << (TStreamable&)cl; } inline opstream& operator << ( opstream& os, TStrListMaker* cl ) { return os << (TStreamable *)cl; } #endif // ifndef NO_TV_STREAMS #endif // Uses_TStrListMaker #include