K eval(K x,K y,K z){K*k;S*b,s;SQLULEN w;SQLLEN*nb;SQLINTEGER*wb;H*tb,u,t,j=0,p,m;F f;C c[128];I n=xj<0;D d=d1(n?-xj:xj);U(d)x=y;Q(z->t!=-KJ||xt!=-KS&&xt!=KC,"type") if(z->j)SQLSetStmtAttr(d,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER)(SQLULEN)z->j,0); if(xt==-KS)Q1(SQLColumns(d,(S)0,0,(S)0,0,xs,S0,(S)0,0))else{I e;K q=kpn(xG,xn);ja(&q,"\0");e=SQLExecDirect(d,q->G0,xn);r0(q);Q1(e)} SQLNumResultCols(d,&j);P(!j,(d0(d),knk(0))) b=malloc(j*SZ),tb=malloc(j*2),wb=malloc(j*SZ),nb=malloc(j*SZ),x=ktn(KS,j),y=ktn(0,j);// sqlserver: no bind past nonbind DO(j,Q1(SQLDescribeCol(d,(H)(i+1),c,128,&u,&t,&w,&p,&m))xS[i]=sn(c,u); if(t>90)t-=82; Q(t<-11||t>12,xS[i])wb[i]=ut[tb[i]=t=t>0?t:12-t]==KS&&w?w+1:wt[t];if(ut[t]==KS&&(n||!wb[i]||wb[i]>9))tb[i]=13) DO(j,kK(y)[i]=ktn(ut[t=tb[i]],0);if(w=wb[i])Q1(SQLBindCol(d,(H)(i+1),ct[t],b[i]=malloc(w),w,nb+i))) for(;SQL_SUCCEEDED(SQLFetch(d));)DO(j,k=kK(y)+i;u=ut[t=tb[i]];s=b[i];n=SQL_NULL_DATA==(int)nb[i]; if(!u)jk(k,n?ktn(ct[t]?KC:KG,0):wb[i]?kp(s):gb(d,(H)(i+1),t)); else ja(k,n?nu(u):u==KH&&wb[i]==1?(t=(H)*s,(S)&t):u==KS?(s=dtb(s,nb[i]),(S)&s):u<KD?s:u==KZ?(f=ds(s)+(vs(s+6)+*(I*)(s+12)/1e9)/8.64e4,(S)&f):(w=u==KD?ds(s):vs(s),(S)&w))) if(!SQLMoreResults(d))O("more\n");DO(j,if(wb[i])free(b[i]))R free(b),free(tb),free(wb),free(nb),d0(d),xT(xD(x,y));}
int decodificador(int n, str *hamm, char *out) { int i, j, j2, m, tam, c, k, dec; int x[3]; int bin[4][3]; i = 0; c = 0; k = 0; dec = 0; tam = 7; while (i < n) { for (j = 0; j < tam; j++, k++) hamm[k].num = j+1; i = i + 7; } i = 0; k = 0; while (i < n) { m = 0; for (j = 0; j < tam; j++) { if (hamm[k].bit == '1') { dtb (hamm[k].num, m, bin); m++; } k++; } for (j = 0; j < 3; j++) { x[j] = bin[0][j]; for (j2 = 1; j2 < m; j2++) x[j] = x[j] ^ bin[j2][j]; } for (j = 0; j < 3; j++) { if (x[j] == 1) { dec = btd(x); if (hamm[(i+dec)-1].bit == '1') hamm[(i+dec)-1].bit = '0'; else hamm[(i+dec)-1].bit = '1'; j = 3; } } for (j = 0, j2 = i; j < tam; j++, j2++) { if (pot2(hamm[j2].num) != 1) { out[c] = hamm[j2].bit; c++; } } i = i+7; } return c; }
int main (int argc, char *argv[]){ ApontadorT arvT; ApontadorP arvP; int elem, bit, tipo; int chave[tam]; int chave_busca[tam]; char op; arvT = inicializa_trie (arvT); arvP = inicializa_pat (arvP); tipo = 0; while (op != 'f') { scanf ("%c" , &op); if (op == 'i') { getchar(); scanf ("%d" , &elem); } if (op == 'b') { getchar(); scanf ("%d" , &elem); getchar(); scanf ("%d" , &bit); } if (op == 'f') elem = 1; switch (op) { case ('i'): dtb (elem, chave); if (!tipo) { if (confere_trie (arvT, elem)) { arvT = insere_trie (arvT, elem, 0, chave); getchar(); imprime_trie (arvT); printf ("\n"); } } else { if (confere_pat (arvP, elem)) { arvP->esq = insere_pat (arvP, arvP->esq, elem, chave, arvP->esq->bit); getchar(); imprime_pat (arvP->esq); printf ("\n"); } } break; case ('b'): dtb (elem, chave); busca_chave (chave, chave_busca, bit); if (!tipo) busca_trie (arvT, 0, elem, bit, chave_busca); else busca_pat (arvP->esq, 0, elem, bit, chave_busca); break; case ('t'): transforma (arvP, arvT); arvT = inicializa_trie (arvT); tipo = 1; break; case ('f'): break; case ('e'): break; } } return 0; }