/*
 * Start
 * English Language Support
 *
 * Copyright 2003 Dan Kegel
 *
 * 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
 */

#include "resources.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
{
STRING_USAGE,                                   "Start a program, or open a document in the program normally used for files with that suffix.\n\
Usage:\n\
start [options] program_filename [...]\n\
start [options] document_filename\n\
\n\
Options:\n\
/M[inimized] Start the program minimized.\n\
/MAX[imized] Start the program maximized.\n\
/R[estored]  Start the program normally (neither minimized nor maximized).\n\
/W[ait]      Wait for started program to finish, then exit with its exit code.\n\
/Unix        Use a Unix filename and start the file like windows explorer.\n\
/ProgIDOpen  Open a document using the following progID.\n\
/L           Show end-user license.\n\
\n\
start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
Start comes with ABSOLUTELY NO WARRANTY; for details run with /L option.\n\
This is free software, and you are welcome to redistribute it\n\
under certain conditions; run 'start /L' for details.\n\
"

STRING_LICENSE, "start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
This program is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser Public License\n\
as published by the Free Software Foundation; either version 2.1\n\
of the License, or (at your option) any later version.\n\
\n\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
GNU Lesser Public License for more details.\n\
\n\
You should have received a copy of the GNU Lesser Public License\n\
along with this program; if not, write to the Free Software\n\
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\
\n\
See the COPYING.LIB file for license information.\n\
"

STRING_EXECFAIL, "Application could not be started, or no application associated with the specified file.\nShellExecuteEx failed"

STRING_UNIXFAIL "Could not translate the specified Unix filename to a DOS filename."
}
