Tools/nativelib - Many features implimented
[tpg/acess2.git] / Tools / nativelib / include / acess.h
1 /*
2  * Acess2 DiskTool utility
3  * - By John Hodge (thePowersGang)
4  *
5  * include/acess.h
6  * - Mock kernel core header
7  */
8 #ifndef _DISKTOOL__ACESS_H_
9 #define _DISKTOOL__ACESS_H_
10
11 #define CONCAT(x,y) x ## y
12 #define EXPAND_CONCAT(x,y) CONCAT(x,y)
13 #define STR(x) #x
14 #define EXPAND_STR(x) STR(x)
15
16 #define ASSERT(x)       do{}while(0)
17
18 extern char     __buildnum[];
19 #define BUILD_NUM       ((int)(Uint)&__buildnum)
20 extern const char gsGitHash[];
21 extern const char gsBuildInfo[];
22 #define VER2(major,minor)       ((((major)&0xFF)<<8)|((minor)&0xFF))
23
24
25 #define BITS    32
26 #define NULL    ((void*)0)
27 #include <stdint.h>
28
29 typedef uintptr_t       Uint;
30 //typedef unsigned int  size_t;
31 #include <stddef.h>
32 typedef uint64_t        off_t;
33 typedef char    BOOL;
34
35
36 typedef uint8_t         Uint8;
37 typedef uint16_t        Uint16;
38 typedef uint32_t        Uint32;
39 typedef uint64_t        Uint64;
40
41 typedef int8_t  Sint8;
42 typedef int16_t Sint16;
43 typedef int32_t Sint32;
44 typedef int64_t Sint64;
45
46 typedef uintptr_t       tVAddr;
47 typedef uint32_t        tPAddr;
48
49 typedef uint32_t        tUID;
50 typedef uint32_t        tGID;
51 typedef uint32_t        tTID;
52
53 // NOTE: Since this is single-threaded (for now) mutexes can be implimented as simple locks
54 typedef char    tShortSpinlock;
55
56 typedef int64_t tTime;
57 extern tTime    now(void);
58 extern int64_t  timestamp(int sec, int min, int hr, int day, int month, int year);
59 extern void     format_date(tTime TS, int *year, int *month, int *day, int *hrs, int *mins, int *sec, int *ms);
60
61 #define PACKED  __attribute__((packed))
62 #define DEPRECATED
63 #define EXPORT(s)
64 #define EXPORTV(s)
65
66 #include <vfs_ext.h>
67
68 // These are actually library functions, but they can't be included, so they're defined manually
69 extern void     *malloc(size_t bytes);
70 extern void     *calloc(size_t nmemb, size_t size);
71 extern void     *realloc(void *oldptr, size_t bytes);
72 extern void     free(void *buffer);
73 extern char     *strdup(const char *str);
74
75 #include <errno.h>
76 #include <acess_logging.h>
77
78 // Threads
79 extern void     **Threads_GetHandlesPtr(void);
80 extern int      *Threads_GetErrno(void);
81 //extern tPGID  Threads_GetPGID(void);
82 //extern tPID   Threads_GetPID(void);
83 extern tTID     Threads_GetTID(void);
84 extern tUID     Threads_GetUID(void);
85 extern tGID     Threads_GetGID(void);
86
87 extern struct sThread   *Proc_SpawnWorker(void (*Fcn)(void*), void *Data);
88 extern void     Threads_Sleep(void);
89 extern void     Threads_Yield(void);
90 extern int      Threads_SetName(const char *NewName);
91
92 // Kinda hacky way of not colliding with native errno
93 #define errno   (*(Threads_GetErrno()))
94
95 /**
96  * \name Endianness Swapping
97  * \{
98  */
99 #ifdef __BIG_ENDIAN__
100 #define LittleEndian16(_val)    SwapEndian16(_val)
101 #define LittleEndian32(_val)    SwapEndian32(_val)
102 #define LittleEndian64(_val)    SwapEndian32(_val)
103 #define BigEndian16(_val)       (_val)
104 #define BigEndian32(_val)       (_val)
105 #define BigEndian64(_val)       (_val)
106 #else
107 #define LittleEndian16(_val)    (_val)
108 #define LittleEndian32(_val)    (_val)
109 #define LittleEndian64(_val)    (_val)
110 #define BigEndian16(_val)       SwapEndian16(_val)
111 #define BigEndian32(_val)       SwapEndian32(_val)
112 #define BigEndian64(_val)       SwapEndian64(_val)
113 #endif
114 extern Uint16   SwapEndian16(Uint16 Val);
115 extern Uint32   SwapEndian32(Uint32 Val);
116 extern Uint64   SwapEndian64(Uint64 Val);
117 /**
118  * \}
119  */
120
121
122 #include <string.h>
123 #include <acess_string.h>
124 #if 0
125 extern int      strucmp(const char *s1, const char *s2);
126 extern int      strpos(const char *Str, char Ch);
127 extern void     itoa(char *buf, uint64_t num, int base, int minLength, char pad);
128 extern int      snprintf(char *buf, size_t len, const char *fmt, ...);
129 extern int      sprintf(char *buf, const char *fmt, ...);
130 extern int      ReadUTF8(const Uint8 *str, Uint32 *Val);
131 extern int      WriteUTF8(Uint8 *str, Uint32 Val);
132 extern int      ParseInt(const char *string, int *Val);
133 #include <ctype.h>
134 extern int      ModUtil_SetIdent(char *Dest, const char *Value);
135 extern int      ModUtil_LookupString(const char **Array, const char *Needle);
136 extern Uint8    ByteSum(const void *Ptr, int Size);
137 extern int      Hex(char *Dest, size_t Size, const Uint8 *SourceData);
138 extern int      UnHex(Uint8 *Dest, size_t DestSize, const char *SourceString);
139 #endif
140 #define CheckString(str)        (1)
141 #define CheckMem(mem,sz)        (1)
142 extern int      rand(void);
143
144 // TODO: Move out?
145 extern int      DivUp(int value, int divisor);
146 extern uint64_t DivMod64U(uint64_t Num, uint64_t Den, uint64_t *Rem);
147 static inline int MIN(int a, int b) { return a < b ? a : b; }
148 static inline int MAX(int a, int b) { return a > b ? a : b; }
149
150 #if USE_MULTITHREADING
151 #error "TODO: Impliment multithreaded SHORTLOCK"
152 #else
153 static inline void SHORTLOCK(tShortSpinlock *Lock) {
154         if(*Lock)       Log_KernelPanic("---", "Double short lock");
155         *Lock = 1;
156 }
157 static inline void SHORTREL(tShortSpinlock *m) { *m = 0; }
158 static inline int  CPU_HAS_LOCK(tShortSpinlock *m) { return *m; }
159 #endif
160
161 static inline intptr_t MM_GetPhysAddr(void *Ptr) { return 1; }
162 static inline int       MM_IsUser(const void *Ptr) { return 1; }
163
164 #endif
165

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