MPL Bytecode Compiler Code
Micro Programming Language - A Portable Language for Micro Computers
Status: Beta
Brought to you by:
buzzphp
/* ALIGN COLUMNS - MPL VERSION HTTPS://ROSETTACODE.ORG/WIKI/ALIGN_COLUMNS */ ##LIBHDR .0 = "GIVEN$A$TEXT$FILE$OF$MANY$LINES,$WHERE$FIELDS$WITHIN$A$LINE$" .1 = "ARE$DELINEATED$BY$A$SINGLE$'DOLLAR'$CHARACTER,$WRITE$A$PROGRAM" .2 = "THAT$ALIGNS$EACH$COLUMN$OF$FIELDS$BY$ENSURING$THAT$WORDS$IN$EACH$" .3 = "COLUMN$ARE$SEPARATED$BY$AT$LEAST$ONE$SPACE." .4 = "FURTHER,$ALLOW$FOR$EACH$WORD$IN$A$COLUMN$TO$BE$EITHER$LEFT$" .5 = "JUSTIFIED,$RIGHT$JUSTIFIED,$OR$CENTER$JUSTIFIED$WITHIN$ITS$COLUMN." .LINES = .0,.1,.2,.3,.4,.5,.NIL MAXLEN = 0 PAD(L) [ >L-- @ WRCH('*S') ] OUT(S,SS,L) [ >L-- @ WRCH(S%SS++) ] INIT(S,SS,L) [ MAXLEN<L ? MAXLEN=L ] DORT(S,SS,L) [ PAD(MAXLEN-L); OUT(S,SS,L); WRCH('|') ] DOLT(S,SS,L) [ OUT(S,SS,L); PAD(MAXLEN-L); WRCH('|') ] DOCT(S,SS,L;X) [ X=MAXLEN-L; PAD(>>X); OUT(S,SS,L); PAD(X->>X); WRCH('|') ] NEXT(S,I) [ I<=%S && S%I<>'$' @ ++I; I ] LINE(FN,S;I,J) [ I=1; I<=%S @ [ J=NEXT(S,I); FN(S,I,J-I); I=J+1 ] ] SCAN(FN;S,I) [ I=0; (S=.LINES!I++) @ [ LINE(FN,S); FN<>INIT ? NEWLINE() ]; NEWLINE() ] .() [ SCAN(INIT); SCAN(DOLT); SCAN(DORT); SCAN(DOCT); 0 ]