1
2
Yiin prieš 9 metus
@EisvetArt malonu matyti, kad vis dar lauki soc'o. Visgi į 2mėn senumo temą niekas netyčia neateina ir neparašo :)
1
Yiin prieš 9 metus
forward _SafeReturnCode_(dest[], src[], bytes);
public _SafeReturnCode_(dest[], src[], bytes)
{
memcpy(dest, src, 0, bytes, bytes);
}
stock SafeReturnCode(const src[], const bytes = sizeof (src))
{
// Push the lengths for the memcpy (needs "pri", so done first).
#emit LOAD.S.pri bytes
#emit SHL.C.pri 2
#emit PUSH.pri
#emit PUSH.pri
// Get the parameter count.
#emit LOAD.S.pri 0
#emit MOVE.alt
#emit ADD.C 8
#emit LOAD.I
// Get the desination pointer.
#emit ADD
#emit ADD.C 12
#emit LOAD.I
// Do a raw memcpy (pointer to pointer, not array to array).
#emit PUSH.C 0
#emit PUSH.S src
#emit PUSH.pri
#emit PUSH.C 20
#emit SYSREQ.C memcpy
// Return to the caller's caller.
#emit MOVE.pri
#emit SCTRL 5
#emit SCTRL 4
#emit RETN
// Compiler cleanup.
return 0;
}
#define safe_return%0; return SafeReturnCode(%0),(%0);
stock divide(string[], divider[], bool:cutend, ...) {
static
args,
tmp[512],
buffer[1024],
lastpos;
args = numargs();
lastpos = 0;
tmp[0] = EOS;
buffer[0] = EOS;
for(new arg = 3; arg < args; arg++) {
strmid(tmp, string, lastpos, lastpos+getarg(arg));
lastpos += getarg(arg);
if(arg != args-1) strcat(tmp, divider);
strcat(buffer, tmp);
}
if(lastpos < strlen(string) && !cutend) {
strmid(tmp, string, lastpos, strlen(string));
strcat(tmp, divider);
strcat(buffer, tmp);
}
printf("Buffer: %s", buffer);
safe_return buffer;
}
0
Yiin prieš 9 metus
Pawn kompileris biškį kitaip supranta ir apskaičiuoja Float: reikšmes, todėl jeigu nori tikslumo, viską reikia daryti per kintamuosius.
gMoney(0.05); // blogai
new Float:var = 0.05;
gMoney(var); // gerai