//Copyright (c) 1998 - 1999 Microsoft Corporation /************************************************************************* * * CMDLINE.C * * Command line parser for WinFrame User Configuration conversion utility. * * copyright notice: Copyright 1997, Citrix Systems Inc. * * Author: Bruce Fortune * * $Log: U:\NT\PRIVATE\UTILS\citrix\cnvrtuc\VCS\cmdline.c $ * * Rev 1.5 May 04 1998 18:04:00 bills * Fixes for MS bug #2109, OEM->ANSI conversion and moving strings to the rc file. * * Rev 1.4 03 Nov 1997 18:23:54 scottn * MultiUser-->Terminal Server * * Rev 1.3 22 Aug 1997 14:48:36 scottn * Change WinFrame to Windows NT MultiUser * * Rev 1.2 Jun 26 1997 18:17:24 billm * move to WF40 tree * * Rev 1.1 23 Jun 1997 16:17:22 butchd * update * * Rev 1.0 15 Feb 1997 09:51:48 brucef * Initial revision. * *************************************************************************/ /* * Includes */ #undef UNICODE #define UNICODE 1 #include #include #include #include #include #include // #include #include #include #include #include #include #include #include "resource.h" #include #if MAX_COMPUTERNAME_LENGTH > DOMAIN_LENGTH #define _COMPUTERNAME_LENGTH MAX_COMPUTER_NAME_LENGTH #else #define _COMPUTERNAME_LENGTH DOMAIN_LENGTH #endif /* * Global variables */ ULONG fHelp = FALSE; extern ULONG fAll; extern WCHAR UserName[ USERNAME_LENGTH + 1 ]; extern WCHAR DomainName[ _COMPUTERNAME_LENGTH + 1 ]; /* * Command line parsing strucutre */ TOKMAP ptm[] = { {L"/DOMAIN", TMFLAG_REQUIRED, TMFORM_STRING, DOMAIN_LENGTH, &DomainName }, {L"/USER", TMFLAG_OPTIONAL, TMFORM_STRING, USERNAME_LENGTH, &UserName }, {L"/ALL", TMFLAG_OPTIONAL, TMFORM_BOOLEAN, sizeof(ULONG), &fAll }, {L"/?", TMFLAG_OPTIONAL, TMFORM_BOOLEAN, sizeof(ULONG), &fHelp }, {0, 0, 0, 0, 0 } }; void Print( int nResourceID, ... ); BOOLEAN ProcessCommandLine( int argc, char *argv[] ) { WCHAR *CmdLine; WCHAR **argvW; NTSTATUS rc; LONG Error; int i; /* * We can't use argv[] because its always ANSI, regardless of UNICODE */ CmdLine = GetCommandLineW(); /* * Massage the new command line to look like an argv[] type * because ParseCommandLine() depends on this format */ argvW = (WCHAR **)malloc( sizeof(WCHAR *) * (argc+1) ); if( argvW == NULL ) return( FALSE ); argvW[0] = wcstok(CmdLine, L" "); for(i=1; i < argc; i++){ argvW[i] = wcstok(0, L" "); OEM2ANSIW(argvW[i], wcslen(argvW[i])); } argvW[argc] = NULL; /* * parse the cmd line without parsing the program name (argc-1, argv+1) */ rc = ParseCommandLine( argc-1, argvW+1, ptm, PCL_FLAG_NO_CLEAR_MEMORY ); /* * Check for error from ParseCommandLine */ if ( fHelp || rc || DomainName[0] == L'\0' || (fAll && UserName[0] != L'\0') || (!fAll && UserName[0] == L'\0') ) { Print(IDS_NEWLINE); Print(IDS_USAGE1, argv[0] ); Print(IDS_NEWLINE); Print(IDS_USAGE2, argv[0] ); Print(IDS_USAGE3); Print(IDS_USAGE4); Print(IDS_USAGE5); Print(IDS_USAGE6); Print(IDS_USAGE7); Print(IDS_NEWLINE); Print(IDS_USAGE8); Print(IDS_USAGE9); Print(IDS_NEWLINE); return(FALSE ); } return( TRUE ); }