Windows NT 4.0 source code leak
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

// 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();
}
}