MPL Bytecode Compiler Code
Micro Programming Language - A Portable Language for Micro Computers
Status: Beta
Brought to you by:
buzzphp
GETBYTE(P,I) P%I
PUTBYTE(P,I,V) P%I=V
CIS=.FINP COS=.FOUT
SELECTINPUT(F) CIS=F
SELECTOUTPUT(F) COS=F
WRCH(C) .FWRITEC(COS, C)
RDCH( ) .FREADC(CIS)
NEWLINE() WRCH('*N')
READS(S) [%S=0;@[S%(%S+=1)=RDCH();S%%S&&S%%S!='*N'];%S-=1]
WRITES(S;E) [E=S+%S;S<E@WRCH(%++S)]
WRITET(S,D) [WRITES(S);D=D-%S;(D-=1)>=0@WRCH('*S')]
WRITEBIN(N,D) [D>1?WRITEBIN(N>>1,D-1);WRCH((N&1)+'0')]
WRITEOCT(N,D) [D>1?WRITEOCT(N>>3,D-1);WRCH((N&7)+'0')]
WRITEHEX(N,D) [D>1?WRITEHEX(N>>4,D-1);WRCH("0123456789ABCDEF"%((N&15)+1))]
WRITED(N,D;T%10,I,J,K) [
K=N<0?[--D;-N],N;I=0;@[T$%I=K#10+'0';++I;K/=10];
J=I+1;J<=D@[WRCH('*S');++J];N<0?WRCH('-');
J=I-1;J>=0@[WRCH(T$%J);--J]
]
WRITEN(N) WRITED(N,0)
WRITEU(N,D;M) [(M=(N>>1)/5)?[WRITED(M,D-1);D=1];WRITED(N-M*10,D)]
STR2NUMB(S;A,I,DIG) [
A=I=0;++I<=%S@[DIG=S%I-'0';(DIG>=0)&&(DIG<=9)?A=A*10+DIG];
S%1=='-'?-A,A
]
DECVAL(C) C>=97?C-87,C>=65?C-55,C-48
CAPITALCH(C) C-(C>=97?C<=122?32)
COMPCH(C1,C2) CAPITALCH(C1)-CAPITALCH(C2)
COMPSTRING(S1,S2;L,I,R) [
L=%S1<%S2?%S1,%S2;I=0;++I<=L@(R=COMPCH(S1%I,S2%I))?=R;
%S1-%S2
]
WRITEF(S;ARGS!10,T,E,C) [
T=ARGS$;E=S+%S;S<E@(C=%++S)=='%'?[
C=CAPITALCH(%++S);C=='S'?WRITES(!T),C=='N'?WRITEN(!T),C=='C'?WRCH(!T),
C=='I'?WRITED (!T,DECVAL(%++S)),C=='U'?WRITEU (!T,DECVAL(%++S)),
C=='B'?WRITEBIN(!T,DECVAL(%++S)),C=='O'?WRITEOCT(!T,DECVAL(%++S)),
C=='X'?WRITEHEX(!T,DECVAL(%++S)),C=='T'?WRITET (!T,DECVAL(%++S)),
[WRCH(C);T-=.INT];T+=.INT],WRCH(C)
]