int __cdecl wmain()

in BusTools/GpioTestTool/main.cpp [435:482]


int __cdecl wmain (_In_ int argc, _In_reads_(argc) wchar_t *argv[])
{
    enum MainReturnValue { Success, Failure };

    if (argc < 2) {
        fwprintf(
            stderr,
            L"Missing required command line parameter PinNumber\n\n");
        PrintUsage(argv[0]);
        return Success;
    }

    PCWSTR arg = argv[1];
    if (!_wcsicmp(arg, L"-h") || !_wcsicmp(arg, L"/h") ||
        !_wcsicmp(arg, L"-?") || !_wcsicmp(arg, L"/?")) {

        PrintUsage(argv[0]);
        return Success;
    }

    RoInitializeWrapper roInit(RO_INIT_MULTITHREADED);
    try {
        if (!_wcsicmp(arg, L"-list") || !_wcsicmp(arg, L"/list")) {
            ListPins();
            return Success;
        } else {
            std::wistringstream is(arg);
            INT32 pinNumber;
            is >> pinNumber;
            if (!is) {
                fwprintf(
                    stderr,
                    L"Expecting integer: %s\nType %s /? for usage.\n",
                    arg,
                    argv[0]);
                return Failure;
            }

            auto pin = MakePin(pinNumber);
            wprintf(L"Type 'help' for a list of commands\n");
            ShowPrompt(pin.Get());
            return Success;
        }
    } catch (const wexception& ex) {
        fwprintf(stderr, L"Error: %s\n", ex.wwhat());
        return Failure;
    }
}