spl

systems programming language
git clone http://frotz.net/git/spl.git
Log | Files | Refs | README | LICENSE

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