19.05.2013, 17:55
Can be improved, just pass the address to strcat directly instead of getting it first.
pawn Код:
stock implode(const szDelim[], szBuf[], const iSize, ...) {
static
iStart,
iEnd
;
#emit ADDR.PRI iSize
#emit ADD.C 4
#emit STOR.PRI iStart
iEnd = iStart + ((numargs() - 3) << 2);
while(iStart != iEnd) {
#emit LOAD.PRI iStart
#emit LOAD.I
#emit PUSH.S iSize
#emit PUSH.PRI
#emit PUSH.ADR szBuf
#emit PUSH.C 12
#emit SYSREQ.C strcat
#emit STACK 16
iStart += 4;
if(iStart < iEnd) {
strcat(szBuf, szDelim, iSize);
}
}
}
pawn Код:
new result[70];
implode(" ", result, sizeof(result), "This", "is", "Sparta!");
print(result);