Initial Commit
This commit is contained in:
commit
b73851c471
399
.gitignore
vendored
Normal file
399
.gitignore
vendored
Normal file
|
@ -0,0 +1,399 @@
|
||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.tlog
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||||
|
*.vbp
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||||
|
*.dsw
|
||||||
|
*.dsp
|
||||||
|
|
||||||
|
# Visual Studio 6 technical files
|
||||||
|
*.ncb
|
||||||
|
*.aps
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# Visual Studio History (VSHistory) files
|
||||||
|
.vshistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
|
|
||||||
|
# VS Code files for those working on multiple tools
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Windows Installer files from build outputs
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
*.sln.iml
|
||||||
|
|
11
BUILDING.TXT
Normal file
11
BUILDING.TXT
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Still gotta work on this, sorry!
|
||||||
|
|
||||||
|
For the impatient/desperate: This was built with Visual Studio 2005 on
|
||||||
|
Windows XP. For the libXMP parts, I used an old version of CMake (3.12?)
|
||||||
|
with a command line like the following:
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=<Debug|Release> -DBUILD_SHARED=OFF
|
||||||
|
-DLIBXMP_CFLAGS=</MTd|/MT> -G "NMake Makefiles" <...>
|
||||||
|
|
||||||
|
The official release is built with Release_ANSI for maximum
|
||||||
|
compatibility.
|
26
Keygender32.sln
Normal file
26
Keygender32.sln
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual Studio 2005
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Keygender32", "Keygender32\Keygender32.vcproj", "{8E21754C-D79C-4B94-B139-BB91D252FF3F}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug_ANSI|Win32 = Debug_ANSI|Win32
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release_ANSI|Win32 = Release_ANSI|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Debug_ANSI|Win32.ActiveCfg = Debug_ANSI|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Debug_ANSI|Win32.Build.0 = Debug_ANSI|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Release_ANSI|Win32.ActiveCfg = Release_ANSI|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Release_ANSI|Win32.Build.0 = Release_ANSI|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{8E21754C-D79C-4B94-B139-BB91D252FF3F}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
385
Keygender32/BGM.c
Normal file
385
Keygender32/BGM.c
Normal file
|
@ -0,0 +1,385 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#define _BGM_DEFINE_
|
||||||
|
#include "BGM.h"
|
||||||
|
#include "resource.h"
|
||||||
|
#include <xmp.h>
|
||||||
|
#include "Debug.h"
|
||||||
|
|
||||||
|
static DWORD WINAPI MusicThreadProc(LPVOID);
|
||||||
|
|
||||||
|
struct _BgmState {
|
||||||
|
CRITICAL_SECTION cs; // to sync shutdown
|
||||||
|
LPWAVEFORMATEX pwfx; // wave-out data
|
||||||
|
HANDLE hThread; // audio thread
|
||||||
|
HANDLE hDone; // Are we done?
|
||||||
|
HANDLE hPause; // Play/Pause
|
||||||
|
BOOL bPaused; // Are we paused?
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
TogglePlayPause(BgmState state)
|
||||||
|
{
|
||||||
|
BOOL bRet;
|
||||||
|
|
||||||
|
if (!state) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bRet = state->bPaused;
|
||||||
|
state->bPaused = !state->bPaused;
|
||||||
|
|
||||||
|
if (!SetEvent(state->hPause)) {
|
||||||
|
state->bPaused = bRet;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state->bPaused;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PrepareMusic(HINSTANCE hInstance,
|
||||||
|
BgmState *state)
|
||||||
|
{
|
||||||
|
HANDLE hHeap = GetProcessHeap();
|
||||||
|
LPWAVEFORMATEX pwfx = NULL;
|
||||||
|
int bIdx;
|
||||||
|
DWORD dwIgnore;
|
||||||
|
BOOL bFound = FALSE;
|
||||||
|
struct _BgmState *sTmp = NULL;
|
||||||
|
const DWORD dwTestFormats[] = {
|
||||||
|
44100,
|
||||||
|
22050,
|
||||||
|
11025,
|
||||||
|
8000,
|
||||||
|
};
|
||||||
|
|
||||||
|
MusicStartFailReason = "Couldn't verify parameters";
|
||||||
|
|
||||||
|
if (!hInstance || !state) return FALSE;
|
||||||
|
// TODO: do we even bother? we'll error out later
|
||||||
|
MusicStartFailReason = "Couldn't get number of waveOut devices";
|
||||||
|
if (!waveOutGetNumDevs()) return FALSE;
|
||||||
|
|
||||||
|
MusicStartFailReason = "Couldn't allocate memory";
|
||||||
|
sTmp = HeapAlloc(hHeap,
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
sizeof(struct _BgmState));
|
||||||
|
if (!state) return FALSE;
|
||||||
|
|
||||||
|
pwfx = HeapAlloc(GetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
sizeof(WAVEFORMATEX));
|
||||||
|
if (!pwfx) return FALSE;
|
||||||
|
|
||||||
|
pwfx->wFormatTag = WAVE_FORMAT_PCM;
|
||||||
|
pwfx->nChannels = 2;
|
||||||
|
pwfx->wBitsPerSample = 16;
|
||||||
|
for (bIdx = 0; bIdx < (sizeof(dwTestFormats) / sizeof(DWORD)); bIdx++) {
|
||||||
|
MMRESULT mRes;
|
||||||
|
|
||||||
|
pwfx->nSamplesPerSec = dwTestFormats[bIdx];
|
||||||
|
pwfx->nAvgBytesPerSec = pwfx->nSamplesPerSec * pwfx->nChannels;
|
||||||
|
pwfx->nBlockAlign = 2; // (1 channel * 16 bits) / (1 byte / 8 bits)
|
||||||
|
pwfx->cbSize = 0;
|
||||||
|
|
||||||
|
mRes = waveOutOpen(NULL,
|
||||||
|
WAVE_MAPPER,
|
||||||
|
pwfx,
|
||||||
|
0, 0,
|
||||||
|
WAVE_FORMAT_QUERY);
|
||||||
|
if (mRes == MMSYSERR_NOERROR) {
|
||||||
|
bFound = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MusicStartFailReason = "Couldn't find a working sound device";
|
||||||
|
// did we find a working sound device?
|
||||||
|
if (!bFound) {
|
||||||
|
HeapFree(hHeap, 0, pwfx);
|
||||||
|
HeapFree(hHeap, 0, sTmp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
sTmp->pwfx = pwfx;
|
||||||
|
MusicStartFailReason = "Couldn't create an event?";
|
||||||
|
// build the sync event used for ending the thread
|
||||||
|
sTmp->hDone = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
|
if (!sTmp->hDone) {
|
||||||
|
HeapFree(hHeap, 0, pwfx);
|
||||||
|
HeapFree(hHeap, 0, sTmp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
MusicStartFailReason = "Couldn't create another event???";
|
||||||
|
sTmp->hPause = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
|
if (!sTmp->hDone) {
|
||||||
|
HeapFree(hHeap, 0, pwfx);
|
||||||
|
HeapFree(hHeap, 0, sTmp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
MusicStartFailReason = "Couldn't create the music thread????????";
|
||||||
|
sTmp->hThread = CreateThread(NULL,
|
||||||
|
0,
|
||||||
|
MusicThreadProc,
|
||||||
|
sTmp,
|
||||||
|
0,
|
||||||
|
&dwIgnore);
|
||||||
|
|
||||||
|
if (!sTmp->hThread) {
|
||||||
|
HeapFree(hHeap, 0, pwfx);
|
||||||
|
HeapFree(hHeap, 0, sTmp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*state = sTmp;
|
||||||
|
|
||||||
|
MusicStartFailReason = "Everything's fine actually ??????????????";
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct WaveBuf {
|
||||||
|
WAVEHDR *hdr;
|
||||||
|
struct WaveBuf *prev;
|
||||||
|
struct WaveBuf *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
static DWORD WINAPI
|
||||||
|
MusicThreadProc(LPVOID lpParam)
|
||||||
|
{
|
||||||
|
BgmState state = (BgmState)lpParam;
|
||||||
|
xmp_context xCtx = NULL;
|
||||||
|
HWAVEOUT hwOut = NULL; // audio out dev
|
||||||
|
LPVOID pModData = NULL; // module bytes
|
||||||
|
DWORD dwErr = ERROR_SUCCESS, // return code
|
||||||
|
dwModSize; // rsrc byte len
|
||||||
|
MMRESULT mRes; // waveOut* error
|
||||||
|
int iRes; // xmplib error
|
||||||
|
HANDLE hMmEvent = NULL;
|
||||||
|
|
||||||
|
// Multi-buffer drifting
|
||||||
|
#define BUF_COUNT 3
|
||||||
|
LPBYTE lpBufs[BUF_COUNT] = {0};
|
||||||
|
WAVEHDR wHdrs[BUF_COUNT] = {0};
|
||||||
|
const DWORD dwBufSize = XMP_MAX_FRAMESIZE;
|
||||||
|
|
||||||
|
if (state == NULL) return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
hMmEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
|
if (!hMmEvent) return GetLastError();
|
||||||
|
|
||||||
|
{
|
||||||
|
// Generate the buffers
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < BUF_COUNT; i++) {
|
||||||
|
lpBufs[i] = HeapAlloc(GetProcessHeap(),
|
||||||
|
0,
|
||||||
|
dwBufSize);
|
||||||
|
if (lpBufs[i] == NULL) {
|
||||||
|
dwErr = ERROR_NOT_ENOUGH_MEMORY;
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
wHdrs[i].lpData = lpBufs[i];
|
||||||
|
wHdrs[i].dwBufferLength = dwBufSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mRes = waveOutOpen(&hwOut,
|
||||||
|
WAVE_MAPPER,
|
||||||
|
state->pwfx,
|
||||||
|
(DWORD_PTR)hMmEvent,
|
||||||
|
0,
|
||||||
|
CALLBACK_EVENT);
|
||||||
|
if (mRes) return ERROR_INVALID_HANDLE;
|
||||||
|
|
||||||
|
xCtx = xmp_create_context();
|
||||||
|
if (!xCtx) {
|
||||||
|
dwErr = ERROR_BROKEN_PIPE;
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Find and load the resource. We supposedly don't
|
||||||
|
// need to free our handles on Win32, so handle it in
|
||||||
|
// its own block, I guess?
|
||||||
|
HRSRC hRsrc = FindResource(NULL,
|
||||||
|
MAKEINTRESOURCE(IDR_BGM),
|
||||||
|
_T("MUSIC"));
|
||||||
|
HGLOBAL hModFile = NULL;
|
||||||
|
if (hRsrc) {
|
||||||
|
hModFile = LoadResource(NULL, hRsrc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hModFile) {
|
||||||
|
dwErr = GetLastError();
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
dwModSize = SizeofResource(NULL, hRsrc);
|
||||||
|
if (!dwModSize) {
|
||||||
|
dwErr = GetLastError();
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
pModData = LockResource(hModFile);
|
||||||
|
if (!pModData) {
|
||||||
|
dwErr = GetLastError();
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((iRes = xmp_load_module_from_memory(xCtx,
|
||||||
|
pModData,
|
||||||
|
dwModSize)) != 0) {
|
||||||
|
dwErr = ERROR_INVALID_DATA;
|
||||||
|
goto threadDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
DebugPrintf("Loading mod at %d Hz\n", state->pwfx->nSamplesPerSec);
|
||||||
|
xmp_start_player(xCtx,
|
||||||
|
state->pwfx->nSamplesPerSec,
|
||||||
|
0);
|
||||||
|
|
||||||
|
// Player frame loop!
|
||||||
|
{
|
||||||
|
int iErrCount = 0, // max 5 consecutive errs before
|
||||||
|
// we give up
|
||||||
|
iCurBuf = 0; // Current buffer
|
||||||
|
|
||||||
|
BOOL bDone = FALSE;
|
||||||
|
const HANDLE hEvents[] = {
|
||||||
|
hMmEvent,
|
||||||
|
state->hDone,
|
||||||
|
state->hPause,
|
||||||
|
};
|
||||||
|
|
||||||
|
#if _DEBUG
|
||||||
|
struct xmp_module_info xmi = {0};
|
||||||
|
|
||||||
|
xmp_get_module_info(xCtx, &xmi);
|
||||||
|
DebugPrintf("\n== Mod info ==\n"
|
||||||
|
_T("Speed: %d\n")
|
||||||
|
_T("BPM: %d\n")
|
||||||
|
_T("Fmt: %s\n")
|
||||||
|
_T("== End Mod info ==\n\n"),
|
||||||
|
xmi.mod->spd,
|
||||||
|
xmi.mod->bpm,
|
||||||
|
xmi.mod->type);
|
||||||
|
#endif /* _DEBUG */
|
||||||
|
|
||||||
|
while (iErrCount < 5 && !bDone) {
|
||||||
|
struct xmp_frame_info xfi = {0};
|
||||||
|
|
||||||
|
// Reset the WAVEHDR
|
||||||
|
wHdrs[iCurBuf].dwFlags = 0;
|
||||||
|
wHdrs[iCurBuf].lpData = lpBufs[iCurBuf];
|
||||||
|
|
||||||
|
// Pull the current audio frame
|
||||||
|
if (xmp_play_frame(xCtx)) {
|
||||||
|
dwErr = ERROR_READ_FAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmp_get_frame_info(xCtx, &xfi);
|
||||||
|
|
||||||
|
memcpy(wHdrs[iCurBuf].lpData, xfi.buffer, xfi.buffer_size);
|
||||||
|
wHdrs[iCurBuf].dwBufferLength = xfi.buffer_size;
|
||||||
|
|
||||||
|
waveOutPrepareHeader(hwOut,
|
||||||
|
&wHdrs[iCurBuf],
|
||||||
|
sizeof(WAVEHDR));
|
||||||
|
|
||||||
|
// Write it to the audio device
|
||||||
|
if (waveOutWrite(hwOut, &wHdrs[iCurBuf], sizeof(WAVEHDR))) {
|
||||||
|
dwErr = ERROR_WRITE_FAULT;
|
||||||
|
iErrCount++;
|
||||||
|
} else {
|
||||||
|
iErrCount = dwErr = 0;
|
||||||
|
|
||||||
|
// Set up the next buffer, or wait for it to complete
|
||||||
|
iCurBuf = (iCurBuf + 1) % BUF_COUNT;
|
||||||
|
while (((wHdrs[iCurBuf].dwFlags & WHDR_PREPARED) == WHDR_PREPARED) &&
|
||||||
|
((wHdrs[iCurBuf].dwFlags & WHDR_DONE) != WHDR_DONE)) {
|
||||||
|
// Use this opportunity to listen for every event
|
||||||
|
DWORD dwRes = WaitForMultipleObjects(
|
||||||
|
sizeof(hEvents) / sizeof(HANDLE),
|
||||||
|
hEvents,
|
||||||
|
FALSE,
|
||||||
|
1000);
|
||||||
|
|
||||||
|
if (dwRes == WAIT_FAILED) {
|
||||||
|
HRESULT hrErr = GetLastError();
|
||||||
|
DebugPrintf("Agh, got error %08x\n", hrErr);
|
||||||
|
iErrCount++;
|
||||||
|
} else if (dwRes == WAIT_OBJECT_0) {
|
||||||
|
// TODO: should auto-reset, right?
|
||||||
|
ResetEvent(hMmEvent);
|
||||||
|
} else if (dwRes == WAIT_OBJECT_0 + 1) {
|
||||||
|
// state->hDone set, clean up after we're done
|
||||||
|
bDone = TRUE;
|
||||||
|
} else if (dwRes == WAIT_OBJECT_0 + 2) {
|
||||||
|
// state->hPause set, pause or unpause
|
||||||
|
if (state->bPaused) {
|
||||||
|
waveOutPause(hwOut);
|
||||||
|
} else {
|
||||||
|
waveOutRestart(hwOut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
waveOutUnprepareHeader(hwOut,
|
||||||
|
&wHdrs[iCurBuf],
|
||||||
|
sizeof(WAVEHDR));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
threadDone:
|
||||||
|
if (xCtx) {
|
||||||
|
xmp_end_player(xCtx);
|
||||||
|
xmp_release_module(xCtx);
|
||||||
|
xmp_free_context(xCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hwOut) {
|
||||||
|
waveOutReset(hwOut);
|
||||||
|
waveOutClose(hwOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < BUF_COUNT; i++) {
|
||||||
|
if (lpBufs[i]) {
|
||||||
|
if (wHdrs[i].dwFlags & WHDR_PREPARED) {
|
||||||
|
waveOutUnprepareHeader(hwOut,
|
||||||
|
&wHdrs[i],
|
||||||
|
sizeof(WAVEHDR));
|
||||||
|
}
|
||||||
|
HeapFree(GetProcessHeap(), 0, lpBufs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ExitThread(dwErr);
|
||||||
|
return dwErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EndMusic(BgmState state)
|
||||||
|
{
|
||||||
|
if (!state) return;
|
||||||
|
|
||||||
|
SetEvent(state->hDone);
|
||||||
|
// Wait for thread to finish, to avoid an audio driver crash
|
||||||
|
WaitForSingleObject(state->hThread, INFINITE);
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
HeapFree(GetProcessHeap(), 0, state->pwfx);
|
||||||
|
CloseHandle(state->hDone);
|
||||||
|
CloseHandle(state->hPause);
|
||||||
|
HeapFree(GetProcessHeap(), 0, state);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
20
Keygender32/BGM.h
Normal file
20
Keygender32/BGM.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct _BgmState;
|
||||||
|
typedef struct _BgmState *BgmState;
|
||||||
|
|
||||||
|
// Begins playing music. Returns FALSE on error, or TRUE if the music
|
||||||
|
// thread was able to start.
|
||||||
|
//
|
||||||
|
// Note: This function doesn't test for whether the music was able to
|
||||||
|
// start! There's no way to test for that at the moment.
|
||||||
|
BOOL PrepareMusic(HINSTANCE, BgmState *);
|
||||||
|
|
||||||
|
// Ends the music thread.
|
||||||
|
void EndMusic(BgmState);
|
||||||
|
|
||||||
|
// Toggles between play and pause. Returns -1 on error, or the
|
||||||
|
// current state on success: 0 is playing, 1 is paused.
|
||||||
|
int TogglePlayPause(BgmState state);
|
||||||
|
|
||||||
|
char *MusicStartFailReason;
|
21
Keygender32/Debug.c
Normal file
21
Keygender32/Debug.c
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Debug.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
void
|
||||||
|
_DebugPrintf(LPCTSTR fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
TCHAR szBuf[256] = {0};
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
|
||||||
|
if (SUCCEEDED(_vsntprintf_s(szBuf, 256, 255, fmt, args))) {
|
||||||
|
OutputDebugString(szBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
9
Keygender32/Debug.h
Normal file
9
Keygender32/Debug.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define _AsStr(x) #x
|
||||||
|
#define DebugPrintf(x, ...) _DebugPrintf(_T(__FUNCTION__) _T(": ") _T(x), __VA_ARGS__)
|
||||||
|
void _DebugPrintf(LPCTSTR fmt, ...);
|
||||||
|
#else
|
||||||
|
#define DebugPrintf(x, ...)
|
||||||
|
#endif
|
391
Keygender32/Dialog.c
Normal file
391
Keygender32/Dialog.c
Normal file
|
@ -0,0 +1,391 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#include "Nfo.h"
|
||||||
|
#include "BGM.h"
|
||||||
|
#include "Debug.h"
|
||||||
|
#include "Dialog.h"
|
||||||
|
#include "Generator.h"
|
||||||
|
#include "Nfo.h"
|
||||||
|
#include "resource.h"
|
||||||
|
#include "Starfield.h"
|
||||||
|
|
||||||
|
#include <shlwapi.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define TIMER_SBANIM 0x1
|
||||||
|
#define PAUSE_TEXT _T("Pause")
|
||||||
|
#define PLAY_TEXT _T("Play")
|
||||||
|
#define WINE_USER_TEXT _T("Hey Wine user! Press F1 for more info.")
|
||||||
|
|
||||||
|
static LPCTSTR PLACEHOLDER_TEXT = _T("they/them, she/her, he/him, etc.");
|
||||||
|
static LPCTSTR szStatusBarText = _T("Now Playing: Space Debris - Captain");
|
||||||
|
|
||||||
|
static BOOL bEditFocused = FALSE;
|
||||||
|
static WNDPROC OldEditWndProc;
|
||||||
|
|
||||||
|
LPCTSTR szBannedWords[] = {
|
||||||
|
_T("helicopter"),
|
||||||
|
};
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
UserIsRunningWine(void)
|
||||||
|
{
|
||||||
|
HMODULE hNtdll = GetModuleHandle(_T("ntdll.dll"));
|
||||||
|
if (hNtdll) {
|
||||||
|
LPVOID lpWineGetVersion = GetProcAddress(hNtdll, _T("wine_get_version"));
|
||||||
|
return (lpWineGetVersion != NULL);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static LRESULT CALLBACK
|
||||||
|
EditWndProc(HWND hWnd,
|
||||||
|
UINT uMsg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
/* Oho, this one feels *cursed*.
|
||||||
|
*
|
||||||
|
* Here's the general theory: Windows XP provides EM_SETCUEBANNER,
|
||||||
|
* meaning Windows 2000/Me and below don't have placeholder text.
|
||||||
|
* Additionally, if your Windows XP is set to a CJK locale, no
|
||||||
|
* placeholder text for you.
|
||||||
|
*
|
||||||
|
* So, let's work around it by implementing our own placeholder!
|
||||||
|
* What could go wrong?
|
||||||
|
*/
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_PAINT:
|
||||||
|
// Let the original proc paint as needed
|
||||||
|
CallWindowProc(OldEditWndProc, hWnd, uMsg, wParam, lParam);
|
||||||
|
{
|
||||||
|
HDC hDC = GetDC(hWnd);
|
||||||
|
COLORREF crNormal;
|
||||||
|
TCHAR szInput[8] = {7,0};
|
||||||
|
// I don't know if it's okay to just call a WndProc like
|
||||||
|
// this, but they won't know, right?
|
||||||
|
LRESULT lResult = CallWindowProc(
|
||||||
|
OldEditWndProc,
|
||||||
|
hWnd,
|
||||||
|
EM_GETLINE,
|
||||||
|
0,
|
||||||
|
(LPARAM)szInput);
|
||||||
|
|
||||||
|
if (!lResult && !bEditFocused) {
|
||||||
|
RECT rcArea = {0};
|
||||||
|
// Get the control font
|
||||||
|
HFONT hFont = (HFONT)CallWindowProc(
|
||||||
|
OldEditWndProc,
|
||||||
|
hWnd,
|
||||||
|
WM_GETFONT,
|
||||||
|
0,
|
||||||
|
0),
|
||||||
|
hOldFont;
|
||||||
|
hOldFont = SelectObject(hDC, hFont);
|
||||||
|
|
||||||
|
// Get the selection rect, so the placeholder text lines up
|
||||||
|
CallWindowProc(
|
||||||
|
OldEditWndProc,
|
||||||
|
hWnd,
|
||||||
|
EM_GETRECT,
|
||||||
|
0,
|
||||||
|
(LPARAM)&rcArea);
|
||||||
|
|
||||||
|
// TODO: is GRAYTEXT the correct color?
|
||||||
|
crNormal = SetTextColor(hDC,
|
||||||
|
GetSysColor(COLOR_GRAYTEXT));
|
||||||
|
DrawText(hDC,
|
||||||
|
PLACEHOLDER_TEXT,
|
||||||
|
(int)_tcslen(PLACEHOLDER_TEXT),
|
||||||
|
&rcArea,
|
||||||
|
DT_VCENTER | DT_SINGLELINE);
|
||||||
|
|
||||||
|
SelectObject(hDC, hOldFont);
|
||||||
|
SetTextColor(hDC, crNormal);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteDC(hDC);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return CallWindowProc(OldEditWndProc, hWnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT_PTR CALLBACK
|
||||||
|
MainDlgProc(HWND hDlg,
|
||||||
|
UINT uMsg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
static int iParts[2];
|
||||||
|
static HCURSOR hPointer = NULL;
|
||||||
|
static BgmState bgmState = NULL;
|
||||||
|
static LPTSTR szToggleText = NULL;
|
||||||
|
static RECT rcDialog = {0};
|
||||||
|
static COLORREF crLink = 0;
|
||||||
|
TCHAR szInput[65] = {0};
|
||||||
|
static OSVERSIONINFO osver = {sizeof(OSVERSIONINFO),0};
|
||||||
|
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
{
|
||||||
|
// At least *try* to support Windows <2000
|
||||||
|
if (GetVersionEx(&osver)) {
|
||||||
|
if (osver.dwMajorVersion >= 5) {
|
||||||
|
// COLOR_HOTLIGHT is only supported in 2k+
|
||||||
|
crLink = GetSysColor(26);
|
||||||
|
} else {
|
||||||
|
HWND hStarfield = GetDlgItem(
|
||||||
|
hDlg,
|
||||||
|
IDC_STARFIELD);
|
||||||
|
// Borrowing the link color from HTML5 spec
|
||||||
|
crLink = RGB(0, 0, 0xee);
|
||||||
|
// Win98 also seems grumpy about the amount of GDI
|
||||||
|
// rendering, so slow it down a bit
|
||||||
|
SendMessage(hStarfield,
|
||||||
|
WMU_FRAMERATE,
|
||||||
|
30,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Wine doesn't always (ever?) show the [?] button. Give the
|
||||||
|
// user another way to access it.
|
||||||
|
if (UserIsRunningWine()) {
|
||||||
|
szStatusBarText = WINE_USER_TEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize static vars
|
||||||
|
hPointer = LoadCursor(NULL, MAKEINTRESOURCE(32649));
|
||||||
|
bgmState = (BgmState)lParam;
|
||||||
|
szToggleText = PAUSE_TEXT;
|
||||||
|
OldEditWndProc = (WNDPROC)SetWindowLong(
|
||||||
|
GetDlgItem(hDlg, IDC_PNTYPE),
|
||||||
|
GWL_WNDPROC,
|
||||||
|
(LONG)EditWndProc);
|
||||||
|
|
||||||
|
{
|
||||||
|
// Set up status bar parts
|
||||||
|
LONG lDlgWidth = LOWORD(GetDialogBaseUnits()),
|
||||||
|
lRightWidth = (lDlgWidth * 6);
|
||||||
|
|
||||||
|
GetClientRect(hDlg, &rcDialog);
|
||||||
|
iParts[0] = rcDialog.right - lRightWidth;
|
||||||
|
iParts[1] = -1;
|
||||||
|
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_STATUSBAR,
|
||||||
|
SB_SETPARTS,
|
||||||
|
2,
|
||||||
|
(LPARAM)iParts);
|
||||||
|
}
|
||||||
|
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_STATUSBAR,
|
||||||
|
SB_SETTEXT,
|
||||||
|
SBT_OWNERDRAW | 0,
|
||||||
|
0);
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_STATUSBAR,
|
||||||
|
SB_SETTEXT,
|
||||||
|
SBT_OWNERDRAW | 1,
|
||||||
|
0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_SYSCOMMAND:
|
||||||
|
if (wParam == SC_CONTEXTHELP) {
|
||||||
|
DialogBox(
|
||||||
|
GetModuleHandle(NULL),
|
||||||
|
MAKEINTRESOURCE(IDD_ABOUT),
|
||||||
|
hDlg,
|
||||||
|
NfoDlgProc);
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_HELP:
|
||||||
|
DialogBox(
|
||||||
|
GetModuleHandle(NULL),
|
||||||
|
MAKEINTRESOURCE(IDD_ABOUT),
|
||||||
|
hDlg,
|
||||||
|
NfoDlgProc);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_DRAWITEM:
|
||||||
|
if (wParam == IDC_STATUSBAR) {
|
||||||
|
LPDRAWITEMSTRUCT lpDraw = (LPDRAWITEMSTRUCT)lParam;
|
||||||
|
HFONT hFont = (HFONT)SendMessage(
|
||||||
|
lpDraw->hwndItem,
|
||||||
|
WM_GETFONT,
|
||||||
|
(WPARAM)0,
|
||||||
|
(LPARAM)0);
|
||||||
|
int iOldBkMode = SetBkMode(lpDraw->hDC, TRANSPARENT);
|
||||||
|
|
||||||
|
if (lpDraw->itemID == 0) {
|
||||||
|
// Draw the status bar text
|
||||||
|
DrawText(
|
||||||
|
lpDraw->hDC,
|
||||||
|
szStatusBarText,
|
||||||
|
-1,
|
||||||
|
&lpDraw->rcItem,
|
||||||
|
DT_VCENTER | DT_SINGLELINE);
|
||||||
|
|
||||||
|
} else if (lpDraw->itemID == 1) {
|
||||||
|
// Draw the Play/Pause "link"
|
||||||
|
HFONT hLinkFont, hOldFont;
|
||||||
|
LOGFONT lf;
|
||||||
|
COLORREF crOldColor;
|
||||||
|
|
||||||
|
GetObject(hFont, sizeof(lf), &lf);
|
||||||
|
lf.lfUnderline = TRUE;
|
||||||
|
|
||||||
|
hLinkFont = CreateFontIndirect(&lf);
|
||||||
|
hOldFont = SelectObject(lpDraw->hDC, hLinkFont);
|
||||||
|
|
||||||
|
crOldColor = SetTextColor(lpDraw->hDC, crLink);
|
||||||
|
|
||||||
|
DrawText(lpDraw->hDC,
|
||||||
|
szToggleText,
|
||||||
|
-1,
|
||||||
|
&lpDraw->rcItem,
|
||||||
|
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
|
||||||
|
|
||||||
|
// put everything back how we found it
|
||||||
|
SelectObject(lpDraw->hDC, hOldFont);
|
||||||
|
SetTextColor(lpDraw->hDC, crOldColor);
|
||||||
|
|
||||||
|
DeleteObject(hLinkFont);
|
||||||
|
}
|
||||||
|
SetBkMode(lpDraw->hDC, iOldBkMode);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_NOTIFY:
|
||||||
|
if (wParam == IDC_STATUSBAR) {
|
||||||
|
LPNMMOUSE lpnm = (LPNMMOUSE)lParam;
|
||||||
|
if (lpnm->hdr.code == NM_CLICK &&
|
||||||
|
lpnm->dwItemSpec == 1) {
|
||||||
|
// Play/Pause "link"
|
||||||
|
switch (TogglePlayPause(bgmState)) {
|
||||||
|
case 0:
|
||||||
|
szToggleText = PAUSE_TEXT;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
szToggleText = PLAY_TEXT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_STATUSBAR,
|
||||||
|
SB_SETTEXT,
|
||||||
|
SBT_OWNERDRAW | 1,
|
||||||
|
0);
|
||||||
|
|
||||||
|
// Make the border dynamic, like the original
|
||||||
|
iParts[0] = (rcDialog.right - rcDialog.left) -
|
||||||
|
(LOWORD(GetDialogBaseUnits()) * (int)_tcslen(szToggleText));
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_STATUSBAR,
|
||||||
|
SB_SETPARTS,
|
||||||
|
2,
|
||||||
|
(LPARAM)iParts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_SETCURSOR:
|
||||||
|
if ((HWND)wParam == GetDlgItem(hDlg, IDC_STATUSBAR)) {
|
||||||
|
// Make the Play/Pause link act like a link
|
||||||
|
POINT ptCur;
|
||||||
|
GetCursorPos(&ptCur);
|
||||||
|
if (ScreenToClient(hDlg, &ptCur) &&
|
||||||
|
ptCur.x >= iParts[0]) {
|
||||||
|
SetCursor(hPointer);
|
||||||
|
SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
if (LOWORD(wParam) == IDOK) {
|
||||||
|
// Generate button pressed
|
||||||
|
LRESULT lResult;
|
||||||
|
TCHAR szKeyOut[19] = {0};
|
||||||
|
szInput[0] = 64;
|
||||||
|
lResult = SendDlgItemMessage(
|
||||||
|
hDlg,
|
||||||
|
IDC_PNTYPE,
|
||||||
|
EM_GETLINE,
|
||||||
|
0,
|
||||||
|
(LPARAM)szInput);
|
||||||
|
if (!lResult) break;
|
||||||
|
|
||||||
|
if (GenerateKey(szInput, szKeyOut)) {
|
||||||
|
SendDlgItemMessage(hDlg,
|
||||||
|
IDC_KEYDATA,
|
||||||
|
WM_SETTEXT,
|
||||||
|
0,
|
||||||
|
(LPARAM)szKeyOut);
|
||||||
|
}
|
||||||
|
} else if (LOWORD(wParam) == IDC_PNTYPE) {
|
||||||
|
// Pro Nouns edition edit control
|
||||||
|
if (HIWORD(wParam) == EN_UPDATE) {
|
||||||
|
int i;
|
||||||
|
BOOL bEnable = TRUE;
|
||||||
|
LRESULT lResult;
|
||||||
|
szInput[0] = 64;
|
||||||
|
lResult = SendDlgItemMessage(
|
||||||
|
hDlg,
|
||||||
|
IDC_PNTYPE,
|
||||||
|
EM_GETLINE,
|
||||||
|
0,
|
||||||
|
(LPARAM)szInput);
|
||||||
|
if (!lResult) {
|
||||||
|
bEnable = FALSE;
|
||||||
|
} else {
|
||||||
|
// Handle word validation
|
||||||
|
for (i = 0; i < (sizeof(szBannedWords) / sizeof(szBannedWords[0])); i++) {
|
||||||
|
int j, x = 0, iWordLen = (int)_tcslen(szBannedWords[i]);
|
||||||
|
|
||||||
|
for (j = 0; j < (int)_tcslen(szInput); j++) {
|
||||||
|
if (iswalpha(szInput[j]) && (towlower(szInput[j]) == szBannedWords[i][x])) {
|
||||||
|
if (++x >= iWordLen) {
|
||||||
|
bEnable = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableWindow(GetDlgItem(hDlg, IDOK), bEnable);
|
||||||
|
} else if (HIWORD(wParam) == EN_SETFOCUS) {
|
||||||
|
// edit control focused, don't show the placeholder
|
||||||
|
bEditFocused = TRUE;
|
||||||
|
} else if (HIWORD(wParam) == EN_KILLFOCUS) {
|
||||||
|
bEditFocused = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_CLOSE:
|
||||||
|
EndDialog(hDlg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
3
Keygender32/Dialog.h
Normal file
3
Keygender32/Dialog.h
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
116
Keygender32/Generator.c
Normal file
116
Keygender32/Generator.c
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Random.h"
|
||||||
|
#include "Generator.h"
|
||||||
|
#include <Time.h>
|
||||||
|
|
||||||
|
static const TCHAR szBaseChars[] = _T("BCDFGHJKMPQRTVWXY346789");
|
||||||
|
static const BYTE base = (sizeof(szBaseChars) / sizeof(TCHAR)) - 1;
|
||||||
|
static const UINT64 uPrivKey[] = { 0x0a0d212073, 0x7468676972, 0x20736e617274 };
|
||||||
|
|
||||||
|
// Create an Adler32 checksum according to the provided szInput.
|
||||||
|
static DWORD
|
||||||
|
ck_adler32(LPCTSTR szInput,
|
||||||
|
DWORD dwLen)
|
||||||
|
{
|
||||||
|
DWORD a = 1,
|
||||||
|
b = 0,
|
||||||
|
i;
|
||||||
|
|
||||||
|
for (i = 0; i < dwLen; i++) {
|
||||||
|
// XXX: This is a really naive way to "convert" to ANSI
|
||||||
|
a += szInput[i] & 0xff;
|
||||||
|
b += a;
|
||||||
|
}
|
||||||
|
|
||||||
|
a %= 65521;
|
||||||
|
b %= 65521;
|
||||||
|
|
||||||
|
return ((b << 16) | a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode a number as a "sanitized Microsoft" base-23 string
|
||||||
|
static BOOL
|
||||||
|
EncodeNumber(LPVOID lpIn,
|
||||||
|
DWORD dwSize,
|
||||||
|
LPTSTR szOut)
|
||||||
|
{
|
||||||
|
UINT64 uNum = 0;
|
||||||
|
TCHAR *ptr = szOut + 5;
|
||||||
|
|
||||||
|
if (!lpIn || !szOut) return FALSE;
|
||||||
|
|
||||||
|
if (dwSize > 8) return FALSE;
|
||||||
|
|
||||||
|
// XXX: Win32 is always little endian, so should be fine?
|
||||||
|
CopyMemory(&uNum, lpIn, dwSize);
|
||||||
|
|
||||||
|
*(ptr + 1) = 0;
|
||||||
|
do {
|
||||||
|
*ptr-- = szBaseChars[uNum % base];
|
||||||
|
uNum /= base;
|
||||||
|
} while (ptr >= szOut);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
GenerateKey(LPCTSTR szInput,
|
||||||
|
LPTSTR szOut)
|
||||||
|
{
|
||||||
|
/* In the original implementation, this just generated random
|
||||||
|
* "digits." I went too far with the bit, so now the "keys" have
|
||||||
|
* some procedural generation! They're still structured similarly:
|
||||||
|
*
|
||||||
|
* XXXXX-YYYYY-ZZZZZ
|
||||||
|
*
|
||||||
|
* XXXXX is a random DWORD (shifted right 2 bytes to look more
|
||||||
|
* random) and XORed by the first private key QWORD.
|
||||||
|
* YYYYY is an Adler32 checksum of the user input, XORed by the
|
||||||
|
* second private key QWORD.
|
||||||
|
* Finally, ZZZZZ is the Adler32 checksum of "XXXXX-YYYYY", XORed
|
||||||
|
* by the third private key QWORD.
|
||||||
|
*/
|
||||||
|
static BOOL bSeeded = FALSE;
|
||||||
|
UINT64 uRandom;
|
||||||
|
UINT64 dwChecksum, dwFinalSum;
|
||||||
|
LPTSTR szPtr = szOut;
|
||||||
|
|
||||||
|
|
||||||
|
if (!szInput || !szOut) return FALSE;
|
||||||
|
|
||||||
|
if (!bSeeded) {
|
||||||
|
xorsrand((unsigned)time(NULL));
|
||||||
|
bSeeded = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate segment one
|
||||||
|
uRandom = ((xorrand() & 0xffff) << 16) ^ uPrivKey[0];
|
||||||
|
if (!EncodeNumber(&uRandom, sizeof(UINT64), szPtr)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
szPtr += 5;
|
||||||
|
|
||||||
|
*szPtr++ = _T('-');
|
||||||
|
|
||||||
|
// ... and segment 2
|
||||||
|
dwChecksum = ck_adler32(szInput, (DWORD)_tcslen(szInput)) ^
|
||||||
|
uPrivKey[1];
|
||||||
|
if (!EncodeNumber(&dwChecksum, sizeof(DWORD), szPtr)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
szPtr += 5;
|
||||||
|
*szPtr++ = _T('-');
|
||||||
|
|
||||||
|
// ... finally, segment 3
|
||||||
|
dwFinalSum = ck_adler32(szOut, 11) ^ uPrivKey[2];
|
||||||
|
if (!EncodeNumber(&dwFinalSum, sizeof(DWORD), szPtr)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
szPtr += 5;
|
||||||
|
*szPtr = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
6
Keygender32/Generator.h
Normal file
6
Keygender32/Generator.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Generate a key using szInput, feeding the output into szOut.
|
||||||
|
//
|
||||||
|
// NOTE: szOut must be at least 18 TCHARs!
|
||||||
|
BOOL GenerateKey(LPCTSTR szInput, LPTSTR szOut);
|
43
Keygender32/Keygender32.c
Normal file
43
Keygender32/Keygender32.c
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
// Keygender32.cpp : Defines the entry point for the application.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Keygender32.h"
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#define MAX_LOADSTRING 100
|
||||||
|
|
||||||
|
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance,
|
||||||
|
LPTSTR lpCmdLine,
|
||||||
|
int nCmdShow)
|
||||||
|
{
|
||||||
|
BgmState state = NULL;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||||
|
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||||
|
|
||||||
|
setlocale( LC_ALL, ".437" );
|
||||||
|
|
||||||
|
InitCommonControls();
|
||||||
|
InitStarfieldControl(hInstance);
|
||||||
|
|
||||||
|
if (!PrepareMusic(hInstance, &state)) {
|
||||||
|
MessageBoxA(
|
||||||
|
NULL,
|
||||||
|
MusicStartFailReason,
|
||||||
|
"Music play failed ;_;",
|
||||||
|
MB_OK | MB_ICONERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
DialogBoxParam(hInstance,
|
||||||
|
MAKEINTRESOURCE(IDD_MAIN),
|
||||||
|
NULL,
|
||||||
|
MainDlgProc,
|
||||||
|
(LPARAM)state);
|
||||||
|
|
||||||
|
EndMusic(state);
|
||||||
|
DeinitStarfieldControl(hInstance);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
7
Keygender32/Keygender32.h
Normal file
7
Keygender32/Keygender32.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
#include "Starfield.h"
|
||||||
|
#include "Dialog.h"
|
||||||
|
#include "BGM.h"
|
||||||
|
#include "Debug.h"
|
217
Keygender32/Keygender32.rc
Normal file
217
Keygender32/Keygender32.rc
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
// Microsoft Visual C++ generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
#include "windows.h"
|
||||||
|
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||||
|
"#include ""windows.h""\r\n"
|
||||||
|
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Dialog
|
||||||
|
//
|
||||||
|
|
||||||
|
IDD_MAIN DIALOGEX 0, 0, 227, 135
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
EXSTYLE WS_EX_CONTEXTHELP
|
||||||
|
CAPTION "Pro Nouns Keygenderator"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
CONTROL "",IDC_STARFIELD,"Starfield",WS_TABSTOP,7,7,213,51
|
||||||
|
LTEXT "Which version of Pro Nouns do you want to use?",IDC_STATIC,7,65,156,10
|
||||||
|
EDITTEXT IDC_PNTYPE,7,81,213,14,ES_AUTOHSCROLL
|
||||||
|
PUSHBUTTON "Generate Key",IDOK,155,99,65,14,WS_DISABLED
|
||||||
|
EDITTEXT IDC_KEYDATA,54,99,94,14,ES_AUTOHSCROLL | ES_READONLY
|
||||||
|
LTEXT "License Key:",IDC_STATIC,7,99,41,14,SS_CENTERIMAGE
|
||||||
|
CONTROL "",IDC_STATUSBAR,"msctls_statusbar32",WS_TABSTOP,7,114,50,14
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_ABOUT DIALOGEX 0, 0, 235, 177
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
|
||||||
|
EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW
|
||||||
|
CAPTION "About"
|
||||||
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
|
BEGIN
|
||||||
|
GROUPBOX "Credits",IDC_STATIC,7,7,221,98,BS_CENTER
|
||||||
|
LTEXT "This is a port of the JavaScript version, by Luna (https://tiredand.gay).",IDC_STATIC,13,16,209,18
|
||||||
|
LTEXT "This software uses libXMP, which is Copyright c 1996-2023 Claudio Matsuoka and Hipolito Carraro Jr. See the NFO for more info.",IDC_STATIC,13,40,209,25
|
||||||
|
LTEXT "Background music is ""Space Debris"" by Captain.",IDC_STATIC,13,71,209,8
|
||||||
|
PUSHBUTTON "Original Keygender",IDC_OGLINK,148,85,74,14
|
||||||
|
GROUPBOX "Misc Greets",IDC_STATIC,7,111,221,40,BS_CENTER
|
||||||
|
CTEXT "lifning - iliana - Hell Labs",IDC_STATIC,13,120,209,25,SS_CENTERIMAGE
|
||||||
|
PUSHBUTTON "Close",IDCLOSE,178,156,50,14
|
||||||
|
PUSHBUTTON "Hell Labs @ Cohost",IDC_HLSITE,103,156,70,14
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DESIGNINFO
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
GUIDELINES DESIGNINFO
|
||||||
|
BEGIN
|
||||||
|
IDD_MAIN, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 220
|
||||||
|
VERTGUIDE, 48
|
||||||
|
VERTGUIDE, 54
|
||||||
|
VERTGUIDE, 148
|
||||||
|
VERTGUIDE, 155
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 128
|
||||||
|
HORZGUIDE, 58
|
||||||
|
HORZGUIDE, 65
|
||||||
|
HORZGUIDE, 75
|
||||||
|
HORZGUIDE, 81
|
||||||
|
HORZGUIDE, 95
|
||||||
|
HORZGUIDE, 99
|
||||||
|
HORZGUIDE, 113
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_ABOUT, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 228
|
||||||
|
VERTGUIDE, 13
|
||||||
|
VERTGUIDE, 142
|
||||||
|
VERTGUIDE, 148
|
||||||
|
VERTGUIDE, 172
|
||||||
|
VERTGUIDE, 178
|
||||||
|
VERTGUIDE, 222
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 170
|
||||||
|
HORZGUIDE, 16
|
||||||
|
HORZGUIDE, 34
|
||||||
|
HORZGUIDE, 40
|
||||||
|
HORZGUIDE, 65
|
||||||
|
HORZGUIDE, 71
|
||||||
|
HORZGUIDE, 79
|
||||||
|
HORZGUIDE, 85
|
||||||
|
HORZGUIDE, 99
|
||||||
|
HORZGUIDE, 105
|
||||||
|
HORZGUIDE, 111
|
||||||
|
HORZGUIDE, 120
|
||||||
|
HORZGUIDE, 145
|
||||||
|
HORZGUIDE, 151
|
||||||
|
HORZGUIDE, 157
|
||||||
|
END
|
||||||
|
END
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// MUSIC
|
||||||
|
//
|
||||||
|
|
||||||
|
IDR_BGM MUSIC "space_debris.mod"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,0
|
||||||
|
PRODUCTVERSION 1,0,0,0
|
||||||
|
FILEFLAGSMASK 0x17L
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x1L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "CompanyName", "Hell Labs"
|
||||||
|
VALUE "FileDescription", "Pro Nouns Keygenderator"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 0"
|
||||||
|
VALUE "InternalName", "Keygender"
|
||||||
|
VALUE "OriginalFilename", "Keygendr.exe"
|
||||||
|
VALUE "ProductName", "Pro Nouns Keygender"
|
||||||
|
VALUE "ProductVersion", "1, 0, 0, 0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDI_KEYGENDER ICON "keygender.ico"
|
||||||
|
#endif // English (U.S.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
505
Keygender32/Keygender32.vcproj
Normal file
505
Keygender32/Keygender32.vcproj
Normal file
|
@ -0,0 +1,505 @@
|
||||||
|
<?xml version="1.0" encoding="shift_jis"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="Keygender32"
|
||||||
|
ProjectGUID="{8E21754C-D79C-4B94-B139-BB91D252FF3F}"
|
||||||
|
RootNamespace="Keygender32"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="C:\Dev\libxmp\Debug\include"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;LIBXMP_STATIC"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkLibraryDependencies="false"
|
||||||
|
AdditionalDependencies="libxmp-static.lib shlwapi.lib msimg32.lib winmm.lib comctl32.lib"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories="C:\Dev\libxmp\Debug\lib"
|
||||||
|
IgnoreAllDefaultLibraries="false"
|
||||||
|
IgnoreDefaultLibraryNames=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
FavorSizeOrSpeed="2"
|
||||||
|
AdditionalIncludeDirectories="C:\Dev\libxmp\Release\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LIBXMP_STATIC"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="libxmp-static.lib shlwapi.lib msimg32.lib winmm.lib comctl32.lib"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories="C:\Dev\libxmp\Release\lib"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release_ANSI|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="0"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Copying NFOs"
|
||||||
|
CommandLine="copy "$(SolutionDir)"*.NFO "$(TargetDir)""
|
||||||
|
Outputs="$(TargetDir)\keygendr.for.win32.HL.NFO"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
FavorSizeOrSpeed="2"
|
||||||
|
AdditionalIncludeDirectories="C:\Dev\libxmp\Release\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LIBXMP_STATIC"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableEnhancedInstructionSet="0"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="0"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="libxmp-static.lib shlwapi.lib msimg32.lib winmm.lib comctl32.lib"
|
||||||
|
OutputFile="$(OutDir)\Keygendr.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories="C:\Dev\libxmp\Release\lib"
|
||||||
|
GenerateDebugInformation="false"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug_ANSI|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="0"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="C:\Dev\libxmp\Debug\include"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;LIBXMP_STATIC"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkLibraryDependencies="false"
|
||||||
|
AdditionalDependencies="libxmp-static.lib shlwapi.lib msimg32.lib winmm.lib comctl32.lib"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories="C:\Dev\libxmp\Debug\lib"
|
||||||
|
IgnoreAllDefaultLibraries="false"
|
||||||
|
IgnoreDefaultLibraryNames=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\BGM.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Debug.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Dialog.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Generator.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Keygender32.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Nfo.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Random.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Starfield.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stdafx.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release_ANSI|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug_ANSI|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\BGM.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Debug.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Dialog.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Generator.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Keygender32.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Nfo.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Random.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Resource.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Starfield.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stdafx.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\keygender.ico"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Keygender32.rc"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath="..\keygendr.for.win32.HL.NFO"
|
||||||
|
DeploymentContent="true"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ReadMe.txt"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\space_debris.mod"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
43
Keygender32/Nfo.c
Normal file
43
Keygender32/Nfo.c
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Nfo.h"
|
||||||
|
#include "resource.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define OpenURL(url) \
|
||||||
|
ShellExecute( \
|
||||||
|
hDlg, \
|
||||||
|
_T("open"), \
|
||||||
|
url, \
|
||||||
|
NULL, \
|
||||||
|
NULL, \
|
||||||
|
SW_SHOWNORMAL)
|
||||||
|
|
||||||
|
INT_PTR CALLBACK
|
||||||
|
NfoDlgProc(HWND hDlg,
|
||||||
|
UINT uMsg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam)) {
|
||||||
|
case IDC_HLSITE:
|
||||||
|
OpenURL(_T("https://cohost.org/hell-labs"));
|
||||||
|
break;
|
||||||
|
case IDC_OGLINK:
|
||||||
|
OpenURL(_T("https://tiredand.gay/keygender/"));
|
||||||
|
break;
|
||||||
|
case IDCLOSE:
|
||||||
|
EndDialog(hDlg, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_CLOSE:
|
||||||
|
EndDialog(hDlg, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
4
Keygender32/Nfo.h
Normal file
4
Keygender32/Nfo.h
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
INT_PTR CALLBACK
|
||||||
|
NfoDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
45
Keygender32/Random.c
Normal file
45
Keygender32/Random.c
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Random.h"
|
||||||
|
|
||||||
|
/* From https://prng.di.unimi.it/xoshiro256plusplus.c */
|
||||||
|
|
||||||
|
static UINT64 s[4];
|
||||||
|
|
||||||
|
static __inline UINT64
|
||||||
|
rotl(const UINT64 x, int k)
|
||||||
|
{
|
||||||
|
return (x << k) | (x >> (64 - k));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
xorsrand(unsigned int seed)
|
||||||
|
{
|
||||||
|
UINT64 x = seed;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
UINT64 z = (x += 0x9E3779B97F4A7C15ULL);
|
||||||
|
z = (z ^ (z >> 30)) * 0xBF58476D1CE4E5B9ULL;
|
||||||
|
z = (z ^ (z >> 27)) * 0x94D049BB133111EBULL;
|
||||||
|
s[i] = x = z ^ (z >> 31);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT64
|
||||||
|
xorrand(void)
|
||||||
|
{
|
||||||
|
const UINT64 result = rotl(s[0] + s[3], 23) + s[0];
|
||||||
|
|
||||||
|
const UINT64 t = s[1] << 17;
|
||||||
|
|
||||||
|
s[2] ^= s[0];
|
||||||
|
s[3] ^= s[1];
|
||||||
|
s[1] ^= s[2];
|
||||||
|
s[0] ^= s[3];
|
||||||
|
|
||||||
|
s[2] ^= t;
|
||||||
|
|
||||||
|
s[3] = rotl(s[3], 45);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
7
Keygender32/Random.h
Normal file
7
Keygender32/Random.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Provides a seed for xorrand().
|
||||||
|
void xorsrand(unsigned int seed);
|
||||||
|
// Generates a random UINT64 according to the xoshiro256++ PRNG
|
||||||
|
// algorithm.
|
||||||
|
UINT64 xorrand(void);
|
308
Keygender32/Starfield.c
Normal file
308
Keygender32/Starfield.c
Normal file
|
@ -0,0 +1,308 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Starfield.h"
|
||||||
|
#include "Random.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#define WMU_FRAMERATE_NAME _T("SetFramerate_{6CFC2304-CE89-40c4-881C-988D36FBB978}")
|
||||||
|
#define DENSITY 3
|
||||||
|
#define LAYERS 5
|
||||||
|
|
||||||
|
const COLORREF crTransColors[] = {
|
||||||
|
RGB(0x5b, 0xce, 0xfa),
|
||||||
|
RGB(0xf5, 0xa9, 0xb8),
|
||||||
|
RGB(0xff, 0xff, 0xff),
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _StarLayer {
|
||||||
|
HBITMAP hbmFrame;
|
||||||
|
DOUBLE x;
|
||||||
|
BYTE alpha;
|
||||||
|
} StarLayer;
|
||||||
|
|
||||||
|
typedef struct _StarState {
|
||||||
|
StarLayer layers[LAYERS];
|
||||||
|
HBITMAP hbmColors[3]; // for each stripe
|
||||||
|
HDC hMemDC; // blits to screen
|
||||||
|
HDC hBlitDC; // blits to hMemDC
|
||||||
|
} StarState;
|
||||||
|
|
||||||
|
static void
|
||||||
|
DeleteState(StarState *state)
|
||||||
|
{
|
||||||
|
if (state) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (state->hBlitDC) DeleteDC(state->hBlitDC);
|
||||||
|
if (state->hMemDC) DeleteDC(state->hMemDC);
|
||||||
|
|
||||||
|
for (i = 0; i < LAYERS; i++) {
|
||||||
|
if (state->layers[i].hbmFrame) {
|
||||||
|
DeleteObject(state->layers[i].hbmFrame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
if (state->hbmColors[i]) DeleteObject(state->hbmColors[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The state is usually stored in the stack, so zero out any
|
||||||
|
// values that might cause issues in case of reuse
|
||||||
|
ZeroMemory(state, sizeof(StarState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initializes the StarState based on the given client area RECT
|
||||||
|
static void
|
||||||
|
InitState(HDC hDC,
|
||||||
|
StarState *state,
|
||||||
|
LPRECT rcArea)
|
||||||
|
{
|
||||||
|
UINT i, // iterators
|
||||||
|
iStripeSplit; // height per stripe
|
||||||
|
HBITMAP hbmColors[3];
|
||||||
|
DWORD dwStarCount = rcArea->bottom * DENSITY;
|
||||||
|
|
||||||
|
iStripeSplit = rcArea->bottom / 5;
|
||||||
|
|
||||||
|
// init DCs
|
||||||
|
state->hMemDC = CreateCompatibleDC(hDC);
|
||||||
|
state->hBlitDC = CreateCompatibleDC(hDC);
|
||||||
|
|
||||||
|
// init layer bitmaps
|
||||||
|
for (i = 0; i < LAYERS; i++) {
|
||||||
|
HBITMAP hbmOrig;
|
||||||
|
state->layers[i].hbmFrame = CreateCompatibleBitmap(hDC,
|
||||||
|
rcArea->right,
|
||||||
|
rcArea->bottom);
|
||||||
|
state->layers[i].x = 0;
|
||||||
|
state->layers[i].alpha = 159 + (i * 24);
|
||||||
|
|
||||||
|
// Before stars, fill the frame with the void of space
|
||||||
|
hbmOrig = SelectObject(
|
||||||
|
state->hBlitDC,
|
||||||
|
state->layers[i].hbmFrame);
|
||||||
|
BitBlt(state->hBlitDC,
|
||||||
|
0, 0,
|
||||||
|
rcArea->right, rcArea->bottom,
|
||||||
|
NULL,
|
||||||
|
0, 0,
|
||||||
|
BLACKNESS);
|
||||||
|
SelectObject(
|
||||||
|
state->hBlitDC,
|
||||||
|
hbmOrig);
|
||||||
|
}
|
||||||
|
|
||||||
|
// we only need to init the stripes, thanks to AlphaBlend
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
HBITMAP hbmOrig;
|
||||||
|
|
||||||
|
hbmColors[i] = CreateCompatibleBitmap(hDC, 1, 1);
|
||||||
|
hbmOrig = SelectObject(state->hBlitDC,
|
||||||
|
hbmColors[i]);
|
||||||
|
SetPixel(state->hBlitDC,
|
||||||
|
0, 0, crTransColors[i]);
|
||||||
|
SelectObject(state->hBlitDC, hbmOrig);
|
||||||
|
}
|
||||||
|
|
||||||
|
// arm the RNG
|
||||||
|
xorsrand((unsigned)time(NULL));
|
||||||
|
|
||||||
|
// create each star, AlphaBlending as we go for ideal effect
|
||||||
|
for (i = 0; i < dwStarCount; i++) {
|
||||||
|
int layer = (WORD)(xorrand() >> 48) % LAYERS,
|
||||||
|
x = (int)((WORD)xorrand()) % (rcArea->right - 4),
|
||||||
|
y = i / DENSITY,
|
||||||
|
stripe = y / iStripeSplit,
|
||||||
|
width = max((int)(((float)layer + 3.0f) / 2.0f), 1);
|
||||||
|
|
||||||
|
HBITMAP hbmColor = hbmColors[(stripe < 3) ? stripe :
|
||||||
|
(stripe == 3) ? 1 : 0],
|
||||||
|
hbmOrig,
|
||||||
|
hbmBlitOrig;
|
||||||
|
|
||||||
|
BLENDFUNCTION bf = {
|
||||||
|
AC_SRC_OVER,
|
||||||
|
0,
|
||||||
|
state->layers[layer].alpha,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
hbmOrig = SelectObject(state->hMemDC, state->layers[layer].hbmFrame);
|
||||||
|
hbmBlitOrig = SelectObject(state->hBlitDC, hbmColor);
|
||||||
|
AlphaBlend(state->hMemDC,
|
||||||
|
x - (width / 2), y - (width / 2),
|
||||||
|
width, width,
|
||||||
|
state->hBlitDC,
|
||||||
|
0, 0,
|
||||||
|
1, 1,
|
||||||
|
bf);
|
||||||
|
|
||||||
|
if (x + width > rcArea->right) {
|
||||||
|
// loop around to make the square look complete
|
||||||
|
AlphaBlend(state->hMemDC,
|
||||||
|
0, y,
|
||||||
|
(x + width) - rcArea->right, width,
|
||||||
|
state->hBlitDC,
|
||||||
|
0, 0,
|
||||||
|
1, 1,
|
||||||
|
bf);
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectObject(state->hBlitDC, hbmBlitOrig);
|
||||||
|
SelectObject(state->hMemDC, hbmOrig);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
DeleteObject(hbmColors[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
DrawStars(HDC hDC,
|
||||||
|
StarState *state,
|
||||||
|
LPRECT rcArea)
|
||||||
|
{
|
||||||
|
// Logic taken from https://github.com/lunasorcery/keygender/blob/main/script.js
|
||||||
|
UINT i;
|
||||||
|
HBITMAP hbmOrig,
|
||||||
|
hbmFrame = CreateCompatibleBitmap(hDC,
|
||||||
|
rcArea->right,
|
||||||
|
rcArea->bottom);
|
||||||
|
static DWORD dwLastRun = 0;
|
||||||
|
DOUBLE dSpeedMult = 1.0;
|
||||||
|
|
||||||
|
hbmOrig = SelectObject(state->hMemDC, hbmFrame);
|
||||||
|
// Without this, Win98 starts blitting VRAM to our control
|
||||||
|
BitBlt(state->hMemDC,
|
||||||
|
0, 0,
|
||||||
|
rcArea->right, rcArea->bottom,
|
||||||
|
NULL,
|
||||||
|
0, 0,
|
||||||
|
BLACKNESS);
|
||||||
|
|
||||||
|
// try to keep a consistent speed across frames
|
||||||
|
if (dwLastRun != 0) {
|
||||||
|
DWORD dwElapsed = GetTickCount() - dwLastRun;
|
||||||
|
dSpeedMult = max(1.0, (dwElapsed / 17.0));
|
||||||
|
}
|
||||||
|
dwLastRun = GetTickCount();
|
||||||
|
|
||||||
|
for (i = 0; i < LAYERS; i++) {
|
||||||
|
HBITMAP hbmBlitOrig = NULL;
|
||||||
|
|
||||||
|
// split each layer into two pieces, and stitch them together
|
||||||
|
int widths[2];
|
||||||
|
widths[0] = (int)state->layers[i].x + rcArea->right;
|
||||||
|
widths[1] = rcArea->right - widths[0];
|
||||||
|
|
||||||
|
hbmBlitOrig = SelectObject(state->hBlitDC, state->layers[i].hbmFrame);
|
||||||
|
// Left side of the split
|
||||||
|
TransparentBlt(state->hMemDC,
|
||||||
|
0, 0,
|
||||||
|
widths[0], rcArea->bottom,
|
||||||
|
state->hBlitDC,
|
||||||
|
widths[1], 0,
|
||||||
|
widths[0], rcArea->bottom,
|
||||||
|
0);
|
||||||
|
// Right side of the split
|
||||||
|
TransparentBlt(state->hMemDC,
|
||||||
|
widths[0], 0,
|
||||||
|
widths[1], rcArea->bottom,
|
||||||
|
state->hBlitDC,
|
||||||
|
0, 0,
|
||||||
|
widths[1], rcArea->bottom,
|
||||||
|
0);
|
||||||
|
SelectObject(state->hBlitDC, hbmBlitOrig);
|
||||||
|
|
||||||
|
// Update frame location
|
||||||
|
state->layers[i].x -= ((DOUBLE)i + 1.5) * dSpeedMult;
|
||||||
|
if (state->layers[i].x + rcArea->right < 0) {
|
||||||
|
state->layers[i].x += rcArea->right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BitBlt(hDC,
|
||||||
|
rcArea->left,
|
||||||
|
rcArea->top,
|
||||||
|
rcArea->right,
|
||||||
|
rcArea->bottom,
|
||||||
|
state->hMemDC,
|
||||||
|
0, 0,
|
||||||
|
SRCCOPY);
|
||||||
|
|
||||||
|
SelectObject(state->hMemDC, hbmOrig);
|
||||||
|
DeleteObject(hbmFrame);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static LRESULT CALLBACK
|
||||||
|
StarfieldWndProc(HWND hWnd,
|
||||||
|
UINT uMsg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
static RECT rcClient = {0};
|
||||||
|
static StarState state = {0};
|
||||||
|
static HBITMAP hbmColors[3] = {0};
|
||||||
|
static HDC hDC = NULL;
|
||||||
|
// Default to 60fps
|
||||||
|
static DOUBLE fFrameRate = (1.0 / 60) *
|
||||||
|
1000.0;
|
||||||
|
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_CREATE:
|
||||||
|
hDC = GetDC(hWnd);
|
||||||
|
|
||||||
|
GetClientRect(hWnd, &rcClient);
|
||||||
|
InitState(hDC, &state, &rcClient);
|
||||||
|
/* PASSTHRU */
|
||||||
|
case WM_TIMER:
|
||||||
|
// Frame tick!
|
||||||
|
DrawStars(hDC, &state, &rcClient);
|
||||||
|
SetTimer(hWnd, 0x69, fFrameRate, NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
DeleteState(&state);
|
||||||
|
DeleteDC(hDC);
|
||||||
|
hDC = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (uMsg == WMU_FRAMERATE) {
|
||||||
|
// Update our frame rate
|
||||||
|
fFrameRate = (1.0 / (DOUBLE)(LONG)wParam)
|
||||||
|
* 1000.0;
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
InitStarfieldControl(HINSTANCE hInst)
|
||||||
|
{
|
||||||
|
WNDCLASSEX wcex = {0};
|
||||||
|
wcex.cbSize = sizeof(wcex);
|
||||||
|
wcex.lpfnWndProc = StarfieldWndProc;
|
||||||
|
wcex.hInstance = hInst;
|
||||||
|
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||||
|
wcex.lpszClassName = STARFIELD_CLASS;
|
||||||
|
RegisterClassEx(&wcex);
|
||||||
|
|
||||||
|
WMU_FRAMERATE = RegisterWindowMessage(WMU_FRAMERATE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DeinitStarfieldControl(HINSTANCE hInst)
|
||||||
|
{
|
||||||
|
UnregisterClass(STARFIELD_CLASS, hInst);
|
||||||
|
}
|
14
Keygender32/Starfield.h
Normal file
14
Keygender32/Starfield.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define STARFIELD_CLASS _T("Starfield")
|
||||||
|
|
||||||
|
// Initializes the Starfield control. This is required before creating
|
||||||
|
// a Starfield control using STARFIELD_CLASS.
|
||||||
|
void InitStarfieldControl(HINSTANCE);
|
||||||
|
|
||||||
|
// Removes the Starfield control class.
|
||||||
|
void DeinitStarfieldControl(HINSTANCE);
|
||||||
|
|
||||||
|
// Defined by InitStarFieldControl. Send this message to define the
|
||||||
|
// rough framerate the control tries to render at.
|
||||||
|
UINT WMU_FRAMERATE;
|
BIN
Keygender32/keygender.ico
Normal file
BIN
Keygender32/keygender.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
35
Keygender32/resource.h
Normal file
35
Keygender32/resource.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by Keygender32.rc
|
||||||
|
//
|
||||||
|
#define IDD_KEYGENDER32_DIALOG 102
|
||||||
|
#define IDM_ABOUT 104
|
||||||
|
#define IDD_ABOUT 107
|
||||||
|
#define IDR_MAINFRAME 128
|
||||||
|
#define IDD_MAIN 129
|
||||||
|
#define IDR_BGM 132
|
||||||
|
#define IDI_KEYGENDER 134
|
||||||
|
#define IDR_TTF1 138
|
||||||
|
#define IDC_CUSTOM1 1002
|
||||||
|
#define IDC_STARFIELD 1002
|
||||||
|
#define IDC_PNTYPE 1003
|
||||||
|
#define IDC_GENBTN 1004
|
||||||
|
#define IDC_KEYDATA 1005
|
||||||
|
#define IDC_STATUSBAR 1006
|
||||||
|
#define IDC_NFOEDIT 1008
|
||||||
|
#define IDC_RICHEDIT21 1009
|
||||||
|
#define IDC_OGLINK 1011
|
||||||
|
#define IDC_HLSITE 1014
|
||||||
|
#define IDC_STATIC -1
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NO_MFC 1
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 139
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1015
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 110
|
||||||
|
#endif
|
||||||
|
#endif
|
BIN
Keygender32/space_debris.mod
Normal file
BIN
Keygender32/space_debris.mod
Normal file
Binary file not shown.
12
Keygender32/stdafx.c
Normal file
12
Keygender32/stdafx.c
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
// Keygender32.pch will be the pre-compiled header
|
||||||
|
// stdafx.obj will contain the pre-compiled type information
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
// TODO: reference any additional headers you need in STDAFX.H
|
||||||
|
// and not in this file
|
||||||
|
#pragma comment(linker,"\"/manifestdependency:type='win32' \
|
||||||
|
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
|
||||||
|
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' \
|
||||||
|
language='*'\"")
|
35
Keygender32/stdafx.h
Normal file
35
Keygender32/stdafx.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// stdafx.h : include file for standard system include files,
|
||||||
|
// or project specific include files that are used frequently, but
|
||||||
|
// are changed infrequently
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Modify the following defines if you have to target a platform prior to the ones specified below.
|
||||||
|
// Refer to MSDN for the latest info on corresponding values for different platforms.
|
||||||
|
#ifndef WINVER // Allow use of features specific to Windows XP or later.
|
||||||
|
#define WINVER 0x0410 // Change this to the appropriate value to target other versions of Windows.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
|
||||||
|
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
|
||||||
|
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
|
||||||
|
#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Windows Header Files:
|
||||||
|
#include <windows.h>
|
||||||
|
#include <CommCtrl.h>
|
||||||
|
#include <Shlwapi.h>
|
||||||
|
|
||||||
|
// C RunTime Header Files
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <memory.h>
|
||||||
|
#include <tchar.h>
|
52
LICENSE.TXT
Normal file
52
LICENSE.TXT
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
===========================
|
||||||
|
BIG BILL HELL'S LICENSE
|
||||||
|
===========================
|
||||||
|
|
||||||
|
FUCK YOU, OPEN-SOURCE!
|
||||||
|
|
||||||
|
If you're dumb enough to want to copy this software, you're a big enough
|
||||||
|
schmuck to abide by BIG BILL HELL'S LICENSE (BBHL):
|
||||||
|
|
||||||
|
| 1. BAD TERMS
|
||||||
|
| 2. CODE THAT BREAKS DOWN
|
||||||
|
| 3. THIEVES
|
||||||
|
|
||||||
|
--------------
|
||||||
|
1. BAD TERMS
|
||||||
|
--------------
|
||||||
|
|
||||||
|
If you think you're going to find permissive terms in BIG BILL'S, you can
|
||||||
|
kiss my ASS. It's our belief that you're such a stupid motherfucker,
|
||||||
|
you'll depend on this bullshit, GUARANTEED. If you make a derivative work:
|
||||||
|
Shove it up your ugly ASS. You heard us right: Shove it up your ugly ASS.
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
2. CODE THAT BREAKS DOWN
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Bring your CHANGE; bring your REPRO; bring your SPOUSE--we'll fuck them!
|
||||||
|
That's right, we'll fuck your SPOUSE. Because under the BBHL, you're fucked
|
||||||
|
six ways from Sunday.
|
||||||
|
|
||||||
|
------------
|
||||||
|
3. THIEVES
|
||||||
|
------------
|
||||||
|
|
||||||
|
Make a hack with BBHL, home of CHALLENGE GITTING. That's right:
|
||||||
|
|
||||||
|
3.a. CHALLENGE GITTING
|
||||||
|
----------------------
|
||||||
|
How does it work? If you submit six PRs straight into main that don't need
|
||||||
|
feedback, you get no Contributor License Agreement (CLA).
|
||||||
|
|
||||||
|
|
||||||
|
DON'T SELL; DON'T DISTRIBUTE; DON'T FORK FROM US, OR WE'LL RIP YOUR BITS OFF.
|
||||||
|
|
||||||
|
ONLY WITH BBHL: THE ONLY LICENSE THAT TELLS YOU TO FUCK OFF.
|
||||||
|
|
||||||
|
HURRY UP, ASSHOLE, THESE TERMS TAKE EFFECT THE MINUTE YOU WRITE A LINE OF
|
||||||
|
CODE, AND IT BETTER NOT BREAK, OR YOU'RE A DEAD MOTHERFUCKER.
|
||||||
|
|
||||||
|
GO TO HELL. BIG BILL HELL'S LICENSE: OPEN-SOURCE'S FILTHIEST AND EXCLUSIVE
|
||||||
|
TERMS OF THE MEANEST (SONS OF) BITCHES IN THE WHOLE COMMUNITY, GUARANTEED.
|
||||||
|
|
1
README.TXT
Symbolic link
1
README.TXT
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
keygendr.for.win32.HL.utf8.NFO
|
148
keygendr.for.win32.HL.NFO
Normal file
148
keygendr.for.win32.HL.NFO
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
|
||||||
|
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||||
|
ÜÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜ
|
||||||
|
ÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜ
|
||||||
|
ÜÛÛÛÛÛÛÛÛÛÛÛÛßßßßßßßßßßßßßßßÛÛÛÛÛÛÛÛÛÛÛÛÜ
|
||||||
|
ÜÛÛÛÛÛÛÛÛÛßß ßßÛÛÛÛÛÛÛÛÛÜ
|
||||||
|
ÜÛÛÛÛÛÛÛÛß Ü Ü ßÛÛÛÛÛÛÛÛÜ
|
||||||
|
ÛÛÛÛÛÛÛÛß ÜÛÛÛÛÛÜ ÜÛÛÛÛÛÜ ßÛÛÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛÛß ÜÛÛÛÛÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÛÛÛÛÜ ßÛÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛÛß ÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜ ÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
|
||||||
|
ÜÛÛÛÛÛÛ ÛÛÛÛÛÛßÛÛÛÛÛÛÛÛÜÛÛÛÛÛÛÛÛßÛÛÛÛÛÛ ÛÛÛÛÛÛÜ
|
||||||
|
ÛÛÛÛÛÛ ßÛÛÛÛÛÜ ßÛÛÛÛÛÛÛÛÛÛÛÛÛß ÜÛÛÛÛÛß ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛÛÛÛÛÜ ÛÛÛÛÛÛ ÛÛÛÛÛÛ
|
||||||
|
ÜÛÛÛÛÛß ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ßÛÛÛÛÛÜ
|
||||||
|
ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛßßßÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛÛÛß ßÛÛÛÛÛÛÛÛÛÜ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛÛÛÛß ßÛÛÛÛÛÛÛÛÛÛÜ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛÛÛß ÛÛÛÛÛÛ ÛÛÛÛÛÛ ßÛÛÛÛÛÛÛÛÛÜ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÛÛÛÛÛÛÛß ÛÛÛÛÛÛ ÛÛÛÛÛÛ *hl*ßÛÛÛÛÛÛÛ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛ
|
||||||
|
ßÛÛÛÛÛÜ ßßßßßßßßßßßßÛÛÛÛÛÛ ÛÛÛÛÛÛßßßßßßßßßßßß ÜÛÛÛÛÛß
|
||||||
|
ÛÛÛÛÛÛÜ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÜÛÛÛÛÛÛ
|
||||||
|
ÛÛÛÛÛÛÜ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÜÛÛÛÛÛÛ
|
||||||
|
ßÛÛÛÛÛÛÛ ßÛÛÛÛÛÜÛÛÛÛÛß ÜÛÛÛÛÛÛß
|
||||||
|
ßÛÛÛÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛß
|
||||||
|
ßÛÛÛÛÛÛÛÜ ßÛÛÛÛÛÛÛÛÛß ÜÛÛÛÛÛÛÛÛ
|
||||||
|
ßÛÛÛÛÛÛÛÜÜ ßÛÛÛÛÛÛÛß ÜÜÛÛÛÛÛÛÛÛß
|
||||||
|
ßÛÛÛÛÛÛÛÛÛÜÜÜ ÜÜÜÛÛÛÛÛÛÛÛÛÛß
|
||||||
|
ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßß
|
||||||
|
ßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßß
|
||||||
|
ßßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßßß
|
||||||
|
|
||||||
|
|
||||||
|
ÞÛÝ ÞÛÝ ÞÛÝÞÛÝ ÛÛ ÛÛ
|
||||||
|
ÞÛÝ ÞÛÝ ÜÜÜÜ ÞÛÝÞÛÝ ÛÛ ÜÜÜÜÜ ÛÛ ÜÜÜ ÜÜÜÜÜ
|
||||||
|
ÞÛÛÛÛÛÛÛÝÜÛÛßßÛÛÜÞÛÝÞÛÝ ÛÛ ÛÛßßßÛÝ ÛÛÛßßÛÛÜ ÛÛßßßÛÛ
|
||||||
|
ÞÛÝ ÞÛÝÛÛÜÜÜÜÛÛÞÛÝÞÛÝ ÛÛ ÜÜÛÛÛÝ ÛÛ ÛÛ ßÛÛÛÜÜ
|
||||||
|
ÞÛÝ ÞÛÝÛÛÜ ÜÜÞÛÝÞÛÝ ÛÛ ÛÛß ÜÛÝ ÛÛÜ ÜÛÛ ÜÜ ßßÛÛ
|
||||||
|
ÞÛÝ ÞÛÝ ßÛÛÛÛß ÞÛÝÞÛÝ ÛÛÛÛÛÝßÛÛÛßÛÛÝÛÛßÛÛÛß ßÛÛÛÛÛß
|
||||||
|
|
||||||
|
|
||||||
|
úÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛú
|
||||||
|
úÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛú
|
||||||
|
ú ú
|
||||||
|
:±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±:
|
||||||
|
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
||||||
|
³ ³
|
||||||
|
ÃÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ´
|
||||||
|
± Û PRO NOUNS KEYGENDERATOR FOR WINDOWS Û ±
|
||||||
|
± ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û developer...: [ flurry ] Û name.....: [ keygendr.exe ] Û ±
|
||||||
|
± Û tester......: [ LiFFY ] Û OS.......: [ WinAll ] Û ±
|
||||||
|
± Û release date: [ 17 mar 2024 ] Û disks....: [ 01 x 1.44 ] Û ±
|
||||||
|
± Û Û Û ±
|
||||||
|
± Û ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» Û Û ±
|
||||||
|
± ÛÄÄÄþºº RELEASE INFO ººþÄÄÄÄÄÄÄÄÄÐÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û This is a port of the JavaScript version, by Luna. Check out Û ±
|
||||||
|
± Û her version here: Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û http://tiredand.gay/keygender/ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û This program should be compatible with Windows 2000 and up. Û ±
|
||||||
|
± Û You might be able to run this on Windows 9x, but beware: when Û ±
|
||||||
|
± Û we tested it, the system struggled to keep up! It's best on Û ±
|
||||||
|
± Û Windows XP anyway. Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û It seems to run fine in Wine too, including under box86, just Û ±
|
||||||
|
± Û in case you need Pro Nouns on another little-endian OS. Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» Û ±
|
||||||
|
± ÛÄÄÄÄþºº INSTALL INFO ººþÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Just open the EXE and enter the edition of Pro Nouns you want Û ±
|
||||||
|
± Û to use. Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Enjoy! Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û ÉÍÍÍÍÍÍÍÍ» Û ±
|
||||||
|
± ÛÄÄÄÄÄÄÄþºº GREETS ººþÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û ÈÍÍÍÍÍÍÍͼ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Greets fly out to HeLL LaBS members! Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Personal greets to: Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û ¯ LiF and iliana, for their assistance in both testing and Û ±
|
||||||
|
± Û troubleshooting issues with the nightmare that is Win32 Û ±
|
||||||
|
± Û ¯ Luna, for making the original that inspired me to Û ±
|
||||||
|
± Û relearn the old Win32 API Û ±
|
||||||
|
± Û ¯ libXMP devs, for making a tracker library that works so Û ±
|
||||||
|
± Û well on any platform I've thrown it at with few issues Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û ÉÍÍÍÍÍÍÍÍÍÍÍÍ» Û ±
|
||||||
|
± ÛÄÄÄÄÄþºº GROUP INFO ººþÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û ÈÍÍÍÍÍÍÍÍÍÍÍͼ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û irc...........: unlisted ;) Û ±
|
||||||
|
± Û email.........: unlisted ;) Û ±
|
||||||
|
± Û world wide web: http://cohost.org/hell-labs Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û ÉÍÍÍÍÍÍÍÍ» Û ±
|
||||||
|
± ÛÄÄÄÄÄÄÄþºº LEGAL? ººþÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ ±
|
||||||
|
± Û ÈÍÍÍÍÍÍÍͼ Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û The source code for this software is provided at the below Û ±
|
||||||
|
± Û link, under the BBHLv1: Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û http://git.2ki.xyz/hell-labs/keygendr32 Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û This software also uses libxmp, under the MIT license: Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Extended Module Player Û ±
|
||||||
|
± Û Copyright (C) 1996-2023 Claudio Matsuoka and Û ±
|
||||||
|
± Û Hipolito Carraro Jr Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û Permission is hereby granted, free of charge, to any person Û ±
|
||||||
|
± Û obtaining a copy of this software and associated Û ±
|
||||||
|
± Û documentation files (the "Software"), to deal in the Û ±
|
||||||
|
± Û Software without restriction, including without limitation Û ±
|
||||||
|
± Û the rights to use, copy, modify, merge, publish, Û ±
|
||||||
|
± Û distribute, sublicense, and/or sell copies of the Software, Û ±
|
||||||
|
± Û and to permit persons to whom the Software is furnished to Û ±
|
||||||
|
± Û do so, subject to the following conditions: Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û The above copyright notice and this permission notice shall Û ±
|
||||||
|
± Û be included in all copies or substantial portions of the Û ±
|
||||||
|
± Û Software. Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± Û THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY Û ±
|
||||||
|
± Û KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE Û ±
|
||||||
|
± Û WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR Û ±
|
||||||
|
± Û PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS Û ±
|
||||||
|
± Û OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR Û ±
|
||||||
|
± Û OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR Û ±
|
||||||
|
± Û OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE Û ±
|
||||||
|
± Û SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Û ±
|
||||||
|
± Û Û ±
|
||||||
|
± þ þ ±
|
||||||
|
± ! ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ! ±
|
||||||
|
±ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³ CALL ENDED... ³ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄı
|
||||||
|
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;
|
||||||
|
|
148
keygendr.for.win32.HL.utf8.NFO
Normal file
148
keygendr.for.win32.HL.utf8.NFO
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
|
||||||
|
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
|
||||||
|
▄▄▄█████████████████████▄▄▄
|
||||||
|
▄▄███████████████████████████████▄▄
|
||||||
|
▄████████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀████████████▄
|
||||||
|
▄█████████▀▀ ▀▀█████████▄
|
||||||
|
▄████████▀ ▄ ▄ ▀████████▄
|
||||||
|
████████▀ ▄█████▄ ▄█████▄ ▀████████
|
||||||
|
███████▀ ▄██████████▄ ▄██████████▄ ▀███████
|
||||||
|
███████▀ █████████████▄▄ ▄▄█████████████ ███████
|
||||||
|
▄██████ ██████▀████████▄████████▀██████ ██████▄
|
||||||
|
██████ ▀█████▄ ▀█████████████▀ ▄█████▀ ██████
|
||||||
|
██████ ██████ ▄███████████▄ ██████ ██████
|
||||||
|
▄█████▀ ▀███████████████████████████▀ ▀█████▄
|
||||||
|
██████ ████████████▀▀▀████████████ ██████
|
||||||
|
██████ ▄█████████▀ ▀█████████▄ ██████
|
||||||
|
██████ ▄██████████▀ ▀██████████▄ ██████
|
||||||
|
██████ ▄▄█████████████ █████████████▄▄ ██████
|
||||||
|
██████ ▄█████████▀ ██████ ██████ ▀█████████▄ ██████
|
||||||
|
██████ ███████▀ ██████ ██████ *hl*▀███████ ██████
|
||||||
|
██████ ███████████████████████████████████████████ ██████
|
||||||
|
██████ █████████████████████████████████████████ ██████
|
||||||
|
▀█████▄ ▀▀▀▀▀▀▀▀▀▀▀▀██████ ██████▀▀▀▀▀▀▀▀▀▀▀▀ ▄█████▀
|
||||||
|
██████▄ ██████ ██████ ▄██████
|
||||||
|
██████▄ ██████ ██████ ▄██████
|
||||||
|
▀███████ ▀█████▄█████▀ ▄██████▀
|
||||||
|
▀███████▄ ███████████ ▄███████▀
|
||||||
|
▀███████▄ ▀█████████▀ ▄████████
|
||||||
|
▀███████▄▄ ▀███████▀ ▄▄████████▀
|
||||||
|
▀█████████▄▄▄ ▄▄▄██████████▀
|
||||||
|
▀███████████████████████████████████▀▀
|
||||||
|
▀▀███████████████████████████▀▀
|
||||||
|
▀▀▀███████████████▀▀▀
|
||||||
|
|
||||||
|
|
||||||
|
▐█▌ ▐█▌ ▐█▌▐█▌ ██ ██
|
||||||
|
▐█▌ ▐█▌ ▄▄▄▄ ▐█▌▐█▌ ██ ▄▄▄▄▄ ██ ▄▄▄ ▄▄▄▄▄
|
||||||
|
▐███████▌▄██▀▀██▄▐█▌▐█▌ ██ ██▀▀▀█▌ ███▀▀██▄ ██▀▀▀██
|
||||||
|
▐█▌ ▐█▌██▄▄▄▄██▐█▌▐█▌ ██ ▄▄███▌ ██ ██ ▀███▄▄
|
||||||
|
▐█▌ ▐█▌██▄ ▄▄▐█▌▐█▌ ██ ██▀ ▄█▌ ██▄ ▄██ ▄▄ ▀▀██
|
||||||
|
▐█▌ ▐█▌ ▀████▀ ▐█▌▐█▌ █████▌▀███▀██▌██▀███▀ ▀█████▀
|
||||||
|
|
||||||
|
|
||||||
|
·█████████████████████████████████████████████████████████████████████·
|
||||||
|
·█████████████████████████████████████████████████████████████████████·
|
||||||
|
· ·
|
||||||
|
:▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒:
|
||||||
|
¡▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒¡
|
||||||
|
│ │
|
||||||
|
├─┬─────────────────────────────────────────────────────────────────┬─┤
|
||||||
|
▒ █ PRO NOUNS KEYGENDERATOR FOR WINDOWS █ ▒
|
||||||
|
▒ █────────────────────────────────╥────────────────────────────────█ ▒
|
||||||
|
▒ █ developer...: [ flurry ] █ name.....: [ keygendr.exe ] █ ▒
|
||||||
|
▒ █ tester......: [ LiFFY ] █ OS.......: [ WinAll ] █ ▒
|
||||||
|
▒ █ release date: [ 17 mar 2024 ] █ disks....: [ 01 x 1.44 ] █ ▒
|
||||||
|
▒ █ █ █ ▒
|
||||||
|
▒ █ ╔══════════════╗ █ █ ▒
|
||||||
|
▒ █───■║║ RELEASE INFO ║║■─────────╨────────────────────────────────█ ▒
|
||||||
|
▒ █ ╚══════════════╝ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ This is a port of the JavaScript version, by Luna. Check out █ ▒
|
||||||
|
▒ █ her version here: █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ http://tiredand.gay/keygender/ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ This program should be compatible with Windows 2000 and up. █ ▒
|
||||||
|
▒ █ You might be able to run this on Windows 9x, but beware: when █ ▒
|
||||||
|
▒ █ we tested it, the system struggled to keep up! It's best on █ ▒
|
||||||
|
▒ █ Windows XP anyway. █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ It seems to run fine in Wine too, including under box86, just █ ▒
|
||||||
|
▒ █ in case you need Pro Nouns on another little-endian OS. █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ ╔══════════════╗ █ ▒
|
||||||
|
▒ █────■║║ INSTALL INFO ║║■─────────────────────────────────────────█ ▒
|
||||||
|
▒ █ ╚══════════════╝ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Just open the EXE and enter the edition of Pro Nouns you want █ ▒
|
||||||
|
▒ █ to use. █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Enjoy! █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ ╔════════╗ █ ▒
|
||||||
|
▒ █───────■║║ GREETS ║║■────────────────────────────────────────────█ ▒
|
||||||
|
▒ █ ╚════════╝ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Greets fly out to HeLL LaBS members! █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Personal greets to: █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ » LiF and iliana, for their assistance in both testing and █ ▒
|
||||||
|
▒ █ troubleshooting issues with the nightmare that is Win32 █ ▒
|
||||||
|
▒ █ » Luna, for making the original that inspired me to █ ▒
|
||||||
|
▒ █ relearn the old Win32 API █ ▒
|
||||||
|
▒ █ » libXMP devs, for making a tracker library that works so █ ▒
|
||||||
|
▒ █ well on any platform I've thrown it at with few issues █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ ╔════════════╗ █ ▒
|
||||||
|
▒ █─────■║║ GROUP INFO ║║■──────────────────────────────────────────█ ▒
|
||||||
|
▒ █ ╚════════════╝ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ irc...........: unlisted ;) █ ▒
|
||||||
|
▒ █ email.........: unlisted ;) █ ▒
|
||||||
|
▒ █ world wide web: http://cohost.org/hell-labs █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ ╔════════╗ █ ▒
|
||||||
|
▒ █───────■║║ LEGAL? ║║■────────────────────────────────────────────█ ▒
|
||||||
|
▒ █ ╚════════╝ █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ The source code for this software is provided at the below █ ▒
|
||||||
|
▒ █ link, under the BBHLv1: █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ http://git.2ki.xyz/hell-labs/keygendr32 █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ This software also uses libxmp, under the MIT license: █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Extended Module Player █ ▒
|
||||||
|
▒ █ Copyright (C) 1996-2023 Claudio Matsuoka and █ ▒
|
||||||
|
▒ █ Hipolito Carraro Jr █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ Permission is hereby granted, free of charge, to any person █ ▒
|
||||||
|
▒ █ obtaining a copy of this software and associated █ ▒
|
||||||
|
▒ █ documentation files (the "Software"), to deal in the █ ▒
|
||||||
|
▒ █ Software without restriction, including without limitation █ ▒
|
||||||
|
▒ █ the rights to use, copy, modify, merge, publish, █ ▒
|
||||||
|
▒ █ distribute, sublicense, and/or sell copies of the Software, █ ▒
|
||||||
|
▒ █ and to permit persons to whom the Software is furnished to █ ▒
|
||||||
|
▒ █ do so, subject to the following conditions: █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ The above copyright notice and this permission notice shall █ ▒
|
||||||
|
▒ █ be included in all copies or substantial portions of the █ ▒
|
||||||
|
▒ █ Software. █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ █ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY █ ▒
|
||||||
|
▒ █ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE █ ▒
|
||||||
|
▒ █ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR █ ▒
|
||||||
|
▒ █ PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS █ ▒
|
||||||
|
▒ █ OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR █ ▒
|
||||||
|
▒ █ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR █ ▒
|
||||||
|
▒ █ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE █ ▒
|
||||||
|
▒ █ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. █ ▒
|
||||||
|
▒ █ █ ▒
|
||||||
|
▒ ■ ■ ▒
|
||||||
|
▒ ! ╒═══════════════╕ ! ▒
|
||||||
|
▒─────────────────────────┤│ CALL ENDED... │├─────────────────────────▒
|
||||||
|
╘═══════════════╛
|
||||||
|
|
Loading…
Reference in a new issue