2
Copyright (c) 1993-2008, Cognitive Technologies
5
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½,
6
ļæ½ļæ½ļæ½ ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½:
8
* ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
9
ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
10
ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
11
* ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½
12
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
13
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½
14
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
15
* ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ Cognitive Technologies, ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½
16
ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
17
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
18
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
20
ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ "ļæ½ļæ½ļæ½
21
ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½" ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½-ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
22
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ ļæ½ļæ½
23
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½. ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
24
ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½
25
ļæ½ļæ½ŃØļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½
26
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
27
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ (ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
28
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½-ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
29
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
30
ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½), ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½
31
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2
Copyright (c) 1993-2008, Cognitive Technologies
5
Š Š°Š·ŃŠµŃŠ°ŠµŃŃŃ ŠæŠ¾Š²ŃŠ¾ŃŠ½Š¾Šµ ŃŠ°ŃŠæŃŠ¾ŃŃŃŠ°Š½ŠµŠ½ŠøŠµ Šø ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°Š½ŠøŠµ ŠŗŠ°Šŗ Š² Š²ŠøŠ“Šµ ŠøŃŃ
Š¾Š“Š½Š¾Š³Š¾ ŠŗŠ¾Š“Š°,
6
ŃŠ°Šŗ Šø Š² Š“Š²Š¾ŠøŃŠ½Š¾Š¹ ŃŠ¾ŃŠ¼Šµ, Ń ŠøŠ·Š¼ŠµŠ½ŠµŠ½ŠøŃŠ¼Šø ŠøŠ»Šø Š±ŠµŠ·, ŠæŃŠø ŃŠ¾Š±Š»ŃŠ“ŠµŠ½ŠøŠø ŃŠ»ŠµŠ“ŃŃŃŠøŃ
ŃŃŠ»Š¾Š²ŠøŠ¹:
8
* ŠŃŠø ŠæŠ¾Š²ŃŠ¾ŃŠ½Š¾Š¼ ŃŠ°ŃŠæŃŠ¾ŃŃŃŠ°Š½ŠµŠ½ŠøŠø ŠøŃŃ
Š¾Š“Š½Š¾Š³Š¾ ŠŗŠ¾Š“Š° Š“Š¾Š»Š¶Š½Ń Š¾ŃŃŠ°Š²Š°ŃŃŃŃ ŃŠŗŠ°Š·Š°Š½Š½Š¾Šµ
9
Š²ŃŃŠµ ŃŠ²ŠµŠ“Š¾Š¼Š»ŠµŠ½ŠøŠµ Š¾Š± Š°Š²ŃŠ¾ŃŃŠŗŠ¾Š¼ ŠæŃŠ°Š²Šµ, ŃŃŠ¾Ń ŃŠæŠøŃŠ¾Šŗ ŃŃŠ»Š¾Š²ŠøŠ¹ Šø ŠæŠ¾ŃŠ»ŠµŠ“ŃŃŃŠøŠ¹
10
Š¾ŃŠŗŠ°Š· Š¾Ń Š³Š°ŃŠ°Š½ŃŠøŠ¹.
11
* ŠŃŠø ŠæŠ¾Š²ŃŠ¾ŃŠ½Š¾Š¼ ŃŠ°ŃŠæŃŠ¾ŃŃŃŠ°Š½ŠµŠ½ŠøŠø Š“Š²Š¾ŠøŃŠ½Š¾Š³Š¾ ŠŗŠ¾Š“Š° Š² Š“Š¾ŠŗŃŠ¼ŠµŠ½ŃŠ°ŃŠøŠø Šø/ŠøŠ»Šø Š²
12
Š“ŃŃŠ³ŠøŃ
Š¼Š°ŃŠµŃŠøŠ°Š»Š°Ń
, ŠæŠ¾ŃŃŠ°Š²Š»ŃŠµŠ¼ŃŃ
ŠæŃŠø ŃŠ°ŃŠæŃŠ¾ŃŃŃŠ°Š½ŠµŠ½ŠøŠø, Š“Š¾Š»Š¶Š½Ń ŃŠ¾Ń
ŃŠ°Š½ŃŃŃŃŃ
13
ŃŠŗŠ°Š·Š°Š½Š½Š°Ń Š²ŃŃŠµ ŠøŠ½ŃŠ¾ŃŠ¼Š°ŃŠøŃ Š¾Š± Š°Š²ŃŠ¾ŃŃŠŗŠ¾Š¼ ŠæŃŠ°Š²Šµ, ŃŃŠ¾Ń ŃŠæŠøŃŠ¾Šŗ ŃŃŠ»Š¾Š²ŠøŠ¹ Šø
14
ŠæŠ¾ŃŠ»ŠµŠ“ŃŃŃŠøŠ¹ Š¾ŃŠŗŠ°Š· Š¾Ń Š³Š°ŃŠ°Š½ŃŠøŠ¹.
15
* ŠŠø Š½Š°Š·Š²Š°Š½ŠøŠµ Cognitive Technologies, Š½Šø ŠøŠ¼ŠµŠ½Š° ŠµŠµ ŃŠ¾ŃŃŃŠ“Š½ŠøŠŗŠ¾Š² Š½Šµ Š¼Š¾Š³ŃŃ
16
Š±ŃŃŃ ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°Š½Ń Š² ŠŗŠ°ŃŠµŃŃŠ²Šµ ŃŃŠµŠ“ŃŃŠ²Š° ŠæŠ¾Š“Š“ŠµŃŠ¶ŠŗŠø Šø/ŠøŠ»Šø ŠæŃŠ¾Š“Š²ŠøŠ¶ŠµŠ½ŠøŃ
17
ŠæŃŠ¾Š“ŃŠŗŃŠ¾Š², Š¾ŃŠ½Š¾Š²Š°Š½Š½ŃŃ
Š½Š° ŃŃŠ¾Š¼ ŠŠ, Š±ŠµŠ· ŠæŃŠµŠ“Š²Š°ŃŠøŃŠµŠ»ŃŠ½Š¾Š³Š¾ ŠæŠøŃŃŠ¼ŠµŠ½Š½Š¾Š³Š¾
20
ŠŠ¢Š ŠŠ ŠŠŠ ŠŠŠŠ ŠŠ ŠŠŠŠ”Š¢ŠŠŠŠŠŠ ŠŠŠŠŠŠŠ¬Š¦ŠŠŠ ŠŠŠ¢ŠŠ Š”ŠŠŠ„ ŠŠ ŠŠ Š/ŠŠŠ ŠŠ Š£ŠŠŠŠ ŠŠŠ¦ŠŠŠ "ŠŠŠ
21
ŠŠŠ ŠŠ”Š¢Š¬" ŠŠŠ ŠŠŠŠŠŠ-ŠŠŠŠ ŠŠŠŠ ŠŠŠ ŠŠŠ¢ŠŠ, ŠŠ«Š ŠŠŠŠŠŠ«Š„ ŠÆŠŠŠ ŠŠŠ ŠŠŠŠ ŠŠŠ£ŠŠŠŠŠŠŠ«Š„,
22
ŠŠŠŠ®Š§ŠŠÆ ŠŠŠ ŠŠŠ¢ŠŠ ŠŠŠŠŠŠ Š§ŠŠ”ŠŠŠ Š¦ŠŠŠŠŠ”Š¢Š Š ŠŠ ŠŠŠŠŠŠŠ”Š¢Š ŠŠŠÆ ŠŠŠŠŠ ŠŠ¢ŠŠŠ Š¦ŠŠŠ, ŠŠ ŠŠ
23
ŠŠŠ ŠŠŠŠ§ŠŠŠŠÆŠ”Š¬ ŠŠŠ. ŠŠ ŠŠŠŠŠŠŠŠ¦ ŠŠŠ¢ŠŠ Š”ŠŠŠ„ ŠŠ ŠŠ Š ŠŠ ŠŠŠŠ ŠŠ Š£ŠŠŠ ŠŠŠ¦Š, ŠŠŠ¢ŠŠ ŠŠ
24
ŠŠŠŠŠ¢ ŠŠŠŠŠŠÆŠ¢Š¬ Š/ŠŠŠ ŠŠŠŠ¢ŠŠ ŠŠ Š ŠŠ”ŠŠ ŠŠ”Š¢Š ŠŠŠÆŠ¢Š¬ ŠŠ ŠŠŠ ŠŠŠŠ£, ŠŠ Š ŠŠŠŠ Š”ŠŠ£Š§ŠŠ ŠŠ
25
ŠŠŠ”ŠŠ¢ ŠŠ¢ŠŠŠ¢Š”Š¢ŠŠŠŠŠŠ”Š¢Š, ŠŠŠŠ®Š§ŠŠÆ ŠŠ®ŠŠ«Š ŠŠŠ©ŠŠ, Š”ŠŠ£Š§ŠŠŠŠ«Š, Š”ŠŠŠ¦ŠŠŠŠ¬ŠŠ«Š ŠŠŠ
26
ŠŠŠ”ŠŠŠŠŠŠŠŠØŠŠ Š£ŠŠ«Š¢ŠŠ, Š”ŠŠÆŠŠŠŠŠ«Š Š” ŠŠ”ŠŠŠŠ¬ŠŠŠŠŠŠŠŠ ŠŠŠ ŠŠŠŠŠ”ŠŠŠŠ«Š ŠŠ”ŠŠŠŠ”Š¢ŠŠŠ
27
ŠŠŠŠŠŠŠŠŠŠŠ”Š¢Š ŠŠ”ŠŠŠŠ¬ŠŠŠŠŠŠŠÆ ŠŠ ŠŠŠ ŠŠŠŠ« (ŠŠŠŠ®Š§ŠŠÆ ŠŠŠ¢ŠŠ Š ŠŠŠŠŠ«Š„, ŠŠŠ ŠŠŠŠŠ«Š,
28
Š”Š¢ŠŠŠØŠŠ ŠŠŠŠŠŠŠ«ŠŠ, ŠŠŠ Š£ŠŠ«Š¢ŠŠ Š/ŠŠŠ ŠŠŠ¢ŠŠ Š ŠŠŠ„ŠŠŠŠ, ŠŠŠŠŠ”ŠŠŠŠ«Š ŠŠ-ŠŠ ŠŠŠŠ”Š¢ŠŠŠ
29
Š¢Š ŠŠ¢Š¬ŠŠ„ ŠŠŠ¦ Š/ŠŠŠ ŠŠ¢ŠŠŠŠ ŠŠ ŠŠŠ ŠŠŠŠ« Š ŠŠŠŠ¢ŠŠ¢Š¬ Š”ŠŠŠŠŠ”Š¢ŠŠ Š” ŠŠ Š£ŠŠŠŠ ŠŠ ŠŠŠ ŠŠŠŠŠŠ,
30
ŠŠ ŠŠ ŠŠŠ ŠŠŠŠ§ŠŠŠŠÆŠ”Š¬ ŠŠ¢ŠŠŠ Š”ŠŠ£Š§ŠŠÆŠŠ), ŠŠ ŠŠ ŠŠŠ ŠŠŠŠ§ŠŠŠŠÆŠ”Š¬ ŠŠŠ, ŠŠŠŠ ŠŠ”ŠŠ Š¢ŠŠŠŠ
31
ŠŠŠŠŠŠŠŠ¦ ŠŠŠ ŠŠ Š£ŠŠŠ ŠŠŠ¦Š ŠŠ«ŠŠ ŠŠŠŠŠ©ŠŠŠ« Š ŠŠŠŠŠŠŠŠŠ”Š¢Š Š¢ŠŠŠŠ„ Š£ŠŠ«Š¢ŠŠŠ Š ŠŠŠ¢ŠŠ Š¬.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
57
/**************************************************************************/
58
58
/* -- Updation history. -- */
119
119
// Parameter CountryCode has been removed.
121
121
// This function have tu return proper pointer, never NULL !
122
void * (*my_alloc)(Word32 len);
123
void (*my_free)(void * );
124
void ErrorExit(int Code);
125
//DWORD LoadUserDict( CHAR*, CHAR*, DWORD, voc_state*);
127
BYTE * load_stat_dict ( CHAR *point );
128
/*---------- Updated : 04-01-93 09:46pm, Mike ------
129
Function loads static dictionary file into far memory location
130
<point> The side effect is initialization of decoder table
131
by call of function dectable_init(). New static dictionary
132
format is used : all tables in the one file.
133
Returns far pointer to the next available memory block.
134
--------------------------------------------------*/
136
void init_stat_dict ( struct dict_state * dict );
137
/*-----------------17-02-93 03:21pm-----------------
138
Function copies static dictionary control structure from far memory
139
<load_dict> into NEAR control structure <dict>.
140
--------------------------------------------------*/
122
void * (*my_alloc)(uint32_t len);
123
void (*my_free)(void *);
124
void ErrorExit(int Code);
125
//uint32_t LoadUserDict( char*, char*, uint32_t, voc_state*);
127
uchar * load_stat_dict(char *point);
128
/*---------- Updated : 04-01-93 09:46pm, Mike ------
129
Function loads static dictionary file into far memory location
130
<point> The side effect is initialization of decoder table
131
by call of function dectable_init(). New static dictionary
132
format is used : all tables in the one file.
133
Returns far pointer to the next available memory block.
134
--------------------------------------------------*/
136
void init_stat_dict(struct dict_state * dict);
137
/*-----------------17-02-93 03:21pm-----------------
138
Function copies static dictionary control structure from far memory
139
<load_dict> into NEAR control structure <dict>.
140
--------------------------------------------------*/
142
142
// 08-13-93 08:55pm, Mike
143
// Return type has been changed from <BYTE *> to <void>
144
void load_user_dicts ( PSTR list_name, CHAR * point );
145
/*-----------------17-02-93 03:30pm-----------------
146
Function loads user's dictionaries into memory by
148
--------------------------------------------------*/
143
// Return type has been changed from <uchar *> to <void>
144
void load_user_dicts(char * list_name, char * point);
145
/*-----------------17-02-93 03:30pm-----------------
146
Function loads user's dictionaries into memory by
148
--------------------------------------------------*/
149
149
void unload_user_dicts(void);
151
151
// 08-13-93 06:35pm, Mike after Joe...
152
extern LONG read_all_vtab (INT seqn, CHAR *p);
152
extern int32_t read_all_vtab(int16_t seqn, char *p);
156
struct dict_state * load_dict = NULL; //Allex 09.07.98
157
/*-----------------17-02-93 02:49pm-----------------
158
Global work pointer to static dictionary control structure.
159
--------------------------------------------------*/
156
struct dict_state * load_dict = NULL; //Allex 09.07.98
157
/*-----------------17-02-93 02:49pm-----------------
158
Global work pointer to static dictionary control structure.
159
--------------------------------------------------*/
161
161
user_voc voc_array[MAX_VOC_NUMBER];
162
int16_t real_voc_no = 0;
164
164
// 08-13-93 06:35pm, Mike after Joe...
165
extern int16_t vocs_NOK;
167
167
/**************************************************************************/
168
168
/*********** Import section. ***********************************/
169
169
/**************************************************************************/
172
INT cond_open ( INT seqn, PBYTE name, WORD b1, WORD b2 );
173
PBYTE seq_nam ( INT seqn );
174
PCHAR full_name ( PBYTE w, PBYTE n );
172
int16_t cond_open(int16_t seqn, puchar name, uint16_t b1, uint16_t b2);
173
puchar seq_nam(int16_t seqn);
174
pchar full_name(puchar w, puchar n);
179
extern BYTE alphabet[][ABCSIZE];
178
extern uchar alphabet[][ABCSIZE];
181
extern CHAR tiger_dir[40];
180
extern char tiger_dir[40];
183
182
/**************************************************************************/
184
183
/*********** Locals section. *************************************/
188
187
// 08-13-93 06:32pm, Mike
189
// LONG read_all_voc(INT seqn, CHAR *name, CHAR *p);
188
// int32_t read_all_voc(int16_t seqn, char *name, char *p);
190
189
// /*-----------------17-02-93 02:27pm-----------------
191
190
// Function reads an dictionary file with name <name>
192
191
// or with number <seqn> into far memory location <p>.
193
192
// --------------------------------------------------*/
195
static INT parce_voc_list_record ( PSTR w, PSTR nm, INT *type );
194
static int16_t parce_voc_list_record(char * w, char * nm, int16_t *type);
198
196
/**************************************************************************/
199
197
/*********** Code section. **************************************/
200
198
/**************************************************************************/
202
BYTE * load_stat_dict ( CHAR *point )
203
/*---------- Updated : 04-01-93 09:46pm, Mike ------
204
Function loads static dictionary file into far memory location
205
<point> The side effect is initialization of decoder table
206
by call of function dectable_init(). New static dictionary
207
format is used : all tables in the one file.
208
Returns far pointer to the next available memory block.
209
--------------------------------------------------*/
200
uchar * load_stat_dict(char *point)
201
/*---------- Updated : 04-01-93 09:46pm, Mike ------
202
Function loads static dictionary file into far memory location
203
<point> The side effect is initialization of decoder table
204
by call of function dectable_init(). New static dictionary
205
format is used : all tables in the one file.
206
Returns far pointer to the next available memory block.
207
--------------------------------------------------*/
213
PTDictHeaderMask dictHdr;
215
DWORD treeLength, tailsLength;
216
DWORD rulesLength, hushLength;
218
if ( !InitializeAlphabet( language ))
220
ErrorExit(RLING_ERROR_CANT_OPEN_TABLE);
211
PTDictHeaderMask dictHdr;
213
uint32_t treeLength, tailsLength;
214
uint32_t rulesLength, hushLength;
216
if (!InitializeAlphabet(language)) {
217
ErrorExit(RLING_ERROR_CANT_OPEN_TABLE);
224
220
/* -- Initialize control pointers. -- */
225
load_dict = dict = (PTDictState) point;
226
point += sizeof (TDictState);
228
/* -- Read whole static dictionary file. -- */
229
size = read_all_vtab( 7, point );
233
PRINTF("Unable to open TREE.VOC \n");
235
ErrorExit(RLING_ERROR_CANT_OPEN_TABLE);
236
//return (BYTE *)dict;
241
dictHdr = (PTDictHeaderMask)point;
245
/* -- Check correctness of file header. -- */
246
memcpy( nearBuf, dictHdr->sign, sizeof(dictHdr->sign) );
247
if ( memcmp( nearBuf, STAT_DICT_SIGN, sizeof(STAT_DICT_SIGN) ) ) {
251
/* -- Check CPU type for current data. -- */
221
load_dict = dict = (PTDictState) point;
222
point += sizeof(TDictState);
224
/* -- Read whole static dictionary file. -- */
225
size = read_all_vtab(7, point);
228
PRINTF("Unable to open TREE.VOC \n");
230
ErrorExit(RLING_ERROR_CANT_OPEN_TABLE);
231
//return (uchar *)dict;
234
dictHdr = (PTDictHeaderMask) point;
237
/* -- Check correctness of file header. -- */
238
memcpy(nearBuf, dictHdr->sign, sizeof(dictHdr->sign));
239
if (memcmp(nearBuf, STAT_DICT_SIGN, sizeof(STAT_DICT_SIGN))) {
240
return (uchar *) dict;
243
/* -- Check CPU type for current data. -- */
253
if ( dictHdr->cpuType[0] != 'I' ) {
245
if ( dictHdr->cpuType[0] != 'I' ) {
246
return (uchar *)dict;
258
if ( dictHdr->cpuType[0] != 'M' ) {
264
/* -- Get data section sizes. -- */
265
treeLength = strtoul(dictHdr->treeLength, NULL, 10);
266
tailsLength = strtoul(dictHdr->tailsLength, NULL, 10);
267
rulesLength = strtoul(dictHdr->rulesLength, NULL, 10);
268
hushLength = strtoul(dictHdr->hushLength, NULL, 10);
270
/* -- Get alphabet size. -- */
271
size = strtoul(dictHdr->abcSize, NULL, 10);
276
dict->abcSize = (WORD)size;
279
/* -- Load decode tables. -- NEED TO THINK ABOUT !!!
284
/* -- Initialize decoder tables. */
287
/* -- Set pointers for access procedure. -- */
288
dict->root = (BYTE *)dictHdr + sizeof(TDictHeaderMask);
289
dict->tailset_root = (BYTE *)dict->root + treeLength;
291
= (PTTailVar)((BYTE *)dict->tailset_root + tailsLength);
293
= (PTShiftType)((BYTE *)dict->vartable + rulesLength);
295
/* -- Check size corectness. -- */
296
size = treeLength + tailsLength + rulesLength
297
+ hushLength + sizeof(TDictHeaderMask);
300
if ( (LONG)dict->size != size ) {
304
// 08-14-93 05:50pm, Mike
305
// Bolvano ( after Lepik )!!!!
306
// If you want to use .ART and so on you need to load these files!!!!!
309
// return dict->root + dict->size;
312
// Here is the new version of dictionary loading.
314
point = dict->root + dict->size; // temp: for return value counting.
316
if ( ( point = load_specABC( point, language) ) == NULL ) {
318
PRINTF( "\n SPELLER: Unable to open Special voc...\n");
323
if ( !loadArtBase( language )) {
325
PRINTF( "\n SPELLER: Problems to load special"
326
" replacement table...\n"
250
if ( dictHdr->cpuType[0] != 'M' ) {
251
return (uchar *)dict;
255
/* -- Get data section sizes. -- */
256
treeLength = strtoul(dictHdr->treeLength, NULL, 10);
257
tailsLength = strtoul(dictHdr->tailsLength, NULL, 10);
258
rulesLength = strtoul(dictHdr->rulesLength, NULL, 10);
259
hushLength = strtoul(dictHdr->hushLength, NULL, 10);
261
/* -- Get alphabet size. -- */
262
size = strtoul(dictHdr->abcSize, NULL, 10);
264
return (uchar *) dict;
266
dict->abcSize = (uint16_t) size;
269
/* -- Load decode tables. -- NEED TO THINK ABOUT !!!
271
-- memcpy( nearBuf, dictHdr->abcUpper, sizeof(dictHdr->abcUpper));
272
-- memcpy( alphabet[0], nearBuf, sizeof(dictHdr->abcUpper) );
273
-- memcpy( nearBuf, dictHdr->abcLower, sizeof(dictHdr->abcLower));
274
-- memcpy( alphabet[1], nearBuf, sizeof(dictHdr->abcLower) );
278
/* -- Initialize decoder tables. */
281
/* -- Set pointers for access procedure. -- */
282
dict->root = (uchar *) dictHdr + sizeof(TDictHeaderMask);
283
dict->tailset_root = (uchar *) dict->root + treeLength;
284
dict->vartable = (PTTailVar)((uchar *) dict->tailset_root + tailsLength);
285
dict->table = (PTShiftType)((uchar *) dict->vartable + rulesLength);
287
/* -- Check size corectness. -- */
288
size = treeLength + tailsLength + rulesLength + hushLength
289
+ sizeof(TDictHeaderMask);
291
if ((int32_t) dict->size != size) {
292
return (uchar *) dict;
295
// 08-14-93 05:50pm, Mike
296
// Bolvano ( after Lepik )!!!!
297
// If you want to use .ART and so on you need to load these files!!!!!
300
// return dict->root + dict->size;
303
// Here is the new version of dictionary loading.
305
point = dict->root + dict->size; // temp: for return value counting.
307
if ((point = load_specABC(point, language)) == NULL) {
309
PRINTF( "\n SPELLER: Unable to open Special voc...\n");
311
return (uchar *) dict;
314
if (!loadArtBase(language)) {
316
PRINTF( "\n SPELLER: Problems to load special"
317
" replacement table...\n"
320
return (uchar *) dict;
335
326
/* ------------------------------------------------------------------ */
336
327
// 08-13-93 05:37pm, Mike
337
328
// Not needed with IOLIB.H
339
//LONG read_all_voc( INT seqn, CHAR *name, CHAR *p )
330
//int32_t read_all_voc( int16_t seqn, char *name, char *p )
340
331
// /*-----------------17-02-93 02:27pm-----------------
341
332
// Function reads an dictionary file with name <name>
342
333
// or with number <seqn> into far memory location <p>.
343
334
// --------------------------------------------------*/
348
// full_name( w, (PBYTE)name );
349
// l = read_all_file( (PSTR)w, p );
339
// full_name( w, (puchar)name );
340
// l = read_all_file( (char *)w, p );
350
341
// if ( l <= 0 ) {
351
// full_name( w, (PBYTE)seq_nam( seqn ));
352
// l = read_all_file( (PSTR)w, p );
342
// full_name( w, (puchar)seq_nam( seqn ));
343
// l = read_all_file( (char *)w, p );
362
349
/* ------------------------------------------------------------------ */
364
void init_stat_dict ( struct dict_state * dict )
365
/*-----------------17-02-93 03:21pm-----------------
366
Function copies static dictionary control structure from far memory
367
<load_dict> into NEAR control structure <dict>.
368
--------------------------------------------------*/
370
memcpy ( dict, load_dict, sizeof(struct dict_state) );
373
/* ------------------------------------------------------------------ */
374
// 08-13-93 05:54pm, Mike
377
void user_voc_init (void)
382
/* ------------------------------------------------------------------ */
383
// 08-13-93 05:54pm, Mike
386
void unload_user_dicts(void)
389
for ( i=0; i < real_voc_no; i++) {
390
my_free (voc_array[i].voc.vocseg/*,0*/);
351
void init_stat_dict(struct dict_state * dict)
352
/*-----------------17-02-93 03:21pm-----------------
353
Function copies static dictionary control structure from far memory
354
<load_dict> into NEAR control structure <dict>.
355
--------------------------------------------------*/
357
memcpy(dict, load_dict, sizeof(struct dict_state));
360
/* ------------------------------------------------------------------ */
361
// 08-13-93 05:54pm, Mike
364
void user_voc_init(void) {
368
/* ------------------------------------------------------------------ */
369
// 08-13-93 05:54pm, Mike
372
void unload_user_dicts(void) {
374
for (i = 0; i < real_voc_no; i++) {
375
my_free(voc_array[i].voc.vocseg/*,0*/);
395
380
/* ------------------------------------------------------------------ */
397
382
#define VOCMEMSIZE 0x10000L /* 64K */
398
383
// old version : read list of vocs from disk file USER.LST
400
void load_user_dicts_kzl ( PSTR list_name, CHAR * point)
401
/*-----------------17-02-93 03:30pm-----------------
402
Function loads user's dictionaries into memory by
404
--------------------------------------------------*/
385
void load_user_dicts_kzl(char * list_name, char * point)
386
/*-----------------17-02-93 03:30pm-----------------
387
Function loads user's dictionaries into memory by
389
--------------------------------------------------*/
406
CHAR w[MAXPATH], nm[MAXPATH];
413
lst = fopen ( list_name, "rt");
418
while ( fgets( w, MAXPATH, lst ) != NULL) {
420
if (real_voc_no == MAX_VOC_NUMBER) {
421
errorNo = VOC_TOOLARGELIST; break;
424
if ( ! parce_voc_list_record (w, nm, &type)) {
428
if ( (point = my_alloc (VOCMEMSIZE)) == NULL) {
429
errorNo = VOC_NOTLOADED; break;
432
if ( LoadUserDict (nm, point, VOCMEMSIZE,
433
&(voc_array[real_voc_no].voc)) == 0L )
435
my_free( point/*, 0*/ );
436
errorNo = VOC_NOTLOADED; break;
445
ErrorExit ( /*ERR_voc,*/ errorNo );
391
char w[MAXPATH], nm[MAXPATH];
398
lst = fopen(list_name, "rt");
403
while (fgets(w, MAXPATH, lst) != NULL) {
405
if (real_voc_no == MAX_VOC_NUMBER) {
406
errorNo = VOC_TOOLARGELIST;
410
if (!parce_voc_list_record(w, nm, &type)) {
414
if ((point = my_alloc(VOCMEMSIZE)) == NULL) {
415
errorNo = VOC_NOTLOADED;
419
if (LoadUserDict(nm, point, VOCMEMSIZE, &(voc_array[real_voc_no].voc))
421
my_free(point/*, 0*/);
422
errorNo = VOC_NOTLOADED;
431
ErrorExit( /*ERR_voc,*/errorNo);
450
436
//////////////////////////////////////////////////////////////////////////////
451
437
// list_of_name if concat many vocs name, cutting '\0', last limit is "\0\0"
453
439
Function loads user's dictionaries into memory using
454
440
list of names of vocabularies(in list_of_names).
455
441
--------------------------------------------------*/
456
void load_user_dicts ( PSTR list_of_names, CHAR * point)
442
void load_user_dicts(char * list_of_names, char * point) {
462
447
unload_user_dicts();
464
while ( (*list_of_names) != 0)
466
if (real_voc_no == MAX_VOC_NUMBER)
449
while ((*list_of_names) != 0) {
450
if (real_voc_no == MAX_VOC_NUMBER) {
468
451
errorNo = RLING_ERROR_TOO_MANY_USER_DICTONARY;
472
if ( ! parce_voc_list_record (list_of_names, nm, &type))
455
if (!parce_voc_list_record(list_of_names, nm, &type)) {
477
if ( (point = my_alloc (VOCMEMSIZE)) == NULL)
479
errorNo = RLING_ERROR_CANT_OPEN_USER_DICTONARY;
483
if ( LoadUserDict (nm, point, VOCMEMSIZE,
484
&(voc_array[real_voc_no].voc)) == 0L )
486
my_free( point /*,0*/);
487
errorNo = RLING_ERROR_CANT_OPEN_USER_DICTONARY;
491
list_of_names +=(strlen(list_of_names)+1);
459
if ((point = my_alloc(VOCMEMSIZE)) == NULL) {
460
errorNo = RLING_ERROR_CANT_OPEN_USER_DICTONARY;
464
if (LoadUserDict(nm, point, VOCMEMSIZE, &(voc_array[real_voc_no].voc))
466
my_free(point /*,0*/);
467
errorNo = RLING_ERROR_CANT_OPEN_USER_DICTONARY;
471
list_of_names += (strlen(list_of_names) + 1);
497
476
unload_user_dicts();
498
ErrorExit ( errorNo );
503
482
/* ------------------------------------------------------------------ */
505
INT parce_voc_list_record ( PSTR w, PSTR nm, INT *type )
508
while( (*w) && (*w == ' ') )w++;
509
if ( (!*w)||(*w == '\n')) return 0;
510
while ( (*w != ' ') &&(*w!= 0) && ( *w != '\n') )
484
int16_t parce_voc_list_record(char * w, char * nm, int16_t *type) {
486
while ((*w) && (*w == ' '))
488
if ((!*w) || (*w == '\n'))
490
while ((*w != ' ') && (*w != 0) && (*w != '\n'))
516
496
/* ------------------------------------------------------------------ */