Author: jquelin
Date: Fri Jan  9 03:30:02 2009
New Revision: 35285

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

Log:
instruction ~ implemented (input char) -- not tested


Modified: trunk/languages/befunge/befunge.pir
==============================================================================
--- trunk/languages/befunge/befunge.pir (original)
+++ trunk/languages/befunge/befunge.pir Fri Jan  9 03:30:02 2009
@@ -95,6 +95,7 @@
     if char == '\' goto STACK_SWAP
 
     # i/o operations
+    if char == '~' goto IO_INPUT_CHAR
     if char == '&' goto IO_INPUT_INT
     if char == ',' goto IO_OUTPUT_CHAR
     if char == '.' goto IO_OUTPUT_INT
@@ -179,6 +180,9 @@
     goto MOVE_PC
 
     # io instructions
+  IO_INPUT_CHAR:
+    io__input_char()
+    goto MOVE_PC
   IO_INPUT_INT:
     io__input_int()
     goto MOVE_PC

Modified: trunk/languages/befunge/io.pir
==============================================================================
--- trunk/languages/befunge/io.pir      (original)
+++ trunk/languages/befunge/io.pir      Fri Jan  9 03:30:02 2009
@@ -18,9 +18,40 @@
     set_global "stack", $P1
 .end
 
+
 # ** input
 
 #
+# io__input_char()
+#
+# input character.
+# befunge stack:
+#   before:     ...
+#   after:      ... c
+# c = getchar()
+# no return value.
+#
+.sub "io__input_char"
+    $P0 = get_global "user_input"
+    $S0 = $P0
+
+    $I0 = length $S0
+    if $I0 > 0 goto _IO__INPUT_CHAR__SUBSTR
+
+    $P1 = getstdin
+    $S0 = readline $P1
+    
+  _IO__INPUT_CHAR__SUBSTR:
+    $S1 = substr $S0, 0, 1, ""
+    $P0 = $S0
+    set_global "user_input", $P0
+    
+    $I0 = ord $S1
+    stack__push($I0)
+    
+.end
+
+#
 # io__input_int()
 #
 # input integer.
@@ -141,35 +172,6 @@
 .end
 
 
-
-=pod
-
-
-# Input character.
-# Befunge stack:
-#   before:     ...
-#   after:      ... c
-# c = getchar()
-IO_INPUT_CHAR:
-    save S2
-    restore S2
-    length I10, S2
-    gt I10, 0, IO_INPUT_CHAR_SUBSTR
-    getstdin P15
-    readline S2, P15
-IO_INPUT_CHAR_SUBSTR:
-    substr S10, S2, 0, 1
-    length I10, S2
-    substr S2, S2, 1, I10
-    ord I10, S10
-    push P2, I10
-    save S2
-    restore S2
-    branch MOVE_PC
-
-
-=cut
-
 ########################################################################
 # Local Variables:
 #   mode: pir

Reply via email to