NHDT->ANH, nethack->anethack, nhdat->anhdat
[aNetHack.git] / sys / wince / winmain.c
blob689032649b170e111ce6bc65b309484622cf25ce
1 // winmain.cpp : Defines the entry point for the application.
2 //
3 // $ANH-Date: 1432512799 2015/05/25 00:13:19 $ $ANH-Branch: master $:$ANH-Revision: 1.5 $
5 #include "winMS.h"
6 #include <string.h>
8 #define MAX_CMDLINE_PARAM 255
10 extern int FDECL(main, (int, char **));
11 static TCHAR *_get_cmd_arg(TCHAR *pCmdLine);
13 int APIENTRY
14 WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine,
15 int nCmdShow)
17 int argc;
18 char *argv[MAX_CMDLINE_PARAM];
19 size_t len;
20 TCHAR *p;
21 TCHAR wbuf[NHSTR_BUFSIZE];
22 char buf[NHSTR_BUFSIZE];
24 /* get command line parameters */
25 p = _get_cmd_arg(
26 #if defined(WIN_CE_PS2xx) || defined(WIN32_PLATFORM_HPCPRO)
27 lpCmdLine
28 #else
29 GetCommandLine()
30 #endif
32 for (argc = 1; p && argc < MAX_CMDLINE_PARAM; argc++) {
33 len = _tcslen(p);
34 if (len > 0) {
35 argv[argc] = _strdup(NH_W2A(p, buf, BUFSZ));
36 } else {
37 argv[argc] = "";
39 p = _get_cmd_arg(NULL);
41 GetModuleFileName(NULL, wbuf, BUFSZ);
42 argv[0] = _strdup(NH_W2A(wbuf, buf, BUFSZ));
44 main(argc, argv);
46 return 0;
49 TCHAR *
50 _get_cmd_arg(TCHAR *pCmdLine)
52 static TCHAR *pArgs = NULL;
53 TCHAR *pRetArg;
54 BOOL bQuoted;
56 if (!pCmdLine && !pArgs)
57 return NULL;
58 if (!pArgs)
59 pArgs = pCmdLine;
61 /* skip whitespace */
62 for (pRetArg = pArgs; *pRetArg && _istspace(*pRetArg);
63 pRetArg = CharNext(pRetArg))
65 if (!*pRetArg) {
66 pArgs = NULL;
67 return NULL;
70 /* check for quote */
71 if (*pRetArg == TEXT('"')) {
72 bQuoted = TRUE;
73 pRetArg = CharNext(pRetArg);
74 pArgs = _tcschr(pRetArg, TEXT('"'));
75 } else {
76 /* skip to whitespace */
77 for (pArgs = pRetArg; *pArgs && !_istspace(*pArgs);
78 pArgs = CharNext(pArgs))
82 if (pArgs && *pArgs) {
83 TCHAR *p;
84 p = pArgs;
85 pArgs = CharNext(pArgs);
86 *p = (TCHAR) 0;
87 } else {
88 pArgs = NULL;
91 return pRetArg;
94 #ifndef STRNCMPI
95 char lowc(c) /* force 'c' into lowercase */
96 char c;
98 return ((char) (('A' <= c && c <= 'Z') ? (c | 040) : c));
101 int strncmpi(s1, s2, n) /* case insensitive counted string comparison */
102 register const char *s1, *s2;
103 register int n; /*(should probably be size_t, which is usually unsigned)*/
104 { /*{ aka strncasecmp }*/
105 register char t1, t2;
107 while (n--) {
108 if (!*s2)
109 return (*s1 != 0); /* s1 >= s2 */
110 else if (!*s1)
111 return -1; /* s1 < s2 */
112 t1 = lowc(*s1++);
113 t2 = lowc(*s2++);
114 if (t1 != t2)
115 return (t1 > t2) ? 1 : -1;
117 return 0; /* s1 == s2 */
119 #endif /* STRNCMPI */