mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 13:02:59 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
0
base/applications/cmdutils/.gitignore
vendored
Normal file
0
base/applications/cmdutils/.gitignore
vendored
Normal file
26
base/applications/cmdutils/CMakeLists.txt
Normal file
26
base/applications/cmdutils/CMakeLists.txt
Normal file
|
@ -0,0 +1,26 @@
|
|||
add_subdirectory(at)
|
||||
add_subdirectory(chcp)
|
||||
add_subdirectory(clip)
|
||||
add_subdirectory(comp)
|
||||
add_subdirectory(cscript)
|
||||
add_subdirectory(dbgprint)
|
||||
add_subdirectory(doskey)
|
||||
add_subdirectory(eventcreate)
|
||||
add_subdirectory(find)
|
||||
add_subdirectory(fsutil)
|
||||
add_subdirectory(help)
|
||||
add_subdirectory(hostname)
|
||||
add_subdirectory(lodctr)
|
||||
add_subdirectory(mode)
|
||||
add_subdirectory(mofcomp)
|
||||
add_subdirectory(more)
|
||||
add_subdirectory(reg)
|
||||
add_subdirectory(schtasks)
|
||||
add_subdirectory(sort)
|
||||
add_subdirectory(taskkill)
|
||||
add_subdirectory(timeout)
|
||||
add_subdirectory(tree)
|
||||
add_subdirectory(whoami)
|
||||
add_subdirectory(wmic)
|
||||
add_subdirectory(wscript)
|
||||
add_subdirectory(xcopy)
|
8
base/applications/cmdutils/at/CMakeLists.txt
Normal file
8
base/applications/cmdutils/at/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
|
||||
add_executable(at at.c at.rc)
|
||||
set_module_type(at win32cui UNICODE)
|
||||
target_link_libraries(at conutils ${PSEH_LIB})
|
||||
add_importlibs(at msvcrt kernel32 user32 netapi32)
|
||||
add_cd_file(TARGET at DESTINATION reactos/system32 FOR all)
|
936
base/applications/cmdutils/at/at.c
Normal file
936
base/applications/cmdutils/at/at.c
Normal file
|
@ -0,0 +1,936 @@
|
|||
/*
|
||||
* PROJECT: ReactOS AT utility
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/at/at.c
|
||||
* PURPOSE: ReactOS AT utility
|
||||
* PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <winnls.h>
|
||||
#include <lm.h>
|
||||
|
||||
#include <conutils.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
|
||||
PWSTR pszDaysOfWeekArray[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
FreeDaysOfWeekArray(VOID)
|
||||
{
|
||||
INT i;
|
||||
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
if (pszDaysOfWeekArray[i] != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, pszDaysOfWeekArray[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
InitDaysOfWeekArray(VOID)
|
||||
{
|
||||
INT i, nLength;
|
||||
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
nLength = GetLocaleInfo(LOCALE_USER_DEFAULT,
|
||||
LOCALE_SABBREVDAYNAME1 + i,
|
||||
NULL,
|
||||
0);
|
||||
|
||||
pszDaysOfWeekArray[i] = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
nLength * sizeof(WCHAR));
|
||||
if (pszDaysOfWeekArray[i] == NULL)
|
||||
{
|
||||
FreeDaysOfWeekArray();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GetLocaleInfo(LOCALE_USER_DEFAULT,
|
||||
LOCALE_SABBREVDAYNAME1 + i,
|
||||
pszDaysOfWeekArray[i],
|
||||
nLength);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
ParseTime(
|
||||
PWSTR pszTime,
|
||||
PULONG pulJobHour,
|
||||
PULONG pulJobMinute)
|
||||
{
|
||||
WCHAR szHour[3], szMinute[3], szAmPm[5];
|
||||
PWSTR startPtr, endPtr;
|
||||
ULONG ulHour = 0, ulMinute = 0;
|
||||
INT nLength;
|
||||
|
||||
if (pszTime == NULL)
|
||||
return FALSE;
|
||||
|
||||
startPtr = pszTime;
|
||||
|
||||
/* Extract the hour string */
|
||||
nLength = 0;
|
||||
while (*startPtr != L'\0' && iswdigit(*startPtr))
|
||||
{
|
||||
if (nLength >= 2)
|
||||
return FALSE;
|
||||
|
||||
szHour[nLength] = *startPtr;
|
||||
nLength++;
|
||||
|
||||
startPtr++;
|
||||
}
|
||||
szHour[nLength] = L'\0';
|
||||
|
||||
/* Check for a valid time separator */
|
||||
if (*startPtr != L':')
|
||||
return FALSE;
|
||||
|
||||
/* Skip the time separator */
|
||||
startPtr++;
|
||||
|
||||
/* Extract the minute string */
|
||||
nLength = 0;
|
||||
while (*startPtr != L'\0' && iswdigit(*startPtr))
|
||||
{
|
||||
if (nLength >= 2)
|
||||
return FALSE;
|
||||
|
||||
szMinute[nLength] = *startPtr;
|
||||
nLength++;
|
||||
|
||||
startPtr++;
|
||||
}
|
||||
szMinute[nLength] = L'\0';
|
||||
|
||||
/* Extract the optional AM/PM indicator string */
|
||||
nLength = 0;
|
||||
while (*startPtr != L'\0')
|
||||
{
|
||||
if (nLength >= 4)
|
||||
return FALSE;
|
||||
|
||||
if (!iswspace(*startPtr))
|
||||
{
|
||||
szAmPm[nLength] = *startPtr;
|
||||
nLength++;
|
||||
}
|
||||
|
||||
startPtr++;
|
||||
}
|
||||
szAmPm[nLength] = L'\0';
|
||||
|
||||
/* Convert the hour string */
|
||||
ulHour = wcstoul(szHour, &endPtr, 10);
|
||||
if (ulHour == 0 && *endPtr != UNICODE_NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Convert the minute string */
|
||||
ulMinute = wcstoul(szMinute, &endPtr, 10);
|
||||
if (ulMinute == 0 && *endPtr != UNICODE_NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Check for valid AM/PM indicator */
|
||||
if (wcslen(szAmPm) > 0 &&
|
||||
_wcsicmp(szAmPm, L"a") != 0 &&
|
||||
_wcsicmp(szAmPm, L"am") != 0 &&
|
||||
_wcsicmp(szAmPm, L"p") != 0 &&
|
||||
_wcsicmp(szAmPm, L"pm") != 0)
|
||||
return FALSE;
|
||||
|
||||
/* Check for the valid minute range [0-59] */
|
||||
if (ulMinute > 59)
|
||||
return FALSE;
|
||||
|
||||
if (wcslen(szAmPm) > 0)
|
||||
{
|
||||
/* 12 hour time format */
|
||||
|
||||
/* Check for the valid hour range [1-12] */
|
||||
if (ulHour == 0 || ulHour > 12)
|
||||
return FALSE;
|
||||
|
||||
/* Convert 12 hour format to 24 hour format */
|
||||
if (_wcsicmp(szAmPm, L"a") == 0 ||
|
||||
_wcsicmp(szAmPm, L"am") == 0)
|
||||
{
|
||||
if (ulHour == 12)
|
||||
ulHour = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ulHour >= 1 && ulHour <= 11)
|
||||
ulHour += 12;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 24 hour time format */
|
||||
|
||||
/* Check for the valid hour range [0-23] */
|
||||
if (ulHour > 23)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (pulJobHour != NULL)
|
||||
*pulJobHour = ulHour;
|
||||
|
||||
if (pulJobMinute != NULL)
|
||||
*pulJobMinute = ulMinute;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
ParseId(
|
||||
PWSTR pszId,
|
||||
PULONG pulId)
|
||||
{
|
||||
PWSTR startPtr, endPtr;
|
||||
ULONG ulId = 0;
|
||||
BOOL bResult = FALSE;
|
||||
|
||||
startPtr = pszId;
|
||||
endPtr = NULL;
|
||||
ulId = wcstoul(startPtr, &endPtr, 10);
|
||||
if (endPtr != NULL && *endPtr == UNICODE_NULL)
|
||||
{
|
||||
bResult = TRUE;
|
||||
|
||||
if (pulId != NULL)
|
||||
*pulId = ulId;
|
||||
}
|
||||
|
||||
return bResult;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
ParseDaysOfMonth(
|
||||
PWSTR pszBuffer,
|
||||
PULONG pulDaysOfMonth)
|
||||
{
|
||||
PWSTR startPtr, endPtr;
|
||||
ULONG ulValue;
|
||||
|
||||
if (wcslen(pszBuffer) == 0)
|
||||
return FALSE;
|
||||
|
||||
startPtr = pszBuffer;
|
||||
endPtr = NULL;
|
||||
for (;;)
|
||||
{
|
||||
ulValue = wcstoul(startPtr, &endPtr, 10);
|
||||
if (ulValue == 0)
|
||||
return FALSE;
|
||||
|
||||
if (ulValue > 0 && ulValue <= 31)
|
||||
*pulDaysOfMonth |= (1 << (ulValue - 1));
|
||||
|
||||
if (endPtr != NULL && *endPtr == UNICODE_NULL)
|
||||
return TRUE;
|
||||
|
||||
startPtr = endPtr + 1;
|
||||
endPtr = NULL;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
ParseDaysOfWeek(
|
||||
PWSTR pszBuffer,
|
||||
PUCHAR pucDaysOfWeek)
|
||||
{
|
||||
PWSTR startPtr, endPtr;
|
||||
INT nLength, i;
|
||||
|
||||
if (wcslen(pszBuffer) == 0)
|
||||
return FALSE;
|
||||
|
||||
startPtr = pszBuffer;
|
||||
endPtr = NULL;
|
||||
for (;;)
|
||||
{
|
||||
endPtr = wcschr(startPtr, L',');
|
||||
if (endPtr == NULL)
|
||||
nLength = wcslen(startPtr);
|
||||
else
|
||||
nLength = (INT)((ULONG_PTR)endPtr - (ULONG_PTR)startPtr) / sizeof(WCHAR);
|
||||
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
if (nLength == wcslen(pszDaysOfWeekArray[i]) &&
|
||||
_wcsnicmp(startPtr, pszDaysOfWeekArray[i], nLength) == 0)
|
||||
{
|
||||
*pucDaysOfWeek |= (1 << i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (endPtr == NULL)
|
||||
return TRUE;
|
||||
|
||||
startPtr = endPtr + 1;
|
||||
endPtr = NULL;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
PrintErrorMessage(
|
||||
DWORD dwError)
|
||||
{
|
||||
PWSTR pszBuffer = NULL;
|
||||
|
||||
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL,
|
||||
dwError,
|
||||
0,
|
||||
(PWSTR)&pszBuffer,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
ConPrintf(StdErr, L"%s\n", pszBuffer);
|
||||
LocalFree(pszBuffer);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
PrintHorizontalLine(VOID)
|
||||
{
|
||||
WCHAR szBuffer[80];
|
||||
INT i;
|
||||
|
||||
for (i = 0; i < 79; i++)
|
||||
szBuffer[i] = L'-';
|
||||
szBuffer[79] = UNICODE_NULL;
|
||||
|
||||
ConPrintf(StdOut, L"%s\n", szBuffer);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOL
|
||||
Confirm(VOID)
|
||||
{
|
||||
HINSTANCE hInstance;
|
||||
WCHAR szYesBuffer[8];
|
||||
WCHAR szNoBuffer[8];
|
||||
WCHAR szInput[80];
|
||||
DWORD dwOldMode;
|
||||
DWORD dwRead = 0;
|
||||
BOOL ret = FALSE;
|
||||
HANDLE hFile;
|
||||
|
||||
hInstance = GetModuleHandleW(NULL);
|
||||
LoadStringW(hInstance, IDS_CONFIRM_YES, szYesBuffer, _countof(szYesBuffer));
|
||||
LoadStringW(hInstance, IDS_CONFIRM_NO, szNoBuffer, _countof(szNoBuffer));
|
||||
|
||||
ZeroMemory(szInput, sizeof(szInput));
|
||||
|
||||
hFile = GetStdHandle(STD_INPUT_HANDLE);
|
||||
GetConsoleMode(hFile, &dwOldMode);
|
||||
|
||||
SetConsoleMode(hFile, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_CONFIRM_QUESTION);
|
||||
|
||||
ReadConsoleW(hFile, szInput, _countof(szInput), &dwRead, NULL);
|
||||
|
||||
szInput[0] = towupper(szInput[0]);
|
||||
if (szInput[0] == szYesBuffer[0])
|
||||
{
|
||||
ret = TRUE;
|
||||
break;
|
||||
}
|
||||
else if (szInput[0] == 13 || szInput[0] == szNoBuffer[0])
|
||||
{
|
||||
ret = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
ConResPrintf(StdOut, IDS_CONFIRM_INVALID);
|
||||
}
|
||||
|
||||
SetConsoleMode(hFile, dwOldMode);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
DWORD_PTR
|
||||
GetTimeAsJobTime(VOID)
|
||||
{
|
||||
SYSTEMTIME Time;
|
||||
DWORD_PTR JobTime;
|
||||
|
||||
GetLocalTime(&Time);
|
||||
|
||||
JobTime = (DWORD_PTR)Time.wHour * 3600000 +
|
||||
(DWORD_PTR)Time.wMinute * 60000;
|
||||
|
||||
return JobTime;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
ULONG
|
||||
GetCurrentDayOfMonth(VOID)
|
||||
{
|
||||
SYSTEMTIME Time;
|
||||
|
||||
GetLocalTime(&Time);
|
||||
|
||||
return 1UL << (Time.wDay - 1);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
JobTimeToTimeString(
|
||||
PWSTR pszBuffer,
|
||||
INT cchBuffer,
|
||||
WORD wHour,
|
||||
WORD wMinute)
|
||||
{
|
||||
SYSTEMTIME Time = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
Time.wHour = wHour;
|
||||
Time.wMinute = wMinute;
|
||||
|
||||
GetTimeFormat(LOCALE_USER_DEFAULT,
|
||||
TIME_NOSECONDS,
|
||||
&Time,
|
||||
NULL,
|
||||
pszBuffer,
|
||||
cchBuffer);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
INT
|
||||
PrintJobDetails(
|
||||
PWSTR pszComputerName,
|
||||
ULONG ulJobId)
|
||||
{
|
||||
PAT_INFO pBuffer = NULL;
|
||||
DWORD_PTR CurrentTime;
|
||||
WCHAR szStatusBuffer[16];
|
||||
WCHAR szScheduleBuffer[60];
|
||||
WCHAR szTimeBuffer[16];
|
||||
WCHAR szInteractiveBuffer[16];
|
||||
WCHAR szDateBuffer[8];
|
||||
INT i, nDateLength, nScheduleLength;
|
||||
HINSTANCE hInstance;
|
||||
NET_API_STATUS Status;
|
||||
|
||||
Status = NetScheduleJobGetInfo(pszComputerName,
|
||||
ulJobId,
|
||||
(PBYTE *)&pBuffer);
|
||||
if (Status != NERR_Success)
|
||||
{
|
||||
PrintErrorMessage(Status);
|
||||
return 1;
|
||||
}
|
||||
|
||||
hInstance = GetModuleHandle(NULL);
|
||||
|
||||
if (pBuffer->Flags & JOB_EXEC_ERROR)
|
||||
LoadStringW(hInstance, IDS_ERROR, szStatusBuffer, _countof(szStatusBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_OK, szStatusBuffer, _countof(szStatusBuffer));
|
||||
|
||||
if (pBuffer->DaysOfMonth != 0)
|
||||
{
|
||||
if (pBuffer->Flags & JOB_RUN_PERIODICALLY)
|
||||
LoadStringW(hInstance, IDS_EVERY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_NEXT, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
|
||||
nScheduleLength = wcslen(szScheduleBuffer);
|
||||
for (i = 0; i < 31; i++)
|
||||
{
|
||||
if (pBuffer->DaysOfMonth & (1 << i))
|
||||
{
|
||||
swprintf(szDateBuffer, L" %d", i + 1);
|
||||
nDateLength = wcslen(szDateBuffer);
|
||||
if (nScheduleLength + nDateLength <= 55)
|
||||
{
|
||||
wcscat(szScheduleBuffer, szDateBuffer);
|
||||
nScheduleLength += nDateLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscat(szScheduleBuffer, L"...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pBuffer->DaysOfWeek != 0)
|
||||
{
|
||||
if (pBuffer->Flags & JOB_RUN_PERIODICALLY)
|
||||
LoadStringW(hInstance, IDS_EVERY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_NEXT, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
|
||||
nScheduleLength = wcslen(szScheduleBuffer);
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
if (pBuffer->DaysOfWeek & (1 << i))
|
||||
{
|
||||
swprintf(szDateBuffer, L" %s", pszDaysOfWeekArray[i]);
|
||||
nDateLength = wcslen(szDateBuffer);
|
||||
if (nScheduleLength + nDateLength <= 55)
|
||||
{
|
||||
wcscat(szScheduleBuffer, szDateBuffer);
|
||||
nScheduleLength += nDateLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscat(szScheduleBuffer, L"...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentTime = GetTimeAsJobTime();
|
||||
if (CurrentTime > pBuffer->JobTime)
|
||||
LoadStringW(hInstance, IDS_TOMORROW, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_TODAY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
}
|
||||
|
||||
JobTimeToTimeString(szTimeBuffer,
|
||||
_countof(szTimeBuffer),
|
||||
(WORD)(pBuffer->JobTime / 3600000),
|
||||
(WORD)((pBuffer->JobTime % 3600000) / 60000));
|
||||
|
||||
if (pBuffer->Flags & JOB_NONINTERACTIVE)
|
||||
LoadStringW(hInstance, IDS_NO, szInteractiveBuffer, _countof(szInteractiveBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_YES, szInteractiveBuffer, _countof(szInteractiveBuffer));
|
||||
|
||||
ConResPrintf(StdOut, IDS_TASKID, ulJobId);
|
||||
ConResPrintf(StdOut, IDS_STATUS, szStatusBuffer);
|
||||
ConResPrintf(StdOut, IDS_SCHEDULE, szScheduleBuffer);
|
||||
ConResPrintf(StdOut, IDS_TIME, szTimeBuffer);
|
||||
ConResPrintf(StdOut, IDS_INTERACTIVE, szInteractiveBuffer);
|
||||
ConResPrintf(StdOut, IDS_COMMAND, pBuffer->Command);
|
||||
|
||||
NetApiBufferFree(pBuffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
INT
|
||||
PrintAllJobs(
|
||||
PWSTR pszComputerName)
|
||||
{
|
||||
PAT_ENUM pBuffer = NULL;
|
||||
DWORD dwRead = 0, dwTotal = 0;
|
||||
DWORD dwResume = 0, i;
|
||||
DWORD_PTR CurrentTime;
|
||||
NET_API_STATUS Status;
|
||||
|
||||
WCHAR szScheduleBuffer[32];
|
||||
WCHAR szTimeBuffer[16];
|
||||
WCHAR szDateBuffer[8];
|
||||
HINSTANCE hInstance;
|
||||
INT j, nDateLength, nScheduleLength;
|
||||
|
||||
Status = NetScheduleJobEnum(pszComputerName,
|
||||
(PBYTE *)&pBuffer,
|
||||
MAX_PREFERRED_LENGTH,
|
||||
&dwRead,
|
||||
&dwTotal,
|
||||
&dwResume);
|
||||
if (Status != NERR_Success)
|
||||
{
|
||||
PrintErrorMessage(Status);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (dwTotal == 0)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_NO_ENTRIES);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ConResPrintf(StdOut, IDS_JOBS_LIST);
|
||||
PrintHorizontalLine();
|
||||
|
||||
hInstance = GetModuleHandle(NULL);
|
||||
|
||||
for (i = 0; i < dwRead; i++)
|
||||
{
|
||||
if (pBuffer[i].DaysOfMonth != 0)
|
||||
{
|
||||
if (pBuffer[i].Flags & JOB_RUN_PERIODICALLY)
|
||||
LoadStringW(hInstance, IDS_EVERY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_NEXT, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
|
||||
nScheduleLength = wcslen(szScheduleBuffer);
|
||||
for (j = 0; j < 31; j++)
|
||||
{
|
||||
if (pBuffer[i].DaysOfMonth & (1 << j))
|
||||
{
|
||||
swprintf(szDateBuffer, L" %d", j + 1);
|
||||
nDateLength = wcslen(szDateBuffer);
|
||||
if (nScheduleLength + nDateLength <= 19)
|
||||
{
|
||||
wcscat(szScheduleBuffer, szDateBuffer);
|
||||
nScheduleLength += nDateLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscat(szScheduleBuffer, L"...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pBuffer[i].DaysOfWeek != 0)
|
||||
{
|
||||
if (pBuffer[i].Flags & JOB_RUN_PERIODICALLY)
|
||||
LoadStringW(hInstance, IDS_EVERY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_NEXT, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
|
||||
nScheduleLength = wcslen(szScheduleBuffer);
|
||||
for (j = 0; j < 7; j++)
|
||||
{
|
||||
if (pBuffer[i].DaysOfWeek & (1 << j))
|
||||
{
|
||||
swprintf(szDateBuffer, L" %s", pszDaysOfWeekArray[j]);
|
||||
nDateLength = wcslen(szDateBuffer);
|
||||
if (nScheduleLength + nDateLength <= 55)
|
||||
{
|
||||
wcscat(szScheduleBuffer, szDateBuffer);
|
||||
nScheduleLength += nDateLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscat(szScheduleBuffer, L"...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentTime = GetTimeAsJobTime();
|
||||
if (CurrentTime > pBuffer[i].JobTime)
|
||||
LoadStringW(hInstance, IDS_TOMORROW, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
else
|
||||
LoadStringW(hInstance, IDS_TODAY, szScheduleBuffer, _countof(szScheduleBuffer));
|
||||
}
|
||||
|
||||
JobTimeToTimeString(szTimeBuffer,
|
||||
_countof(szTimeBuffer),
|
||||
(WORD)(pBuffer[i].JobTime / 3600000),
|
||||
(WORD)((pBuffer[i].JobTime % 3600000) / 60000));
|
||||
|
||||
ConPrintf(StdOut,
|
||||
L" %6lu %-21s %-11s %s\n",
|
||||
pBuffer[i].JobId,
|
||||
szScheduleBuffer,
|
||||
szTimeBuffer,
|
||||
pBuffer[i].Command);
|
||||
}
|
||||
|
||||
NetApiBufferFree(pBuffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
INT
|
||||
AddJob(
|
||||
PWSTR pszComputerName,
|
||||
ULONG ulJobHour,
|
||||
ULONG ulJobMinute,
|
||||
ULONG ulDaysOfMonth,
|
||||
UCHAR ucDaysOfWeek,
|
||||
BOOL bInteractiveJob,
|
||||
BOOL bPeriodicJob,
|
||||
PWSTR pszCommand)
|
||||
{
|
||||
AT_INFO InfoBuffer;
|
||||
ULONG ulJobId = 0;
|
||||
NET_API_STATUS Status;
|
||||
|
||||
InfoBuffer.JobTime = (DWORD_PTR)ulJobHour * 3600000 +
|
||||
(DWORD_PTR)ulJobMinute * 60000;
|
||||
InfoBuffer.DaysOfMonth = ulDaysOfMonth;
|
||||
InfoBuffer.DaysOfWeek = ucDaysOfWeek;
|
||||
InfoBuffer.Flags = (bInteractiveJob ? 0 : JOB_NONINTERACTIVE) |
|
||||
(bPeriodicJob ? JOB_RUN_PERIODICALLY : 0);
|
||||
InfoBuffer.Command = pszCommand;
|
||||
|
||||
Status = NetScheduleJobAdd(pszComputerName,
|
||||
(PBYTE)&InfoBuffer,
|
||||
&ulJobId);
|
||||
if (Status != NERR_Success)
|
||||
{
|
||||
PrintErrorMessage(Status);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ConResPrintf(StdOut, IDS_NEW_JOB, ulJobId);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
INT
|
||||
DeleteJob(
|
||||
PWSTR pszComputerName,
|
||||
ULONG ulJobId,
|
||||
BOOL bForceDelete)
|
||||
{
|
||||
NET_API_STATUS Status;
|
||||
|
||||
if (ulJobId == (ULONG)-1 && bForceDelete == FALSE)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_DELETE_ALL);
|
||||
if (!Confirm())
|
||||
return 0;
|
||||
}
|
||||
|
||||
Status = NetScheduleJobDel(pszComputerName,
|
||||
(ulJobId == (ULONG)-1) ? 0 : ulJobId,
|
||||
(ulJobId == (ULONG)-1) ? -1 : ulJobId);
|
||||
if (Status != NERR_Success)
|
||||
{
|
||||
PrintErrorMessage(Status);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int wmain(int argc, WCHAR **argv)
|
||||
{
|
||||
PWSTR pszComputerName = NULL;
|
||||
PWSTR pszCommand = NULL;
|
||||
ULONG ulJobId = (ULONG)-1;
|
||||
ULONG ulJobHour = (ULONG)-1;
|
||||
ULONG ulJobMinute = (ULONG)-1;
|
||||
BOOL bDeleteJob = FALSE, bForceDelete = FALSE;
|
||||
BOOL bInteractiveJob = FALSE, bPeriodicJob = FALSE;
|
||||
BOOL bPrintUsage = FALSE;
|
||||
ULONG ulDaysOfMonth = 0;
|
||||
UCHAR ucDaysOfWeek = 0;
|
||||
INT nResult = 0;
|
||||
INT i, minIdx;
|
||||
|
||||
/* Initialize the Console Standard Streams */
|
||||
ConInitStdStreams();
|
||||
|
||||
if (!InitDaysOfWeekArray())
|
||||
return 1;
|
||||
|
||||
/* Parse the computer name */
|
||||
i = 1;
|
||||
minIdx = 1;
|
||||
if (i < argc &&
|
||||
argv[i][0] == L'\\' &&
|
||||
argv[i][1] == L'\\')
|
||||
{
|
||||
pszComputerName = argv[i];
|
||||
i++;
|
||||
minIdx++;
|
||||
}
|
||||
|
||||
/* Parse the time or job id */
|
||||
if (i < argc && argv[i][0] != L'/')
|
||||
{
|
||||
if (ParseTime(argv[i], &ulJobHour, &ulJobMinute))
|
||||
{
|
||||
i++;
|
||||
minIdx++;
|
||||
}
|
||||
else if (ParseId(argv[i], &ulJobId))
|
||||
{
|
||||
i++;
|
||||
minIdx++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse the options */
|
||||
for (; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] == L'/')
|
||||
{
|
||||
if (_wcsicmp(argv[i], L"/?") == 0)
|
||||
{
|
||||
bPrintUsage = TRUE;
|
||||
goto done;
|
||||
}
|
||||
else if (_wcsicmp(argv[i], L"/delete") == 0)
|
||||
{
|
||||
bDeleteJob = TRUE;
|
||||
}
|
||||
else if (_wcsicmp(argv[i], L"/yes") == 0)
|
||||
{
|
||||
bForceDelete = TRUE;
|
||||
}
|
||||
else if (_wcsicmp(argv[i], L"/interactive") == 0)
|
||||
{
|
||||
bInteractiveJob = TRUE;
|
||||
}
|
||||
else if (_wcsnicmp(argv[i], L"/every:", 7) == 0)
|
||||
{
|
||||
bPeriodicJob = TRUE;
|
||||
if (ParseDaysOfMonth(&(argv[i][7]), &ulDaysOfMonth) == FALSE)
|
||||
{
|
||||
if (ParseDaysOfWeek(&(argv[i][7]), &ucDaysOfWeek) == FALSE)
|
||||
{
|
||||
ulDaysOfMonth = GetCurrentDayOfMonth();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_wcsnicmp(argv[i], L"/next:", 6) == 0)
|
||||
{
|
||||
bPeriodicJob = FALSE;
|
||||
if (ParseDaysOfMonth(&(argv[i][6]), &ulDaysOfMonth) == FALSE)
|
||||
{
|
||||
if (ParseDaysOfWeek(&(argv[i][6]), &ucDaysOfWeek) == FALSE)
|
||||
{
|
||||
ulDaysOfMonth = GetCurrentDayOfMonth();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bPrintUsage = TRUE;
|
||||
nResult = 1;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse the command */
|
||||
if (argc > minIdx && argv[argc - 1][0] != L'/')
|
||||
{
|
||||
pszCommand = argv[argc - 1];
|
||||
}
|
||||
|
||||
if (bDeleteJob == TRUE)
|
||||
{
|
||||
/* Check for invalid options or arguments */
|
||||
if (bInteractiveJob == TRUE ||
|
||||
ulJobHour != (ULONG)-1 ||
|
||||
ulJobMinute != (ULONG)-1 ||
|
||||
ulDaysOfMonth != 0 ||
|
||||
ucDaysOfWeek != 0 ||
|
||||
pszCommand != NULL)
|
||||
{
|
||||
bPrintUsage = TRUE;
|
||||
nResult = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
nResult = DeleteJob(pszComputerName,
|
||||
ulJobId,
|
||||
bForceDelete);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ulJobHour != (ULONG)-1 && ulJobMinute != (ULONG)-1)
|
||||
{
|
||||
/* Check for invalid options or arguments */
|
||||
if (bForceDelete == TRUE ||
|
||||
pszCommand == NULL)
|
||||
{
|
||||
bPrintUsage = TRUE;
|
||||
nResult = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
nResult = AddJob(pszComputerName,
|
||||
ulJobHour,
|
||||
ulJobMinute,
|
||||
ulDaysOfMonth,
|
||||
ucDaysOfWeek,
|
||||
bInteractiveJob,
|
||||
bPeriodicJob,
|
||||
pszCommand);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Check for invalid options or arguments */
|
||||
if (bForceDelete == TRUE ||
|
||||
bInteractiveJob == TRUE ||
|
||||
ulDaysOfMonth != 0 ||
|
||||
ucDaysOfWeek != 0 ||
|
||||
pszCommand != NULL)
|
||||
{
|
||||
bPrintUsage = TRUE;
|
||||
nResult = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ulJobId == (ULONG)-1)
|
||||
{
|
||||
nResult = PrintAllJobs(pszComputerName);
|
||||
}
|
||||
else
|
||||
{
|
||||
nResult = PrintJobDetails(pszComputerName,
|
||||
ulJobId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
FreeDaysOfWeekArray();
|
||||
|
||||
if (bPrintUsage == TRUE)
|
||||
ConResPuts(StdOut, IDS_USAGE);
|
||||
|
||||
return nResult;
|
||||
}
|
||||
|
||||
/* EOF */
|
26
base/applications/cmdutils/at/at.rc
Normal file
26
base/applications/cmdutils/at/at.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS AT Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "at"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "at.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
57
base/applications/cmdutils/at/lang/de-DE.rc
Normal file
57
base/applications/cmdutils/at/lang/de-DE.rc
Normal file
|
@ -0,0 +1,57 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Mit dem AT Befehl können Befehle und Programme zu einem vorbestimmten\n\
|
||||
Termin gestartet werden. Der Zeitplandienst muss gestartet sein, um den\n\
|
||||
Befehl AT zu verwenden.\n\n\
|
||||
AT [\\\\Computername] [ [Kennung] [/DELETE] | /DELETE [/YES]]\n\
|
||||
AT [\\\\Computername] Zeit [/INTERACTIVE]\n\
|
||||
[ /EVERY:Datum[,...] | /NEXT:Datum[,...]] ""Befehl""\n\n\
|
||||
\\\\Computername Gibt einen Remotecomputer an. Ohne diesen Parameter werden\n\
|
||||
die Befehle auf dem lokalen Computer ausgeführt.\n\
|
||||
Kennung Eine Identifikationsnummer, die dem geplanten Befehl\n\
|
||||
zugeteilt wird.\n\
|
||||
/DELETE Löscht geplante Befehle. Ohne Kennung werden alle geplanten\n\
|
||||
Befehle auf dem Computer gelöscht.\n\
|
||||
/YES In Verbindung mit /DELETE werden die geplanten Befehle ohne\n\
|
||||
weitere Bestätiging gelöscht.\n\
|
||||
Zeit Gibt die Zeit an, zu der ein Befehl ausgeführt werden soll.\n\
|
||||
/INTERACTIVE Ermöglicht dem Aufrag, Eingaben von dem Benutzer\n\
|
||||
anzunehmen, der angemeldet ist, wenn der Auftrag ausgeführt\n\
|
||||
wird.\n\
|
||||
/EVERY:Datum[,...] Führt den Befehl zu jedem der angegebenen Tage der Woche\n\
|
||||
oder des Monats aus. Ohne Angabe eines Datums wird der\n\
|
||||
aktuelle Tag des Monats angenommen.\n\
|
||||
/NEXT:Datum[,...] Führt den Befehl am nächsten angegebenen Tage der Woche\n\
|
||||
oder des Monats (z.B. nächsten Montag) aus. Ohne Angabe\n\
|
||||
eines Datums wird der aktuelle Tag des Monats angenommen.\n\
|
||||
""Befehl"" Ist der auszuführende Befehl oder das Stapelprogramm.\n"
|
||||
|
||||
IDS_DELETE_ALL "Dieser Vorgang wird alle geplanten Aufträge löschen.\n"
|
||||
IDS_NEW_JOB "Neuer Auftrag hinzugefügt. Kennung = %lu\n"
|
||||
IDS_JOBS_LIST "Statuskenn. Tag Zeit Befehlszeile\n"
|
||||
IDS_NO_ENTRIES "Es sind keine Einträge in der Liste.\n"
|
||||
|
||||
IDS_CONFIRM_QUESTION "Möchten Sie diesen Vorgang fortsetzen? (J/N) [N]: "
|
||||
IDS_CONFIRM_INVALID "\nDies ist eine ungültige Antwort.\n"
|
||||
IDS_CONFIRM_YES "J"
|
||||
IDS_CONFIRM_NO "N"
|
||||
|
||||
IDS_TODAY "Heute"
|
||||
IDS_TOMORROW "Morgen"
|
||||
IDS_EVERY "Jeden"
|
||||
IDS_NEXT "Kommenden"
|
||||
|
||||
IDS_YES "Ja"
|
||||
IDS_NO "Nein"
|
||||
IDS_ERROR "ERROR"
|
||||
IDS_OK "OK"
|
||||
|
||||
IDS_TASKID "Taskkennung: %lu\n"
|
||||
IDS_STATUS "Status: %s\n"
|
||||
IDS_SCHEDULE "Zeitplan: %s\n"
|
||||
IDS_TIME "Zeit: %s\n"
|
||||
IDS_INTERACTIVE "Interaktiv: %s\n"
|
||||
IDS_COMMAND "Befehl: %s\n"
|
||||
END
|
56
base/applications/cmdutils/at/lang/en-US.rc
Normal file
56
base/applications/cmdutils/at/lang/en-US.rc
Normal file
|
@ -0,0 +1,56 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "The AT command schedules commands and programs to run on a computer at\n\
|
||||
a specified time and date. The Schedule service must be running to use\n\
|
||||
the AT command.\n\n\
|
||||
AT [\\\\computername] [ [id] [/DELETE] | /DELETE [/YES]]\n\
|
||||
AT [\\\\computername] time [/INTERACTIVE]\n\
|
||||
[ /EVERY:date[,...] | /NEXT:date[,...]] ""command""\n\n\
|
||||
\\\\computername Specifies a remote computer. Commands are scheduled on the \n\
|
||||
local computer if this parameter is omitted.\n\
|
||||
id Is an identification number assigned to a scheduled\n\
|
||||
command.\n\
|
||||
/DELETE Cancels a scheduled command. If id is omitted, all the\n\
|
||||
scheduled commands on the computer are canceled.\n\
|
||||
/YES Used with cancel all jobs command when no further\n\
|
||||
confirmation is desired.\n\
|
||||
time Specifies the time when command is to run.\n\
|
||||
/INTERACTIVE Allows the job to interact with the desktop of the user\n\
|
||||
who is logged on at the time the job runs.\n\
|
||||
/EVERY:date[,...] Runs the command on each specified day(s) of the week or\n\
|
||||
month. If date is omitted, the current day of the month\n\
|
||||
is assumed.\n\
|
||||
/NEXT:date[,...] Runs the specified command on the next occurrence of the\n\
|
||||
day (for example, next Thursday). If date is omitted, the \n\
|
||||
current day of the month is assumed.\n\
|
||||
""command"" Is the command or batch program to be run.\n"
|
||||
|
||||
IDS_DELETE_ALL "This operation will delete all scheduled jobs.\n"
|
||||
IDS_NEW_JOB "Added a new job with job ID = %lu\n"
|
||||
IDS_JOBS_LIST "Status ID Day Time Command Line\n"
|
||||
IDS_NO_ENTRIES "There are no entries in the list.\n"
|
||||
|
||||
IDS_CONFIRM_QUESTION "Do you want to continue this operation? (Y/N) [N]: "
|
||||
IDS_CONFIRM_INVALID "\nThis is an invalid response.\n"
|
||||
IDS_CONFIRM_YES "Y"
|
||||
IDS_CONFIRM_NO "N"
|
||||
|
||||
IDS_TODAY "Today"
|
||||
IDS_TOMORROW "Tomorrow"
|
||||
IDS_EVERY "Every"
|
||||
IDS_NEXT "Next"
|
||||
|
||||
IDS_YES "Yes"
|
||||
IDS_NO "No"
|
||||
IDS_ERROR "ERROR"
|
||||
IDS_OK "OK"
|
||||
|
||||
IDS_TASKID "Task ID: %lu\n"
|
||||
IDS_STATUS "Status: %s\n"
|
||||
IDS_SCHEDULE "Schedule: %s\n"
|
||||
IDS_TIME "Time of day: %s\n"
|
||||
IDS_INTERACTIVE "Interactive: %s\n"
|
||||
IDS_COMMAND "Command: %s\n"
|
||||
END
|
56
base/applications/cmdutils/at/lang/ro-RO.rc
Normal file
56
base/applications/cmdutils/at/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,56 @@
|
|||
/* Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Comanda AT planifică comenzi și programe pentru fi executate într-un\n\
|
||||
calculator la o anumită dată și oră. Serviciul «Schedule» trebuie să fie\n\
|
||||
pornit pentru a utiliza această comandă.\n\n\
|
||||
AT [\\\\numecalculator] [ [id] [/DELETE] | /DELETE [/YES]]\n\
|
||||
AT [\\\\numecalculator] timp [/INTERACTIVE]\n\
|
||||
[ /EVERY:dată[,...] | /NEXT:dată[,...]] ""comandă""\n\n\
|
||||
\\\\numecalculator Specifică un calculator la distanță. Fără acest\n\
|
||||
parametru, planificarea va fi pentru calculatorul local.\n\
|
||||
id Un număr de identificare atribuit comenzii planificate.\n\
|
||||
/DELETE Anulează o comandă planificată. Fără acest parametru,\n\
|
||||
vor fi anulate toate comenzile planificate.\n\
|
||||
/YES Utilizat cu opțiunea «DELETE», pentru suprimarea cerințelor\n\
|
||||
de confirmare a eliminărilor de comenzi planificate.\n\
|
||||
timp Specifică timpul de lansare a comenzii.\n\
|
||||
/INTERACTIVE Permite programelor să interacționeze cu utilizatorul\n\
|
||||
autentificat la momentul execuției planificate.\n\
|
||||
/EVERY:dată[,...] Execută comanda la ziua sau zilele specificate din fiecare\n\
|
||||
săptămână sau lună. Dacă data este omisă, este considerată\n\
|
||||
ziua curentă a lunii.\n\
|
||||
/NEXT:dată[,...] Execută comanda în următoarea zi (spre exemplu marțea\n\
|
||||
viitoare). Dacă data este omisă, e considerată ziua\n\
|
||||
curentă a lunii.\n\
|
||||
""comandă"" Numele comenzii sau programului pentru execuție.\n"
|
||||
|
||||
IDS_DELETE_ALL "Această operație va elimina planificarea pentru toate comenzile.\n"
|
||||
IDS_NEW_JOB "A fost planificată o nouă activitate cu ID = %lu\n"
|
||||
IDS_JOBS_LIST "ID stare Zi Oră Comanda\n"
|
||||
IDS_NO_ENTRIES "Nu există comenzi planificate.\n"
|
||||
|
||||
IDS_CONFIRM_QUESTION "Sigur doriți continuarea acestei operații? (D|N) [N]: "
|
||||
IDS_CONFIRM_INVALID "\nAcesta nu este un răspuns valid.\n"
|
||||
IDS_CONFIRM_YES "D"
|
||||
IDS_CONFIRM_NO "N"
|
||||
|
||||
IDS_TODAY "Astăzi"
|
||||
IDS_TOMORROW "Mâine"
|
||||
IDS_EVERY "În fiecare"
|
||||
IDS_NEXT "În următoarea"
|
||||
|
||||
IDS_YES "Da"
|
||||
IDS_NO "Nu"
|
||||
IDS_ERROR "EROARE"
|
||||
IDS_OK "OK"
|
||||
|
||||
IDS_TASKID "ID sarcină: %lu\n"
|
||||
IDS_STATUS "Stare: %s\n"
|
||||
IDS_SCHEDULE "Pentru: %s\n"
|
||||
IDS_TIME "La ora: %s\n"
|
||||
IDS_INTERACTIVE "Interactiv: %s\n"
|
||||
IDS_COMMAND "Comandă: %s\n"
|
||||
END
|
54
base/applications/cmdutils/at/lang/ru-RU.rc
Normal file
54
base/applications/cmdutils/at/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,54 @@
|
|||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Команда AT предназначена для запуска команд и программ\n\
|
||||
в указанное время по определенным дням. Для работы команды необходимо, чтобы\n\
|
||||
была запущена служба планировщика (Schedule service).\n\n\
|
||||
AT [\\\\имя_компьютера] [ [id] [/DELETE] | /DELETE [/YES]]\n\
|
||||
AT [\\\\имя_компьютера] время [/INTERACTIVE]\n\
|
||||
[ /EVERY:день[,...] | /NEXT:день[,...]] ""команда""\n\n\
|
||||
\\\\имя_компьютера Имя удаленного компьютера. Если этот параметр не указан, \n\
|
||||
используется локальный компьютер.\n\
|
||||
id Порядковый номер запланированной задачи.\n\
|
||||
/DELETE Отменяет запланированную команду. Если параметр id не указан, то\n\
|
||||
все команды, запланированные на данном компьютере, будут отменены.\n\
|
||||
/YES Отмена запроса на подтверждение при отмене всех\n\
|
||||
запланированных задач.\n\
|
||||
время Время запуска команды.\n\
|
||||
/INTERACTIVE Разрешает взаимодействие задачи с пользователем,\n\
|
||||
работающим на компьютере во время запуска задачи.\n\
|
||||
/EVERY:день[,...] Задача будет выполняться каждый указанный день (дни) или\n\
|
||||
месяц. Если дата не указана, используется текущий день \n\
|
||||
месяца.\n\
|
||||
/NEXT:день[,...] Задача будет запущена в следующий указанный день недели\n\
|
||||
(например, в следующий четверг). Если дата не указана, то \n\
|
||||
используется текущий день месяца.\n\
|
||||
""команда"" Команда или имя пакетного файла для запуска.\n"
|
||||
|
||||
IDS_CONFIRM_QUESTION "Продолжить выполнение операции? (Y-да/N-нет) [N] "
|
||||
IDS_CONFIRM_INVALID "\nНедопустимый ответ.\n"
|
||||
IDS_CONFIRM_YES "Y"
|
||||
IDS_CONFIRM_NO "N"
|
||||
|
||||
IDS_NEW_JOB "Добавлено новое задание с ID = %lu\n"
|
||||
IDS_JOBS_LIST "Статус ID День Время Команда\n"
|
||||
IDS_NO_ENTRIES "В списке нет запланированных задач.\n"
|
||||
|
||||
IDS_TODAY "Сегодня"
|
||||
IDS_TOMORROW "Завтра"
|
||||
IDS_EVERY "Каждый"
|
||||
IDS_NEXT "Следующий"
|
||||
|
||||
IDS_YES "Да"
|
||||
IDS_NO "Нет"
|
||||
IDS_ERROR "ОШИБКА"
|
||||
IDS_OK "ОК"
|
||||
|
||||
IDS_TASKID "ID задачи: %lu\n"
|
||||
IDS_STATUS "Состояние: %s\n"
|
||||
IDS_SCHEDULE "Расписание: %s\n"
|
||||
IDS_TIME "Время суток: %s\n"
|
||||
IDS_INTERACTIVE "Интерактивный: %s\n"
|
||||
IDS_COMMAND "Команда: %s\n"
|
||||
END
|
56
base/applications/cmdutils/at/lang/tr-TR.rc
Normal file
56
base/applications/cmdutils/at/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,56 @@
|
|||
/* TRANSLATOR: 2017 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "AT komutu, belirlenen bir zamanda bilgisayarda çalıştırmak için komutları\n\
|
||||
ve izlenceleri zamanlar. AT komutunu çalıştırmak için Zamanlayıcı hizmeti \n\
|
||||
çalıştırılmalıdır.\n\n\
|
||||
AT [\\\\bilgisayar adı] [ [kimlik] [/DELETE] | /DELETE [/YES]]\n\
|
||||
AT [\\\\bilgisayar adı] saat [/INTERACTIVE]\n\
|
||||
[ /EVERY:târih[,...] | /NEXT:târih[,...]] ""komut""\n\n\
|
||||
\\\\bilgisayar adı Bir uzak bilgisayarı belirtir. Bu değişken yazılmazsa\n\
|
||||
komutlar yerli bilgisayarda zamanlanır.\n\
|
||||
kimlik Zamanlanan bir komuta atanan bir kimlik numarasıdır.\n\
|
||||
/DELETE Zamanlanan bir komutu iptâl eder. Kimlik yazılmadığında\n\
|
||||
bilgisayardaki tüm zamanlanan komutlar iptâl edilir.\n\
|
||||
/YES Sonraki onaylamalar istenilmediğinde tüm işleri iptâl etme\n\
|
||||
komutuyla birlikte kullanılır.\n\
|
||||
saat Komutun çalıştırılma saatini belirtir.\n\
|
||||
/INTERACTIVE İşe, çalıştırılacağı saatte oturum açmış kullanıcının\n\
|
||||
masaüstüyle etkileşmesine izin verir.\n\
|
||||
/EVERY:târih[,...] Haftanın ya da ayın belirtilen tüm günlerinde komutu çalıştırır.\n\
|
||||
month. Târih yazılmadığında ayın şimdiki gününü varsayar.\n\
|
||||
/NEXT:târih[,...] Günün bir sonraki oluşunda (örneğin bir sonraki perşembede)\n\
|
||||
belirtilen komutu çalıştırır. Târih yazılmadığında ayın\n\
|
||||
şimdiki gününü varsayar.\n\
|
||||
""komut"" Çalıştırılacak komut ya da toplu iş kütüğü.\n"
|
||||
|
||||
IDS_DELETE_ALL "Bu işlem tüm zamanlanan işleri silecek.\n"
|
||||
IDS_NEW_JOB "%lu iş kimliğiyle yeni bir iş eklendi.\n"
|
||||
IDS_JOBS_LIST "Durum Km. Gün Saat Komut Yatacı\n"
|
||||
IDS_NO_ENTRIES "Dizelgede bir giriş yok.\n"
|
||||
|
||||
IDS_CONFIRM_QUESTION "Bu işlemi sürdürmek ister misiniz? (E/H) [H]: "
|
||||
IDS_CONFIRM_INVALID "\nBu geçersiz bir yanıttır.\n"
|
||||
IDS_CONFIRM_YES "E"
|
||||
IDS_CONFIRM_NO "H"
|
||||
|
||||
IDS_TODAY "Bugün"
|
||||
IDS_TOMORROW "Yarın"
|
||||
IDS_EVERY "Her"
|
||||
IDS_NEXT "Bir sonraki"
|
||||
|
||||
IDS_YES "Evet"
|
||||
IDS_NO "Hayır"
|
||||
IDS_ERROR "YANLIŞLIK"
|
||||
IDS_OK "Tamam"
|
||||
|
||||
IDS_TASKID "Görev kimliği: %lu\n"
|
||||
IDS_STATUS "Durum: %s\n"
|
||||
IDS_SCHEDULE "Zamanlama: %s\n"
|
||||
IDS_TIME "Günün saati: %s\n"
|
||||
IDS_INTERACTIVE "Etkileşme: %s\n"
|
||||
IDS_COMMAND "Komut: %s\n"
|
||||
END
|
31
base/applications/cmdutils/at/resource.h
Normal file
31
base/applications/cmdutils/at/resource.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
|
||||
#define IDS_USAGE 100
|
||||
|
||||
#define IDS_DELETE_ALL 105
|
||||
#define IDS_NEW_JOB 106
|
||||
#define IDS_JOBS_LIST 107
|
||||
#define IDS_NO_ENTRIES 108
|
||||
|
||||
#define IDS_TODAY 109
|
||||
#define IDS_TOMORROW 110
|
||||
#define IDS_EVERY 111
|
||||
#define IDS_NEXT 112
|
||||
|
||||
|
||||
#define IDS_YES 101
|
||||
#define IDS_NO 102
|
||||
#define IDS_ERROR 103
|
||||
#define IDS_OK 104
|
||||
|
||||
#define IDS_TASKID 122
|
||||
#define IDS_STATUS 123
|
||||
#define IDS_SCHEDULE 124
|
||||
#define IDS_TIME 125
|
||||
#define IDS_INTERACTIVE 126
|
||||
#define IDS_COMMAND 127
|
||||
|
||||
#define IDS_CONFIRM_QUESTION 130
|
||||
#define IDS_CONFIRM_INVALID 131
|
||||
#define IDS_CONFIRM_YES 132
|
||||
#define IDS_CONFIRM_NO 133
|
9
base/applications/cmdutils/chcp/CMakeLists.txt
Normal file
9
base/applications/cmdutils/chcp/CMakeLists.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
|
||||
add_executable(chcp chcp.c chcp.rc)
|
||||
set_module_type(chcp win32cui UNICODE)
|
||||
target_link_libraries(chcp conutils ${PSEH_LIB})
|
||||
add_importlibs(chcp msvcrt kernel32)
|
||||
set_target_properties(chcp PROPERTIES SUFFIX ".com")
|
||||
add_cd_file(TARGET chcp DESTINATION reactos/system32 FOR all)
|
95
base/applications/cmdutils/chcp/chcp.c
Normal file
95
base/applications/cmdutils/chcp/chcp.c
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Change CodePage Command
|
||||
* FILE: base/applications/cmdutils/chcp/chcp.c
|
||||
* PURPOSE: Displays or changes the active console input and output codepages.
|
||||
* PROGRAMMERS: Eric Kohl
|
||||
* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
|
||||
*/
|
||||
/*
|
||||
* CHCP.C - chcp internal command.
|
||||
*
|
||||
* 23-Dec-1998 (Eric Kohl)
|
||||
* Started.
|
||||
*
|
||||
* 02-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
|
||||
* Remove all hardcoded strings in En.rc
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <wincon.h>
|
||||
|
||||
#include <conutils.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
// INT CommandChcp(LPTSTR cmd, LPTSTR param)
|
||||
int wmain(int argc, WCHAR* argv[])
|
||||
{
|
||||
UINT uOldCodePage, uNewCodePage;
|
||||
|
||||
/* Initialize the Console Standard Streams */
|
||||
ConInitStdStreams();
|
||||
|
||||
/* Print help */
|
||||
if (argc > 1 && wcscmp(argv[1], L"/?") == 0)
|
||||
{
|
||||
ConResPuts(StdOut, STRING_CHCP_HELP);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
/* Display the active code page number */
|
||||
ConResPrintf(StdOut, STRING_CHCP_ERROR1, GetConsoleOutputCP());
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc > 2)
|
||||
{
|
||||
/* Too many parameters */
|
||||
ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[2]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
uNewCodePage = (UINT)_wtoi(argv[1]);
|
||||
|
||||
if (uNewCodePage == 0)
|
||||
{
|
||||
ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the original console codepage to be restored in case
|
||||
* SetConsoleCP() or SetConsoleOutputCP() fails.
|
||||
*/
|
||||
uOldCodePage = GetConsoleCP();
|
||||
|
||||
/*
|
||||
* Try changing the console input codepage. If it works then also change
|
||||
* the console output codepage, and refresh our local codepage cache.
|
||||
*/
|
||||
if (SetConsoleCP(uNewCodePage))
|
||||
{
|
||||
if (SetConsoleOutputCP(uNewCodePage))
|
||||
{
|
||||
/* Display the active code page number */
|
||||
ConResPrintf(StdOut, STRING_CHCP_ERROR1, GetConsoleOutputCP());
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Failure, restore the original console codepage */
|
||||
SetConsoleCP(uOldCodePage);
|
||||
}
|
||||
}
|
||||
|
||||
/* An error happened, display an error and bail out */
|
||||
ConResPuts(StdErr, STRING_CHCP_ERROR4);
|
||||
return 1;
|
||||
}
|
77
base/applications/cmdutils/chcp/chcp.rc
Normal file
77
base/applications/cmdutils/chcp/chcp.rc
Normal file
|
@ -0,0 +1,77 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Change CodePage Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "chcp"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "chcp.com"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
#include "lang/cs-CZ.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EL_GR
|
||||
#include "lang/el-GR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
#include "lang/es-ES.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_HU_HU
|
||||
#include "lang/hu-HU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ID_ID
|
||||
#include "lang/id-ID.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
#include "lang/it-IT.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_NB_NO
|
||||
#include "lang/no-NO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_JA_JP
|
||||
#include "lang/ja-JP.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
#include "lang/pl-PL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SK_SK
|
||||
#include "lang/sk-SK.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
#include "lang/sv-SE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
#include "lang/sq-AL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
#include "lang/uk-UA.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
#include "lang/zh-CN.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
#include "lang/zh-TW.rc"
|
||||
#endif
|
17
base/applications/cmdutils/chcp/lang/cs-CZ.rc
Normal file
17
base/applications/cmdutils/chcp/lang/cs-CZ.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* FILE: base/shell/cmd/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2015-04-12
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Displays or sets the active code page number.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Specifies the active code page number.\n\n\
|
||||
Type CHCP without a parameter to display the active code page number.\n"
|
||||
STRING_CHCP_ERROR1 "Aktivní znaková stránka: %u\n"
|
||||
STRING_CHCP_ERROR4 "Neplatná znaková stránka\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Neplatný formát parametru - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/de-DE.rc
Normal file
14
base/applications/cmdutils/chcp/lang/de-DE.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* German language file by Klemens Friedl <frik85> 2005-06-03 */
|
||||
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Zeigt die aktuelle Codepage an oder wechselt diese.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Codepage angeben.\n\n\
|
||||
Der Befehl CHCP ohne Parameter zeigt die Nummer der aktuellen Codepage an."
|
||||
STRING_CHCP_ERROR1 "Aktive Codepage: %u\n"
|
||||
STRING_CHCP_ERROR4 "Ungültige Codepage\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Ungültiges Parameterformat - %s\n"
|
||||
END
|
17
base/applications/cmdutils/chcp/lang/el-GR.rc
Normal file
17
base/applications/cmdutils/chcp/lang/el-GR.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Αρχική έκδοση - Ημιτελής.
|
||||
* Ελληνική μετάφραση - Απόστολος Αλεξιάδης
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Εμφανίζει ή ορίζει τον αριθμό της ενεργού κωδικοσελίδας.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Καθορίζει έναν αριθμό κωδικοσελίδας.\n\n\
|
||||
Πληκτρολογήστε CHCP χωρίς παράμετρο, για να εμφανιστεί ο τρέχων αριθμός κωδικοσελίδας.\n"
|
||||
STRING_CHCP_ERROR1 "Active code page: %u\n"
|
||||
STRING_CHCP_ERROR4 "Invalid code page\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Μη έγκυρο φορμά παραμέτρου - %s\n"
|
||||
END
|
12
base/applications/cmdutils/chcp/lang/en-US.rc
Normal file
12
base/applications/cmdutils/chcp/lang/en-US.rc
Normal file
|
@ -0,0 +1,12 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Displays or sets the active code page number.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Specifies the active code page number.\n\n\
|
||||
Type CHCP without a parameter to display the active code page number.\n"
|
||||
STRING_CHCP_ERROR1 "Active code page: %u\n"
|
||||
STRING_CHCP_ERROR4 "Invalid code page\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/es-ES.rc
Normal file
14
base/applications/cmdutils/chcp/lang/es-ES.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Spanish translation by HUMA2000, Jose Pedro Fernández Pascual e Ismael Ferreras Morezuelas (Swyter) */
|
||||
|
||||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Muestra o configura el número de página de código activa.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Especifica el número de página de código activa.\n\n\
|
||||
Escribe CHCP sin ningún parámetro para mostrar el código de página activo.\n"
|
||||
STRING_CHCP_ERROR1 "Página codificación activa: %u\n"
|
||||
STRING_CHCP_ERROR4 "Código de página inválido\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Formato de parámetro erróneo - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/fr-FR.rc
Normal file
14
base/applications/cmdutils/chcp/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* French translation by Sylvain Pétréolle, Pierre Schweitzer */
|
||||
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Affiche ou change la page de codes active.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Indique la page de codes.\n\n\
|
||||
Taper CHCP sans paramètre pour afficher la page de codes active."
|
||||
STRING_CHCP_ERROR1 "Page de codes actuelle : %u\n"
|
||||
STRING_CHCP_ERROR4 "Page de codes invalide \n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Format de paramètre incorrect - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/hu-HU.rc
Normal file
14
base/applications/cmdutils/chcp/lang/hu-HU.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Hungarian translation by Robert Horvath (talley at cubeclub.hu) 2005 */
|
||||
|
||||
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Megjeleníti vagy megváltoztatja az aktív kódlapot.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn A használni kívánt kódlap száma.\n\n\
|
||||
Írd be a CHCP paraméterek nélkül, hogy megjelenítse az aktív kódlapot.\n"
|
||||
STRING_CHCP_ERROR1 "Aktív kódlap: %u\n"
|
||||
STRING_CHCP_ERROR4 "Érvénytelen kódlap\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Érvénytelen paraméter megadás - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/id-ID.rc
Normal file
14
base/applications/cmdutils/chcp/lang/id-ID.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Indonesian language file by Zaenal Mutaqin <ade999 at gmail dot com> 2007-02-15 */
|
||||
|
||||
LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Menampilkan atau menyetel nomor halaman kode aktif.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Menetapkan nomor halaman kode yang aktif.\n\n\
|
||||
Ketik CHCP tanpa parameter untuk menampilkan nomor halaman kode yang aktif.\n"
|
||||
STRING_CHCP_ERROR1 "Halaman kode aktif: %u\n"
|
||||
STRING_CHCP_ERROR4 "Halaman kode tidak benar\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Format parameter tidak benar - %s\n"
|
||||
END
|
12
base/applications/cmdutils/chcp/lang/it-IT.rc
Normal file
12
base/applications/cmdutils/chcp/lang/it-IT.rc
Normal file
|
@ -0,0 +1,12 @@
|
|||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Visualizza o attiva il numero di tabella dei codici.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Indica il numero di tabella dei codici.\n\n\
|
||||
Scrivi CHCP senza parametri per visualizzare il numero attuale.\n"
|
||||
STRING_CHCP_ERROR1 "Tabella dei codici attiva: %u\n"
|
||||
STRING_CHCP_ERROR4 "Tabella dei codici non valida\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Formato dei parametri non valido - %s\n"
|
||||
END
|
12
base/applications/cmdutils/chcp/lang/ja-JP.rc
Normal file
12
base/applications/cmdutils/chcp/lang/ja-JP.rc
Normal file
|
@ -0,0 +1,12 @@
|
|||
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "現在のコード ページ番号を表示または設定します。\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn コード ページ番号を指定します。\n\n\
|
||||
現在のコード ページ番号を表示するときは、パラメータを指定せずに CHCP と入力してください。\n"
|
||||
STRING_CHCP_ERROR1 "現在のコード ページ: %u\n"
|
||||
STRING_CHCP_ERROR4 "無効なコード ページです\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "無効なパラメータの書式です。 - %s\n"
|
||||
END
|
12
base/applications/cmdutils/chcp/lang/no-NO.rc
Normal file
12
base/applications/cmdutils/chcp/lang/no-NO.rc
Normal file
|
@ -0,0 +1,12 @@
|
|||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Viser eller velger aktive tegntabellnummer.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Spesifisere aktive tegntabellnummer.\n\n\
|
||||
Skriv CHCP uten parametrer for å vise aktiv tegntabellnummer.\n"
|
||||
STRING_CHCP_ERROR1 "Aktiv tegntabell: %u\n"
|
||||
STRING_CHCP_ERROR4 "Ugyldig tegntabell\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Ugyldig parameter format - %s\n"
|
||||
END
|
21
base/applications/cmdutils/chcp/lang/pl-PL.rc
Normal file
21
base/applications/cmdutils/chcp/lang/pl-PL.rc
Normal file
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Translated by Caemyr - Olaf Siejka (Jan, 2008)
|
||||
* Updated by niski - Maciej Bialas (Mar, 2010)
|
||||
* Use ReactOS forum PM or IRC to contact me
|
||||
* http://www.reactos.org
|
||||
* IRC: irc.freenode.net #reactos-pl;
|
||||
* UTF-8 conversion by Caemyr (May, 2011)
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Wyświetla lub ustawia numer aktywnej strony kodowej.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Numer strony kodowej.\n\n\
|
||||
Wpisz CHCP bez parametru, by wyświetlić numer aktywnej strony kodowej.\n"
|
||||
STRING_CHCP_ERROR1 "Aktywna strona kodowa nr: %u\n"
|
||||
STRING_CHCP_ERROR4 "Niewłaściwy numer strony kodowej\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Niewłaściwy format parametru - %s\n"
|
||||
END
|
13
base/applications/cmdutils/chcp/lang/ro-RO.rc
Normal file
13
base/applications/cmdutils/chcp/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Afișează sau stabilește numărul codificării curente de pagină.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Numărul codificării de pagină specificat.\n\n\
|
||||
Tastați CHCP fără argumente pentru a afișa numărul codificării curente.\n"
|
||||
STRING_CHCP_ERROR1 "Codificarea curentă a paginilor: %u\n"
|
||||
STRING_CHCP_ERROR4 "Codificare de pagină nevalidă\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Formatul argumentului este eronat - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/ru-RU.rc
Normal file
14
base/applications/cmdutils/chcp/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Russian translation by Andrey Korotaev (unC0Rr@inbox.ru) & Aleksey Bragin (aleksey@reactos.org) & Kudratov Olimjon (olim98@bk.ru)*/
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Вывод или смена текущего номера кодовой страницы.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Номер кодовой страницы.\n\n\
|
||||
Команда CHCP без параметра выводит текущий номер кодовой страницы.\n"
|
||||
STRING_CHCP_ERROR1 "Текущая кодовая страница: %u\n"
|
||||
STRING_CHCP_ERROR4 "Неверная кодовая страница\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Неверный формат параметра - %s\n"
|
||||
END
|
18
base/applications/cmdutils/chcp/lang/sk-SK.rc
Normal file
18
base/applications/cmdutils/chcp/lang/sk-SK.rc
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* Slovak translation for CMD
|
||||
* TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||
* DATE OF TR: 21-03-2009
|
||||
* LastChange: 10-08-2010
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Displays or sets the active code page number.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Specifies the active code page number.\n\n\
|
||||
Type CHCP without a parameter to display the active code page number.\n"
|
||||
STRING_CHCP_ERROR1 "Active code page: %u\n"
|
||||
STRING_CHCP_ERROR4 "Invalid code page\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
|
||||
END
|
16
base/applications/cmdutils/chcp/lang/sq-AL.rc
Normal file
16
base/applications/cmdutils/chcp/lang/sq-AL.rc
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
|
||||
* DATE OF TR: 29-11-2013
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Shfaq ose cakto kodin dhe numrin e faqes aktive.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Specifikon kodin dhe numrin aktiv te faqes.\n\n\
|
||||
Shkruaj CHCP pa anjë parameter për të shfaqur kodin dhe numrin e faqes aktive.\n"
|
||||
STRING_CHCP_ERROR1 "Faqja Active e Kodit: %u\n"
|
||||
STRING_CHCP_ERROR4 "Invalid code page\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Parametrat e formatit invalid - %s\n"
|
||||
END
|
12
base/applications/cmdutils/chcp/lang/sv-SE.rc
Normal file
12
base/applications/cmdutils/chcp/lang/sv-SE.rc
Normal file
|
@ -0,0 +1,12 @@
|
|||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Visar eller väljer aktiv teckentabell.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Anger nummer på teckentabell.\n\n\
|
||||
Skriv CHCP utan parametrar för att visa aktiv teckentabellnummer.\n"
|
||||
STRING_CHCP_ERROR1 "Aktiv tegntabell: %u\n"
|
||||
STRING_CHCP_ERROR4 "Ugyldig tegntabell\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Ugyldig parameter format - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/tr-TR.rc
Normal file
14
base/applications/cmdutils/chcp/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Etkin kod sayfası numarasını görüntüler ya da ayarlar.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Etkin kod sayfası numarasını belirtir.\n\n\
|
||||
Etkin kod sayfası numarasını görüntülemek için bir değişken olmadan CHCP yaz.\n"
|
||||
STRING_CHCP_ERROR1 "Etkin kod sayfası: %u\n"
|
||||
STRING_CHCP_ERROR4 "Geçersiz kod sayfası\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Geçersiz değişken biçimi - %s\n"
|
||||
END
|
20
base/applications/cmdutils/chcp/lang/uk-UA.rc
Normal file
20
base/applications/cmdutils/chcp/lang/uk-UA.rc
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* PROJECT: Command-line interface
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: base/shell/cmd/lang/uk-UA.rc
|
||||
* PURPOSE: Ukraianian Language File for Command-line interface
|
||||
* TRANSLATORS: Artem Reznikov, Igor Paliychuk
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "Вивiд або змiна поточного номера кодової сторiнки.\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn Задає номер кодової сторiнки.\n\n\
|
||||
Команда CHCP без параметра виводить поточний номер кодової сторiнки.\n"
|
||||
STRING_CHCP_ERROR1 "Поточна кодова сторiнка: %u\n"
|
||||
STRING_CHCP_ERROR4 "Помилкова кодова сторiнка\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "Невiрний формат параметра - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/zh-CN.rc
Normal file
14
base/applications/cmdutils/chcp/lang/zh-CN.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Simplified Chinese translation by Song Fuchang (0xfc) <sfc_0@yahoo.com.cn> 2011 */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "显示或设置活动的代码页。\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn 指定活动的代码页。\n\n\
|
||||
不带参数执行 CHCP 将会显示当前活动的代码页。\n"
|
||||
STRING_CHCP_ERROR1 "活动代码页:%u\n"
|
||||
STRING_CHCP_ERROR4 "无效代码页\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "无效的参数格式 - %s\n"
|
||||
END
|
14
base/applications/cmdutils/chcp/lang/zh-TW.rc
Normal file
14
base/applications/cmdutils/chcp/lang/zh-TW.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CHCP_HELP "顯示或設定活動的內碼表。\n\n\
|
||||
CHCP [nnn]\n\n\
|
||||
nnn 指定活動的內碼表。\n\n\
|
||||
不帶參數執行 CHCP 將會顯示當前活動的內碼表。\n"
|
||||
STRING_CHCP_ERROR1 "活動內碼表:%u\n"
|
||||
STRING_CHCP_ERROR4 "無效內碼表\n"
|
||||
STRING_ERROR_INVALID_PARAM_FORMAT "無效的參數格式 - %s\n"
|
||||
END
|
10
base/applications/cmdutils/chcp/resource.h
Normal file
10
base/applications/cmdutils/chcp/resource.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#define RC_STRING_MAX_SIZE 3072
|
||||
|
||||
#define STRING_ERROR_INVALID_PARAM_FORMAT 107
|
||||
|
||||
#define STRING_CHCP_ERROR1 302
|
||||
#define STRING_CHCP_ERROR4 305
|
||||
|
||||
#define STRING_CHCP_HELP 605
|
8
base/applications/cmdutils/clip/CMakeLists.txt
Normal file
8
base/applications/cmdutils/clip/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
|
||||
add_executable(clip clip.c clip.rc)
|
||||
set_module_type(clip win32cui UNICODE)
|
||||
target_link_libraries(clip conutils ${PSEH_LIB})
|
||||
add_importlibs(clip advapi32 user32 msvcrt kernel32)
|
||||
add_cd_file(TARGET clip DESTINATION reactos/system32 FOR all)
|
130
base/applications/cmdutils/clip/clip.c
Normal file
130
base/applications/cmdutils/clip/clip.c
Normal file
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Clip Command
|
||||
* FILE: base/applications/cmdutils/clip/clip.c
|
||||
* PURPOSE: Provides clipboard management for command-line programs.
|
||||
* PROGRAMMERS: Ricardo Hanke
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
|
||||
#include <conutils.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
VOID PrintError(DWORD dwError)
|
||||
{
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
return;
|
||||
|
||||
ConMsgPuts(StdErr, FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, dwError, LANG_USER_DEFAULT);
|
||||
}
|
||||
|
||||
static BOOL IsDataUnicode(HGLOBAL hGlobal)
|
||||
{
|
||||
BOOL bReturn;
|
||||
LPVOID lpBuffer;
|
||||
|
||||
lpBuffer = GlobalLock(hGlobal);
|
||||
bReturn = IsTextUnicode(lpBuffer, GlobalSize(hGlobal), NULL);
|
||||
GlobalUnlock(hGlobal);
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
int wmain(int argc, wchar_t** argv)
|
||||
{
|
||||
HANDLE hInput;
|
||||
DWORD dwBytesRead;
|
||||
BOOL bStatus;
|
||||
HGLOBAL hBuffer;
|
||||
HGLOBAL hTemp;
|
||||
LPBYTE lpBuffer;
|
||||
SIZE_T dwSize = 0;
|
||||
|
||||
/* Initialize the Console Standard Streams */
|
||||
hInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
ConInitStdStreams();
|
||||
|
||||
/* Check for usage */
|
||||
if (argc > 1 && wcsncmp(argv[1], L"/?", 2) == 0)
|
||||
{
|
||||
ConResPuts(StdOut, IDS_HELP);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (GetFileType(hInput) == FILE_TYPE_CHAR)
|
||||
{
|
||||
ConResPuts(StdOut, IDS_USAGE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialize a growable buffer for holding clipboard data */
|
||||
hBuffer = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, 4096);
|
||||
if (!hBuffer)
|
||||
goto Failure;
|
||||
|
||||
/*
|
||||
* Read data from the input stream by chunks of 4096 bytes
|
||||
* and resize the buffer each time when needed.
|
||||
*/
|
||||
do
|
||||
{
|
||||
lpBuffer = GlobalLock(hBuffer);
|
||||
if (!lpBuffer)
|
||||
goto Failure;
|
||||
|
||||
bStatus = ReadFile(hInput, lpBuffer + dwSize, 4096, &dwBytesRead, NULL);
|
||||
dwSize += dwBytesRead;
|
||||
GlobalUnlock(hBuffer);
|
||||
|
||||
hTemp = GlobalReAlloc(hBuffer, GlobalSize(hBuffer) + 4096, GMEM_ZEROINIT);
|
||||
if (!hTemp)
|
||||
goto Failure;
|
||||
|
||||
hBuffer = hTemp;
|
||||
}
|
||||
while (bStatus && dwBytesRead > 0);
|
||||
|
||||
/*
|
||||
* Resize the buffer to the total size of data read.
|
||||
* Note that, if the call fails, we still have the old buffer valid.
|
||||
* The old buffer would be larger than the actual size of data it contains,
|
||||
* but this is not a problem for us.
|
||||
*/
|
||||
hTemp = GlobalReAlloc(hBuffer, dwSize + sizeof(WCHAR), GMEM_ZEROINIT);
|
||||
if (hTemp)
|
||||
hBuffer = hTemp;
|
||||
|
||||
/* Attempt to open the clipboard */
|
||||
if (!OpenClipboard(NULL))
|
||||
goto Failure;
|
||||
|
||||
/* Empty it, copy our data, then close it */
|
||||
|
||||
EmptyClipboard();
|
||||
|
||||
if (IsDataUnicode(hBuffer))
|
||||
{
|
||||
SetClipboardData(CF_UNICODETEXT, hBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: Convert text from current console page to standard ANSI.
|
||||
// Alternatively one can use CF_OEMTEXT as done here.
|
||||
SetClipboardData(CF_OEMTEXT, hBuffer);
|
||||
}
|
||||
|
||||
CloseClipboard();
|
||||
return 0;
|
||||
|
||||
Failure:
|
||||
if (hBuffer) GlobalFree(hBuffer);
|
||||
PrintError(GetLastError());
|
||||
return -1;
|
||||
}
|
41
base/applications/cmdutils/clip/clip.rc
Normal file
41
base/applications/cmdutils/clip/clip.rc
Normal file
|
@ -0,0 +1,41 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Clip Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "clip"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "clip.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
#include "lang/es-ES.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
#include "lang/zh-CN.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
#include "lang/zh-TW.rc"
|
||||
#endif
|
9
base/applications/cmdutils/clip/lang/de-DE.rc
Normal file
9
base/applications/cmdutils/clip/lang/de-DE.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nGeben Sie ""CLIP /?"" ein, um die Syntax anzuzeigen.\n"
|
||||
IDS_HELP "\nLeitet die Ausgabe von Befehlszeilenprogrammen in die Zwischenablage um.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Zeigt diese Hilfe an.\n"
|
||||
END
|
9
base/applications/cmdutils/clip/lang/en-US.rc
Normal file
9
base/applications/cmdutils/clip/lang/en-US.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nType ""CLIP /?"" for usage information.\n"
|
||||
IDS_HELP "\nRedirects the output of command-line programs to the clipboard.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Show this help message.\n"
|
||||
END
|
11
base/applications/cmdutils/clip/lang/es-ES.rc
Normal file
11
base/applications/cmdutils/clip/lang/es-ES.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Spanish translation by Ismael Ferreras Morezuelas (Swyter) */
|
||||
|
||||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nPara ver los argumentos y opciones de uso escribe ""CLIP /?"".\n"
|
||||
IDS_HELP "\nRedirije la salida de programas de línea de comandos al portapapeles.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Muestra este mensaje de ayuda.\n"
|
||||
END
|
9
base/applications/cmdutils/clip/lang/fr-FR.rc
Normal file
9
base/applications/cmdutils/clip/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nEntrez ""CLIP /?"" pour afficher la syntaxe.\n"
|
||||
IDS_HELP "\nRedirige la sortie des programmes en ligne de commande vers le Presse-Papiers.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Affiche ce message d'aide.\n"
|
||||
END
|
10
base/applications/cmdutils/clip/lang/ro-RO.rc
Normal file
10
base/applications/cmdutils/clip/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nTastați ""CLIP /?"" pentru informațiile de utilizare.\n"
|
||||
IDS_HELP "\nRedirecționează în clipboard ieșirea programelor linie-de-comandă.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Afișează acest mesaj.\n"
|
||||
END
|
11
base/applications/cmdutils/clip/lang/ru-RU.rc
Normal file
11
base/applications/cmdutils/clip/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Russian language resource file by Kudratov Olimjon (olim98@bk.ru) */
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nВведите ""CLIP /?"" для получения справки по использованию.\n"
|
||||
IDS_HELP "\nПеренаправляет вывод от утилит командной строки в буфер обмена.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Вывод справки по использованию.\n"
|
||||
END
|
11
base/applications/cmdutils/clip/lang/tr-TR.rc
Normal file
11
base/applications/cmdutils/clip/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\nKullanım bilgisi için ""CLIP /?"" yazınız.\n"
|
||||
IDS_HELP "\nKomut yatacı izlencelerinin çıktısını panoya yönlendirir.\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? Bu yardım iletisini göster.\n"
|
||||
END
|
11
base/applications/cmdutils/clip/lang/zh-CN.rc
Normal file
11
base/applications/cmdutils/clip/lang/zh-CN.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Simplified Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\n输入 ""CLIP /?"" 知道用法信息。\n"
|
||||
IDS_HELP "\n将命令行程序的输出重定向到剪贴板。\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? 显示此帮助消息。\n"
|
||||
END
|
11
base/applications/cmdutils/clip/lang/zh-TW.rc
Normal file
11
base/applications/cmdutils/clip/lang/zh-TW.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "\n輸入 ""CLIP /?"" 知道用法資訊。\n"
|
||||
IDS_HELP "\n將命令列程式的輸出重定向到剪貼簿。\n\n\
|
||||
CLIP [/?]\n\n\
|
||||
/? 顯示此説明消息。\n"
|
||||
END
|
4
base/applications/cmdutils/clip/resource.h
Normal file
4
base/applications/cmdutils/clip/resource.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
#define IDS_USAGE 100
|
||||
#define IDS_HELP 101
|
8
base/applications/cmdutils/comp/CMakeLists.txt
Normal file
8
base/applications/cmdutils/comp/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
|
||||
add_executable(comp comp.c comp.rc)
|
||||
set_module_type(comp win32cui UNICODE)
|
||||
target_link_libraries(comp conutils ${PSEH_LIB})
|
||||
add_importlibs(comp msvcrt kernel32)
|
||||
add_cd_file(TARGET comp DESTINATION reactos/system32 FOR all)
|
245
base/applications/cmdutils/comp/comp.c
Normal file
245
base/applications/cmdutils/comp/comp.c
Normal file
|
@ -0,0 +1,245 @@
|
|||
/*
|
||||
* ReactOS Win32 Applications
|
||||
* Copyright (C) 2005 ReactOS Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* PROJECT: ReactOS Comp utility
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/comp/comp.c
|
||||
* PURPOSE: Compares the contents of two files
|
||||
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
|
||||
#include <conutils.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#define STRBUF 1024
|
||||
|
||||
/* getline: read a line, return length */
|
||||
INT GetBuff(PBYTE buff, FILE* in)
|
||||
{
|
||||
return fread(buff, sizeof(BYTE), STRBUF, in);
|
||||
}
|
||||
|
||||
INT FileSize(FILE* fd)
|
||||
{
|
||||
INT result = -1;
|
||||
if (fseek(fd, 0, SEEK_END) == 0 && (result = ftell(fd)) != -1)
|
||||
{
|
||||
/* Restoring file pointer */
|
||||
rewind(fd);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int wmain(int argc, WCHAR* argv[])
|
||||
{
|
||||
INT i;
|
||||
|
||||
/* File pointers */
|
||||
FILE *fp1 = NULL;
|
||||
FILE *fp2 = NULL;
|
||||
|
||||
INT BufLen1, BufLen2;
|
||||
PBYTE Buff1 = NULL;
|
||||
PBYTE Buff2 = NULL;
|
||||
WCHAR File1[_MAX_PATH + 1], // File paths
|
||||
File2[_MAX_PATH + 1];
|
||||
BOOL bAscii = FALSE, // /A switch
|
||||
bLineNos = FALSE; // /L switch
|
||||
UINT LineNumber;
|
||||
UINT Offset;
|
||||
INT FileSizeFile1;
|
||||
INT FileSizeFile2;
|
||||
INT NumberOfOptions = 0;
|
||||
INT FilesOK = 1;
|
||||
INT Status = EXIT_SUCCESS;
|
||||
|
||||
/* Initialize the Console Standard Streams */
|
||||
ConInitStdStreams();
|
||||
|
||||
/* Parse command line for options */
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] == L'/')
|
||||
{
|
||||
switch (towlower(argv[i][1]))
|
||||
{
|
||||
case L'a':
|
||||
bAscii = TRUE;
|
||||
NumberOfOptions++;
|
||||
break;
|
||||
|
||||
case L'l':
|
||||
bLineNos = TRUE;
|
||||
NumberOfOptions++;
|
||||
break;
|
||||
|
||||
case L'?':
|
||||
ConResPuts(StdOut, IDS_HELP);
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
default:
|
||||
ConResPrintf(StdErr, IDS_INVALIDSWITCH, argv[i][1]);
|
||||
ConResPuts(StdOut, IDS_HELP);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (argc - NumberOfOptions == 3)
|
||||
{
|
||||
wcsncpy(File1, argv[1 + NumberOfOptions], _MAX_PATH);
|
||||
wcsncpy(File2, argv[2 + NumberOfOptions], _MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConResPuts(StdErr, IDS_BADSYNTAX);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Buff1 = (PBYTE)malloc(STRBUF);
|
||||
if (Buff1 == NULL)
|
||||
{
|
||||
ConPuts(StdErr, L"Can't get free memory for Buff1\n");
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
Buff2 = (PBYTE)malloc(STRBUF);
|
||||
if (Buff2 == NULL)
|
||||
{
|
||||
ConPuts(StdErr, L"Can't get free memory for Buff2\n");
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
if ((fp1 = _wfopen(File1, L"rb")) == NULL)
|
||||
{
|
||||
ConResPrintf(StdErr, IDS_FILEERROR, File1);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
if ((fp2 = _wfopen(File2, L"rb")) == NULL)
|
||||
{
|
||||
ConResPrintf(StdErr, IDS_FILEERROR, File2);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
ConResPrintf(StdOut, IDS_COMPARING, File1, File2);
|
||||
|
||||
FileSizeFile1 = FileSize(fp1);
|
||||
if (FileSizeFile1 == -1)
|
||||
{
|
||||
ConResPrintf(StdErr, IDS_FILESIZEERROR, File1);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
FileSizeFile2 = FileSize(fp2);
|
||||
if (FileSizeFile2 == -1)
|
||||
{
|
||||
ConResPrintf(StdErr, IDS_FILESIZEERROR, File2);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
if (FileSizeFile1 != FileSizeFile2)
|
||||
{
|
||||
ConResPuts(StdOut, IDS_SIZEDIFFERS);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
LineNumber = 1;
|
||||
Offset = 0;
|
||||
while (1)
|
||||
{
|
||||
BufLen1 = GetBuff(Buff1, fp1);
|
||||
BufLen2 = GetBuff(Buff2, fp2);
|
||||
|
||||
if (ferror(fp1) || ferror(fp2))
|
||||
{
|
||||
ConResPuts(StdErr, IDS_READERROR);
|
||||
Status = EXIT_FAILURE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
if (!BufLen1 && !BufLen2)
|
||||
break;
|
||||
|
||||
assert(BufLen1 == BufLen2);
|
||||
for (i = 0; i < BufLen1; i++)
|
||||
{
|
||||
if (Buff1[i] != Buff2[i])
|
||||
{
|
||||
FilesOK = 0;
|
||||
|
||||
/* Reporting here a mismatch */
|
||||
if (bLineNos)
|
||||
ConResPrintf(StdOut, IDS_MISMATCHLINE, LineNumber);
|
||||
else
|
||||
ConResPrintf(StdOut, IDS_MISMATCHOFFSET, Offset);
|
||||
|
||||
if (bAscii)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_ASCIIDIFF, 1, Buff1[i]);
|
||||
ConResPrintf(StdOut, IDS_ASCIIDIFF, 2, Buff2[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_HEXADECIMALDIFF, 1, Buff1[i]);
|
||||
ConResPrintf(StdOut, IDS_HEXADECIMALDIFF, 2, Buff2[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Offset++;
|
||||
|
||||
if (Buff1[i] == '\n')
|
||||
LineNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
if (FilesOK)
|
||||
ConResPuts(StdOut, IDS_MATCH);
|
||||
|
||||
Cleanup:
|
||||
if (fp2)
|
||||
fclose(fp2);
|
||||
if (fp1)
|
||||
fclose(fp1);
|
||||
|
||||
if (Buff2)
|
||||
free(Buff2);
|
||||
if (Buff1)
|
||||
free(Buff1);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* EOF */
|
29
base/applications/cmdutils/comp/comp.rc
Normal file
29
base/applications/cmdutils/comp/comp.rc
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS File Compare Utility"
|
||||
#define REACTOS_STR_INTERNAL_NAME "comp"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "comp.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
23
base/applications/cmdutils/comp/lang/en-US.rc
Normal file
23
base/applications/cmdutils/comp/lang/en-US.rc
Normal file
|
@ -0,0 +1,23 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Compares the contents of two files or sets of files.\n\n\
|
||||
COMP [/L] [/A] [data1] [data2]\n\n\
|
||||
data1 Specifies location and name of first file to compare.\n\
|
||||
data2 Specifies location and name of second file to compare.\n\
|
||||
/A Display differences in ASCII characters (default: hexadecimal).\n\
|
||||
/L Display line numbers for differences.\n"
|
||||
IDS_INVALIDSWITCH "Invalid switch - /%c\n"
|
||||
IDS_BADSYNTAX "Bad command line syntax\n"
|
||||
IDS_FILEERROR "Cannot find/open file: %s\n"
|
||||
IDS_COMPARING "Comparing %s and %s...\n"
|
||||
IDS_FILESIZEERROR "Cannot determine size of file: %s\n"
|
||||
IDS_SIZEDIFFERS "Files are different sizes.\n"
|
||||
IDS_READERROR "Files read error.\n"
|
||||
IDS_MISMATCHLINE "Compare error at LINE %d\n"
|
||||
IDS_MISMATCHOFFSET "Compare error at OFFSET 0x%X\n"
|
||||
IDS_ASCIIDIFF "file%d = %c\n"
|
||||
IDS_HEXADECIMALDIFF "file%d = %X\n"
|
||||
IDS_MATCH "Files compare OK\n"
|
||||
END
|
23
base/applications/cmdutils/comp/lang/fr-FR.rc
Normal file
23
base/applications/cmdutils/comp/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,23 @@
|
|||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Compare le contenu de deux fichiers ou ensembles de fichiers.\n\n\
|
||||
COMP [/L] [/A] [data1] [data2]\n\n\
|
||||
data1 Spécifie l'emplacement et le nom du premier fichier à comparer.\n\
|
||||
data2 Spécifie l'emplacement et le nom du second fichier à comparer.\n\
|
||||
/A Affiche les différences en caractères ASCII (défaut: hexadécimal).\n\
|
||||
/L Affiche les numéros de ligne des différences.\n"
|
||||
IDS_INVALIDSWITCH "Paramètre invalide - /%c\n"
|
||||
IDS_BADSYNTAX "Syntaxe incorrecte\n"
|
||||
IDS_FILEERROR "Impossible de trouver/ouvrir le fichier : %s\n"
|
||||
IDS_COMPARING "Comparaison de %s et %s...\n"
|
||||
IDS_FILESIZEERROR "Ne peut pas déterminer la taille du fichier : %s\n"
|
||||
IDS_SIZEDIFFERS "Les fichiers sont de taille différente.\n"
|
||||
IDS_READERROR "Erreur lors de la lecture des fichiers.\n"
|
||||
IDS_MISMATCHLINE "Erreur de comparaison à LIGNE %d\n"
|
||||
IDS_MISMATCHOFFSET "Erreur de comparaison à OFFSET 0x%X\n"
|
||||
IDS_ASCIIDIFF "fichier%d = %c\n"
|
||||
IDS_HEXADECIMALDIFF "fichier%d = %X\n"
|
||||
IDS_MATCH "Comparaison des fichiers OK\n"
|
||||
END
|
24
base/applications/cmdutils/comp/lang/ro-RO.rc
Normal file
24
base/applications/cmdutils/comp/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Translator: Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Compară conținuturile a două fișiere sau grupuri de fișiere.\n\n\
|
||||
COMP [/L] [/A] [data1] [data2]\n\n\
|
||||
data1 Calea și numele primului fișier de comparat.\n\
|
||||
data2 Calea și numele celui de-al doilea fișier de comparat.\n\
|
||||
/A Afișează diferențele în caractere ASCII (implicit: hexazecimal).\n\
|
||||
/L Afișează numărul liniei pentru diferențe.\n"
|
||||
IDS_INVALIDSWITCH "Parametru nevalid - /%c\n"
|
||||
IDS_BADSYNTAX "Sintaxă eronată\n"
|
||||
IDS_FILEERROR "Nu poate fi găsit/deschis fișierul: %s\n"
|
||||
IDS_COMPARING "%s este comparat cu %s...\n"
|
||||
IDS_FILESIZEERROR "Eroare la determinarea dimensiunii fișierului: %s\n"
|
||||
IDS_SIZEDIFFERS "Fișierele au dimensiuni diferite.\n"
|
||||
IDS_READERROR "Eroare la citirea fișierelor.\n"
|
||||
IDS_MISMATCHLINE "Diferență identificată la linia %d\n"
|
||||
IDS_MISMATCHOFFSET "Diferență identificată la poziția 0x%X\n"
|
||||
IDS_ASCIIDIFF "fișier%d = %c\n"
|
||||
IDS_HEXADECIMALDIFF "fișier%d = %X\n"
|
||||
IDS_MATCH "Fișierele sunt identice\n"
|
||||
END
|
23
base/applications/cmdutils/comp/lang/ru-RU.rc
Normal file
23
base/applications/cmdutils/comp/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,23 @@
|
|||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Сравнение содержимого двух файлов или наборов файлов.\n\n\
|
||||
COMP [/L] [/A] [данные1] [данные2]\n\n\
|
||||
данные1 Расположение и имя первого файла для сравнения.\n\
|
||||
данные2 Расположение и имя второго файла для сравнения.\n\
|
||||
/A Вывод различий в формате ASCII (по умолчанию: шестнадцатиричный).\n\
|
||||
/L Вывод номеров строк, в которых обнаружены различия.\n"
|
||||
IDS_INVALIDSWITCH "Недопустимый ключ - /%c\n"
|
||||
IDS_BADSYNTAX "Не верный формат командной строки\n"
|
||||
IDS_FILEERROR "Не удалось найти/открыть файл: %s\n"
|
||||
IDS_COMPARING "Сравнение %s и %s...\n"
|
||||
IDS_FILESIZEERROR "Не удалось определить размер файла: %s\n"
|
||||
IDS_SIZEDIFFERS "Файлы разных размеров.\n"
|
||||
IDS_READERROR "Ошибка чтения файлов.\n"
|
||||
IDS_MISMATCHLINE "Ошибка сравнения в СТРОКЕ %d\n"
|
||||
IDS_MISMATCHOFFSET "Ошибка сравнения в ПОЗИЦИИ 0x%X\n"
|
||||
IDS_ASCIIDIFF "файл%d = %c\n"
|
||||
IDS_HEXADECIMALDIFF "файл%d = %X\n"
|
||||
IDS_MATCH "Различия не найдены\n"
|
||||
END
|
25
base/applications/cmdutils/comp/lang/tr-TR.rc
Normal file
25
base/applications/cmdutils/comp/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* TRANSLATOR: 2016 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "İki kütüğün ya da iki kütük öbeğinin içeriklerini karşılaştırır.\n\n\
|
||||
COMP [/L] [/A] [veri1] [veri2]\n\n\
|
||||
veri1 Karşılaştırılacak birinci kütüğün adını ve konumunu belirtir.\n\
|
||||
veri2 Karşılaştırılacak ikinci kütüğün adını ve konumunu belirtir.\n\
|
||||
/A ASCII damgalarındaki ayrımları görüntüle. (Ön tanımlı: On altılık.)\n\
|
||||
/L Ayrımlar için yataç numaraları görüntüle.\n"
|
||||
IDS_INVALIDSWITCH "Geçersiz seçenek - /%c\n"
|
||||
IDS_BADSYNTAX "Geçersiz komut yatacı söz dizimi.\n"
|
||||
IDS_FILEERROR "Kütük açılamıyor ya da aranamıyor: %s\n"
|
||||
IDS_COMPARING "%s ve %s karşılaştırılıyor...\n"
|
||||
IDS_FILESIZEERROR "Kütüğün büyüklüğü saptanamıyor: %s\n"
|
||||
IDS_SIZEDIFFERS "Kütükler ayrı büyüklüklerde.\n"
|
||||
IDS_READERROR "Kütükleri okuma yanlışlığı.\n"
|
||||
IDS_MISMATCHLINE "%d. yataçta karşılaştırma yanlışlığı.\n"
|
||||
IDS_MISMATCHOFFSET "0x%X ofsetinde karşılaştırma yanlışlığı.\n"
|
||||
IDS_ASCIIDIFF "kütük%d = %c\n"
|
||||
IDS_HEXADECIMALDIFF "kütük%d = %X\n"
|
||||
IDS_MATCH "Kütükleri karşılaştırma bitti.\n"
|
||||
END
|
15
base/applications/cmdutils/comp/resource.h
Normal file
15
base/applications/cmdutils/comp/resource.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#define IDS_HELP 100
|
||||
#define IDS_INVALIDSWITCH 101
|
||||
#define IDS_BADSYNTAX 102
|
||||
#define IDS_FILEERROR 103
|
||||
#define IDS_COMPARING 104
|
||||
#define IDS_FILESIZEERROR 105
|
||||
#define IDS_SIZEDIFFERS 106
|
||||
#define IDS_READERROR 107
|
||||
#define IDS_MISMATCHLINE 108
|
||||
#define IDS_MISMATCHOFFSET 109
|
||||
#define IDS_ASCIIDIFF 110
|
||||
#define IDS_HEXADECIMALDIFF 111
|
||||
#define IDS_MATCH 112
|
21
base/applications/cmdutils/cscript/CMakeLists.txt
Normal file
21
base/applications/cmdutils/cscript/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
add_definitions(-DCSCRIPT_BUILD)
|
||||
set(wscript_folder ${REACTOS_SOURCE_DIR}/base/applications/cmdutils/wscript)
|
||||
include_directories(${wscript_folder})
|
||||
|
||||
list(APPEND SOURCE
|
||||
${wscript_folder}/arguments.c
|
||||
${wscript_folder}/host.c
|
||||
${wscript_folder}/main.c
|
||||
${wscript_folder}/wscript.h)
|
||||
|
||||
add_executable(cscript ${SOURCE} rsrc.rc)
|
||||
add_idl_headers(cscript_idlheader ihost.idl)
|
||||
add_typelib(ihost.idl)
|
||||
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
|
||||
target_link_libraries(cscript uuid wine)
|
||||
set_module_type(cscript win32cui UNICODE)
|
||||
add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 ntdll)
|
||||
add_dependencies(cscript stdole2 cscript_idlheader)
|
||||
add_pch(cscript ${wscript_folder}/wscript.h SOURCE)
|
||||
add_cd_file(TARGET cscript DESTINATION reactos/system32 FOR all)
|
188
base/applications/cmdutils/cscript/ihost.idl
Normal file
188
base/applications/cmdutils/cscript/ihost.idl
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
* Copyright 2010 Jacek Caban for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#pragma makedep typelib
|
||||
|
||||
#include "ihost_dispid.h"
|
||||
|
||||
import "oaidl.idl";
|
||||
|
||||
[
|
||||
uuid(60254ca0-953b-11cf-8c96-00aa00b8708c),
|
||||
version(5.6),
|
||||
]
|
||||
library IHost
|
||||
{
|
||||
importlib("stdole2.tlb");
|
||||
|
||||
[
|
||||
odl,
|
||||
uuid(2cc5a9d1-b1e5-11d3-a286-00104bd35090),
|
||||
dual,
|
||||
oleautomation
|
||||
]
|
||||
interface IArguments2 : IDispatch {
|
||||
[id(DISPID_VALUE)]
|
||||
HRESULT Item(
|
||||
[in] LONG Index,
|
||||
[out, retval] BSTR *out_Value);
|
||||
|
||||
[id(IARGUMENTS2_COUNT_DISPID)]
|
||||
HRESULT Count([out, retval] LONG *out_Count);
|
||||
|
||||
[id(IARGUMENTS2_LENGTH_DISPID), propget]
|
||||
HRESULT length([out, retval] LONG *out_Count);
|
||||
}
|
||||
|
||||
[
|
||||
odl,
|
||||
uuid(53bad8c1-e718-11cf-893d-00a0c9054228),
|
||||
hidden,
|
||||
dual,
|
||||
nonextensible,
|
||||
oleautomation
|
||||
]
|
||||
interface ITextStream : IDispatch {
|
||||
[id(ITEXTSTREAM_LINE_DISPID), propget]
|
||||
HRESULT Line([out, retval] LONG *Line);
|
||||
|
||||
[id(ITEXTSTREAM_COLUMN_DISPID), propget]
|
||||
HRESULT Column([out, retval] LONG *Column);
|
||||
|
||||
[id(ITEXTSTREAM_ATENDOFSTREAM_DISPID), propget]
|
||||
HRESULT AtEndOfStream([out, retval] VARIANT_BOOL *EOS);
|
||||
|
||||
[id(ITEXTSTREAM_ATENDOFLINE_DISPID), propget]
|
||||
HRESULT AtEndOfLine([out, retval] VARIANT_BOOL *EOL);
|
||||
|
||||
[id(ITEXTSTREAM_READ_DISPID)]
|
||||
HRESULT Read(
|
||||
[in] LONG Characters,
|
||||
[out, retval] BSTR *Text);
|
||||
|
||||
[id(ITEXTSTREAM_READLINE_DISPID)]
|
||||
HRESULT ReadLine([out, retval] BSTR *Text);
|
||||
|
||||
[id(ITEXTSTREAM_READALL_DISPID)]
|
||||
HRESULT ReadAll([out, retval] BSTR *Text);
|
||||
|
||||
[id(ITEXTSTREAM_WRITE_DISPID)]
|
||||
HRESULT Write([in] BSTR Text);
|
||||
|
||||
[id(ITEXTSTREAM_WRITELINE_DISPID)]
|
||||
HRESULT WriteLine([in, optional, defaultvalue("")] BSTR Text);
|
||||
|
||||
[id(ITEXTSTREAM_WRITEBLANKLINES_DISPID)]
|
||||
HRESULT WriteBlankLines([in] LONG Lines);
|
||||
|
||||
[id(ITEXTSTREAM_SKIP_DISPID)]
|
||||
HRESULT Skip([in] LONG Characters);
|
||||
|
||||
[id(ITEXTSTREAM_SKIPLINE_DISPID)]
|
||||
HRESULT SkipLine();
|
||||
|
||||
[id(ITEXTSTREAM_CLOSE_DISPID)]
|
||||
HRESULT Close();
|
||||
}
|
||||
|
||||
[
|
||||
odl,
|
||||
uuid(91afbd1b-5feb-43f5-b028-e2ca960617ec),
|
||||
dual,
|
||||
oleautomation
|
||||
]
|
||||
interface IHost : IDispatch {
|
||||
[id(IHOST_NAME_DISPID), propget]
|
||||
HRESULT Name([out, retval] BSTR *out_Name);
|
||||
|
||||
[id(IHOST_APPLICATION_DISPID), propget]
|
||||
HRESULT Application([out, retval] IDispatch **out_Dispatch);
|
||||
|
||||
[id(IHOST_FULLNAME_DISPID), propget]
|
||||
HRESULT FullName([out, retval] BSTR *out_Path);
|
||||
|
||||
[id(IHOST_PATH_DISPID), propget]
|
||||
HRESULT Path([out, retval] BSTR* out_Path);
|
||||
|
||||
[id(IHOST_INTERACTIVE_DISPID), propget]
|
||||
HRESULT Interactive([out, retval] VARIANT_BOOL *out_Interactive);
|
||||
|
||||
[id(IHOST_INTERACTIVE_DISPID), propput]
|
||||
HRESULT Interactive([in] VARIANT_BOOL out_Interactive);
|
||||
|
||||
[id(IHOST_QUIT_DISPID)]
|
||||
HRESULT Quit([in, optional, defaultvalue(0)] int ExitCode);
|
||||
|
||||
[id(IHOST_SCRIPTNAME_DISPID), propget]
|
||||
HRESULT ScriptName([out, retval] BSTR *out_ScriptName);
|
||||
|
||||
[id(IHOST_SCRIPTFULLNAME_DISPID), propget]
|
||||
HRESULT ScriptFullName([out, retval] BSTR* out_ScriptFullName);
|
||||
|
||||
[id(IHOST_ARGUMENTS_DISPID), propget]
|
||||
HRESULT Arguments([out, retval] IArguments2 **out_Arguments);
|
||||
|
||||
[id(IHOST_VERSION_DISPID), propget]
|
||||
HRESULT Version([out, retval] BSTR *out_Version);
|
||||
|
||||
[id(IHOST_BUILDVERSION_DISPID), propget]
|
||||
HRESULT BuildVersion([out, retval] int *out_Build);
|
||||
|
||||
[id(IHOST_TIMEOUT_DISPID), propget]
|
||||
HRESULT Timeout([out, retval] LONG *out_Timeout);
|
||||
|
||||
[id(IHOST_TIMEOUT_DISPID), propput]
|
||||
HRESULT Timeout([in] LONG out_Timeout);
|
||||
|
||||
[id(IHOST_CREATEOBJECT_DISPID)]
|
||||
HRESULT CreateObject(
|
||||
[in] BSTR ProgID,
|
||||
[in, optional, defaultvalue("")] BSTR Prefix,
|
||||
[out, retval] IDispatch **out_Dispatch);
|
||||
|
||||
[id(IHOST_ECHO_DISPID), vararg]
|
||||
HRESULT Echo([in] SAFEARRAY(VARIANT) pArgs);
|
||||
|
||||
[id(IHOST_GETOBJECT_DISPID)]
|
||||
HRESULT GetObject(
|
||||
[in] BSTR Pathname,
|
||||
[in, optional, defaultvalue("")] BSTR ProgID,
|
||||
[in, optional, defaultvalue("")] BSTR Prefix,
|
||||
[out, retval] IDispatch **out_Dispatch);
|
||||
|
||||
[id(IHOST_DISCONNECTOBJECT_DISPID)]
|
||||
HRESULT DisconnectObject([in] IDispatch *Object);
|
||||
|
||||
[id(IHOST_SLEEP_DISPID)]
|
||||
HRESULT Sleep([in] LONG Time);
|
||||
|
||||
[id(IHOST_CONNECTOBJECT_DISPID)]
|
||||
HRESULT ConnectObject(
|
||||
[in] IDispatch *Object,
|
||||
[in] BSTR Prefix);
|
||||
|
||||
[id(IHOST_STDIN_DISPID), propget]
|
||||
HRESULT StdIn([out, retval] ITextStream **out_ppts);
|
||||
|
||||
[id(IHOST_STDOUT_DISPID), propget]
|
||||
HRESULT StdOut([out, retval] ITextStream **ppts);
|
||||
|
||||
[id(IHOST_STDERR_DISPID), propget]
|
||||
HRESULT StdErr([out, retval] ITextStream **ppts);
|
||||
}
|
||||
}
|
20
base/applications/cmdutils/cscript/rsrc.rc
Normal file
20
base/applications/cmdutils/cscript/rsrc.rc
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright 2010 Jacek Caban for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/* @makedep: ihost.tlb */
|
||||
1 TYPELIB ihost.tlb
|
5
base/applications/cmdutils/dbgprint/CMakeLists.txt
Normal file
5
base/applications/cmdutils/dbgprint/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
add_executable(dbgprint dbgprint.c)
|
||||
set_module_type(dbgprint win32cui)
|
||||
add_importlibs(dbgprint msvcrt kernel32)
|
||||
add_cd_file(TARGET dbgprint DESTINATION reactos/system32 FOR all)
|
128
base/applications/cmdutils/dbgprint/dbgprint.c
Normal file
128
base/applications/cmdutils/dbgprint/dbgprint.c
Normal file
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DbgPrint Utility
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/dbgprint/dbgprint.c
|
||||
* PURPOSE: outputs a text via DbgPrint API
|
||||
* PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
|
||||
* Christoph von Wittich (Christoph_vW@ReactOS.org)
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <tchar.h>
|
||||
//#include <debug.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int _tmain(int argc, TCHAR ** argv)
|
||||
{
|
||||
TCHAR * buf;
|
||||
int bufsize;
|
||||
int i;
|
||||
int offset;
|
||||
|
||||
bufsize = 0;
|
||||
for(i = 1; i < argc; i++)
|
||||
{
|
||||
bufsize += _tcslen(argv[i]) + 1;
|
||||
}
|
||||
|
||||
if (!bufsize)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (_tcsstr(argv[1], "--winetest") && (argc == 3))
|
||||
{
|
||||
char psBuffer[128];
|
||||
char psBuffer2[128];
|
||||
char *nlptr2;
|
||||
char cmd[255];
|
||||
char test[300];
|
||||
FILE *pPipe;
|
||||
FILE *pPipe2;
|
||||
|
||||
/* get available tests */
|
||||
strcpy(cmd, argv[2]);
|
||||
strcat(cmd, " --list");
|
||||
pPipe = _tpopen(cmd, "r");
|
||||
if (pPipe != NULL)
|
||||
{
|
||||
while(fgets(psBuffer, 128, pPipe))
|
||||
{
|
||||
if (psBuffer[0] == ' ')
|
||||
{
|
||||
strcpy(cmd, argv[2]);
|
||||
strcat(cmd, " ");
|
||||
strcat(cmd, psBuffer+4);
|
||||
/* run the current test */
|
||||
strcpy(test, "\n\nRunning ");
|
||||
strcat(test, cmd);
|
||||
OutputDebugStringA(test);
|
||||
pPipe2 = _popen(cmd, "r");
|
||||
if (pPipe2 != NULL)
|
||||
{
|
||||
while(fgets(psBuffer2, 128, pPipe2))
|
||||
{
|
||||
nlptr2 = strchr(psBuffer2, '\n');
|
||||
if (nlptr2)
|
||||
*nlptr2 = '\0';
|
||||
puts(psBuffer2);
|
||||
if (nlptr2)
|
||||
*nlptr2 = '\n';
|
||||
OutputDebugStringA(psBuffer2);
|
||||
}
|
||||
_pclose(pPipe2);
|
||||
}
|
||||
}
|
||||
}
|
||||
_pclose(pPipe);
|
||||
}
|
||||
}
|
||||
else if (_tcsstr(argv[1], "--process") && (argc == 3))
|
||||
{
|
||||
char psBuffer[128];
|
||||
FILE *pPipe;
|
||||
|
||||
pPipe = _tpopen(argv[2], "r");
|
||||
if (pPipe != NULL)
|
||||
{
|
||||
while(fgets(psBuffer, 128, pPipe))
|
||||
{
|
||||
puts(psBuffer);
|
||||
OutputDebugStringA(psBuffer);
|
||||
}
|
||||
_pclose(pPipe);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf = HeapAlloc(GetProcessHeap(), 0, (bufsize+1) * sizeof(TCHAR));
|
||||
if (!buf)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
offset = 0;
|
||||
for(i = 1; i < argc; i++)
|
||||
{
|
||||
int length = _tcslen(argv[i]);
|
||||
_tcsncpy(&buf[offset], argv[i], length);
|
||||
offset += length;
|
||||
if (i + 1 < argc)
|
||||
{
|
||||
buf[offset] = _T(' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[offset] = _T('\n');
|
||||
buf[offset+1] = _T('\0');
|
||||
}
|
||||
offset++;
|
||||
}
|
||||
_putts(buf);
|
||||
OutputDebugString(buf);
|
||||
HeapFree(GetProcessHeap(), 0, buf);
|
||||
}
|
||||
return 0;
|
||||
}
|
5
base/applications/cmdutils/doskey/CMakeLists.txt
Normal file
5
base/applications/cmdutils/doskey/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
add_executable(doskey doskey.c doskey.rc)
|
||||
set_module_type(doskey win32cui UNICODE)
|
||||
add_importlibs(doskey user32 msvcrt kernel32)
|
||||
add_cd_file(TARGET doskey DESTINATION reactos/system32 FOR all)
|
300
base/applications/cmdutils/doskey/doskey.c
Normal file
300
base/applications/cmdutils/doskey/doskey.c
Normal file
|
@ -0,0 +1,300 @@
|
|||
#include <stdio.h>
|
||||
#include <wchar.h>
|
||||
#include <locale.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
|
||||
/* Console API functions which are absent from wincon.h */
|
||||
VOID
|
||||
WINAPI
|
||||
ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName);
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetConsoleCommandHistoryW(LPWSTR lpHistory,
|
||||
DWORD cbHistory,
|
||||
LPCWSTR lpExeName);
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName);
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
|
||||
LPCWSTR lpExeName);
|
||||
|
||||
#include "doskey.h"
|
||||
|
||||
#define MAX_STRING 2000
|
||||
WCHAR szStringBuf[MAX_STRING];
|
||||
LPWSTR pszExeName = L"cmd.exe";
|
||||
|
||||
static VOID SetInsert(DWORD dwFlag)
|
||||
{
|
||||
/*
|
||||
* NOTE: Enabling the ENABLE_INSERT_MODE mode can also be done by calling
|
||||
* kernel32:SetConsoleCommandHistoryMode(CONSOLE_OVERSTRIKE) .
|
||||
*/
|
||||
DWORD dwMode;
|
||||
HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
|
||||
GetConsoleMode(hConsole, &dwMode);
|
||||
dwMode |= ENABLE_EXTENDED_FLAGS;
|
||||
SetConsoleMode(hConsole, (dwMode & ~ENABLE_INSERT_MODE) | dwFlag);
|
||||
}
|
||||
|
||||
static VOID PrintHistory(VOID)
|
||||
{
|
||||
DWORD Length = GetConsoleCommandHistoryLengthW(pszExeName);
|
||||
PBYTE HistBuf;
|
||||
WCHAR *Hist;
|
||||
WCHAR *HistEnd;
|
||||
|
||||
HistBuf = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
Length);
|
||||
if (!HistBuf) return;
|
||||
Hist = (WCHAR *)HistBuf;
|
||||
HistEnd = (WCHAR *)&HistBuf[Length];
|
||||
|
||||
if (GetConsoleCommandHistoryW(Hist, Length, pszExeName))
|
||||
{
|
||||
for (; Hist < HistEnd; Hist += wcslen(Hist) + 1)
|
||||
{
|
||||
wprintf(L"%s\n", Hist);
|
||||
}
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, HistBuf);
|
||||
}
|
||||
|
||||
static INT SetMacro(LPWSTR definition)
|
||||
{
|
||||
WCHAR *name, *nameend, *text, temp;
|
||||
|
||||
name = definition;
|
||||
while (*name == L' ')
|
||||
name++;
|
||||
|
||||
/* error if no '=' found */
|
||||
if ((nameend = wcschr(name, L'=')) != NULL)
|
||||
{
|
||||
text = nameend + 1;
|
||||
while (*text == L' ')
|
||||
text++;
|
||||
|
||||
while (nameend > name && nameend[-1] == L' ')
|
||||
nameend--;
|
||||
|
||||
/* Split rest into name and substitute */
|
||||
temp = *nameend;
|
||||
*nameend = L'\0';
|
||||
/* Don't allow spaces in the name, since such a macro would be unusable */
|
||||
if (!wcschr(name, L' ') && AddConsoleAliasW(name, text, pszExeName))
|
||||
return 0;
|
||||
*nameend = temp;
|
||||
}
|
||||
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_INVALID_MACRO_DEF, szStringBuf, MAX_STRING);
|
||||
wprintf(szStringBuf, definition);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static VOID PrintMacros(LPWSTR pszExeName, LPWSTR Indent)
|
||||
{
|
||||
DWORD Length = GetConsoleAliasesLengthW(pszExeName);
|
||||
PBYTE AliasBuf;
|
||||
WCHAR *Alias;
|
||||
WCHAR *AliasEnd;
|
||||
|
||||
AliasBuf = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
Length * sizeof(BYTE));
|
||||
if (!AliasBuf) return;
|
||||
Alias = (WCHAR *)AliasBuf;
|
||||
AliasEnd = (WCHAR *)&AliasBuf[Length];
|
||||
|
||||
if (GetConsoleAliasesW(Alias, Length * sizeof(BYTE), pszExeName))
|
||||
{
|
||||
for (; Alias < AliasEnd; Alias += wcslen(Alias) + 1)
|
||||
{
|
||||
wprintf(L"%s%s\n", Indent, Alias);
|
||||
}
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, AliasBuf);
|
||||
}
|
||||
|
||||
static VOID PrintAllMacros(VOID)
|
||||
{
|
||||
DWORD Length = GetConsoleAliasExesLength();
|
||||
PBYTE ExeNameBuf;
|
||||
WCHAR *ExeName;
|
||||
WCHAR *ExeNameEnd;
|
||||
|
||||
ExeNameBuf = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
Length * sizeof(BYTE));
|
||||
if (!ExeNameBuf) return;
|
||||
ExeName = (WCHAR *)ExeNameBuf;
|
||||
ExeNameEnd = (WCHAR *)&ExeNameBuf[Length];
|
||||
|
||||
if (GetConsoleAliasExesW(ExeName, Length * sizeof(BYTE)))
|
||||
{
|
||||
for (; ExeName < ExeNameEnd; ExeName += wcslen(ExeName) + 1)
|
||||
{
|
||||
wprintf(L"[%s]\n", ExeName);
|
||||
PrintMacros(ExeName, L" ");
|
||||
wprintf(L"\n");
|
||||
}
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, ExeNameBuf);
|
||||
}
|
||||
|
||||
static VOID ReadFromFile(LPWSTR param)
|
||||
{
|
||||
FILE* fp;
|
||||
WCHAR line[MAX_PATH];
|
||||
|
||||
fp = _wfopen(param, L"r");
|
||||
if (!fp)
|
||||
{
|
||||
_wperror(param);
|
||||
return;
|
||||
}
|
||||
|
||||
while ( fgetws(line, MAX_PATH, fp) != NULL)
|
||||
{
|
||||
/* Remove newline character */
|
||||
WCHAR *end = &line[wcslen(line) - 1];
|
||||
if (*end == L'\n')
|
||||
*end = L'\0';
|
||||
|
||||
if (*line)
|
||||
SetMacro(line);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the start and end of the next command-line argument. */
|
||||
static BOOL GetArg(WCHAR **pStart, WCHAR **pEnd)
|
||||
{
|
||||
BOOL bInQuotes = FALSE;
|
||||
WCHAR *p = *pEnd;
|
||||
p += wcsspn(p, L" \t");
|
||||
if (!*p)
|
||||
return FALSE;
|
||||
*pStart = p;
|
||||
do
|
||||
{
|
||||
if (!bInQuotes && (*p == L' ' || *p == L'\t'))
|
||||
break;
|
||||
bInQuotes ^= (*p++ == L'"');
|
||||
} while (*p);
|
||||
*pEnd = p;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Remove starting and ending quotes from a string, if present */
|
||||
static LPWSTR RemoveQuotes(LPWSTR str)
|
||||
{
|
||||
WCHAR *end;
|
||||
if (*str == L'"' && *(end = str + wcslen(str) - 1) == L'"')
|
||||
{
|
||||
str++;
|
||||
*end = L'\0';
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
int
|
||||
wmain(VOID)
|
||||
{
|
||||
WCHAR *pArgStart;
|
||||
WCHAR *pArgEnd;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
/* Get the full command line using GetCommandLine(). We can't just use argv,
|
||||
* because then a parameter like "gotoroot=cd \" wouldn't be passed completely. */
|
||||
pArgEnd = GetCommandLineW();
|
||||
|
||||
/* Skip the application name */
|
||||
GetArg(&pArgStart, &pArgEnd);
|
||||
|
||||
while (GetArg(&pArgStart, &pArgEnd))
|
||||
{
|
||||
/* NUL-terminate this argument to make processing easier */
|
||||
WCHAR tmp = *pArgEnd;
|
||||
*pArgEnd = L'\0';
|
||||
|
||||
if (!wcscmp(pArgStart, L"/?"))
|
||||
{
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_HELP, szStringBuf, MAX_STRING);
|
||||
wprintf(szStringBuf);
|
||||
break;
|
||||
}
|
||||
else if (!_wcsnicmp(pArgStart, L"/EXENAME=", 9))
|
||||
{
|
||||
pszExeName = RemoveQuotes(pArgStart + 9);
|
||||
}
|
||||
else if (!wcsicmp(pArgStart, L"/H") ||
|
||||
!wcsicmp(pArgStart, L"/HISTORY"))
|
||||
{
|
||||
PrintHistory();
|
||||
}
|
||||
else if (!_wcsnicmp(pArgStart, L"/LISTSIZE=", 10))
|
||||
{
|
||||
SetConsoleNumberOfCommandsW(_wtoi(pArgStart + 10), pszExeName);
|
||||
}
|
||||
else if (!wcsicmp(pArgStart, L"/REINSTALL"))
|
||||
{
|
||||
ExpungeConsoleCommandHistoryW(pszExeName);
|
||||
}
|
||||
else if (!wcsicmp(pArgStart, L"/INSERT"))
|
||||
{
|
||||
SetInsert(ENABLE_INSERT_MODE);
|
||||
}
|
||||
else if (!wcsicmp(pArgStart, L"/OVERSTRIKE"))
|
||||
{
|
||||
SetInsert(0);
|
||||
}
|
||||
else if (!wcsicmp(pArgStart, L"/M") ||
|
||||
!wcsicmp(pArgStart, L"/MACROS"))
|
||||
{
|
||||
PrintMacros(pszExeName, L"");
|
||||
}
|
||||
else if (!_wcsnicmp(pArgStart, L"/M:", 3) ||
|
||||
!_wcsnicmp(pArgStart, L"/MACROS:", 8))
|
||||
{
|
||||
LPWSTR exe = RemoveQuotes(wcschr(pArgStart, L':') + 1);
|
||||
if (!wcsicmp(exe, L"ALL"))
|
||||
PrintAllMacros();
|
||||
else
|
||||
PrintMacros(exe, L"");
|
||||
}
|
||||
else if (!_wcsnicmp(pArgStart, L"/MACROFILE=", 11))
|
||||
{
|
||||
ReadFromFile(RemoveQuotes(pArgStart + 11));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is the beginning of a macro definition. It includes
|
||||
* the entire remainder of the line, so first put back the
|
||||
* character that we replaced with NUL. */
|
||||
*pArgEnd = tmp;
|
||||
return SetMacro(pArgStart);
|
||||
}
|
||||
|
||||
if (!tmp) break;
|
||||
pArgEnd++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
4
base/applications/cmdutils/doskey/doskey.h
Normal file
4
base/applications/cmdutils/doskey/doskey.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
#define IDS_HELP 0
|
||||
#define IDS_INVALID_MACRO_DEF 1
|
57
base/applications/cmdutils/doskey/doskey.rc
Normal file
57
base/applications/cmdutils/doskey/doskey.rc
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "doskey.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Doskey Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "doskey"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "doskey.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
#include "lang/bg-BG.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
#include "lang/es-ES.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
#include "lang/it-IT.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
#include "lang/pl-PL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
#include "lang/sv-SE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
#include "lang/sq-AL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
#include "lang/uk-UA.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
#include "lang/zh-CN.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
#include "lang/zh-TW.rc"
|
||||
#endif
|
24
base/applications/cmdutils/doskey/lang/bg-BG.rc
Normal file
24
base/applications/cmdutils/doskey/lang/bg-BG.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Управлява настройките за обработка в командния ред, дневника и макротата.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=размер]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=файл] [macroname=[текст]]\n\
|
||||
\n\
|
||||
/INSERT Включва режим на вмъкване.\n\
|
||||
/OVERSTRIKE Изключва режима на вмъкване.\n\
|
||||
/EXENAME=именаexe Указва името на приложението за преглед/промяна на дневника\n\
|
||||
и макротата. По подразбиране е cmd.exe.\n\
|
||||
/HISTORY Показва дневника на заповедите.\n\
|
||||
/LISTSIZE=размер Указва размера на дневника за заповеди.\n\
|
||||
/REINSTALL Изчиства дневника на заповедите.\n\
|
||||
/MACROS Показва зададените макрота.\n\
|
||||
/MACROS:именаexe Показва зададените макрота за определено приложение.\n\
|
||||
/MACROS:ALL Показва зададените макрота за всички приложения.\n\
|
||||
/MACROFILE=файловоиме Зарежда макрота от файл.\n\
|
||||
macroname Указва името на макрото, което да бъде създадено.\n\
|
||||
text Указва текстът за замяна от макрото.\n"
|
||||
IDS_INVALID_MACRO_DEF "Неправилно определено макро: %s\n"
|
||||
END
|
25
base/applications/cmdutils/doskey/lang/de-DE.rc
Normal file
25
base/applications/cmdutils/doskey/lang/de-DE.rc
Normal file
|
@ -0,0 +1,25 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Verwaltet Einstellungen, Verlauf und Makros der Kommandozeile.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Aktiviert den Einfügemodus.\n\
|
||||
/OVERSTRIKE Deaktiviert den Einfügemodus.\n\
|
||||
/EXENAME=exename Gibt den Namen der Anwendung an, deren Einstellungen\n\
|
||||
angezeigt oder geändert werden sollen.\n\
|
||||
Der Standardwert ist cmd.exe.\n\
|
||||
/HISTORY Zeigt den Befehlsverlauf an.\n\
|
||||
/LISTSIZE=size Legt die Anzahl der Befehle per Verlaufspuffer fest.\n\
|
||||
/REINSTALL Leert den Befehlsverlauf.\n\
|
||||
/MACROS Zeigt Makrodefinitionen an.\n\
|
||||
/MACROS:exename Zeigt Makrodefinitionen für eine Anwendung an.\n\
|
||||
/MACROS:ALL Zeigt Makrodefinitionen für alle Anwendungen an.\n\
|
||||
/MACROFILE=file Lädt Makrodefinitionen aus einer Datei.\n\
|
||||
macroname Legt den Namen eines zu erstellenden Makros fest.\n\
|
||||
text Legt den ersetzenden Text des Makros fest.\n"
|
||||
IDS_INVALID_MACRO_DEF "Ungültige Makrodefinition: %s\n"
|
||||
END
|
24
base/applications/cmdutils/doskey/lang/en-US.rc
Normal file
24
base/applications/cmdutils/doskey/lang/en-US.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Manages command-line editing settings, history, and macros.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Enables insert mode.\n\
|
||||
/OVERSTRIKE Disables insert mode.\n\
|
||||
/EXENAME=exename Sets the name of the program to view/change history\n\
|
||||
and macros for. The default is cmd.exe.\n\
|
||||
/HISTORY Displays the command history.\n\
|
||||
/LISTSIZE=size Sets the number of commands per history buffer.\n\
|
||||
/REINSTALL Clears the command history.\n\
|
||||
/MACROS Displays macro definitions.\n\
|
||||
/MACROS:exename Displays macro definitions for a specific program.\n\
|
||||
/MACROS:ALL Displays macro definitions for all programs.\n\
|
||||
/MACROFILE=file Loads macro definitions from a file.\n\
|
||||
macroname Specifies the name of a macro to create.\n\
|
||||
text Specifies the replacement text for the macro.\n"
|
||||
IDS_INVALID_MACRO_DEF "Invalid macro definition: %s\n"
|
||||
END
|
24
base/applications/cmdutils/doskey/lang/es-ES.rc
Normal file
24
base/applications/cmdutils/doskey/lang/es-ES.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Administra la configuración de edición en línea de comandos del historial y de las macros.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Activa el modo de inserción.\n\
|
||||
/OVERSTRIKE Desactiva el modo de inserción.\n\
|
||||
/EXENAME=exename Establece el nombre del programa para ver/cambiar el historial\n\
|
||||
y las macros. El valor predeterminado es cmd.exe.\n\
|
||||
/HISTORY Muestra el historial de comandos.\n\
|
||||
/LISTSIZE=size Establece el número de comandos por buffer de historial.\n\
|
||||
/REINSTALL Borra el historial de comandos.\n\
|
||||
/MACROS Muestra las definiciones de las macros.\n\
|
||||
/MACROS:exename Muestra las definiciones de las macros para un programa específico.\n\
|
||||
/MACROS:ALL Muestra las definiciones de las macros para todos los programas.\n\
|
||||
/MACROFILE=file Carga las definiciones de las macros desde un archivo.\n\
|
||||
macroname Especifica el nombre de una macro a crear.\n\
|
||||
text Especifica el texto de reemplazo para la macro.\n"
|
||||
IDS_INVALID_MACRO_DEF "Definición de macro inválida: %s\n"
|
||||
END
|
24
base/applications/cmdutils/doskey/lang/fr-FR.rc
Normal file
24
base/applications/cmdutils/doskey/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Gère les paramètres d'édition en ligne de commande de l'historique et des macros.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Active le mode insertion.\n\
|
||||
/OVERSTRIKE Désactive le mode insertion.\n\
|
||||
/EXENAME=exename Définit le nom du programme pour afficher/modifier l'historique\n\
|
||||
et les macros. La valeur par défaut est cmd.exe.\n\
|
||||
/HISTORY Affiche l'historique des commandes.\n\
|
||||
/LISTSIZE=size Définit le nombre de commandes par tampon d'historique.\n\
|
||||
/REINSTALL Efface l'historique des commandes.\n\
|
||||
/MACROS Affiche les définitions de macros.\n\
|
||||
/MACROS:exename Affiche les définitions de macros pour un programme spécifique.\n\
|
||||
/MACROS:ALL Affiche les définitions de macros pour tous les programmes.\n\
|
||||
/MACROFILE=file Charge les définitions de macros à partir d'un fichier.\n\
|
||||
macroname Définit le nom d'une macro à créer.\n\
|
||||
text Définit le texte de remplacement pour la macro.\n"
|
||||
IDS_INVALID_MACRO_DEF "Définition de macro invalide: %s\n"
|
||||
END
|
24
base/applications/cmdutils/doskey/lang/it-IT.rc
Normal file
24
base/applications/cmdutils/doskey/lang/it-IT.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Gestisce le impostazioni della riga di comando di editing, la cronologia e le macro.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Attiva la modalità di inserimento.\n\
|
||||
/OVERSTRIKE Disattiva la modalità di inserimento.\n\
|
||||
/EXENAME=exename Consente di impostare il nome del programma per visualizzare/cambiare la cronologia\n\
|
||||
e le macro. Il valore predefinito è cmd.exe.\n\
|
||||
/HISTORY Consente di visualizzare la cronologia dei comandi.\n\
|
||||
/LISTSIZE=size Imposta il numero di comandi al buffer storico.\n\
|
||||
/REINSTALL Cancella la cronologia dei comandi.\n\
|
||||
/MACROS Consente di visualizzare le definizioni delle macro.\n\
|
||||
/MACROS:exename Visualizza le definizioni di macro per un programma specifico.\n\
|
||||
/MACROS:ALL Visualizza le definizioni macro per tutti i programmi.\n\
|
||||
/MACROFILE=file Carica le definizioni di macro da un file.\n\
|
||||
macroname Specifica il nome di una macro per creare.\n\
|
||||
text Consente di specificare il testo di sostituzione per la macro.\n"
|
||||
IDS_INVALID_MACRO_DEF "Definizion macro non valida: %s\n"
|
||||
END
|
32
base/applications/cmdutils/doskey/lang/pl-PL.rc
Normal file
32
base/applications/cmdutils/doskey/lang/pl-PL.rc
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Translated by Saibamen - Adam Stachowicz (Apr, 2011)
|
||||
* Use ReactOS forum PM, IRC or saibamenppl at gmail.com to contact me
|
||||
* http://www.reactos.org
|
||||
* IRC: irc.freenode.net #reactos-pl
|
||||
* UTF-8 conversion by Caemyr (May, 2011)
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Zarządza ustawieniami linii komend, historii i makr.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=rozmiar]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=plik] [macroname=[tekst]]\n\
|
||||
\n\
|
||||
/INSERT Włącza tryb wstawiania tekstu.\n\
|
||||
/OVERSTRIKE Wyłącza tryb nadpisywania tekstu.\n\
|
||||
/EXENAME=exename Ustawia nazwę programu do przeglądania/zmiany historii\n\
|
||||
i makra. Domyślnie jest to cmd.exe.\n\
|
||||
/HISTORY Wyświetla historię komend.\n\
|
||||
/LISTSIZE=rozmiar Ustawia ilość wyświetlanych komend dla buforu historii.\n\
|
||||
/REINSTALL Czyści historię komend.\n\
|
||||
/MACROS Wyświetla definicje makro.\n\
|
||||
/MACROS:exename Wyświetla definicję makro dla określonego programu.\n\
|
||||
/MACROS:ALL Wyświetla definicje makro dla wszystkich programów.\n\
|
||||
/MACROFILE=plik Ładuje definicję makro z pliku.\n\
|
||||
macroname Nazwa dla tworzonego makro.\n\
|
||||
tekst Określa zastępczy tekst dla makro.\n"
|
||||
IDS_INVALID_MACRO_DEF "Nieprawidłowa definicja makro: %s\n"
|
||||
END
|
34
base/applications/cmdutils/doskey/lang/ro-RO.rc
Normal file
34
base/applications/cmdutils/doskey/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* FILE: base/applications/cmdutils/doskey/lang/ro-RO.rc
|
||||
* ReactOS Project (http://www.reactos.org)
|
||||
* TRANSLATOR: Fulea Ștefan (PM on ReactOS Forum at fulea.stefan)
|
||||
* CHANGE LOG: 2011-08-20 initial translation
|
||||
* 2011-10-17 diacritics change, other minor changes
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Gestionează starea de editare a liniei de comandă, istoric și macrodefiniții.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe]\n\
|
||||
[/HISTORY] [/LISTSIZE=dimensiune] [/REINSTALL]\n\
|
||||
[/MACROS[:exe | :ALL]] [/MACROFILE=fișier] [nume_macro=[text]]\n\
|
||||
\n\
|
||||
/INSERT Activează modul de inserție.\n\
|
||||
/OVERSTRIKE Dezactivează modul de inserție.\n\
|
||||
/EXENAME=exename Stabilește programul de vizualizare/modificare a\n\
|
||||
istoricului și a macrodefinițiilor.\n\
|
||||
Implicit este cmd.exe.\n\
|
||||
/HISTORY Afișează istoricul comenzilor.\n\
|
||||
/LISTSIZE=dimensiune Stabilește numărul de comenzi reținute în istoric.\n\
|
||||
/REINSTALL Curăță istoricul comenzilor.\n\
|
||||
/MACROS Afișează macrodefinițiile.\n\
|
||||
/MACROS:exename Afișează macrodefinițiile pentru un program anume.\n\
|
||||
/MACROS:ALL Afișează macrodefinițiile pentru toate programele.\n\
|
||||
/MACROFILE=fișier Încarcă macrodefinițiile din fișier.\n\
|
||||
nume_macro Numele macrodefiniției în curs de creare.\n\
|
||||
text Textul înlocuitor dintr-o macrodefiniție.\n"
|
||||
IDS_INVALID_MACRO_DEF "Macrodefiniția «%s» este nevalidă!\n"
|
||||
END
|
26
base/applications/cmdutils/doskey/lang/ru-RU.rc
Normal file
26
base/applications/cmdutils/doskey/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Russian translation by Kudratov Olimjon (olim98@bk.ru) */
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Редактирование и повторный вызов команд ReactOS; создание макросов DOSKey.\n\
|
||||
\n\
|
||||
DOSKEY [/REINSTALL] [/LISTSIZE=размер] [/MACROS[:ALL | :модуль]]\n\
|
||||
[/HISTORY] [/INSERT | /OVERSTRIKE] [/EXENAME=модуль] [/MACROFILE=файл]\n\
|
||||
[макрос=[текст]]\n\n\
|
||||
/REINSTALL Установка новой копии DOSKey.\n\
|
||||
/LISTSIZE=размер Размер буфера журнала команд.\n\
|
||||
/MACROS Вывод всех макросов DOSKey.\n\
|
||||
/MACROS:ALL Вывод всех макросов DOSKey для всех исполняемых\n\
|
||||
модулей, содержащих макросы DOSKey.\n\
|
||||
/MACROS:модуль Вывод всех макросов DOSKey для указанного модуля.\n\
|
||||
/HISTORY Вывод всех команд, хранящихся в памяти.\n\
|
||||
/INSERT Включение режима вставки.\n\
|
||||
/OVERSTRIKE Включение режима замены.\n\
|
||||
/EXENAME=модуль Исполняемый модуль.\n\
|
||||
/MACROFILE=файл Файл макросов, который следует установить.\n\
|
||||
макрос Имя нового макроса.\n\
|
||||
текст Команды, которые следует включить в макрос."
|
||||
IDS_INVALID_MACRO_DEF "Неверный макрос: %s\n"
|
||||
END
|
28
base/applications/cmdutils/doskey/lang/sq-AL.rc
Normal file
28
base/applications/cmdutils/doskey/lang/sq-AL.rc
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
|
||||
* DATE OF TR: 29-11-2013
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "MENAXHO Linjat-Komand ndrysho konfigurimet, historine, dhe makrot.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Mundeso menyren e hyrjes.\n\
|
||||
/OVERSTRIKE Perjashto menyren e hyrjes.\n\
|
||||
/EXENAME=exename Vendos emrin e programit per tu vezhguar/ndrysho historine\n\
|
||||
dhe makrot per. Parazgjedhja edhe cmd.exe.\n\
|
||||
/HISTORY Shfaq historine e komandave.\n\
|
||||
/LISTSIZE=size Vendose numnrin e komandave per historine.\n\
|
||||
/REINSTALL Pastron historine e komandave.\n\
|
||||
/MACROS Shfaq percaktimin e makrove.\n\
|
||||
/MACROS:exename Shfaq percaktimin e makrove per programet specifike.\n\
|
||||
/MACROS:ALL Shfaq percaktimin e makrove per te gjithe programet.\n\
|
||||
/MACROFILE=file Ngarkon percaktimin e makros nga nje dokument.\n\
|
||||
macroname Specifikon emrin e makros per tu krijuar.\n\
|
||||
text Specifikon textin e zëvendësushem per makron.\n"
|
||||
IDS_INVALID_MACRO_DEF "Percaktim invalid i makros: %s\n"
|
||||
END
|
31
base/applications/cmdutils/doskey/lang/sv-SE.rc
Normal file
31
base/applications/cmdutils/doskey/lang/sv-SE.rc
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DOSKey
|
||||
* FILE: base/applications/cmdutils/doskey/lang/sv-SE.rc
|
||||
* PURPOSE: Swedish resource file
|
||||
* Translation: Jaix Bly
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Hanterar commandoradseditering; settings, history, and macros.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Sätter på insert mode.\n\
|
||||
/OVERSTRIKE Stänger av insert mode.\n\
|
||||
/EXENAME=exename Ställer in vilket program som ska visas/ändra historia\n\
|
||||
och macros för. Standardinställning är cmd.exe.\n\
|
||||
/HISTORY Visar kommando historian.\n\
|
||||
/LISTSIZE=size Ställer in antal kommandon per historebuffer.\n\
|
||||
/REINSTALL Rensar kommandohistorien.\n\
|
||||
/MACROS Visa makrodefinitioner.\n\
|
||||
/MACROS:exename Visa makrodefinitioner för ett specifikt program.\n\
|
||||
/MACROS:ALL Visa makrodefinitioner för all program.\n\
|
||||
/MACROFILE=file Laddar makrodefinitioner från file.\n\
|
||||
macroname Specificerar namnet på ett makro man vill skapa.\n\
|
||||
text Specificerar utbytestexten för macrot.\n"
|
||||
IDS_INVALID_MACRO_DEF "Ogiltig makrodefinition: %s\n"
|
||||
END
|
26
base/applications/cmdutils/doskey/lang/tr-TR.rc
Normal file
26
base/applications/cmdutils/doskey/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Komut yatacı düzenleme ayarlarını, geçmişi ve makroları yönetir.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=boyut]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=kütük] [makro adı=[metin]]\n\
|
||||
\n\
|
||||
/INSERT Ekleme kipini etkinleştirir.\n\
|
||||
/OVERSTRIKE Ekleme kipini edilginleştirir.\n\
|
||||
/EXENAME=exe adı İlgili geçmişi ve makroları görüntülemek ya da değiştirmek\n\
|
||||
için izlencenin adını ayarlar. Ön tanımlı cmd.exe'dir.\n\
|
||||
/HISTORY Komut geçmişini görüntüler.\n\
|
||||
/LISTSIZE=boyut Geçmiş arabelleği başına komut sayısını ayarlar.\n\
|
||||
/REINSTALL Komut geçmişini siler.\n\
|
||||
/MACROS Makro tanımlarını görüntüler.\n\
|
||||
/MACROS:exe adı Belirli bir izlence için makro tanımlarını görüntüler.\n\
|
||||
/MACROS:ALL Tüm izlenceler için makro tanımlarını görüntüler.\n\
|
||||
/MACROFILE=kütük Bir kütükten makro tanımlarını yükler.\n\
|
||||
makro adı Oluşturmak için bir makro adını belirtir.\n\
|
||||
metin Makro için yerine geçme metnini belirtir.\n"
|
||||
IDS_INVALID_MACRO_DEF "Geçersiz makro tanımı: %s\n"
|
||||
END
|
32
base/applications/cmdutils/doskey/lang/uk-UA.rc
Normal file
32
base/applications/cmdutils/doskey/lang/uk-UA.rc
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DOSKey
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/doskey/lang/uk-UA.rc
|
||||
* PURPOSE: Ukraianian Language File for ReactOS DOSKey
|
||||
* TRANSLATORS: Sakara Yevhen, Igor Paliychuk
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "Менеджер командного рядка для редагування налаштувань, iсторiї та макросiв.\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
|
||||
\n\
|
||||
/INSERT Включає режим вставки.\n\
|
||||
/OVERSTRIKE Вiдключає режим вставки.\n\
|
||||
/EXENAME=exename Встановлення назви програми для перегляду/змiни iсторiї\n\
|
||||
i макросiв. Значення за замовчуванням cmd.exe.\n\
|
||||
/HISTORY Вiдображення iсторiї команд.\n\
|
||||
/LISTSIZE=size Встановлення кiлькостi команд в буфері iсторiї.\n\
|
||||
/REINSTALL Очищення iсторiї команд.\n\
|
||||
/MACROS Вiдображення визначень макросiв.\n\
|
||||
/MACROS:exename Вiдображення визначень макросiв для конкретної програми.\n\
|
||||
/MACROS:ALL Вiдображення визначень макросiв для всiх програм.\n\
|
||||
/MACROFILE=filename Завантаження визначень макросiв з файлу.\n\
|
||||
macroname Визначення iменi макросу для створення.\n\
|
||||
text Визначення замiни тексту в макросi.\n"
|
||||
IDS_INVALID_MACRO_DEF "Недiйсний макрос визначення: %s\n"
|
||||
END
|
26
base/applications/cmdutils/doskey/lang/zh-CN.rc
Normal file
26
base/applications/cmdutils/doskey/lang/zh-CN.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Translated by Song Fuchang (0xfc) <sfc_0@yahoo.com.cn> */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "管理命令行编辑设置、历史记录和宏。\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=大小]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=文件] [宏名=[文本]]\n\
|
||||
\n\
|
||||
/INSERT 开启插入模式。\n\
|
||||
/OVERSTRIKE \n\
|
||||
/EXENAME=exename 设置要查看或改变历史记录和宏的程序名。\n\
|
||||
默认为 cmd.exe。\n\
|
||||
/HISTORY 显示命令历史。\n\
|
||||
/LISTSIZE=size 设置每个历史记录缓存记录的命令数。\n\
|
||||
/REINSTALL 清空命令历史记录。\n\
|
||||
/MACROS 显示定义的宏。\n\
|
||||
/MACROS:exename 显示为指定程序定义的宏。\n\
|
||||
/MACROS:ALL 显示为所有程序定义的宏。\n\
|
||||
/MACROFILE=file 从文件载入宏定义。\n\
|
||||
宏名 指定要创建的宏名。\n\
|
||||
文本 指定要替换该宏的文本。\n"
|
||||
IDS_INVALID_MACRO_DEF "无效的宏定义:%s\n"
|
||||
END
|
26
base/applications/cmdutils/doskey/lang/zh-TW.rc
Normal file
26
base/applications/cmdutils/doskey/lang/zh-TW.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_HELP "管理命令列編輯設置、歷史記錄和宏。\n\
|
||||
\n\
|
||||
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=大小]\n\
|
||||
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=文件] [宏名=[文本]]\n\
|
||||
\n\
|
||||
/INSERT 開啟插入模式。\n\
|
||||
/OVERSTRIKE \n\
|
||||
/EXENAME=exename 設置要查看或改變歷史記錄和宏的程式名。\n\
|
||||
預設為 cmd.exe。\n\
|
||||
/HISTORY 顯示命令歷史。\n\
|
||||
/LISTSIZE=size 設置每個歷史記錄緩存記錄的命令數。\n\
|
||||
/REINSTALL 清空命令歷史記錄。\n\
|
||||
/MACROS 顯示定義的宏。\n\
|
||||
/MACROS:exename 顯示為指定程式定義的宏。\n\
|
||||
/MACROS:ALL 顯示為所有程式定義的宏。\n\
|
||||
/MACROFILE=file 從檔載入巨集定義。\n\
|
||||
宏名 指定要創建的宏名。\n\
|
||||
文本 指定要替換該宏的文本。\n"
|
||||
IDS_INVALID_MACRO_DEF "不正確巨集定義:%s\n"
|
||||
END
|
12
base/applications/cmdutils/eventcreate/CMakeLists.txt
Normal file
12
base/applications/cmdutils/eventcreate/CMakeLists.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
|
||||
## The message string templates are in ANSI to reduce binary size
|
||||
add_message_headers(ANSI evtmsgstr.mc)
|
||||
|
||||
add_executable(eventcreate eventcreate.c eventcreate.rc)
|
||||
set_module_type(eventcreate win32cui UNICODE)
|
||||
add_dependencies(eventcreate evtmsgstr)
|
||||
target_link_libraries(eventcreate conutils ${PSEH_LIB})
|
||||
add_importlibs(eventcreate advapi32 msvcrt kernel32)
|
||||
add_cd_file(TARGET eventcreate DESTINATION reactos/system32 FOR all)
|
1280
base/applications/cmdutils/eventcreate/eventcreate.c
Normal file
1280
base/applications/cmdutils/eventcreate/eventcreate.c
Normal file
File diff suppressed because it is too large
Load diff
32
base/applications/cmdutils/eventcreate/eventcreate.rc
Normal file
32
base/applications/cmdutils/eventcreate/eventcreate.rc
Normal file
|
@ -0,0 +1,32 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS EventCreate Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "eventcreate"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "eventcreate.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* Message Table resource for the message string templates */
|
||||
#include <evtmsgstr.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
105
base/applications/cmdutils/eventcreate/evtmsggen.c
Normal file
105
base/applications/cmdutils/eventcreate/evtmsggen.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS EventCreate Command
|
||||
* FILE: base/applications/cmdutils/eventcreate/evtmsggen.c
|
||||
* PURPOSE: Generator for the event message string templates file.
|
||||
* Creates the message string file in the current directory.
|
||||
* PROGRAMMER: Hermes Belusca-Maito
|
||||
*
|
||||
* You can compile this generator:
|
||||
* with GCC : $ gcc -o evtmsggen.exe evtmsggen.c
|
||||
* with MSVC: $ cl evtmsggen.c (or: $ cl /Fe"evtmsggen.exe" evtmsggen.c)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* Enable/disable this option to use "English" for the message table language.
|
||||
* The default behaviour when the option is disabled selects "Neutral" language.
|
||||
*/
|
||||
// #define ENGLISH
|
||||
|
||||
/* The default End-Of-Line control for the message file */
|
||||
#define EOL "\r\n"
|
||||
|
||||
|
||||
static void usage(char* name)
|
||||
{
|
||||
fprintf(stdout, "Usage: %s ID_min ID_max outfile.mc\n", name);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
FILE* outFile;
|
||||
unsigned int id_min, id_max;
|
||||
unsigned int i;
|
||||
|
||||
/* Validate the arguments */
|
||||
if (argc != 4)
|
||||
{
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
id_min = (unsigned int)atoi(argv[1]);
|
||||
id_max = (unsigned int)atoi(argv[2]);
|
||||
if (id_min > id_max)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Min ID %u cannot be strictly greater than Max ID %u !\n", id_min, id_max);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Open the file */
|
||||
outFile = fopen(argv[3], "wb");
|
||||
if (!outFile)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Could not create output file '%s'.\n", argv[3]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Generate the file */
|
||||
|
||||
/* Write the header */
|
||||
fprintf(outFile,
|
||||
";/*" EOL
|
||||
"; * %s" EOL
|
||||
"; * Contains event message string templates for the EventCreate Command." EOL
|
||||
"; *" EOL
|
||||
"; * This file is autogenerated, do not edit." EOL
|
||||
"; * Generated with:" EOL
|
||||
"; * %s %u %u %s" EOL
|
||||
"; */" EOL
|
||||
EOL
|
||||
#ifdef ENGLISH
|
||||
"LanguageNames=(English=0x409:MSG00409)" EOL
|
||||
#else
|
||||
"LanguageNames=(Neutral=0x0000:MSG00000)" EOL
|
||||
#endif
|
||||
"MessageIdTypedef=DWORD" EOL
|
||||
EOL,
|
||||
argv[3],
|
||||
argv[0], id_min /* argv[1] */, id_max /* argv[2] */, argv[3]);
|
||||
|
||||
/* Write the message string templates */
|
||||
for (i = id_min; i <= id_max; ++i)
|
||||
{
|
||||
fprintf(outFile,
|
||||
"MessageId=0x%X" EOL
|
||||
#ifdef ENGLISH
|
||||
"Language=English" EOL
|
||||
#else
|
||||
"Language=Neutral" EOL
|
||||
#endif
|
||||
"%%1" EOL
|
||||
"." EOL
|
||||
EOL,
|
||||
i);
|
||||
}
|
||||
|
||||
/* Close the file */
|
||||
fclose(outFile);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF */
|
327692
base/applications/cmdutils/eventcreate/evtmsgstr.mc
Normal file
327692
base/applications/cmdutils/eventcreate/evtmsgstr.mc
Normal file
File diff suppressed because it is too large
Load diff
69
base/applications/cmdutils/eventcreate/lang/en-US.rc
Normal file
69
base/applications/cmdutils/eventcreate/lang/en-US.rc
Normal file
|
@ -0,0 +1,69 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Type ""EVENTCREATE /?"" for usage information.\n"
|
||||
IDS_HELP "\n\
|
||||
EVENTCREATE [/S computer [/U [domain\\]user [/P password]]] /ID EventID\n\
|
||||
{[/L logname] | [/SO source]} /T type /C category /D description\n\
|
||||
\n\
|
||||
Description:\n\
|
||||
This tool enables an administrator to create a custom event in\n\
|
||||
a specified event log.\n\
|
||||
\n\
|
||||
Parameters:\n\
|
||||
/S computer Specifies the remote computer where to connect.\n\
|
||||
\n\
|
||||
/U [domain\\]user Specifies the user account under which the command\n\
|
||||
should execute.\n\
|
||||
\n\
|
||||
/P [password] Specifies the password of the user account.\n\
|
||||
Prompts for input if omitted.\n\
|
||||
\n\
|
||||
/L logname Specifies the name of the log where the event will be\n\
|
||||
created. The valid names are:\n\
|
||||
Application, System, Security\n\
|
||||
(the latter is reserved only for the SYSTEM account).\n\
|
||||
\n\
|
||||
/SO source Specifies the source name to use for the event\n\
|
||||
(if not specified, the default source name\n\
|
||||
will be 'eventcreate').\n\
|
||||
A valid source can be any string and should represent\n\
|
||||
the application or the component that is generating\n\
|
||||
the event.\n\
|
||||
\n\
|
||||
/T type Specifies the type of event to create.\n\
|
||||
The valid types are: SUCCESS, ERROR, WARNING,\n\
|
||||
INFORMATION.\n\
|
||||
\n\
|
||||
/C category Specifies the event category (integer) for the event.\n\
|
||||
\n\
|
||||
/ID EventID Specifies the event ID for the event. This must be\n\
|
||||
an integer between 0 and 65535.\n\
|
||||
\n\
|
||||
/D description Specifies the description to use for the newly\n\
|
||||
created event.\n\
|
||||
\n\
|
||||
/? Displays this help screen.\n\
|
||||
"
|
||||
IDS_INVALIDSWITCH "Invalid switch - '%s'.\n"
|
||||
IDS_BADSYNTAX_0 "Bad command line syntax.\n"
|
||||
IDS_BADSYNTAX_1 "Bad command line syntax. The option '%s' requires a value.\n"
|
||||
IDS_BADSYNTAX_2 "Bad command line syntax. The value for the option '%s' cannot be empty.\n"
|
||||
IDS_BADSYNTAX_3 "Bad command line syntax. The value '%s' is not allowed for the option '%s'.\n"
|
||||
IDS_BADSYNTAX_4 "Bad command line syntax. The value cannot be specified for the option '%s'.\n"
|
||||
IDS_BADSYNTAX_5 "Bad command line syntax. The option '%s' is not allowed more than %lu times.\n"
|
||||
IDS_BADSYNTAX_6 "Bad command line syntax. The mandatory option '%s' is absent.\n"
|
||||
// IDS_BADSYNTAX_7 "Bad command line syntax. The value for the option '%s' is outside the allowed range.\n"
|
||||
IDS_BADSYNTAX_7 "Bad command line syntax. The value for the option '%s' must be between %d and %d.\n"
|
||||
|
||||
IDS_LOG_NOT_FOUND "The log '%s' does not exist. Cannot create the event.\n"
|
||||
IDS_SOURCE_NOCREATE "The new source cannot be created because the log name is not specified.\nPlease use the /L switch to specify the log name.\n"
|
||||
IDS_SOURCE_EXISTS "The source already exists in the log '%s' and cannot be duplicated.\n"
|
||||
IDS_SOURCE_NOT_CUSTOM "The Source parameter is used to identify the custom scripts/applications\n(not the installed applications).\n"
|
||||
|
||||
IDS_SUCCESS_1 "Operation successful: an event of type '%s' has been created in the log '%s'.\n"
|
||||
IDS_SUCCESS_2 "Operation successful: an event of type '%s' has been created with the source '%s'.\n"
|
||||
IDS_SUCCESS_3 "Operation successful: an event of type '%s' has been created\nin the log '%s' with the source '%s'.\n"
|
||||
IDS_SWITCH_UNIMPLEMENTED "The option '%s' is not currently supported, sorry for the inconvenience!\n"
|
||||
END
|
70
base/applications/cmdutils/eventcreate/lang/fr-FR.rc
Normal file
70
base/applications/cmdutils/eventcreate/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,70 @@
|
|||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Entrez ""EVENTCREATE /?"" pour afficher la syntaxe.\n"
|
||||
IDS_HELP "\n\
|
||||
EVENTCREATE [/S système [/U utilisateur [/P mot_de_passe]]] /ID id_événement\n\
|
||||
{[/L journal] | [/SO source]} /T type /C catégorie /D description\n\
|
||||
\n\
|
||||
Description :\n\
|
||||
Cet outil permet à un administrateur de créer un événement ayant un\n\
|
||||
message et un identificateur personnalisés dans un journal d'événements\n\
|
||||
spécifié.\n\
|
||||
\n\
|
||||
Liste de paramètres :\n\
|
||||
/S système Spécifie le système distant auquel se connecter.\n\
|
||||
\n\
|
||||
/U [domaine\\]utili. Spécifie le contexte de l'utilisateur\n\
|
||||
sous lequel la commande doit s'exécuter.\n\
|
||||
\n\
|
||||
/P [mot_de_passe] Spécifie le mot de passe du contexte\n\
|
||||
utilisateur donné. Il est demandé s'il est omis.\n\
|
||||
\n\
|
||||
/L journal Spécifie le journal d'événement dans lequel\n\
|
||||
l'événementest créé. Les noms valides sont :\n\
|
||||
Application, System, Security\n\
|
||||
(le dernier est réservé seulement pour le compte\n\
|
||||
SYSTEM).\n\
|
||||
\n\
|
||||
/SO source Spécifie la source devant être utilisée pour\n\
|
||||
l'événement (s'il n'est pas spécifié, la valeur\n\
|
||||
par défaut de la source sera 'eventcreate').\n\
|
||||
Une source valide peut être une chaîne et doit\n\
|
||||
représenter l'application ou le composant qui génère\n\
|
||||
l'événement.\n\
|
||||
\n\
|
||||
/T type Spécifie le type d'événement à créer.\n\
|
||||
Les types autorisés sont : SUCCESS, ERROR, WARNING,\n\
|
||||
INFORMATION.\n\
|
||||
\n\
|
||||
/C catégorie Spécifie la catégorie de l'événement (nombre entier).\n\
|
||||
\n\
|
||||
/ID identificateur Spécifie l'ID de l'événement. Un identificateur\n\
|
||||
peut être un nombre entier compris entre 0 et 65535.\n\
|
||||
\n\
|
||||
/D description Spécifie la description du nouvel événement.\n\
|
||||
\n\
|
||||
/? Affiche cet écran d'aide.\n\
|
||||
"
|
||||
IDS_INVALIDSWITCH "Option invalide - '%s'.\n"
|
||||
IDS_BADSYNTAX_0 "Syntaxe incorrecte.\n"
|
||||
IDS_BADSYNTAX_1 "Syntaxe incorrecte. L'option '%s' requiert une valeur.\n"
|
||||
IDS_BADSYNTAX_2 "Syntaxe incorrecte. La valeur pour l'option '%s' ne peut pas être vide.\n"
|
||||
IDS_BADSYNTAX_3 "Syntaxe incorrecte. La valeur '%s' n'est pas autorisée pour l'option '%s'.\n"
|
||||
IDS_BADSYNTAX_4 "Syntaxe incorrecte. La valeur ne peut pas être spécifiée pour l'option '%s'.\n"
|
||||
IDS_BADSYNTAX_5 "Syntaxe incorrecte. L'option '%s' n'est pas autorisée plus de %lu fois.\n"
|
||||
IDS_BADSYNTAX_6 "Syntaxe incorrecte. L'option obligatoire '%s' est absente.\n"
|
||||
// IDS_BADSYNTAX_7 "Syntaxe incorrecte. La valeur pour l'option '%s' est en dehors de la plage autorisée.\n"
|
||||
IDS_BADSYNTAX_7 "Syntaxe incorrecte. La valeur pour l'option '%s' doit être comprise entre %d et %d.\n"
|
||||
|
||||
IDS_LOG_NOT_FOUND "Le journal '%s' n'existe pas. Impossible de créer l'événement.\n"
|
||||
IDS_SOURCE_NOCREATE "La nouvelle source ne peut être créée car le nom du journal n'est pas spécifié.\nUtilisez le commutateur /L pour spécifier le nom du journal.\n"
|
||||
IDS_SOURCE_EXISTS "La source existe déjà dans le journal '%s' et ne peut pas être dupliquée.\n"
|
||||
IDS_SOURCE_NOT_CUSTOM "Le paramètre Source est utilisé pour identifier les scripts/applications\npersonnalisées (pas les applications installées).\n"
|
||||
|
||||
IDS_SUCCESS_1 "Opération réussie : un événement de type '%s' a été créé dans le journal '%s'.\n"
|
||||
IDS_SUCCESS_2 "Opération réussie : un événement de type '%s' a été créé avec la source '%s'.\n"
|
||||
IDS_SUCCESS_3 "Opération réussie : un événement de type '%s' a été créé\ndans le journal '%s' avec la source '%s'.\n"
|
||||
IDS_SWITCH_UNIMPLEMENTED "L'option '%s' n'est pas supporté pour le moment, désolé pour le désagrément!\n"
|
||||
END
|
71
base/applications/cmdutils/eventcreate/lang/ro-RO.rc
Normal file
71
base/applications/cmdutils/eventcreate/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,71 @@
|
|||
/* Translator: Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Tastați «EVENTCREATE /?» pentru informații de utilizare.\n"
|
||||
IDS_HELP "\n\
|
||||
EVENTCREATE [/S calculator [/U [domeniu\\]nume [/P parolă]]]\n\
|
||||
/ID id_eveniment {[/L nume_jurnal] | [/SO sursă]}\n\
|
||||
/T tip /C categorie /D descriere\n\
|
||||
\n\
|
||||
Descriere:\n\
|
||||
Acest instrument oferă unui administrator crearea unui eveniment\n\
|
||||
particular într-un jurnal de evenimente specificat.\n\
|
||||
\n\
|
||||
Parametri:\n\
|
||||
/S calculator Specifică sistemul la care se face conectarea.\n\
|
||||
\n\
|
||||
/U [domeniu\\]nume Numele contului de utilizator sub care va fi\n\
|
||||
executată comanda.\n\
|
||||
\n\
|
||||
/P [parolă] Specifică parola contului de utilizator.\n\
|
||||
Va fi cerută la prompt în cazul omiterii.\n\
|
||||
\n\
|
||||
/L nume_jurnal Specifică numele jurnalului în care evenimentul va fi\n\
|
||||
creat. Numele valide sunt:\n\
|
||||
Application, System, Security\n\
|
||||
(ultimul este rezervat doar pentru contul SYSTEM).\n\
|
||||
\n\
|
||||
/SO sursă Specifică numele sursei utilizate pentru eveniment.\n\
|
||||
(Dacă nu e specificat, numele implicit al sursei va\n\
|
||||
fi «eventcreate».)\n\
|
||||
O sursă validă poate fi orice șir de caractere și ar\n\
|
||||
trebui să reprezinte aplicația sau evenimentul care\n\
|
||||
generează evenimentul.\n\
|
||||
\n\
|
||||
/T tip Specifică tipul de eveniment creat.\n\
|
||||
Tipurile valide sunt: SUCCESS, ERROR, WARNING,\n\
|
||||
INFORMATION.\n\
|
||||
\n\
|
||||
/C categorie Specifică categoria de eveniment (ca număr întreg).\n\
|
||||
\n\
|
||||
/ID id_eveniment Specifică numărul de identificare pentru eveniment.\n\
|
||||
Acesta trebuie să fie un număr între 0 și 65535.\n\
|
||||
\n\
|
||||
/D descriere Specifică o descriere pentru evenimentul nou creat.\n\
|
||||
\n\
|
||||
/? Afișează acest manual de utilizare.\n\
|
||||
"
|
||||
IDS_INVALIDSWITCH "Parametru eronat - «%s».\n"
|
||||
IDS_BADSYNTAX_0 "Comandă cu sintaxă eronată.\n"
|
||||
IDS_BADSYNTAX_1 "Comandă cu sintaxă eronată. Opțiunea «%s» necesită o valoare.\n"
|
||||
IDS_BADSYNTAX_2 "Comandă cu sintaxă eronată. Valoarea pentru opțiunea «%s» nu poate fi omisă.\n"
|
||||
IDS_BADSYNTAX_3 "Comandă cu sintaxă eronată. Valoarea «%s» nu este permisă pentru opțiunea «%s».\n"
|
||||
IDS_BADSYNTAX_4 "Comandă cu sintaxă eronată. Valoarea dată nu poate fi specificată pentru opțiunea «%s».\n"
|
||||
IDS_BADSYNTAX_5 "Comandă cu sintaxă eronată. Opțiunea «%s» nu este permisă mai mult de %lu ori.\n"
|
||||
IDS_BADSYNTAX_6 "Comandă cu sintaxă eronată. Opțiunea obligatorie «%s» a fost omisă.\n"
|
||||
// IDS_BADSYNTAX_7 "Comandă cu sintaxă eronată. Valoarea pentru opțiunea «%s» este în afara domeniului permis.\n"
|
||||
IDS_BADSYNTAX_7 "Comandă cu sintaxă eronată. Valoarea pentru opțiunea «%s» trebuie să fie între %d și %d.\n"
|
||||
|
||||
IDS_LOG_NOT_FOUND "Jurnalul «%s» nu există. Evenimentul nu poate fi creat.\n"
|
||||
IDS_SOURCE_NOCREATE "Sursa nu poate fi creată deoarece numele de jurnal nu este specificat.\nUtilizați parametrul /L pentru a specifica un nume de jurnal.\n"
|
||||
IDS_SOURCE_EXISTS "Sursa deja există în jurnalul «%s» și nu poate fi duplicată.\n"
|
||||
IDS_SOURCE_NOT_CUSTOM "Parametrul de sursă este utilizat pentru a identifica scripturi/aplicații particularizate (nicidecum aplicații instalate).\n"
|
||||
|
||||
IDS_SUCCESS_1 "Operație realizată: un eveniment de tip «%s» a fost creat în jurnalul «%s».\n"
|
||||
IDS_SUCCESS_2 "Operație realizată: un eveniment de tip «%s» a fost creat cu sursa «%s».\n"
|
||||
IDS_SUCCESS_3 "Operație realizată: un eveniment de tip «%s» a fost creat în jurnalul «%s» cu sursa «%s».\n"
|
||||
IDS_SWITCH_UNIMPLEMENTED "Opțiunea «%s» nu este acceptată deocamdată!\n"
|
||||
END
|
68
base/applications/cmdutils/eventcreate/lang/ru-RU.rc
Normal file
68
base/applications/cmdutils/eventcreate/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,68 @@
|
|||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Введите ""EVENTCREATE /?"" для получения справки по использованию.\n"
|
||||
IDS_HELP "\n\
|
||||
EVENTCREATE [/S система [/U [домен\\]пользователь [/P пароль]]] /ID код_события\n\
|
||||
{[/L имя_журнала] | [/SO источник]} /T тип /C категория /D описание\n\
|
||||
\n\
|
||||
Описание:\n\
|
||||
Эта команда позволяет администратору создать запись об особом событии \n\
|
||||
в указанном журнале событий.\n\
|
||||
\n\
|
||||
Список параметров:\n\
|
||||
/S система Определяет удаленную систему для подключения.\n\
|
||||
\n\
|
||||
/U [домен\\]польз. Определяет контекст пользователя, под которым\n\
|
||||
выполняется данная команда.\n\
|
||||
\n\
|
||||
/P [пароль] Задает пароль для данного контекста пользователя.\n\
|
||||
Запрашивает ввод пароля, если он не был задан.\n\
|
||||
\n\
|
||||
/L журнал Журнал в котором будет создано событие.\n\
|
||||
Доступными именами являются:\n\
|
||||
Application, System, Security\n\
|
||||
(последний зарезервирован только для учетной записи SYSTEM).\n\
|
||||
\n\
|
||||
/SO источник Задает имя источника, используемого для события\n\
|
||||
(если не указано, то по умолчанию имя источника\n\
|
||||
будет 'eventcreate').\n\
|
||||
Допустимым источником является любая строка, представляющая\n\
|
||||
приложение или компонент, который генерирует\n\
|
||||
событие.\n\
|
||||
\n\
|
||||
/T тип Тип создаваемого события.\n\
|
||||
Допустимыми типами являются: SUCCESS, ERROR, WARNING,\n\
|
||||
INFORMATION.\n\
|
||||
\n\
|
||||
/C категория Определяет категорию события (число) для события.\n\
|
||||
\n\
|
||||
/ID код_события Код события для этого события. Допустимым кодом\n\
|
||||
является число в диапазоне от 0 до 65535.\n\
|
||||
\n\
|
||||
/D описание Описание для создаваемого события.\n\
|
||||
\n\
|
||||
/? Показать эту справку.\n\
|
||||
"
|
||||
IDS_INVALIDSWITCH "Неправильный параметр или аргумент - '%s'.\n"
|
||||
IDS_BADSYNTAX_0 "Синтаксическая ошибка.\n"
|
||||
IDS_BADSYNTAX_1 "Синтаксическая ошибка. Для параметра '%s' должно быть указано значение.\n"
|
||||
IDS_BADSYNTAX_2 "Синтаксическая ошибка. Значение опции '%s' не может быть пустым.\n"
|
||||
IDS_BADSYNTAX_3 "Синтаксическая ошибка. Значение '%s' является недопустимым для опции '%s'.\n"
|
||||
IDS_BADSYNTAX_4 "Синтаксическая ошибка. Для опции '%s' не может быть указано значение.\n"
|
||||
IDS_BADSYNTAX_5 "Синтаксическая ошибка. Опция '%s' не допускается более чем %lu раз.\n"
|
||||
IDS_BADSYNTAX_6 "Синтаксическая ошибка. Отсутствует обязательный параметр '%s'.\n"
|
||||
// IDS_BADSYNTAX_7 "Синтаксическая ошибка. Значение для опции '%s' за пределами разрешенного диапазона.\n"
|
||||
IDS_BADSYNTAX_7 "Синтаксическая ошибка. Значение для опции '%s' должно быть в диапазоне от %d до %d.\n"
|
||||
|
||||
IDS_LOG_NOT_FOUND "Журнал '%s' не существует. Не удалось создать событие.\n"
|
||||
IDS_SOURCE_NOCREATE "Новый источник не может быть создан, поскольку имя журнала не указано.\nИспользуйте параметр /L чтобы указать имя журнала.\n"
|
||||
IDS_SOURCE_EXISTS "Источник уже существует в журнале '%s' и не может быть продублирован.\n"
|
||||
IDS_SOURCE_NOT_CUSTOM "Параметр Источник используется для идентификации сценариев/программ\nпользовательских приложений (не установленных приложений).\n"
|
||||
|
||||
IDS_SUCCESS_1 "Операция выполнена успешно: событие с типом '%s' было успешно создано в журнале '%s'.\n"
|
||||
IDS_SUCCESS_2 "Операция выполнена успешно: событие с типом '%s' было успешно создано с источником '%s'.\n"
|
||||
IDS_SUCCESS_3 "Операция выполнена успешно: событие с типом '%s' было успешно создано\nв журнале '%s' с источником '%s'.\n"
|
||||
IDS_SWITCH_UNIMPLEMENTED "Опция '%s' не поддерживается, приносим извинения за возможное неудобство!\n"
|
||||
END
|
72
base/applications/cmdutils/eventcreate/lang/tr-TR.rc
Normal file
72
base/applications/cmdutils/eventcreate/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,72 @@
|
|||
/* TRANSLATOR: 2016 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Kullanım bilgisi için ""EVENTCREATE /?"" yazınız.\n"
|
||||
IDS_HELP "\n\
|
||||
EVENTCREATE [/S bilgisayar [/U [etki alanı\\]kullanıcı [/P şifre]]] \n\
|
||||
/ID olay kimliği {[/L kayıt adı] | [/SO kaynak]} /T tür /C ulam\n\
|
||||
/D tanım\n\
|
||||
\n\
|
||||
Tanım:\n\
|
||||
Bu araç, bir yöneticiye belirli bir olay kaydı içinde husûsî bir olay\n\
|
||||
oluşturmayı sağlar.\n\
|
||||
\n\
|
||||
Değişkenler:\n\
|
||||
/S bilgisayar Bağlanacak uzak bilgisayarı belirtir.\n\
|
||||
\n\
|
||||
/U [etki alanı\\]kullanıcı Altında komutun çalışacağı kullanıcı hesâbını\n\
|
||||
belirtir.\n\
|
||||
\n\
|
||||
/P [şifre] Kullanıcı hesâbının şifresini belirtir.\n\
|
||||
Kullanılmazsa girdi için sorar.\n\
|
||||
\n\
|
||||
/L kayıt adı Oluşturulacak olayın kayıt adını belirtir.\n\
|
||||
Geçerli adlar şunlardır:\n\
|
||||
Application, System, Security\n\
|
||||
(İkincisi yalnızca DİZGE hesâbına ayrılmıştır.)\n\
|
||||
\n\
|
||||
/SO kaynak Olay için kullanılacak kaynak adını belirtir.\n\
|
||||
(Belirtilmezse ön tanımlı kaynak adı\n\
|
||||
'eventcreate' olacaktır.)\n\
|
||||
Geçerli bir kaynak, rastgele bir dizgi olabilir ve olayı\n\
|
||||
oluşturan uygulamayı veyâ bileşeni belirtmelidir.\n\
|
||||
\n\
|
||||
/T tür Oluşturulacak olayın türünü belirtir.\n\
|
||||
Geçerli türler: SUCCESS, ERROR, WARNING,\n\
|
||||
INFORMATION.\n\
|
||||
\n\
|
||||
/C ulam Olaya göre olay ulamını (tamsayı) belirtir.\n\
|
||||
\n\
|
||||
/ID olay kimliği Olaya göre olay kimliğini belirtir. Bu\n\
|
||||
0 ile 65535 arasında bir tamsayı olmalıdır.\n\
|
||||
\n\
|
||||
/D tanım Yeni oluşturulan olay için kullanılacak\n\
|
||||
tanımı belirtir.\n\
|
||||
\n\
|
||||
/? Bu yardım görüntülüğünü görüntüler.\n\
|
||||
"
|
||||
IDS_INVALIDSWITCH "Geçersiz değişken - ""%s"".\n"
|
||||
IDS_BADSYNTAX_0 "Geçersiz komut yatacı yazımı.\n"
|
||||
IDS_BADSYNTAX_1 "Geçersiz komut yatacı yazımı. ""%s"" seçeneği bir değer gerektirir.\n"
|
||||
IDS_BADSYNTAX_2 "Geçersiz komut yatacı yazımı. ""%s"" seçeneği için değer boş olamaz.\n"
|
||||
IDS_BADSYNTAX_3 "Geçersiz komut yatacı yazımı. Değer ""%s"", ""%s"" seçeneği için izin verilmedi.\n"
|
||||
IDS_BADSYNTAX_4 "Geçersiz komut yatacı yazımı. ""%s"" seçeneği için değer belirtilemiyor.\n"
|
||||
IDS_BADSYNTAX_5 "Geçersiz komut yatacı yazımı. ""%s"" seçeneğine %lu kezden çok izin verilmiyor.\n"
|
||||
IDS_BADSYNTAX_6 "Geçersiz komut yatacı yazımı. Zorunlu ""%s"" seçeneği yok.\n"
|
||||
// IDS_BADSYNTAX_7 "Geçersiz komut yatacı yazımı. ""%s"" seçeneği için değer izin verilen aralığın dışında.\n"
|
||||
IDS_BADSYNTAX_7 "Geçersiz komut yatacı yazımı. ""%s"" seçeneği için değer %d ile %d arasında olmalı.\n"
|
||||
|
||||
IDS_LOG_NOT_FOUND """%s"" kaydı yok. Olay oluşturulamıyor.\n"
|
||||
IDS_SOURCE_NOCREATE "Kayıt adı belirtilmediğinden yeni kaynak oluşturulamıyor.\nKayıt adını belirtmek için lütfen /L seçeneğini kullanınız.\n"
|
||||
IDS_SOURCE_EXISTS "Kaynak ""%s"" kaydında önceden var ve çoğaltılamaz.\n"
|
||||
IDS_SOURCE_NOT_CUSTOM "Kaynak değişkeni, husûsî betikleri veyâ husûsî uygulamaları\n(kurulu uygulamaları değil) belirlemek için kullanılıyor.\n"
|
||||
|
||||
IDS_SUCCESS_1 "İşlem başarılı: ""%s"" türünde bir olay ""%s"" kaydında oluşturuldu.\n"
|
||||
IDS_SUCCESS_2 "İşlem başarılı: ""%s"" türünde bir olay ""%s"" kaynağıyla oluşturuldu.\n"
|
||||
IDS_SUCCESS_3 "İşlem başarılı: ""%s"" türünde bir olay ""%s"" kaydında ""%s"" kaynağıyla oluşturuldu.\n"
|
||||
IDS_SWITCH_UNIMPLEMENTED """%s"" seçeneği şimdilik desteklenmiyor, sıkıntı için üzgünüm!\n"
|
||||
END
|
||||
|
24
base/applications/cmdutils/eventcreate/resource.h
Normal file
24
base/applications/cmdutils/eventcreate/resource.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#define IDS_USAGE 100
|
||||
#define IDS_HELP 101
|
||||
#define IDS_INVALIDSWITCH 102
|
||||
#define IDS_BADSYNTAX_0 103
|
||||
#define IDS_BADSYNTAX_1 104
|
||||
#define IDS_BADSYNTAX_2 105
|
||||
#define IDS_BADSYNTAX_3 106
|
||||
#define IDS_BADSYNTAX_4 107
|
||||
#define IDS_BADSYNTAX_5 108
|
||||
#define IDS_BADSYNTAX_6 109
|
||||
#define IDS_BADSYNTAX_7 110
|
||||
|
||||
#define IDS_LOG_NOT_FOUND 120
|
||||
#define IDS_SOURCE_NOCREATE 121
|
||||
#define IDS_SOURCE_EXISTS 122
|
||||
#define IDS_SOURCE_NOT_CUSTOM 123
|
||||
|
||||
#define IDS_SUCCESS_1 130
|
||||
#define IDS_SUCCESS_2 131
|
||||
#define IDS_SUCCESS_3 132
|
||||
|
||||
#define IDS_SWITCH_UNIMPLEMENTED 135
|
5
base/applications/cmdutils/find/CMakeLists.txt
Normal file
5
base/applications/cmdutils/find/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
add_executable(find find.c find.rc)
|
||||
set_module_type(find win32cui)
|
||||
add_importlibs(find user32 msvcrt kernel32)
|
||||
add_cd_file(TARGET find DESTINATION reactos/system32 FOR all)
|
256
base/applications/cmdutils/find/find.c
Normal file
256
base/applications/cmdutils/find/find.c
Normal file
|
@ -0,0 +1,256 @@
|
|||
/* find.c */
|
||||
|
||||
/* Copyright (C) 1994-2002, Jim Hall <jhall@freedos.org> */
|
||||
|
||||
/* Adapted for ReactOS */
|
||||
|
||||
/*
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
|
||||
/* This program locates a string in a text file and prints those lines
|
||||
* that contain the string. Multiple files are clearly separated.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
//#include <string.h>
|
||||
//#include <ctype.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
|
||||
//#include <io.h>
|
||||
#include <dos.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
/* Symbol definition */
|
||||
#define MAX_STR 1024
|
||||
|
||||
/* This function prints out all lines containing a substring. There are some
|
||||
* conditions that may be passed to the function.
|
||||
*
|
||||
* RETURN: If the string was found at least once, returns 1.
|
||||
* If the string was not found at all, returns 0.
|
||||
*/
|
||||
int
|
||||
find_str (char *sz, FILE *p, int invert_search,
|
||||
int count_lines, int number_output, int ignore_case)
|
||||
{
|
||||
int i, length;
|
||||
long line_number = 0, total_lines = 0;
|
||||
char *c, temp_str[MAX_STR], this_line[MAX_STR];
|
||||
|
||||
/* Convert to upper if needed */
|
||||
if (ignore_case)
|
||||
{
|
||||
length = strlen (sz);
|
||||
for (i = 0; i < length; i++)
|
||||
sz[i] = toupper (sz[i]);
|
||||
}
|
||||
|
||||
/* Scan the file until EOF */
|
||||
while (fgets (temp_str, MAX_STR, p) != NULL)
|
||||
{
|
||||
/* Remove the trailing newline */
|
||||
length = strlen (temp_str);
|
||||
if (temp_str[length-1] == '\n')
|
||||
{
|
||||
temp_str[length-1] = '\0';
|
||||
}
|
||||
|
||||
/* Increment number of lines */
|
||||
line_number++;
|
||||
strcpy (this_line, temp_str);
|
||||
|
||||
/* Convert to upper if needed */
|
||||
if (ignore_case)
|
||||
{
|
||||
for (i = 0; i < length; i++)
|
||||
{
|
||||
temp_str[i] = toupper (temp_str[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Locate the substring */
|
||||
|
||||
/* strstr() returns a pointer to the first occurrence in the
|
||||
string of the substring */
|
||||
c = strstr (temp_str, sz);
|
||||
|
||||
if ( ((invert_search) ? (c == NULL) : (c != NULL)) )
|
||||
{
|
||||
if (!count_lines)
|
||||
{
|
||||
if (number_output)
|
||||
printf ("%ld:", line_number);
|
||||
|
||||
/* Print the line of text */
|
||||
puts (this_line);
|
||||
}
|
||||
|
||||
total_lines++;
|
||||
} /* long if */
|
||||
} /* while fgets */
|
||||
|
||||
if (count_lines)
|
||||
{
|
||||
/* Just show num. lines that contain the string */
|
||||
printf ("%ld\n", total_lines);
|
||||
}
|
||||
|
||||
|
||||
/* RETURN: If the string was found at least once, returns 1.
|
||||
* If the string was not found at all, returns 0.
|
||||
*/
|
||||
return (total_lines > 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
/* Show usage */
|
||||
void
|
||||
usage (void)
|
||||
{
|
||||
WCHAR wszUsage[4096];
|
||||
char oemUsage[4096];
|
||||
|
||||
LoadStringW (GetModuleHandleW (NULL), IDS_USAGE, wszUsage, sizeof(wszUsage) / sizeof(wszUsage[0]));
|
||||
CharToOemW (wszUsage, oemUsage);
|
||||
fputs (oemUsage, stdout);
|
||||
}
|
||||
|
||||
|
||||
/* Main program */
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
char *opt, *needle = NULL;
|
||||
int ret = 0;
|
||||
WCHAR wszMessage[4096];
|
||||
char oemMessage[4096];
|
||||
|
||||
int invert_search = 0; /* flag to invert the search */
|
||||
int count_lines = 0; /* flag to whether/not count lines */
|
||||
int number_output = 0; /* flag to print line numbers */
|
||||
int ignore_case = 0; /* flag to be case insensitive */
|
||||
|
||||
FILE *pfile; /* file pointer */
|
||||
int hfind; /* search handle */
|
||||
struct _finddata_t finddata; /* _findfirst, filenext block */
|
||||
|
||||
/* Scan the command line */
|
||||
while ((--argc) && (needle == NULL))
|
||||
{
|
||||
if (*(opt = *++argv) == '/')
|
||||
{
|
||||
switch (opt[1])
|
||||
{
|
||||
case 'c':
|
||||
case 'C': /* Count */
|
||||
count_lines = 1;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'I': /* Ignore */
|
||||
ignore_case = 1;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
case 'N': /* Number */
|
||||
number_output = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
case 'V': /* Not with */
|
||||
invert_search = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage ();
|
||||
exit (2); /* syntax error .. return error 2 */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get the string */
|
||||
if (needle == NULL)
|
||||
{
|
||||
/* Assign the string to find */
|
||||
needle = *argv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for search string */
|
||||
if (needle == NULL)
|
||||
{
|
||||
/* No string? */
|
||||
usage ();
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* Scan the files for the string */
|
||||
if (argc == 0)
|
||||
{
|
||||
ret = find_str (needle, stdin, invert_search, count_lines,
|
||||
number_output, ignore_case);
|
||||
}
|
||||
|
||||
while (--argc >= 0)
|
||||
{
|
||||
hfind = _findfirst (*++argv, &finddata);
|
||||
if (hfind < 0)
|
||||
{
|
||||
/* We were not able to find a file. Display a message and
|
||||
set the exit status. */
|
||||
LoadStringW (GetModuleHandleW (NULL), IDS_NO_SUCH_FILE, wszMessage, sizeof(wszMessage) / sizeof(wszMessage[0]));
|
||||
CharToOemW (wszMessage, oemMessage);
|
||||
fprintf (stderr, oemMessage, *argv);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* repeat find next file to match the filemask */
|
||||
do
|
||||
{
|
||||
/* We have found a file, so try to open it */
|
||||
if ((pfile = fopen (finddata.name, "r")) != NULL)
|
||||
{
|
||||
printf ("---------------- %s\n", finddata.name);
|
||||
ret = find_str (needle, pfile, invert_search, count_lines,
|
||||
number_output, ignore_case);
|
||||
fclose (pfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadStringW (GetModuleHandleW (NULL), IDS_CANNOT_OPEN, wszMessage, sizeof(wszMessage) / sizeof(wszMessage[0]));
|
||||
CharToOemW (wszMessage, oemMessage);
|
||||
fprintf (stderr, oemMessage,
|
||||
finddata.name);
|
||||
}
|
||||
}
|
||||
while (_findnext(hfind, &finddata) > 0);
|
||||
}
|
||||
_findclose(hfind);
|
||||
} /* for each argv */
|
||||
|
||||
/* RETURN: If the string was found at least once, returns 0.
|
||||
* If the string was not found at all, returns 1.
|
||||
* (Note that find_str.c returns the exact opposite values.)
|
||||
*/
|
||||
exit ( (ret ? 0 : 1) );
|
||||
}
|
77
base/applications/cmdutils/find/find.rc
Normal file
77
base/applications/cmdutils/find/find.rc
Normal file
|
@ -0,0 +1,77 @@
|
|||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Find Command"
|
||||
#define REACTOS_STR_INTERNAL_NAME "find"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "find.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
#include "lang/bg-BG.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_CA_ES
|
||||
#include "lang/ca-ES.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
#include "lang/cs-CZ.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EL_GR
|
||||
#include "lang/el-GR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
#include "lang/es-ES.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
#include "lang/it-IT.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_LT_LT
|
||||
#include "lang/lt-LT.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_NB_NO
|
||||
#include "lang/no-NO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
#include "lang/pl-PL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_PT_BR
|
||||
#include "lang/pt-BR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SK_SK
|
||||
#include "lang/sk-SK.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
#include "lang/sv-SE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
#include "lang/sq-AL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
#include "lang/uk-UA.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
#include "lang/zh-CN.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
#include "lang/zh-TW.rc"
|
||||
#endif
|
13
base/applications/cmdutils/find/lang/bg-BG.rc
Normal file
13
base/applications/cmdutils/find/lang/bg-BG.rc
Normal file
|
@ -0,0 +1,13 @@
|
|||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "FIND: Извежда всички редове във файла, които съдържат указания низ..\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""низ"" [ файл... ]\n\
|
||||
/C Брои колко реда съдържат низа\n\
|
||||
/I Пренебрегва ГлАвНОсТта\n\
|
||||
/N Брой показани редове, като се започва от 1\n\
|
||||
/V Извеждане на редовете, НЕсъдържащи низа."
|
||||
IDS_NO_SUCH_FILE "FIND: %s: Няма такъв файл\n"
|
||||
IDS_CANNOT_OPEN "FIND: %s: Отварянето на файла е невъзможно\n"
|
||||
END
|
13
base/applications/cmdutils/find/lang/ca-ES.rc
Normal file
13
base/applications/cmdutils/find/lang/ca-ES.rc
Normal file
|
@ -0,0 +1,13 @@
|
|||
LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "FIND: Mostra totes les linies que continguin una determinada cadena de caràcters.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Cadena de caràcters"" [ file... ]\n\
|
||||
/C Conta el numero de linies que contenen la cadena de caràcters\n\
|
||||
/I Ignora majúscules i minúscules\n\
|
||||
/N Numero de linies mostrades, començant per la primera\n\
|
||||
/V Mostra les linies que no contenen la cadena de caràcters"
|
||||
IDS_NO_SUCH_FILE "FIND: %s: No he trobat el fitxer\n"
|
||||
IDS_CANNOT_OPEN "FIND: %s: No puc obrir el fitxer\n"
|
||||
END
|
19
base/applications/cmdutils/find/lang/cs-CZ.rc
Normal file
19
base/applications/cmdutils/find/lang/cs-CZ.rc
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* FILE: applications/cmdutils/find/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* THANKS TO: Mario Kacmar aka Kario (kario@szm.sk)
|
||||
* UPDATED: 2008-02-29
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "FIND: Zobrazí všechny řádky souboru obsahující hledaný řetězec.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""řetězec"" [ soubor... ]\n\
|
||||
/C Zobrazí počet řádků obsahující řetězec.\n\
|
||||
/I Ignoruje velikost písmen.\n\
|
||||
/N Čísluje zobrazené řádky, začíná od 1.\n\
|
||||
/V Zobrazí všechny řádky, které NEobsahují zadaný řetěžec."
|
||||
IDS_NO_SUCH_FILE "FIND: Soubor %s nebyl nalezen.\n"
|
||||
IDS_CANNOT_OPEN "FIND: Soubor %s nelze otevřít!\n"
|
||||
END
|
14
base/applications/cmdutils/find/lang/de-DE.rc
Normal file
14
base/applications/cmdutils/find/lang/de-DE.rc
Normal file
|
@ -0,0 +1,14 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Sucht in einer Datei nach einer Zeichenfolge.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Zeichenfolge""\n\
|
||||
[[Laufwerk:][Pfad]Dateiname]]\n\
|
||||
/C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\
|
||||
/I Ignoriert Groß-/Kleinbuchstaben bei der Suche.\n\
|
||||
/N Zeigt die Zeilen mit ihren Zeilennummern an.\n\
|
||||
/V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enhalten."
|
||||
IDS_NO_SUCH_FILE "Datei %s nicht gefunden\n"
|
||||
IDS_CANNOT_OPEN "Datei %s kann nicht geöffnet werden.\n"
|
||||
END
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue