hedgewars/pas2c.h
author unc0rr
Wed, 02 May 2012 22:12:58 +0400
changeset 7001 89488f5b99ca
parent 6971 b7b38e051b5f
child 7002 5d817ba976f7
permissions -rw-r--r--
GetRandom -> GetRandomf
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
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
     3
#include <stdint.h>
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
     4
#include <stdbool.h>
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
     5
6896
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
     6
typedef union string255_
6883
70aec33185e2 Support string constants
unc0rr
parents: 6878
diff changeset
     7
    {
6896
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
     8
        struct {
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
     9
            char s[256];
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    10
        };
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    11
        struct {
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    12
            char len;
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    13
            char str[255];
23b38e530967 Move all strings into constants to make them of string255 type
unc0rr
parents: 6895
diff changeset
    14
        };
6883
70aec33185e2 Support string constants
unc0rr
parents: 6878
diff changeset
    15
    } string255;
6889
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    16
typedef struct string192_
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    17
    {
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    18
        char s[193];
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    19
    } string192;
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    20
typedef struct string31_
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    21
    {
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    22
        char s[32];
149638c9cbc4 More string types
unc0rr
parents: 6886
diff changeset
    23
    } string31;
6891
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    24
typedef struct string15_
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    25
    {
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    26
        char s[16];
ab9843957664 Improve rendering of function types, ranges, and more
unc0rr
parents: 6889
diff changeset
    27
    } 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
    28
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    29
typedef uint8_t Byte;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    30
typedef int8_t ShortInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    31
typedef uint16_t Word;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    32
typedef int16_t SmallInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    33
typedef uint32_t LongWord;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    34
typedef int32_t LongInt;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    35
typedef uint64_t QWord;
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    36
typedef int64_t Int64;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    37
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    38
typedef LongInt Integer;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    39
typedef float extended;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    40
typedef float real;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    41
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    42
typedef bool boolean;
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
    43
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
    44
typedef void * pointer;
6878
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    45
typedef Byte * PByte;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    46
typedef char * PChar;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    47
typedef LongInt * PLongInt;
0af34406b83d Improve rendering of function types, arrays, and more
unc0rr
parents: 6875
diff changeset
    48
typedef Integer * PInteger;
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
    49
6971
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    50
#ifdef __GNUG__
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    51
#define NULL __null
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    52
#else   /* G++ */
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    53
/* shield NULL definition for non-gnu parsers */
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    54
#ifndef __cplusplus
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    55
#define NULL ((void *)0)
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    56
#else
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    57
#define NULL 0
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    58
#endif  /* __cplusplus */
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
diff changeset
    59
#endif  /* G++ */
b7b38e051b5f add NULL definition and align types to their correct bitwidth
koda
parents: 6967
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
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    64
#define dispose(a) __dispose(a, sizeof(*(a)))
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    65
void __dispose(pointer p, int size);
6894
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    66
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    67
#define FillChar(a, b, c) __FillChar(&(a), b, c)
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    68
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    69
void __FillChar(pointer p, int size, char fill);
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    70
string255 _strconcat(string255 a, string255 b);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    71
string255 _strappend(string255 s, char c);
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    72
string255 _strprepend(char c, string255 s);
6923
d2405a6a86f5 uCommands compiles
unc0rr
parents: 6922
diff changeset
    73
bool _strcompare(string255 a, string255 b);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    74
char * _pchar(string255 s);
6894
555a8d8db228 Some more progress with pas2c
unc0rr
parents: 6891
diff changeset
    75
6895
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    76
int Length(string255 a);
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    77
string255 copy(string255 a, int s, int l);
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    78
string255 delete(string255 a, int s, int l);
31def088a870 Many small improvements to pas2c
unc0rr
parents: 6894
diff changeset
    79
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
    80
#define STRINIT(a) {.len = sizeof(a) - 1, .str = a}
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    81
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    82
typedef int file;
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    83
extern int FileMode;
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    84
extern int IOResult;
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    85
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
    86
#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
    87
void assign_(int * f, string255 fileName);
6898
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    88
void reset(int f, int size);
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    89
#define BlockRead(a, b, c, d) BlockRead_(a, &(b), c, &(d))
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    90
void BlockRead_(int f, void * p, int size, int * sizeRead);
344b0dbd9690 - Remove support for variables in command handlers
unc0rr
parents: 6896
diff changeset
    91
void close(int f);