os

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

xxd.om (756B)


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