Menu

[r246]: / LIBHDR.MPL  Maximize  Restore  History

Download this file

76 lines (57 with data), 2.2 kB

##LIBSTR

CIS=.FINP.
COS=.FOUT.

FINDINPUT=.NIL. FINDOUTPUT=.NIL. ENDSTREAM=.NIL. [
  .STREAMS=%.FINP.
  NEWSTREAM(;F)[F=.FMIN.;F<=.FMAX.@==.STREAMS%F?=F]
::ENDSTREAM(F)F?[.STREAMS%F=0;.FEND.(F)]
::FINDINPUT(FN;F)(F=NEWSTREAM())?.FOLD.(F,FN)?.STREAMS%F=F
::FINDOUTPUT(FN;F)(F=NEWSTREAM())?.FNEW.(F,FN)?.STREAMS%F=F
]

ENDOFSTREAM(F).FEOF.(F)
SELECTINPUT (F;R)F?[R=CIS;CIS=F;R]
SELECTOUTPUT(F;R)F?[R=COS;COS=F;R]
ENDREAD()ENDSTREAM(CIS)
ENDWRITE()ENDSTREAM(COS)

GETBYTE(P,I)P%I
PUTBYTE(P,I,V)P%I=V

RDCH()  VAL.=.FRDC.(CIS)
WRCH(C) VAL.=.FWRC.(COS,C)

NEWLINE()WRCH('*N')

READS(S)==ENDOFSTREAM(CIS)?[%S=0;@[S%(%S+=1)=RDCH();==(?-1||?'*N')];%S-=1;S]

READN(;SUM,NEG) [
  SUM=NEG=0;@[RDCH();?'*S'||?'*T'||?'*N'];(NEG=?'-')||?'+'?RDCH();
  VAL.>='0'&&VAL.<='9'@[SUM=SUM*10+VAL.-'0';RDCH()];NEG?-SUM:SUM
]

WRITES(S)     .FWRS.(COS,S) // [E=S+%S;S<E@WRCH(%++S)]
WRITET(S,W)   [WRITES(S);W-=%S;>W--@WRCH('*S')]
WRITEBIN(I,W) [>--W?WRITEBIN(I>>1,W);WRCH((I&1)+'0')]
WRITEOCT(I,W) [>--W?WRITEOCT(I>>3,W);WRCH((I&7)+'0')]
WRITEHEX(I,W) [>--W?WRITEHEX(I>>4,W);WRCH("0123456789ABCDEF"%((I&15)+1))]

WRITED(I,W;S%16)[.SOFI.(S$,I,0);W-=%S$;>W--@WRCH('*S');WRITES(S$)]

/*
WRITED(N,D;T%10,I,J,K) [
  K=<N?[--D;-N],N;I=0;@[T$%I=K/$10+'0';++I;K/=10];
  J=I+1;J<=D@[WRCH('*S');++J];<N?WRCH('-');
  J=I-1;>=J@[WRCH(T$%J);--J]]
*/

WRITEN(I)WRITED(I,0)
WRITEU(I,W;J)[(J=(>>I&.INT.MAX.)/5)?[WRITED(J,W-1);W=1];WRITED(I-J*10,W)]

STR2NUMB(S;A,I,DIG) [
  A=I=0;++I<=%S@[DIG=S%I-'0';(>=DIG)&&(DIG<=9)?A=A*10+DIG];
  S%1=='-'?-A:A]

DECVAL(C)C-(C>=97?87:C>=65?55: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,P,A,E) [P=ARGS$;E=S+%S;
  S<E@(VAL.=%++S)=='%'?[VAL.=CAPITALCH(%++S);A=!P++;
    ?'S'?WRITES(A):?'N'?WRITEN(A):?'C'?WRCH(A):
    ?'I'?WRITED  (A,DECVAL(%++S)):?'U'?WRITEU  (A,DECVAL(%++S)):
    ?'B'?WRITEBIN(A,DECVAL(%++S)):?'O'?WRITEOCT(A,DECVAL(%++S)):
    ?'X'?WRITEHEX(A,DECVAL(%++S)):?'T'?WRITET  (A,DECVAL(%++S)):
    [WRCH(VAL.);!P--]]:WRCH(VAL.)]

GETVEC(N)VECNEW(N+1)
FREEVEC(V)VECEND(V)

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.