⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alias.c

📁 P2P NAP的C实现 P2P在网络应用中越来越流行
💻 C
📖 第 1 页 / 共 3 页
字号:
    {      if (c < 0)      {        c = 0;        break;      }      if (!buf[i] && c)      {        while (1)        {          memset(tb, 0, sizeof(tb));          if (fgets(tb, sizeof(tb), f) == NULL)	    break;          for (j=0;tb[j]==' ';j++);          if (tb[j] != '#')          {            strcpy(buf+i+1, tb);            buf[i] = ' ';            break;          }        }      }      else if (!buf[i])        break;      if (buf[i] == '{')        c++;      else if (buf[i] == '}')        c--;    }        for (i=0;buf[i];i++)    {      if (buf[i] == '\n')      {        for (j=i+1;buf[j]==' '&&buf[j]!='{';j++);        if (buf[j] == '{')        {          buf[i] = ' ';          strncpy(buf+i+1, buf+j, strlen(buf+j));          buf[strlen(buf)-(j-i)+1] = 0;        }      }    }    if (*buf == ' ')      continue;    for (i=strlen(buf)-1;buf[i] == ' '&&i>=0;i--);    while (buf[i] == '\n')    {      buf[i] = 0;      i--;    }    /* calculate name and value */    p = strchr(buf, ' ');    if (!p) {      continue;    }    *p = 0;    p++;    /* delete any old alias of the same name */    list_unlink_cond(alias_t, alhead, cur, !strcasecmp(cur->nm, buf));    if (cur) {      free(cur->nm);      free(cur->args);      free(cur);    }    /* now create new element of the alias list */    cur = (alias_t *)malloc(sizeof(alias_t));    cur->nm = strdup(buf);    cur->args = strdup(p);    /* and append it */    list_append(alias_t, alhead, cur);  } /* while (1) */    fclose(f);    return(1);}/* evaluate a (presumably boolean) expression. Used by such things as   "/if" and "/while" */char *strev(char *str, unsigned char l, unsigned char r, char *(*func)()){  char *s1, *s2, *rt, *t, *t2;  char t3[1024], t4[1024], **tok, echr;  int i, j, cnt;    memset(t3, 0, sizeof(t3));  strcpy(t3, str);    for (i=0;t3[i];i++)  {    if (t3[i] == '$')    {      for (j=i,echr=0;;j++)      {        if (!t3[j] || t3[j] == ',' || t3[j] == ' ' || t3[j] == '=' || t3[j] == '!' || t3[j] == '>' || t3[j] == '<')        {          echr = t3[j];          break;        }      }      if (i > 0 && (t3[i-1] == '(' || t3[i-1] == ')' || t3[i-1] == ',' || t3[i-1] == '=' || t3[i-1] == '!' || t3[i-1] == '<' || t3[i-1] == '>' || t3[i-1] == ' '))      {        if (t3[i-1] != ' ')        {          memset(t4, 0, sizeof(t4));          strcpy(t4, t3+i);          strcpy(t3+i+1, t4);          t3[i] = ' ';        }        else          j--;        if (echr && echr != ' ')        {          memset(t4, 0, sizeof(t4));          strcpy(t4, t3+j+1);          strcpy(t3+j+2, t4);          t3[j+1] = ' ';        }      }    }  }    if (strlen(t3) > 3 && t3[strlen(t3)-1] == ')' && t3[strlen(t3)-2] == ')')  {    t3[strlen(t3)-1] = ' ';    t3[strlen(t3)] = ')';  }    t3[strlen(t3)-1] = ' ';  t3[strlen(t3)] = ')';    tok = form_tokso(t3, &cnt);  tok = fxv(tok, cnt, &cnt);    for (i=0;tok[i];i++)  {    if (*tok[i] == '$' && tok[i][1] && !isdigit(tok[i][1]))    {      t = dovars(tok[i]+1);      if (t)      {        free(tok[i]);        tok[i] = t;      }    }  }    memset(t3, 0, sizeof(t3));    for (i=0;tok[i];i++)  {    if (*tok[i])    {      strcat(t3, tok[i]);      strcat(t3, " ");    }    free(tok[i]);  }    free(tok);    if (t3[strlen(t3)-1] == ' ')    t3[strlen(t3)-1] = 0;    if (t3[strlen(t3)-1] != r)  {    t3[strlen(t3)] = ' ';    t3[strlen(t3)] = r;    t3[strlen(t3)] = 0;  }    rt = strdup(t3);    for (;;)  {    s1 = strrchr(rt, l);    if (s1 == NULL)      break;    if (strchr(rt, r) == NULL)    {      free(rt);      return(NULL);    }    s2 = (char *)malloc(abs(strchr(s1, r)-s1));    strncpy(s2, s1+1, abs(strchr(s1, r)-s1)-1);    s2[abs(strchr(s1, r)-s1)-1] = '\0';    t = func(s2);    if (t == NULL)    {      free(rt);      free(s2);      return(NULL);    }    t2 = strdup(rt);    free(rt);    s1 = strrchr(t2, l);    rt = ins(t2, t, abs(s1-t2), abs((s1-t2))+(abs((strchr(s1, r)-s1))+1));    free(t2);    free(t);  }    return(rt);}char *cmp(char *st){  char b[512], r[512], **tok, *tm=NULL, *rt=NULL;  int i=0, j, cnt, k, l=0, t;    memset(b, 0, sizeof(b));  memset(r, 0, sizeof(r));    while (st[i])  {    while (st[i] == ' ' && st[i])      i++;    for (b[0]='\'',j=1;st[i]&&st[i]!='&'&&st[i]!='^';j++,i++)    {      if (st[i] == '=' || st[i] == '!' || st[i] == '>' || st[i] == '<')      {        b[j++] = '\'';        b[j++] = ' ';        b[j++] = st[i];        b[j++] = ' ';        b[j] = '\'';      }      else        b[j] = st[i];    }    b[j] = '\'';    b[j+1] = 0;    if (st[i] == '&' || st[i] == '^')      i++;    tok = form_toks(b, &cnt);    tok = fxv(tok, cnt, &cnt);        if (!cnt)    {      tok[0] = NULL;      tok[1] = NULL;      tok[2] = NULL;    }    if (cnt == 1)    {      tok[1] = NULL;      tok[2] = NULL;    }    else if (cnt == 2)      tok[2] = NULL;        if (tok[0] && *tok[0] == '$')    {      tm = dovars(tok[0]+1);      if (tm)      {        free(tok[0]);        tok[0] = tm;      }    }    if (tok[1] && *tok[1] == '$')    {      tm = dovars(tok[1]+1);      if (tm)      {        free(tok[1]);        tok[1] = tm;      }    }    if (tok[2] && *tok[2] == '$')    {      tm = dovars(tok[2]+1);      if (tm)      {        free(tok[2]);        tok[2] = tm;      }    }        tm = NULL;    if (!tok[0])      tm = strdup("");    else      msprintf(&tm, "\'%s\' %s \'%s\'", tok[0]?tok[0]:"", tok[1]?tok[1]:"", tok[2]?tok[2]:"");    for (k=0;k<cnt;k++)      free(tok[k]);    free(tok);    tok = form_toks(tm, &cnt);    free(tm);        if (!cnt)    {      tok[0] = NULL;      tok[1] = NULL;      tok[2] = NULL;    }    if (cnt == 1)    {      tok[1] = NULL;      tok[2] = NULL;    }    else if (cnt == 2)      tok[2] = NULL;        if (tok[2] && !(*tok[2]))    {      free(tok[2]);      tok[2] = NULL;      cnt--;    }    if (tok[1] && !(*tok[1]))    {      free(tok[1]);      tok[1] = NULL;      if (tok[2])      {        tok[1] = strdup(tok[2]);        free(tok[2]);        tok[2] = NULL;      }      cnt--;    }    if (tok[0] && !(*tok[0]))    {      free(tok[0]);      if (tok[1])      {        tok[0] = strdup(tok[1]);        free(tok[1]);        tok[1] = NULL;      }      if (tok[2])      {        tok[1] = strdup(tok[2]);        free(tok[2]);        tok[2] = NULL;      }      cnt--;    }        if (cnt == 2)    {      if (*tok[0] == '=' || *tok[0] == '!' || *tok[0] == '>' || *tok[0] == '<')      {        if (*tok[0] == '!')        {          if (strcmp(tok[1], "0"))          {            free(tok[0]);            free(tok[1]);            tok[3] = NULL;            tok[2] = strdup("0");            tok[1] = strdup("!");            tok[0] = strdup("0");          }          else          {            free(tok[0]);            free(tok[1]);            tok[3] = NULL;            tok[2] = strdup("0");            tok[1] = strdup("=");            tok[0] = strdup("0");          }        }        else        {          tok[3] = NULL;          tok[2] = strdup(tok[1]);          free(tok[1]);          tok[1] = strdup(tok[0]);          free(tok[0]);          tok[0] = strdup("0");        }      }      else if (*tok[1] == '=' || *tok[1] == '!' || *tok[1] == '>' || *tok[1] == '<')      {        tok[3] = NULL;        tok[2] = strdup(tok[0]);        if (*tok[1] == '=')          *tok[1] = '!';        else if (*tok[1] == '!')          *tok[1] = '=';      }      cnt = 3;    }    else if (cnt == 1)    {      if (strcmp(tok[0], "0") || *tok[0] == '!')      {        free(tok[0]);        tok[0] = strdup("1");        tok[1] = strdup("=");        tok[2] = strdup("1");        tok[3] = NULL;      }      else      {        free(tok[0]);        tok[0] = strdup("1");        tok[1] = strdup("!");        tok[2] = strdup("1");        tok[3] = NULL;      }      cnt = 3;    }    else if (!cnt)    {      tok[0] = strdup("1");      tok[1] = strdup("!");      tok[2] = strdup("1");      tok[3] = NULL;      cnt = 3;    }        if (cnt == 3)    {      if (*tok[1] == '=')      {        if (!strcasecmp(tok[0], tok[2]))          r[l++] = 1;        else          r[l++] = 0;      }      else if (*tok[1] == '!')      {        if (!strcasecmp(tok[0], tok[2]))          r[l++] = 0;        else          r[l++] = 1;      }      else if (*tok[1] == '>')      {        if (atoi(tok[0]) > atoi(tok[2]))          r[l++] = 1;        else          r[l++] = 0;      }      else if (*tok[1] == '<')      {        if (atoi(tok[0]) < atoi(tok[2]))          r[l++] = 1;        else          r[l++] = 0;      }    }        for (k=0;tok[k];k++)      free(tok[k]);    free(tok);        if (i > 0 && (st[i-1] == '&' || st[i-1] == '^'))      r[l++] = st[i-1];  }    r[l] = 0;    for (i=0,t=0;i<l;i++)  {    if (r[i] == '&')      t &= r[++i];    else if (r[i] == '^')      t |= r[++i];    else      t = r[i];  }    msprintf(&rt, "%i", t);    return(rt);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -