MPL Bytecode Compiler Code
Micro Programming Language - A Portable Language for Micro Computers
Status: Beta
Brought to you by:
buzzphp
+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)