1 line
2.0 KiB
Plaintext
Executable File
1 line
2.0 KiB
Plaintext
Executable File
#
|
|
# boring setup
|
|
#
|
|
$hfile = ":include:auditdefs.h";
|
|
$rfile = "audit.r";
|
|
$cfile = "auditdefs.c";
|
|
$rid = 19600;
|
|
|
|
open(RFILE,">$rfile") || die;
|
|
open(HFILE,">$hfile") || die;
|
|
open(CFILE,">$cfile") || die;
|
|
|
|
#
|
|
# write initial junk
|
|
#
|
|
print RFILE <<'EOF';
|
|
resource 'STR#' (19600,purgeable) {{
|
|
EOF
|
|
|
|
print HFILE <<'EOF';
|
|
#ifndef AUDITDEFS_H
|
|
#define AUDITDEFS_H
|
|
|
|
EOF
|
|
|
|
print CFILE <<'EOF';
|
|
extern OSErr Audit(short auditType,...);
|
|
extern OSErr AuditFlush(Boolean force);
|
|
|
|
EOF
|
|
|
|
#
|
|
# finally, process the table
|
|
#
|
|
while(<>)
|
|
{
|
|
if (/^#/) {next;}
|
|
if (/^=/)
|
|
{
|
|
; # currently we don't do anything with the categories; they're just documentation for now
|
|
}
|
|
else
|
|
{
|
|
#
|
|
# UINT4 crap...
|
|
#
|
|
s/UINT4/uLong/g;
|
|
|
|
#
|
|
# does this line want a flush?
|
|
#
|
|
if (s/^\+//) {$flush = "false";} # gentle flush
|
|
elsif (s/^!//) {$flush = "true";} #hard flush
|
|
else {$flush = "";}
|
|
|
|
#
|
|
# do basic split
|
|
#
|
|
chop;
|
|
($name,$id,$cat,$fmt,$fnargs) = split(/\t/);
|
|
if ($id > $maxID) {$maxID = $id;}
|
|
|
|
#
|
|
# write audit type to .h file, save prototype for later
|
|
#
|
|
print HFILE "#define kAudit$name $id //$cmnt\n";
|
|
$proto .= "OSErr Audit$name($fnargs);\n";
|
|
$cats .= "$cat,";
|
|
|
|
#
|
|
# remove type declarations from args
|
|
#
|
|
@fnargs = split(',',$fnargs);
|
|
$auditArgs = "";
|
|
foreach $fna (@fnargs)
|
|
{
|
|
$fna =~ s/ *$//;
|
|
$fna =~ s/.* //;
|
|
$auditArgs .= $fna . ',';
|
|
}
|
|
chop $auditArgs; # remove trailing comma
|
|
|
|
#
|
|
# write function to .c file
|
|
#
|
|
if ($flush ne "")
|
|
{
|
|
print CFILE <<"EOF";
|
|
|
|
OSErr Audit$name($fnargs)
|
|
{
|
|
OSErr err = Audit(kAudit$name,$auditArgs);
|
|
if (!err) err = AuditFlush($flush);
|
|
return err;
|
|
}
|
|
EOF
|
|
}
|
|
else
|
|
{
|
|
print CFILE <<"EOF";
|
|
|
|
OSErr Audit$name($fnargs)
|
|
{
|
|
return Audit(kAudit$name,$auditArgs);
|
|
}
|
|
EOF
|
|
}
|
|
|
|
#
|
|
# write format string to .r file
|
|
#
|
|
print RFILE qq|"$fmt\\n",\n|;
|
|
}
|
|
}
|
|
|
|
#
|
|
# finish up
|
|
#
|
|
print HFILE "$proto\nextern short AuditCategories[];\n#define MaxAuditType $maxID\n\n#endif //AUDITDEFS_H\n";
|
|
print RFILE "}};\n";
|
|
chop $cats; print CFILE "short AuditCategories[] = {$cats};\n";
|