os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

cat.om (670B)


      1 func docat(fd: int, buf: *byte) {
      2 	var n: int;
      3 	var m: int;
      4 	var k: int;
      5 	loop {
      6 		n = read(fd, buf, 4096);
      7 		if n == 0 {
      8 			return;
      9 		}
     10 
     11 		if n < 0 {
     12 			die("read failed");
     13 		}
     14 
     15 		m = 0;
     16 		loop {
     17 			if m == n {
     18 				break;
     19 			}
     20 
     21 			k = write(1, &buf[m], n - m);
     22 			if k < 0 {
     23 				die("write failed");
     24 			}
     25 
     26 			m = m + k;
     27 		}
     28 	}
     29 }
     30 
     31 func main(argc: int, argv: **byte, envp: **byte) {
     32 	var fd: int;
     33 	var i: int;
     34 	var a: alloc;
     35 	var buf: *byte;
     36 
     37 	setup_alloc(&a);
     38 
     39 	buf = alloc(&a, 4096);
     40 
     41 	if argc == 1 {
     42 		docat(0, buf);
     43 	} else {
     44 		i = 1;
     45 		loop {
     46 			if i >= argc {
     47 				break;
     48 			}
     49 
     50 			fd = open(argv[i], 0, 0);
     51 
     52 			docat(fd, buf);
     53 
     54 			close(fd);
     55 
     56 			i = i + 1;
     57 		}
     58 	}
     59 }