Author: jquelin
Date: Fri Jan  9 01:39:27 2009
New Revision: 35255

Modified:
   trunk/languages/befunge/befunge.pir
   trunk/languages/befunge/flow.pir

Log:
instruction | implemented (vertical if)


Modified: trunk/languages/befunge/befunge.pir
==============================================================================
--- trunk/languages/befunge/befunge.pir (original)
+++ trunk/languages/befunge/befunge.pir Fri Jan  9 01:39:27 2009
@@ -89,6 +89,8 @@
     if char == '<' goto FLOW_GO_WEST
 
     # flow control
+    if char == '_' goto FLOW_IF_HORIZONTAL
+    if char == '!' goto FLOW_IF_VERTICAL
     
     # math functions
     if char == '!' goto MATHS_NOT
@@ -111,8 +113,8 @@
 
         # Flow control.
         eq S0, "`", FLOW_COMPARE
-        eq S0, "_", FLOW_EW_IF
-        eq S0, "|", FLOW_NS_IF
+        #eq S0, "_", FLOW_EW_IF
+        #eq S0, "|", FLOW_NS_IF
         eq S0, "#", FLOW_BRIDGE
         eq S0, "@", FLOW_END
 
@@ -152,6 +154,12 @@
   FLOW_GO_WEST:
     flow__go_west()
     goto MOVE_PC
+  FLOW_IF_HORIZONTAL:
+    flow__if_horizontal()
+    goto MOVE_PC
+  FLOW_IF_VERTICAL:
+    flow__if_vertical()
+    goto MOVE_PC
   FLOW_TOGGLE_STRING_MODE:
     flow__toggle_string_mode()
     goto MOVE_PC

Modified: trunk/languages/befunge/flow.pir
==============================================================================
--- trunk/languages/befunge/flow.pir    (original)
+++ trunk/languages/befunge/flow.pir    Fri Jan  9 01:39:27 2009
@@ -45,6 +45,43 @@
 .end
 
 
+# ** ifs & comparisons
+
+#
+# flow__if_horizontal()
+#
+# east/west if.
+# befunge stack:
+#   before:     ... b
+#   after:      ...
+# delta <- if (b) (-1,0) else (1,0)
+.sub "flow__if_horizontal"
+    $I0 = stack__pop()
+    if $I0 == 0 goto FLOW__IF_HORIZONTAL__FALSE
+    flow__go_west()
+    .return()
+  FLOW__IF_HORIZONTAL__FALSE:
+    flow__go_east()
+.end
+
+#
+# flow__if_vertical()
+#
+# north/south if.
+# befunge stack:
+#   before:     ... b
+#   after:      ...
+# delta <- if (b) (0,-1) else (0,1)
+.sub "flow__if_vertical"
+    $I0 = stack__pop()
+    if $I0 == 0 goto FLOW__IF_HORIZONTAL__FALSE
+    flow__go_south()
+    .return()
+  FLOW__IF_HORIZONTAL__FALSE:
+    flow__go_north()
+.end
+
+
 # ** flag handling
 
 #
@@ -88,31 +125,6 @@
     restore I2
     branch MOVE_PC
 
-# East/West if.
-# Befunge stack:
-#   before:     ... b
-#   after:      ...
-# delta <- if (b) (-1,0) else (1,0)
-FLOW_EW_IF:
-    set I10, P2
-    unless I10, FLOW_EW_IF_POP_1
-    pop I10, P2
-FLOW_EW_IF_POP_1:
-    eq I10, 0, FLOW_GO_EAST
-    branch FLOW_GO_WEST
-
-# North/South if.
-# Befunge stack:
-#   before:     ... b
-#   after:      ...
-# delta <- if (b) (0,-1) else (0,1)
-FLOW_NS_IF:
-    set I10, P2
-    unless I10, FLOW_NS_IF_POP_1
-    pop I10, P2
-FLOW_NS_IF_POP_1:
-    eq I10, 0, FLOW_GO_SOUTH
-    branch FLOW_GO_NORTH
 
 
 # Greater than.

Reply via email to