void find_mix() { int i, j, n; letters *l, *p; no_dup(); n = n_states * (n_states - 1) / 2; p = l = calloc(n, sizeof(letters)); for (i = 0; i < n_states; i++) for (j = i + 1; j < n_states; j++, p++) { count_letters(p, states[i]); count_letters(p, states[j]); } qsort(l, n, sizeof(letters), lcmp); for (j = 0; j < n; j++) { for (i = j + 1; i < n && !lcmp(l + j, l + i); i++) { if (l[j].name[0] == l[i].name[0] || l[j].name[1] == l[i].name[0] || l[j].name[1] == l[i].name[1]) continue; printf("%s + %s => %s + %s\n", l[j].name[0], l[j].name[1], l[i].name[0], l[i].name[1]); } } free(l); }
int gmodem_sim800(gmodem *g,char *cmd) { char *p; gmodem_logf(g,5,"sim800 cmd started: %s",cmd); if (lcmp(&cmd,"wget")) { return gmodem_sim800_wget(g,cmd, tbuf,sizeof(tbuf)); } if (lcmp(&cmd,"ls")) return gmodem_sim800_ls(g,cmd); if (lcmp(&cmd,"put")) { p = get_word(&cmd); return gmodem_sim800_put(g,p,cmd); } if (lcmp(&cmd,"get")) { p = get_word(&cmd); return gmodem_sim800_get(g,p,cmd); } if (lcmp(&cmd,"play")) return gmodem_sim800_play(g,cmd); return 1; // OK anyway }
int gmodem_sim800_CatFile(gmodem *g,char *remote,char **str) { char buf[512],*p; snprintf(buf,sizeof(buf),"+FSFLSIZE=%s",remote); if ( gmodem_At2buf(g,buf,buf,sizeof(buf))<0) return gmodem_errorf(g,-2,"cant define size of %s",remote); int sz; p = buf; if ( !lcmp(&p,"+FSFLSIZE:") || sscanf(p,"%d",&sz)<1 || sz<0) return gmodem_errorf(g,-2,"wrong size %d of %s",remote); g->on_data = gmodem_collect_out; g->mode = 2; szCollect = sz ; // collecting szBytes gmodem_logf(g,1,"... start intrcept %d bytes for %s\n",sz,remote); gmodem_Atf(g,"+FSREAD=%s,0,%d,10",remote,sz); // do not get result... g->on_data = 0; g->mode = 0; // return back anyway return gmodem_errorf(g,1,"OK"); }
static int rangecompare(struct route *a, struct route *b) { if (a->rt.type & Rv4) { if (a->v4.endaddress < b->v4.address) return Rpreceeds; if (a->v4.address > b->v4.endaddress) return Rfollows; if (a->v4.address <= b->v4.address && a->v4.endaddress >= b->v4.endaddress) { if (a->v4.address == b->v4.address && a->v4.endaddress == b->v4.endaddress) return Requals; return Rcontains; } return Rcontained; } if (lcmp(a->v6.endaddress, b->v6.address) < 0) return Rpreceeds; if (lcmp(a->v6.address, b->v6.endaddress) > 0) return Rfollows; if (lcmp(a->v6.address, b->v6.address) <= 0 && lcmp(a->v6.endaddress, b->v6.endaddress) >= 0) { if (lcmp(a->v6.address, b->v6.address) == 0 && lcmp(a->v6.endaddress, b->v6.endaddress) == 0) return Requals; return Rcontains; } return Rcontained; }
LIST * compile_eval( PARSE * parse, FRAME * frame ) { LIST * ll; LIST * lr; LIST * s; LIST * t; int status = 0; /* Short circuit lr eval for &&, ||, and 'in'. */ ll = parse_evaluate( parse->left, frame ); lr = 0; switch ( parse->num ) { case EXPR_AND: case EXPR_IN : if ( ll ) goto eval; break; case EXPR_OR : if ( !ll ) goto eval; break; default: eval: lr = parse_evaluate( parse->right, frame ); } /* Now eval. */ switch ( parse->num ) { case EXPR_NOT: if ( !ll ) status = 1; break; case EXPR_AND: if ( ll && lr ) status = 1; break; case EXPR_OR : if ( ll || lr ) status = 1; break; case EXPR_IN: /* "a in b": make sure each of ll is equal to something in lr. */ for ( t = ll; t; t = list_next( t ) ) { for ( s = lr; s; s = list_next( s ) ) if ( !strcmp( t->string, s->string ) ) break; if ( !s ) break; } /* No more ll? Success. */ if ( !t ) status = 1; break; case EXPR_EXISTS: if ( lcmp( ll, L0 ) != 0 ) status = 1; break; case EXPR_EQUALS: if ( lcmp( ll, lr ) == 0 ) status = 1; break; case EXPR_NOTEQ : if ( lcmp( ll, lr ) != 0 ) status = 1; break; case EXPR_LESS : if ( lcmp( ll, lr ) < 0 ) status = 1; break; case EXPR_LESSEQ: if ( lcmp( ll, lr ) <= 0 ) status = 1; break; case EXPR_MORE : if ( lcmp( ll, lr ) > 0 ) status = 1; break; case EXPR_MOREEQ: if ( lcmp( ll, lr ) >= 0 ) status = 1; break; } if ( DEBUG_IF ) { debug_compile( 0, "if", frame ); list_print( ll ); printf( "(%d) ", status ); list_print( lr ); printf( "\n" ); } /* Find something to return. */ /* In odd circumstances (like "" = "") */ /* we'll have to return a new string. */ if ( !status ) t = 0; else if ( ll ) t = ll, ll = 0; else if ( lr ) t = lr, lr = 0; else t = list_new( L0, newstr( "1" ) ); if ( ll ) list_free( ll ); if ( lr ) list_free( lr ); return t; }
LIST * compile_eval( PARSE *parse, LOL *args, int *jmp ) { LIST *ll, *lr, *t; int status = 0; /* Short circuit lr eval for &&, ||, and 'in' */ ll = (*parse->left->func)( parse->left, args, jmp ); lr = 0; switch( parse->num ) { case EXPR_AND: case EXPR_IN: if( ll ) goto eval; break; case EXPR_OR: if( !ll ) goto eval; break; default: eval: lr = (*parse->right->func)( parse->right, args, jmp ); } /* Now eval */ switch( parse->num ) { case EXPR_NOT: if( !ll ) status = 1; break; case EXPR_AND: if( ll && lr ) status = 1; break; case EXPR_OR: if( ll || lr ) status = 1; break; case EXPR_IN: /* "a in b": make sure each of */ /* ll is equal to something in lr. */ status = list_in(ll, lr); break; case EXPR_EXISTS: if( lcmp( ll, L0 ) != 0 ) status = 1; break; case EXPR_EQUALS: if( lcmp( ll, lr ) == 0 ) status = 1; break; case EXPR_NOTEQ: if( lcmp( ll, lr ) != 0 ) status = 1; break; case EXPR_LESS: if( lcmp( ll, lr ) < 0 ) status = 1; break; case EXPR_LESSEQ: if( lcmp( ll, lr ) <= 0 ) status = 1; break; case EXPR_MORE: if( lcmp( ll, lr ) > 0 ) status = 1; break; case EXPR_MOREEQ: if( lcmp( ll, lr ) >= 0 ) status = 1; break; } if( DEBUG_IF ) { debug_compile( 0, "if" ); list_print( ll ); printf( "(%d) ", status ); list_print( lr ); printf( "\n" ); } /* Find something to return. */ /* In odd circumstances (like "" = "") */ /* we'll have to return a new string. */ if( !status ) t = 0; else if( ll ) t = ll, ll = 0; else if( lr ) t = lr, lr = 0; else t = list_append( L0, "1", 0 ); if( ll ) list_free( ll ); if( lr ) list_free( lr ); return t; }
/* All combinations for each of the above values. */ #define ulcmp(l, s, m) \ s, l, l, l, l, l, m, s, l, l, l, l, \ m, m, s, l, l, l, m, m, m, s, l, l, \ m, m, m, m, s, l, m, m, m, m, m, s #define lcmp(l, s, m) \ s, l, l, m, m, m, m, s, l, m, m, m, \ m, m, s, m, m, m, l, l, l, s, l, l, \ l, l, l, m, s, l, l, l, l, m, m, s /* All combinations of the above for high/low words. */ static int lcmp_results[] = { lcmp(ulcmp(-1, -1, -1), ulcmp(-1, 0, 1), ulcmp(1, 1, 1)) }; static int ulcmp_results[] = { ulcmp(ulcmp(-1, -1, -1), ulcmp(-1, 0, 1), ulcmp(1, 1, 1)) }; static int signof(int i) { if (i < 0) return -1; if (i == 0) return 0;
int process(char *buf) { unsigned char *p=buf; int ok; //printf("P:{%s}\n",buf); if (strncmp(buf,".connect",7)==0) { p=buf+7; while(*p && *p<=32) p++; fprintf(stderr," ...connecting to <%s>\n",p); ok = db_connect_string(db,p); if (ok) fprintf(stderr,"+connected\n"); else fprintf(stderr,"-err: %s\n",db->error); return 1; } if (p[0]=='@') { // process file p++; printf("try run <%s>\n",p); FILE *f = fopen(p,"rt"); if (!f) { fprintf(stderr,"fail open script %s\n",p); return 1;} process_file(f); fclose(f); return 1; // OK } if (lcmp(&p,".echo")) { fprintf(stderr,"%s\n",p); return 1; } if (lcmp(&p,".mode")) { unsigned char *m=get_word(&p); if ( lcmp(&m,"csv")) { mode=1; fprintf(stderr,"+mode csv now\n"); return 1;} if ( lcmp(&m,"text")) { mode=0; fprintf(stderr,"+mode text now\n"); return 1;} if ( lcmp(&m,"json")) { mode=2; fprintf(stderr,"+mode json now\n"); return 1;} fprintf(stderr,"ERR: mode %s unknown\n",m); return 2; } if (lcmp(&p,".http.Auth")) { // set auth string vdb_http_auth_set(p); return 1; } if (lcmp(&p,".http")) { // start http server int code = vdb_http_start(); fprintf(stderr,"+server started code=%d\n",code); return 1; //vdb_http_process(); } if (lcmp(&p,"url")) { char *u = get_word(&p); // rest is SQL http_addSQL(u,p); fprintf(stderr,"url %s added to map\n",u); return 1; } if (strcmp(buf,".help")==0) { prn_help(); return 1;} if (strcmp(buf,".reconnects")==0) { do_reconnects(0); return 1;} if (strcmp(buf,".stressFetch")==0) { do_stress_fetch("select* from test"); return 1;} if (strcmp(buf,".stress")==0) { do_reconnects("select * from test"); return 1;} if (strcmp(buf,".btest")==0) { do_binds("select * from dual where dummy = :txt"); return 1;} if (lcmp(&p,".output")) { output = fopen(p,"wt"); if (!output) { fprintf(stderr,"cant open file %s",p);} return 1; } //if (strcmp(buf,".btest")==0) { do_binds("select * from email where sender = :txt"); return 1;} if (strcmp(buf,".quit")==0) exit(0); if (strcmp(buf,".rollback")==0) { printf("rollback code = %d\n",db_rollback(db)); return 1; } if (strcmp(buf,".commit")==0) { printf("commit code = %d\n",db_commit(db)); return 1; } if (strncmp(buf,".compile",8)==0) { char *sql = buf+8; fprintf(stderr," ...compiling sql <%s>\n",sql); if (!db_compile(db,sql)) fprintf(stderr,"-err compile: %s\n",db->error); else fprintf(stderr,"+ok compiled\n"); return 1; } if (lcmp(&p,".import")) { char *file = get_word(&p); char *tbl = get_word(&p); if (mode==0) return vdb_upload(db,file,tbl,get_col); else return vdb_upload(db,file,tbl,get_csv_col); } if (strncmp(buf,".sql",4)==0) { char *sql = buf+4; int ok; fprintf(stderr," ...compile&exec sql <%s>\n",sql); ok = db_compile(db,sql) && db_exec(db); if (!ok) fprintf(stderr,"-err : %s\n",db->error); else fprintf(stderr,"+ok execed\n"); return 1; } if (strncmp(buf,".desc",5)==0) { char *sql = buf+5; int ok,i; fprintf(stderr," ...describe sql <%s>\n",sql); ok = db_compile(db,sql) && db_open(db); if (!ok) { fprintf(stderr,"-err : %s\n",db->error); return 1; } for(i=0;i<db->out.count;i++) { db_col *c = db->out.cols+i; printf(" %2d. NAME:%-20s TYP:%d LEN:%d DBTYPE:%d\n",i,c->name,c->type,c->len,c->dbtype); } fprintf(stderr,"+ok %d columns\n",i); return 1; } if (strncmp(buf,"select",6)==0) { int row=0; //fprintf(stderr," ...selecting sql <%s>\n",buf); if (!db_select(db,buf)) { fprintf(stderr,"-err: %s\n",db->error); return 1;} // fprintf(stderr,"begin output=%p mode=%d\n",output,mode); row = dump_dataset( output, db, mode); if (output) { fclose(output); output=0; } fprintf(stderr,"+%d rows selected\n",row); return 1; } fprintf(stderr,"-command unknown '%s'\n",buf); return 1; }