1 // Copyright (c) <2012> <Leif Asbrink>
2 //
3 // Permission is hereby granted, free of charge, to any person
4 // obtaining a copy of this software and associated documentation
5 // files (the "Software"), to deal in the Software without restriction,
6 // including without limitation the rights to use, copy, modify,
7 // merge, publish, distribute, sublicense, and/or sell copies of
8 // the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19 // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
21 // OR OTHER DEALINGS IN THE SOFTWARE.
22 
23 
24 #include <stdio.h>
25 #include <string.h>
26 #include <stdlib.h>
27 
28 
main(int argc,char * argv[])29 int main(int argc, char *argv[])
30 {
31 FILE *file;
32 int i,j,k,m;
33 int flags;
34 if(argc < 3)
35   {
36 nothing:;
37   printf("0");
38   return 0;
39   }
40 i=0;
41 flags=0;
42 next:;
43 if(argv[2][i] == 0)
44   {
45   if(argv[1][0] == '0')
46     {
47     printf("%d",flags);
48     }
49   return 1;
50   }
51 if(argv[2][i  ] == '.' &&
52    argv[2][i+1] == 's' &&
53    argv[2][i+2] == 'o')
54   {
55   m=i+3;
56   j=i+2;
57   k=j;
58   while(argv[2][j+1] != '/' && argv[2][j+1] !=0)j++;
59   while(argv[2][k-1] != ' ' && argv[2][k-1] != 10 && k>0)k--;
60 findlinux:;
61   if(argv[2][i  ] == ' ' &&
62      argv[2][i+1] == 'E' &&
63      argv[2][i+2] == 'L' &&
64      argv[2][i+3] == 'F' &&
65      argv[2][i+4] == ' ' &&
66      argv[2][i+5] == '6' &&
67      argv[2][i+6] == '4')
68     {
69     while(argv[2][k-1] != ' ' && argv[2][k-1] != 10 && k>0)k--;
70     if(argv[1][0] == '0')
71       {
72       flags |= 2;
73       }
74     if(argv[1][0] == '2')
75       {
76       j=m-3;
77       while(argv[2][j-1] != '/' && j>4)j--;
78       j--;
79       while(argv[2][j-1] != '/' && j>0)j--;
80       if(argv[2][j-1] == '/')
81         {
82         if(argv[2][i-3] == 'X' &&
83            argv[2][i-2] == '1' &&
84            argv[2][i-1] == '1')
85           {
86           sprintf(&argv[2][j],"include");
87           }
88         else
89           {
90           if(argv[2][j-5] == '/' &&
91              argv[2][j-4] == 'l' &&
92              argv[2][j-3] == 'i' &&
93              argv[2][j-2] == 'b')
94             {
95             j-=4;
96             }
97           sprintf(&argv[2][j],"include");
98           }
99         printf("-I%s ",&argv[2][k]);
100         }
101       i+=6;
102       goto next;
103       }
104     if(argv[1][0] == '4')
105       {
106       argv[2][m]=0;
107       printf("%s",&argv[2][k]);
108       return 0;
109       }
110     }
111   if((argv[2][i  ] == ' ' &&
112       argv[2][i+1] == 'E' &&
113       argv[2][i+2] == 'L' &&
114       argv[2][i+3] == 'F' &&
115       argv[2][i+4] == ' ' &&
116       argv[2][i+5] == '3' &&
117       argv[2][i+6] == '2') ||
118      (argv[2][i  ] == ' ' &&
119       argv[2][i+1] == 'A' &&
120       argv[2][i+2] == 'S' &&
121       argv[2][i+3] == 'C' &&
122       argv[2][i+4] == 'I' &&
123       argv[2][i+5] == 'I' &&
124       argv[2][i+6] == ' ')
125       )
126     {
127     if(argv[1][0] == '0')
128       {
129       flags |= 1;
130       }
131     if(argv[1][0] == '1')
132       {
133       j=m-3;
134       while(argv[2][j-1] != '/' && j>4)j--;
135       j--;
136       while(argv[2][j-1] != '/' && j>0)j--;
137       if(argv[2][j-1] == '/')
138         {
139         if(argv[2][i-7] == 'X' &&
140            argv[2][i-6] == '1' &&
141            argv[2][i-5] == '1')
142           {
143           sprintf(&argv[2][j],"include");
144           }
145         else
146           {
147           if(argv[2][j-5] == '/' &&
148              argv[2][j-4] == 'l' &&
149              argv[2][j-3] == 'i' &&
150              argv[2][j-2] == 'b')
151             {
152             j-=4;
153             }
154           sprintf(&argv[2][j],"include");
155           }
156         printf("-I%s ",&argv[2][k]);
157         }
158       i+=6;
159       goto next;
160       }
161     if(argv[1][0] == '3')
162       {
163       argv[2][m]=0;
164       printf("%s",&argv[2][k]);
165       return 0;
166       }
167     }
168   if(i < j-6)
169     {
170     i++;
171     goto findlinux;
172     }
173   else
174     {
175     i=j;
176     }
177   }
178 if(argv[2][i  ] == '.' &&
179    argv[2][i+1] == 'd' &&
180    argv[2][i+2] == 'y' &&
181    argv[2][i+3] == 'l' &&
182    argv[2][i+4] == 'i' &&
183    argv[2][i+5] == 'b')
184   {
185   m=i+6;
186   j=i+5;
187   k=j;
188   while(argv[2][j+1] != '/' && argv[2][j+1] !=0)j++;
189   while(argv[2][k-1] != ' ' && argv[2][k-1] != 10 && k>0)k--;
190 findmac:;
191   if(argv[2][i  ] == 'x' &&
192      argv[2][i+1] == '8' &&
193      argv[2][i+2] == '6' &&
194      argv[2][i+3] == '_' &&
195      argv[2][i+4] == '6' &&
196      argv[2][i+5] == '4')
197     {
198     if(argv[1][0] == '0')
199       {
200       flags |= 2;
201       }
202     if(argv[1][0] == '2')
203       {
204       j=m-6;
205       while(argv[2][j-1] != '/' && j>4)j--;
206       j--;
207       while(argv[2][j-1] != '/' && j>0)j--;
208       if(argv[2][j-1] == '/')
209         {
210         if(argv[2][i-3] == 'X' &&
211            argv[2][i-2] == '1' &&
212            argv[2][i-1] == '1')
213           {
214           sprintf(&argv[2][j],"include");
215           }
216         else
217           {
218           if(argv[2][j-5] == '/' &&
219              argv[2][j-4] == 'l' &&
220              argv[2][j-3] == 'i' &&
221              argv[2][j-2] == 'b')
222             {
223             j-=4;
224             }
225           sprintf(&argv[2][j],"include");
226           }
227         printf("-I%s ",&argv[2][k]);
228         }
229       i+=6;
230       goto next;
231       }
232     if(argv[1][0] == '4')
233       {
234       argv[2][m]=0;
235       printf("%s",&argv[2][k]);
236       return 0;
237       }
238     }
239   if(argv[2][i  ] == 'i' &&
240      argv[2][i+1] == '3' &&
241      argv[2][i+2] == '8' &&
242      argv[2][i+3] == '6')
243     {
244     if(argv[1][0] == '0')
245       {
246       flags |= 1;
247       }
248     if(argv[1][0] == '1')
249       {
250       j=m-6;
251       while(argv[2][j-1] != '/' && j>4)j--;
252       j--;
253       while(argv[2][j-1] != '/' && j>0)j--;
254       if(argv[2][j-1] == '/')
255         {
256         if(argv[2][i-3] == 'X' &&
257            argv[2][i-2] == '1' &&
258            argv[2][i-1] == '1')
259           {
260           sprintf(&argv[2][j],"include");
261           }
262         else
263           {
264           if(argv[2][j-5] == '/' &&
265              argv[2][j-4] == 'l' &&
266              argv[2][j-3] == 'i' &&
267              argv[2][j-2] == 'b')
268             {
269             j-=4;
270             }
271           sprintf(&argv[2][j],"include");
272           }
273         printf("-I%s ",&argv[2][k]);
274         }
275       return 0;
276       }
277     if(argv[1][0] == '3')
278       {
279       argv[2][m]=0;
280       printf("%s",&argv[2][k]);
281       return 0;
282       }
283     }
284   if(i < j-4)
285     {
286     i++;
287     goto findmac;
288     }
289   else
290     {
291     i=j;
292     }
293   }
294 i++;
295 goto next;
296 }
297