https://github.com/akkartik/mu/blob/main/linux/print-file.mu

     1 # accept a filename on the commandline, read it and print it out to screen
     2 # only ascii right now, just like the rest of Mu
     3 #
     4 # To run:
     5 #   $ ./translate print-file.mu
     6 #   $ echo abc > x
     7 #   $ ./a.elf x
     8 #   abc
     9
    10 fn main _args: (addr array addr array byte) -> _/ebx: int {
    11   var args/eax: (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: cat <filename>\n"
    17     return 0
    18   }
    19   {
    20     break-if-<=
    21     var filename/edx: (addr addr array byte) <- index args 1
    22     var in: (handle buffered-file)
    23     {
    24       var addr-in/eax: (addr handle buffered-file) <- address in
    25       open *filename, 0/read-only, addr-in
    26     }
    27     var _in-addr/eax: (addr buffered-file) <- lookup in
    28     var in-addr/ecx: (addr buffered-file) <- copy _in-addr
    29     {
    30       var c/eax: byte <- read-byte-buffered in-addr
    31       compare c, 0xffffffff/end-of-file
    32       break-if-=
    33       var g/eax: grapheme <- copy c
    34       print-grapheme 0/screen, g
    35       loop
    36     }
    37   }
    38   return 0
    39 }