1 /*
2 * Copyright 2005, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 * Axel Dörfler, axeld@pinc-software.de
7 */
8
9
10 #include <Entry.h>
11 #include <Path.h>
12 #include <Query.h>
13 #include <Volume.h>
14
15 #include <fs_info.h>
16
17 #include <ctype.h>
18 #include <stdlib.h>
19 #include <stdio.h>
20 #include <string.h>
21
22
23 extern const char* __progname;
24
25
26 void
skip_white_space(char * & line)27 skip_white_space(char*& line)
28 {
29 while (isspace(line[0]))
30 line++;
31 }
32
33
34 void
get_name(char * line)35 get_name(char* line)
36 {
37 while (isalnum(line[0]) || line[0] == '_') {
38 line++;
39 }
40
41 line[0] = '\0';
42 }
43
44
45 void
print_code(BPath & path,int32 code)46 print_code(BPath& path, int32 code)
47 {
48 FILE* file = fopen(path.Path(), "r");
49 if (file == NULL)
50 return;
51
52 int32 lineNumber = 0;
53 char buffer[4096];
54
55 while (fgets(buffer, sizeof(buffer), file) != NULL) {
56 char* line = buffer;
57 skip_white_space(line);
58
59 if (strncmp(line, "AS_", 3))
60 continue;
61
62 if (++lineNumber != code)
63 continue;
64
65 get_name(line);
66 printf("code %ld: %s\n", lineNumber, line);
67 fclose(file);
68 return;
69 }
70
71 printf("unknown code %ld!\n", code);
72 fclose(file);
73 }
74
75
76 int
main(int argc,char ** argv)77 main(int argc, char** argv)
78 {
79 if (argc < 2) {
80 fprintf(stderr, "usage: %s <message-code>\n", __progname);
81 return -1;
82 }
83
84 int32 number = atol(argv[1]);
85
86 BQuery query;
87 query.SetPredicate("name=ServerProtocol.h");
88
89 // search on current volume only
90 dev_t device = dev_for_path(".");
91 BVolume volume(device);
92
93 query.SetVolume(&volume);
94 query.Fetch();
95
96 status_t status;
97 BEntry entry;
98 while ((status = query.GetNextEntry(&entry)) == B_OK) {
99 BPath path(&entry);
100 puts(path.Path());
101 if (strstr(path.Path(), "headers/private/app/ServerProtocol.h") != NULL) {
102 print_code(path, number);
103 break;
104 }
105 }
106
107 if (status != B_OK) {
108 fprintf(stderr, "%s: could not find ServerProtocol.h", __progname);
109 return -1;
110 }
111 return 0;
112 }
113