eudora-mac/Bits/makesegs

1 line
1.1 KiB
Perl
Executable File

#!/usr/local/bin/perl
$cfile = $ARGV[0]; shift;
$hfile = $ARGV[0]; shift;
while (<>)
{
if (/^#pragma segment/)
{
chop;
split;
if ($_[2] ne "Main" && $_[2] ne "ObjSupport")
{
$seglist{$_[2]} = $_[2];
}
}
}
open(CFILE,">$cfile") || die "$cfile";
open(HFILE,">$hfile") || die "$hfile";
print CFILE "#include \"numcode.h\"\n";
foreach $seg (keys(%seglist))
{
$count++;
printf CFILE "#pragma segment %s\n",$seg;
printf CFILE "void __Seg%s(void);\n",$seg;
printf CFILE "void __Seg%s(void){}\n",$seg;
}
print CFILE <<"EOF";
#pragma segment Main
void UnloadSegments(void);
void UnloadSegments(void)
{
#if __profile__
return;
#endif
if (!CantLock && LockCode) return;
#ifdef THREADING_ON
/*
this is a short term solution to the stack corruption bug that occurs when segments that
a thread is using are unloaded
*/
if (GetNumBackgroundThreads ()) return;
#endif
EOF
foreach $seg (keys(%seglist))
{
printf CFILE " UnloadSeg(__Seg%s);\n",$seg;
}
print CFILE "}\n";
$count += 2; # code 1 and code 0
print HFILE "#ifndef NUM_CODE\n#define NUM_CODE $count\n#endif\n";