diff options
Diffstat (limited to 'toys/pending/bc.c')
-rw-r--r-- | toys/pending/bc.c | 240 |
1 files changed, 162 insertions, 78 deletions
diff --git a/toys/pending/bc.c b/toys/pending/bc.c index c5af1405..caa7d559 100644 --- a/toys/pending/bc.c +++ b/toys/pending/bc.c @@ -788,85 +788,169 @@ BcProgramUnary bc_program_unarys[] = { bc_program_negate, bc_program_not, }; -char bc_program_stdin_name[] = "<stdin>"; char bc_program_ready_msg[] = "ready for more input\n"; char *bc_lib_name = "gen/lib.bc"; -char bc_lib[] = { - 115,99,97,108,101,61,50,48,10,100,101,102,105,110,101,32,101,40,120,41,123, - 10,97,117,116,111,32,98,44,115,44,110,44,114,44,100,44,105,44,112,44,102,44, - 118,10,98,61,105,98,97,115,101,10,105,98,97,115,101,61,65,10,105,102,40,120, - 60,48,41,123,10,110,61,49,10,120,61,45,120,10,125,10,115,61,115,99,97,108,101, - 10,114,61,54,43,115,43,46,52,52,42,120,10,115,99,97,108,101,61,115,99,97,108, - 101,40,120,41,43,49,10,119,104,105,108,101,40,120,62,49,41,123,10,100,43,61, - 49,10,120,47,61,50,10,115,99,97,108,101,43,61,49,10,125,10,115,99,97,108,101, - 61,114,10,114,61,120,43,49,10,112,61,120,10,102,61,118,61,49,10,102,111,114, - 40,105,61,50,59,118,59,43,43,105,41,123,10,112,42,61,120,10,102,42,61,105,10, - 118,61,112,47,102,10,114,43,61,118,10,125,10,119,104,105,108,101,40,100,45, - 45,41,114,42,61,114,10,115,99,97,108,101,61,115,10,105,98,97,115,101,61,98, - 10,105,102,40,110,41,114,101,116,117,114,110,40,49,47,114,41,10,114,101,116, - 117,114,110,40,114,47,49,41,10,125,10,100,101,102,105,110,101,32,108,40,120, - 41,123,10,97,117,116,111,32,98,44,115,44,114,44,112,44,97,44,113,44,105,44, - 118,10,98,61,105,98,97,115,101,10,105,98,97,115,101,61,65,10,105,102,40,120, - 60,61,48,41,123,10,114,61,40,49,45,49,48,94,115,99,97,108,101,41,47,49,10,105, - 98,97,115,101,61,98,10,114,101,116,117,114,110,40,114,41,10,125,10,115,61,115, - 99,97,108,101,10,115,99,97,108,101,43,61,54,10,112,61,50,10,119,104,105,108, - 101,40,120,62,61,50,41,123,10,112,42,61,50,10,120,61,115,113,114,116,40,120, - 41,10,125,10,119,104,105,108,101,40,120,60,61,46,53,41,123,10,112,42,61,50, - 10,120,61,115,113,114,116,40,120,41,10,125,10,114,61,97,61,40,120,45,49,41, - 47,40,120,43,49,41,10,113,61,97,42,97,10,118,61,49,10,102,111,114,40,105,61, - 51,59,118,59,105,43,61,50,41,123,10,97,42,61,113,10,118,61,97,47,105,10,114, - 43,61,118,10,125,10,114,42,61,112,10,115,99,97,108,101,61,115,10,105,98,97, - 115,101,61,98,10,114,101,116,117,114,110,40,114,47,49,41,10,125,10,100,101, - 102,105,110,101,32,115,40,120,41,123,10,97,117,116,111,32,98,44,115,44,114, - 44,97,44,113,44,105,10,105,102,40,120,60,48,41,114,101,116,117,114,110,40,45, - 115,40,45,120,41,41,10,98,61,105,98,97,115,101,10,105,98,97,115,101,61,65,10, - 115,61,115,99,97,108,101,10,115,99,97,108,101,61,49,46,49,42,115,43,50,10,97, - 61,97,40,49,41,10,115,99,97,108,101,61,48,10,113,61,40,120,47,97,43,50,41,47, - 52,10,120,45,61,52,42,113,42,97,10,105,102,40,113,37,50,41,120,61,45,120,10, - 115,99,97,108,101,61,115,43,50,10,114,61,97,61,120,10,113,61,45,120,42,120, - 10,102,111,114,40,105,61,51,59,97,59,105,43,61,50,41,123,10,97,42,61,113,47, - 40,105,42,40,105,45,49,41,41,10,114,43,61,97,10,125,10,115,99,97,108,101,61, - 115,10,105,98,97,115,101,61,98,10,114,101,116,117,114,110,40,114,47,49,41,10, - 125,10,100,101,102,105,110,101,32,99,40,120,41,123,10,97,117,116,111,32,98, - 44,115,10,98,61,105,98,97,115,101,10,105,98,97,115,101,61,65,10,115,61,115, - 99,97,108,101,10,115,99,97,108,101,42,61,49,46,50,10,120,61,115,40,50,42,97, - 40,49,41,43,120,41,10,115,99,97,108,101,61,115,10,105,98,97,115,101,61,98,10, - 114,101,116,117,114,110,40,120,47,49,41,10,125,10,100,101,102,105,110,101,32, - 97,40,120,41,123,10,97,117,116,111,32,98,44,115,44,114,44,110,44,97,44,109, - 44,116,44,102,44,105,44,117,10,98,61,105,98,97,115,101,10,105,98,97,115,101, - 61,65,10,110,61,49,10,105,102,40,120,60,48,41,123,10,110,61,45,49,10,120,61, - 45,120,10,125,10,105,102,40,115,99,97,108,101,60,54,53,41,123,10,105,102,40, - 120,61,61,49,41,123,10,114,61,46,55,56,53,51,57,56,49,54,51,51,57,55,52,52, - 56,51,48,57,54,49,53,54,54,48,56,52,53,56,49,57,56,55,53,55,50,49,48,52,57, - 50,57,50,51,52,57,56,52,51,55,55,54,52,53,53,50,52,51,55,51,54,49,52,56,48, - 47,110,10,105,98,97,115,101,61,98,10,114,101,116,117,114,110,40,114,41,10,125, - 10,105,102,40,120,61,61,46,50,41,123,10,114,61,46,49,57,55,51,57,53,53,53,57, - 56,52,57,56,56,48,55,53,56,51,55,48,48,52,57,55,54,53,49,57,52,55,57,48,50, - 57,51,52,52,55,53,56,53,49,48,51,55,56,55,56,53,50,49,48,49,53,49,55,54,56, - 56,57,52,48,50,47,110,10,105,98,97,115,101,61,98,10,114,101,116,117,114,110, - 40,114,41,10,125,10,125,10,115,61,115,99,97,108,101,10,105,102,40,120,62,46, - 50,41,123,10,115,99,97,108,101,43,61,53,10,97,61,97,40,46,50,41,10,125,10,115, - 99,97,108,101,61,115,43,51,10,119,104,105,108,101,40,120,62,46,50,41,123,10, - 109,43,61,49,10,120,61,40,120,45,46,50,41,47,40,49,43,46,50,42,120,41,10,125, - 10,114,61,117,61,120,10,102,61,45,120,42,120,10,116,61,49,10,102,111,114,40, - 105,61,51,59,116,59,105,43,61,50,41,123,10,117,42,61,102,10,116,61,117,47,105, - 10,114,43,61,116,10,125,10,115,99,97,108,101,61,115,10,105,98,97,115,101,61, - 98,10,114,101,116,117,114,110,40,40,109,42,97,43,114,41,47,110,41,10,125,10, - 100,101,102,105,110,101,32,106,40,110,44,120,41,123,10,97,117,116,111,32,98, - 44,115,44,111,44,97,44,105,44,118,44,102,10,98,61,105,98,97,115,101,10,105, - 98,97,115,101,61,65,10,115,61,115,99,97,108,101,10,115,99,97,108,101,61,48, - 10,110,47,61,49,10,105,102,40,110,60,48,41,123,10,110,61,45,110,10,111,61,110, - 37,50,10,125,10,97,61,49,10,102,111,114,40,105,61,50,59,105,60,61,110,59,43, - 43,105,41,97,42,61,105,10,115,99,97,108,101,61,49,46,53,42,115,10,97,61,40, - 120,94,110,41,47,50,94,110,47,97,10,114,61,118,61,49,10,102,61,45,120,42,120, - 47,52,10,115,99,97,108,101,43,61,108,101,110,103,116,104,40,97,41,45,115,99, - 97,108,101,40,97,41,10,102,111,114,40,105,61,49,59,118,59,43,43,105,41,123, - 10,118,61,118,42,102,47,105,47,40,110,43,105,41,10,114,43,61,118,10,125,10, - 115,99,97,108,101,61,115,10,105,98,97,115,101,61,98,10,105,102,40,111,41,97, - 61,45,97,10,114,101,116,117,114,110,40,97,42,114,47,49,41,10,125,10,0 -}; +char *bc_lib = +"scale=20;\n" + +"define e(x){\n" +" auto b,s,n,r,d,i,p,f,v;\n" +" b=ibase;\n" +" ibase=A;\n" +" if(x<0){\n" +" n=1; x=-x;\n" +" }\n" +" s=scale;\n" +" r=6+s+.44*x;\n" +" scale=scale(x)+1;\n" +" while(x>1){\n" +" d+=1; x/=2;\n" +" scale+=1;\n" +" }\n" +" scale=r;\n" +" r=x+1; p=x; f=v=1;\n" +" for(i=2;v;++i){;\n" +" p*=x; f*=i; v=p/f; r+=v;\n" +" }\n" +" while(d--)r*=r;\n" +" scale=s;\n" +" ibase=b;\n" +" if(n)return(1/r)\n" +" return(r/1)\n" +"}\n" + +"define l(x){\n" +" auto b,s,r,p,a,q,i,v;\n" +" b=ibase;\n" +" ibase=A;\n" +" if(x<=0){;\n" +" r=(1-10^scale)/1;\n" +" ibase=b;\n" +" return(r)\n" +" }\n" +" s=scale;\n" +" scale+=6;\n" +" p=2;\n" +" while(x>=2){;\n" +" p*=2;\n" +" x=sqrt(x);\n" +" }\n" +" while(x<=.5){;\n" +" p*=2;\n" +" x=sqrt(x);\n" +" }\n" +" r=a=(x-1)/(x+1);\n" +" q=a*a;\n" +" v=1;\n" +" for(i=3;v;i+=2){;\n" +" a*=q; v=a/i; r+=v;\n" +" }\n" +" r*=p;\n" +" scale=s;\n" +" ibase=b;\n" +" return(r/1)\n" +"}\n" + +"define s(x){\n" +" auto b,s,r,a,q,i;\n" +" if(x<0)return(-s(-x))\n" +" b=ibase;\n" +" ibase=A;\n" +" s=scale;\n" +" scale=1.1*s+2;\n" +" a=a(1);\n" +" scale=0;\n" +" q=(x/a+2)/4;\n" +" x-=4*q*a;\n" +" if(q%2) x=-x;\n" +" scale=s+2;\n" +" r=a=x;\n" +" q=-x*x;\n" +" for(i=3;a;i+=2){;\n" +" a*=q/(i*(i-1)); r+=a;\n" +" }\n" +" scale=s;\n" +" ibase=b;\n" +" return(r/1)\n" +"}\n" + +"define c(x){\n" +" auto b,s;\n" +" b=ibase;\n" +" ibase=A;\n" +" s=scale;\n" +" scale*=1.2;\n" +" x=s(2*a(1)+x);\n" +" scale=s;\n" +" ibase=b;\n" +" return(x/1)\n" +"}\n" + +"define a(x){\n" +" auto b,s,r,n,a,m,t,f,i,u;\n" +" b=ibase;\n" +" ibase=A;\n" +" n=1;\n" +" if(x<0){\n" +" n=-1;\n" +" x=-x;\n" +" }\n" +" if(scale<65){\n" +" if(x==1){;\n" +" r=.7853981633974483096156608458198757210492923498437764552437361480/n;\n" +" ibase=b;\n" +" return(r)\n" +" }\n" +" if(x==.2){;\n" +" r=.1973955598498807583700497651947902934475851037878521015176889402/n;\n" +" ibase=b;\n" +" return(r)\n" +" }\n" +" }\n" +" s=scale;\n" +" if(x>.2){\n" +" scale+=5; a=a(.2);\n" +" }\n" +" scale=s+3;\n" +" while(x>.2){\n" +" m+=1; x=(x-.2)/(1+.2*x);\n" +" }\n" +" r=u=x; f=-x*x; t=1;\n" +" for(i=3;t;i+=2){;\n" +" u*=f; t=u/i; r+=t;\n" +" }\n" +" scale=s;\n" +" ibase=b;\n" +" return((m*a+r)/n)\n" +"}\n" + +"define j(n,x){\n" +" auto b,s,o,a,i,v,f;\n" +" b=ibase;\n" +" ibase=A;\n" +" s=scale;\n" +" scale=0;\n" +" n/=1;\n" +" if(n<0){\n" +" n=-n; o=n%2;\n" +" }\n" +" a=1;\n" +" for(i=2;i<=n;++i)a*=i;\n" +" scale=1.5*s;\n" +" a=(x^n)/2^n/a;\n" +" r=v=1;\n" +" f=-x*x/4;\n" +" scale+=length(a)-scale(a);\n" +" for(i=1;v;++i){;\n" +" v=v*f/i/(n+i); r+=v;\n" +" }\n" +" scale=s;\n" +" ibase=b;\n" +" if(o)a=-a;\n" +" return(a*r/1)\n" +"}\n"; static void bc_vec_grow(BcVec *v, unsigned long n) { unsigned long old = v->cap; @@ -1085,7 +1169,7 @@ BcStatus bc_read_line(BcVec *vec, char *prompt) { s = bc_read_chars(vec, prompt); if (s && s != BC_STATUS_EOF) return s; if (bc_read_binary(vec->v, vec->len - 1)) - return bc_vm_verr(BC_ERROR_VM_BIN_FILE, bc_program_stdin_name); + return bc_vm_verr(BC_ERROR_VM_BIN_FILE, "<stdin>"); return BC_STATUS_SUCCESS; } @@ -4753,7 +4837,7 @@ static BcStatus bc_program_read(BcProgram *p) { } file = TT.file; - bc_lex_file(&parse.l, bc_program_stdin_name); + bc_lex_file(&parse.l, "<stdin>"); bc_vec_npop(&f->code, f->code.len); bc_vec_init(&buf, sizeof(char), NULL); @@ -5741,7 +5825,7 @@ static BcStatus bc_vm_stdin(void) { size_t string = 0; int comment = 0, done = 0; - bc_lex_file(&BC_VM->prs.l, bc_program_stdin_name); + bc_lex_file(&BC_VM->prs.l, "<stdin>"); bc_vec_init(&buffer, sizeof(uchar), NULL); bc_vec_init(&buf, sizeof(uchar), NULL); |