e26ae3594c3eb055c4b9039264898d17023ae8fc
[tpg/acess2.git] / AcessNative / ld-acess.so_src / syscalls.c
1 /*
2  */
3 //#include <acess/sys.h>
4 #include "common.h"
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <stdint.h>
8 #include <stdarg.h>
9
10 // === IMPORTS ===
11
12 // === CODE ===
13 /**
14  * \param ArgTypes
15  *
16  * Whitespace is ignored
17  * >i:  Input Integer
18  * >I:  Input Long Integer (64-bits)
19  * >s:  Input String
20  * >d:  Input Buffer (Preceded by valid size)
21  * <I:  Output long integer
22  * <d:  Output Buffer (Preceded by valid size)
23  */
24 int _Syscall(const char *ArgTypes, ...)
25 {
26         // int  outBufSize = 0;
27         va_list args;
28         
29         va_start(args, ArgTypes);
30         va_end(args);
31         return 0;
32 }
33
34 int open(const char *Path, int Flags) {
35         return _Syscall(">s >i", Path, Flags);
36 }
37
38 void close(int FD) {
39         _Syscall(">i", FD);
40 }
41
42 size_t read(int FD, size_t Bytes, void *Dest) {
43         return _Syscall(">i >i <d", FD, Bytes, Bytes, Dest);
44 }
45
46 size_t write(int FD, size_t Bytes, void *Src) {
47         return _Syscall(">i >i >d", FD, Bytes, Bytes, Src);
48 }
49
50 uint64_t tell(int FD) {
51         uint64_t        ret;
52         _Syscall("<I >i", &ret, FD);
53         return ret;
54 }
55
56 int seek(int FD, uint64_t Ofs, int Dir) {
57         return _Syscall(">i >I >i", FD, Ofs, Dir);
58 }
59
60 // === Symbol List ===
61 const tSym      caBuiltinSymbols[] = {
62         {"open", open},
63         {"close", close},
64         {"read", read},
65         {"write", write},
66         {"tell", tell},
67         {"seek", seek},
68         {"_exit", exit}
69 };
70
71 const int       ciNumBuiltinSymbols = sizeof(caBuiltinSymbols)/sizeof(caBuiltinSymbols[0]);
72

UCC git Repository :: git.ucc.asn.au