diff options
Diffstat (limited to 'sysvar.h')
-rw-r--r-- | sysvar.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/sysvar.h b/sysvar.h new file mode 100644 index 0000000..bc880f2 --- /dev/null +++ b/sysvar.h @@ -0,0 +1,198 @@ +#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 |