📄 alias.c
字号:
{ 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 + -