#ifndef INCLUDE_BLASSIC_FILE_H #define INCLUDE_BLASSIC_FILE_H // file.h // Revision 7-feb-2005 #ifdef __BORLANDC__ #pragma warn -8022 #endif #include "blassic.h" #include "dim.h" #include #include #include #include #include namespace blassic { namespace file { enum OpenMode { Input= 1, Output= 2, InOut= 3, Append= 6, Random= 8, Binary= 16, WithErr= 32 }; class BlFile { public: struct field_element { size_t size; std::string name; Dimension dim; field_element (size_t n, const std::string & str, const Dimension & dim) : size (n), name (str), dim (dim) { } }; enum Align { AlignRight, AlignLeft }; BlFile (OpenMode nmode); virtual ~BlFile (); virtual void closein (); virtual void closeout (); virtual void reset (int x1, int x2, int y1, int y2); virtual bool isfile () const = 0; virtual bool istextwindow () const; virtual bool eof (); virtual size_t loc (); virtual void flush (); virtual size_t getwidth () const; virtual void movecharforward (); virtual void movecharforward (size_t n); virtual void movecharback (); virtual void movecharback (size_t n); virtual void movecharup (); virtual void movecharup (size_t n); virtual void movechardown (); virtual void movechardown (size_t n); virtual void showcursor (); virtual void hidecursor (); virtual std::string getkey (); virtual std::string inkey (); virtual void getline (std::string & str, bool endline= true); char delimiter () { return cDelimiter; } void delimiter (char delim) { cDelimiter= delim; } char quote () { return cQuote; } void quote (char qu) { cQuote= qu; } char escape () { return cEscape; } void escape (char esc) { cEscape= esc; } friend BlFile & operator << (BlFile & bf, const std::string & str); friend BlFile & operator << (BlFile & bf, char c); friend BlFile & operator << (BlFile & bf, BlNumber n); friend BlFile & operator << (BlFile & bf, BlInteger n); friend BlFile & operator << (BlFile & bf, BlLineNumber l); friend BlFile & operator << (BlFile & bf, unsigned short n); void putspaces (size_t n); virtual void tab (); virtual void tab (size_t n); virtual void endline (); virtual void put (size_t pos); virtual void get (size_t pos); virtual void field_clear (); virtual void field (const std::vector & elem); virtual void field_append (const std::vector & elem); virtual bool assign (const std::string & name, const Dimension & dim, const std::string & value, Align align); virtual bool assign_mid (const std::string & name, const Dimension & dim, const std::string & value, size_t inipos, std::string::size_type len); virtual std::string read (size_t n); virtual void gotoxy (int x, int y); virtual void setcolor (int color); virtual int getcolor (); virtual void setbackground (int color); virtual int getbackground (); virtual void cls (); virtual std::string copychr (BlChar from, BlChar to); virtual int pos (); virtual int vpos (); virtual void tag (); virtual void tagoff (); virtual bool istagactive (); virtual void inverse (bool active); virtual bool getinverse (); virtual void bright (bool active); virtual bool getbright (); virtual void setwidth (size_t w); virtual void setmargin (size_t m); virtual BlInteger lof (); virtual bool poll (); virtual void scroll (int nlines); private: virtual void outstring (const std::string & str); virtual void outchar (char c); BlFile (const BlFile &); // Forbidden void operator = (const BlFile &); // Forbidden. OpenMode mode; char cDelimiter, cQuote, cEscape; protected: OpenMode getmode () const { return mode; } }; // Create BlFile functions. BlFile * newBlFileConsole (); BlFile * newBlFileWindow (BlChannel ch); BlFile * newBlFileWindow (BlChannel ch, int x1, int x2, int y1, int y2); BlFile * newBlFileOutString (); BlFile * newBlFileOutput (std::ostream & os); BlFile * newBlFileRegular (const std::string & name, OpenMode mode); BlFile * newBlFileRandom (const std::string & name, size_t record_len); BlFile * newBlFilePopen (const std::string & name, OpenMode mode); BlFile * newBlFileSocket (const std::string & host, short port); BlFile * newBlFilePrinter (); class BlFileOut : public BlFile { public: BlFileOut (); BlFileOut (OpenMode mode); void flush (); protected: virtual std::ostream & ofs ()= 0; private: void outstring (const std::string & str); void outchar (char c); //void outnumber (BlNumber n); //void outinteger (BlInteger n); //void outlinenumber (BlLineNumber l); }; class BlFileOutString : public BlFileOut { public: BlFileOutString (); bool isfile () const { return false; } std::string str (); private: std::ostream & ofs (); std::ostringstream oss; }; } // namespace blassic } // namespace file #endif // Fin de file.h