- Remove most of the Usage text from the german translation. It was just copied from the Windows "more" utility and our tool does not support any of the extended options yet.

I changed the text, so it only includes the features we currently support.
- Change SUBLANG_DEFAULT to SUBLANG_NEUTRAL in the german translation
- Add an English (US) translation
- Use a consistent indentation in "more.c"
- Exit the tool if reading IDS_CONTINUE fails instead of falling back to a hardcoded string

svn path=/trunk/; revision=28620
This commit is contained in:
Colin Finck 2007-08-28 15:54:19 +00:00
parent b91657fe81
commit 3124187a40
4 changed files with 132 additions and 136 deletions

View file

@ -1,34 +1,15 @@
LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
{ {
IDS_USAGE, "Zeigt Daten seitenweise auf dem Bildschirm an.\n\n\ IDS_USAGE, "Zeigt Daten seitenweise auf dem Bildschirm an.\n\n\
MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [Laufwerk:][Pfad]Dateiname\n\ MORE < [Laufwerk:][Pfad]Dateiname\n\
Befehl | MORE [/E [/C] [/P] [/S] [/Tn] [+n]] \n\ Befehl | MORE \n\
MORE /E [/C] [/P] [/S] [/Tn] [+n] [Dateien]\n\n\ MORE [Laufwerk:][Pfad]Dateiname\n\n\
[Laufwerk:][Pfad]Dateiname Ein Datei, deren Inhalt angezeigt\n\ [Laufwerk:][Pfad]Dateiname Eine Datei, deren Inhalt angezeigt werden soll.\n\
\t\t\t werden soll.\n\n\ Befehl\t\t Ein Befehl, dessen Ausgabe angezeigt werden soll.\n\n\
Befehl\t\t Ein Befehl, dessen Ausgabe angezeigt\n\ An der Eingabeaufforderung ""-- Fortsetzung --"" kann eine beliebige\n\
\t\t\t werden soll.\n\n\ Taste gedrückt werden, um die nächste Seite anzuzeigen.\n"
/E\tAktiviert die erweiterten Möglichkeiten.\n\
/C\tLöscht den Bildschirm, bevor eine Seite angezeigt wird.\n\
/P\tFührt Seitenvorschubzeichen aus.\n\
/S\tFasst mehrere leere Zeilen zu einer Zeile zusammen.\n\
/Tn\tErsetzt Tabulatorenzeichen durch n Leerzeichen (Standard 8).\n\n\
\tDie Optionen können in der Umgebungsvariablen MORE angegeben\n\
\twerden.\n\n\
+n\tBeginnt mit der Anzeige der ersten Datei in Zeile n.\n\n\
Dateien Gibt eine Liste mit anzuzeigenden Dateien an.\n\
\t Trennen sie die Dateinamen durch ein Leerzeichen.\n\n\
Wenn die erweiterten Möglichkeiten aktiviert sind, können die folgenden\n\
Befehle an der Eingabeforderung \"--Fortsetzung--\" eingegeben werden:\n\n\
P n\t Zeigt die nächsten n Zeilen an.\n\
S n\t Überspringt die nächsten n Zeilen.\n\
Q\tBeendet die Ausgabe.\n\
=\tZeigt die Zeilennummer an.\n\
?\tZeigt die Hilfezeile an.\n\
<LEERTASTE> Zeigt die nächste Zeile an.\n\
<EINGABETASTE> Zeigt die nächste Zeile an.\n"
IDS_CONTINUE, " -- Fortsetzung (100%) -- " IDS_CONTINUE, " -- Fortsetzung (100%) -- "
IDS_FILE_ACCESS, "Auf die Datei %s kann nicht zugegriffen werden." IDS_FILE_ACCESS, "Auf die Datei %s kann nicht zugegriffen werden."

View file

@ -0,0 +1,15 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE DISCARDABLE
{
IDS_USAGE, "Displays data page-by-page on the screen.\n\n\
MORE < [Drive:][Path]File name\n\
Command | MORE \n\
MORE [Drive:][Path]File name\n\n\
[Drive:][Path]File name A file, whose content shall be displayed.\n\
Command\t\t A command, whose output shall be displayed.\n\n\
At the prompt ""-- Continue --"" you can press any key to show the next page.\n"
IDS_CONTINUE, " -- Continue (100%) -- "
IDS_FILE_ACCESS, "Cannot access the file %s."
}

View file

@ -30,11 +30,11 @@ HANDLE hKeyboard;
static VOID static VOID
GetScreenSize (PSHORT maxx, PSHORT maxy) GetScreenSize (PSHORT maxx, PSHORT maxy)
{ {
CONSOLE_SCREEN_BUFFER_INFO csbi; CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo (hStdOut, &csbi); GetConsoleScreenBufferInfo (hStdOut, &csbi);
*maxx = (csbi.srWindow.Right - csbi.srWindow.Left) + 1; *maxx = (csbi.srWindow.Right - csbi.srWindow.Left) + 1;
*maxy = (csbi.srWindow.Bottom - csbi.srWindow.Top) - 4; *maxy = (csbi.srWindow.Bottom - csbi.srWindow.Top) - 4;
} }
@ -42,40 +42,40 @@ GetScreenSize (PSHORT maxx, PSHORT maxy)
static static
VOID ConOutPuts (LPTSTR szText) VOID ConOutPuts (LPTSTR szText)
{ {
DWORD dwWritten; DWORD dwWritten;
WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), szText, _tcslen(szText), &dwWritten, NULL); WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), szText, _tcslen(szText), &dwWritten, NULL);
WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), "\n", 1, &dwWritten, NULL); WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), "\n", 1, &dwWritten, NULL);
} }
static VOID static VOID
ConInKey (VOID) ConInKey (VOID)
{ {
INPUT_RECORD ir; INPUT_RECORD ir;
DWORD dwRead; DWORD dwRead;
do do
{ {
ReadConsoleInput (hKeyboard, &ir, 1, &dwRead); ReadConsoleInput (hKeyboard, &ir, 1, &dwRead);
if ((ir.EventType == KEY_EVENT) && if ((ir.EventType == KEY_EVENT) &&
(ir.Event.KeyEvent.bKeyDown == TRUE)) (ir.Event.KeyEvent.bKeyDown == TRUE))
return; return;
} }
while (TRUE); while (TRUE);
} }
static VOID static VOID
WaitForKey (VOID) WaitForKey (VOID)
{ {
DWORD dwWritten; DWORD dwWritten;
WriteFile (hStdErr, szCont , szContLength, &dwWritten, NULL); WriteFile (hStdErr, szCont , szContLength, &dwWritten, NULL);
ConInKey(); ConInKey();
WriteFile (hStdErr, _T("\n"), 1, &dwWritten, NULL); WriteFile (hStdErr, _T("\n"), 1, &dwWritten, NULL);
// FlushConsoleInputBuffer (hConsoleIn); // FlushConsoleInputBuffer (hConsoleIn);
} }
@ -84,125 +84,125 @@ WaitForKey (VOID)
//INT CommandMore (LPTSTR cmd, LPTSTR param) //INT CommandMore (LPTSTR cmd, LPTSTR param)
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
SHORT maxx,maxy; SHORT maxx,maxy;
SHORT line_count=0,ch_count=0; SHORT line_count=0,ch_count=0;
DWORD i, last; DWORD i, last;
HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hFile = INVALID_HANDLE_VALUE;
TCHAR szFullPath[MAX_PATH]; TCHAR szFullPath[MAX_PATH];
TCHAR szMsg[1024]; TCHAR szMsg[1024];
/*reading/writing buffer*/ /*reading/writing buffer*/
TCHAR *buff; TCHAR *buff;
/*bytes written by WriteFile and ReadFile*/ /*bytes written by WriteFile and ReadFile*/
DWORD dwRead,dwWritten; DWORD dwRead,dwWritten;
/*ReadFile() return value*/ /*ReadFile() return value*/
BOOL bRet; BOOL bRet;
hStdIn = GetStdHandle(STD_INPUT_HANDLE); hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
hStdErr = GetStdHandle(STD_ERROR_HANDLE); hStdErr = GetStdHandle(STD_ERROR_HANDLE);
hApp = GetModuleHandle(NULL); hApp = GetModuleHandle(NULL);
buff=malloc(4096); buff=malloc(4096);
if (!buff) if (!buff)
{ {
ConOutPuts(_T("Error: no memory")); ConOutPuts(_T("Error: no memory"));
return 0; return 1;
} }
if (argc > 1 && _tcsncmp (argv[1], _T("/?"), 2) == 0) if (argc > 1 && _tcsncmp (argv[1], _T("/?"), 2) == 0)
{ {
if (LoadString(hApp, IDS_USAGE, buff, 4096 / sizeof(TCHAR)) < 4096 / sizeof(TCHAR)) if (LoadString(hApp, IDS_USAGE, buff, 4096 / sizeof(TCHAR)) < 4096 / sizeof(TCHAR))
{ {
CharToOem(buff, buff); CharToOem(buff, buff);
ConOutPuts(buff); ConOutPuts(buff);
} }
free(buff); free(buff);
return 0; return 0;
} }
hKeyboard = CreateFile (_T("CONIN$"), GENERIC_READ, hKeyboard = CreateFile (_T("CONIN$"), GENERIC_READ,
0,NULL,OPEN_ALWAYS,0,0); 0,NULL,OPEN_ALWAYS,0,0);
GetScreenSize(&maxx,&maxy); GetScreenSize(&maxx,&maxy);
FlushConsoleInputBuffer (hKeyboard); FlushConsoleInputBuffer (hKeyboard);
if(argc > 1) if(argc > 1)
{ {
GetFullPathNameA(argv[1], MAX_PATH, szFullPath, NULL); GetFullPathNameA(argv[1], MAX_PATH, szFullPath, NULL);
hFile = CreateFile (szFullPath, hFile = CreateFile (szFullPath,
GENERIC_READ, GENERIC_READ,
0, 0,
NULL, NULL,
OPEN_EXISTING, OPEN_EXISTING,
0, 0,
0); 0);
if (hFile == INVALID_HANDLE_VALUE) if (hFile == INVALID_HANDLE_VALUE)
{ {
if (LoadString(hApp, IDS_FILE_ACCESS, szMsg, sizeof(szMsg) / sizeof(TCHAR)) < sizeof(szMsg) / sizeof(TCHAR)) if (LoadString(hApp, IDS_FILE_ACCESS, szMsg, sizeof(szMsg) / sizeof(TCHAR)) < sizeof(szMsg) / sizeof(TCHAR))
{ {
_stprintf(buff, szMsg, szFullPath); _stprintf(buff, szMsg, szFullPath);
CharToOem(buff, buff); CharToOem(buff, buff);
ConOutPuts(buff); ConOutPuts(buff);
} }
free(buff); free(buff);
return 0; return 0;
} }
} }
else else
{ {
hFile = hStdIn; hFile = hStdIn;
} }
if (!LoadString(hApp, IDS_CONTINUE, szCont, sizeof(szCont) / sizeof(TCHAR))) if (!LoadString(hApp, IDS_CONTINUE, szCont, sizeof(szCont) / sizeof(TCHAR)))
{ {
/* fail back to english */ /* Shouldn't happen, so exit */
_tcscpy(szCont, _T("--- continue ---")); return 1;
} }
szContLength = _tcslen(szCont); szContLength = _tcslen(szCont);
do do
{ {
bRet = ReadFile(hFile,buff,4096,&dwRead,NULL); bRet = ReadFile(hFile,buff,4096,&dwRead,NULL);
for(last=i=0;i<dwRead && bRet;i++) for(last=i=0;i<dwRead && bRet;i++)
{ {
ch_count++; ch_count++;
if(buff[i] == _T('\n') || ch_count == maxx) if(buff[i] == _T('\n') || ch_count == maxx)
{ {
ch_count=0; ch_count=0;
line_count++; line_count++;
if (line_count == maxy) if (line_count == maxy)
{ {
line_count = 0; line_count = 0;
WriteFile(hStdOut,&buff[last], i-last+1, &dwWritten, NULL); WriteFile(hStdOut,&buff[last], i-last+1, &dwWritten, NULL);
last=i+1; last=i+1;
FlushFileBuffers (hStdOut); FlushFileBuffers (hStdOut);
WaitForKey (); WaitForKey ();
} }
} }
} }
if (last<dwRead && bRet) if (last<dwRead && bRet)
WriteFile(hStdOut,&buff[last], dwRead-last, &dwWritten, NULL); WriteFile(hStdOut,&buff[last], dwRead-last, &dwWritten, NULL);
} }
while(dwRead>0 && bRet); while(dwRead>0 && bRet);
free (buff); free (buff);
CloseHandle (hKeyboard); CloseHandle (hKeyboard);
if (hFile != hStdIn) if (hFile != hStdIn)
CloseHandle (hFile); CloseHandle (hFile);
return 0; return 0;
} }
/* EOF */ /* EOF */

View file

@ -1,5 +1,5 @@
#include <windows.h> #include <windows.h>
#include "resource.h" #include "resource.h"
#include "lang/de-DE.rc" //#include "lang/de-DE.rc"
#include "lang/en-US.rc"