Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.

This commit is contained in:
Colin Finck 2017-10-03 07:45:34 +00:00
parent b94e2d8ca0
commit c2c66aff7d
24198 changed files with 0 additions and 37285 deletions

0
base/applications/cmdutils/.gitignore vendored Normal file
View file

View 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)

View 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)

View 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 */

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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;
}

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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;
}

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View file

@ -0,0 +1,4 @@
#pragma once
#define IDS_USAGE 100
#define IDS_HELP 101

View 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)

View 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 */

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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);
}
}

View 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

View 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)

View 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;
}

View 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)

View 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;
}

View file

@ -0,0 +1,4 @@
#pragma once
#define IDS_HELP 0
#define IDS_INVALID_MACRO_DEF 1

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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ї команд.\n\
/LISTSIZE=size Встановлення кiлькостi команд в буфері iсторiї.\n\
/REINSTALL Очищення iсторiї команд.\n\
/MACROS Вображення визначень макросiв.\n\
/MACROS:exename Вображення визначень макросiв для конкретної програми.\n\
/MACROS:ALL Вображення визначень макросiв для всiх програм.\n\
/MACROFILE=filename Завантаження визначень макросiв з файлу.\n\
macroname Визначення iменi макросу для створення.\n\
text Визначення замiни тексту в макросi.\n"
IDS_INVALID_MACRO_DEF "Недiйсний макрос визначення: %s\n"
END

View 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

View 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

View 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)

File diff suppressed because it is too large Load diff

View 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

View 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 */

File diff suppressed because it is too large Load diff

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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) );
}

View 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

View 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

View 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

View 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

View 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