reactos/reactos/base/shell/cmd/window.c
Jeffrey Morlan c49ed3a82c Remove the "LPTSTR cmd" argument to internal commands; there's no need for a command to be told its own name. It was only used in two places:
- a hack in cmd_mkdir that was already obsolete a decade ago
- to distinguish "echo" from "echo.", but that is the wrong way to implement this anyway. There's nothing particularly special about the period, "echo" is just one of those commands that is lenient about where its parameters begin, and when it echos a line, the first character (usually a space, but in the case of "echo." a period) is skipped.

svn path=/trunk/; revision=35647
2008-08-25 23:22:03 +00:00

229 lines
3.8 KiB
C

/* $Id$
*
* WINDOW.C - activate & window internal commands.
*
* clone from 4nt activate command
*
* 10 Sep 1999 (Paolo Pantaleo)
* started (window command in WINDOW.c)
*
* 29 Sep 1999 (Paolo Pantaleo)
* activate and window in a single file using mainly the same code
* (nice size optimization :)
*
* 30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
* Remove all hardcode string to En.rc
*/
#include <precomp.h>
#if ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) )
#define A_MIN 0x01
#define A_MAX 0x02
#define A_RESTORE 0x04
#define A_POS 0x08
#define A_SIZE 0x10
#define A_CLOSE 0x20
/*service funciton to perform actions on windows
param is a string to parse for options/actions
hWnd is the handle of window on wich perform actions
*/
static INT ServiceActivate (LPTSTR param, HWND hWnd)
{
LPTSTR *p = 0, p_tmp;
INT argc = 0, i;
INT iAction = 0;
LPTSTR title = 0;
WINDOWPLACEMENT wp;
RECT pos;
LPTSTR tmp;
if (*param)
p = split(param, &argc, FALSE);
for (i = 0; i < argc; i++)
{
p_tmp = p[i];
if (*p_tmp == _T('/'))
p_tmp++;
if (_tcsicmp(p_tmp, _T("min")) == 0)
{
iAction |= A_MIN;
continue;
}
if (_tcsicmp(p_tmp, _T("max")) == 0)
{
iAction |= A_MAX;
continue;
}
if (_tcsicmp(p_tmp, _T("restore")) == 0)
{
iAction |= A_RESTORE;
continue;
}
if (_tcsicmp(p_tmp, _T("close")) == 0)
{
iAction |= A_CLOSE;
continue;
}
if (_tcsnicmp(p_tmp, _T("pos"), 3) == 0)
{
iAction |= A_POS;
tmp = p_tmp+3;
if (*tmp == _T('='))
tmp++;
pos.left= _ttoi(tmp);
if(!(tmp=_tcschr(tmp, _T(','))))
{
error_invalid_parameter_format(p[i]);
freep(p);
return 1;
}
pos.top = _ttoi (++tmp);
if(!(tmp=_tcschr(tmp, _T(','))))
{
error_invalid_parameter_format(p[i]);
freep(p);
return 1;
}
pos.right = _ttoi(++tmp) + pos.left;
if (!(tmp = _tcschr(tmp, _T(','))))
{
error_invalid_parameter_format(p[i]);
freep(p);
return 1;
}
pos.bottom = _ttoi(++tmp) + pos.top;
continue;
}
if (_tcsnicmp(p_tmp, _T("size"), 4)==0)
{
iAction |=A_SIZE;
continue;
}
/* none of them=window title */
if (title)
{
error_invalid_parameter_format(p[i]);
freep(p);
return 1;
}
if (p_tmp[0] == _T('"'))
{
title = (p_tmp + 1);
*_tcschr(p_tmp + 1, _T('"')) = 0;
continue;
}
title = p_tmp;
}
if (title)
SetWindowText(hWnd, title);
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);
if (iAction & A_POS)
wp.rcNormalPosition = pos;
if (iAction & A_MIN)
wp.showCmd = SW_MINIMIZE;
if (iAction & A_MAX)
wp.showCmd = SW_SHOWMAXIMIZED;
/*if no actions are specified default is SW_RESTORE*/
if ((iAction & A_RESTORE) || (!iAction))
wp.showCmd = SW_RESTORE;
if (iAction & A_CLOSE)
{
FIXME("!!!FIXME: CLOSE Not implemented!!!\n");
}
wp.length = sizeof(WINDOWPLACEMENT);
SetWindowPlacement(hWnd, &wp);
if (p)
freep(p);
return 0;
}
INT CommandWindow (LPTSTR param)
{
HWND hwnd;
if (_tcsncmp (param, _T("/?"), 2) == 0)
{
ConOutResPaging(TRUE,STRING_WINDOW_HELP1);
return 0;
}
hwnd = GetConsoleWindow();
Sleep(0);
return ServiceActivate(param, hwnd);
}
INT CommandActivate (LPTSTR param)
{
HWND hwnd;
LPTSTR *arg;
INT argc;
if (_tcsncmp (param, _T("/?"), 2) == 0)
{
ConOutResPaging(TRUE,STRING_WINDOW_HELP2);
return 0;
}
if(!(*param))
return 1;
/*Split the user input into array*/
arg = split (param, &argc, FALSE);
if(argc < 2)
{
if(arg != NULL)
freep(arg);
}
hwnd = FindWindow(NULL, arg[0]);
if (hwnd == NULL)
{
if(arg != NULL)
freep(arg);
ConErrResPuts(STRING_WINDOW_ERROR1);
return 1;
}
if(arg != NULL)
freep(arg);
return ServiceActivate(param, hwnd);
}
#endif /* ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) ) */