[go: up one dir, main page]

Menu

[r39]: / MSTR.MPL  Maximize  Restore  History

Download this file

37 lines (27 with data), 1.1 kB

+MMEM+MCHR

STRLEN(S)   %S
STRSET(S,L) [%S=L<0?0,L>127?127,L;S]
STRCPY(D,S) MEMCPY(D,S,%S+1)
STRREV(S) MEMREV(S+1,%S)-1
STRDUP(S) STRCPY(MALLOC(%S+1),S)
STRUPR(D,S) MEMMOD(D+1,S+1,%D=%S,TOUPPER)-1
STRLWR(D,S) MEMMOD(D+1,S+1,%D=%S,TOLOWER)-1

STRMID(D,S,SS,L) MEMMOV(D+1,S+SS,%STRSET(D,.MIN(L,%S-SS+1)))-1
STRDEL(D,DD,L)   [MEMMOV(D+DD,D+DD+L,%STRSET(D,%D-L)-DD+1);D]

STRINS(D,DD,S) [
  MEMMOV(D+DD+%S,D+DD,%D-DD+1);
  MEMCPY(D+DD,S+1,%S);
  STRSET(D,%D+%S)
]

STRADD(S,C) S%(%S+=1)=C
STRCAT(D,S) STRINS(D,%D+1,S)

ITOA(I,S;N) [N=I<0?I=-I;%S=0;@[S%(%S+=1)=I#10+'0';I/=10];N?S%(%S+=1)='-';STRREV(S)]

VSPRINTF(S,F,P;FF,C,N%10) [
  FF=%S=0;FF<%F@(C=F%++FF)!='%'?STRADD(S,C),[C=TOUPPER(F%++FF);
    C=='S'?STRCAT(S,!P),C=='C'?STRADD(S,!P),C=='I'::C=='D'?STRCAT(S,ITOA(!P,N$)),
    [STRADD(S,C);P-=.INT];P+=.INT];S]

SPRINTF(STR,FMT;ARGS!10) VSPRINTF(STR,FMT,ARGS$)

STRWHILE(S,SS,IS) [SS<=%S?IS(S%SS)@++SS;SS]
STRUNTIL(S,SS,IS) [SS<=%S?IS(S%SS)==0@++SS;SS]
STRTOK(D,S,SS,IS;S1,S2) [S2=STRUNTIL(S,S1=STRWHILE(S,SS,IS),IS);STRMID(D,S,S1,S2-S1);S2]
STRARG(D,S,SS) STRTOK(D,S,SS,ISSPACE)