Replaced all awk scripts with perl scripts since it is more likely that

1999-02-18  Martin Baulig  <martin@home-of-linux.org>

	* */*.awk: Replaced all awk scripts with perl scripts since it is
	more likely that people have a working perl interpreter than GNU
	awk on their system.
This commit is contained in:
Martin Baulig
1999-02-18 09:54:18 +00:00
committed by Martin Baulig
parent 00f0791ebd
commit 2deb3c30c4
11 changed files with 718 additions and 548 deletions
+3 -3
View File
@@ -12,11 +12,11 @@ libgtop_la_LDFLAGS = $(LT_VERSION_INFO)
BUILT_SOURCES = lib.c
lib.c: lib.awk $(top_builddir)/config.h $(top_srcdir)/features.def
$(AWK) -f $(srcdir)/lib.awk < $(top_srcdir)/features.def > lib-t
lib.c: lib.pl $(top_builddir)/config.h $(top_srcdir)/features.def
$(PERL) $(srcdir)/lib.pl < $(top_srcdir)/features.def > lib-t
mv lib-t lib.c
EXTRA_DIST = lib.awk
EXTRA_DIST = lib.pl
CLEANFILES = lib.c
-167
View File
@@ -1,167 +0,0 @@
BEGIN {
print "/* lib.c */";
print "/* This is a generated file. Please modify `lib.awk' */";
print "";
print "#include <glibtop.h>";
print "#include <glibtop/open.h>";
print "";
print "#include <glibtop/sysdeps.h>";
print "#include <glibtop/union.h>";
print "";
print "#include <glibtop/command.h>";
print "";
print "/* Some required fields are missing. */";
print "";
print "static void";
print "_glibtop_missing_feature (glibtop *server, const char *feature,";
print "\t\t\t const u_int64_t present, u_int64_t *required)";
print "{";
print "\tswitch (server->error_method) {";
print "\tcase GLIBTOP_ERROR_METHOD_WARN_ONCE:";
print "\t\t*required &= present;";
print "\tcase GLIBTOP_ERROR_METHOD_WARN:";
print "\t\tglibtop_warn_r (server,";
print "\t\t\t\t_(\"glibtop_get_%s (): Client requested \"";
print "\t\t\t\t \"field mask %05Lx, but only have %05Lx.\"),";
print "\t\t\t\t feature, required, present);";
print "\t\tbreak;";
print "\tcase GLIBTOP_ERROR_METHOD_ABORT:";
print "\t\tglibtop_error_r (server,";
print "\t\t\t\t _(\"glibtop_get_%s (): Client requested \"";
print "\t\t\t\t \"field mask %05x, but only have %05x.\"),";
print "\t\t\t\t feature, required, present);";
print "\t\tbreak;";
print "\t}";
print "}";
print "";
print "/* Library functions. */";
print "";
convert["long"] = "int64_t";
convert["ulong"] = "u_int64_t";
convert["pid_t"] = "pid_t";
convert["int"] = "int";
convert["ushort"] = "unsigned short";
convert["unsigned"] = "unsigned";
}
function output(line) {
split (line, line_fields, /\|/);
retval = line_fields[1];
feature = line_fields[2];
param_def = line_fields[4];
orig = feature; sub(/^@/,"",feature);
space = feature; gsub(/./," ",space);
print retval;
if (retval !~ /^void$/) {
prefix = "retval = ";
prefix_space = " ";
} else {
prefix = "";
prefix_space = "";
}
if (param_def == "string") {
call_param = ", "line_fields[5];
param_decl = ",\n "space" const char *"line_fields[5];
send_ptr = "\n\tconst void *send_ptr = "line_fields[5]";";
send_size = "\n\tconst size_t send_size =\n\t\tstrlen ("line_fields[5]") + 1;";
} else {
call_param = "";
param_decl = "";
send_size = "";
send_ptr = "";
nr_params = split (param_def, params, /:/);
for (param = 1; param <= nr_params; param++) {
list = params[param];
type = params[param];
sub(/\(.*/, "", type);
sub(/^.*\(/, "", list); sub(/\)$/, "", list);
count = split (list, fields, /,/);
for (field = 1; field <= count; field++) {
if (param_decl == "")
param_decl = ",\n "space" ";
else
param_decl = param_decl", ";
param_decl = param_decl""convert[type]" "fields[field];
call_param = call_param", "fields[field];
if (send_ptr == "")
send_ptr = "\n\tconst void *send_ptr = &"fields[field]";";
if (send_size == "")
send_size = "\n\tconst size_t send_size =\n\t\t";
else
send_size = send_size" + ";
send_size = send_size"sizeof ("fields[field]")";
}
}
if (send_size != "")
send_size = send_size";";
else
send_size = "\n\tconst size_t send_size = 0;";
if (send_ptr == "")
send_ptr = "\n\tconst void *send_ptr = NULL;";
}
print "glibtop_get_"feature"_l (glibtop *server, glibtop_"feature" *buf"param_decl")";
print "{"send_ptr""send_size;
if (retval !~ /^void$/)
print "\t"retval" retval = ("retval") 0;";
print "";
print "\tglibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_"toupper(feature)"), 0);";
print "";
print "\t/* If neccessary, we ask the server for the requested";
print "\t * feature. If not, we call the sysdeps function. */";
print "";
print "\tif ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&";
print "\t (server->features & (1 << GLIBTOP_SYSDEPS_"toupper(feature)")))";
print "\t{";
print "\t\t"prefix"glibtop_call_l (server, GLIBTOP_CMND_"toupper(feature)",";
print "\t\t\t\t"prefix_space"send_size, send_ptr,";
print "\t\t\t\t"prefix_space"sizeof (glibtop_"feature"), buf);";
print "\t} else {";
if (orig !~ /^@/)
print "#if (!GLIBTOP_SUID_"toupper(feature)")";
print "\t\t"prefix"glibtop_get_"feature"_s (server, buf"call_param");";
if (orig !~ /^@/) {
print "#else";
print "\t\terrno = ENOSYS;";
print "\t\tglibtop_error_io_r (server, \"glibtop_get_"feature"\");";
print "#endif";
}
print "\t}";
print "";
print "\t/* Make sure that all required fields are present. */";
print "";
print "\tif (buf->flags & server->required."feature")";
print "\t\t_glibtop_missing_feature (server, \""feature"\", buf->flags,";
print "\t\t\t\t\t &server->required."feature");";
if (retval !~ /^void$/) {
print "\n\t/* Now we can return. */";
print "\n\treturn retval;";
}
print "}";
print "";
}
/^[^#]/ { output($0) }
Executable
+227
View File
@@ -0,0 +1,227 @@
#!/usr/bin/perl
$[ = 1; # set array base to 1
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
sub toupper {
local($_) = @_;
tr/a-z/A-Z/;
return $_;
}
sub tolower {
local($_) = @_;
tr/A-Z/a-z/;
return $_;
}
print '/* lib.c */';
print "/* This is a generated file. Please modify `lib.pl' */";
print '';
print '#include <glibtop.h>';
print '#include <glibtop/open.h>';
print '';
print '#include <glibtop/sysdeps.h>';
print '#include <glibtop/union.h>';
print '';
print '#include <glibtop/command.h>';
print '';
print '/* Some required fields are missing. */';
print '';
print 'static void';
print '_glibtop_missing_feature (glibtop *server, const char *feature,';
print "\t\t\t const u_int64_t present, u_int64_t *required)";
print '{';
print "\tswitch (server->error_method) {";
print "\tcase GLIBTOP_ERROR_METHOD_WARN_ONCE:";
print "\t\t*required &= present;";
print "\tcase GLIBTOP_ERROR_METHOD_WARN:";
print "\t\tglibtop_warn_r (server,";
print "\t\t\t\t_(\"glibtop_get_%s (): Client requested \"";
print "\t\t\t\t \"field mask %05Lx, but only have %05Lx.\"),";
print "\t\t\t\t feature, required, present);";
print "\t\tbreak;";
print "\tcase GLIBTOP_ERROR_METHOD_ABORT:";
print "\t\tglibtop_error_r (server,";
print "\t\t\t\t _(\"glibtop_get_%s (): Client requested \"";
print "\t\t\t\t \"field mask %05x, but only have %05x.\"),";
print "\t\t\t\t feature, required, present);";
print "\t\tbreak;";
print "\t}";
print '}';
print '';
print '/* Library functions. */';
print '';
$convert{'long'} = 'int64_t';
$convert{'ulong'} = 'u_int64_t';
$convert{'pid_t'} = 'pid_t';
$convert{'int'} = 'int';
$convert{'ushort'} = 'unsigned short';
$convert{'unsigned'} = 'unsigned';
while (<>) {
chop; # strip record separator
if (/^[^#]/) {
&output($_);
}
}
sub output {
local($line) = @_;
@line_fields = split(/\|/, $line, 9999);
$retval = $line_fields[1];
$feature = $line_fields[2];
$param_def = $line_fields[4];
$orig = $feature;
$feature =~ s/^@//;
$space = $feature;
$space =~ s/./ /g;
print $retval;
if ($retval !~ /^void$/) {
$prefix = 'retval = ';
$prefix_space = ' ';
}
else {
$prefix = '';
$prefix_space = '';
}
if ($param_def eq 'string') {
$call_param = ', ' . $line_fields[5];
$param_decl = ",\n " . $space . ' const char *' .
$line_fields[5];
$send_ptr = "\n\tconst void *send_ptr = " . $line_fields[5] . ';';
$send_size = "\n\tconst size_t send_size =\n\t\tstrlen (" .
$line_fields[5] . ') + 1;';
}
else {
$call_param = '';
$param_decl = '';
$send_size = '';
$send_ptr = '';
$nr_params = (@params = split(/:/, $param_def, 9999));
for ($param = 1; $param <= $nr_params; $param++) {
$list = $params[$param];
$type = $params[$param];
$type =~ s/\(.*//;
$list =~ s/^.*\(//;
$list =~ s/\)$//;
$count = (@fields = split(/,/, $list, 9999));
for ($field = 1; $field <= $count; $field++) {
if ($param_decl eq '') {
$param_decl = ",\n " . $space . ' ';
}
else {
$param_decl = $param_decl . ', ';
}
$param_decl = $param_decl . '' . $convert{$type} . ' ' .
$fields[$field];
$call_param = $call_param . ', ' . $fields[$field];
if ($send_ptr eq '') {
$send_ptr = "\n\tconst void *send_ptr = &" .
$fields[$field] . ';';
}
if ($send_size eq '') {
$send_size = "\n\tconst size_t send_size =\n\t\t";
}
else {
$send_size = $send_size . ' + ';
}
$send_size = $send_size . 'sizeof (' . $fields[$field] . ')';
}
}
if ($send_size ne '') {
$send_size = $send_size . ';';
}
else {
$send_size = "\n\tconst size_t send_size = 0;";
}
if ($send_ptr eq '') {
$send_ptr = "\n\tconst void *send_ptr = NULL;";
}
}
print 'glibtop_get_' . $feature . '_l (glibtop *server, glibtop_' .
$feature . ' *buf' . $param_decl . ')';
print '{' . $send_ptr . '' . $send_size;
if ($retval !~ /^void$/) {
print "\t" . $retval . ' retval = (' . $retval . ') 0;';
}
print '';
print "\tglibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_" .
&toupper($feature) . '), 0);';
print '';
print "\t/* If neccessary, we ask the server for the requested";
print "\t * feature. If not, we call the sysdeps function. */";
print '';
print "\tif ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&";
print "\t (server->features & (1 << GLIBTOP_SYSDEPS_" .
&toupper($feature) . ')))';
print "\t{";
print "\t\t" . $prefix . 'glibtop_call_l (server, GLIBTOP_CMND_' .
&toupper($feature) . ',';
print "\t\t\t\t" . $prefix_space . 'send_size, send_ptr,';
print "\t\t\t\t" . $prefix_space . 'sizeof (glibtop_' . $feature .
'), buf);';
print "\t} else {";
if ($orig !~ /^@/) {
print '#if (!GLIBTOP_SUID_' . &toupper($feature) . ')';
}
print "\t\t" . $prefix . 'glibtop_get_' . $feature . '_s (server, buf' .
$call_param . ');';
if ($orig !~ /^@/) {
print '#else';
print "\t\terrno = ENOSYS;";
print "\t\tglibtop_error_io_r (server, \"glibtop_get_" . $feature .
"\");";
print '#endif';
}
print "\t}";
print '';
print "\t/* Make sure that all required fields are present. */";
print '';
print "\tif (buf->flags & server->required." . $feature . ')';
print "\t\t_glibtop_missing_feature (server, \"" . $feature .
"\", buf->flags,";
print "\t\t\t\t\t &server->required." . $feature . ');';
if ($retval !~ /^void$/) {
print "\n\t/* Now we can return. */";
print "\n\treturn retval;";
}
print '}';
print '';
}