30628092 |
1 | #include "cll1.h" |
2 | |
3 | struct Line |
4 | { |
5 | int n; |
6 | list(Line); |
7 | } *line; |
8 | |
9 | struct Id |
10 | { |
11 | char *str; |
12 | int count; |
13 | struct Line *lines; |
14 | list(Id); |
15 | } *id,*ids=NULL; |
16 | |
17 | program |
18 | { |
19 | char *ptr; |
20 | char *fname; |
21 | char *c=NULL; |
22 | int l=0; |
23 | |
24 | arguments |
25 | { |
26 | thisargument(fname); |
27 | nextargument(c); |
28 | } |
29 | else |
30 | { |
31 | puts("Usage: idmap file [c]"); |
32 | return 1; |
33 | } |
34 | |
35 | parse(fname) |
36 | { |
37 | l++; |
38 | while(*_) |
39 | { |
40 | goto_alpha(_); |
41 | ptr=_; |
42 | skip_alnum(_); |
43 | *_=0; |
44 | _++; |
45 | |
46 | if(*ptr) |
47 | { |
48 | find(id,ids,eq(id->str,ptr)) |
49 | { |
50 | id->count++; |
51 | find(line,id->lines,line->n==l); |
52 | else |
53 | { |
54 | create(line,Line); |
55 | line->n=l; |
56 | push(line,id->lines); |
57 | } |
58 | } |
59 | else |
60 | { |
61 | create(id,Id); |
62 | create(line,Line); |
63 | id->str=ptr; |
64 | id->count=1; |
65 | id->lines=line; |
66 | line->n=l; |
67 | insert(id,ids,sort_by,str); |
68 | } |
69 | } |
70 | if(*_=='"' || *_=='\'' ) |
71 | { |
72 | char c=*_; |
73 | _++; |
74 | gotochr(_,c); |
75 | } |
76 | } |
77 | } |
78 | fail |
79 | { |
80 | perror(argv[1]); |
81 | exit(-1); |
82 | } |
83 | done; |
84 | |
85 | if(c) |
86 | sort(id,ids,desc_order_by,count); |
87 | |
88 | every(id,ids) |
89 | { |
90 | printf("%3dx %s",id->count,id->str); |
91 | every(line,id->lines) printf(" [%d]",line->n); |
92 | printf("\n"); |
93 | } |
94 | } |