summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn <@>2023-12-16 03:45:25 +0200
committern <@>2023-12-16 03:45:25 +0200
commite0d764625589ea5424b853476df2091bb2454712 (patch)
tree3a798b557a42a804b61396feeb145eed897dbb60
parent745bf7ad4ccd14d0f2a38507686c9c637b0d4f62 (diff)
Q -> S
-rw-r--r--0.c34
-rw-r--r--a.c14
-rw-r--r--a.h26
-rw-r--r--b.c2
-rw-r--r--c.c4
-rw-r--r--e.c12
-rw-r--r--h.c2
-rw-r--r--i.c14
-rw-r--r--j.c6
-rw-r--r--k.c8
-rw-r--r--k.h6
-rw-r--r--m.c52
-rw-r--r--notes.txt6
-rw-r--r--p.c46
-rw-r--r--s.c8
-rw-r--r--vim-c/syntax/n.vim2
-rw-r--r--w.c2
17 files changed, 126 insertions, 118 deletions
diff --git a/0.c b/0.c
index 53440dfb..468d8cd5 100644
--- a/0.c
+++ b/0.c
@@ -18,7 +18,7 @@ I pg=4096;//pagesize
//__builtin_ia32_ldmxcsr(__builtin_ia32_stmxcsr()|1<<6|1<<15); //daz,ftz
#ifndef shared
#ifndef ldstatic
- I main(I n,Q*a)_(kinit();kargs(n,a);I r=0;I(n<2,repl())J(!bsl(a[1]),r=1;epr(0))Q(bsm(""));r)
+ I main(I n,S*a)_(kinit();kargs(n,a);I r=0;I(n<2,repl())J(!bsl(a[1]),r=1;epr(0))Q(bsm(""));r)
#endif
#endif
@@ -30,7 +30,7 @@ I pg=4096;//pagesize
#include"o/w/fs.h"
};Z ST{C i;N o;}d[8]={{.i=1},{.i=1},{.i=1}};Z CO I ns=L(s),nd=L(d);//d:fd table
#define FI P((U)f>=nd||!d[f].i,EBADF)I i=d[f].i;//validate fd "f" and get inode "i"
- I open(Q p,I v,...)_(I m=SL(p);P(m>=SZ s[0].p,ENAMETOOLONG)I i=0;W(i<ns&&strcmp(s[i].p,p),i++)
+ I open(S p,I v,...)_(I m=SL(p);P(m>=SZ s[0].p,ENAMETOOLONG)I i=0;W(i<ns&&strcmp(s[i].p,p),i++)
I(i>=ns,P(O_CREAT&~v,ENOENT)i=0;W(i<ns&&s[i].a,i++)P(i>=ns,ENOSPC)s[i].a="";s[i].n=0;MC(s[i].p,p,m))
I f=0;W(f<nd&&d[f].i,f++)P(f>=nd,EMFILE)d[f].i=i;d[f].o=0;f)
I close(I f)_(FI d[f].i=0;0)
@@ -44,33 +44,41 @@ I pg=4096;//pagesize
I munmap(I f,I n)_(0)
I gettimeofday(ST timeval*a,V*b)_(js_time((V*)&a->tv_sec,(V*)&a->tv_usec);0)
V exit(I v){js_exit(v);}
- I dup2(I f,I v)_(-1)I execve(Q p,C*CO*a,C*CO*e)_(-1)I fork()_(-1)I socket(I i,I j,I k)_(-1)
- I setsockopt(I f,I l,I s,CO V*v,socklen_t n)_(-1)I connect(I f,CO ST sockaddr*s,socklen_t n)_(-1)I chdir(Q p)_(-1)
+ I dup2(I f,I v)_(-1)
+ I execve(S p,C*CO*a,C*CO*e)_(-1)
+ I fork()_(-1)
+ I socket(I i,I j,I k)_(-1)
+ I setsockopt(I f,I l,I s,CO V*v,socklen_t n)_(-1)
+ I connect(I f,CO ST sockaddr*s,socklen_t n)_(-1)
+ I chdir(S p)_(-1)
I ftruncate(I f,off_t o)_(-1)
I wait4(I i,I*l,I o,ST rusage*u)_(-1)
long sysconf(I i)_(i==_SC_PAGESIZE?4096:-1)
- V*dlopen(Q s,I i)_((V*)0)V*dlsym(V*p,Q s)_((V*)0)I dlclose(V*p)_(0)C*dlerror()_("wasm")
+ V*dlopen(S s,I i)_((V*)0)
+ V*dlsym(V*p,S s)_((V*)0)
+ I dlclose(V*p)_(0)
+ C*dlerror()_("wasm")
#include<dirent.h>
DIR*fdopendir(I f)_((V*)0)
ST dirent*readdir(DIR*x)_((V*)0)
I closedir(DIR*x)_(0)
- V*memcpy (V*x,CO V*y,N n)_(C*p=x ;Q q=y ;i(n,*p++=*q++)x)
- V*memrcpy(V*x,CO V*y,N n)_(C*p=x+n;Q q=y+n;i(n,*--p=*--q)x)
+ V*memcpy (V*x,CO V*y,N n)_(C*p=x ;S q=y ;i(n,*p++=*q++)x)
+ V*memrcpy(V*x,CO V*y,N n)_(C*p=x+n;S q=y+n;i(n,*--p=*--q)x)
V*memmove(V*x,CO V*y,N n)_((y<x&&x<y+n?memrcpy:memcpy)(x,y,n))
V*memset(V*x,I v,N n)_(C*p=x;i(n,*p++=v);x)
- V*memchr(CO V*x,I v,N n)_(Q s=x;i(n,P(s[i]==v,(V*)(s+i)))(V*)0)
- V*memmem(CO V*x,N m,CO V*y,N n)_(Q p=x,q=y;i((L)m-(L)n+1,P(!memcmp(p+i,q,n),(V*)(p+i)))(V*)0)
- I memcmp(CO V*x,CO V*y,N n)_(Q s=x,t=y;i(n,I v=*s++-*t++;P(v,v))0)
- N strlen(Q s)_(Q p=s;W(1,W v=~*(W*)(V*)p;v&=v>>1;v&=v>>2;v&=v>>4;v&=0x0101010101010101ll;B(v)p+=8)W(*p,p++)p-s)
+ V*memchr(CO V*x,I v,N n)_(S s=x;i(n,P(s[i]==v,(V*)(s+i)))(V*)0)
+ V*memmem(CO V*x,N m,CO V*y,N n)_(S p=x,q=y;i((L)m-(L)n+1,P(!memcmp(p+i,q,n),(V*)(p+i)))(V*)0)
+ I memcmp(CO V*x,CO V*y,N n)_(S s=x,t=y;i(n,I v=*s++-*t++;P(v,v))0)
+ N strlen(S s)_(S p=s;W(1,W v=~*(W*)(V*)p;v&=v>>1;v&=v>>2;v&=v>>4;v&=0x0101010101010101ll;B(v)p+=8)W(*p,p++)p-s)
C*strchr(CO C*s,I v)_(W(1,P(*s==v,(V*)s)P(!*s++,(V*)0))(V*)0)
C*strstr(CO C*p,CO C*q)_(memmem(p,SL(p),q,SL(q)))
- I strcmp(Q p,Q q)_(W(*p&&*p==*q,p++;q++)*p-*q)
+ I strcmp(S p,S q)_(W(*p&&*p==*q,p++;q++)*p-*q)
#else
U js_eval(C*s,U m,C*r,U n)_(0)
#endif
#if !defined(__GNU_SOURCE)
- C*strchrnul(Q s,I v)_(C*p=strchr(s,v);p?p:(V*)s+SL(s))
+ C*strchrnul(S s,I v)_(C*p=strchr(s,v);p?p:(V*)s+SL(s))
#endif
diff --git a/a.c b/a.c
index 83d26491..71bedc1e 100644
--- a/a.c
+++ b/a.c
@@ -41,11 +41,11 @@ A2(i1,/*01*/P(y==GAP||y==au,xR)
Z A3(i2,/*001*/C b=ytT||y==GAP||y==au;x=Nz(i1(x,yR));P(!b,x(x1(z)))x(l2f(dot,x,aA1(z))))
Z AX(i8,A y=*a;P(n==1,i1(x,y))P(n==2,y(_2(x,y,a[1])))a++;n--;C b=ytT||y==GAP||y==au;x=i1(x,y);P(!x,mrn(n,a);x)P(!b,x(i8(x,a,n)))x(l2f(dot,x,aV(tA,n,a))))
L iw(A x/*0*/,U w,L i)_(S4(w,_(xg),_(xh),_(xi),_(xl))0)
-Z A1(qa,A y=emp(tA);Q*p=argv;W(*p,PSH(y,aCz(*p++)))y(y1(x)))
-Z A1(qe,A y=emp(tS),z=emp(tA);Q*e=env;W(*e,Q p=*e++,q=strchrnul(p,'=');PSH(y,cS(aCm(p,q)));PSH(z,aCz(q+!!*q)))y=am(y,z);x-au?x(x1(y)):y)
+Z A1(qa,A y=emp(tA);S*p=argv;W(*p,PSH(y,aCz(*p++)))y(y1(x)))
+Z A1(qe,A y=emp(tS),z=emp(tA);S*e=env;W(*e,S p=*e++,q=strchrnul(p,'=');PSH(y,cS(aCm(p,q)));PSH(z,aCz(q+!!*q)))y=am(y,z);x-au?x(x1(y)):y)
Z A1(qx,exit(xtz?gl(x):1);0)
Z X1(qjs,RC(C b[4096];U n=js_eval(xC,xn,b,SZ b);x(0);aCn(b,n))RA(e1f(qjs,x))R_(et(x)))
-Z X1(qp,RC(x=str0(x);Q s=xC;x(pk(&s,0)))R_(et(x)))
+Z X1(qp,RC(x=str0(x);S s=xC;x(pk(&s,0)))R_(et(x)))
Z A1(qt,x(al(now())))
Z A1(qfb,P(!xtC,et(x))P(xn-8,el(x))x=rev(x);x(aV(tf,1,xV)))//float from bits
SN AX(ext,P(n-xK,er8(a,n))V*f=(V*)(x&-1ull>>16);SW(n,R(1,((A1*)f)(a[0]))R(2,((A2*)f)(a[0],a[1]))R(3,((A3*)f)(a[0],a[1],a[2]))R(4,((A4*)f)(a[0],a[1],a[2],a[3]))R_(en8(a,n)))0)
@@ -90,8 +90,8 @@ AA(d8,/*10..0*/A x=*a;
X(RsS(A*p=gp(x);I(!*p,*p=au)Ab8;*b=*p;MC(b+1,a+1,n-1<<3);*p=au;*p=_R(N(d8_(b,n))))
RU(n==3?try(x,a[1],a[2]):er(x))
R_(d8_(a,n)))0)
-SN A ki(A*p,Q s)_(*p=evs(s,0);I(!*p,die(s))PSH(cns,*p))
-A k1(A*p,Q s,A x)_(I(!*p,ki(p,s))_1(*p,x))
-A k2(A*p,Q s,A x,A y)_(I(!*p,ki(p,s))_2(*p,x,y))
-A k8(A*p,Q s,CO A*a,U n)_(I(!*p,ki(p,s))n?_8(*p,a,n):*p)
+SN A ki(A*p,S s)_(*p=evs(s,0);I(!*p,die(s))PSH(cns,*p))
+A k1(A*p,S s,A x)_(I(!*p,ki(p,s))_1(*p,x))
+A k2(A*p,S s,A x,A y)_(I(!*p,ki(p,s))_2(*p,x,y))
+A k8(A*p,S s,CO A*a,U n)_(I(!*p,ki(p,s))n?_8(*p,a,n):*p)
AA(no8,/*10..0*/en(*a))
diff --git a/a.h b/a.h
index b7a90b61..068c3efb 100644
--- a/a.h
+++ b/a.h
@@ -62,7 +62,7 @@
#define SL __builtin_strlen
#define SQ __builtin_sqrt
-TD void V;TD bool B;TD char G,C;TD char unsigned UC;TD CO C*Q;TD short H;TD unsigned short UH;TD int I;TD unsigned int U;TD long long L;TD double F;TD size_t N;
+TD void V;TD bool B;TD char G,C;TD char unsigned UC;TD CO C*S;TD short H;TD unsigned short UH;TD int I;TD unsigned int U;TD long long L;TD double F;TD size_t N;
TD unsigned long long W,A,A0(),A1(A),A2(A,A),A3(A,A,A),A4(A,A,A,A),AA(CO A*,U),AX(A,CO A*,U);
#define A0(f,b...) A f( )_(b)
@@ -82,21 +82,21 @@ AA a8,d8,ins,no8;
TD A TAU(U);TAU aA0,aA,aB,aG,aC,aF,aI,aL,aS,gns,emp;
TD A TAL(L);TAL al,az,cls,rndF;
TD A TALA(L,A);TALA drp,rnd,rsz;
-TD A TAQ(Q);TAQ aCz,bsl,bsm,die,sym;
-A aa(U,A),ii(A,U),io(A,L),a2t(A,A,C),aE(L,L),af(F),aCm(Q,Q),aCn(Q,U),apc(A,C),apv(A,CO V*),an(U,C),aV(C,U,CO V*),cts(A,Q,U),e1f(A1,A),e2f(A2,A,A),err0(Q),evs(Q,B),
- k1(A*,Q,A),k2(A*,Q,A,A),k8(A*,Q,CO A*,U),jc(C,A),jC(Q,U,A),kv(A*),r2f(A2,A,A),l2f(A2,A,A),mf(U,U,U),pk(Q*,C),pen(A,A1*),slc(A,U,U),unhC(Q,U),wdn(A,U,U,U),
+TD A TAQ(S);TAQ aCz,bsl,bsm,die,sym;
+A aa(U,A),ii(A,U),io(A,L),a2t(A,A,C),aE(L,L),af(F),aCm(S,S),aCn(S,U),apc(A,C),apv(A,CO V*),an(U,C),aV(C,U,CO V*),cts(A,S,U),e1f(A1,A),e2f(A2,A,A),err0(S),evs(S,B),
+ k1(A*,S,A),k2(A*,S,A,A),k8(A*,S,CO A*,U),jc(C,A),jC(S,U,A),kv(A*),r2f(A2,A,A),l2f(A2,A,A),mf(U,U,U),pk(S*,C),pen(A,A1*),slc(A,U,U),unhC(S,U),wdn(A,U,U,U),
AT(W,A),AW(C,A),AK(C,A),AO(UC,A),AN(U,A),w1(U,A,A),w2(U,A,A,A),w8(U,A,CO A*,U),*gp(A);
-V cyc(V*,U,U),eS(A,U),eQ(Q,U,U),exit(I),hexC(Q,U,C*),kargs(I,Q*),kinit(),*memmem(CO V*,N,CO V*,N),mrn(U,CO A*),mRn(U,CO A*),repl(),tilV(V*,L,L,U);
+V cyc(V*,U,U),eS(A,U),eQ(S,U,U),exit(I),hexC(S,U,C*),kargs(I,S*),kinit(),*memmem(CO V*,N,CO V*,N),mrn(U,CO A*),mRn(U,CO A*),repl(),tilV(V*,L,L,U);
B id0(UC),mtc_(A,A),tru(A);
-C*sf(C*,L),*sl(C*,L),sup(A*,A*),tZ(L),*strchrnul(Q,I);
+C*sf(C*,L),*sl(C*,L),sup(A*,A*),tZ(L),*strchrnul(S,I);
UC gi(A);
-I qA(A,A),qf(F,F),rnk(A),sq(Q);
-U _K(A),si(Q,C),_N(A),js_eval(C*,U,C*,U),fG(CO G*,U,G),fI(CO I*,U,I),fL(CO L*,U,L);
-L cfm(CO A*,I),gl_(A),gl(A),iw(A,U,L),now(),pl(Q*),minfZ(L,A),addfB(CO V*,U),addfZ(L,A),pf(Q*);
-Q qs(CO L*),pID(Q);
-W pu(Q*);
+I qA(A,A),qf(F,F),rnk(A),sq(S);
+U _K(A),si(S,C),_N(A),js_eval(C*,U,C*,U),fG(CO G*,U,G),fI(CO I*,U,I),fL(CO L*,U,L);
+L cfm(CO A*,I),gl_(A),gl(A),iw(A,U,L),now(),pl(S*),minfZ(L,A),addfB(CO V*,U),addfZ(L,A),pf(S*);
+S qs(CO L*),pID(S);
+W pu(S*);
F gf(A);
-EX A1*v1[];EX A2*v2[];EX AA*v8[];EX A gv[256],cns,cn[],ci[2][5];EX I pg;EX TY(CO C[])vc,TS,Tw,TR,TT,TX,Tk;EX Q*argv,*env;
+EX A1*v1[];EX A2*v2[];EX AA*v8[];EX A gv[256],cns,cn[],ci[2][5];EX I pg;EX TY(CO C[])vc,TS,Tw,TR,TT,TX,Tk;EX S*argv,*env;
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
// () !i ,1 ,i ,i ,i ,i ,f "" ,` +m X! 5 6 .6 "c" ` {} 1+ ++ +/ +: + / 2:
@@ -173,4 +173,4 @@ enum {au=Lt(tu),FLP,NEG,FIR,SQR,TIL,WHR,REV,ASC,DSC,GRP,NOT,ENL,NUL,LEN,
#define ov(x) ov_(#x":",(L)(x))
#define oo os("["__FILE__":"M2(__LINE__)"]");
#define nop {asm volatile("fnop");}
-U os(Q);W ov_(Q,W);
+U os(S);W ov_(S,W);
diff --git a/b.c b/b.c
index 2bf137d7..13459375 100644
--- a/b.c
+++ b/b.c
@@ -41,7 +41,7 @@ AX(run,Q(xto)Z I d;P(++d>2048,es8(a,n))P(n-xk,er8(a,n))UC*b=_V(xy),c,nl=_n(xA[3]
#define M(a) {b[nb]=a;m[nb]=o;nb+=nb<MB-1;} //append byte
Z A u;Z UC b[MB],m[MB],lu[16];Z I nb,nl,l[16],cr(A,B); //u:lambda(src;b:bytes;m:map;l:locals;consts..) lu:last usages
SN I li(I v)_(U i=fI(l,nl,v);P(i==nl,-1)lu[i]=nb;i) //index of a local variable (returns -1 if not found)
-Z B cm(A x/*0*/){X(Rv(!xv)Ru(1)RS(P(xn-1,0)L v=*xI;Q s=qs(&v);U n=SL(s);n&&s[n-1]==':')R_(0))} //is x a valid modifier? i.e. :: or primitive monad or symbol ending with ":"
+Z B cm(A x/*0*/){X(Rv(!xv)Ru(1)RS(P(xn-1,0)L v=*xI;S s=qs(&v);U n=SL(s);n&&s[n-1]==':')R_(0))} //is x a valid modifier? i.e. :: or primitive monad or symbol ending with ":"
Z V cc(A x/*0*/,I o){U n=un,i=OFF;W(i<n&&!mtc_(x,ua),i++)I(i>=n,PSH(u,xR))M(i+bc-OFF)} //append a "load constant" instruction
Z I cl(A x,A y/*00*/,B r){Q(cm(xx))I v=_v(xx),o=xo; //compile lvalue (x:assignmentNode,y:tree,r:wantResult)
Y(R_(o)
diff --git a/c.c b/c.c
index 923a96fa..f58ce5e1 100644
--- a/c.c
+++ b/c.c
@@ -18,8 +18,8 @@ NI A2(ct,UC t=xv,u=yt;Q(xti||x==t)Q(tB<=t&&t<=tS)P(t==TT[u],y)
Y(RmMA(r2f(ct,x,y))RE(cT(x,gZ(y)))Rf(ct(x,N(cL(y))))Rilc(L v=gl(y);SW(t,R4(tB,tG,tH,tI,ai(v))RC(ac(v))RL(al(v))RF(af(v))RS(u==tc?as(yv):et0()))0)R_(cT(x,y)))et(y))
A1(cB,ct(tB,x))A1(cG,ct(tG,x))A1(cH,ct(tH,x))A1(cI,ct(tI,x))A1(cL,ct(tL,x))A1(cF,ct(tF,x))A1(cC,ct(tC,x))A1(cS,ct(tS,x))
Z X1(csti,RmMA(e1f(csti,x))RF(sqzZ(cL(x)))Rf(az(gf(x)))RC(cG(x))Rc(ai(xv))Ruvw(ai(xv))RilEGHIL(x)R_(et(x)))
-Z X1(prsI,RmMA(e1f(prsI,x))Rc(prsI(enl(x)))RC(x=str0(x);Q s=xV;P(!*s,x(_R(cn[tl])))L v=pl(&s);x(*s?_R(cn[tl]):az(v) ))R_(et(x)))
-Z X1(prsF,RmMA(e1f(prsF,x))Rc(prsF(enl(x)))RC(x=str0(x);Q s=xV;P(!*s,x(_R(cn[tf])))L v=pf(&s);x(*s?_R(cn[tf]):aV(tf,1,&v)))R_(et(x)))
+Z X1(prsI,RmMA(e1f(prsI,x))Rc(prsI(enl(x)))RC(x=str0(x);S s=xV;P(!*s,x(_R(cn[tl])))L v=pl(&s);x(*s?_R(cn[tl]):az(v) ))R_(et(x)))
+Z X1(prsF,RmMA(e1f(prsF,x))Rc(prsF(enl(x)))RC(x=str0(x);S s=xV;P(!*s,x(_R(cn[tf])))L v=pf(&s);x(*s?_R(cn[tf]):aV(tf,1,&v)))R_(et(x)))
Z Y2(pad,RmMA(e2f(pad,x,y))RC(K2("{y@(!x)+(x<0)*#y}",x,y))Rc(dlr(x,enl(y)))R_(et(y)))
X2(dlr,Rs(I v=xv;P(v-(C)v,ed(y))G(&csti,cF,cC,cS,prsI,prsF,ed)[si("ifcsIF",v|'s'*!v)](y))Ril(pad(x,y))R_(et(y)))
X1(sqzZ,R_(x)/*RG(i(xn,P(xg&-2,x))cB(x))*/
diff --git a/e.c b/e.c
index ff0b2013..26a63fe7 100644
--- a/e.c
+++ b/e.c
@@ -1,17 +1,17 @@
#include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE
Z C b[4096],*r=b;Z I d;
-NI A err0(Q s)_(r=b;d=0;N n=MIN(SL(s),32);r=b;*r++='\'';MC(r,s,n);r+=n;*r++=10;0)
-SN A err1(A x,Q s)_(x(0);err0(s))
-SN A err8(CO A*a,U n,Q s)_(mrn(n,a);err0(s))
-NI V eQ(Q s,U n,U i){I(++d>=5,I(d==5,MC(r," ..\n",4);r+=4)return)
- Q p=s+i,q=p,t=p;U h=64;W(p>s&&p>t-h&&p[-1]&&p[-1]-10,p--)W(q<s+n&&q<=t+h&&*q&&*q-10,q++)
+NI A err0(S s)_(r=b;d=0;N n=MIN(SL(s),32);r=b;*r++='\'';MC(r,s,n);r+=n;*r++=10;0)
+SN A err1(A x,S s)_(x(0);err0(s))
+SN A err8(CO A*a,U n,S s)_(mrn(n,a);err0(s))
+NI V eQ(S s,U n,U i){I(++d>=5,I(d==5,MC(r," ..\n",4);r+=4)return)
+ S p=s+i,q=p,t=p;U h=64;W(p>s&&p>t-h&&p[-1]&&p[-1]-10,p--)W(q<s+n&&q<=t+h&&*q&&*q-10,q++)
*r++=32;MC(r,p,q-p);I(p<=t-h,*r=r[1]='.')I(q>t+h,r[q-p-2]=r[q-p-1]='.')r+=q-p;*r++=10;
MS(r,32,t-p+1);r+=t-p+1;*r++='^';*r++=10;}
NI V eS(A x/*0*/,U i)_(eQ(xV,xn,i))
A3(try,/*100*/x=x(dot(x,yR));P(x,x)I(ztU,z=z1(aCn(b,r-b)))E(zR)r=b;d=0;z)
A1(epr,write(2,b,r-b);r=b;x)
A1(err,XC(x=str0(x);err1(x,xV))P(x==au,aCn(b,r-b))err1(x,"err"))
-NI A die(Q s)_(I n=SL(s);C v[n+1];MC(v,s,n);v[n]=10;write(1,"'",1);write(2,v,n+1);exit(1);0)
+NI A die(S s)_(I n=SL(s);C v[n+1];MC(v,s,n);v[n]=10;write(1,"'",1);write(2,v,n+1);exit(1);0)
#define M(t,m)\
NI A0(e##t##0,err0( #m))\
diff --git a/h.c b/h.c
index 4eea160a..9a4f6711 100644
--- a/h.c
+++ b/h.c
@@ -62,7 +62,7 @@ A2(psh,/*11*/Q(xtMT);U n=xN;P(!n,enl(x(y)))
L v=xtA?(L)y:gl(y);apv(x,&v))
A apv(A x/*1*/,CO V*v )_(Q(xtT); U n=xn;x=aa(n+1,x);U w=xw-3;MC(xV+((W)n<<w),v,1<<w);x)
A apc(A x/*1*/,C c )_(Q(xtC||xtG);U n=xn;x=aa(n+1,x);xC[n]=c;x)
-A cts(A x/*1*/,Q s,U m)_(Q(xtC); U n=xn;x=aa(n+m,x);MC(xV+n,s,m);x)
+A cts(A x/*1*/,S s,U m)_(Q(xtC); U n=xn;x=aa(n+m,x);MC(xV+n,s,m);x)
Z A insL(A x,L i,L j,A y/*1ij0*/)_(
P(i>=(W)(j+1)||j>=(W)(xN+1),ei(x))
A z=an(xn-j+i+yn,xt);U w=xw-3;MC(zV,xV,(W)i<<w);MC(zV+(i<<w),yV,(W)yn<<w);MC(zV+(i+yn<<w),xV+((W)j<<w),(W)(xn-j)<<w);
diff --git a/i.c b/i.c
index a806fbb5..c49f9023 100644
--- a/i.c
+++ b/i.c
@@ -12,19 +12,19 @@
#include<sys/mman.h>
#include<dirent.h>
#include"a.h"
-Z U addr(Q*p)_(Q s=*p;P(!*s,0x0100007f)UC v[4];i(4,I(i,P(*s-'.',ed0())s++)v[i]=pu(&s);P(v[i]>255,ed0()))*p=s;*(U*)v)
+Z U addr(S*p)_(S s=*p;P(!*s,0x0100007f)UC v[4];i(4,I(i,P(*s-'.',ed0())s++)v[i]=pu(&s);P(v[i]>255,ed0()))*p=s;*(U*)v)
Z I skt(U h,UH p)_(I f=socket(AF_INET,SOCK_STREAM,0);P(f<0,eo0())I v=setsockopt(f,IPPROTO_TCP,TCP_NODELAY,(I[]){1},4);P(v<0,eo0())
ST sockaddr_in a;a.sin_family=AF_INET;a.sin_addr.s_addr=h;a.sin_port=(UH)(p<<8|p>>8);P(connect(f,(ST sockaddr*)&a,SZ a)<0,eo0())f)
-Z I osf(Q s,L fl)_(P(!strchr(s,':'),I f=open(s,fl,0666);P(f<3/*fbsd*/,eo0())f)U h=addr(&s);P(*s-':',ed0())s++;W p=pu(&s);P(*s,ed0())skt(h,p))
-Z I o(A x/*1*/,I fl)_(Xz(gl(x))Xs(L v=xv;P(!v,1)Q s=qs(&v);osf(s,fl))XC(x=str0(x);I v;Mx(v=osf(xV,fl));v)et(x))
+Z I osf(S s,L fl)_(P(!strchr(s,':'),I f=open(s,fl,0666);P(f<3/*fbsd*/,eo0())f)U h=addr(&s);P(*s-':',ed0())s++;W p=pu(&s);P(*s,ed0())skt(h,p))
+Z I o(A x/*1*/,I fl)_(Xz(gl(x))Xs(L v=xv;P(!v,1)S s=qs(&v);osf(s,fl))XC(x=str0(x);I v;Mx(v=osf(xV,fl));v)et(x))
Z I fm(I f)_(ST stat s;fstat(f,&s)<0?0:s.st_mode) // get file mode
-Z A frd(I f,N i,N n)_(P(i||n+1,en0())DIR*a=fdopendir(f);P(!a,ei0())A x=emp(tC);ST dirent*e;W((e=readdir(a)),Q s=e->d_name;x=apc(cts(x,s,SL(s)),10))closedir(a);x) // read dir
+Z A frd(I f,N i,N n)_(P(i||n+1,en0())DIR*a=fdopendir(f);P(!a,ei0())A x=emp(tC);ST dirent*e;W((e=readdir(a)),S s=e->d_name;x=apc(cts(x,s,SL(s)),10))closedir(a);x) // read dir
Z A frS(I f,N n)_(C b[1024];A x=emp(tC);W(n,I k=read(f,b,MIN(SZ b,n));P(k<0,eo(x))n-=k;x=cts(x,b,k);P(k-SZ b,x))x) // read stream (only length)
Z A frs(I f,N i,N n)_(I(i&&lseek(f,i,SEEK_CUR)<0,mr(N(frS(f,i))))frS(f,n)) // read stream (offset too)
Z A frm(I f,N i,N n)_(L m=lseek(f,0,SEEK_END);P(m<0,eo0())n=MIN(n,MAX(0,m-i));n?mf(f,i,n):emp(tC)) // read through mmap
Z A fr(A x/*1*/,N i,N n)_(Xz(frs(gl(x),i,n))I f=N(o(x,O_RDONLY));P(f<3,frs(f,i,n))I m=fm(f);x=(S_ISDIR(m)?frd:S_ISREG(m)?frm:frs)(f,i,n);close(f);x) // read
-Z A fws(I f,Q s,N n)_(W(n>0,L k=write(f,s,n);P(k<0,eo0())P(!k,au)s+=k;n-=k)au) // write stream
-Z A fwm(I f,Q s,N n)_(ftruncate(f,n);V*p=mmap(0,n,PROT_READ|PROT_WRITE,MAP_SHARED,f,0);MC(p,s,n);munmap(p,n);au) // write through mmap
+Z A fws(I f,S s,N n)_(W(n>0,L k=write(f,s,n);P(k<0,eo0())P(!k,au)s+=k;n-=k)au) // write stream
+Z A fwm(I f,S s,N n)_(ftruncate(f,n);V*p=mmap(0,n,PROT_READ|PROT_WRITE,MAP_SHARED,f,0);MC(p,s,n);munmap(p,n);au) // write through mmap
Z X2(fw,Ril(I f=gl_(x);My(x=(f<3||!S_ISREG(fm(f))?fws:fwm)(f,yV,yn))x)R_(I f=N(o(xR,O_RDWR|O_CREAT|O_TRUNC));A z=v1c(ai(f),y);f>2&&close(f);z)) // write
SN A dle()_(C*e=dlerror();I(e,os(e);os("\n"))eo0())
A1(opn,Xz(x)ai(N(o(x,O_RDWR|O_CREAT)))) // <s
@@ -39,6 +39,6 @@ A2(v2c,P(!xts||!ytA,et(y))P(yn-2,el(y))P(!_ts(yx)||!_ti(yy),et(y))L v=xv,w=_v(yx
Z A rda(I f)_(A x=aC(256-HD);L m=0,k;W((k=read(f,xV+m,xn-m))>0,m+=k;I(m+1000000>xn&&2*m>xn,A y=aC(2*xn+HD);MC(yV,xV,m);x=x(y)))close(f);AN(m,x))
Z I lC(A x)_(XA(i(xn,P(_t(xa)-tC,0))1)0)//list of strings?
-A1(frk,P(!xtA||xn-2,et(x))A y=kv(&x);P(!lC(x)||!ytC,y(ed(x)))x=Ny(e1f(str0,x));Q a[xn+1];i(xn,a[i]=_V(xa))a[xn]=0;I p[4];pipe(p);pipe(p+2);I pid=fork();
+A1(frk,P(!xtA||xn-2,et(x))A y=kv(&x);P(!lC(x)||!ytC,y(ed(x)))x=Ny(e1f(str0,x));S a[xn+1];i(xn,a[i]=_V(xa))a[xn]=0;I p[4];pipe(p);pipe(p+2);I pid=fork();
P(!pid,dup2(*p,0);dup2(p[3],1);i(4,close(p[i]))exit(execve(*a,(C**)a,(C*CO*)env));0)close(*p);close(p[3]);N(v1c(ai(p[1]),x(y)));close(p[1]);A x=rda(p[2]);wait4(pid,0,0,0);x)
L now()_(ST timeval t;gettimeofday(&t,0);1000000ll*t.tv_sec+t.tv_usec)
diff --git a/j.c b/j.c
index b4c002cf..e76292c3 100644
--- a/j.c
+++ b/j.c
@@ -4,7 +4,7 @@ Z CO C je[]="\"\\/\b\f\n\r\t",ej[]="\"\\/bfnrt";Z C*s;
Z A0 jx;Z C jw()_(W(*s&&*s<=32u,s++)*s)
Z A0(jd,I m=*s=='-';s+=m;C c=*s++;P(!C09(c),0)F v=c-'0';W(C09(*s),v*=10;v+=*s++-'0')I(*s=='.',s++;F t=1;W(C09(*s),t/=10;v+=t*(*s++-'0')))
I((*s|32)=='e',s++;s+=*s=='+';L e=pl((V*)&s);F t=10;I(e<0,e=-e;t=.1)P(e>308,0)i(e,v*=t))af(m?-v:v))
-Z I ju(Q s)_(I v=0;i(4,UC c=*s++,d=c-'0';v<<=4;v|=d<10?d:(d=(c|32)-'a')<6?d+10:-1)v)
+Z I ju(S s)_(I v=0;i(4,UC c=*s++,d=c-'0';v<<=4;v|=d<10?d:(d=(c|32)-'a')<6?d+10:-1)v)
Z A0(js,UC c;C*p=++s;U n=0;W((c=*p)-'"',P(c<32,s=p;0)p++;I(c=='\\',c=*p++;P(c<32,s=p;0)n++;I(c=='u',L v=ju(p);P(v<0,s=p;0)p+=4;n+=4-(v>127)-(v>2047))))A x=aC(p-s-n);p=s;C*r=xC;
W((c=*p++)-'"',I(c=='\\',c=*p++;I(c-'u',U j=si(ej,c);P(j>=L(ej),s=p-1;x(0))c=je[j])E(I v=ju(p);p+=4;I(v<128,c=v)J(v<2048,*r++=192|v>>6;c=128|63&v)E(*r++=224|v>>12;*r++=128|63&v>>6;c=128|63&v)))*r++=c)s=p;x)
Z A0(ja,s++;A x=emp(tA);P(jw()==']',s++;x)W(1,PSH(x,Nx(jx()));C c=jw();P(c==']',s++;x)Nx(c==',');s++)0)
@@ -14,8 +14,8 @@ Z A jx(){C c=jw();SW(c,R3('f','n','t',c=c>>3&3;I v=*(I*)(V*)A("alse","null","tru
X1(js0,RC(U n=xn;x=aa(n+4,x);MS(xC+n,0,4);s=xV;A y=jx();C c=jw();I(y&&c,y=y(0))I(!y,ep0();eS(x,s-xC))x(y))Rc(js0(enl(x)))R_(et(x)))
Z V JX(A);Z U nX(A);Z UC t[256];SN V it(){MS(t,5,32);t[127]=5;i(L(je),t[je[i]]=1)}
-Z U nC(Q p,U n)_(U m=2+n;i(n,m+=t[(UC)p[i]])m)
-Z V JC(Q p,U n){*s++='"';UC c;i(n,SW(t[c=*p++],C(0,*s++=c)C(1,*s++='\\';*s++=ej[si(je,c)])D(MC(s,"\\u00",4);s+=4;hexC(p-1,2,s);s+=2)))*s++='"';}
+Z U nC(S p,U n)_(U m=2+n;i(n,m+=t[(UC)p[i]])m)
+Z V JC(S p,U n){*s++='"';UC c;i(n,SW(t[c=*p++],C(0,*s++=c)C(1,*s++='\\';*s++=ej[si(je,c)])D(MC(s,"\\u00",4);s+=4;hexC(p-1,2,s);s+=2)))*s++='"';}
Z U nl(L v)_(P(v==NL,4)U n=v<0?(v=-v),2:1;W m=10;W(m<=v&&n<19,n++;m*=10)n)
Z V Jl(L v){s=v-NL?sl(s,v):MC(s,"null",4)+4;}
Z U nx(A x/*0*/){X(Ri(nl(xv))Rl(nl(*xL))Rc(C c=xv;nC(&c,1))Rf(F v=*xF;P(v==(L)v,nl(v))P(v!=v,4)C b[32];sf(b,*(L*)&v)-b)Rm(nx(xx)+nx(xy)-1-!_N(xx))Ru(4+!!xv)RC(nC(xC,xn))
diff --git a/k.c b/k.c
index 084f8bde..6dd7673b 100644
--- a/k.c
+++ b/k.c
@@ -14,11 +14,11 @@ K Kf(F v)_(af(v)) K KF(F*a ,N n)_(aV(tF,n,a)) F fK(K x)_(*x
K KL(K*a ,N n)_(a?aV(tA,n,a):aA(n)) V LK(K*a,K x){VK(tA,a,x);}
K Kp(V*p)_(al((L)p))
-V KA(Q s,K x){x=x(d8(A(as(sym(s)),emp(tA),av,x),4));if(x)mr(x);}
-V KR(Q s,V*f,I n)_(KA(s,ax(f,n)))
-K KE(Q s)_(err0(s))
+V KA(S s,K x){x=x(d8(A(as(sym(s)),emp(tA),av,x),4));if(x)mr(x);}
+V KR(S s,V*f,I n)_(KA(s,ax(f,n)))
+K KE(S s)_(err0(s))
K ref(K x)_(xR)
V unref(K x){mr(x);}
-K K0(K*p,Q s,K*a,I n)_(k8(p,s,a,n))
+K K0(K*p,S s,K*a,I n)_(k8(p,s,a,n))
diff --git a/k.h b/k.h
index 7af8974c..ef666db9 100644
--- a/k.h
+++ b/k.h
@@ -1,5 +1,5 @@
// https://github.com/ktye/i/blob/master/%2B/k.h
-typedef long long K;typedef void V;typedef char C;typedef int I;typedef double F;typedef size_t N;typedef const C*Q;
-V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(Q/*todo*/,K),KR(Q,V*,I);C TK(K),cK(K);N NK(K);I iK(K);F fK(K);
-K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(Q),KL(K*,N),K0(K*,Q,K*,I);
+typedef long long K;typedef void V;typedef char C;typedef int I;typedef double F;typedef size_t N;typedef const C*S;
+V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(S/*todo*/,K),KR(S,V*,I);C TK(K),cK(K);N NK(K);I iK(K);F fK(K);
+K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(S),KL(K*,N),K0(K*,S,K*,I);
#define Kx(s,a...) ({static K f;K0(&f,s,(K[]){a},sizeof((K[]){a})/sizeof(K));})
diff --git a/m.c b/m.c
index 0ca723df..88e4c0e4 100644
--- a/m.c
+++ b/m.c
@@ -36,9 +36,9 @@ A aL(U n)_(an(n,tL))
A aF(U n)_(an(n,tF))
A aC(U n)_(an(n,tC))
A aS(U n)_(an(n,tS))
-A aCn(Q s,U n)_(aV(tC,n,s))
-A aCm(Q p,Q q)_(aCn(p,q-p))
-A aCz(Q s)_(aCn(s,SL(s)))
+A aCn(S s,U n)_(aV(tC,n,s))
+A aCm(S p,S q)_(aCn(p,q-p))
+A aCz(S s)_(aCn(s,SL(s)))
A az(L n)_(n-(I)n?al(n):ai(n))
A al(L v)_(aV(tl,1,&v))
A af(F v)_(aV(tf,1,&v))
@@ -57,9 +57,9 @@ A AN(U n,A x)_(xn=n;x)
A1(AZ,AT(tG,x))
Z C s0[1<<16],*s1=s0+1;
-Q qs(CO L*p)_(*p<0?s0-*p:(V*)p)
-I sq(Q s)_(U n=SL(s);P(n<4||(n==4&&!(s[3]&128)),I v=0;MC(&v,s,n);v)Q p=s0+1;W(p<s1,P(!strcmp(p,s),s0-p)p+=SL(p)+1)n++;P(s1+n>s0+SZ s0,die("SYMS"))MC(s1,s,n);s1+=n;s0-s1+n)
-A sym(Q s)_(as(sq(s)))
+S qs(CO L*p)_(*p<0?s0-*p:(V*)p)
+I sq(S s)_(U n=SL(s);P(n<4||(n==4&&!(s[3]&128)),I v=0;MC(&v,s,n);v)S p=s0+1;W(p<s1,P(!strcmp(p,s),s0-p)p+=SL(p)+1)n++;P(s1+n>s0+SZ s0,die("SYMS"))MC(s1,s,n);s1+=n;s0-s1+n)
+A sym(S s)_(as(sq(s)))
Z U gd,gn;Z W gk[256];A gv[256];
Z W gkk(A x/*0*/)_(Xs((U)xv)Q(xtS)xn?(W)_v(jS(drp(-1,xR)))<<32|(U)_v(ii(x,xn-1)):0)
@@ -70,47 +70,47 @@ A gg(A x/*1*/)_(//get value of global
A*gp(A x/*1*/)_(UC i=gi(x);x(0);gv+i)//get pointer to global
A gns(U k)_(I a[L(gk)];U n=0;i(gn,I(gk[i]>>32==k,a[n++]=gk[i]))aV(tS,n,a))//list namespace
-Z A bs0(Q s)_(en0())
-Z A bsbs(Q s)_(exit(0);0)
-Z A bscd(Q s)_(P(!*s,C b[256];getcwd(b,SZ b)?eo0():aCz(b))chdir(s)?eo0():au)
-Z A bsd(Q s)_(P(!*s,as(gd))s+=*s=='.';gd=sq(s);au)
- A bsl(Q s)_(I f=open(s,0,0);A x=u1c(ai(f));close(f);N(x);P(!xn,x(au))C*p=xC,*e=p+xn-1;P(*e-10,x(err0("eoleof")))*e=0;I(*p=='#'&&p[1]=='!',p=strchrnul(p,10);p+=!!*p)x(evs(p,1)))
-Z A bsf(Q s)_(K1("{`0:($!h),'\":\",'`k'. h:(&x=^`o`p`q`r`u`v`w`x?@'h)#h:``repl_.:0#`}",ai(!s)))
-Z A bst(Q s)_(L n=s[-1]=='t'&&*s==':'?++s,pl(&s):1;Q p=s;A x=N(pk(&p,10));x=N(cpl(aCm(s,p),x,0));L t=now();i(n,mr(Nx(run(x,0,0))))x(az((now()-t+500)/1000)))
-Z A bsv(Q s)_(bsf(0))
-Z A bs_(Q*p)_(C b[256];Q s=*p,e=strchrnul(s,10);P(e-s+1>=L(b),ez0())MC(b,s,e-s);b[e-s]=0;*p=e+!!*e;C c=*b,d=b[1];P(c=='c'&&d=='d'&&(!b[2]||b[2]==32),bscd(b+2+(b[2]==32)))
+Z A bs0(S s)_(en0())
+Z A bsbs(S s)_(exit(0);0)
+Z A bscd(S s)_(P(!*s,C b[256];getcwd(b,SZ b)?eo0():aCz(b))chdir(s)?eo0():au)
+Z A bsd(S s)_(P(!*s,as(gd))s+=*s=='.';gd=sq(s);au)
+ A bsl(S s)_(I f=open(s,0,0);A x=u1c(ai(f));close(f);N(x);P(!xn,x(au))C*p=xC,*e=p+xn-1;P(*e-10,x(err0("eoleof")))*e=0;I(*p=='#'&&p[1]=='!',p=strchrnul(p,10);p+=!!*p)x(evs(p,1)))
+Z A bsf(S s)_(K1("{`0:($!h),'\":\",'`k'. h:(&x=^`o`p`q`r`u`v`w`x?@'h)#h:``repl_.:0#`}",ai(!s)))
+Z A bst(S s)_(L n=s[-1]=='t'&&*s==':'?++s,pl(&s):1;S p=s;A x=N(pk(&p,10));x=N(cpl(aCm(s,p),x,0));L t=now();i(n,mr(Nx(run(x,0,0))))x(az((now()-t+500)/1000)))
+Z A bsv(S s)_(bsf(0))
+Z A bs_(S*p)_(C b[256];S s=*p,e=strchrnul(s,10);P(e-s+1>=L(b),ez0())MC(b,s,e-s);b[e-s]=0;*p=e+!!*e;C c=*b,d=b[1];P(c=='c'&&d=='d'&&(!b[2]||b[2]==32),bscd(b+2+(b[2]==32)))
P(!d||d==10||d==32||d==':',G(&bsl,bst,bsd,bsbs,bsf,bsv,bsm,bs0)[si("ltd\\fvm",c)](b+1+(d==32)))K1("0x0a\\`x(,,\"/bin/sh\"),,:",aCz(b)))
-Z A evs1(Q*p)_(Q s=*p;P(*s=='\\',++*p;bs_(p))A x=pk((V*)p,10);N(x);x=N(cpl(aCm(s,*p),x,0));x(run(x,0,0)))
-A evs(Q s,B r)_(W(*s,A x=evs1(&s);P(!x,I(r,s=strchrnul(s,10);s+=!!*s;epr(0))0)I(r,x(out(x)))E(P(!*s,x)x(0))mc())au)
+Z A evs1(S*p)_(S s=*p;P(*s=='\\',++*p;bs_(p))A x=pk((V*)p,10);N(x);x=N(cpl(aCm(s,*p),x,0));x(run(x,0,0)))
+A evs(S s,B r)_(W(*s,A x=evs1(&s);P(!x,I(r,s=strchrnul(s,10);s+=!!*s;epr(0))0)I(r,x(out(x)))E(P(!*s,x)x(0))mc())au)
B rep()_(Z C b[256];C*s=b,*q;
W(1,L n=read(0,s,b-s+SZ b);P(n<=0,0)s+=n;q=memchr(s-n,10,n);
P(q,C*p=b;W(q,*q=0;evs(p,1);p=q+1;q=memchr(p,10,s-p))MC(b,p,s-p);s+=b-p;1)
P(b+SZ b<=s,die("LONGLINE")))1)
V repl(){W(rep())}
-//L k(Q s)_(A x=N(evs(s,0));mc();Xz(gl(x))x(0))
-//V kf(Q s,A2 f){d8(A(sym(s),au,av,AT(tx,(A)f)),4);}
+//L k(S s)_(A x=N(evs(s,0));mc();Xz(gl(x))x(0))
+//V kf(S s,A2 f){d8(A(sym(s),au,av,AT(tx,(A)f)),4);}
-A cns,cn[tn];Z A ce[tn];Q*argv,*env;
+A cns,cn[tn];Z A ce[tn];S*argv,*env;
V kinit(){Z B l;P(l)l=1;pg=sysconf(_SC_PAGESIZE);A b[32],*c=b;
i(tS-tA+1,*c++=ce[tA+i]=an(0,tA+i))*c++=ce[tm]=am(emp(tS),emp(tA));_x(ce[tA])=_R(ce[tC]);ce[tM]=ce[tA];i(tn-ti,Q(!ce[i+ti]);ce[i+ti]=ce[tA])//empties
cn[tA]=ce[tC];*c++=cn[ti]=cn[tl]=al(NL);i(tL-tE+1,cn[tE+i]=cn[ti])*c++=cn[tF]=cn[tf]=af(NF);cn[tC]=cn[tc]=ac(32);cn[tS]=cn[ts]=as(0);i(tn-to,cn[to+i]=au)//nulls
Q(c-b<=32);cns=aV(tA,c-b,b);}
-V kargs(I n,Q*a){argv=(Q*)a;env=(Q*)a+n+1;n=MAX(0,n-2);A x=n?aA(n):emp(tA);i(n,xa=aCz(a[2+i]))gk[gn]='x';gv[gn++]=x;}
+V kargs(I n,S*a){argv=(S*)a;env=(S*)a+n+1;n=MAX(0,n-2);A x=n?aA(n):emp(tA);i(n,xa=aCz(a[2+i]))gk[gn]='x';gv[gn++]=x;}
A emp(U t)_(_R(ce[t]))
-SN U ow(Q s,U n)_(write(1,s,n))
+SN U ow(S s,U n)_(write(1,s,n))
SN V o8(W v){C b[16],*s=b;i(16,C c=v>>4*(15-i)&15;*s++="0W"[9<c]+c)ow(b,16);}
-U os(Q s)_(ow(s,SL(s)))
-W ov_(Q s,W v)_(os(s);o8(v);ow("\n",1);v)
+U os(S s)_(ow(s,SL(s)))
+W ov_(S s,W v)_(os(s);o8(v);ow("\n",1);v)
#define mms(a...) i(nreg,I f=reg[i].f;V*p=reg[i].p,*q=f?p:p+reg[i].n;a)
#define obs(a...) mms(A x=(A)(p+HD*!f+pg*f),y=(A)q;W(x<y,a;x+=cap(x)+HD))
#define xys(a...) obs(I(xtR&&xr,i(xn|!xn,A y=xa;a)))
#define rts(a...) {i(gn,A x=gv[i];I(x,a))A x=cns;a;}
SN V od(L v){C b[32];ow(b,sl(b,v)-b);}
-SN V osd(Q s,L v){os(s);od(v);}
+SN V osd(S s,L v){os(s);od(v);}
SN A1(ox,o8(x);osd(" U",xU);C t=_T(x);os(" t");I(LH(1,t,tn),ow(&TS[t],1))E(od(t))osd(" r",xr);osd("=",xm);osd(" n",xn);i(MIN(5,cap(x)/8),os(" ");o8(xl))os("\n");x)
-A bsm(Q s)_(obs(xm=0)xys(I(!ytP,ym++))rts(I(!xtP,xm++))
+A bsm(S s)_(obs(xm=0)xys(I(!ytP,ym++))rts(I(!xtP,xm++))
// I n=0;obs(ox(x);n++);osd("nObjs:",n)
// os("mapped regions:\n");mms(os(f?"[f] ":"[x] ");o8((L)p);os("-");o8((L)q);osd(" N",q-p);os("\n"));os("\n");
obs(I(xr&&xt-1>(U)tn,os("!type:");ox(x)))
diff --git a/notes.txt b/notes.txt
index 4ba57659..60bf8ef9 100644
--- a/notes.txt
+++ b/notes.txt
@@ -14,13 +14,13 @@ M local macro M() local macro
N size_t N() error pass-through
O O() [cant be used]
P P() if .. return ..
-Q string (const char*) Q() assert
+Q Q() assert
R R() case .. return ..
-S static S() [cant be used]
+S string (const char*) S() [cant be used]
T T()
U unsigned int U() unless
V void V()
W unsigned long long W() while
X X() switch(xt){..}
Y Y() switch(yt){..}
-Z Z()
+Z static Z()
diff --git a/p.c b/p.c
index f9480505..1318ac56 100644
--- a/p.c
+++ b/p.c
@@ -1,35 +1,35 @@
#include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE
-Z Q s0,s;Z U k;Z A pb(A,C); //parser state (s:current pointer, s0:start of source, k:implicit arg counter)
-U si(Q s,C v)_(strchrnul(s,v)-(C*)s) //find char (string index)
+Z S s0,s;Z U k;Z A pb(A,C); //parser state (s:current pointer, s0:start of source, k:implicit arg counter)
+U si(S s,C v)_(strchrnul(s,v)-(C*)s) //find char (string index)
B id0(UC c)_(CAz(c)|(c|1)==0xd1) //is identifier start char?
Z B id1(C c)_(id0(c)|C09(c)) //is identifier char?
-Z B num(Q s)_(C09(s[*s=='-'])) //is number start?
-Z Q pw(Q s)_(W(*s==32,s++)s) //skip whitespace
+Z B num(S s)_(C09(s[*s=='-'])) //is number start?
+Z S pw(S s)_(W(*s==32,s++)s) //skip whitespace
Z A1(p1,x&&xn==1?fir(x):x) //singleton list to atom
-Q pID(Q s)_(W(id1(*s),s+=0xe555>>((UC)*s>>4&-2)&3)s) //parse identifier
-W pu(Q*p)_(Q s=*p;W v=0;C c=*s;W(C09(c),v=10*v+c-'0';c=*++s)*p=s;v) //parse unsigned long
-L pl(Q*p)_(B m=**p=='-';*p+=m;(1-2*m)*pu(p)) //parse long
-Z L plN(Q*p)_(L v=pl(p);!v&&**p=='N'?(*p)++,NL:v) //parse long (with support for nulls)
-Z L pfu(Q*p)_(L v=pu(p);Q s=*p;C c=*s;P(c=='w',(*p)++;WFL)P(c=='n',(*p)++;v^NFL)I e=0; //parse float unsigned
+S pID(S s)_(W(id1(*s),s+=0xe555>>((UC)*s>>4&-2)&3)s) //parse identifier
+W pu(S*p)_(S s=*p;W v=0;C c=*s;W(C09(c),v=10*v+c-'0';c=*++s)*p=s;v) //parse unsigned long
+L pl(S*p)_(B m=**p=='-';*p+=m;(1-2*m)*pu(p)) //parse long
+Z L plN(S*p)_(L v=pl(p);!v&&**p=='N'?(*p)++,NL:v) //parse long (with support for nulls)
+Z L pfu(S*p)_(L v=pu(p);S s=*p;C c=*s;P(c=='w',(*p)++;WFL)P(c=='n',(*p)++;v^NFL)I e=0; //parse float unsigned
I(c=='.',c=*++s;W(C09(c),I(v<(1ull<<63)/10,v=10*v+c-'0';e--)c=*++s))
I(c=='e',s++;e+=pl(&s);P(e<-308,0)P(e>308,WFL))
Z F t[309];I(!*t,*t=1;i(308,t[i+1]=10*t[i]))
*p=s;*(L*)A(e<0?v/t[-e]:v*t[e]))
-L pf(Q*p)_(B m=**p=='-';(*p)+=m;L v=(L)m<<63|pfu(p);(*p)+=**p=='f';v) //parse float
+L pf(S*p)_(B m=**p=='-';(*p)+=m;L v=(L)m<<63|pfu(p);(*p)+=**p=='f';v) //parse float
Z A pV(C t,TY(pl)*f)_(L a[1<<9];U n=0; //parse ints or floats
- W(1,L v=f(&s);P(n>=L(a),ez0())a[n++]=v;Q p=pw(s);B(p==s||!num(p))s=p)aV(t,n,a))
-Z A0(pZ,Q p=s;W(*p-'0'<2u,p++) //parse ints
- P(*p=='B',Q t=s;s=p+1;cB(aV(tG,p-t,t)))//todo
- P(*p=='b',Q t=s;s=p+1;cG(cB(aV(tG,p-t,t))))
+ W(1,L v=f(&s);P(n>=L(a),ez0())a[n++]=v;S p=pw(s);B(p==s||!num(p))s=p)aV(t,n,a))
+Z A0(pZ,S p=s;W(*p-'0'<2u,p++) //parse ints
+ P(*p=='B',S t=s;s=p+1;cB(aV(tG,p-t,t)))//todo
+ P(*p=='b',S t=s;s=p+1;cG(cB(aV(tG,p-t,t))))
sqzZ(N(pV(tL,plN))))
Z A0(pF,pV(tF,pf)) //parse floats
Z A0(pC,C a[1<<9];U n=0;C c=*++s; //parse "string"
W(c&&c-'"'&&n<L(a),I(c=='\\',c=*++s;U i=fG("tnr0",4,c);I(i<4,c="\t\n\r"[i]))a[n++]=c;c=*++s)
P(!c,ep0())P(n>=L(a),ez0())s++;aV(tC,n,a))
-Z A0(p0x,Q p=s;W(CA9(*p),p++)A x=N(unhC(s,p-s));s=p;x) //parse 0x string
-Z A0(ps,Q p=s;C c=*s;I(id0(c),s=pID(s))J(c>>7,W(*++s<-64)s+=*s==':')aCm(p,s)) //parse symbol
+Z A0(p0x,S p=s;W(CA9(*p),p++)A x=N(unhC(s,p-s));s=p;x) //parse 0x string
+Z A0(ps,S p=s;C c=*s;I(id0(c),s=pID(s))J(c>>7,W(*++s<-64)s+=*s==':')aCm(p,s)) //parse symbol
Z A pS(C c)_(I a[256];U n=0; //parse symbols
- W(1,P(n>=L(a),ez0())A y=*++s-'"'?ps():N(pC());y=str0(y);a[n++]=sq(yC);y(0);Q p=pw(s);B(*p-c)s=p)
+ W(1,P(n>=L(a),ez0())A y=*++s-'"'?ps():N(pC());y=str0(y);a[n++]=sq(yC);y(0);S p=pw(s);B(*p-c)s=p)
aV(tS,n,a))
Z A0(pP,I a[8];U n=0; //parse dot-separated path of identifiers
W(1,P(n>=L(a),ez0())A y=str0(ps());a[n++]=sq(yV);y(0);B(*s-'.'||!id0(s[1]))++s)
@@ -40,19 +40,19 @@ Z A pt(C*v)_(C c=*s;
P(c=='"',p1(pC()))
P(c=='[',s++;pb(GAP,']'))
P(c=='(',s++;P(*s==')',s++;emp(tA))A x=N(pb(MKL,')'));xn-2?x:las(x))
- P(c=='{',C k0=k;k=1;Q s1=s0,t=s0=s++;A y=N(pp()),z=pb(GAP,'}');P(!z,s0=s1;y(0))I(y==au,y=aS(k);i(3,yi='x'+i))A x=N(cpl(aCn(t,s-t),z,y));s0=s1;k=k0;x)
- P(id0(c),Q p=s;A x=pP();I(s-p==1&&c-'y'<2u,k=MAX(k,c-'w'))AO(p-s0,x))
+ P(c=='{',C k0=k;k=1;S s1=s0,t=s0=s++;A y=N(pp()),z=pb(GAP,'}');P(!z,s0=s1;y(0))I(y==au,y=aS(k);i(3,yi='x'+i))A x=N(cpl(aCn(t,s-t),z,y));s0=s1;k=k0;x)
+ P(id0(c),S p=s;A x=pP();I(s-p==1&&c-'y'<2u,k=MAX(k,c-'w'))AO(p-s0,x))
P(C09(c)&&s[1]==':',B u=s[2]==':';s+=2+u;U i=20+c-'0';P(i>25,ep0())*v=1;Lt(tv-u)|i)
P(c=='0'&&s[1]=='x',s+=2;p1(p0x()))
P(num(s)&&(c-'-'||s==s0||(!id1(s[-1])&&!strchr(")]}\"",s[-1]))),
- B d=0;Q p=s;c=*p;W(1,p=pw(p);B(!num(p))p+=*p=='-';c=*p;B(!CA9(c))W(CA9(c)||c=='.'||c==':',d|=!!strchr(".nwef",c);c=*++p))p1(d?pF():pZ()))
- P(c>>7,Q p=s;A x=pP();*v=1;AO(p-s0,x))
+ B d=0;S p=s;c=*p;W(1,p=pw(p);B(!num(p))p+=*p=='-';c=*p;B(!CA9(c))W(CA9(c)||c=='.'||c==':',d|=!!strchr(".nwef",c);c=*++p))p1(d?pF():pZ()))
+ P(c>>7,S p=s;A x=pP();*v=1;AO(p-s0,x))
U i=si("'/\\",c);P(i<3,c=*++s;B h=c==':';s+=h;*v=1;aw+i+3*h)i=si(vc,c);P(i>19,GAP)
B u=*++s==':';s+=u;*v=1;Lt(tv-u)|i)
Z X1(pm, //monadify
Rv(x^au^av)
RA(I(xx==aw,x=mut(x);xA[xn-1]=pm(xA[xn-1]))x)
- Rs(L v=xv;Q s=qs(&v);U n;P(*s>>7&&s[(n=SL(s))-1]-':',C b[8];MC(b,s,n);b[n]=':';b[n+1]=0;sym(b))x)
+ Rs(L v=xv;S s=qs(&v);U n;P(*s>>7&&s[(n=SL(s))-1]-':',C b[8];MC(b,s,n);b[n]=':';b[n+1]=0;sym(b))x)
RS(xn==1?enl(pm(fir(x))):x)
R_(x))
Z A pT(C*v)_(A x=N(pt(v)); //parse term and the adverbs or square brackets after it (v:verb?)
@@ -71,4 +71,4 @@ Z A pe(A x,C*v)_(s=pw(s);C c=*s;
Z A pb(A x,C c)_(x=x?aA1(x):emp(tA); //parse body (sequence of ;-separated expressions)
W(1,C v=0;A y=Nx(pe(0,&v));PSH(x,c-']'&&y==GAP?au:y);P(y==GAP&&c==')',ep(x))B(*s-';'&&*s-10)B(c==10&&*s==10)s++)
P(c==10&&!*s,x)P(*s-c,ep(x))s++;x)
-A pk(Q*p,C c)_(s0=s=*p;A x=pb(GAP,c);*p=s;P(x,xn==2?las(x):x)eQ(s0,SL(s0),s-s0);0) //parse either a group of lines (c='\n') or till '\0' (c='\0')
+A pk(S*p,C c)_(s0=s=*p;A x=pb(GAP,c);*p=s;P(x,xn==2?las(x):x)eQ(s0,SL(s0),s-s0);0) //parse either a group of lines (c='\n') or till '\0' (c='\0')
diff --git a/s.c b/s.c
index f43900ec..73c41dce 100644
--- a/s.c
+++ b/s.c
@@ -1,5 +1,5 @@
#include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE
-Z Q q="0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849"
+Z S q="0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849"
"5051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899";
Z C*S_8(C*s,U v)_(i(4,MC(s+6-2*i,q+v%100*2,2);v/=100)s+8) Z C*s_8(C*s,U v)_(C b[8],*p=b+6;W(1,MC(p,q+v%100*2,2);v/=100;B(!v)p-=2)p+=*p=='0';I n=b+8-p;MC(s,p,n)+n)
Z C*S16(C*s,W v)_(S_8(S_8(s,v/(U)1e8),v%(U)1e8)) Z C*s16(C*s,W v)_(v<(U)1e8?s_8(s,v):S_8(s_8(s,v/(U)1e8),v%(U)1e8))
@@ -30,10 +30,10 @@ C*sf(C*s,L d)_(W x=d,m=x<<12>>12;I e=x<<1>>53;I(x>>63,*s++='-')P(e==2047,P(!m,MC
P(-4<t&&t<0,i(l+1,s[l-t-i]=s[l-i])s[-1]='0';*s++='.';MS(s,'0',-t-1)+l-t)I(l>0,*s++='.';s+=l)*s++='e';I(t<0,t=-t;*s++='-')su(s,t))
A1(str0,Q(xtC);N n=xn;x=AN(n,aa(n+1,x));xC[n]=0;x)
X1(str,Rilf(A y=aC(24);TY(sf)*f=xtf?sf:sl;AN(f(yC,gl(x))-yC,y))Rs(L v=xv;aCz(qs(&v)))Rc(enl(x))RU(kst(x))R_(e1f(str,x)))
-V hexC(Q s,U n,C*r){Z Q q="0123456789abcdef";i(n,C c=*s++;*r++=q[(UC)c>>4];*r++=q[c&15])}
+V hexC(S s,U n,C*r){Z S q="0123456789abcdef";i(n,C c=*s++;*r++=q[(UC)c>>4];*r++=q[c&15])}
X1(hex,RmMA(e1f(hex,x))RC(A y=aC(2*xn);Mx(hexC(xV,xn,yV))y)R_(et(x)))
SN V unh0(C*q){MS(q,-1,256);i(10,q['0'+i]=i)i(6,q['A'+i]=q['a'+i]=10+i)}
-A unhC(Q s,U n)_(P(n&1,el0())Z C q[256];I(!*q,unh0(q))C v=0;i(n,v|=q[s[i]])P(v<0,ed0())A x=aC(n>>1);i(xn,xc=q[*s]<<4|q[s[1]];s+=2)x)
+A unhC(S s,U n)_(P(n&1,el0())Z C q[256];I(!*q,unh0(q))C v=0;i(n,v|=q[s[i]])P(v<0,ed0())A x=aC(n>>1);i(xn,xc=q[*s]<<4|q[s[1]];s+=2)x)
X1(unh,RmMA(e1f(unh,x))RC(x(unhC(xV,xn)))R_(et(x)))
Z A pre(C c,A x)_(cat(ac(c),x))
@@ -41,7 +41,7 @@ Z A1(par,apc(pre('(',x),')'))
Z A1(ek,e1f(kst,x))
Z A1(kss,Z C e[128]={'0',[9]='t','n',[13]='r',[34]='"',[92]='\\'};U n=xn+2;i(xn,C c=xc;P(c>126u||(c<32&&!e[c]),cat11(aCz("0x"),hex(x)))n+=!!e[c])
A y=aC(n);C*s=yC;*s++='"';i(xn,C c=xc;I(e[c],*s++='\\';c=e[c])*s++=c)*s='"';x(y))
-Z A kp(A x,Q p,Q q,Q s)_(C t=TS[xt];(strchr(p,t)?xn==1:strchr(q,t)?xn<2:!!strchr(s,t))?par(kst(x)):kst(x))
+Z A kp(A x,S p,S q,S s)_(C t=TS[xt];(strchr(p,t)?xn==1:strchr(q,t)?xn<2:!!strchr(s,t))?par(kst(x)):kst(x))
A1(kl,kp(x,"AC","IFS","Mmqruvw"))
A1(kr,kp(x,"","","qruvw"))
A1(kw,kp(x,"AC","IFS","Mmpqw"))
diff --git a/vim-c/syntax/n.vim b/vim-c/syntax/n.vim
index 35f6ce41..180117e1 100644
--- a/vim-c/syntax/n.vim
+++ b/vim-c/syntax/n.vim
@@ -13,7 +13,7 @@ M n_comment "//[^\r\n]*\|/\*\_.\{-}\*/"
R n_h s="#" sk="\\\n" e="\r\|\n" c=n_comment |H n_h preproc
M n_string /'\\\=.'\|"\([^\\"]\|\\.\)*"/ contains=n_e |H n_string string
M n_e "\\\(x\x\x\|.\)" contained |H n_e special
-K n_k TD S Z SN NI CO ST EX __attribute__ asm enum do struct union for
+K n_k TD Z SN NI CO ST EX __attribute__ asm enum do struct union for
\ if else extern switch case default break continue return goto |H n_k statement
K n_t A0 A1 A2 A3 A4 AA AX X1 X2 Y2 nextgroup=n_vv |H n_t normal
K n_r return continue |H n_r n_d_rr
diff --git a/w.c b/w.c
index d35bf691..80a317a0 100644
--- a/w.c
+++ b/w.c
@@ -7,7 +7,7 @@ Z A sc(C c ,A x)_(XC(x(scC(c, xV,xn)))et(x))A1(spl,sc(10,x))
Z A sC(C*s,L m,A x)_(XC(x(sCC(s,m,xV,xn)))et(x))
Z L jN(U m,A x/*0*/)_(P(!xtA,-1)L n=(xn-!!xn)*m;i(xn,A y=xa;P(!ytcC,-1)n+=yN)n)//total length or -1
A jc(C c, A x)_(XC(jc(c, flp(flp(x))))L n=jN(1,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,*p++=c )A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y))
-A jC(Q s,U m,A x)_(XC(jC(s,m,flp(flp(x))))L n=jN(m,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,MC(p,s,m);p+=m)A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y))
+A jC(S s,U m,A x)_(XC(jC(s,m,flp(flp(x))))L n=jN(m,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,MC(p,s,m);p+=m)A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y))
Z A1(re0,x?rs0(enl(x)):0) Z A o1f(A1 f,A x/*f1*/)_(re0(f==whr?x(aI(0)):f(fir(x)))) Z A2(o1,/*01*/ xtu?o1f(v1[xv],y):y(emp(tA)))
Z A o2f(A2 f,A x,A y/*f01*/)_(re0(f(x,y))) Z A3(o2,/*001*/xtv?o2f(v2[xv],y,z):z(emp(tA)))
Z AX(em,/*01..1*/A z=0;U k=0;i(n,A y=a[i];I(ytm,k++;y=yx;I(z,P(TS[yt]-TS[zt],ed8(a,n));z=cat10(z,y))E(z=yR)))z=unq(z);