eudora-mac/Bits/buildaudit

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";