From 3350c34a74844e21ea69077e01efff3bae64bdcd Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 23 Mar 2021 17:31:08 -0700 Subject: . --- html/linux/parse-int.mu.html | 109 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 html/linux/parse-int.mu.html (limited to 'html/linux/parse-int.mu.html') diff --git a/html/linux/parse-int.mu.html b/html/linux/parse-int.mu.html new file mode 100644 index 00000000..1041c516 --- /dev/null +++ b/html/linux/parse-int.mu.html @@ -0,0 +1,109 @@ + + + + +Mu - linux/parse-int.mu + + + + + + + + + + +https://github.com/akkartik/mu/blob/main/linux/parse-int.mu +
+ 1 # parse a decimal int at the commandline
+ 2 #
+ 3 # To run:
+ 4 #   $ ./translate parse-int.mu
+ 5 #   $ ./a.elf 123
+ 6 #   $ echo $?
+ 7 #   123
+ 8 
+ 9 fn main _args: (addr array addr array byte) -> _/ebx: int {
+10   # if no args, print a message and exit
+11   var args/esi: (addr array addr array byte) <- copy _args
+12   var n/ecx: int <- length args
+13   compare n, 1
+14   {
+15     break-if->
+16     print-string 0/screen, "usage: parse-int <integer>\n"
+17     return 1
+18   }
+19   # otherwise parse the first arg as an integer
+20   var in/ecx: (addr addr array byte) <- index args, 1
+21   var out/eax: int <- parse-int *in
+22   return out
+23 }
+24 
+25 fn parse-int _in: (addr array byte) -> _/eax: int {
+26   var in/esi: (addr array byte) <- copy _in
+27   var len/edx: int <- length in
+28   var i/ecx: int <- copy 0
+29   var result/edi: int <- copy 0
+30   {
+31     compare i, len
+32     break-if->=
+33     # result *= 10
+34     var ten/eax: int <- copy 0xa
+35     result <- multiply ten
+36     # c = in[i]
+37     var tmp/ebx: (addr byte) <- index in, i
+38     var c/eax: byte <- copy-byte *tmp
+39     #
+40     var g/eax: grapheme <- copy c
+41     var digit/eax: int <- to-decimal-digit g
+42     result <- add digit
+43     i <- increment
+44     loop
+45   }
+46   return result
+47 }
+
+ + + -- cgit 1.4.1-2-gfad0