]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/dict/thesaurus.c
fix strncmp/memcmp used with a wrong number
[plan9front.git] / sys / src / cmd / dict / thesaurus.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "dict.h"
5
6 void
7 thesprintentry(Entry e, int cmd)
8 {
9         char *p, *pe;
10         int c, i;
11
12         p = e.start;
13         pe = e.end;
14         while(p < pe) {
15                 c = *p++;
16                 if(cmd == 'r') {
17                         outchar(c);
18                         continue;
19                 }
20                 switch(c) {
21                 case '*':
22                         c = *p++;
23                         if(cmd == 'h' && c != 'L') {
24                                 outnl(0);
25                                 return;
26                         }
27                         if(c == 'L' && cmd != 'h')
28                                 outnl(0);
29                         if(c == 'S') {
30                                 outchar('(');
31                                 outchar(*p++);
32                                 outchar(')');
33                         }
34                         break;
35                 case '#':
36                         c = *p++;
37                         i = *p++ - '0' - 1;
38                         if(i < 0 || i > 4)
39                                 break;
40                         switch(c) {
41                         case 'a': outrune(L"áàâäa"[i]); break;
42                         case 'e': outrune(L"éèêëe"[i]); break;
43                         case 'o': outrune(L"óòôöo"[i]); break;
44                         case 'c': outrune(L"ccccç"[i]); break;
45                         default: outchar(c); break;
46                         }
47                         break;
48                 case '+':
49                 case '<':
50                         break;
51                 case ' ':
52                         if(cmd == 'h' && *p == '*') {
53                                 outnl(0);
54                                 return;
55                         }
56                 default:
57                         outchar(c);
58                 }
59         }
60         outnl(0);
61 }
62
63 long
64 thesnextoff(long fromoff)
65 {
66         long a;
67         char *p;
68
69         a = Bseek(bdict, fromoff, 0);
70         if(a < 0)
71                 return -1;
72         for(;;) {
73                 p = Brdline(bdict, '\n');
74                 if(!p)
75                         break;
76                 if(p[0] == '*' && p[1] == 'L')
77                         return (Boffset(bdict)-Blinelen(bdict));
78         }
79         return -1;
80 }
81
82 void
83 thesprintkey(void)
84 {
85         Bprint(bout, "No key\n");
86 }