Rewrite the system clock to use timestamps instead of calendar time
[monolithium.git] / syscalls.awk
1 BEGIN {
2     FS = ",[ ]*";
3
4     if (!wrappers_file || !enum_file || !table_file)
5     {
6         print "Error: One or more filenames have not been specified.";
7         exit 1;
8     }
9
10     print "/* This file has been automatically generated */" > enum_file;
11     print "" >> enum_file;
12     print "typedef enum" >> enum_file;
13     print "{" >> enum_file;
14
15     print "/* This file has been automatically generated */" > table_file;
16     print "" >> table_file;
17     print "const void *service_table[] =" >> table_file;
18     print "{" >> table_file
19
20     print "/* This file has been automatically generated */" > wrappers_file;
21     print "" >> wrappers_file;
22     print "#include <sdk/monolithium.h>" >> wrappers_file;
23     print "" >> wrappers_file;
24 }
25
26 END {
27     if (enum_file && table_file && wrappers_file) {
28         print "" >> enum_file;
29         print "    SERVICE_COUNT" >> enum_file;
30         print "} syscall_number_t;" >> enum_file;
31
32         print "};" >> table_file;
33     }
34 }
35
36 /sysret_t syscall_[a-zA-Z0-9_]+\(.*\);/ {
37     print substr($0, 1, length - 1) >> wrappers_file;
38     print "{" >> wrappers_file;
39
40     match($0, /\(.*\)/);
41     name = substr($0, 10, RSTART - 10);
42
43     print "    &" name "," >> table_file;
44     print "    " toupper(name) "," >> enum_file;
45     printf "    return syscall(" toupper(name) >> wrappers_file;
46
47     $0 = substr($0, RSTART + 1, RLENGTH - 2);
48
49     if ($0 != "void") {
50         for (i = 1; i <= NF; i++) {
51             match($i, /[a-zA-Z0-9_]*$/);
52             printf ", " substr($i, RSTART) >> wrappers_file;
53         }
54     }
55
56     print ");" >> wrappers_file;
57     print "}" >> wrappers_file;
58     print "" >> wrappers_file;
59 }