#ifndef INCLUDE_BLASSIC_SYSVAR_H #define INCLUDE_BLASSIC_SYSVAR_H // sysvar.h // Revision 6-feb-2005 #if defined __BORLANDC__ #pragma warn -8058 #endif #include "blassic.h" namespace blassic { namespace sysvar { void init (); size_t address (); void set (size_t var, BlChar value); void set16 (size_t var, short value); void set32 (size_t var, BlInteger value); BlChar get (size_t var); unsigned short get16 (size_t var); unsigned long get32 (size_t var); const size_t GraphicsWidth= 0, GraphicsHeight= 2, NumArgs= 4, VersionMajor= 6, VersionMinor= 8, VersionRelease= 10, AutoInit= 12, AutoInc= 16, CharGen= 20, ShellResult= 24, TypeOfVal= 25, // 0: simple, 1: expression evluation, // else unimplemented. TypeOfNextCheck= 26, // 0: normal, else ZX-type TypeOfDimCheck= 27, // 0: cannot dim already dimensioned // 1: Silently redim MaxHistory= 28, // Max size of history buffer. Flags1= 30, // Bit 0: LOCATE style. 0 Microsoft, 1 Amstrad CPC. // Bit 1: TAB style: 0 normal, 1 Spectrum. // Bit 2: THEN omitted: 0 is not accepted, 1 accepted. // Bit 3: space before number in PRINT, 0 No, 1 Yes. // Bit 4: initial space in STR$, 0 No, 1 Yes. // Bit 5: convert LF to CR in GET and INKEY$ // Bit 6: Show debug info on certain errors. // Bit 7: Relaxed GOTO mode. PrinterLine= 31, // Type of printer line feed. // 0 LF only. // 1 CR + LF // 2 CR only. MaxFnLevel= 32, // Max level of FN calls. DebugLevel= 36, // Level for IF_DEBUG Zone= 38, // Size of zone for the , separator of PRINT. GraphRotate= 40, // Type of graphics rotation: // 0 no rotation. // 1 90 degrees. // Other: undefined Flags2= 41, // Bit 0: GO TO and GO SUB separated in listings. // Bit 1: if set true is positive. // Bit 2: if set logical ops are boolean. // Bit 3: if set blank lines in .bas text files // are converted to comments. // Bits 4-7: reserved. TronChannel= 42, // Last channel used for tron or tron line. TronFlags= 44, // Tron flags. // Bit 0: tron ot tron line is active. // Bit 1: tron line is active. // Bits 2-7: reserved. // 45: reserved EndSysVar= 46; // Flags masks. // Implemented as classes to improve type safety // and avoid silly mistakes. class Flags1Bit { public: explicit Flags1Bit (BlChar f) : f (f) { } BlChar get () const { return f; } bool has (const Flags1Bit f1bit) const; friend bool operator == (const Flags1Bit f1, const Flags1Bit f2); friend bool operator != (const Flags1Bit f1, const Flags1Bit f2); friend Flags1Bit operator | (const Flags1Bit f1, const Flags1Bit f2); friend Flags1Bit operator & (const Flags1Bit f1, const Flags1Bit f2); private: BlChar f; }; inline bool Flags1Bit::has (const Flags1Bit f1bit) const { return (f & f1bit.f); } inline bool operator == (const Flags1Bit f1, const Flags1Bit f2) { return f1.f == f2.f; } inline bool operator != (const Flags1Bit f1, const Flags1Bit f2) { return f1.f != f2.f; } inline Flags1Bit operator | (const Flags1Bit f1, const Flags1Bit f2) { return Flags1Bit (f1.f | f2.f); } inline Flags1Bit operator & (const Flags1Bit f1, const Flags1Bit f2) { return Flags1Bit (f1.f & f2.f); } class Flags2Bit { public: explicit Flags2Bit (BlChar f) : f (f) { } BlChar get () const { return f; } bool has (const Flags2Bit f2bit) const; friend bool operator == (const Flags2Bit f1, const Flags2Bit f2); friend bool operator != (const Flags2Bit f1, const Flags2Bit f2); friend Flags2Bit operator | (const Flags2Bit f1, const Flags2Bit f2); friend Flags2Bit operator & (const Flags2Bit f1, const Flags2Bit f2); private: BlChar f; }; inline bool Flags2Bit::has (const Flags2Bit f2bit) const { return (f & f2bit.f); } inline bool operator == (const Flags2Bit f1, const Flags2Bit f2) { return f1.f == f2.f; } inline bool operator != (const Flags2Bit f1, const Flags2Bit f2) { return f1.f != f2.f; } inline Flags2Bit operator | (const Flags2Bit f1, const Flags2Bit f2) { return Flags2Bit (f1.f | f2.f); } inline Flags2Bit operator & (const Flags2Bit f1, const Flags2Bit f2) { return Flags2Bit (f1.f & f2.f); } const Flags1Bit Flags1Clean (0), LocateStyle (1), TabStyle (2), ThenOmitted (4), SpaceBefore (8), SpaceStr_s (16), ConvertLFCR (32), ShowDebugInfo (64), RelaxedGoto (128), Flags1Full (255); const Flags2Bit Flags2Clean (0), SeparatedGoto (1), TruePositive (2), BoolMode (4), BlankComment (8), Flags2Full (255); Flags1Bit getFlags1 (); Flags2Bit getFlags2 (); bool hasFlags1 (Flags1Bit f); bool hasFlags2 (Flags2Bit f); void setFlags1 (Flags1Bit f); void setFlags2 (Flags2Bit f); } // namespace sysvar } // namespace blassic #endif // Fin de sysvar.h