hedgewars/pas2c.h
author nemo
Mon, 18 Feb 2013 14:06:16 -0500
changeset 8516 e422cbf9aa33
parent 7151 ec15d9e1a7e3
permissions -rw-r--r--
pretty sure esc here is just a holdover from past, and has no use in rearranged implementation.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6875
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
     1
#pragma once
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
     2
7134
beb16926ae5c Some improvements to pas2c
unc0rr
parents: 7074
diff changeset
     3
#include <stddef.h>
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
     4
#include <stdint.h>
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
     5
#include <stdbool.h>
7073
26f960656cc9 help pas2c
unc0rr
parents: 7072
diff changeset
     6
#include <wchar.h>
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
     7
6896
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
     8
typedef union string255_
6883
70aec33185e2 Support string constants
unc0rr
parents: 6878
diff changeset
     9
    {
6896
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    10
        struct {
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    11
            char s[256];
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    12
        };
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    13
        struct {
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    14
            char len;
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    15
            char str[255];
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    16
        };
6883
70aec33185e2 Support string constants
unc0rr
parents: 6878
diff changeset
    17
    } string255;
6889
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    18
typedef struct string192_
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    19
    {
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    20
        char s[193];
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    21
    } string192;
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    22
typedef struct string31_
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    23
    {
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    24
        char s[32];
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    25
    } string31;
6891
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    26
typedef struct string15_
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    27
    {
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    28
        char s[16];
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    29
    } string15;
6875
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
    30
7072
159616c24bb8 More magic
unc0rr
parents: 7070
diff changeset
    31
typedef string255 shortstring;
7151
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
    32
typedef string255 ansistring;
7072
159616c24bb8 More magic
unc0rr
parents: 7070
diff changeset
    33
    
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    34
typedef uint8_t Byte;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    35
typedef int8_t ShortInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    36
typedef uint16_t Word;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    37
typedef int16_t SmallInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    38
typedef uint32_t LongWord;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    39
typedef int32_t LongInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    40
typedef uint64_t QWord;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    41
typedef int64_t Int64;
7073
26f960656cc9 help pas2c
unc0rr
parents: 7072
diff changeset
    42
typedef LongWord Cardinal;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    43
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    44
typedef LongInt Integer;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    45
typedef float extended;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    46
typedef float real;
7043
7c080e5ac8d0 Some work to make more units compile after conversion to c
unc0rr
parents: 7041
diff changeset
    47
typedef float single;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    48
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    49
typedef bool boolean;
7043
7c080e5ac8d0 Some work to make more units compile after conversion to c
unc0rr
parents: 7041
diff changeset
    50
typedef int LongBool;
6875
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
    51
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
    52
typedef void * pointer;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    53
typedef Byte * PByte;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    54
typedef char * PChar;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    55
typedef LongInt * PLongInt;
7060
861d6897917f Properly track type in ref2CF, this fixes issues with functions returning strings used in expression (like "a" + line())
unc0rr
parents: 7054
diff changeset
    56
typedef LongWord * PLongWord;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    57
typedef Integer * PInteger;
7070
8d4189609e90 oops, wrong type
unc0rr
parents: 7069
diff changeset
    58
typedef int PtrInt;
7073
26f960656cc9 help pas2c
unc0rr
parents: 7072
diff changeset
    59
typedef wchar_t widechar;
6875
6528171ce36d First try to compile with clang: improve renderer a bit. The result of pas2c is still far from normal C source.
unc0rr
parents:
diff changeset
    60
6922
93bdd3d251fe Fix types
unc0rr
parents: 6902
diff changeset
    61
#define new(a) __new((void **)&a, sizeof(*(a)))
93bdd3d251fe Fix types
unc0rr
parents: 6902
diff changeset
    62
void __new(void ** p, int size);
6895
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    63
#define dispose(a) __dispose(a, sizeof(*(a)))
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    64
void __dispose(pointer p, int size);
6894
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    65
7053
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
    66
void * GetMem(int size);
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
    67
void FreeMem(void * p, int size);
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
    68
6894
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    69
#define FillChar(a, b, c) __FillChar(&(a), b, c)
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    70
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    71
void __FillChar(pointer p, int size, char fill);
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    72
string255 _strconcat(string255 a, string255 b);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    73
string255 _strappend(string255 s, char c);
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    74
string255 _strprepend(char c, string255 s);
7151
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
    75
string255 _chrconcat(char a, char b);
6923
d2405a6a86f5 uCommands compiles
unc0rr
parents: 6922
diff changeset
    76
bool _strcompare(string255 a, string255 b);
7054
7e8fb07ef91c Function to compare string to char ftw
unc0rr
parents: 7053
diff changeset
    77
bool _strcomparec(string255 a, char b);
7043
7c080e5ac8d0 Some work to make more units compile after conversion to c
unc0rr
parents: 7041
diff changeset
    78
bool _strncompare(string255 a, string255 b);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    79
char * _pchar(string255 s);
7134
beb16926ae5c Some improvements to pas2c
unc0rr
parents: 7074
diff changeset
    80
string255 pchar2str(char * s);
6894
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    81
6895
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    82
int Length(string255 a);
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    83
string255 copy(string255 a, int s, int l);
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    84
string255 delete(string255 a, int s, int l);
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
    85
string255 trim(string255 a);
6895
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    86
6967
1224c6fb36c3 Support recurrent function calls. The code is kinda hackish and ugly, but I really spent a few hours thinking on a good solution.
unc0rr
parents: 6965
diff changeset
    87
#define STRINIT(a) {.len = sizeof(a) - 1, .str = a}
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    88
7062
7efe16575779 Recognize length on arrays as a separate function
unc0rr
parents: 7060
diff changeset
    89
7efe16575779 Recognize length on arrays as a separate function
unc0rr
parents: 7060
diff changeset
    90
int length_ar(void * a);
7efe16575779 Recognize length on arrays as a separate function
unc0rr
parents: 7060
diff changeset
    91
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    92
typedef int file;
7043
7c080e5ac8d0 Some work to make more units compile after conversion to c
unc0rr
parents: 7041
diff changeset
    93
typedef int TextFile;
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    94
extern int FileMode;
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    95
extern int IOResult;
7151
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
    96
extern int stdout;
7074
3f23bd0f2af2 Make uUtils.c compile
unc0rr
parents: 7073
diff changeset
    97
extern int stderr;
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    98
6902
7d4e5ce73b98 Make pas2c even smarter. Now uIO.c compiles fine, and only 1 warning when compiled with -Wall (clang).
unc0rr
parents: 6898
diff changeset
    99
#define assign(a, b) assign_(&(a), b)
7d4e5ce73b98 Make pas2c even smarter. Now uIO.c compiles fine, and only 1 warning when compiled with -Wall (clang).
unc0rr
parents: 6898
diff changeset
   100
void assign_(int * f, string255 fileName);
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
   101
void reset_1(int f, int size);
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
   102
void reset_2(int f, int size);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
   103
#define BlockRead(a, b, c, d) BlockRead_(a, &(b), c, &(d))
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
   104
void BlockRead_(int f, void * p, int size, int * sizeRead);
7053
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
   105
#define BlockWrite(a, b, c) BlockWrite_(a, &(b), c)
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
   106
void BlockWrite_(int f, void * p, int size);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
   107
void close(int f);
7002
5d817ba976f7 Render float consts into defines
unc0rr
parents: 6971
diff changeset
   108
7151
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
   109
void write(int f, string255 s);
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
   110
void writeLn(int f, string255 s);
7054
7e8fb07ef91c Function to compare string to char ftw
unc0rr
parents: 7053
diff changeset
   111
7053
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
   112
bool DirectoryExists(string255 dir);
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
   113
bool FileExists(string255 filename);
8c9dcaedc7a8 Make pas2c happier with uSound
unc0rr
parents: 7045
diff changeset
   114
7002
5d817ba976f7 Render float consts into defines
unc0rr
parents: 6971
diff changeset
   115
bool odd(int i);
7038
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   116
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   117
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   118
typedef int TThreadId;
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   119
void ThreadSwitch();
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   120
#define InterlockedIncrement(a) __InterlockedIncrement(&(a))
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   121
#define InterlockedDecrement(a) __InterlockedDecrement(&(a))
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   122
void __InterlockedIncrement(int * a);
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   123
void __InterlockedDecrement(int * a);
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   124
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   125
bool Assigned(void * a);
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   126
7054
7e8fb07ef91c Function to compare string to char ftw
unc0rr
parents: 7053
diff changeset
   127
void randomize();
7038
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   128
int random(int max);
d853e4385241 Some more definitions and slight fixes
unc0rr
parents: 7002
diff changeset
   129
int abs(int i);
7041
76a9274f280f More definitions and mess with pascal code
unc0rr
parents: 7038
diff changeset
   130
double sqr(double n);
76a9274f280f More definitions and mess with pascal code
unc0rr
parents: 7038
diff changeset
   131
double sqrt(double n);
76a9274f280f More definitions and mess with pascal code
unc0rr
parents: 7038
diff changeset
   132
int trunc(double n);
7043
7c080e5ac8d0 Some work to make more units compile after conversion to c
unc0rr
parents: 7041
diff changeset
   133
int round(double n);
7045
197bf70f8599 Declare Param* functions
unc0rr
parents: 7043
diff changeset
   134
197bf70f8599 Declare Param* functions
unc0rr
parents: 7043
diff changeset
   135
string255 ParamStr(int n);
197bf70f8599 Declare Param* functions
unc0rr
parents: 7043
diff changeset
   136
int ParamCount();
7054
7e8fb07ef91c Function to compare string to char ftw
unc0rr
parents: 7053
diff changeset
   137
7151
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
   138
#define val(a, b, c) _val(a, (LongInt*)&(b), (LongInt*)&(c))
ec15d9e1a7e3 pas2c stuff
unc0rr
parents: 7134
diff changeset
   139
void _val(string255 str, LongInt * a, LongInt * c);
7062
7efe16575779 Recognize length on arrays as a separate function
unc0rr
parents: 7060
diff changeset
   140
7efe16575779 Recognize length on arrays as a separate function
unc0rr
parents: 7060
diff changeset
   141
extern double pi;
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
   142
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
   143
string255 EnumToStr(int a);
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7062
diff changeset
   144
string255 ExtractFileName(string255 f);