1 line
1.1 KiB
Perl
Executable File
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";
|