| #include <u.h> |
| #include <libc.h> |
| #include <bio.h> |
| #include "dict.h" |
| |
| void |
| thesprintentry(Entry e, int cmd) |
| { |
| char *p, *pe; |
| int c, i; |
| |
| p = e.start; |
| pe = e.end; |
| while(p < pe) { |
| c = *p++; |
| if(cmd == 'r') { |
| outchar(c); |
| continue; |
| } |
| switch(c) { |
| case '*': |
| c = *p++; |
| if(cmd == 'h' && c != 'L') { |
| outnl(0); |
| return; |
| } |
| if(c == 'L' && cmd != 'h') |
| outnl(0); |
| if(c == 'S') { |
| outchar('('); |
| outchar(*p++); |
| outchar(')'); |
| } |
| break; |
| case '#': |
| c = *p++; |
| i = *p++ - '0' - 1; |
| if(i < 0 || i > 4) |
| break; |
| switch(c) { |
| case 'a': outrune(L"áàâäa"[i]); break; |
| case 'e': outrune(L"éèêëe"[i]); break; |
| case 'o': outrune(L"óòôöo"[i]); break; |
| case 'c': outrune(L"ccccç"[i]); break; |
| default: outchar(c); break; |
| } |
| break; |
| case '+': |
| case '<': |
| break; |
| case ' ': |
| if(cmd == 'h' && *p == '*') { |
| outnl(0); |
| return; |
| } |
| default: |
| outchar(c); |
| } |
| } |
| outnl(0); |
| } |
| |
| long |
| thesnextoff(long fromoff) |
| { |
| long a; |
| char *p; |
| |
| a = Bseek(bdict, fromoff, 0); |
| if(a < 0) |
| return -1; |
| for(;;) { |
| p = Brdline(bdict, '\n'); |
| if(!p) |
| break; |
| if(p[0] == '*' && p[1] == 'L') |
| return (Boffset(bdict)-Blinelen(bdict)); |
| } |
| return -1; |
| } |
| |
| void |
| thesprintkey(void) |
| { |
| Bprint(bout, "No key\n"); |
| } |