about summary refs log tree commit diff stats
path: root/mu.arc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-02-04 23:28:50 -0800
committerKartik K. Agaram <vc@akkartik.com>2015-02-04 23:28:50 -0800
commitee50fd157c110c9febdd7676ae3e615a7598579d (patch)
treec5ce808acf0f97af8f03793f81c65545bced6d66 /mu.arc
parent22a3a0073c0c8ebecf7607a6cbbb14729edb5c51 (diff)
downloadmu-ee50fd157c110c9febdd7676ae3e615a7598579d.tar.gz
706
Diffstat (limited to 'mu.arc')
-rw-r--r--mu.arc30
1 files changed, 30 insertions, 0 deletions
diff --git a/mu.arc b/mu.arc
index 236024b5..a1d7c2f0 100644
--- a/mu.arc
+++ b/mu.arc
@@ -1891,6 +1891,36 @@
   (result:boolean <- equal full:integer curr:integer)
   (reply result:boolean))
 
+(init-fn string-equal
+  (default-space:space-address <- new space:literal 30:literal)
+  (a:string-address <- next-input)
+  (a-len:integer <- length a:string-address/deref)
+  (b:string-address <- next-input)
+  (b-len:integer <- length b:string-address/deref)
+  ; compare lengths
+  { begin
+    (length-equal?:boolean <- equal a-len:integer b-len:integer)
+    (break-if length-equal?:boolean)
+    (reply nil:literal)
+  }
+  ; compare each corresponding byte
+  (i:integer <- copy 0:literal)
+  { begin
+    (done?:boolean <- greater-or-equal i:integer a-len:integer)
+    (break-if done?:boolean)
+    (a-char:byte <- index a:string-address/deref i:integer)
+    (b-char:byte <- index b:string-address/deref i:integer)
+    { begin
+      (chars-match?:boolean <- equal a-char:byte b-char:byte)
+      (break-if chars-match?:boolean)
+      (reply nil:literal)
+    }
+    (i:integer <- add i:integer 1:literal)
+    (loop)
+  }
+  (reply t:literal)
+)
+
 (init-fn strcat
   (default-space:space-address <- new space:literal 30:literal)
   ; result = new string[a.length + b.length]