library.impl.c (1403B)
1 2 #include <stdio.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <fcntl.h> 6 7 void fn__hexout_(int x) { 8 printf("D %08x\n", x); 9 } 10 11 void fn_writes(int fd, t$str s) { 12 write(fd, (void*)s, strlen((void*) s)); 13 } 14 void fn_writex(int fd, int n) { 15 char tmp[64]; 16 sprintf(tmp, "0x%x", n); 17 write(fd, tmp, strlen(tmp)); 18 } 19 void fn_writei(int fd, int n) { 20 char tmp[64]; 21 sprintf(tmp, "%d", n); 22 write(fd, tmp, strlen(tmp)); 23 } 24 void fn_writec(int fd, int n) { 25 t$u8 x = n; 26 if (write(fd, &x, 1) != 1) {} 27 } 28 29 int fn_readc(int fd) { 30 t$u8 x; 31 if (read(fd, &x, 1) == 1) { 32 return x; 33 } else { 34 return -1; 35 } 36 } 37 38 static int os_argc; 39 static char **os_argv; 40 41 int main(int argc, char** argv) { 42 os_argc = argc; 43 os_argv = argv; 44 int x = fn_start(); 45 printf("X %08x\n", x); 46 return 0; 47 } 48 49 t$u8* fn_os_arg(int n) { 50 if ((n < 0) || (n >= os_argc)) { 51 return (void*) ""; 52 } 53 return (void*) os_argv[n]; 54 } 55 56 t$i32 fn_os_arg_count(void) { 57 return os_argc; 58 } 59 60 void fn_os_exit(int n) { 61 exit(n); 62 } 63 64 int fn_fd_open(t$str s) { 65 return open((void*)s, O_RDONLY, 0644); 66 } 67 int fn_fd_create(t$str s) { 68 return open((void*)s, O_RDWR | O_CREAT | O_TRUNC, 0644); 69 } 70 void fn_fd_close(int fd) { 71 close(fd); 72 } 73 int fn_fd_set_pos(int fd, unsigned pos) { 74 if (lseek(fd, pos, SEEK_SET) == ((off_t) -1)) { 75 return -1; 76 } else { 77 return 0; 78 } 79 } 80 unsigned fn_fd_get_pos(int fd) { 81 return lseek(fd, 0, SEEK_CUR); 82 } 83 84 void fn_abort(void) { 85 abort(); 86 } 87