Пример #1
0
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);
}
Пример #2
0
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
}
Пример #3
0
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");
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
/* 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;
Пример #8
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;
}