2023-06-01 16:09:22 +03:00
|
|
|
//
|
|
|
|
// Created by Andrew on 01/06/2023.
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "header.h"
|
|
|
|
|
2023-06-02 07:25:43 +03:00
|
|
|
void showHelp(char *argv[]) {
|
|
|
|
std::cout << "usage: " << argv[0] << std::endl << std::endl
|
|
|
|
<< "\t-h --help\tshow this message" << std::endl
|
|
|
|
<< "\t-v --verbose\tenable verbose output" << std::endl
|
|
|
|
<< "\t-b --binkid\tspecify which BINK identifier to load (defaults to 2E)" << std::endl
|
|
|
|
<< "\t-l --list\tshow which products/binks can be loaded" << std::endl
|
|
|
|
<< "\t-c --channelid\tspecify which Channel Identifier to use (defaults to 640)" << std::endl
|
|
|
|
<< std::endl << std::endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
Options parseCommandLine(int argc, char* argv[]) {
|
|
|
|
Options options = {
|
|
|
|
"2E",
|
|
|
|
640,
|
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
};
|
|
|
|
|
|
|
|
for (int i = 1; i < argc; i++) {
|
|
|
|
std::string arg = argv[i];
|
|
|
|
|
|
|
|
if (arg == "-v" || arg == "--verbose") {
|
|
|
|
options.verbose = true;
|
|
|
|
} else if (arg == "-h" || arg == "--help") {
|
|
|
|
options.help = true;
|
|
|
|
} else if (arg == "-b" || arg == "--bink") {
|
|
|
|
options.binkid = argv[i+1];
|
|
|
|
i++;
|
|
|
|
} else if (arg == "-l" || arg == "--list") {
|
|
|
|
options.list = true;
|
|
|
|
} else if (arg == "-c" || arg == "--channelid") {
|
|
|
|
int siteID;
|
|
|
|
if (!sscanf(argv[i+1], "%d", &siteID)) {
|
|
|
|
options.error = true;
|
|
|
|
} else {
|
|
|
|
options.channelID = siteID;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
} else {
|
|
|
|
options.error = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return options;
|
|
|
|
}
|
|
|
|
|
2023-06-04 13:31:24 +03:00
|
|
|
void print_product_id(DWORD *pid)
|
2023-06-01 16:09:22 +03:00
|
|
|
{
|
|
|
|
char raw[12];
|
|
|
|
char b[6], c[8];
|
|
|
|
int i, digit = 0;
|
|
|
|
|
|
|
|
// Cut a away last bit of pid and convert it to an accii-number (=raw)
|
2023-06-02 07:25:43 +03:00
|
|
|
sprintf(raw, "%iu", pid[0] >> 1);
|
2023-06-01 16:09:22 +03:00
|
|
|
|
|
|
|
// Make b-part {640-....}
|
|
|
|
strncpy(b, raw, 3);
|
|
|
|
b[3] = 0;
|
|
|
|
|
|
|
|
// Make c-part {...-123456X...}
|
|
|
|
strcpy(c, raw + 3);
|
|
|
|
printf("> %s\n", c);
|
|
|
|
|
|
|
|
// Make checksum digit-part {...56X-}
|
|
|
|
assert(strlen(c) == 6);
|
|
|
|
for (i = 0; i < 6; i++)
|
|
|
|
digit -= c[i] - '0'; // Sum digits
|
|
|
|
|
|
|
|
while (digit < 0)
|
|
|
|
digit += 7;
|
|
|
|
c[6] = digit + '0';
|
|
|
|
c[7] = 0;
|
|
|
|
|
|
|
|
printf("Product ID: PPPPP-%s-%s-23xxx\n", b, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
void print_product_key(char *pk) {
|
|
|
|
int i;
|
|
|
|
assert(strlen(pk) == 25);
|
|
|
|
for (i = 0; i < 25; i++) {
|
|
|
|
putchar(pk[i]);
|
|
|
|
if (i != 24 && i % 5 == 4) putchar('-');
|
|
|
|
}
|
|
|
|
}
|