1
2
3
4
5
6
7
8
9 #include <stdio.h>
10 #include <ctype.h>
11
12 #ifndef STASLOVA
13 #define STASLOVA
14
15 #define ESC '\x1B'
16 #define ESCKANJI "\x1B\x24\x28"
17 #define ESCASCII "\x1B\x28\x42"
18 #define ESC88591 "\x1B\x2D\x41"
19 #define ESC88592 "\x1B\x2D\x42"
20 #define ESC88595 "\x1B\x2D\x4C"
21 #define EXP '0'
22 #define STAT 0040
23 #define MTCT 0100
24 #define ASCII 0002
25 #define LATIN1 0004
26 #define LATIN2 0010
27 #define CYRIL 0020
28 #define JIS 0100
29 #define OTHER 0001
30 #define BASE 0040
31 #define CURRENT 1
32 #define CONTEXT 2
33 #define UNMATCH 0
34 #define MATCH 1
35 #define NEXT 2
36 #define NORMAL 0
37 #define NOWORDS 1
38 #define IOEVENT 2
39 #define MEMERR 3
40 #define IN 0
41 #define OUT 1
42 #define SEP 0
43 #define NOSEP 1
44
45 #define MAXLINE 102400
46 #define MAXTOKEN 4096
47 #define MAXSELINE 1024
48 #define MAXCOND 1024
49 #define MAXNEST 128
50 #define MAXSTACK 256
51 #define MAXKS 256
52 #define MAXKC 256
53 #define MAXKP 256
54 #define MAXJS 512
55 #define MAXJC 256
56 #define MAXJP 256
57 #define MAXWORD 512
58 #define MAXWDPTC 12800
59 #endif
60
61 struct mtent {
62 int ln;
63 unsigned char *txt;
64 struct mtent *next;
65 };
66
67 struct ptent {
68 int wdpt;
69 struct ptent *next;
70 };
71
72 struct wdent {
73 int wdc;
74 unsigned char langinfo;
75 unsigned char *mlwd;
76 struct ptent *wdptl;
77 struct mtent *mthead;
78 struct mtent *mtlast;
79 struct wdent *left_we;
80 struct wdent *right_we;
81 };
82
83 struct cdent {
84 unsigned char *cdparm;
85 unsigned char **cdpolish;
86 int tcount;
87 struct wdent *mwdroot;
88 };
89
90 void print_usage(unsigned char *);
91 int extender(int, char **);
92 unsigned char **getwdarray(unsigned char *);
93 unsigned char **getcdarray(unsigned char **);
94 int sepextend(unsigned char *);
95 int condextend(unsigned char *);
96 struct cdent *getcdentry(unsigned char **, unsigned char *);
97 unsigned char **polishbuild(unsigned char **);
98 unsigned char divideword(unsigned char **, int);
99 void mlesccpy(void);
100 int mlsepcheck(unsigned char **,unsigned char);
101 void mlescinsert(int);
102 unsigned char *wordgen(unsigned char *);
103 unsigned char **wordptgen(unsigned char **, int);
104 unsigned char *fetchword(void);
105 struct wdent *wdentalloc(void);
106 unsigned char *getmaterial(int);
107 unsigned char *materialalloc(unsigned char *,unsigned char *,unsigned char *);
108 int matchword(unsigned char *, struct cdent *);
109 int unarymatch(unsigned char *, unsigned char *);
110 void statisticsctrl(unsigned char *);
111 void matchingctrl(unsigned char *);
112 struct wdent *addwdtree(struct wdent *, unsigned char *, int);
113 struct ptent *addwdpt(struct ptent *, int);
114 void printwdptlist(struct ptent *);
115 void printwdtree(struct wdent *, int);
116 struct mtent *addmtlist(struct mtent *);
117 struct mtent *mtentalloc(void);
118 void printmtlist(struct mtent *);
119 void printcdtable(struct cdent *);
120 unsigned char mlmdset(unsigned char **, unsigned char *, unsigned char *);
121 unsigned char *mlstrchr(unsigned char *,\
122 unsigned char *, unsigned char *,\
123 unsigned char *,\
124 unsigned char *, unsigned char *);
125 int mlchrcmp(unsigned char *, unsigned char *, unsigned char *,\
126 unsigned char *, unsigned char *, unsigned char *);
127 unsigned char mlchrinc(unsigned char **, unsigned char *, unsigned char *);
128 unsigned char *mlchrlower(unsigned char *);
129 int mlstrcmp(unsigned char *, unsigned char *);
130 unsigned char mlesccheck(unsigned char *);
131 unsigned char mlchrtype(unsigned char **, unsigned char *, unsigned char *);
132
133
134
135