Bug fixed for stdin and stdout in a different platform.
authorwang <wang@wang-OptiPlex-7010.(none)>
Wed, 9 Oct 2013 00:27:04 +0000 (02:27 +0200)
committerwang <wang@wang-OptiPlex-7010.(none)>
Wed, 9 Oct 2013 00:27:04 +0000 (02:27 +0200)
Tested by "make test".

Makefile
interpreter/main.ml

index 5f8cbba..582ead6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,12 +37,11 @@ mrproper: clean
 
 test:
        @$(MAKE) -C $(SINWAVE_DIR)
 
 test:
        @$(MAKE) -C $(SINWAVE_DIR)
-       @ls -l $(SINWAVE_DIR)/output1.wav
 
        @echo "    You might want to check the output file with either:"
 
        @echo "    You might want to check the output file with either:"
-       @echo "audacity $(SINWAVE_DIR)/output1.wav"
-       @echo "open $(SINWAVE_DIR)/output1.wav"
-       @echo "octave -q --eval 'plot(wavread(\"$(SINWAVE_DIR)/output1.wav\")); pause'"
+       @echo "audacity $(SINWAVE_DIR)/sin.wav"
+       @echo "open $(SINWAVE_DIR)/sin.wav"
+       @echo "octave -q --eval 'plot(wavread(\"$(SINWAVE_DIR)/sin.wav\")); pause'"
 
 examples::
        @($(MAKE) -C $(EXAMPLES_DIR))
 
 examples::
        @($(MAKE) -C $(EXAMPLES_DIR))
index 7275d01..94b0ae1 100644 (file)
@@ -59,16 +59,36 @@ let file_of_path : string -> string =
     let n = List.length fragments in
     List.nth fragments (n - 1);;  
 
     let n = List.length fragments in
     List.nth fragments (n - 1);;  
 
+let valid_input_file : string -> bool = 
+  fun (file : string) ->
+    let fragments = Str.split (Str.regexp "\.") file in
+    let n = List.length fragments in
+    let extension = List.nth fragments (n - 1) in
+    if extension = "csv" || extension = "wav" then true
+    else false;;
+
+let chk_input_path : string -> bool =
+  fun (path : string) ->
+    let file_in = file_of_path path in
+    valid_input_file file_in;;
+
 let stdinput = fun (x : unit) ->
   let path = Unix.readlink "/proc/self/fd/0" in
 let stdinput = fun (x : unit) ->
   let path = Unix.readlink "/proc/self/fd/0" in
-  if path <> "/dev/pts/4" then
+  if chk_input_path path then
     ( incr size_input;
       inputs := !inputs @ [path] )
   else ();;
 
     ( incr size_input;
       inputs := !inputs @ [path] )
   else ();;
 
+let chk_output_path : string -> bool =
+  fun (path : string) ->
+    let fragments = Str.split (Str.regexp "/") path in
+    let location = List.nth fragments 0 in
+    if location = "dev" then false
+    else true;;
+
 let stdoutput = fun (x : unit) ->
   let path = Unix.readlink "/proc/self/fd/1" in
 let stdoutput = fun (x : unit) ->
   let path = Unix.readlink "/proc/self/fd/1" in
-  if path <> "/dev/pts/4" then output := path
+  if chk_output_path path then output := path
   else ();;
 
 let stdio = fun (x : unit) -> 
   else ();;
 
 let stdio = fun (x : unit) ->