project_files/hwc/rtl/system.c
author Wuzzy <almikes@aol.com>
Sat, 30 Sep 2017 23:52:08 +0200
changeset 12627 07fdda8c13a2
parent 11660 e15eb10f1703
child 13885 5f819b90d479
permissions -rw-r--r--
TrophyRace: Fix game never eliminating any hogs after a hog skipped or ran out of time Warning: This commit _might_ invalidate past records, but I'm not sure if this is actually the case. Note that only the eliminiation part of the script is touched, not the actual race logic. Even if records are actually broken by this, I and sheepluva have decided that it's more imporant to fix this very, VERY stupid and old bug than to preserve records.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     1
#include "system.h"
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     2
#include <string.h>
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     3
#include <stdio.h>
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     4
#include <stdlib.h>
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     5
#include <wchar.h>
11660
e15eb10f1703 Work around emscripten not finding math.h
koda
parents: 10910
diff changeset
     6
#include "pmath.h"
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
     7
8053
koda
parents: 8047
diff changeset
     8
#ifndef M_PI
koda
parents: 8047
diff changeset
     9
// some math.h do not have M_PI macros
koda
parents: 8047
diff changeset
    10
# define M_PI    3.14159265358979323846  /* pi */
koda
parents: 8047
diff changeset
    11
# define M_PI_2  1.57079632679489661923  /* pi/2 */
koda
parents: 8047
diff changeset
    12
# define M_PI_4  0.78539816339744830962  /* pi/4 */
koda
parents: 8047
diff changeset
    13
# define M_PIl   3.1415926535897932384626433832795029L  /* pi */
koda
parents: 8047
diff changeset
    14
# define M_PI_2l 1.5707963267948966192313216916397514L  /* pi/2 */
koda
parents: 8047
diff changeset
    15
# define M_PI_4l 0.7853981633974483096156608458198757L  /* pi/4 */
koda
parents: 8047
diff changeset
    16
#endif
koda
parents: 8047
diff changeset
    17
koda
parents: 8047
diff changeset
    18
double pi = M_PI;
koda
parents: 8047
diff changeset
    19
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    20
int paramCount;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    21
string255 params[MAX_PARAMS];
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    22
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    23
string255 fpcrtl_copy(string255 s, Integer index, Integer count) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    24
    string255 result = STRINIT("");
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    25
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    26
    if (count < 1) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    27
        return result;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    28
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    29
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    30
    if (index < 1) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    31
        index = 1;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    32
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    33
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    34
    if (index > s.len) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    35
        return result;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    36
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    37
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    38
    if (index + count > s.len + 1) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    39
        count = s.len + 1 - index;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    40
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    41
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    42
    memcpy(result.str, s.str + index - 1, count);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    43
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    44
    result.len = count;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    45
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    46
    return result;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    47
}
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    48
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    49
astring fpcrtl_copyA(astring s, Integer index, Integer count) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    50
    astring result;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    51
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    52
    result.len = 0;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    53
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    54
    if (count < 1) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    55
        return result;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    56
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    57
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    58
    if (index < 1) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    59
        index = 1;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    60
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    61
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    62
    if (index > s.len) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    63
        return result;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    64
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    65
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    66
    if (index + count > s.len + 1) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    67
        count = s.len + 1 - index;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    68
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    69
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
    70
    memcpy(result.s + 1, s.s + index, count);
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
    71
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    72
    result.len = count;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    73
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    74
    return result;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    75
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
    76
10838
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    77
void fpcrtl_insert__vars(string255 *src, string255 *dst, SizeInt index) {
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    78
    int num_insert;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    79
    int num_shift;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    80
    int num_preshift;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    81
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    82
    // nothing to do if empty string is inserted or index invalid
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    83
    if ((src->len == 0) || (index < 1) || (index > 255)) {
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    84
        return;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    85
    }
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    86
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    87
    num_insert = src->len;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    88
    // number of chars from start of destination string to end of insertion
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    89
    num_preshift = index - 1 + num_insert;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    90
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    91
    // don't overflow on insert
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    92
    if (num_preshift > 255) {
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    93
        num_insert = 255 - (index - 1);
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    94
        num_shift = 0;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    95
    }
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    96
    // shift trailing chars
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    97
    else {
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    98
        // number of bytes to be shifted
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
    99
        num_shift = dst->len - (index - 1);
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   100
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   101
        if (num_shift > 0) {
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   102
            // don't overflow when shifting
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   103
            if (num_shift + num_preshift > 255)
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   104
                num_shift = 255 - num_preshift;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   105
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   106
            // time to move some bytes!
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   107
            memmove(dst->str + num_preshift, dst->str + index - 1, num_shift);
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   108
        }
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   109
    }
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   110
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   111
    // actual byte insertion
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   112
    memmove(dst->str + index - 1, src->str, num_insert);
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   113
    // store new length
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   114
    dst->len = num_shift + num_preshift;
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   115
}
2abe883c9c21 teach pas2c how to insert() shortstrings
sheepluva
parents: 10625
diff changeset
   116
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   117
void __attribute__((overloadable)) fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count) {
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   118
    // number of chars to be move
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   119
    int num_move;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   120
    int new_length;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   121
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   122
    if (index < 1) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   123
        // in fpc, if index < 1, the string won't be modified
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   124
        return;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   125
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   126
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   127
    if(index > s->len){
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   128
        return;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   129
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   130
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   131
    if (count > s->len - index + 1) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   132
        s->len = index - 1;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   133
        return;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   134
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   135
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   136
    num_move = s->len - index + 1 - count;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   137
    new_length = s->len - count;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   138
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   139
    memmove(s->str + index - 1, s->str + index - 1 + count, num_move);
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   140
    s->str[new_length] = 0;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   141
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   142
    s->len = new_length;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   143
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   144
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   145
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   146
void __attribute__((overloadable)) fpcrtl_delete__vars(astring *s, SizeInt index, SizeInt count) {
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   147
    // number of chars to be move
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   148
    int num_move;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   149
    int new_length;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   150
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   151
    if (index < 1) {
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   152
        // in fpc, if index < 1, the string won't be modified
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   153
        return;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   154
    }
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   155
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   156
    if(index > s->len){
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   157
        return;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   158
    }
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   159
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   160
    if (count > s->len - index + 1) {
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   161
        s->len = index - 1;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   162
        return;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   163
    }
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   164
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   165
    num_move = s->len - index + 1 - count;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   166
    new_length = s->len - count;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   167
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   168
    memmove(s->s + index, s->s + index + count, num_move);
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   169
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   170
    s->len = new_length;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   171
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   172
}
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   173
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   174
string255 fpcrtl_floatToStr(double n) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   175
    string255 t;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   176
    sprintf(t.str, "%f", n);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   177
    t.len = strlen(t.str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   178
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   179
    return t;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   180
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   181
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   182
void fpcrtl_move__vars(void *src, void *dst, SizeInt count) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   183
    memmove(dst, src, count);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   184
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   185
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   186
Integer __attribute__((overloadable)) fpcrtl_pos(Char c, string255 str) {
10134
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   187
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   188
    unsigned char* p;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   189
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   190
    if (str.len == 0) {
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   191
        return 0;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   192
    }
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   193
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   194
    FIX_STRING(str);
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   195
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   196
    p = strchr(str.str, c);
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   197
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   198
    if (p == NULL) {
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   199
        return 0;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   200
    }
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   201
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   202
    return p - (unsigned char*)&str.s;
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   203
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   204
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   205
Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, string255 str) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   206
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   207
    unsigned char* p;
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   208
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   209
    if (str.len == 0) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   210
        return 0;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   211
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   212
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   213
    if (substr.len == 0) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   214
        return 0;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   215
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   216
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   217
    FIX_STRING(substr);
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   218
    FIX_STRING(str);
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   219
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   220
    p = strstr(str.str, substr.str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   221
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   222
    if (p == NULL) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   223
        return 0;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   224
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   225
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   226
    return p - (unsigned char*)&str.s;
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   227
}
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   228
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   229
Integer __attribute__((overloadable)) fpcrtl_pos(Char c, astring str) {
10134
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   230
    unsigned char* p;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   231
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   232
    if (str.len == 0) {
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   233
        return 0;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   234
    }
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   235
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   236
    p = strchr(str.s + 1, c);
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   237
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   238
    if (p == NULL) {
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   239
        return 0;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   240
    }
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   241
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   242
    return p - (unsigned char*)&str.s;
81d733899e06 Use strchr instead of strstr with specially constructed string255 struct (not tested)
unc0rr
parents: 10131
diff changeset
   243
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   244
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   245
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   246
Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, astring str) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   247
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   248
    unsigned char* p;
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   249
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   250
    if (str.len == 0) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   251
        return 0;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   252
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   253
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   254
    if (substr.len == 0) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   255
        return 0;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   256
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   257
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   258
    FIX_STRING(substr);
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   259
    str.s[str.len] = 0;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   260
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   261
    p = strstr(str.s + 1, substr.str);
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   262
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   263
    if (p == NULL) {
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   264
        return 0;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   265
    }
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   266
10131
4b4a043111f4 - pas2c recognizes typecasts in initialization expressions
unc0rr
parents: 10128
diff changeset
   267
    return p - (unsigned char *)&str.s;
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   268
}
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   269
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   270
Integer fpcrtl_length(string255 s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   271
    return s.len;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   272
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   273
10128
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   274
Integer fpcrtl_lengthA(astring s)
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   275
{
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   276
    return s.len;
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   277
}
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   278
0f6878b5395a Implement needed rtl functions
unc0rr
parents: 8850
diff changeset
   279
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   280
string255 fpcrtl_lowerCase(string255 s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   281
    int i;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   282
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   283
    for (i = 0; i < s.len; i++) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   284
        if (s.str[i] >= 'A' && s.str[i] <= 'Z') {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   285
            s.str[i] += 'a' - 'A';
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   286
        }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   287
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   288
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   289
    return s;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   290
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   291
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   292
void fpcrtl_fillChar__vars(void *x, SizeInt count, Byte value) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   293
    memset(x, value, count);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   294
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   295
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   296
void fpcrtl_new__vars(void **p, int size) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   297
    *p = malloc(size);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   298
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   299
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   300
Integer fpcrtl_trunc(extended n) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   301
    return (int) n;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   302
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   303
10910
df11dea74701 Add ceil() function to fpcrtl of pas2c
unc0rr
parents: 10840
diff changeset
   304
Integer fpcrtl_ceil(extended n) {
df11dea74701 Add ceil() function to fpcrtl of pas2c
unc0rr
parents: 10840
diff changeset
   305
    return (int) (ceil(n));
df11dea74701 Add ceil() function to fpcrtl of pas2c
unc0rr
parents: 10840
diff changeset
   306
}
df11dea74701 Add ceil() function to fpcrtl of pas2c
unc0rr
parents: 10840
diff changeset
   307
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   308
LongInt str_to_int(char *src)
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   309
{
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   310
    int i;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   311
    int len = strlen(src);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   312
    char *end;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   313
    for(i = 0; i < len; i++)
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   314
    {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   315
        if(src[i] == '$'){
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   316
            // hex
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   317
            return strtol(src + i + 1, &end, 16);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   318
        }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   319
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   320
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   321
    // decimal
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   322
    return atoi(src);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   323
}
8850
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   324
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   325
void __attribute__((overloadable)) fpcrtl_val__vars(string255 s, LongInt *a)
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   326
{
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   327
    FIX_STRING(s);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   328
    *a = str_to_int(s.str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   329
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   330
8850
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   331
void __attribute__((overloadable)) fpcrtl_val__vars(string255 s, Byte *a)
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   332
{
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   333
    FIX_STRING(s);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   334
    *a = str_to_int(s.str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   335
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   336
8850
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   337
void __attribute__((overloadable)) fpcrtl_val__vars(string255 s, LongWord *a)
ae8a957c69fd engine to c now compiles with some manual intervention (as of bug 596)
koda
parents: 8053
diff changeset
   338
{
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   339
    FIX_STRING(s);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   340
    *a = str_to_int(s.str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   341
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   342
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   343
LongInt fpcrtl_random(LongInt l) {
10625
125e120165aa flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents: 10134
diff changeset
   344
    // random(0) is undefined in docs but effectively returns 0 in free pascal
125e120165aa flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents: 10134
diff changeset
   345
    if (l == 0) {
10840
6d1986411733 add newline after warning
sheepluva
parents: 10838
diff changeset
   346
        printf("WARNING: random(0) called!\n");
10625
125e120165aa flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents: 10134
diff changeset
   347
        return 0;
125e120165aa flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents: 10134
diff changeset
   348
    }
7983
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   349
    return (LongInt) (rand() / (double) RAND_MAX * l);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   350
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   351
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   352
void __attribute__((overloadable)) fpcrtl_str__vars(float x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   353
    sprintf(s->str, "%f", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   354
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   355
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   356
void __attribute__((overloadable)) fpcrtl_str__vars(double x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   357
    sprintf(s->str, "%f", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   358
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   359
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   360
void __attribute__((overloadable)) fpcrtl_str__vars(uint8_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   361
    sprintf(s->str, "%u", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   362
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   363
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   364
void __attribute__((overloadable)) fpcrtl_str__vars(int8_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   365
    sprintf(s->str, "%d", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   366
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   367
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   368
void __attribute__((overloadable)) fpcrtl_str__vars(uint16_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   369
    sprintf(s->str, "%u", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   370
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   371
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   372
void __attribute__((overloadable)) fpcrtl_str__vars(int16_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   373
    sprintf(s->str, "%d", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   374
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   375
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   376
void __attribute__((overloadable)) fpcrtl_str__vars(uint32_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   377
    sprintf(s->str, "%u", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   378
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   379
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   380
void __attribute__((overloadable)) fpcrtl_str__vars(int32_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   381
    sprintf(s->str, "%d", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   382
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   383
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   384
void __attribute__((overloadable)) fpcrtl_str__vars(uint64_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   385
    sprintf(s->str, "%llu", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   386
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   387
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   388
void __attribute__((overloadable)) fpcrtl_str__vars(int64_t x, string255 *s) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   389
    sprintf(s->str, "%lld", x);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   390
    s->len = strlen(s->str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   391
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   392
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   393
/*
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   394
 * XXX No protection currently!
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   395
 */
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   396
void fpcrtl_interlockedIncrement__vars(int *i) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   397
    (*i)++;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   398
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   399
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   400
void fpcrtl_interlockedDecrement__vars(int *i) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   401
    (*i)--;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   402
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   403
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   404
/*
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   405
 * This function should be called when entering main
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   406
 */
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   407
void fpcrtl_init(int argc, char** argv) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   408
    int i;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   409
    paramCount = argc;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   410
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   411
    printf("ARGC = %d\n", paramCount);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   412
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   413
    for (i = 0; i < argc; i++) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   414
        if (strlen(argv[i]) > 255) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   415
            assert(0);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   416
        }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   417
        strcpy(params[i].str, argv[i]);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   418
        params[i].len = strlen(params[i].str);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   419
    }
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   420
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   421
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   422
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   423
int fpcrtl_paramCount() {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   424
    return paramCount - 1; // ignore the first one
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   425
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   426
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   427
string255 fpcrtl_paramStr(int i) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   428
    return params[i];
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   429
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   430
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   431
int fpcrtl_UTF8ToUnicode(PWideChar dest, PChar src, SizeInt maxLen) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   432
    //return swprintf(dest, maxLen, L"%hs", "src"); //doesn't work in emscripten
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   433
    return 0;
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   434
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   435
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   436
uint32_t __attribute__((overloadable)) fpcrtl_lo(uint64_t i) {
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   437
    return (i & 0xFFFFFFFF);
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   438
}
02f36c3e7f6c add xymeng's rtl port
koda
parents:
diff changeset
   439