📄 cmdline.c
字号:
/* Copyright (C) 2004 TrueCrypt Team, truecrypt.org
This product uses components written by Paul Le Roux <pleroux@swprofessionals.com> */
#include "TCdefs.h"
#include <malloc.h>
#include <ctype.h>
#include "cmdline.h"
#include "resource.h"
#include "crypto.h"
#include "apidrvr.h"
#include "dlgcode.h"
/* Except in response to the WM_INITDIALOG message, the dialog box procedure
should return nonzero if it processes the message, and zero if it does
not. - see DialogProc */
BOOL WINAPI
CommandHelpDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (lParam); /* remove warning */
if (wParam); /* remove warning */
switch (msg)
{
case WM_INITDIALOG:
{
char * tmp = err_malloc(8192);
char tmp2[256];
argumentspec *as;
int i;
SetDefaultUserFont (hwndDlg);
as = (argumentspec*) lParam;
*tmp = 0;
for (i = 0; i < as->arg_cnt; i ++)
{
sprintf(tmp2, "%s %s\n", as->args[i].long_name,
as->args[i].short_name);
strcat(tmp,tmp2);
}
SetWindowText (GetDlgItem (hwndDlg, IDC_COMMANDHELP_TEXT), (char*) tmp);
return 1;
}
case WM_COMMAND:
EndDialog (hwndDlg, IDOK);
return 1;
case WM_CLOSE:
EndDialog (hwndDlg, 0);
return 1;
}
return 0;
}
int
Win32CommandLine (char *lpszCommandLine, char ***lpszArgs)
{
int i = 0, k = 0, x = 0, nValid = TRUE;
int nLen = strlen (lpszCommandLine);
int nArrSize = 16;
char szTmp[256];
*lpszArgs = malloc (sizeof (char *)* nArrSize);
if (*lpszArgs == NULL)
return 0;
while (i < nLen)
{
if (lpszCommandLine[i] == ' ')
{
if (k > 0)
{
szTmp[k] = 0;
(*lpszArgs)[x] = _strdup (szTmp);
if ((*lpszArgs)[x] == NULL)
{
free (*lpszArgs);
return 0;
}
x++;
k = 0;
if (x == nArrSize)
{
break;
}
}
i++;
continue;
}
if (lpszCommandLine[i] == '"')
{
i++;
while (i < nLen)
{
if (lpszCommandLine[i] == '"')
break;
if (k < sizeof (szTmp))
szTmp[k++] = lpszCommandLine[i++];
else
{
free (*lpszArgs);
return 0;
}
}
if (lpszCommandLine[i] != '"')
{
nValid = FALSE;
break;
}
}
else
{
if (k < sizeof (szTmp))
szTmp[k++] = lpszCommandLine[i];
else
{
free (*lpszArgs);
return 0;
}
}
i++;
}
if (nValid == FALSE)
{
free (*lpszArgs);
return 0;
}
else if (k > 0)
{
szTmp[k] = 0;
(*lpszArgs)[x] = _strdup (szTmp);
if ((*lpszArgs)[x] == NULL)
{
free (*lpszArgs);
return 0;
}
x++;
k = 0;
}
if (!x)
{
free (*lpszArgs);
return 0;
}
return x;
}
int
GetArgSepPosOffset (char *lpszArgument)
{
if (lpszArgument[0] == '/')
return 1;
else if (lpszArgument[0] == '-' && lpszArgument[1] == '-')
return 2;
else if (lpszArgument[0] == '-')
return 1;
else
return 0;
}
int
GetArgumentID (argumentspec *as, char *lpszArgument, int *nArgPos)
{
char szTmp[256];
int i;
i = strlen (lpszArgument);
szTmp[i] = 0;
while (--i >= 0)
{
szTmp[i] = (char) tolower (lpszArgument[i]);
}
for (i = 0; i < as->arg_cnt; i++)
{
size_t k;
k = strlen (as->args[i].long_name);
if (memcmp (as->args[i].long_name, szTmp, k * sizeof (char)) == 0)
{
int x;
for (x = i + 1; x < as->arg_cnt; x++)
{
size_t m;
m = strlen (as->args[x].long_name);
if (memcmp (as->args[x].long_name, szTmp, m * sizeof (char)) == 0)
{
break;
}
}
if (x == as->arg_cnt)
{
if (strlen (lpszArgument) != k)
*nArgPos = k;
else
*nArgPos = 0;
return as->args[i].short_name[1];
}
}
}
for (i = 0; i < as->arg_cnt; i++)
{
size_t k;
k = strlen (as->args[i].short_name);
if (memcmp (as->args[i].short_name, szTmp, k * sizeof (char)) == 0)
{
int x;
for (x = i + 1; x < as->arg_cnt; x++)
{
size_t m;
m = strlen (as->args[x].short_name);
if (memcmp (as->args[x].short_name, szTmp, m * sizeof (char)) == 0)
{
break;
}
}
if (x == as->arg_cnt)
{
if (strlen (lpszArgument) != k)
*nArgPos = k;
else
*nArgPos = 0;
return as->args[i].short_name[1];
}
}
}
return -1;
}
int
GetArgumentValue (char **lpszCommandLineArgs, int nArgPos, int *nArgIdx,
int nNoCommandLineArgs, char *lpszValue, int nValueSize)
{
*lpszValue = 0;
if (nArgPos)
{
/* Handles the case of no space between parameter code and
value */
memcpy (lpszValue, &lpszCommandLineArgs[*nArgIdx][nArgPos], nValueSize * sizeof (char));
lpszValue[nValueSize - 1] = 0;
return HAS_ARGUMENT;
}
else if (*nArgIdx + 1 != nNoCommandLineArgs)
{
int x = GetArgSepPosOffset (lpszCommandLineArgs[*nArgIdx + 1]);
if (x == 0)
{
/* Handles the case of space between parameter code
and value */
memcpy (lpszValue, &lpszCommandLineArgs[*nArgIdx + 1][x], nValueSize * sizeof (char));
lpszValue[nValueSize - 1] = 0;
(*nArgIdx)++;
return HAS_ARGUMENT;
}
}
return HAS_NO_ARGUMENT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -