Add TEXT, GR, COLOR=, PLOT, HLIN, VLIN statements
authorNick Downing <nick@ndcode.org>
Mon, 16 May 2022 17:02:38 +0000 (03:02 +1000)
committerNick Downing <nick@ndcode.org>
Mon, 16 May 2022 17:02:38 +0000 (03:02 +1000)
apple_io.py
applesoft_basic.t
applesoft_basic.y

index fd54378..c0e95a9 100755 (executable)
@@ -125,6 +125,24 @@ def call(addr):
   addr &= 0xffff
   raise Exception(f'call {addr:04x}')
 
+def text():
+  pass
+
+def gr():
+  pass
+
+def color():
+  pass
+
+def plot(x, y):
+  pass
+
+def hlin(x0, x1, y):
+  pass
+
+def vlin(y0, y1, x):
+  pass
+
 if __name__ == '__main__':
   init()
   while True:
index 3557e0d..362f070 100644 (file)
@@ -74,6 +74,12 @@ class StatementInput: Statement;
 class StatementDim: Statement;
 class StatementPoke: Statement;
 class StatementCall: Statement;
+class StatementText: Statement;
+class StatementGr: Statement;
+class StatementColorEqual: Statement;
+class StatementPlot: Statement;
+class StatementHLin: Statement;
+class StatementVLin: Statement;
 class DimItem: Node;
 class RValue: Node;
 class RValueOr: RValue;
@@ -447,6 +453,41 @@ def execute(self, context):
 def execute(self, context):
   value = self.children[0].get_float()
   apple_io.call(data_types.cint(value))
+@method(StatementText)
+def execute(self, context):
+  apple_io.text()
+@method(StatementGr)
+def execute(self, context):
+  apple_io.gr()
+@method(StatementColorEqual)
+def execute(self, context):
+  value = self.children[0].get_float()
+  apple_io.color(data_types.cint(value))
+@method(StatementPlot)
+def execute(self, context):
+  value0 = self.children[0].get_float()
+  value1 = self.children[1].get_float()
+  apple_io.plot(data_types.cint(value0), data_types.cint(value1))
+@method(StatementHLin)
+def execute(self, context):
+  value0 = self.children[0].get_float()
+  value1 = self.children[1].get_float()
+  value2 = self.children[2].get_float()
+  apple_io.hlin(
+    data_types.cint(value0),
+    data_types.cint(value1),
+    data_types.cint(value2)
+  )
+@method(StatementVLin)
+def execute(self, context):
+  value0 = self.children[0].get_float()
+  value1 = self.children[1].get_float()
+  value2 = self.children[2].get_float()
+  apple_io.vlin(
+    data_types.cint(value0),
+    data_types.cint(value1),
+    data_types.cint(value2)
+  )
 del execute
 
 @method(RValue)
index e73477e..11cdc88 100644 (file)
@@ -180,8 +180,14 @@ statement_opt
   | %space (?E{t_def.StatementInput}KEYWORD_INPUT lvalue)
   | %space (?E{t_def.StatementInput}KEYWORD_INPUT STR_LITERAL ';' lvalue)
   | %space (?E{t_def.StatementDim}KEYWORD_DIM dim_item_list)
-  | %space (?E{t_def.StatementPoke}KEYWORD_POKE lvalue ',' lvalue)
-  | %space (?E{t_def.StatementCall}KEYWORD_CALL lvalue)
+  | %space (?E{t_def.StatementPoke}KEYWORD_POKE rvalue ',' rvalue)
+  | %space (?E{t_def.StatementCall}KEYWORD_CALL rvalue)
+  | %space (?E{t_def.StatementText}KEYWORD_TEXT)
+  | %space (?E{t_def.StatementGr}KEYWORD_GR)
+  | %space (?E{t_def.StatementColorEqual}KEYWORD_COLOR_EQUAL rvalue)
+  | %space (?E{t_def.StatementPlot}KEYWORD_PLOT rvalue ',' rvalue)
+  | %space (?E{t_def.StatementHLin}KEYWORD_HLIN rvalue ',' rvalue KEYWORD_AT rvalue)
+  | %space (?E{t_def.StatementVLin}KEYWORD_VLIN rvalue ',' rvalue KEYWORD_AT rvalue)
   ;
 
 print_rvalue_list0