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.
 
 
 
 
 
 

856 lines
33 KiB

// Sadmin: slm system administration.
//
// Sadmin lumps together many of the bookeeping functions required from
// time to time in SLM, but which should not be incorporated into the
// slm system itself. These functions fall into two categories, clean-up
// and modification.
#include "precomp.h"
#pragma hdrstop
#include <version.h>
EnableAssert
char * szOp = "sadmin";
#if (rup < 10)
#define ruppad "000"
#elif (rup< 100)
#define ruppad "00"
#elif (rup < 1000)
#define ruppad "0"
#else
#define ruppad
#endif
#define VERSION_STR2(a,b,c) " " #a "." #b "." ruppad #c
#define VERSION_STR(a,b,c) VERSION_STR2(a,b,c)
const char szVersion[] =
"Microsoft (R) Source Library Administrator (SADMIN) Version" VERSION_STR(rmj, rmm, rup)
"\nCopyright (C) Microsoft Corp 1985-1994. All rights reserved.\n\n";
// ----------------------------- RENAME --------------------------------
FT rgftRen[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'c', atComment, 0 },
{ 0, 0, 0 }
};
ECMD ecmdRen = {
cmdRename,
"rename",
"%s [-?&fhvw] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] file newnm\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c specify a comment for the rename operation.\r\n"
"file the file to be renamed (cannot be a directory)\r\n"
"newnm the new name for the file (the file version number will increase by 1).\r\n",
rgftRen,
atFiles,
fTrue,
fglTopDown | fglFiles,
FRenInit,
FRenDir,
0,
"- rename a file"
};
// ----------------------------- LSSRC --------------------------------
FT rgftLss[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atOptPat, flagAll },
{ 'r', atOptPat, flagRecursive },
{ 'c', atComment, 0 },
{ 'l', atFlag, flagLssL },
{ 0, 0, 0 }
};
ECMD ecmdLss = {
cmdLssrc,
"lssrc",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] [file(s)]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) process all project files in your enlistment. If a pattern is\r\n"
" included after the -a, only processes files that match the pattern.\r\n"
"-r (recursive) processes all files in a given directory and in every\r\n"
" subdirectory beneath it. If a pattern is given, matches the pattern.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c specifies a comment to be placed at the start of each line of output\r\n"
" (useful for generating batch files).\r\n"
"file(s) source files to list the paths for\r\n",
rgftLss,
atFiles,
fTrue,
fglTopDown,
FLssInit,
FLssDir,
0,
"- print pathnames to source files"
};
// ----------------------------- SETTYPE --------------------------------
FT rgftType[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atOptPat, flagAll },
{ 'r', atOptPat, flagRecursive },
{ 'c', atComment, 0 },
{ 't', atKind, 0 },
{ 0, 0, 0 }
};
ECMD ecmdType = {
cmdSettype,
"settype",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] -t b|t|u|w [file(s)]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) process all project files in your enlistment. If a pattern is\r\n"
" included after the -a, only processes files that match the pattern.\r\n"
"-r (recursive) processes all files in a given directory and in every\r\n"
" subdirectory beneath it. If a pattern is given, matches the pattern.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c supplies a comment for the file-type changes.\r\n"
"-t specifies the new type for the file(s): b = binary, t = text, u =\r\n"
" unrecoverable, w = unicode.\r\n"
"file(s) specifies the file(s) to change to the new type\r\n",
rgftType,
atFiles,
fTrue,
fglTopDown | fglFiles,
FSetTInit,
FSetTDir,
0,
"- change a file's type"
};
// ----------------------------- LOCK and UNLOCK ---------------------------
FT rgftAFRVSP[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 0, 0, 0 }
};
ECMD ecmdLock = {
cmdLock,
"lock",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftAFRVSP,
atNone,
fTrue,
fglTopDown,
FLockInit,
FLockDir,
0,
"- lock a project directory"
};
ECMD ecmdUnlock = {
cmdUnlock,
"unlock",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftAFRVSP,
atNone,
fTrue,
fglTopDown,
FUnlkInit,
FUnlkDir,
0,
"- unlock a project directory"
};
// ----------------------------- ROBUST --------------------------------
ECMD ecmdRobust = {
cmdRobust,
"robust",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]] on|off\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftAFRVSP,
atSz,
fTrue,
fglTopDown,
FRobustInit,
FRobustDir,
0,
"- turns on or off additional status file integrity checking"
};
// ----------------------------- TIDY -------------------------------- */
FT rgftTidy[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 'c', atFlag, flagTidyCheckEd },
{ 0, 0, 0 }
};
ECMD ecmdTidy = {
cmdTidy,
"tidy",
"%s [-?&fhvwarc] [-s SLM-location] [-p projname[/subdir]]\n"
" [file(s)]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-c (check) checks that the users enlisted in subdirectories are all the\r\n"
" same as the users enlisted in the main project directory (useful only\r\n"
" with the -a or -r flags).\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"file(s) specifies the file or files to tidy.\r\n",
rgftTidy,
atFiles,
fTrue,
fglTopDown,
FTidyInit,
FTidyDir,
0,
"- tidy a project"
};
// ----------------------------- DUMP and UNDUMP ------------------------
ECMD ecmdDump = {
cmdDump,
"dump",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [dump-file]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"dump-file a file into which the readable form of the status file should be\r\n"
" dumped (if no file name is included, the information will be displayed\r\n"
" on the screen).\r\n",
rgftAFRVSP,
atOptSz,
fTrue,
fglTopDown,
FDumpInit,
FDumpDir,
0,
"- print a human readable representation of the status file"
};
ECMD ecmdUndump = {
cmdUndump,
"undump",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [dump-file]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"dump-file a file into which the readable form of the status file has been\r\n"
" dumped using \"sadmin dump\" and which has then been edited to correct\r\n"
" corruption [CAUTION!!!! Only an SLM expert should attempt to edit a\r\n"
" dump file! It is easy to damage a project by incorrect editing!]\r\n",
rgftAFRVSP,
atSz,
fTrue,
fglTopDown,
FUndInit,
FUndDir,
0,
"- restore a status file from a dump created by \"sadmin dump\""
};
// ----------------------------- LISTED --------------------------------
ECMD ecmdListEd = {
cmdListed,
"listed",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftAFRVSP,
atNone,
fTrue,
fglTopDown,
FListInit,
FListDir,
0,
"- shows information about enlistments in the project"
};
// ----------------------------- DELED ---------------------------
ECMD ecmdEdDel = {
cmdDeled,
"deled",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" enlisted-directory\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"enlisted-directory\r\n"
" specify the directory to remove from the status file, or the logon\r\n"
" name of the user whose enlisted directory or directories are\r\n"
" to be deleted, or (caution!) a number corresponding to the number of\r\n"
" the enlistment in the \"sadmin listed\" output.\r\n",
rgftAFRVSP,
atSz,
fTrue,
fglTopDown,
FDelEdInit,
FDelEdDir,
0,
"- delete an enlisted directory"
};
// ----------------------------- LOWERCASE ---------------------------
ECMD ecmdLower = {
cmdLowercase,
"lowercase",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [file(s)]\n\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) process all project files in your enlistment (no patterns).\r\n"
"-r (recursive) processes all files in a given directory and in every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"file(s) files for which to change all user, path and file names to lowercase.\r\n",
rgftAFRVSP,
atFiles,
fTrue,
fglTopDown,
FLowerInit,
FLowerDir,
0,
"- change all file, user, and enlisted directory names to lower-case"
};
// ----------------------------- RUNSCRIPT --------------------------------
ECMD ecmdRunScript = {
cmdRunscript,
"runscript",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftAFRVSP,
atNone,
fTrue,
fglTopDown,
FScrptInit,
FScrptDir,
0,
"- run any script files for this project directory",
};
// ----------------------------- EXFILE --------------------------------
ECMD ecmdExFile = {
cmdExfile,
"exfile",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" file(s)\n\n"
"CAUTION! ***** THIS COMMAND SHOULD BE USED WITH EXTREME CARE! ***** CAUTION!\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"file(s) the files to be expunged from the project (as if they never existed)\r\n",
rgftAFRVSP,
atFiles,
fTrue,
fglTopDown | fglNoExist,
FExFiInit,
FExFiDir,
0,
"- removes a file, its diff archive and all associated log entries"
};
// ----------------------------- DELDIFF -------------------------------- */
FT rgftDlDiff[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 0, 0, 0 }
};
ECMD ecmdDlDiff = {
cmdDeldiff,
"deldiff",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [file(s)]\n\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n",
rgftDlDiff,
atFiles,
fTrue,
fglTopDown | fglNoExist,
FDlDfInit,
FDlDfDir,
0,
"- delete diff files"
};
// ----------------------------- TRUNCLOG --------------------------------
FT rgftTruncLog[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ '#', atCountRange, 0 },
{ 't', atTimeRange, 0 },
{ 0, 0, 0 }
};
ECMD ecmdTruncLog = {
cmdTrunclog,
"trunclog",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" -t time/version [time/version]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-t specifies a range of times or project versions within which to remove\r\n"
" log entries. If only one is included, the second is assumed to be the\r\n"
" present; otherwise, the first is the start and the second is the end.\r\n",
rgftTruncLog,
atNone,
fTrue,
fglTopDown,
FTrLogInit,
FTrLogDir,
0,
"- truncates the log"
};
// ----------------------------- COMMENT --------------------------------
FT rgftComment[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 't', atTimeRange, 0 },
{ '#', atCountRange, 0 },
{ 'c', atComment, 0 },
{ 0, 0, 0 }
};
ECMD ecmdComment = {
cmdComment,
"comment",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-t time/version [time/version]] [-# [#]] [-c comment] [file(s)]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-s -p use these flags to specify the project's network location (as -s\r\n"
" \\\\server\\share) and the project name (-p project).\r\n"
"-a (all) process all project files in your enlistment (no patterns).\r\n"
"-r (recursive) processes all files in a given directory and in every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-t specifies a range of times or project versions within which to replace\r\n"
" comments. If only one is included, the second is assumed to be the\r\n"
" present; otherwise, the first is the start and the second is the end.\r\n"
"-# [#] specifies how many versions to change comments for, counting back from\r\n"
" the present moment (-3 changes comments for the 3 most recent logged\r\n"
" events). Two numbers specify a range (-14 10 changes comments for 5\r\n"
" events starting at the 14th most recent and ending at the 10th).\r\n"
"-c specifies a single comment with which to replace all targeted comments\r\n"
"file(s) if you include one or more file specifications, only comments relating\r\n"
" to those files are changed; otherwise, all comments are changed\r\n",
rgftComment,
atFiles,
fTrue,
fglTopDown | fglDirsToo | fglNoExist,
FComInit,
FComDir,
0,
"- change previous comments"
};
// ----------------------------- RELEASE --------------------------------
FT rgftRelease[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 'c', atComment, 0 },
{ 'n', atPn, 0 },
{ 0, 0, 0 }
};
ECMD ecmdRelease = {
cmdRelease,
"release",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] [-n project-version-name] [[+#].[+#][.[+#]]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it (no patterns).\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c specifies a comment for all files being released\r\n"
"-n (name) sets the release version name (for example, \"beta2\")\r\n"
"#.#.# sets the release number; each of the # fields can have either no entry,\r\n"
" indicating no change from the previous release, or a number between 0\r\n"
" and 9,999, or a number preceded by a plus sign (+), indicating that the\r\n"
" previous release value should increase by that number.\r\n",
rgftRelease,
atPvDirs,
fTrue,
fglTopDown,
FRelInit,
FRelDir,
0,
"- release current version"
};
// ----------------------------- SETPV --------------------------------
FT rgftNameSet[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atFlag, flagAll },
{ 'r', atFlag, flagRecursive },
{ 'c', atComment, 0 },
{ 'n', atPn, 0 },
{ 0, 0, 0 }
};
ECMD ecmdNameSet = {
cmdSetpv,
"setpv",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] [-n project-version-number] [[#].[#].[#]]\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-a (all) applies the command to all directories of the project.\r\n"
"-r (recursive) applies the command to a given directory and to every\r\n"
" subdirectory beneath it.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c supplies a comment for the project version assignment.\r\n"
"-n sets the project version name (for example, \"beta2\")\r\n"
"#.#.# sets the project number; each of the # fields can have either no entry,\r\n"
" indicating no change from the previous release, or a number between 0\r\n"
" and 99, or a number preceded by a plus sign (+), indicating that the\r\n"
" previous release value should increase by that number.\r\n",
rgftNameSet,
atPvDirs,
fTrue,
fglTopDown,
FSetPvInit,
FSetPvDir,
0,
"- set project version"
};
// ----------------------------- SETFV --------------------------------
FT rgftSetFv[] = {
{ '&', atFlag, flagErrToOut },
{ 'f', atFlag, flagForce },
{ 'h', atHelp, 0 },
{ '?', atHelp, 0 },
{ 'v', atFlag, flagVerbose },
{ 'w', atWindows, flagWindowsQuery },
{ 's', atSlmRoot, 0 },
{ 'p', atProjOptSubDir, 0 },
{ 'a', atOptPat, flagAll },
{ 'r', atOptPat, flagRecursive },
{ 'c', atComment, 0 },
{ 0, 0, 0 }
};
ECMD ecmdFVSet = {
cmdSetfv,
"setfv",
"%s [-?&fhvwar] [-s SLM-location] [-p projname[/subdir]]\n"
" [-c comment] file-version-number file(s)\n",
"-v (verbose) SLM tells you what is happening as the command proceeds.\r\n"
"-w (Windows) prompts using a dialog box instead of the console.\r\n"
"-& redirects stderr to stdout, so that all SLM messages can be redirected\r\n"
" together (to a file, or to a printer, etc.)\r\n"
"-a (all) process all project files in your enlistment. If a pattern is\r\n"
" included after the -a, only processes files that match the pattern.\r\n"
"-r (recursive) processes all files in a given directory and in every\r\n"
" subdirectory beneath it. If a pattern is given, matches the pattern.\r\n"
"-s use this flag to specify the network location of the SLM directory\r\n"
" where the project is located (for example: -s \\\\server\\share).\r\n"
"-p use this flag to enter the name of the project, and optionally to\r\n"
" narrow the focus of the command to a subdirectory within the project.\r\n"
"-c supplies a comment for the file version setting\r\n"
"file-version-number specifies the new file version number for the file(s).\r\n"
"file(s) specifies the file(s) which should be assigned the new version number.\r\n",
rgftSetFv,
atFvFiles,
fTrue,
fglTopDown | fglFiles,
FSetFVInit,
FSetFVDir,
0,
"- set file version number"
};
ECMD *dnpecmd[] = {
&ecmdComment,
&ecmdDlDiff,
&ecmdEdDel,
&ecmdDump,
&ecmdExFile,
&ecmdListEd,
&ecmdLock,
&ecmdLower,
&ecmdLss,
&ecmdRelease,
&ecmdRen,
&ecmdRobust,
&ecmdRunScript,
&ecmdFVSet,
&ecmdNameSet,
&ecmdType,
&ecmdTidy,
&ecmdTruncLog,
&ecmdUndump,
&ecmdUnlock,
0
};