167 lines
3.6 KiB
C
167 lines
3.6 KiB
C
|
//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 <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#include <windows.h>
|
||
|
#include <winbase.h>
|
||
|
#include <winerror.h>
|
||
|
// #include <citrix\cxstatus.h>
|
||
|
#include <winsta.h>
|
||
|
#include <icadd.h>
|
||
|
#include <icaapi.h>
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
#include <utilsub.h>
|
||
|
|
||
|
#include "resource.h"
|
||
|
#include <printfoa.h>
|
||
|
|
||
|
#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 );
|
||
|
}
|