Updated PCI IDs to latest snapshot.
[tangerine.git] / compiler / c_lib / source / lib_source / genfd.awk
blob879567278c7077b4d108e2be5ca4ececff369875
1 BEGIN {
2 maxlvo = 0;
3 stderr="/dev/stderr";
5 file = "libdefs.h";
7 while ((getline < file) > 0)
9 if ($2 == "BASENAME")
11 lib = $3;
12 basename = $3;
14 else if ($2 == "LIBBASE")
16 libbase = $3;
18 else if ($2 == "NT_TYPE")
20 if ($3 == "NT_RESOURCE")
22 firstlvo = 0;
24 else if ($3 == "NT_DEVICE")
26 firstlvo = 6;
28 else
30 firstlvo = 4;
35 # Only for non-resources
36 if( firstlvo >= 4 )
38 f[1] = "open";
39 f[2] = "close";
40 f[3] = "expunge";
41 f[4] = "null";
43 verbose_pattern = libbase"[ \\t]*,[ \\t]*[0-9]+[ \\t]*,[ \\t]*"basename;
45 #print verbose_pattern > "/dev/stderr";
47 if (maxlvo < firstlvo)
48 maxlvo = firstlvo;
50 /AROS_LH(QUAD)?[0-9]/ {
51 line=$0;
52 sub(/[ \t]*$/,"",line);
53 if (match(line,/[a-zA-Z0-9_]+,$/))
55 name=substr(line,RSTART,RLENGTH-1);
56 args="";
57 regs="";
58 #print "/* FOUND " name " */";
61 /AROS_LHA/ {
62 if (match($0,/,[^)]+/))
64 line=substr($0,RSTART+1,RLENGTH-1);
65 gsub(/[ \t]+/,"",line);
66 match(line,/[^,]+/);
67 if (args!="")
68 args=args","substr(line,RSTART,RLENGTH);
69 else
70 args=substr(line,RSTART,RLENGTH);
71 if (regs!="")
72 regs=regs","substr(line,RSTART+RLENGTH+1);
73 else
74 regs=substr(line,RSTART+RLENGTH+1);
77 /LIBBASE[ \t]*,[ \t]*[0-9]+/ || $0 ~ verbose_pattern {
78 #print "/* LOC " $0 " */"
79 match ($0, /,[ \t]*[0-9]+/);
80 line=substr($0,RSTART,RLENGTH);
81 #print "line2="line
82 sub (/,[ \t]*/,"",line);
83 #print "line3="line
84 lvo=int(line);
86 if (lvo == 0)
87 print "Illegal LVO 0 in "FN
88 else if (lvo <= firstlvo)
89 f[lvo] = "";
91 #print "lvo="lvo;
93 if (f[lvo] != "")
94 print "Error: lvo "lvo" is used by "f[lvo]" and "name" in "FN >> stderr;
96 f[lvo] = name;
97 if (lvo > maxlvo)
98 maxlvo = lvo;
99 a_args[lvo] = args;
100 gsub(/,/,"/",regs);
101 a_regs[lvo] = tolower(regs);
103 /^\/\*AROS/ {
104 if ($2 == "alias") {
105 a[lvo] = $3;
106 f[lvo] = $4;
109 END {
110 print "##base _"basename"Base";
111 print "##bias " ((firstlvo+1)*6)
112 print "##public"
114 if (maxlvo <= firstlvo)
116 print "Error: No matching functions found" > "/dev/stderr";
117 exit (10);
120 for (t=(firstlvo+1); t<=maxlvo; t++)
122 if (t in f)
123 print f[t]"("a_args[t]")("a_regs[t]")"
124 else
125 print lib"Private"t"()()"
128 print "##end";