Funs *parse() { current.kind = tNONE; int x = setjmp(escape); if (x == 0) { return funs(); } else { return 0; } }
FunctionEntry( const char *name, void (*handler)(INTERNAL_FUNCTION_PARAMETERS), ArgInfoSequence argInfos, const FUNS&... funs ) : argInfos_(std::move(argInfos)) , functionEntry_{ name, handler, argInfos_.argInfo(), static_cast<zend_uint>(argInfos_.size()), 0 } , doNothing_(funs(*this)...) {}
/* <fun> <fun> <fun> ... */ static Funs *funs() { Funs *p = 0; Fun *first = fun(); if (first) { p = NEW(Funs); p->first = first; p->rest = funs(); if (p->rest) { p->n = p->rest->n + 1; } else { p->n = 1; } } if (!isEnd()) error(); return p; }
int var_eval(char *orig, int len, char *dest, int max_len) { int nb = 0, i, j, off; char var[VAR_LENGTH + 1]; memset(var, 0, sizeof(var)); strncpy(var, orig + 1, len - 1); for (i = 0; sym[i] != NULL; i++) for (j = 0; sym[i][j].name; j++) if (!strncmp(sym[i][j].name, var, strlen(sym[i][j].name))) { switch (sym[i][j].type) { case VAR_UINT8: nb = snprintf(dest, max_len, "%d", (int) ((*(uint8_t *) sym[i][j].addr) * sym[i][j].multiplier)); break; case VAR_INT8: nb = snprintf(dest, max_len, "%d", (int) ((*(int8_t *) sym[i][j].addr) * sym[i][j].multiplier)); break; case VAR_UINT16: nb = snprintf(dest, max_len, "%d", (int) ((*(uint16_t *) sym[i][j].addr) * sym[i][j].multiplier)); break; case VAR_INT16: nb = snprintf(dest, max_len, "%d", (int) ((*(int16_t *) sym[i][j].addr) * sym[i][j].multiplier)); break; case VAR_INT: nb = snprintf(dest, max_len, "%d", (int) ((*(int *) sym[i][j].addr) * sym[i][j].multiplier)); break; case VAR_STRING: nb = snprintf(dest, max_len, "%s", (char *) sym[i][j].addr); break; case VAR_PSTRING: nb = snprintf(dest, max_len, "%s", *(char **) sym[i][j].addr); break; case VAR_FLOAT: nb = snprintf(dest, max_len, "%f", (*(float *) sym[i][j].addr) * sym[i][j].multiplier); break; case VAR_HEX: nb = snprintf(dest, max_len, "0x%x", *(int *) sym[i][j].addr); break; case VAR_ARRAY_INT: case VAR_ARRAY_FLOAT: case VAR_ARRAY_HEX: case VAR_ARRAY_UINT16: case VAR_ARRAY_INT16: case VAR_ARRAY_UINT8: case VAR_ARRAY_INT8: case VAR_ARRAY_STRING: case VAR_ARRAY_PSTRING: off = map_intd(var + strlen(sym[i][j].name), NULL, 0); if (off >= 0 && off < sym[i][j].len) { char *p = (((char *) sym[i][j].addr) + off * sym[i][j].skip); switch (sym[i][j].type) { case VAR_ARRAY_UINT8: nb = snprintf(dest, max_len, "%d", (int) (*(uint8_t *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_INT8: nb = snprintf(dest, max_len, "%d", (int) (*(int8_t *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_UINT16: nb = snprintf(dest, max_len, "%d", (int) (*(uint16_t *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_INT16: nb = snprintf(dest, max_len, "%d", (int) (*(int16_t *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_INT: nb = snprintf(dest, max_len, "%d", (int) (*(int *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_FLOAT: nb = snprintf(dest, max_len, "%f", (float) (*(float *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_HEX: nb = snprintf(dest, max_len, "0x%x", (int) (*(int *) p * sym[i][j].multiplier)); break; case VAR_ARRAY_STRING: nb = snprintf(dest, max_len, "%s", p); break; case VAR_ARRAY_PSTRING: nb = snprintf(dest, max_len, "%s", *(char **) p); break; } } break; case VAR_FUNCTION_INT: off = map_intd(var + strlen(sym[i][j].name), NULL, 0); get_data_int funi = (get_data_int) sym[i][j].addr; nb = snprintf(dest, max_len, "%d", funi(off)); break; case VAR_FUNCTION_STRING: off = map_intd(var + strlen(sym[i][j].name), NULL, 0); get_data_string funs = (get_data_string) sym[i][j].addr; funs(off, dest, max_len); nb = strlen(dest); if (nb > max_len) nb = max_len; break; } return nb; } return 0; }
void main() { int a[9],i,j,k=0,m,n=0,b[5]={0},l=0,c[5]={0},x=3,o; char n1[15],n2[15]; void funs(int); void funh(int); int win(int,int b[],int,int c[],char n1[],char n2[],int); clrscr(); gotoxy(25,2); A; printf("Enter player 1"); scanf("%s",n1); printf("\nEnter player 2"); scanf("%s",n2); printf(" --- --- ---\n"); printf("| 1 | 2 | 3 |\n"); printf(" --- --- ---\n"); printf("| 4 | 5 | 6 |\n"); printf(" --- --- ---\n"); printf("| 7 | 8 | 9 |\n"); printf(" --- --- ---\n"); printf("Take your move between 1 to 9\n"); printf("Who wants 1st move ?\n"); printf("press 1 for %s ",n1); printf("press 2 for %s ",n2); scanf("%d",&m); o=m; clrscr(); A; printf(" --- --- ---\n"); printf("| | | |\n"); printf(" --- --- ---\n"); printf("| | | |\n"); printf(" --- --- ---\n"); printf("| | | |\n"); printf(" --- --- ---\n"); for(i=0;i<=9;i++) { x = win(5,b,5,c,n1,n2,m); if((o==1 && (x==0 && m >=10)) || (o==2&& x==0 && m >=11)) { gotoxy(25,12); printf("GAME DRAW"); } if(x==1) { break; } m++; if(m%2==0) { gotoxy(1,9); hi: printf("\n\n%s's Turn : ",n1); scanf("%d",&n); a[i]=n; b[l]=n; for(j=0;j<i;j++) { if(a[j]==n) { printf("Invalid move\n"); goto hi; } } l++; funs(n); } else { gotoxy(1,8); hi1: printf("\n\n%s's Turn : ",n2); scanf("%d",&n); a[i]=n; c[k]=n; for(j=0;j<i;j++) { if(a[j]==n) { printf("Invalid move\n"); goto hi1; } } k++; funh(n); } } getch(); }