mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.1 KiB
136 lines
3.1 KiB
// mainline for slm and sadmin.
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
EnableAssert
|
|
|
|
#include "version.h"
|
|
|
|
extern ECMD *dnpecmd[];
|
|
|
|
extern char *szOp;
|
|
extern char szVersion[];
|
|
|
|
AD adGlobal; // initial ad
|
|
|
|
F fVerbose;
|
|
|
|
int SlmExceptionFilter(DWORD, PEXCEPTION_POINTERS);
|
|
|
|
void __cdecl
|
|
main(
|
|
int iszMac,
|
|
char *rgsz[]
|
|
)
|
|
{
|
|
__try {
|
|
InitErr();
|
|
|
|
// First argument is really command name; see execslm.asm. We
|
|
// may actually end up with a null argument if none were given.
|
|
// This case is tested in SetCmd().
|
|
|
|
iszMac--;
|
|
if (iszMac > 0)
|
|
rgsz++;
|
|
|
|
// Make outputs raw instead of cooked, to avoid CRCRLF line separation
|
|
_setmode(_fileno(stdout), O_BINARY);
|
|
_setmode(_fileno(stderr), O_BINARY);
|
|
|
|
InitPerms();
|
|
|
|
InitAd(&adGlobal);
|
|
SetCmd(&adGlobal, rgsz[0], dnpecmd);
|
|
|
|
InitPath();
|
|
GetRoot(&adGlobal);
|
|
GetUser(&adGlobal);
|
|
FLoadRc(&adGlobal);
|
|
|
|
ParseArgs(&adGlobal, rgsz, iszMac);
|
|
|
|
fVerbose = (adGlobal.flags&flagVerbose) != 0;
|
|
if (fVerbose)
|
|
PrErr(szVersion);
|
|
|
|
if (adGlobal.pecmd->fNeedProj && FEmptyNm(adGlobal.nmProj)) {
|
|
Error("must specify a project name\n");
|
|
Usage(&adGlobal);
|
|
}
|
|
|
|
InitQuery(adGlobal.flags&(flagForce|flagWindowsQuery));
|
|
|
|
ValidateProject(&adGlobal);
|
|
|
|
InitCookie(&adGlobal);
|
|
|
|
CheckForBreak();
|
|
|
|
FLoadIedCache(&adGlobal);
|
|
|
|
if (CheckCookie(&adGlobal) == 0)
|
|
if ((*adGlobal.pecmd->pfncFInit)(&adGlobal) &&
|
|
adGlobal.pecmd->pfncFDir != 0)
|
|
GlobArgs(&adGlobal);
|
|
|
|
if (adGlobal.pecmd->pfncFTerm != 0)
|
|
adGlobal.pecmd->pfncFTerm(&adGlobal);
|
|
|
|
TermCookie();
|
|
|
|
ExitSlm();
|
|
//NOTREACHED
|
|
|
|
} __except (SlmExceptionFilter(GetExceptionCode(), GetExceptionInformation())) {
|
|
fprintf(stderr, "SLM ERROR - UnHandled Exception %08x\n"
|
|
"SLM aborting.\n", GetExceptionCode());
|
|
cError++; // Make sure we term with non-zero error.
|
|
ExitSlm();
|
|
}
|
|
}
|
|
|
|
|
|
// trim sz of path (and .exe for dos) and look for name in dnpecmd. Sets
|
|
// pecmd and szOp.
|
|
void
|
|
SetCmd(
|
|
AD *pad,
|
|
char *sz,
|
|
ECMD **dnpecmd
|
|
)
|
|
{
|
|
register char *pch;
|
|
register ECMD **ppecmd;
|
|
|
|
// take off path descripton
|
|
if ((pch = rindex(sz, ':')) != 0)
|
|
sz = pch + 1;
|
|
|
|
if ((pch = rindex(sz, '\\')) != 0)
|
|
sz = pch + 1;
|
|
|
|
if ((pch = rindex(sz, '/')) != 0)
|
|
sz = pch + 1;
|
|
|
|
// take off .exe
|
|
if ((pch = rindex(sz, '.')) != 0)
|
|
*pch = '\0';
|
|
|
|
for (ppecmd = dnpecmd; *ppecmd && SzCmp(sz, (*ppecmd)->szCmd) != 0; ppecmd++)
|
|
;
|
|
|
|
if (*ppecmd) {
|
|
pad->pecmd = *ppecmd;
|
|
szOp = pad->pecmd->szCmd;
|
|
} else {
|
|
szOp = sz;
|
|
Error("unknown command name; available commands:\n");
|
|
for (ppecmd = dnpecmd; *ppecmd; ppecmd++) {
|
|
if ((*ppecmd)->szDesc != 0)
|
|
PrErr("%-10s %s\n", (*ppecmd)->szCmd, (*ppecmd)->szDesc);
|
|
}
|
|
|
|
ExitSlm();
|
|
}
|
|
}
|