All pastes #957019 Raw Edit

Anonymous

public text v1 · immutable
#957019 ·published 2008-03-25 18:52 UTC
rendered paste body
#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<signal.h> 
#include<sys/wait.h> 

uc S=1,cr=0, W; ul sk [1024],d,tr; int sp=0,sp1=~0, sp2=~1; pid_t
p,t; void ss (){ w(S!=W){ kill(t,S1); S=((S<<1)&0xff?S<<1:1); pa(
); } kill(t,S2); pa(); } ul AD(ul a,ul b){ do{ a^=b; b=((b^a) &b)
<<1; }w(b); return a; }ul SU(ul a,ul b){ return AD(a,AD(~b,1)); }
ul MU                                                       (ul a
,ul b                                                       ){ ul
e,g,f                                                       ,c; e
=a; g                                                       =0; w
(b>1)                                                       { c=2
; f=a                                                       << 1;
w(c<b                                                       >>1){
c<<=1                                                       ;f<<=
1;} g                                                       =AD(f
,g); b=SU(b,c); } a=g; if(b){a=AD(a,e); } return a; } ul DI( ul a
,ul b){ ul t,u=0;w(MU(u,b)<a){ t=1; w(MU(AD(t<<1,u),b)<a){t<<= 1;
} u=AD(u,t);} if(MU(u,b)>a){ u=AD(u,~0);} return u;}void SC(int i
){S=((S<<1)&0xff?(S<<1)&0xff:1);sg(i,&SC);kill(p,S1);}void DS(int 
i){ cr=0; switch(S){ case 1:sk[sp]|=d;case 2:d<<=1;if(!d){sp2=sp1
; sp1=sp                                                 ; sp=AD( 
sp,1);sk                                                 [sp] =0; 
} break;    case 4 :   case 8 :   case 16:   case 32:    cr=S;d=0
; break;    case 64:   if (sp >   0 ){ sp2   =SU (sp2    ,1); sp1
=SU (sp1    ,1); sp=   SU(sp,1)   ; } else   { sp =0;    sp1= ~0;
sp2 =~1;                                                 } sk [sp
]=0; d=0    ; break;   case 128   : if( sp   >1) {sk[   sp1]^=sk[
sp2];sk[    sp2]^=sk   [sp1];sk   [sp1] ^=   sk [ sp2    ]; } d=0
; break;    } sg (i,   &DS); if   (d)kill(   p,S1); }   void Sync
( int i)                                                 { sg(i,&
Sync); }   void main   (void) {   p=getpid   ( ); sg(    S1,&Sync
);if((t=    fork()))   { char a   [80];pa(   );w(1){W    =2;scanf
("%s",a)    ; switch   (a[0]) {   case 83:   W <<= 1;    case 68:
W <<= 1;                                                 case 43:
W <<= 1;    case 45:   W <<= 1;   case 47:   W <<= 1;    case 42:
W <<= 1;    break  ;   case 81:   kill(t,9   );exit(0    );break;    
default :   W=0; tr=   atoi(a);   break; }   if(W)ss(    ); else{
d=1; w(d                                                 ){ W=tr&
d?1:2; d    <<=1; ss   (); } }}   wait(0);   }else{ul    j;sg(S1,
&SC); sg    (S2,&DS)   ; kill(p   ,S1); w(   1){ w(d)    pa(); d= 
1; if(cr    &&sp >1)   {switch(   cr){case   4:sk[sp2    ]=MU(sk[
sp2 ],sk                                                 [sp1] );
break; case 8:sk[sp2]=DI(sk[sp2],sk[sp1]); break; case 16:sk[sp2]
=SU(sk[sp2],sk[sp1]); break; case 32:sk[sp2]=AD(sk[sp2],sk[sp1]); 
break; } sp=sp1; sp1=sp2; sp2=SU(sp2,1); sk[sp]=0; }pr("====\n"); 
for(j=0; j<sp; ){ pr("%lu\n",sk[j]); j=AD(j,1); }kill(p,S1); } }}