aboutsummaryrefslogtreecommitdiffstats
path: root/sysvar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sysvar.cpp')
-rw-r--r--sysvar.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/sysvar.cpp b/sysvar.cpp
new file mode 100644
index 0000000..a8fcc39
--- /dev/null
+++ b/sysvar.cpp
@@ -0,0 +1,153 @@
+// sysvar.cpp
+// Revision 6-feb-2005
+
+#include "sysvar.h"
+
+#include "charset.h"
+#include "trace.h"
+
+// For debugging.
+#include <sstream>
+
+
+namespace {
+
+BlChar system_vars [blassic::sysvar::EndSysVar];
+
+} // namespace
+
+
+size_t blassic::sysvar::address ()
+{
+ return reinterpret_cast <size_t> (system_vars);
+}
+
+void blassic::sysvar::set (size_t var, BlChar value)
+{
+ system_vars [var]= value;
+}
+
+void blassic::sysvar::set16 (size_t var, short value)
+{
+ poke16 (system_vars + var, value);
+}
+
+void blassic::sysvar::set32 (size_t var, BlInteger value)
+{
+ poke32 (system_vars + var, value);
+}
+
+BlChar blassic::sysvar::get (size_t var)
+{
+ return system_vars [var];
+}
+
+unsigned short blassic::sysvar::get16 (size_t var)
+{
+ return static_cast <unsigned short> (peek16 (system_vars + var) );
+}
+
+unsigned long blassic::sysvar::get32 (size_t var)
+{
+ return peek32 (system_vars + var);
+}
+
+// Flags operations.
+
+blassic::sysvar::Flags1Bit blassic::sysvar::getFlags1 ()
+{
+ return static_cast <Flags1Bit> (system_vars [Flags1] );
+}
+
+blassic::sysvar::Flags2Bit blassic::sysvar::getFlags2 ()
+{
+ return static_cast <Flags2Bit> (system_vars [Flags2] );
+}
+
+bool blassic::sysvar::hasFlags1 (Flags1Bit f)
+{
+ //return (getFlags1 () & f) != Flags1Clean;
+ return getFlags1 ().has (f);
+}
+
+bool blassic::sysvar::hasFlags2 (Flags2Bit f)
+{
+ //return (getFlags2 () & f) != Flags2Clean;
+ return getFlags2 ().has (f);
+}
+
+void blassic::sysvar::setFlags1 (Flags1Bit f)
+{
+ BlChar * const pflag= system_vars + Flags1;
+ *pflag|= f.get ();
+}
+
+void blassic::sysvar::setFlags2 (Flags2Bit f)
+{
+ BlChar * const pflag= system_vars + Flags2;
+ *pflag|= f.get ();
+}
+
+// Initialization
+
+void blassic::sysvar::init ()
+{
+ TRACEFUNC (tr, "blassic::sysvar::init");
+ #ifndef NDEBUG
+ {
+ std::ostringstream oss;
+ oss << "System vars address: " <<
+ static_cast <void *> (system_vars);
+ TRMESSAGE (tr, oss.str () );
+ }
+ #endif
+
+ set16 (GraphicsWidth, 0);
+ set16 (GraphicsHeight, 0);
+ set16 (NumArgs, 0);
+ set16 (VersionMajor, version::Major);
+ set16 (VersionMinor, version::Minor);
+ set16 (VersionRelease, version::Release);
+ set32 (AutoInit, 10);
+ set32 (AutoInc, 10);
+ set32 (CharGen, reinterpret_cast <size_t> (& charset::data) );
+ set (ShellResult, 0);
+ set (TypeOfVal, 0); // VAL simple, number only.
+ set (TypeOfNextCheck, 0); // Strict next check
+ set (TypeOfDimCheck, 0); // Need erase before dim already dimensioned
+ set16 (MaxHistory, 100);
+ setFlags1 (Flags1Clean);
+ // Bit 0: LOCATE style Microsoft (row, col),
+ // Bit 1: TAB style normal.
+ // Bit 2: THEN omitted not accepted.
+ // Bit 3: Without space before number in PRINT.
+ // Bit 4: Without initial space in STR$.
+ // Bit 5: Without convert LF to CR.
+ // Bit 6: Do not show debug info.
+ // Bit 7: Strict GOTO mode.
+
+ #ifdef BLASSIC_USE_WINDOWS
+ const BlChar defaultprinterline= 1;
+ #else
+ const BlChar defaultprinterline= 0;
+ #endif
+ set (PrinterLine, defaultprinterline);
+
+ // Changed this, the processor stack overflows easily
+ // in windows, at least in W98 with C++ Builder.
+ //set32 (MaxFnLevel, 1000); // Seems a good limit.
+ set32 (MaxFnLevel, 50);
+
+ set16 (DebugLevel, 0);
+ set16 (Zone, 8);
+ set (GraphRotate, 0);
+ setFlags2 (Flags2Clean);
+ // Bit 0: GOTO and GOSUB listed as one word.
+ // Bit 1: true is -1
+ // Bit 2: logical ops are binary
+ // Bit 3: blank lines as comments.
+ set16 (TronChannel, 0);
+ set (TronFlags, 0);
+}
+
+// Fin de sysvar.cpp
Un proyecto texto-plano.xyz