author | unc0rr |
Mon, 19 Nov 2018 22:25:02 +0100 | |
changeset 14271 | a7320c65f484 |
parent 14180 | 0aeea29ef890 |
child 15376 | 5c0479d0ed5b |
permissions | -rw-r--r-- |
10015 | 1 |
#ifndef _FPCRTL_MISC_H_ |
2 |
#define _FPCRTL_MISC_H_ |
|
3 |
||
4 |
#include "pas2c.h" |
|
5 |
#include <assert.h> |
|
6 |
#include <stdbool.h> |
|
7 |
||
8 |
#ifdef EMSCRIPTEN |
|
9 |
#include <GL/gl.h> |
|
10 |
#else |
|
11 |
#include <GL/glew.h> |
|
12 |
#endif |
|
13 |
||
14 |
#define VA_NUM_ARGS(...) VA_NUM_ARGS_IMPL(__VA_ARGS__, 5,4,3,2,1) |
|
15 |
#define VA_NUM_ARGS_IMPL(_1,_2,_3,_4,_5,N,...) N |
|
16 |
||
17 |
#define macro_dispatcher(func, ...) macro_dispatcher_(func, VA_NUM_ARGS(__VA_ARGS__)) |
|
18 |
#define macro_dispatcher_(func, nargs) macro_dispatcher__(func, nargs) |
|
19 |
#define macro_dispatcher__(func, nargs) func ## nargs |
|
20 |
||
10128 | 21 |
//#define FPCRTL_DEBUG |
10015 | 22 |
|
14180 | 23 |
#define FIX_STRING(s) do { s.str[s.len == 255 ? 254 : s.len] = 0; } while (0) |
24 |
#define FIX_STRINGA(s) do { s.str[s.len == MAX_ANSISTRING_LENGTH ? MAX_ANSISTRING_LENGTH - 1 : s.len] = 0; } while (0) |
|
10015 | 25 |
//#define fpcrtl_check_string(s) do{ if(strlen((s).str) != (s).len){ \ |
26 |
// printf("String %s internal inconsistency error. Length should be %d but actually is %d.\n", (s).str, strlen((s).str), (s).len); \ |
|
27 |
// assert(0);\ |
|
28 |
// }}while(0) |
|
29 |
||
30 |
void fpcrtl_assert(int); |
|
31 |
void fpcrtl_print_trace (void); |
|
32 |
||
33 |
int fpcrtl_round(double number); |
|
34 |
void fpcrtl_printf(const char* format, ...); |
|
35 |
||
36 |
string255 fpcrtl_make_string(const char* s); |
|
37 |
||
38 |
string255 fpcrtl_strconcat(string255 str1, string255 str2); |
|
39 |
string255 fpcrtl_strappend(string255 s, char c); |
|
40 |
string255 fpcrtl_strprepend(char c, string255 s); |
|
41 |
string255 fpcrtl_chrconcat(char a, char b); |
|
42 |
||
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10121
diff
changeset
|
43 |
astring fpcrtl_strconcatA(astring str1, astring str2); |
10128 | 44 |
astring fpcrtl_strappendA(astring s, char c); |
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10121
diff
changeset
|
45 |
|
10015 | 46 |
// return true if str1 == str2 |
47 |
bool fpcrtl_strcompare(string255 str1, string255 str2); |
|
48 |
bool fpcrtl_strcomparec(string255 a, char b); |
|
49 |
bool fpcrtl_strncompare(string255 a, string255 b); |
|
10127 | 50 |
bool fpcrtl_strncompareA(astring a, astring b); |
10015 | 51 |
|
10128 | 52 |
#define fpcrtl__pchar(s) fpcrtl__pchar__vars(&(s)) |
53 |
#define fpcrtl__pcharA(s) fpcrtl__pcharA__vars(&(s)) |
|
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10129
diff
changeset
|
54 |
char* fpcrtl__pchar__vars(const string255 * s); |
10129
cd2a64a1f4aa
- Pas2C: make use of 'external' function decorator
unc0rr
parents:
10128
diff
changeset
|
55 |
char* fpcrtl__pcharA__vars(astring * s); |
10128 | 56 |
string255 fpcrtl_pchar2str(const char *s); |
57 |
astring fpcrtl_pchar2astr(const char *s); |
|
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10129
diff
changeset
|
58 |
astring fpcrtl_str2astr(const string255 s); |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10129
diff
changeset
|
59 |
string255 fpcrtl_astr2str(const astring s); |
10015 | 60 |
#define fpcrtl_TypeInfo sizeof // dummy |
61 |
||
62 |
#ifdef EMSCRIPTEN |
|
63 |
#define GLEW_OK 1 |
|
64 |
GLenum glewInit(); |
|
65 |
#endif |
|
66 |
||
67 |
#endif |