From 919c5d7a4ab46f86ff87d600a284d47d40b5ce5b Mon Sep 17 00:00:00 2001 From: rust3028 Date: Wed, 28 Sep 2016 17:02:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- winbuild/Release/balong_flash.exe | Bin 0 -> 113152 bytes winbuild/balong_flash.sln | 20 + winbuild/balong_flash/balong_flash.vcxproj | 99 +++ .../balong_flash/balong_flash.vcxproj.filters | 45 ++ winbuild/balong_flash/getopt.c | 563 ++++++++++++++++++ winbuild/balong_flash/getopt.h | 95 +++ winbuild/balong_flash/printf.h | 13 + 7 files changed, 835 insertions(+) create mode 100644 winbuild/Release/balong_flash.exe create mode 100644 winbuild/balong_flash.sln create mode 100644 winbuild/balong_flash/balong_flash.vcxproj create mode 100644 winbuild/balong_flash/balong_flash.vcxproj.filters create mode 100644 winbuild/balong_flash/getopt.c create mode 100644 winbuild/balong_flash/getopt.h create mode 100644 winbuild/balong_flash/printf.h diff --git a/winbuild/Release/balong_flash.exe b/winbuild/Release/balong_flash.exe new file mode 100644 index 0000000000000000000000000000000000000000..3d7b2b9ace2fd5180df9b84ee9a2b3cea0d55243 GIT binary patch literal 113152 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 f4h(Q$fCB>@7~sGF2L?DWz<~h{3~=CI + + + + Debug + Win32 + + + Release + Win32 + + + + {A3F720AC-B63B-4E65-8F54-F7ED336866E7} + Win32Proj + balong_flash + + + + Application + true + v110_xp + Unicode + Static + + + Application + false + v110_xp + true + Unicode + Static + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir) + + + Console + true + Ws2_32.lib + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir) + + + Console + false + true + true + Ws2_32.lib + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/winbuild/balong_flash/balong_flash.vcxproj.filters b/winbuild/balong_flash/balong_flash.vcxproj.filters new file mode 100644 index 0000000..0ae4f7c --- /dev/null +++ b/winbuild/balong_flash/balong_flash.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/winbuild/balong_flash/getopt.c b/winbuild/balong_flash/getopt.c new file mode 100644 index 0000000..5fa19b1 --- /dev/null +++ b/winbuild/balong_flash/getopt.c @@ -0,0 +1,563 @@ +/* $OpenBSD: getopt_long.c,v 1.23 2007/10/31 12:34:57 chl Exp $ */ +/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */ + +/* + * Copyright (c) 2002 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Sponsored in part by the Defense Advanced Research Projects + * Agency (DARPA) and Air Force Research Laboratory, Air Force + * Materiel Command, USAF, under agreement number F39502-99-1-0512. + */ +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "getopt.h" + +#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ + +#ifdef REPLACE_GETOPT +int opterr = 1; /* if error message should be printed */ +int optind = 1; /* index into parent argv vector */ +int optopt = '?'; /* character checked for validity */ +#undef optreset /* see getopt.h */ +#define optreset __mingw_optreset +int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ +#endif + +#define PRINT_ERROR ((opterr) && (*options != ':')) + +#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ +#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ +#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ + +/* return values */ +#define BADCH (int)'?' +#define BADARG ((*options == ':') ? (int)':' : (int)'?') +#define INORDER (int)1 + +#ifndef __CYGWIN__ +#define __progname __argv[0] +#else +extern char __declspec(dllimport) *__progname; +#endif + +#ifdef __CYGWIN__ +static char EMSG[] = ""; +#else +#define EMSG "" +#endif + +static int getopt_internal(int, char * const *, const char *, + const struct option *, int *, int); +static int parse_long_options(char * const *, const char *, + const struct option *, int *, int); +static int gcd(int, int); +static void permute_args(int, int, int, char * const *); + +static char *place = EMSG; /* option letter processing */ + +/* XXX: set optreset to 1 rather than these two */ +static int nonopt_start = -1; /* first non option argument (for permute) */ +static int nonopt_end = -1; /* first option after non options (for permute) */ + +/* Error messages */ +static const char recargchar[] = "option requires an argument -- %c"; +static const char recargstring[] = "option requires an argument -- %s"; +static const char ambig[] = "ambiguous option -- %.*s"; +static const char noarg[] = "option doesn't take an argument -- %.*s"; +static const char illoptchar[] = "unknown option -- %c"; +static const char illoptstring[] = "unknown option -- %s"; + +static void +_vwarnx(const char *fmt,va_list ap) +{ + (void)fprintf(stderr,"%s: ",__progname); + if (fmt != NULL) + (void)vfprintf(stderr,fmt,ap); + (void)fprintf(stderr,"\n"); +} + +static void +warnx(const char *fmt,...) +{ + va_list ap; + va_start(ap,fmt); + _vwarnx(fmt,ap); + va_end(ap); +} + +/* + * Compute the greatest common divisor of a and b. + */ +static int +gcd(int a, int b) +{ + int c; + + c = a % b; + while (c != 0) { + a = b; + b = c; + c = a % b; + } + + return (b); +} + +/* + * Exchange the block from nonopt_start to nonopt_end with the block + * from nonopt_end to opt_end (keeping the same order of arguments + * in each block). + */ +static void +permute_args(int panonopt_start, int panonopt_end, int opt_end, + char * const *nargv) +{ + int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; + char *swap; + + /* + * compute lengths of blocks and number and size of cycles + */ + nnonopts = panonopt_end - panonopt_start; + nopts = opt_end - panonopt_end; + ncycle = gcd(nnonopts, nopts); + cyclelen = (opt_end - panonopt_start) / ncycle; + + for (i = 0; i < ncycle; i++) { + cstart = panonopt_end+i; + pos = cstart; + for (j = 0; j < cyclelen; j++) { + if (pos >= panonopt_end) + pos -= nnonopts; + else + pos += nopts; + swap = nargv[pos]; + /* LINTED const cast */ + ((char **) nargv)[pos] = nargv[cstart]; + /* LINTED const cast */ + ((char **)nargv)[cstart] = swap; + } + } +} + +/* + * parse_long_options -- + * Parse long options in argc/argv argument vector. + * Returns -1 if short_too is set and the option does not match long_options. + */ +static int +parse_long_options(char * const *nargv, const char *options, + const struct option *long_options, int *idx, int short_too) +{ + char *current_argv, *has_equal; + size_t current_argv_len; + int i, ambiguous, match; + +#define IDENTICAL_INTERPRETATION(_x, _y) \ + (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ + long_options[(_x)].flag == long_options[(_y)].flag && \ + long_options[(_x)].val == long_options[(_y)].val) + + current_argv = place; + match = -1; + ambiguous = 0; + + optind++; + + if ((has_equal = strchr(current_argv, '=')) != NULL) { + /* argument found (--option=arg) */ + current_argv_len = has_equal - current_argv; + has_equal++; + } else + current_argv_len = strlen(current_argv); + + for (i = 0; long_options[i].name; i++) { + /* find matching long option */ + if (strncmp(current_argv, long_options[i].name, + current_argv_len)) + continue; + + if (strlen(long_options[i].name) == current_argv_len) { + /* exact match */ + match = i; + ambiguous = 0; + break; + } + /* + * If this is a known short option, don't allow + * a partial match of a single character. + */ + if (short_too && current_argv_len == 1) + continue; + + if (match == -1) /* partial match */ + match = i; + else if (!IDENTICAL_INTERPRETATION(i, match)) + ambiguous = 1; + } + if (ambiguous) { + /* ambiguous abbreviation */ + if (PRINT_ERROR) + warnx(ambig, (int)current_argv_len, + current_argv); + optopt = 0; + return (BADCH); + } + if (match != -1) { /* option found */ + if (long_options[match].has_arg == no_argument + && has_equal) { + if (PRINT_ERROR) + warnx(noarg, (int)current_argv_len, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + return (BADARG); + } + if (long_options[match].has_arg == required_argument || + long_options[match].has_arg == optional_argument) { + if (has_equal) + optarg = has_equal; + else if (long_options[match].has_arg == + required_argument) { + /* + * optional argument doesn't use next nargv + */ + optarg = nargv[optind++]; + } + } + if ((long_options[match].has_arg == required_argument) + && (optarg == NULL)) { + /* + * Missing argument; leading ':' indicates no error + * should be generated. + */ + if (PRINT_ERROR) + warnx(recargstring, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + --optind; + return (BADARG); + } + } else { /* unknown option */ + if (short_too) { + --optind; + return (-1); + } + if (PRINT_ERROR) + warnx(illoptstring, current_argv); + optopt = 0; + return (BADCH); + } + if (idx) + *idx = match; + if (long_options[match].flag) { + *long_options[match].flag = long_options[match].val; + return (0); + } else + return (long_options[match].val); +#undef IDENTICAL_INTERPRETATION +} + +/* + * getopt_internal -- + * Parse argc/argv argument vector. Called by user level routines. + */ +static int +getopt_internal(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx, int flags) +{ + char *oli; /* option letter list index */ + int optchar, short_too; + static int posixly_correct = -1; + + if (options == NULL) + return (-1); + + /* + * XXX Some GNU programs (like cvs) set optind to 0 instead of + * XXX using optreset. Work around this braindamage. + */ + if (optind == 0) + optind = optreset = 1; + + /* + * Disable GNU extensions if POSIXLY_CORRECT is set or options + * string begins with a '+'. + * + * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or + * optreset != 0 for GNU compatibility. + */ + if (posixly_correct == -1 || optreset != 0) + posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); + if (*options == '-') + flags |= FLAG_ALLARGS; + else if (posixly_correct || *options == '+') + flags &= ~FLAG_PERMUTE; + if (*options == '+' || *options == '-') + options++; + + optarg = NULL; + if (optreset) + nonopt_start = nonopt_end = -1; +start: + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc) { /* end of argument vector */ + place = EMSG; + if (nonopt_end != -1) { + /* do permutation, if we have to */ + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + else if (nonopt_start != -1) { + /* + * If we skipped non-options, set optind + * to the first of them. + */ + optind = nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + if (*(place = nargv[optind]) != '-' || + (place[1] == '\0' && strchr(options, '-') == NULL)) { + place = EMSG; /* found non-option */ + if (flags & FLAG_ALLARGS) { + /* + * GNU extension: + * return non-option as argument to option 1 + */ + optarg = nargv[optind++]; + return (INORDER); + } + if (!(flags & FLAG_PERMUTE)) { + /* + * If no permutation wanted, stop parsing + * at first non-option. + */ + return (-1); + } + /* do permutation */ + if (nonopt_start == -1) + nonopt_start = optind; + else if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + nonopt_start = optind - + (nonopt_end - nonopt_start); + nonopt_end = -1; + } + optind++; + /* process next argument */ + goto start; + } + if (nonopt_start != -1 && nonopt_end == -1) + nonopt_end = optind; + + /* + * If we have "-" do nothing, if "--" we are done. + */ + if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { + optind++; + place = EMSG; + /* + * We found an option (--), so if we skipped + * non-options, we have to permute. + */ + if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + } + + /* + * Check long options if: + * 1) we were passed some + * 2) the arg is not just "-" + * 3) either the arg starts with -- we are getopt_long_only() + */ + if (long_options != NULL && place != nargv[optind] && + (*place == '-' || (flags & FLAG_LONGONLY))) { + short_too = 0; + if (*place == '-') + place++; /* --foo long option */ + else if (*place != ':' && strchr(options, *place) != NULL) + short_too = 1; /* could be short option too */ + + optchar = parse_long_options(nargv, options, long_options, + idx, short_too); + if (optchar != -1) { + place = EMSG; + return (optchar); + } + } + + if ((optchar = (int)*place++) == (int)':' || + (optchar == (int)'-' && *place != '\0') || + (oli = strchr(options, optchar)) == NULL) { + /* + * If the user specified "-" and '-' isn't listed in + * options, return -1 (non-option) as per POSIX. + * Otherwise, it is an unknown option character (or ':'). + */ + if (optchar == (int)'-' && *place == '\0') + return (-1); + if (!*place) + ++optind; + if (PRINT_ERROR) + warnx(illoptchar, optchar); + optopt = optchar; + return (BADCH); + } + if (long_options != NULL && optchar == 'W' && oli[1] == ';') { + /* -W long-option */ + if (*place) /* no space */ + /* NOTHING */; + else if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else /* white space */ + place = nargv[optind]; + optchar = parse_long_options(nargv, options, long_options, + idx, 0); + place = EMSG; + return (optchar); + } + if (*++oli != ':') { /* doesn't take argument */ + if (!*place) + ++optind; + } else { /* takes (optional) argument */ + optarg = NULL; + if (*place) /* no white space */ + optarg = place; + else if (oli[1] != ':') { /* arg not optional */ + if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else + optarg = nargv[optind]; + } + place = EMSG; + ++optind; + } + /* dump back option letter */ + return (optchar); +} + +#ifdef REPLACE_GETOPT +/* + * getopt -- + * Parse argc/argv argument vector. + * + * [eventually this will replace the BSD getopt] + */ +int +getopt(int nargc, char * const *nargv, const char *options) +{ + + /* + * We don't pass FLAG_PERMUTE to getopt_internal() since + * the BSD getopt(3) (unlike GNU) has never done this. + * + * Furthermore, since many privileged programs call getopt() + * before dropping privileges it makes sense to keep things + * as simple (and bug-free) as possible. + */ + return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); +} +#endif /* REPLACE_GETOPT */ + +/* + * getopt_long -- + * Parse argc/argv argument vector. + */ +int +getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE)); +} + +/* + * getopt_long_only -- + * Parse argc/argv argument vector. + */ +int +getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE|FLAG_LONGONLY)); +} \ No newline at end of file diff --git a/winbuild/balong_flash/getopt.h b/winbuild/balong_flash/getopt.h new file mode 100644 index 0000000..8d526ab --- /dev/null +++ b/winbuild/balong_flash/getopt.h @@ -0,0 +1,95 @@ +#ifndef __GETOPT_H__ +/** + * DISCLAIMER + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the w64 mingw-runtime package. + * + * The w64 mingw-runtime package and its code is distributed in the hope that it + * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR + * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to + * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#define __GETOPT_H__ + +/* All the headers include this file. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int optind; /* index of first non-option in argv */ +extern int optopt; /* single option character, as parsed */ +extern int opterr; /* flag to enable built-in diagnostics... */ + /* (user may set to zero, to suppress) */ + +extern char *optarg; /* pointer to argument of current option */ + +extern int getopt(int nargc, char * const *nargv, const char *options); + +#ifdef _BSD_SOURCE +/* + * BSD adds the non-standard `optreset' feature, for reinitialisation + * of `getopt' parsing. We support this feature, for applications which + * proclaim their BSD heritage, before including this header; however, + * to maintain portability, developers are advised to avoid it. + */ +# define optreset __mingw_optreset +extern int optreset; +#endif +#ifdef __cplusplus +} +#endif +/* + * POSIX requires the `getopt' API to be specified in `unistd.h'; + * thus, `unistd.h' includes this header. However, we do not want + * to expose the `getopt_long' or `getopt_long_only' APIs, when + * included in this manner. Thus, close the standard __GETOPT_H__ + * declarations block, and open an additional __GETOPT_LONG_H__ + * specific block, only when *not* __UNISTD_H_SOURCED__, in which + * to declare the extended API. + */ +#endif /* !defined(__GETOPT_H__) */ + +#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) +#define __GETOPT_LONG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct option /* specification for a long form option... */ +{ + const char *name; /* option name, without leading hyphens */ + int has_arg; /* does it take an argument? */ + int *flag; /* where to save its status, or NULL */ + int val; /* its associated status value */ +}; + +enum /* permitted values for its `has_arg' field... */ +{ + no_argument = 0, /* option never takes an argument */ + required_argument, /* option always requires an argument */ + optional_argument /* option may take an argument */ +}; + +extern int getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx); +extern int getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx); +/* + * Previous MinGW implementation had... + */ +#ifndef HAVE_DECL_GETOPT +/* + * ...for the long form API only; keep this for compatibility. + */ +# define HAVE_DECL_GETOPT 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ \ No newline at end of file diff --git a/winbuild/balong_flash/printf.h b/winbuild/balong_flash/printf.h new file mode 100644 index 0000000..8102048 --- /dev/null +++ b/winbuild/balong_flash/printf.h @@ -0,0 +1,13 @@ +static int printf(const char* format, ...) +{ + static char ostr[2048]; + static wchar_t wstr[2048]; + va_list args; + + va_start(args, format); + vsprintf(ostr, format, args); + va_end(args); + MultiByteToWideChar(CP_UTF8, 0, ostr, -1, wstr, 2048); + WideCharToMultiByte(CP_OEMCP, 0, wstr, -1, ostr, 2048, NULL, NULL); + return printf_s("%s", ostr); +}