diff --git a/src/modal.c b/src/modal.c index 0a9ab35..df6f2f4 100644 --- a/src/modal.c +++ b/src/modal.c @@ -222,13 +222,11 @@ apply_rule(Rule *r, char *s) c = *s; if(!spacer(c)) return 0; /* phase: write rule */ - if(b != NULL) { - while((c = *b++)) - if(c == '?' && (rid = *b) && (reg = regs[rid])) - write_reg(rid, reg), b++; - else - *dst_++ = c; - } + while((c = *b++)) + if(c == '?' && (rid = *b) && (reg = regs[rid])) + write_reg(rid, reg), b++; + else + *dst_++ = c; if(dst_ == origin) { while(*s == ' ') s++; if(*s == ')' && *(dst_ - 1) == ' ') dst_--; @@ -243,11 +241,8 @@ parse_frag(char **side, char *s) char c, *cap; while((c = *s) && c == ' ') s++; if(c == ')' || (c == '<' && s[1] == '>') || (c == '>' && s[1] == '<')) { - *side = NULL; + *side = dict_, *dict_++ = 0; return s; - } else if((c == '(' && s[1] == ')')) { - *side = NULL; - return s + 2; } else { cap = walk(s), *side = dict_; if(c == '(') @@ -277,14 +272,14 @@ static void remove_rule(Rule *r) { if(r < rules_ - 1) { - int distance = slen(r->a) + (r->b != NULL ? slen(r->b) : 0); + int distance = slen(r->a) + slen(r->b); char *memsrc = (r + 1)->a; copy(memsrc, r->a, dict_ - memsrc); while(r < rules_ - 1) { Rule *next = r + 1; r->id = next->id, r->refs = next->refs; r->a = next->a - distance; - r->b = next->b == NULL ? NULL : next->b - distance; + r->b = next->b - distance; r++; } } @@ -315,7 +310,7 @@ rewrite(void) if(c == '<' && s[1] == '>') { r = rules_, r->id = rules_ - rules; s = parse_frag(&r->b, parse_frag(&r->a, s + 2)); - if(r->a != NULL) { + if(*r->a) { if(!quiet) fprintf(stderr, "<> (%s) (%s)\n", r->a ? r->a : "", r->b ? r->b : ""); rules_++; } @@ -330,7 +325,7 @@ rewrite(void) parse_frag(&r->b, parse_frag(&r->a, s + 2)); s = cap; while(*s == ' ') s++; - if(r->a == NULL || !apply_rule(r, s)) write_tail(s); + if(!(*r->a) || !apply_rule(r, s)) write_tail(s); dict_ = d; return 1; }