/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project. All
................................................ contributions are welcome.
....Copyright(C).1995.Melvin.Smith.............. Enjoy.
------------------------------------------------------------------------------
Melvin Smith (aka Fusion) msmith@hom.net
MUD++ development mailing list mudpp@van.ml.org
------------------------------------------------------------------------------
mudln.cpp
*/
#include "config.h"
#include "string.h"
#include "io.h"
#include "asmobjfile.h"
char String::_argbuf[ 1024 ];
char * String::_argptr;
char * String::_argnext;
StringRep * String::repEmpty = new StringRep("");
int main( int argc, char ** argv )
{
int i;
int imagecount = 0;
char buf[BUF];
AsmObjFile * aofin;
AsmObjFile * aofout;
InputFile * inf;
OutputFile * outf;
if ( argc < 3 )
{
Cout << "Usage: mudln imagefile objfile1 [objfile2 ...]" << endl;
return 1;
}
char * imagename = argv[1];
int count = argc-2;
char ** names = &argv[2];
sprintf( buf, "%s.%d.mo", imagename, imagecount );
outf = new OutputFile( buf );
if ( !outf )
{
Cout << "Cannot open " << buf << " for writing" <<endl;
return 1;
}
aofout = new AsmObjFile();
for ( i=0; i < count; i++ )
{
inf = new InputFile( names[i] );
if ( !(*inf) )
{
Cout << "Cannot find " << names[i] << endl;
delete inf;
continue;
}
Cout << "Linking " << names[i] << endl;
aofin = new AsmObjFile();
aofin->readFrom(*inf);
if ( !aofout->canLink(*aofin) )
{
aofout->writeTo(*outf);
imagecount++;
sprintf( buf, "%s.%d.mo", imagename, imagecount );
delete outf;
outf = new OutputFile( buf );
if ( !(*outf) )
{
Cout << "Cannot open " << buf << " for writing" <<endl;
return 1;
}
delete aofout;
aofout = new AsmObjFile();
}
aofout->link(*aofin);
delete aofin;
delete inf;
}
aofout->writeTo( *outf );
delete aofout;
delete outf;
return 0;
}