From 3d1c4216ede8c628558c9fe700fb2be1aa08b473 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Mon, 2 Nov 2020 21:24:53 -0800 Subject: 7162 --- html/apps/parse-int.mu.html | 81 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 42 deletions(-) (limited to 'html/apps/parse-int.mu.html') diff --git a/html/apps/parse-int.mu.html b/html/apps/parse-int.mu.html index db3e7f25..155e7a7a 100644 --- a/html/apps/parse-int.mu.html +++ b/html/apps/parse-int.mu.html @@ -64,48 +64,45 @@ if ('onhashchange' in window) { 6 # $ echo $? 7 # 123 8 - 9 fn main _args: (addr array addr array byte) -> exit-status/ebx: int { -10 $main-body: { -11 # if no args, print a message and exit -12 var args/esi: (addr array addr array byte) <- copy _args -13 var n/ecx: int <- length args -14 compare n, 1 -15 { -16 break-if-> -17 print-string 0, "usage: parse-int <integer>\n" -18 exit-status <- copy 1 -19 break $main-body -20 } -21 # otherwise parse the first arg as an integer -22 var in/ecx: (addr addr array byte) <- index args, 1 -23 var out/eax: int <- parse-int *in -24 exit-status <- copy out -25 } -26 } -27 -28 fn parse-int _in: (addr array byte) -> result/eax: int { -29 var in/esi: (addr array byte) <- copy _in -30 var len/edx: int <- length in -31 var i/ecx: int <- copy 0 -32 var out/edi: int <- copy 0 -33 { -34 compare i, len -35 break-if->= -36 # out *= 10 -37 var ten/eax: int <- copy 0xa -38 out <- multiply ten -39 # c = in[i] -40 var tmp/ebx: (addr byte) <- index in, i -41 var c/eax: byte <- copy 0 -42 c <- copy-byte *tmp -43 # -44 var digit/eax: int <- to-decimal-digit c -45 out <- add digit -46 i <- increment -47 loop -48 } -49 result <- copy out -50 } + 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, "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