annotate unique.d @ 1630:d0efa3ae5522 default tip

run/mini/naked_asm5: New x86_64 ABI passes the arguments in reverse order.
author David Nadlinger <code@klickverbot.at>
date Sat, 23 Apr 2011 22:57:32 +0200
parents 3f45fca47bec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
1 module cn.kuehne.uniquefile;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
2
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
3 private import std.file;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
4 private import std.stdio;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
5 private import std.path;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
6
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
7 private char[][char[]] known;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
8 private uint doppelgaenger;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
9
741
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
10 version(reporters){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
11 private import std.string;
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
12 private uint[char[]] reporters;
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
13 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
14
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
15 private char[] lastPathElem(char[] path){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
16 size_t end=path.length-1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
17 size_t start;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
18
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
19 for(end = path.length-1; path[end]==std.path.sep[0]; end--){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
20 if(end==0){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
21 return std.path.sep;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
22 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
23 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
24
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
25 for(start = end-1; start<start.max; start--){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
26 if(path[start]==std.path.sep[0]){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
27 break;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
28 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
29 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
30
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
31 if(start==start.max){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
32 start=0;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
33 }else{
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
34 start+=1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
35 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
36 return path[start .. end+1];
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
37 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
38
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
39 private void add(char[] file){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
40 char[] base = lastPathElem(file);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
41
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
42 if(isfile(file)){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
43 char[]* tmp = base in known;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
44 if(tmp){
703
8dc894322ce8 repos maintenance
thomask
parents: 696
diff changeset
45 fwritef(stdout, "%s :\n\t%s\n\t%s\n", base, file, *tmp);
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
46 doppelgaenger++;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
47 }else{
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
48 known[base] = file;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
49 }
741
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
50
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
51 version(reporters){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
52 // only works for UTF-8
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
53 char[] data=cast(char[]) read(file);
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
54
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
55 size_t index = find(data, "@author@");
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
56 if(index != index.max){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
57 data = data[index + "@author@".length .. data.length];
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
58
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
59 foreach(char end; "\r\n\x00\x0A"){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
60 index = find(data, end);
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
61 if(index != index.max){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
62 data = data[0 .. index];
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
63 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
64 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
65
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
66 data = strip(data);
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
67
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
68 version(verbose){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
69 if(data in reporters){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
70 reporters[data]++;
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
71 }else{
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
72 reporters[data]=1;
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
73 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
74 }else{
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
75 reporters[data]=1;
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
76 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
77 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
78 }
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
79 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
80
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
81 if(isdir(file) && (base[0]!='.')){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
82 foreach(char[] entry; listdir(file)){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
83 add(file~std.path.sep~entry);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
84 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
85 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
86 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
87
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
88 int main(char[][] args){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
89 if(args.length<2){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
90 fwritef(stderr, "at least one directory name is required as argument\n");
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
91 return -1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
92 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
93
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
94 doppelgaenger = 0;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
95
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
96 foreach(char[] file; args[1 .. args.length]){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
97 if(file=="."){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
98 file=getcwd();
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
99 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
100 add(file);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
101 }
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
102
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
103 version(verbose){
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
104 foreach(char[] entry; known.keys.sort){
707
5ba45899cddd minor infrastructure fixes
thomask
parents: 703
diff changeset
105 fwritef(stderr, "\t%s\n", known[entry]);
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
106 }
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
107 }
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
108
741
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
109 version(reporters){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
110 foreach(char[] entry; reporters.keys.sort){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
111 version(verbose){
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
112 fprintf(stderr, "%i\t%.*s\n", reporters[entry], entry);
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
113 }else{
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
114 fprintf(stderr, "%.*s\n", entry);
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
115 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
116 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
117 }
3f45fca47bec added reporter and list features
thomask
parents: 707
diff changeset
118
703
8dc894322ce8 repos maintenance
thomask
parents: 696
diff changeset
119 fwritef(stdout, "hits : %s\n", doppelgaenger);
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
120
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
121 return doppelgaenger > 0;
703
8dc894322ce8 repos maintenance
thomask
parents: 696
diff changeset
122 }